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

Commit 73916d4

Browse files
knizhnikkelvich
authored andcommitted
Fixes in MtmAdjustOldestXid
1 parent 24885ab commit 73916d4

File tree

3 files changed

+9
-68
lines changed

3 files changed

+9
-68
lines changed

arbiter.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -665,8 +665,8 @@ static void MtmTransReceiver(Datum arg)
665665
do {
666666
struct timeval tv;
667667
events = inset;
668-
tv.tv_sec = MtmKeepaliveTimeout/USEC;
669-
tv.tv_usec = MtmKeepaliveTimeout%USEC;
668+
tv.tv_sec = MtmKeepaliveTimeout/USECS_PER_SEC;
669+
tv.tv_usec = MtmKeepaliveTimeout%USECS_PER_SEC;
670670
do {
671671
n = select(max_fd+1, &events, NULL, NULL, &tv);
672672
} while (n < 0 && errno == EINTR);

multimaster.c

Lines changed: 6 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ typedef enum
9292
#define MTM_MAP_SIZE 1003
9393
#define MIN_WAIT_TIMEOUT 1000
9494
#define MAX_WAIT_TIMEOUT 100000
95-
#define STATUS_POLL_DELAY USEC
95+
#define STATUS_POLL_DELAY USECS_PER_SEC
9696

9797
void _PG_init(void);
9898
void _PG_fini(void);
@@ -261,7 +261,7 @@ timestamp_t MtmGetSystemTime(void)
261261
{
262262
struct timeval tv;
263263
gettimeofday(&tv, NULL);
264-
return (timestamp_t)tv.tv_sec*USEC + tv.tv_usec + Mtm->timeShift;
264+
return (timestamp_t)tv.tv_sec*USECS_PER_SEC + tv.tv_usec + Mtm->timeShift;
265265
}
266266

267267
timestamp_t MtmGetCurrentTime(void)
@@ -401,7 +401,7 @@ bool MtmXidInMVCCSnapshot(TransactionId xid, Snapshot snapshot)
401401
if (delta > maxSleepTime) {
402402
maxSleepTime = delta;
403403
}
404-
if (now > prevReportTime + USEC*10) {
404+
if (now > prevReportTime + USECS_PER_SEC*10) {
405405
prevReportTime = now;
406406
if (firstReportTime == 0) {
407407
firstReportTime = now;
@@ -442,70 +442,13 @@ bool MtmXidInMVCCSnapshot(TransactionId xid, Snapshot snapshot)
442442
* We collest oldest CSNs from all nodes and choose minimum from them.
443443
* If no such XID can be located, then return previously observed oldest XID
444444
*/
445-
#if 0
446-
static TransactionId
447-
MtmAdjustOldestXid(TransactionId xid)
448-
{
449-
if (TransactionIdIsValid(xid)) {
450-
MtmTransState *ts, *prev = NULL;
451-
csn_t oldestSnapshot = 0;
452-
int i;
453-
454-
MtmLock(LW_EXCLUSIVE);
455-
for (ts = Mtm->transListHead; ts != NULL; ts = ts->next) {
456-
if (TransactionIdPrecedes(ts->xid, xid)
457-
&& ts->status == TRANSACTION_STATUS_COMMITTED
458-
&& ts->csn > oldestSnapshot)
459-
{
460-
oldestSnapshot = ts->csn;
461-
}
462-
}
463-
Mtm->nodes[MtmNodeId-1].oldestSnapshot = oldestSnapshot;
464-
for (i = 0; i < Mtm->nAllNodes; i++) {
465-
if (!BIT_CHECK(Mtm->disabledNodeMask, i)
466-
&& Mtm->nodes[i].oldestSnapshot < oldestSnapshot)
467-
{
468-
oldestSnapshot = Mtm->nodes[i].oldestSnapshot;
469-
}
470-
}
471-
oldestSnapshot -= MtmVacuumDelay*USEC;
472-
for (ts = Mtm->transListHead;
473-
ts != NULL
474-
&& ts->csn < oldestSnapshot
475-
&& TransactionIdPrecedes(ts->xid, xid)
476-
&& (ts->status == TRANSACTION_STATUS_COMMITTED ||
477-
ts->status == TRANSACTION_STATUS_ABORTED);
478-
ts = ts->next)
479-
{
480-
if (ts->status == TRANSACTION_STATUS_COMMITTED) {
481-
prev = ts;
482-
}
483-
}
484-
if (prev != NULL) {
485-
for (ts = Mtm->transListHead; ts != prev; ts = ts->next) {
486-
/* Remove information about too old transactions */
487-
Assert(ts->status != TRANSACTION_STATUS_UNKNOWN);
488-
hash_search(MtmXid2State, &ts->xid, HASH_REMOVE, NULL);
489-
}
490-
Mtm->transListHead = prev;
491-
Mtm->oldestXid = xid = prev->xid;
492-
} else if (TransactionIdPrecedes(Mtm->oldestXid, xid)) {
493-
xid = Mtm->oldestXid;
494-
}
495-
MtmUnlock();
496-
}
497-
return xid;
498-
}
499-
#else
500445
static TransactionId
501446
MtmAdjustOldestXid(TransactionId xid)
502447
{
503448
if (TransactionIdIsValid(xid)) {
504449
MtmTransState *ts, *prev = NULL;
505450
int i;
506451

507-
return FirstNormalTransactionId;
508-
509452
MtmLock(LW_EXCLUSIVE);
510453
ts = (MtmTransState*)hash_search(MtmXid2State, &xid, HASH_FIND, NULL);
511454
if (ts != NULL && ts->status == TRANSACTION_STATUS_COMMITTED) {
@@ -518,7 +461,7 @@ MtmAdjustOldestXid(TransactionId xid)
518461
oldestSnapshot = Mtm->nodes[i].oldestSnapshot;
519462
}
520463
}
521-
oldestSnapshot -= MtmVacuumDelay*USEC;
464+
oldestSnapshot -= MtmVacuumDelay*USECS_PER_SEC;
522465

523466
for (ts = Mtm->transListHead;
524467
ts != NULL
@@ -540,7 +483,7 @@ MtmAdjustOldestXid(TransactionId xid)
540483
Mtm->transListHead = prev;
541484
Mtm->oldestXid = xid = prev->xid;
542485
} else {
543-
Assert(TransactionIdPrecedesOrEqual(Mtm->oldestXid, xid));
486+
Assert(TransactionIdPrecedesOrEquals(Mtm->oldestXid, xid));
544487
xid = Mtm->oldestXid;
545488
}
546489
} else {
@@ -552,7 +495,6 @@ MtmAdjustOldestXid(TransactionId xid)
552495
}
553496
return xid;
554497
}
555-
#endif
556498
/*
557499
* -------------------------------------------
558500
* Transaction list manipulation
@@ -2356,7 +2298,7 @@ mtm_get_nodes_state(PG_FUNCTION_ARGS)
23562298
usrfctx->values[4] = Int64GetDatum(lag);
23572299
usrfctx->nulls[4] = lag < 0;
23582300
usrfctx->values[5] = Int64GetDatum(Mtm->transCount ? Mtm->nodes[usrfctx->nodeId-1].transDelay/Mtm->transCount : 0);
2359-
usrfctx->values[6] = TimestampTzGetDatum(time_t_to_timestamptz(Mtm->nodes[usrfctx->nodeId-1].lastStatusChangeTime/USEC));
2301+
usrfctx->values[6] = TimestampTzGetDatum(time_t_to_timestamptz(Mtm->nodes[usrfctx->nodeId-1].lastStatusChangeTime/USECS_PER_SEC));
23602302
usrfctx->values[7] = CStringGetTextDatum(Mtm->nodes[usrfctx->nodeId-1].con.connStr);
23612303
usrfctx->nodeId += 1;
23622304

multimaster.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,7 @@
4646
#define MULTIMASTER_BROADCAST_SERVICE "mtm_broadcast"
4747
#define MULTIMASTER_ADMIN "mtm_admin"
4848

49-
#define USEC 1000000
50-
#define MB (1024*1024)
49+
#define MB (1024*1024L)
5150

5251
#define USEC_TO_MSEC(t) ((t)/1000)
5352
#define MSEC_TO_USEC(t) ((t)*1000)

0 commit comments

Comments
 (0)