summaryrefslogtreecommitdiff
path: root/src/mongo/scripting
diff options
context:
space:
mode:
authorSiyuan Zhou <siyuan.zhou@mongodb.com>2019-07-17 14:21:45 -0400
committerSiyuan Zhou <siyuan.zhou@mongodb.com>2019-07-30 17:52:42 -0400
commit7285a28d08db1d23947b8f128dbc898bb4e8348c (patch)
treec965eeb0e7db13c1d49f1d3aba1cf26d93e1a1c0 /src/mongo/scripting
parent7b2efc662712bc6034da89f68b77d0140fbf82cf (diff)
downloadmongo-7285a28d08db1d23947b8f128dbc898bb4e8348c.tar.gz
SERVER-41874 Add shell option to skip cursor finalize.
Diffstat (limited to 'src/mongo/scripting')
-rw-r--r--src/mongo/scripting/SConscript2
-rw-r--r--src/mongo/scripting/mozjs/cursor_handle.cpp3
-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.cpp2
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"