@@ -2407,19 +2407,32 @@ make_pagemap_from_ptrack(parray *files)
24072407 */
24082408 start_addr = (RELSEG_SIZE /HEAPBLOCKS_PER_BYTE )* file -> segno ;
24092409
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 )
24112415 {
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 ;
24142418 }
24152419 else
24162420 {
2417- file -> pagemap .bitmapsize = RELSEG_SIZE /HEAPBLOCKS_PER_BYTE ;
2418- elog (VERBOSE , "pagemap size: %i" , file -> pagemap .bitmapsize );
2419- }
24202421
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+ }
24232436 }
24242437 else
24252438 {
0 commit comments