Add some comments for BlockContents

Summary: Pull Request resolved: https://github.com/facebook/rocksdb/pull/5354

Differential Revision: D15496645

Pulled By: ltamasi

fbshipit-source-id: 1282b1ce11fbc412d3d87b2688fd0586e7bb6b85
This commit is contained in:
Levi Tamasi 2019-05-24 11:16:47 -07:00 committed by Facebook Github Bot
parent 88ff80780b
commit 98094f6cac

View file

@ -194,6 +194,10 @@ inline CompressionType get_block_compression_type(const char* block_data,
return static_cast<CompressionType>(block_data[block_size]); return static_cast<CompressionType>(block_data[block_size]);
} }
// Represents the contents of a block read from an SST file. Depending on how
// it's created, it may or may not own the actual block bytes. As an example,
// BlockContents objects representing data read from mmapped files only point
// into the mmapped region.
struct BlockContents { struct BlockContents {
Slice data; // Actual contents of data Slice data; // Actual contents of data
CacheAllocationPtr allocation; CacheAllocationPtr allocation;
@ -206,16 +210,20 @@ struct BlockContents {
BlockContents() {} BlockContents() {}
// Does not take ownership of the underlying data bytes.
BlockContents(const Slice& _data) : data(_data) {} BlockContents(const Slice& _data) : data(_data) {}
// Takes ownership of the underlying data bytes.
BlockContents(CacheAllocationPtr&& _data, size_t _size) BlockContents(CacheAllocationPtr&& _data, size_t _size)
: data(_data.get(), _size), allocation(std::move(_data)) {} : data(_data.get(), _size), allocation(std::move(_data)) {}
// Takes ownership of the underlying data bytes.
BlockContents(std::unique_ptr<char[]>&& _data, size_t _size) BlockContents(std::unique_ptr<char[]>&& _data, size_t _size)
: data(_data.get(), _size) { : data(_data.get(), _size) {
allocation.reset(_data.release()); allocation.reset(_data.release());
} }
// Returns whether the object has ownership of the underlying data bytes.
bool own_bytes() const { return allocation.get() != nullptr; } bool own_bytes() const { return allocation.get() != nullptr; }
// It's the caller's responsibility to make sure that this is // It's the caller's responsibility to make sure that this is