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

Commit908a5ad

Browse files
committed
introduce ptrack_parse_version_string() and new ptrack version numbering schema
1 parent4188a69 commit908a5ad

File tree

3 files changed

+40
-30
lines changed

3 files changed

+40
-30
lines changed

‎src/backup.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ do_backup_instance(PGconn *backup_conn, PGNodeInfo *nodeInfo, bool no_sync, bool
219219
{
220220
XLogRecPtrptrack_lsn=get_last_ptrack_lsn(backup_conn,nodeInfo);
221221

222-
if (nodeInfo->ptrack_version_num<20)
222+
if (nodeInfo->ptrack_version_num<200)
223223
{
224224
// backward compatibility kludge: use Stop LSN for ptrack 1.x,
225225
if (ptrack_lsn>prev_backup->stop_lsn||ptrack_lsn==InvalidXLogRecPtr)
@@ -408,14 +408,14 @@ do_backup_instance(PGconn *backup_conn, PGNodeInfo *nodeInfo, bool no_sync, bool
408408
/*
409409
* Build the page map from ptrack information.
410410
*/
411-
if (nodeInfo->ptrack_version_num >=20)
411+
if (nodeInfo->ptrack_version_num >=200)
412412
make_pagemap_from_ptrack_2(backup_files_list,backup_conn,
413413
nodeInfo->ptrack_schema,
414414
nodeInfo->ptrack_version_num,
415415
prev_backup_start_lsn);
416-
elseif (nodeInfo->ptrack_version_num==15||
417-
nodeInfo->ptrack_version_num==16||
418-
nodeInfo->ptrack_version_num==17)
416+
elseif (nodeInfo->ptrack_version_num==105||
417+
nodeInfo->ptrack_version_num==106||
418+
nodeInfo->ptrack_version_num==107)
419419
make_pagemap_from_ptrack_1(backup_files_list,backup_conn);
420420
}
421421

‎src/data.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ prepare_page(ConnectionArgs *conn_arg,
300300
* Under high write load it's possible that we've read partly
301301
* flushed page, so try several times before throwing an error.
302302
*/
303-
if (backup_mode!=BACKUP_MODE_DIFF_PTRACK||ptrack_version_num >=20)
303+
if (backup_mode!=BACKUP_MODE_DIFF_PTRACK||ptrack_version_num >=200)
304304
{
305305
intrc=0;
306306
while (!page_is_valid&&try_again--)
@@ -400,7 +400,7 @@ prepare_page(ConnectionArgs *conn_arg,
400400
* We do this only in the cases of PTRACK 1.x versions backup
401401
*/
402402
if (backup_mode==BACKUP_MODE_DIFF_PTRACK
403-
&& (ptrack_version_num >=15&&ptrack_version_num<20))
403+
&& (ptrack_version_num >=105&&ptrack_version_num<200))
404404
{
405405
intrc=0;
406406
size_tpage_size=0;

‎src/ptrack.c

Lines changed: 33 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,23 @@ make_pagemap_from_ptrack_1(parray *files, PGconn *backup_conn)
139139
}
140140
}
141141

142+
/*
143+
* Parse a string like "2.1" into int
144+
* result: int by formula major_number * 100 + minor_number
145+
* or -1 if string cannot be parsed
146+
*/
147+
staticint
148+
ptrack_parse_version_string(constchar*version_str)
149+
{
150+
intma,mi;
151+
intsscanf_readed_count;
152+
if (sscanf(version_str,"%u.%2u%n",&ma,&mi,&sscanf_readed_count)!=2)
153+
return-1;
154+
if (sscanf_readed_count!=strlen(version_str))
155+
return-1;
156+
returnma*100+mi;
157+
}
158+
142159
/* Check if the instance supports compatible version of ptrack,
143160
* fill-in version number if it does.
144161
* Also for ptrack 2.x save schema namespace.
@@ -148,6 +165,7 @@ get_ptrack_version(PGconn *backup_conn, PGNodeInfo *nodeInfo)
148165
{
149166
PGresult*res_db;
150167
char*ptrack_version_str;
168+
intptrack_version_num;
151169

152170
res_db=pgut_execute(backup_conn,
153171
"SELECT extnamespace::regnamespace, extversion "
@@ -191,24 +209,16 @@ get_ptrack_version(PGconn *backup_conn, PGNodeInfo *nodeInfo)
191209
ptrack_version_str=PQgetvalue(res_db,0,0);
192210
}
193211

194-
if (strcmp(ptrack_version_str,"1.5")==0)
195-
nodeInfo->ptrack_version_num=15;
196-
elseif (strcmp(ptrack_version_str,"1.6")==0)
197-
nodeInfo->ptrack_version_num=16;
198-
elseif (strcmp(ptrack_version_str,"1.7")==0)
199-
nodeInfo->ptrack_version_num=17;
200-
elseif (strcmp(ptrack_version_str,"2.0")==0)
201-
nodeInfo->ptrack_version_num=20;
202-
elseif (strcmp(ptrack_version_str,"2.1")==0)
203-
nodeInfo->ptrack_version_num=21;
204-
elseif (strcmp(ptrack_version_str,"2.2")==0)
205-
nodeInfo->ptrack_version_num=22;
206-
else
207-
elog(WARNING,"Update your ptrack to the version 2.1 or upper. Current version is %s",
212+
ptrack_version_num=ptrack_parse_version_string(ptrack_version_str);
213+
if (ptrack_version_num==-1)
214+
/* leave default nodeInfo->ptrack_version_num = 0 from pgNodeInit() */
215+
elog(WARNING,"Cannot parse ptrack version string \"%s\"",
208216
ptrack_version_str);
217+
else
218+
nodeInfo->ptrack_version_num=ptrack_version_num;
209219

210220
/* ptrack 1.X is buggy, so fall back to DELTA backup strategy for safety */
211-
if (nodeInfo->ptrack_version_num >=15&&nodeInfo->ptrack_version_num<20)
221+
if (nodeInfo->ptrack_version_num >=105&&nodeInfo->ptrack_version_num<200)
212222
{
213223
if (current.backup_mode==BACKUP_MODE_DIFF_PTRACK)
214224
{
@@ -231,12 +241,12 @@ pg_ptrack_enable(PGconn *backup_conn, int ptrack_version_num)
231241
PGresult*res_db;
232242
boolresult= false;
233243

234-
if (ptrack_version_num<20)
244+
if (ptrack_version_num<200)
235245
{
236246
res_db=pgut_execute(backup_conn,"SHOW ptrack_enable",0,NULL);
237247
result=strcmp(PQgetvalue(res_db,0,0),"on")==0;
238248
}
239-
elseif (ptrack_version_num==20)
249+
elseif (ptrack_version_num==200)
240250
{
241251
res_db=pgut_execute(backup_conn,"SHOW ptrack_map_size",0,NULL);
242252
result=strcmp(PQgetvalue(res_db,0,0),"0")!=0;
@@ -270,7 +280,7 @@ pg_ptrack_clear(PGconn *backup_conn, int ptrack_version_num)
270280
char*params[2];
271281

272282
// FIXME Perform this check on caller's side
273-
if (ptrack_version_num >=20)
283+
if (ptrack_version_num >=200)
274284
return;
275285

276286
params[0]=palloc(64);
@@ -472,14 +482,14 @@ get_last_ptrack_lsn(PGconn *backup_conn, PGNodeInfo *nodeInfo)
472482
uint32lsn_lo;
473483
XLogRecPtrlsn;
474484

475-
if (nodeInfo->ptrack_version_num<20)
485+
if (nodeInfo->ptrack_version_num<200)
476486
res=pgut_execute(backup_conn,"SELECT pg_catalog.pg_ptrack_control_lsn()",
477487
0,NULL);
478488
else
479489
{
480490
charquery[128];
481491

482-
if (nodeInfo->ptrack_version_num==20)
492+
if (nodeInfo->ptrack_version_num==200)
483493
sprintf(query,"SELECT %s.pg_ptrack_control_lsn()",nodeInfo->ptrack_schema);
484494
else
485495
sprintf(query,"SELECT %s.ptrack_init_lsn()",nodeInfo->ptrack_schema);
@@ -537,7 +547,7 @@ pg_ptrack_get_block(ConnectionArgs *arguments,
537547

538548
// elog(LOG, "db %i pg_ptrack_get_block(%i, %i, %u)",dbOid, tblsOid, relOid, blknum);
539549

540-
if (ptrack_version_num<20)
550+
if (ptrack_version_num<200)
541551
res=pgut_execute_parallel(arguments->conn,
542552
arguments->cancel_conn,
543553
"SELECT pg_catalog.pg_ptrack_get_block_2($1, $2, $3, $4)",
@@ -550,7 +560,7 @@ pg_ptrack_get_block(ConnectionArgs *arguments,
550560
if (!ptrack_schema)
551561
elog(ERROR,"Schema name of ptrack extension is missing");
552562

553-
if (ptrack_version_num==20)
563+
if (ptrack_version_num==200)
554564
sprintf(query,"SELECT %s.pg_ptrack_get_block($1, $2, $3, $4)",ptrack_schema);
555565
else
556566
elog(ERROR,"ptrack >= 2.1.0 does not support pg_ptrack_get_block()");
@@ -614,7 +624,7 @@ pg_ptrack_get_pagemapset(PGconn *backup_conn, const char *ptrack_schema,
614624
if (!ptrack_schema)
615625
elog(ERROR,"Schema name of ptrack extension is missing");
616626

617-
if (ptrack_version_num==20)
627+
if (ptrack_version_num==200)
618628
sprintf(query,"SELECT path, pagemap FROM %s.pg_ptrack_get_pagemapset($1) ORDER BY 1",
619629
ptrack_schema);
620630
else

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp