Skip to content

Commit c647423

Browse files
committed
refactor: remove ownerrefs from builder functions
1 parent 0055c8a commit c647423

6 files changed

Lines changed: 171 additions & 47 deletions

File tree

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

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use stackable_operator::{
88

99
use crate::crd::{
1010
METRICS_PORT, RW_CONFIG_DIR_NAME, STACKABLE_CLIENT_TLS_DIR, STACKABLE_TLS_STORE_PASSWORD,
11-
TrinoRoleType, v1alpha1,
11+
v1alpha1,
1212
};
1313

1414
const JVM_SECURITY_PROPERTIES: &str = "security.properties";
@@ -46,8 +46,8 @@ pub enum Error {
4646
pub fn jvm_config(
4747
product_version: u16,
4848
merged_config: &v1alpha1::TrinoConfig,
49-
role: &TrinoRoleType,
50-
role_group: &str,
49+
role_jvm_argument_overrides: &JvmArgumentOverrides,
50+
role_group_jvm_argument_overrides: &JvmArgumentOverrides,
5151
) -> Result<String, Error> {
5252
let memory_unit = BinaryMultiple::Mebi;
5353
let heap_size = MemoryQuantity::try_from(
@@ -93,8 +93,18 @@ pub fn jvm_config(
9393
jvm_args.push("# Arguments from jvmArgumentOverrides".to_owned());
9494

9595
let operator_generated = JvmArgumentOverrides::new_with_only_additions(jvm_args);
96-
let merged_jvm_argument_overrides = role
97-
.get_merged_jvm_argument_overrides(role_group, &operator_generated)
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)
98108
.context(MergeJvmArgumentOverridesSnafu)?;
99109

100110
Ok(merged_jvm_argument_overrides
@@ -264,13 +274,24 @@ mod tests {
264274
let merged_config = trino.merged_config(&role, &rolegroup_ref, &[]).unwrap();
265275
let coordinators = trino.role(&role).unwrap();
266276

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();
287+
267288
let product_version = trino.spec.image.product_version();
268289

269290
jvm_config(
270291
u16::from_str(product_version).expect("trino version as u16"),
271292
&merged_config,
272-
&coordinators,
273-
"default",
293+
&role_jvm_argument_overrides,
294+
&role_group_jvm_argument_overrides,
274295
)
275296
.unwrap()
276297
}

rust/operator-binary/src/controller.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,12 @@ pub async fn reconcile_trino(
307307
let validated_cluster =
308308
validate::validate(trino, &dereferenced_objects, &ctx.operator_environment)
309309
.context(ValidateClusterSnafu)?;
310+
tracing::debug!(
311+
trino.name = %validated_cluster.name,
312+
trino.namespace = %validated_cluster.namespace,
313+
trino.uid = %validated_cluster.uid,
314+
"Validated TrinoCluster"
315+
);
310316

311317
let mut cluster_resources = ClusterResources::new(
312318
APP_NAME,
@@ -403,7 +409,6 @@ pub async fn reconcile_trino(
403409
&role_group_ref,
404410
&client.kubernetes_cluster_info,
405411
&role_group_service_recommended_labels,
406-
trino,
407412
)
408413
.with_context(|_| BuildRoleGroupConfigMapSnafu {
409414
rolegroup: role_group_ref.clone(),
@@ -1337,7 +1342,7 @@ mod tests {
13371342
serde_yaml::with::singleton_map_recursive::deserialize(deserializer)
13381343
.expect("invalid test input");
13391344
trino.metadata.namespace = Some("default".to_owned());
1340-
trino.metadata.uid = Some("42".to_owned());
1345+
trino.metadata.uid = Some("e6ac237d-a6d4-43a1-8135-f36506110912".to_owned());
13411346

13421347
let cluster_info = KubernetesClusterInfo {
13431348
cluster_domain: DomainName::try_from("cluster.local").unwrap(),
@@ -1385,7 +1390,6 @@ mod tests {
13851390
});
13861391

13871392
let derefs = DereferencedObjects {
1388-
namespace: "default".parse().unwrap(),
13891393
resolved_authentication_classes: Vec::new(),
13901394
catalog_definitions: Vec::new(),
13911395
catalogs: Vec::new(),
@@ -1422,7 +1426,6 @@ mod tests {
14221426
&rolegroup_ref,
14231427
&cluster_info,
14241428
&recommended_labels,
1425-
&trino,
14261429
)
14271430
.expect("build_rolegroup_config_map should succeed")
14281431
}
@@ -1598,7 +1601,7 @@ mod tests {
15981601
metadata:
15991602
name: trino
16001603
namespace: default
1601-
uid: "42"
1604+
uid: "e6ac237d-a6d4-43a1-8135-f36506110912"
16021605
spec:
16031606
image:
16041607
productVersion: "479"
@@ -1626,7 +1629,6 @@ mod tests {
16261629
serde_yaml::with::singleton_map_recursive::deserialize(deserializer).unwrap();
16271630

16281631
let derefs = DereferencedObjects {
1629-
namespace: "default".parse().unwrap(),
16301632
resolved_authentication_classes: Vec::new(),
16311633
catalog_definitions: Vec::new(),
16321634
catalogs: Vec::new(),

rust/operator-binary/src/controller/build/config_map.rs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,8 @@ pub enum Error {
5454
source: stackable_operator::builder::meta::Error,
5555
},
5656

57-
#[snafu(display("failed to resolve the {role} role"))]
58-
ReadRole {
59-
source: crate::crd::Error,
60-
role: String,
61-
},
57+
#[snafu(display("missing JVM argument overrides for role {role}"))]
58+
MissingRoleJvmArgumentOverrides { role: String },
6259

6360
#[snafu(display("failed to build jvm.config"))]
6461
BuildJvmConfig { source: crate::config::jvm::Error },
@@ -72,7 +69,6 @@ pub fn build_rolegroup_config_map(
7269
rolegroup_ref: &RoleGroupRef<v1alpha1::TrinoCluster>,
7370
cluster_info: &KubernetesClusterInfo,
7471
recommended_labels: &ObjectLabels<'_, v1alpha1::TrinoCluster>,
75-
owner_target: &v1alpha1::TrinoCluster,
7672
) -> Result<ConfigMap> {
7773
let role_group_configs =
7874
cluster
@@ -174,14 +170,18 @@ pub fn build_rolegroup_config_map(
174170
}
175171

176172
// 8. jvm.config.
177-
let role_obj = owner_target.role(role).with_context(|_| ReadRoleSnafu {
178-
role: role.to_string(),
179-
})?;
173+
let role_jvm_argument_overrides =
174+
cluster
175+
.role_jvm_argument_overrides
176+
.get(role)
177+
.with_context(|| MissingRoleJvmArgumentOverridesSnafu {
178+
role: role.to_string(),
179+
})?;
180180
let jvm_config = jvm::jvm_config(
181181
cluster.product_version,
182182
&rg.config,
183-
&role_obj,
184-
&rolegroup_ref.role_group,
183+
role_jvm_argument_overrides,
184+
&rg.product_specific_common_config.jvm_argument_overrides,
185185
)
186186
.context(BuildJvmConfigSnafu)?;
187187
data.insert(JVM_CONFIG.to_string(), jvm_config);
@@ -197,9 +197,9 @@ pub fn build_rolegroup_config_map(
197197
ConfigMapBuilder::new()
198198
.metadata(
199199
ObjectMetaBuilder::new()
200-
.name_and_namespace(owner_target)
201200
.name(rolegroup_ref.object_name())
202-
.ownerreference_from_resource(owner_target, None, Some(true))
201+
.namespace(cluster.namespace.to_string())
202+
.ownerreference_from_resource(cluster, None, Some(true))
203203
.context(MetadataSnafu)?
204204
.with_recommended_labels(recommended_labels)
205205
.context(MetadataSnafu)?

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ pub(crate) mod test_support {
5858
pub fn validated_cluster_from_yaml(yaml: &str) -> ValidatedCluster {
5959
let trino: v1alpha1::TrinoCluster = serde_yaml::from_str(yaml).expect("invalid test YAML");
6060
let derefs = DereferencedObjects {
61-
namespace: "default".parse().unwrap(),
6261
resolved_authentication_classes: Vec::new(),
6362
catalog_definitions: Vec::new(),
6463
catalogs: Vec::new(),
@@ -81,7 +80,7 @@ pub(crate) mod test_support {
8180
metadata:
8281
name: simple-trino
8382
namespace: default
84-
uid: "42"
83+
uid: "e6ac237d-a6d4-43a1-8135-f36506110912"
8584
spec:
8685
image:
8786
productVersion: "479"

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

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,7 @@ use std::{num::ParseIntError, str::FromStr};
1010

1111
use snafu::{ResultExt, Snafu};
1212
use stackable_operator::{
13-
client::Client,
14-
kube::runtime::reflector::ObjectRef,
15-
v2::{controller_utils::get_namespace, types::kubernetes::NamespaceName},
13+
client::Client, kube::runtime::reflector::ObjectRef, v2::controller_utils::get_namespace,
1614
};
1715

1816
use crate::{
@@ -76,9 +74,6 @@ type Result<T, E = Error> = std::result::Result<T, E>;
7674
/// Kubernetes objects referenced from the TrinoCluster spec, already fetched (and, for now, partly
7775
/// validated by the existing helper functions).
7876
pub struct DereferencedObjects {
79-
// Catalogs are dereferenced and require the namespace, so we check
80-
// or validate the namespace here once and pass it to validate.
81-
pub namespace: NamespaceName,
8277
pub resolved_authentication_classes: Vec<ResolvedAuthenticationClassRef>,
8378
pub catalog_definitions: Vec<catalog::v1alpha1::TrinoCatalog>,
8479
pub catalogs: Vec<CatalogConfig>,
@@ -160,7 +155,6 @@ pub async fn dereference(
160155
};
161156

162157
Ok(DereferencedObjects {
163-
namespace,
164158
resolved_authentication_classes,
165159
catalog_definitions,
166160
catalogs,

0 commit comments

Comments
 (0)