Details
Description
The current Shard::runCommand() method only checks for the request status, command status, and write concern error.
Since Shard::runCommand simply takes a BSONObj cmdObj, it's dangerously easy to pass in a BatchedCommandRequest in BSONObj form and assume that retries and error checking will be correctly handled.
Status _getEffectiveCommandStatus(StatusWith<Shard::CommandResponse> cmdResponse) {
|
// Make sure the command even received a valid response
|
if (!cmdResponse.isOK()) {
|
return cmdResponse.getStatus();
|
}
|
|
|
// If the request reached the shard, check if the command itself failed.
|
if (!cmdResponse.getValue().commandStatus.isOK()) {
|
return cmdResponse.getValue().commandStatus;
|
}
|
|
|
// Finally check if the write concern failed
|
if (!cmdResponse.getValue().writeConcernStatus.isOK()) {
|
return cmdResponse.getValue().writeConcernStatus;
|
}
|
|
|
return Status::OK();
|
}
|
Attachments
Issue Links
- is related to
-
SERVER-24828 ShardingCatalogClientImpl::_runBatchWriteCommand should notify the ReplicaSetMonitor for errors in the "writeErrors" response
-
- Closed
-
-
SERVER-24379 Implement addShardToZone and _configsvrAddShardToZone
-
- Closed
-