From 95e6a1c0ac18a4b32b2f497872f237c72a20e1a1 Mon Sep 17 00:00:00 2001 From: mdb-ad <198671546+mdb-ad@users.noreply.github.com> Date: Sat, 17 May 2025 18:02:37 -0700 Subject: [PATCH 1/7] container and orchestrator in handshake --- .../src/mongoc/mongoc-handshake-private.h | 3 + src/libmongoc/src/mongoc/mongoc-handshake.c | 59 +++++++++---------- src/libmongoc/tests/test-mongoc-handshake.c | 31 ++++++++++ 3 files changed, 61 insertions(+), 32 deletions(-) diff --git a/src/libmongoc/src/mongoc/mongoc-handshake-private.h b/src/libmongoc/src/mongoc/mongoc-handshake-private.h index 8332ed05011..ad5ac87c3f6 100644 --- a/src/libmongoc/src/mongoc/mongoc-handshake-private.h +++ b/src/libmongoc/src/mongoc/mongoc-handshake-private.h @@ -113,6 +113,9 @@ typedef struct _mongoc_handshake_t { char *compiler_info; char *flags; + bool docker; + bool kubernetes; + mongoc_handshake_env_t env; optional_int32 env_timeout_sec; optional_int32 env_memory_mb; diff --git a/src/libmongoc/src/mongoc/mongoc-handshake.c b/src/libmongoc/src/mongoc/mongoc-handshake.c index 7dd1a1dc2c0..81eab341c04 100644 --- a/src/libmongoc/src/mongoc/mongoc-handshake.c +++ b/src/libmongoc/src/mongoc/mongoc-handshake.c @@ -18,6 +18,7 @@ #ifdef _POSIX_VERSION #include +#include #endif #ifdef _WIN32 @@ -351,15 +352,6 @@ _get_system_info (mongoc_handshake_t *handshake) handshake->os_architecture = _get_os_architecture (); } -static void -_free_system_info (mongoc_handshake_t *handshake) -{ - bson_free (handshake->os_type); - bson_free (handshake->os_name); - bson_free (handshake->os_version); - bson_free (handshake->os_architecture); -} - static void _get_driver_info (mongoc_handshake_t *handshake) { @@ -367,13 +359,6 @@ _get_driver_info (mongoc_handshake_t *handshake) handshake->driver_version = bson_strndup (MONGOC_VERSION_S, HANDSHAKE_DRIVER_VERSION_MAX); } -static void -_free_driver_info (mongoc_handshake_t *handshake) -{ - bson_free (handshake->driver_name); - bson_free (handshake->driver_version); -} - static void _set_platform_string (mongoc_handshake_t *handshake) { @@ -381,9 +366,16 @@ _set_platform_string (mongoc_handshake_t *handshake) } static void -_free_env_info (mongoc_handshake_t *handshake) -{ - bson_free (handshake->env_region); +_get_container_info (mongoc_handshake_t *handshake) { + char* kubernetes_env = _mongoc_getenv("KUBERNETES_SERVICE_HOST"); + handshake->kubernetes = kubernetes_env; + + handshake->docker = false; +#ifdef _POSIX_VERSION + handshake->docker = (access("/.dockerenv", F_OK) == 0); +#endif + + bson_free (kubernetes_env); } static void @@ -509,14 +501,6 @@ _set_flags (mongoc_handshake_t *handshake) handshake->flags = mcommon_string_from_append_destroy_with_steal (&append); } -static void -_free_platform_string (mongoc_handshake_t *handshake) -{ - bson_free (handshake->platform); - bson_free (handshake->compiler_info); - bson_free (handshake->flags); -} - void _mongoc_handshake_init (void) { @@ -524,6 +508,7 @@ _mongoc_handshake_init (void) _get_driver_info (_mongoc_handshake_get ()); _set_platform_string (_mongoc_handshake_get ()); _get_env_info (_mongoc_handshake_get ()); + _get_container_info (_mongoc_handshake_get()); _set_compiler_info (_mongoc_handshake_get ()); _set_flags (_mongoc_handshake_get ()); @@ -535,10 +520,16 @@ void _mongoc_handshake_cleanup (void) { mongoc_handshake_t *h = _mongoc_handshake_get (); - _free_system_info (h); - _free_driver_info (h); - _free_platform_string (h); - _free_env_info (h); + bson_free (h->os_type); + bson_free (h->os_name); + bson_free (h->os_version); + bson_free (h->os_architecture); + bson_free (h->driver_name); + bson_free (h->driver_version); + bson_free (h->platform); + bson_free (h->compiler_info); + bson_free (h->flags); + bson_free (h->env_region); *h = (mongoc_handshake_t){0}; bson_mutex_destroy (&gHandshakeLock); @@ -696,7 +687,11 @@ _mongoc_handshake_build_doc_with_application (const char *appname) doc (kv ("name", cstr (env_name)), if (md->env_timeout_sec.set, then (kv ("timeout_sec", int32 (md->env_timeout_sec.value)))), if (md->env_memory_mb.set, then (kv ("memory_mb", int32 (md->env_memory_mb.value)))), - if (md->env_region, then (kv ("region", cstr (md->env_region))))))))); + if (md->env_region, then (kv ("region", cstr (md->env_region)))))))), + if (md->kubernetes || md->docker, + then (kv ("container", + doc (if (md->docker, then (kv ("runtime", cstr ("docker")))), + if (md->kubernetes, then (kv ("orchestrator", cstr ("kubernetes"))))))))); if (md->platform) { _append_platform_field (doc, md->platform, false); diff --git a/src/libmongoc/tests/test-mongoc-handshake.c b/src/libmongoc/tests/test-mongoc-handshake.c index 322d6bb0030..94f0c063a87 100644 --- a/src/libmongoc/tests/test-mongoc-handshake.c +++ b/src/libmongoc/tests/test-mongoc-handshake.c @@ -396,6 +396,7 @@ clear_faas_env (void) ASSERT (_mongoc_setenv ("AWS_LAMBDA_FUNCTION_MEMORY_SIZE", "")); ASSERT (_mongoc_setenv ("FUNCTIONS_WORKER_RUNTIME", "")); ASSERT (_mongoc_setenv ("K_SERVICE", "")); + ASSERT (_mongoc_setenv ("KUBERNETES_SERVICE_HOST", "")); ASSERT (_mongoc_setenv ("FUNCTION_MEMORY_MB", "")); ASSERT (_mongoc_setenv ("FUNCTION_TIMEOUT_SEC", "")); ASSERT (_mongoc_setenv ("FUNCTION_REGION", "")); @@ -643,6 +644,30 @@ test_aws_not_lambda (void *test_ctx) _reset_handshake (); } +static void +test_aws_and_container (void *test_ctx) +{ + BSON_UNUSED (test_ctx); + ASSERT (_mongoc_setenv ("AWS_EXECUTION_ENV", "AWS_Lambda_java8")); + ASSERT (_mongoc_setenv ("AWS_REGION", "us-east-2")); + ASSERT (_mongoc_setenv ("AWS_LAMBDA_FUNCTION_MEMORY_SIZE", "1024")); + ASSERT (_mongoc_setenv ("KUBERNETES_SERVICE_HOST", "1")); + + _override_host_platform_os (); + bson_t *doc = _get_handshake_document (true); + _handshake_check_required_fields (doc); + + bson_iter_t iter; + ASSERT (bson_iter_init(&iter, doc)); + ASSERT (bson_iter_find_descendant(&iter, "container.orchestrator", &iter)); + ASSERT (BSON_ITER_HOLDS_UTF8(&iter)); + ASSERT (strcmp("kubernetes", bson_iter_utf8(&iter, NULL)) == 0); + + bson_destroy (doc); + clear_faas_env (); + _reset_handshake (); +} + static void test_mongoc_handshake_data_append_null_args (void) { @@ -1396,4 +1421,10 @@ test_handshake_install (TestSuite *suite) NULL /* dtor */, NULL /* ctx */, test_framework_skip_if_no_setenv); + TestSuite_AddFull (suite, + "/MongoDB/handshake/faas/aws_and_container", + test_aws_and_container, + NULL /* dtor */, + NULL /* ctx */, + test_framework_skip_if_no_setenv); } From b99465cd7e3fe1a04f4464d45dced645b1858439 Mon Sep 17 00:00:00 2001 From: mdb-ad <198671546+mdb-ad@users.noreply.github.com> Date: Sat, 17 May 2025 18:17:54 -0700 Subject: [PATCH 2/7] test both kubernetes and container info are present --- src/libmongoc/tests/test-mongoc-handshake.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libmongoc/tests/test-mongoc-handshake.c b/src/libmongoc/tests/test-mongoc-handshake.c index 94f0c063a87..c5a7dc1405f 100644 --- a/src/libmongoc/tests/test-mongoc-handshake.c +++ b/src/libmongoc/tests/test-mongoc-handshake.c @@ -662,6 +662,7 @@ test_aws_and_container (void *test_ctx) ASSERT (bson_iter_find_descendant(&iter, "container.orchestrator", &iter)); ASSERT (BSON_ITER_HOLDS_UTF8(&iter)); ASSERT (strcmp("kubernetes", bson_iter_utf8(&iter, NULL)) == 0); + _handshake_check_env (doc, default_memory_mb, 0, "us-east-2"); bson_destroy (doc); clear_faas_env (); From 4e969089dc7489d72e02694331f0e6b7d0f3cda0 Mon Sep 17 00:00:00 2001 From: mdb-ad <198671546+mdb-ad@users.noreply.github.com> Date: Wed, 28 May 2025 18:45:26 -0700 Subject: [PATCH 3/7] format --- src/libmongoc/src/mongoc/mongoc-handshake.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/libmongoc/src/mongoc/mongoc-handshake.c b/src/libmongoc/src/mongoc/mongoc-handshake.c index 81eab341c04..57cad006db5 100644 --- a/src/libmongoc/src/mongoc/mongoc-handshake.c +++ b/src/libmongoc/src/mongoc/mongoc-handshake.c @@ -366,13 +366,14 @@ _set_platform_string (mongoc_handshake_t *handshake) } static void -_get_container_info (mongoc_handshake_t *handshake) { - char* kubernetes_env = _mongoc_getenv("KUBERNETES_SERVICE_HOST"); +_get_container_info (mongoc_handshake_t *handshake) +{ + char *kubernetes_env = _mongoc_getenv ("KUBERNETES_SERVICE_HOST"); handshake->kubernetes = kubernetes_env; handshake->docker = false; #ifdef _POSIX_VERSION - handshake->docker = (access("/.dockerenv", F_OK) == 0); + handshake->docker = (access ("/.dockerenv", F_OK) == 0); #endif bson_free (kubernetes_env); @@ -508,7 +509,7 @@ _mongoc_handshake_init (void) _get_driver_info (_mongoc_handshake_get ()); _set_platform_string (_mongoc_handshake_get ()); _get_env_info (_mongoc_handshake_get ()); - _get_container_info (_mongoc_handshake_get()); + _get_container_info (_mongoc_handshake_get ()); _set_compiler_info (_mongoc_handshake_get ()); _set_flags (_mongoc_handshake_get ()); @@ -530,7 +531,7 @@ _mongoc_handshake_cleanup (void) bson_free (h->compiler_info); bson_free (h->flags); bson_free (h->env_region); - *h = (mongoc_handshake_t){0}; + *h = (mongoc_handshake_t) {0}; bson_mutex_destroy (&gHandshakeLock); } From 92e7981d870b51e1018143f2e14b360558273793 Mon Sep 17 00:00:00 2001 From: mdb-ad <198671546+mdb-ad@users.noreply.github.com> Date: Wed, 28 May 2025 19:28:43 -0700 Subject: [PATCH 4/7] test format --- src/libmongoc/tests/test-mongoc-handshake.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/libmongoc/tests/test-mongoc-handshake.c b/src/libmongoc/tests/test-mongoc-handshake.c index c5a7dc1405f..38434bfb858 100644 --- a/src/libmongoc/tests/test-mongoc-handshake.c +++ b/src/libmongoc/tests/test-mongoc-handshake.c @@ -658,10 +658,10 @@ test_aws_and_container (void *test_ctx) _handshake_check_required_fields (doc); bson_iter_t iter; - ASSERT (bson_iter_init(&iter, doc)); - ASSERT (bson_iter_find_descendant(&iter, "container.orchestrator", &iter)); - ASSERT (BSON_ITER_HOLDS_UTF8(&iter)); - ASSERT (strcmp("kubernetes", bson_iter_utf8(&iter, NULL)) == 0); + ASSERT (bson_iter_init (&iter, doc)); + ASSERT (bson_iter_find_descendant (&iter, "container.orchestrator", &iter)); + ASSERT (BSON_ITER_HOLDS_UTF8 (&iter)); + ASSERT (strcmp ("kubernetes", bson_iter_utf8 (&iter, NULL)) == 0); _handshake_check_env (doc, default_memory_mb, 0, "us-east-2"); bson_destroy (doc); From 751203ef5dfbc4084af97caf7a2ea785b6320cd8 Mon Sep 17 00:00:00 2001 From: mdb-ad <198671546+mdb-ad@users.noreply.github.com> Date: Wed, 28 May 2025 19:35:11 -0700 Subject: [PATCH 5/7] have to format with clang-format 17 --- src/libmongoc/src/mongoc/mongoc-handshake.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libmongoc/src/mongoc/mongoc-handshake.c b/src/libmongoc/src/mongoc/mongoc-handshake.c index 57cad006db5..e5d91d9e105 100644 --- a/src/libmongoc/src/mongoc/mongoc-handshake.c +++ b/src/libmongoc/src/mongoc/mongoc-handshake.c @@ -531,7 +531,7 @@ _mongoc_handshake_cleanup (void) bson_free (h->compiler_info); bson_free (h->flags); bson_free (h->env_region); - *h = (mongoc_handshake_t) {0}; + *h = (mongoc_handshake_t){0}; bson_mutex_destroy (&gHandshakeLock); } From e96a56191582a0c2bb64a1966dcffb1345b3acf9 Mon Sep 17 00:00:00 2001 From: mdb-ad <198671546+mdb-ad@users.noreply.github.com> Date: Mon, 16 Jun 2025 16:03:22 -0700 Subject: [PATCH 6/7] Update src/libmongoc/tests/test-mongoc-handshake.c Co-authored-by: Kevin Albertson --- src/libmongoc/tests/test-mongoc-handshake.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/libmongoc/tests/test-mongoc-handshake.c b/src/libmongoc/tests/test-mongoc-handshake.c index 38434bfb858..8498752fe20 100644 --- a/src/libmongoc/tests/test-mongoc-handshake.c +++ b/src/libmongoc/tests/test-mongoc-handshake.c @@ -657,11 +657,8 @@ test_aws_and_container (void *test_ctx) bson_t *doc = _get_handshake_document (true); _handshake_check_required_fields (doc); - bson_iter_t iter; - ASSERT (bson_iter_init (&iter, doc)); - ASSERT (bson_iter_find_descendant (&iter, "container.orchestrator", &iter)); - ASSERT (BSON_ITER_HOLDS_UTF8 (&iter)); - ASSERT (strcmp ("kubernetes", bson_iter_utf8 (&iter, NULL)) == 0); + ASSERT_CMPSTR (bson_lookup_utf8 (doc, "container.orchestrator"), "kubernetes"); + ASSERT_CMPSTR (bson_lookup_utf8 (doc, "env.name"), "aws.lambda"); _handshake_check_env (doc, default_memory_mb, 0, "us-east-2"); bson_destroy (doc); From 2d4ad13f9013fe2905cf8e6d7da42b996d9dc36d Mon Sep 17 00:00:00 2001 From: mdb-ad <198671546+mdb-ad@users.noreply.github.com> Date: Mon, 16 Jun 2025 16:11:06 -0700 Subject: [PATCH 7/7] detect windows docker --- src/libmongoc/src/mongoc/mongoc-handshake.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/libmongoc/src/mongoc/mongoc-handshake.c b/src/libmongoc/src/mongoc/mongoc-handshake.c index e5d91d9e105..beb56c342fe 100644 --- a/src/libmongoc/src/mongoc/mongoc-handshake.c +++ b/src/libmongoc/src/mongoc/mongoc-handshake.c @@ -372,7 +372,9 @@ _get_container_info (mongoc_handshake_t *handshake) handshake->kubernetes = kubernetes_env; handshake->docker = false; -#ifdef _POSIX_VERSION +#ifdef _WIN32 + handshake->docker = (_access_s ("C:\\.dockerenv", 0) == 0); +#else handshake->docker = (access ("/.dockerenv", F_OK) == 0); #endif