diff --git a/dump/src/reader/v5/mod.rs b/dump/src/reader/v5/mod.rs index 71a3c87a7..46209d105 100644 --- a/dump/src/reader/v5/mod.rs +++ b/dump/src/reader/v5/mod.rs @@ -142,7 +142,10 @@ impl V5Reader { V5IndexReader::new( index.uid.clone(), &self.dump.path().join("indexes").join(index.index_meta.uuid.to_string()), - BufReader::new(File::open(&self.dump.path().join("updates").join("data.jsonl")).unwrap()), + &index.index_meta, + BufReader::new( + File::open(&self.dump.path().join("updates").join("data.jsonl")).unwrap(), + ), ) })) } @@ -191,31 +194,43 @@ pub struct V5IndexReader { } impl V5IndexReader { - pub fn new(name: String, path: &Path, tasks: BufReader) -> Result { + pub fn new( + name: String, + path: &Path, + index_metadata: &meta::IndexMeta, + tasks: BufReader, + ) -> Result { let meta = File::open(path.join("meta.json"))?; let meta: meta::DumpMeta = serde_json::from_reader(meta)?; - let mut index_tasks: Vec = vec![]; + let mut created_at = None; + let mut updated_at = None; for line in tasks.lines() { let task: Task = serde_json::from_str(&line?)?; - if task.index_uid().unwrap_or_default() == name { - index_tasks.push(task) + if task.index_uid().unwrap_or_default().to_string() == name { + if updated_at.is_none() { + updated_at = task.updated_at() + } + + if created_at.is_none() { + created_at = task.created_at() + } + + if task.id as usize == index_metadata.creation_task_id { + created_at = task.processed_at(); + + break; + } } } let metadata = IndexMetadata { uid: name, primary_key: meta.primary_key, - created_at: match index_tasks.first().unwrap().events.first() { - Some(TaskEvent::Created(ts)) => *ts, - _ => OffsetDateTime::now_utc(), - }, - updated_at: match index_tasks.last().unwrap().events.last() { - Some(TaskEvent::Created(ts)) => *ts, - _ => OffsetDateTime::now_utc(), - }, + created_at: created_at.unwrap_or_else(OffsetDateTime::now_utc), + updated_at: updated_at.unwrap_or_else(OffsetDateTime::now_utc), }; let ret = V5IndexReader {