修复流复制synchronous_commit参数工作不正确的问题。

This commit is contained in:
April01xxx
2021-10-13 15:36:12 +08:00
parent 590b0f8ebe
commit 66aea19936
2 changed files with 12 additions and 10 deletions

View File

@ -70,7 +70,6 @@
*/
volatile bool most_available_sync = false;
static volatile int SyncRepWaitMode = SYNC_REP_WAIT_FLUSH;
const int MAX_SYNC_REP_RETRY_COUNT = 1000;
const int SYNC_REP_SLEEP_DELAY = 1000;
@ -155,7 +154,7 @@ void SyncRepWaitForLSN(XLogRecPtr XactCommitLSN, bool enableHandleCancel)
{
char *new_status = NULL;
const char *old_status = NULL;
int mode = SyncRepWaitMode;
int mode = u_sess->attr.attr_storage.sync_rep_wait_mode;
/*
* Fast exit if user has not requested sync replication, or there are no
@ -516,6 +515,7 @@ void SyncRepReleaseWaiters(void)
int numreceive = 0;
int numwrite = 0;
int numflush = 0;
int numapply = 0;
bool got_recptr = false;
bool am_sync = false;
@ -590,15 +590,16 @@ void SyncRepReleaseWaiters(void)
}
if (XLByteLT(walsndctl->lsn[SYNC_REP_WAIT_APPLY], replayPtr)) {
walsndctl->lsn[SYNC_REP_WAIT_APPLY] = t_thrd.walsender_cxt.MyWalSnd->apply;
numflush = SyncRepWakeQueue(false, SYNC_REP_WAIT_APPLY);
numapply = SyncRepWakeQueue(false, SYNC_REP_WAIT_APPLY);
}
LWLockRelease(SyncRepLock);
ereport(DEBUG3,
(errmsg("released %d procs up to receive %X/%X, %d procs up to write %X/%X, %d procs up to flush %X/%X",
(errmsg("released %d procs up to receive %X/%X, %d procs up to write %X/%X, %d procs up to flush %X/%X, %d procs up to apply %X/%X",
numreceive, (uint32)(receivePtr >> 32), (uint32)receivePtr, numwrite, (uint32)(writePtr >> 32),
(uint32)writePtr, numflush, (uint32)(flushPtr >> 32), (uint32)flushPtr)));
(uint32)writePtr, numflush, (uint32)(flushPtr >> 32), (uint32)flushPtr,
numapply, (uint32)(replayPtr >> 32), (uint32)replayPtr)));
}
/*
@ -1821,19 +1822,19 @@ void assign_synchronous_commit(int newval, void *extra)
{
switch (newval) {
case SYNCHRONOUS_COMMIT_REMOTE_RECEIVE:
SyncRepWaitMode = SYNC_REP_WAIT_RECEIVE;
u_sess->attr.attr_storage.sync_rep_wait_mode = SYNC_REP_WAIT_RECEIVE;
break;
case SYNCHRONOUS_COMMIT_REMOTE_WRITE:
SyncRepWaitMode = SYNC_REP_WAIT_WRITE;
u_sess->attr.attr_storage.sync_rep_wait_mode = SYNC_REP_WAIT_WRITE;
break;
case SYNCHRONOUS_COMMIT_REMOTE_FLUSH:
SyncRepWaitMode = SYNC_REP_WAIT_FLUSH;
u_sess->attr.attr_storage.sync_rep_wait_mode = SYNC_REP_WAIT_FLUSH;
break;
case SYNCHRONOUS_COMMIT_REMOTE_APPLY:
SyncRepWaitMode = SYNC_REP_WAIT_APPLY;
u_sess->attr.attr_storage.sync_rep_wait_mode = SYNC_REP_WAIT_APPLY;
break;
default:
SyncRepWaitMode = SYNC_REP_NO_WAIT;
u_sess->attr.attr_storage.sync_rep_wait_mode = SYNC_REP_NO_WAIT;
break;
}
}

View File

@ -191,6 +191,7 @@ typedef struct knl_session_attr_storage {
char* Inplace_upgrade_next_system_object_oids;
int resource_track_log;
int guc_synchronous_commit;
int sync_rep_wait_mode;
int sync_method;
int autovacuum_mode;
int cstore_insert_mode;