0

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);

私の簡単な解決策は、失敗した場合に最大 2 回再接続を試みることでしたが、それはまったく役に立たないようで、エラーは依然として多数残っています。

実際には、例外をキャッチして一貫して報告していません。これは、PHP がこれらを例外ではなく警告としてスローしているため、面倒です。

これを解決する方法について何か提案があれば教えてください。大歓迎です。ありがとう!

4

0 に答える 0