Skip to content

Commit 75b574f

Browse files
committed
Add mtm.get_csn function
1 parent 0f8d55c commit 75b574f

File tree

3 files changed

+28
-4
lines changed

3 files changed

+28
-4
lines changed

contrib/mmts/multimaster--1.0.sql

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ CREATE FUNCTION mtm.get_snapshot() RETURNS bigint
2727
AS 'MODULE_PATHNAME','mtm_get_snapshot'
2828
LANGUAGE C;
2929

30+
CREATE FUNCTION mtm.get_csn(tid xid) RETURNS bigint
31+
AS 'MODULE_PATHNAME','mtm_get_csn'
32+
LANGUAGE C;
33+
3034

3135
CREATE TYPE mtm.node_state AS ("id" integer, "disabled" bool, "disconnected" bool, "catchUp" bool, "slotLag" bigint, "avgTransDelay" bigint, "lastStatusChange" timestamp, "oldestSnapshot" bigint, "connStr" text);
3236

contrib/mmts/multimaster.c

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ PG_FUNCTION_INFO_V1(mtm_add_node);
107107
PG_FUNCTION_INFO_V1(mtm_poll_node);
108108
PG_FUNCTION_INFO_V1(mtm_recover_node);
109109
PG_FUNCTION_INFO_V1(mtm_get_snapshot);
110+
PG_FUNCTION_INFO_V1(mtm_get_csn);
110111
PG_FUNCTION_INFO_V1(mtm_get_nodes_state);
111112
PG_FUNCTION_INFO_V1(mtm_get_cluster_state);
112113
PG_FUNCTION_INFO_V1(mtm_get_cluster_info);
@@ -452,12 +453,13 @@ static TransactionId
452453
MtmAdjustOldestXid(TransactionId xid)
453454
{
454455
int i;
456+
csn_t oldestSnapshot = INVALID_CSN;
455457
MtmTransState *prev = NULL;
456458
MtmTransState *ts = (MtmTransState*)hash_search(MtmXid2State, &xid, HASH_FIND, NULL);
457459
MTM_LOG1("%d: MtmAdjustOldestXid(%d): snapshot=%ld, csn=%ld, status=%d", MyProcPid, xid, ts != NULL ? ts->snapshot : 0, ts != NULL ? ts->csn : 0, ts != NULL ? ts->status : -1);
458460
Mtm->gcCount = 0;
459461
if (ts != NULL) {
460-
csn_t oldestSnapshot = ts->snapshot;
462+
oldestSnapshot = ts->snapshot;
461463
Mtm->nodes[MtmNodeId-1].oldestSnapshot = oldestSnapshot;
462464
for (i = 0; i < Mtm->nAllNodes; i++) {
463465
if (!BIT_CHECK(Mtm->disabledNodeMask, i)
@@ -487,6 +489,7 @@ MtmAdjustOldestXid(TransactionId xid)
487489
if (prev != NULL) {
488490
Mtm->transListHead = prev;
489491
Mtm->oldestXid = xid = prev->xid;
492+
MTM_LOG1("%d: MtmAdjustOldestXid: oldestXid=%d, olderstSnapshot=%ld", MyProcPid, xid, oldestSnapshot);
490493
} else if (TransactionIdPrecedes(Mtm->oldestXid, xid)) {
491494
xid = Mtm->oldestXid;
492495
}
@@ -2292,6 +2295,23 @@ mtm_get_snapshot(PG_FUNCTION_ARGS)
22922295
PG_RETURN_INT64(MtmTx.snapshot);
22932296
}
22942297

2298+
Datum
2299+
mtm_get_csn(PG_FUNCTION_ARGS)
2300+
{
2301+
TransactionId xid = PG_GETARG_INT32(0);
2302+
MtmTransState* ts;
2303+
csn_t csn = INVALID_CSN;
2304+
2305+
MtmLock(LW_SHARED);
2306+
ts = hash_search(MtmXid2State, &xid, HASH_FIND, NULL);
2307+
if (ts != NULL) {
2308+
csn = ts->csn;
2309+
}
2310+
MtmUnlock();
2311+
2312+
return csn;
2313+
}
2314+
22952315
typedef struct
22962316
{
22972317
int nodeId;

contrib/mmts/tests/dtmacid.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -130,8 +130,8 @@ void* reader(void* arg)
130130
while ((c2 = random() % conns.size()) == c1);
131131
work txn1(*conns[c1]);
132132
work txn2(*conns[c2]);
133-
result r1 = txn1.exec("select v from t order by u");
134-
result r2 = txn2.exec("select v from t order by u");
133+
result r1 = txn1.exec("select v,xmin,xmax,mtm.get_csn(xmin) from t order by u");
134+
result r2 = txn2.exec("select v,xmin,xmax,mtm.get_csn(xmin) from t order by u");
135135
int delta = 0;
136136
for (int i=0; i < cfg.nAccounts; i++) {
137137
int diff = r1[i][0].as(int()) - r2[i][0].as(int());
@@ -140,7 +140,7 @@ void* reader(void* arg)
140140
delta = diff;
141141
if (delta < 0) lt++; else gt++;
142142
} else if (delta != diff) {
143-
printf("Inconsistency found for record %d\n", i);
143+
printf("Inconsistency found for record %d: [%d,%d]->%ld vs [%d,%d]->%ld\n", i, r1[i][1].as(int()), r1[i][2].as(int()), r1[i][3].as(int64_t()), r2[i][1].as(int()), r2[i][2].as(int()), r2[i][3].as(int64_t()));
144144
}
145145
}
146146
}

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