Change slaveOkay setting for this connection
public setSlaveOkay ( boolean $ok ) : boolean | ||
$ok | boolean | |
return | boolean | returns the former value of slaveOkay for this instance. |
/** * Connects to our database */ public function connect() { // We don't need to throw useless exceptions here, the MongoDB PHP Driver has its own checks and error reporting // Yii will easily and effortlessly display the errors from the PHP driver, we should only catch its exceptions if // we wanna add our own custom messages on top which we don't, the errors are quite self explanatory if (version_compare(phpversion('mongo'), '1.3.0', '<')) { $this->_mongo = new Mongo($this->server, $this->options); $this->_mongo->connect(); if ($this->setSlaveOkay) { $this->_mongo->setSlaveOkay($this->setSlaveOkay); } } else { $this->_mongo = new MongoClient($this->server, $this->options); if (is_array($this->RP)) { $const = $this->RP[0]; $opts = $this->RP[1]; if (!empty($opts)) { // I do this due to a bug that exists in some PHP driver versions $this->_mongo->setReadPreference(constant('MongoClient::' . $const), $opts); } else { $this->_mongo->setReadPreference(constant('MongoClient::' . $const)); } } } }
public function auth($username, $password, $db = "admin") { if ($db === "") { if (!$this->_mongoAuth && $this->_mongoDb) { $db = $this->_mongoDb; } else { $db = "admin"; } } $server = $this->_mongoHost . ":" . $this->_mongoPort; if (!$this->_mongoPort) { $server = $this->_mongoHost; } try { $this->_mongo = new Mongo($server, $this->_mongoOptions); $this->_mongo->setSlaveOkay(true); } catch (Exception $e) { echo "Unable to connect MongoDB, please check your configurations. MongoDB said:" . $e->getMessage() . "."; exit; } // changing timeout to the new value MongoCursor::$timeout = $this->_mongoTimeout; //auth by mongo if ($this->_mongoAuth) { $dbs = $db; if (!is_array($dbs)) { $dbs = preg_split("/\\s*,\\s*/", $dbs); } foreach ($dbs as $db) { $ret = $this->_mongo->selectDb($db)->authenticate($username, $password); if (!$ret["ok"]) { return false; } } } else { if ($this->_controlAuth) { if (!isset($this->_controlUsers[$username]) || $this->_controlUsers[$username] != $password) { return false; } //authenticate if (!empty($this->_mongoUser)) { return $this->_mongo->selectDB($db)->authenticate($this->_mongoUser, $this->_mongoPass); } } else { //authenticate if (!empty($this->_mongoUser)) { return $this->_mongo->selectDB($db)->authenticate($this->_mongoUser, $this->_mongoPass); } } } return true; }
public function testSlaveOkay() { $conn = new Mongo("mongodb://localhost", array("replicaSet" => true, "slaveOkay" => true)); $this->assertTrue($conn->getSlaveOkay()); $db = $conn->somedb; $this->assertTrue($db->getSlaveOkay()); $c = $db->somec; $this->assertTrue($c->getSlaveOkay()); $conn->setSlaveOkay(false); $this->assertFalse($conn->getSlaveOkay()); $this->assertTrue($db->getSlaveOkay()); $this->assertTrue($c->getSlaveOkay()); $db = $conn->somedb; $this->assertFalse($db->getSlaveOkay()); $c = $db->somec; $this->assertFalse($c->getSlaveOkay()); $db->setSlaveOkay(true); $this->assertTrue($db->getSlaveOkay()); $c->setSlaveOkay(true); $this->assertTrue($c->getSlaveOkay()); $conn->setSlaveOkay(true); $this->assertTrue($conn->getSlaveOkay()); }