From 9bd180bd4c3e35873e83b02294e736f92637fb16 Mon Sep 17 00:00:00 2001 From: Kirill Sibirev Date: Tue, 16 Apr 2024 15:23:15 +0200 Subject: [PATCH 1/4] Add UpdateStrategy field --- api/v1/ytsaurus_types.go | 16 ++++++++++++++++ .../bases/cluster.ytsaurus.tech_ytsaurus.yaml | 6 ++++++ docs/api.md | 16 ++++++++++++++++ ytop-chart/templates/ytsaurus-crd.yaml | 6 ++++++ 4 files changed, 44 insertions(+) diff --git a/api/v1/ytsaurus_types.go b/api/v1/ytsaurus_types.go index 11a48684..fc32a1d6 100644 --- a/api/v1/ytsaurus_types.go +++ b/api/v1/ytsaurus_types.go @@ -546,6 +546,10 @@ type YtsaurusSpec struct { //+kubebuilder:default:=true //+optional EnableFullUpdate bool `json:"enableFullUpdate"` + //+optional + // UpdateStrategy is an experimental field. Behaviour may change. + // If UpdateStrategy is not empty EnableFullUpdate is ignored. + UpdateStrategy UpdateStrategy `json:"updateStrategy"` Bootstrap *BootstrapSpec `json:"bootstrap,omitempty"` @@ -618,10 +622,22 @@ type TabletCellBundleInfo struct { TabletCellCount int `yson:"tablet_cell_count,attr" json:"tabletCellCount"` } +type UpdateStrategy string + +const ( + UpdateStrategyNone UpdateStrategy = "" + UpdateStrategyBlocked UpdateStrategy = "Blocked" + UpdateStrategyStatelessOnly UpdateStrategy = "StatelessOnly" + UpdateStrategyMasterOnly UpdateStrategy = "MasterOnly" + UpdateStrategyTabletNodesOnly UpdateStrategy = "TabletNodesOnly" + UpdateStrategyFull UpdateStrategy = "Full" +) + type UpdateStatus struct { //+kubebuilder:default:=None State UpdateState `json:"state,omitempty"` Components []string `json:"components,omitempty"` + Strategy UpdateStrategy `json:"updateStrategy,omitempty"` Conditions []metav1.Condition `json:"conditions,omitempty"` TabletCellBundles []TabletCellBundleInfo `json:"tabletCellBundles,omitempty"` MasterMonitoringPaths []string `json:"masterMonitoringPaths,omitempty"` diff --git a/config/crd/bases/cluster.ytsaurus.tech_ytsaurus.yaml b/config/crd/bases/cluster.ytsaurus.tech_ytsaurus.yaml index 67dff921..6c0a580e 100644 --- a/config/crd/bases/cluster.ytsaurus.tech_ytsaurus.yaml +++ b/config/crd/bases/cluster.ytsaurus.tech_ytsaurus.yaml @@ -33433,6 +33433,10 @@ spec: type: object uiImage: type: string + updateStrategy: + description: UpdateStrategy is an experimental field. Behaviour may + change. + type: string useIpv4: default: false type: boolean @@ -35902,6 +35906,8 @@ spec: - tabletCellCount type: object type: array + updateStrategy: + type: string type: object type: object type: object diff --git a/docs/api.md b/docs/api.md index a3f8116a..a0b6a400 100644 --- a/docs/api.md +++ b/docs/api.md @@ -1489,11 +1489,26 @@ _Appears in:_ | --- | --- | --- | --- | | `state` _[UpdateState](#updatestate)_ | | None | | | `components` _string array_ | | | | +| `updateStrategy` _[UpdateStrategy](#updatestrategy)_ | | | | | `conditions` _[Condition](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.28/#condition-v1-meta) array_ | | | | | `tabletCellBundles` _[TabletCellBundleInfo](#tabletcellbundleinfo) array_ | | | | | `masterMonitoringPaths` _string array_ | | | | +#### UpdateStrategy + +_Underlying type:_ _string_ + + + + + +_Appears in:_ +- [UpdateStatus](#updatestatus) +- [YtsaurusSpec](#ytsaurusspec) + + + #### YQLAgentSpec @@ -1577,6 +1592,7 @@ _Appears in:_ | `oauthService` _[OauthServiceSpec](#oauthservicespec)_ | | | | | `isManaged` _boolean_ | | true | | | `enableFullUpdate` _boolean_ | | true | | +| `updateStrategy` _[UpdateStrategy](#updatestrategy)_ | UpdateStrategy is an experimental field. Behaviour may change.
If UpdateStrategy is not empty EnableFullUpdate is ignored. | | | | `bootstrap` _[BootstrapSpec](#bootstrapspec)_ | | | | | `discovery` _[DiscoverySpec](#discoveryspec)_ | | | | | `primaryMasters` _[MastersSpec](#mastersspec)_ | | | | diff --git a/ytop-chart/templates/ytsaurus-crd.yaml b/ytop-chart/templates/ytsaurus-crd.yaml index a63cada9..d4f0939f 100644 --- a/ytop-chart/templates/ytsaurus-crd.yaml +++ b/ytop-chart/templates/ytsaurus-crd.yaml @@ -33220,6 +33220,10 @@ spec: type: object uiImage: type: string + updateStrategy: + description: UpdateStrategy is an experimental field. Behaviour may + change. + type: string useIpv4: default: false type: boolean @@ -35670,6 +35674,8 @@ spec: - tabletCellCount type: object type: array + updateStrategy: + type: string type: object type: object type: object From ddb402df44f5274e0e5d19d5ed0b45e81f6a273f Mon Sep 17 00:00:00 2001 From: Kirill Sibirev Date: Thu, 18 Apr 2024 17:09:24 +0200 Subject: [PATCH 2/4] Strategy = selector + flow --- api/v1/ytsaurus_types.go | 33 ++++++++++----- .../bases/cluster.ytsaurus.tech_ytsaurus.yaml | 8 ++-- docs/api.md | 42 ++++++++++++------- ytop-chart/templates/ytsaurus-crd.yaml | 8 ++-- 4 files changed, 57 insertions(+), 34 deletions(-) diff --git a/api/v1/ytsaurus_types.go b/api/v1/ytsaurus_types.go index fc32a1d6..6e0effe0 100644 --- a/api/v1/ytsaurus_types.go +++ b/api/v1/ytsaurus_types.go @@ -547,9 +547,9 @@ type YtsaurusSpec struct { //+optional EnableFullUpdate bool `json:"enableFullUpdate"` //+optional - // UpdateStrategy is an experimental field. Behaviour may change. - // If UpdateStrategy is not empty EnableFullUpdate is ignored. - UpdateStrategy UpdateStrategy `json:"updateStrategy"` + // UpdateSelector is an experimental field. Behaviour may change. + // If UpdateSelector is not empty EnableFullUpdate is ignored. + UpdateSelector UpdateSelector `json:"updateSelector"` Bootstrap *BootstrapSpec `json:"bootstrap,omitempty"` @@ -622,22 +622,33 @@ type TabletCellBundleInfo struct { TabletCellCount int `yson:"tablet_cell_count,attr" json:"tabletCellCount"` } -type UpdateStrategy string +type UpdateSelector string const ( - UpdateStrategyNone UpdateStrategy = "" - UpdateStrategyBlocked UpdateStrategy = "Blocked" - UpdateStrategyStatelessOnly UpdateStrategy = "StatelessOnly" - UpdateStrategyMasterOnly UpdateStrategy = "MasterOnly" - UpdateStrategyTabletNodesOnly UpdateStrategy = "TabletNodesOnly" - UpdateStrategyFull UpdateStrategy = "Full" + UpdateSelectorNone UpdateSelector = "" + UpdateSelectorNothing UpdateSelector = "Nothing" + UpdateSelectorStatelessOnly UpdateSelector = "StatelessOnly" + UpdateSelectorMasterOnly UpdateSelector = "MasterOnly" + UpdateSelectorTabletNodesOnly UpdateSelector = "TabletNodesOnly" + UpdateSelectorExecNodesOnly UpdateSelector = "ExecNodesOnly" + UpdateSelectorEverything UpdateSelector = "Everything" +) + +type UpdateFlow string + +const ( + UpdateFlowNone UpdateFlow = "" + UpdateFlowStateless UpdateFlow = "Stateless" + UpdateFlowMaster UpdateFlow = "Master" + UpdateFlowTabletNodes UpdateFlow = "TabletNodes" + UpdateFlowFull UpdateFlow = "Full" ) type UpdateStatus struct { //+kubebuilder:default:=None State UpdateState `json:"state,omitempty"` Components []string `json:"components,omitempty"` - Strategy UpdateStrategy `json:"updateStrategy,omitempty"` + Flow UpdateFlow `json:"flow,omitempty"` Conditions []metav1.Condition `json:"conditions,omitempty"` TabletCellBundles []TabletCellBundleInfo `json:"tabletCellBundles,omitempty"` MasterMonitoringPaths []string `json:"masterMonitoringPaths,omitempty"` diff --git a/config/crd/bases/cluster.ytsaurus.tech_ytsaurus.yaml b/config/crd/bases/cluster.ytsaurus.tech_ytsaurus.yaml index 6c0a580e..40010734 100644 --- a/config/crd/bases/cluster.ytsaurus.tech_ytsaurus.yaml +++ b/config/crd/bases/cluster.ytsaurus.tech_ytsaurus.yaml @@ -33433,8 +33433,8 @@ spec: type: object uiImage: type: string - updateStrategy: - description: UpdateStrategy is an experimental field. Behaviour may + updateSelector: + description: UpdateSelector is an experimental field. Behaviour may change. type: string useIpv4: @@ -35887,6 +35887,8 @@ spec: - type type: object type: array + flow: + type: string masterMonitoringPaths: items: type: string @@ -35906,8 +35908,6 @@ spec: - tabletCellCount type: object type: array - updateStrategy: - type: string type: object type: object type: object diff --git a/docs/api.md b/docs/api.md index a0b6a400..1d337965 100644 --- a/docs/api.md +++ b/docs/api.md @@ -1461,7 +1461,7 @@ _Appears in:_ | `group` _string_ | | | | -#### UpdateState +#### UpdateFlow _Underlying type:_ _string_ @@ -1474,28 +1474,20 @@ _Appears in:_ -#### UpdateStatus - +#### UpdateSelector +_Underlying type:_ _string_ _Appears in:_ -- [YtsaurusStatus](#ytsaurusstatus) +- [YtsaurusSpec](#ytsaurusspec) -| Field | Description | Default | Validation | -| --- | --- | --- | --- | -| `state` _[UpdateState](#updatestate)_ | | None | | -| `components` _string array_ | | | | -| `updateStrategy` _[UpdateStrategy](#updatestrategy)_ | | | | -| `conditions` _[Condition](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.28/#condition-v1-meta) array_ | | | | -| `tabletCellBundles` _[TabletCellBundleInfo](#tabletcellbundleinfo) array_ | | | | -| `masterMonitoringPaths` _string array_ | | | | -#### UpdateStrategy +#### UpdateState _Underlying type:_ _string_ @@ -1505,10 +1497,30 @@ _Underlying type:_ _string_ _Appears in:_ - [UpdateStatus](#updatestatus) -- [YtsaurusSpec](#ytsaurusspec) +#### UpdateStatus + + + + + + + +_Appears in:_ +- [YtsaurusStatus](#ytsaurusstatus) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `state` _[UpdateState](#updatestate)_ | | None | | +| `components` _string array_ | | | | +| `flow` _[UpdateFlow](#updateflow)_ | | | | +| `conditions` _[Condition](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.28/#condition-v1-meta) array_ | | | | +| `tabletCellBundles` _[TabletCellBundleInfo](#tabletcellbundleinfo) array_ | | | | +| `masterMonitoringPaths` _string array_ | | | | + + #### YQLAgentSpec @@ -1592,7 +1604,7 @@ _Appears in:_ | `oauthService` _[OauthServiceSpec](#oauthservicespec)_ | | | | | `isManaged` _boolean_ | | true | | | `enableFullUpdate` _boolean_ | | true | | -| `updateStrategy` _[UpdateStrategy](#updatestrategy)_ | UpdateStrategy is an experimental field. Behaviour may change.
If UpdateStrategy is not empty EnableFullUpdate is ignored. | | | +| `updateSelector` _[UpdateSelector](#updateselector)_ | UpdateSelector is an experimental field. Behaviour may change.
If UpdateSelector is not empty EnableFullUpdate is ignored. | | | | `bootstrap` _[BootstrapSpec](#bootstrapspec)_ | | | | | `discovery` _[DiscoverySpec](#discoveryspec)_ | | | | | `primaryMasters` _[MastersSpec](#mastersspec)_ | | | | diff --git a/ytop-chart/templates/ytsaurus-crd.yaml b/ytop-chart/templates/ytsaurus-crd.yaml index d4f0939f..e863a0b1 100644 --- a/ytop-chart/templates/ytsaurus-crd.yaml +++ b/ytop-chart/templates/ytsaurus-crd.yaml @@ -33220,8 +33220,8 @@ spec: type: object uiImage: type: string - updateStrategy: - description: UpdateStrategy is an experimental field. Behaviour may + updateSelector: + description: UpdateSelector is an experimental field. Behaviour may change. type: string useIpv4: @@ -35655,6 +35655,8 @@ spec: - type type: object type: array + flow: + type: string masterMonitoringPaths: items: type: string @@ -35674,8 +35676,6 @@ spec: - tabletCellCount type: object type: array - updateStrategy: - type: string type: object type: object type: object From 1a0c5b6cfe56f5ea381227c7fed105b9a1b6bc40 Mon Sep 17 00:00:00 2001 From: Kirill Sibirev Date: Mon, 22 Apr 2024 10:34:25 +0200 Subject: [PATCH 3/4] Unspecified + flow comment --- api/v1/ytsaurus_types.go | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/api/v1/ytsaurus_types.go b/api/v1/ytsaurus_types.go index 6e0effe0..93df16cd 100644 --- a/api/v1/ytsaurus_types.go +++ b/api/v1/ytsaurus_types.go @@ -625,13 +625,22 @@ type TabletCellBundleInfo struct { type UpdateSelector string const ( - UpdateSelectorNone UpdateSelector = "" - UpdateSelectorNothing UpdateSelector = "Nothing" - UpdateSelectorStatelessOnly UpdateSelector = "StatelessOnly" - UpdateSelectorMasterOnly UpdateSelector = "MasterOnly" + // UpdateSelectorUnspecified means that selector is disabled and would be ignored completely. + UpdateSelectorUnspecified UpdateSelector = "" + // UpdateSelectorNothing means that no component could be updated. + UpdateSelectorNothing UpdateSelector = "Nothing" + // UpdateSelectorStatelessOnly means that only stateless components (everything but master and tablet nodes) + // could be updated. + UpdateSelectorStatelessOnly UpdateSelector = "StatelessOnly" + // UpdateSelectorMasterOnly means that only master could be updated. + UpdateSelectorMasterOnly UpdateSelector = "MasterOnly" + // UpdateSelectorTabletNodesOnly means that only tablet nodes could be updated UpdateSelectorTabletNodesOnly UpdateSelector = "TabletNodesOnly" - UpdateSelectorExecNodesOnly UpdateSelector = "ExecNodesOnly" - UpdateSelectorEverything UpdateSelector = "Everything" + // UpdateSelectorExecNodesOnly means that only tablet nodes could be updated + UpdateSelectorExecNodesOnly UpdateSelector = "ExecNodesOnly" + // UpdateSelectorEverything means that all components could be updated. + // With this setting and if master or tablet nodes need update all the components would be updated. + UpdateSelectorEverything UpdateSelector = "Everything" ) type UpdateFlow string @@ -646,8 +655,11 @@ const ( type UpdateStatus struct { //+kubebuilder:default:=None - State UpdateState `json:"state,omitempty"` - Components []string `json:"components,omitempty"` + State UpdateState `json:"state,omitempty"` + Components []string `json:"components,omitempty"` + // Flow is an internal field that is needed to persist the chosen flow until the end of an update. + // Flow can be on of ""(unspecified), Stateless, Master, TabletNodes, Full and update cluster stage + // executes steps corresponding to that update flow. Flow UpdateFlow `json:"flow,omitempty"` Conditions []metav1.Condition `json:"conditions,omitempty"` TabletCellBundles []TabletCellBundleInfo `json:"tabletCellBundles,omitempty"` From 0802d2c79d19861e792d0b7bf51e08ef491f52e4 Mon Sep 17 00:00:00 2001 From: Kirill Sibirev Date: Mon, 22 Apr 2024 10:37:01 +0200 Subject: [PATCH 4/4] regenerate --- config/crd/bases/cluster.ytsaurus.tech_ytsaurus.yaml | 2 ++ docs/api.md | 2 +- ytop-chart/templates/ytsaurus-crd.yaml | 2 ++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/config/crd/bases/cluster.ytsaurus.tech_ytsaurus.yaml b/config/crd/bases/cluster.ytsaurus.tech_ytsaurus.yaml index 40010734..5b4cc373 100644 --- a/config/crd/bases/cluster.ytsaurus.tech_ytsaurus.yaml +++ b/config/crd/bases/cluster.ytsaurus.tech_ytsaurus.yaml @@ -35888,6 +35888,8 @@ spec: type: object type: array flow: + description: Flow is an internal field that is needed to persist + the chosen flow until the en type: string masterMonitoringPaths: items: diff --git a/docs/api.md b/docs/api.md index 1d337965..b94e5f06 100644 --- a/docs/api.md +++ b/docs/api.md @@ -1515,7 +1515,7 @@ _Appears in:_ | --- | --- | --- | --- | | `state` _[UpdateState](#updatestate)_ | | None | | | `components` _string array_ | | | | -| `flow` _[UpdateFlow](#updateflow)_ | | | | +| `flow` _[UpdateFlow](#updateflow)_ | Flow is an internal field that is needed to persist the chosen flow until the end of an update.
Flow can be on of ""(unspecified), Stateless, Master, TabletNodes, Full and update cluster stage
executes steps corresponding to that update flow. | | | | `conditions` _[Condition](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.28/#condition-v1-meta) array_ | | | | | `tabletCellBundles` _[TabletCellBundleInfo](#tabletcellbundleinfo) array_ | | | | | `masterMonitoringPaths` _string array_ | | | | diff --git a/ytop-chart/templates/ytsaurus-crd.yaml b/ytop-chart/templates/ytsaurus-crd.yaml index e863a0b1..d3731c76 100644 --- a/ytop-chart/templates/ytsaurus-crd.yaml +++ b/ytop-chart/templates/ytsaurus-crd.yaml @@ -35656,6 +35656,8 @@ spec: type: object type: array flow: + description: Flow is an internal field that is needed to persist + the chosen flow until the en type: string masterMonitoringPaths: items: