diff options
author | Eliot Horowitz <eliot@10gen.com> | 2010-07-12 17:50:26 -0400 |
---|---|---|
committer | Eliot Horowitz <eliot@10gen.com> | 2010-07-12 17:50:26 -0400 |
commit | 5d563d97fee856e23318b76abcb8f08089cd11c0 (patch) | |
tree | 0e065b6f41f4161483e857c6cb8c68387b6b2625 /client | |
parent | 3895385c868f0594b689d475b45053e4ba5da9c7 (diff) | |
download | mongo-5d563d97fee856e23318b76abcb8f08089cd11c0.tar.gz |
new file
Diffstat (limited to 'client')
-rw-r--r-- | client/distlock_test.cpp | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/client/distlock_test.cpp b/client/distlock_test.cpp new file mode 100644 index 00000000000..250d76c2cfc --- /dev/null +++ b/client/distlock_test.cpp @@ -0,0 +1,80 @@ +// distlock.h + +/* Copyright 2009 10gen Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "../pch.h" +#include "dbclient.h" +#include "distlock.h" +#include "../db/commands.h" + +namespace mongo { + + class TestDistLockWithSync : public Command { + public: + TestDistLockWithSync() : Command( "_testDistLockWithSyncCluster" ){} + virtual void help( stringstream& help ) const { + help << "should not be calling this directly" << endl; + } + + virtual bool slaveOk() const { return false; } + virtual bool adminOnly() const { return true; } + virtual LockType locktype() const { return NONE; } + + static void runThread(){ + for ( int i=0; i<1000; i++ ){ + if ( current->lock_try( "test" ) ){ + gotit++; + for ( int j=0; j<2000; j++ ){ + count++; + } + current->unlock(); + } + } + } + + bool run(const string& , BSONObj& cmdObj, string& errmsg, BSONObjBuilder& result, bool){ + DistributedLock lk( ConnectionString( cmdObj["host"].String() , ConnectionString::SYNC ), "testdistlockwithsync" ); + current = &lk; + count = 0; + gotit = 0; + + vector<shared_ptr<boost::thread> > l; + for ( int i=0; i<4; i++ ){ + l.push_back( shared_ptr<boost::thread>( new boost::thread( runThread ) ) ); + } + + for ( unsigned i=0; i<l.size(); i++ ) + l[i]->join(); + + result.append( "count" , count ); + result.append( "gotit" , gotit ); + current = 0; + return count == gotit * 2000; + } + + static DistributedLock * current; + static int count; + static int gotit; + + } testDistLockWithSyncCmd; + + + DistributedLock * TestDistLockWithSync::current; + int TestDistLockWithSync::count; + int TestDistLockWithSync::gotit; + + +} |