Skip to content

Commit 70d3908

Browse files
mortenljtronghn
andcommitted
Use go-retry for PrepareTargetInstance
Co-authored-by: Trong Nguyen <[email protected]>
1 parent 70d7968 commit 70d3908

File tree

2 files changed

+35
-37
lines changed

2 files changed

+35
-37
lines changed

cmd/setup/main.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ func main() {
104104
os.Exit(13)
105105
}
106106

107-
err = instance.PrepareTargetInstance(ctx, cfg, target, mgr)
107+
err = instance.PrepareTargetInstance(ctx, target, mgr)
108108
if err != nil {
109109
mgr.Logger.Error("failed to prepare target instance", "error", err)
110110
os.Exit(14)

internal/pkg/instance/instance.go

+34-36
Original file line numberDiff line numberDiff line change
@@ -232,12 +232,42 @@ func WaitForCnrmResourcesToGoAway(ctx context.Context, name string, mgr *common_
232232
return g.Wait()
233233
}
234234

235-
func PrepareTargetInstance(ctx context.Context, cfg *config.Config, target *resolved.Instance, mgr *common_main.Manager) error {
236-
getInstanceCtx, cancel := context.WithTimeout(ctx, 15*time.Minute)
237-
defer cancel()
235+
func PrepareTargetInstance(ctx context.Context, target *resolved.Instance, mgr *common_main.Manager) error {
236+
mgr.Logger.Info("preparing target instance for migration")
237+
238+
b := retry.NewConstant(1 * time.Second)
239+
b = retry.WithMaxDuration(15*time.Minute, b)
238240

239-
err := prepareTargetInstanceWithRetries(getInstanceCtx, cfg, target, mgr, updateRetries)
241+
err := retry.Do(ctx, b, func(ctx context.Context) error {
242+
targetSqlInstance, err := mgr.SqlInstanceClient.Get(ctx, target.Name)
243+
if err != nil {
244+
// Target is assumed to exist, so any error here is fatal
245+
return err
246+
}
247+
248+
targetSqlInstance.Spec.Settings.BackupConfiguration.Enabled = ptr.To(false)
249+
250+
var authNetwork v1beta1.InstanceAuthorizedNetworks
251+
authNetwork, err = createMigratorAuthNetwork()
252+
if err != nil {
253+
return err
254+
}
255+
256+
targetSqlInstance.Spec.Settings.IpConfiguration.AuthorizedNetworks = appendAuthNetIfNotExists(targetSqlInstance, authNetwork)
257+
258+
mgr.Logger.Info("updating target instance", "name", target.Name)
259+
_, err = mgr.SqlInstanceClient.Update(ctx, targetSqlInstance)
260+
if err != nil {
261+
if k8s_errors.IsConflict(err) {
262+
mgr.Logger.Warn("retrying update of target instance", "error", err)
263+
return retry.RetryableError(err)
264+
}
265+
return err
266+
}
267+
return nil
268+
})
240269
if err != nil {
270+
mgr.Logger.Error("failed to prepare target instance", "error", err)
241271
return err
242272
}
243273

@@ -260,38 +290,6 @@ func PrepareTargetInstance(ctx context.Context, cfg *config.Config, target *reso
260290
return nil
261291
}
262292

263-
func prepareTargetInstanceWithRetries(ctx context.Context, cfg *config.Config, target *resolved.Instance, mgr *common_main.Manager, retries int) error {
264-
mgr.Logger.Info("preparing target instance for migration")
265-
266-
targetSqlInstance, err := mgr.SqlInstanceClient.Get(ctx, target.Name)
267-
if err != nil {
268-
if !k8s_errors.IsNotFound(err) {
269-
return err
270-
}
271-
}
272-
273-
targetSqlInstance.Spec.Settings.BackupConfiguration.Enabled = ptr.To(false)
274-
275-
var authNetwork v1beta1.InstanceAuthorizedNetworks
276-
authNetwork, err = createMigratorAuthNetwork()
277-
if err != nil {
278-
return err
279-
}
280-
281-
targetSqlInstance.Spec.Settings.IpConfiguration.AuthorizedNetworks = appendAuthNetIfNotExists(targetSqlInstance, authNetwork)
282-
283-
mgr.Logger.Info("updating target instance", "name", target.Name)
284-
_, err = mgr.SqlInstanceClient.Update(ctx, targetSqlInstance)
285-
if err != nil {
286-
if k8s_errors.IsConflict(err) && retries > 0 {
287-
mgr.Logger.Info("retrying update of target instance", "remaining_retries", retries)
288-
return prepareTargetInstanceWithRetries(ctx, cfg, target, mgr, retries-1)
289-
}
290-
return err
291-
}
292-
return nil
293-
}
294-
295293
func UpdateTargetInstanceAfterPromotion(ctx context.Context, target *resolved.Instance, mgr *common_main.Manager) error {
296294
err := updateTargetInstanceAfterPromotionWithRetries(ctx, target, mgr, updateRetries)
297295
if err != nil {

0 commit comments

Comments
 (0)