Skip to content

Commit c2f3f4b

Browse files
authored
fix: keep same-namespace restore PVC dataSourceRef valid (#10325)
1 parent dc9c432 commit c2f3f4b

2 files changed

Lines changed: 42 additions & 1 deletion

File tree

controllers/apps/cluster/restore_intent.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ func injectRestoreIntentToVCT(cluster *appsv1.Cluster, componentName string, vct
9898
}
9999
apiGroup := restore.Source.APIGroup
100100
var namespace *string
101-
if restore.Source.Namespace != "" {
101+
if restore.Source.Namespace != "" && restore.Source.Namespace != cluster.Namespace {
102102
namespace = &restore.Source.Namespace
103103
}
104104
vct.Spec.DataSourceRef = &corev1.TypedObjectReference{

controllers/apps/cluster/restore_intent_test.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,47 @@ func TestInjectRestoreIntentRemovesStaleOptionalAnnotations(t *testing.T) {
7474
require.Equal(t, "backup-ns", *vct.Spec.DataSourceRef.Namespace)
7575
}
7676

77+
func TestInjectRestoreIntentOmitsDataSourceRefNamespaceForSameNamespaceSource(t *testing.T) {
78+
cluster := &appsv1.Cluster{}
79+
cluster.Name = "test-cluster"
80+
cluster.Namespace = "test-ns"
81+
cluster.Spec.Restore = &appsv1.ClusterRestore{
82+
Source: appsv1.ClusterRestoreSource{
83+
APIGroup: testRestoreSourceAPIGroup,
84+
Kind: testRestoreSourceKind,
85+
Name: "backup",
86+
Namespace: "test-ns",
87+
},
88+
}
89+
vct := &appsv1.PersistentVolumeClaimTemplate{Name: "data"}
90+
91+
injectRestoreIntentToVCT(cluster, "redis", vct)
92+
93+
require.Equal(t, "test-ns", vct.Annotations[constant.RestoreSourceNamespaceAnnotationKey])
94+
require.NotNil(t, vct.Spec.DataSourceRef)
95+
require.Nil(t, vct.Spec.DataSourceRef.Namespace)
96+
}
97+
98+
func TestInjectRestoreIntentOmitsDataSourceRefNamespaceForDefaultNamespaceSource(t *testing.T) {
99+
cluster := &appsv1.Cluster{}
100+
cluster.Name = "test-cluster"
101+
cluster.Namespace = "test-ns"
102+
cluster.Spec.Restore = &appsv1.ClusterRestore{
103+
Source: appsv1.ClusterRestoreSource{
104+
APIGroup: testRestoreSourceAPIGroup,
105+
Kind: testRestoreSourceKind,
106+
Name: "backup",
107+
},
108+
}
109+
vct := &appsv1.PersistentVolumeClaimTemplate{Name: "data"}
110+
111+
injectRestoreIntentToVCT(cluster, "redis", vct)
112+
113+
require.Equal(t, "test-ns", vct.Annotations[constant.RestoreSourceNamespaceAnnotationKey])
114+
require.NotNil(t, vct.Spec.DataSourceRef)
115+
require.Nil(t, vct.Spec.DataSourceRef.Namespace)
116+
}
117+
77118
func TestClusterRestoreSourceAPIGroupIsRequiredByCRD(t *testing.T) {
78119
data, err := os.ReadFile("../../../config/crd/bases/apps.kubeblocks.io_clusters.yaml")
79120
require.NoError(t, err)

0 commit comments

Comments
 (0)