_getRedis($node_id); } public function _getRedis($node_id) { if(!array_key_exists($node_id, $this->pool)) { Daemon::log('Unknown node: '.$node_id); Daemon::log(Debug::Dump(array_keys($this->pool))); Daemon::log(Debug::backtrace()); return false; } $obj = null; $timer = PinbaClient::createCmdExecTimer('RedisPoolSearch')->start(); $s = sizeof($this->pool[$node_id]); $l = $s - 1; $acq_r = null; for($i = 0; $i < $s; ++$i) { if($this->pool[$node_id][$i]->acquire()) { $obj = $this->pool[$node_id][$i]; break; } if($i == $l) { $i = 0; usleep(100); // FIXME: we need in this usleep call? } } $timer->stop(); $obj->ping(); return $obj; } private static function connect(array $conf) { $redis = null; if(array_key_exists('socket', $conf)) { $redis = new RedisClient(null, null, $conf['socket'], $conf['db']); } else { $redis = new RedisClient($conf['host'], $conf['port'], null, $conf['db']); } $redis->connect(); return $redis; } public static function getPersistent($node_id) { if(!array_key_exists($node_id, Config::getRedisNodes())) { Daemon::log('Unknown node: '.$node_id); Daemon::log(Debug::Dump(array_keys(self::$pool))); Daemon::log(Debug::backtrace()); return false; } return self::connect(Config::getRedisNodeParams($node_id)); } public static function init() { self::$instance = new RedisMapper(); self::$instance->_init(); } public function __construct() { } public function _init() { $nodes = array_keys(Config::getRedisNodes()); $params = array(); foreach($nodes as $id) { $this->pool[$id] = array(); $params = Config::getRedisNodeParams($id); for($i = 0; $i < $params['max_connections']; ++$i) { $this->pool[$id][] = ConnectionHandler::getCHandler(self::connect($params), ConnectionHandler::REDIS_LOCK_PREFIX); } } } public static function tearDown() { self::$instance->_tearDown(); self::$instance = null; } public function _tearDown() { $keys = array_keys($this->pool); for($i = 0, $s = sizeof($this->pool); $i < $s; ++$i) { for($j = 0, $l = sizeof($this->pool[$keys[$i]]); $j < $l; ++$j) { if($this->pool[$keys[$i]][$j] instanceof ConnectionHandler) { $this->pool[$keys[$i]][$j]->tearDown(); $this->pool[$keys[$i]][$j] = null; } } } $this->pool = null; } }