Skip to content

Commit 16fb799

Browse files
committed
fix: upgrade some 0.9 cluster to v1 failed (#597)
(cherry picked from commit 1553432)
1 parent f1da01a commit 16fb799

1 file changed

Lines changed: 80 additions & 3 deletions

File tree

pkg/cmd/cluster/upgrade_to_1.0.go

Lines changed: 80 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,19 @@ type componentDefRefConvert struct {
6464
serviceVersion string
6565
}
6666

67+
type serviceVersionConvert struct {
68+
fromServiceVersion string
69+
toServiceVersion string
70+
}
71+
6772
var (
6873
clusterVersionConvert = map[string]map[string]componentDefRefConvert{}
6974
// 0.9 cmpd name => 1.0 cmpd prefix
7075
componentDefWithChartVersion = []string{
7176
"clickhouse-24",
77+
"apecloud-mysql",
7278
"elasticsearch-8",
79+
"elasticsearch-7",
7380
"kafka-combine", "kafka-controller", "kafka-exporter", "kafka-broker",
7481
"loki-backend", "loki-gateway", "loki-write", "loki-read",
7582
"milvus-datanode", "milvus-indexnode", "milvus-minio",
@@ -85,7 +92,6 @@ var (
8592
"redis-7", "redis-cluster-7", "redis-sentinel-7", "redis-twemproxy-0.5",
8693
"pulsar-bookkeeper", "pulsar-broker-3", "pulsar-proxy-3", "pulsar-zookeeper-3",
8794
"starrocks-ce-be", "starrocks-ce-fe",
88-
"tidb-pd-7", "tidb-7", "tikv-7", "tikv-8", "tidb-8", "tidb-pd-8",
8995
"vanilla-postgresql-12", "vanilla-postgresql-14", "vanilla-postgresql-15", "vanilla-postgresql-supabase15",
9096
"vm-insert", "vm-select", "vm-storage",
9197
"weaviate",
@@ -97,6 +103,18 @@ var (
97103
"etcd-": "etcd-3",
98104
"ch-keeper-24": "clickhouse-keeper-24",
99105
"pulsar-bkrecovery": "pulsar-bookies-recovery-3",
106+
"tidb-pd": "tidb-pd",
107+
"tidb-7": "tidb",
108+
"tidb-8": "tidb",
109+
"tikv": "tikv",
110+
}
111+
componentServiceVersionMapping = map[string][]serviceVersionConvert{
112+
"minio": {
113+
{
114+
fromServiceVersion: "0.9.0",
115+
toServiceVersion: "2024.6.29",
116+
},
117+
},
100118
}
101119
)
102120

@@ -397,6 +415,10 @@ func (o *UpgradeToV1Options) Run() error {
397415
if err = o.convertAccounts(); err != nil {
398416
return err
399417
}
418+
if err = o.ConvertServices(); err != nil {
419+
return err
420+
}
421+
400422
// convert to v1
401423
clusterObj, err := apiruntime.DefaultUnstructuredConverter.ToUnstructured(cluster)
402424
if err != nil {
@@ -622,7 +644,8 @@ func (o *UpgradeToV1Options) Convert09ComponentDef(cluster *kbappsv1.Cluster,
622644
return "<yourComponentDef>", nil
623645
}
624646
for i := range clusterV1alpha1Spec.ComponentSpecs {
625-
compDef, err := convertCompDef(clusterV1alpha1Spec.ComponentSpecs[i].ComponentDef)
647+
compDef09 := clusterV1alpha1Spec.ComponentSpecs[i].ComponentDef
648+
compDef, err := convertCompDef(compDef09)
626649
if err != nil {
627650
return err
628651
}
@@ -631,9 +654,14 @@ func (o *UpgradeToV1Options) Convert09ComponentDef(cluster *kbappsv1.Cluster,
631654
if cluster.Spec.ComponentSpecs[i].ServiceAccountName == fmt.Sprintf("kb-%s", cluster.Name) {
632655
cluster.Spec.ComponentSpecs[i].ServiceAccountName = ""
633656
}
657+
toServiceVersion := o.ConvertServiceVersion(compDef09, clusterV1alpha1Spec.ComponentSpecs[i].ServiceVersion)
658+
if len(toServiceVersion) != 0 {
659+
cluster.Spec.ComponentSpecs[i].ServiceVersion = toServiceVersion
660+
}
634661
}
635662
for i := range clusterV1alpha1Spec.ShardingSpecs {
636-
compDef, err := convertCompDef(clusterV1alpha1Spec.ShardingSpecs[i].Template.ComponentDef)
663+
compDef09 := clusterV1alpha1Spec.ShardingSpecs[i].Template.ComponentDef
664+
compDef, err := convertCompDef(compDef09)
637665
if err != nil {
638666
return err
639667
}
@@ -642,11 +670,60 @@ func (o *UpgradeToV1Options) Convert09ComponentDef(cluster *kbappsv1.Cluster,
642670
if cluster.Spec.Shardings[i].Template.ServiceAccountName == fmt.Sprintf("kb-%s", cluster.Name) {
643671
cluster.Spec.Shardings[i].Template.ServiceAccountName = ""
644672
}
673+
toServiceVersion := o.ConvertServiceVersion(compDef09, clusterV1alpha1Spec.ShardingSpecs[i].Template.ServiceVersion)
674+
if len(toServiceVersion) != 0 {
675+
cluster.Spec.Shardings[i].Template.ServiceVersion = toServiceVersion
676+
}
645677
}
646678
delete(cluster.Annotations, kbIncrementConverterAK)
647679
return nil
648680
}
649681

682+
func (o *UpgradeToV1Options) ConvertServiceVersion(compDef09 string, fromServiceVersion string) string {
683+
var toServiceVersion string
684+
if converts, ok := componentServiceVersionMapping[compDef09]; ok {
685+
for _, s := range converts {
686+
if s.fromServiceVersion == fromServiceVersion {
687+
toServiceVersion = s.toServiceVersion
688+
break
689+
}
690+
}
691+
}
692+
return toServiceVersion
693+
}
694+
695+
func (o *UpgradeToV1Options) convertService(svc unstructured.Unstructured) error {
696+
selector, _, _ := unstructured.NestedStringMap(svc.Object, "spec", "selector")
697+
if _, ok := selector[constant.AppNameLabelKey]; !ok {
698+
return nil
699+
}
700+
delete(selector, constant.AppNameLabelKey)
701+
_ = unstructured.SetNestedStringMap(svc.Object, selector, "spec", "selector")
702+
if _, err := o.Dynamic.Resource(types.ServiceGVR()).Namespace(o.Namespace).Update(context.TODO(), &svc, metav1.UpdateOptions{}); err != nil {
703+
return err
704+
}
705+
selector1, _, _ := unstructured.NestedStringMap(svc.Object, "spec", "selector")
706+
fmt.Println(selector1)
707+
return nil
708+
}
709+
710+
func (o *UpgradeToV1Options) ConvertServices() error {
711+
svcList, err := o.Dynamic.Resource(types.ServiceGVR()).Namespace(o.Namespace).List(context.TODO(), metav1.ListOptions{
712+
LabelSelector: fmt.Sprintf("%s=%s,app.kubernetes.io/managed-by=kubeblocks", constant.AppInstanceLabelKey, o.Name),
713+
})
714+
if err != nil {
715+
return err
716+
}
717+
for i := range svcList.Items {
718+
svc := svcList.Items[i]
719+
fmt.Println(svc.GetName())
720+
if err = o.convertService(svc); err != nil {
721+
return err
722+
}
723+
}
724+
return nil
725+
}
726+
650727
func (o *UpgradeToV1Options) printDiff(clusterV1Alpha1 *kbappsv1alpha1.Cluster, clusterV1 *kbappsv1.Cluster) {
651728
delete(clusterV1Alpha1.Annotations, corev1.LastAppliedConfigAnnotation)
652729
delete(clusterV1.Annotations, corev1.LastAppliedConfigAnnotation)

0 commit comments

Comments
 (0)