StatusWith<RecordId> keyForOptime(const Timestamp& opTime) { // Make sure secs and inc wouldn't be negative if treated as signed. This ensures that they // don't sort differently when put in a RecordId. It also avoids issues with Null/Invalid // RecordIds if (opTime.getSecs() > uint32_t(std::numeric_limits<int32_t>::max())) return StatusWith<RecordId>(ErrorCodes::BadValue, "ts secs too high"); if (opTime.getInc() > uint32_t(std::numeric_limits<int32_t>::max())) return StatusWith<RecordId>(ErrorCodes::BadValue, "ts inc too high"); const RecordId out = RecordId(opTime.getSecs(), opTime.getInc()); if (out <= RecordId::min()) return StatusWith<RecordId>(ErrorCodes::BadValue, "ts too low"); if (out >= RecordId::max()) return StatusWith<RecordId>(ErrorCodes::BadValue, "ts too high"); return StatusWith<RecordId>(out); }