Skip to content

Commit 1eb5830

Browse files
authored
fix: Fix service name loading failure in some scenarios (#11800)
Refs #11789
1 parent 5db2ccb commit 1eb5830

1 file changed

Lines changed: 73 additions & 32 deletions

File tree

core/app/service/upgrade.go

Lines changed: 73 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,48 @@ import (
2525
"github.com/1Panel-dev/1Panel/core/utils/xpack"
2626
)
2727

28-
var (
29-
svcBasePath, _ = controller.GetServicePath("")
30-
svcCoreName, _ = controller.LoadServiceName("1panel-core")
31-
selCoreName, _ = controller.SelectInitScript("1panel-core")
32-
scriptCoreName, _ = controller.GetScriptName("1panel-core")
33-
svcAgentName, _ = controller.LoadServiceName("1panel-agent")
34-
selAgentName, _ = controller.SelectInitScript("1panel-agent")
35-
scriptAgentName, _ = controller.GetScriptName("1panel-agent")
36-
)
28+
type serviceInfo struct {
29+
basePath string
30+
coreName string
31+
agentName string
32+
selCoreName string
33+
selAgentName string
34+
}
35+
36+
func loadServiceInfo() (serviceInfo, error) {
37+
basePath, err := controller.GetServicePath("")
38+
if err != nil {
39+
global.LOG.Errorf("get service path failed: %v", err)
40+
return serviceInfo{}, err
41+
}
42+
coreName, err := controller.LoadServiceName("1panel-core")
43+
if err != nil {
44+
global.LOG.Errorf("load core service name failed: %v", err)
45+
return serviceInfo{}, err
46+
}
47+
agentName, err := controller.LoadServiceName("1panel-agent")
48+
if err != nil {
49+
global.LOG.Errorf("load agent service name failed: %v", err)
50+
return serviceInfo{}, err
51+
}
52+
selCoreName, err := controller.SelectInitScript("1panel-core")
53+
if err != nil {
54+
global.LOG.Errorf("select core init script failed: %v", err)
55+
return serviceInfo{}, err
56+
}
57+
selAgentName, err := controller.SelectInitScript("1panel-agent")
58+
if err != nil {
59+
global.LOG.Errorf("select agent init script failed: %v", err)
60+
return serviceInfo{}, err
61+
}
62+
return serviceInfo{
63+
basePath: basePath,
64+
coreName: coreName,
65+
agentName: agentName,
66+
selCoreName: selCoreName,
67+
selAgentName: selAgentName,
68+
}, nil
69+
}
3770

3871
type UpgradeService struct{}
3972

@@ -120,6 +153,10 @@ func (u *UpgradeService) Upgrade(req dto.Upgrade) error {
120153
if err != nil {
121154
return err
122155
}
156+
svcInfo, err := loadServiceInfo()
157+
if err != nil {
158+
return err
159+
}
123160

124161
mode := global.CONF.Base.Mode
125162
if strings.Contains(req.Version, "beta") {
@@ -146,7 +183,7 @@ func (u *UpgradeService) Upgrade(req dto.Upgrade) error {
146183
}
147184
tmpDir := downloadDir + "/" + strings.ReplaceAll(fileName, ".tar.gz", "")
148185

149-
if err := u.handleBackup(originalDir); err != nil {
186+
if err := u.handleBackup(originalDir, svcInfo); err != nil {
150187
global.LOG.Errorf("handle backup original file failed, err: %v", err)
151188
_ = settingRepo.Update("SystemStatus", "Free")
152189
return
@@ -159,56 +196,56 @@ func (u *UpgradeService) Upgrade(req dto.Upgrade) error {
159196
if err := files.CopyFileWithRename(path.Join(tmpDir, "1panel-core"), "/usr/local/bin/1panel-core"); err != nil {
160197
global.LOG.Errorf("upgrade 1panel-core failed, err: %v", err)
161198
_ = settingRepo.Update("SystemStatus", "Free")
162-
u.handleRollback(originalDir, 1)
199+
u.handleRollback(originalDir, 1, svcInfo)
163200
return
164201
}
165202
if err := files.CopyFileWithRename(path.Join(tmpDir, "1panel-agent"), "/usr/local/bin/1panel-agent"); err != nil {
166203
global.LOG.Errorf("upgrade 1panel-agent failed, err: %v", err)
167204
_ = settingRepo.Update("SystemStatus", "Free")
168-
u.handleRollback(originalDir, 1)
205+
u.handleRollback(originalDir, 1, svcInfo)
169206
return
170207
}
171208

172209
if err := files.CopyItem(false, true, path.Join(tmpDir, "1pctl"), "/usr/local/bin"); err != nil {
173210
global.LOG.Errorf("upgrade 1pctl failed, err: %v", err)
174211
_ = settingRepo.Update("SystemStatus", "Free")
175-
u.handleRollback(originalDir, 2)
212+
u.handleRollback(originalDir, 2, svcInfo)
176213
return
177214
}
178215
if _, err := cmd.RunDefaultWithStdoutBashCf("sed -i -e 's#BASE_DIR=.*#BASE_DIR=%s#g' /usr/local/bin/1pctl", global.CONF.Base.InstallDir); err != nil {
179216
global.LOG.Errorf("upgrade basedir in 1pctl failed, err: %v", err)
180-
u.handleRollback(originalDir, 2)
217+
u.handleRollback(originalDir, 2, svcInfo)
181218
return
182219
}
183220
if _, err := cmd.RunDefaultWithStdoutBashCf("sed -i -e 's#LANGUAGE=.*#LANGUAGE=%s#g' /usr/local/bin/1pctl", oldLang); err != nil {
184221
global.LOG.Errorf("upgrade basedir in 1pctl failed, err: %v", err)
185-
u.handleRollback(originalDir, 2)
222+
u.handleRollback(originalDir, 2, svcInfo)
186223
return
187224
}
188225
initScriptPath := path.Join(tmpDir, "initscript")
189226

190-
if err := files.CopyItem(false, true, path.Join(initScriptPath, selCoreName), svcBasePath); err != nil {
191-
global.LOG.Errorf("upgrade %s failed, err: %v", svcCoreName, err)
227+
if err := files.CopyItem(false, true, path.Join(initScriptPath, svcInfo.selCoreName), svcInfo.basePath); err != nil {
228+
global.LOG.Errorf("upgrade %s failed, err: %v", svcInfo.coreName, err)
192229
_ = settingRepo.Update("SystemStatus", "Free")
193-
u.handleRollback(originalDir, 3)
230+
u.handleRollback(originalDir, 3, svcInfo)
194231
return
195232
}
196-
if err := files.CopyItem(false, true, path.Join(initScriptPath, selAgentName), svcBasePath); err != nil {
197-
global.LOG.Errorf("upgrade %s failed, err: %v", svcAgentName, err)
233+
if err := files.CopyItem(false, true, path.Join(initScriptPath, svcInfo.selAgentName), svcInfo.basePath); err != nil {
234+
global.LOG.Errorf("upgrade %s failed, err: %v", svcInfo.agentName, err)
198235
_ = settingRepo.Update("SystemStatus", "Free")
199-
u.handleRollback(originalDir, 3)
236+
u.handleRollback(originalDir, 3, svcInfo)
200237
return
201238
}
202239

203240
if err := files.CopyItem(true, true, path.Join(tmpDir, "lang"), "/usr/local/bin"); err != nil {
204241
global.LOG.Errorf("Update language files failed: %v", err)
205242
_ = settingRepo.Update("SystemStatus", "Free")
206-
u.handleRollback(originalDir, 4)
243+
u.handleRollback(originalDir, 4, svcInfo)
207244
}
208245
if err := files.CopyItem(false, true, path.Join(tmpDir, "GeoIP.mmdb"), path.Join(global.CONF.Base.InstallDir, "1panel/geo")); err != nil {
209246
global.LOG.Warnf("Update GeoIP database failed: %v", err)
210247
_ = settingRepo.Update("SystemStatus", "Free")
211-
u.handleRollback(originalDir, 4)
248+
u.handleRollback(originalDir, 4, svcInfo)
212249
}
213250

214251
global.LOG.Info("upgrade successful!")
@@ -231,7 +268,11 @@ func (u *UpgradeService) Rollback(req dto.OperateByID) error {
231268
if log.ID == 0 {
232269
return buserr.New("ErrRecordNotFound")
233270
}
234-
u.handleRollback(log.BackupFile, 3)
271+
svcInfo, err := loadServiceInfo()
272+
if err != nil {
273+
return err
274+
}
275+
u.handleRollback(log.BackupFile, 3, svcInfo)
235276
return nil
236277
}
237278

@@ -295,7 +336,7 @@ func analyzeDoc(version, content string) dto.ReleasesNotes {
295336
return item
296337
}
297338

298-
func (u *UpgradeService) handleBackup(originalDir string) error {
339+
func (u *UpgradeService) handleBackup(originalDir string, svcInfo serviceInfo) error {
299340
if err := files.CopyItem(false, true, "/usr/local/bin/1panel-core", originalDir); err != nil {
300341
return err
301342
}
@@ -308,10 +349,10 @@ func (u *UpgradeService) handleBackup(originalDir string) error {
308349
if err := files.CopyItem(true, true, "/usr/local/bin/lang", originalDir); err != nil {
309350
return err
310351
}
311-
if err := files.CopyItem(false, true, path.Join(svcBasePath, svcCoreName), originalDir); err != nil {
352+
if err := files.CopyItem(false, true, path.Join(svcInfo.basePath, svcInfo.coreName), originalDir); err != nil {
312353
return err
313354
}
314-
if err := files.CopyItem(false, true, path.Join(svcBasePath, svcAgentName), originalDir); err != nil {
355+
if err := files.CopyItem(false, true, path.Join(svcInfo.basePath, svcInfo.agentName), originalDir); err != nil {
315356
return err
316357
}
317358
if err := files.CopyItem(true, true, path.Join(global.CONF.Base.InstallDir, "1panel/db"), originalDir); err != nil {
@@ -323,7 +364,7 @@ func (u *UpgradeService) handleBackup(originalDir string) error {
323364
return nil
324365
}
325366

326-
func (u *UpgradeService) handleRollback(originalDir string, errStep int) {
367+
func (u *UpgradeService) handleRollback(originalDir string, errStep int, svcInfo serviceInfo) {
327368
_ = settingRepo.Update("SystemStatus", "Free")
328369
dbPath := path.Join(global.CONF.Base.InstallDir, "1panel")
329370
if _, err := os.Stat(path.Join(originalDir, "db")); err == nil {
@@ -346,11 +387,11 @@ func (u *UpgradeService) handleRollback(originalDir string, errStep int) {
346387
if errStep == 2 {
347388
return
348389
}
349-
if err := files.CopyItem(false, true, path.Join(originalDir, svcCoreName), svcBasePath); err != nil {
350-
global.LOG.Errorf("rollback %s failed, err: %v", svcCoreName, err)
390+
if err := files.CopyItem(false, true, path.Join(originalDir, svcInfo.coreName), svcInfo.basePath); err != nil {
391+
global.LOG.Errorf("rollback %s failed, err: %v", svcInfo.coreName, err)
351392
}
352-
if err := files.CopyItem(false, true, path.Join(originalDir, svcAgentName), svcBasePath); err != nil {
353-
global.LOG.Errorf("rollback %s failed, err: %v", svcAgentName, err)
393+
if err := files.CopyItem(false, true, path.Join(originalDir, svcInfo.agentName), svcInfo.basePath); err != nil {
394+
global.LOG.Errorf("rollback %s failed, err: %v", svcInfo.agentName, err)
354395
}
355396
if errStep == 3 {
356397
return

0 commit comments

Comments
 (0)