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

Reply via email to