diff --git a/db/table_cache.cc b/db/table_cache.cc index c73168185..395951324 100644 --- a/db/table_cache.cc +++ b/db/table_cache.cc @@ -112,11 +112,11 @@ Iterator* TableCache::NewIterator(const ReadOptions& options, if (table_reader == nullptr) { s = FindTable(toptions, icomparator, file_meta.number, file_meta.file_size, &handle, nullptr, options.read_tier == kBlockCacheTier); + if (!s.ok()) { + return NewErrorIterator(s); + } table_reader = GetTableReaderFromHandle(handle); } - if (!s.ok()) { - return NewErrorIterator(s); - } Iterator* result = table_reader->NewIterator(options); if (handle != nullptr) { @@ -146,7 +146,9 @@ Status TableCache::Get(const ReadOptions& options, s = FindTable(storage_options_, internal_comparator, file_meta.number, file_meta.file_size, &handle, table_io, options.read_tier == kBlockCacheTier); - t = GetTableReaderFromHandle(handle); + if (s.ok()) { + t = GetTableReaderFromHandle(handle); + } } if (s.ok()) { s = t->Get(options, k, arg, saver, mark_key_may_exist); diff --git a/db/version_set.cc b/db/version_set.cc index e6ece7c3e..704f2a929 100644 --- a/db/version_set.cc +++ b/db/version_set.cc @@ -151,7 +151,7 @@ namespace { struct EncodedFileMetaData { uint64_t number; // file number uint64_t file_size; // file size - Cache::Handle* table_reader_handle; // cached table reader's handler + TableReader* table_reader; // cached table reader }; } // namespace @@ -199,7 +199,7 @@ class Version::LevelFileNumIterator : public Iterator { auto* file_meta = (*flist_)[index_]; current_value_.number = file_meta->number; current_value_.file_size = file_meta->file_size; - current_value_.table_reader_handle = file_meta->table_reader_handle; + current_value_.table_reader = file_meta->table_reader; return Slice(reinterpret_cast(¤t_value_), sizeof(EncodedFileMetaData)); } @@ -231,7 +231,7 @@ static Iterator* GetFileIterator(void* arg, const ReadOptions& options, const EncodedFileMetaData* encoded_meta = reinterpret_cast(file_value.data()); FileMetaData meta(encoded_meta->number, encoded_meta->file_size); - meta.table_reader_handle = encoded_meta->table_reader_handle; + meta.table_reader = encoded_meta->table_reader; return cache->NewIterator( options.prefix ? options_copy : options, soptions, icomparator, meta, nullptr /* don't need reference to table*/, for_compaction); @@ -257,7 +257,7 @@ bool Version::PrefixMayMatch(const ReadOptions& options, reinterpret_cast( level_iter->value().data()); FileMetaData meta(encoded_meta->number, encoded_meta->file_size); - meta.table_reader_handle = encoded_meta->table_reader_handle; + meta.table_reader = encoded_meta->table_reader; may_match = cfd_->table_cache()->PrefixMayMatch( options, cfd_->internal_comparator(), meta, internal_prefix, nullptr); }