@@ -46,7 +46,7 @@ bool ptrack_enable = false;
46
46
static Buffer ptrack_readbuf (RelFileNode rnode , BlockNumber blkno , bool extend );
47
47
static void ptrack_extend (SMgrRelation smgr , BlockNumber nvmblocks );
48
48
static void ptrack_set (BlockNumber heapBlk , Buffer vmBuf );
49
- void SetPtrackClearLSN (void );
49
+ void SetPtrackClearLSN (bool set_invalid );
50
50
Datum pg_ptrack_test (PG_FUNCTION_ARGS );
51
51
52
52
void
@@ -263,23 +263,29 @@ void ptrack_clear(void)
263
263
systable_endscan (scan );
264
264
heap_close (catalog , AccessShareLock );
265
265
266
- SetPtrackClearLSN ();
266
+ SetPtrackClearLSN (false );
267
267
}
268
268
269
269
void
270
- SetPtrackClearLSN (void )
270
+ SetPtrackClearLSN (bool set_invalid )
271
271
{
272
272
int fd ;
273
- XLogRecPtr ptr = GetXLogInsertRecPtr ();
273
+ XLogRecPtr ptr ;
274
+ char path [MAXPGPATH ];
275
+ if (set_invalid )
276
+ ptr = InvalidXLogRecPtr ;
277
+ else
278
+ ptr = GetXLogInsertRecPtr ();
279
+ snprintf (path , sizeof (path ), "%s/global/ptrack_control" , DataDir );
274
280
//LWLockAcquire(ControlFileLock, LW_EXCLUSIVE);
275
- fd = BasicOpenFile ("global/ptrack_control" ,
276
- O_RDWR | O_CREAT | PG_BINARY ,
281
+ fd = BasicOpenFile (path ,
282
+ O_RDWR | O_CREAT | O_EXCL | PG_BINARY ,
277
283
S_IRUSR | S_IWUSR );
278
284
if (fd < 0 )
279
285
ereport (PANIC ,
280
286
(errcode_for_file_access (),
281
287
errmsg ("could not create ptrack control file \"%s\": %m" ,
282
- "global/ptrack_control" )));
288
+ path )));
283
289
284
290
errno = 0 ;
285
291
if (write (fd , & ptr , sizeof (XLogRecPtr )) != sizeof (XLogRecPtr ))
@@ -460,3 +466,11 @@ pg_ptrack_test(PG_FUNCTION_ARGS)
460
466
result_array = construct_array (result_elems , 2 , 23 , 4 , true, 'i' );
461
467
PG_RETURN_ARRAYTYPE_P (result_array );
462
468
}
469
+
470
+ void
471
+ assign_ptrack_enable (bool newval , void * extra )
472
+ {
473
+ /*elog(WARNING, "assign_ptrack_enable:%s %i", newval ? "true" : "false", IsInitProcessingMode());
474
+ if(IsInitProcessingMode() && !newval)
475
+ SetPtrackClearLSN(true);*/
476
+ }
0 commit comments