Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit4b71181

Browse files
committed
volkswagen_mode
1 parent5a72566 commit4b71181

File tree

2 files changed

+30
-65
lines changed

2 files changed

+30
-65
lines changed

‎multimaster.c

Lines changed: 29 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -179,8 +179,7 @@ static TransactionManager MtmTM = {
179179
MtmGetTransactionStateSize,
180180
MtmSerializeTransactionState,
181181
MtmDeserializeTransactionState,
182-
// MtmInitializeSequence
183-
PgInitializeSequence
182+
MtmInitializeSequence
184183
};
185184

186185
charconst*constMtmNodeStatusMnem[]=
@@ -197,7 +196,6 @@ char const* const MtmNodeStatusMnem[] =
197196
boolMtmDoReplication;
198197
char*MtmDatabaseName;
199198
char*MtmDatabaseUser;
200-
char*MtmUtilityStmt=NULL;
201199

202200
intMtmNodes;
203201
intMtmNodeId;
@@ -213,6 +211,7 @@ int MtmHeartbeatSendTimeout;
213211
intMtmHeartbeatRecvTimeout;
214212
boolMtmUseRaftable;
215213
boolMtmUseDtm;
214+
boolMtmVolksWagenMode;
216215

217216
staticchar*MtmConnStrs;
218217
staticintMtmQueueSize;
@@ -235,9 +234,6 @@ static void MtmProcessUtility(Node *parsetree, const char *queryString,
235234
ProcessUtilityContextcontext,ParamListInfoparams,
236235
DestReceiver*dest,char*completionTag);
237236

238-
// static StringInfoMtmGUCBuffer;
239-
// static boolMtmGUCBufferAllocated = false;
240-
241237
/*
242238
* -------------------------------------------
243239
* Synchronize access to MTM structures.
@@ -370,8 +366,16 @@ MtmDeserializeTransactionState(void* ctx)
370366
staticvoid
371367
MtmInitializeSequence(int64*start,int64*step)
372368
{
373-
*start=MtmNodeId;
374-
*step=MtmMaxNodes;
369+
if (MtmVolksWagenMode)
370+
{
371+
*start=1;
372+
*step=1;
373+
}
374+
else
375+
{
376+
*start=MtmNodeId;
377+
*step=MtmMaxNodes;
378+
}
375379
}
376380

377381

@@ -704,10 +708,6 @@ static const char* const isoLevelStr[] =
704708
staticvoid
705709
MtmBeginTransaction(MtmCurrentTrans*x)
706710
{
707-
if (MtmUtilityStmt)
708-
pfree(MtmUtilityStmt);
709-
MtmUtilityStmt=NULL;
710-
711711
if (x->snapshot==INVALID_CSN) {
712712
TransactionIdxmin= (Mtm->gcCount >=MtmGcPeriod) ?PgGetOldestXmin(NULL, false) :InvalidTransactionId;/* Get oldest xmin outside critical section */
713713

@@ -2218,6 +2218,19 @@ _PG_init(void)
22182218
NULL
22192219
);
22202220

2221+
DefineCustomBoolVariable(
2222+
"multimaster.volkswagen_mode",
2223+
"Pretend to be normal postgres. This means skip some NOTICE's and use local sequences. Default false.",
2224+
NULL,
2225+
&MtmVolksWagenMode,
2226+
false,
2227+
PGC_BACKEND,
2228+
0,
2229+
NULL,
2230+
NULL,
2231+
NULL
2232+
);
2233+
22212234
DefineCustomIntVariable(
22222235
"multimaster.workers",
22232236
"Number of multimaster executor workers per node",
@@ -3128,13 +3141,6 @@ static void MtmBroadcastUtilityStmt(char const* sql, bool ignoreError)
31283141
{
31293142
if (conns[i])
31303143
{
3131-
// if (MtmGUCBufferAllocated && !MtmRunUtilityStmt(conns[i], MtmGUCBuffer->data, &utility_errmsg) && !ignoreError)
3132-
// {
3133-
// errorMsg = "Failed to set GUC variables at node %d";
3134-
// elog(WARNING, "%s", utility_errmsg);
3135-
// failedNode = i;
3136-
// break;
3137-
// }
31383144
if (!MtmRunUtilityStmt(conns[i],"BEGIN TRANSACTION",&utility_errmsg)&& !ignoreError)
31393145
{
31403146
errorMsg="Failed to start transaction at node %d";
@@ -3188,38 +3194,6 @@ static void MtmBroadcastUtilityStmt(char const* sql, bool ignoreError)
31883194
}
31893195
}
31903196

3191-
// static void MtmGUCBufferAppend(const char *gucQueryString){
3192-
3193-
// if (!MtmGUCBufferAllocated)
3194-
// {
3195-
// MemoryContext oldcontext;
3196-
// oldcontext = MemoryContextSwitchTo(TopMemoryContext);
3197-
// MtmGUCBuffer = makeStringInfo();
3198-
// MemoryContextSwitchTo(oldcontext);
3199-
// MtmGUCBufferAllocated = true;
3200-
// appendStringInfoString(MtmGUCBuffer, "RESET SESSION AUTHORIZATION; reset all;");
3201-
// }
3202-
3203-
// appendStringInfoString(MtmGUCBuffer, gucQueryString);
3204-
// /* sometimes there is no ';' char at the end. */
3205-
// // appendStringInfoString(MtmGUCBuffer, ";");
3206-
// }
3207-
3208-
// static char * MtmGUCBufferGet(void){
3209-
// if (!MtmGUCBufferAllocated)
3210-
// MtmGUCBufferAppend("");
3211-
// return MtmGUCBuffer->data;
3212-
// }
3213-
3214-
// static void MtmGUCBufferClear(void)
3215-
// {
3216-
// if (MtmGUCBufferAllocated)
3217-
// {
3218-
// resetStringInfo(MtmGUCBuffer);
3219-
// MtmGUCBufferAppend("");
3220-
// }
3221-
// }
3222-
32233197
/*
32243198
* Genenerate global transaction identifier for two-pahse commit.
32253199
* It should be unique for all nodes
@@ -3237,11 +3211,12 @@ static bool MtmTwoPhaseCommit(MtmCurrentTrans* x)
32373211
{
32383212
/*
32393213
* XXX: this tx anyway goes to subscribers later, but without
3240-
* surrounding begin/commit.Probably there is more clever way
3241-
* to do that.
3214+
* surrounding begin/commit.Now it will be filtered out on receiver side.
3215+
*Probably there is more clever wayto do that.
32423216
*/
32433217
x->isDistributed= false;
3244-
x->csn=NULL;
3218+
if (!MtmVolksWagenMode)
3219+
elog(NOTICE,"MTM: Transaction was not replicated as it accesed temporary relation");
32453220
return false;
32463221
}
32473222

@@ -3438,8 +3413,6 @@ static void MtmProcessUtility(Node *parsetree, const char *queryString,
34383413
{
34393414
boolskipCommand= false;
34403415

3441-
// skipCommand = MyXactAccessedTempRel;
3442-
34433416
MTM_LOG3("%d: Process utility statement %s",MyProcPid,queryString);
34443417
switch (nodeTag(parsetree))
34453418
{
@@ -3492,19 +3465,10 @@ static void MtmProcessUtility(Node *parsetree, const char *queryString,
34923465
skipCommand= true;
34933466
break;
34943467

3495-
// /* Do not skip following unless temp object was accessed */
3496-
// case T_CreateTableAsStmt:
3497-
// case T_CreateStmt:
3498-
// case T_ViewStmt:
3499-
// case T_IndexStmt:
3500-
// case T_DropStmt:
3501-
// break;
3502-
35033468
/* Save GUC context for consequent DDL execution */
35043469
caseT_DiscardStmt:
35053470
{
35063471
DiscardStmt*stmt= (DiscardStmt*)parsetree;
3507-
skipCommand=stmt->target==DISCARD_TEMP;// XXX
35083472

35093473
if (!IsTransactionBlock())
35103474
{

‎tests/reinit-mm.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ do
5555
multimaster.heartbeat_recv_timeout = 1000
5656
multimaster.heartbeat_send_timeout = 250
5757
multimaster.twopc_min_timeout = 400000
58+
multimaster.volkswagen_mode = 1
5859
5960
multimaster.conn_strings = '$conn_str'
6061
multimaster.node_id =$i

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp