Skip to content

Commit a4c8c66

Browse files
authored
CDRIVER-4145 do not monitor an invalid topology (#878)
1 parent 42470e2 commit a4c8c66

File tree

4 files changed

+17
-7
lines changed

4 files changed

+17
-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
@@ -141,6 +141,11 @@ typedef struct _mongoc_topology_t {
141141

142142
/* This is overridable for SRV polling tests to mock DNS records. */
143143
_mongoc_rr_resolver_fn rr_resolver;
144+
145+
/* valid is false when mongoc_topology_new failed to construct a valid topology.
146+
* This could occur if the URI is invalid.
147+
* An invalid topology does not monitor servers. */
148+
bool valid;
144149
} mongoc_topology_t;
145150

146151
mongoc_topology_t *

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,6 @@ mongoc_topology_new (const mongoc_uri_t *uri, bool single_threaded)
286286
int64_t heartbeat_default;
287287
int64_t heartbeat;
288288
mongoc_topology_t *topology;
289-
bool topology_valid;
290289
mongoc_topology_description_type_t init_type;
291290
const char *service;
292291
char *prefixed_service;
@@ -297,7 +296,6 @@ mongoc_topology_new (const mongoc_uri_t *uri, bool single_threaded)
297296
bool directconnection;
298297

299298
BSON_ASSERT (uri);
300-
topology_valid = false;
301299

302300
#ifndef MONGOC_ENABLE_CRYPTO
303301
if (mongoc_uri_get_option_as_bool (
@@ -314,6 +312,8 @@ mongoc_topology_new (const mongoc_uri_t *uri, bool single_threaded)
314312
_server_session_destroy,
315313
_server_session_should_prune,
316314
topology);
315+
316+
topology->valid = false;
317317
heartbeat_default =
318318
single_threaded ? MONGOC_TOPOLOGY_HEARTBEAT_FREQUENCY_MS_SINGLE_THREADED
319319
: MONGOC_TOPOLOGY_HEARTBEAT_FREQUENCY_MS_MULTI_THREADED;
@@ -445,18 +445,18 @@ mongoc_topology_new (const mongoc_uri_t *uri, bool single_threaded)
445445
topology->srv_polling_rescan_interval_ms = BSON_MAX (
446446
rr_data.min_ttl * 1000, MONGOC_TOPOLOGY_MIN_RESCAN_SRV_INTERVAL_MS);
447447

448-
topology_valid = true;
448+
topology->valid = true;
449449
srv_fail:
450450
bson_free (rr_data.txt_record_opts);
451451
bson_free (prefixed_service);
452452
_mongoc_host_list_destroy_all (rr_data.hosts);
453453
} else {
454-
topology_valid = true;
454+
topology->valid = true;
455455
}
456456

457457
if (!mongoc_uri_finalize_loadbalanced (topology->uri,
458458
&topology->scanner->error)) {
459-
topology_valid = false;
459+
topology->valid = false;
460460
}
461461

462462
/*
@@ -524,7 +524,7 @@ mongoc_topology_new (const mongoc_uri_t *uri, bool single_threaded)
524524
mongoc_cond_init (&topology->srv_polling_cond);
525525
}
526526

527-
if (!topology_valid) {
527+
if (!topology->valid) {
528528
TRACE ("%s", "topology invalid");
529529
/* add no nodes */
530530
return topology;

src/libmongoc/tests/test-libmongoc.c

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

30243024
bool
30253025
test_framework_is_loadbalanced (void) {
3026-
return test_framework_getenv_bool ("MONGOC_TEST_LOADBALANCED");
3026+
return test_framework_getenv_bool ("MONGOC_TEST_LOADBALANCED") ||
3027+
test_framework_getenv_bool ("MONGOC_TEST_DNS_LOADBALANCED");
30273028
}

0 commit comments

Comments
 (0)