@@ -269,8 +269,18 @@ pub trait StorageUsageTracker: Send + Sync {
269269}
270270
271271pub trait StorageCallTracker : Send + Sync {
272- fn track_storage_ingress_size ( & self , component_path : ComponentPath , ingress_size : u64 ) ;
273- fn track_storage_egress_size ( & self , component_path : ComponentPath , egress_size : u64 ) ;
272+ fn track_storage_ingress_size (
273+ & self ,
274+ component_path : ComponentPath ,
275+ tag : String ,
276+ ingress_size : u64 ,
277+ ) ;
278+ fn track_storage_egress_size (
279+ & self ,
280+ component_path : ComponentPath ,
281+ tag : String ,
282+ egress_size : u64 ,
283+ ) ;
274284}
275285
276286struct IndependentStorageCallTracker {
@@ -288,21 +298,33 @@ impl IndependentStorageCallTracker {
288298}
289299
290300impl StorageCallTracker for IndependentStorageCallTracker {
291- fn track_storage_ingress_size ( & self , component_path : ComponentPath , ingress_size : u64 ) {
301+ fn track_storage_ingress_size (
302+ & self ,
303+ component_path : ComponentPath ,
304+ tag : String ,
305+ ingress_size : u64 ,
306+ ) {
292307 metrics:: storage:: log_storage_ingress_size ( ingress_size) ;
293308 self . usage_logger . record ( vec ! [ UsageEvent :: StorageBandwidth {
294309 id: self . execution_id. to_string( ) ,
295310 component_path: component_path. serialize( ) ,
311+ tag,
296312 ingress: ingress_size,
297313 egress: 0 ,
298314 } ] ) ;
299315 }
300316
301- fn track_storage_egress_size ( & self , component_path : ComponentPath , egress_size : u64 ) {
317+ fn track_storage_egress_size (
318+ & self ,
319+ component_path : ComponentPath ,
320+ tag : String ,
321+ egress_size : u64 ,
322+ ) {
302323 metrics:: storage:: log_storage_egress_size ( egress_size) ;
303324 self . usage_logger . record ( vec ! [ UsageEvent :: StorageBandwidth {
304325 id: self . execution_id. to_string( ) ,
305326 component_path: component_path. serialize( ) ,
327+ tag,
306328 ingress: 0 ,
307329 egress: egress_size,
308330 } ] ) ;
@@ -492,16 +514,30 @@ impl FunctionUsageTracker {
492514// For UDFs, we track storage at the per UDF level, no finer. So we can just
493515// aggregate over the entire UDF and not worry about sending usage events or
494516// creating unique execution ids.
517+ // Note: If we want finer-grained breakdown of file bandwidth, we can thread the
518+ // tag through FunctionUsageStats. For now we're just interested in the
519+ // breakdown of file bandwidth from functions vs external sources like snapshot
520+ // export/cloud backups.
495521impl StorageCallTracker for FunctionUsageTracker {
496- fn track_storage_ingress_size ( & self , component_path : ComponentPath , ingress_size : u64 ) {
522+ fn track_storage_ingress_size (
523+ & self ,
524+ component_path : ComponentPath ,
525+ _tag : String ,
526+ ingress_size : u64 ,
527+ ) {
497528 let mut state = self . state . lock ( ) ;
498529 metrics:: storage:: log_storage_ingress_size ( ingress_size) ;
499530 state
500531 . storage_ingress_size
501532 . mutate_entry_or_default ( component_path, |count| * count += ingress_size) ;
502533 }
503534
504- fn track_storage_egress_size ( & self , component_path : ComponentPath , egress_size : u64 ) {
535+ fn track_storage_egress_size (
536+ & self ,
537+ component_path : ComponentPath ,
538+ _tag : String ,
539+ egress_size : u64 ,
540+ ) {
505541 let mut state = self . state . lock ( ) ;
506542 metrics:: storage:: log_storage_egress_size ( egress_size) ;
507543 state
0 commit comments