summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPavan Deolasee2014-11-14 15:01:29 +0000
committerPavan Deolasee2015-04-15 05:46:39 +0000
commitdf34d71b549e92050ad39dbf208fc0f5e626b948 (patch)
treefa6b92dc90df01241f2ebee69845c77f48a4cdbd
parent329c7c557f8a2ee51b4a592bd8897ccc28b67a63 (diff)
Add missing gtm backup files to the repo
We missed them in commit f70597bb
-rw-r--r--src/gtm/main/gtm_backup.c90
-rw-r--r--src/include/gtm/gtm_backup.h31
2 files changed, 121 insertions, 0 deletions
diff --git a/src/gtm/main/gtm_backup.c b/src/gtm/main/gtm_backup.c
new file mode 100644
index 0000000000..5318996e25
--- /dev/null
+++ b/src/gtm/main/gtm_backup.c
@@ -0,0 +1,90 @@
+#include "gtm/gtm_c.h"
+#include "gtm/gtm_lock.h"
+#include "gtm/gtm_txn.h"
+#include "gtm/gtm_seq.h"
+#include "gtm/gtm_backup.h"
+#include "gtm/elog.h"
+
+GTM_RWLock gtm_bkup_lock;
+bool gtm_need_bkup;
+
+extern char GTMControlFile[];
+
+
+
+void GTM_WriteRestorePoint(void)
+{
+ FILE *f = fopen(GTMControlFile, "w");
+
+ if (f == NULL)
+ {
+ ereport(LOG, (errno,
+ errmsg("Cannot open control file"),
+ errhint("%s", strerror(errno))));
+ return;
+ }
+ GTM_RWLockAcquire(&gtm_bkup_lock, GTM_LOCKMODE_WRITE);
+ if (!gtm_need_bkup)
+ {
+ GTM_RWLockRelease(&gtm_bkup_lock);
+ return;
+ }
+ gtm_need_bkup = FALSE;
+ GTM_RWLockRelease(&gtm_bkup_lock);
+ GTM_WriteRestorePointXid(f);
+ GTM_WriteRestorePointSeq(f);
+ fclose(f);
+}
+
+void GTM_WriteBarrierBackup(char *barrier_id)
+{
+#define MyMAXPATH 1023
+
+ FILE *f;
+ char BarrierFilePath[MyMAXPATH+1];
+ extern char *GTMDataDir;
+
+ snprintf(BarrierFilePath, MyMAXPATH, "%s/GTM_%s.control", GTMDataDir, barrier_id);
+ if ((f = fopen(BarrierFilePath, "w")) == NULL)
+ {
+ ereport(LOG, (errno,
+ errmsg("Cannot open control file"),
+ errhint("%s", strerror(errno))));
+ return;
+ }
+ GTM_RWLockAcquire(&gtm_bkup_lock, GTM_LOCKMODE_WRITE);
+ gtm_need_bkup = FALSE;
+ GTM_RWLockRelease(&gtm_bkup_lock);
+ GTM_WriteRestorePointXid(f);
+ GTM_WriteRestorePointSeq(f);
+ fclose(f);
+}
+
+
+void GTM_MakeBackup(char *path)
+{
+ FILE *f = fopen(path, "w");
+
+ if (f == NULL)
+ {
+ ereport(LOG, (errno,
+ errmsg("Cannot open backup file %s", path),
+ errhint("%s", strerror(errno))));
+ return;
+ }
+ GTM_SaveTxnInfo(f);
+ GTM_SaveSeqInfo(f);
+ fclose(f);
+}
+
+void GTM_SetNeedBackup(void)
+{
+ GTM_RWLockAcquire(&gtm_bkup_lock, GTM_LOCKMODE_READ);
+ gtm_need_bkup = TRUE;
+ GTM_RWLockRelease(&gtm_bkup_lock);
+}
+
+bool GTM_NeedBackup(void)
+{
+ return gtm_need_bkup;
+}
diff --git a/src/include/gtm/gtm_backup.h b/src/include/gtm/gtm_backup.h
new file mode 100644
index 0000000000..4e6893344a
--- /dev/null
+++ b/src/include/gtm/gtm_backup.h
@@ -0,0 +1,31 @@
+/*-------------------------------------------------------------------------
+ *
+ * gtm_backup.h
+ *
+ *
+ * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ * Portions Copyright (c) 2010-2013 Postgres-XC Development Group
+ *
+ * $PostgreSQL$
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef _GTM_BACKUP_H
+#define _GTM_BACKUP_H
+
+#include "gtm/gtm_c.h"
+#include "gtm/gtm_lock.h"
+#include "gtm/gtm_seq.h"
+
+extern GTM_RWLock gtm_bkup_lock;
+
+#define RestoreDuration 2000
+
+extern void GTM_WriteRestorePoint(void);
+extern void GTM_MakeBackup(char *path);
+extern void GTM_SetNeedBackup(void);
+extern bool GTM_NeedBackup(void);
+extern void GTM_WriteBarrierBackup(char *barrier_id);
+
+#endif /* GTM_BACKUP_H */