diff options
author | Siyuan Zhou <siyuan.zhou@mongodb.com> | 2019-07-17 14:21:45 -0400 |
---|---|---|
committer | Siyuan Zhou <siyuan.zhou@mongodb.com> | 2019-07-30 17:52:42 -0400 |
commit | 7285a28d08db1d23947b8f128dbc898bb4e8348c (patch) | |
tree | c965eeb0e7db13c1d49f1d3aba1cf26d93e1a1c0 /src/mongo/scripting | |
parent | 7b2efc662712bc6034da89f68b77d0140fbf82cf (diff) | |
download | mongo-7285a28d08db1d23947b8f128dbc898bb4e8348c.tar.gz |
SERVER-41874 Add shell option to skip cursor finalize.
Diffstat (limited to 'src/mongo/scripting')
-rw-r--r-- | src/mongo/scripting/SConscript | 2 | ||||
-rw-r--r-- | src/mongo/scripting/mozjs/cursor_handle.cpp | 3 | ||||
-rw-r--r-- | src/mongo/scripting/mozjs/scripting_util.idl (renamed from src/mongo/scripting/mozjs/end_sessions.idl) | 8 | ||||
-rw-r--r-- | src/mongo/scripting/mozjs/session.cpp | 2 |
4 files changed, 12 insertions, 3 deletions
diff --git a/src/mongo/scripting/SConscript b/src/mongo/scripting/SConscript index bef5ce97394..9c938d7e1ab 100644 --- a/src/mongo/scripting/SConscript +++ b/src/mongo/scripting/SConscript @@ -111,7 +111,7 @@ if usemozjs: 'mozjs/valuereader.cpp', 'mozjs/valuewriter.cpp', env.Idlc('mozjs/engine.idl')[0], - env.Idlc('mozjs/end_sessions.idl')[0], + env.Idlc('mozjs/scripting_util.idl')[0], ], LIBDEPS=[ 'bson_template_evaluator', diff --git a/src/mongo/scripting/mozjs/cursor_handle.cpp b/src/mongo/scripting/mozjs/cursor_handle.cpp index ee781700357..101334a737b 100644 --- a/src/mongo/scripting/mozjs/cursor_handle.cpp +++ b/src/mongo/scripting/mozjs/cursor_handle.cpp @@ -34,6 +34,7 @@ #include "mongo/client/dbclient_base.h" #include "mongo/scripting/mozjs/cursor_handle.h" #include "mongo/scripting/mozjs/implscope.h" +#include "mongo/scripting/mozjs/scripting_util_gen.h" #include "mongo/scripting/mozjs/wrapconstrainedmethod.h" #include "mongo/util/log.h" @@ -69,7 +70,7 @@ void CursorHandleInfo::finalize(js::FreeOp* fop, JSObject* obj) { auto cursorTracker = static_cast<CursorHandleInfo::CursorTracker*>(JS_GetPrivate(obj)); if (cursorTracker) { const long long cursorId = cursorTracker->cursorId; - if (cursorId) { + if (!skipShellCursorFinalize && cursorId) { try { cursorTracker->client->killCursor(cursorTracker->ns, cursorId); } catch (...) { diff --git a/src/mongo/scripting/mozjs/end_sessions.idl b/src/mongo/scripting/mozjs/scripting_util.idl index 84a6a22d3c6..8e1fe6bff48 100644 --- a/src/mongo/scripting/mozjs/end_sessions.idl +++ b/src/mongo/scripting/mozjs/scripting_util.idl @@ -43,3 +43,11 @@ structs: strict: true fields: endSessions: array<object> + +server_parameters: + skipShellCursorFinalize: + description: 'Skip finalizing cursors during garbage collection in shell' + set_at: startup + cpp_vartype: bool + cpp_varname: 'skipShellCursorFinalize' + default: false diff --git a/src/mongo/scripting/mozjs/session.cpp b/src/mongo/scripting/mozjs/session.cpp index 7e785888a52..f1353742344 100644 --- a/src/mongo/scripting/mozjs/session.cpp +++ b/src/mongo/scripting/mozjs/session.cpp @@ -34,9 +34,9 @@ #include "mongo/scripting/mozjs/session.h" #include "mongo/scripting/mozjs/bson.h" -#include "mongo/scripting/mozjs/end_sessions_gen.h" #include "mongo/scripting/mozjs/implscope.h" #include "mongo/scripting/mozjs/mongo.h" +#include "mongo/scripting/mozjs/scripting_util_gen.h" #include "mongo/scripting/mozjs/valuereader.h" #include "mongo/scripting/mozjs/wrapconstrainedmethod.h" #include "mongo/util/log.h" |