diff options
author | Eliot Horowitz <eliot@10gen.com> | 2010-03-22 09:51:06 -0400 |
---|---|---|
committer | Eliot Horowitz <eliot@10gen.com> | 2010-03-22 09:51:06 -0400 |
commit | 92dca86601a5f54c76e748e04ecb3a96d35ca0b4 (patch) | |
tree | b8b92f138bdd1247078c88cc2c64a7b9563bda6f | |
parent | f154df074d4bbf9aece18a20fef8eef4f49a5a62 (diff) | |
download | mongo-92dca86601a5f54c76e748e04ecb3a96d35ca0b4.tar.gz |
some abstractions in prep for SHARDING-39
-rw-r--r-- | client/dbclient.h | 7 | ||||
-rw-r--r-- | client/syncclusterconnection.cpp | 15 | ||||
-rw-r--r-- | client/syncclusterconnection.h | 23 | ||||
-rw-r--r-- | s/config.cpp | 4 | ||||
-rw-r--r-- | scripting/sm_db.cpp | 37 |
5 files changed, 58 insertions, 28 deletions
diff --git a/client/dbclient.h b/client/dbclient.h index cc5aff2234d..3141d4588b6 100644 --- a/client/dbclient.h +++ b/client/dbclient.h @@ -723,6 +723,13 @@ namespace mongo { virtual bool isFailed() const = 0; + static int countCommas( const string& s ){ + int n = 0; + for ( unsigned i=0; i<s.size(); i++ ) + if ( s[i] == ',' ) + n++; + return n; + } }; class DBClientPaired; diff --git a/client/syncclusterconnection.cpp b/client/syncclusterconnection.cpp index ceaacbe58d6..3a952b2ca75 100644 --- a/client/syncclusterconnection.cpp +++ b/client/syncclusterconnection.cpp @@ -197,7 +197,7 @@ namespace mongo { void SyncClusterConnection::update( const string &ns , Query query , BSONObj obj , bool upsert , bool multi ){ assert(0); } - string SyncClusterConnection::toString(){ + string SyncClusterConnection::_toString() const { stringstream ss; ss << "SyncClusterConnection ["; for ( size_t i=0; i<_conns.size(); i++ ){ @@ -209,5 +209,18 @@ namespace mongo { return ss.str(); } + bool SyncClusterConnection::call( Message &toSend, Message &response, bool assertOk ){ + assert(0); + return false; + } + + void SyncClusterConnection::say( Message &toSend ){ + assert(0); + } + + void SyncClusterConnection::sayPiggyBack( Message &toSend ){ + assert(0); + } + } diff --git a/client/syncclusterconnection.h b/client/syncclusterconnection.h index b6cde979423..1a06249b3aa 100644 --- a/client/syncclusterconnection.h +++ b/client/syncclusterconnection.h @@ -25,7 +25,7 @@ namespace mongo { * this is a connection to a cluster of servers that operate as one * for super high durability */ - class SyncClusterConnection : public DBClientWithCommands { + class SyncClusterConnection : public DBClientBase { public: /** * @param commaSeperated should be 3 hosts comma seperated @@ -60,9 +60,26 @@ namespace mongo { virtual void update( const string &ns , Query query , BSONObj obj , bool upsert , bool multi ); - virtual string toString(); - private: + virtual string toString(){ + return _toString(); + } + + virtual bool call( Message &toSend, Message &response, bool assertOk ); + virtual void say( Message &toSend ); + virtual void sayPiggyBack( Message &toSend ); + + virtual string getServerAddress() const { + return _toString(); + } + + virtual bool isFailed() const { + return false; + } + private: + + string _toString() const; + bool _commandOnActive(const string &dbname, const BSONObj& cmd, BSONObj &info, int options=0); auto_ptr<DBClientCursor> _queryOnActive(const string &ns, Query query, int nToReturn, int nToSkip, diff --git a/s/config.cpp b/s/config.cpp index 4cc8ff25f01..467b5d8e597 100644 --- a/s/config.cpp +++ b/s/config.cpp @@ -381,12 +381,12 @@ namespace mongo { for ( set<string>::iterator i=hosts.begin(); i!=hosts.end(); i++ ){ string host = *i; bool ok = false; - for ( int x=0; x<10; x++ ){ + for ( int x=10; x>0; x-- ){ if ( ! hostbyname( host.c_str() ).empty() ){ ok = true; break; } - log() << "can't resolve DNS for [" << host << "] sleeping and trying " << (10-x) << " more times" << endl; + log() << "can't resolve DNS for [" << host << "] sleeping and trying " << x << " more times" << endl; sleepsecs( 10 ); } if ( ! ok ) diff --git a/scripting/sm_db.cpp b/scripting/sm_db.cpp index 1d0fe119511..c74baf96ba1 100644 --- a/scripting/sm_db.cpp +++ b/scripting/sm_db.cpp @@ -144,11 +144,13 @@ namespace mongo { string host = "127.0.0.1"; if ( argc > 0 ) host = c.toString( argv[0] ); + + int numCommas = DBClientBase::countCommas( host ); shared_ptr< DBClientWithCommands > conn; string errmsg; - if ( host.find( "," ) == string::npos ){ + if ( numCommas == 0 ){ DBClientConnection * c = new DBClientConnection( true ); conn.reset( c ); if ( ! c->connect( host , errmsg ) ){ @@ -157,30 +159,21 @@ namespace mongo { } ScriptEngine::runConnectCallback( *c ); } - else { // paired - int numCommas = 0; - for ( uint i=0; i<host.size(); i++ ) - if ( host[i] == ',' ) - numCommas++; - - assert( numCommas > 0 ); - - if ( numCommas == 1 ){ - DBClientPaired * c = new DBClientPaired(); - conn.reset( c ); - if ( ! c->connect( host ) ){ - JS_ReportError( cx , "couldn't connect to pair" ); + else if ( numCommas == 1 ){ // paired + DBClientPaired * c = new DBClientPaired(); + conn.reset( c ); + if ( ! c->connect( host ) ){ + JS_ReportError( cx , "couldn't connect to pair" ); return JS_FALSE; - } - } - else if ( numCommas == 2 ){ - conn.reset( new SyncClusterConnection( host ) ); - } - else { - JS_ReportError( cx , "1 (paired) or 2(quorum) commas are allowed" ); - return JS_FALSE; } } + else if ( numCommas == 2 ){ + conn.reset( new SyncClusterConnection( host ) ); + } + else { + JS_ReportError( cx , "1 (paired) or 2(quorum) commas are allowed" ); + return JS_FALSE; + } assert( JS_SetPrivate( cx , obj , (void*)( new shared_ptr< DBClientWithCommands >( conn ) ) ) ); |