Skip to content

Commit aaa3181

Browse files
committed
refactor: drop vendored framework, use mergeable v2 JavaCommonConfig
1 parent 9e903b1 commit aaa3181

8 files changed

Lines changed: 105 additions & 271 deletions

File tree

Cargo.lock

Lines changed: 9 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

rust/operator-binary/src/config/jvm.rs

Lines changed: 39 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
use snafu::{OptionExt, ResultExt, Snafu};
22
use stackable_operator::{
33
memory::{BinaryMultiple, MemoryQuantity},
4-
role_utils::{self, JvmArgumentOverrides},
4+
v2::jvm_argument_overrides::JvmArgumentOverrides,
55
};
66

7-
use crate::crd::{
8-
AnyServiceConfig, CONFIG_DIR_NAME, HbaseRole, JVM_SECURITY_PROPERTIES_FILE, v1alpha1,
9-
};
7+
use crate::crd::{AnyServiceConfig, CONFIG_DIR_NAME, JVM_SECURITY_PROPERTIES_FILE, v1alpha1};
108

119
const JAVA_HEAP_FACTOR: f32 = 0.8;
1210

@@ -19,12 +17,6 @@ pub enum Error {
1917
InvalidMemoryConfig {
2018
source: stackable_operator::memory::Error,
2119
},
22-
23-
#[snafu(display("failed to merge jvm argument overrides"))]
24-
MergeJvmArgumentOverrides { source: role_utils::Error },
25-
26-
#[snafu(display("the HBase role [{role}] is missing from spec"))]
27-
MissingHbaseRole { role: String },
2820
}
2921

3022
// Applies to both the servers and the CLI
@@ -48,58 +40,28 @@ pub fn construct_global_jvm_args(kerberos_enabled: bool) -> String {
4840

4941
/// JVM arguments that are specifically for the role (server), so will *not* be used e.g. by CLI tools.
5042
/// Heap settings are excluded, as they go into `HBASE_HEAPSIZE`.
43+
///
44+
/// `merged_jvm_argument_overrides` is the role <- role-group merged [`JvmArgumentOverrides`]
45+
/// produced by
46+
/// [`with_validated_config`](stackable_operator::v2::role_utils::with_validated_config). The
47+
/// operator-generated arguments below form the base that the user overrides are applied on top of.
5148
pub fn construct_role_specific_non_heap_jvm_args(
5249
hbase: &v1alpha1::HbaseCluster,
53-
hbase_role: &HbaseRole,
54-
role_group: &str,
55-
) -> Result<String, Error> {
56-
let mut jvm_args = vec![format!(
50+
merged_jvm_argument_overrides: &JvmArgumentOverrides,
51+
) -> String {
52+
let mut operator_generated = vec![format!(
5753
"-Djava.security.properties={CONFIG_DIR_NAME}/{JVM_SECURITY_PROPERTIES_FILE}"
5854
)];
5955

6056
if hbase.has_kerberos_enabled() {
61-
jvm_args.push("-Djava.security.krb5.conf=/stackable/kerberos/krb5.conf".to_owned());
57+
operator_generated
58+
.push("-Djava.security.krb5.conf=/stackable/kerberos/krb5.conf".to_owned());
6259
}
6360

64-
let operator_generated = JvmArgumentOverrides::new_with_only_additions(jvm_args);
65-
66-
let merged = match hbase_role {
67-
HbaseRole::Master => hbase
68-
.spec
69-
.masters
70-
.as_ref()
71-
.context(MissingHbaseRoleSnafu {
72-
role: hbase_role.to_string(),
73-
})?
74-
.get_merged_jvm_argument_overrides(role_group, &operator_generated)
75-
.context(MergeJvmArgumentOverridesSnafu)?,
76-
HbaseRole::RegionServer => hbase
77-
.spec
78-
.region_servers
79-
.as_ref()
80-
.context(MissingHbaseRoleSnafu {
81-
role: hbase_role.to_string(),
82-
})?
83-
.get_merged_jvm_argument_overrides(role_group, &operator_generated)
84-
.context(MergeJvmArgumentOverridesSnafu)?,
85-
HbaseRole::RestServer => hbase
86-
.spec
87-
.rest_servers
88-
.as_ref()
89-
.context(MissingHbaseRoleSnafu {
90-
role: hbase_role.to_string(),
91-
})?
92-
.get_merged_jvm_argument_overrides(role_group, &operator_generated)
93-
.context(MergeJvmArgumentOverridesSnafu)?,
94-
};
95-
jvm_args = merged
96-
.effective_jvm_config_after_merging()
97-
// Sorry for the clone, that's how operator-rs is currently modelled :P
98-
.clone();
99-
61+
let mut jvm_args = merged_jvm_argument_overrides.apply_to(operator_generated);
10062
jvm_args.retain(|arg| !is_heap_jvm_argument(arg));
10163

102-
Ok(jvm_args.join(" "))
64+
jvm_args.join(" ")
10365
}
10466

10567
/// This will be put into `HBASE_HEAPSIZE`, which is just the heap size in megabytes (with the `m`
@@ -135,6 +97,8 @@ fn is_heap_jvm_argument(jvm_argument: &str) -> bool {
13597

13698
#[cfg(test)]
13799
mod tests {
100+
use stackable_operator::config::merge::Merge;
101+
138102
use super::*;
139103
use crate::crd::{HbaseRole, v1alpha1};
140104

@@ -160,11 +124,11 @@ mod tests {
160124
default:
161125
replicas: 1
162126
"#;
163-
let (hbase, hbase_role, merged_config, role_group) = construct_boilerplate(input);
127+
let (hbase, merged_config, merged_jvm_argument_overrides) = construct_boilerplate(input);
164128

165129
let global_jvm_args = construct_global_jvm_args(false);
166130
let role_specific_non_heap_jvm_args =
167-
construct_role_specific_non_heap_jvm_args(&hbase, &hbase_role, &role_group).unwrap();
131+
construct_role_specific_non_heap_jvm_args(&hbase, &merged_jvm_argument_overrides);
168132
let hbase_heapsize_env = construct_hbase_heapsize_env(&merged_config).unwrap();
169133

170134
assert_eq!(global_jvm_args, "");
@@ -216,11 +180,11 @@ mod tests {
216180
- -Xmx40000m # This has no effect!
217181
- -Dhttps.proxyPort=1234
218182
"#;
219-
let (hbase, hbase_role, merged_config, role_group) = construct_boilerplate(input);
183+
let (hbase, merged_config, merged_jvm_argument_overrides) = construct_boilerplate(input);
220184

221185
let global_jvm_args = construct_global_jvm_args(hbase.has_kerberos_enabled());
222186
let role_specific_non_heap_jvm_args =
223-
construct_role_specific_non_heap_jvm_args(&hbase, &hbase_role, &role_group).unwrap();
187+
construct_role_specific_non_heap_jvm_args(&hbase, &merged_jvm_argument_overrides);
224188
let hbase_heapsize_env = construct_hbase_heapsize_env(&merged_config).unwrap();
225189

226190
assert_eq!(
@@ -240,7 +204,11 @@ mod tests {
240204

241205
fn construct_boilerplate(
242206
hbase_cluster: &str,
243-
) -> (v1alpha1::HbaseCluster, HbaseRole, AnyServiceConfig, String) {
207+
) -> (
208+
v1alpha1::HbaseCluster,
209+
AnyServiceConfig,
210+
JvmArgumentOverrides,
211+
) {
244212
let hbase: v1alpha1::HbaseCluster =
245213
serde_yaml::from_str(hbase_cluster).expect("illegal test input");
246214

@@ -249,6 +217,19 @@ mod tests {
249217
.merged_config(&hbase_role, "default", "my-hdfs")
250218
.unwrap();
251219

252-
(hbase, hbase_role, merged_config, "default".to_owned())
220+
// Merge the role <- role-group JVM argument overrides the same way
221+
// `with_validated_config` does, so the tests exercise the real merge path.
222+
let role = hbase.spec.region_servers.as_ref().unwrap();
223+
let mut merged_common = role
224+
.role_groups
225+
.get("default")
226+
.unwrap()
227+
.config
228+
.product_specific_common_config
229+
.clone();
230+
merged_common.merge(&role.config.product_specific_common_config);
231+
let merged_jvm_argument_overrides = merged_common.jvm_argument_overrides;
232+
233+
(hbase, merged_config, merged_jvm_argument_overrides)
253234
}
254235
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ pub struct ValidatedRoleConfig {
146146
/// (role <- role group) `configOverrides`, `envOverrides` and `podOverrides`.
147147
///
148148
/// The merge and validation is performed by
149-
/// [`with_validated_config`](crate::framework::role_utils::with_validated_config); the
149+
/// [`with_validated_config`](stackable_operator::v2::role_utils::with_validated_config); the
150150
/// result is flattened into this struct and augmented with the pre-resolved
151151
/// `non_heap_jvm_args`. Carrying every override channel (and the JVM args) keeps the
152152
/// build step a pure function of [`ValidatedCluster`] that never has to reach back into

0 commit comments

Comments
 (0)