Beispiel #1
0
 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());
}
Beispiel #3
0
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());
    }
}