Skip to content

Commit 2c9488f

Browse files
committed
history: use persistent columes for listener volumes
1 parent 3f79af6 commit 2c9488f

File tree

1 file changed

+34
-11
lines changed

1 file changed

+34
-11
lines changed

rust/operator-binary/src/history/history_controller.rs

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,13 @@ use stackable_operator::{
1111
configmap::ConfigMapBuilder,
1212
meta::ObjectMetaBuilder,
1313
pod::{
14-
PodBuilder, container::ContainerBuilder, resources::ResourceRequirementsBuilder,
15-
volume::VolumeBuilder,
14+
PodBuilder,
15+
container::ContainerBuilder,
16+
resources::ResourceRequirementsBuilder,
17+
volume::{
18+
ListenerOperatorVolumeSourceBuilder, ListenerOperatorVolumeSourceBuilderError,
19+
ListenerReference, VolumeBuilder,
20+
},
1621
},
1722
},
1823
cluster_resources::{ClusterResourceApplyStrategy, ClusterResources},
@@ -71,6 +76,11 @@ use crate::{
7176
#[strum_discriminants(derive(IntoStaticStr))]
7277
#[allow(clippy::enum_variant_names)]
7378
pub enum Error {
79+
#[snafu(display("failed to build listener volume"))]
80+
BuildListenerVolume {
81+
source: ListenerOperatorVolumeSourceBuilderError,
82+
},
83+
7484
#[snafu(display("missing secret lifetime"))]
7585
MissingSecretLifetime,
7686

@@ -535,15 +545,27 @@ fn build_stateful_set(
535545

536546
// Add listener volume
537547
let listener_class = &shs.spec.cluster_config.listener_class;
538-
// all listeners will use ephemeral volumes as they can/should
539-
// be removed when the pods are *terminated* (ephemeral PVCs will
540-
// survive re-starts)
541-
pb.add_listener_volume_by_listener_class(
542-
LISTENER_VOLUME_NAME,
543-
&listener_class.to_string(),
544-
&recommended_labels.clone(),
545-
)
546-
.context(AddVolumeSnafu)?;
548+
let pvcs = if listener_class.discoverable() {
549+
// externally reachable listener endpoints will use persistent volumes
550+
// so that load balancers can hard-code the target addresses
551+
let pvc = ListenerOperatorVolumeSourceBuilder::new(
552+
&ListenerReference::ListenerClass(listener_class.to_string()),
553+
&recommended_labels,
554+
)
555+
.context(BuildListenerVolumeSnafu)?
556+
.build_pvc(LISTENER_VOLUME_NAME.to_string())
557+
.context(BuildListenerVolumeSnafu)?;
558+
Some(vec![pvc])
559+
} else {
560+
// non-reachable endpoints use ephemeral volumes
561+
pb.add_listener_volume_by_listener_class(
562+
LISTENER_VOLUME_NAME,
563+
&listener_class.to_string(),
564+
&recommended_labels,
565+
)
566+
.context(AddVolumeSnafu)?;
567+
None
568+
};
547569

548570
pb.add_container(container);
549571

@@ -593,6 +615,7 @@ fn build_stateful_set(
593615
metadata: sts_metadata,
594616
spec: Some(StatefulSetSpec {
595617
template: pod_template,
618+
volume_claim_templates: pvcs,
596619
replicas: shs.replicas(rolegroupref),
597620
selector: LabelSelector {
598621
match_labels: Some(

0 commit comments

Comments
 (0)