From d62f1ff3df7859efd42c226c89bb50f7d074e78f Mon Sep 17 00:00:00 2001 From: Jeremy Mikola Date: Mon, 10 Jan 2022 15:14:21 -0500 Subject: [PATCH 1/2] PHPC-2022: Use mongoc_host_list in event structs --- php_phongo_structs.h | 46 ++++++++----------- src/MongoDB/Monitoring/ServerChangedEvent.c | 8 ++-- src/MongoDB/Monitoring/ServerClosedEvent.c | 8 ++-- .../Monitoring/ServerHeartbeatFailedEvent.c | 8 ++-- .../Monitoring/ServerHeartbeatStartedEvent.c | 8 ++-- .../ServerHeartbeatSucceededEvent.c | 8 ++-- src/MongoDB/Monitoring/ServerOpeningEvent.c | 8 ++-- src/phongo_apm.c | 41 +++-------------- 8 files changed, 50 insertions(+), 85 deletions(-) diff --git a/php_phongo_structs.h b/php_phongo_structs.h index d39282255..eb4ebc6f6 100644 --- a/php_phongo_structs.h +++ b/php_phongo_structs.h @@ -292,50 +292,44 @@ typedef struct { typedef struct { bson_oid_t topology_id; - char host[BSON_HOST_NAME_MAX + 1]; - uint16_t port; + mongoc_host_list_t host; mongoc_server_description_t* new_server_description; mongoc_server_description_t* old_server_description; zend_object std; } php_phongo_serverchangedevent_t; typedef struct { - bson_oid_t topology_id; - char host[BSON_HOST_NAME_MAX + 1]; - uint16_t port; - zend_object std; + bson_oid_t topology_id; + mongoc_host_list_t host; + zend_object std; } php_phongo_serverclosedevent_t; typedef struct { - bool awaited; - uint64_t duration_micros; - zval z_error; - char host[BSON_HOST_NAME_MAX + 1]; - uint16_t port; - zend_object std; + bool awaited; + uint64_t duration_micros; + zval z_error; + mongoc_host_list_t host; + zend_object std; } php_phongo_serverheartbeatfailedevent_t; typedef struct { - bool awaited; - char host[BSON_HOST_NAME_MAX + 1]; - uint16_t port; - zend_object std; + bool awaited; + mongoc_host_list_t host; + zend_object std; } php_phongo_serverheartbeatstartedevent_t; typedef struct { - bool awaited; - uint64_t duration_micros; - char host[BSON_HOST_NAME_MAX + 1]; - uint16_t port; - bson_t* reply; - zend_object std; + bool awaited; + uint64_t duration_micros; + mongoc_host_list_t host; + bson_t* reply; + zend_object std; } php_phongo_serverheartbeatsucceededevent_t; typedef struct { - bson_oid_t topology_id; - char host[BSON_HOST_NAME_MAX + 1]; - uint16_t port; - zend_object std; + bson_oid_t topology_id; + mongoc_host_list_t host; + zend_object std; } php_phongo_serveropeningevent_t; typedef struct { diff --git a/src/MongoDB/Monitoring/ServerChangedEvent.c b/src/MongoDB/Monitoring/ServerChangedEvent.c index f2e0b9dcf..d1d1748eb 100644 --- a/src/MongoDB/Monitoring/ServerChangedEvent.c +++ b/src/MongoDB/Monitoring/ServerChangedEvent.c @@ -34,7 +34,7 @@ static PHP_METHOD(ServerChangedEvent, getHost) PHONGO_PARSE_PARAMETERS_NONE(); - RETVAL_STRING(intern->host); + RETVAL_STRING(intern->host.host); } /* }}} */ /* {{{ proto integer ServerChangedEvent::getPort() @@ -45,7 +45,7 @@ static PHP_METHOD(ServerChangedEvent, getPort) PHONGO_PARSE_PARAMETERS_NONE(); - RETVAL_LONG(intern->port); + RETVAL_LONG(intern->host.port); } /* }}} */ /* {{{ proto MongoDB\Driver\ServerDescription ServerChangedEvent::getNewDescription() @@ -140,8 +140,8 @@ static HashTable* php_phongo_serverchangedevent_get_debug_info(phongo_compat_obj *is_temp = 1; array_init_size(&retval, 4); - ADD_ASSOC_STRING(&retval, "host", intern->host); - ADD_ASSOC_LONG_EX(&retval, "port", intern->port); + ADD_ASSOC_STRING(&retval, "host", intern->host.host); + ADD_ASSOC_LONG_EX(&retval, "port", intern->host.port); { zval topology_id; diff --git a/src/MongoDB/Monitoring/ServerClosedEvent.c b/src/MongoDB/Monitoring/ServerClosedEvent.c index 4f6879946..a226bb1f1 100644 --- a/src/MongoDB/Monitoring/ServerClosedEvent.c +++ b/src/MongoDB/Monitoring/ServerClosedEvent.c @@ -34,7 +34,7 @@ static PHP_METHOD(ServerClosedEvent, getHost) PHONGO_PARSE_PARAMETERS_NONE(); - RETVAL_STRING(intern->host); + RETVAL_STRING(intern->host.host); } /* }}} */ /* {{{ proto integer ServerClosedEvent::getPort() @@ -45,7 +45,7 @@ static PHP_METHOD(ServerClosedEvent, getPort) PHONGO_PARSE_PARAMETERS_NONE(); - RETVAL_LONG(intern->port); + RETVAL_LONG(intern->host.port); } /* }}} */ /* {{{ proto MongoDB\BSON\ObjectId ServerClosedEvent::getTopologyId() @@ -108,8 +108,8 @@ static HashTable* php_phongo_serverclosedevent_get_debug_info(phongo_compat_obje *is_temp = 1; array_init_size(&retval, 3); - ADD_ASSOC_STRING(&retval, "host", intern->host); - ADD_ASSOC_LONG_EX(&retval, "port", intern->port); + ADD_ASSOC_STRING(&retval, "host", intern->host.host); + ADD_ASSOC_LONG_EX(&retval, "port", intern->host.port); { zval topology_id; diff --git a/src/MongoDB/Monitoring/ServerHeartbeatFailedEvent.c b/src/MongoDB/Monitoring/ServerHeartbeatFailedEvent.c index 27a6d46e9..c69f8f99e 100644 --- a/src/MongoDB/Monitoring/ServerHeartbeatFailedEvent.c +++ b/src/MongoDB/Monitoring/ServerHeartbeatFailedEvent.c @@ -56,7 +56,7 @@ static PHP_METHOD(ServerHeartbeatFailedEvent, getHost) PHONGO_PARSE_PARAMETERS_NONE(); - RETVAL_STRING(intern->host); + RETVAL_STRING(intern->host.host); } /* }}} */ /* {{{ proto integer ServerHeartbeatFailedEvent::getPort() @@ -67,7 +67,7 @@ static PHP_METHOD(ServerHeartbeatFailedEvent, getPort) PHONGO_PARSE_PARAMETERS_NONE(); - RETVAL_LONG(intern->port); + RETVAL_LONG(intern->host.port); } /* }}} */ /* {{{ proto boolean ServerHeartbeatFailedEvent::isAwaited() @@ -136,8 +136,8 @@ static HashTable* php_phongo_serverheartbeatfailedevent_get_debug_info(phongo_co *is_temp = 1; array_init_size(&retval, 5); - ADD_ASSOC_STRING(&retval, "host", intern->host); - ADD_ASSOC_LONG_EX(&retval, "port", intern->port); + ADD_ASSOC_STRING(&retval, "host", intern->host.host); + ADD_ASSOC_LONG_EX(&retval, "port", intern->host.port); ADD_ASSOC_BOOL_EX(&retval, "awaited", intern->awaited); ADD_ASSOC_INT64(&retval, "durationMicros", intern->duration_micros); diff --git a/src/MongoDB/Monitoring/ServerHeartbeatStartedEvent.c b/src/MongoDB/Monitoring/ServerHeartbeatStartedEvent.c index 1702ff4ed..a37a27f56 100644 --- a/src/MongoDB/Monitoring/ServerHeartbeatStartedEvent.c +++ b/src/MongoDB/Monitoring/ServerHeartbeatStartedEvent.c @@ -34,7 +34,7 @@ static PHP_METHOD(ServerHeartbeatStartedEvent, getHost) PHONGO_PARSE_PARAMETERS_NONE(); - RETVAL_STRING(intern->host); + RETVAL_STRING(intern->host.host); } /* }}} */ /* {{{ proto integer ServerHeartbeatStartedEvent::getPort() @@ -45,7 +45,7 @@ static PHP_METHOD(ServerHeartbeatStartedEvent, getPort) PHONGO_PARSE_PARAMETERS_NONE(); - RETVAL_LONG(intern->port); + RETVAL_LONG(intern->host.port); } /* }}} */ /* {{{ proto boolean ServerHeartbeatStartedEvent::isAwaited() @@ -108,8 +108,8 @@ static HashTable* php_phongo_serverheartbeatstartedevent_get_debug_info(phongo_c *is_temp = 1; array_init_size(&retval, 4); - ADD_ASSOC_STRING(&retval, "host", intern->host); - ADD_ASSOC_LONG_EX(&retval, "port", intern->port); + ADD_ASSOC_STRING(&retval, "host", intern->host.host); + ADD_ASSOC_LONG_EX(&retval, "port", intern->host.port); ADD_ASSOC_BOOL_EX(&retval, "awaited", intern->awaited); return Z_ARRVAL(retval); diff --git a/src/MongoDB/Monitoring/ServerHeartbeatSucceededEvent.c b/src/MongoDB/Monitoring/ServerHeartbeatSucceededEvent.c index 4e095c455..aff852b29 100644 --- a/src/MongoDB/Monitoring/ServerHeartbeatSucceededEvent.c +++ b/src/MongoDB/Monitoring/ServerHeartbeatSucceededEvent.c @@ -45,7 +45,7 @@ static PHP_METHOD(ServerHeartbeatSucceededEvent, getHost) PHONGO_PARSE_PARAMETERS_NONE(); - RETVAL_STRING(intern->host); + RETVAL_STRING(intern->host.host); } /* }}} */ /* {{{ proto integer ServerHeartbeatSucceededEvent::getPort() @@ -56,7 +56,7 @@ static PHP_METHOD(ServerHeartbeatSucceededEvent, getPort) PHONGO_PARSE_PARAMETERS_NONE(); - RETVAL_LONG(intern->port); + RETVAL_LONG(intern->host.port); } /* }}} */ /* {{{ proto integer ServerHeartbeatSucceededEvent::getReply() @@ -147,8 +147,8 @@ static HashTable* php_phongo_serverheartbeatsucceededevent_get_debug_info(phongo *is_temp = 1; array_init_size(&retval, 4); - ADD_ASSOC_STRING(&retval, "host", intern->host); - ADD_ASSOC_LONG_EX(&retval, "port", intern->port); + ADD_ASSOC_STRING(&retval, "host", intern->host.host); + ADD_ASSOC_LONG_EX(&retval, "port", intern->host.port); ADD_ASSOC_BOOL_EX(&retval, "awaited", intern->awaited); if (!php_phongo_bson_to_zval_ex(bson_get_data(intern->reply), intern->reply->len, &reply_state)) { diff --git a/src/MongoDB/Monitoring/ServerOpeningEvent.c b/src/MongoDB/Monitoring/ServerOpeningEvent.c index be7c4f3d0..b85590c57 100644 --- a/src/MongoDB/Monitoring/ServerOpeningEvent.c +++ b/src/MongoDB/Monitoring/ServerOpeningEvent.c @@ -34,7 +34,7 @@ static PHP_METHOD(ServerOpeningEvent, getHost) PHONGO_PARSE_PARAMETERS_NONE(); - RETVAL_STRING(intern->host); + RETVAL_STRING(intern->host.host); } /* }}} */ /* {{{ proto integer ServerOpeningEvent::getPort() @@ -45,7 +45,7 @@ static PHP_METHOD(ServerOpeningEvent, getPort) PHONGO_PARSE_PARAMETERS_NONE(); - RETVAL_LONG(intern->port); + RETVAL_LONG(intern->host.port); } /* }}} */ /* {{{ proto MongoDB\BSON\ObjectId ServerOpeningEvent::getTopologyId() @@ -108,8 +108,8 @@ static HashTable* php_phongo_serveropeningevent_get_debug_info(phongo_compat_obj *is_temp = 1; array_init_size(&retval, 3); - ADD_ASSOC_STRING(&retval, "host", intern->host); - ADD_ASSOC_LONG_EX(&retval, "port", intern->port); + ADD_ASSOC_STRING(&retval, "host", intern->host.host); + ADD_ASSOC_LONG_EX(&retval, "port", intern->host.port); { zval topology_id; diff --git a/src/phongo_apm.c b/src/phongo_apm.c index ffeb25055..26db97861 100644 --- a/src/phongo_apm.c +++ b/src/phongo_apm.c @@ -283,7 +283,6 @@ static void phongo_apm_server_changed(const mongoc_apm_server_changed_t* event) HashTable* subscribers; php_phongo_serverchangedevent_t* p_event; zval z_event; - const mongoc_host_list_t* host_list; client = mongoc_apm_server_changed_get_context(event); subscribers = phongo_apm_get_subscribers_to_notify(php_phongo_sdamsubscriber_ce, client); @@ -296,10 +295,7 @@ static void phongo_apm_server_changed(const mongoc_apm_server_changed_t* event) object_init_ex(&z_event, php_phongo_serverchangedevent_ce); p_event = Z_SERVERCHANGEDEVENT_OBJ_P(&z_event); - host_list = mongoc_apm_server_changed_get_host(event); - memcpy(&p_event->host, &host_list->host, BSON_HOST_NAME_MAX + 1); - p_event->port = host_list->port; - + memcpy(&p_event->host, mongoc_apm_server_changed_get_host(event), sizeof(mongoc_host_list_t)); mongoc_apm_server_changed_get_topology_id(event, &p_event->topology_id); p_event->new_server_description = mongoc_server_description_new_copy(mongoc_apm_server_changed_get_new_description(event)); p_event->old_server_description = mongoc_server_description_new_copy(mongoc_apm_server_changed_get_previous_description(event)); @@ -318,7 +314,6 @@ static void phongo_apm_server_closed(const mongoc_apm_server_closed_t* event) HashTable* subscribers; php_phongo_serverclosedevent_t* p_event; zval z_event; - const mongoc_host_list_t* host_list; client = mongoc_apm_server_closed_get_context(event); subscribers = phongo_apm_get_subscribers_to_notify(php_phongo_sdamsubscriber_ce, client); @@ -331,11 +326,7 @@ static void phongo_apm_server_closed(const mongoc_apm_server_closed_t* event) object_init_ex(&z_event, php_phongo_serverclosedevent_ce); p_event = Z_SERVERCLOSEDEVENT_OBJ_P(&z_event); - host_list = mongoc_apm_server_closed_get_host(event); - memset(p_event->host, 0, sizeof(p_event->host)); - bson_strncpy(p_event->host, host_list->host, sizeof(p_event->host)); - p_event->port = host_list->port; - + memcpy(&p_event->host, mongoc_apm_server_closed_get_host(event), sizeof(mongoc_host_list_t)); mongoc_apm_server_closed_get_topology_id(event, &p_event->topology_id); phongo_apm_dispatch_event(subscribers, "serverClosed", &z_event); @@ -352,7 +343,6 @@ static void phongo_apm_server_heartbeat_failed(const mongoc_apm_server_heartbeat HashTable* subscribers; php_phongo_serverheartbeatfailedevent_t* p_event; zval z_event; - const mongoc_host_list_t* host_list; bson_error_t tmp_error = { 0 }; client = mongoc_apm_server_heartbeat_failed_get_context(event); @@ -366,11 +356,7 @@ static void phongo_apm_server_heartbeat_failed(const mongoc_apm_server_heartbeat object_init_ex(&z_event, php_phongo_serverheartbeatfailedevent_ce); p_event = Z_SERVERHEARTBEATFAILEDEVENT_OBJ_P(&z_event); - host_list = mongoc_apm_server_heartbeat_failed_get_host(event); - memset(p_event->host, 0, sizeof(p_event->host)); - bson_strncpy(p_event->host, host_list->host, sizeof(p_event->host)); - p_event->port = host_list->port; - + memcpy(&p_event->host, mongoc_apm_server_heartbeat_failed_get_host(event), sizeof(mongoc_host_list_t)); p_event->awaited = mongoc_apm_server_heartbeat_failed_get_awaited(event); p_event->duration_micros = mongoc_apm_server_heartbeat_failed_get_duration(event); @@ -397,7 +383,6 @@ static void phongo_apm_server_heartbeat_succeeded(const mongoc_apm_server_heartb HashTable* subscribers; php_phongo_serverheartbeatsucceededevent_t* p_event; zval z_event; - const mongoc_host_list_t* host_list; client = mongoc_apm_server_heartbeat_succeeded_get_context(event); subscribers = phongo_apm_get_subscribers_to_notify(php_phongo_sdamsubscriber_ce, client); @@ -410,11 +395,7 @@ static void phongo_apm_server_heartbeat_succeeded(const mongoc_apm_server_heartb object_init_ex(&z_event, php_phongo_serverheartbeatsucceededevent_ce); p_event = Z_SERVERHEARTBEATSUCCEEDEDEVENT_OBJ_P(&z_event); - host_list = mongoc_apm_server_heartbeat_succeeded_get_host(event); - memset(p_event->host, 0, sizeof(p_event->host)); - bson_strncpy(p_event->host, host_list->host, sizeof(p_event->host)); - p_event->port = host_list->port; - + memcpy(&p_event->host, mongoc_apm_server_heartbeat_succeeded_get_host(event), sizeof(mongoc_host_list_t)); p_event->awaited = mongoc_apm_server_heartbeat_succeeded_get_awaited(event); p_event->duration_micros = mongoc_apm_server_heartbeat_succeeded_get_duration(event); p_event->reply = bson_copy(mongoc_apm_server_heartbeat_succeeded_get_reply(event)); @@ -433,7 +414,6 @@ static void phongo_apm_server_heartbeat_started(const mongoc_apm_server_heartbea HashTable* subscribers; php_phongo_serverheartbeatstartedevent_t* p_event; zval z_event; - const mongoc_host_list_t* host_list; client = mongoc_apm_server_heartbeat_started_get_context(event); subscribers = phongo_apm_get_subscribers_to_notify(php_phongo_sdamsubscriber_ce, client); @@ -446,11 +426,7 @@ static void phongo_apm_server_heartbeat_started(const mongoc_apm_server_heartbea object_init_ex(&z_event, php_phongo_serverheartbeatstartedevent_ce); p_event = Z_SERVERHEARTBEATSTARTEDEVENT_OBJ_P(&z_event); - host_list = mongoc_apm_server_heartbeat_started_get_host(event); - memset(p_event->host, 0, sizeof(p_event->host)); - bson_strncpy(p_event->host, host_list->host, sizeof(p_event->host)); - p_event->port = host_list->port; - + memcpy(&p_event->host, mongoc_apm_server_heartbeat_started_get_host(event), sizeof(mongoc_host_list_t)); p_event->awaited = mongoc_apm_server_heartbeat_started_get_awaited(event); phongo_apm_dispatch_event(subscribers, "serverHeartbeatStarted", &z_event); @@ -467,7 +443,6 @@ static void phongo_apm_server_opening(const mongoc_apm_server_opening_t* event) HashTable* subscribers; php_phongo_serveropeningevent_t* p_event; zval z_event; - const mongoc_host_list_t* host_list; client = mongoc_apm_server_opening_get_context(event); subscribers = phongo_apm_get_subscribers_to_notify(php_phongo_sdamsubscriber_ce, client); @@ -480,11 +455,7 @@ static void phongo_apm_server_opening(const mongoc_apm_server_opening_t* event) object_init_ex(&z_event, php_phongo_serveropeningevent_ce); p_event = Z_SERVEROPENINGEVENT_OBJ_P(&z_event); - host_list = mongoc_apm_server_opening_get_host(event); - memset(p_event->host, 0, sizeof(p_event->host)); - bson_strncpy(p_event->host, host_list->host, sizeof(p_event->host)); - p_event->port = host_list->port; - + memcpy(&p_event->host, mongoc_apm_server_opening_get_host(event), sizeof(mongoc_host_list_t)); mongoc_apm_server_opening_get_topology_id(event, &p_event->topology_id); phongo_apm_dispatch_event(subscribers, "serverOpening", &z_event); From bc2b6574a209318f0b7eaa17b48cbbac88be810c Mon Sep 17 00:00:00 2001 From: Jeremy Mikola Date: Tue, 11 Jan 2022 10:07:33 -0500 Subject: [PATCH 2/2] Limit ServerHeartbeatFailedEvent test to non-auth standalone --- tests/apm/serverHeartbeatFailedEvent-001.phpt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/apm/serverHeartbeatFailedEvent-001.phpt b/tests/apm/serverHeartbeatFailedEvent-001.phpt index f879b0169..5e88ebacb 100644 --- a/tests/apm/serverHeartbeatFailedEvent-001.phpt +++ b/tests/apm/serverHeartbeatFailedEvent-001.phpt @@ -4,8 +4,8 @@ MongoDB\Driver\Monitoring\ServerHeartbeatFailedEvent - - + + --FILE--