Skip to content

Commit b56f3a2

Browse files
committed
Always build legacy_hello_cmd with legacy hello command
1 parent 85cb912 commit b56f3a2

File tree

5 files changed

+33
-8
lines changed

5 files changed

+33
-8
lines changed

src/libmongoc/src/mongoc/mongoc-client-pool.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -541,7 +541,7 @@ mongoc_client_pool_set_server_api (mongoc_client_pool_t *pool,
541541

542542
pool->api = mongoc_server_api_copy (api);
543543
bson_mutex_lock (&pool->topology->mutex);
544-
_mongoc_topology_scanner_set_server_api (pool->topology->scanner, api);
544+
_mongoc_topology_set_server_api (pool->topology, api);
545545
bson_mutex_unlock (&pool->topology->mutex);
546546
return true;
547547
}

src/libmongoc/src/mongoc/mongoc-client.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3122,7 +3122,7 @@ mongoc_client_set_server_api (mongoc_client_t *client,
31223122

31233123
client->api = mongoc_server_api_copy (api);
31243124
bson_mutex_lock (&client->topology->mutex);
3125-
_mongoc_topology_scanner_set_server_api (client->topology->scanner, api);
3125+
_mongoc_topology_set_server_api (client->topology, api);
31263126
bson_mutex_unlock (&client->topology->mutex);
31273127
return true;
31283128
}

src/libmongoc/src/mongoc/mongoc-topology-private.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,3 +230,7 @@ mongoc_topology_rescan_srv (mongoc_topology_t *topology);
230230
bool
231231
mongoc_topology_should_rescan_srv (mongoc_topology_t *topology);
232232
#endif
233+
234+
void
235+
_mongoc_topology_set_server_api (mongoc_topology_t *topology,
236+
const mongoc_server_api_t *api);

src/libmongoc/src/mongoc/mongoc-topology-scanner.c

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -109,15 +109,16 @@ _add_hello (mongoc_topology_scanner_t *ts)
109109
mongoc_server_api_t *api = ts->api;
110110

111111
BSON_APPEND_INT32 (&ts->hello_cmd, "hello", 1);
112+
BSON_APPEND_BOOL (&ts->hello_cmd, "helloOk", true);
113+
114+
BSON_APPEND_INT32 (&ts->legacy_hello_cmd, HANDSHAKE_CMD_LEGACY_HELLO, 1);
115+
BSON_APPEND_BOOL (&ts->legacy_hello_cmd, "helloOk", true);
112116

113117
if (api) {
114118
BSON_APPEND_INT32 (&ts->legacy_hello_cmd, "hello", 1);
115119

116120
_mongoc_cmd_append_server_api (&ts->hello_cmd, api);
117121
_mongoc_cmd_append_server_api (&ts->legacy_hello_cmd, api);
118-
} else {
119-
BSON_APPEND_INT32 (&ts->legacy_hello_cmd, HANDSHAKE_CMD_LEGACY_HELLO, 1);
120-
BSON_APPEND_BOOL (&ts->legacy_hello_cmd, "helloOk", true);
121122
}
122123
}
123124

@@ -260,7 +261,7 @@ _build_handshake_cmd (mongoc_topology_scanner_t *ts)
260261
char buf[16];
261262

262263
bson_destroy (doc);
263-
bson_copy_to (&ts->legacy_hello_cmd, doc);
264+
bson_copy_to (ts->api ? &ts->hello_cmd : &ts->legacy_hello_cmd, doc);
264265

265266
BSON_APPEND_DOCUMENT_BEGIN (doc, HANDSHAKE_FIELD, &subdoc);
266267
res = _mongoc_handshake_build_doc_with_application (&subdoc, ts->appname);
@@ -288,7 +289,7 @@ const bson_t *
288289
_mongoc_topology_scanner_get_monitoring_cmd (mongoc_topology_scanner_t *ts,
289290
bool hello_ok)
290291
{
291-
return hello_ok ? &ts->hello_cmd : &ts->legacy_hello_cmd;
292+
return hello_ok || ts->api ? &ts->hello_cmd : &ts->legacy_hello_cmd;
292293
}
293294

294295
/* Caller must lock topology->mutex to protect handshake_cmd. This
@@ -309,7 +310,7 @@ _mongoc_topology_scanner_get_handshake_cmd (mongoc_topology_scanner_t *ts)
309310

310311
/* If the doc turned out to be too big */
311312
if (!ts->handshake_ok_to_send) {
312-
return &ts->legacy_hello_cmd;
313+
return ts->api ? &ts->hello_cmd : &ts->legacy_hello_cmd;
313314
}
314315

315316
return &ts->handshake_cmd;

src/libmongoc/src/mongoc/mongoc-topology.c

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1824,3 +1824,23 @@ _topology_collect_errors (mongoc_topology_t *topology, bson_error_t *error_out)
18241824
sizeof (error_out->message));
18251825
bson_string_free (error_message, true);
18261826
}
1827+
1828+
/* Caller must lock topology->mutex to protect handshake_cmd. */
1829+
void
1830+
_mongoc_topology_set_server_api (mongoc_topology_t *topology,
1831+
const mongoc_server_api_t *api)
1832+
{
1833+
mongoc_server_description_t *server_description;
1834+
int i;
1835+
1836+
BSON_ASSERT (topology);
1837+
BSON_ASSERT (api);
1838+
1839+
/* Set hello_ok for all server descriptions */
1840+
for (i = 0; i < topology->description.servers->items_len; i++) {
1841+
server_description = topology->description.servers->items[i].item;
1842+
server_description->hello_ok = true;
1843+
}
1844+
1845+
_mongoc_topology_scanner_set_server_api (topology->scanner, api);
1846+
}

0 commit comments

Comments
 (0)