summaryrefslogtreecommitdiff
path: root/src/mongo/scripting
diff options
context:
space:
mode:
authorJason Carey <jcarey@argv.me>2017-11-09 15:05:36 -0500
committerJason Carey <jcarey@argv.me>2017-11-13 11:58:16 -0500
commit41c49040533745389fa0c75e7a4abd2fe430acc7 (patch)
tree1f38bdd6c878772c78ce27d3a322443c958c77b9 /src/mongo/scripting
parent7da644122dc3dfa39032a0b200af98fd138b75e5 (diff)
downloadmongo-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.cpp70
-rw-r--r--src/mongo/scripting/mozjs/mongo.h9
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();
};
/**