Commit 738b1e40 authored by szh's avatar szh

比特元 6.4版本 强制升级到最新版本

parent 4bf8af55
...@@ -187,7 +187,22 @@ func MakeSureNodeRunning() error { ...@@ -187,7 +187,22 @@ func MakeSureNodeRunning() error {
tlog.Error("MakeSureNodeRunning SetPai", "err", err) tlog.Error("MakeSureNodeRunning SetPai", "err", err)
return err return err
} }
//版本不一致 6.4.x版本进行升级
version, err := pai.GetPaiLatestVersion(1)
if err != nil {
return err
}
if pai.BtyVersion != nil && pai.BtyVersion.App != version && strings.Contains(pai.BtyVersion.App, "6.4") {
for _, d := range pai.Disks {
if len(d.SizeK) >= 9 && (strings.Contains(d.Use, "98") || strings.Contains(d.Use, "99") || strings.Contains(d.Use, "100")) {
util.AddValue(&JobID, 1)
JobChan <- MsgType{Name: "CLEARLOG", JobID: JobID}
}
}
util.AddValue(&JobID, 1)
JobChan <- MsgType{Name: "NODEUPDATE", JobID: JobID}
return nil
}
// peer list只有自己 节点应进行重启或升级 // peer list只有自己 节点应进行重启或升级
if pai.PeerLen == 1 { if pai.PeerLen == 1 {
util.AddValue(&JobID, 1) util.AddValue(&JobID, 1)
......
...@@ -2,20 +2,22 @@ package app ...@@ -2,20 +2,22 @@ package app
import ( import (
"bytes" "bytes"
pai2 "chain33-pai/pkg/pai"
"chain33-pai/pkg/setting" "chain33-pai/pkg/setting"
"chain33-pai/pkg/util"
"chain33-pai/service/pai_service" "chain33-pai/service/pai_service"
"errors" "errors"
"fmt" "fmt"
"os" "os"
"os/exec" "os/exec"
"time"
"strings"
"strconv" "strconv"
"strings"
"time"
) )
var ( var (
btyPath string btyPath string
JobID int32 JobID int32
JobDoneMap = make(map[int32]string) JobDoneMap = make(map[int32]string)
) )
...@@ -28,7 +30,7 @@ func RaspberryChan() { ...@@ -28,7 +30,7 @@ func RaspberryChan() {
} }
path := GetAbsPath(setting.BityuanSetting.Name) path := GetAbsPath(setting.BityuanSetting.Name)
if path != "" { if path != "" {
tlog.Info("GetAbsPath node","path",path) tlog.Info("GetAbsPath node", "path", path)
btyPath = path btyPath = path
} }
switch value.Name { switch value.Name {
...@@ -37,35 +39,35 @@ func RaspberryChan() { ...@@ -37,35 +39,35 @@ func RaspberryChan() {
if err != nil { if err != nil {
tlog.Error("RaspberryChan rollback fail ", "err", err) tlog.Error("RaspberryChan rollback fail ", "err", err)
} }
updateJobMap(value.JobID,err) updateJobMap(value.JobID, err)
tlog.Info("RaspberryChan rollback success", "err", nil) tlog.Info("RaspberryChan rollback success", "err", nil)
case "BACKUP": case "BACKUP":
err := backup() err := backup()
if err != nil { if err != nil {
tlog.Error("RaspberryChan backup fail ", "err", err) tlog.Error("RaspberryChan backup fail ", "err", err)
} }
updateJobMap(value.JobID,err) updateJobMap(value.JobID, err)
tlog.Info("RaspberryChan backup success", "err", nil) tlog.Info("RaspberryChan backup success", "err", nil)
case "RECOVER": case "RECOVER":
err := recoverNode() err := recoverNode()
if err != nil { if err != nil {
tlog.Error("RaspberryChan recover fail ", "err", err) tlog.Error("RaspberryChan recover fail ", "err", err)
} }
updateJobMap(value.JobID,err) updateJobMap(value.JobID, err)
tlog.Info("RaspberryChan recover success", "err", nil) tlog.Info("RaspberryChan recover success", "err", nil)
case "DELETEBACKUP": case "DELETEBACKUP":
err := deleteBackup() err := deleteBackup()
if err != nil { if err != nil {
tlog.Error("RaspberryChan deleteBackup fail ", "err", err) tlog.Error("RaspberryChan deleteBackup fail ", "err", err)
} }
updateJobMap(value.JobID,err) updateJobMap(value.JobID, err)
tlog.Info("RaspberryChan deleteBackup success", "err", nil) tlog.Info("RaspberryChan deleteBackup success", "err", nil)
case "RESTART": case "RESTART":
err := restartNode() err := restartNode()
if err != nil { if err != nil {
tlog.Error("RaspberryChan deleteBackup fail ", "err", err) tlog.Error("RaspberryChan deleteBackup fail ", "err", err)
} }
updateJobMap(value.JobID,err) updateJobMap(value.JobID, err)
tlog.Info("RaspberryChan deleteBackup success", "err", nil) tlog.Info("RaspberryChan deleteBackup success", "err", nil)
case "RESET": case "RESET":
err := resetNode() err := resetNode()
...@@ -73,25 +75,37 @@ func RaspberryChan() { ...@@ -73,25 +75,37 @@ func RaspberryChan() {
tlog.Error("RaspberryChan resetNode fail ", "err", err) tlog.Error("RaspberryChan resetNode fail ", "err", err)
} }
updateJobMap(value.JobID,err) updateJobMap(value.JobID, err)
tlog.Info("RaspberryChan resetNode success", "err", nil) tlog.Info("RaspberryChan resetNode success", "err", nil)
case "RESETWALLET": case "RESETWALLET":
err := resetWallet() err := resetWallet()
if err != nil { if err != nil {
tlog.Error("RaspberryChan resetWallet fail ", "err", err) tlog.Error("RaspberryChan resetWallet fail ", "err", err)
} }
updateJobMap(value.JobID,err) updateJobMap(value.JobID, err)
tlog.Info("RaspberryChan resetWallet success", "err", nil) tlog.Info("RaspberryChan resetWallet success", "err", nil)
case "CLOSE": case "CLOSE":
err := closeNode() err := closeNode()
if err != nil { if err != nil {
tlog.Error("RaspberryChan resetWallet fail ", "err", err) tlog.Error("RaspberryChan resetWallet fail ", "err", err)
} }
updateJobMap(value.JobID,err) updateJobMap(value.JobID, err)
tlog.Info("RaspberryChan resetWallet success", "err", nil) tlog.Info("RaspberryChan resetWallet success", "err", nil)
default : case "NODEUPDATE":
tlog.Error("RaspberryChan not support type","msg",value.Name) err := nodeUpdate()
updateJobMap(value.JobID,errors.New("RaspberryChan not support type")) if err != nil {
tlog.Error("RaspberryChan nodeUpdate fail ", "err", err)
}
updateJobMap(value.JobID, err)
case "CLEARLOG": //清理日志 为其他操作做准备
err := clearLog()
if err != nil {
tlog.Error("RaspberryChan clearLog fail ", "err", err)
}
updateJobMap(value.JobID, err)
default:
tlog.Error("RaspberryChan not support type", "msg", value.Name)
updateJobMap(value.JobID, errors.New("RaspberryChan not support type"))
} }
} }
...@@ -99,6 +113,110 @@ func RaspberryChan() { ...@@ -99,6 +113,110 @@ func RaspberryChan() {
} }
} }
func clearLog() error {
BityuanFlag.Lock.Lock()
defer BityuanFlag.Lock.Unlock()
if btyPath != "" {
remove := exec.Command("rm", "-rf", btyPath+"/logs/*.gz")
err := remove.Run()
if err != nil {
tlog.Error("rm -rf datadir_backup", "err", err)
return err
}
return nil
}
tlog.Error("clearLog ", "err", "btypath not exists")
return errors.New("btypath is empty")
}
func nodeUpdate() error {
BityuanFlag.Lock.Lock()
defer BityuanFlag.Lock.Unlock()
var pai pai_service.Pai
var latestVersion string
err := pai.GetBtyVersion()
if err != nil {
tlog.Error("nodeupdate", "err", err)
return err
}
//判断当前环境为测试环境还是正式环境
if setting.Chain33Pai.Env == "formal" {
latestVersion, err = pai.GetPaiLatestVersion(int32(1))
if err != nil {
return err
}
} else if setting.Chain33Pai.Env == "test" {
latestVersion, err = pai.GetPaiVersionTest(int32(1))
if err != nil {
return err
}
}
tlog.Info("nodeupdate", "node version", pai.BtyVersion.App, "last version", latestVersion)
if util.VersionCompare(version) <= util.VersionCompare(pai.BtyVersion.App) {
return nil
}
name := setting.BityuanSetting.Name + "_" + latestVersion + ".tar.gz"
url := setting.Chain33Pai.DownloadUrl + name
if pai2.GetArchType() == "x86_64" {
name = setting.BityuanSetting.Name + "-linux_" + latestVersion + ".tar.gz"
url = setting.Chain33Pai.DownloadUrl + name
} else if pai2.GetArchType() == "arm" {
name = setting.BityuanSetting.Name + "-arm_" + latestVersion + ".tar.gz"
url = setting.Chain33Pai.DownloadUrl + name
}
tlog.Info("chan UpdateNode", "dir", setting.BityuanSetting.Name+"_"+latestVersion)
tlog.Info("chan UpdateNode", "path", btyPath)
tlog.Info("chan downloadUrl", "url", url)
err = DownLoadFile(url, name, 1)
if err != nil {
tlog.Error("nodeupdate download", "err", err)
return err
}
_, err = SafeCloseNode()
if err != nil {
return err
}
isRun := MakeSureBtyIsNotRun()
if !isRun {
tlog.Error("MakeSureBtyIsNotRun", "isRun", isRun)
return nil
}
btyPathSplit := strings.Split(btyPath, "wallet-bty")
if len(btyPathSplit) != 2 {
return errors.New("btyPath not contains wallet-bty")
}
tar := exec.Command("tar", "-xvf", name, "-C", btyPathSplit[0])
stdErr := bytes.NewBuffer(nil)
tar.Stderr = stdErr
err = tar.Start()
if err != nil {
tlog.Error("tar ", "err", string(stdErr.Bytes()))
return err
}
err = tar.Wait()
if err != nil {
tlog.Error("tar ", "err", string(stdErr.Bytes()))
return err
}
time.Sleep(time.Second * 1)
rm := exec.Command("rm", "-rf", name)
rm.Stderr = stdErr
err = rm.Start()
if err != nil {
tlog.Error("rm ", "err", string(stdErr.Bytes()))
return err
}
err = rm.Wait()
if err != nil {
tlog.Error("rm ", "err", string(stdErr.Bytes()))
return err
}
StartProcess(setting.Chain33Pai.Auto)
return nil
}
func rollback() error { func rollback() error {
BityuanFlag.Lock.Lock() BityuanFlag.Lock.Lock()
defer BityuanFlag.Lock.Unlock() defer BityuanFlag.Lock.Unlock()
...@@ -369,8 +487,8 @@ func closeNode() error { ...@@ -369,8 +487,8 @@ func closeNode() error {
return nil return nil
} }
func updateJobMap(id int32,err error) bool { func updateJobMap(id int32, err error) bool {
if _,exists:= JobDoneMap[id];!exists { if _, exists := JobDoneMap[id]; !exists {
if err == nil { if err == nil {
JobDoneMap[id] = "" JobDoneMap[id] = ""
} else { } else {
...@@ -379,7 +497,7 @@ func updateJobMap(id int32,err error) bool { ...@@ -379,7 +497,7 @@ func updateJobMap(id int32,err error) bool {
return true return true
} }
tlog.Error("updateJobMap error","jobid",id) tlog.Error("updateJobMap error", "jobid", id)
return false return false
} }
......
package app package app
const version = "0.3.5" const version = "0.3.6"
var ( var (
GitCommit string GitCommit string
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment