diff options
author | millette <millette@controlyourself.ca> | 2008-11-23 15:16:16 -0500 |
---|---|---|
committer | millette <millette@controlyourself.ca> | 2008-11-23 15:16:16 -0500 |
commit | 4206f4d9614e2d04d968355775d6ea6e536c9cad (patch) | |
tree | e3b52aa787c93f2a815afbb014d5f1a788c57ab8 | |
parent | 095ff0feedac05e8dee04927bf4da0ae3ffb6a62 (diff) |
sphinx: fallback if no connection
darcs-hash:20081123201616-099f7-54ac0134e38e145b99a81336ae0b51a8ecd560a8.gz
-rw-r--r-- | classes/Memcached_DataObject.php | 17 | ||||
-rw-r--r-- | lib/search_engines.php (renamed from classes/SearchEngines.php) | 12 |
2 files changed, 24 insertions, 5 deletions
diff --git a/classes/Memcached_DataObject.php b/classes/Memcached_DataObject.php index e1d58dd70..674de9bc5 100644 --- a/classes/Memcached_DataObject.php +++ b/classes/Memcached_DataObject.php @@ -171,15 +171,22 @@ class Memcached_DataObject extends DB_DataObject } function getSearchEngine($table) { - require_once INSTALLDIR.'/classes/SearchEngines.php'; + require_once INSTALLDIR.'/lib/search_engines.php'; static $search_engine; if (!isset($search_engine)) { + $connected = false; if (common_config('sphinx', 'enabled')) { $search_engine = new SphinxSearch($this, $table); - } elseif ('mysql' === common_config('db', 'type')) { - $search_engine = new MySQLSearch($this, $table); - } else { - $search_engine = new PGSearch($this, $table); + $connected = $search_engine->is_connected(); + } + + // 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; diff --git a/classes/SearchEngines.php b/lib/search_engines.php index 96fd7da90..7fcc1ffcb 100644 --- a/classes/SearchEngines.php +++ b/lib/search_engines.php @@ -43,11 +43,23 @@ class SearchEngine { class SphinxSearch extends SearchEngine { private $sphinx; + private $connected; 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); $this->sphinx = new SphinxClient; $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) { |