summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEliot Horowitz <eliot@10gen.com>2010-03-22 09:51:06 -0400
committerEliot Horowitz <eliot@10gen.com>2010-03-22 09:51:06 -0400
commit92dca86601a5f54c76e748e04ecb3a96d35ca0b4 (patch)
treeb8b92f138bdd1247078c88cc2c64a7b9563bda6f
parentf154df074d4bbf9aece18a20fef8eef4f49a5a62 (diff)
downloadmongo-92dca86601a5f54c76e748e04ecb3a96d35ca0b4.tar.gz
some abstractions in prep for SHARDING-39
-rw-r--r--client/dbclient.h7
-rw-r--r--client/syncclusterconnection.cpp15
-rw-r--r--client/syncclusterconnection.h23
-rw-r--r--s/config.cpp4
-rw-r--r--scripting/sm_db.cpp37
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 ) ) ) );