@@ -369,13 +369,13 @@ static int MtmConnectSocket(char const* host, int port, int max_attempts)
369
369
370
370
static void MtmOpenConnections ()
371
371
{
372
- int nNodes = MtmNodes ;
372
+ int nNodes = MtmMaxNodes ;
373
373
int i ;
374
374
375
375
sockets = (int * )palloc (sizeof (int )* nNodes );
376
376
377
377
for (i = 0 ; i < nNodes ; i ++ ) {
378
- if (i + 1 != MtmNodeId ) {
378
+ if (i + 1 != MtmNodeId && i < Mtm -> nAllNodes ) {
379
379
sockets [i ] = MtmConnectSocket (Mtm -> nodes [i ].con .hostName , MtmArbiterPort + i + 1 , MtmConnectAttempts );
380
380
if (sockets [i ] < 0 ) {
381
381
MtmOnNodeDisconnect (i + 1 );
@@ -384,8 +384,8 @@ static void MtmOpenConnections()
384
384
sockets [i ] = -1 ;
385
385
}
386
386
}
387
- if (Mtm -> nNodes < MtmNodes /2 + 1 ) { /* no quorum */
388
- elog (WARNING , "Node is out of quorum: only %d nodes from %d are accssible " , Mtm -> nNodes , MtmNodes );
387
+ if (Mtm -> nLiveNodes < Mtm -> nAllNodes /2 + 1 ) { /* no quorum */
388
+ elog (WARNING , "Node is out of quorum: only %d nodes of %d are accessible " , Mtm -> nLiveNodes , Mtm -> nAllNodes );
389
389
MtmSwitchClusterMode (MTM_IN_MINORITY );
390
390
} else if (Mtm -> status == MTM_INITIALIZATION ) {
391
391
MtmSwitchClusterMode (MTM_CONNECTED );
@@ -444,7 +444,7 @@ static void MtmAcceptOneConnection()
444
444
elog (WARNING , "Arbiter get unexpected handshake message %d" , req .hdr .code );
445
445
close (fd );
446
446
} else {
447
- Assert (req .hdr .node > 0 && req .hdr .node <= MtmNodes && req .hdr .node != MtmNodeId );
447
+ Assert (req .hdr .node > 0 && req .hdr .node <= Mtm -> nAllNodes && req .hdr .node != MtmNodeId );
448
448
resp .code = MSG_STATUS ;
449
449
resp .disabledNodeMask = Mtm -> disabledNodeMask ;
450
450
resp .dxid = HANDSHAKE_MAGIC ;
@@ -472,9 +472,10 @@ static void MtmAcceptIncomingConnections()
472
472
struct sockaddr_in sock_inet ;
473
473
int on = 1 ;
474
474
int i ;
475
+ int nNodes = MtmMaxNodes ;
475
476
476
- sockets = (int * )palloc (sizeof (int )* MtmNodes );
477
- for (i = 0 ; i < MtmNodes ; i ++ ) {
477
+ sockets = (int * )palloc (sizeof (int )* nNodes );
478
+ for (i = 0 ; i < nNodes ; i ++ ) {
478
479
sockets [i ] = -1 ;
479
480
}
480
481
sock_inet .sin_family = AF_INET ;
@@ -490,7 +491,7 @@ static void MtmAcceptIncomingConnections()
490
491
if (bind (gateway , (struct sockaddr * )& sock_inet , sizeof (sock_inet )) < 0 ) {
491
492
elog (ERROR , "Arbiter failed to bind socket: %d" , errno );
492
493
}
493
- if (listen (gateway , MtmNodes ) < 0 ) {
494
+ if (listen (gateway , nNodes ) < 0 ) {
494
495
elog (ERROR , "Arbiter failed to listen socket: %d" , errno );
495
496
}
496
497
@@ -527,22 +528,22 @@ static void MtmBroadcastMessage(MtmBuffer* txBuffer, MtmTransState* ts)
527
528
{
528
529
int i ;
529
530
int n = 1 ;
530
- for (i = 0 ; i < MtmNodes ; i ++ )
531
+ for (i = 0 ; i < Mtm -> nAllNodes ; i ++ )
531
532
{
532
533
if (!BIT_CHECK (Mtm -> disabledNodeMask , i ) && TransactionIdIsValid (ts -> xids [i ])) {
533
534
Assert (i + 1 != MtmNodeId );
534
535
MtmAppendBuffer (txBuffer , ts -> xids [i ], i , ts );
535
536
n += 1 ;
536
537
}
537
538
}
538
- Assert (n == Mtm -> nNodes );
539
+ Assert (n == Mtm -> nLiveNodes );
539
540
}
540
541
541
542
542
543
static void MtmTransSender (Datum arg )
543
544
{
544
545
sigset_t sset ;
545
- int nNodes = MtmNodes ;
546
+ int nNodes = MtmMaxNodes ;
546
547
int i ;
547
548
MtmBuffer * txBuffer = (MtmBuffer * )palloc (sizeof (MtmBuffer )* nNodes );
548
549
@@ -580,7 +581,7 @@ static void MtmTransSender(Datum arg)
580
581
581
582
MtmUnlock ();
582
583
583
- for (i = 0 ; i < nNodes ; i ++ ) {
584
+ for (i = 0 ; i < Mtm -> nAllNodes ; i ++ ) {
584
585
if (txBuffer [i ].used != 0 ) {
585
586
MtmSendToNode (i , txBuffer [i ].data , txBuffer [i ].used * sizeof (MtmArbiterMessage ));
586
587
txBuffer [i ].used = 0 ;
@@ -593,7 +594,7 @@ static void MtmTransSender(Datum arg)
593
594
#if !USE_EPOLL
594
595
static bool MtmRecovery ()
595
596
{
596
- int nNodes = MtmNodes ;
597
+ int nNodes = Mtm -> nAllNodes ;
597
598
bool recovered = false;
598
599
int i ;
599
600
@@ -618,7 +619,7 @@ static bool MtmRecovery()
618
619
static void MtmTransReceiver (Datum arg )
619
620
{
620
621
sigset_t sset ;
621
- int nNodes = MtmNodes ;
622
+ int nNodes = MtmMaxNodes ;
622
623
int nResponses ;
623
624
int i , j , n , rc ;
624
625
MtmBuffer * rxBuffer = (MtmBuffer * )palloc (sizeof (MtmBuffer )* nNodes );
@@ -708,7 +709,7 @@ static void MtmTransReceiver(Datum arg)
708
709
if (MtmIsCoordinator (ts )) {
709
710
switch (msg -> code ) {
710
711
case MSG_READY :
711
- Assert (ts -> nVotes < Mtm -> nNodes );
712
+ Assert (ts -> nVotes < Mtm -> nLiveNodes );
712
713
Mtm -> nodes [msg -> node - 1 ].transDelay += MtmGetCurrentTime () - ts -> csn ;
713
714
ts -> xids [msg -> node - 1 ] = msg -> sxid ;
714
715
@@ -720,7 +721,7 @@ static void MtmTransReceiver(Datum arg)
720
721
MtmAbortTransaction (ts );
721
722
}
722
723
723
- if (++ ts -> nVotes == Mtm -> nNodes ) {
724
+ if (++ ts -> nVotes == Mtm -> nLiveNodes ) {
724
725
/* All nodes are finished their transactions */
725
726
if (ts -> status == TRANSACTION_STATUS_ABORTED ) {
726
727
MtmWakeUpBackend (ts );
@@ -736,23 +737,23 @@ static void MtmTransReceiver(Datum arg)
736
737
}
737
738
break ;
738
739
case MSG_ABORTED :
739
- Assert (ts -> nVotes < Mtm -> nNodes );
740
+ Assert (ts -> nVotes < Mtm -> nLiveNodes );
740
741
if (ts -> status != TRANSACTION_STATUS_ABORTED ) {
741
742
Assert (ts -> status == TRANSACTION_STATUS_IN_PROGRESS );
742
743
MtmAbortTransaction (ts );
743
744
}
744
- if (++ ts -> nVotes == Mtm -> nNodes ) {
745
+ if (++ ts -> nVotes == Mtm -> nLiveNodes ) {
745
746
MtmWakeUpBackend (ts );
746
747
}
747
748
break ;
748
749
case MSG_PREPARED :
749
750
Assert (ts -> status == TRANSACTION_STATUS_IN_PROGRESS );
750
- Assert (ts -> nVotes < Mtm -> nNodes );
751
+ Assert (ts -> nVotes < Mtm -> nLiveNodes );
751
752
if (msg -> csn > ts -> csn ) {
752
753
ts -> csn = msg -> csn ;
753
754
MtmSyncClock (ts -> csn );
754
755
}
755
- if (++ ts -> nVotes == Mtm -> nNodes ) {
756
+ if (++ ts -> nVotes == Mtm -> nLiveNodes ) {
756
757
ts -> csn = MtmAssignCSN ();
757
758
ts -> status = TRANSACTION_STATUS_UNKNOWN ;
758
759
MtmWakeUpBackend (ts );
0 commit comments