Skip to content

Commit 10d5141

Browse files
committed
metrics port on pods/service configurable
1 parent fa8597e commit 10d5141

File tree

2 files changed

+37
-11
lines changed

2 files changed

+37
-11
lines changed

rust/operator-binary/src/crd/mod.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,7 @@ pub const OPERATOR_NAME: &str = "zookeeper.stackable.tech";
4747
pub const ZOOKEEPER_PROPERTIES_FILE: &str = "zoo.cfg";
4848
pub const JVM_SECURITY_PROPERTIES_FILE: &str = "security.properties";
4949

50-
pub const METRICS_PROVIDER_CLASS_NAME: &str =
51-
"org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider";
50+
pub const METRICS_PROVIDER_HTTP_PORT_KEY: &str = "metricsProvider.httpPort";
5251
pub const METRICS_PROVIDER_HTTP_PORT: u16 = 9505;
5352

5453
pub const STACKABLE_DATA_DIR: &str = "/stackable/data";
@@ -373,8 +372,6 @@ impl v1alpha1::ZookeeperConfig {
373372
pub const DATA_DIR: &'static str = "dataDir";
374373
const DEFAULT_SECRET_LIFETIME: Duration = Duration::from_days_unchecked(1);
375374
pub const INIT_LIMIT: &'static str = "initLimit";
376-
const METRICS_PROVIDER_CLASS_NAME: &'static str = "metricsProvider.className";
377-
const METRICS_PROVIDER_HTTP_PORT: &'static str = "metricsProvider.httpPort";
378375
pub const MYID_OFFSET: &'static str = "MYID_OFFSET";
379376
pub const SYNC_LIMIT: &'static str = "syncLimit";
380377
pub const TICK_TIME: &'static str = "tickTime";
@@ -473,11 +470,13 @@ impl Configuration for v1alpha1::ZookeeperConfigFragment {
473470
Some(STACKABLE_DATA_DIR.to_string()),
474471
);
475472
result.insert(
476-
v1alpha1::ZookeeperConfig::METRICS_PROVIDER_CLASS_NAME.to_string(),
477-
Some(METRICS_PROVIDER_CLASS_NAME.to_string()),
473+
"metricsProvider.className".to_string(),
474+
Some(
475+
"org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider".to_string(),
476+
),
478477
);
479478
result.insert(
480-
v1alpha1::ZookeeperConfig::METRICS_PROVIDER_HTTP_PORT.to_string(),
479+
METRICS_PROVIDER_HTTP_PORT_KEY.to_string(),
481480
Some(METRICS_PROVIDER_HTTP_PORT.to_string()),
482481
);
483482
}

rust/operator-binary/src/zk_controller.rs

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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)?;
@@ -712,7 +715,7 @@ fn build_server_rolegroup_service(
712715
},
713716
ServicePort {
714717
name: Some("metrics".to_string()),
715-
port: 9505,
718+
port: metrics_port_from_rolegroup_config(rolegroup_config).into(),
716719
protocol: Some("TCP".to_string()),
717720
..ServicePort::default()
718721
},
@@ -897,7 +900,10 @@ fn build_server_rolegroup_statefulset(
897900
.add_container_port("zk", zookeeper_security.client_port().into())
898901
.add_container_port("zk-leader", 2888)
899902
.add_container_port("zk-election", 3888)
900-
.add_container_port("metrics", 9505)
903+
.add_container_port(
904+
"metrics",
905+
metrics_port_from_rolegroup_config(server_config).into(),
906+
)
901907
.add_volume_mount("data", STACKABLE_DATA_DIR)
902908
.context(AddVolumeMountSnafu)?
903909
.add_volume_mount("config", STACKABLE_CONFIG_DIR)
@@ -1063,6 +1069,27 @@ fn build_server_rolegroup_statefulset(
10631069
})
10641070
}
10651071

1072+
fn metrics_port_from_rolegroup_config(
1073+
rolegroup_config: &HashMap<PropertyNameKind, BTreeMap<String, String>>,
1074+
) -> u16 {
1075+
let metrics_port = rolegroup_config
1076+
.get(&PropertyNameKind::File(
1077+
ZOOKEEPER_PROPERTIES_FILE.to_string(),
1078+
))
1079+
.expect("{ZOOKEEPER_PROPERTIES_FILE} is present")
1080+
.get(METRICS_PROVIDER_HTTP_PORT_KEY)
1081+
.expect("{METRICS_PROVIDER_HTTP_PORT_KEY} is set");
1082+
1083+
match u16::from_str(metrics_port) {
1084+
Ok(port) => port,
1085+
Err(err) => {
1086+
tracing::error!("{err}");
1087+
tracing::info!("Defaulting to using {METRICS_PROVIDER_HTTP_PORT} as metrics port.");
1088+
METRICS_PROVIDER_HTTP_PORT
1089+
}
1090+
}
1091+
}
1092+
10661093
pub fn error_policy(
10671094
_obj: Arc<DeserializeGuard<v1alpha1::ZookeeperCluster>>,
10681095
error: &Error,

0 commit comments

Comments
 (0)