Skip to content

Commit 2f05513

Browse files
committed
CDRIVER-4145 do not monitor an invalid topology (#878)
1 parent 5e33ee4 commit 2f05513

File tree

4 files changed

+16
-7
lines changed

4 files changed

+16
-7
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,10 @@ _mongoc_topology_background_monitoring_start (mongoc_topology_t *topology)
134134
BSON_ASSERT (!topology->single_threaded);
135135
MONGOC_DEBUG_ASSERT (COMMON_PREFIX (mutex_is_locked) (&topology->mutex));
136136

137+
if (!topology->valid) {
138+
return;
139+
}
140+
137141
if (topology->scanner_state == MONGOC_TOPOLOGY_SCANNER_BG_RUNNING) {
138142
return;
139143
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,11 @@ typedef struct _mongoc_topology_t {
129129

130130
/* This is overridable for SRV polling tests to mock DNS records. */
131131
_mongoc_rr_resolver_fn rr_resolver;
132+
133+
/* valid is false when mongoc_topology_new failed to construct a valid topology.
134+
* This could occur if the URI is invalid.
135+
* An invalid topology does not monitor servers. */
136+
bool valid;
132137
} mongoc_topology_t;
133138

134139
mongoc_topology_t *

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

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,6 @@ mongoc_topology_new (const mongoc_uri_t *uri, bool single_threaded)
237237
int64_t heartbeat_default;
238238
int64_t heartbeat;
239239
mongoc_topology_t *topology;
240-
bool topology_valid;
241240
mongoc_topology_description_type_t init_type;
242241
const char *service;
243242
char *prefixed_service;
@@ -248,7 +247,6 @@ mongoc_topology_new (const mongoc_uri_t *uri, bool single_threaded)
248247
bool directconnection;
249248

250249
BSON_ASSERT (uri);
251-
topology_valid = false;
252250

253251
#ifndef MONGOC_ENABLE_CRYPTO
254252
if (mongoc_uri_get_option_as_bool (
@@ -261,6 +259,7 @@ mongoc_topology_new (const mongoc_uri_t *uri, bool single_threaded)
261259

262260
topology = (mongoc_topology_t *) bson_malloc0 (sizeof *topology);
263261
topology->session_pool = NULL;
262+
topology->valid = false;
264263
heartbeat_default =
265264
single_threaded ? MONGOC_TOPOLOGY_HEARTBEAT_FREQUENCY_MS_SINGLE_THREADED
266265
: MONGOC_TOPOLOGY_HEARTBEAT_FREQUENCY_MS_MULTI_THREADED;
@@ -392,18 +391,18 @@ mongoc_topology_new (const mongoc_uri_t *uri, bool single_threaded)
392391
topology->srv_polling_rescan_interval_ms = BSON_MAX (
393392
rr_data.min_ttl * 1000, MONGOC_TOPOLOGY_MIN_RESCAN_SRV_INTERVAL_MS);
394393

395-
topology_valid = true;
394+
topology->valid = true;
396395
srv_fail:
397396
bson_free (rr_data.txt_record_opts);
398397
bson_free (prefixed_service);
399398
_mongoc_host_list_destroy_all (rr_data.hosts);
400399
} else {
401-
topology_valid = true;
400+
topology->valid = true;
402401
}
403402

404403
if (!mongoc_uri_finalize_loadbalanced (topology->uri,
405404
&topology->scanner->error)) {
406-
topology_valid = false;
405+
topology->valid = false;
407406
}
408407

409408
/*
@@ -471,7 +470,7 @@ mongoc_topology_new (const mongoc_uri_t *uri, bool single_threaded)
471470
mongoc_cond_init (&topology->srv_polling_cond);
472471
}
473472

474-
if (!topology_valid) {
473+
if (!topology->valid) {
475474
TRACE ("%s", "topology invalid");
476475
/* add no nodes */
477476
return topology;

src/libmongoc/tests/test-libmongoc.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3017,5 +3017,6 @@ test_framework_skip_if_no_getlasterror (void) {
30173017

30183018
bool
30193019
test_framework_is_loadbalanced (void) {
3020-
return test_framework_getenv_bool ("MONGOC_TEST_LOADBALANCED");
3020+
return test_framework_getenv_bool ("MONGOC_TEST_LOADBALANCED") ||
3021+
test_framework_getenv_bool ("MONGOC_TEST_DNS_LOADBALANCED");
30213022
}

0 commit comments

Comments
 (0)