| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- <?php
- namespace Elasticsearch\ConnectionPool\Selectors;
- use Elasticsearch\Connections\ConnectionInterface;
- /**
- * Class StickyRoundRobinSelector
- *
- * @category Elasticsearch
- * @package Elasticsearch\ConnectionPool\Selectors\ConnectionPool
- * @author Zachary Tong <zach@elastic.co>
- * @license http://www.apache.org/licenses/LICENSE-2.0 Apache2
- * @link http://elastic.co
- */
- class StickyRoundRobinSelector implements SelectorInterface
- {
- /**
- * @var int
- */
- private $current = 0;
- /**
- * @var int
- */
- private $currentCounter = 0;
- /**
- * Use current connection unless it is dead, otherwise round-robin
- *
- * @param ConnectionInterface[] $connections Array of connections to choose from
- *
- * @return ConnectionInterface
- */
- public function select($connections)
- {
- /** @var ConnectionInterface[] $connections */
- if ($connections[$this->current]->isAlive()) {
- return $connections[$this->current];
- }
- $this->currentCounter += 1;
- $this->current = $this->currentCounter % count($connections);
- return $connections[$this->current];
- }
- }
|