|
3 | 3 | use snafu::{OptionExt, ResultExt, Snafu}; |
4 | 4 | use stackable_operator::{ |
5 | 5 | memory::{BinaryMultiple, MemoryQuantity}, |
6 | | - role_utils::{self, JvmArgumentOverrides}, |
| 6 | + v2::jvm_argument_overrides::JvmArgumentOverrides, |
7 | 7 | }; |
8 | 8 |
|
9 | 9 | use crate::crd::{ |
@@ -36,18 +36,14 @@ pub enum Error { |
36 | 36 | "Trino version {version} is not supported. Only specific versions are handled due to version specific JVM configuration generation" |
37 | 37 | ))] |
38 | 38 | TrinoVersionNotSupported { version: u16 }, |
39 | | - |
40 | | - #[snafu(display("failed to merge jvm argument overrides"))] |
41 | | - MergeJvmArgumentOverrides { source: role_utils::Error }, |
42 | 39 | } |
43 | 40 |
|
44 | 41 | // Currently works for all supported versions (as of 2024-09-04) but maybe be changed |
45 | 42 | // in the future depending on the role and version. |
46 | 43 | pub fn jvm_config( |
47 | 44 | product_version: u16, |
48 | 45 | merged_config: &v1alpha1::TrinoConfig, |
49 | | - role_jvm_argument_overrides: &JvmArgumentOverrides, |
50 | | - role_group_jvm_argument_overrides: &JvmArgumentOverrides, |
| 46 | + jvm_argument_overrides: &JvmArgumentOverrides, |
51 | 47 | ) -> Result<String, Error> { |
52 | 48 | let memory_unit = BinaryMultiple::Mebi; |
53 | 49 | let heap_size = MemoryQuantity::try_from( |
@@ -92,24 +88,10 @@ pub fn jvm_config( |
92 | 88 |
|
93 | 89 | jvm_args.push("# Arguments from jvmArgumentOverrides".to_owned()); |
94 | 90 |
|
95 | | - let operator_generated = JvmArgumentOverrides::new_with_only_additions(jvm_args); |
96 | | - |
97 | | - // Merge order mirrors `Role::get_merged_jvm_argument_overrides`: |
98 | | - // 1. operator-generated args are layered on top of the role-level overrides, |
99 | | - // 2. the role-group-level overrides are applied last. |
100 | | - // Note that this is not a purely additive merge, hence the unusual order. |
101 | | - let mut from_role = role_jvm_argument_overrides.clone(); |
102 | | - from_role |
103 | | - .try_merge(&operator_generated) |
104 | | - .context(MergeJvmArgumentOverridesSnafu)?; |
105 | | - let mut merged_jvm_argument_overrides = role_group_jvm_argument_overrides.clone(); |
106 | | - merged_jvm_argument_overrides |
107 | | - .try_merge(&from_role) |
108 | | - .context(MergeJvmArgumentOverridesSnafu)?; |
109 | | - |
110 | | - Ok(merged_jvm_argument_overrides |
111 | | - .effective_jvm_config_after_merging() |
112 | | - .join("\n")) |
| 91 | + // `jvm_argument_overrides` already carries the merged role + role-group overrides (merged by |
| 92 | + // `with_validated_config` in the validate step). Applying them to the operator-generated args |
| 93 | + // layers the overrides on top, in the order: operator-generated <- role <- role group. |
| 94 | + Ok(jvm_argument_overrides.apply_to(jvm_args).join("\n")) |
113 | 95 | } |
114 | 96 |
|
115 | 97 | /// For tests we don't actually look at the Trino version, and return a single "representative" |
@@ -269,29 +251,22 @@ mod tests { |
269 | 251 | let trino: v1alpha1::TrinoCluster = |
270 | 252 | serde_yaml::from_str(trino_cluster).expect("illegal test input"); |
271 | 253 |
|
272 | | - let role = TrinoRole::Coordinator; |
273 | | - let rolegroup_ref = role.rolegroup_ref(&trino, "default"); |
274 | | - let merged_config = trino.merged_config(&role, &rolegroup_ref, &[]).unwrap(); |
275 | | - let coordinators = trino.role(&role).unwrap(); |
276 | | - |
277 | | - let role_jvm_argument_overrides = coordinators |
278 | | - .config |
279 | | - .product_specific_common_config |
280 | | - .jvm_argument_overrides |
281 | | - .clone(); |
282 | | - let role_group_jvm_argument_overrides = coordinators.role_groups["default"] |
283 | | - .config |
284 | | - .product_specific_common_config |
285 | | - .jvm_argument_overrides |
286 | | - .clone(); |
| 254 | + // Merge + validate via the shared production path; the role + role-group |
| 255 | + // `jvmArgumentOverrides` end up merged in `product_specific_common_config`. |
| 256 | + let rg = crate::controller::validate::merged_role_group_config( |
| 257 | + &trino, |
| 258 | + &TrinoRole::Coordinator, |
| 259 | + "default", |
| 260 | + &[], |
| 261 | + ); |
287 | 262 |
|
288 | | - let product_version = trino.spec.image.product_version(); |
| 263 | + let product_version = |
| 264 | + u16::from_str(trino.spec.image.product_version()).expect("trino version as u16"); |
289 | 265 |
|
290 | 266 | jvm_config( |
291 | | - u16::from_str(product_version).expect("trino version as u16"), |
292 | | - &merged_config, |
293 | | - &role_jvm_argument_overrides, |
294 | | - &role_group_jvm_argument_overrides, |
| 267 | + product_version, |
| 268 | + &rg.config, |
| 269 | + &rg.product_specific_common_config.jvm_argument_overrides, |
295 | 270 | ) |
296 | 271 | .unwrap() |
297 | 272 | } |
|
0 commit comments