Skip to content

Commit deeb699

Browse files
author
Kaan Yalti
committed
enhancement(5235): abstracted markupgrade from upgrader, added relevant types and updated the upgrader struct. added tests case for mark upgrade error handling in the upgrade function
1 parent 0059fbb commit deeb699

File tree

2 files changed

+40
-3
lines changed

2 files changed

+40
-3
lines changed

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ type unpackHandler interface {
8282
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
85+
type markUpgradeFunc func(log *logger.Logger, dataDirPath string, agent, previousAgent agentInstall, action *fleetapi.ActionUpgrade, upgradeDetails *details.Details, desiredOutcome UpgradeOutcome) error
8586

8687
// Types used to abstract stdlib functions
8788
type mkdirAllFunc func(name string, perm fs.FileMode) error
@@ -105,6 +106,7 @@ type Upgrader struct {
105106
detectFlavor func(topDir string, defaultFlavor string) (string, error)
106107
copyActionStore copyActionStoreFunc
107108
copyRunDirectory copyRunDirectoryFunc
109+
markUpgrade markUpgradeFunc
108110
}
109111

110112
// IsUpgradeable when agent is installed and running as a service or flag was provided.
@@ -129,6 +131,7 @@ func NewUpgrader(log *logger.Logger, settings *artifact.Config, agentInfo info.A
129131
detectFlavor: install.UsedFlavor,
130132
copyActionStore: copyActionStoreProvider(os.ReadFile, os.WriteFile),
131133
copyRunDirectory: copyRunDirectoryProvider(os.MkdirAll, copy.Copy),
134+
markUpgrade: markUpgradeProvider(UpdateActiveCommit, os.WriteFile),
132135
}, nil
133136
}
134137

@@ -231,8 +234,6 @@ func checkUpgrade(log *logger.Logger, currentVersion, newVersion agentVersion, m
231234
return nil
232235
}
233236

234-
var markUpgradeFunc = markUpgrade
235-
236237
// Upgrade upgrades running agent, function returns shutdown callback that must be called by reexec.
237238
func (u *Upgrader) Upgrade(ctx context.Context, version string, sourceURI string, action *fleetapi.ActionUpgrade, det *details.Details, skipVerifyOverride bool, skipDefaultPgp bool, pgpBytes ...string) (_ reexec.ShutdownCallbackFn, err error) {
238239
u.log.Infow("Upgrading agent", "version", version, "source_uri", sourceURI)
@@ -389,7 +390,7 @@ func (u *Upgrader) Upgrade(ctx context.Context, version string, sourceURI string
389390
versionedHome: currentVersionedHome,
390391
}
391392

392-
if err := markUpgradeFunc(u.log,
393+
if err := u.markUpgrade(u.log,
393394
paths.Data(), // data dir to place the marker in
394395
current, // new agent version data
395396
previous, // old agent version data

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

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1441,6 +1441,42 @@ func TestUpgradeErrorHandling(t *testing.T) {
14411441
}
14421442
},
14431443
},
1444+
"should return error if markUpgrade fails": {
1445+
isDiskSpaceErrorResult: false,
1446+
expectedError: testError,
1447+
upgraderMocker: func(upgrader *Upgrader) {
1448+
upgrader.artifactDownloader = &mockArtifactDownloader{}
1449+
upgrader.extractAgentVersion = func(metadata packageMetadata, upgradeVersion string) agentVersion {
1450+
return agentVersion{
1451+
version: upgradeVersion,
1452+
snapshot: false,
1453+
hash: metadata.hash,
1454+
}
1455+
}
1456+
upgrader.detectFlavor = func(topDir string, defaultFlavor string) (string, error) {
1457+
return "flavor", nil
1458+
}
1459+
upgrader.unpacker = &mockUnpacker{
1460+
returnPackageMetadata: packageMetadata{
1461+
manifest: &v1.PackageManifest{},
1462+
hash: "hash",
1463+
},
1464+
returnUnpackResult: UnpackResult{
1465+
Hash: "hash",
1466+
VersionedHome: "versionedHome",
1467+
},
1468+
}
1469+
upgrader.copyActionStore = func(log *logger.Logger, newHome string) error {
1470+
return nil
1471+
}
1472+
upgrader.copyRunDirectory = func(log *logger.Logger, oldRunPath, newRunPath string) error {
1473+
return nil
1474+
}
1475+
upgrader.markUpgrade = func(log *logger.Logger, dataDirPath string, agent, previousAgent agentInstall, action *fleetapi.ActionUpgrade, upgradeDetails *details.Details, desiredOutcome UpgradeOutcome) error {
1476+
return testError
1477+
}
1478+
},
1479+
},
14441480
"should add disk space error to the error chain if downloadArtifact fails with disk space error": {
14451481
isDiskSpaceErrorResult: true,
14461482
expectedError: upgradeErrors.ErrInsufficientDiskSpace,

0 commit comments

Comments
 (0)