diff options
Diffstat (limited to 'src/mongo/s/catalog/type_chunk.cpp')
-rw-r--r-- | src/mongo/s/catalog/type_chunk.cpp | 22 |
1 files changed, 5 insertions, 17 deletions
diff --git a/src/mongo/s/catalog/type_chunk.cpp b/src/mongo/s/catalog/type_chunk.cpp index 18c5cd63bb0..7ed4cc739cc 100644 --- a/src/mongo/s/catalog/type_chunk.cpp +++ b/src/mongo/s/catalog/type_chunk.cpp @@ -27,13 +27,8 @@ * it in the license file. */ - -#include "mongo/platform/basic.h" - #include "mongo/s/catalog/type_chunk.h" -#include <cstring> - #include "mongo/base/status_with.h" #include "mongo/bson/bsonobj.h" #include "mongo/bson/bsonobjbuilder.h" @@ -46,7 +41,6 @@ #define MONGO_LOGV2_DEFAULT_COMPONENT ::mongo::logv2::LogComponent::kSharding - namespace mongo { const NamespaceString ChunkType::ConfigNS("config.chunks"); @@ -64,8 +58,6 @@ const BSONField<BSONObj> ChunkType::max("max"); const BSONField<std::string> ChunkType::shard("shard"); const BSONField<bool> ChunkType::jumbo("jumbo"); const BSONField<Date_t> ChunkType::lastmod("lastmod"); -const BSONField<OID> ChunkType::epoch("lastmodEpoch"); -const BSONField<Timestamp> ChunkType::timestamp("lastmodTimestamp"); const BSONField<BSONObj> ChunkType::history("history"); const BSONField<int64_t> ChunkType::estimatedSizeBytes("estimatedDataSizeBytes"); const BSONField<bool> ChunkType::historyIsAt40("historyIsAt40"); @@ -298,7 +290,7 @@ StatusWith<ChunkType> ChunkType::parseFromConfigBSON(const BSONObj& source, if (versionElem.type() == bsonTimestamp || versionElem.type() == Date) { auto chunkLastmod = Timestamp(versionElem._numberLong()); chunk._version = - ChunkVersion(chunkLastmod.getSecs(), chunkLastmod.getInc(), epoch, timestamp); + ChunkVersion({epoch, timestamp}, {chunkLastmod.getSecs(), chunkLastmod.getInc()}); } else { return {ErrorCodes::BadValue, str::stream() << "The field " << ChunkType::lastmod() << " cannot be parsed."}; @@ -383,7 +375,7 @@ StatusWith<ChunkType> ChunkType::parseFromShardBSON(const BSONObj& source, if (lastmodElem.type() == bsonTimestamp || lastmodElem.type() == Date) { auto chunkLastmod = Timestamp(lastmodElem._numberLong()); chunk._version = - ChunkVersion(chunkLastmod.getSecs(), chunkLastmod.getInc(), epoch, timestamp); + ChunkVersion({epoch, timestamp}, {chunkLastmod.getSecs(), chunkLastmod.getInc()}); } else { return {ErrorCodes::NoSuchKey, str::stream() << "Expected field " << ChunkType::lastmod() << " not found."}; @@ -393,7 +385,7 @@ StatusWith<ChunkType> ChunkType::parseFromShardBSON(const BSONObj& source, return chunk; } -StatusWith<ChunkType> ChunkType::parseFromNetworkRequest(const BSONObj& source, bool requireUUID) { +StatusWith<ChunkType> ChunkType::parseFromNetworkRequest(const BSONObj& source) { // Parse history and shard. StatusWith<ChunkType> chunkStatus = _parseChunkBase(source); if (!chunkStatus.isOK()) { @@ -413,16 +405,12 @@ StatusWith<ChunkType> ChunkType::parseFromNetworkRequest(const BSONObj& source, } chunk._collectionUUID = swUUID.getValue(); } else if (status == ErrorCodes::NoSuchKey) { - // Ignore NoSuchKey because before 5.0 chunks don't include a collectionUUID + return {ErrorCodes::FailedToParse, str::stream() << "There must be a UUID present"}; } else { return status; } } - if (requireUUID && !chunk._collectionUUID) { - return {ErrorCodes::FailedToParse, str::stream() << "There must be a UUID present"}; - } - // Parse min and max. { auto chunkRangeStatus = ChunkRange::fromBSON(source); @@ -448,7 +436,7 @@ StatusWith<ChunkType> ChunkType::parseFromNetworkRequest(const BSONObj& source, } // Parse version. - chunk._version = ChunkVersion::fromBSONLegacyOrNewerFormat(source, ChunkType::lastmod()); + chunk._version = ChunkVersion::parse(source[ChunkType::lastmod()]); return chunk; } |