|
I added some log statements to better understand this is a snippet of what I'm seeing:
[j0] {"t":{"$date":"2023-06-08T22:23:27.233+00:00"},"s":"I", "c":"-", "id":0, "ctx":"conn9","msg":"expression parse obj:{ $_testApiVersion: { unstable: true } }"}
|
[j0] {"t":{"$date":"2023-06-08T22:23:27.233+00:00"},"s":"I", "c":"-", "id":0, "ctx":"conn9","msg":"expr passed in is { unstable: true }"}
|
[j0] {"t":{"$date":"2023-06-08T22:23:27.233+00:00"},"s":"I", "c":"-", "id":0, "ctx":"conn9","msg":"initial unstableField:false"}
|
[j0] {"t":{"$date":"2023-06-08T22:23:27.233+00:00"},"s":"I", "c":"-", "id":0, "ctx":"conn9","msg":"field is unstable field and set to true"}
|
[j0] {"t":{"$date":"2023-06-08T22:23:27.233+00:00"},"s":"I", "c":"-", "id":0, "ctx":"conn9","msg":"expressiontestapiversion apiStrict: true unstablefield:true expCtx.ns:test.api_version_test_expression_validated"}
|
[j0] {"t":{"$date":"2023-06-08T22:23:27.233+00:00"},"s":"I", "c":"-", "id":0, "ctx":"conn10","msg":"document source parse for view "}
|
[j0] {"t":{"$date":"2023-06-08T22:23:27.234+00:00"},"s":"I", "c":"-", "id":0, "ctx":"conn10","msg":"expression parse obj:{ $setField: { input: \"$$ROOT\", field: \"x\", value: \"foo\" } }"}
|
[j0] {"t":{"$date":"2023-06-08T22:23:27.241+00:00"},"s":"I", "c":"-", "id":0, "ctx":"conn9","msg":"expression parse obj:{ $_testApiVersion: { unstable: true } }"}
|
[j0] {"t":{"$date":"2023-06-08T22:23:27.242+00:00"},"s":"I", "c":"-", "id":0, "ctx":"conn9","msg":"expr passed in is { unstable: true }"}
|
[j0] {"t":{"$date":"2023-06-08T22:23:27.242+00:00"},"s":"I", "c":"-", "id":0, "ctx":"conn9","msg":"initial unstableField:false"}
|
[j0] {"t":{"$date":"2023-06-08T22:23:27.242+00:00"},"s":"I", "c":"-", "id":0, "ctx":"conn9","msg":"field is unstable field and set to true"}
|
[js_test:parallel_views] sh19425|
|
[js_test:parallel_views] sh19425|
|
[j0] {"t":{"$date":"2023-06-08T22:23:27.242+00:00"},"s":"I", "c":"STORAGE", "id":20320, "ctx":"conn9","msg":"createCollection","attr":{"namespace":"test.api_version_test_expression_validated","uuidDisposition":"generated","uuid":{"uuid":{"$uuid":"83cf992b-a4f2-4a31-8306-8a62e26d093a"}},"options":{"validator":{"$expr":{"$_testApiVersion":{"unstable":true}}}}}}
|
[js_test:parallel_views] sh19425| [jsTest] ----
|
[js_test:parallel_views] sh19425| [jsTest] assert view success with api strict [
|
[js_test:parallel_views] sh19425| [jsTest] {
|
[js_test:parallel_views] sh19425| [jsTest] "$set" : {
|
[js_test:parallel_views] sh19425| [jsTest] "x" : {
|
[js_test:parallel_views] sh19425| [jsTest] "$setField" : {
|
[js_test:parallel_views] sh19425| [jsTest] "input" : "$$ROOT",
|
[js_test:parallel_views] sh19425| [jsTest] "field" : "x",
|
[js_test:parallel_views] sh19425| [jsTest] "value" : "foo"
|
[js_test:parallel_views] sh19425| [jsTest] }
|
[js_test:parallel_views] sh19425| [jsTest] }
|
[js_test:parallel_views] sh19425| [jsTest] }
|
[js_test:parallel_views] sh19425| [jsTest] }
|
[js_test:parallel_views] sh19425| [jsTest] ] api_version_new_50_language_features_view api_version_new_50_language_features
|
[js_test:parallel_views] sh19425| [jsTest] ----
|
[js_test:parallel_views] sh19425|
|
[j0] {"t":{"$date":"2023-06-08T22:23:27.248+00:00"},"s":"I", "c":"-", "id":0, "ctx":"conn10","msg":"viewGraphNeedsRefresh view: test.api_version_new_50_language_features_view viewOn:test.api_version_new_50_language_features pipeline:({\"$set\":{\"x\":{\"$setField\":{\"input\":\"$$ROOT\",\"field\":\"x\",\"value\":\"foo\"}}}})"}
|
[j0] {"t":{"$date":"2023-06-08T22:23:27.248+00:00"},"s":"I", "c":"-", "id":0, "ctx":"conn10","msg":"validatePipeline made expCtx with view: test.view, viewOn: test.api_version_test_expression, pipeline: ()"}
|
[j0] {"t":{"$date":"2023-06-08T22:23:27.249+00:00"},"s":"I", "c":"-", "id":0, "ctx":"conn10","msg":"validatePipeline made expCtx with view: test.unstableView, viewOn: test.api_version_test_expression, pipeline: ({\"$project\":{\"v\":{\"$_testApiVersion\":{\"unstable\":true}}}})"}
|
[j0] {"t":{"$date":"2023-06-08T22:23:27.249+00:00"},"s":"I", "c":"-", "id":0, "ctx":"conn10","msg":"document source parse for view test.unstableView"}
|
[j0] {"t":{"$date":"2023-06-08T22:23:27.249+00:00"},"s":"I", "c":"-", "id":0, "ctx":"conn10","msg":"documentsourceproject::createfrombson fieldNameStringData: $project kStageName:$project elem.obj:{ v: { $_testApiVersion: { unstable: true } } }"}
|
[j0] {"t":{"$date":"2023-06-08T22:23:27.249+00:00"},"s":"I", "c":"-", "id":0, "ctx":"conn10","msg":"expression parse obj:{ $_testApiVersion: { unstable: true } }"}
|
[j0] {"t":{"$date":"2023-06-08T22:23:27.249+00:00"},"s":"I", "c":"-", "id":0, "ctx":"conn10","msg":"expr passed in is { unstable: true }"}
|
[j0] {"t":{"$date":"2023-06-08T22:23:27.249+00:00"},"s":"I", "c":"-", "id":0, "ctx":"conn10","msg":"initial unstableField:false"}
|
[j0] {"t":{"$date":"2023-06-08T22:23:27.250+00:00"},"s":"I", "c":"-", "id":0, "ctx":"conn10","msg":"field is unstable field and set to true"}
|
[j0] {"t":{"$date":"2023-06-08T22:23:27.250+00:00"},"s":"I", "c":"-", "id":0, "ctx":"conn10","msg":"expressiontestapiversion apiStrict: true unstablefield:true expCtx.ns:test.api_version_test_expression"}
|
[j0] {"t":{"$date":"2023-06-08T22:23:27.252+00:00"},"s":"I", "c":"-", "id":0, "ctx":"conn9","msg":"expression parse obj:{ $_testApiVersion: { unstable: true } }"}
|
[j0] {"t":{"$date":"2023-06-08T22:23:27.252+00:00"},"s":"I", "c":"-", "id":0, "ctx":"conn9","msg":"expr passed in is { unstable: true }"}
|
[j0] {"t":{"$date":"2023-06-08T22:23:27.252+00:00"},"s":"I", "c":"-", "id":0, "ctx":"conn9","msg":"initial unstableField:false"}
|
[j0] {"t":{"$date":"2023-06-08T22:23:27.252+00:00"},"s":"I", "c":"-", "id":0, "ctx":"conn9","msg":"field is unstable field and set to true"}
|
[j0] {"t":{"$date":"2023-06-08T22:23:27.263+00:00"},"s":"I", "c":"INDEX", "id":20345, "ctx":"conn9","msg":"Index build: done building","attr":{"buildUUID":null,"collectionUUID":{"uuid":{"$uuid":"83cf992b-a4f2-4a31-8306-8a62e26d093a"}},"namespace":"test.api_version_test_expression_validated","index":"_id_","ident":"index-24-624554566849028107","collectionIdent":"collection-23-624554566849028107","commitTimestamp":null}}
|
[js_test:parallel_views] sh19425| 2023-06-08T22:23:27.265Z assert: command failed: {
|
[js_test:parallel_views] sh19425| "ok" : 0,
|
[js_test:parallel_views] sh19425| "errmsg" : "Invalid $project :: caused by :: Provided apiStrict is true with an unstable parameter.",
|
[js_test:parallel_views] sh19425| "code" : 323,
|
[js_test:parallel_views] sh19425| "codeName" : "APIStrictError"
|
[js_test:parallel_views] sh19425| } with original command request: {
|
[js_test:parallel_views] sh19425| "create" : "api_version_new_50_language_features_view",
|
[js_test:parallel_views] sh19425| "viewOn" : "api_version_new_50_language_features",
|
[js_test:parallel_views] sh19425| "pipeline" : [
|
[js_test:parallel_views] sh19425| {
|
[js_test:parallel_views] sh19425| "$set" : {
|
[js_test:parallel_views] sh19425| "x" : {
|
[js_test:parallel_views] sh19425| "$setField" : {
|
[js_test:parallel_views] sh19425| "input" : "$$ROOT",
|
[js_test:parallel_views] sh19425| "field" : "x",
|
[js_test:parallel_views] sh19425| "value" : "foo"
|
[js_test:parallel_views] sh19425| }
|
[js_test:parallel_views] sh19425| }
|
[js_test:parallel_views] sh19425| }
|
[js_test:parallel_views] sh19425| }
|
[js_test:parallel_views] sh19425| ],
|
[js_test:parallel_views] sh19425| "apiStrict" : true,
|
[js_test:parallel_views] sh19425| "apiVersion" : "1",
|
[js_test:parallel_views] sh19425| "lsid" : {
|
[js_test:parallel_views] sh19425| "id" : UUID("d3d9cc19-e3fa-4266-a48f-ee08d26ebd0d")
|
[js_test:parallel_views] sh19425| }
|
[js_test:parallel_views] sh19425| } on connection: connection to localhost:20000
|
[js_test:parallel_views] sh19425| _getErrorWithCode@src/mongo/shell/utils.js:24:13
|
[js_test:parallel_views] sh19425| doassert@src/mongo/shell/assert.js:18:14
|
[js_test:parallel_views] sh19425| _assertCommandWorked@src/mongo/shell/assert.js:766:25
|
[js_test:parallel_views] sh19425| assert.commandWorked@src/mongo/shell/assert.js:860:16
|
[js_test:parallel_views] sh19425| assertViewSucceedsWithAPIStrict@jstests/libs/api_version_helpers.js:71:16
|
[js_test:parallel_views] sh19425| @jstests/core/api/api_version_new_50_language_features.js:36:23
|
[js_test:parallel_views] sh19425| @jstests/core/api/api_version_new_50_language_features.js:74:3
|
From what I can see, conn9 is running api_version_test_expression and conn10 is running api_version_new_50_language_features. In the earliest parsing on conn9, I already see apiStrict:true.
[j0] {"t":{"$date":"2023-06-08T22:23:26.006+00:00"},"s":"I", "c":"-", "id":0, "ctx":"conn9","msg":"expressiontestapiversion apiStrict: true unstablefield:true expCtx.ns:test.api_version_test_expression"}
|
Then I'm starting to see a few instances of conn10 validating what looks like views from api_version_test_expression. eg.
[j0] {"t":{"$date":"2023-06-08T22:23:27.036+00:00"},"s":"I", "c":"-", "id":0, "ctx":"conn10","msg":"validatePipeline made expCtx with view: test.view, viewOn: test.api_version_test_expression, pipeline: ()"}
|
The above log line where the validatePipeline with views from api_version_test_expression only occur when _viewGraphNeedsRefresh however this happens a few times without failing. The reproducer fails when the expression being parsed is `{ $_testApiVersion:
{ unstable: true }
` on conn10. Somehow we are parsing an expression from api_version_test_expression on conn10 and that's when our tests fail.
I wonder if this is a test issue because both tests are using the test namespace and so their views are existing in the same db.
|
|
I got to run this reproducer with gdb:
{
|
db.a.drop();
|
var parallel = startParallelShell(() => {
|
try {
|
while (true) {
|
sleep(Math.random() * 1000);
|
load("jstests/core/api/api_version_new_50_language_features.js");
|
}
|
} finally {
|
db.a.insertOne({done: true});
|
}
|
});
|
while (db.a.count() == 0) {
|
load("jstests/core/api/api_version_test_expression.js");
|
}
|
db.a.drop();
|
parallel();
|
}
|
|
Since this is a parallel test, I see two threads executing.
The jstest error we get from the reproducer is:
[js_test:parallel_views] sh21846| 2023-06-07T21:48:05.942Z assert: command failed: {
|
[js_test:parallel_views] sh21846| "ok" : 0,
|
[js_test:parallel_views] sh21846| "errmsg" : "Invalid $project :: caused by :: Provided apiStrict is true with an unstable parameter.",
|
[js_test:parallel_views] sh21846| "code" : 323,
|
[js_test:parallel_views] sh21846| "codeName" : "APIStrictError"
|
[js_test:parallel_views] sh21846| } with original command request: {
|
[js_test:parallel_views] sh21846| "create" : "api_version_new_50_language_features_view",
|
[js_test:parallel_views] sh21846| "viewOn" : "api_version_new_50_language_features",
|
[js_test:parallel_views] sh21846| "pipeline" : [
|
[js_test:parallel_views] sh21846| {
|
[js_test:parallel_views] sh21846| "$set" : {
|
[js_test:parallel_views] sh21846| "x" : {
|
[js_test:parallel_views] sh21846| "$getField" : {
|
[js_test:parallel_views] sh21846| "input" : "$$ROOT",
|
[js_test:parallel_views] sh21846| "field" : "x"
|
[js_test:parallel_views] sh21846| }
|
[js_test:parallel_views] sh21846| }
|
[js_test:parallel_views] sh21846| }
|
[js_test:parallel_views] sh21846| }
|
[js_test:parallel_views] sh21846| ],
|
[js_test:parallel_views] sh21846| "apiStrict" : true,
|
[js_test:parallel_views] sh21846| "apiVersion" : "1",
|
[js_test:parallel_views] sh21846| "lsid" : {
|
[js_test:parallel_views] sh21846| "id" : UUID("cdefcd8b-b41e-4c6c-80db-01378614779a")
|
[js_test:parallel_views] sh21846| }
|
[js_test:parallel_views] sh21846| } on connection: connection to localhost:20000
|
[js_test:parallel_views] sh21846| _getErrorWithCode@src/mongo/shell/utils.js:24:13
|
[js_test:parallel_views] sh21846| doassert@src/mongo/shell/assert.js:18:14
|
[js_test:parallel_views] sh21846| _assertCommandWorked@src/mongo/shell/assert.js:766:25
|
[js_test:parallel_views] sh21846| assert.commandWorked@src/mongo/shell/assert.js:860:16
|
[js_test:parallel_views] sh21846| assertViewSucceedsWithAPIStrict@jstests/libs/api_version_helpers.js:71:16
|
[js_test:parallel_views] sh21846| @jstests/core/api/api_version_new_50_language_features.js:35:23
|
[js_test:parallel_views] sh21846| @jstests/core/api/api_version_new_50_language_features.js:73:3
|
and this is the relevant stacktrace that I'm seeing
#0 mongo::ExpressionTestApiVersion::parse(mongo::ExpressionContext*, mongo::BSONElement, mongo::VariablesParseState const&)::$_6::operator()() const (this=0x7f2c2cf6fcc8) at src/mongo/db/pipeline/expression_test_api_version.cpp:78
|
#1 0x00007f2c62b13c5a in mongo::ExpressionTestApiVersion::parse (expCtx=0x7f2c3dbd3c20, expr=..., vps=...) at src/mongo/db/pipeline/expression_test_api_version.cpp:78
|
#2 0x00007f2c658e1ed8 in std::__invoke_impl<boost::intrusive_ptr<mongo::Expression>, boost::intrusive_ptr<mongo::Expression> (*&)(mongo::ExpressionContext*, mongo::BSONElement, mongo::VariablesParseState const&), mongo::ExpressionContext*, mongo::BSONElement, mongo::VariablesParseState const&> (__f=@0x7f2c459e8638: 0x7f2c62b13710 <mongo::ExpressionTestApiVersion::parse(mongo::ExpressionContext*, mongo::BSONElement, mongo::VariablesParseState const&)>, __args=..., __args=..., __args=...) at /opt/mongodbtoolchain/revisions/11316f1e7b36f08dcdd2ad0640af18f9287876f4/stow/gcc-v4.zdM/lib/gcc/x86_64-mongodb-linux/11.3.0/../../../../include/c++/11.3.0/bits/invoke.h:61
|
#3 0x00007f2c658e1dff in std::__invoke_r<boost::intrusive_ptr<mongo::Expression>, boost::intrusive_ptr<mongo::Expression> (*&)(mongo::ExpressionContext*, mongo::BSONElement, mongo::VariablesParseState const&), mongo::ExpressionContext*, mongo::BSONElement, mongo::VariablesParseState const&> (__fn=@0x7f2c459e8638: 0x7f2c62b13710 <mongo::ExpressionTestApiVersion::parse(mongo::ExpressionContext*, mongo::BSONElement, mongo::VariablesParseState const&)>, __args=..., __args=..., __args=...) at /opt/mongodbtoolchain/revisions/11316f1e7b36f08dcdd2ad0640af18f9287876f4/stow/gcc-v4.zdM/lib/gcc/x86_64-mongodb-linux/11.3.0/../../../../include/c++/11.3.0/bits/invoke.h:114
|
#4 0x00007f2c658e1caf in std::_Function_handler<boost::intrusive_ptr<mongo::Expression> (mongo::ExpressionContext*, mongo::BSONElement, mongo::VariablesParseState const&), boost::intrusive_ptr<mongo::Expression> (*)(mongo::ExpressionContext*, mongo::BSONElement, mongo::VariablesParseState const&)>::_M_invoke(std::_Any_data const&, mongo::ExpressionContext*&&, mongo::BSONElement&&, mongo::VariablesParseState const&) (__functor=..., __args=..., __args=..., __args=...) at /opt/mongodbtoolchain/revisions/11316f1e7b36f08dcdd2ad0640af18f9287876f4/stow/gcc-v4.zdM/lib/gcc/x86_64-mongodb-linux/11.3.0/../../../../include/c++/11.3.0/bits/std_function.h:290
|
#5 0x00007f2c62a5ac2f in std::function<boost::intrusive_ptr<mongo::Expression> (mongo::ExpressionContext*, mongo::BSONElement, mongo::VariablesParseState const&)>::operator()(mongo::ExpressionContext*, mongo::BSONElement, mongo::VariablesParseState const&) const (this=0x7f2c459e8638, __args=..., __args=..., __args=...) at /opt/mongodbtoolchain/revisions/11316f1e7b36f08dcdd2ad0640af18f9287876f4/stow/gcc-v4.zdM/lib/gcc/x86_64-mongodb-linux/11.3.0/../../../../include/c++/11.3.0/bits/std_function.h:590
|
#6 0x00007f2c629aeb40 in mongo::Expression::parseExpression (expCtx=0x7f2c3dbd3c20, obj=unowned BSONObj 39 bytes @ 0x7f2c45a77fbd = {...}, vps=...) at src/mongo/db/pipeline/expression.cpp:232
|
#7 0x00007f2c676f1765 in mongo::projection_ast::(anonymous namespace)::attemptToParseGenericExpression (parseCtx=0x7f2c2cf70bf8, path=..., subObj=unowned BSONObj 39 bytes @ 0x7f2c45a77fbd = {...}, parent=0x7f2c2cf70bb0) at src/mongo/db/query/projection_parser.cpp:288
|
#8 0x00007f2c676f0dd9 in mongo::projection_ast::(anonymous namespace)::parseSubObjectAsExpression (parseCtx=0x7f2c2cf70bf8, path=..., subObj=unowned BSONObj 39 bytes @ 0x7f2c45a77fbd = {...}, parent=0x7f2c2cf70bb0) at src/mongo/db/query/projection_parser.cpp:370
|
#9 0x00007f2c676eef40 in mongo::projection_ast::(anonymous namespace)::parseSubObject (ctx=0x7f2c2cf70bf8, objFieldName="v", fullPathToParent=, obj=unowned BSONObj 39 bytes @ 0x7f2c45a77fbd = {...}, parent=0x7f2c2cf70bb0) at src/mongo/db/query/projection_parser.cpp:510
|
#10 0x00007f2c676ee0f6 in mongo::projection_ast::(anonymous namespace)::parseElement (ctx=0x7f2c2cf70bf8, elem=..., fullPathToParent=, parent=0x7f2c2cf70bb0) at src/mongo/db/query/projection_parser.cpp:573
|
#11 0x00007f2c676ed858 in mongo::projection_ast::parseAndAnalyze (expCtx=0x7f2c3dbd3c20 = {...}, obj=unowned BSONObj 47 bytes @ 0x7f2c45a77fb6 = {...}, query=0x0, queryObj=unowned empty BSONObj @ 0x7f2c83cf6977 <mongo::BSONObj::kEmptyObjectPrototype>, policies=..., shouldOptimize=false) at src/mongo/db/query/projection_parser.cpp:607
|
#12 0x00007f2c676ee628 in mongo::projection_ast::parseAndAnalyze (expCtx=uninitialized, obj=unowned BSONObj 47 bytes @ 0x7f2c45a77fb6 = {...}, policies=..., shouldOptimize=false) at src/mongo/db/query/projection_parser.cpp:654
|
#13 0x00007f2c66cb186d in mongo::DocumentSourceProject::create (projectSpec=unowned BSONObj 47 bytes @ 0x7f2c45a77fb6 = {...}, expCtx=0x7f2c3dbd3c20 = {...}, specifiedName="$project") at src/mongo/db/pipeline/document_source_project.h:64
|
#14 0x00007f2c66e419a2 in mongo::DocumentSourceProject::createFromBson (elem=..., expCtx=0x7f2c3dbd3c20 = {...}) at src/mongo/db/pipeline/document_source_project.cpp:130
|
#15 0x00007f2c7d7cdd20 in std::__invoke_impl<boost::intrusive_ptr<mongo::DocumentSource>, boost::intrusive_ptr<mongo::DocumentSource> (*&)(mongo::BSONElement, boost::intrusive_ptr<mongo::ExpressionContext> const&), mongo::BSONElement, boost::intrusive_ptr<mongo::ExpressionContext> const&> (__f=@0x7f2c45cdf2a0: 0x7f2c66e41850 <mongo::DocumentSourceProject::createFromBson(mongo::BSONElement, boost::intrusive_ptr<mongo::ExpressionContext> const&)>, __args=0x7f2c3dbd3c20 = {...}, __args=0x7f2c3dbd3c20 = {...}) at /opt/mongodbtoolchain/revisions/11316f1e7b36f08dcdd2ad0640af18f9287876f4/stow/gcc-v4.zdM/lib/gcc/x86_64-mongodb-linux/11.3.0/../../../../include/c++/11.3.0/bits/invoke.h:61
|
#16 0x00007f2c7d7cdc4a in std::__invoke_r<boost::intrusive_ptr<mongo::DocumentSource>, boost::intrusive_ptr<mongo::DocumentSource> (*&)(mongo::BSONElement, boost::intrusive_ptr<mongo::ExpressionContext> const&), mongo::BSONElement, boost::intrusive_ptr<mongo::ExpressionContext> const&> (__fn=@0x7f2c45cdf2a0: 0x7f2c66e41850 <mongo::DocumentSourceProject::createFromBson(mongo::BSONElement, boost::intrusive_ptr<mongo::ExpressionContext> const&)>, __args=0x7f2c3dbd3c20 = {...}, __args=0x7f2c3dbd3c20 = {...}) at /opt/mongodbtoolchain/revisions/11316f1e7b36f08dcdd2ad0640af18f9287876f4/stow/gcc-v4.zdM/lib/gcc/x86_64-mongodb-linux/11.3.0/../../../../include/c++/11.3.0/bits/invoke.h:114
|
#17 0x00007f2c7d7cdb0a in std::_Function_handler<boost::intrusive_ptr<mongo::DocumentSource> (mongo::BSONElement, boost::intrusive_ptr<mongo::ExpressionContext> const&), boost::intrusive_ptr<mongo::DocumentSource> (*)(mongo::BSONElement, boost::intrusive_ptr<mongo::ExpressionContext> const&)>::_M_invoke(std::_Any_data const&, mongo::BSONElement&&, boost::intrusive_ptr<mongo::ExpressionContext> const&) (__functor=..., __args=0x7f2c3dbd3c20 = {...}, __args=0x7f2c3dbd3c20 = {...}) at /opt/mongodbtoolchain/revisions/11316f1e7b36f08dcdd2ad0640af18f9287876f4/stow/gcc-v4.zdM/lib/gcc/x86_64-mongodb-linux/11.3.0/../../../../include/c++/11.3.0/bits/std_function.h:290
|
#18 0x00007f2c66c23faa in std::function<boost::intrusive_ptr<mongo::DocumentSource> (mongo::BSONElement, boost::intrusive_ptr<mongo::ExpressionContext> const&)>::operator()(mongo::BSONElement, boost::intrusive_ptr<mongo::ExpressionContext> const&) const (this=0x7f2c45cdf2a0, __args=0x7f2c3dbd3c20 = {...}, __args=0x7f2c3dbd3c20 = {...}) at /opt/mongodbtoolchain/revisions/11316f1e7b36f08dcdd2ad0640af18f9287876f4/stow/gcc-v4.zdM/lib/gcc/x86_64-mongodb-linux/11.3.0/../../../../include/c++/11.3.0/bits/std_function.h:590
|
#19 0x00007f2c66bfb0e5 in mongo::DocumentSource::registerParser(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<boost::intrusive_ptr<mongo::DocumentSource> (mongo::BSONElement, boost::intrusive_ptr<mongo::ExpressionContext> const&)>, boost::optional<mongo::FeatureFlag>)::$_1::operator()[abi:cxx11](mongo::BSONElement, boost::intrusive_ptr<mongo::ExpressionContext> const&) const (this=0x7f2c45cdf2a0, stageSpec=..., expCtx=0x7f2c3dbd3c20 = {...}) at src/mongo/db/pipeline/document_source.cpp:107
|
#20 0x00007f2c66bfb020 in std::__invoke_impl<std::__cxx11::list<boost::intrusive_ptr<mongo::DocumentSource>, std::allocator<boost::intrusive_ptr<mongo::DocumentSource> > >, mongo::DocumentSource::registerParser(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<boost::intrusive_ptr<mongo::DocumentSource> (mongo::BSONElement, boost::intrusive_ptr<mongo::ExpressionContext> const&)>, boost::optional<mongo::FeatureFlag>)::$_1&, mongo::BSONElement, boost::intrusive_ptr<mongo::ExpressionContext> const&>(std::__invoke_other, mongo::DocumentSource::registerParser(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<boost::intrusive_ptr<mongo::DocumentSource> (mongo::BSONElement, boost::intrusive_ptr<mongo::ExpressionContext> const&)>, boost::optional<mongo::FeatureFlag>)::$_1&, mongo::BSONElement&&, boost::intrusive_ptr<mongo::ExpressionContext> const&) (__f=..., __args=0x7f2c3dbd3c20 = {...}, __args=0x7f2c3dbd3c20 = {...}) at /opt/mongodbtoolchain/revisions/11316f1e7b36f08dcdd2ad0640af18f9287876f4/stow/gcc-v4.zdM/lib/gcc/x86_64-mongodb-linux/11.3.0/../../../../include/c++/11.3.0/bits/invoke.h:61
|
#21 0x00007f2c66bfaf7a in std::__invoke_r<std::__cxx11::list<boost::intrusive_ptr<mongo::DocumentSource>, std::allocator<boost::intrusive_ptr<mongo::DocumentSource> > >, mongo::DocumentSource::registerParser(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<boost::intrusive_ptr<mongo::DocumentSource> (mongo::BSONElement, boost::intrusive_ptr<mongo::ExpressionContext> const&)>, boost::optional<mongo::FeatureFlag>)::$_1&, mongo::BSONElement, boost::intrusive_ptr<mongo::ExpressionContext> const&>(mongo::DocumentSource::registerParser(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<boost::intrusive_ptr<mongo::DocumentSource> (mongo::BSONElement, boost::intrusive_ptr<mongo::ExpressionContext> const&)>, boost::optional<mongo::FeatureFlag>)::$_1&, mongo::BSONElement&&, boost::intrusive_ptr<mongo::ExpressionContext> const&) (__fn=..., __args=0x7f2c3dbd3c20 = {...}, __args=0x7f2c3dbd3c20 = {...}) at /opt/mongodbtoolchain/revisions/11316f1e7b36f08dcdd2ad0640af18f9287876f4/stow/gcc-v4.zdM/lib/gcc/x86_64-mongodb-linux/11.3.0/../../../../include/c++/11.3.0/bits/invoke.h:114
|
#22 0x00007f2c66bfadda in std::_Function_handler<std::__cxx11::list<boost::intrusive_ptr<mongo::DocumentSource>, std::allocator<boost::intrusive_ptr<mongo::DocumentSource> > > (mongo::BSONElement, boost::intrusive_ptr<mongo::ExpressionContext> const&), mongo::DocumentSource::registerParser(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<boost::intrusive_ptr<mongo::DocumentSource> (mongo::BSONElement, boost::intrusive_ptr<mongo::ExpressionContext> const&)>, boost::optional<mongo::FeatureFlag>)::$_1>::_M_invoke(std::_Any_data const&, mongo::BSONElement&&, boost::intrusive_ptr<mongo::ExpressionContext> const&) (__functor=..., __args=0x7f2c3dbd3c20 = {...}, __args=0x7f2c3dbd3c20 = {...}) at /opt/mongodbtoolchain/revisions/11316f1e7b36f08dcdd2ad0640af18f9287876f4/stow/gcc-v4.zdM/lib/gcc/x86_64-mongodb-linux/11.3.0/../../../../include/c++/11.3.0/bits/std_function.h:290
|
#23 0x00007f2c66bfea7a in std::function<std::__cxx11::list<boost::intrusive_ptr<mongo::DocumentSource>, std::allocator<boost::intrusive_ptr<mongo::DocumentSource> > > (mongo::BSONElement, boost::intrusive_ptr<mongo::ExpressionContext> const&)>::operator()(mongo::BSONElement, boost::intrusive_ptr<mongo::ExpressionContext> const&) const (this=0x7f2c45c90110, __args=0x7f2c3dbd3c20 = {...}, __args=0x7f2c3dbd3c20 = {...}) at /opt/mongodbtoolchain/revisions/11316f1e7b36f08dcdd2ad0640af18f9287876f4/stow/gcc-v4.zdM/lib/gcc/x86_64-mongodb-linux/11.3.0/../../../../include/c++/11.3.0/bits/std_function.h:590
|
#24 0x00007f2c66bf556e in mongo::DocumentSource::parse[abi:cxx11](boost::intrusive_ptr<mongo::ExpressionContext> const&, mongo::BSONObj) (expCtx=0x7f2c3dbd3c20 = {...}, stageObj=owned BSONObj 62 bytes @ 0x7f2c45a77fa8 = {...}) at src/mongo/db/pipeline/document_source.cpp:143
|
#25 0x00007f2c66f12be2 in mongo::Pipeline::parseCommon<mongo::BSONObj>(std::vector<mongo::BSONObj, std::allocator<mongo::BSONObj> > const&, boost::intrusive_ptr<mongo::ExpressionContext> const&, std::function<void (mongo::Pipeline const&)>, std::function<mongo::BSONObj (mongo::BSONObj)>) (rawPipeline=std::vector of length 1, capacity 1 = {...}, expCtx=0x7f2c3dbd3c20 = {...}, validator=..., getElemFunc=...) at src/mongo/db/pipeline/pipeline.cpp:200
|
#26 0x00007f2c66f089c2 in mongo::Pipeline::parse(std::vector<mongo::BSONObj, std::allocator<mongo::BSONObj> > const&, boost::intrusive_ptr<mongo::ExpressionContext> const&, std::function<void (mongo::Pipeline const&)>) (rawPipeline=std::vector of length 1, capacity 1 = {...}, expCtx=0x7f2c3dbd3c20 = {...}, validator=...) at src/mongo/db/pipeline/pipeline.cpp:244
|
#27 0x00007f2c7c28436c in mongo::view_catalog_helpers::validatePipeline (opCtx=0x7f2c3d602920, viewDef=...) at src/mongo/db/views/view_catalog_helpers.cpp:95
|
#28 0x00007f2c7164b6bd in std::__invoke_impl<mongo::StatusWith<absl::lts_20211102::node_hash_set<mongo::NamespaceString, absl::lts_20211102::hash_internal::Hash<mongo::NamespaceString>, std::equal_to<mongo::NamespaceString>, std::allocator<mongo::NamespaceString> > >, mongo::StatusWith<absl::lts_20211102::node_hash_set<mongo::NamespaceString, absl::lts_20211102::hash_internal::Hash<mongo::NamespaceString>, std::equal_to<mongo::NamespaceString>, std::allocator<mongo::NamespaceString> > > (*&)(mongo::OperationContext*, mongo::ViewDefinition const&), mongo::OperationContext*, mongo::ViewDefinition const&> (__f=@0x7f2c2cf72cc8: 0x7f2c7c283af0 <mongo::view_catalog_helpers::validatePipeline(mongo::OperationContext*, mongo::ViewDefinition const&)>, __args=..., __args=...) at /opt/mongodbtoolchain/revisions/11316f1e7b36f08dcdd2ad0640af18f9287876f4/stow/gcc-v4.zdM/lib/gcc/x86_64-mongodb-linux/11.3.0/../../../../include/c++/11.3.0/bits/invoke.h:61
|
#29 0x00007f2c7164b5fa in std::__invoke_r<mongo::StatusWith<absl::lts_20211102::node_hash_set<mongo::NamespaceString, absl::lts_20211102::hash_internal::Hash<mongo::NamespaceString>, std::equal_to<mongo::NamespaceString>, std::allocator<mongo::NamespaceString> > >, mongo::StatusWith<absl::lts_20211102::node_hash_set<mongo::NamespaceString, absl::lts_20211102::hash_internal::Hash<mongo::NamespaceString>, std::equal_to<mongo::NamespaceString>, std::allocator<mongo::NamespaceString> > > (*&)(mongo::OperationContext*, mongo::ViewDefinition const&), mongo::OperationContext*, mongo::ViewDefinition const&> (__fn=@0x7f2c2cf72cc8: 0x7f2c7c283af0 <mongo::view_catalog_helpers::validatePipeline(mongo::OperationContext*, mongo::ViewDefinition const&)>, __args=..., __args=...) at /opt/mongodbtoolchain/revisions/11316f1e7b36f08dcdd2ad0640af18f9287876f4/stow/gcc-v4.zdM/lib/gcc/x86_64-mongodb-linux/11.3.0/../../../../include/c++/11.3.0/bits/invoke.h:114
|
#30 0x00007f2c7164b4aa in std::_Function_handler<mongo::StatusWith<absl::lts_20211102::node_hash_set<mongo::NamespaceString, absl::lts_20211102::hash_internal::Hash<mongo::NamespaceString>, std::equal_to<mongo::NamespaceString>, std::allocator<mongo::NamespaceString> > > (mongo::OperationContext*, mongo::ViewDefinition const&), mongo::StatusWith<absl::lts_20211102::node_hash_set<mongo::NamespaceString, absl::lts_20211102::hash_internal::Hash<mongo::NamespaceString>, std::equal_to<mongo::NamespaceString>, std::allocator<mongo::NamespaceString> > > (*)(mongo::OperationContext*, mongo::ViewDefinition const&)>::_M_invoke(std::_Any_data const&, mongo::OperationContext*&&, mongo::ViewDefinition const&) (__functor=..., __args=..., __args=...) at /opt/mongodbtoolchain/revisions/11316f1e7b36f08dcdd2ad0640af18f9287876f4/stow/gcc-v4.zdM/lib/gcc/x86_64-mongodb-linux/11.3.0/../../../../include/c++/11.3.0/bits/std_function.h:290
|
#31 0x00007f2c6b6bebe6 in std::function<mongo::StatusWith<absl::lts_20211102::node_hash_set<mongo::NamespaceString, absl::lts_20211102::hash_internal::Hash<mongo::NamespaceString>, std::equal_to<mongo::NamespaceString>, std::allocator<mongo::NamespaceString> > > (mongo::OperationContext*, mongo::ViewDefinition const&)>::operator()(mongo::OperationContext*, mongo::ViewDefinition const&) const (this=0x7f2c2cf72cc8, __args=..., __args=...) at /opt/mongodbtoolchain/revisions/11316f1e7b36f08dcdd2ad0640af18f9287876f4/stow/gcc-v4.zdM/lib/gcc/x86_64-mongodb-linux/11.3.0/../../../../include/c++/11.3.0/bits/std_function.h:590
|
#32 0x00007f2c6b6b9cef in mongo::ViewsForDatabase::_upsertIntoGraph(mongo::OperationContext*, mongo::ViewDefinition const&, std::function<mongo::StatusWith<absl::lts_20211102::node_hash_set<mongo::NamespaceString, absl::lts_20211102::hash_internal::Hash<mongo::NamespaceString>, std::equal_to<mongo::NamespaceString>, std::allocator<mongo::NamespaceString> > > (mongo::OperationContext*, mongo::ViewDefinition const&)> const&, bool)::$_5::operator()(mongo::ViewDefinition const&, bool) const (this=0x7f2c2cf724d0, viewDef=..., needsValidation=false) at src/mongo/db/catalog/views_for_database.cpp:230
|
#33 0x00007f2c6b6b88fe in mongo::ViewsForDatabase::_upsertIntoGraph(mongo::OperationContext*, mongo::ViewDefinition const&, std::function<mongo::StatusWith<absl::lts_20211102::node_hash_set<mongo::NamespaceString, absl::lts_20211102::hash_internal::Hash<mongo::NamespaceString>, std::equal_to<mongo::NamespaceString>, std::allocator<mongo::NamespaceString> > > (mongo::OperationContext*, mongo::ViewDefinition const&)> const&, bool) (this=0x7f2c2cf728e0, opCtx=0x7f2c3d602920, viewDef=..., validatePipeline=..., needsValidation=true) at src/mongo/db/catalog/views_for_database.cpp:265
|
#34 0x00007f2c6b6b82f3 in mongo::ViewsForDatabase::insert(mongo::OperationContext*, mongo::CollectionPtr const&, mongo::NamespaceString const&, mongo::NamespaceString const&, mongo::BSONArray const&, std::function<mongo::StatusWith<absl::lts_20211102::node_hash_set<mongo::NamespaceString, absl::lts_20211102::hash_internal::Hash<mongo::NamespaceString>, std::equal_to<mongo::NamespaceString>, std::allocator<mongo::NamespaceString> > > (mongo::OperationContext*, mongo::ViewDefinition const&)> const&, mongo::BSONObj const&, mongo::ViewsForDatabase::Durability) (this=0x7f2c2cf728e0, opCtx=0x7f2c3d602920, systemViews=..., viewName=..., viewOn=..., pipeline=..., validatePipeline=..., collator=unowned empty BSONObj @ 0x7f2c83cf6977 <mongo::BSONObj::kEmptyObjectPrototype>, durability=mongo::ViewsForDatabase::Durability::kNotYetDurable) at src/mongo/db/catalog/views_for_database.cpp:156
|
#35 0x00007f2c6b58c059 in mongo::CollectionCatalog::createView(mongo::OperationContext*, mongo::NamespaceString const&, mongo::NamespaceString const&, mongo::BSONArray const&, std::function<mongo::StatusWith<absl::lts_20211102::node_hash_set<mongo::NamespaceString, absl::lts_20211102::hash_internal::Hash<mongo::NamespaceString>, std::equal_to<mongo::NamespaceString>, std::allocator<mongo::NamespaceString> > > (mongo::OperationContext*, mongo::ViewDefinition const&)> const&, mongo::BSONObj const&, mongo::ViewsForDatabase::Durability) const (this=0x7f2c3e0f4c70, opCtx=0x7f2c3d602920, viewName=..., viewOn=..., pipeline=..., validatePipeline=..., collation=unowned empty BSONObj @ 0x7f2c83cf6977 <mongo::BSONObj::kEmptyObjectPrototype>, durability=mongo::ViewsForDatabase::Durability::kNotYetDurable) at src/mongo/db/catalog/collection_catalog.cpp:639
|
#36 0x00007f2c5fc8d8a5 in mongo::DatabaseImpl::createView (this=0x7f2c3c8e6e80, opCtx=0x7f2c3d602920, viewName=..., options=...) at src/mongo/db/catalog/database_impl.cpp:668
|
I'm going to try to figure out where apiStrict and unstableField are assigned for the view pipeline.
|