Last active
August 29, 2015 14:26
-
-
Save macdice/b7e5f206533a8da826ce to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/src/backend/replication/syncrep.c b/src/backend/replication/syncrep.c | |
index 325239d..2e18768 100644 | |
--- a/src/backend/replication/syncrep.c | |
+++ b/src/backend/replication/syncrep.c | |
@@ -462,6 +462,11 @@ SyncRepReleaseWaiters(void) | |
walsndctl->lsn[SYNC_REP_WAIT_FLUSH] = MyWalSnd->flush; | |
numflush = SyncRepWakeQueue(false, SYNC_REP_WAIT_FLUSH); | |
} | |
+ if (walsndctl->lsn[SYNC_REP_WAIT_APPLY] < MyWalSnd->apply) | |
+ { | |
+ walsndctl->lsn[SYNC_REP_WAIT_APPLY] = MyWalSnd->apply; | |
+ numflush = SyncRepWakeQueue(false, SYNC_REP_WAIT_APPLY); | |
+ } | |
LWLockRelease(SyncRepLock); | |
@@ -728,6 +733,9 @@ assign_synchronous_commit(int newval, void *extra) | |
case SYNCHRONOUS_COMMIT_REMOTE_FLUSH: | |
SyncRepWaitMode = SYNC_REP_WAIT_FLUSH; | |
break; | |
+ case SYNCHRONOUS_COMMIT_REMOTE_APPLY: | |
+ SyncRepWaitMode = SYNC_REP_WAIT_APPLY; | |
+ break; | |
default: | |
SyncRepWaitMode = SYNC_REP_NO_WAIT; | |
break; | |
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c | |
index 1b7b914..2673fc0 100644 | |
--- a/src/backend/utils/misc/guc.c | |
+++ b/src/backend/utils/misc/guc.c | |
@@ -351,6 +351,7 @@ static const struct config_enum_entry constraint_exclusion_options[] = { | |
static const struct config_enum_entry synchronous_commit_options[] = { | |
{"local", SYNCHRONOUS_COMMIT_LOCAL_FLUSH, false}, | |
{"remote_write", SYNCHRONOUS_COMMIT_REMOTE_WRITE, false}, | |
+ {"apply", SYNCHRONOUS_COMMIT_REMOTE_APPLY, false}, | |
{"on", SYNCHRONOUS_COMMIT_ON, false}, | |
{"off", SYNCHRONOUS_COMMIT_OFF, false}, | |
{"true", SYNCHRONOUS_COMMIT_ON, true}, | |
diff --git a/src/include/access/xact.h b/src/include/access/xact.h | |
index cb1c2db..d8433e2 100644 | |
--- a/src/include/access/xact.h | |
+++ b/src/include/access/xact.h | |
@@ -60,7 +60,9 @@ typedef enum | |
SYNCHRONOUS_COMMIT_LOCAL_FLUSH, /* wait for local flush only */ | |
SYNCHRONOUS_COMMIT_REMOTE_WRITE, /* wait for local flush and remote | |
* write */ | |
- SYNCHRONOUS_COMMIT_REMOTE_FLUSH /* wait for local and remote flush */ | |
+ SYNCHRONOUS_COMMIT_REMOTE_FLUSH, /* wait for local and remote flush */ | |
+ SYNCHRONOUS_COMMIT_REMOTE_APPLY /* wait for local flush and remote | |
+ * apply */ | |
} SyncCommitLevel; | |
/* Define the default setting for synchonous_commit */ | |
diff --git a/src/include/replication/syncrep.h b/src/include/replication/syncrep.h | |
index 71e2857..8e0fe00 100644 | |
--- a/src/include/replication/syncrep.h | |
+++ b/src/include/replication/syncrep.h | |
@@ -23,8 +23,9 @@ | |
#define SYNC_REP_NO_WAIT -1 | |
#define SYNC_REP_WAIT_WRITE 0 | |
#define SYNC_REP_WAIT_FLUSH 1 | |
+#define SYNC_REP_WAIT_APPLY 2 | |
-#define NUM_SYNC_REP_WAIT_MODE 2 | |
+#define NUM_SYNC_REP_WAIT_MODE 3 | |
/* syncRepState */ | |
#define SYNC_REP_NOT_WAITING 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment