From 79bc0346fcc2f89177592998f199a63b07300458 Mon Sep 17 00:00:00 2001 From: Adrian Dole Date: Tue, 30 Jan 2024 13:34:02 -0800 Subject: [PATCH 01/10] Topology description --- .../mongoc-server-description-private.h | 4 +++ .../src/mongoc/mongoc-server-description.c | 12 +++++++++ .../mongoc-topology-description-private.h | 6 +++++ .../src/mongoc/mongoc-topology-description.c | 26 ++++++++++++++++++- src/libmongoc/src/mongoc/mongoc-topology.c | 15 ++++++----- 5 files changed, 55 insertions(+), 8 deletions(-) diff --git a/src/libmongoc/src/mongoc/mongoc-server-description-private.h b/src/libmongoc/src/mongoc/mongoc-server-description-private.h index 33812c9d6ea..c4cb56d6eb5 100644 --- a/src/libmongoc/src/mongoc/mongoc-server-description-private.h +++ b/src/libmongoc/src/mongoc/mongoc-server-description-private.h @@ -223,4 +223,8 @@ extern const bson_oid_t kZeroServiceId; bool mongoc_server_description_has_service_id (const mongoc_server_description_t *description); +/* Generate human-readable description of the server */ +bson_string_t * +mongoc_server_description_info (const mongoc_server_description_t *sd); + #endif diff --git a/src/libmongoc/src/mongoc/mongoc-server-description.c b/src/libmongoc/src/mongoc/mongoc-server-description.c index e0ae4fa2763..2b2d97f7d54 100644 --- a/src/libmongoc/src/mongoc/mongoc-server-description.c +++ b/src/libmongoc/src/mongoc/mongoc-server-description.c @@ -1225,3 +1225,15 @@ mongoc_server_description_has_service_id (const mongoc_server_description_t *des } return true; } + +bson_string_t * +mongoc_server_description_info (const mongoc_server_description_t *sd) +{ + bson_string_t *info = bson_string_new (NULL); + bson_string_append_printf (info, + "%s server_type: %s, rtt: %ld", + sd->host.host_and_port, + mongoc_server_description_type (sd), + sd->round_trip_time_msec); + return info; +} diff --git a/src/libmongoc/src/mongoc/mongoc-topology-description-private.h b/src/libmongoc/src/mongoc/mongoc-topology-description-private.h index 141c9c86ef0..120db9bfe7d 100644 --- a/src/libmongoc/src/mongoc/mongoc-topology-description-private.h +++ b/src/libmongoc/src/mongoc/mongoc-topology-description-private.h @@ -56,6 +56,7 @@ struct _mongoc_topology_description_t { * see Driver Sessions Spec. */ bson_t cluster_time; + /* smallest seen logicalSessionTimeoutMinutes, or -1 if any server has no * logicalSessionTimeoutMinutes. see Server Discovery and Monitoring Spec */ int64_t session_timeout_minutes; @@ -180,4 +181,9 @@ mongoc_deprioritized_servers_add_if_sharded (mongoc_deprioritized_servers_t *ds, mongoc_topology_description_type_t topology_type, const mongoc_server_description_t *sd); + +/* Generate human-readable description of the topology */ +bson_string_t * +_mongoc_topology_description_info (const mongoc_topology_description_t *td); + #endif /* MONGOC_TOPOLOGY_DESCRIPTION_PRIVATE_H */ diff --git a/src/libmongoc/src/mongoc/mongoc-topology-description.c b/src/libmongoc/src/mongoc/mongoc-topology-description.c index 54b82b3121b..d7e2384039a 100644 --- a/src/libmongoc/src/mongoc/mongoc-topology-description.c +++ b/src/libmongoc/src/mongoc/mongoc-topology-description.c @@ -2526,7 +2526,6 @@ _mongoc_topology_description_clear_connection_pool (mongoc_topology_description_ mc_tpl_sd_increment_generation (sd, service_id); } - void mongoc_deprioritized_servers_add_if_sharded (mongoc_deprioritized_servers_t *ds, mongoc_topology_description_type_t topology_type, @@ -2540,3 +2539,28 @@ mongoc_deprioritized_servers_add_if_sharded (mongoc_deprioritized_servers_t *ds, mongoc_deprioritized_servers_add (ds, sd); } } + +bool +_append_server_info (void *sd, void *info) +{ + bson_string_t *server_info = mongoc_server_description_info ((mongoc_server_description_t *) sd); + bson_string_append_printf ((bson_string_t *) info, "<%s>, ", server_info->str); + bson_string_free (server_info, true); + return true; +} + +bson_string_t * +_mongoc_topology_description_info (const mongoc_topology_description_t *td) +{ + bson_string_t *info = bson_string_new (NULL); + if (!td->_servers_ || td->_servers_->items_len == 0) { + bson_string_append (info, "No available servers."); + return info; + } + + bson_string_append_printf (info, "Topology type: %s, servers: [", mongoc_topology_description_type (td)); + mongoc_set_for_each (td->_servers_, _append_server_info, (void *) info); + bson_string_append_c (info, ']'); + + return info; +} diff --git a/src/libmongoc/src/mongoc/mongoc-topology.c b/src/libmongoc/src/mongoc/mongoc-topology.c index b1a5a4ee456..6553f8a12ad 100644 --- a/src/libmongoc/src/mongoc/mongoc-topology.c +++ b/src/libmongoc/src/mongoc/mongoc-topology.c @@ -1084,8 +1084,6 @@ mongoc_topology_select_server_id (mongoc_topology_t *topology, const mongoc_deprioritized_servers_t *ds, bson_error_t *error) { - static const char *timeout_msg = "No suitable servers found: `serverSelectionTimeoutMS` expired"; - mongoc_topology_scanner_t *ts; int r; int64_t local_threshold_ms; @@ -1097,6 +1095,7 @@ mongoc_topology_select_server_id (mongoc_topology_t *topology, int64_t heartbeat_msec; uint32_t server_id; mc_shared_tpld td = mc_tpld_take_ref (topology); + static const char *timeout_msg = "No suitable servers found: `serverSelectionTimeoutMS` expired."; /* These names come from the Server Selection Spec pseudocode */ int64_t loop_start; /* when we entered this function */ @@ -1153,12 +1152,13 @@ mongoc_topology_select_server_id (mongoc_topology_t *topology, if (scan_ready > expire_at && !try_once) { /* selection timeout will expire before min heartbeat passes */ - _mongoc_server_selection_error ("No suitable servers found: " - "`serverselectiontimeoutms` timed out", - &scanner_error, - error); + bson_string_t *topology_info = _mongoc_topology_description_info (td.ptr); + bson_string_t *msg = bson_string_new_printf ("%s %s", timeout_msg, topology_info->str); + _mongoc_server_selection_error (msg->str, &scanner_error, error); server_id = 0; + bson_string_free (topology_info, true); + bson_string_free (msg, true); goto done; } @@ -1837,6 +1837,7 @@ _mongoc_topology_handle_app_error (mongoc_topology_t *topology, static void _topology_collect_errors (const mongoc_topology_description_t *td, bson_error_t *error_out) { + // zz const mongoc_server_description_t *server_description; bson_string_t *error_message; @@ -1852,7 +1853,7 @@ _topology_collect_errors (const mongoc_topology_description_t *td, bson_error_t if (error_message->len > 0) { bson_string_append_c (error_message, ' '); } - bson_string_append_printf (error_message, "[%s]", server_description->error.message); + bson_string_append_printf (error_message, "[%s (SERVER TYPE)]", server_description->error.message); /* The last error's code and domain wins. */ error_out->code = error->code; error_out->domain = error->domain; From 6bf7c7b4fd55b3b101627947f2832a88fac14089 Mon Sep 17 00:00:00 2001 From: Adrian Dole Date: Tue, 30 Jan 2024 13:34:30 -0800 Subject: [PATCH 02/10] bson_new_printf --- src/libbson/src/bson/bson-string.c | 17 +++++++++++++++++ src/libbson/src/bson/bson-string.h | 2 ++ src/libbson/tests/test-bcon-basic.c | 2 +- src/libbson/tests/test-string.c | 9 +++++++++ 4 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/libbson/src/bson/bson-string.c b/src/libbson/src/bson/bson-string.c index f9b564a85ea..64a302ef8c0 100644 --- a/src/libbson/src/bson/bson-string.c +++ b/src/libbson/src/bson/bson-string.c @@ -269,6 +269,23 @@ bson_string_append_printf (bson_string_t *string, const char *format, ...) bson_free (ret); } +bson_string_t * +bson_string_new_printf (const char *format, ...) +{ + va_list args; + char *s; + + BSON_ASSERT (format); + + va_start (args, format); + s = bson_strdupv_printf (format, args); + va_end (args); + + bson_string_t *ret = bson_string_new (s); + bson_free (s); + return ret; +} + /* *-------------------------------------------------------------------------- diff --git a/src/libbson/src/bson/bson-string.h b/src/libbson/src/bson/bson-string.h index 3759afff0bd..559fe6ed23d 100644 --- a/src/libbson/src/bson/bson-string.h +++ b/src/libbson/src/bson/bson-string.h @@ -49,6 +49,8 @@ BSON_EXPORT (void) bson_string_append_unichar (bson_string_t *string, bson_unichar_t unichar); BSON_EXPORT (void) bson_string_append_printf (bson_string_t *string, const char *format, ...) BSON_GNUC_PRINTF (2, 3); +BSON_EXPORT (bson_string_t *) +bson_string_new_printf (const char *format, ...) BSON_GNUC_PRINTF (1, 2); BSON_EXPORT (void) bson_string_truncate (bson_string_t *string, uint32_t len); BSON_EXPORT (char *) diff --git a/src/libbson/tests/test-bcon-basic.c b/src/libbson/tests/test-bcon-basic.c index 60a9deec8aa..422672626d1 100644 --- a/src/libbson/tests/test-bcon-basic.c +++ b/src/libbson/tests/test-bcon-basic.c @@ -289,7 +289,7 @@ test_int32 (void) bson_init (&bcon); bson_init (&expected); - bson_append_int32 (&expected, "foo", -1, 100); + bson_append_int32 (&expected, "foobar", 3, 100); BCON_APPEND (&bcon, "foo", BCON_INT32 (100)); diff --git a/src/libbson/tests/test-string.c b/src/libbson/tests/test-string.c index 58791b156f3..e53348fe193 100644 --- a/src/libbson/tests/test-string.c +++ b/src/libbson/tests/test-string.c @@ -107,6 +107,15 @@ test_bson_string_append_printf (void) bson_string_free (str, true); } +static void +test_bson_string_new_printf (void) +{ + bson_string_t *str = + bson_string_new_printf ("%s %d %d %d", "testing", 1, 2, 3); + BSON_ASSERT (!strcmp (str->str, "testing 1 2 3")); + bson_string_free (str, true); +} + static void test_bson_string_append_unichar (void) From 425077fb8d93413317f6c1120dde4aea9efa541a Mon Sep 17 00:00:00 2001 From: Adrian Dole Date: Wed, 31 Jan 2024 14:44:55 -0800 Subject: [PATCH 03/10] Append topology type to error --- src/libbson/tests/test-bcon-basic.c | 2 +- src/libmongoc/src/mongoc/mongoc-error-private.h | 4 ++++ src/libmongoc/src/mongoc/mongoc-error.c | 9 +++++++++ .../mongoc/mongoc-server-description-private.h | 4 ---- .../src/mongoc/mongoc-server-description.c | 12 ------------ .../mongoc-topology-description-private.h | 6 ------ src/libmongoc/src/mongoc/mongoc-topology.c | 17 ++++++++++------- .../tests/test-mongoc-server-selection-errors.c | 12 ++++++++---- 8 files changed, 32 insertions(+), 34 deletions(-) diff --git a/src/libbson/tests/test-bcon-basic.c b/src/libbson/tests/test-bcon-basic.c index 422672626d1..60a9deec8aa 100644 --- a/src/libbson/tests/test-bcon-basic.c +++ b/src/libbson/tests/test-bcon-basic.c @@ -289,7 +289,7 @@ test_int32 (void) bson_init (&bcon); bson_init (&expected); - bson_append_int32 (&expected, "foobar", 3, 100); + bson_append_int32 (&expected, "foo", -1, 100); BCON_APPEND (&bcon, "foo", BCON_INT32 (100)); diff --git a/src/libmongoc/src/mongoc/mongoc-error-private.h b/src/libmongoc/src/mongoc/mongoc-error-private.h index fd0f2b10b65..41025a3e52f 100644 --- a/src/libmongoc/src/mongoc/mongoc-error-private.h +++ b/src/libmongoc/src/mongoc/mongoc-error-private.h @@ -89,4 +89,8 @@ _mongoc_error_is_server (const bson_error_t *error); bool _mongoc_error_is_auth (const bson_error_t *error); +/* Try to append `s` to `error`. Truncates `s` if `error` is out of space. */ +void +_mongoc_error_append (bson_error_t *error, const char *s); + BSON_END_DECLS diff --git a/src/libmongoc/src/mongoc/mongoc-error.c b/src/libmongoc/src/mongoc/mongoc-error.c index a9b9501eaf8..b919c9a150b 100644 --- a/src/libmongoc/src/mongoc/mongoc-error.c +++ b/src/libmongoc/src/mongoc/mongoc-error.c @@ -311,3 +311,12 @@ _mongoc_error_is_auth (const bson_error_t *error) return error->domain == MONGOC_ERROR_CLIENT && error->code == MONGOC_ERROR_CLIENT_AUTHENTICATE; } + +void +_mongoc_error_append (bson_error_t *error, const char *s) +{ + BSON_ASSERT (error); + const size_t error_len = strlen (error->message); + const size_t remaining = sizeof (error->message) - error_len; + bson_strncpy (error->message + error_len, s, remaining); +} \ No newline at end of file diff --git a/src/libmongoc/src/mongoc/mongoc-server-description-private.h b/src/libmongoc/src/mongoc/mongoc-server-description-private.h index c4cb56d6eb5..33812c9d6ea 100644 --- a/src/libmongoc/src/mongoc/mongoc-server-description-private.h +++ b/src/libmongoc/src/mongoc/mongoc-server-description-private.h @@ -223,8 +223,4 @@ extern const bson_oid_t kZeroServiceId; bool mongoc_server_description_has_service_id (const mongoc_server_description_t *description); -/* Generate human-readable description of the server */ -bson_string_t * -mongoc_server_description_info (const mongoc_server_description_t *sd); - #endif diff --git a/src/libmongoc/src/mongoc/mongoc-server-description.c b/src/libmongoc/src/mongoc/mongoc-server-description.c index 2b2d97f7d54..e0ae4fa2763 100644 --- a/src/libmongoc/src/mongoc/mongoc-server-description.c +++ b/src/libmongoc/src/mongoc/mongoc-server-description.c @@ -1225,15 +1225,3 @@ mongoc_server_description_has_service_id (const mongoc_server_description_t *des } return true; } - -bson_string_t * -mongoc_server_description_info (const mongoc_server_description_t *sd) -{ - bson_string_t *info = bson_string_new (NULL); - bson_string_append_printf (info, - "%s server_type: %s, rtt: %ld", - sd->host.host_and_port, - mongoc_server_description_type (sd), - sd->round_trip_time_msec); - return info; -} diff --git a/src/libmongoc/src/mongoc/mongoc-topology-description-private.h b/src/libmongoc/src/mongoc/mongoc-topology-description-private.h index 120db9bfe7d..141c9c86ef0 100644 --- a/src/libmongoc/src/mongoc/mongoc-topology-description-private.h +++ b/src/libmongoc/src/mongoc/mongoc-topology-description-private.h @@ -56,7 +56,6 @@ struct _mongoc_topology_description_t { * see Driver Sessions Spec. */ bson_t cluster_time; - /* smallest seen logicalSessionTimeoutMinutes, or -1 if any server has no * logicalSessionTimeoutMinutes. see Server Discovery and Monitoring Spec */ int64_t session_timeout_minutes; @@ -181,9 +180,4 @@ mongoc_deprioritized_servers_add_if_sharded (mongoc_deprioritized_servers_t *ds, mongoc_topology_description_type_t topology_type, const mongoc_server_description_t *sd); - -/* Generate human-readable description of the topology */ -bson_string_t * -_mongoc_topology_description_info (const mongoc_topology_description_t *td); - #endif /* MONGOC_TOPOLOGY_DESCRIPTION_PRIVATE_H */ diff --git a/src/libmongoc/src/mongoc/mongoc-topology.c b/src/libmongoc/src/mongoc/mongoc-topology.c index 6553f8a12ad..8bec791a9d2 100644 --- a/src/libmongoc/src/mongoc/mongoc-topology.c +++ b/src/libmongoc/src/mongoc/mongoc-topology.c @@ -1084,6 +1084,8 @@ mongoc_topology_select_server_id (mongoc_topology_t *topology, const mongoc_deprioritized_servers_t *ds, bson_error_t *error) { + static const char *timeout_msg = "No suitable servers found: `serverSelectionTimeoutMS` expired"; + mongoc_topology_scanner_t *ts; int r; int64_t local_threshold_ms; @@ -1095,7 +1097,9 @@ mongoc_topology_select_server_id (mongoc_topology_t *topology, int64_t heartbeat_msec; uint32_t server_id; mc_shared_tpld td = mc_tpld_take_ref (topology); - static const char *timeout_msg = "No suitable servers found: `serverSelectionTimeoutMS` expired."; + + bson_string_t *topology_type = bson_string_new (". Topology type: "); + bson_string_append (topology_type, mongoc_topology_description_type (td.ptr)); /* These names come from the Server Selection Spec pseudocode */ int64_t loop_start; /* when we entered this function */ @@ -1152,13 +1156,9 @@ mongoc_topology_select_server_id (mongoc_topology_t *topology, if (scan_ready > expire_at && !try_once) { /* selection timeout will expire before min heartbeat passes */ - bson_string_t *topology_info = _mongoc_topology_description_info (td.ptr); - bson_string_t *msg = bson_string_new_printf ("%s %s", timeout_msg, topology_info->str); - _mongoc_server_selection_error (msg->str, &scanner_error, error); + _mongoc_server_selection_error (timeout_msg, &scanner_error, error); server_id = 0; - bson_string_free (topology_info, true); - bson_string_free (msg, true); goto done; } @@ -1301,6 +1301,10 @@ mongoc_topology_select_server_id (mongoc_topology_t *topology, } done: + if (error) { + _mongoc_error_append (error, topology_type->str); + } + bson_string_free (topology_type, true); mc_tpld_drop_ref (&td); return server_id; } @@ -1837,7 +1841,6 @@ _mongoc_topology_handle_app_error (mongoc_topology_t *topology, static void _topology_collect_errors (const mongoc_topology_description_t *td, bson_error_t *error_out) { - // zz const mongoc_server_description_t *server_description; bson_string_t *error_message; diff --git a/src/libmongoc/tests/test-mongoc-server-selection-errors.c b/src/libmongoc/tests/test-mongoc-server-selection-errors.c index c62971cce36..f7793fe90f5 100644 --- a/src/libmongoc/tests/test-mongoc-server-selection-errors.c +++ b/src/libmongoc/tests/test-mongoc-server-selection-errors.c @@ -81,7 +81,8 @@ test_server_selection_error_dns_direct_single (void) { server_selection_error_dns ("mongodb://example-localhost.invalid:27017/", "No suitable servers found (`serverSelectionTryOnce` set): " - "[Fake error for 'example-localhost.invalid']", + "[Fake error for 'example-localhost.invalid']" + ". Topology type: Single", false, false); } @@ -93,7 +94,8 @@ test_server_selection_error_dns_direct_pooled (void *ctx) server_selection_error_dns ("mongodb://example-localhost.invalid:27017/", "No suitable servers found: `serverSelectionTimeoutMS` expired: " - "[Fake error for 'example-localhost.invalid']", + "[Fake error for 'example-localhost.invalid']" + ". Topology type: Single", false, true); } @@ -105,7 +107,8 @@ test_server_selection_error_dns_multi_fail_single (void) "example-localhost.invalid:27017,other-example-localhost.invalid:27017/", "No suitable servers found (`serverSelectionTryOnce` set):" " [Fake error for 'example-localhost.invalid']" - " [Fake error for 'other-example-localhost.invalid']", + " [Fake error for 'other-example-localhost.invalid']" + ". Topology type: Unknown", false, false); } @@ -119,7 +122,8 @@ test_server_selection_error_dns_multi_fail_pooled (void *ctx) "example-localhost.invalid:27017,other-example-localhost.invalid:27017/", "No suitable servers found: `serverSelectionTimeoutMS` expired:" " [Fake error for 'example-localhost.invalid']" - " [Fake error for 'other-example-localhost.invalid']", + " [Fake error for 'other-example-localhost.invalid']" + ". Topology type: Unknown", false, true); } From 5c9173fdf69a8cee74c3f02ae0708585fd900170 Mon Sep 17 00:00:00 2001 From: Adrian Dole Date: Tue, 6 Feb 2024 14:15:59 -0800 Subject: [PATCH 04/10] Hook in tests --- src/libbson/tests/test-string.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/libbson/tests/test-string.c b/src/libbson/tests/test-string.c index e53348fe193..48dec22e33d 100644 --- a/src/libbson/tests/test-string.c +++ b/src/libbson/tests/test-string.c @@ -107,11 +107,11 @@ test_bson_string_append_printf (void) bson_string_free (str, true); } + static void test_bson_string_new_printf (void) { - bson_string_t *str = - bson_string_new_printf ("%s %d %d %d", "testing", 1, 2, 3); + bson_string_t *str = bson_string_new_printf ("%s %d %d %d", "testing", 1, 2, 3); BSON_ASSERT (!strcmp (str->str, "testing 1 2 3")); bson_string_free (str, true); } @@ -320,6 +320,7 @@ test_string_install (TestSuite *suite) TestSuite_Add (suite, "/bson/string/append", test_bson_string_append); TestSuite_Add (suite, "/bson/string/append_c", test_bson_string_append_c); TestSuite_Add (suite, "/bson/string/append_printf", test_bson_string_append_printf); + TestSuite_Add (suite, "/bson/string/new_printf", test_bson_string_new_printf); TestSuite_Add (suite, "/bson/string/append_unichar", test_bson_string_append_unichar); TestSuite_Add (suite, "/bson/string/strdup", test_bson_strdup); TestSuite_Add (suite, "/bson/string/strdup_printf", test_bson_strdup_printf); From b338c799333a06eee4c1675cceb7ed87df7ffbea Mon Sep 17 00:00:00 2001 From: Adrian Dole Date: Tue, 23 Apr 2024 11:54:10 -0700 Subject: [PATCH 05/10] revert bson_string_new_printf --- src/libbson/src/bson/bson-string.c | 17 ----------------- src/libbson/src/bson/bson-string.h | 2 -- 2 files changed, 19 deletions(-) diff --git a/src/libbson/src/bson/bson-string.c b/src/libbson/src/bson/bson-string.c index 64a302ef8c0..f9b564a85ea 100644 --- a/src/libbson/src/bson/bson-string.c +++ b/src/libbson/src/bson/bson-string.c @@ -269,23 +269,6 @@ bson_string_append_printf (bson_string_t *string, const char *format, ...) bson_free (ret); } -bson_string_t * -bson_string_new_printf (const char *format, ...) -{ - va_list args; - char *s; - - BSON_ASSERT (format); - - va_start (args, format); - s = bson_strdupv_printf (format, args); - va_end (args); - - bson_string_t *ret = bson_string_new (s); - bson_free (s); - return ret; -} - /* *-------------------------------------------------------------------------- diff --git a/src/libbson/src/bson/bson-string.h b/src/libbson/src/bson/bson-string.h index 559fe6ed23d..3759afff0bd 100644 --- a/src/libbson/src/bson/bson-string.h +++ b/src/libbson/src/bson/bson-string.h @@ -49,8 +49,6 @@ BSON_EXPORT (void) bson_string_append_unichar (bson_string_t *string, bson_unichar_t unichar); BSON_EXPORT (void) bson_string_append_printf (bson_string_t *string, const char *format, ...) BSON_GNUC_PRINTF (2, 3); -BSON_EXPORT (bson_string_t *) -bson_string_new_printf (const char *format, ...) BSON_GNUC_PRINTF (1, 2); BSON_EXPORT (void) bson_string_truncate (bson_string_t *string, uint32_t len); BSON_EXPORT (char *) From 24a85fac101a6f5b1221f5a80beee44afcebf135 Mon Sep 17 00:00:00 2001 From: Adrian Dole Date: Tue, 23 Apr 2024 11:54:10 -0700 Subject: [PATCH 06/10] revert bson_string_new_printf --- src/libbson/tests/test-string.c | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/libbson/tests/test-string.c b/src/libbson/tests/test-string.c index 48dec22e33d..58791b156f3 100644 --- a/src/libbson/tests/test-string.c +++ b/src/libbson/tests/test-string.c @@ -108,15 +108,6 @@ test_bson_string_append_printf (void) } -static void -test_bson_string_new_printf (void) -{ - bson_string_t *str = bson_string_new_printf ("%s %d %d %d", "testing", 1, 2, 3); - BSON_ASSERT (!strcmp (str->str, "testing 1 2 3")); - bson_string_free (str, true); -} - - static void test_bson_string_append_unichar (void) { @@ -320,7 +311,6 @@ test_string_install (TestSuite *suite) TestSuite_Add (suite, "/bson/string/append", test_bson_string_append); TestSuite_Add (suite, "/bson/string/append_c", test_bson_string_append_c); TestSuite_Add (suite, "/bson/string/append_printf", test_bson_string_append_printf); - TestSuite_Add (suite, "/bson/string/new_printf", test_bson_string_new_printf); TestSuite_Add (suite, "/bson/string/append_unichar", test_bson_string_append_unichar); TestSuite_Add (suite, "/bson/string/strdup", test_bson_strdup); TestSuite_Add (suite, "/bson/string/strdup_printf", test_bson_strdup_printf); From 3d20f84248878db33f493fdfe6176c3ff4ca8db8 Mon Sep 17 00:00:00 2001 From: Adrian Dole Date: Wed, 24 Apr 2024 10:05:16 -0700 Subject: [PATCH 07/10] Whitespace --- src/libmongoc/src/mongoc/mongoc-error.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libmongoc/src/mongoc/mongoc-error.c b/src/libmongoc/src/mongoc/mongoc-error.c index b919c9a150b..00338718861 100644 --- a/src/libmongoc/src/mongoc/mongoc-error.c +++ b/src/libmongoc/src/mongoc/mongoc-error.c @@ -319,4 +319,4 @@ _mongoc_error_append (bson_error_t *error, const char *s) const size_t error_len = strlen (error->message); const size_t remaining = sizeof (error->message) - error_len; bson_strncpy (error->message + error_len, s, remaining); -} \ No newline at end of file +} From 8558250b68d9be165e1a201ef3bce7b730233177 Mon Sep 17 00:00:00 2001 From: Adrian Dole Date: Fri, 31 May 2024 12:34:50 -0700 Subject: [PATCH 08/10] Merge corrections --- .../src/mongoc/mongoc-topology-description.c | 25 ------------------- src/libmongoc/src/mongoc/mongoc-topology.c | 2 +- 2 files changed, 1 insertion(+), 26 deletions(-) diff --git a/src/libmongoc/src/mongoc/mongoc-topology-description.c b/src/libmongoc/src/mongoc/mongoc-topology-description.c index d7e2384039a..44d3a906149 100644 --- a/src/libmongoc/src/mongoc/mongoc-topology-description.c +++ b/src/libmongoc/src/mongoc/mongoc-topology-description.c @@ -2539,28 +2539,3 @@ mongoc_deprioritized_servers_add_if_sharded (mongoc_deprioritized_servers_t *ds, mongoc_deprioritized_servers_add (ds, sd); } } - -bool -_append_server_info (void *sd, void *info) -{ - bson_string_t *server_info = mongoc_server_description_info ((mongoc_server_description_t *) sd); - bson_string_append_printf ((bson_string_t *) info, "<%s>, ", server_info->str); - bson_string_free (server_info, true); - return true; -} - -bson_string_t * -_mongoc_topology_description_info (const mongoc_topology_description_t *td) -{ - bson_string_t *info = bson_string_new (NULL); - if (!td->_servers_ || td->_servers_->items_len == 0) { - bson_string_append (info, "No available servers."); - return info; - } - - bson_string_append_printf (info, "Topology type: %s, servers: [", mongoc_topology_description_type (td)); - mongoc_set_for_each (td->_servers_, _append_server_info, (void *) info); - bson_string_append_c (info, ']'); - - return info; -} diff --git a/src/libmongoc/src/mongoc/mongoc-topology.c b/src/libmongoc/src/mongoc/mongoc-topology.c index 8bec791a9d2..61b23bd3fd2 100644 --- a/src/libmongoc/src/mongoc/mongoc-topology.c +++ b/src/libmongoc/src/mongoc/mongoc-topology.c @@ -1856,7 +1856,7 @@ _topology_collect_errors (const mongoc_topology_description_t *td, bson_error_t if (error_message->len > 0) { bson_string_append_c (error_message, ' '); } - bson_string_append_printf (error_message, "[%s (SERVER TYPE)]", server_description->error.message); + bson_string_append_printf (error_message, "[%s]", server_description->error.message); /* The last error's code and domain wins. */ error_out->code = error->code; error_out->domain = error->domain; From 67887f8633fdc2c06a6c8ec90dbada4bbc083978 Mon Sep 17 00:00:00 2001 From: Adrian Dole Date: Fri, 31 May 2024 12:35:04 -0700 Subject: [PATCH 09/10] Don't append to uninitialized error --- src/libmongoc/src/mongoc/mongoc-topology.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/libmongoc/src/mongoc/mongoc-topology.c b/src/libmongoc/src/mongoc/mongoc-topology.c index 61b23bd3fd2..2925661f743 100644 --- a/src/libmongoc/src/mongoc/mongoc-topology.c +++ b/src/libmongoc/src/mongoc/mongoc-topology.c @@ -1301,8 +1301,11 @@ mongoc_topology_select_server_id (mongoc_topology_t *topology, } done: - if (error) { - _mongoc_error_append (error, topology_type->str); + if (error && server_id == 0) { + /* server_id set to zero indicates that an error has occured and that `error` is initialized */ + if (error->domain == MONGOC_ERROR_SERVER_SELECTION) { + _mongoc_error_append (error, topology_type->str); + } } bson_string_free (topology_type, true); mc_tpld_drop_ref (&td); From 8f952ed7f1ee9c4910081afab38beda908abcfdc Mon Sep 17 00:00:00 2001 From: Adrian Dole Date: Mon, 3 Jun 2024 13:29:58 -0700 Subject: [PATCH 10/10] whitespace --- src/libmongoc/src/mongoc/mongoc-topology-description.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libmongoc/src/mongoc/mongoc-topology-description.c b/src/libmongoc/src/mongoc/mongoc-topology-description.c index 44d3a906149..54b82b3121b 100644 --- a/src/libmongoc/src/mongoc/mongoc-topology-description.c +++ b/src/libmongoc/src/mongoc/mongoc-topology-description.c @@ -2526,6 +2526,7 @@ _mongoc_topology_description_clear_connection_pool (mongoc_topology_description_ mc_tpl_sd_increment_generation (sd, service_id); } + void mongoc_deprioritized_servers_add_if_sharded (mongoc_deprioritized_servers_t *ds, mongoc_topology_description_type_t topology_type,