Skip to content

Commit 38b9b96

Browse files
committed
Move version checks for rollbacks in update main function
1 parent 51d453d commit 38b9b96

File tree

3 files changed

+19
-72
lines changed

3 files changed

+19
-72
lines changed

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

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -161,22 +161,17 @@ func markUpgradeProvider(updateActiveCommit updateActiveCommitFunc, writeFile wr
161161
Details: upgradeDetails,
162162
}
163163

164-
if agent.parsedVersion != nil && !agent.parsedVersion.Less(*Version_9_2_0_SNAPSHOT) {
165-
// if we have a not empty rollback window, write the prev version in the rollbacks_available field
166-
// we also need to check the destination version because the manual rollback and delayed cleanup will be
167-
// handled by that version of agent, so it needs to be recent enough
168-
for _, rollback := range availableRollbacks {
169-
rollbackAvailable := RollbackAvailable{
170-
Version: rollback.Version,
171-
Home: rollback.VersionedHome,
172-
}
173-
174-
if rollback.TTL != nil {
175-
rollbackAvailable.ValidUntil = *rollback.TTL
176-
}
177-
178-
marker.RollbacksAvailable = append(marker.RollbacksAvailable, rollbackAvailable)
164+
for _, rollback := range availableRollbacks {
165+
rollbackAvailable := RollbackAvailable{
166+
Version: rollback.Version,
167+
Home: rollback.VersionedHome,
179168
}
169+
170+
if rollback.TTL != nil {
171+
rollbackAvailable.ValidUntil = *rollback.TTL
172+
}
173+
174+
marker.RollbacksAvailable = append(marker.RollbacksAvailable, rollbackAvailable)
180175
}
181176

182177
markerBytes, err := yaml.Marshal(newMarkerSerializer(marker))

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

Lines changed: 0 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -183,61 +183,6 @@ func TestMarkUpgrade(t *testing.T) {
183183
assert.Equal(t, expectedMarker, actualMarker)
184184
},
185185
},
186-
{
187-
name: "rollback window specified but new version is too low - no rollbacks",
188-
args: args{
189-
updatedOn: updatedOnNow,
190-
currentAgent: agentInstall{
191-
parsedVersion: parsed456SNAPSHOT,
192-
version: "4.5.6-SNAPSHOT",
193-
hash: "curagt",
194-
versionedHome: filepath.Join("data", "elastic-agent-4.5.6-SNAPSHOT-curagt"),
195-
},
196-
previousAgent: agentInstall{
197-
parsedVersion: parsed123SNAPSHOT,
198-
version: "1.2.3-SNAPSHOT",
199-
hash: "prvagt",
200-
versionedHome: filepath.Join("data", "elastic-agent-1.2.3-SNAPSHOT-prvagt"),
201-
},
202-
action: nil,
203-
details: details.NewDetails("4.5.6-SNAPSHOT", details.StateReplacing, ""),
204-
availableRollbacks: []v1.AgentInstallDesc{
205-
{
206-
OptionalTTLItem: v1.OptionalTTLItem{
207-
TTL: &twentyFourHoursFromNow,
208-
},
209-
Version: "1.2.3-SNAPSHOT",
210-
Hash: "prvagt",
211-
VersionedHome: filepath.Join("data", "elastic-agent-1.2.3-SNAPSHOT-prvagt"),
212-
Flavor: "basic",
213-
Active: false,
214-
},
215-
},
216-
},
217-
wantErr: assert.NoError,
218-
assertAfterMark: func(t *testing.T, dataDir string) {
219-
actualMarker, err := LoadMarker(dataDir)
220-
require.NoError(t, err, "error reading actualMarker content after writing")
221-
222-
expectedMarker := &UpdateMarker{
223-
Version: "4.5.6-SNAPSHOT",
224-
Hash: "curagt",
225-
VersionedHome: filepath.Join("data", "elastic-agent-4.5.6-SNAPSHOT-curagt"),
226-
UpdatedOn: updatedOnNow,
227-
PrevVersion: "1.2.3-SNAPSHOT",
228-
PrevHash: "prvagt",
229-
PrevVersionedHome: filepath.Join("data", "elastic-agent-1.2.3-SNAPSHOT-prvagt"),
230-
Acked: false,
231-
Action: nil,
232-
Details: &details.Details{
233-
TargetVersion: "4.5.6-SNAPSHOT",
234-
State: "UPG_REPLACING",
235-
ActionID: "",
236-
},
237-
}
238-
assert.Equal(t, expectedMarker, actualMarker)
239-
},
240-
},
241186
{
242187
name: "rollback window specified and new version is at least 9.2.0-SNAPSHOT - available rollbacks must be present",
243188
args: args{

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -513,7 +513,7 @@ func (u *Upgrader) Upgrade(ctx context.Context, version string, rollback bool, s
513513
versionedHome: currentVersionedHome,
514514
}
515515

516-
availableRollbacks := getAvailableRollbacks(rollbackWindow, rotationTimestamp, unpackRes.VersionedHome, modifiedInstallDescriptor)
516+
availableRollbacks := getAvailableRollbacks(rollbackWindow, parsedVersion, rotationTimestamp, unpackRes.VersionedHome, modifiedInstallDescriptor)
517517

518518
if err := u.markUpgrade(u.log,
519519
paths.Data(), // data dir to place the marker in
@@ -554,12 +554,19 @@ func (u *Upgrader) Upgrade(ctx context.Context, version string, rollback bool, s
554554
return cb, nil
555555
}
556556

557-
func getAvailableRollbacks(rollbackWindow time.Duration, now time.Time, newVersionedHome string, descriptor *v1.InstallDescriptor) []v1.AgentInstallDesc {
557+
func getAvailableRollbacks(rollbackWindow time.Duration, version *agtversion.ParsedSemVer, now time.Time, newVersionedHome string, descriptor *v1.InstallDescriptor) []v1.AgentInstallDesc {
558558
if rollbackWindow == 0 {
559559
// if there's no rollback window it means that no rollback should survive the watcher cleanup at the end of the grace period.
560560
return nil
561561
}
562562

563+
if version == nil || version.Less(*Version_9_2_0_SNAPSHOT) {
564+
// if we have a not empty rollback window, write the prev version in the rollbacks_available field
565+
// we also need to check the destination version because the manual rollback and delayed cleanup will be
566+
// handled by that version of agent, so it needs to be recent enough
567+
return nil
568+
}
569+
563570
res := make([]v1.AgentInstallDesc, 0, len(descriptor.AgentInstalls))
564571
for _, installDesc := range descriptor.AgentInstalls {
565572
if installDesc.VersionedHome != newVersionedHome && (installDesc.TTL == nil || now.Before(*installDesc.TTL)) {

0 commit comments

Comments
 (0)