切换MongoDB主数据库时没有抛出PHP异常


Not throwing PHP exception when switching MongoDB primary

我有一个MongoDB 2.2复制集设置(2个节点),并使用PHP连接到测试,例如

$mongo = new Mongo("mongodb://192.168.1.1:27017,192.168.1.2:27017", 
                        array("replicaSet" => "testrs", 
                              "safe" => TRUE));
$db = $mongo->test;
$collection = $db->dump;
while (true) {
    echo "Result: " . 
            $collection->insert(array( "ts" => time() ));
    sleep(10);
}

在执行过程中,当我从主节点stepDown时,我发现插入停止工作,但echo仍然给我1,所以没有抛出异常,我上面的代码有问题吗?

正如您在这里所读到的,insert只有在设置了safe选项时才会抛出异常:

如果设置了"安全"选项并且插入了失败。(1.0.1+版本)

如果设置了"安全"选项并且操作需要比MongoCursor::$timeout毫秒更长的时间才能完成这不会终止服务器上的操作,而是客户端超时。

设置safe选项,您应该能够看到抛出的异常。