Skip to content

Commit 5c6487c

Browse files
author
Kaan Yalti
committed
enhancement(5235): added abstractions for changesymlink and rollbackInstall in upgrader, updated error handling tests to use these abstractions
1 parent deeb699 commit 5c6487c

File tree

2 files changed

+17
-5
lines changed

2 files changed

+17
-5
lines changed

internal/pkg/agent/application/upgrade/upgrade.go

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@ type copyActionStoreFunc func(log *logger.Logger, newHome string) error
8383
type copyRunDirectoryFunc func(log *logger.Logger, oldRunPath, newRunPath string) error
8484
type fileDirCopyFunc func(from, to string, opts ...copy.Options) error
8585
type markUpgradeFunc func(log *logger.Logger, dataDirPath string, agent, previousAgent agentInstall, action *fleetapi.ActionUpgrade, upgradeDetails *details.Details, desiredOutcome UpgradeOutcome) error
86+
type changeSymlinkFunc func(log *logger.Logger, topDirPath, symlinkPath, newTarget string) error
87+
type rollbackInstallFunc func(ctx context.Context, log *logger.Logger, topDirPath, versionedHome, oldVersionedHome string) error
8688

8789
// Types used to abstract stdlib functions
8890
type mkdirAllFunc func(name string, perm fs.FileMode) error
@@ -107,6 +109,8 @@ type Upgrader struct {
107109
copyActionStore copyActionStoreFunc
108110
copyRunDirectory copyRunDirectoryFunc
109111
markUpgrade markUpgradeFunc
112+
changeSymlink changeSymlinkFunc
113+
rollbackInstall rollbackInstallFunc
110114
}
111115

112116
// IsUpgradeable when agent is installed and running as a service or flag was provided.
@@ -132,6 +136,8 @@ func NewUpgrader(log *logger.Logger, settings *artifact.Config, agentInfo info.A
132136
copyActionStore: copyActionStoreProvider(os.ReadFile, os.WriteFile),
133137
copyRunDirectory: copyRunDirectoryProvider(os.MkdirAll, copy.Copy),
134138
markUpgrade: markUpgradeProvider(UpdateActiveCommit, os.WriteFile),
139+
changeSymlink: changeSymlink,
140+
rollbackInstall: rollbackInstall,
135141
}, nil
136142
}
137143

@@ -365,9 +371,9 @@ func (u *Upgrader) Upgrade(ctx context.Context, version string, sourceURI string
365371
return nil, fmt.Errorf("calculating home path relative to top, home: %q top: %q : %w", paths.Home(), paths.Top(), err)
366372
}
367373

368-
if err := changeSymlink(u.log, paths.Top(), symlinkPath, newPath); err != nil {
374+
if err := u.changeSymlink(u.log, paths.Top(), symlinkPath, newPath); err != nil {
369375
u.log.Errorw("Rolling back: changing symlink failed", "error.message", err)
370-
rollbackErr := rollbackInstall(ctx, u.log, paths.Top(), hashedDir, currentVersionedHome)
376+
rollbackErr := u.rollbackInstall(ctx, u.log, paths.Top(), hashedDir, currentVersionedHome)
371377
return nil, goerrors.Join(err, rollbackErr)
372378
}
373379

@@ -396,7 +402,7 @@ func (u *Upgrader) Upgrade(ctx context.Context, version string, sourceURI string
396402
previous, // old agent version data
397403
action, det, OUTCOME_UPGRADE); err != nil {
398404
u.log.Errorw("Rolling back: marking upgrade failed", "error.message", err)
399-
rollbackErr := rollbackInstall(ctx, u.log, paths.Top(), hashedDir, currentVersionedHome)
405+
rollbackErr := u.rollbackInstall(ctx, u.log, paths.Top(), hashedDir, currentVersionedHome)
400406
return nil, goerrors.Join(err, rollbackErr)
401407
}
402408

@@ -405,14 +411,14 @@ func (u *Upgrader) Upgrade(ctx context.Context, version string, sourceURI string
405411
var watcherCmd *exec.Cmd
406412
if watcherCmd, err = InvokeWatcher(u.log, watcherExecutable); err != nil {
407413
u.log.Errorw("Rolling back: starting watcher failed", "error.message", err)
408-
rollbackErr := rollbackInstall(ctx, u.log, paths.Top(), hashedDir, currentVersionedHome)
414+
rollbackErr := u.rollbackInstall(ctx, u.log, paths.Top(), hashedDir, currentVersionedHome)
409415
return nil, goerrors.Join(err, rollbackErr)
410416
}
411417

412418
watcherWaitErr := waitForWatcher(ctx, u.log, markerFilePath(paths.Data()), watcherMaxWaitTime)
413419
if watcherWaitErr != nil {
414420
killWatcherErr := watcherCmd.Process.Kill()
415-
rollbackErr := rollbackInstall(ctx, u.log, paths.Top(), hashedDir, currentVersionedHome)
421+
rollbackErr := u.rollbackInstall(ctx, u.log, paths.Top(), hashedDir, currentVersionedHome)
416422
return nil, goerrors.Join(watcherWaitErr, killWatcherErr, rollbackErr)
417423
}
418424

internal/pkg/agent/application/upgrade/upgrade_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1472,6 +1472,12 @@ func TestUpgradeErrorHandling(t *testing.T) {
14721472
upgrader.copyRunDirectory = func(log *logger.Logger, oldRunPath, newRunPath string) error {
14731473
return nil
14741474
}
1475+
upgrader.changeSymlink = func(log *logger.Logger, topDirPath, symlinkPath, newTarget string) error {
1476+
return nil
1477+
}
1478+
upgrader.rollbackInstall = func(ctx context.Context, log *logger.Logger, topDirPath, versionedHome, oldVersionedHome string) error {
1479+
return nil
1480+
}
14751481
upgrader.markUpgrade = func(log *logger.Logger, dataDirPath string, agent, previousAgent agentInstall, action *fleetapi.ActionUpgrade, upgradeDetails *details.Details, desiredOutcome UpgradeOutcome) error {
14761482
return testError
14771483
}

0 commit comments

Comments
 (0)