libcouchbase连接错误

时间:2013-10-28 18:29:06

标签: php couchbase

Couchbase一直在抱怨我没有与Couchbase的连接:

2013-10-28T11:15:46.580320-07:00 hoot77 apache2[30455]: PHP Warning:  There is no active     connection to couchbase in /ebs1/www/src/core/components/In/Couchbase/Bucket.php on line 112

以下是试图运行的代码片段,它是一个简单的集合。

*/
public function set($key, $doc, $try = 0) {

    // Make sure designDoc and dataView are set
    if(empty($this->designDoc) && empty($this->dataView)) {
        throw new In_Exception('Missing Design Doc and/or View name for Couchbase', 400);
    }

    try {
        $results = $this->cb->set($key, $doc);
    } catch(CouchbaseLibcouchbaseException $e) {
        // Connection not active, try to rebuild connection and query again

        // Log stats on exception
        Statsd::increment("web.Couchbase.Exception.LibCouchbaseException.{$this->instanceKey}");
        Logger::error("LibCouchbaseException on {$this->instanceKey}: {$e->getMessage()}");

        // Try to reconnect and query up to twice
        $try++;
        if($try <= 2) {
            $this->rebuildConnection();
            return $this->set($key, $doc, $try);
        } else {
            // Fail if we've already tried twice
            throw new In_Exception('Could not connect to Couchbase', 500);
        }

    } catch(CouchbaseException $e) { 
        // Catch general exception, try to determine cause

        // Log stats on exception
        Statsd::increment("web.Couchbase.Exception.CouchbaseException.{$this->instanceKey}");
        Logger::error("CouchbaseException on {$this->instanceKey}: {$e->getMessage()}");

        // Throw exception if design document or view not found
        if($this->getExceptionCode($e->getMessage()) == 404) {
            throw new In_Exception('Design Document, or View not found in Couchbase', 404);
        } else {
            throw new In_Exception('Error with Couchbase, try again.', 500);
        }

    }

    // Success, return results
    Statsd::increment("web.couchbase.{$this->instanceKey}.success");
    return $results;
}

它抱怨的界限是:

$results = $this->cb->set($key, $doc);

你可以看到我的快速解决方案是尝试在失败时重新连接两次,但这似乎没有任何帮助,错误仍然存​​在很多。

它实际上并没有捕获异常并且一致地报告它们,这很烦人,因为PHP将这些作为警告,而不是例外。

如果您对如何解决这个问题有任何建议,请告诉我,我们将不胜感激。谢谢!

0 个答案:

没有答案