diff --git a/mini-lsm-starter/src/lsm_iterator.rs b/mini-lsm-starter/src/lsm_iterator.rs index 82842b2..909f2cb 100644 --- a/mini-lsm-starter/src/lsm_iterator.rs +++ b/mini-lsm-starter/src/lsm_iterator.rs @@ -46,11 +46,15 @@ impl StorageIterator for LsmIterator { /// `is_valid` should return false, and `next` should always return an error. pub struct FusedIterator { iter: I, + has_errored: bool, } impl FusedIterator { pub fn new(iter: I) -> Self { - Self { iter } + Self { + iter, + has_errored: false, + } } } diff --git a/mini-lsm/src/lsm_iterator.rs b/mini-lsm/src/lsm_iterator.rs index 044769c..448989d 100644 --- a/mini-lsm/src/lsm_iterator.rs +++ b/mini-lsm/src/lsm_iterator.rs @@ -106,14 +106,14 @@ impl StorageIterator for FusedIterator { } fn key(&self) -> Self::KeyType<'_> { - if self.has_errored || !self.iter.is_valid() { + if !self.is_valid() { panic!("invalid access to the underlying iterator"); } self.iter.key() } fn value(&self) -> &[u8] { - if self.has_errored || !self.iter.is_valid() { + if !self.is_valid() { panic!("invalid access to the underlying iterator"); } self.iter.value()