diff options
author | Pavan Deolasee | 2014-11-14 15:01:29 +0000 |
---|---|---|
committer | Pavan Deolasee | 2015-04-15 05:46:39 +0000 |
commit | df34d71b549e92050ad39dbf208fc0f5e626b948 (patch) | |
tree | fa6b92dc90df01241f2ebee69845c77f48a4cdbd | |
parent | 329c7c557f8a2ee51b4a592bd8897ccc28b67a63 (diff) |
Add missing gtm backup files to the repo
We missed them in commit f70597bb
-rw-r--r-- | src/gtm/main/gtm_backup.c | 90 | ||||
-rw-r--r-- | src/include/gtm/gtm_backup.h | 31 |
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(>m_bkup_lock, GTM_LOCKMODE_WRITE); + if (!gtm_need_bkup) + { + GTM_RWLockRelease(>m_bkup_lock); + return; + } + gtm_need_bkup = FALSE; + GTM_RWLockRelease(>m_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(>m_bkup_lock, GTM_LOCKMODE_WRITE); + gtm_need_bkup = FALSE; + GTM_RWLockRelease(>m_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(>m_bkup_lock, GTM_LOCKMODE_READ); + gtm_need_bkup = TRUE; + GTM_RWLockRelease(>m_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 */ |