Compare commits
3 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
f8a42a706b | ||
|
2c1ef0692b | ||
|
25fef46277 |
@ -49,7 +49,7 @@ if [ -d /mnt/gvfs/third-party -a -z "$CXX" ]; then
|
|||||||
if [ -z "$USE_CLANG" ]; then
|
if [ -z "$USE_CLANG" ]; then
|
||||||
CENTOS_VERSION=`rpm -q --qf "%{VERSION}" \
|
CENTOS_VERSION=`rpm -q --qf "%{VERSION}" \
|
||||||
$(rpm -q --whatprovides redhat-release)`
|
$(rpm -q --whatprovides redhat-release)`
|
||||||
if [ "$CENTOS_VERSION" = "6" ]; then
|
if [ "$CENTOS_VERSION" -ge "6" ]; then
|
||||||
source $PWD/build_tools/fbcode.gcc481.sh
|
source $PWD/build_tools/fbcode.gcc481.sh
|
||||||
else
|
else
|
||||||
source $PWD/build_tools/fbcode.gcc471.sh
|
source $PWD/build_tools/fbcode.gcc471.sh
|
||||||
|
@ -327,8 +327,20 @@ Status BlockBasedTable::Open(const Options& options, const EnvOptions& soptions,
|
|||||||
s = ReadMetaBlock(rep, &meta, &meta_iter);
|
s = ReadMetaBlock(rep, &meta, &meta_iter);
|
||||||
|
|
||||||
// Read the properties
|
// Read the properties
|
||||||
|
bool found_properties_block = true;
|
||||||
meta_iter->Seek(kPropertiesBlock);
|
meta_iter->Seek(kPropertiesBlock);
|
||||||
if (meta_iter->Valid() && meta_iter->key() == kPropertiesBlock) {
|
if (meta_iter->status().ok() &&
|
||||||
|
(!meta_iter->Valid() || meta_iter->key() != kPropertiesBlock)) {
|
||||||
|
meta_iter->Seek(kPropertiesBlockOldName);
|
||||||
|
if (meta_iter->status().ok() &&
|
||||||
|
(!meta_iter->Valid() || meta_iter->key() != kPropertiesBlockOldName)) {
|
||||||
|
found_properties_block = false;
|
||||||
|
Log(WARN, rep->options.info_log,
|
||||||
|
"Cannot find Properties block from file.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (found_properties_block) {
|
||||||
s = meta_iter->status();
|
s = meta_iter->status();
|
||||||
TableProperties* table_properties = nullptr;
|
TableProperties* table_properties = nullptr;
|
||||||
if (s.ok()) {
|
if (s.ok()) {
|
||||||
@ -979,11 +991,13 @@ Status BlockBasedTable::CreateIndexReader(IndexReader** index_reader) const {
|
|||||||
// Some old version of block-based tables don't have index type present in
|
// Some old version of block-based tables don't have index type present in
|
||||||
// table properties. If that's the case we can safely use the kBinarySearch.
|
// table properties. If that's the case we can safely use the kBinarySearch.
|
||||||
auto index_type = BlockBasedTableOptions::kBinarySearch;
|
auto index_type = BlockBasedTableOptions::kBinarySearch;
|
||||||
auto& props = rep_->table_properties->user_collected_properties;
|
if (rep_->table_properties) {
|
||||||
auto pos = props.find(BlockBasedTablePropertyNames::kIndexType);
|
auto& props = rep_->table_properties->user_collected_properties;
|
||||||
if (pos != props.end()) {
|
auto pos = props.find(BlockBasedTablePropertyNames::kIndexType);
|
||||||
index_type = static_cast<BlockBasedTableOptions::IndexType>(
|
if (pos != props.end()) {
|
||||||
DecodeFixed32(pos->second.c_str()));
|
index_type = static_cast<BlockBasedTableOptions::IndexType>(
|
||||||
|
DecodeFixed32(pos->second.c_str()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (index_type) {
|
switch (index_type) {
|
||||||
@ -1023,7 +1037,10 @@ uint64_t BlockBasedTable::ApproximateOffsetOf(const Slice& key) {
|
|||||||
// key is past the last key in the file. If table_properties is not
|
// key is past the last key in the file. If table_properties is not
|
||||||
// available, approximate the offset by returning the offset of the
|
// available, approximate the offset by returning the offset of the
|
||||||
// metaindex block (which is right near the end of the file).
|
// metaindex block (which is right near the end of the file).
|
||||||
result = rep_->table_properties->data_size;
|
result = 0;
|
||||||
|
if (rep_->table_properties) {
|
||||||
|
result = rep_->table_properties->data_size;
|
||||||
|
}
|
||||||
// table_properties is not present in the table.
|
// table_properties is not present in the table.
|
||||||
if (result == 0) {
|
if (result == 0) {
|
||||||
result = rep_->metaindex_handle.offset();
|
result = rep_->metaindex_handle.offset();
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
#include "rocksdb/statistics.h"
|
#include "rocksdb/statistics.h"
|
||||||
#include "rocksdb/status.h"
|
#include "rocksdb/status.h"
|
||||||
@ -198,4 +199,8 @@ class BlockBasedTable : public TableReader {
|
|||||||
void operator=(const TableReader&) = delete;
|
void operator=(const TableReader&) = delete;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Backward compatible properties block name. Limited in block based
|
||||||
|
// table.
|
||||||
|
extern const std::string kPropertiesBlockOldName;
|
||||||
|
|
||||||
} // namespace rocksdb
|
} // namespace rocksdb
|
||||||
|
@ -244,6 +244,8 @@ Status ReadTableProperties(RandomAccessFile* file, uint64_t file_size,
|
|||||||
metaindex_block.NewIterator(BytewiseComparator()));
|
metaindex_block.NewIterator(BytewiseComparator()));
|
||||||
|
|
||||||
// -- Read property block
|
// -- Read property block
|
||||||
|
// This function is not used by BlockBasedTable, so we don't have to
|
||||||
|
// worry about old properties block name.
|
||||||
meta_iter->Seek(kPropertiesBlock);
|
meta_iter->Seek(kPropertiesBlock);
|
||||||
TableProperties table_properties;
|
TableProperties table_properties;
|
||||||
if (meta_iter->Valid() &&
|
if (meta_iter->Valid() &&
|
||||||
|
@ -91,5 +91,7 @@ const std::string TablePropertiesNames::kFixedKeyLen =
|
|||||||
"rocksdb.fixed.key.length";
|
"rocksdb.fixed.key.length";
|
||||||
|
|
||||||
extern const std::string kPropertiesBlock = "rocksdb.properties";
|
extern const std::string kPropertiesBlock = "rocksdb.properties";
|
||||||
|
// Old property block name for backward compatibility
|
||||||
|
extern const std::string kPropertiesBlockOldName = "rocksdb.stats";
|
||||||
|
|
||||||
} // namespace rocksdb
|
} // namespace rocksdb
|
||||||
|
@ -761,6 +761,10 @@ class PosixWritableFile : public WritableFile {
|
|||||||
}
|
}
|
||||||
|
|
||||||
virtual Status Sync() {
|
virtual Status Sync() {
|
||||||
|
Status s = Flush();
|
||||||
|
if (!s.ok()) {
|
||||||
|
return s;
|
||||||
|
}
|
||||||
TEST_KILL_RANDOM(rocksdb_kill_odds);
|
TEST_KILL_RANDOM(rocksdb_kill_odds);
|
||||||
if (pending_sync_ && fdatasync(fd_) < 0) {
|
if (pending_sync_ && fdatasync(fd_) < 0) {
|
||||||
return IOError(filename_, errno);
|
return IOError(filename_, errno);
|
||||||
@ -771,6 +775,10 @@ class PosixWritableFile : public WritableFile {
|
|||||||
}
|
}
|
||||||
|
|
||||||
virtual Status Fsync() {
|
virtual Status Fsync() {
|
||||||
|
Status s = Flush();
|
||||||
|
if (!s.ok()) {
|
||||||
|
return s;
|
||||||
|
}
|
||||||
TEST_KILL_RANDOM(rocksdb_kill_odds);
|
TEST_KILL_RANDOM(rocksdb_kill_odds);
|
||||||
if (pending_fsync_ && fsync(fd_) < 0) {
|
if (pending_fsync_ && fsync(fd_) < 0) {
|
||||||
return IOError(filename_, errno);
|
return IOError(filename_, errno);
|
||||||
|
Loading…
Reference in New Issue
Block a user