@@ -322,6 +322,7 @@ _server_monitor_send_and_recv_opquery (mongoc_server_monitor_t *server_monitor,
322
322
323
323
static bool
324
324
_server_monitor_polling_hello (mongoc_server_monitor_t * server_monitor ,
325
+ bool hello_ok ,
325
326
bson_t * hello_response ,
326
327
bson_error_t * error )
327
328
{
@@ -330,7 +331,7 @@ _server_monitor_polling_hello (mongoc_server_monitor_t *server_monitor,
330
331
bool ret ;
331
332
332
333
hello = _mongoc_topology_scanner_get_monitoring_cmd (
333
- server_monitor -> topology -> scanner , server_monitor -> description -> hello_ok );
334
+ server_monitor -> topology -> scanner , hello_ok );
334
335
bson_copy_to (hello , & cmd );
335
336
336
337
_server_monitor_append_cluster_time (server_monitor , & cmd );
@@ -600,7 +601,7 @@ _server_monitor_awaitable_hello_recv (mongoc_server_monitor_t *server_monitor,
600
601
*/
601
602
static bool
602
603
_server_monitor_awaitable_hello (mongoc_server_monitor_t * server_monitor ,
603
- const bson_t * topology_version ,
604
+ const mongoc_server_description_t * description ,
604
605
bson_t * hello_response ,
605
606
bool * cancelled ,
606
607
bson_error_t * error )
@@ -610,11 +611,11 @@ _server_monitor_awaitable_hello (mongoc_server_monitor_t *server_monitor,
610
611
bool ret = false;
611
612
612
613
hello = _mongoc_topology_scanner_get_monitoring_cmd (
613
- server_monitor -> topology -> scanner , server_monitor -> description -> hello_ok );
614
+ server_monitor -> topology -> scanner , description -> hello_ok );
614
615
bson_copy_to (hello , & cmd );
615
616
616
617
_server_monitor_append_cluster_time (server_monitor , & cmd );
617
- bson_append_document (& cmd , "topologyVersion" , 15 , topology_version );
618
+ bson_append_document (& cmd , "topologyVersion" , 15 , & description -> topology_version );
618
619
bson_append_int32 (
619
620
& cmd , "maxAwaitTimeMS" , 14 , server_monitor -> heartbeat_frequency_ms );
620
621
bson_append_utf8 (& cmd , "$db" , 3 , "admin" , 5 );
@@ -861,7 +862,7 @@ mongoc_server_monitor_check_server (
861
862
MONITOR_LOG (server_monitor , "awaitable hello" );
862
863
ret = _server_monitor_awaitable_hello (
863
864
server_monitor ,
864
- & previous_description -> topology_version ,
865
+ previous_description ,
865
866
& hello_response ,
866
867
cancelled ,
867
868
& error );
@@ -872,7 +873,7 @@ mongoc_server_monitor_check_server (
872
873
awaited = false;
873
874
_server_monitor_heartbeat_started (server_monitor , awaited );
874
875
ret =
875
- _server_monitor_polling_hello (server_monitor , & hello_response , & error );
876
+ _server_monitor_polling_hello (server_monitor , previous_description -> hello_ok , & hello_response , & error );
876
877
877
878
exit :
878
879
duration_us = _now_us () - start_us ;
@@ -1052,16 +1053,6 @@ static BSON_THREAD_FUN (_server_monitor_thread, server_monitor_void)
1052
1053
continue ;
1053
1054
}
1054
1055
1055
- /* Update the server description of the server monitor to ensure we're
1056
- * running the correct heartbeat command in the future */
1057
- if (description -> has_hello_response ) {
1058
- mongoc_server_description_handle_hello (
1059
- server_monitor -> description ,
1060
- & description -> last_hello_response ,
1061
- description -> round_trip_time_msec ,
1062
- & description -> error );
1063
- }
1064
-
1065
1056
_server_monitor_update_topology_description (server_monitor , description );
1066
1057
1067
1058
/* Immediately proceed to the next check if the previous response was
@@ -1102,6 +1093,7 @@ static BSON_THREAD_FUN (_server_monitor_thread, server_monitor_void)
1102
1093
1103
1094
static bool
1104
1095
_server_monitor_ping_server (mongoc_server_monitor_t * server_monitor ,
1096
+ bool hello_ok ,
1105
1097
int64_t * rtt_ms )
1106
1098
{
1107
1099
bool ret = false;
@@ -1121,7 +1113,7 @@ _server_monitor_ping_server (mongoc_server_monitor_t *server_monitor,
1121
1113
if (server_monitor -> stream ) {
1122
1114
MONITOR_LOG (server_monitor , "rtt polling hello" );
1123
1115
ret = _server_monitor_polling_hello (
1124
- server_monitor , & hello_response , & error );
1116
+ server_monitor , hello_ok , & hello_response , & error );
1125
1117
if (ret ) {
1126
1118
* rtt_ms = (_now_us () - start_us ) / 1000 ;
1127
1119
}
@@ -1137,12 +1129,14 @@ _server_monitor_ping_server (mongoc_server_monitor_t *server_monitor,
1137
1129
static BSON_THREAD_FUN (_server_monitor_rtt_thread , server_monitor_void )
1138
1130
{
1139
1131
mongoc_server_monitor_t * server_monitor ;
1132
+ mongoc_server_description_t * sd ;
1140
1133
1141
1134
server_monitor = (mongoc_server_monitor_t * ) server_monitor_void ;
1142
1135
1143
1136
while (true) {
1144
1137
int64_t rtt_ms ;
1145
1138
bson_error_t error ;
1139
+ bool hello_ok ;
1146
1140
1147
1141
bson_mutex_lock (& server_monitor -> shared .mutex );
1148
1142
if (server_monitor -> shared .state != MONGOC_THREAD_RUNNING ) {
@@ -1151,10 +1145,14 @@ static BSON_THREAD_FUN (_server_monitor_rtt_thread, server_monitor_void)
1151
1145
}
1152
1146
bson_mutex_unlock (& server_monitor -> shared .mutex );
1153
1147
1154
- _server_monitor_ping_server (server_monitor , & rtt_ms );
1155
- if (rtt_ms != MONGOC_RTT_UNSET ) {
1156
- mongoc_server_description_t * sd ;
1148
+ sd = mongoc_topology_description_server_by_id (
1149
+ & server_monitor -> topology -> description ,
1150
+ server_monitor -> description -> id ,
1151
+ & error );
1152
+ hello_ok = sd ? sd -> hello_ok : false;
1157
1153
1154
+ _server_monitor_ping_server (server_monitor , hello_ok , & rtt_ms );
1155
+ if (rtt_ms != MONGOC_RTT_UNSET ) {
1158
1156
bson_mutex_lock (& server_monitor -> topology -> mutex );
1159
1157
sd = mongoc_topology_description_server_by_id (
1160
1158
& server_monitor -> topology -> description ,
0 commit comments