diff --git a/api/core/v1alpha1/tikv_types.go b/api/core/v1alpha1/tikv_types.go index ccdd1ef6941..57619816a3b 100644 --- a/api/core/v1alpha1/tikv_types.go +++ b/api/core/v1alpha1/tikv_types.go @@ -210,6 +210,7 @@ type TiKVPreStop struct { type ( CoprocessorReference corev1.LocalObjectReference + CompactorReference corev1.LocalObjectReference WorkerReference corev1.LocalObjectReference ) @@ -217,8 +218,11 @@ type TiKVRemoteWorkers struct { // Default worker reference, if remote workers are enabled, this default worker ref must be set Worker WorkerReference `json:"worker"` - // Coprocessor worker reference, if it's not set, use worker ref by default + // Coprocessor worker reference, if it's not set, use worker ref by default Coprocessor *CoprocessorReference `json:"coprocessor,omitempty"` + + // Compactor worker reference, if it's not set, use worker ref by default + Compactor *CompactorReference `json:"compactor,omitempty"` } type TiKVServer struct { diff --git a/api/core/v1alpha1/zz_generated.deepcopy.go b/api/core/v1alpha1/zz_generated.deepcopy.go index 37a20179497..21f24719a4b 100644 --- a/api/core/v1alpha1/zz_generated.deepcopy.go +++ b/api/core/v1alpha1/zz_generated.deepcopy.go @@ -316,6 +316,22 @@ func (in *CommonStatus) DeepCopy() *CommonStatus { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CompactorReference) DeepCopyInto(out *CompactorReference) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CompactorReference. +func (in *CompactorReference) DeepCopy() *CompactorReference { + if in == nil { + return nil + } + out := new(CompactorReference) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ComponentStatus) DeepCopyInto(out *ComponentStatus) { *out = *in @@ -4241,6 +4257,11 @@ func (in *TiKVRemoteWorkers) DeepCopyInto(out *TiKVRemoteWorkers) { *out = new(CoprocessorReference) **out = **in } + if in.Compactor != nil { + in, out := &in.Compactor, &out.Compactor + *out = new(CompactorReference) + **out = **in + } return } diff --git a/api/meta/v1alpha1/feature.go b/api/meta/v1alpha1/feature.go index 0c064670355..886eb6d0653 100644 --- a/api/meta/v1alpha1/feature.go +++ b/api/meta/v1alpha1/feature.go @@ -18,7 +18,7 @@ package v1alpha1 // NOTE(liubo02): +enum is not supported now, we have to add all enum into comments // NOTE(liubo02): It's supported by https://github.com/kubernetes-sigs/controller-tools/pull/1179 // -// +kubebuilder:validation:Enum=FeatureModification;VolumeAttributesClass;DisablePDDefaultReadinessProbe;UsePDReadyAPI;SessionTokenSigning;ClusterSubdomain;TerminableLogTailer;UseTSOReadyAPI;UseSchedulingReadyAPI;UseTiKVReadyAPI;UsePDReadyAPIV2;UseTiFlashReadyAPI;MultiPDGroup;TiCDCDynamicSecretSyncer +// +kubebuilder:validation:Enum=FeatureModification;VolumeAttributesClass;DisablePDDefaultReadinessProbe;UsePDReadyAPI;SessionTokenSigning;ClusterSubdomain;TerminableLogTailer;UseTSOReadyAPI;UseSchedulingReadyAPI;UseTiKVReadyAPI;UsePDReadyAPIV2;UseTiFlashReadyAPI;MultiPDGroup;TiCDCDynamicSecretSyncer;IndependentKVEngineWorker // +enum type Feature string @@ -114,4 +114,9 @@ const ( // If this feature is enabled, TiCDC pods can dynamically load secrets with specific labels into pods TiCDCDynamicSecretSyncer Feature = "TiCDCDynamicSecretSyncer" TiCDCDynamicSecretSyncerStage FeatureStage = FeatureStageAlpha + + // By default, kvengine.remote-worker-addr follows the coprocessor ref. + // If this feature is enabled, kvengine.remote-worker-addr will use the default worker ref. + IndependentKVEngineWorker Feature = "IndependentKVEngineWorker" + IndependentKVEngineWorkerStage FeatureStage = FeatureStageAlpha ) diff --git a/manifests/crd/core.pingcap.com_clusters.yaml b/manifests/crd/core.pingcap.com_clusters.yaml index 2b16aff8cf1..426dd6d9392 100644 --- a/manifests/crd/core.pingcap.com_clusters.yaml +++ b/manifests/crd/core.pingcap.com_clusters.yaml @@ -128,6 +128,7 @@ spec: - UseTiFlashReadyAPI - MultiPDGroup - TiCDCDynamicSecretSyncer + - IndependentKVEngineWorker type: string required: - name @@ -369,6 +370,7 @@ spec: - UseTiFlashReadyAPI - MultiPDGroup - TiCDCDynamicSecretSyncer + - IndependentKVEngineWorker type: string stage: type: string diff --git a/manifests/crd/core.pingcap.com_pdgroups.yaml b/manifests/crd/core.pingcap.com_pdgroups.yaml index 72f49bae850..869efd16fb6 100644 --- a/manifests/crd/core.pingcap.com_pdgroups.yaml +++ b/manifests/crd/core.pingcap.com_pdgroups.yaml @@ -118,6 +118,7 @@ spec: - UseTiFlashReadyAPI - MultiPDGroup - TiCDCDynamicSecretSyncer + - IndependentKVEngineWorker type: string type: array minReadySeconds: diff --git a/manifests/crd/core.pingcap.com_pds.yaml b/manifests/crd/core.pingcap.com_pds.yaml index 7b8c2d77b58..f3471b6bc8e 100644 --- a/manifests/crd/core.pingcap.com_pds.yaml +++ b/manifests/crd/core.pingcap.com_pds.yaml @@ -94,6 +94,7 @@ spec: - UseTiFlashReadyAPI - MultiPDGroup - TiCDCDynamicSecretSyncer + - IndependentKVEngineWorker type: string type: array image: diff --git a/manifests/crd/core.pingcap.com_resourcemanagergroups.yaml b/manifests/crd/core.pingcap.com_resourcemanagergroups.yaml index 43580d5d2d0..ff3ee85e2a8 100644 --- a/manifests/crd/core.pingcap.com_resourcemanagergroups.yaml +++ b/manifests/crd/core.pingcap.com_resourcemanagergroups.yaml @@ -107,6 +107,7 @@ spec: - UseTiFlashReadyAPI - MultiPDGroup - TiCDCDynamicSecretSyncer + - IndependentKVEngineWorker type: string type: array minReadySeconds: diff --git a/manifests/crd/core.pingcap.com_resourcemanagers.yaml b/manifests/crd/core.pingcap.com_resourcemanagers.yaml index ea571c9f3b3..c77b49cb94a 100644 --- a/manifests/crd/core.pingcap.com_resourcemanagers.yaml +++ b/manifests/crd/core.pingcap.com_resourcemanagers.yaml @@ -90,6 +90,7 @@ spec: - UseTiFlashReadyAPI - MultiPDGroup - TiCDCDynamicSecretSyncer + - IndependentKVEngineWorker type: string type: array image: diff --git a/manifests/crd/core.pingcap.com_routergroups.yaml b/manifests/crd/core.pingcap.com_routergroups.yaml index d1a2ac75e50..256004799cf 100644 --- a/manifests/crd/core.pingcap.com_routergroups.yaml +++ b/manifests/crd/core.pingcap.com_routergroups.yaml @@ -107,6 +107,7 @@ spec: - UseTiFlashReadyAPI - MultiPDGroup - TiCDCDynamicSecretSyncer + - IndependentKVEngineWorker type: string type: array minReadySeconds: diff --git a/manifests/crd/core.pingcap.com_routers.yaml b/manifests/crd/core.pingcap.com_routers.yaml index f3dd13f96f9..8936cc1fc8e 100644 --- a/manifests/crd/core.pingcap.com_routers.yaml +++ b/manifests/crd/core.pingcap.com_routers.yaml @@ -91,6 +91,7 @@ spec: - UseTiFlashReadyAPI - MultiPDGroup - TiCDCDynamicSecretSyncer + - IndependentKVEngineWorker type: string type: array image: diff --git a/manifests/crd/core.pingcap.com_schedulergroups.yaml b/manifests/crd/core.pingcap.com_schedulergroups.yaml index f77bc14088a..5b6bf2eb3db 100644 --- a/manifests/crd/core.pingcap.com_schedulergroups.yaml +++ b/manifests/crd/core.pingcap.com_schedulergroups.yaml @@ -113,6 +113,7 @@ spec: - UseTiFlashReadyAPI - MultiPDGroup - TiCDCDynamicSecretSyncer + - IndependentKVEngineWorker type: string type: array minReadySeconds: diff --git a/manifests/crd/core.pingcap.com_schedulers.yaml b/manifests/crd/core.pingcap.com_schedulers.yaml index 94a9a763c83..176074995a7 100644 --- a/manifests/crd/core.pingcap.com_schedulers.yaml +++ b/manifests/crd/core.pingcap.com_schedulers.yaml @@ -99,6 +99,7 @@ spec: - UseTiFlashReadyAPI - MultiPDGroup - TiCDCDynamicSecretSyncer + - IndependentKVEngineWorker type: string type: array image: diff --git a/manifests/crd/core.pingcap.com_schedulinggroups.yaml b/manifests/crd/core.pingcap.com_schedulinggroups.yaml index 5c5fd714089..e26afdb3853 100644 --- a/manifests/crd/core.pingcap.com_schedulinggroups.yaml +++ b/manifests/crd/core.pingcap.com_schedulinggroups.yaml @@ -108,6 +108,7 @@ spec: - UseTiFlashReadyAPI - MultiPDGroup - TiCDCDynamicSecretSyncer + - IndependentKVEngineWorker type: string type: array minReadySeconds: diff --git a/manifests/crd/core.pingcap.com_schedulings.yaml b/manifests/crd/core.pingcap.com_schedulings.yaml index d97d2ed821e..fa0ab4f2743 100644 --- a/manifests/crd/core.pingcap.com_schedulings.yaml +++ b/manifests/crd/core.pingcap.com_schedulings.yaml @@ -94,6 +94,7 @@ spec: - UseTiFlashReadyAPI - MultiPDGroup - TiCDCDynamicSecretSyncer + - IndependentKVEngineWorker type: string type: array image: diff --git a/manifests/crd/core.pingcap.com_ticdcgroups.yaml b/manifests/crd/core.pingcap.com_ticdcgroups.yaml index a8a5a238f78..b7a85f6aee8 100644 --- a/manifests/crd/core.pingcap.com_ticdcgroups.yaml +++ b/manifests/crd/core.pingcap.com_ticdcgroups.yaml @@ -104,6 +104,7 @@ spec: - UseTiFlashReadyAPI - MultiPDGroup - TiCDCDynamicSecretSyncer + - IndependentKVEngineWorker type: string type: array minReadySeconds: diff --git a/manifests/crd/core.pingcap.com_ticdcs.yaml b/manifests/crd/core.pingcap.com_ticdcs.yaml index e57ef5d3015..28cd9cd53cd 100644 --- a/manifests/crd/core.pingcap.com_ticdcs.yaml +++ b/manifests/crd/core.pingcap.com_ticdcs.yaml @@ -91,6 +91,7 @@ spec: - UseTiFlashReadyAPI - MultiPDGroup - TiCDCDynamicSecretSyncer + - IndependentKVEngineWorker type: string type: array image: diff --git a/manifests/crd/core.pingcap.com_tidbgroups.yaml b/manifests/crd/core.pingcap.com_tidbgroups.yaml index aeeeaff3a43..5080b1a7448 100644 --- a/manifests/crd/core.pingcap.com_tidbgroups.yaml +++ b/manifests/crd/core.pingcap.com_tidbgroups.yaml @@ -107,6 +107,7 @@ spec: - UseTiFlashReadyAPI - MultiPDGroup - TiCDCDynamicSecretSyncer + - IndependentKVEngineWorker type: string type: array minReadySeconds: diff --git a/manifests/crd/core.pingcap.com_tidbs.yaml b/manifests/crd/core.pingcap.com_tidbs.yaml index 477567ad9f6..cb8b6decd53 100644 --- a/manifests/crd/core.pingcap.com_tidbs.yaml +++ b/manifests/crd/core.pingcap.com_tidbs.yaml @@ -93,6 +93,7 @@ spec: - UseTiFlashReadyAPI - MultiPDGroup - TiCDCDynamicSecretSyncer + - IndependentKVEngineWorker type: string type: array image: diff --git a/manifests/crd/core.pingcap.com_tiflashes.yaml b/manifests/crd/core.pingcap.com_tiflashes.yaml index d5c09fd6e89..792f6181b18 100644 --- a/manifests/crd/core.pingcap.com_tiflashes.yaml +++ b/manifests/crd/core.pingcap.com_tiflashes.yaml @@ -99,6 +99,7 @@ spec: - UseTiFlashReadyAPI - MultiPDGroup - TiCDCDynamicSecretSyncer + - IndependentKVEngineWorker type: string type: array image: diff --git a/manifests/crd/core.pingcap.com_tiflashgroups.yaml b/manifests/crd/core.pingcap.com_tiflashgroups.yaml index 2fb2717abea..02346e60528 100644 --- a/manifests/crd/core.pingcap.com_tiflashgroups.yaml +++ b/manifests/crd/core.pingcap.com_tiflashgroups.yaml @@ -106,6 +106,7 @@ spec: - UseTiFlashReadyAPI - MultiPDGroup - TiCDCDynamicSecretSyncer + - IndependentKVEngineWorker type: string type: array minReadySeconds: diff --git a/manifests/crd/core.pingcap.com_tikvgroups.yaml b/manifests/crd/core.pingcap.com_tikvgroups.yaml index 2b49d17f654..921b20b7361 100644 --- a/manifests/crd/core.pingcap.com_tikvgroups.yaml +++ b/manifests/crd/core.pingcap.com_tikvgroups.yaml @@ -107,6 +107,7 @@ spec: - UseTiFlashReadyAPI - MultiPDGroup - TiCDCDynamicSecretSyncer + - IndependentKVEngineWorker type: string type: array minReadySeconds: @@ -8623,8 +8624,23 @@ spec: RemoteWorkers defines remote workers used by this tikv It only works for nextgen properties: + compactor: + description: Compactor worker reference, if it's not set, + use worker ref by default + properties: + name: + default: "" + description: |- + Name of the referent. + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + type: string + type: object + x-kubernetes-map-type: atomic coprocessor: - description: Coprocessor worker reference, if it's not + description: Coprocessor worker reference, if it's not set, use worker ref by default properties: name: diff --git a/manifests/crd/core.pingcap.com_tikvs.yaml b/manifests/crd/core.pingcap.com_tikvs.yaml index c6b9d309bfa..d0fbabe4817 100644 --- a/manifests/crd/core.pingcap.com_tikvs.yaml +++ b/manifests/crd/core.pingcap.com_tikvs.yaml @@ -100,6 +100,7 @@ spec: - UseTiFlashReadyAPI - MultiPDGroup - TiCDCDynamicSecretSyncer + - IndependentKVEngineWorker type: string type: array image: @@ -8349,8 +8350,23 @@ spec: RemoteWorkers defines remote workers used by this tikv It only works for nextgen properties: + compactor: + description: Compactor worker reference, if it's not set, use + worker ref by default + properties: + name: + default: "" + description: |- + Name of the referent. + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + type: string + type: object + x-kubernetes-map-type: atomic coprocessor: - description: Coprocessor worker reference, if it's not set, use + description: Coprocessor worker reference, if it's not set, use worker ref by default properties: name: diff --git a/manifests/crd/core.pingcap.com_tikvworkergroups.yaml b/manifests/crd/core.pingcap.com_tikvworkergroups.yaml index c2399bc54b7..7b7cd6299c7 100644 --- a/manifests/crd/core.pingcap.com_tikvworkergroups.yaml +++ b/manifests/crd/core.pingcap.com_tikvworkergroups.yaml @@ -108,6 +108,7 @@ spec: - UseTiFlashReadyAPI - MultiPDGroup - TiCDCDynamicSecretSyncer + - IndependentKVEngineWorker type: string type: array minReadySeconds: diff --git a/manifests/crd/core.pingcap.com_tikvworkers.yaml b/manifests/crd/core.pingcap.com_tikvworkers.yaml index 51df7be7715..0382f71f455 100644 --- a/manifests/crd/core.pingcap.com_tikvworkers.yaml +++ b/manifests/crd/core.pingcap.com_tikvworkers.yaml @@ -93,6 +93,7 @@ spec: - UseTiFlashReadyAPI - MultiPDGroup - TiCDCDynamicSecretSyncer + - IndependentKVEngineWorker type: string type: array image: diff --git a/manifests/crd/core.pingcap.com_tiproxies.yaml b/manifests/crd/core.pingcap.com_tiproxies.yaml index 8347d815a8b..b5398e09261 100644 --- a/manifests/crd/core.pingcap.com_tiproxies.yaml +++ b/manifests/crd/core.pingcap.com_tiproxies.yaml @@ -93,6 +93,7 @@ spec: - UseTiFlashReadyAPI - MultiPDGroup - TiCDCDynamicSecretSyncer + - IndependentKVEngineWorker type: string type: array image: diff --git a/manifests/crd/core.pingcap.com_tiproxygroups.yaml b/manifests/crd/core.pingcap.com_tiproxygroups.yaml index 47ed7485233..130c11d9854 100644 --- a/manifests/crd/core.pingcap.com_tiproxygroups.yaml +++ b/manifests/crd/core.pingcap.com_tiproxygroups.yaml @@ -107,6 +107,7 @@ spec: - UseTiFlashReadyAPI - MultiPDGroup - TiCDCDynamicSecretSyncer + - IndependentKVEngineWorker type: string type: array minReadySeconds: diff --git a/manifests/crd/core.pingcap.com_tsogroups.yaml b/manifests/crd/core.pingcap.com_tsogroups.yaml index f42fffad70b..3465b64b5e4 100644 --- a/manifests/crd/core.pingcap.com_tsogroups.yaml +++ b/manifests/crd/core.pingcap.com_tsogroups.yaml @@ -107,6 +107,7 @@ spec: - UseTiFlashReadyAPI - MultiPDGroup - TiCDCDynamicSecretSyncer + - IndependentKVEngineWorker type: string type: array minReadySeconds: diff --git a/manifests/crd/core.pingcap.com_tsos.yaml b/manifests/crd/core.pingcap.com_tsos.yaml index e7125793675..bc1c19876f4 100644 --- a/manifests/crd/core.pingcap.com_tsos.yaml +++ b/manifests/crd/core.pingcap.com_tsos.yaml @@ -93,6 +93,7 @@ spec: - UseTiFlashReadyAPI - MultiPDGroup - TiCDCDynamicSecretSyncer + - IndependentKVEngineWorker type: string type: array image: diff --git a/pkg/configs/tikv/config.go b/pkg/configs/tikv/config.go index f5a60f96987..5347a77d40c 100644 --- a/pkg/configs/tikv/config.go +++ b/pkg/configs/tikv/config.go @@ -21,7 +21,9 @@ import ( corev1 "k8s.io/api/core/v1" "github.com/pingcap/tidb-operator/api/v2/core/v1alpha1" + metav1alpha1 "github.com/pingcap/tidb-operator/api/v2/meta/v1alpha1" coreutil "github.com/pingcap/tidb-operator/v2/pkg/apiutil/core/v1alpha1" + "github.com/pingcap/tidb-operator/v2/pkg/features" "github.com/pingcap/tidb-operator/v2/pkg/runtime/scope" ) @@ -68,7 +70,7 @@ type KVEngine struct { RemoteWorkerAddr string `toml:"remote-worker-addr"` } -func (c *Config) Overlay(cluster *v1alpha1.Cluster, tikv *v1alpha1.TiKV) error { +func (c *Config) Overlay(cluster *v1alpha1.Cluster, tikv *v1alpha1.TiKV, fg features.Gates) error { if err := c.Validate(); err != nil { return err } @@ -107,14 +109,25 @@ func (c *Config) Overlay(cluster *v1alpha1.Cluster, tikv *v1alpha1.TiKV) error { if c.DFS == nil { c.DFS = &DFS{} } + compactor := tikv.Spec.RemoteWorkers.Worker.Name copr := tikv.Spec.RemoteWorkers.Worker.Name + worker := tikv.Spec.RemoteWorkers.Worker.Name + + if tikv.Spec.RemoteWorkers.Compactor != nil { + compactor = tikv.Spec.RemoteWorkers.Compactor.Name + } if tikv.Spec.RemoteWorkers.Coprocessor != nil { copr = tikv.Spec.RemoteWorkers.Coprocessor.Name } + if !fg.Enabled(metav1alpha1.IndependentKVEngineWorker) { + if tikv.Spec.RemoteWorkers.Coprocessor != nil { + worker = tikv.Spec.RemoteWorkers.Coprocessor.Name + } + } c.KVEngine.RemoteCoprocessorAddr = coreutil.TiKVWorkerCoprocessorURLFromRef(cluster, copr) - c.KVEngine.RemoteWorkerAddr = coreutil.TiKVWorkerCoprocessorURLFromRef(cluster, copr) + c.KVEngine.RemoteWorkerAddr = coreutil.TiKVWorkerCoprocessorURLFromRef(cluster, worker) c.DFS.RemoteCompactorAddr = coreutil.TiKVWorkerCompactorURLFromRef(cluster, compactor) } diff --git a/pkg/configs/tikv/config_test.go b/pkg/configs/tikv/config_test.go index ad152b9bc05..bec95bb190e 100644 --- a/pkg/configs/tikv/config_test.go +++ b/pkg/configs/tikv/config_test.go @@ -23,6 +23,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/pingcap/tidb-operator/api/v2/core/v1alpha1" + "github.com/pingcap/tidb-operator/v2/pkg/features" ) func TestValidate(t *testing.T) { @@ -107,7 +108,7 @@ level = "info"`), } cfg := &Config{} - err := cfg.Overlay(cluster, tikv) + err := cfg.Overlay(cluster, tikv, features.NewFromFeatures(nil)) require.NoError(t, err) assert.Equal(t, "[::]:20160", cfg.Server.Addr) assert.Equal(t, "basic-tikv-0.basic-tikv-peer.ns1:20160", cfg.Server.AdvertiseAddr) diff --git a/pkg/controllers/tikv/tasks/cm.go b/pkg/controllers/tikv/tasks/cm.go index 10e2f0c1019..34a2fc5d79d 100644 --- a/pkg/controllers/tikv/tasks/cm.go +++ b/pkg/controllers/tikv/tasks/cm.go @@ -36,7 +36,7 @@ func TaskConfigMap(state *ReconcileContext, c client.Client) task.Task { if err := decoder.Decode([]byte(state.TiKV().Spec.Config), &cfg); err != nil { return task.Fail().With("tikv config cannot be decoded: %w", err) } - if err := cfg.Overlay(state.Cluster(), state.TiKV()); err != nil { + if err := cfg.Overlay(state.Cluster(), state.TiKV(), state.FeatureGates()); err != nil { return task.Fail().With("cannot generate tikv config: %w", err) } diff --git a/pkg/controllers/tikv/tasks/cm_test.go b/pkg/controllers/tikv/tasks/cm_test.go index e0d16a2c67e..5b6d1b3dc62 100644 --- a/pkg/controllers/tikv/tasks/cm_test.go +++ b/pkg/controllers/tikv/tasks/cm_test.go @@ -27,6 +27,8 @@ import ( "github.com/pingcap/tidb-operator/api/v2/core/v1alpha1" "github.com/pingcap/tidb-operator/v2/pkg/client" + "github.com/pingcap/tidb-operator/v2/pkg/runtime/scope" + stateutil "github.com/pingcap/tidb-operator/v2/pkg/state" "github.com/pingcap/tidb-operator/v2/pkg/utils/fake" "github.com/pingcap/tidb-operator/v2/pkg/utils/task/v3" ) @@ -153,6 +155,10 @@ func TestTaskConfigMap(t *testing.T) { fc.WithError("patch", "*", errors.NewInternalError(fmt.Errorf("fake internal err"))) } + if s, ok := c.state.State.(*state); ok && s.IFeatureGates == nil { + s.IFeatureGates = stateutil.NewFeatureGates[scope.TiKV](s) + } + res, done := task.RunTask(ctx, TaskConfigMap(c.state, fc)) assert.Equal(tt, c.expectedStatus.String(), res.Status().String(), res.Message()) assert.False(tt, done, c.desc) diff --git a/pkg/features/reload.go b/pkg/features/reload.go index 681bff42b0b..23db7e43142 100644 --- a/pkg/features/reload.go +++ b/pkg/features/reload.go @@ -78,6 +78,9 @@ var unreloadable = map[meta.Feature][]meta.Component{ meta.TiCDCDynamicSecretSyncer: { meta.ComponentTiCDC, }, + meta.IndependentKVEngineWorker: { + meta.ComponentTiKV, + }, } func Reloadable(c meta.Component, update, current []meta.Feature) bool {