This is an automated email from the ASF dual-hosted git repository.
roryqi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-uniffle.git
The following commit(s) were added to refs/heads/master by this push:
new c45c187b [#632]fix: respect volumes in rss spec (#634)
c45c187b is described below
commit c45c187b6905b37d93abfc8e0ab2b5829ab18096
Author: advancedxy <[email protected]>
AuthorDate: Tue Feb 21 16:01:59 2023 +0800
[#632]fix: respect volumes in rss spec (#634)
### What changes were proposed in this pull request?
respect volumes for rss coordinator and shuffle server
### Why are the changes needed?
This is a bug fix
Fix: #632
### Does this PR introduce _any_ user-facing change?
Admin of rss cluster could specify the volumes which could be used to
configure
hadoop conf for example
### How was this patch tested?
Added UTs.
---
.../pkg/controller/sync/coordinator/coordinator.go | 22 ++++++-------
.../sync/coordinator/coordinator_test.go | 37 ++++++++++++++++++++++
.../controller/sync/shuffleserver/shuffleserver.go | 22 ++++++-------
.../sync/shuffleserver/shuffleserver_test.go | 37 ++++++++++++++++++++++
4 files changed, 96 insertions(+), 22 deletions(-)
diff --git
a/deploy/kubernetes/operator/pkg/controller/sync/coordinator/coordinator.go
b/deploy/kubernetes/operator/pkg/controller/sync/coordinator/coordinator.go
index 0fccc65f..09fbee3e 100644
--- a/deploy/kubernetes/operator/pkg/controller/sync/coordinator/coordinator.go
+++ b/deploy/kubernetes/operator/pkg/controller/sync/coordinator/coordinator.go
@@ -184,21 +184,21 @@ func GenerateDeploy(rss
*unifflev1alpha1.RemoteShuffleService, index int) *appsv
Key: "node-role.kubernetes.io/master",
},
},
- Volumes: []corev1.Volume{
- {
- Name:
controllerconstants.ConfigurationVolumeName,
- VolumeSource: corev1.VolumeSource{
- ConfigMap:
&corev1.ConfigMapVolumeSource{
- LocalObjectReference:
corev1.LocalObjectReference{
- Name:
rss.Spec.ConfigMapName,
- },
- DefaultMode:
pointer.Int32(0777),
- },
+ Volumes: rss.Spec.Coordinator.Volumes,
+ NodeSelector: rss.Spec.Coordinator.NodeSelector,
+ }
+ configurationVolume := corev1.Volume{
+ Name: controllerconstants.ConfigurationVolumeName,
+ VolumeSource: corev1.VolumeSource{
+ ConfigMap: &corev1.ConfigMapVolumeSource{
+ LocalObjectReference:
corev1.LocalObjectReference{
+ Name: rss.Spec.ConfigMapName,
},
+ DefaultMode: pointer.Int32(0777),
},
},
- NodeSelector: rss.Spec.Coordinator.NodeSelector,
}
+ podSpec.Volumes = append(podSpec.Volumes, configurationVolume)
if podSpec.HostNetwork {
podSpec.DNSPolicy = corev1.DNSClusterFirstWithHostNet
}
diff --git
a/deploy/kubernetes/operator/pkg/controller/sync/coordinator/coordinator_test.go
b/deploy/kubernetes/operator/pkg/controller/sync/coordinator/coordinator_test.go
index 361839b9..3da86e26 100644
---
a/deploy/kubernetes/operator/pkg/controller/sync/coordinator/coordinator_test.go
+++
b/deploy/kubernetes/operator/pkg/controller/sync/coordinator/coordinator_test.go
@@ -68,6 +68,19 @@ var (
Value: "127.0.0.1",
},
}
+ testVolumeName = "test-volume"
+ testVolumes = []corev1.Volume{
+ {
+ Name: testVolumeName,
+ VolumeSource: corev1.VolumeSource{
+ ConfigMap: &corev1.ConfigMapVolumeSource{
+ LocalObjectReference:
corev1.LocalObjectReference{
+ Name: "test-config",
+ },
+ },
+ },
+ },
+ }
)
func buildRssWithLabels() *uniffleapi.RemoteShuffleService {
@@ -88,6 +101,12 @@ func buildRssWithCustomENVs()
*uniffleapi.RemoteShuffleService {
return rss
}
+func withCustomVolumes(volumes []corev1.Volume)
*uniffleapi.RemoteShuffleService {
+ rss := utils.BuildRSSWithDefaultValue()
+ rss.Spec.Coordinator.Volumes = volumes
+ return rss
+}
+
func buildRssWithCustomRPCPort() *uniffleapi.RemoteShuffleService {
rss := utils.BuildRSSWithDefaultValue()
rss.Spec.Coordinator.RPCPort = pointer.Int32(testRPCPort)
@@ -308,6 +327,24 @@ func TestGenerateDeploy(t *testing.T) {
return
},
},
+ {
+ name: "set custom volumes",
+ rss: withCustomVolumes(testVolumes),
+ IsValidDeploy: func(deploy *appsv1.Deployment, rss
*uniffleapi.RemoteShuffleService) (bool, error) {
+ for _, volume := range
deploy.Spec.Template.Spec.Volumes {
+ if volume.Name == testVolumeName {
+ expectedVolume := testVolumes[0]
+ equal :=
reflect.DeepEqual(expectedVolume, volume)
+ if equal {
+ return true, nil
+ }
+ volumeJSON, _ :=
json.Marshal(expectedVolume)
+ return false,
fmt.Errorf("generated deploy doesn't contain expected volumn: %s", volumeJSON)
+ }
+ }
+ return false, fmt.Errorf("generated deploy
should include volume: %s", testVolumeName)
+ },
+ },
} {
t.Run(tt.name, func(tc *testing.T) {
deploy := GenerateDeploy(tt.rss, 0)
diff --git
a/deploy/kubernetes/operator/pkg/controller/sync/shuffleserver/shuffleserver.go
b/deploy/kubernetes/operator/pkg/controller/sync/shuffleserver/shuffleserver.go
index cb77d0af..ea531d48 100644
---
a/deploy/kubernetes/operator/pkg/controller/sync/shuffleserver/shuffleserver.go
+++
b/deploy/kubernetes/operator/pkg/controller/sync/shuffleserver/shuffleserver.go
@@ -91,21 +91,21 @@ func GenerateSts(rss *unifflev1alpha1.RemoteShuffleService)
*appsv1.StatefulSet
Key: "node-role.kubernetes.io/master",
},
},
- Volumes: []corev1.Volume{
- {
- Name:
controllerconstants.ConfigurationVolumeName,
- VolumeSource: corev1.VolumeSource{
- ConfigMap:
&corev1.ConfigMapVolumeSource{
- LocalObjectReference:
corev1.LocalObjectReference{
- Name:
rss.Spec.ConfigMapName,
- },
- DefaultMode:
pointer.Int32(0777),
- },
+ Volumes: rss.Spec.ShuffleServer.Volumes,
+ NodeSelector: rss.Spec.ShuffleServer.NodeSelector,
+ }
+ configurationVolume := corev1.Volume{
+ Name: controllerconstants.ConfigurationVolumeName,
+ VolumeSource: corev1.VolumeSource{
+ ConfigMap: &corev1.ConfigMapVolumeSource{
+ LocalObjectReference:
corev1.LocalObjectReference{
+ Name: rss.Spec.ConfigMapName,
},
+ DefaultMode: pointer.Int32(0777),
},
},
- NodeSelector: rss.Spec.ShuffleServer.NodeSelector,
}
+ podSpec.Volumes = append(podSpec.Volumes, configurationVolume)
if podSpec.HostNetwork {
podSpec.DNSPolicy = corev1.DNSClusterFirstWithHostNet
}
diff --git
a/deploy/kubernetes/operator/pkg/controller/sync/shuffleserver/shuffleserver_test.go
b/deploy/kubernetes/operator/pkg/controller/sync/shuffleserver/shuffleserver_test.go
index 80472b12..38c64b9e 100644
---
a/deploy/kubernetes/operator/pkg/controller/sync/shuffleserver/shuffleserver_test.go
+++
b/deploy/kubernetes/operator/pkg/controller/sync/shuffleserver/shuffleserver_test.go
@@ -68,6 +68,19 @@ var (
Value: "1G",
},
}
+ testVolumeName = "test-volume"
+ testVolumes = []corev1.Volume{
+ {
+ Name: testVolumeName,
+ VolumeSource: corev1.VolumeSource{
+ ConfigMap: &corev1.ConfigMapVolumeSource{
+ LocalObjectReference:
corev1.LocalObjectReference{
+ Name: "test-config",
+ },
+ },
+ },
+ },
+ }
)
func buildRssWithLabels() *uniffleapi.RemoteShuffleService {
@@ -93,6 +106,12 @@ func buildRssWithCustomENVs()
*uniffleapi.RemoteShuffleService {
return rss
}
+func withCustomVolumes(volumes []corev1.Volume)
*uniffleapi.RemoteShuffleService {
+ rss := utils.BuildRSSWithDefaultValue()
+ rss.Spec.ShuffleServer.Volumes = volumes
+ return rss
+}
+
func buildRssWithCustomRPCPort() *uniffleapi.RemoteShuffleService {
rss := utils.BuildRSSWithDefaultValue()
rss.Spec.ShuffleServer.RPCPort = pointer.Int32(testRPCPort)
@@ -315,6 +334,24 @@ func TestGenerateSts(t *testing.T) {
return
},
},
+ {
+ name: "test custom volumes",
+ rss: withCustomVolumes(testVolumes),
+ IsValidSts: func(sts *appsv1.StatefulSet, rss
*uniffleapi.RemoteShuffleService) (valid bool, err error) {
+ for _, volume := range
sts.Spec.Template.Spec.Volumes {
+ if volume.Name == testVolumeName {
+ expectedVolume := testVolumes[0]
+ equal :=
reflect.DeepEqual(expectedVolume, volume)
+ if equal {
+ return true, nil
+ }
+ volumeJSON, _ :=
json.Marshal(expectedVolume)
+ return false,
fmt.Errorf("generated sts doesn't contain expected volumn: %s", volumeJSON)
+ }
+ }
+ return false, fmt.Errorf("generated sts should
include volume: %s", testVolumeName)
+ },
+ },
} {
t.Run(tt.name, func(tc *testing.T) {
sts := GenerateSts(tt.rss)