fix bug
This commit is contained in:
parent
6a90bb91ee
commit
8fa7a937ee
@ -328,7 +328,9 @@ Status Version::Get(const ReadOptions& options, const LookupKey& k,
|
||||
Slice ikey = k.internal_key();
|
||||
Slice user_key = k.user_key();
|
||||
const Comparator* ucmp = vset_->icmp_.user_comparator();
|
||||
Status s;
|
||||
|
||||
stats->seek_file = nullptr;
|
||||
stats->seek_file_level = -1;
|
||||
|
||||
struct State {
|
||||
GetStats* stats;
|
||||
@ -337,6 +339,8 @@ Status Version::Get(const ReadOptions& options, const LookupKey& k,
|
||||
Slice user_key;
|
||||
const Comparator* ucmp;
|
||||
std::string* value;
|
||||
FileMetaData *last_file_read;
|
||||
int last_file_level;
|
||||
|
||||
VersionSet *vset;
|
||||
Status s;
|
||||
@ -344,11 +348,13 @@ Status Version::Get(const ReadOptions& options, const LookupKey& k,
|
||||
static bool Match(void* arg, int level, FileMetaData* f) {
|
||||
State* state = reinterpret_cast<State*>(arg);
|
||||
|
||||
if (state->stats->seek_file == nullptr) {
|
||||
if (state->last_file_read != nullptr && state->stats->seek_file == nullptr) {
|
||||
// We have had more than one seek for this read. Charge the 1st file.
|
||||
state->stats->seek_file = f;
|
||||
state->stats->seek_file_level = level;
|
||||
state->stats->seek_file = state->last_file_read;
|
||||
state->stats->seek_file_level = state->last_file_level;
|
||||
}
|
||||
state->last_file_read = f;
|
||||
state->last_file_level = level;
|
||||
|
||||
Saver saver;
|
||||
saver.state = kNotFound;
|
||||
@ -378,18 +384,18 @@ Status Version::Get(const ReadOptions& options, const LookupKey& k,
|
||||
}
|
||||
};
|
||||
|
||||
stats->seek_file = nullptr;
|
||||
stats->seek_file_level = -1;
|
||||
|
||||
State state;
|
||||
state.s = Status::NotFound(Slice());
|
||||
state.stats = stats;
|
||||
state.last_file_read = nullptr;
|
||||
state.last_file_level = -1;
|
||||
|
||||
state.ikey = ikey;
|
||||
state.user_key = user_key;
|
||||
state.ucmp = ucmp;
|
||||
state.value = value;
|
||||
state.vset = vset_;
|
||||
|
||||
|
||||
ForEachOverlapping(user_key, ikey, &state, &State::Match);
|
||||
|
||||
return state.s;
|
||||
|
Loading…
Reference in New Issue
Block a user