Skip to content

Commit

Permalink
update Increase interface access restrictions and balance judgment (C…
Browse files Browse the repository at this point in the history
  • Loading branch information
AstaFrode authored May 16, 2024
1 parent 4f6af3d commit fa69b28
Show file tree
Hide file tree
Showing 7 changed files with 93 additions and 38 deletions.
20 changes: 0 additions & 20 deletions cmd/cmd/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import (
"fmt"
"os"
"path/filepath"
"strings"
"time"

"github.com/CESSProject/DeOSS/configs"
Expand Down Expand Up @@ -45,7 +44,6 @@ func cmd_run_func(cmd *cobra.Command, args []string) {
fadebackDir string
ufileDir string
dfileDir string
bootEnv string
syncSt chain.SysSyncState
peerRecord = node.NewPeerRecord()
n = node.New()
Expand Down Expand Up @@ -134,24 +132,6 @@ func cmd_run_func(cmd *cobra.Command, args []string) {
time.Sleep(time.Second)

out.Tip(fmt.Sprintf("chain network: %s", n.GetNetworkEnv()))
out.Tip(fmt.Sprintf("p2p network: %s", bootEnv))
if strings.Contains(bootEnv, "test") {
if !strings.Contains(n.GetNetworkEnv(), "test") {
out.Warn("chain and p2p are not in the same network")
}
}

if strings.Contains(bootEnv, "main") {
if !strings.Contains(n.GetNetworkEnv(), "main") {
out.Warn("chain and p2p are not in the same network")
}
}

if strings.Contains(bootEnv, "dev") {
if !strings.Contains(n.GetNetworkEnv(), "dev") {
out.Warn("chain and p2p are not in the same network")
}
}

if registerFlag {
_, err = n.RegisterOss(n.GetPeerPublickey(), n.GetDomainName())
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ module github.com/CESSProject/DeOSS
go 1.20

require (
github.com/CESSProject/cess-go-sdk v0.5.1-0.20240511074236-0962272b87ad
github.com/CESSProject/cess-go-sdk v0.5.1-0.20240516132726-775a705e4c76
github.com/CESSProject/cess-go-tools v0.2.6
github.com/CESSProject/go-keyring v0.0.0-20220614131247-ee3a8da30fde
github.com/CESSProject/p2p-go v0.3.14
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D
git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg=
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/CESSProject/cess-go-sdk v0.5.1-0.20240511074236-0962272b87ad h1:oknDc9mWkxphN3ICRcJQNqPaudZOJkKx6t8uYYsXKEQ=
github.com/CESSProject/cess-go-sdk v0.5.1-0.20240511074236-0962272b87ad/go.mod h1:9BGRFkU3Zc5CYqK9EIz3DY14MjDg6a0bA1DWgMk3qFc=
github.com/CESSProject/cess-go-sdk v0.5.1-0.20240516132726-775a705e4c76 h1:6nYML8LknGbCa+l5BIseOjJuDxoXEl3fLGkDmFnkxTg=
github.com/CESSProject/cess-go-sdk v0.5.1-0.20240516132726-775a705e4c76/go.mod h1:9BGRFkU3Zc5CYqK9EIz3DY14MjDg6a0bA1DWgMk3qFc=
github.com/CESSProject/cess-go-tools v0.2.6 h1:kZjqHN8uIyExTu8EEQApLN4qsmpWaWQfgBQD/0wF2+A=
github.com/CESSProject/cess-go-tools v0.2.6/go.mod h1:g86Xkq1+FZHg1srAvkwGqD3WoG+EIdeA2JHQAhhtKqQ=
github.com/CESSProject/go-keyring v0.0.0-20220614131247-ee3a8da30fde h1:5MDRjjtg6PEhqyVjupwaapN96cOZiddOGAYwKQeaTu0=
Expand Down
10 changes: 10 additions & 0 deletions node/delHandle.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,16 @@ func (n *Node) delHandle(c *gin.Context) {
clientIp string
)

if n.GetBalances() <= 1 {
c.JSON(http.StatusInternalServerError, "service balance is insufficient, please try again later.")
return
}

if !n.GetRpcState() {
c.JSON(http.StatusInternalServerError, "service rpc connection failed, please try again later.")
return
}

clientIp = c.Request.Header.Get("X-Forwarded-For")
n.Del("info", fmt.Sprintf("[%v] %v", clientIp, INFO_DelRequest))
// verify the authorization
Expand Down
17 changes: 17 additions & 0 deletions node/getHandle.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,25 @@ type FileMetaData struct {
Owner []RtnUserBrief
}

const max_concurrent_get = 30

var max_concurrent_get_ch chan bool

func init() {
max_concurrent_get_ch = make(chan bool, max_concurrent_get)
for i := 0; i < max_concurrent_get; i++ {
max_concurrent_get_ch <- true
}
}

// getHandle
func (n *Node) getHandle(c *gin.Context) {
if _, ok := <-max_concurrent_get_ch; !ok {
c.JSON(http.StatusTooManyRequests, "service is busy, please try again later.")
return
}
defer func() { max_concurrent_get_ch <- true }()

clientIp := c.Request.Header.Get("X-Forwarded-For")
n.Query("info", fmt.Sprintf("[%s] %s", clientIp, INFO_GetRequest))

Expand Down
12 changes: 11 additions & 1 deletion node/putHandle.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,11 +51,21 @@ func init() {
// putHandle
func (n *Node) putHandle(c *gin.Context) {
if _, ok := <-max_concurrent_req_ch; !ok {
c.JSON(http.StatusTooManyRequests, "The server is busy, please try again later.")
c.JSON(http.StatusTooManyRequests, "service is busy, please try again later.")
return
}
defer func() { max_concurrent_req_ch <- true }()

if n.GetBalances() <= 1 {
c.JSON(http.StatusInternalServerError, "service balance is insufficient, please try again later.")
return
}

if !n.GetRpcState() {
c.JSON(http.StatusInternalServerError, "service rpc connection failed, please try again later.")
return
}

var (
ok bool
err error
Expand Down
66 changes: 52 additions & 14 deletions node/taskMgt.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,55 +9,72 @@ package node

import (
"fmt"
"math"
"math/big"
"time"

"github.com/CESSProject/cess-go-sdk/chain"
schain "github.com/CESSProject/cess-go-sdk/chain"
sconfig "github.com/CESSProject/cess-go-sdk/config"
"github.com/CESSProject/p2p-go/out"
"github.com/mr-tron/base58"
)

func (n *Node) TaskMgt() {
var (
ch_trackFile = make(chan bool, 1)
ch_sdkMgt = make(chan bool, 1)
ch_trackFile = make(chan bool, 1)
ch_sdkMgt = make(chan bool, 1)
ch_refreshMiner = make(chan bool, 1)
)

go n.refreshMiner()
go n.refreshMiner(ch_refreshMiner)
go n.tracker(ch_trackFile)
go n.sdkMgt(ch_sdkMgt)

task_10S := time.NewTicker(time.Duration(time.Second * 10))
defer task_10S.Stop()
task_block := time.NewTicker(time.Duration(time.Second * 6))
defer task_block.Stop()

task_Minute := time.NewTicker(time.Duration(time.Second * 57))
defer task_Minute.Stop()
count := 0
for {
select {
case <-task_10S.C:
case <-task_block.C:
err := n.connectChain()
if err != nil {
n.Log("err", chain.ERR_RPC_CONNECTION.Error())
out.Err(chain.ERR_RPC_CONNECTION.Error())
n.Log("err", schain.ERR_RPC_CONNECTION.Error())
out.Err(schain.ERR_RPC_CONNECTION.Error())
}
count++
if count >= 4320 { //blacklist released every 12 hours
count = 0
n.ClearBlackList()
}

case <-task_Minute.C:
err := n.refreshSelf()
if err != nil {
n.Log("err", err.Error())
}

case <-ch_trackFile:
go n.tracker(ch_trackFile)

case <-ch_sdkMgt:
go n.sdkMgt(ch_sdkMgt)
default:
if time.Now().Hour()%5 == 0 {
if len(ch_refreshMiner) > 0 {
<-ch_refreshMiner
go n.refreshMiner(ch_refreshMiner)
}
}
}
}
}

func (n *Node) connectChain() error {
var err error
if !n.GetRpcState() {
n.Log("err", fmt.Sprintf("[%s] %v", n.GetCurrentRpcAddr(), chain.ERR_RPC_CONNECTION))
out.Err(fmt.Sprintf("[%s] %v", n.GetCurrentRpcAddr(), chain.ERR_RPC_CONNECTION))
n.Log("err", fmt.Sprintf("[%s] %v", n.GetCurrentRpcAddr(), schain.ERR_RPC_CONNECTION))
out.Err(fmt.Sprintf("[%s] %v", n.GetCurrentRpcAddr(), schain.ERR_RPC_CONNECTION))
err = n.ReconnectRpc()
if err != nil {
return err
Expand All @@ -69,7 +86,8 @@ func (n *Node) connectChain() error {
return nil
}

func (n *Node) refreshMiner() {
func (n *Node) refreshMiner(ch chan<- bool) {
defer func() { ch <- true }()
sminerList, err := n.QueryAllMiner(-1)
if err == nil {
for i := 0; i < len(sminerList); i++ {
Expand All @@ -85,3 +103,23 @@ func (n *Node) refreshMiner() {
}
}
}

func (n *Node) refreshSelf() error {
accInfo, err := n.QueryAccountInfoByAccountID(n.GetSignatureAccPulickey(), -1)
if err != nil {
return err
}
if len(accInfo.Data.Free.Bytes()) <= 0 {
n.SetBalances(0)
} else {
free_bi, _ := new(big.Int).SetString(accInfo.Data.Free.String(), 10)
minBanlance_bi, _ := new(big.Int).SetString(schain.MinTransactionBalance, 10)
free_bi = free_bi.Div(free_bi, minBanlance_bi)
if free_bi.IsUint64() {
n.SetBalances(free_bi.Uint64())
} else {
n.SetBalances(math.MaxUint64)
}
}
return nil
}

0 comments on commit fa69b28

Please sign in to comment.