Browse Source

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

Daniele Alessandri 15 năm trước cách đây
mục cha
commit
981b64fe21
1 tập tin đã thay đổi với 11 bổ sung7 xóa
  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) {