Skip to content

Commit 936711f

Browse files
committed
Change cluster locking policy
1 parent b130956 commit 936711f

File tree

11 files changed

+184
-100
lines changed

11 files changed

+184
-100
lines changed

contrib/mmts/arbiter.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,11 @@ static void MtmSetSocketOptions(int sd)
320320

321321
static void MtmCheckResponse(MtmArbiterMessage* resp)
322322
{
323+
if (resp->lockReq) {
324+
BIT_SET(Mtm->globalLockerMask, resp->node-1);
325+
} else {
326+
BIT_CLEAR(Mtm->globalLockerMask, resp->node-1);
327+
}
323328
if (BIT_CHECK(resp->disabledNodeMask, MtmNodeId-1)
324329
&& !BIT_CHECK(Mtm->disabledNodeMask, resp->node-1)
325330
&& Mtm->status != MTM_RECOVERY
@@ -358,6 +363,7 @@ static void MtmSendHeartbeat()
358363
msg.disabledNodeMask = Mtm->disabledNodeMask;
359364
msg.connectivityMask = SELF_CONNECTIVITY_MASK;
360365
msg.oldestSnapshot = Mtm->nodes[MtmNodeId-1].oldestSnapshot;
366+
msg.lockReq = Mtm->nodeLockerMask != 0;
361367
msg.node = MtmNodeId;
362368
msg.csn = now;
363369
if (last_sent_heartbeat != 0 && last_sent_heartbeat + MSEC_TO_USEC(MtmHeartbeatSendTimeout)*2 < now) {
@@ -1073,6 +1079,7 @@ static void MtmReceiver(Datum arg)
10731079
StartTransactionCommand();
10741080
SetPreparedTransactionState(ts->gid, MULTIMASTER_PRECOMMITTED);
10751081
CommitTransactionCommand();
1082+
Assert(!MtmTransIsActive());
10761083
MtmLock(LW_EXCLUSIVE);
10771084
} else {
10781085
ts->status = TRANSACTION_STATUS_UNKNOWN;
@@ -1088,7 +1095,7 @@ static void MtmReceiver(Datum arg)
10881095
continue;
10891096
}
10901097
if (ts->status != TRANSACTION_STATUS_ABORTED) {
1091-
MTM_LOG1("Arbiter receive abort message for transaction %s (%llu)", ts->gid, (long64)ts->xid);
1098+
MTM_LOG1("Arbiter receive abort message for transaction %s (%llu) from node %d", ts->gid, (long64)ts->xid, node);
10921099
Assert(ts->status == TRANSACTION_STATUS_IN_PROGRESS);
10931100
MtmAbortTransaction(ts);
10941101
}

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