-
Notifications
You must be signed in to change notification settings - Fork 9.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[elasticache] [bug:28011] Fixes downgrade paths detection #28877
Conversation
Hey @joseluis-fw 👋 Thank you very much for your contribution! At times, our maintainers need to make direct edits to pull requests in order to help get it ready to be merged. Your current settings do not allow maintainers to make such edits. To help facilitate this, update your pull request to allow such edits as described in GitHub's Allowing changes to a pull request branch created from a fork documentation. (If you're using a fork owned by an organization, your organization may not allow you to change this setting. If that is the case, let us know.) |
Community NoteVoting for Prioritization
For Submitters
|
There's another path to go around this bug for diff --git a/internal/service/elasticache/engine_version.go b/internal/service/elasticache/engine_version.go
index 3ece38f415..78a12bfce4 100644
--- a/internal/service/elasticache/engine_version.go
+++ b/internal/service/elasticache/engine_version.go
@@ -96,6 +96,12 @@ type getChangeDiffer interface {
func engineVersionIsDowngrade(diff getChangeDiffer) (bool, error) {
o, n := diff.GetChange("engine_version")
+ oActual, _ := diff.GetChange("engine_version_actual")
+
+ if oActual != nil {
+ o = oActual
+ }
+
oVersion, err := normalizeEngineVersion(o.(string))
if err != nil {
return false, fmt.Errorf("error parsing old engine_version: %w", err)
@@ -105,15 +111,6 @@ func engineVersionIsDowngrade(diff getChangeDiffer) (bool, error) {
return false, fmt.Errorf("error parsing new engine_version: %w", err)
}
- sixMaxVersion := fmt.Sprintf("%s.%d", "6", math.MaxInt)
- sixMaxVersionComp, _ := gversion.NewVersion(sixMaxVersion)
- sixMaxVersionCompString := sixMaxVersionComp.String()
-
- // When both major are 6 and one of them is 6.x
- if (sixVersionConstraint.Check(nVersion) && sixVersionConstraint.Check(oVersion)) && (oVersion.String() == sixMaxVersionCompString || nVersion.String() == sixMaxVersionCompString) {
- return false, nil
- }
-
return nVersion.LessThan(oVersion), nil
}
diff --git a/internal/service/elasticache/engine_version_test.go b/internal/service/elasticache/engine_version_test.go
index d6f09ebd58..80dc25f6bc 100644
--- a/internal/service/elasticache/engine_version_test.go
+++ b/internal/service/elasticache/engine_version_test.go
@@ -296,7 +296,7 @@ func TestCustomizeDiffEngineVersionIsDowngrade(t *testing.T) {
},
"upgrade minor 6.x": {
- old: "6.x",
+ old: "6.0",
new: "6.2",
expected: false,
},
@@ -385,7 +385,6 @@ func (d *mockForceNewDiffer) HasChange(key string) bool {
func (d *mockForceNewDiffer) GetChange(key string) (interface{}, interface{}) {
return d.old, d.new
}
-
func (d *mockForceNewDiffer) ForceNew(key string) error {
d.forceNew = true
@@ -431,17 +430,17 @@ func TestCustomizeDiffEngineVersionForceNewOnDowngrade(t *testing.T) {
expectForceNew: false,
},
- // "upgrade major 6.x": {
- // old: "5.0.6",
- // new: "6.x",
- // expectForceNew: false,
- // },
+ "upgrade major 6.x": {
+ old: "5.0.6",
+ new: "6.x",
+ expectForceNew: false,
+ },
- // "upgrade major 6.digit": {
- // old: "5.0.6",
- // new: "6.0",
- // expectForceNew: false,
- // },
+ "upgrade major 6.digit": {
+ old: "5.0.6",
+ new: "6.0",
+ expectForceNew: false,
+ },
"downgrade minor versions": {
old: "1.3.5",
@@ -491,13 +490,18 @@ func TestCustomizeDiffEngineVersionForceNewOnDowngrade(t *testing.T) {
t.Run(name, func(t *testing.T) {
t.Parallel()
- diff := &mockForceNewDiffer{}
- if !testcase.isNew {
- diff.id = "some id"
- diff.old = testcase.old
- diff.new = testcase.new
+ diff := &mockChangesDiffer{
+ values: map[string]mockDiff{
+ "engine_version_actual": {
+ old: testcase.old,
+ new: testcase.new,
+ },
+ "engine_version": {
+ old: testcase.old,
+ new: testcase.new,
+ },
+ },
}
- diff.hasChange = testcase.hasChange
err := engineVersionForceNewOnDowngrade(diff)
@@ -625,6 +629,7 @@ func (d mockDiff) GetChange() (interface{}, interface{}) {
type mockChangesDiffer struct {
id string
values map[string]mockDiff
+ forceNew bool
}
func (d *mockChangesDiffer) Id() string {
@@ -639,6 +644,12 @@ func (d *mockChangesDiffer) GetChange(key string) (interface{}, interface{}) {
return d.values[key].GetChange()
}
+func (d *mockChangesDiffer) ForceNew(key string) error {
+ d.forceNew = true
+
+ return nil
+}
+
func TestParamGroupNameRequiresMajorVersionUpgrade(t *testing.T) {
t.Parallel()
|
Right now the downgrade detection is broken, can we also add a parameter to enforce this as this shouldn't be the most common case? Should we have a flag as |
Rebased:
|
docs: update resource counts
Thanks for the PR, @joseluis-fw. I've created PR #33954 using an approach similar to #28877 (comment). We'll be merging that PR instead, since it includes other fixes. |
@gdavison have we fixed the comparation of the |
I'm going to lock this pull request because it has been closed for 30 days ⏳. This helps our maintainers find and focus on the active issues. |
Description
Fixes recreation of
aws_elasticache_replication_group
when changingengine_version
to upgraded versions.There are at least some situations fixed by this PR:
2.8.x
to any version6.x
( 6.0.x in the real version ) to6.0
or6.2
.X.[6-9]
to any major version that is less than the previous minor versionRelations
Closes #28011
Output from Unit Testing