Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit75b574f

Browse files
committed
Add mtm.get_csn function
1 parent0f8d55c commit75b574f

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+
CREATEFUNCTIONmtm.get_csn(tid xid) RETURNSbigint
31+
AS'MODULE_PATHNAME','mtm_get_csn'
32+
LANGUAGE C;
33+
3034

3135
CREATETYPEmtm.node_stateAS ("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(TransactionIdxid)
453454
{
454455
inti;
456+
csn_toldestSnapshot=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_toldestSnapshot=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
}elseif (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+
TransactionIdxid=PG_GETARG_INT32(0);
2302+
MtmTransState*ts;
2303+
csn_tcsn=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+
returncsn;
2313+
}
2314+
22952315
typedefstruct
22962316
{
22972317
intnodeId;

‎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
worktxn1(*conns[c1]);
132132
worktxn2(*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
}elseif (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)

[8]ページ先頭

©2009-2025 Movatter.jp