Skip to content

Commit fc42dcb

Browse files
knizhnikkelvich
authored andcommitted
Change cluster locking policy
1 parent 7a675d8 commit fc42dcb

File tree

9 files changed

+167
-90
lines changed

9 files changed

+167
-90
lines changed

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