sphinx: fallback if no connection
darcs-hash:20081123201616-099f7-54ac0134e38e145b99a81336ae0b51a8ecd560a8.gz
This commit is contained in:
parent
095ff0feed
commit
4206f4d961
|
@ -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;
|
||||||
|
|
|
@ -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) {
|
Loading…
Reference in New Issue
Block a user