sphinx: fallback if no connection

darcs-hash:20081123201616-099f7-54ac0134e38e145b99a81336ae0b51a8ecd560a8.gz
This commit is contained in:
millette 2008-11-23 15:16:16 -05:00
parent 095ff0feed
commit 4206f4d961
2 changed files with 24 additions and 5 deletions

View File

@ -171,15 +171,22 @@ class Memcached_DataObject extends DB_DataObject
} }
function getSearchEngine($table) { function getSearchEngine($table) {
require_once INSTALLDIR.'/classes/SearchEngines.php'; require_once INSTALLDIR.'/lib/search_engines.php';
static $search_engine; static $search_engine;
if (!isset($search_engine)) { if (!isset($search_engine)) {
$connected = false;
if (common_config('sphinx', 'enabled')) { if (common_config('sphinx', 'enabled')) {
$search_engine = new SphinxSearch($this, $table); $search_engine = new SphinxSearch($this, $table);
} elseif ('mysql' === common_config('db', 'type')) { $connected = $search_engine->is_connected();
$search_engine = new MySQLSearch($this, $table); }
} else {
$search_engine = new PGSearch($this, $table); // unable to connect to sphinx' search daemon
if (!$connected) {
if ('mysql' === common_config('db', 'type')) {
$search_engine = new MySQLSearch($this, $table);
} else {
$search_engine = new PGSearch($this, $table);
}
} }
} }
return $search_engine; return $search_engine;

View File

@ -43,11 +43,23 @@ class SearchEngine {
class SphinxSearch extends SearchEngine { class SphinxSearch extends SearchEngine {
private $sphinx; private $sphinx;
private $connected;
function __construct($target, $table) { function __construct($target, $table) {
$fp = @fsockopen(common_config('sphinx', 'server'), common_config('sphinx', 'port'));
if (!$fp) {
$this->connected = false;
return;
}
fclose($fp);
parent::__construct($target, $table); parent::__construct($target, $table);
$this->sphinx = new SphinxClient; $this->sphinx = new SphinxClient;
$this->sphinx->setServer(common_config('sphinx', 'server'), common_config('sphinx', 'port')); $this->sphinx->setServer(common_config('sphinx', 'server'), common_config('sphinx', 'port'));
$this->connected = true;
}
function is_connected() {
return $this->connected;
} }
function limit($offset, $count, $rss = false) { function limit($offset, $count, $rss = false) {