From 4206f4d9614e2d04d968355775d6ea6e536c9cad Mon Sep 17 00:00:00 2001 From: millette Date: Sun, 23 Nov 2008 15:16:16 -0500 Subject: [PATCH] sphinx: fallback if no connection darcs-hash:20081123201616-099f7-54ac0134e38e145b99a81336ae0b51a8ecd560a8.gz --- classes/Memcached_DataObject.php | 17 ++++++++++++----- .../SearchEngines.php => lib/search_engines.php | 12 ++++++++++++ 2 files changed, 24 insertions(+), 5 deletions(-) rename classes/SearchEngines.php => lib/search_engines.php (91%) diff --git a/classes/Memcached_DataObject.php b/classes/Memcached_DataObject.php index e1d58dd70e..674de9bc5b 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 similarity index 91% rename from classes/SearchEngines.php rename to lib/search_engines.php index 96fd7da90d..7fcc1ffcb0 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) {