@@ -368,7 +368,7 @@ void MtmCheckHeartbeat()
368
368
}
369
369
370
370
371
- static int MtmConnectSocket (char const * host , int port , int timeout )
371
+ static int MtmConnectSocket (int node , int port , int timeout )
372
372
{
373
373
struct sockaddr_in sock_inet ;
374
374
unsigned addrs [MAX_ROUTES ];
@@ -377,7 +377,7 @@ static int MtmConnectSocket(char const* host, int port, int timeout)
377
377
MtmArbiterMessage resp ;
378
378
int sd ;
379
379
timestamp_t start = MtmGetSystemTime ();
380
-
380
+ char const * host = Mtm -> nodes [ node ]. con . hostName ;
381
381
382
382
sock_inet .sin_family = AF_INET ;
383
383
sock_inet .sin_port = htons (port );
@@ -446,6 +446,7 @@ static int MtmConnectSocket(char const* host, int port, int timeout)
446
446
req .hdr .sxid = ShmemVariableCache -> nextXid ;
447
447
req .hdr .csn = MtmGetCurrentTime ();
448
448
req .hdr .disabledNodeMask = Mtm -> disabledNodeMask ;
449
+ req .hdr .seqno = Mtm -> nodes [node ].recvSeqNo ;
449
450
strcpy (req .connStr , Mtm -> nodes [MtmNodeId - 1 ].con .connStr );
450
451
if (!MtmWriteSocket (sd , & req , sizeof req )) {
451
452
elog (WARNING , "Arbiter failed to send handshake message to %s:%d: %d" , host , port , errno );
@@ -464,7 +465,9 @@ static int MtmConnectSocket(char const* host, int port, int timeout)
464
465
}
465
466
466
467
MtmLock (LW_EXCLUSIVE );
467
- Mtm -> nodes [resp .node - 1 ].sendSeqNo = resp .seqno ;
468
+ if (Mtm -> nodes [resp .node - 1 ].sendSeqNo < resp .seqno ) {
469
+ Mtm -> nodes [resp .node - 1 ].sendSeqNo = resp .seqno ;
470
+ }
468
471
469
472
/* Some node considered that I am dead, so switch to recovery mode */
470
473
if (BIT_CHECK (resp .disabledNodeMask , MtmNodeId - 1 )) {
@@ -499,7 +502,7 @@ static void MtmOpenConnections()
499
502
} else {
500
503
arbiterPort = MtmArbiterPort + i + 1 ;
501
504
}
502
- sockets [i ] = MtmConnectSocket (Mtm -> nodes [ i ]. con . hostName , arbiterPort , MtmConnectTimeout );
505
+ sockets [i ] = MtmConnectSocket (i , arbiterPort , MtmConnectTimeout );
503
506
if (sockets [i ] < 0 ) {
504
507
MtmOnNodeDisconnect (i + 1 );
505
508
}
@@ -531,7 +534,7 @@ static bool MtmSendToNode(int node, void const* buf, int size)
531
534
close (sockets [node ]);
532
535
sockets [node ] = -1 ;
533
536
}
534
- sockets [node ] = MtmConnectSocket (Mtm -> nodes [ node ]. con . hostName , MtmArbiterPort + node + 1 , MtmReconnectTimeout );
537
+ sockets [node ] = MtmConnectSocket (node , MtmArbiterPort + node + 1 , MtmReconnectTimeout );
535
538
if (sockets [node ] < 0 ) {
536
539
MtmOnNodeDisconnect (node + 1 );
537
540
return false;
@@ -579,6 +582,9 @@ static void MtmAcceptOneConnection()
579
582
resp .csn = MtmGetCurrentTime ();
580
583
resp .node = MtmNodeId ;
581
584
resp .seqno = Mtm -> nodes [req .hdr .node - 1 ].recvSeqNo ;
585
+ if (Mtm -> nodes [req .hdr .node - 1 ].sendSeqNo < req .hdr .seqno ) {
586
+ Mtm -> nodes [req .hdr .node - 1 ].sendSeqNo = req .hdr .seqno ;
587
+ }
582
588
MtmUpdateNodeConnectionInfo (& Mtm -> nodes [req .hdr .node - 1 ].con , req .connStr );
583
589
if (!MtmWriteSocket (fd , & resp , sizeof resp )) {
584
590
elog (WARNING , "Arbiter failed to write response for handshake message to node %d" , resp .node );
0 commit comments