Skip to content

Commit 8c8ce80

Browse files
committed
refactor: use prevalidated placeholder constants
1 parent 038c993 commit 8c8ce80

5 files changed

Lines changed: 39 additions & 28 deletions

File tree

rust/operator-binary/src/controller.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ use stackable_operator::{
2222
},
2323
v2::{
2424
cluster_resources::cluster_resources_new,
25-
types::operator::{ControllerName, OperatorName, ProductName, RoleGroupName},
25+
types::operator::{ControllerName, OperatorName, ProductName},
2626
},
2727
};
2828
use strum::{EnumDiscriminants, IntoStaticStr};
@@ -289,10 +289,6 @@ pub async fn reconcile_druid(
289289
{
290290
let role_group_listener = build_group_listener(
291291
&validated_cluster,
292-
validated_cluster.recommended_labels(
293-
druid_role,
294-
&RoleGroupName::from_str("none").expect("a valid role group name"),
295-
),
296292
listener_class.to_string(),
297293
listener_group_name,
298294
druid_role,
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,21 @@
11
//! Build steps that turn a `ValidatedCluster` into Kubernetes resources.
22
3+
use std::str::FromStr;
4+
5+
use stackable_operator::v2::types::operator::{ProductVersion, RoleGroupName};
6+
7+
// Placeholder role-group name used for the recommended labels of the role-level discovery
8+
// `ConfigMap` (which is not tied to a single role group).
9+
stackable_operator::constant!(pub(crate) PLACEHOLDER_DISCOVERY_ROLE_GROUP: RoleGroupName = "discovery");
10+
11+
// Placeholder role-group name used for the recommended labels of the role-level `Listener`
12+
// (which is not tied to a single role group).
13+
stackable_operator::constant!(pub(crate) PLACEHOLDER_LISTENER_ROLE_GROUP: RoleGroupName = "none");
14+
15+
// Placeholder product version used for labels on PVC templates, which cannot be modified once
16+
// deployed. A constant value keeps the labels stable across version upgrades.
17+
stackable_operator::constant!(pub(crate) UNVERSIONED_PRODUCT_VERSION: ProductVersion = "none");
18+
319
pub mod jvm;
420
pub mod properties;
521
pub mod resource;

rust/operator-binary/src/controller/build/resource/discovery.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
11
//! Discovery for Druid. We make Druid discoverable by putting a connection string to the router service
22
//! inside a config map. We only provide a connection string to the router service, since it serves as
33
//! a gateway to the cluster for client queries.
4-
use std::str::FromStr;
5-
64
use snafu::{ResultExt, Snafu};
75
use stackable_operator::{
86
builder::configmap::ConfigMapBuilder, crd::listener::v1alpha1::Listener,
9-
k8s_openapi::api::core::v1::ConfigMap, v2::types::operator::RoleGroupName,
7+
k8s_openapi::api::core::v1::ConfigMap,
108
};
119

1210
use crate::{
1311
controller::{
14-
build::resource::listener::build_listener_connection_string, validate::ValidatedCluster,
12+
build::{
13+
PLACEHOLDER_DISCOVERY_ROLE_GROUP, resource::listener::build_listener_connection_string,
14+
},
15+
validate::ValidatedCluster,
1516
},
1617
crd::DruidRole,
1718
};
@@ -60,7 +61,7 @@ fn build_discovery_configmap(
6061
.object_meta(
6162
cluster.name.to_string(),
6263
&DruidRole::Router,
63-
&RoleGroupName::from_str("discovery").expect("a valid role group name"),
64+
&PLACEHOLDER_DISCOVERY_ROLE_GROUP,
6465
)
6566
.build(),
6667
)

rust/operator-binary/src/controller/build/resource/listener.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,19 @@ use std::str::FromStr;
22

33
use snafu::{OptionExt, Snafu};
44
use stackable_operator::{
5-
builder::meta::ObjectMetaBuilder,
65
crd::listener::{self, v1alpha1::Listener},
76
k8s_openapi::api::core::v1::PersistentVolumeClaim,
87
kvp::Labels,
98
v2::{
10-
builder::{
11-
meta::ownerreference_from_resource,
12-
pod::volume::{ListenerReference, listener_operator_volume_source_builder_build_pvc},
9+
builder::pod::volume::{
10+
ListenerReference, listener_operator_volume_source_builder_build_pvc,
1311
},
1412
types::kubernetes::{ListenerName, PersistentVolumeClaimName},
1513
},
1614
};
1715

1816
use crate::{
19-
controller::validate::ValidatedCluster,
17+
controller::{build::PLACEHOLDER_LISTENER_ROLE_GROUP, validate::ValidatedCluster},
2018
crd::{
2119
DruidRole,
2220
security::{DruidTlsSecurity, PLAINTEXT_PORT_NAME, TLS_PORT_NAME},
@@ -40,17 +38,19 @@ pub enum Error {
4038

4139
pub fn build_group_listener(
4240
cluster: &ValidatedCluster,
43-
object_labels: Labels,
4441
listener_class: String,
4542
listener_group_name: ListenerName,
4643
druid_role: &DruidRole,
4744
) -> Listener {
45+
// The group listener is a role-level (not role-group-level) object, so there is no real
46+
// role-group name; the placeholder is used for the recommended labels.
4847
Listener {
49-
metadata: ObjectMetaBuilder::new()
50-
.name_and_namespace(cluster)
51-
.name(listener_group_name.to_string())
52-
.ownerreference(ownerreference_from_resource(cluster, None, Some(true)))
53-
.with_labels(object_labels)
48+
metadata: cluster
49+
.object_meta(
50+
listener_group_name.to_string(),
51+
druid_role,
52+
&PLACEHOLDER_LISTENER_ROLE_GROUP,
53+
)
5454
.build(),
5555
spec: listener::v1alpha1::ListenerSpec {
5656
class_name: Some(listener_class),

rust/operator-binary/src/controller/build/resource/statefulset.rs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,15 @@ use stackable_operator::{
2828
role_group_utils::ResourceNames,
2929
types::{
3030
kubernetes::{ContainerName, VolumeName},
31-
operator::{ProductVersion, RoleGroupName},
31+
operator::RoleGroupName,
3232
},
3333
},
3434
};
3535

3636
use crate::{
3737
controller::{
3838
build::{
39+
UNVERSIONED_PRODUCT_VERSION,
3940
properties::product_logging::MAX_DRUID_LOG_FILES_SIZE,
4041
resource::listener::{
4142
LISTENER_VOLUME_DIR, LISTENER_VOLUME_NAME, build_group_listener_pvc,
@@ -290,12 +291,9 @@ pub fn build_rolegroup_statefulset(
290291

291292
// Used for PVC templates that cannot be modified once they are deployed
292293
// A version value is required, and we do want to use the "recommended" format for the
293-
// other desired labels, hence the "none" product version.
294-
let unversioned_recommended_labels = cluster.recommended_labels_for(
295-
role,
296-
&ProductVersion::from_str("none").expect("a valid product version"),
297-
role_group_name,
298-
);
294+
// other desired labels, hence the unversioned product version.
295+
let unversioned_recommended_labels =
296+
cluster.recommended_labels_for(role, &UNVERSIONED_PRODUCT_VERSION, role_group_name);
299297

300298
pvcs = Some(vec![build_group_listener_pvc(
301299
&group_listener_name,

0 commit comments

Comments
 (0)