void Command::appendCommandWCStatus(BSONObjBuilder& result, const Status& status) { if (!status.isOK()) { WCErrorDetail wcError; wcError.setErrCode(status.code()); wcError.setErrMessage(status.reason()); result.append("writeConcernError", wcError.toBSON()); } }
void appendWriteConcernErrorToCmdResponse(const std::string& shardID, const BSONElement& wcErrorElem, BSONObjBuilder& responseBuilder) { WCErrorDetail wcError; std::string errMsg; auto wcErrorObj = wcErrorElem.Obj(); if (!wcError.parseBSON(wcErrorObj, &errMsg)) { wcError.setErrMessage("Failed to parse writeConcernError: " + wcErrorObj.toString() + ", Received error: " + errMsg); } wcError.setErrMessage(wcError.getErrMessage() + " at " + shardID); responseBuilder.append("writeConcernError", wcError.toBSON()); }
void Command::appendCommandWCStatus(BSONObjBuilder& result, const Status& awaitReplicationStatus, const WriteConcernResult& wcResult) { if (!awaitReplicationStatus.isOK() && !result.hasField("writeConcernError")) { WCErrorDetail wcError; wcError.setErrCode(awaitReplicationStatus.code()); wcError.setErrMessage(awaitReplicationStatus.reason()); if (wcResult.wTimedOut) { wcError.setErrInfo(BSON("wtimeout" << true)); } result.append("writeConcernError", wcError.toBSON()); } }