summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormillette <millette@controlyourself.ca>2008-11-23 15:16:16 -0500
committermillette <millette@controlyourself.ca>2008-11-23 15:16:16 -0500
commit4206f4d9614e2d04d968355775d6ea6e536c9cad (patch)
treee3b52aa787c93f2a815afbb014d5f1a788c57ab8
parent095ff0feedac05e8dee04927bf4da0ae3ffb6a62 (diff)
sphinx: fallback if no connection
darcs-hash:20081123201616-099f7-54ac0134e38e145b99a81336ae0b51a8ecd560a8.gz
-rw-r--r--classes/Memcached_DataObject.php17
-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) {