Andrew Bogott has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/270494

Change subject: Added OpenStackNovaRole::getRoleNameForId
......................................................................

Added OpenStackNovaRole::getRoleNameForId

This new function caches the global role list, which means
one less keystone call each time we initialize a role.

Change-Id: I595ae53b419656818f50373d2fac251a5af8a261
---
M nova/OpenStackNovaRole.php
1 file changed, 27 insertions(+), 10 deletions(-)


  git pull 
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/OpenStackManager 
refs/changes/94/270494/1

diff --git a/nova/OpenStackNovaRole.php b/nova/OpenStackNovaRole.php
index 44f3aab..423fe5e 100644
--- a/nova/OpenStackNovaRole.php
+++ b/nova/OpenStackNovaRole.php
@@ -24,16 +24,7 @@
                $this->project = $project;
                OpenStackNovaLdapConnection::connect();
 
-               # Get the name by searching the global role list
-               $controller = OpenstackNovaProject::getController();
-               $globalrolelist = $controller->getKeystoneRoles();
-               $this->rolename = 'unknown role';
-               foreach ( $globalrolelist as $id => $name ) {
-                       if ( $id == $this->roleid ) {
-                               $this->rolename = $name;
-                               break;
-                       }
-               }
+               $this->rolename = OpenStackNovaRole::getRoleNameForId( 
$this->roleid );
        }
 
        /**
@@ -197,4 +188,30 @@
                }
                return null;
        }
+
+       /**
+        * @static
+        * @param  $roleid
+        * @return role name
+        */
+       static function getRoleNameForId( $roleid ) {
+               global $wgMemc;
+
+               $key = wfMemcKey( 'openstackmanager', 'globalrolelist' );
+               $globalrolelist = $wgMemc->get( $key );
+               if ( ! is_array( $globalrolelist ) ) {
+                       $controller = OpenstackNovaProject::getController();
+                       $globalrolelist = $controller->getKeystoneRoles();
+
+                       # Roles basically never change, so this can be a 
long-lived cache
+                       $wgMemc->set( $key, $globalrolelist );
+               }
+
+               foreach ( $globalrolelist as $id => $name ) {
+                       if ( $id == $roleid ) {
+                               return $name;
+                       }
+               }
+               return "unknown role";
+       }
 }

-- 
To view, visit https://gerrit.wikimedia.org/r/270494
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I595ae53b419656818f50373d2fac251a5af8a261
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/OpenStackManager
Gerrit-Branch: master
Gerrit-Owner: Andrew Bogott <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to