@@ -208,7 +208,6 @@ const ENV_DIAL9_TASK_DUMP_IDLE_THRESHOLD_MS: &str = "DIAL9_TASK_DUMP_IDLE_THRESH
208208
209209const DEFAULT_ENABLED : bool = false ;
210210const DEFAULT_TRACE_DIR : & str = "/tmp/dial9-traces" ;
211- #[ cfg( feature = "worker-s3" ) ]
212211const DEFAULT_S3_PREFIX : & str = "dial9-traces" ;
213212const DEFAULT_MAX_DISK_USAGE_MB : u64 = 1024 ;
214213const DEFAULT_TASK_TRACKING_ENABLED : bool = true ;
@@ -278,7 +277,8 @@ struct ResolvedEnvConfig {
278277 // Optional config: None means do not set a runtime name.
279278 runtime_name : Option < String > ,
280279
281- // Optional integration: None means do not configure S3 upload.
280+ // Optional integration: None means do not configure S3 upload. When Some,
281+ // env-owned S3 defaults have already been applied.
282282 s3 : Option < ParsedS3Config > ,
283283
284284 cpu_profile_enabled : bool ,
@@ -362,7 +362,11 @@ fn resolve_env_config(parsed: ParsedEnvConfig) -> ResolvedEnvConfig {
362362 . task_tracking_enabled
363363 . unwrap_or ( DEFAULT_TASK_TRACKING_ENABLED ) ,
364364 runtime_name : parsed. runtime_name ,
365- s3 : parsed. s3 ,
365+ s3 : parsed. s3 . map ( |mut s3| {
366+ s3. prefix
367+ . get_or_insert_with ( || DEFAULT_S3_PREFIX . to_string ( ) ) ;
368+ s3
369+ } ) ,
366370 cpu_profile_enabled : parsed
367371 . cpu_profile_enabled
368372 . unwrap_or ( DEFAULT_CPU_PROFILE_ENABLED ) ,
@@ -543,11 +547,7 @@ fn build_s3_config(config: ParsedS3Config) -> crate::background_task::s3::S3Conf
543547 crate :: background_task:: s3:: S3Config :: builder ( )
544548 . bucket ( config. bucket )
545549 . service_name ( config. service_name . unwrap_or_else ( default_service_name) )
546- . prefix (
547- config
548- . prefix
549- . unwrap_or_else ( || DEFAULT_S3_PREFIX . to_string ( ) ) ,
550- )
550+ . maybe_prefix ( config. prefix )
551551 . build ( )
552552}
553553
@@ -1057,12 +1057,14 @@ mod tests {
10571057
10581058 #[ cfg( feature = "worker-s3" ) ]
10591059 #[ test]
1060- fn env_s3_config_defaults_service_name_when_bucket_is_set ( ) {
1061- let config = build_s3_config ( ParsedS3Config {
1062- bucket : "b" . to_string ( ) ,
1063- service_name : None ,
1064- prefix : None ,
1065- } ) ;
1060+ fn env_s3_config_defaults_service_name_and_prefix_when_bucket_is_set ( ) {
1061+ let resolved = resolve_env_config ( parse_env_config (
1062+ & FakeEnv :: default ( ) . with ( "DIAL9_S3_BUCKET" , "b" ) ,
1063+ ) ) ;
1064+ let s3 = resolved. s3 . expect ( "s3 config should be resolved" ) ;
1065+ assert_eq ! ( s3. prefix. as_deref( ) , Some ( DEFAULT_S3_PREFIX ) ) ;
1066+
1067+ let config = build_s3_config ( s3) ;
10661068
10671069 let metadata: HashMap < _ , _ > = config. as_metadata ( ) . collect ( ) ;
10681070 assert_eq ! ( metadata. get( "bucket" ) , Some ( & "b" ) ) ;
@@ -1071,7 +1073,7 @@ mod tests {
10711073 . get( "service_name" )
10721074 . is_some_and( |service_name| !service_name. is_empty( ) )
10731075 ) ;
1074- assert_eq ! ( metadata. get( "prefix" ) , Some ( & "dial9-traces" ) ) ;
1076+ assert_eq ! ( metadata. get( "prefix" ) , Some ( & DEFAULT_S3_PREFIX ) ) ;
10751077 }
10761078
10771079 #[ test]
0 commit comments