From 636659e73fac830c476a66b8f913a03c272ba451 Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Tue, 17 Nov 2015 10:43:55 +0000 Subject: [PATCH 01/22] Initial upgrade to pre-1.3.0rc0 version. --- src/libbson | 2 +- src/libmongoc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libbson b/src/libbson index e434c354..7ec1c361 160000 --- a/src/libbson +++ b/src/libbson @@ -1 +1 @@ -Subproject commit e434c354a3939db063ee78345834baed19002f7e +Subproject commit 7ec1c361d4030b69d6a4517eff8d566ae336ad33 diff --git a/src/libmongoc b/src/libmongoc index 495cd3ff..61b3fa49 160000 --- a/src/libmongoc +++ b/src/libmongoc @@ -1 +1 @@ -Subproject commit 495cd3ffa9beade31c2b410eb5e9555c7db240e1 +Subproject commit 61b3fa4951459678ec8f190a5c03f22129aecb49 From 0a47eaa132422459cbcb1bf2b55dbef5ba2abdab Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Tue, 17 Nov 2015 10:44:29 +0000 Subject: [PATCH 02/22] Ordered flag has moved into 'flags' struct (CDRIVER-893) --- src/MongoDB/BulkWrite.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/MongoDB/BulkWrite.c b/src/MongoDB/BulkWrite.c index 8bcfb330..bae8055e 100644 --- a/src/MongoDB/BulkWrite.c +++ b/src/MongoDB/BulkWrite.c @@ -315,7 +315,7 @@ HashTable *php_phongo_bulkwrite_get_debug_info(zval *object, int *is_temp TSRMLS add_assoc_null_ex(&retval, ZEND_STRS("collection")); } - add_assoc_bool_ex(&retval, ZEND_STRS("ordered"), intern->bulk->ordered); + add_assoc_bool_ex(&retval, ZEND_STRS("ordered"), intern->bulk->flags.ordered); add_assoc_bool_ex(&retval, ZEND_STRS("executed"), intern->bulk->executed); add_assoc_long_ex(&retval, ZEND_STRS("server_id"), intern->bulk->hint); From 4e912f1e77b152ad2f9382b69939d4c5c0fc3011 Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Tue, 17 Nov 2015 10:46:03 +0000 Subject: [PATCH 03/22] mongoc_topology_description_server_by_id now takes an additional bson_error_t (CDRIVER-906) --- src/MongoDB/Server.c | 65 ++++++++++++++++++++++++++------------------ 1 file changed, 38 insertions(+), 27 deletions(-) diff --git a/src/MongoDB/Server.c b/src/MongoDB/Server.c index fe9d8041..023f8edb 100644 --- a/src/MongoDB/Server.c +++ b/src/MongoDB/Server.c @@ -134,6 +134,7 @@ PHP_METHOD(Server, getHost) { php_phongo_server_t *intern; mongoc_server_description_t *sd; + bson_error_t error; (void)return_value_ptr; (void)return_value_used; intern = (php_phongo_server_t *)zend_object_store_get_object(getThis() TSRMLS_CC); @@ -142,11 +143,11 @@ PHP_METHOD(Server, getHost) return; } - if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id))) { + if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id, &error))) { RETURN_STRING(sd->host.host, 1); } - phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone"); + phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s: %s", "Failed to get server description, server likely gone", error.message); } /* }}} */ /* {{{ proto array Server::getTags() @@ -155,6 +156,7 @@ PHP_METHOD(Server, getTags) { php_phongo_server_t *intern; mongoc_server_description_t *sd; + bson_error_t error; (void)return_value_ptr; (void)return_value_used; @@ -165,7 +167,7 @@ PHP_METHOD(Server, getTags) } - if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id))) { + if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id, &error))) { php_phongo_bson_state state = PHONGO_BSON_STATE_INITIALIZER; state.map.root_type = PHONGO_TYPEMAP_NATIVE_ARRAY; state.map.document_type = PHONGO_TYPEMAP_NATIVE_ARRAY; @@ -175,7 +177,7 @@ PHP_METHOD(Server, getTags) RETURN_ZVAL(state.zchild, 0, 1); } - phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone"); + phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s: %s", "Failed to get server description, server likely gone", error.message); } /* }}} */ /* {{{ proto array Server::getInfo() @@ -184,6 +186,7 @@ PHP_METHOD(Server, getInfo) { php_phongo_server_t *intern; mongoc_server_description_t *sd; + bson_error_t error; (void)return_value_ptr; (void)return_value_used; @@ -194,7 +197,7 @@ PHP_METHOD(Server, getInfo) } - if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id))) { + if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id, &error))) { php_phongo_bson_state state = PHONGO_BSON_STATE_INITIALIZER; state.map.root_type = PHONGO_TYPEMAP_NATIVE_ARRAY; state.map.document_type = PHONGO_TYPEMAP_NATIVE_ARRAY; @@ -204,7 +207,7 @@ PHP_METHOD(Server, getInfo) RETURN_ZVAL(state.zchild, 0, 1); } - phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone"); + phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s: %s", "Failed to get server description, server likely gone", error.message); } /* }}} */ /* {{{ proto integer Server::getLatency() @@ -213,6 +216,7 @@ PHP_METHOD(Server, getLatency) { php_phongo_server_t *intern; mongoc_server_description_t *sd; + bson_error_t error; (void)return_value_ptr; (void)return_value_used; @@ -222,11 +226,11 @@ PHP_METHOD(Server, getLatency) return; } - if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id))) { + if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id, &error))) { RETURN_LONG(sd->round_trip_time); } - phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone"); + phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s: %s", "Failed to get server description, server likely gone", error.message); } /* }}} */ /* {{{ proto integer Server::getPort() @@ -235,6 +239,7 @@ PHP_METHOD(Server, getPort) { php_phongo_server_t *intern; mongoc_server_description_t *sd; + bson_error_t error; (void)return_value_ptr; (void)return_value_used; @@ -244,11 +249,11 @@ PHP_METHOD(Server, getPort) return; } - if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id))) { + if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id, &error))) { RETURN_LONG(sd->host.port); } - phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone"); + phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s: %s", "Failed to get server description, server likely gone", error.message); } /* }}} */ /* {{{ proto integer Server::getType() @@ -257,6 +262,7 @@ PHP_METHOD(Server, getType) { php_phongo_server_t *intern; mongoc_server_description_t *sd; + bson_error_t error; (void)return_value_ptr; (void)return_value_used; @@ -266,11 +272,11 @@ PHP_METHOD(Server, getType) return; } - if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id))) { + if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id, &error))) { RETURN_LONG(sd->type); } - phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone"); + phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s: %s", "Failed to get server description, server likely gone", error.message); } /* }}} */ /* {{{ proto bool Server::isPrimary() @@ -279,6 +285,7 @@ PHP_METHOD(Server, isPrimary) { php_phongo_server_t *intern; mongoc_server_description_t *sd; + bson_error_t error; (void)return_value_ptr; (void)return_value_used; @@ -288,11 +295,11 @@ PHP_METHOD(Server, isPrimary) return; } - if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id))) { + if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id, &error))) { RETURN_BOOL(sd->type == MONGOC_SERVER_RS_PRIMARY); } - phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone"); + phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s: %s", "Failed to get server description, server likely gone", error.message); } /* }}} */ /* {{{ proto bool Server::isSecondary() @@ -301,6 +308,7 @@ PHP_METHOD(Server, isSecondary) { php_phongo_server_t *intern; mongoc_server_description_t *sd; + bson_error_t error; (void)return_value_ptr; (void)return_value_used; @@ -310,11 +318,11 @@ PHP_METHOD(Server, isSecondary) return; } - if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id))) { + if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id, &error))) { RETURN_BOOL(sd->type == MONGOC_SERVER_RS_SECONDARY); } - phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone"); + phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s: %s", "Failed to get server description, server likely gone", error.message); } /* }}} */ /* {{{ proto bool Server::isArbiter() @@ -323,6 +331,7 @@ PHP_METHOD(Server, isArbiter) { php_phongo_server_t *intern; mongoc_server_description_t *sd; + bson_error_t error; (void)return_value_ptr; (void)return_value_used; @@ -332,11 +341,11 @@ PHP_METHOD(Server, isArbiter) return; } - if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id))) { + if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id, &error))) { RETURN_BOOL(sd->type == MONGOC_SERVER_RS_ARBITER); } - phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone"); + phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s: %s", "Failed to get server description, server likely gone", error.message); } /* }}} */ /* {{{ proto bool Server::isHidden() @@ -345,6 +354,7 @@ PHP_METHOD(Server, isHidden) { php_phongo_server_t *intern; mongoc_server_description_t *sd; + bson_error_t error; (void)return_value_ptr; (void)return_value_used; @@ -354,13 +364,13 @@ PHP_METHOD(Server, isHidden) return; } - if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id))) { + if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id, &error))) { bson_iter_t iter; RETURN_BOOL(bson_iter_init_find_case(&iter, &sd->last_is_master, "hidden") && bson_iter_as_bool(&iter)); } - phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone"); + phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s: %s", "Failed to get server description, server likely gone", error.message); } /* }}} */ /* {{{ proto bool Server::isPassive() @@ -369,6 +379,7 @@ PHP_METHOD(Server, isPassive) { php_phongo_server_t *intern; mongoc_server_description_t *sd; + bson_error_t error; (void)return_value_ptr; (void)return_value_used; @@ -378,13 +389,13 @@ PHP_METHOD(Server, isPassive) return; } - if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id))) { + if ((sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id, &error))) { bson_iter_t iter; RETURN_BOOL(bson_iter_init_find_case(&iter, &sd->last_is_master, "passive") && bson_iter_as_bool(&iter)); } - phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone"); + phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s: %s", "Failed to get server description, server likely gone", error.message); } /* }}} */ @@ -475,8 +486,8 @@ static int php_phongo_server_compare_objects(zval *o1, zval *o2 TSRMLS_DC) /* {{ intern1 = (php_phongo_server_t *)zend_object_store_get_object(o1 TSRMLS_CC); intern2 = (php_phongo_server_t *)zend_object_store_get_object(o2 TSRMLS_CC); - sd1 = mongoc_topology_description_server_by_id(&intern1->client->topology->description, intern1->server_id); - sd2 = mongoc_topology_description_server_by_id(&intern2->client->topology->description, intern2->server_id); + sd1 = mongoc_topology_description_server_by_id(&intern1->client->topology->description, intern1->server_id, NULL); + sd2 = mongoc_topology_description_server_by_id(&intern2->client->topology->description, intern2->server_id, NULL); if (!sd1 || !sd2) { phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone"); @@ -517,14 +528,14 @@ HashTable *php_phongo_server_get_debug_info(zval *object, int *is_temp TSRMLS_DC php_phongo_server_t *intern = NULL; zval retval = zval_used_for_init; mongoc_server_description_t *sd; - + bson_error_t error; *is_temp = 1; intern = (php_phongo_server_t *)zend_object_store_get_object(object TSRMLS_CC); - if (!(sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id))) { - phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone"); + if (!(sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id, &error))) { + phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s: %s", "Failed to get server description, server likely gone", error.message); return NULL; } From 87f7f00d54b91887035c0a47fe0f39b9acb836b4 Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Thu, 19 Nov 2015 11:12:31 +0000 Subject: [PATCH 04/22] Bump libbson and libmongoc to 1.3.0beta0 --- src/libbson | 2 +- src/libmongoc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libbson b/src/libbson index 7ec1c361..635b6d4a 160000 --- a/src/libbson +++ b/src/libbson @@ -1 +1 @@ -Subproject commit 7ec1c361d4030b69d6a4517eff8d566ae336ad33 +Subproject commit 635b6d4a10d957f3f715a1d0d14acecac0aecb32 diff --git a/src/libmongoc b/src/libmongoc index 61b3fa49..70d66a9e 160000 --- a/src/libmongoc +++ b/src/libmongoc @@ -1 +1 @@ -Subproject commit 61b3fa4951459678ec8f190a5c03f22129aecb49 +Subproject commit 70d66a9e9906ef7034ec388f61834a6871577e94 From 9ad2cfee9c932fe050d66acb4bd195e08e8f1810 Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Thu, 19 Nov 2015 17:11:59 +0000 Subject: [PATCH 05/22] Add compilation of mongoc_read_concern.c --- config.m4 | 1 + 1 file changed, 1 insertion(+) diff --git a/config.m4 b/config.m4 index 1a30639b..18fd31f5 100644 --- a/config.m4 +++ b/config.m4 @@ -248,6 +248,7 @@ if test "$MONGODB" != "no"; then mongoc-matcher.c \ mongoc-opcode.c \ mongoc-queue.c \ + mongoc-read-concern.c \ mongoc-read-prefs.c \ mongoc-rpc.c \ mongoc-set.c \ From 392e6f1412a0dce5e84036f60835716835d9b699 Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Thu, 19 Nov 2015 12:41:31 +0000 Subject: [PATCH 06/22] Define weak symbols as per a comment in PHPC-406 --- config.m4 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/config.m4 b/config.m4 index 18fd31f5..cc88fb51 100644 --- a/config.m4 +++ b/config.m4 @@ -427,6 +427,8 @@ else AC_SUBST(MONGOC_HAVE_SASL_CLIENT_DONE, 0) fi +AC_SUBST(MONGOC_HAVE_WEAK_SYMBOLS, 1) + m4_include(src/libmongoc/build/autotools/m4/ax_pthread.m4) AX_PTHREAD From 74ed9435857c0e59adbd4291fae9b0785493ddeb Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Thu, 19 Nov 2015 09:29:11 +0000 Subject: [PATCH 07/22] mongoc_cursor_cursorid_init takes an extra bson_error --- php_phongo.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/php_phongo.c b/php_phongo.c index 1e2ada96..dfac5850 100644 --- a/php_phongo.c +++ b/php_phongo.c @@ -643,8 +643,9 @@ int phongo_execute_command(mongoc_client_t *client, const char *db, const bson_t * after the error checking above. */ if (bson_iter_init_find(&iter, doc, "cursor") && BSON_ITER_HOLDS_DOCUMENT(&iter) && bson_iter_recurse(&iter, &child)) { mongoc_cursor_cursorid_t *cid; + bson_t empty = BSON_INITIALIZER; - _mongoc_cursor_cursorid_init(cursor); + _mongoc_cursor_cursorid_init(cursor, &empty); cursor->limit = 0; cid = cursor->iface_data; From e529d3007b2303c74f36e3a897109d20c2339578 Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Thu, 19 Nov 2015 17:09:11 +0000 Subject: [PATCH 08/22] Renamed struct members due to changes in libmongoc --- php_phongo.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/php_phongo.c b/php_phongo.c index dfac5850..0e646233 100644 --- a/php_phongo.c +++ b/php_phongo.c @@ -649,7 +649,7 @@ int phongo_execute_command(mongoc_client_t *client, const char *db, const bson_t cursor->limit = 0; cid = cursor->iface_data; - cid->has_cursor = true; + cid->in_batch = true; while (bson_iter_next(&child)) { if (BSON_ITER_IS_KEY(&child, "id")) { @@ -660,8 +660,8 @@ int phongo_execute_command(mongoc_client_t *client, const char *db, const bson_t ns = bson_iter_utf8(&child, &cursor->nslen); bson_strncpy(cursor->ns, ns, sizeof cursor->ns); } else if (BSON_ITER_IS_KEY(&child, "firstBatch")) { - if (BSON_ITER_HOLDS_ARRAY(&child) && bson_iter_recurse(&child, &cid->first_batch_iter)) { - cid->in_first_batch = true; + if (BSON_ITER_HOLDS_ARRAY(&child) && bson_iter_recurse(&child, &cid->batch_iter)) { + cid->in_reader = true; } } } @@ -1357,10 +1357,8 @@ void php_phongo_cursor_to_zval(zval *retval, php_phongo_cursor_t *cursor) /* {{{ _ADD_BOOL(zcursor, is_command); _ADD_BOOL(zcursor, sent); _ADD_BOOL(zcursor, done); - _ADD_BOOL(zcursor, failed); _ADD_BOOL(zcursor, end_of_event); _ADD_BOOL(zcursor, in_exhaust); - _ADD_BOOL(zcursor, redir_primary); _ADD_BOOL(zcursor, has_fields); #undef _ADD_BOOL From 5f20d1641d37cb36603f49d0264b16a498d1761b Mon Sep 17 00:00:00 2001 From: Hannes Magnusson Date: Thu, 19 Nov 2015 15:41:53 -0800 Subject: [PATCH 09/22] No need to double-initialize boptions --- src/MongoDB/Query.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/MongoDB/Query.c b/src/MongoDB/Query.c index 5f455f2d..b92e67e9 100644 --- a/src/MongoDB/Query.c +++ b/src/MongoDB/Query.c @@ -75,7 +75,6 @@ PHP_METHOD(Query, __construct) zval_to_bson(zfilter, PHONGO_BSON_NONE, &bfilter, NULL TSRMLS_CC); if (zoptions) { - bson_init(&boptions); zval_to_bson(zoptions, PHONGO_BSON_NONE, &boptions, NULL TSRMLS_CC); } if (!phongo_query_init(intern, &bfilter, &boptions TSRMLS_CC)) { From 2a9981b7e7bcb1a4196fb87af88c6c4f7641b0ea Mon Sep 17 00:00:00 2001 From: Hannes Magnusson Date: Thu, 19 Nov 2015 15:43:18 -0800 Subject: [PATCH 10/22] PHPC-488: Manager::selectServer() should throw when failing to select a server --- src/MongoDB/Manager.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/MongoDB/Manager.c b/src/MongoDB/Manager.c index d933d436..84b2e1a7 100644 --- a/src/MongoDB/Manager.c +++ b/src/MongoDB/Manager.c @@ -256,7 +256,8 @@ PHP_METHOD(Manager, selectServer) php_phongo_manager_t *intern; zval *zreadPreference = NULL; const mongoc_read_prefs_t *readPreference; - uint32_t server_id; + bson_error_t error; + mongoc_server_description_t *selected_server = NULL; (void)return_value_ptr; (void)return_value_used; @@ -267,8 +268,12 @@ PHP_METHOD(Manager, selectServer) } readPreference = phongo_read_preference_from_zval(zreadPreference TSRMLS_CC); - server_id = mongoc_cluster_preselect(&intern->client->cluster, MONGOC_OPCODE_QUERY, readPreference, NULL); - phongo_server_init(return_value, intern->client, server_id TSRMLS_CC); + selected_server = mongoc_topology_select(intern->client->topology, MONGOC_SS_READ, readPreference, MONGOC_SS_DEFAULT_LOCAL_THRESHOLD_MS, &error); + if (selected_server) { + phongo_server_init(return_value, intern->client, selected_server->id TSRMLS_CC); + } else { + phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", error.message); + } } /* }}} */ /* {{{ proto void MongoDB\Driver\Manager::__wakeUp() From 49225e1dc75dbab735bbc826ce18834c25caabe8 Mon Sep 17 00:00:00 2001 From: Hannes Magnusson Date: Thu, 19 Nov 2015 15:44:02 -0800 Subject: [PATCH 11/22] PHPC-495: Upgrade bundled libbson and libmongoc to 1.3.0 --- config.m4 | 15 ++++++---- config.w32 | 2 +- php_phongo.c | 9 ++---- src/BSON/Javascript.c | 1 + src/MongoDB/Server.c | 14 +++++++-- tests/manager/manager-executeCommand-001.phpt | 6 +--- tests/manager/manager-executeQuery-001.phpt | 6 +--- tests/readPreference/bug0146.phpt | 30 ++++--------------- tests/server/server-executeCommand-001.phpt | 6 +--- 9 files changed, 32 insertions(+), 57 deletions(-) diff --git a/config.m4 b/config.m4 index cc88fb51..59a5b354 100644 --- a/config.m4 +++ b/config.m4 @@ -235,6 +235,7 @@ if test "$MONGODB" != "no"; then mongoc-cursor-transform.c \ mongoc-cursor-cursorid.c \ mongoc-database.c \ + mongoc-find-and-modify.c \ mongoc-init.c \ mongoc-gridfs.c \ mongoc-gridfs-file.c \ @@ -246,13 +247,16 @@ if test "$MONGODB" != "no"; then mongoc-log.c \ mongoc-matcher-op.c \ mongoc-matcher.c \ + mongoc-memcmp.c \ mongoc-opcode.c \ mongoc-queue.c \ mongoc-read-concern.c \ mongoc-read-prefs.c \ + mongoc-read-concern.c \ mongoc-rpc.c \ mongoc-set.c \ mongoc-server-description.c \ + mongoc-server-stream.c \ mongoc-socket.c \ mongoc-stream.c \ mongoc-stream-buffered.c \ @@ -300,13 +304,13 @@ PHP_ARG_WITH(libbson, Use system libbson, AC_PATH_PROG(PKG_CONFIG, pkg-config, no) AC_MSG_CHECKING(for libbson) if test -x "$PKG_CONFIG" && $PKG_CONFIG --exists libbson-1.0; then - if $PKG_CONFIG libbson-1.0 --atleast-version 1.2.0; then + if $PKG_CONFIG libbson-1.0 --atleast-version 1.3.0; then LIBBSON_INC=`$PKG_CONFIG libbson-1.0 --cflags` LIBBSON_LIB=`$PKG_CONFIG libbson-1.0 --libs` LIBBSON_VER=`$PKG_CONFIG libbson-1.0 --modversion` AC_MSG_RESULT(version $LIBBSON_VER found) else - AC_MSG_ERROR(system libbson must be upgraded to version >= 1.2.0) + AC_MSG_ERROR(system libbson must be upgraded to version >= 1.3.0) fi else AC_MSG_ERROR(pkgconfig and libbson must be installed) @@ -332,7 +336,7 @@ PHP_ARG_WITH(libmongoc, Use system libmongoc, AC_PATH_PROG(PKG_CONFIG, pkg-config, no) AC_MSG_CHECKING(for libmongoc) if test -x "$PKG_CONFIG" && $PKG_CONFIG --exists libmongoc-1.0 && $PKG_CONFIG --exists libmongoc-priv; then - if $PKG_CONFIG libmongoc-1.0 --atleast-version 1.2.0; then + if $PKG_CONFIG libmongoc-1.0 --atleast-version 1.3.0; then LIBMONGOC_INC=`$PKG_CONFIG libmongoc-priv --cflags` LIBMONGOC_LIB=`$PKG_CONFIG libmongoc-priv --libs` LIBMONGOC_VER=`$PKG_CONFIG libmongoc-priv --modversion` @@ -340,7 +344,7 @@ PHP_ARG_WITH(libmongoc, Use system libmongoc, CFLAGS="$CFLAGS -DMONGOC_I_AM_A_DRIVER" else - AC_MSG_ERROR(system libmongoc must be upgraded to version >= 1.2.0) + AC_MSG_ERROR(system libmongoc must be upgraded to version >= 1.3.0) fi else AC_MSG_ERROR(pkgconfig and mongoc must be installed) @@ -427,8 +431,7 @@ else AC_SUBST(MONGOC_HAVE_SASL_CLIENT_DONE, 0) fi -AC_SUBST(MONGOC_HAVE_WEAK_SYMBOLS, 1) - + m4_include(src/libmongoc/build/autotools/WeakSymbols.m4) m4_include(src/libmongoc/build/autotools/m4/ax_pthread.m4) AX_PTHREAD diff --git a/config.w32 b/config.w32 index 88aeeb9f..a0ce385b 100644 --- a/config.w32 +++ b/config.w32 @@ -15,7 +15,7 @@ if (PHP_MONGODB != "no") { ADD_SOURCES(configure_module_dirname + "/src/contrib/", "php-ssl.c", "mongodb"); ADD_SOURCES(configure_module_dirname + "/src/libbson/src/yajl", "yajl_version.c yajl.c yajl_encode.c yajl_lex.c yajl_parser.c yajl_buf.c yajl_tree.c yajl_alloc.c yajl_gen.c", "mongodb"); ADD_SOURCES(configure_module_dirname + "/src/libbson/src/bson", "bcon.c bson.c bson-atomic.c bson-clock.c bson-context.c bson-error.c bson-iter.c bson-iso8601.c bson-json.c bson-keys.c bson-md5.c bson-memory.c bson-oid.c bson-reader.c bson-string.c bson-timegm.c bson-utf8.c bson-value.c bson-version-functions.c bson-writer.c", "mongodb"); - ADD_SOURCES(configure_module_dirname + "/src/libmongoc/src/mongoc", "mongoc-array.c mongoc-async.c mongoc-async-cmd.c mongoc-buffer.c mongoc-bulk-operation.c mongoc-b64.c mongoc-client.c mongoc-client-pool.c mongoc-cluster.c mongoc-collection.c mongoc-counters.c mongoc-cursor.c mongoc-cursor-array.c mongoc-cursor-transform.c mongoc-cursor-cursorid.c mongoc-database.c mongoc-init.c mongoc-gridfs.c mongoc-gridfs-file.c mongoc-gridfs-file-page.c mongoc-gridfs-file-list.c mongoc-host-list.c mongoc-index.c mongoc-list.c mongoc-log.c mongoc-matcher-op.c mongoc-matcher.c mongoc-opcode.c mongoc-queue.c mongoc-read-prefs.c mongoc-rpc.c mongoc-set.c mongoc-server-description.c mongoc-socket.c mongoc-stream.c mongoc-stream-buffered.c mongoc-stream-file.c mongoc-stream-gridfs.c mongoc-stream-socket.c mongoc-topology.c mongoc-topology-scanner.c mongoc-topology-description.c mongoc-uri.c mongoc-util.c mongoc-version-functions.c mongoc-write-command.c mongoc-write-concern.c", "mongodb"); + ADD_SOURCES(configure_module_dirname + "/src/libmongoc/src/mongoc", "mongoc-array.c mongoc-async.c mongoc-async-cmd.c mongoc-buffer.c mongoc-bulk-operation.c mongoc-b64.c mongoc-client.c mongoc-client-pool.c mongoc-cluster.c mongoc-collection.c mongoc-counters.c mongoc-cursor.c mongoc-cursor-array.c mongoc-cursor-transform.c mongoc-cursor-cursorid.c mongoc-database.c mongoc-find-and-modify.c mongoc-init.c mongoc-gridfs.c mongoc-gridfs-file.c mongoc-gridfs-file-page.c mongoc-gridfs-file-list.c mongoc-host-list.c mongoc-index.c mongoc-list.c mongoc-log.c mongoc-matcher-op.c mongoc-matcher.c mongoc-memcmp.c mongoc-opcode.c mongoc-queue.c mongoc-read-prefs.c mongoc-read-concern.c mongoc-rpc.c mongoc-set.c mongoc-server-description.c mongoc-server-stream.c mongoc-socket.c mongoc-stream.c mongoc-stream-buffered.c mongoc-stream-file.c mongoc-stream-gridfs.c mongoc-stream-socket.c mongoc-topology.c mongoc-topology-scanner.c mongoc-topology-description.c mongoc-uri.c mongoc-util.c mongoc-version-functions.c mongoc-write-command.c mongoc-write-concern.c", "mongodb"); ADD_SOURCES(configure_module_dirname + "/src/libmongoc/src/mongoc", "mongoc-rand.c mongoc-scram.c mongoc-stream-tls.c mongoc-ssl.c", "mongodb"); ADD_SOURCES(configure_module_dirname + "/src/libmongoc/src/mongoc", "mongoc-sasl.c", "mongodb"); diff --git a/php_phongo.c b/php_phongo.c index 0e646233..a3cd8f4a 100644 --- a/php_phongo.c +++ b/php_phongo.c @@ -650,6 +650,7 @@ int phongo_execute_command(mongoc_client_t *client, const char *db, const bson_t cid = cursor->iface_data; cid->in_batch = true; + bson_destroy (&empty); while (bson_iter_next(&child)) { if (BSON_ITER_IS_KEY(&child, "id")) { @@ -661,7 +662,7 @@ int phongo_execute_command(mongoc_client_t *client, const char *db, const bson_t bson_strncpy(cursor->ns, ns, sizeof cursor->ns); } else if (BSON_ITER_IS_KEY(&child, "firstBatch")) { if (BSON_ITER_HOLDS_ARRAY(&child) && bson_iter_recurse(&child, &cid->batch_iter)) { - cid->in_reader = true; + cid->in_batch = true; } } } @@ -920,11 +921,6 @@ bool phongo_stream_socket_check_closed(mongoc_stream_t *stream) /* {{{ */ return PHP_STREAM_OPTION_RETURN_OK != php_stream_set_option(base_stream->stream, PHP_STREAM_OPTION_CHECK_LIVENESS, 0, NULL); } /* }}} */ -mongoc_stream_t* phongo_stream_get_base_stream(mongoc_stream_t *stream) /* {{{ */ -{ - return (mongoc_stream_t *) stream; -} /* }}} */ - ssize_t phongo_stream_poll (mongoc_stream_poll_t *streams, size_t nstreams, int32_t timeout) /* {{{ */ { php_pollfd *fds = NULL; @@ -1175,7 +1171,6 @@ mongoc_stream_t* phongo_stream_initiator(const mongoc_uri_t *uri, const mongoc_h base_stream->vtable.readv = phongo_stream_readv; base_stream->vtable.setsockopt = phongo_stream_setsockopt; base_stream->vtable.check_closed = phongo_stream_socket_check_closed; - base_stream->vtable.get_base_stream = phongo_stream_get_base_stream; base_stream->vtable.poll = phongo_stream_poll; if (host->family != AF_UNIX) { diff --git a/src/BSON/Javascript.c b/src/BSON/Javascript.c index 83ff2510..ef6dd9d4 100644 --- a/src/BSON/Javascript.c +++ b/src/BSON/Javascript.c @@ -73,6 +73,7 @@ PHP_METHOD(Javascript, __construct) } php_phongo_new_javascript_from_javascript_and_scope(0, getThis(), javascript, javascript_len, &scope TSRMLS_CC); + bson_destroy(&scope); } /* }}} */ diff --git a/src/MongoDB/Server.c b/src/MongoDB/Server.c index 023f8edb..559ebb77 100644 --- a/src/MongoDB/Server.c +++ b/src/MongoDB/Server.c @@ -481,16 +481,24 @@ static int php_phongo_server_compare_objects(zval *o1, zval *o2 TSRMLS_DC) /* {{ { php_phongo_server_t *intern1; php_phongo_server_t *intern2; + bson_error_t error1; + bson_error_t error2; mongoc_server_description_t *sd1, *sd2; intern1 = (php_phongo_server_t *)zend_object_store_get_object(o1 TSRMLS_CC); intern2 = (php_phongo_server_t *)zend_object_store_get_object(o2 TSRMLS_CC); - sd1 = mongoc_topology_description_server_by_id(&intern1->client->topology->description, intern1->server_id, NULL); - sd2 = mongoc_topology_description_server_by_id(&intern2->client->topology->description, intern2->server_id, NULL); + sd1 = mongoc_topology_description_server_by_id(&intern1->client->topology->description, intern1->server_id, &error1); + sd2 = mongoc_topology_description_server_by_id(&intern2->client->topology->description, intern2->server_id, &error2); if (!sd1 || !sd2) { - phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", "Failed to get server description, server likely gone"); + if (!sd1 && !sd2) { + phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s and %s", error1.message, error2.message); + } else if (!sd1) { + phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", error1.message); + } else { + phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", error2.message); + } return 0; } diff --git a/tests/manager/manager-executeCommand-001.phpt b/tests/manager/manager-executeCommand-001.phpt index 0cecc288..98bf32cb 100644 --- a/tests/manager/manager-executeCommand-001.phpt +++ b/tests/manager/manager-executeCommand-001.phpt @@ -38,7 +38,7 @@ object(MongoDB\Driver\Command)#%d (1) { bool(true) object(MongoDB\Driver\Cursor)#%d (%d) { ["cursor"]=> - array(19) { + array(%d) { ["stamp"]=> int(0) ["is_command"]=> @@ -47,14 +47,10 @@ object(MongoDB\Driver\Cursor)#%d (%d) { bool(true) ["done"]=> bool(false) - ["failed"]=> - bool(false) ["end_of_event"]=> bool(false) ["in_exhaust"]=> bool(false) - ["redir_primary"]=> - bool(false) ["has_fields"]=> bool(false) ["query"]=> diff --git a/tests/manager/manager-executeQuery-001.phpt b/tests/manager/manager-executeQuery-001.phpt index 7268b9e4..fe4a1281 100644 --- a/tests/manager/manager-executeQuery-001.phpt +++ b/tests/manager/manager-executeQuery-001.phpt @@ -36,7 +36,7 @@ var_dump(iterator_to_array($qr)); bool(true) object(MongoDB\Driver\Cursor)#%d (%d) { ["cursor"]=> - array(19) { + array(%d) { ["stamp"]=> int(0) ["is_command"]=> @@ -45,14 +45,10 @@ object(MongoDB\Driver\Cursor)#%d (%d) { bool(true) ["done"]=> bool(false) - ["failed"]=> - bool(false) ["end_of_event"]=> bool(false) ["in_exhaust"]=> bool(false) - ["redir_primary"]=> - bool(false) ["has_fields"]=> bool(true) ["query"]=> diff --git a/tests/readPreference/bug0146.phpt b/tests/readPreference/bug0146.phpt index d55141a2..4122f68c 100644 --- a/tests/readPreference/bug0146.phpt +++ b/tests/readPreference/bug0146.phpt @@ -32,7 +32,7 @@ foreach($rps as $r) { --EXPECTF-- object(MongoDB\Driver\Cursor)#%d (%d) { ["cursor"]=> - array(18) { + array(%d) { ["stamp"]=> int(0) ["is_command"]=> @@ -41,14 +41,10 @@ object(MongoDB\Driver\Cursor)#%d (%d) { bool(true) ["done"]=> bool(true) - ["failed"]=> - bool(false) ["end_of_event"]=> bool(true) ["in_exhaust"]=> bool(false) - ["redir_primary"]=> - bool(false) ["has_fields"]=> bool(false) ["query"]=> @@ -88,7 +84,7 @@ object(MongoDB\Driver\Cursor)#%d (%d) { } object(MongoDB\Driver\Cursor)#%d (%d) { ["cursor"]=> - array(18) { + array(%d) { ["stamp"]=> int(0) ["is_command"]=> @@ -97,14 +93,10 @@ object(MongoDB\Driver\Cursor)#%d (%d) { bool(true) ["done"]=> bool(true) - ["failed"]=> - bool(false) ["end_of_event"]=> bool(true) ["in_exhaust"]=> bool(false) - ["redir_primary"]=> - bool(false) ["has_fields"]=> bool(false) ["query"]=> @@ -144,7 +136,7 @@ object(MongoDB\Driver\Cursor)#%d (%d) { } object(MongoDB\Driver\Cursor)#%d (%d) { ["cursor"]=> - array(18) { + array(%d) { ["stamp"]=> int(0) ["is_command"]=> @@ -153,14 +145,10 @@ object(MongoDB\Driver\Cursor)#%d (%d) { bool(true) ["done"]=> bool(true) - ["failed"]=> - bool(false) ["end_of_event"]=> bool(true) ["in_exhaust"]=> bool(false) - ["redir_primary"]=> - bool(false) ["has_fields"]=> bool(false) ["query"]=> @@ -200,7 +188,7 @@ object(MongoDB\Driver\Cursor)#%d (%d) { } object(MongoDB\Driver\Cursor)#%d (%d) { ["cursor"]=> - array(18) { + array(%d) { ["stamp"]=> int(0) ["is_command"]=> @@ -209,14 +197,10 @@ object(MongoDB\Driver\Cursor)#%d (%d) { bool(true) ["done"]=> bool(true) - ["failed"]=> - bool(false) ["end_of_event"]=> bool(true) ["in_exhaust"]=> bool(false) - ["redir_primary"]=> - bool(false) ["has_fields"]=> bool(false) ["query"]=> @@ -256,7 +240,7 @@ object(MongoDB\Driver\Cursor)#%d (%d) { } object(MongoDB\Driver\Cursor)#%d (%d) { ["cursor"]=> - array(18) { + array(%d) { ["stamp"]=> int(0) ["is_command"]=> @@ -265,14 +249,10 @@ object(MongoDB\Driver\Cursor)#%d (%d) { bool(true) ["done"]=> bool(true) - ["failed"]=> - bool(false) ["end_of_event"]=> bool(true) ["in_exhaust"]=> bool(false) - ["redir_primary"]=> - bool(false) ["has_fields"]=> bool(false) ["query"]=> diff --git a/tests/server/server-executeCommand-001.phpt b/tests/server/server-executeCommand-001.phpt index e3498e2c..c1ac7805 100644 --- a/tests/server/server-executeCommand-001.phpt +++ b/tests/server/server-executeCommand-001.phpt @@ -27,7 +27,7 @@ var_dump($server == $result->getServer()); bool(true) object(MongoDB\Driver\Cursor)#%d (%d) { ["cursor"]=> - array(19) { + array(%d) { ["stamp"]=> int(0) ["is_command"]=> @@ -36,14 +36,10 @@ object(MongoDB\Driver\Cursor)#%d (%d) { bool(true) ["done"]=> bool(false) - ["failed"]=> - bool(false) ["end_of_event"]=> bool(false) ["in_exhaust"]=> bool(false) - ["redir_primary"]=> - bool(false) ["has_fields"]=> bool(false) ["query"]=> From 873122fb78a9c7ca7e869090326a8122cd80354a Mon Sep 17 00:00:00 2001 From: Hannes Magnusson Date: Thu, 19 Nov 2015 15:54:06 -0800 Subject: [PATCH 12/22] Temporary workaround for warning in mongoc --- .travis.scripts/compile.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.scripts/compile.sh b/.travis.scripts/compile.sh index ccc49f29..e1051b36 100755 --- a/.travis.scripts/compile.sh +++ b/.travis.scripts/compile.sh @@ -20,7 +20,7 @@ build_lcov() { build_lcov phpize -./configure --enable-developer-flags --enable-coverage +./configure --enable-developer-flags --enable-coverage CFLAGS="-Wno-type-limits" make all -j4 sudo make install echo "Use the most-up-to-date run-tests.. old ones like 5.3 don't report failure exit codes" From 36d678794df213d3211e59124a75ed2e46eb0f86 Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Fri, 20 Nov 2015 11:49:58 +0000 Subject: [PATCH 13/22] Only list a file once (crept in due to merge conflicts it seems) --- config.m4 | 1 - 1 file changed, 1 deletion(-) diff --git a/config.m4 b/config.m4 index 59a5b354..0720d88a 100644 --- a/config.m4 +++ b/config.m4 @@ -252,7 +252,6 @@ if test "$MONGODB" != "no"; then mongoc-queue.c \ mongoc-read-concern.c \ mongoc-read-prefs.c \ - mongoc-read-concern.c \ mongoc-rpc.c \ mongoc-set.c \ mongoc-server-description.c \ From fcaa5b8ddd50927f50254bfd75e528b05ab034a1 Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Wed, 2 Dec 2015 11:14:39 +0000 Subject: [PATCH 14/22] Fixed memory leak as per Hannes' comment. https://github.com/mongodb/mongo-php-driver/pull/141#discussion_r46320847 --- src/MongoDB/Manager.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/MongoDB/Manager.c b/src/MongoDB/Manager.c index 84b2e1a7..c8e68529 100644 --- a/src/MongoDB/Manager.c +++ b/src/MongoDB/Manager.c @@ -271,6 +271,7 @@ PHP_METHOD(Manager, selectServer) selected_server = mongoc_topology_select(intern->client->topology, MONGOC_SS_READ, readPreference, MONGOC_SS_DEFAULT_LOCAL_THRESHOLD_MS, &error); if (selected_server) { phongo_server_init(return_value, intern->client, selected_server->id TSRMLS_CC); + mongoc_server_description_destroy(selected_server); } else { phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", error.message); } From 79b031c806d12090be5aa2812b1be15883304615 Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Wed, 2 Dec 2015 11:15:31 +0000 Subject: [PATCH 15/22] Upgrade libbson and libmongoc to latest master release --- src/libbson | 2 +- src/libmongoc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libbson b/src/libbson index 635b6d4a..96731f79 160000 --- a/src/libbson +++ b/src/libbson @@ -1 +1 @@ -Subproject commit 635b6d4a10d957f3f715a1d0d14acecac0aecb32 +Subproject commit 96731f7926a8480d8f456ee163db6bdf4fecdf9e diff --git a/src/libmongoc b/src/libmongoc index 70d66a9e..3473d525 160000 --- a/src/libmongoc +++ b/src/libmongoc @@ -1 +1 @@ -Subproject commit 70d66a9e9906ef7034ec388f61834a6871577e94 +Subproject commit 3473d5256db7fe23c11ceaa812378411f4a0314f From 53643bf93c5dbb1496d3c8e8e2e7e122778d0eaa Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Wed, 2 Dec 2015 11:22:38 +0000 Subject: [PATCH 16/22] Changed error message to make more sense. As per https://github.com/mongodb/mongo-php-driver/pull/141#commitcomment-14531678 --- src/MongoDB/Server.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/MongoDB/Server.c b/src/MongoDB/Server.c index 559ebb77..3b5d3c12 100644 --- a/src/MongoDB/Server.c +++ b/src/MongoDB/Server.c @@ -147,7 +147,7 @@ PHP_METHOD(Server, getHost) RETURN_STRING(sd->host.host, 1); } - phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s: %s", "Failed to get server description, server likely gone", error.message); + phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "Failed to get server description: %s", error.message); } /* }}} */ /* {{{ proto array Server::getTags() @@ -177,7 +177,7 @@ PHP_METHOD(Server, getTags) RETURN_ZVAL(state.zchild, 0, 1); } - phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s: %s", "Failed to get server description, server likely gone", error.message); + phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "Failed to get server description: %s", error.message); } /* }}} */ /* {{{ proto array Server::getInfo() @@ -207,7 +207,7 @@ PHP_METHOD(Server, getInfo) RETURN_ZVAL(state.zchild, 0, 1); } - phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s: %s", "Failed to get server description, server likely gone", error.message); + phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "Failed to get server description: %s", error.message); } /* }}} */ /* {{{ proto integer Server::getLatency() @@ -230,7 +230,7 @@ PHP_METHOD(Server, getLatency) RETURN_LONG(sd->round_trip_time); } - phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s: %s", "Failed to get server description, server likely gone", error.message); + phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "Failed to get server description: %s", error.message); } /* }}} */ /* {{{ proto integer Server::getPort() @@ -253,7 +253,7 @@ PHP_METHOD(Server, getPort) RETURN_LONG(sd->host.port); } - phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s: %s", "Failed to get server description, server likely gone", error.message); + phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "Failed to get server description: %s", error.message); } /* }}} */ /* {{{ proto integer Server::getType() @@ -276,7 +276,7 @@ PHP_METHOD(Server, getType) RETURN_LONG(sd->type); } - phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s: %s", "Failed to get server description, server likely gone", error.message); + phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "Failed to get server description: %s", error.message); } /* }}} */ /* {{{ proto bool Server::isPrimary() @@ -299,7 +299,7 @@ PHP_METHOD(Server, isPrimary) RETURN_BOOL(sd->type == MONGOC_SERVER_RS_PRIMARY); } - phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s: %s", "Failed to get server description, server likely gone", error.message); + phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "Failed to get server description: %s", error.message); } /* }}} */ /* {{{ proto bool Server::isSecondary() @@ -322,7 +322,7 @@ PHP_METHOD(Server, isSecondary) RETURN_BOOL(sd->type == MONGOC_SERVER_RS_SECONDARY); } - phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s: %s", "Failed to get server description, server likely gone", error.message); + phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "Failed to get server description: %s", error.message); } /* }}} */ /* {{{ proto bool Server::isArbiter() @@ -345,7 +345,7 @@ PHP_METHOD(Server, isArbiter) RETURN_BOOL(sd->type == MONGOC_SERVER_RS_ARBITER); } - phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s: %s", "Failed to get server description, server likely gone", error.message); + phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "Failed to get server description: %s", error.message); } /* }}} */ /* {{{ proto bool Server::isHidden() @@ -370,7 +370,7 @@ PHP_METHOD(Server, isHidden) RETURN_BOOL(bson_iter_init_find_case(&iter, &sd->last_is_master, "hidden") && bson_iter_as_bool(&iter)); } - phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s: %s", "Failed to get server description, server likely gone", error.message); + phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "Failed to get server description: %s", error.message); } /* }}} */ /* {{{ proto bool Server::isPassive() @@ -395,7 +395,7 @@ PHP_METHOD(Server, isPassive) RETURN_BOOL(bson_iter_init_find_case(&iter, &sd->last_is_master, "passive") && bson_iter_as_bool(&iter)); } - phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s: %s", "Failed to get server description, server likely gone", error.message); + phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "Failed to get server description: %s", error.message); } /* }}} */ @@ -543,7 +543,7 @@ HashTable *php_phongo_server_get_debug_info(zval *object, int *is_temp TSRMLS_DC if (!(sd = mongoc_topology_description_server_by_id(&intern->client->topology->description, intern->server_id, &error))) { - phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s: %s", "Failed to get server description, server likely gone", error.message); + phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "Failed to get server description: %s", error.message); return NULL; } From a6d83604d9158f53485cef683d4c15805b814760 Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Wed, 2 Dec 2015 11:26:15 +0000 Subject: [PATCH 17/22] Added weak symbols for Windows too As per https://github.com/derickr/mongo-php-driver/commit/77ec06626e645d79a4216605e290279cba586583#commitcomment-14531726 --- config.w32 | 1 + 1 file changed, 1 insertion(+) diff --git a/config.w32 b/config.w32 index a0ce385b..6458a591 100644 --- a/config.w32 +++ b/config.w32 @@ -20,6 +20,7 @@ if (PHP_MONGODB != "no") { ADD_SOURCES(configure_module_dirname + "/src/libmongoc/src/mongoc", "mongoc-sasl.c", "mongodb"); AC_DEFINE("HAVE_MONGOC", 1); + AC_DEFINE("MONGOC_HAVE_WEAK_SYMBOLS", 1); if (!CHECK_LIB("libsasl.lib", "mongodb", PHP_MONGODB)) { WARNING("mongodb libsasl support not enabled, libs not found"); From aeb55cce75d1c18a38acd52847f29de9dfa22da4 Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Wed, 2 Dec 2015 14:50:50 +0000 Subject: [PATCH 18/22] Unblock compile by copying VERSION_CURRENT and VERSION_RELEASED until CDRIVER-1027 is fixed. --- VERSION_CURRENT | 1 + VERSION_RELEASED | 1 + src/libmongoc | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 VERSION_CURRENT create mode 100644 VERSION_RELEASED diff --git a/VERSION_CURRENT b/VERSION_CURRENT new file mode 100644 index 00000000..b6bb93f7 --- /dev/null +++ b/VERSION_CURRENT @@ -0,0 +1 @@ +1.3.0-dev diff --git a/VERSION_RELEASED b/VERSION_RELEASED new file mode 100644 index 00000000..23aa8390 --- /dev/null +++ b/VERSION_RELEASED @@ -0,0 +1 @@ +1.2.2 diff --git a/src/libmongoc b/src/libmongoc index 3473d525..4839021d 160000 --- a/src/libmongoc +++ b/src/libmongoc @@ -1 +1 @@ -Subproject commit 3473d5256db7fe23c11ceaa812378411f4a0314f +Subproject commit 4839021d589f8948cbfac3a5bc795a79c980237d From 8d55a3724d7b6eef7cbc0c8c009015b747252ad9 Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Wed, 2 Dec 2015 17:23:40 +0000 Subject: [PATCH 19/22] Turn off missing braces to make Travis happy --- .travis.scripts/compile.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.scripts/compile.sh b/.travis.scripts/compile.sh index e1051b36..1c48e306 100755 --- a/.travis.scripts/compile.sh +++ b/.travis.scripts/compile.sh @@ -20,7 +20,7 @@ build_lcov() { build_lcov phpize -./configure --enable-developer-flags --enable-coverage CFLAGS="-Wno-type-limits" +./configure --enable-developer-flags --enable-coverage CFLAGS="-Wno-type-limits -Wno-missing-braces" make all -j4 sudo make install echo "Use the most-up-to-date run-tests.. old ones like 5.3 don't report failure exit codes" From 1e5f75311793726def085fc4abe2887231d336fd Mon Sep 17 00:00:00 2001 From: Hannes Magnusson Date: Wed, 2 Dec 2015 09:15:44 -0800 Subject: [PATCH 20/22] Edgecase compiler warnings in mongoc are mongoc problem, not phongo --- config.m4 | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/config.m4 b/config.m4 index 0720d88a..90d62c47 100644 --- a/config.m4 +++ b/config.m4 @@ -318,8 +318,8 @@ PHP_ARG_WITH(libbson, Use system libbson, PHP_EVAL_LIBLINE($LIBBSON_LIB, MONGODB_SHARED_LIBADD) AC_DEFINE(HAVE_SYSTEM_LIBBSON, 1, [Use system libbson]) else - PHP_ADD_SOURCES_X(PHP_EXT_DIR(mongodb)[src/libbson/src/yajl], $YAJL_SOURCES, [$STD_CFLAGS $MAINTAINER_CFLAGS], shared_objects_mongodb, yes) - PHP_ADD_SOURCES_X(PHP_EXT_DIR(mongodb)[src/libbson/src/bson], $BSON_SOURCES, [$STD_CFLAGS $MAINTAINER_CFLAGS], shared_objects_mongodb, yes) + PHP_ADD_SOURCES_X(PHP_EXT_DIR(mongodb)[src/libbson/src/yajl], $YAJL_SOURCES, [$STD_CFLAGS], shared_objects_mongodb, yes) + PHP_ADD_SOURCES_X(PHP_EXT_DIR(mongodb)[src/libbson/src/bson], $BSON_SOURCES, [$STD_CFLAGS], shared_objects_mongodb, yes) fi dnl libmongoc stuff {{{ @@ -354,9 +354,9 @@ PHP_ARG_WITH(libmongoc, Use system libmongoc, else CPPFLAGS="$CPPFLAGS -DBSON_COMPILATION -DMONGOC_COMPILATION -DMONGOC_TRACE" - PHP_ADD_SOURCES_X(PHP_EXT_DIR(mongodb)[src/libmongoc/src/mongoc], $MONGOC_SOURCES, [$STD_CFLAGS $MAINTAINER_CFLAGS], shared_objects_mongodb, yes) - PHP_ADD_SOURCES_X(PHP_EXT_DIR(mongodb)[src/libmongoc/src/mongoc], $MONGOC_SOURCES_SSL, [$STD_CFLAGS $MAINTAINER_CFLAGS], shared_objects_mongodb, yes) - PHP_ADD_SOURCES_X(PHP_EXT_DIR(mongodb)[src/libmongoc/src/mongoc], $MONGOC_SOURCES_SASL, [$STD_CFLAGS $MAINTAINER_CFLAGS], shared_objects_mongodb, yes) + PHP_ADD_SOURCES_X(PHP_EXT_DIR(mongodb)[src/libmongoc/src/mongoc], $MONGOC_SOURCES, [$STD_CFLAGS], shared_objects_mongodb, yes) + PHP_ADD_SOURCES_X(PHP_EXT_DIR(mongodb)[src/libmongoc/src/mongoc], $MONGOC_SOURCES_SSL, [$STD_CFLAGS], shared_objects_mongodb, yes) + PHP_ADD_SOURCES_X(PHP_EXT_DIR(mongodb)[src/libmongoc/src/mongoc], $MONGOC_SOURCES_SASL, [$STD_CFLAGS], shared_objects_mongodb, yes) PHP_SETUP_OPENSSL(MONGODB_SHARED_LIBADD) From adaa74021ecb57667442c6076fa242c705b172eb Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Wed, 2 Dec 2015 17:38:11 +0000 Subject: [PATCH 21/22] Move flag exceptions back into config.m4 --- .travis.scripts/compile.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.scripts/compile.sh b/.travis.scripts/compile.sh index 1c48e306..e1051b36 100755 --- a/.travis.scripts/compile.sh +++ b/.travis.scripts/compile.sh @@ -20,7 +20,7 @@ build_lcov() { build_lcov phpize -./configure --enable-developer-flags --enable-coverage CFLAGS="-Wno-type-limits -Wno-missing-braces" +./configure --enable-developer-flags --enable-coverage CFLAGS="-Wno-type-limits" make all -j4 sudo make install echo "Use the most-up-to-date run-tests.. old ones like 5.3 don't report failure exit codes" From bc9ebcc802e26440285efa8e44efa5503faa51a5 Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Wed, 2 Dec 2015 17:43:52 +0000 Subject: [PATCH 22/22] Made error message more consistent as per Jeremy's comment --- src/MongoDB/Server.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/MongoDB/Server.c b/src/MongoDB/Server.c index 3b5d3c12..e6a41ec9 100644 --- a/src/MongoDB/Server.c +++ b/src/MongoDB/Server.c @@ -493,11 +493,11 @@ static int php_phongo_server_compare_objects(zval *o1, zval *o2 TSRMLS_DC) /* {{ if (!sd1 || !sd2) { if (!sd1 && !sd2) { - phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s and %s", error1.message, error2.message); + phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "Failed to get server descriptions: %s and %s", error1.message, error2.message); } else if (!sd1) { - phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", error1.message); + phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "Failed to get server description: %s", error1.message); } else { - phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "%s", error2.message); + phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "Failed to get server description: %s", error2.message); } return 0; }