Skip to content

Commit 05aff3e

Browse files
knizhnikkelvich
authored andcommitted
Fix 64-bit xid issues
1 parent 0bfab34 commit 05aff3e

File tree

5 files changed

+79
-76
lines changed

5 files changed

+79
-76
lines changed

Diff for: arbiter.c

+14-14
Original file line numberDiff line numberDiff line change
@@ -1017,13 +1017,13 @@ static void MtmReceiver(Datum arg)
10171017
}
10181018
ts = (MtmTransState*)hash_search(MtmXid2State, &msg->dxid, HASH_FIND, NULL);
10191019
if (ts == NULL) {
1020-
elog(WARNING, "Ignore response for unexisted transaction %d from node %d", msg->dxid, node);
1020+
elog(WARNING, "Ignore response for unexisted transaction %lu from node %d", (long)msg->dxid, node);
10211021
continue;
10221022
}
10231023
Assert(msg->code == MSG_ABORTED || strcmp(msg->gid, ts->gid) == 0);
10241024
if (BIT_CHECK(ts->votedMask, node-1)) {
1025-
elog(WARNING, "Receive deteriorated %s response for transaction %d (%s) from node %d",
1026-
MtmMessageKindMnem[msg->code], ts->xid, ts->gid, node);
1025+
elog(WARNING, "Receive deteriorated %s response for transaction %s (%lu) from node %d",
1026+
MtmMessageKindMnem[msg->code], ts->gid, (long)ts->xid, node);
10271027
continue;
10281028
}
10291029
BIT_SET(ts->votedMask, node-1);
@@ -1033,8 +1033,8 @@ static void MtmReceiver(Datum arg)
10331033
case MSG_PREPARED:
10341034
MTM_TXTRACE(ts, "MtmTransReceiver got MSG_PREPARED");
10351035
if (ts->status == TRANSACTION_STATUS_COMMITTED) {
1036-
elog(WARNING, "Receive PREPARED response for already committed transaction %d from node %d",
1037-
ts->xid, node);
1036+
elog(WARNING, "Receive PREPARED response for already committed transaction %lu from node %d",
1037+
(long)ts->xid, node);
10381038
continue;
10391039
}
10401040
Mtm->nodes[node-1].transDelay += MtmGetCurrentTime() - ts->csn;
@@ -1043,8 +1043,8 @@ static void MtmReceiver(Datum arg)
10431043
if ((~msg->disabledNodeMask & Mtm->disabledNodeMask) != 0) {
10441044
/* Coordinator's disabled mask is wider than of this node: so reject such transaction to avoid
10451045
commit on smaller subset of nodes */
1046-
elog(WARNING, "Coordinator of distributed transaction %s (%d) see less nodes than node %d: %llx instead of %llx",
1047-
ts->gid, ts->xid, node, (long long) Mtm->disabledNodeMask, (long long) msg->disabledNodeMask);
1046+
elog(WARNING, "Coordinator of distributed transaction %s (%lu) see less nodes than node %d: %llx instead of %llx",
1047+
ts->gid, (long)ts->xid, node, (long long) Mtm->disabledNodeMask, (long long) msg->disabledNodeMask);
10481048
MtmAbortTransaction(ts);
10491049
}
10501050
if ((ts->participantsMask & ~Mtm->disabledNodeMask & ~ts->votedMask) == 0) {
@@ -1079,12 +1079,12 @@ static void MtmReceiver(Datum arg)
10791079
break;
10801080
case MSG_ABORTED:
10811081
if (ts->status == TRANSACTION_STATUS_COMMITTED) {
1082-
elog(WARNING, "Receive ABORTED response for already committed transaction %d (%s) from node %d",
1083-
ts->xid, ts->gid, node);
1082+
elog(WARNING, "Receive ABORTED response for already committed transaction %s (%lu) from node %d",
1083+
ts->gid, (long)ts->xid, node);
10841084
continue;
10851085
}
10861086
if (ts->status != TRANSACTION_STATUS_ABORTED) {
1087-
MTM_LOG1("Arbiter receive abort message for transaction %s (%d)", ts->gid, ts->xid);
1087+
MTM_LOG1("Arbiter receive abort message for transaction %s (%lu)", ts->gid, (long)ts->xid);
10881088
Assert(ts->status == TRANSACTION_STATUS_IN_PROGRESS);
10891089
MtmAbortTransaction(ts);
10901090
}
@@ -1095,8 +1095,8 @@ static void MtmReceiver(Datum arg)
10951095
case MSG_PRECOMMITTED:
10961096
MTM_TXTRACE(ts, "MtmTransReceiver got MSG_PRECOMMITTED");
10971097
if (ts->status == TRANSACTION_STATUS_COMMITTED) {
1098-
elog(WARNING, "Receive PRECOMMITTED response for already committed transaction %d (%s) from node %d",
1099-
ts->xid, ts->gid, node);
1098+
elog(WARNING, "Receive PRECOMMITTED response for already committed transaction %s (%lu) from node %d",
1099+
ts->gid, (long)ts->xid, node);
11001100
continue;
11011101
}
11021102
if (ts->status == TRANSACTION_STATUS_IN_PROGRESS) {
@@ -1111,8 +1111,8 @@ static void MtmReceiver(Datum arg)
11111111
}
11121112
} else {
11131113
Assert(ts->status == TRANSACTION_STATUS_ABORTED);
1114-
elog(WARNING, "Receive PRECOMMITTED response for aborted transaction %d (%s) from node %d",
1115-
ts->xid, ts->gid, node); // How it can happen? SHould we use assert here?
1114+
elog(WARNING, "Receive PRECOMMITTED response for aborted transaction %s (%lu) from node %d",
1115+
ts->gid, (long)ts->xid, node); // How it can happen? SHould we use assert here?
11161116
if ((ts->participantsMask & ~Mtm->disabledNodeMask & ~ts->votedMask) == 0) {
11171117
MtmWakeUpBackend(ts);
11181118
}

Diff for: multimaster--1.0.sql

+5-5
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ CREATE FUNCTION mtm.get_snapshot() RETURNS bigint
2727
AS 'MODULE_PATHNAME','mtm_get_snapshot'
2828
LANGUAGE C;
2929

30-
CREATE FUNCTION mtm.get_csn(xid integer) RETURNS bigint
30+
CREATE FUNCTION mtm.get_csn(xid bigint) RETURNS bigint
3131
AS 'MODULE_PATHNAME','mtm_get_csn'
3232
LANGUAGE C;
3333

@@ -43,15 +43,15 @@ AS 'MODULE_PATHNAME','mtm_get_nodes_state'
4343
LANGUAGE C;
4444

4545
CREATE TYPE mtm.cluster_state AS ("status" text, "disabledNodeMask" bigint, "disconnectedNodeMask" bigint, "catchUpNodeMask" bigint, "liveNodes" integer, "allNodes" integer, "nActiveQueries" integer, "nPendingQueries" integer, "queueSize" bigint, "transCount" bigint, "timeShift" bigint, "recoverySlot" integer,
46-
"xidHashSize" bigint, "gidHashSize" bigint, "oldestXid" integer, "configChanges" integer);
46+
"xidHashSize" bigint, "gidHashSize" bigint, "oldestXid" bigint, "configChanges" integer);
4747

48-
CREATE TYPE mtm.trans_state AS ("status" text, "gid" text, "xid" integer, "coordinator" integer, "gxid" integer, "csn" timestamp, "snapshot" timestamp, "local" boolean, "prepared" boolean, "active" boolean, "twophase" boolean, "votingCompleted" boolean, "participants" bigint, "voted" bigint, "configChanges" integer);
48+
CREATE TYPE mtm.trans_state AS ("status" text, "gid" text, "xid" bigint, "coordinator" integer, "gxid" bigint, "csn" timestamp, "snapshot" timestamp, "local" boolean, "prepared" boolean, "active" boolean, "twophase" boolean, "votingCompleted" boolean, "participants" bigint, "voted" bigint, "configChanges" integer);
4949

5050
CREATE FUNCTION mtm.get_trans_by_gid(git text) RETURNS mtm.trans_state
5151
AS 'MODULE_PATHNAME','mtm_get_trans_by_gid'
5252
LANGUAGE C;
5353

54-
CREATE FUNCTION mtm.get_trans_by_xid(xid integer) RETURNS mtm.trans_state
54+
CREATE FUNCTION mtm.get_trans_by_xid(xid bigint) RETURNS mtm.trans_state
5555
AS 'MODULE_PATHNAME','mtm_get_trans_by_xid'
5656
LANGUAGE C;
5757

@@ -79,7 +79,7 @@ CREATE FUNCTION mtm.inject_2pc_error(stage integer) RETURNS void
7979
AS 'MODULE_PATHNAME','mtm_inject_2pc_error'
8080
LANGUAGE C;
8181

82-
CREATE FUNCTION mtm.check_deadlock(xid integer) RETURNS boolean
82+
CREATE FUNCTION mtm.check_deadlock(xid bigint) RETURNS boolean
8383
AS 'MODULE_PATHNAME','mtm_check_deadlock'
8484
LANGUAGE C;
8585

0 commit comments

Comments
 (0)