فهرست منبع

Added support for weight parameter in server configuration, that allows to balance the keys asymmetrically across multiple servers.

Daniele Alessandri 15 سال پیش
والد
کامیت
981b64fe21
1فایلهای تغییر یافته به همراه11 افزوده شده و 7 حذف شده
  1. 11 7
      lib/Predis.php

+ 11 - 7
lib/Predis.php

@@ -709,6 +709,9 @@ class ConnectionParameters {
                     case 'alias':
                         $details['alias'] = $v;
                         break;
+                    case 'weight':
+                        $details['weight'] = $v;
+                        break;
                 }
             }
             $parsed = array_merge($parsed, $details);
@@ -729,7 +732,8 @@ class ConnectionParameters {
             'password' => self::getParamOrDefault($parameters, 'password'), 
             'connection_timeout' => self::getParamOrDefault($parameters, 'connection_timeout', self::DEFAULT_TIMEOUT), 
             'read_write_timeout' => self::getParamOrDefault($parameters, 'read_write_timeout'), 
-            'alias' => self::getParamOrDefault($parameters, 'alias'), 
+            'alias'  => self::getParamOrDefault($parameters, 'alias'), 
+            'weight' => self::getParamOrDefault($parameters, 'weight', Utilities\HashRing::DEFAULT_WEIGHT), 
         );
     }
 
@@ -855,8 +859,8 @@ class Connection implements IConnection {
         return $this->_reader;
     }
 
-    public function getAlias() {
-        return $this->_params->alias;
+    public function getParameters() {
+        return $this->_params;
     }
 
     public function __toString() {
@@ -898,14 +902,14 @@ class ConnectionCluster implements IConnection, \IteratorAggregate {
     }
 
     public function add(Connection $connection) {
-        $connectionAlias = $connection->getAlias();
-        if (isset($connectionAlias)) {
-            $this->_pool[$connectionAlias] = $connection;
+        $parameters = $connection->getParameters();
+        if (isset($parameters->alias)) {
+            $this->_pool[$parameters->alias] = $connection;
         }
         else {
             $this->_pool[] = $connection;
         }
-        $this->_ring->add($connection);
+        $this->_ring->add($connection, $parameters->weight);
     }
 
     public function getConnection(Command $command) {