1
1
use std:: sync:: Arc ;
2
- use std:: time:: { Duration , Instant } ;
2
+ use std:: time:: { Duration , Instant , SystemTime } ;
3
3
4
4
use bytes:: Bytes ;
5
5
use chroma_config:: Configurable ;
@@ -214,6 +214,8 @@ async fn get_log_from_handle<'a>(
214
214
pub struct DirtyMarker {
215
215
collection_id : CollectionUuid ,
216
216
log_position : LogPosition ,
217
+ reinsert_count : u64 ,
218
+ initial_insertion_epoch_us : u64 ,
217
219
}
218
220
219
221
///////////////////////////////////////////// MarkDirty ////////////////////////////////////////////
@@ -227,9 +229,15 @@ pub struct MarkDirty {
227
229
#[ async_trait:: async_trait]
228
230
impl wal3:: MarkDirty for MarkDirty {
229
231
async fn mark_dirty ( & self , log_position : LogPosition ) -> Result < ( ) , wal3:: Error > {
232
+ let initial_insertion_epoch_us = SystemTime :: now ( )
233
+ . duration_since ( SystemTime :: UNIX_EPOCH )
234
+ . map_err ( |_| wal3:: Error :: Internal ) ?
235
+ . as_micros ( ) as u64 ;
230
236
let dirty_marker = DirtyMarker {
231
237
collection_id : self . collection_id ,
232
238
log_position,
239
+ reinsert_count : 0 ,
240
+ initial_insertion_epoch_us,
233
241
} ;
234
242
let dirty_marker_json = serde_json:: to_string ( & dirty_marker) . map_err ( |err| {
235
243
tracing:: error!( "Failed to serialize dirty marker: {}" , err) ;
0 commit comments