@@ -159,74 +159,112 @@ typedef XLogLongPageHeaderData *XLogLongPageHeader;
159
159
#define XLOG_FNAME_LEN 24
160
160
161
161
/*
162
- * Generate a WAL segment file name. Do not use thismacro in a helper
162
+ * Generate a WAL segment file name. Do not use thisfunction in a helper
163
163
* function allocating the result generated.
164
164
*/
165
- #define XLogFileName (fname ,tli ,logSegNo ,wal_segsz_bytes )\
166
- snprintf(fname, MAXFNAMELEN, "%08X%08X%08X", tli,\
167
- (uint32) ((logSegNo) / XLogSegmentsPerXLogId(wal_segsz_bytes)), \
168
- (uint32) ((logSegNo) % XLogSegmentsPerXLogId(wal_segsz_bytes)))
165
+ static inline void
166
+ XLogFileName (char * fname ,TimeLineID tli ,XLogSegNo logSegNo ,int wal_segsz_bytes )
167
+ {
168
+ snprintf (fname ,MAXFNAMELEN ,"%08X%08X%08X" ,tli ,
169
+ (uint32 ) (logSegNo /XLogSegmentsPerXLogId (wal_segsz_bytes )),
170
+ (uint32 ) (logSegNo %XLogSegmentsPerXLogId (wal_segsz_bytes )));
171
+ }
169
172
170
- #define XLogFileNameById (fname ,tli ,log ,seg )\
171
- snprintf(fname, MAXFNAMELEN, "%08X%08X%08X", tli, log, seg)
173
+ static inline void
174
+ XLogFileNameById (char * fname ,TimeLineID tli ,uint32 log ,uint32 seg )
175
+ {
176
+ snprintf (fname ,MAXFNAMELEN ,"%08X%08X%08X" ,tli ,log ,seg );
177
+ }
172
178
173
- #define IsXLogFileName (fname ) \
174
- (strlen(fname) == XLOG_FNAME_LEN && \
175
- strspn(fname, "0123456789ABCDEF") == XLOG_FNAME_LEN)
179
+ static inline bool
180
+ IsXLogFileName (const char * fname )
181
+ {
182
+ return (strlen (fname )== XLOG_FNAME_LEN && \
183
+ strspn (fname ,"0123456789ABCDEF" )== XLOG_FNAME_LEN );
184
+ }
176
185
177
186
/*
178
187
* XLOG segment with .partial suffix. Used by pg_receivewal and at end of
179
188
* archive recovery, when we want to archive a WAL segment but it might not
180
189
* be complete yet.
181
190
*/
182
- #define IsPartialXLogFileName (fname )\
183
- (strlen(fname) == XLOG_FNAME_LEN + strlen(".partial") &&\
184
- strspn(fname, "0123456789ABCDEF") == XLOG_FNAME_LEN &&\
185
- strcmp((fname) + XLOG_FNAME_LEN, ".partial") == 0)
186
-
187
- #define XLogFromFileName (fname ,tli ,logSegNo ,wal_segsz_bytes )\
188
- do {\
189
- uint32 log;\
190
- uint32 seg;\
191
- sscanf(fname, "%08X%08X%08X", tli, &log, &seg); \
192
- *logSegNo = (uint64) log * XLogSegmentsPerXLogId(wal_segsz_bytes) + seg; \
193
- } while (0)
194
-
195
- #define XLogFilePath (path ,tli ,logSegNo ,wal_segsz_bytes )\
196
- snprintf(path, MAXPGPATH, XLOGDIR "/%08X%08X%08X", tli,\
197
- (uint32) ((logSegNo) / XLogSegmentsPerXLogId(wal_segsz_bytes)), \
198
- (uint32) ((logSegNo) % XLogSegmentsPerXLogId(wal_segsz_bytes)))
199
-
200
- #define TLHistoryFileName (fname ,tli )\
201
- snprintf(fname, MAXFNAMELEN, "%08X.history", tli)
202
-
203
- #define IsTLHistoryFileName (fname )\
204
- (strlen(fname) == 8 + strlen(".history") &&\
205
- strspn(fname, "0123456789ABCDEF") == 8 &&\
206
- strcmp((fname) + 8, ".history") == 0)
207
-
208
- #define TLHistoryFilePath (path ,tli )\
209
- snprintf(path, MAXPGPATH, XLOGDIR "/%08X.history", tli)
210
-
211
- #define StatusFilePath (path ,xlog ,suffix )\
212
- snprintf(path, MAXPGPATH, XLOGDIR "/archive_status/%s%s", xlog, suffix)
213
-
214
- #define BackupHistoryFileName (fname ,tli ,logSegNo ,startpoint ,wal_segsz_bytes ) \
215
- snprintf(fname, MAXFNAMELEN, "%08X%08X%08X.%08X.backup", tli, \
216
- (uint32) ((logSegNo) / XLogSegmentsPerXLogId(wal_segsz_bytes)), \
217
- (uint32) ((logSegNo) % XLogSegmentsPerXLogId(wal_segsz_bytes)), \
218
- (uint32) (XLogSegmentOffset(startpoint, wal_segsz_bytes)))
219
-
220
- #define IsBackupHistoryFileName (fname ) \
221
- (strlen(fname) > XLOG_FNAME_LEN && \
222
- strspn(fname, "0123456789ABCDEF") == XLOG_FNAME_LEN && \
223
- strcmp((fname) + strlen(fname) - strlen(".backup"), ".backup") == 0)
224
-
225
- #define BackupHistoryFilePath (path ,tli ,logSegNo ,startpoint ,wal_segsz_bytes )\
226
- snprintf(path, MAXPGPATH, XLOGDIR "/%08X%08X%08X.%08X.backup", tli, \
227
- (uint32) ((logSegNo) / XLogSegmentsPerXLogId(wal_segsz_bytes)), \
228
- (uint32) ((logSegNo) % XLogSegmentsPerXLogId(wal_segsz_bytes)), \
229
- (uint32) (XLogSegmentOffset((startpoint), wal_segsz_bytes)))
191
+ static inline bool
192
+ IsPartialXLogFileName (const char * fname )
193
+ {
194
+ return (strlen (fname )== XLOG_FNAME_LEN + strlen (".partial" )&&
195
+ strspn (fname ,"0123456789ABCDEF" )== XLOG_FNAME_LEN &&
196
+ strcmp (fname + XLOG_FNAME_LEN ,".partial" )== 0 );
197
+ }
198
+
199
+ static inline void
200
+ XLogFromFileName (const char * fname ,TimeLineID * tli ,XLogSegNo * logSegNo ,int wal_segsz_bytes )
201
+ {
202
+ uint32 log ;
203
+ uint32 seg ;
204
+
205
+ sscanf (fname ,"%08X%08X%08X" ,tli ,& log ,& seg );
206
+ * logSegNo = (uint64 )log * XLogSegmentsPerXLogId (wal_segsz_bytes )+ seg ;
207
+ }
208
+
209
+ static inline void
210
+ XLogFilePath (char * path ,TimeLineID tli ,XLogSegNo logSegNo ,int wal_segsz_bytes )
211
+ {
212
+ snprintf (path ,MAXPGPATH ,XLOGDIR "/%08X%08X%08X" ,tli ,
213
+ (uint32 ) (logSegNo /XLogSegmentsPerXLogId (wal_segsz_bytes )),
214
+ (uint32 ) (logSegNo %XLogSegmentsPerXLogId (wal_segsz_bytes )));
215
+ }
216
+
217
+ static inline void
218
+ TLHistoryFileName (char * fname ,TimeLineID tli )
219
+ {
220
+ snprintf (fname ,MAXFNAMELEN ,"%08X.history" ,tli );
221
+ }
222
+
223
+ static inline bool
224
+ IsTLHistoryFileName (const char * fname )
225
+ {
226
+ return (strlen (fname )== 8 + strlen (".history" )&&
227
+ strspn (fname ,"0123456789ABCDEF" )== 8 &&
228
+ strcmp (fname + 8 ,".history" )== 0 );
229
+ }
230
+
231
+ static inline void
232
+ TLHistoryFilePath (char * path ,TimeLineID tli )
233
+ {
234
+ snprintf (path ,MAXPGPATH ,XLOGDIR "/%08X.history" ,tli );
235
+ }
236
+
237
+ static inline void
238
+ StatusFilePath (char * path ,const char * xlog ,const char * suffix )
239
+ {
240
+ snprintf (path ,MAXPGPATH ,XLOGDIR "/archive_status/%s%s" ,xlog ,suffix );
241
+ }
242
+
243
+ static inline void
244
+ BackupHistoryFileName (char * fname ,TimeLineID tli ,XLogSegNo logSegNo ,XLogRecPtr startpoint ,int wal_segsz_bytes )
245
+ {
246
+ snprintf (fname ,MAXFNAMELEN ,"%08X%08X%08X.%08X.backup" ,tli ,
247
+ (uint32 ) (logSegNo /XLogSegmentsPerXLogId (wal_segsz_bytes )),
248
+ (uint32 ) (logSegNo %XLogSegmentsPerXLogId (wal_segsz_bytes )),
249
+ (uint32 ) (XLogSegmentOffset (startpoint ,wal_segsz_bytes )));
250
+ }
251
+
252
+ static inline bool
253
+ IsBackupHistoryFileName (const char * fname )
254
+ {
255
+ return (strlen (fname )> XLOG_FNAME_LEN &&
256
+ strspn (fname ,"0123456789ABCDEF" )== XLOG_FNAME_LEN &&
257
+ strcmp (fname + strlen (fname )- strlen (".backup" ),".backup" )== 0 );
258
+ }
259
+
260
+ static inline void
261
+ BackupHistoryFilePath (char * path ,TimeLineID tli ,XLogSegNo logSegNo ,XLogRecPtr startpoint ,int wal_segsz_bytes )
262
+ {
263
+ snprintf (path ,MAXPGPATH ,XLOGDIR "/%08X%08X%08X.%08X.backup" ,tli ,
264
+ (uint32 ) (logSegNo /XLogSegmentsPerXLogId (wal_segsz_bytes )),
265
+ (uint32 ) (logSegNo %XLogSegmentsPerXLogId (wal_segsz_bytes )),
266
+ (uint32 ) (XLogSegmentOffset ((startpoint ),wal_segsz_bytes )));
267
+ }
230
268
231
269
/*
232
270
* Information logged when we detect a change in one of the parameters