Skip to content

PHPC-1893: Implement SDAM event classes #1287

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Jan 5, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions config.m4
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,14 @@ if test "$PHP_MONGODB" != "no"; then
src/MongoDB/Monitoring/CommandSucceededEvent.c \
src/MongoDB/Monitoring/SDAMSubscriber.c \
src/MongoDB/Monitoring/Subscriber.c \
src/MongoDB/Monitoring/ServerChangedEvent.c \
src/MongoDB/Monitoring/ServerClosedEvent.c \
src/MongoDB/Monitoring/ServerHeartbeatFailedEvent.c \
src/MongoDB/Monitoring/ServerHeartbeatStartedEvent.c \
src/MongoDB/Monitoring/ServerHeartbeatSucceededEvent.c \
src/MongoDB/Monitoring/ServerOpeningEvent.c \
src/MongoDB/Monitoring/TopologyChangedEvent.c \
src/MongoDB/Monitoring/TopologyClosedEvent.c \
src/MongoDB/Monitoring/TopologyOpeningEvent.c \
src/MongoDB/Monitoring/functions.c \
"
Expand Down
2 changes: 1 addition & 1 deletion config.w32
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ if (PHP_MONGODB != "no") {
MONGODB_ADD_SOURCES("/src/BSON", "Binary.c BinaryInterface.c DBPointer.c Decimal128.c Decimal128Interface.c Int64.c Javascript.c JavascriptInterface.c MaxKey.c MaxKeyInterface.c MinKey.c MinKeyInterface.c ObjectId.c ObjectIdInterface.c Persistable.c Regex.c RegexInterface.c Serializable.c Symbol.c Timestamp.c TimestampInterface.c Type.c Undefined.c Unserializable.c UTCDateTime.c UTCDateTimeInterface.c functions.c");
MONGODB_ADD_SOURCES("/src/MongoDB", "BulkWrite.c ClientEncryption.c Command.c Cursor.c CursorId.c CursorInterface.c Manager.c Query.c ReadConcern.c ReadPreference.c Server.c ServerApi.c ServerDescription.c Session.c TopologyDescription.c WriteConcern.c WriteConcernError.c WriteError.c WriteResult.c");
MONGODB_ADD_SOURCES("/src/MongoDB/Exception", "AuthenticationException.c BulkWriteException.c CommandException.c ConnectionException.c ConnectionTimeoutException.c EncryptionException.c Exception.c ExecutionTimeoutException.c InvalidArgumentException.c LogicException.c RuntimeException.c ServerException.c SSLConnectionException.c UnexpectedValueException.c WriteException.c");
MONGODB_ADD_SOURCES("/src/MongoDB/Monitoring", "CommandFailedEvent.c CommandStartedEvent.c CommandSubscriber.c CommandSucceededEvent.c SDAMSubscriber.c Subscriber.c TopologyChangedEvent.c TopologyOpeningEvent.c functions.c");
MONGODB_ADD_SOURCES("/src/MongoDB/Monitoring", "CommandFailedEvent.c CommandStartedEvent.c CommandSubscriber.c CommandSucceededEvent.c SDAMSubscriber.c Subscriber.c ServerChangedEvent.c ServerClosedEvent.c ServerHeartbeatFailedEvent.c ServerHeartbeatStartedEvent.c ServerHeartbeatSucceededEvent.c ServerOpeningEvent.c TopologyChangedEvent.c TopologyClosedEvent.c TopologyOpeningEvent.c functions.c");
MONGODB_ADD_SOURCES("/src/libmongoc/src/common", PHP_MONGODB_COMMON_SOURCES);
MONGODB_ADD_SOURCES("/src/libmongoc/src/libbson/src/bson", PHP_MONGODB_BSON_SOURCES);
MONGODB_ADD_SOURCES("/src/libmongoc/src/libbson/src/jsonsl", PHP_MONGODB_JSONSL_SOURCES);
Expand Down
15 changes: 10 additions & 5 deletions php_phongo.c
Original file line number Diff line number Diff line change
Expand Up @@ -358,14 +358,14 @@ void phongo_server_init(zval* return_value, zval* manager, uint32_t server_id) /
}
/* }}} */

void phongo_serverdescription_init(zval* return_value, mongoc_server_description_t* server_description) /* {{{ */
void phongo_serverdescription_init_ex(zval* return_value, mongoc_server_description_t* server_description, bool copy) /* {{{ */
{
php_phongo_serverdescription_t* intern;

object_init_ex(return_value, php_phongo_serverdescription_ce);

intern = Z_SERVERDESCRIPTION_OBJ_P(return_value);
intern->server_description = server_description;
intern->server_description = copy ? mongoc_server_description_new_copy(server_description) : server_description;
}
/* }}} */

Expand Down Expand Up @@ -401,7 +401,7 @@ void phongo_topologydescription_init(zval* return_value, mongoc_topology_descrip
object_init_ex(return_value, php_phongo_topologydescription_ce);

intern = Z_TOPOLOGYDESCRIPTION_OBJ_P(return_value);
intern->topology_description = topology_description;
intern->topology_description = mongoc_topology_description_new_copy(topology_description);
}
/* }}} */

Expand Down Expand Up @@ -1307,8 +1307,6 @@ bool php_phongo_topology_description_to_zval(zval* retval, mongoc_topology_descr
}

add_next_index_zval(&servers, &obj);
zval_ptr_dtor(&obj);
zval_ptr_dtor(&servers);
}
mongoc_server_descriptions_destroy_all(sds, n);

Expand Down Expand Up @@ -3719,7 +3717,14 @@ PHP_MINIT_FUNCTION(mongodb)
php_phongo_commandstartedevent_init_ce(INIT_FUNC_ARGS_PASSTHRU);
php_phongo_commandsucceededevent_init_ce(INIT_FUNC_ARGS_PASSTHRU);
php_phongo_sdamsubscriber_init_ce(INIT_FUNC_ARGS_PASSTHRU);
php_phongo_serverchangedevent_init_ce(INIT_FUNC_ARGS_PASSTHRU);
php_phongo_serverclosedevent_init_ce(INIT_FUNC_ARGS_PASSTHRU);
php_phongo_serverheartbeatfailedevent_init_ce(INIT_FUNC_ARGS_PASSTHRU);
php_phongo_serverheartbeatstartedevent_init_ce(INIT_FUNC_ARGS_PASSTHRU);
php_phongo_serverheartbeatsucceededevent_init_ce(INIT_FUNC_ARGS_PASSTHRU);
php_phongo_serveropeningevent_init_ce(INIT_FUNC_ARGS_PASSTHRU);
php_phongo_topologychangedevent_init_ce(INIT_FUNC_ARGS_PASSTHRU);
php_phongo_topologyclosedevent_init_ce(INIT_FUNC_ARGS_PASSTHRU);
php_phongo_topologyopeningevent_init_ce(INIT_FUNC_ARGS_PASSTHRU);

REGISTER_STRING_CONSTANT("MONGODB_VERSION", (char*) PHP_MONGODB_VERSION, CONST_CS | CONST_PERSISTENT);
Expand Down
6 changes: 4 additions & 2 deletions php_phongo.h
Original file line number Diff line number Diff line change
Expand Up @@ -117,10 +117,12 @@ zend_object_handlers* phongo_get_std_object_handlers(void);

void phongo_clientencryption_init(php_phongo_clientencryption_t* ce_obj, zval* manager, zval* options);
void phongo_server_init(zval* return_value, zval* manager, uint32_t server_id);
void phongo_serverdescription_init(zval* return_value, mongoc_server_description_t* serverDescription);
void phongo_serverdescription_init(zval* return_value, mongoc_server_description_t* server_description);
void phongo_serverdescription_init_ex(zval* return_value, mongoc_server_description_t* sd, bool copy);
#define phongo_serverdescription_init(r, sd) phongo_serverdescription_init_ex((r), (sd), true)
void phongo_session_init(zval* return_value, zval* manager, mongoc_client_session_t* client_session);
void phongo_objectid_init(zval* return_value, const bson_oid_t* oid);
void phongo_topologydescription_init(zval* return_value, mongoc_topology_description_t* topologyDescription);
void phongo_topologydescription_init(zval* return_value, mongoc_topology_description_t* topology_description);
void phongo_readconcern_init(zval* return_value, const mongoc_read_concern_t* read_concern);
void phongo_readpreference_init(zval* return_value, const mongoc_read_prefs_t* read_prefs);
void phongo_writeconcern_init(zval* return_value, const mongoc_write_concern_t* write_concern);
Expand Down
56 changes: 56 additions & 0 deletions php_phongo_classes.h
Original file line number Diff line number Diff line change
Expand Up @@ -159,10 +159,38 @@ static inline php_phongo_commandsucceededevent_t* php_commandsucceededevent_fetc
{
return (php_phongo_commandsucceededevent_t*) ((char*) obj - XtOffsetOf(php_phongo_commandsucceededevent_t, std));
}
static inline php_phongo_serverchangedevent_t* php_serverchangedevent_fetch_object(zend_object* obj)
{
return (php_phongo_serverchangedevent_t*) ((char*) obj - XtOffsetOf(php_phongo_serverchangedevent_t, std));
}
static inline php_phongo_serverclosedevent_t* php_serverclosedevent_fetch_object(zend_object* obj)
{
return (php_phongo_serverclosedevent_t*) ((char*) obj - XtOffsetOf(php_phongo_serverclosedevent_t, std));
}
static inline php_phongo_serverheartbeatfailedevent_t* php_serverheartbeatfailedevent_fetch_object(zend_object* obj)
{
return (php_phongo_serverheartbeatfailedevent_t*) ((char*) obj - XtOffsetOf(php_phongo_serverheartbeatfailedevent_t, std));
}
static inline php_phongo_serverheartbeatstartedevent_t* php_serverheartbeatstartedevent_fetch_object(zend_object* obj)
{
return (php_phongo_serverheartbeatstartedevent_t*) ((char*) obj - XtOffsetOf(php_phongo_serverheartbeatstartedevent_t, std));
}
static inline php_phongo_serverheartbeatsucceededevent_t* php_serverheartbeatsucceededevent_fetch_object(zend_object* obj)
{
return (php_phongo_serverheartbeatsucceededevent_t*) ((char*) obj - XtOffsetOf(php_phongo_serverheartbeatsucceededevent_t, std));
}
static inline php_phongo_serveropeningevent_t* php_serveropeningevent_fetch_object(zend_object* obj)
{
return (php_phongo_serveropeningevent_t*) ((char*) obj - XtOffsetOf(php_phongo_serveropeningevent_t, std));
}
static inline php_phongo_topologychangedevent_t* php_topologychangedevent_fetch_object(zend_object* obj)
{
return (php_phongo_topologychangedevent_t*) ((char*) obj - XtOffsetOf(php_phongo_topologychangedevent_t, std));
}
static inline php_phongo_topologyclosedevent_t* php_topologyclosedevent_fetch_object(zend_object* obj)
{
return (php_phongo_topologyclosedevent_t*) ((char*) obj - XtOffsetOf(php_phongo_topologyclosedevent_t, std));
}
static inline php_phongo_topologyopeningevent_t* php_topologyopeningevent_fetch_object(zend_object* obj)
{
return (php_phongo_topologyopeningevent_t*) ((char*) obj - XtOffsetOf(php_phongo_topologyopeningevent_t, std));
Expand Down Expand Up @@ -202,7 +230,14 @@ static inline php_phongo_topologyopeningevent_t* php_topologyopeningevent_fetch_
#define Z_COMMANDFAILEDEVENT_OBJ_P(zv) (php_commandfailedevent_fetch_object(Z_OBJ_P(zv)))
#define Z_COMMANDSTARTEDEVENT_OBJ_P(zv) (php_commandstartedevent_fetch_object(Z_OBJ_P(zv)))
#define Z_COMMANDSUCCEEDEDEVENT_OBJ_P(zv) (php_commandsucceededevent_fetch_object(Z_OBJ_P(zv)))
#define Z_SERVERCHANGEDEVENT_OBJ_P(zv) (php_serverchangedevent_fetch_object(Z_OBJ_P(zv)))
#define Z_SERVERCLOSEDEVENT_OBJ_P(zv) (php_serverclosedevent_fetch_object(Z_OBJ_P(zv)))
#define Z_SERVERHEARTBEATFAILEDEVENT_OBJ_P(zv) (php_serverheartbeatfailedevent_fetch_object(Z_OBJ_P(zv)))
#define Z_SERVERHEARTBEATSTARTEDEVENT_OBJ_P(zv) (php_serverheartbeatstartedevent_fetch_object(Z_OBJ_P(zv)))
#define Z_SERVERHEARTBEATSUCCEEDEDEVENT_OBJ_P(zv) (php_serverheartbeatsucceededevent_fetch_object(Z_OBJ_P(zv)))
#define Z_SERVEROPENINGEVENT_OBJ_P(zv) (php_serveropeningevent_fetch_object(Z_OBJ_P(zv)))
#define Z_TOPOLOGYCHANGEDEVENT_OBJ_P(zv) (php_topologychangedevent_fetch_object(Z_OBJ_P(zv)))
#define Z_TOPOLOGYCLOSEDEVENT_OBJ_P(zv) (php_topologyclosedevent_fetch_object(Z_OBJ_P(zv)))
#define Z_TOPOLOGYOPENINGEVENT_OBJ_P(zv) (php_topologyopeningevent_fetch_object(Z_OBJ_P(zv)))

#define Z_OBJ_CLIENTENCRYPTION(zo) (php_clientencryption_fetch_object(zo))
Expand Down Expand Up @@ -239,7 +274,14 @@ static inline php_phongo_topologyopeningevent_t* php_topologyopeningevent_fetch_
#define Z_OBJ_COMMANDFAILEDEVENT(zo) (php_commandfailedevent_fetch_object(zo))
#define Z_OBJ_COMMANDSTARTEDEVENT(zo) (php_commandstartedevent_fetch_object(zo))
#define Z_OBJ_COMMANDSUCCEEDEDEVENT(zo) (php_commandsucceededevent_fetch_object(zo))
#define Z_OBJ_SERVERCHANGEDEVENT(zo) (php_serverchangedevent_fetch_object(zo))
#define Z_OBJ_SERVERCLOSEDEVENT(zo) (php_serverclosedevent_fetch_object(zo))
#define Z_OBJ_SERVERHEARTBEATFAILEDEVENT(zo) (php_serverheartbeatfailedevent_fetch_object(zo))
#define Z_OBJ_SERVERHEARTBEATSTARTEDEVENT(zo) (php_serverheartbeatstartedevent_fetch_object(zo))
#define Z_OBJ_SERVERHEARTBEATSUCCEEDEDEVENT(zo) (php_serverheartbeatsucceededevent_fetch_object(zo))
#define Z_OBJ_SERVEROPENINGEVENT(zo) (php_serveropeningevent_fetch_object(zo))
#define Z_OBJ_TOPOLOGYCHANGEDEVENT(zo) (php_topologychangedevent_fetch_object(zo))
#define Z_OBJ_TOPOLOGYCLOSEDEVENT(zo) (php_topologyclosedevent_fetch_object(zo))
#define Z_OBJ_TOPOLOGYOPENINGEVENT(zo) (php_topologyopeningevent_fetch_object(zo))

extern zend_class_entry* php_phongo_clientencryption_ce;
Expand Down Expand Up @@ -313,7 +355,14 @@ extern zend_class_entry* php_phongo_commandsubscriber_ce;
extern zend_class_entry* php_phongo_commandsucceededevent_ce;
extern zend_class_entry* php_phongo_sdamsubscriber_ce;
extern zend_class_entry* php_phongo_subscriber_ce;
extern zend_class_entry* php_phongo_serverchangedevent_ce;
extern zend_class_entry* php_phongo_serverclosedevent_ce;
extern zend_class_entry* php_phongo_serverheartbeatfailedevent_ce;
extern zend_class_entry* php_phongo_serverheartbeatstartedevent_ce;
extern zend_class_entry* php_phongo_serverheartbeatsucceededevent_ce;
extern zend_class_entry* php_phongo_serveropeningevent_ce;
extern zend_class_entry* php_phongo_topologychangedevent_ce;
extern zend_class_entry* php_phongo_topologyclosedevent_ce;
extern zend_class_entry* php_phongo_topologyopeningevent_ce;

extern void php_phongo_binary_init_ce(INIT_FUNC_ARGS);
Expand Down Expand Up @@ -387,7 +436,14 @@ extern void php_phongo_commandsubscriber_init_ce(INIT_FUNC_ARGS);
extern void php_phongo_commandsucceededevent_init_ce(INIT_FUNC_ARGS);
extern void php_phongo_sdamsubscriber_init_ce(INIT_FUNC_ARGS);
extern void php_phongo_subscriber_init_ce(INIT_FUNC_ARGS);
extern void php_phongo_serverchangedevent_init_ce(INIT_FUNC_ARGS);
extern void php_phongo_serverclosedevent_init_ce(INIT_FUNC_ARGS);
extern void php_phongo_serverheartbeatfailedevent_init_ce(INIT_FUNC_ARGS);
extern void php_phongo_serverheartbeatstartedevent_init_ce(INIT_FUNC_ARGS);
extern void php_phongo_serverheartbeatsucceededevent_init_ce(INIT_FUNC_ARGS);
extern void php_phongo_serveropeningevent_init_ce(INIT_FUNC_ARGS);
extern void php_phongo_topologychangedevent_init_ce(INIT_FUNC_ARGS);
extern void php_phongo_topologyclosedevent_init_ce(INIT_FUNC_ARGS);
extern void php_phongo_topologyopeningevent_init_ce(INIT_FUNC_ARGS);

/* Shared function entries for disabling constructors and unserialize() */
Expand Down
53 changes: 53 additions & 0 deletions php_phongo_structs.h
Original file line number Diff line number Diff line change
Expand Up @@ -290,13 +290,66 @@ typedef struct {
zend_object std;
} php_phongo_commandsucceededevent_t;

typedef struct {
bson_oid_t topology_id;
char host[BSON_HOST_NAME_MAX + 1];
uint16_t port;
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;
} 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;
} php_phongo_serverheartbeatfailedevent_t;

typedef struct {
bool awaited;
char host[BSON_HOST_NAME_MAX + 1];
uint16_t port;
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;
} php_phongo_serverheartbeatsucceededevent_t;

typedef struct {
bson_oid_t topology_id;
char host[BSON_HOST_NAME_MAX + 1];
uint16_t port;
zend_object std;
} php_phongo_serveropeningevent_t;

typedef struct {
bson_oid_t topology_id;
mongoc_topology_description_t* new_topology_description;
mongoc_topology_description_t* old_topology_description;
zend_object std;
} php_phongo_topologychangedevent_t;

typedef struct {
bson_oid_t topology_id;
zend_object std;
} php_phongo_topologyclosedevent_t;

typedef struct {
bson_oid_t topology_id;
zend_object std;
Expand Down
40 changes: 40 additions & 0 deletions src/MongoDB/Monitoring/SDAMSubscriber.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,53 @@
zend_class_entry* php_phongo_sdamsubscriber_ce;

/* {{{ MongoDB\Driver\Monitoring\SDAMSubscriber function entries */
ZEND_BEGIN_ARG_INFO_EX(ai_SDAMSubscriber_serverChanged, 0, 0, 1)
ZEND_ARG_OBJ_INFO(0, event, MongoDB\\Driver\\Monitoring\\ServerChangedEvent, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(ai_SDAMSubscriber_serverClosed, 0, 0, 1)
ZEND_ARG_OBJ_INFO(0, event, MongoDB\\Driver\\Monitoring\\ServerClosedEvent, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(ai_SDAMSubscriber_serverOpening, 0, 0, 1)
ZEND_ARG_OBJ_INFO(0, event, MongoDB\\Driver\\Monitoring\\ServerOpeningEvent, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(ai_SDAMSubscriber_serverHeartbeatFailed, 0, 0, 1)
ZEND_ARG_OBJ_INFO(0, event, MongoDB\\Driver\\Monitoring\\ServerHeartbeatFailedEvent, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(ai_SDAMSubscriber_serverHeartbeatStarted, 0, 0, 1)
ZEND_ARG_OBJ_INFO(0, event, MongoDB\\Driver\\Monitoring\\ServerHeartbeatStartedEvent, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(ai_SDAMSubscriber_serverHeartbeatSucceeded, 0, 0, 1)
ZEND_ARG_OBJ_INFO(0, event, MongoDB\\Driver\\Monitoring\\ServerHeartbeatSucceededEvent, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(ai_SDAMSubscriber_topologyChanged, 0, 0, 1)
ZEND_ARG_OBJ_INFO(0, event, MongoDB\\Driver\\Monitoring\\TopologyChangedEvent, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(ai_SDAMSubscriber_topologyClosed, 0, 0, 1)
ZEND_ARG_OBJ_INFO(0, event, MongoDB\\Driver\\Monitoring\\TopologyClosedEvent, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(ai_SDAMSubscriber_topologyOpening, 0, 0, 1)
ZEND_ARG_OBJ_INFO(0, event, MongoDB\\Driver\\Monitoring\\TopologyOpeningEvent, 0)
ZEND_END_ARG_INFO()

static zend_function_entry php_phongo_sdamsubscriber_me[] = {
/* clang-format off */
ZEND_ABSTRACT_ME(SDAMSubscriber, serverChanged, ai_SDAMSubscriber_serverChanged)
ZEND_ABSTRACT_ME(SDAMSubscriber, serverClosed, ai_SDAMSubscriber_serverClosed)
ZEND_ABSTRACT_ME(SDAMSubscriber, serverOpening, ai_SDAMSubscriber_serverOpening)
ZEND_ABSTRACT_ME(SDAMSubscriber, serverHeartbeatFailed, ai_SDAMSubscriber_serverHeartbeatFailed)
ZEND_ABSTRACT_ME(SDAMSubscriber, serverHeartbeatStarted, ai_SDAMSubscriber_serverHeartbeatStarted)
ZEND_ABSTRACT_ME(SDAMSubscriber, serverHeartbeatSucceeded, ai_SDAMSubscriber_serverHeartbeatSucceeded)
ZEND_ABSTRACT_ME(SDAMSubscriber, topologyChanged, ai_SDAMSubscriber_topologyChanged)
ZEND_ABSTRACT_ME(SDAMSubscriber, topologyClosed, ai_SDAMSubscriber_topologyClosed)
ZEND_ABSTRACT_ME(SDAMSubscriber, topologyOpening, ai_SDAMSubscriber_topologyOpening)
PHP_FE_END
/* clang-format on */
};
Expand Down
Loading