Skip to content

Commit d9a13c6

Browse files
authored
[placement] Allow zone to be overridden (#287)
This allows us to direct placement writes to an etcd cluster other than the hardcoded "embedded" zone.
1 parent 3259a9c commit d9a13c6

File tree

4 files changed

+34
-1
lines changed

4 files changed

+34
-1
lines changed

pkg/apis/m3dboperator/v1alpha1/cluster.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,11 @@ type ClusterSpec struct {
323323
// OnDeleteUpdateStrategy sets StatefulSets created by the operator to
324324
// have OnDelete as the update strategy instead of RollingUpdate.
325325
OnDeleteUpdateStrategy bool `json:"onDeleteUpdateStrategy,omitempty"`
326+
327+
// Zone defines the zone that placement instances will be written to if set.
328+
// If not set, the default zone of "embedded" will be used.
329+
// +optional
330+
Zone string `json:"zone,omitempty"`
326331
}
327332

328333
// ExternalCoordinatorConfig defines parameters for using an external

pkg/apis/m3dboperator/v1alpha1/openapi_generated.go

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

pkg/k8sops/m3db/placement.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,10 +88,15 @@ func PlacementInstanceFromPod(cluster *myspec.M3DBCluster, pod *corev1.Pod, idPr
8888
return nil, pkgerrors.WithMessage(err, "cannot execute node endpoint template")
8989
}
9090

91+
zone := cluster.Spec.Zone
92+
if zone == "" {
93+
zone = _zoneEmbedded
94+
}
95+
9196
instance := &placementpb.Instance{
9297
Id: idStr,
9398
IsolationGroup: isoGroup,
94-
Zone: _zoneEmbedded,
99+
Zone: zone,
95100
Weight: 100,
96101
Hostname: pod.Name + "." + epCtx.M3DBService,
97102
Endpoint: str.String(),

pkg/k8sops/m3db/placement_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,22 @@ func TestPlacementInstanceFromPod(t *testing.T) {
8686
Port: 9000,
8787
}
8888

89+
inst, err := PlacementInstanceFromPod(cluster, pod, idProvider)
90+
assert.NoError(t, err)
91+
assert.Equal(t, expInst, inst)
92+
})
93+
t.Run("zone override", func(t *testing.T) {
94+
cluster.Spec.Zone = "embedded-override"
95+
expInst := &placementpb.Instance{
96+
Id: `{"name":"pod-a"}`,
97+
IsolationGroup: "zone-a",
98+
Zone: "embedded-override",
99+
Weight: 100,
100+
Hostname: "pod-a.m3dbnode-cluster-a",
101+
Endpoint: "pod-a.m3dbnode-cluster-a.my_ns:9000",
102+
Port: 9000,
103+
}
104+
89105
inst, err := PlacementInstanceFromPod(cluster, pod, idProvider)
90106
assert.NoError(t, err)
91107
assert.Equal(t, expInst, inst)

0 commit comments

Comments
 (0)