Unverified Commit d9761046 authored by Wu Jiayu's avatar Wu Jiayu Committed by GitHub

Fix blob file iterator (#45)

* fix iterator

* fix

* fmt
parent cff9f517
...@@ -96,7 +96,7 @@ void BlobFileIterator::GetBlobRecord() { ...@@ -96,7 +96,7 @@ void BlobFileIterator::GetBlobRecord() {
Slice record_slice; Slice record_slice;
auto record_size = decoder_.GetRecordSize(); auto record_size = decoder_.GetRecordSize();
buffer_.reserve(record_size); buffer_.resize(record_size);
status_ = file_->Read(iterate_offset_ + kBlobHeaderSize, record_size, status_ = file_->Read(iterate_offset_ + kBlobHeaderSize, record_size,
&record_slice, buffer_.data()); &record_slice, buffer_.data());
if (status_.ok()) { if (status_.ok()) {
...@@ -167,11 +167,15 @@ void BlobFileMergeIterator::SeekToFirst() { ...@@ -167,11 +167,15 @@ void BlobFileMergeIterator::SeekToFirst() {
} }
void BlobFileMergeIterator::Next() { void BlobFileMergeIterator::Next() {
assert(current_ != nullptr); assert(Valid());
current_->Next(); current_->Next();
if (current_->status().ok() && current_->Valid()) min_heap_.push(current_); if (current_->status().ok() && current_->Valid()) min_heap_.push(current_);
current_ = min_heap_.top(); if (!min_heap_.empty()) {
min_heap_.pop(); current_ = min_heap_.top();
min_heap_.pop();
} else {
current_ = nullptr;
}
} }
Slice BlobFileMergeIterator::key() const { Slice BlobFileMergeIterator::key() const {
......
...@@ -209,13 +209,15 @@ TEST_F(BlobFileIteratorTest, MergeIterator) { ...@@ -209,13 +209,15 @@ TEST_F(BlobFileIteratorTest, MergeIterator) {
BlobFileMergeIterator iter(std::move(iters)); BlobFileMergeIterator iter(std::move(iters));
iter.SeekToFirst(); iter.SeekToFirst();
for (int i = 1; i < kMaxKeyNum; i++, iter.Next()) { int i = 1;
for (; iter.Valid(); i++, iter.Next()) {
ASSERT_OK(iter.status()); ASSERT_OK(iter.status());
ASSERT_TRUE(iter.Valid()); ASSERT_TRUE(iter.Valid());
ASSERT_EQ(iter.key(), GenKey(i)); ASSERT_EQ(iter.key(), GenKey(i));
ASSERT_EQ(iter.value(), GenValue(i)); ASSERT_EQ(iter.value(), GenValue(i));
ASSERT_EQ(iter.GetBlobIndex().blob_handle, handles[i]); ASSERT_EQ(iter.GetBlobIndex().blob_handle, handles[i]);
} }
ASSERT_EQ(i, kMaxKeyNum);
} }
} // namespace titandb } // namespace titandb
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment