0001-expose-xlog-backup-status.patch
application/octet-stream
Filename: 0001-expose-xlog-backup-status.patch
Type: application/octet-stream
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: unified
Series: patch 0001
| File | + | − |
|---|---|---|
| src/backend/access/transam/xlog.c | 29 | 0 |
| src/include/access/xlog.h | 1 | 0 |
diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index 596d2ca5836..64a4cfd4ae0 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -9151,6 +9151,35 @@ get_backup_status(void)
return sessionBackupState;
}
+/*
+ * XLogBackupStatus
+ *
+ * Returns true if any backup is currently in progress on this server (across all sessions),
+ * and optionally returns the LSN of the latest checkpoint redo location used as a starting
+ * point for an online backup (if lastBackupStart is not NULL).
+ *
+ * Note: We must hold WALInsertLock to read runningBackups and lastBackupStart to ensure
+ * consistent access to the shared memory values.
+ */
+bool
+XLogBackupStatus(XLogRecPtr *lastBackupStart)
+{
+ bool result;
+ XLogRecPtr lsn = InvalidXLogRecPtr;
+
+ WALInsertLockAcquireExclusive();
+ result = (XLogCtl->Insert.runningBackups > 0);
+ if (lastBackupStart)
+ lsn = XLogCtl->Insert.lastBackupStart;
+ WALInsertLockRelease();
+
+ if (lastBackupStart)
+ *lastBackupStart = lsn;
+
+ return result;
+}
+
+
/*
* do_pg_backup_stop
*
diff --git a/src/include/access/xlog.h b/src/include/access/xlog.h
index adddac6710e..c5a326c98e2 100644
--- a/src/include/access/xlog.h
+++ b/src/include/access/xlog.h
@@ -299,6 +299,7 @@ extern void do_pg_backup_stop(BackupState *state, bool waitforarchive);
extern void do_pg_abort_backup(int code, Datum arg);
extern void register_persistent_abort_backup_handler(void);
extern SessionBackupState get_backup_status(void);
+extern bool XLogBackupStatus(XLogRecPtr *lastBackupStart);
/* File path names (all relative to $PGDATA) */
#define RECOVERY_SIGNAL_FILE "recovery.signal"