Commit 5083c77d authored by vicotor's avatar vicotor

update nm

parent 9b00464f
...@@ -3,7 +3,7 @@ package server ...@@ -3,7 +3,7 @@ package server
import ( import (
"errors" "errors"
odysseus "github.com/odysseus/odysseus-protocol/gen/proto/go/base/v1" odysseus "github.com/odysseus/odysseus-protocol/gen/proto/go/base/v1"
omanager "github.com/odysseus/odysseus-protocol/gen/proto/go/nodemanager/v1" omanager "github.com/odysseus/odysseus-protocol/gen/proto/go/nodemanager/v2"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
"sync" "sync"
"time" "time"
......
...@@ -11,7 +11,7 @@ import ( ...@@ -11,7 +11,7 @@ import (
"github.com/odysseus/nodemanager/nmregister" "github.com/odysseus/nodemanager/nmregister"
"github.com/odysseus/nodemanager/utils" "github.com/odysseus/nodemanager/utils"
basev1 "github.com/odysseus/odysseus-protocol/gen/proto/go/base/v1" basev1 "github.com/odysseus/odysseus-protocol/gen/proto/go/base/v1"
omanager "github.com/odysseus/odysseus-protocol/gen/proto/go/nodemanager/v1" omanager "github.com/odysseus/odysseus-protocol/gen/proto/go/nodemanager/v2"
"github.com/odysseus/service-registry/query" "github.com/odysseus/service-registry/query"
"github.com/odysseus/service-registry/registry" "github.com/odysseus/service-registry/registry"
"github.com/redis/go-redis/v9" "github.com/redis/go-redis/v9"
...@@ -139,18 +139,6 @@ func (n *Node) PostProof(proof *basev1.TaskProof) { ...@@ -139,18 +139,6 @@ func (n *Node) PostProof(proof *basev1.TaskProof) {
n.taskProofCh <- proof n.taskProofCh <- proof
} }
func (n *Node) Start() error {
go n.registry.Start()
go n.register.Start()
go n.postLoop()
n.SetStatus("running")
if err := n.apiStart(); err != nil {
return err
}
return nil
}
func (n *Node) postLoop() { func (n *Node) postLoop() {
for { for {
select { select {
...@@ -172,6 +160,22 @@ func (n *Node) postLoop() { ...@@ -172,6 +160,22 @@ func (n *Node) postLoop() {
} }
} }
func (n *Node) SetStatus(status string) {
n.register.SetStatus(status)
}
func (n *Node) Start() error {
go n.registry.Start()
go n.register.Start()
go n.postLoop()
n.SetStatus("running")
if err := n.apiStart(); err != nil {
return err
}
return nil
}
func (n *Node) Stop() { func (n *Node) Stop() {
n.registry.Clear() n.registry.Clear()
n.registry.Stop() n.registry.Stop()
...@@ -181,6 +185,10 @@ func (n *Node) Stop() { ...@@ -181,6 +185,10 @@ func (n *Node) Stop() {
close(n.taskProofCh) close(n.taskProofCh)
} }
func (n *Node) SetStatus(status string) { func (n *Node) PayForFee(uid int64, fee int64) error {
n.register.SetStatus(status) return n.cache.PayforFee(uid, fee)
}
func (n *Node) Cache() *cachedata.CacheData {
return n.cache
} }
...@@ -4,7 +4,7 @@ import ( ...@@ -4,7 +4,7 @@ import (
"context" "context"
"errors" "errors"
"github.com/odysseus/nodemanager/utils" "github.com/odysseus/nodemanager/utils"
omanager "github.com/odysseus/odysseus-protocol/gen/proto/go/nodemanager/v1" omanager "github.com/odysseus/odysseus-protocol/gen/proto/go/nodemanager/v2"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
"strconv" "strconv"
"strings" "strings"
......
...@@ -5,7 +5,7 @@ import ( ...@@ -5,7 +5,7 @@ import (
"github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/crypto"
"github.com/odysseus/nodemanager/utils" "github.com/odysseus/nodemanager/utils"
odysseus "github.com/odysseus/odysseus-protocol/gen/proto/go/base/v1" odysseus "github.com/odysseus/odysseus-protocol/gen/proto/go/base/v1"
omanager "github.com/odysseus/odysseus-protocol/gen/proto/go/nodemanager/v1" omanager "github.com/odysseus/odysseus-protocol/gen/proto/go/nodemanager/v2"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
"math/big" "math/big"
"time" "time"
...@@ -89,7 +89,7 @@ func (wm *WorkerManager) computeTaskResult(worker *Worker, task *odysseus.TaskCo ...@@ -89,7 +89,7 @@ func (wm *WorkerManager) computeTaskResult(worker *Worker, task *odysseus.TaskCo
// verify miner_signature // verify miner_signature
// miner_signature = sign(hash((task_id+hash(task_param)+hash(task_result))) // miner_signature = sign(hash((task_id+hash(task_param)+hash(task_result)))
verified := utils.VerifySignature(utils.CombineBytes([]byte(result.TaskId), paramHash[:], resultHash[:]), verified := utils.VerifySignature(utils.CombineBytes([]byte(result.TaskId), paramHash[:], resultHash[:]),
result.MinerSignature, utils.FromHex(worker.info.nodeInfo.MinerPubkey)) result.MinerSignature, utils.FromHex(worker.info.nodeInfo.Info.MinerPubkey))
log.WithFields(log.Fields{ log.WithFields(log.Fields{
"task-id": task.TaskId, "task-id": task.TaskId,
"minerSignatureVerify": verified, "minerSignatureVerify": verified,
...@@ -181,7 +181,7 @@ func (wm *WorkerManager) standardTaskResult(worker *Worker, task *odysseus.TaskC ...@@ -181,7 +181,7 @@ func (wm *WorkerManager) standardTaskResult(worker *Worker, task *odysseus.TaskC
// verify miner_signature // verify miner_signature
// miner_signature = sign(hash((task_id+hash(task_param)+hash(task_result))) // miner_signature = sign(hash((task_id+hash(task_param)+hash(task_result)))
verified := utils.VerifySignature(utils.CombineBytes([]byte(result.TaskId), paramHash[:], resultHash[:]), verified := utils.VerifySignature(utils.CombineBytes([]byte(result.TaskId), paramHash[:], resultHash[:]),
result.MinerSignature, utils.FromHex(worker.info.nodeInfo.MinerPubkey)) result.MinerSignature, utils.FromHex(worker.info.nodeInfo.Info.MinerPubkey))
log.WithFields(log.Fields{ log.WithFields(log.Fields{
"task-id": task.TaskId, "task-id": task.TaskId,
"minerSignatureVerify": verified, "minerSignatureVerify": verified,
......
...@@ -4,17 +4,17 @@ import ( ...@@ -4,17 +4,17 @@ import (
"errors" "errors"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
lru "github.com/hashicorp/golang-lru" lru "github.com/hashicorp/golang-lru"
omanager "github.com/odysseus/odysseus-protocol/gen/proto/go/nodemanager/v1" omanager "github.com/odysseus/odysseus-protocol/gen/proto/go/nodemanager/v2"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
"time" "time"
) )
type workerInfo struct { type workerInfo struct {
nodeInfo *omanager.NodeInfoResponse nodeInfo *omanager.NodeInfoResponse
deviceUsageInfo []*omanager.DeviceUsage }
deviceInfo *omanager.DeviceInfoMessage
deviceStatusInfo *omanager.StatusResponse type workerUsageInfo struct {
resourceInfo *omanager.SubmitResourceMap hwUsage *omanager.HardwareUsage
} }
type sendMsgCallback struct { type sendMsgCallback struct {
...@@ -37,6 +37,7 @@ type Worker struct { ...@@ -37,6 +37,7 @@ type Worker struct {
addFirstSucceed bool addFirstSucceed bool
info workerInfo info workerInfo
usage workerUsageInfo
workerAddr string // worker address from public-key workerAddr string // worker address from public-key
deviceInfoHash []byte deviceInfoHash []byte
recentTask *lru.ARCCache recentTask *lru.ARCCache
...@@ -48,7 +49,7 @@ type Worker struct { ...@@ -48,7 +49,7 @@ type Worker struct {
func (w *Worker) ProfitAccount() common.Address { func (w *Worker) ProfitAccount() common.Address {
if w.info.nodeInfo != nil { if w.info.nodeInfo != nil {
return common.HexToAddress(w.info.nodeInfo.BenefitAddress) return common.HexToAddress(w.info.nodeInfo.Info.BenefitAddress)
} }
return common.Address{} return common.Address{}
} }
...@@ -121,3 +122,22 @@ func (w *Worker) RecvMessage() { ...@@ -121,3 +122,22 @@ func (w *Worker) RecvMessage() {
w.msgCh <- wmsg w.msgCh <- wmsg
} }
} }
func (w *Worker) ModelOperate(info interface{}, operate omanager.ModelOperateType) *omanager.ManagerMessage_ModelOperateRequest {
request := &omanager.ManagerMessage_ModelOperateRequest{
ModelOperateRequest: &omanager.ModelOperateRequest{
ModelOperates: []*omanager.ModelOperate{
{
ModelId: "",
ImageName: "",
Username: "",
Password: "",
Cmd: "",
Operate: operate,
},
},
},
}
return request
}
This diff is collapsed.
...@@ -7,7 +7,6 @@ import ( ...@@ -7,7 +7,6 @@ import (
"github.com/odysseus/service-registry/query" "github.com/odysseus/service-registry/query"
"github.com/odysseus/service-registry/registry" "github.com/odysseus/service-registry/registry"
"math/rand" "math/rand"
"strings"
"time" "time"
) )
...@@ -75,8 +74,8 @@ func (w workerRegistry) DetailInfo() (json.RawMessage, error) { ...@@ -75,8 +74,8 @@ func (w workerRegistry) DetailInfo() (json.RawMessage, error) {
TaskList: taskList, TaskList: taskList,
} }
if w.worker.info.nodeInfo != nil { if w.worker.info.nodeInfo != nil {
info.BenefitAddress = w.worker.info.nodeInfo.BenefitAddress info.BenefitAddress = w.worker.info.nodeInfo.Info.BenefitAddress
info.IP = w.worker.info.nodeInfo.DeviceIp info.IP = w.worker.info.nodeInfo.Hardware.NET.Ip
} }
nmList, _ := w.wm.WorkerNmList(w.worker) nmList, _ := w.wm.WorkerNmList(w.worker)
...@@ -89,15 +88,9 @@ func (w workerRegistry) DetailInfo() (json.RawMessage, error) { ...@@ -89,15 +88,9 @@ func (w workerRegistry) DetailInfo() (json.RawMessage, error) {
info.HearBeat = w.wm.GetHeartBeat(w.worker.uuid) * 1000 // to ms info.HearBeat = w.wm.GetHeartBeat(w.worker.uuid) * 1000 // to ms
info.MinerAddress = w.worker.workerAddr info.MinerAddress = w.worker.workerAddr
info.Nonce = int64(w.worker.nonce) info.Nonce = int64(w.worker.nonce)
if w.worker.info.deviceInfo != nil { if w.worker.info.nodeInfo != nil {
for i := 0; i < len(w.worker.info.deviceInfo.Devices); i++ { info.CpuModel = w.worker.info.nodeInfo.Hardware.CPU.Model
if strings.HasPrefix(w.worker.info.deviceInfo.Devices[i].DeviceType, "cpu") { info.CpuCore = int(w.worker.info.nodeInfo.Hardware.CPU.Cores)
if info.CpuModel == "" {
info.CpuModel = w.worker.info.deviceInfo.Devices[i].DeviceModel
}
info.CpuCore++
}
}
if info.CpuCore == 0 { if info.CpuCore == 0 {
info.CpuModel = "Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz" info.CpuModel = "Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz"
info.CpuCore = 8 info.CpuCore = 8
......
...@@ -65,13 +65,10 @@ func (wm *WorkerManager) IncrWorkerNonce(worker *Worker) (int, error) { ...@@ -65,13 +65,10 @@ func (wm *WorkerManager) IncrWorkerNonce(worker *Worker) (int, error) {
func (wm *WorkerManager) AddWorkerFirst(worker *Worker) error { func (wm *WorkerManager) AddWorkerFirst(worker *Worker) error {
log.WithField("worker", worker.workerAddr).Info("add worker first time.") log.WithField("worker", worker.workerAddr).Info("add worker first time.")
wm.UpdateWorkerActive(worker) wm.UpdateWorkerActive(worker)
for _, device := range worker.info.deviceInfo.Devices { for _, gpu := range worker.info.nodeInfo.Hardware.GPU {
if !strings.HasPrefix(device.DeviceType, "gpu") {
continue
}
// add device to redis // add device to redis
priority := 0 priority := 0
_ = device // todo: set priority with device info. _ = gpu // todo: set priority with device info.
for m := 0; m < config.GetConfig().GetWorkerMultiple(); m++ { for m := 0; m < config.GetConfig().GetWorkerMultiple(); m++ {
// add worker to redis queue // add worker to redis queue
if err := wm.rdb.RPush(context.Background(), config.WORKER_QUEUE_PREFIX+strconv.Itoa(priority), workerUid(worker)).Err(); err != nil { if err := wm.rdb.RPush(context.Background(), config.WORKER_QUEUE_PREFIX+strconv.Itoa(priority), workerUid(worker)).Err(); err != nil {
...@@ -187,7 +184,7 @@ func (wm *WorkerManager) InActiveWorker(worker *Worker) { ...@@ -187,7 +184,7 @@ func (wm *WorkerManager) InActiveWorker(worker *Worker) {
wm.rdb.Del(context.Background(), workerResourceInfoKey(worker)) wm.rdb.Del(context.Background(), workerResourceInfoKey(worker))
wm.rdb.Del(context.Background(), workerBootedResourceInfoKey(worker)) wm.rdb.Del(context.Background(), workerBootedResourceInfoKey(worker))
if worker.info.nodeInfo != nil { if worker.info.nodeInfo != nil {
wm.rmWorkerFromSets(worker, worker.info.nodeInfo.BenefitAddress) wm.rmWorkerFromSets(worker, worker.info.nodeInfo.Info.BenefitAddress)
} }
} }
} }
...@@ -217,7 +214,7 @@ func (wm *WorkerManager) setWorkerLastTaskTime(worker *Worker, tm int64) error { ...@@ -217,7 +214,7 @@ func (wm *WorkerManager) setWorkerLastTaskTime(worker *Worker, tm int64) error {
} }
func (wm *WorkerManager) checkWhiteList(worker *Worker, benefit string) error { func (wm *WorkerManager) checkWhiteList(worker *Worker, benefit string) error {
wh, err := wm.node.cache.GetWhWithAddr(benefit) wh, err := wm.node.Cache().GetWhWithAddr(benefit)
if err != nil { if err != nil {
log.WithFields(log.Fields{ log.WithFields(log.Fields{
"worker": worker.uuid, "worker": worker.uuid,
......
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