@@ -83,17 +83,23 @@ impl SnapshotBuilder {
8383 /// - `engine`: Implementation of [`Engine`] apis.
8484 pub fn build ( self , engine : & dyn Engine ) -> DeltaResult < SnapshotRef > {
8585 let log_tail = self . log_tail . into_iter ( ) . map ( Into :: into) . collect ( ) ;
86- if let Some ( table_root) = self . table_root {
87- let operation_id = MetricId :: new ( ) ;
88- let reporter = engine. get_metrics_reporter ( ) ;
89-
90- if let Some ( ref r) = reporter {
91- r. report ( MetricEvent :: SnapshotStarted {
92- operation_id,
93- table_path : table_root. to_string ( ) ,
94- } ) ;
95- }
9686
87+ let operation_id = MetricId :: new ( ) ;
88+ let reporter = engine. get_metrics_reporter ( ) ;
89+
90+ let table_path = self . table_root . as_ref ( )
91+ . map ( |url| url. to_string ( ) )
92+ . or_else ( || self . existing_snapshot . as_ref ( ) . map ( |s| s. table_root ( ) . to_string ( ) ) )
93+ . unwrap_or_else ( || "unknown" . to_string ( ) ) ;
94+
95+ if let Some ( ref r) = reporter {
96+ r. report ( MetricEvent :: SnapshotStarted {
97+ operation_id,
98+ table_path,
99+ } ) ;
100+ }
101+
102+ if let Some ( table_root) = self . table_root {
97103 let timer = Timer :: new ( ) ;
98104 let log_segment_result = LogSegment :: for_snapshot (
99105 engine. storage_handler ( ) . as_ref ( ) ,
@@ -137,7 +143,28 @@ impl SnapshotBuilder {
137143 "SnapshotBuilder should have either table_root or existing_snapshot" ,
138144 )
139145 } ) ?;
140- Snapshot :: try_new_from ( existing_snapshot, log_tail, engine, self . version )
146+
147+ let timer = Timer :: new ( ) ;
148+ let result = Snapshot :: try_new_from ( existing_snapshot, log_tail, engine, self . version ) ;
149+
150+ match result {
151+ Ok ( snapshot) => {
152+ if let Some ( ref r) = reporter {
153+ r. report ( MetricEvent :: SnapshotCompleted {
154+ operation_id,
155+ version : snapshot. version ( ) ,
156+ total_duration : timer. elapsed ( ) ,
157+ } ) ;
158+ }
159+ Ok ( snapshot)
160+ }
161+ Err ( e) => {
162+ if let Some ( ref r) = reporter {
163+ r. report ( MetricEvent :: SnapshotFailed { operation_id } ) ;
164+ }
165+ Err ( e)
166+ }
167+ }
141168 }
142169 }
143170}
@@ -165,6 +192,7 @@ mod tests {
165192 let engine = Arc :: new ( DefaultEngine :: new (
166193 store. clone ( ) ,
167194 Arc :: new ( TokioBackgroundExecutor :: new ( ) ) ,
195+ None ,
168196 ) ) ;
169197 ( engine, store, table_root)
170198 }
0 commit comments