Fixing broken Mac build
Summary: Made some small changes to fix the broken mac build Test Plan: make check all in both linux and mac. All tests pass. Reviewers: sdong, igor, ljin, yhchiang Reviewed By: ljin, yhchiang Subscribers: leveldb Differential Revision: https://reviews.facebook.net/D20895
This commit is contained in:
parent
1903aa5cc7
commit
0c9d03ba10
@ -274,6 +274,16 @@ uint64_t CuckooTableBuilder::FileSize() const {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This method is invoked when there is no place to insert the target key.
|
||||||
|
// It searches for a set of elements that can be moved to accommodate target
|
||||||
|
// key. The search is a BFS graph traversal with first level (hash_vals)
|
||||||
|
// being all the buckets target key could go to.
|
||||||
|
// Then, from each node (curr_node), we find all the buckets that curr_node
|
||||||
|
// could go to. They form the children of curr_node in the tree.
|
||||||
|
// We continue the traversal until we find an empty bucket, in which case, we
|
||||||
|
// move all elements along the path from first level to this empty bucket, to
|
||||||
|
// make space for target key which is inserted at first level (*bucket_id).
|
||||||
|
// If tree depth exceedes max depth, we return false indicating failure.
|
||||||
bool CuckooTableBuilder::MakeSpaceForKey(const Slice& key,
|
bool CuckooTableBuilder::MakeSpaceForKey(const Slice& key,
|
||||||
uint64_t *bucket_id, autovector<uint64_t> hash_vals) {
|
uint64_t *bucket_id, autovector<uint64_t> hash_vals) {
|
||||||
struct CuckooNode {
|
struct CuckooNode {
|
||||||
@ -331,23 +341,21 @@ bool CuckooTableBuilder::MakeSpaceForKey(const Slice& key,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (null_found) {
|
if (null_found) {
|
||||||
|
// There is an empty node in tree.back(). Now, traverse the path from this
|
||||||
|
// empty node to top of the tree and at every node in the path, replace
|
||||||
|
// child with the parent. Stop when first level is reached in the tree
|
||||||
|
// (happens when 0 <= bucket_to_replace_pos < num_hash_table_) and return
|
||||||
|
// this location in first level for target key to be inserted.
|
||||||
uint32_t bucket_to_replace_pos = tree.size()-1;
|
uint32_t bucket_to_replace_pos = tree.size()-1;
|
||||||
while (bucket_to_replace_pos >= 0) {
|
while (bucket_to_replace_pos >= num_hash_table_) {
|
||||||
CuckooNode& curr_node = tree[bucket_to_replace_pos];
|
CuckooNode& curr_node = tree[bucket_to_replace_pos];
|
||||||
if (bucket_to_replace_pos >= num_hash_table_) {
|
buckets_[curr_node.bucket_id] =
|
||||||
buckets_[curr_node.bucket_id] =
|
buckets_[tree[curr_node.parent_pos].bucket_id];
|
||||||
buckets_[tree[curr_node.parent_pos].bucket_id];
|
bucket_to_replace_pos = curr_node.parent_pos;
|
||||||
bucket_to_replace_pos = curr_node.parent_pos;
|
|
||||||
} else {
|
|
||||||
*bucket_id = curr_node.bucket_id;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
assert(false);
|
*bucket_id = tree[bucket_to_replace_pos].bucket_id;
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
return null_found;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace rocksdb
|
} // namespace rocksdb
|
||||||
|
@ -24,7 +24,6 @@ CuckooTableReader::CuckooTableReader(
|
|||||||
uint64_t file_size,
|
uint64_t file_size,
|
||||||
uint64_t (*GetSliceHashPtr)(const Slice&, uint32_t, uint64_t))
|
uint64_t (*GetSliceHashPtr)(const Slice&, uint32_t, uint64_t))
|
||||||
: file_(std::move(file)),
|
: file_(std::move(file)),
|
||||||
file_size_(file_size),
|
|
||||||
GetSliceHash(GetSliceHashPtr) {
|
GetSliceHash(GetSliceHashPtr) {
|
||||||
if (!options.allow_mmap_reads) {
|
if (!options.allow_mmap_reads) {
|
||||||
status_ = Status::InvalidArgument("File is not mmaped");
|
status_ = Status::InvalidArgument("File is not mmaped");
|
||||||
|
@ -53,7 +53,6 @@ class CuckooTableReader: public TableReader {
|
|||||||
private:
|
private:
|
||||||
std::unique_ptr<RandomAccessFile> file_;
|
std::unique_ptr<RandomAccessFile> file_;
|
||||||
Slice file_data_;
|
Slice file_data_;
|
||||||
const uint64_t file_size_;
|
|
||||||
bool is_last_level_;
|
bool is_last_level_;
|
||||||
std::shared_ptr<const TableProperties> table_props_;
|
std::shared_ptr<const TableProperties> table_props_;
|
||||||
Status status_;
|
Status status_;
|
||||||
|
@ -11,6 +11,8 @@ int main() {
|
|||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
#define __STDC_FORMAT_MACROS
|
||||||
|
#include <inttypes.h>
|
||||||
#include <gflags/gflags.h>
|
#include <gflags/gflags.h>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <string>
|
#include <string>
|
||||||
@ -304,8 +306,8 @@ void BM_CuckooRead(uint64_t num, uint32_t key_length,
|
|||||||
reader.GetTableProperties()->user_collected_properties;
|
reader.GetTableProperties()->user_collected_properties;
|
||||||
const uint32_t num_hash_fun = *reinterpret_cast<const uint32_t*>(
|
const uint32_t num_hash_fun = *reinterpret_cast<const uint32_t*>(
|
||||||
user_props.at(CuckooTablePropertyNames::kNumHashTable).data());
|
user_props.at(CuckooTablePropertyNames::kNumHashTable).data());
|
||||||
fprintf(stderr, "With %lu items and hash table ratio %f, number of hash"
|
fprintf(stderr, "With %" PRIu64 " items and hash table ratio %f, number of"
|
||||||
" functions used: %u.\n", num, hash_ratio, num_hash_fun);
|
" hash functions used: %u.\n", num, hash_ratio, num_hash_fun);
|
||||||
ReadOptions r_options;
|
ReadOptions r_options;
|
||||||
for (auto& key : keys) {
|
for (auto& key : keys) {
|
||||||
int cnt = 0;
|
int cnt = 0;
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
// of patent rights can be found in the PATENTS file in the same directory.
|
// of patent rights can be found in the PATENTS file in the same directory.
|
||||||
//
|
//
|
||||||
#include "util/statistics.h"
|
#include "util/statistics.h"
|
||||||
|
|
||||||
|
#define __STDC_FORMAT_MACROS
|
||||||
|
#include <inttypes.h>
|
||||||
#include "rocksdb/statistics.h"
|
#include "rocksdb/statistics.h"
|
||||||
#include "port/likely.h"
|
#include "port/likely.h"
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
@ -96,7 +99,7 @@ std::string StatisticsImpl::ToString() const {
|
|||||||
for (const auto& t : TickersNameMap) {
|
for (const auto& t : TickersNameMap) {
|
||||||
if (t.first < TICKER_ENUM_MAX || enable_internal_stats_) {
|
if (t.first < TICKER_ENUM_MAX || enable_internal_stats_) {
|
||||||
char buffer[kBufferSize];
|
char buffer[kBufferSize];
|
||||||
snprintf(buffer, kBufferSize, "%s COUNT : %ld\n",
|
snprintf(buffer, kBufferSize, "%s COUNT : %" PRIu64 "\n",
|
||||||
t.second.c_str(), getTickerCount(t.first));
|
t.second.c_str(), getTickerCount(t.first));
|
||||||
res.append(buffer);
|
res.append(buffer);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user