diff options
author | Louis Williams <louis.williams@mongodb.com> | 2019-08-29 19:13:50 +0000 |
---|---|---|
committer | evergreen <evergreen@mongodb.com> | 2019-08-29 19:13:50 +0000 |
commit | c33abedcb7bd3a4c116e350d70be29f3fd4acd45 (patch) | |
tree | 7bf691d53c8ff842e855c6b3c7a2d3ea2e1c6bc5 /src/mongo/db/storage | |
parent | a3014fa23e0123c3ac42b4d8e295c4f93600c685 (diff) | |
download | mongo-c33abedcb7bd3a4c116e350d70be29f3fd4acd45.tar.gz |
SERVER-42526 IndexBuildInterceptor should store KeyString keys
Diffstat (limited to 'src/mongo/db/storage')
-rw-r--r-- | src/mongo/db/storage/key_string.h | 37 |
1 files changed, 24 insertions, 13 deletions
diff --git a/src/mongo/db/storage/key_string.h b/src/mongo/db/storage/key_string.h index 404f4d9a30c..74fd5fd4d91 100644 --- a/src/mongo/db/storage/key_string.h +++ b/src/mongo/db/storage/key_string.h @@ -347,32 +347,43 @@ public: */ std::string toString() const; - /// Members for Sorter - struct SorterDeserializeSettings { - SorterDeserializeSettings(Version version) : keyStringVersion(version) {} - Version keyStringVersion; - }; - - void serializeForSorter(BufBuilder& buf) const { - buf.appendNum(_ksSize); // Serialize size of Keystring - buf.appendBuf(_buffer.get(), _ksSize); // Serialize Keystring - buf.appendBuf(_buffer.get() + _ksSize, _bufSize - _ksSize); // Serialize Typebits + // Serializes this Value into a storable format with TypeBits information. The serialized + // format takes the following form: + // [keystring size][keystring encoding][typebits encoding] + void serialize(BufBuilder& buf) const { + buf.appendNum(_ksSize); // Serialize size of Keystring + buf.appendBuf(_buffer.get(), _bufSize); // Serialize Keystring + Typebits } - static Value deserializeForSorter(BufReader& buf, const SorterDeserializeSettings& settings) { + // Deserialize the Value from a serialized format. + static Value deserialize(BufReader& buf, KeyString::Version version) { const int32_t sizeOfKeystring = buf.read<LittleEndian<int32_t>>(); const void* keystringPtr = buf.skip(sizeOfKeystring); BufBuilder newBuf; newBuf.appendBuf(keystringPtr, sizeOfKeystring); - auto typeBits = TypeBits::fromBuffer(settings.keyStringVersion, &buf); // advances the buf + auto typeBits = TypeBits::fromBuffer(version, &buf); // advances the buf if (typeBits.isAllZeros()) { newBuf.appendChar(0); } else { newBuf.appendBuf(typeBits.getBuffer(), typeBits.getSize()); } - return {settings.keyStringVersion, sizeOfKeystring, newBuf.len(), newBuf.release()}; + return {version, sizeOfKeystring, newBuf.len(), newBuf.release()}; + } + + /// Members for Sorter + struct SorterDeserializeSettings { + SorterDeserializeSettings(Version version) : keyStringVersion(version) {} + Version keyStringVersion; + }; + + void serializeForSorter(BufBuilder& buf) const { + serialize(buf); + } + + static Value deserializeForSorter(BufReader& buf, const SorterDeserializeSettings& settings) { + return deserialize(buf, settings.keyStringVersion); } int memUsageForSorter() const { |