Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
chain33-pai
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
szh
chain33-pai
Commits
76b3f36a
Commit
76b3f36a
authored
Nov 08, 2021
by
szh
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
分片临时版本强制升级到最新版本,配置文件内容异常重新更新节点
parent
b3562850
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
171 additions
and
0 deletions
+171
-0
process.go
pkg/app/process.go
+24
-0
raspberryChan.go
pkg/app/raspberryChan.go
+92
-0
md5.go
pkg/util/md5.go
+55
-0
No files found.
pkg/app/process.go
View file @
76b3f36a
...
...
@@ -185,6 +185,20 @@ func MakeSureNodeRunning() error {
err
:=
pai
.
SetPai
()
if
err
!=
nil
{
tlog
.
Error
(
"MakeSureNodeRunning SetPai"
,
"err"
,
err
)
//判断未启动时 检查配置文件是否正常
if
strings
.
Contains
(
err
.
Error
(),
"8802"
)
{
configSize
,
err
:=
util
.
GetFileSizeByBytes
(
Bityuan
.
PName
+
"bityuan.toml"
)
if
err
!=
nil
{
tlog
.
Error
(
"GetFileSize"
,
"err"
,
err
)
return
err
}
tlog
.
Info
(
"bityuan.toml "
,
"bytes size"
,
configSize
)
//简单根据大小判断文件是否正常 重新更新节点版本
if
configSize
<
1000
{
util
.
AddValue
(
&
JobID
,
1
)
JobChan
<-
MsgType
{
Name
:
"FORCEUPDATETO653"
,
JobID
:
JobID
}
}
}
return
err
}
//版本不一致 6.4.x版本进行升级
...
...
@@ -203,6 +217,14 @@ func MakeSureNodeRunning() error {
JobChan
<-
MsgType
{
Name
:
"NODEUPDATE"
,
JobID
:
JobID
}
return
nil
}
//由于6.5.3小版本太多 矿机用户升级临时用了很多小版本,针对6.5.3这些版本节点 进行强制升级到1.65.2-8f91c0b5
//arm版本未写入git小版本号 故从执行文件sha256判断是否时最新版本
if
pai
.
BtyVersion
.
App
==
"6.5.3"
{
util
.
AddValue
(
&
JobID
,
1
)
JobChan
<-
MsgType
{
Name
:
"FORCEUPDATETO653"
,
JobID
:
JobID
}
tlog
.
Info
(
"MakeSureNodeRunning "
,
"checkout"
,
"wheather node is newest in chain33 1.65.2"
)
return
nil
}
// peer list只有自己 节点应进行重启或升级
if
pai
.
PeerLen
==
1
{
util
.
AddValue
(
&
JobID
,
1
)
...
...
@@ -232,6 +254,8 @@ func MakeSureNodeRunning() error {
}
}
}
//todo 节点奔溃 启动不了 精简版本发布后处理 从备份恢复或者从0开始同步
//节点版本过低 导致的异常
return
nil
}
...
...
pkg/app/raspberryChan.go
View file @
76b3f36a
...
...
@@ -105,6 +105,13 @@ func RaspberryChan() {
}
updateJobMap
(
value
.
JobID
,
err
)
tlog
.
Info
(
"RaspberryChan clearLog"
,
"err"
,
err
)
case
"FORCEUPDATETO653"
:
//针对6.5.3小版本节点统一升级至1.65.2-8f91c0b5
err
:=
forceUpdate653
()
if
err
!=
nil
{
tlog
.
Error
(
"RaspberryChan forceUpdate653 fail "
,
"err"
,
err
)
}
updateJobMap
(
value
.
JobID
,
err
)
tlog
.
Info
(
"RaspberryChan forceUpdate653"
,
"err"
,
err
)
default
:
tlog
.
Error
(
"RaspberryChan not support type"
,
"msg"
,
value
.
Name
)
updateJobMap
(
value
.
JobID
,
errors
.
New
(
"RaspberryChan not support type"
))
...
...
@@ -115,6 +122,91 @@ func RaspberryChan() {
}
}
func
forceUpdate653
()
error
{
if
btyPath
==
""
{
return
nil
}
shaStr
,
err
:=
util
.
GetSHA256FromFile
(
btyPath
+
"/v7-bityuan"
)
if
err
!=
nil
{
return
err
}
//arm 070e6c4cc62896fe0eb9afecd13da3fa92a3ce59f4b9b1045481fbe1a818410b
//linux 3b82622e1e60bd5b8160a4a86f2284ec58340e1f8d335fa21c60395de1190082
if
pai2
.
GetArchType
()
==
"arm"
&&
shaStr
!=
"070e6c4cc62896fe0eb9afecd13da3fa92a3ce59f4b9b1045481fbe1a818410b"
{
err
=
forceUpdate
()
}
else
if
pai2
.
GetArchType
()
==
"x86-64"
&&
shaStr
!=
"3b82622e1e60bd5b8160a4a86f2284ec58340e1f8d335fa21c60395de1190082"
{
err
=
forceUpdate
()
}
return
nil
}
//指定升级到1.65.2-8f91c0b5底层版本
func
forceUpdate
()
error
{
BityuanFlag
.
Lock
.
Lock
()
defer
BityuanFlag
.
Lock
.
Unlock
()
latestVersion
:=
"6.5.5"
//对应1.65.2-8f91c0b5
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 forceUpdate"
,
"dir"
,
setting
.
BityuanSetting
.
Name
+
"_"
+
latestVersion
)
tlog
.
Info
(
"chan forceUpdate"
,
"path"
,
btyPath
)
tlog
.
Info
(
"chan forceUpdate downloadUrl"
,
"url"
,
url
)
err
:=
DownLoadFile
(
url
,
name
,
1
)
if
err
!=
nil
{
tlog
.
Error
(
"forceUpdate 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
clearLog
()
error
{
BityuanFlag
.
Lock
.
Lock
()
defer
BityuanFlag
.
Lock
.
Unlock
()
...
...
pkg/util/md5.go
View file @
76b3f36a
package
util
import
(
"bytes"
"crypto/md5"
"crypto/sha256"
"encoding/hex"
"fmt"
"io"
"os"
"os/exec"
"strconv"
"strings"
)
// EncodeMD5 md5 encryption
...
...
@@ -12,3 +20,50 @@ func EncodeMD5(value string) string {
return
hex
.
EncodeToString
(
m
.
Sum
(
nil
))
}
func
GetMd5FromFile
(
path
string
)
(
string
,
error
)
{
f
,
err
:=
os
.
Open
(
path
)
defer
f
.
Close
()
if
err
!=
nil
{
return
""
,
err
}
h
:=
md5
.
New
()
if
_
,
err
:=
io
.
Copy
(
h
,
f
);
err
!=
nil
{
return
""
,
err
}
return
fmt
.
Sprintf
(
"%x"
,
h
.
Sum
(
nil
)),
nil
}
func
GetSHA256FromFile
(
path
string
)
(
string
,
error
)
{
f
,
err
:=
os
.
Open
(
path
)
defer
f
.
Close
()
if
err
!=
nil
{
return
""
,
err
}
h
:=
sha256
.
New
()
if
_
,
err
:=
io
.
Copy
(
h
,
f
);
err
!=
nil
{
return
""
,
err
}
sum
:=
fmt
.
Sprintf
(
"%x"
,
h
.
Sum
(
nil
))
return
sum
,
nil
}
func
GetFileSizeByBytes
(
file
string
)
(
int64
,
error
)
{
var
buf
bytes
.
Buffer
cmd
:=
exec
.
Command
(
"du"
,
"-b"
,
file
)
cmd
.
Stdout
=
&
buf
err
:=
cmd
.
Run
()
if
err
!=
nil
{
return
0
,
err
}
list
:=
strings
.
Split
(
buf
.
String
(),
"
\t
"
)
if
len
(
list
)
>=
2
{
size
,
err
:=
strconv
.
Atoi
(
list
[
0
])
if
err
!=
nil
{
return
0
,
err
}
return
int64
(
size
),
nil
}
return
0
,
nil
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment