@@ -2407,19 +2407,32 @@ make_pagemap_from_ptrack(parray *files)
2407
2407
*/
2408
2408
start_addr = (RELSEG_SIZE /HEAPBLOCKS_PER_BYTE )* file -> segno ;
2409
2409
2410
- if (start_addr + RELSEG_SIZE /HEAPBLOCKS_PER_BYTE > ptrack_nonparsed_size )
2410
+ /*
2411
+ * If file segment was created after we have read ptrack,
2412
+ * we won't have a bitmap for this segment.
2413
+ */
2414
+ if (start_addr > ptrack_nonparsed_size )
2411
2415
{
2412
- file -> pagemap . bitmapsize = ptrack_nonparsed_size - start_addr ;
2413
- elog ( VERBOSE , "pagemap size: %i" , file -> pagemap . bitmapsize ) ;
2416
+ elog ( VERBOSE , "Ptrack is missing for file: %s" , file -> path ) ;
2417
+ file -> pagemap_isabsent = true ;
2414
2418
}
2415
2419
else
2416
2420
{
2417
- file -> pagemap .bitmapsize = RELSEG_SIZE /HEAPBLOCKS_PER_BYTE ;
2418
- elog (VERBOSE , "pagemap size: %i" , file -> pagemap .bitmapsize );
2419
- }
2420
2421
2421
- file -> pagemap .bitmap = pg_malloc (file -> pagemap .bitmapsize );
2422
- memcpy (file -> pagemap .bitmap , ptrack_nonparsed + start_addr , file -> pagemap .bitmapsize );
2422
+ if (start_addr + RELSEG_SIZE /HEAPBLOCKS_PER_BYTE > ptrack_nonparsed_size )
2423
+ {
2424
+ file -> pagemap .bitmapsize = ptrack_nonparsed_size - start_addr ;
2425
+ elog (VERBOSE , "pagemap size: %i" , file -> pagemap .bitmapsize );
2426
+ }
2427
+ else
2428
+ {
2429
+ file -> pagemap .bitmapsize = RELSEG_SIZE /HEAPBLOCKS_PER_BYTE ;
2430
+ elog (VERBOSE , "pagemap size: %i" , file -> pagemap .bitmapsize );
2431
+ }
2432
+
2433
+ file -> pagemap .bitmap = pg_malloc (file -> pagemap .bitmapsize );
2434
+ memcpy (file -> pagemap .bitmap , ptrack_nonparsed + start_addr , file -> pagemap .bitmapsize );
2435
+ }
2423
2436
}
2424
2437
else
2425
2438
{
0 commit comments