Skip to content

Commit 0a9752c

Browse files
Upgrade polished
1 parent 5d3854a commit 0a9752c

File tree

3 files changed

+73
-55
lines changed

3 files changed

+73
-55
lines changed

pkg/instance_manager.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,6 @@ func (im *InstanceManager) newFromConfig(id string) *Instance {
159159
i.local.SecretVars = cv.GetStringSlice(fmt.Sprintf("instance.config.%s.secret_vars", id))
160160
i.local.SlingProps = cv.GetStringSlice(fmt.Sprintf("instance.config.%s.sling_props", id))
161161
i.local.UnpackDir = cv.GetString(fmt.Sprintf("instance.config.%s.unpack_dir", id))
162-
i.local.AllowInPlaceUpgrade = cv.GetBool(fmt.Sprintf("instance.config.%s.allow_in_place_upgrade", id))
163162
}
164163
return i
165164
}

pkg/local_instance.go

Lines changed: 52 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,14 @@ import (
2929
type LocalInstance struct {
3030
instance *Instance
3131

32-
Version string
33-
JvmOpts []string
34-
StartOpts []string
35-
RunModes []string
36-
EnvVars []string
37-
SecretVars []string
38-
SlingProps []string
39-
UnpackDir string
40-
AllowInPlaceUpgrade bool
32+
Version string
33+
JvmOpts []string
34+
StartOpts []string
35+
RunModes []string
36+
EnvVars []string
37+
SecretVars []string
38+
SlingProps []string
39+
UnpackDir string
4140
}
4241

4342
type LocalInstanceState struct {
@@ -51,16 +50,15 @@ type LocalInstanceState struct {
5150
}
5251

5352
const (
54-
LocalInstanceScriptStart = "start"
55-
LocalInstanceScriptStop = "stop"
56-
LocalInstanceScriptStatus = "status"
57-
LocalInstanceBackupExtension = "aemb.tar.zst"
58-
LocalInstanceUser = "admin"
59-
LocalInstanceWorkDirName = common.AppId
60-
LocalInstanceNameCommon = "common"
61-
LocalInstanceSecretsDir = "conf/secret"
62-
LocalInstanceVersionDefault = "1"
63-
LocalInstanceAllowInPlaceUpgradeDefault = false
53+
LocalInstanceScriptStart = "start"
54+
LocalInstanceScriptStop = "stop"
55+
LocalInstanceScriptStatus = "status"
56+
LocalInstanceBackupExtension = "aemb.tar.zst"
57+
LocalInstanceUser = "admin"
58+
LocalInstanceWorkDirName = common.AppId
59+
LocalInstanceNameCommon = "common"
60+
LocalInstanceSecretsDir = "conf/secret"
61+
LocalInstanceVersionDefault = "1"
6462
)
6563

6664
func (li LocalInstance) Instance() *Instance {
@@ -76,7 +74,6 @@ func NewLocal(i *Instance) *LocalInstance {
7674
li.EnvVars = []string{}
7775
li.SecretVars = []string{}
7876
li.SlingProps = []string{}
79-
li.AllowInPlaceUpgrade = LocalInstanceAllowInPlaceUpgradeDefault
8077
return li
8178
}
8279

@@ -188,19 +185,28 @@ var (
188185
LocalInstancePasswordRegex = regexp.MustCompile("^[a-zA-Z0-9_]{5,}$")
189186
)
190187

191-
func (li LocalInstance) CheckUpgradeNeeded() (bool, error) {
188+
func (li LocalInstance) CheckRecreationNeeded() error {
192189
createLock := li.createLock()
193190
if createLock.IsLocked() {
194191
state, err := createLock.State()
195192
if err != nil {
196-
return false, err
193+
return err
197194
}
198195
if !state.UpToDate {
199-
if li.AllowInPlaceUpgrade {
200-
return true, nil
201-
}
202-
return true, fmt.Errorf("%s > outdated and need to be upgraded as distribution JAR changed from '%s' to '%s'", li.instance.IDColor(), state.Locked.JarName, state.Current.JarName)
196+
return fmt.Errorf("%s > outdated and need to be upgraded as distribution JAR changed from '%s' to '%s'; consider using 'aem instance upgrade' command", li.instance.IDColor(), state.Locked.JarName, state.Current.JarName)
197+
}
198+
}
199+
return nil
200+
}
201+
202+
func (li LocalInstance) IsUpgradeNeeded() (bool, error) {
203+
createLock := li.createLock()
204+
if createLock.IsLocked() {
205+
state, err := createLock.State()
206+
if err != nil {
207+
return false, err
203208
}
209+
return !state.UpToDate, nil
204210
}
205211
return false, nil
206212
}
@@ -586,33 +592,31 @@ func (li LocalInstance) updateLock() osx.Lock[localInstanceUpdateLock] {
586592
return zero, err
587593
}
588594
return localInstanceUpdateLock{
589-
Version: li.Version,
590-
HTTPPort: li.instance.HTTP().Port(),
591-
RunModes: strings.Join(li.RunModes, ","),
592-
JVMOpts: strings.Join(li.JvmOpts, " "),
593-
JavaHome: javaHomeDir,
594-
Password: cryptox.HashString(li.instance.password),
595-
EnvVars: strings.Join(li.EnvVars, ","),
596-
SecretVars: cryptox.HashString(strings.Join(li.SecretVars, ",")),
597-
SlingProps: strings.Join(li.SlingProps, ","),
598-
Overrides: overrides,
599-
AllowInPlaceUpgrade: li.AllowInPlaceUpgrade,
595+
Version: li.Version,
596+
HTTPPort: li.instance.HTTP().Port(),
597+
RunModes: strings.Join(li.RunModes, ","),
598+
JVMOpts: strings.Join(li.JvmOpts, " "),
599+
JavaHome: javaHomeDir,
600+
Password: cryptox.HashString(li.instance.password),
601+
EnvVars: strings.Join(li.EnvVars, ","),
602+
SecretVars: cryptox.HashString(strings.Join(li.SecretVars, ",")),
603+
SlingProps: strings.Join(li.SlingProps, ","),
604+
Overrides: overrides,
600605
}, nil
601606
})
602607
}
603608

604609
type localInstanceUpdateLock struct {
605-
Version string `yaml:"version"`
606-
JVMOpts string `yaml:"jvm_opts"`
607-
JavaHome string `yaml:"java_home"`
608-
RunModes string `yaml:"run_modes"`
609-
HTTPPort string `yaml:"http_port"`
610-
Password string `yaml:"password"`
611-
Overrides string `yaml:"overrides"`
612-
EnvVars string `yaml:"env_vars"`
613-
SecretVars string `yaml:"secret_vars"`
614-
SlingProps string `yaml:"sling_props"`
615-
AllowInPlaceUpgrade bool `yaml:"allow_in_place_upgrade"`
610+
Version string `yaml:"version"`
611+
JVMOpts string `yaml:"jvm_opts"`
612+
JavaHome string `yaml:"java_home"`
613+
RunModes string `yaml:"run_modes"`
614+
HTTPPort string `yaml:"http_port"`
615+
Password string `yaml:"password"`
616+
Overrides string `yaml:"overrides"`
617+
EnvVars string `yaml:"env_vars"`
618+
SecretVars string `yaml:"secret_vars"`
619+
SlingProps string `yaml:"sling_props"`
616620
}
617621

618622
func (li LocalInstance) Stop() error {

pkg/local_instance_manager.go

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,16 @@ package pkg
33
import (
44
"bytes"
55
"fmt"
6+
"os"
7+
"strings"
8+
"time"
9+
610
"github.com/dustin/go-humanize"
711
"github.com/samber/lo"
812
log "github.com/sirupsen/logrus"
913
"github.com/wttech/aemc/pkg/common/fmtx"
1014
"github.com/wttech/aemc/pkg/common/pathx"
1115
"github.com/wttech/aemc/pkg/common/timex"
12-
"os"
13-
"strings"
14-
"time"
1516
)
1617

1718
type LocalOpts struct {
@@ -70,9 +71,12 @@ func (o *LocalOpts) Initialize() error {
7071
if _, err := o.manager.aem.vendorManager.oakRun.PrepareWithChanged(); err != nil {
7172
return err
7273
}
73-
// post-validation phase
74+
return nil
75+
}
76+
77+
func (o *LocalOpts) CheckRecreationNeeded() error {
7478
for _, instance := range o.manager.Locals() {
75-
if _, err := instance.Local().CheckUpgradeNeeded(); err != nil { // depends on SDK prepare
79+
if err := instance.Local().CheckRecreationNeeded(); err != nil {
7680
return err
7781
}
7882
}
@@ -138,6 +142,9 @@ func (im *InstanceManager) Create(instances []Instance) ([]Instance, error) {
138142
if err := im.LocalOpts.Initialize(); err != nil {
139143
return created, err
140144
}
145+
if err := im.LocalOpts.CheckRecreationNeeded(); err != nil {
146+
return created, err
147+
}
141148
log.Info(InstancesMsg(instances, "creating"))
142149
for _, i := range instances {
143150
if !i.local.IsCreated() {
@@ -160,7 +167,12 @@ func (im *InstanceManager) Upgrade(instances []Instance) ([]Instance, error) {
160167
for _, i := range instances {
161168
if !i.local.IsCreated() {
162169
return nil, fmt.Errorf("instance not yet created: %s", i.IDColor())
163-
} else if upgradeNeeded, _ := i.local.CheckUpgradeNeeded(); upgradeNeeded {
170+
}
171+
upgradeNeeded, err := i.local.IsUpgradeNeeded()
172+
if err != nil {
173+
return nil, err
174+
}
175+
if upgradeNeeded {
164176
err := i.local.Upgrade()
165177
if err != nil {
166178
return nil, err
@@ -233,6 +245,9 @@ func (im *InstanceManager) Start(instances []Instance) ([]Instance, error) {
233245
if err := im.LocalOpts.Initialize(); err != nil {
234246
return []Instance{}, err
235247
}
248+
if err := im.LocalOpts.CheckRecreationNeeded(); err != nil {
249+
return []Instance{}, err
250+
}
236251

237252
if !im.LocalOpts.ServiceMode {
238253
log.Info(InstancesMsg(instances, "checking started & out-of-date"))

0 commit comments

Comments
 (0)