From fffbe1a3c2126c1d8d57af9bc33f2e53e3c2c463 Mon Sep 17 00:00:00 2001 From: ajanikow <12255597+ajanikow@users.noreply.github.com> Date: Thu, 17 Sep 2020 09:42:56 +0000 Subject: [PATCH 1/6] Fix backup flow --- pkg/apis/deployment/v1/member_status.go | 5 +- pkg/apis/deployment/v1/plan.go | 2 + pkg/apis/deployment/v1/server_group.go | 2 +- .../deployment/v1/zz_generated.deepcopy.go | 5 + pkg/deployment/features/upgrade.go | 39 ++++++++ pkg/deployment/members.go | 6 ++ pkg/deployment/reconcile/action_context.go | 13 +-- .../reconcile/action_set_current_image.go | 96 +++++++++++++++++++ .../reconcile/action_upgrade_current_image.go | 3 +- .../reconcile/plan_builder_rotate_upgrade.go | 24 +++-- pkg/deployment/resources/pod_creator.go | 31 +++++- 11 files changed, 209 insertions(+), 17 deletions(-) create mode 100644 pkg/deployment/features/upgrade.go create mode 100644 pkg/deployment/reconcile/action_set_current_image.go diff --git a/pkg/apis/deployment/v1/member_status.go b/pkg/apis/deployment/v1/member_status.go index bd300a82c..d8c75582a 100644 --- a/pkg/apis/deployment/v1/member_status.go +++ b/pkg/apis/deployment/v1/member_status.go @@ -67,6 +67,8 @@ type MemberStatus struct { ArangoVersion driver.Version `json:"arango-version,omitempty"` // ImageId holds the members ArangoDB image ID ImageID string `json:"image-id,omitempty"` + // Image holds image details + Image *ImageInfo `json:"image,omitempty"` } // Equal checks for equality @@ -81,7 +83,8 @@ func (s MemberStatus) Equal(other MemberStatus) bool { s.CleanoutJobID == other.CleanoutJobID && reflect.DeepEqual(s.SideCarSpecs, other.SideCarSpecs) && s.ArangoVersion == other.ArangoVersion && - s.ImageID == other.ImageID + s.ImageID == other.ImageID && + s.Image.Equal(other.Image) } // Age returns the duration since the creation timestamp of this member. diff --git a/pkg/apis/deployment/v1/plan.go b/pkg/apis/deployment/v1/plan.go index aecd51382..74b721e5a 100644 --- a/pkg/apis/deployment/v1/plan.go +++ b/pkg/apis/deployment/v1/plan.go @@ -81,6 +81,8 @@ const ( ActionTypeUpdateTLSSNI ActionType = "UpdateTLSSNI" // ActionTypeSetCurrentImage causes status.CurrentImage to be updated to the image given in the action. ActionTypeSetCurrentImage ActionType = "SetCurrentImage" + // ActionTypeSetCurrentImage replace image of member to current one. + ActionTypeSetMemberCurrentImage ActionType = "SetMemberCurrentImage" // ActionTypeDisableClusterScaling turns off scaling DBservers and coordinators ActionTypeDisableClusterScaling ActionType = "ScalingDisabled" // ActionTypeEnableClusterScaling turns on scaling DBservers and coordinators diff --git a/pkg/apis/deployment/v1/server_group.go b/pkg/apis/deployment/v1/server_group.go index 727fb470a..55ee740f9 100644 --- a/pkg/apis/deployment/v1/server_group.go +++ b/pkg/apis/deployment/v1/server_group.go @@ -119,7 +119,7 @@ func (g ServerGroup) DefaultTerminationGracePeriod() time.Duration { // IsStateless returns true when the groups runs servers without a persistent volume. func (g ServerGroup) IsStateless() bool { switch g { - case ServerGroupCoordinators, ServerGroupSyncMasters, ServerGroupSyncWorkers: + case ServerGroupSyncMasters, ServerGroupSyncWorkers: return true default: return false diff --git a/pkg/apis/deployment/v1/zz_generated.deepcopy.go b/pkg/apis/deployment/v1/zz_generated.deepcopy.go index c69d5499e..05ec32228 100644 --- a/pkg/apis/deployment/v1/zz_generated.deepcopy.go +++ b/pkg/apis/deployment/v1/zz_generated.deepcopy.go @@ -814,6 +814,11 @@ func (in *MemberStatus) DeepCopyInto(out *MemberStatus) { (*out)[key] = *val.DeepCopy() } } + if in.Image != nil { + in, out := &in.Image, &out.Image + *out = new(ImageInfo) + **out = **in + } return } diff --git a/pkg/deployment/features/upgrade.go b/pkg/deployment/features/upgrade.go new file mode 100644 index 000000000..a4307d122 --- /dev/null +++ b/pkg/deployment/features/upgrade.go @@ -0,0 +1,39 @@ +// +// DISCLAIMER +// +// Copyright 2020 ArangoDB GmbH, Cologne, Germany +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Copyright holder is ArangoDB GmbH, Cologne, Germany +// +// Author Adam Janikowski +// + +package features + +func init() { + registerFeature(upgradeV2) +} + +var upgradeV2 = &feature{ + name: "upgrade-v2", + description: "Enable V2 Upgrade flow", + version: "3.5.0", + enterpriseRequired: false, + enabledByDefault: true, +} + +func UpgradeV2() Feature { + return upgradeV2 +} diff --git a/pkg/deployment/members.go b/pkg/deployment/members.go index 2cc5941ff..641315678 100644 --- a/pkg/deployment/members.go +++ b/pkg/deployment/members.go @@ -95,6 +95,7 @@ func createMember(log zerolog.Logger, status *api.DeploymentStatus, group api.Se Phase: api.MemberPhaseNone, PersistentVolumeClaimName: k8sutil.CreatePersistentVolumeClaimName(deploymentName, role, id), PodName: "", + Image: apiObject.Status.CurrentImage, }, group); err != nil { return "", maskAny(err) } @@ -106,6 +107,7 @@ func createMember(log zerolog.Logger, status *api.DeploymentStatus, group api.Se Phase: api.MemberPhaseNone, PersistentVolumeClaimName: k8sutil.CreatePersistentVolumeClaimName(deploymentName, role, id), PodName: "", + Image: apiObject.Status.CurrentImage, }, group); err != nil { return "", maskAny(err) } @@ -117,6 +119,7 @@ func createMember(log zerolog.Logger, status *api.DeploymentStatus, group api.Se Phase: api.MemberPhaseNone, PersistentVolumeClaimName: k8sutil.CreatePersistentVolumeClaimName(deploymentName, role, id), PodName: "", + Image: apiObject.Status.CurrentImage, }, group); err != nil { return "", maskAny(err) } @@ -128,6 +131,7 @@ func createMember(log zerolog.Logger, status *api.DeploymentStatus, group api.Se Phase: api.MemberPhaseNone, PersistentVolumeClaimName: "", PodName: "", + Image: apiObject.Status.CurrentImage, }, group); err != nil { return "", maskAny(err) } @@ -139,6 +143,7 @@ func createMember(log zerolog.Logger, status *api.DeploymentStatus, group api.Se Phase: api.MemberPhaseNone, PersistentVolumeClaimName: "", PodName: "", + Image: apiObject.Status.CurrentImage, }, group); err != nil { return "", maskAny(err) } @@ -150,6 +155,7 @@ func createMember(log zerolog.Logger, status *api.DeploymentStatus, group api.Se Phase: api.MemberPhaseNone, PersistentVolumeClaimName: "", PodName: "", + Image: apiObject.Status.CurrentImage, }, group); err != nil { return "", maskAny(err) } diff --git a/pkg/deployment/reconcile/action_context.go b/pkg/deployment/reconcile/action_context.go index a16b902ba..83e8da60a 100644 --- a/pkg/deployment/reconcile/action_context.go +++ b/pkg/deployment/reconcile/action_context.go @@ -399,12 +399,13 @@ func (ac *actionContext) GetCurrentImageInfo() (api.ImageInfo, bool) { // SetCurrentImage changes the CurrentImage field in the deployment // status to the given image. func (ac *actionContext) SetCurrentImage(imageInfo api.ImageInfo) error { - status, lastVersion := ac.context.GetStatus() - status.CurrentImage = &imageInfo - if err := ac.context.UpdateStatus(status, lastVersion); err != nil { - return maskAny(err) - } - return nil + return ac.context.WithStatusUpdate(func(s *api.DeploymentStatus) bool { + if s.CurrentImage == nil || s.CurrentImage.Image != imageInfo.Image { + s.CurrentImage = &imageInfo + return true + } + return false + }, true) } // InvalidateSyncStatus resets the sync state to false and triggers an inspection diff --git a/pkg/deployment/reconcile/action_set_current_image.go b/pkg/deployment/reconcile/action_set_current_image.go new file mode 100644 index 000000000..be59995ea --- /dev/null +++ b/pkg/deployment/reconcile/action_set_current_image.go @@ -0,0 +1,96 @@ +// +// DISCLAIMER +// +// Copyright 2020 ArangoDB GmbH, Cologne, Germany +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Copyright holder is ArangoDB GmbH, Cologne, Germany +// +// Author Ewout Prangsma +// + +package reconcile + +import ( + "context" + + api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" + "github.com/rs/zerolog" +) + +func init() { + registerAction(api.ActionTypeSetMemberCurrentImage, newSetCurrentMemberImageAction) +} + +// newSetCurrentImageAction creates a new Action that implements the given +// planned SetCurrentImage action. +func newSetCurrentMemberImageAction(log zerolog.Logger, action api.Action, actionCtx ActionContext) Action { + a := &setCurrentMemberImageAction{} + + a.actionImpl = newActionImplDefRef(log, action, actionCtx, upgradeMemberTimeout) + + return a +} + +// setCurrentImageAction implements an SetCurrentImage. +type setCurrentMemberImageAction struct { + // actionImpl implement timeout and member id functions + actionImpl +} + +// Start performs the start of the action. +// Returns true if the action is completely finished, false in case +// the start time needs to be recorded and a ready condition needs to be checked. +func (a *setCurrentMemberImageAction) Start(ctx context.Context) (bool, error) { + ready, _, err := a.CheckProgress(ctx) + if err != nil { + return false, maskAny(err) + } + return ready, nil +} + +// CheckProgress checks the progress of the action. +// Returns true if the action is completely finished, false otherwise. +func (a *setCurrentMemberImageAction) CheckProgress(ctx context.Context) (bool, bool, error) { + log := a.log + + imageInfo, found := a.actionCtx.GetImageInfo(a.action.Image) + if !found { + log.Info().Msgf("Image not found") + return true, false, nil + } + + if err := a.actionCtx.WithStatusUpdate(func(s *api.DeploymentStatus) bool { + log.Info().Msgf("Resolving member") + m, g, found := s.Members.ElementByID(a.action.MemberID) + if !found { + log.Error().Msg("No such member") + return false + } + + m.Image = &imageInfo + + if err := s.Members.Update(m, g); err != nil { + log.Error().Msg("Member update failed") + return false + } + + return true + }); err != nil { + log.Error().Msg("Member failed") + return true, false, nil + } + + return true, false, nil +} diff --git a/pkg/deployment/reconcile/action_upgrade_current_image.go b/pkg/deployment/reconcile/action_upgrade_current_image.go index be9703c42..b16757046 100644 --- a/pkg/deployment/reconcile/action_upgrade_current_image.go +++ b/pkg/deployment/reconcile/action_upgrade_current_image.go @@ -72,6 +72,7 @@ func (a *setCurrentImageAction) CheckProgress(ctx context.Context) (bool, bool, if err := a.actionCtx.SetCurrentImage(imageInfo); err != nil { return false, false, maskAny(err) } - log.Info().Str("image", a.action.Image).Msg("Changed current image") + status := a.actionCtx.GetStatus() + log.Info().Str("image", a.action.Image).Str("to", imageInfo.Image).Str("OV", status.CurrentImage.Image).Msg("Changed current main image") return true, false, nil } diff --git a/pkg/deployment/reconcile/plan_builder_rotate_upgrade.go b/pkg/deployment/reconcile/plan_builder_rotate_upgrade.go index 00469e894..41b54dc68 100644 --- a/pkg/deployment/reconcile/plan_builder_rotate_upgrade.go +++ b/pkg/deployment/reconcile/plan_builder_rotate_upgrade.go @@ -25,6 +25,8 @@ package reconcile import ( "context" + "github.com/arangodb/kube-arangodb/pkg/deployment/features" + "github.com/arangodb/go-driver" upgraderules "github.com/arangodb/go-upgrade-rules" "github.com/arangodb/kube-arangodb/pkg/apis/deployment" @@ -260,6 +262,10 @@ func podNeedsRotation(log zerolog.Logger, p *core.Pod, apiObject metav1.Object, return false, "" } + if features.UpgradeV2().Enabled() && m.Image != nil { + imageInfo = *m.Image + } + renderedPod, err := context.RenderPodForMember(cachedStatus, spec, status, m.ID, imageInfo) if err != nil { log.Err(err).Msg("Error while rendering pod") @@ -302,14 +308,20 @@ func createUpgradeMemberPlan(log zerolog.Logger, member api.MemberStatus, Str("reason", reason). Str("action", string(upgradeAction)). Msg("Creating upgrade plan") - plan := api.Plan{ - api.NewAction(upgradeAction, group, member.ID, reason), - api.NewAction(api.ActionTypeWaitForMemberUp, group, member.ID), - } + var plan api.Plan if status.CurrentImage == nil || status.CurrentImage.Image != imageName { - plan = append(api.Plan{ + plan = append(plan, api.NewAction(api.ActionTypeSetCurrentImage, group, "", reason).SetImage(imageName), - }, plan...) + ) + } + if member.Image == nil || member.Image.Image != imageName { + plan = append(plan, + api.NewAction(api.ActionTypeSetMemberCurrentImage, group, member.ID, reason).SetImage(imageName), + ) } + plan = append(plan, + api.NewAction(upgradeAction, group, member.ID, reason), + api.NewAction(api.ActionTypeWaitForMemberUp, group, member.ID), + ) return plan } diff --git a/pkg/deployment/resources/pod_creator.go b/pkg/deployment/resources/pod_creator.go index 7c0d5d5aa..e132323db 100644 --- a/pkg/deployment/resources/pod_creator.go +++ b/pkg/deployment/resources/pod_creator.go @@ -416,7 +416,30 @@ func (r *Resources) createPodForMember(spec api.DeploymentSpec, memberID string, }) return nil } - status.CurrentImage = &imageInfo + + if status.CurrentImage == nil { + status.CurrentImage = &imageInfo + } + + m, group, found := status.Members.ElementByID(memberID) + if m.Image == nil { + m.Image = status.CurrentImage + + if err := status.Members.Update(m, group); err != nil { + return maskAny(err) + } + if err := r.context.UpdateStatus(status, lastVersion); err != nil { + return maskAny(err) + } + + status, lastVersion = r.context.GetStatus() + + m, group, found = status.Members.ElementByID(memberID) + } + + if features.UpgradeV2().Enabled() { + imageInfo = *m.Image + } pod, err := r.RenderPodForMember(cachedStatus, spec, status, memberID, imageInfo) if err != nil { @@ -427,7 +450,6 @@ func (r *Resources) createPodForMember(spec api.DeploymentSpec, memberID string, apiObject := r.context.GetAPIObject() ns := r.context.GetNamespace() secrets := kubecli.CoreV1().Secrets(ns) - m, group, found := status.Members.ElementByID(memberID) if !found { return maskAny(fmt.Errorf("Member '%s' not found", memberID)) } @@ -464,6 +486,11 @@ func (r *Resources) createPodForMember(spec api.DeploymentSpec, memberID string, } log.Debug().Str("pod-name", m.PodName).Msg("Created pod") + if m.Image == nil { + log.Debug().Str("pod-name", m.PodName).Msg("Created pod with default image") + } else { + log.Debug().Str("pod-name", m.PodName).Msg("Created pod with predefined image") + } } else if group.IsArangosync() { // Check monitoring token secret if group == api.ServerGroupSyncMasters { From 6b79d1218708e4c5a10b4168863aefc3d12546ee Mon Sep 17 00:00:00 2001 From: ajanikow <12255597+ajanikow@users.noreply.github.com> Date: Thu, 17 Sep 2020 09:45:36 +0000 Subject: [PATCH 2/6] Remove flag --- pkg/deployment/features/upgrade.go | 39 ------------------- .../reconcile/plan_builder_rotate_upgrade.go | 4 +- pkg/deployment/resources/pod_creator.go | 4 +- 3 files changed, 2 insertions(+), 45 deletions(-) delete mode 100644 pkg/deployment/features/upgrade.go diff --git a/pkg/deployment/features/upgrade.go b/pkg/deployment/features/upgrade.go deleted file mode 100644 index a4307d122..000000000 --- a/pkg/deployment/features/upgrade.go +++ /dev/null @@ -1,39 +0,0 @@ -// -// DISCLAIMER -// -// Copyright 2020 ArangoDB GmbH, Cologne, Germany -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Copyright holder is ArangoDB GmbH, Cologne, Germany -// -// Author Adam Janikowski -// - -package features - -func init() { - registerFeature(upgradeV2) -} - -var upgradeV2 = &feature{ - name: "upgrade-v2", - description: "Enable V2 Upgrade flow", - version: "3.5.0", - enterpriseRequired: false, - enabledByDefault: true, -} - -func UpgradeV2() Feature { - return upgradeV2 -} diff --git a/pkg/deployment/reconcile/plan_builder_rotate_upgrade.go b/pkg/deployment/reconcile/plan_builder_rotate_upgrade.go index 41b54dc68..22f63dfd0 100644 --- a/pkg/deployment/reconcile/plan_builder_rotate_upgrade.go +++ b/pkg/deployment/reconcile/plan_builder_rotate_upgrade.go @@ -25,8 +25,6 @@ package reconcile import ( "context" - "github.com/arangodb/kube-arangodb/pkg/deployment/features" - "github.com/arangodb/go-driver" upgraderules "github.com/arangodb/go-upgrade-rules" "github.com/arangodb/kube-arangodb/pkg/apis/deployment" @@ -262,7 +260,7 @@ func podNeedsRotation(log zerolog.Logger, p *core.Pod, apiObject metav1.Object, return false, "" } - if features.UpgradeV2().Enabled() && m.Image != nil { + if m.Image != nil { imageInfo = *m.Image } diff --git a/pkg/deployment/resources/pod_creator.go b/pkg/deployment/resources/pod_creator.go index e132323db..2661b5b26 100644 --- a/pkg/deployment/resources/pod_creator.go +++ b/pkg/deployment/resources/pod_creator.go @@ -437,9 +437,7 @@ func (r *Resources) createPodForMember(spec api.DeploymentSpec, memberID string, m, group, found = status.Members.ElementByID(memberID) } - if features.UpgradeV2().Enabled() { - imageInfo = *m.Image - } + imageInfo = *m.Image pod, err := r.RenderPodForMember(cachedStatus, spec, status, memberID, imageInfo) if err != nil { From b90e165776eee714a4ab6dd87d92cc67f1aaa3e8 Mon Sep 17 00:00:00 2001 From: ajanikow <12255597+ajanikow@users.noreply.github.com> Date: Thu, 17 Sep 2020 09:46:35 +0000 Subject: [PATCH 3/6] Clean logs --- pkg/deployment/reconcile/action_set_current_image.go | 1 - pkg/deployment/reconcile/action_upgrade_current_image.go | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/pkg/deployment/reconcile/action_set_current_image.go b/pkg/deployment/reconcile/action_set_current_image.go index be59995ea..fe4707fba 100644 --- a/pkg/deployment/reconcile/action_set_current_image.go +++ b/pkg/deployment/reconcile/action_set_current_image.go @@ -72,7 +72,6 @@ func (a *setCurrentMemberImageAction) CheckProgress(ctx context.Context) (bool, } if err := a.actionCtx.WithStatusUpdate(func(s *api.DeploymentStatus) bool { - log.Info().Msgf("Resolving member") m, g, found := s.Members.ElementByID(a.action.MemberID) if !found { log.Error().Msg("No such member") diff --git a/pkg/deployment/reconcile/action_upgrade_current_image.go b/pkg/deployment/reconcile/action_upgrade_current_image.go index b16757046..b24b242ed 100644 --- a/pkg/deployment/reconcile/action_upgrade_current_image.go +++ b/pkg/deployment/reconcile/action_upgrade_current_image.go @@ -72,7 +72,6 @@ func (a *setCurrentImageAction) CheckProgress(ctx context.Context) (bool, bool, if err := a.actionCtx.SetCurrentImage(imageInfo); err != nil { return false, false, maskAny(err) } - status := a.actionCtx.GetStatus() - log.Info().Str("image", a.action.Image).Str("to", imageInfo.Image).Str("OV", status.CurrentImage.Image).Msg("Changed current main image") + log.Info().Str("image", a.action.Image).Str("to", imageInfo.Image).Msg("Changed current main image") return true, false, nil } From f7ba37eae8d91228c60d70649961f5abf29b469a Mon Sep 17 00:00:00 2001 From: ajanikow <12255597+ajanikow@users.noreply.github.com> Date: Thu, 17 Sep 2020 10:13:07 +0000 Subject: [PATCH 4/6] Revert coordinator stateless --- pkg/apis/deployment/v1/server_group.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/apis/deployment/v1/server_group.go b/pkg/apis/deployment/v1/server_group.go index 55ee740f9..727fb470a 100644 --- a/pkg/apis/deployment/v1/server_group.go +++ b/pkg/apis/deployment/v1/server_group.go @@ -119,7 +119,7 @@ func (g ServerGroup) DefaultTerminationGracePeriod() time.Duration { // IsStateless returns true when the groups runs servers without a persistent volume. func (g ServerGroup) IsStateless() bool { switch g { - case ServerGroupSyncMasters, ServerGroupSyncWorkers: + case ServerGroupCoordinators, ServerGroupSyncMasters, ServerGroupSyncWorkers: return true default: return false From c6f9d600c686088e157080b94a23cb0485ec2f7c Mon Sep 17 00:00:00 2001 From: ajanikow <12255597+ajanikow@users.noreply.github.com> Date: Thu, 17 Sep 2020 12:09:53 +0000 Subject: [PATCH 5/6] Fix ImageInfo Equal function --- pkg/apis/deployment/v1/image_info.go | 5 ++++- pkg/deployment/deployment_run_test.go | 3 +++ pkg/deployment/deployment_suite_test.go | 7 +++++++ pkg/deployment/resources/pod_creator.go | 7 ------- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/pkg/apis/deployment/v1/image_info.go b/pkg/apis/deployment/v1/image_info.go index 4f3be030e..587dcce61 100644 --- a/pkg/apis/deployment/v1/image_info.go +++ b/pkg/apis/deployment/v1/image_info.go @@ -74,12 +74,15 @@ func (l *ImageInfoList) AddOrUpdate(info ImageInfo) { // Equal compares to ImageInfo func (i *ImageInfo) Equal(other *ImageInfo) bool { - if i == nil || other == nil { + if i == nil && other == nil { + return true + } else if i == nil || other == nil { return false } else if i == other { return true } + return i.ArangoDBVersion == other.ArangoDBVersion && i.Enterprise == other.Enterprise && i.Image == other.Image && diff --git a/pkg/deployment/deployment_run_test.go b/pkg/deployment/deployment_run_test.go index 1f05d4262..28d333c42 100644 --- a/pkg/deployment/deployment_run_test.go +++ b/pkg/deployment/deployment_run_test.go @@ -152,6 +152,9 @@ func runTestCase(t *testing.T, testCase testCaseStruct) { require.Equal(t, false, exist) _, exist = m.Conditions.Get(api.ConditionTypeAutoUpgrade) require.Equal(t, false, exist) + + require.NotNil(t, m.Image) + require.True(t, m.Image.Equal(d.apiObject.Status.CurrentImage)) } return nil } diff --git a/pkg/deployment/deployment_suite_test.go b/pkg/deployment/deployment_suite_test.go index ecaad22b3..29925416f 100644 --- a/pkg/deployment/deployment_suite_test.go +++ b/pkg/deployment/deployment_suite_test.go @@ -592,6 +592,13 @@ func (testCase *testCaseStruct) createTestPodData(deployment *Deployment, group groupSpec := testCase.ArangoDeployment.Spec.GetServerGroupSpec(group) testCase.ExpectedPod.Spec.Tolerations = deployment.resources.CreatePodTolerations(group, groupSpec) + + // Add image info + if member, group, ok := deployment.apiObject.Status.Members.ElementByID(memberStatus.ID); ok { + member.Image = deployment.apiObject.Status.CurrentImage + + deployment.apiObject.Status.Members.Update(member, group) + } } func testCreateExporterContainerWithPortAndSecureEndpoint(secure, exporterSecure bool, resources core.ResourceRequirements, port uint16) core.Container { diff --git a/pkg/deployment/resources/pod_creator.go b/pkg/deployment/resources/pod_creator.go index 2661b5b26..51a55fe16 100644 --- a/pkg/deployment/resources/pod_creator.go +++ b/pkg/deployment/resources/pod_creator.go @@ -428,13 +428,6 @@ func (r *Resources) createPodForMember(spec api.DeploymentSpec, memberID string, if err := status.Members.Update(m, group); err != nil { return maskAny(err) } - if err := r.context.UpdateStatus(status, lastVersion); err != nil { - return maskAny(err) - } - - status, lastVersion = r.context.GetStatus() - - m, group, found = status.Members.ElementByID(memberID) } imageInfo = *m.Image From 85fbfce4162530ba4e10675cb31cd7e6ee169ccf Mon Sep 17 00:00:00 2001 From: ajanikow <12255597+ajanikow@users.noreply.github.com> Date: Thu, 17 Sep 2020 12:39:48 +0000 Subject: [PATCH 6/6] Fix FMT --- pkg/apis/deployment/v1/image_info.go | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/apis/deployment/v1/image_info.go b/pkg/apis/deployment/v1/image_info.go index 587dcce61..ae6c61764 100644 --- a/pkg/apis/deployment/v1/image_info.go +++ b/pkg/apis/deployment/v1/image_info.go @@ -82,7 +82,6 @@ func (i *ImageInfo) Equal(other *ImageInfo) bool { return true } - return i.ArangoDBVersion == other.ArangoDBVersion && i.Enterprise == other.Enterprise && i.Image == other.Image &&