Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commite9e25d9

Browse files
committed
Fix parsing db_oid from relation path in make_pagemap_from_ptrack()
1 parent737c8b0 commite9e25d9

File tree

1 file changed

+28
-13
lines changed

1 file changed

+28
-13
lines changed

‎backup.c

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -700,6 +700,8 @@ pg_ptrack_get_and_clear(Oid tablespace_oid, Oid db_oid, Oid rel_oid,
700700
res_db=pgut_execute(backup_conn,
701701
"SELECT datname FROM pg_database WHERE oid=$1",
702702
1, (constchar**)params);
703+
if (PQntuples(res_db)!=1||PQnfields(res_db)!=1)
704+
elog(ERROR,"cannot find database by oid %u",db_oid);
703705

704706
dbname=pstrdup(PQgetvalue(res_db,0,0));
705707
PQclear(res_db);
@@ -710,6 +712,9 @@ pg_ptrack_get_and_clear(Oid tablespace_oid, Oid db_oid, Oid rel_oid,
710712

711713
res=pgut_execute(tmp_conn,"SELECT pg_ptrack_get_and_clear($1, $2)",
712714
2, (constchar**)params);
715+
if (PQnfields(res)!=1)
716+
elog(ERROR,"cannot get ptrack file from database \"%s\" by tablespace oid %u and relation oid %u",
717+
dbname,tablespace_oid,rel_oid);
713718
result= (char*)PQunescapeBytea((unsignedchar*)PQgetvalue(res,0,0),
714719
result_size);
715720
PQclear(res);
@@ -1447,23 +1452,23 @@ process_block_change(ForkNumber forknum, RelFileNode rnode, BlockNumber blkno)
14471452
staticvoid
14481453
make_pagemap_from_ptrack(parray*files)
14491454
{
1450-
inti;
1455+
size_ti;
14511456

14521457
for (i=0;i<parray_num(files);i++)
14531458
{
1454-
pgFile*p= (pgFile*)parray_get(files,i);
1459+
pgFile*p= (pgFile*)parray_get(files,i);
14551460

14561461
if (p->ptrack_path!=NULL)
14571462
{
1458-
char*tablespace;
1459-
Oiddb_oid,
1460-
rel_oid,
1461-
tablespace_oid=0;
1462-
intsep_iter,
1463-
sep_count=0;
1464-
char*ptrack_nonparsed;
1465-
size_tptrack_nonparsed_size=0;
1466-
size_tstart_addr;
1463+
char*tablespace;
1464+
Oiddb_oid,
1465+
rel_oid,
1466+
tablespace_oid=0;
1467+
intsep_iter,
1468+
sep_count=0;
1469+
char*ptrack_nonparsed;
1470+
size_tptrack_nonparsed_size=0;
1471+
size_tstart_addr;
14671472

14681473
tablespace=strstr(p->ptrack_path,PG_TBLSPC_DIR);
14691474

@@ -1476,13 +1481,23 @@ make_pagemap_from_ptrack(parray *files)
14761481
* base/db_oid/rel_oid
14771482
*/
14781483
sep_iter=strlen(p->path);
1479-
while (sep_count!=2&&sep_iter >=0)
1484+
while (sep_iter >=0)
1485+
{
1486+
if (IS_DIR_SEP(p->path[sep_iter]))
1487+
sep_count++;
1488+
if (sep_count==2)
1489+
break;
14801490
sep_iter--;
1491+
}
1492+
1493+
if (sep_iter <=0)
1494+
elog(ERROR,"path of the file \"%s\" has wrong format",
1495+
p->path);
14811496

14821497
sscanf(p->path+sep_iter+1,"%u/%u",&db_oid,&rel_oid);
14831498

14841499
ptrack_nonparsed=pg_ptrack_get_and_clear(tablespace_oid,db_oid,
1485-
rel_oid,&ptrack_nonparsed_size);
1500+
rel_oid,&ptrack_nonparsed_size);
14861501

14871502
/* TODO What is 8? */
14881503
start_addr= (RELSEG_SIZE/8)*p->segno;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp