diff --git a/crates/sui-core/src/execution_cache/writeback_cache.rs b/crates/sui-core/src/execution_cache/writeback_cache.rs index e74bbe2eb57688..dfaf897047928d 100644 --- a/crates/sui-core/src/execution_cache/writeback_cache.rs +++ b/crates/sui-core/src/execution_cache/writeback_cache.rs @@ -570,7 +570,32 @@ impl WritebackCache { ) -> CacheResult<(SequenceNumber, ObjectEntry)> { self.metrics .record_cache_request(request_type, "object_by_id"); - if let Some(entry) = self.cached.object_by_id_cache.get(object_id) { + let entry = self.cached.object_by_id_cache.get(object_id); + + if cfg!(debug_assertions) { + if let Some(entry) = &entry { + // check that cache is coherent + let highest = self + .dirty + .objects + .get(object_id) + .and_then(|entry| entry.get_highest().map(|(version, _)| *version)) + .or_else(|| { + let object = self.store.get_object(object_id).unwrap(); + object.map(|o| o.version()) + }); + + assert_eq!( + highest, + match &*entry.lock() { + LatestObjectCacheEntry::Object(version, _) => Some(*version), + LatestObjectCacheEntry::NonExistent => None, + } + ); + } + } + + if let Some(entry) = entry { let entry = entry.lock(); match &*entry { LatestObjectCacheEntry::Object(latest_version, latest_object) => {