{"record":{"id":"36945fb1ebfbacd7","repo":"clockworklabs/SpacetimeDB","slug":"notfound","errorCode":"NotFound","errorMessage":"segment {offset} does not exist","messagePattern":"segment (.+?) does not exist","errorType":"exception","errorClass":"io::Error","httpStatus":null,"severity":"error","filePath":"crates/commitlog/src/repo/mem.rs","lineNumber":85,"sourceCode":"                        io::ErrorKind::AlreadyExists,\n                        format!(\"segment {offset} already exists\"),\n                    ));\n                }\n            }\n            btree_map::Entry::Vacant(entry) => {\n                let storage = entry.insert(Arc::new(RwLock::new(Storage::new())));\n                Segment::from_shared(self.space.clone(), storage.clone())\n            }\n        };\n        header.write(&mut segment)?;\n\n        Ok(segment)\n    }\n\n    fn open_segment_writer(&self, offset: u64) -> io::Result<Self::SegmentWriter> {\n        let inner = self.segments.read().unwrap();\n        let Some(buf) = inner.get(&offset) else {\n            return Err(io::Error::new(\n                io::ErrorKind::NotFound,\n                format!(\"segment {offset} does not exist\"),\n            ));\n        };\n        Ok(Segment::from_shared(self.space.clone(), buf.clone()))\n    }\n\n    fn open_segment_reader(&self, offset: u64) -> io::Result<Self::SegmentReader> {\n        self.open_segment_writer(offset).map(Into::into)\n    }\n\n    fn remove_segment(&self, offset: u64) -> io::Result<()> {\n        let mut inner = self.segments.write().unwrap();\n        if inner.remove(&offset).is_none() {\n            return Err(io::Error::new(\n                io::ErrorKind::NotFound,\n                format!(\"segment {offset} does not exist\"),\n            ));","sourceCodeStart":67,"sourceCodeEnd":103,"githubUrl":"https://github.com/clockworklabs/SpacetimeDB/blob/524b4487d949b61a07d4f39c862d1290259dfd20/crates/commitlog/src/repo/mem.rs#L67-L103","documentation":"open_segment_writer on the in-memory repo found no segment registered under this offset (NotFound). The Memory repo only knows segments that were explicitly created in (or carried over by) its map - there is no filesystem to discover files from.","triggerScenarios":"Opening a writer for an offset that was never created or that remove_segment already removed; deriving offsets by hand (e.g. guessing base offsets) instead of asking the repo which segments exist.","commonSituations":"Test helpers that assume a segment exists; code ported from the FS repo where the file happened to exist on disk; cleanup code racing writers.","solutions":["Let the Commitlog create/roll segments itself, or create the segment first via create_segment_writer","Use resume_segment_writer when reopening an offset that should exist","Derive offsets from existing_segment_offsets() instead of guessing"],"exampleFix":"// before\nlet writer = repo.open_segment_writer(offset)?; // NotFound\n\n// after\nlet writer = match repo.open_segment_writer(offset) {\n    Ok(w) => w,\n    Err(e) if e.kind() == io::ErrorKind::NotFound => {\n        repo::create_segment_writer(&repo, offset, header)?\n    }\n    Err(e) => return Err(e),\n};","handlingStrategy":"validation","validationCode":"// ask the repo which segments exist before opening one\nlet known = log.existing_segment_offsets()?;\nif !known.contains(&offset) {\n    return Err(io::Error::new(io::ErrorKind::NotFound, format!(\"segment {offset} not present\")));\n}","typeGuard":"fn is_mem_segment_missing(e: &io::Error) -> bool {\n    e.kind() == io::ErrorKind::NotFound\n        && e.to_string().contains(\"segment\")\n        && e.to_string().contains(\"does not exist\")\n}","tryCatchPattern":"let writer = match repo.open_segment_writer(offset) {\n    Ok(w) => w,\n    Err(e) if is_mem_segment_missing(&e) => repo::create_segment_writer(&repo, offset, header)?,\n    Err(e) => return Err(e),\n};","preventionTips":["Never guess segment offsets; derive them from existing_segment_offsets() or the log's own rolling","Use resume_segment_writer for reopen flows instead of open-after-delete assumptions"],"tags":["rust","commitlog","memory-repo","segment","not-found"],"backgroundTag":"segment-not-found","analyzedSha":"524b4487d949b61a07d4f39c862d1290259dfd20","analyzedAt":"2026-08-16T23:58:54.611Z","schemaVersion":2},"datasetVersion":"2026-08-17T04:17:16.089Z"}