-
Type: Bug
-
Resolution: Done
-
Priority: Minor - P4
-
Affects Version/s: 2.2.0-rc1
-
Component/s: Replication
-
None
-
ALL
-
v2.4
The following code using the C# driver crashes the secondaries.
var server = MongoServer.Create("mongodb://Kilimanjaro:10001,Kilimanjaro:10002,Kilimanjaro:10003/?safe=true"); var database = server.GetDatabase("test"); var collection = database.GetCollection("test"); var document = new BsonDocument { { "_id", new BsonDocument("$csharpnull", true) } }; collection.Drop(); collection.Insert(document);
While it might be argued that the C# driver shouldn't have used a "$" in a field name (and will be changed to not do so), nonetheless the server should have protected itself and not crashed. If the document submitted by the client driver was not acceptable then it should have been rejected by the primary instead of allowing the secondaries to crash.
I've marked this as minor because it's a pretty rare edge case that probably doesn't occur very often in the wild (because it only occurs when serializing a class with a property of type BsonNull whose value is C# null, which isn't really all that useful). However, it is possible that this is just a special case of other funny documents that the primary accepts that subsequently crash the secondaries.
This is the log output from the secondary:
DBException+0x6e mongod.exe ...\src\mongo\util\net\sock.h(140) mongo::SocketException::SocketException+0xd3 mongod.exe ...\src\mongo\util\net\sock.cpp(763) mongo::Socket::recv+0x300 mongod.exe ...\src\mongo\util\net\message_port.cpp(164) mongo::MessagingPort::recv+0x8c mongod.exe ...\src\mongo\util\net\message_port.cpp(227) mongo::MessagingPort::recv+0x31 mongod.exe ...\src\mongo\client\dbclient.cpp(1137) mongo::DBClientConnection::call+0x96 mongod.exe ...\src\mongo\client\dbclientcursor.cpp(66) mongo::DBClientCursor::init+0xd1 mongod.exe ...\src\mongo\client\dbclient.cpp(780) mongo::DBClientBase::query+0xd8 mongod.exe ...\src\mongo\client\dbclientinterface.h(1084) mongo::DBClientConnection::query+0xb4 mongod.exe ...\src\mongo\client\dbclient.cpp(664) mongo::DBClientInterface::findN+0xb7 mongod.exe ...\src\mongo\client\dbclient.cpp(684) mongo::DBClientInterface::findOne+0x77 mongod.exe ...\src\mongo\client\dbclient.cpp(354) mongo::DBClientWithCommands::runCommand+0x2a6 mongod.exe ...\src\mongo\client\dbclient.cpp(733) mongo::DBClientConnection::runCommand+0x2d mongod.exe ...\src\mongo\db\repl\heartbeat.cpp(158) mongo::requestHeartbeat+0x4fc mongod.exe ...\src\mongo\db\repl\heartbeat.cpp(266) mongo::ReplSetHealthPollTask::_requestHeartbeat+0x1b9 mongod.exe ...\src\mongo\db\repl\heartbeat.cpp(213) mongo::ReplSetHealthPollTask::doWork+0x1ba mongod.exe ...\src\mongo\util\concurrency\task.cpp(58) mongo::task::Task::run+0x5c mongod.exe ...\src\mongo\util\background.cpp(64) mongo::BackgroundJob::jobBody+0x25c Wed Aug 22 23:54:06 [rsHealthPoll] DBClientCursor::init call() failed Wed Aug 22 23:54:06 [rsHealthPoll] warning: DBException thrown :: caused by :: 10276 DBClientBase::findN: transport error: Kilimanjaro:10002 ns: admin.$cmd query: { replSetHeartbeat: "myset", v: 3, pv: 1, checkEmpty: false, from: "Kilimanjaro:10003", $auth: {} } mongod.exe ...\src\mongo\util\stacktrace.cpp(158) mongo::printStackTrace+0x3e mongod.exe ...\src\mongo\util\assert_util.cpp(67) mongo::DBException::traceIfNeeded+0xa6 mongod.exe ...\src\mongo\util\assert_util.cpp(141) mongo::uasserted+0x144 mongod.exe ...\src\mongo\client\dbclient.cpp(666) mongo::DBClientInterface::findN+0x1ae mongod.exe ...\src\mongo\client\dbclient.cpp(684) mongo::DBClientInterface::findOne+0x77 mongod.exe ...\src\mongo\client\dbclient.cpp(354) mongo::DBClientWithCommands::runCommand+0x2a6 mongod.exe ...\src\mongo\client\dbclient.cpp(733) mongo::DBClientConnection::runCommand+0x2d mongod.exe ...\src\mongo\db\repl\heartbeat.cpp(158) mongo::requestHeartbeat+0x4fc mongod.exe ...\src\mongo\db\repl\heartbeat.cpp(266) mongo::ReplSetHealthPollTask::_requestHeartbeat+0x1b9 mongod.exe ...\src\mongo\db\repl\heartbeat.cpp(213) mongo::ReplSetHealthPollTask::doWork+0x1ba mongod.exe ...\src\mongo\util\concurrency\task.cpp(58) mongo::task::Task::run+0x5c mongod.exe ...\src\mongo\util\background.cpp(64) mongo::BackgroundJob::jobBody+0x25c mongod.exe ...\src\third_party\boost\boost\bind\mem_fn_template.hpp(165) boost::_mfi::mf1<void,mongo::BackgroundJob,boost::shared_ptr<mongo::BackgroundJob::JobStatus> >::operator()+0x47 mongod.exe ...\src\third_party\boost\boost\thread\detail\thread.hpp(63) boost::detail::thread_data<boost::_bi::bind_t<void,boost::_mfi::mf1<void,mongo::BackgroundJob,boost::shared_ptr<mongo::BackgroundJob::JobStatus> >,boost::_bi::list2<boost::_bi::value<mongo::BackgroundJob * __ptr64>,boost::_bi::value<boost::shared_ptr<mongo::BackgroundJob::JobStatus> > > > >::run+0x31 mongod.exe ...\src\third_party\boost\libs\thread\src\win32\thread.cpp(180) boost::`anonymous namespace'::thread_start_function+0x21 mongod.exe f:\dd\vctools\crt_bld\self_64_amd64\crt\src\threadex.c(314) _callthreadstartex+0x17 mongod.exe f:\dd\vctools\crt_bld\self_64_amd64\crt\src\threadex.c(292) _threadstartex+0x7f kernel32.dll BaseThreadInitThunk+0xd Wed Aug 22 23:54:15 [rsHealthPoll] replSet member Kilimanjaro:10002 is up Wed Aug 22 23:54:25 [initandlisten] connection accepted from 192.168.1.17:19284#6 (3 connections now open) Wed Aug 22 23:54:25 [conn5] warning: DBException thrown :: caused by :: 9001 socket exception [CLOSED] for 192.168.1.17:19278 Wed Aug 22 23:54:25 [initandlisten] connection accepted from 192.168.1.17:19287#7 (4 connections now open) mongod.exe ...\src\mongo\util\stacktrace.cpp(158) mongo::printStackTrace+0x3e mongod.exe ...\src\mongo\util\assert_util.cpp(67) mongo::DBException::traceIfNeeded+0xa6 mongod.exe ...\src\mongo\util\assert_util.h(93) mongo::DBException::DBException+0x6e mongod.exe ...\src\mongo\util\net\sock.h(140) mongo::SocketException::SocketException+0xd3 mongod.exe ...\src\mongo\util\net\sock.cpp(741) mongo::Socket::recv+0x1e5 mongod.exe ...\src\mongo\util\net\message_port.cpp(164) mongo::MessagingPort::recv+0x8c mongod.exe ...\src\mongo\util\net\message_server_port.cpp(75) mongo::pms::threadRun+0x46a mongod.exe ...\src\third_party\boost\libs\thread\src\win32\thread.cpp(180) boost::`anonymous namespace'::thread_start_function+0x21 mongod.exe f:\dd\vctools\crt_bld\self_64_amd64\crt\src\threadex.c(314) _callthreadstartex+0x17 mongod.exe f:\dd\vctools\crt_bld\self_64_amd64\crt\src\threadex.c(292) _threadstartex+0x7f kernel32.dll BaseThreadInitThunk+0xd Wed Aug 22 23:54:26 [conn5] end connection 192.168.1.17:19278 (3 connections now open) Wed Aug 22 23:54:27 [rsHealthPoll] replSet member Kilimanjaro:10002 is now in state STARTUP2 Wed Aug 22 23:54:55 [conn6] warning: DBException thrown :: caused by :: 9001 socket exception [CLOSED] for 192.168.1.17:19284 Wed Aug 22 23:54:55 [initandlisten] connection accepted from 192.168.1.17:19291#8 (4 connections now open) Wed Aug 22 23:54:55 [conn7] warning: DBException thrown :: caused by :: 9001 socket exception [CLOSED] for 192.168.1.17:19287 Stack trace failed, SymInitialize failed with error 87 Wed Aug 22 23:54:55 [initandlisten] connection accepted from 192.168.1.17:19294#9 (5 connections now open) Wed Aug 22 23:54:55 [conn7] end connection 192.168.1.17:19287 (3 connections now open) mongod.exe ...\src\mongo\util\stacktrace.cpp(158) mongo::printStackTrace+0x3e mongod.exe ...\src\mongo\util\assert_util.cpp(67) mongo::DBException::traceIfNeeded+0xa6 mongod.exe ...\src\mongo\util\assert_util.h(93) mongo::DBException::DBException+0x6e mongod.exe ...\src\mongo\util\net\sock.h(140) mongo::SocketException::SocketException+0xd3 mongod.exe ...\src\mongo\util\net\sock.cpp(741) mongo::Socket::recv+0x1e5 mongod.exe ...\src\mongo\util\net\message_port.cpp(164) mongo::MessagingPort::recv+0x8c mongod.exe ...\src\mongo\util\net\message_server_port.cpp(75) mongo::pms::threadRun+0x46a mongod.exe ...\src\third_party\boost\libs\thread\src\win32\thread.cpp(180) boost::`anonymous namespace'::thread_start_function+0x21 mongod.exe f:\dd\vctools\crt_bld\self_64_amd64\crt\src\threadex.c(314) _callthreadstartex+0x17 mongod.exe f:\dd\vctools\crt_bld\self_64_amd64\crt\src\threadex.c(292) _threadstartex+0x7f kernel32.dll BaseThreadInitThunk+0xd Wed Aug 22 23:54:56 [conn6] end connection 192.168.1.17:19284 (3 connections now open) Wed Aug 22 23:55:25 [conn8] warning: DBException thrown :: caused by :: 9001 socket exception [CLOSED] for 192.168.1.17:19291 Wed Aug 22 23:55:25 [initandlisten] connection accepted from 192.168.1.17:19300#10 (4 connections now open) Wed Aug 22 23:55:25 [rsHealthPoll] replSet member Kilimanjaro:10002 is now in state RECOVERING Wed Aug 22 23:55:25 [conn9] warning: DBException thrown :: caused by :: 9001 socket exception [CLOSED] for 192.168.1.17:19294 Stack trace failed, SymInitialize failed with error 87 Wed Aug 22 23:55:25 [initandlisten] connection accepted from 192.168.1.17:19303#11 (5 connections now open) Wed Aug 22 23:55:25 [conn9] end connection 192.168.1.17:19294 (3 connections now open) mongod.exe ...\src\mongo\util\stacktrace.cpp(158) mongo::printStackTrace+0x3e mongod.exe ...\src\mongo\util\assert_util.cpp(67) mongo::DBException::traceIfNeeded+0xa6 mongod.exe ...\src\mongo\util\assert_util.h(93) mongo::DBException::DBException+0x6e mongod.exe ...\src\mongo\util\net\sock.h(140) mongo::SocketException::SocketException+0xd3 mongod.exe ...\src\mongo\util\net\sock.cpp(741) mongo::Socket::recv+0x1e5 mongod.exe ...\src\mongo\util\net\message_port.cpp(164) mongo::MessagingPort::recv+0x8c mongod.exe ...\src\mongo\util\net\message_server_port.cpp(75) mongo::pms::threadRun+0x46a mongod.exe ...\src\third_party\boost\libs\thread\src\win32\thread.cpp(180) boost::`anonymous namespace'::thread_start_function+0x21 mongod.exe f:\dd\vctools\crt_bld\self_64_amd64\crt\src\threadex.c(314) _callthreadstartex+0x17 mongod.exe f:\dd\vctools\crt_bld\self_64_amd64\crt\src\threadex.c(292) _threadstartex+0x7f kernel32.dll BaseThreadInitThunk+0xd Wed Aug 22 23:55:26 [conn8] end connection 192.168.1.17:19291 (3 connections now open) Wed Aug 22 23:55:27 [rsHealthPoll] replSet member Kilimanjaro:10002 is now in state SECONDARY Wed Aug 22 23:55:55 [conn10] warning: DBException thrown :: caused by :: 9001 socket exception [CLOSED] for 192.168.1.17:19300 Wed Aug 22 23:55:55 [initandlisten] connection accepted from 192.168.1.17:19310#12 (4 connections now open) Wed Aug 22 23:55:55 [conn11] warning: DBException thrown :: caused by :: 9001 socket exception [CLOSED] for 192.168.1.17:19303 Stack trace failed, SymInitialize failed with error 87 Wed Aug 22 23:55:55 [initandlisten] connection accepted from 192.168.1.17:19313#13 (5 connections now open) Wed Aug 22 23:55:55 [conn11] end connection 192.168.1.17:19303 (3 connections now open) mongod.exe ...\src\mongo\util\stacktrace.cpp(158) mongo::printStackTrace+0x3e mongod.exe ...\src\mongo\util\assert_util.cpp(67) mongo::DBException::traceIfNeeded+0xa6 mongod.exe ...\src\mongo\util\assert_util.h(93) mongo::DBException::DBException+0x6e mongod.exe ...\src\mongo\util\net\sock.h(140) mongo::SocketException::SocketException+0xd3 mongod.exe ...\src\mongo\util\net\sock.cpp(741) mongo::Socket::recv+0x1e5 mongod.exe ...\src\mongo\util\net\message_port.cpp(164) mongo::MessagingPort::recv+0x8c mongod.exe ...\src\mongo\util\net\message_server_port.cpp(75) mongo::pms::threadRun+0x46a mongod.exe ...\src\third_party\boost\libs\thread\src\win32\thread.cpp(180) boost::`anonymous namespace'::thread_start_function+0x21 mongod.exe f:\dd\vctools\crt_bld\self_64_amd64\crt\src\threadex.c(314) _callthreadstartex+0x17 mongod.exe f:\dd\vctools\crt_bld\self_64_amd64\crt\src\threadex.c(292) _threadstartex+0x7f kernel32.dll BaseThreadInitThunk+0xd Wed Aug 22 23:55:56 [conn10] end connection 192.168.1.17:19300 (3 connections now open) Wed Aug 22 23:55:58 [initandlisten] connection accepted from 192.168.1.17:19314#14 (4 connections now open) Wed Aug 22 23:56:03 [repl writer worker 1] warning: DBException thrown :: caused by :: 10068 invalid operator: $csharpnull mongod.exe ...\src\mongo\util\stacktrace.cpp(158) mongo::printStackTrace+0x3e mongod.exe ...\src\mongo\util\assert_util.cpp(67) mongo::DBException::traceIfNeeded+0xa6 mongod.exe ...\src\mongo\util\assert_util.cpp(141) mongo::uasserted+0x144 mongod.exe ...\src\mongo\db\matcher.cpp(285) mongo::Matcher::addOp+0x127 mongod.exe ...\src\mongo\db\matcher.cpp(493) mongo::Matcher::parseMatchExpressionElement+0x36a mongod.exe ...\src\mongo\db\matcher.cpp(532) mongo::Matcher::Matcher+0x165 mongod.exe ...\src\mongo\db\matcher_covered.cpp(34) mongo::CoveredIndexMatcher::CoveredIndexMatcher+0x48 mongod.exe ...\src\mongo\db\queryoptimizer.cpp(482) mongo::QueryPlan::matcher+0x85 mongod.exe ...\src\mongo\db\queryoptimizercursorimpl.cpp(823) mongo::CursorGenerator::singlePlanCursor+0x12f mongod.exe ...\src\mongo\db\queryoptimizercursorimpl.cpp(845) mongo::CursorGenerator::generate+0xad mongod.exe ...\src\mongo\db\queryoptimizercursorimpl.cpp(724) mongo::NamespaceDetailsTransient::getCursor+0x79 mongod.exe ...\src\mongo\db\ops\update.cpp(215) mongo::_updateObjects+0x6ff mongod.exe ...\src\mongo\db\ops\update.cpp(487) mongo::updateObjects+0x288 mongod.exe ...\src\mongo\db\oplog.cpp(779) mongo::applyOperation_inlock+0x4d9 mongod.exe ...\src\mongo\db\repl\rs_sync.cpp(82) mongo::replset::SyncTail::syncApply+0x23e mongod.exe ...\src\mongo\db\repl\rs_sync.cpp(114) mongo::replset::multiSyncApply+0x4d mongod.exe ...\src\mongo\util\concurrency\thread_pool.cpp(66) mongo::threadpool::Worker::loop+0x94 mongod.exe ...\src\third_party\boost\libs\thread\src\win32\thread.cpp(180) boost::`anonymous namespace'::thread_start_function+0x21 mongod.exe f:\dd\vctools\crt_bld\self_64_amd64\crt\src\threadex.c(314) _callthreadstartex+0x17 mongod.exe f:\dd\vctools\crt_bld\self_64_amd64\crt\src\threadex.c(292) _threadstartex+0x7f Wed Aug 22 23:56:04 [repl writer worker 1] ERROR: writer worker caught exception: invalid operator: $csharpnull on: { ts: Timestamp 1345694163000|1, h: 4794769045432243117, op: "i", ns: "test.test", o: { _id: { $csharpnull: true } } } Wed Aug 22 23:56:04 [repl writer worker 1] Fatal Assertion 16360 mongod.exe ...\src\mongo\util\stacktrace.cpp(158) mongo::printStackTrace+0x3e mongod.exe ...\src\mongo\util\assert_util.cpp(126) mongo::fassertFailed+0x43 mongod.exe ...\src\mongo\db\repl\rs_sync.cpp(118) `mongo::replset::multiSyncApply'::`1'::catch$0+0xb5 mongod.exe f:\dd\vctools\crt_bld\SELF_64_amd64\crt\prebuild\eh\amd64\handlers.asm(44) _CallSettingFrame+0x20 mongod.exe f:\dd\vctools\crt_bld\self_64_amd64\crt\prebuild\eh\frame.cpp(1337) __CxxCallCatchBlock+0xeb ntdll.dll RtlRestoreContext+0x2e2 mongod.exe ...\src\mongo\db\repl\rs_sync.cpp(114) mongo::replset::multiSyncApply+0x4d mongod.exe ...\src\mongo\util\concurrency\thread_pool.cpp(66) mongo::threadpool::Worker::loop+0x94 mongod.exe ...\src\third_party\boost\libs\thread\src\win32\thread.cpp(180) boost::`anonymous namespace'::thread_start_function+0x21 mongod.exe f:\dd\vctools\crt_bld\self_64_amd64\crt\src\threadex.c(314) _callthreadstartex+0x17 mongod.exe f:\dd\vctools\crt_bld\self_64_amd64\crt\src\threadex.c(292) _threadstartex+0x7f kernel32.dll BaseThreadInitThunk+0xd Wed Aug 22 23:56:04 [repl writer worker 1] ***aborting after fassert() failure
- depends on
-
SERVER-7150 update() able to create fields which begin with '$'
- Closed
-
SERVER-6399 Refactor update() code
- Closed
- is duplicated by
-
SERVER-6537 Replicaset stop replication
- Closed
-
SERVER-18938 Inserting $id will crash Secondaries
- Closed
- is related to
-
SERVER-7557 Update doesn't support "$"s in the field (not at the start)
- Closed
-
CSHARP-547 Use of $csharpnull when serializing a BsonNull whose value is C# null halts replication (and in 2.2 the secondaries crash)
- Closed
-
SERVER-10163 Relax constraints in new new update framework during replication
- Closed