@@ -46,6 +46,7 @@ pub use crate::region::writer::{AlterContext, RegionWriter, RegionWriterRef, Wri
4646use crate :: schema:: compat:: CompatWrite ;
4747use crate :: snapshot:: SnapshotImpl ;
4848use crate :: sst:: AccessLayerRef ;
49+ use crate :: statistics_collector:: StatisticsCollectorRef ;
4950use crate :: version:: {
5051 Version , VersionControl , VersionControlRef , VersionEdit , INIT_COMMITTED_SEQUENCE ,
5152} ;
@@ -125,6 +126,10 @@ impl<S: LogStore> Region for RegionImpl<S> {
125126 async fn close ( & self ) -> Result < ( ) > {
126127 self . inner . close ( ) . await
127128 }
129+
130+ fn disk_usage_bytes ( & self ) -> u64 {
131+ self . inner . statistics_collector . disk_usage_bytes ( )
132+ }
128133}
129134
130135/// Storage related config for region.
@@ -190,6 +195,7 @@ impl<S: LogStore> RegionImpl<S> {
190195 let name = metadata. name ( ) . to_string ( ) ;
191196 let version_control = VersionControl :: with_version ( version) ;
192197 let wal = Wal :: new ( id, store_config. log_store ) ;
198+ let statistics_collector = StatisticsCollectorRef :: default ( ) ;
193199
194200 let inner = Arc :: new ( RegionInner {
195201 shared : Arc :: new ( SharedData {
@@ -201,13 +207,15 @@ impl<S: LogStore> RegionImpl<S> {
201207 store_config. memtable_builder ,
202208 store_config. engine_config . clone ( ) ,
203209 store_config. ttl ,
210+ statistics_collector. clone ( ) ,
204211 ) ) ,
205212 wal,
206213 flush_strategy : store_config. flush_strategy ,
207214 flush_scheduler : store_config. flush_scheduler ,
208215 compaction_scheduler : store_config. compaction_scheduler ,
209216 sst_layer : store_config. sst_layer ,
210217 manifest : store_config. manifest ,
218+ statistics_collector,
211219 } ) ;
212220
213221 RegionImpl { inner }
@@ -221,12 +229,14 @@ impl<S: LogStore> RegionImpl<S> {
221229 store_config : StoreConfig < S > ,
222230 _opts : & OpenOptions ,
223231 ) -> Result < Option < RegionImpl < S > > > {
232+ let statistics_collector = StatisticsCollectorRef :: default ( ) ;
224233 // Load version meta data from manifest.
225234 let ( version, mut recovered_metadata) = match Self :: recover_from_manifest (
226235 & store_config. manifest ,
227236 & store_config. memtable_builder ,
228237 & store_config. sst_layer ,
229238 & store_config. file_purger ,
239+ & statistics_collector,
230240 )
231241 . await ?
232242 {
@@ -281,6 +291,7 @@ impl<S: LogStore> RegionImpl<S> {
281291 store_config. memtable_builder ,
282292 store_config. engine_config . clone ( ) ,
283293 store_config. ttl ,
294+ statistics_collector. clone ( ) ,
284295 ) ) ;
285296 let writer_ctx = WriterContext {
286297 shared : & shared,
@@ -306,6 +317,7 @@ impl<S: LogStore> RegionImpl<S> {
306317 compaction_scheduler : store_config. compaction_scheduler ,
307318 sst_layer : store_config. sst_layer ,
308319 manifest : store_config. manifest ,
320+ statistics_collector,
309321 } ) ;
310322
311323 Ok ( Some ( RegionImpl { inner } ) )
@@ -321,6 +333,7 @@ impl<S: LogStore> RegionImpl<S> {
321333 memtable_builder : & MemtableBuilderRef ,
322334 sst_layer : & AccessLayerRef ,
323335 file_purger : & FilePurgerRef ,
336+ statistics_collector : & StatisticsCollectorRef ,
324337 ) -> Result < ( Option < Version > , RecoveredMetadataMap ) > {
325338 let ( start, end) = Self :: manifest_scan_range ( ) ;
326339 let mut iter = manifest. scan ( start, end) . await ?;
@@ -352,7 +365,12 @@ impl<S: LogStore> RegionImpl<S> {
352365 file_purger. clone ( ) ,
353366 ) ) ;
354367 for ( manifest_version, action) in actions. drain ( ..) {
355- version = Self :: replay_edit ( manifest_version, action, version) ;
368+ version = Self :: replay_edit (
369+ manifest_version,
370+ action,
371+ version,
372+ statistics_collector,
373+ ) ;
356374 }
357375 }
358376 ( RegionMetaAction :: Change ( c) , Some ( v) ) => {
@@ -365,7 +383,12 @@ impl<S: LogStore> RegionImpl<S> {
365383 version = None ;
366384 }
367385 ( action, Some ( v) ) => {
368- version = Self :: replay_edit ( manifest_version, action, Some ( v) ) ;
386+ version = Self :: replay_edit (
387+ manifest_version,
388+ action,
389+ Some ( v) ,
390+ statistics_collector,
391+ ) ;
369392 }
370393 }
371394 }
@@ -391,6 +414,7 @@ impl<S: LogStore> RegionImpl<S> {
391414 manifest_version : ManifestVersion ,
392415 action : RegionMetaAction ,
393416 version : Option < Version > ,
417+ statistics_collector : & StatisticsCollectorRef ,
394418 ) -> Option < Version > {
395419 if let RegionMetaAction :: Edit ( e) = action {
396420 let edit = VersionEdit {
@@ -400,6 +424,10 @@ impl<S: LogStore> RegionImpl<S> {
400424 manifest_version,
401425 max_memtable_id : None ,
402426 } ;
427+ statistics_collector
428+ . increase_disk_usage_bytes ( edit. files_to_add . iter ( ) . map ( |f| f. file_size ) . sum ( ) ) ;
429+ statistics_collector
430+ . descrease_disk_usage_bytes ( edit. files_to_remove . iter ( ) . map ( |f| f. file_size ) . sum ( ) ) ;
403431 version. map ( |mut v| {
404432 v. apply_edit ( edit) ;
405433 v
@@ -483,6 +511,7 @@ struct RegionInner<S: LogStore> {
483511 compaction_scheduler : CompactionSchedulerRef < S > ,
484512 sst_layer : AccessLayerRef ,
485513 manifest : RegionManifest ,
514+ statistics_collector : StatisticsCollectorRef ,
486515}
487516
488517impl < S : LogStore > RegionInner < S > {
0 commit comments