Skip to content

Commit

Permalink
Parameterize table magic number
Browse files Browse the repository at this point in the history
Summary:

As we are having different types of tables and they all might share the same structure in block-based table:

[metaindex block]
[index block]
[Footer]

To be able to identify differnt types of tables, we need to parameterize the "magic number" in the `Footer`.

Test Plan:

make check
  • Loading branch information
Kai Liu committed Dec 4, 2013
1 parent f040e53 commit 3a0e98d
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 9 deletions.
10 changes: 9 additions & 1 deletion table/block_based_table_builder.cc
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,14 @@ void LogPropertiesCollectionError(

} // anonymous namespace

// kBlockedBasedTableMagicNumber was picked by running
// echo http://code.google.com/p/leveldb/ | sha1sum
// and taking the leading 64 bits.
// Please note that kBlockedBasedTableMagicNumber may also be accessed by
// other .cc files so it have to be explicitly declared with "extern".
extern const uint64_t kBlockedBasedTableMagicNumber
= 0xdb4775248b80fb57ull;

struct BlockBasedTableBuilder::Rep {
Options options;
WritableFile* file;
Expand Down Expand Up @@ -503,7 +511,7 @@ Status BlockBasedTableBuilder::Finish() {

// Write footer
if (ok()) {
Footer footer;
Footer footer(kBlockedBasedTableMagicNumber);
footer.set_metaindex_handle(metaindex_block_handle);
footer.set_index_handle(index_block_handle);
std::string footer_encoding;
Expand Down
1 change: 0 additions & 1 deletion table/block_based_table_builder.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ class BlockBuilder;
class BlockHandle;
class WritableFile;


class BlockBasedTableBuilder : public TableBuilder {
public:
// Create a builder that will store the contents of the table it is
Expand Down
4 changes: 3 additions & 1 deletion table/block_based_table_reader.cc
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@

namespace rocksdb {

extern uint64_t kBlockedBasedTableMagicNumber;

// The longest the prefix of the cache key used to identify blocks can be.
// We are using the fact that we know for Posix files the unique ID is three
// varints.
Expand Down Expand Up @@ -242,7 +244,7 @@ Status BlockBasedTable::Open(const Options& options,
return Status::InvalidArgument("file is too short to be an sstable");
}

Footer footer;
Footer footer(kBlockedBasedTableMagicNumber);
s = footer.DecodeFrom(&footer_input);
if (!s.ok()) return s;

Expand Down
13 changes: 7 additions & 6 deletions table/format.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,12 @@ class BlockHandle {
// end of every table file.
class Footer {
public:
Footer() { }
// @table_magic_number serves two purposes:
// 1. Identify different types of the tables.
// 2. Help us to identify if a given file is a valid sst.
Footer(uint64_t table_magic_number) :
kTableMagicNumber(table_magic_number) {
}

// The block handle for the metaindex block of the table
const BlockHandle& metaindex_handle() const { return metaindex_handle_; }
Expand All @@ -77,13 +82,9 @@ class Footer {
private:
BlockHandle metaindex_handle_;
BlockHandle index_handle_;
const uint64_t kTableMagicNumber;
};

// kTableMagicNumber was picked by running
// echo http://code.google.com/p/leveldb/ | sha1sum
// and taking the leading 64 bits.
static const uint64_t kTableMagicNumber = 0xdb4775248b80fb57ull;

// 1-byte type + 32-bit crc
static const size_t kBlockTrailerSize = 5;

Expand Down

0 comments on commit 3a0e98d

Please sign in to comment.