@@ -72,8 +72,9 @@ use crate::{
7272 config:: jvm:: { construct_non_heap_jvm_args, construct_zk_server_heap_env} ,
7373 crd:: {
7474 DOCKER_IMAGE_BASE_NAME , JVM_SECURITY_PROPERTIES_FILE , MAX_PREPARE_LOG_FILE_SIZE ,
75- MAX_ZK_LOG_FILES_SIZE , STACKABLE_CONFIG_DIR , STACKABLE_DATA_DIR , STACKABLE_LOG_CONFIG_DIR ,
76- STACKABLE_LOG_DIR , STACKABLE_RW_CONFIG_DIR , ZOOKEEPER_PROPERTIES_FILE , ZookeeperRole ,
75+ MAX_ZK_LOG_FILES_SIZE , METRICS_PROVIDER_HTTP_PORT , METRICS_PROVIDER_HTTP_PORT_KEY ,
76+ STACKABLE_CONFIG_DIR , STACKABLE_DATA_DIR , STACKABLE_LOG_CONFIG_DIR , STACKABLE_LOG_DIR ,
77+ STACKABLE_RW_CONFIG_DIR , ZOOKEEPER_PROPERTIES_FILE , ZookeeperRole ,
7778 security:: { self , ZookeeperSecurity } ,
7879 v1alpha1,
7980 } ,
@@ -415,6 +416,7 @@ pub async fn reconcile_zk(
415416 & rolegroup,
416417 & resolved_product_image,
417418 & zookeeper_security,
419+ rolegroup_config,
418420 ) ?;
419421 let rg_configmap = build_server_rolegroup_config_map (
420422 zk,
@@ -675,6 +677,7 @@ fn build_server_rolegroup_service(
675677 rolegroup : & RoleGroupRef < v1alpha1:: ZookeeperCluster > ,
676678 resolved_product_image : & ResolvedProductImage ,
677679 zookeeper_security : & ZookeeperSecurity ,
680+ rolegroup_config : & HashMap < PropertyNameKind , BTreeMap < String , String > > ,
678681) -> Result < Service > {
679682 let prometheus_label =
680683 Label :: try_from ( ( "prometheus.io/scrape" , "true" ) ) . context ( BuildLabelSnafu ) ?;
@@ -716,6 +719,12 @@ fn build_server_rolegroup_service(
716719 protocol: Some ( "TCP" . to_string( ) ) ,
717720 ..ServicePort :: default ( )
718721 } ,
722+ ServicePort {
723+ name: Some ( "native-metrics" . to_string( ) ) ,
724+ port: metrics_port_from_rolegroup_config( rolegroup_config) . into( ) ,
725+ protocol: Some ( "TCP" . to_string( ) ) ,
726+ ..ServicePort :: default ( )
727+ } ,
719728 ] ) ,
720729 selector : Some ( service_selector_labels. into ( ) ) ,
721730 publish_not_ready_addresses : Some ( true ) ,
@@ -898,6 +907,10 @@ fn build_server_rolegroup_statefulset(
898907 . add_container_port ( "zk-leader" , 2888 )
899908 . add_container_port ( "zk-election" , 3888 )
900909 . add_container_port ( "metrics" , 9505 )
910+ . add_container_port (
911+ "native-metrics" ,
912+ metrics_port_from_rolegroup_config ( server_config) . into ( ) ,
913+ )
901914 . add_volume_mount ( "data" , STACKABLE_DATA_DIR )
902915 . context ( AddVolumeMountSnafu ) ?
903916 . add_volume_mount ( "config" , STACKABLE_CONFIG_DIR )
@@ -1063,6 +1076,27 @@ fn build_server_rolegroup_statefulset(
10631076 } )
10641077}
10651078
1079+ fn metrics_port_from_rolegroup_config (
1080+ rolegroup_config : & HashMap < PropertyNameKind , BTreeMap < String , String > > ,
1081+ ) -> u16 {
1082+ let metrics_port = rolegroup_config
1083+ . get ( & PropertyNameKind :: File (
1084+ ZOOKEEPER_PROPERTIES_FILE . to_string ( ) ,
1085+ ) )
1086+ . expect ( "{ZOOKEEPER_PROPERTIES_FILE} is present" )
1087+ . get ( METRICS_PROVIDER_HTTP_PORT_KEY )
1088+ . expect ( "{METRICS_PROVIDER_HTTP_PORT_KEY} is set" ) ;
1089+
1090+ match u16:: from_str ( metrics_port) {
1091+ Ok ( port) => port,
1092+ Err ( err) => {
1093+ tracing:: error!( "{err}" ) ;
1094+ tracing:: info!( "Defaulting to using {METRICS_PROVIDER_HTTP_PORT} as metrics port." ) ;
1095+ METRICS_PROVIDER_HTTP_PORT
1096+ }
1097+ }
1098+ }
1099+
10661100pub fn error_policy (
10671101 _obj : Arc < DeserializeGuard < v1alpha1:: ZookeeperCluster > > ,
10681102 error : & Error ,
0 commit comments