@@ -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 );