Yaron Koren has submitted this change and it was merged. Change subject: added $edgSuppressNoLocalVarMsg flag; added MongoDB memcached support; removed deprecated MongoDB slaveOkay flag; refactored collection exists logic; added isset check to suppress PHP Notice in apache error log ......................................................................
added $edgSuppressNoLocalVarMsg flag; added MongoDB memcached support; removed deprecated MongoDB slaveOkay flag; refactored collection exists logic; added isset check to suppress PHP Notice in apache error log Change-Id: I14f019c5cec113ba2950d393e50b6df0957435ac --- M ED_ParserFunctions.php M ED_Utils.php 2 files changed, 25 insertions(+), 18 deletions(-) Approvals: Yaron Koren: Verified; Looks good to me, approved diff --git a/ED_ParserFunctions.php b/ED_ParserFunctions.php index c8e09f8..550cbcc 100644 --- a/ED_ParserFunctions.php +++ b/ED_ParserFunctions.php @@ -265,9 +265,9 @@ * Render the #external_value parser function */ static function doExternalValue( &$parser, $local_var = '' ) { - global $edgValues; + global $edgValues, $edgSuppressNoLocalVarMsg; if ( ! array_key_exists( $local_var, $edgValues ) ) { - return "Error: no local variable \"$local_var\" was set."; + return $edgSuppressNoLocalVarMsg ? '' : "Error: no local variable \"$local_var\" was set."; } elseif ( is_array( $edgValues[$local_var] ) ) { return $edgValues[$local_var][0]; } else { diff --git a/ED_Utils.php b/ED_Utils.php index 7fc0944..5cc28ec 100644 --- a/ED_Utils.php +++ b/ED_Utils.php @@ -286,6 +286,19 @@ * MongoDB. */ static function getMongoDBData( $db_server, $db_username, $db_password, $db_name, $from, $columns, $where, $sqlOptions, $otherParams ) { + global $wgMainCacheType, $wgMemc, $edgMemCachedMongoDBSeconds; + + // use MEMCACHED if configured to cache mongodb queries + if ($wgMainCacheType === CACHE_MEMCACHED && $edgMemCachedMongoDBSeconds > 0) { + // check if cache entry exists + $mckey = wfMemcKey( 'mongodb', $from, md5(json_encode($otherParams) . json_encode($columns) . $where . json_encode($sqlOptions) . $db_name . $db_server)); + $values = $wgMemc->get( $mckey ); + + if ($values !== false) { + return $values; + } + } + // MongoDB login is done using a single string. // When specifying extra connect string options (e.g. replicasets,timeout, etc.), // use $db_server to pass these values @@ -308,23 +321,13 @@ } catch ( Exception $e ) { return wfMessage( "externaldata-db-could-not-connect" )->text(); } - // If working against a MongoDB replica set, it's OK to go to - // secondary/slaves should the primary go down. - MongoCursor::$slaveOkay = true; $db = $m->selectDB( $db_name ); - // MongoDB doesn't seem to have a way to check whether either - // a database or a collection exists, so instead we'll use - // getCollectionNames() to check for both. - $collectionNames = $db->getCollectionNames(); - if ( count( $collectionNames ) == 0 ) { - return wfMessage( "externaldata-db-could-not-connect" )->text(); - } - - if ( !in_array( $from, $collectionNames ) ) { - return wfMessage( "externaldata-db-unknown-collection" )->text(); - } + // Check if collection exists + if ($db->system->namespaces->findOne(array('name'=>$db_name . "." . $from)) === null){ + return wfMessage( "externaldata-db-unknown-collection:")->text() . $db_name . "." . $from; + } $collection = new MongoCollection( $db, $from ); @@ -416,7 +419,7 @@ // specified using dots (e.g., "a.b.c"), // get the value that way. $values[$column][] = self::getValueFromJSONArray( $doc, $column ); - } elseif ( is_array( $doc[$column] ) ) { + } elseif ( isset( $doc[$column] ) && is_array( $doc[$column] ) ) { // If MongoDB returns an array for a column, // but the exact location of the value wasn't specified, // do some extra processing. @@ -438,11 +441,15 @@ } } else { // It's a simple literal. - $values[$column][] = $doc[$column]; + $values[$column][] = (isset( $doc[$column] ) ? $doc[$column] : null); } } } + if ($wgMainCacheType === CACHE_MEMCACHED && $edgMemCachedMongoDBSeconds > 0 ) { + $wgMemc->set( $mckey, $values, $edgMemCachedMongoDBSeconds ); + } + return $values; } -- To view, visit https://gerrit.wikimedia.org/r/104472 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I14f019c5cec113ba2950d393e50b6df0957435ac Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/ExternalData Gerrit-Branch: master Gerrit-Owner: Jqnatividad <joel.nativi...@ontodia.com> Gerrit-Reviewer: Jqnatividad <joel.nativi...@ontodia.com> Gerrit-Reviewer: Yaron Koren <yaro...@gmail.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits