@@ -97,7 +97,7 @@ static void MtmSender(Datum arg);
97
97
static void MtmReceiver (Datum arg );
98
98
static void MtmMonitor (Datum arg );
99
99
static void MtmSendHeartbeat (void );
100
- static bool MtmSendToNode (int node , void const * buf , int size , time_t reconnectTimeout );
100
+ static bool MtmSendToNode (int node , void const * buf , int size );
101
101
102
102
char const * const MtmMessageKindMnem [] =
103
103
{
@@ -166,7 +166,7 @@ static void MtmRegisterSocket(int fd, int node)
166
166
ev .events = EPOLLIN ;
167
167
ev .data .u32 = node ;
168
168
if (epoll_ctl (epollfd , EPOLL_CTL_ADD , fd , & ev ) < 0 ) {
169
- MTM_ELOG (LOG , "Arbiter failed to add socket to epoll set: %d " , errno );
169
+ MTM_ELOG (LOG , "Arbiter failed to add socket to epoll set: %s " , strerror ( errno ) );
170
170
}
171
171
#else
172
172
FD_SET (fd , & inset );
@@ -180,7 +180,7 @@ static void MtmUnregisterSocket(int fd)
180
180
{
181
181
#if USE_EPOLL
182
182
if (epoll_ctl (epollfd , EPOLL_CTL_DEL , fd , NULL ) < 0 ) {
183
- MTM_ELOG (LOG , "Arbiter failed to unregister socket from epoll set: %d " , errno );
183
+ MTM_ELOG (LOG , "Arbiter failed to unregister socket from epoll set: %s " , strerror ( errno ) );
184
184
}
185
185
#else
186
186
FD_CLR (fd , & inset );
@@ -371,7 +371,7 @@ static void MtmSendHeartbeat()
371
371
|| !BIT_CHECK (Mtm -> disabledNodeMask , i )
372
372
|| BIT_CHECK (Mtm -> reconnectMask , i )))
373
373
{
374
- if (!MtmSendToNode (i , & msg , sizeof (msg ), MtmHeartbeatRecvTimeout )) {
374
+ if (!MtmSendToNode (i , & msg , sizeof (msg ))) {
375
375
MTM_ELOG (LOG , "Arbiter failed to send heartbeat to node %d" , i + 1 );
376
376
} else {
377
377
if (last_heartbeat_to_node [i ] + MSEC_TO_USEC (MtmHeartbeatSendTimeout )* 2 < now ) {
@@ -408,7 +408,7 @@ void MtmCheckHeartbeat()
408
408
}
409
409
410
410
411
- static int MtmConnectSocket (int node , int port , time_t timeout )
411
+ static int MtmConnectSocket (int node , int port )
412
412
{
413
413
struct addrinfo * addrs = NULL ;
414
414
struct addrinfo * addr ;
@@ -417,12 +417,9 @@ static int MtmConnectSocket(int node, int port, time_t timeout)
417
417
MtmHandshakeMessage req ;
418
418
MtmArbiterMessage resp ;
419
419
int sd = -1 ;
420
- int ret ;
421
- timestamp_t start = MtmGetSystemTime ();
420
+ int rc ;
422
421
char const * host = Mtm -> nodes [node ].con .hostName ;
423
422
nodemask_t save_mask = busy_mask ;
424
- timestamp_t afterWait ;
425
- timestamp_t beforeWait ;
426
423
427
424
/* Initialize hint structure */
428
425
MemSet (& hint , 0 , sizeof (hint ));
@@ -431,67 +428,60 @@ static int MtmConnectSocket(int node, int port, time_t timeout)
431
428
432
429
snprintf (portstr , sizeof (portstr ), "%d" , port );
433
430
434
- ret = pg_getaddrinfo_all (host , portstr , & hint , & addrs );
435
- if (ret != 0 )
431
+ rc = pg_getaddrinfo_all (host , portstr , & hint , & addrs );
432
+ if (rc != 0 )
436
433
{
437
- MTM_ELOG (LOG , "Arbiter failed to resolve host '%s' by name: (%d) % s" , host , ret , gai_strerror (ret ));
434
+ MTM_ELOG (LOG , "Arbiter failed to resolve host '%s' by name: % s" , host , gai_strerror (rc ));
438
435
return -1 ;
439
436
}
440
437
BIT_SET (busy_mask , node );
441
438
442
- Retry :
443
- while (1 ) {
444
- int rc = -1 ;
445
- sd = pg_socket (AF_INET , SOCK_STREAM , 0 , MtmUseRDMA );
446
- if (sd < 0 ) {
447
- MTM_ELOG (LOG , "Arbiter failed to create socket: %d" , errno );
448
- goto Error ;
449
- }
450
- rc = pg_fcntl (sd , F_SETFL , O_NONBLOCK , MtmUseRDMA );
451
- if (rc < 0 ) {
452
- MTM_ELOG (LOG , "Arbiter failed to switch socket to non-blocking mode: %d" , errno );
453
- goto Error ;
454
- }
455
- for (addr = addrs ; addr != NULL ; addr = addr -> ai_next )
456
- {
457
- do {
458
- rc = pg_connect (sd , addr -> ai_addr , addr -> ai_addrlen , MtmUseRDMA );
459
- } while (rc < 0 && errno == EINTR );
439
+ Retry :
460
440
461
- if (rc >= 0 || errno == EINPROGRESS ) {
462
- break ;
463
- }
464
- }
465
- if (rc == 0 ) {
441
+ sd = socket (AF_INET , SOCK_STREAM , 0 );
442
+ if (sd < 0 ) {
443
+ MTM_ELOG (LOG , "Arbiter failed to create socket: %s" , strerror (errno ));
444
+ goto Error ;
445
+ }
446
+ rc = fcntl (sd , F_SETFL , O_NONBLOCK );
447
+ if (rc < 0 ) {
448
+ MTM_ELOG (LOG , "Arbiter failed to switch socket to non-blocking mode: %s" , strerror (errno ));
449
+ goto Error ;
450
+ }
451
+ for (addr = addrs ; addr != NULL ; addr = addr -> ai_next )
452
+ {
453
+ do {
454
+ rc = connect (sd , addr -> ai_addr , addr -> ai_addrlen );
455
+ } while (rc < 0 && errno == EINTR );
456
+
457
+ if (rc >= 0 || errno == EINPROGRESS ) {
466
458
break ;
467
459
}
468
- beforeWait = MtmGetSystemTime ();
469
- if (errno != EINPROGRESS || start + MSEC_TO_USEC (timeout ) < beforeWait ) {
470
- MTM_ELOG (WARNING , "Arbiter failed to connect to %s:%d: error=%d" , host , port , errno );
471
- goto Error ;
472
- } else {
473
- rc = MtmWaitSocket (sd , true, MtmHeartbeatSendTimeout );
474
- if (rc == 1 ) {
475
- socklen_t optlen = sizeof (int );
476
- if (getsockopt (sd , SOL_SOCKET , SO_ERROR , (void * )& rc , & optlen ) < 0 ) {
477
- MTM_ELOG (WARNING , "Arbiter failed to getsockopt for %s:%d: error=%d" , host , port , errno );
478
- goto Error ;
479
- }
480
- if (rc == 0 ) {
481
- break ;
482
- } else {
483
- MTM_ELOG (WARNING , "Arbiter trying to connect to %s:%d: rc=%d, error=%d" , host , port , rc , errno );
484
- }
485
- } else {
486
- MTM_ELOG (WARNING , "Arbiter waiting socket to %s:%d: rc=%d, error=%d" , host , port , rc , errno );
460
+ }
461
+
462
+ if (rc != 0 && errno == EINPROGRESS ) {
463
+ rc = MtmWaitSocket (sd , true, MtmHeartbeatSendTimeout );
464
+ if (rc == 1 ) {
465
+ socklen_t optlen = sizeof (int );
466
+ int errcode ;
467
+
468
+ if (getsockopt (sd , SOL_SOCKET , SO_ERROR , (void * )& errcode , & optlen ) < 0 ) {
469
+ MTM_ELOG (WARNING , "Arbiter failed to getsockopt for %s:%d: %s" , host , port , strerror (errcode ));
470
+ goto Error ;
487
471
}
488
- pg_closesocket (sd , MtmUseRDMA );
489
- afterWait = MtmGetSystemTime ();
490
- if (afterWait < beforeWait + MSEC_TO_USEC (MtmHeartbeatSendTimeout )) {
491
- MtmSleep (beforeWait + MSEC_TO_USEC (MtmHeartbeatSendTimeout ) - afterWait );
472
+ if (errcode != 0 ) {
473
+ MTM_ELOG (WARNING , "Arbiter trying to connect to %s:%d: %s" , host , port , strerror (errcode ));
474
+ goto Error ;
492
475
}
476
+ } else {
477
+ MTM_ELOG (WARNING , "Arbiter waiting socket to %s:%d: %s" , host , port , strerror (errno ));
493
478
}
494
479
}
480
+ else if (rc != 0 ) {
481
+ MTM_ELOG (WARNING , "Arbiter failed to connect to %s:%d: (%d) %s" , host , port , rc , strerror (errno ));
482
+ goto Error ;
483
+ }
484
+
495
485
MtmSetSocketOptions (sd );
496
486
MtmInitMessage (& req .hdr , MSG_HANDSHAKE );
497
487
req .hdr .node = MtmNodeId ;
@@ -500,13 +490,13 @@ static int MtmConnectSocket(int node, int port, time_t timeout)
500
490
req .hdr .csn = MtmGetCurrentTime ();
501
491
strcpy (req .connStr , Mtm -> nodes [MtmNodeId - 1 ].con .connStr );
502
492
if (!MtmWriteSocket (sd , & req , sizeof req )) {
503
- MTM_ELOG (WARNING , "Arbiter failed to send handshake message to %s:%d: %d " , host , port , errno );
504
- pg_closesocket (sd , MtmUseRDMA );
493
+ MTM_ELOG (WARNING , "Arbiter failed to send handshake message to %s:%d: %s " , host , port , strerror ( errno ) );
494
+ close (sd );
505
495
goto Retry ;
506
496
}
507
497
if (MtmReadSocket (sd , & resp , sizeof resp ) != sizeof (resp )) {
508
- MTM_ELOG (WARNING , "Arbiter failed to receive response for handshake message from %s:%d: errno=%d " , host , port , errno );
509
- pg_closesocket (sd , MtmUseRDMA );
498
+ MTM_ELOG (WARNING , "Arbiter failed to receive response for handshake message from %s:%d: %s " , host , port , strerror ( errno ) );
499
+ close (sd );
510
500
goto Retry ;
511
501
}
512
502
if (resp .code != MSG_STATUS || resp .dxid != HANDSHAKE_MAGIC ) {
@@ -527,7 +517,7 @@ static int MtmConnectSocket(int node, int port, time_t timeout)
527
517
528
518
return sd ;
529
519
530
- Error :
520
+ Error :
531
521
busy_mask = save_mask ;
532
522
if (sd >= 0 ) {
533
523
pg_closesocket (sd , MtmUseRDMA );
@@ -551,7 +541,7 @@ static void MtmOpenConnections()
551
541
}
552
542
for (i = 0 ; i < nNodes ; i ++ ) {
553
543
if (i + 1 != MtmNodeId && i < Mtm -> nAllNodes ) {
554
- sockets [i ] = MtmConnectSocket (i , Mtm -> nodes [i ].con .arbiterPort , MtmConnectTimeout );
544
+ sockets [i ] = MtmConnectSocket (i , Mtm -> nodes [i ].con .arbiterPort );
555
545
if (sockets [i ] < 0 ) {
556
546
MtmOnNodeDisconnect (i + 1 );
557
547
}
@@ -566,7 +556,7 @@ static void MtmOpenConnections()
566
556
}
567
557
568
558
569
- static bool MtmSendToNode (int node , void const * buf , int size , time_t reconnectTimeout )
559
+ static bool MtmSendToNode (int node , void const * buf , int size )
570
560
{
571
561
bool result = true;
572
562
nodemask_t save_mask = busy_mask ;
@@ -589,11 +579,11 @@ static bool MtmSendToNode(int node, void const* buf, int size, time_t reconnectT
589
579
}
590
580
if (sockets [node ] < 0 || !MtmWriteSocket (sockets [node ], buf , size )) {
591
581
if (sockets [node ] >= 0 ) {
592
- MTM_ELOG (WARNING , "Arbiter fail to write to node %d: %d " , node + 1 , errno );
593
- pg_closesocket (sockets [node ], MtmUseRDMA );
582
+ MTM_ELOG (WARNING , "Arbiter fail to write to node %d: %s " , node + 1 , strerror ( errno ) );
583
+ close (sockets [node ]);
594
584
sockets [node ] = -1 ;
595
585
}
596
- sockets [node ] = MtmConnectSocket (node , Mtm -> nodes [node ].con .arbiterPort , reconnectTimeout );
586
+ sockets [node ] = MtmConnectSocket (node , Mtm -> nodes [node ].con .arbiterPort );
597
587
if (sockets [node ] < 0 ) {
598
588
MtmOnNodeDisconnect (node + 1 );
599
589
result = false;
@@ -613,7 +603,7 @@ static int MtmReadFromNode(int node, void* buf, int buf_size)
613
603
{
614
604
int rc = MtmReadSocket (sockets [node ], buf , buf_size );
615
605
if (rc <= 0 ) {
616
- MTM_ELOG (WARNING , "Arbiter failed to read from node=%d, rc=%d, errno=%d " , node + 1 , rc , errno );
606
+ MTM_ELOG (WARNING , "Arbiter failed to read from node=%d: %s " , node + 1 , strerror ( errno ) );
617
607
MtmDisconnect (node );
618
608
}
619
609
return rc ;
@@ -623,17 +613,17 @@ static void MtmAcceptOneConnection()
623
613
{
624
614
int fd = pg_accept (gateway , NULL , NULL , MtmUseRDMA );
625
615
if (fd < 0 ) {
626
- MTM_ELOG (WARNING , "Arbiter failed to accept socket: %d " , errno );
616
+ MTM_ELOG (WARNING , "Arbiter failed to accept socket: %s " , strerror ( errno ) );
627
617
} else {
628
618
MtmHandshakeMessage req ;
629
619
MtmArbiterMessage resp ;
630
620
int rc = pg_fcntl (fd , F_SETFL , O_NONBLOCK , MtmUseRDMA );
631
621
if (rc < 0 ) {
632
- MTM_ELOG (ERROR , "Arbiter failed to switch socket to non-blocking mode: %d " , errno );
622
+ MTM_ELOG (ERROR , "Arbiter failed to switch socket to non-blocking mode: %s " , strerror ( errno ) );
633
623
}
634
624
rc = MtmReadSocket (fd , & req , sizeof req );
635
625
if (rc < sizeof (req )) {
636
- MTM_ELOG (WARNING , "Arbiter failed to handshake socket: %d, errno=%d " , rc , errno );
626
+ MTM_ELOG (WARNING , "Arbiter failed to handshake socket: %s " , strerror ( errno ) );
637
627
pg_closesocket (fd , MtmUseRDMA );
638
628
} else if (req .hdr .code != MSG_HANDSHAKE && req .hdr .dxid != HANDSHAKE_MAGIC ) {
639
629
MTM_ELOG (WARNING , "Arbiter get unexpected handshake message %d" , req .hdr .code );
@@ -770,7 +760,7 @@ static void MtmSender(Datum arg)
770
760
771
761
for (i = 0 ; i < Mtm -> nAllNodes ; i ++ ) {
772
762
if (txBuffer [i ].used != 0 ) {
773
- MtmSendToNode (i , txBuffer [i ].data , txBuffer [i ].used * sizeof (MtmArbiterMessage ), MtmReconnectTimeout );
763
+ MtmSendToNode (i , txBuffer [i ].data , txBuffer [i ].used * sizeof (MtmArbiterMessage ));
774
764
txBuffer [i ].used = 0 ;
775
765
}
776
766
}
@@ -870,7 +860,7 @@ static void MtmReceiver(Datum arg)
870
860
if (errno == EINTR ) {
871
861
continue ;
872
862
}
873
- MTM_ELOG (ERROR , "Arbiter failed to poll sockets: %d " , errno );
863
+ MTM_ELOG (ERROR , "Arbiter failed to poll sockets: %s " , strerror ( errno ) );
874
864
}
875
865
for (j = 0 ; j < n ; j ++ ) {
876
866
i = events [j ].data .u32 ;
@@ -894,7 +884,7 @@ static void MtmReceiver(Datum arg)
894
884
} while (n < 0 && MtmRecovery ());
895
885
896
886
if (n < 0 ) {
897
- MTM_ELOG (ERROR , "Arbiter failed to select sockets: %d " , errno );
887
+ MTM_ELOG (ERROR , "Arbiter failed to select sockets: %s " , strerror ( errno ) );
898
888
}
899
889
for (i = 0 ; i < nNodes ; i ++ ) {
900
890
if (sockets [i ] >= 0 && FD_ISSET (sockets [i ], & events ))
0 commit comments