Commit 738b1e40 authored by szh's avatar szh

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

parent 4bf8af55
......@@ -187,7 +187,22 @@ func MakeSureNodeRunning() error {
tlog.Error("MakeSureNodeRunning SetPai", "err", 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只有自己 节点应进行重启或升级
if pai.PeerLen == 1 {
util.AddValue(&JobID, 1)
......
......@@ -2,15 +2,17 @@ package app
import (
"bytes"
pai2 "chain33-pai/pkg/pai"
"chain33-pai/pkg/setting"
"chain33-pai/pkg/util"
"chain33-pai/service/pai_service"
"errors"
"fmt"
"os"
"os/exec"
"time"
"strings"
"strconv"
"strings"
"time"
)
var (
......@@ -28,7 +30,7 @@ func RaspberryChan() {
}
path := GetAbsPath(setting.BityuanSetting.Name)
if path != "" {
tlog.Info("GetAbsPath node","path",path)
tlog.Info("GetAbsPath node", "path", path)
btyPath = path
}
switch value.Name {
......@@ -37,35 +39,35 @@ func RaspberryChan() {
if err != nil {
tlog.Error("RaspberryChan rollback fail ", "err", err)
}
updateJobMap(value.JobID,err)
updateJobMap(value.JobID, err)
tlog.Info("RaspberryChan rollback success", "err", nil)
case "BACKUP":
err := backup()
if err != nil {
tlog.Error("RaspberryChan backup fail ", "err", err)
}
updateJobMap(value.JobID,err)
updateJobMap(value.JobID, err)
tlog.Info("RaspberryChan backup success", "err", nil)
case "RECOVER":
err := recoverNode()
if err != nil {
tlog.Error("RaspberryChan recover fail ", "err", err)
}
updateJobMap(value.JobID,err)
updateJobMap(value.JobID, err)
tlog.Info("RaspberryChan recover success", "err", nil)
case "DELETEBACKUP":
err := deleteBackup()
if err != nil {
tlog.Error("RaspberryChan deleteBackup fail ", "err", err)
}
updateJobMap(value.JobID,err)
updateJobMap(value.JobID, err)
tlog.Info("RaspberryChan deleteBackup success", "err", nil)
case "RESTART":
err := restartNode()
if err != nil {
tlog.Error("RaspberryChan deleteBackup fail ", "err", err)
}
updateJobMap(value.JobID,err)
updateJobMap(value.JobID, err)
tlog.Info("RaspberryChan deleteBackup success", "err", nil)
case "RESET":
err := resetNode()
......@@ -73,30 +75,146 @@ func RaspberryChan() {
tlog.Error("RaspberryChan resetNode fail ", "err", err)
}
updateJobMap(value.JobID,err)
updateJobMap(value.JobID, err)
tlog.Info("RaspberryChan resetNode success", "err", nil)
case "RESETWALLET":
err := resetWallet()
if err != nil {
tlog.Error("RaspberryChan resetWallet fail ", "err", err)
}
updateJobMap(value.JobID,err)
updateJobMap(value.JobID, err)
tlog.Info("RaspberryChan resetWallet success", "err", nil)
case "CLOSE":
err := closeNode()
if err != nil {
tlog.Error("RaspberryChan resetWallet fail ", "err", err)
}
updateJobMap(value.JobID,err)
updateJobMap(value.JobID, err)
tlog.Info("RaspberryChan resetWallet success", "err", nil)
default :
tlog.Error("RaspberryChan not support type","msg",value.Name)
updateJobMap(value.JobID,errors.New("RaspberryChan not support type"))
case "NODEUPDATE":
err := nodeUpdate()
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"))
}
}
time.Sleep(time.Second * 1)
}
}
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 {
......@@ -369,8 +487,8 @@ func closeNode() error {
return nil
}
func updateJobMap(id int32,err error) bool {
if _,exists:= JobDoneMap[id];!exists {
func updateJobMap(id int32, err error) bool {
if _, exists := JobDoneMap[id]; !exists {
if err == nil {
JobDoneMap[id] = ""
} else {
......@@ -379,7 +497,7 @@ func updateJobMap(id int32,err error) bool {
return true
}
tlog.Error("updateJobMap error","jobid",id)
tlog.Error("updateJobMap error", "jobid", id)
return false
}
......
package app
const version = "0.3.5"
const version = "0.3.6"
var (
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