@@ -57,6 +57,14 @@ stackable_operator::constant!(HDFS_DISCOVERY_VOLUME_NAME: VolumeName = "hdfs-dis
5757stackable_operator:: constant!( LOG_CONFIG_VOLUME_NAME : VolumeName = "log-config" ) ;
5858stackable_operator:: constant!( LOG_VOLUME_NAME : VolumeName = "log" ) ;
5959
60+ // Environment variable names set on the HBase container. Declared as typed constants (instead of
61+ // `EnvVarName::from_str_unsafe` at the use site) and validated by `env_var_names_are_valid`.
62+ stackable_operator:: constant!( HBASE_CONF_DIR_ENV : EnvVarName = "HBASE_CONF_DIR" ) ;
63+ stackable_operator:: constant!( HADOOP_CONF_DIR_ENV : EnvVarName = "HADOOP_CONF_DIR" ) ;
64+ stackable_operator:: constant!( REGION_MOVER_OPTS_ENV : EnvVarName = "REGION_MOVER_OPTS" ) ;
65+ stackable_operator:: constant!( RUN_REGION_MOVER_ENV : EnvVarName = "RUN_REGION_MOVER" ) ;
66+ stackable_operator:: constant!( STACKABLE_LOG_DIR_ENV : EnvVarName = "STACKABLE_LOG_DIR" ) ;
67+
6068pub static CONTAINERDEBUG_LOG_DIRECTORY : std:: sync:: LazyLock < String > =
6169 std:: sync:: LazyLock :: new ( || format ! ( "{STACKABLE_LOG_DIR}/containerdebug" ) ) ;
6270
@@ -148,29 +156,17 @@ pub fn build_rolegroup_statefulset(
148156 } ;
149157
150158 let merged_env = EnvVarSet :: new ( )
151- . with_value (
152- & EnvVarName :: from_str_unsafe ( "HBASE_CONF_DIR" ) ,
153- CONFIG_DIR_NAME ,
154- )
159+ . with_value ( & HBASE_CONF_DIR_ENV , CONFIG_DIR_NAME )
155160 // required by phoenix (for cases where Kerberos is enabled): see https://issues.apache.org/jira/browse/PHOENIX-2369
156- . with_value (
157- & EnvVarName :: from_str_unsafe ( "HADOOP_CONF_DIR" ) ,
158- CONFIG_DIR_NAME ,
159- )
161+ . with_value ( & HADOOP_CONF_DIR_ENV , CONFIG_DIR_NAME )
160162 . merge ( validated_rg_config. env_overrides . clone ( ) )
161163 // These env vars are set for all roles to avoid bash's "unbound variable" errors.
164+ . with_value ( & REGION_MOVER_OPTS_ENV , merged_config. region_mover_args ( ) )
162165 . with_value (
163- & EnvVarName :: from_str_unsafe ( "REGION_MOVER_OPTS" ) ,
164- merged_config. region_mover_args ( ) ,
165- )
166- . with_value (
167- & EnvVarName :: from_str_unsafe ( "RUN_REGION_MOVER" ) ,
166+ & RUN_REGION_MOVER_ENV ,
168167 merged_config. run_region_mover ( ) . to_string ( ) ,
169168 )
170- . with_value (
171- & EnvVarName :: from_str_unsafe ( "STACKABLE_LOG_DIR" ) ,
172- STACKABLE_LOG_DIR ,
173- ) ;
169+ . with_value ( & STACKABLE_LOG_DIR_ENV , STACKABLE_LOG_DIR ) ;
174170
175171 let role_name = hbase_role. cli_role_name ( ) ;
176172 let mut hbase_container = new_container_builder ( & HBASE_CONTAINER_NAME ) ;
@@ -353,3 +349,20 @@ fn command() -> Vec<String> {
353349 "-c" . to_string( ) ,
354350 ]
355351}
352+
353+ #[ cfg( test) ]
354+ mod tests {
355+ use super :: * ;
356+
357+ /// The env-var-name constants are built with `EnvVarName::from_str`, which panics on an invalid
358+ /// name. This test forces every constant to be evaluated so a typo is caught at test time rather
359+ /// than during reconciliation.
360+ #[ test]
361+ fn env_var_names_are_valid ( ) {
362+ assert_eq ! ( HBASE_CONF_DIR_ENV . to_string( ) , "HBASE_CONF_DIR" ) ;
363+ assert_eq ! ( HADOOP_CONF_DIR_ENV . to_string( ) , "HADOOP_CONF_DIR" ) ;
364+ assert_eq ! ( REGION_MOVER_OPTS_ENV . to_string( ) , "REGION_MOVER_OPTS" ) ;
365+ assert_eq ! ( RUN_REGION_MOVER_ENV . to_string( ) , "RUN_REGION_MOVER" ) ;
366+ assert_eq ! ( STACKABLE_LOG_DIR_ENV . to_string( ) , "STACKABLE_LOG_DIR" ) ;
367+ }
368+ }
0 commit comments