Skip to content

Commit e4f9c86

Browse files
committed
fix upgrade issue
1 parent c813090 commit e4f9c86

File tree

2 files changed

+21
-8
lines changed

2 files changed

+21
-8
lines changed

main.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ import (
3636
"k8s.io/client-go/kubernetes"
3737
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
3838
_ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
39-
"k8s.io/client-go/tools/record"
4039
k8sapiflag "k8s.io/component-base/cli/flag"
4140
ctrl "sigs.k8s.io/controller-runtime"
4241
"sigs.k8s.io/controller-runtime/pkg/cache"
@@ -454,7 +453,7 @@ func addDependencies(_ context.Context, mgr ctrl.Manager, cfg config.Config, v v
454453
Log: ctrl.Log.WithName("collector-upgrade"),
455454
Version: v,
456455
Client: mgr.GetClient(),
457-
Recorder: record.NewFakeRecorder(collectorupgrade.RecordBufferSize),
456+
Recorder: mgr.GetEventRecorderFor("opentelemetry-operator"),
458457
}
459458
return up.ManagedInstances(c)
460459
}))

pkg/collector/upgrade/upgrade.go

+20-6
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
semver "github.com/Masterminds/semver/v3"
2424
"github.com/go-logr/logr"
2525
"k8s.io/client-go/tools/record"
26+
"k8s.io/client-go/util/retry"
2627
"sigs.k8s.io/controller-runtime/pkg/client"
2728

2829
"github.com/open-telemetry/opentelemetry-operator/apis/v1alpha1"
@@ -67,23 +68,36 @@ func (u VersionUpgrade) ManagedInstances(ctx context.Context) error {
6768
u.Recorder.Event(&original, "Error", "Upgrade", msg)
6869
continue
6970
}
70-
7171
if !reflect.DeepEqual(upgraded, list.Items[i]) {
7272
// the resource update overrides the status, so, keep it so that we can reset it later
7373
st := upgraded.Status
74-
patch := client.MergeFrom(&original)
75-
if err := u.Client.Patch(ctx, &upgraded, patch); err != nil {
74+
err := retry.RetryOnConflict(retry.DefaultRetry, func() error {
75+
col := v1beta1.OpenTelemetryCollector{}
76+
err = u.Client.Get(ctx, client.ObjectKeyFromObject(&original), &col)
77+
if err != nil {
78+
return err
79+
}
80+
var upgradedErr error
81+
upgraded, upgradedErr = u.ManagedInstance(ctx, col)
82+
if upgradedErr != nil {
83+
return upgradedErr
84+
}
85+
if err := u.Client.Update(ctx, &upgraded); err != nil {
86+
return err
87+
}
88+
return nil
89+
})
90+
if err != nil {
7691
itemLogger.Error(err, "failed to apply changes to instance")
77-
continue
92+
return err
7893
}
7994

8095
// the status object requires its own update
8196
upgraded.Status = st
82-
if err := u.Client.Status().Patch(ctx, &upgraded, patch); err != nil {
97+
if err := u.Client.Status().Patch(ctx, &upgraded, client.MergeFrom(&original)); err != nil {
8398
itemLogger.Error(err, "failed to apply changes to instance's status object")
8499
continue
85100
}
86-
87101
itemLogger.Info("instance upgraded", "version", upgraded.Status.Version)
88102
}
89103
}

0 commit comments

Comments
 (0)