Пример #1
0
    // Checks that all config servers are online
    bool _checkConfigServersAlive(const ConnectionString& configLoc, string* errMsg) {
        
        scoped_ptr<ScopedDbConnection> connPtr;

        bool resultOk;
        BSONObj result;
        try {
            connPtr.reset(ScopedDbConnection::getInternalScopedDbConnection(configLoc, 30));
            ScopedDbConnection& conn = *connPtr;
            
            if (conn->type() == ConnectionString::SYNC) {
                // TODO: Dynamic cast is bad, we need a better way of managing this op
                // via the heirarchy (or not)
                SyncClusterConnection* scc = dynamic_cast<SyncClusterConnection*>(conn.get());
                fassert(16729, scc != NULL);
                return scc->prepare(*errMsg);
            }
            else {
                resultOk = conn->runCommand("admin", BSON( "fsync" << 1 ), result); 
            }
        }
        catch (const DBException& e) {
            *errMsg = e.toString();
            return false;
        }

        connPtr->done();
        
        if (!resultOk) {
            *errMsg = DBClientWithCommands::getLastErrorString(result);
            return false;
        }
        
        return true;            
    }