Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit ca6bec3

Browse files
committed
merge guc serializatuion fix
2 parents 6a8d759 + acaad1c commit ca6bec3

File tree

5 files changed

+24
-6
lines changed

5 files changed

+24
-6
lines changed

contrib/mmts/arbiter.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -715,6 +715,8 @@ static void MtmSender(Datum arg)
715715
int nNodes = MtmMaxNodes;
716716
int i;
717717

718+
MtmBackgroundWorker = true;
719+
718720
MtmBuffer* txBuffer = (MtmBuffer*)palloc0(sizeof(MtmBuffer)*nNodes);
719721
MTM_ELOG(LOG, "Start arbiter sender %d", MyProcPid);
720722
InitializeTimeouts();
@@ -802,6 +804,8 @@ static void MtmMonitor(Datum arg)
802804
pqsignal(SIGQUIT, SetStop);
803805
pqsignal(SIGTERM, SetStop);
804806

807+
MtmBackgroundWorker = true;
808+
805809
/* We're now ready to receive signals */
806810
BackgroundWorkerUnblockSignals();
807811

@@ -838,7 +842,9 @@ static void MtmReceiver(Datum arg)
838842
pqsignal(SIGINT, SetStop);
839843
pqsignal(SIGQUIT, SetStop);
840844
pqsignal(SIGTERM, SetStop);
841-
845+
846+
MtmBackgroundWorker = true;
847+
842848
/* We're now ready to receive signals */
843849
BackgroundWorkerUnblockSignals();
844850

contrib/mmts/bgwpool.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ static void BgwPoolMainLoop(BgwPool* pool)
3636

3737
MTM_ELOG(LOG, "Start background worker %d, shutdown=%d", MyProcPid, pool->shutdown);
3838

39+
MtmBackgroundWorker = true;
3940
MtmIsLogicalReceiver = true;
4041
MtmPool = pool;
4142

contrib/mmts/multimaster.c

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,7 @@ bool MtmDoReplication;
238238
char* MtmDatabaseName;
239239
char* MtmDatabaseUser;
240240
Oid MtmDatabaseId;
241+
bool MtmBackgroundWorker;
241242

242243
int MtmNodes;
243244
int MtmNodeId;
@@ -902,7 +903,7 @@ MtmIsUserTransaction()
902903
IsNormalProcessingMode() &&
903904
MtmDoReplication &&
904905
!am_walsender &&
905-
!IsBackgroundWorker &&
906+
!MtmBackgroundWorker &&
906907
!IsAutoVacuumWorkerProcess();
907908
}
908909

@@ -4924,7 +4925,7 @@ static void MtmGucInit(void)
49244925
*/
49254926
oldcontext = MemoryContextSwitchTo(TopMemoryContext);
49264927
current_role = GetConfigOptionByName("session_authorization", NULL, false);
4927-
if (strcmp(MtmDatabaseUser, current_role) != 0)
4928+
if (current_role && *current_role && strcmp(MtmDatabaseUser, current_role) != 0)
49284929
MtmGucUpdate("session_authorization", current_role);
49294930
MemoryContextSwitchTo(oldcontext);
49304931
}
@@ -5018,13 +5019,20 @@ char* MtmGucSerialize(void)
50185019
{
50195020
StringInfo serialized_gucs;
50205021
dlist_iter iter;
5021-
int nvars = 0;
5022+
const char *search_path;
50225023

50235024
if (!MtmGucHash)
50245025
MtmGucInit();
50255026

50265027
serialized_gucs = makeStringInfo();
50275028

5029+
/*
5030+
* Crutch for scheduler. It sets search_path through SetConfigOption()
5031+
* so our callback do not react on that.
5032+
*/
5033+
search_path = GetConfigOption("search_path", false, true);
5034+
appendStringInfo(serialized_gucs, "SET search_path TO %s; ", search_path);
5035+
50285036
dlist_foreach(iter, &MtmGucList)
50295037
{
50305038
MtmGucEntry *cur_entry = dlist_container(MtmGucEntry, list_node, iter.cur);
@@ -5045,7 +5053,6 @@ char* MtmGucSerialize(void)
50455053
appendStringInfoString(serialized_gucs, cur_entry->value);
50465054
}
50475055
appendStringInfoString(serialized_gucs, "; ");
5048-
nvars++;
50495056
}
50505057

50515058
return serialized_gucs->data;
@@ -5163,6 +5170,7 @@ static void MtmProcessUtility(Node *parsetree, const char *queryString,
51635170
case T_CheckPointStmt:
51645171
case T_ReindexStmt:
51655172
case T_ExplainStmt:
5173+
case T_AlterSystemStmt:
51665174
skipCommand = true;
51675175
break;
51685176

@@ -5374,7 +5382,7 @@ static void MtmProcessUtility(Node *parsetree, const char *queryString,
53745382
if (!skipCommand && !MtmTx.isReplicated && (context == PROCESS_UTILITY_TOPLEVEL || MtmUtilityProcessedInXid != GetCurrentTransactionId()))
53755383
{
53765384
MtmUtilityProcessedInXid = GetCurrentTransactionId();
5377-
if (context == PROCESS_UTILITY_TOPLEVEL) {
5385+
if (context == PROCESS_UTILITY_TOPLEVEL || !ActivePortal) {
53785386
MtmProcessDDLCommand(queryString, true);
53795387
} else {
53805388
MtmProcessDDLCommand(ActivePortal->sourceText, true);

contrib/mmts/multimaster.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,7 @@ extern MemoryContext MtmApplyContext;
378378
extern lsn_t MtmSenderWalEnd;
379379
extern timestamp_t MtmRefreshClusterStatusSchedule;
380380
extern MtmConnectionInfo* MtmConnections;
381+
extern bool MtmBackgroundWorker;
381382

382383

383384
extern void MtmArbiterInitialize(void);

contrib/mmts/pglogical_receiver.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,8 @@ pglogical_receiver_main(Datum main_arg)
224224
char* connString = psprintf("replication=database %s", Mtm->nodes[nodeId-1].con.connStr);
225225
static PortalData fakePortal;
226226

227+
MtmBackgroundWorker = true;
228+
227229
ByteBufferAlloc(&buf);
228230

229231
slotName = psprintf(MULTIMASTER_SLOT_PATTERN, MtmNodeId);

0 commit comments

Comments
 (0)