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

Commit c7f8cde

Browse files
knizhnikkelvich
authored andcommitted
Always access Raftable with infinite timeout
1 parent 0ee9dba commit c7f8cde

File tree

1 file changed

+22
-25
lines changed

1 file changed

+22
-25
lines changed

multimaster.c

Lines changed: 22 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1377,41 +1377,38 @@ bool MtmRefreshClusterStatus(bool nowait)
13771377
MTM_LOG1("Find clique %lx, disabledNodeMask %lx", (long) clique, (long) Mtm->disabledNodeMask);
13781378
MtmLock(LW_EXCLUSIVE);
13791379
disabled = ~clique & (((nodemask_t)1 << Mtm->nAllNodes)-1) & ~Mtm->disabledNodeMask; /* new disabled nodes mask */
1380+
enabled = clique & Mtm->disabledNodeMask; /* new enabled nodes mask */
13801381

1381-
mask = disabled;
1382-
for (i = 0; mask != 0; i++, mask >>= 1) {
1382+
for (i = 0, mask = disabled; mask != 0; i++, mask >>= 1) {
13831383
if (mask & 1) {
13841384
MtmDisableNode(i+1);
13851385
}
13861386
}
13871387

1388-
enabled = clique & Mtm->disabledNodeMask; /* new enabled nodes mask */
1389-
1390-
mask = enabled;
1391-
for (i = 0; mask != 0; i++, mask >>= 1) {
1388+
for (i = 0, mask = enabled; mask != 0; i++, mask >>= 1) {
13921389
if (mask & 1) {
13931390
MtmEnableNode(i+1);
13941391
}
13951392
}
13961393
if (disabled|enabled) {
13971394
MtmCheckQuorum();
1398-
/* Interrupt voting for active transaction and abort them */
1399-
for (ts = Mtm->transListHead; ts != NULL; ts = ts->next) {
1400-
MTM_LOG3("Active transaction gid='%s', coordinator=%d, xid=%d, status=%d, gtid.xid=%d",
1401-
ts->gid, ts->gtid.node, ts->xid, ts->status, ts->gtid.xid);
1402-
if (MtmIsCoordinator(ts)) {
1403-
if (!ts->votingCompleted && ts->status != TRANSACTION_STATUS_ABORTED) {
1395+
}
1396+
/* Interrupt voting for active transaction and abort them */
1397+
for (ts = Mtm->transListHead; ts != NULL; ts = ts->next) {
1398+
MTM_LOG3("Active transaction gid='%s', coordinator=%d, xid=%d, status=%d, gtid.xid=%d",
1399+
ts->gid, ts->gtid.node, ts->xid, ts->status, ts->gtid.xid);
1400+
if (MtmIsCoordinator(ts)) {
1401+
if (!ts->votingCompleted && (disabled|enabled) != 0 && ts->status != TRANSACTION_STATUS_ABORTED) {
1402+
MtmAbortTransaction(ts);
1403+
MtmWakeUpBackend(ts);
1404+
}
1405+
} else if (TransactionIdIsValid(ts->gtid.xid) && BIT_CHECK(disabled, ts->gtid.node-1)) { // coordinator of transaction is on disabled node
1406+
if (ts->gid[0]) {
1407+
if (ts->status == TRANSACTION_STATUS_UNKNOWN || ts->status == TRANSACTION_STATUS_IN_PROGRESS) {
1408+
MTM_LOG1("%d: Abort trasaction %s because its coordinator is at disabled node %d", MyProcPid, ts->gid, ts->gtid.node);
14041409
MtmAbortTransaction(ts);
1405-
MtmWakeUpBackend(ts);
1406-
}
1407-
} else if (TransactionIdIsValid(ts->gtid.xid) && BIT_CHECK(disabled, ts->gtid.node-1)) { // coordinator of transaction is on disabled node
1408-
if (ts->gid[0]) {
1409-
if (ts->status == TRANSACTION_STATUS_UNKNOWN || ts->status == TRANSACTION_STATUS_IN_PROGRESS) {
1410-
MTM_LOG1("%d: Abort trasaction %s because its coordinator is at disabled node %d", MyProcPid, ts->gid, ts->gtid.node);
1411-
MtmAbortTransaction(ts);
1412-
MtmTx.status = TRANSACTION_STATUS_ABORTED; /* prevent recursive invocation of MtmAbortPreparedTransaction */
1413-
FinishPreparedTransaction(ts->gid, false);
1414-
}
1410+
MtmTx.status = TRANSACTION_STATUS_ABORTED; /* prevent recursive invocation of MtmAbortPreparedTransaction */
1411+
FinishPreparedTransaction(ts->gid, false);
14151412
}
14161413
}
14171414
}
@@ -1490,7 +1487,7 @@ void MtmOnNodeDisconnect(int nodeId)
14901487
}
14911488
MtmUnlock();
14921489
} else {
1493-
MtmRefreshClusterStatus(true); /* false); -- TODO: raftable can handg in nowait=true */
1490+
MtmRefreshClusterStatus(false);
14941491
}
14951492
}
14961493

@@ -2683,7 +2680,7 @@ Datum mtm_dump_lock_graph(PG_FUNCTION_ARGS)
26832680
for (i = 0; i < Mtm->nAllNodes; i++)
26842681
{
26852682
size_t size;
2686-
char *data = RaftableGet(psprintf("lock-graph-%d", i+1), &size, NULL, true);
2683+
char *data = RaftableGet(psprintf("lock-graph-%d", i+1), &size, NULL, false);
26872684
if (data) {
26882685
GlobalTransactionId *gtid = (GlobalTransactionId *)data;
26892686
GlobalTransactionId *last = (GlobalTransactionId *)(data + size);
@@ -3305,7 +3302,7 @@ MtmDetectGlobalDeadLock(PGPROC* proc)
33053302
for (i = 0; i < Mtm->nAllNodes; i++) {
33063303
if (i+1 != MtmNodeId && !BIT_CHECK(Mtm->disabledNodeMask, i)) {
33073304
size_t size;
3308-
void* data = RaftableGet(psprintf("lock-graph-%d", i+1), &size, NULL, true);
3305+
void* data = RaftableGet(psprintf("lock-graph-%d", i+1), &size, NULL, false);
33093306
if (data == NULL) {
33103307
return true; /* If using Raftable is disabled */
33113308
} else {

0 commit comments

Comments
 (0)