diff --git a/src/include/access/xlog_internal.h b/src/include/access/xlog_internal.h index e3f616a..08d6494 100644 --- a/src/include/access/xlog_internal.h +++ b/src/include/access/xlog_internal.h @@ -93,10 +93,12 @@ typedef XLogLongPageHeaderData *XLogLongPageHeader; extern uint32 XLogSegSize; #define XLOG_SEG_SIZE XLogSegSize -/* XLogSegSize can range from 1MB to 1GB */ -#define XLogSegMinSize 1024 * 1024 +/* XLogSegSize can range from 16MB to 1GB */ +#define XLogSegMinSize 1024 * 1024 * 16 #define XLogSegMaxSize 1024 * 1024 * 1024 +#define XLogSegMinSizeBits 24 + /* Default number of min and max wal segments */ #define DEFAULT_MIN_WAL_SEGS 5 #define DEFAULT_MAX_WAL_SEGS 64 @@ -158,10 +160,14 @@ extern uint32 XLogSegSize; /* Length of XLog file name */ #define XLOG_FNAME_LEN 24 +#define XLogSegNoLower(logSegNo) \ + (((logSegNo) % XLogSegmentsPerXLogId) * \ + (XLogSegSize >> XLogSegMinSizeBits)) + #define XLogFileName(fname, tli, logSegNo) \ snprintf(fname, MAXFNAMELEN, "%08X%08X%08X", tli, \ (uint32) ((logSegNo) / XLogSegmentsPerXLogId), \ - (uint32) ((logSegNo) % XLogSegmentsPerXLogId)) + (uint32) XLogSegNoLower(logSegNo)) #define XLogFileNameById(fname, tli, log, seg) \ snprintf(fname, MAXFNAMELEN, "%08X%08X%08X", tli, log, seg) @@ -181,17 +187,18 @@ extern uint32 XLogSegSize; strcmp((fname) + XLOG_FNAME_LEN, ".partial") == 0) #define XLogFromFileName(fname, tli, logSegNo) \ - do { \ - uint32 log; \ - uint32 seg; \ - sscanf(fname, "%08X%08X%08X", tli, &log, &seg); \ - *logSegNo = (uint64) log * XLogSegmentsPerXLogId + seg; \ + do { \ + uint32 log; \ + uint32 seg; \ + sscanf(fname, "%08X%08X%08X", tli, &log, &seg); \ + *logSegNo = (uint64) log * XLogSegmentsPerXLogId + \ + (seg / (XLogSegSize >> XLogSegMinSizeBits)); \ } while (0) #define XLogFilePath(path, tli, logSegNo) \ snprintf(path, MAXPGPATH, XLOGDIR "/%08X%08X%08X", tli, \ (uint32) ((logSegNo) / XLogSegmentsPerXLogId), \ - (uint32) ((logSegNo) % XLogSegmentsPerXLogId)) + (uint32) XLogSegNoLower(logSegNo)) #define TLHistoryFileName(fname, tli) \ snprintf(fname, MAXFNAMELEN, "%08X.history", tli) @@ -210,7 +217,7 @@ extern uint32 XLogSegSize; #define BackupHistoryFileName(fname, tli, logSegNo, offset) \ snprintf(fname, MAXFNAMELEN, "%08X%08X%08X.%08X.backup", tli, \ (uint32) ((logSegNo) / XLogSegmentsPerXLogId), \ - (uint32) ((logSegNo) % XLogSegmentsPerXLogId), offset) + (uint32) XLogSegNoLower(logSegNo), offset) #define IsBackupHistoryFileName(fname) \ (strlen(fname) > XLOG_FNAME_LEN && \ @@ -220,7 +227,7 @@ extern uint32 XLogSegSize; #define BackupHistoryFilePath(path, tli, logSegNo, offset) \ snprintf(path, MAXPGPATH, XLOGDIR "/%08X%08X%08X.%08X.backup", tli, \ (uint32) ((logSegNo) / XLogSegmentsPerXLogId), \ - (uint32) ((logSegNo) % XLogSegmentsPerXLogId), offset) + (uint32) XLogSegNoLower(logSegNo), offset) /* * Information logged when we detect a change in one of the parameters