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

Commit 2761da1

Browse files
knizhnikkelvich
authored andcommitted
Preserve commit order
1 parent db0930a commit 2761da1

File tree

3 files changed

+22
-2
lines changed

3 files changed

+22
-2
lines changed

multimaster.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,7 @@ int MtmHeartbeatSendTimeout;
207207
int MtmHeartbeatRecvTimeout;
208208
bool MtmUseRaftable;
209209
bool MtmUseDtm;
210+
bool MtmPreserveCommitOrder;
210211
bool MtmVolksWagenMode;
211212

212213
TransactionId MtmUtilityProcessedInXid;
@@ -2341,6 +2342,19 @@ _PG_init(void)
23412342
NULL
23422343
);
23432344

2345+
DefineCustomBoolVariable(
2346+
"multimaster.preserve_commit_order",
2347+
"Transactions from one node will be committed in same order al all nodes",
2348+
NULL,
2349+
&MtmPreserveCommitOrder,
2350+
true,
2351+
PGC_BACKEND,
2352+
0,
2353+
NULL,
2354+
NULL,
2355+
NULL
2356+
);
2357+
23442358
DefineCustomBoolVariable(
23452359
"multimaster.volkswagen_mode",
23462360
"Pretend to be normal postgres. This means skip some NOTICE's and use local sequences. Default false.",

multimaster.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858
#define MB (1024*1024L)
5959

6060
#define USEC_TO_MSEC(t) ((t)/1000)
61-
#define MSEC_TO_USEC(t) ((t)*1000)
61+
#define MSEC_TO_USEC(t) ((timestamp_t)(t)*1000)
6262

6363
#define Natts_mtm_ddl_log 2
6464
#define Anum_mtm_ddl_log_issued 1
@@ -287,6 +287,7 @@ extern int MtmTransSpillThreshold;
287287
extern int MtmHeartbeatSendTimeout;
288288
extern int MtmHeartbeatRecvTimeout;
289289
extern bool MtmUseDtm;
290+
extern bool MtmPreserveCommitOrder;
290291
extern HTAB* MtmXid2State;
291292
extern HTAB* MtmGid2State;
292293

pglogical_receiver.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -528,7 +528,12 @@ pglogical_receiver_main(Datum main_arg)
528528
spill_file = -1;
529529
resetStringInfo(&spill_info);
530530
} else {
531-
MtmExecute(buf.data, buf.used);
531+
if (MtmPreserveCommitOrder && buf.used == rc - hdr_len) {
532+
/* Perform commit-prepared and rollback-prepared requested directly in receiver */
533+
MtmExecutor(nodeId, buf.data, buf.used);
534+
} else {
535+
MtmExecute(buf.data, buf.used);
536+
}
532537
}
533538
ByteBufferReset(&buf);
534539
}

0 commit comments

Comments
 (0)