From d3610f46adacf4302032b940a459f31103b481d4 Mon Sep 17 00:00:00 2001 From: Frank McSherry Date: Wed, 4 Aug 2021 04:58:49 -0400 Subject: [PATCH] avoid resetting cursor on no-op seek --- src/trace/layers/ordered.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/trace/layers/ordered.rs b/src/trace/layers/ordered.rs index c6b6f1a1c..05c07f15f 100644 --- a/src/trace/layers/ordered.rs +++ b/src/trace/layers/ordered.rs @@ -262,8 +262,11 @@ where } } fn seek(&mut self, storage: &OrderedLayer, key: &Self::Key) { - self.pos += advance(&storage.keys[self.pos .. self.bounds.1], |k| k.lt(key)); - if self.valid(storage) { + let step = advance(&storage.keys[self.pos .. self.bounds.1], |k| k.lt(key)); + self.pos += step; + // Only reposition the child cursor if this cursor strictly advanced. + // If this cursor did not advance, we do not want to reset the child cursor. + if self.valid(storage) && step > 0 { self.child.reposition(&storage.vals, storage.offs[self.pos].try_into().unwrap(), storage.offs[self.pos + 1].try_into().unwrap()); } }