Details
-
Bug
-
Resolution: Duplicate
-
Minor - P4
-
None
-
2.0.6, 2.2.0-rc0
-
None
-
All
-
ALL
Description
In v2.0, the RunOnAllShardsCommand::run() method checks the results without first checking if there were any results. In the event of a socket exception such as:
Thu Aug 9 02:03:31 [conn60] Socket recv() errno:104 Connection reset by peer 10.217.63.247:27018
|
Thu Aug 9 02:03:31 [conn60] SocketException: remote: 10.217.63.247:27018 error: 9001 socket exception [1] server [10.217.63.247:27018]
|
Thu Aug 9 02:03:31 [conn60] DBClientCursor::init lazy say() failed
|
Thu Aug 9 02:03:31 [conn60] DBClientCursor::init message from say() was empty
|
Thu Aug 9 02:03:31 [conn60] ERROR: Future::spawnComand (part 2) exception: Error running command on server: rsname/server1:27018,server2:27018,server3:27018
|
Thu Aug 9 02:03:31 [conn60] Assertion failure !e.eoo() s/../util/net/../../db/../bson/bsonobjbuilder.h 127
|
0x52b5f6 0x53613b 0x7a3284 0x794f24 0x777c5c 0x7b6467 0x7c89c1 0x5e9747 0x2aaaaacce73d 0x2aaaab7494bd
|
/usr/bin/mongos(_ZN5mongo12sayDbContextEPKc+0x96) [0x52b5f6]
|
/usr/bin/mongos(_ZN5mongo8assertedEPKcS1_j+0xfb) [0x53613b]
|
/usr/bin/mongos(_ZN5mongo15dbgrid_pub_cmds21RunOnAllShardsCommand3runERKSsRNS_7BSONObjEiRSsRNS_14BSONObjBuilderEb+0x904) [0x7a3284]
|
/usr/bin/mongos(_ZN5mongo7Command20runAgainstRegisteredEPKcRNS_7BSONObjERNS_14BSONObjBuilderEi+0x894) [0x794f24]
|
/usr/bin/mongos(_ZN5mongo14SingleStrategy7queryOpERNS_7RequestE+0x5ac) [0x777c5c]
|
/usr/bin/mongos(_ZN5mongo7Request7processEi+0x187) [0x7b6467]
|
/usr/bin/mongos(_ZN5mongo21ShardedMessageHandler7processERNS_7MessageEPNS_21AbstractMessagingPortEPNS_9LastErrorE+0x71) [0x7c89c1]
|
/usr/bin/mongos(_ZN5mongo3pms9threadRunEPNS_13MessagingPortE+0x287) [0x5e9747]
|
/lib64/libpthread.so.0 [0x2aaaaacce73d]
|
/lib64/libc.so.6(clone+0x6d) [0x2aaaab7494bd]
|
This appears to be caused by Future::CommandResult having a result() that was never populated, then checking for an errmsg:
shared_ptr<Future::CommandResult> res = *i;
|
if ( ! res->join() ) {
|
errors.appendAs(res->result()["errmsg"], res->getServer());
|
}
|
Note this was slightly modified in master for more robust error reporting, however it seems this case is still possible. The impact of this issue seems relatively minimal, given the command failed due to a network issue.
Attachments
Issue Links
- duplicates
-
SERVER-6441 Assertion failure in bsonobjbuilder.h
-
- Closed
-