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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy