diff options
author | Jason Carey <jcarey@argv.me> | 2017-11-09 15:05:36 -0500 |
---|---|---|
committer | Jason Carey <jcarey@argv.me> | 2017-11-13 11:58:16 -0500 |
commit | 41c49040533745389fa0c75e7a4abd2fe430acc7 (patch) | |
tree | 1f38bdd6c878772c78ce27d3a322443c958c77b9 /src/mongo/scripting | |
parent | 7da644122dc3dfa39032a0b200af98fd138b75e5 (diff) | |
download | mongo-41c49040533745389fa0c75e7a4abd2fe430acc7.tar.gz |
SERVER-31641 stop gossiping between shell clients
Mongo client objects in the shell should not gossip cluster time.
Diffstat (limited to 'src/mongo/scripting')
-rw-r--r-- | src/mongo/scripting/mozjs/mongo.cpp | 70 | ||||
-rw-r--r-- | src/mongo/scripting/mozjs/mongo.h | 9 |
2 files changed, 1 insertions, 78 deletions
diff --git a/src/mongo/scripting/mozjs/mongo.cpp b/src/mongo/scripting/mozjs/mongo.cpp index c740e3acadc..995bcf5515b 100644 --- a/src/mongo/scripting/mozjs/mongo.cpp +++ b/src/mongo/scripting/mozjs/mongo.cpp @@ -87,11 +87,6 @@ const JSFunctionSpec MongoBase::methods[] = { MONGO_ATTACH_JS_CONSTRAINED_METHOD_NO_PROTO( isReplicaSetMember, MongoLocalInfo, MongoExternalInfo), MONGO_ATTACH_JS_CONSTRAINED_METHOD_NO_PROTO(isMongos, MongoLocalInfo, MongoExternalInfo), - MONGO_ATTACH_JS_CONSTRAINED_METHOD_NO_PROTO(getClusterTime, MongoLocalInfo, MongoExternalInfo), - MONGO_ATTACH_JS_CONSTRAINED_METHOD_NO_PROTO( - advanceClusterTime, MongoLocalInfo, MongoExternalInfo), - MONGO_ATTACH_JS_CONSTRAINED_METHOD_NO_PROTO( - resetClusterTime_forTesting, MongoLocalInfo, MongoExternalInfo), MONGO_ATTACH_JS_CONSTRAINED_METHOD_NO_PROTO(_startSession, MongoLocalInfo, MongoExternalInfo), JS_FS_END, }; @@ -107,15 +102,6 @@ const JSFunctionSpec MongoExternalInfo::freeFunctions[4] = { namespace { -/** - * Mutex and storage for global cluster time via set/getClusterTime. - * - * We need this to be global so that we can gossip times seen on one connection across to other - * connections within the same cluster. - */ -stdx::mutex logicalTimeMutex; -BSONObj latestlogicalTime; - const std::shared_ptr<DBClientBase>& getConnectionRef(JS::CallArgs& args) { auto ret = static_cast<std::shared_ptr<DBClientBase>*>(JS_GetPrivate(args.thisv().toObjectOrNull())); @@ -192,28 +178,6 @@ void setHiddenMongo(JSContext* cx, } } // namespace -BSONObj MongoBase::getClusterTime() { - stdx::lock_guard<stdx::mutex> lk(logicalTimeMutex); - return latestlogicalTime; -} - -void MongoBase::resetClusterTime_forTesting() { - stdx::lock_guard<stdx::mutex> lk(logicalTimeMutex); - latestlogicalTime = BSONObj(); -} - -void MongoBase::advanceClusterTime(const BSONObj& newTime) { - if (newTime["clusterTime"].eoo()) - uasserted(ErrorCodes::BadValue, "missing clusterTime field in advanceClusterTime argument"); - - stdx::lock_guard<stdx::mutex> lk(logicalTimeMutex); - if (latestlogicalTime.isEmpty() || - SimpleBSONElementComparator::kInstance.evaluate(latestlogicalTime["clusterTime"] < - newTime["clusterTime"])) { - latestlogicalTime = newTime.getOwned(); - } -} - void MongoBase::finalize(JSFreeOp* fop, JSObject* obj) { auto conn = static_cast<std::shared_ptr<DBClientBase>*>(JS_GetPrivate(obj)); @@ -788,40 +752,6 @@ void MongoBase::Functions::isMongos::call(JSContext* cx, JS::CallArgs args) { args.rval().setBoolean(conn->isMongos()); } -void MongoBase::Functions::getClusterTime::call(JSContext* cx, JS::CallArgs args) { - auto ct = MongoBase::getClusterTime(); - - if (!ct.isEmpty()) { - ValueReader(cx, args.rval()).fromBSON(MongoBase::getClusterTime(), nullptr, true); - return; - } - - args.rval().setUndefined(); -} - -void MongoBase::Functions::advanceClusterTime::call(JSContext* cx, JS::CallArgs args) { - if (args.length() != 1) - uasserted(ErrorCodes::BadValue, "advanceClusterTime takes 1 argument"); - - if (!args.get(0).isObject()) - uasserted(ErrorCodes::BadValue, "the parameter to advanceClusterTime must be an object"); - - auto newTime = ObjectWrapper(cx, args.get(0)).toBSON(); - - MongoBase::advanceClusterTime(newTime); - - args.rval().setUndefined(); -} - -void MongoBase::Functions::resetClusterTime_forTesting::call(JSContext* cx, JS::CallArgs args) { - if (args.length() != 0) { - uasserted(ErrorCodes::BadValue, "resetClusterTime_forTesting takes no arguments"); - } - - MongoBase::resetClusterTime_forTesting(); - args.rval().setUndefined(); -} - void MongoBase::Functions::_startSession::call(JSContext* cx, JS::CallArgs args) { auto client = static_cast<std::shared_ptr<DBClientBase>*>(JS_GetPrivate(args.thisv().toObjectOrNull())); diff --git a/src/mongo/scripting/mozjs/mongo.h b/src/mongo/scripting/mozjs/mongo.h index 4d7a0200bd7..8c67677ddea 100644 --- a/src/mongo/scripting/mozjs/mongo.h +++ b/src/mongo/scripting/mozjs/mongo.h @@ -64,20 +64,13 @@ struct MongoBase : public BaseInfo { MONGO_DECLARE_JS_FUNCTION(getMaxWireVersion); MONGO_DECLARE_JS_FUNCTION(isReplicaSetMember); MONGO_DECLARE_JS_FUNCTION(isMongos); - MONGO_DECLARE_JS_FUNCTION(getClusterTime); - MONGO_DECLARE_JS_FUNCTION(advanceClusterTime); - MONGO_DECLARE_JS_FUNCTION(resetClusterTime_forTesting); MONGO_DECLARE_JS_FUNCTION(_startSession); }; - static const JSFunctionSpec methods[25]; + static const JSFunctionSpec methods[22]; static const char* const className; static const unsigned classFlags = JSCLASS_HAS_PRIVATE; - - static BSONObj getClusterTime(); - static void advanceClusterTime(const BSONObj& newTime); - static void resetClusterTime_forTesting(); }; /** |