Commit 802ac706 authored by vicotor's avatar vicotor

update worker

parent 41802e81
...@@ -5,7 +5,6 @@ import ( ...@@ -5,7 +5,6 @@ import (
"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/v1"
"strconv"
) )
var ( var (
...@@ -45,11 +44,8 @@ func (n *NodeManagerService) DispatchTask(ctx context.Context, request *omanager ...@@ -45,11 +44,8 @@ func (n *NodeManagerService) DispatchTask(ctx context.Context, request *omanager
if request == nil { if request == nil {
return nil, errors.New("invalid request") return nil, errors.New("invalid request")
} }
uuid, err := strconv.ParseInt(request.Miner, 10, 64) workerAddr := request.Miner
if err != nil { worker := n.node.wm.GetWorkerByAddr(workerAddr)
return nil, errors.New("not found worker")
}
worker := n.node.wm.GetWorker(uuid)
dtask := &dispatchTask{ dtask := &dispatchTask{
task: request.TaskData, task: request.TaskData,
errCh: make(chan error, 1), errCh: make(chan error, 1),
......
...@@ -49,6 +49,7 @@ type WorkerManager struct { ...@@ -49,6 +49,7 @@ type WorkerManager struct {
hbRwLock sync.RWMutex hbRwLock sync.RWMutex
workers map[int64]*Worker workers map[int64]*Worker
workid map[string]*Worker
wkRwLock sync.RWMutex wkRwLock sync.RWMutex
quit chan struct{} quit chan struct{}
...@@ -61,6 +62,7 @@ func NewWorkerManager(rdb *redis.Client, node *Node) *WorkerManager { ...@@ -61,6 +62,7 @@ func NewWorkerManager(rdb *redis.Client, node *Node) *WorkerManager {
return &WorkerManager{ return &WorkerManager{
heartBeat: make(map[int64]int64), heartBeat: make(map[int64]int64),
workers: make(map[int64]*Worker), workers: make(map[int64]*Worker),
workid: make(map[string]*Worker),
quit: make(chan struct{}), quit: make(chan struct{}),
rdb: rdb, rdb: rdb,
node: node, node: node,
...@@ -95,6 +97,21 @@ func (wm *WorkerManager) GetWorker(uuid int64) *Worker { ...@@ -95,6 +97,21 @@ func (wm *WorkerManager) GetWorker(uuid int64) *Worker {
return wm.workers[uuid] return wm.workers[uuid]
} }
func (wm *WorkerManager) SetWorkerAddr(worker *Worker, addr string) {
wm.wkRwLock.Lock()
defer wm.wkRwLock.Unlock()
worker.addr = addr
wm.workid[addr] = worker
}
func (wm *WorkerManager) GetWorkerByAddr(addr string) *Worker {
wm.wkRwLock.RLock()
defer wm.wkRwLock.RUnlock()
return wm.workid[addr]
}
func (wm *WorkerManager) AddNewWorker(uuid int64, worker omanager.NodeManagerService_RegisterWorkerServer) (*Worker, error) { func (wm *WorkerManager) AddNewWorker(uuid int64, worker omanager.NodeManagerService_RegisterWorkerServer) (*Worker, error) {
wm.wkRwLock.Lock() wm.wkRwLock.Lock()
defer wm.wkRwLock.Unlock() defer wm.wkRwLock.Unlock()
...@@ -282,6 +299,8 @@ func (wm *WorkerManager) manageWorker(worker *Worker) error { ...@@ -282,6 +299,8 @@ func (wm *WorkerManager) manageWorker(worker *Worker) error {
TaskResult: result.TaskResult, TaskResult: result.TaskResult,
TaskUid: task.TaskUid, TaskUid: task.TaskUid,
TaskFee: task.TaskFee, TaskFee: task.TaskFee,
TaskIsSucceed: true,
TaskError: "",
} }
d, _ := proto.Marshal(taskResponse) d, _ := proto.Marshal(taskResponse)
go func() { go func() {
...@@ -341,6 +360,7 @@ func (wm *WorkerManager) handleWorkerMsg(worker *Worker) { ...@@ -341,6 +360,7 @@ func (wm *WorkerManager) handleWorkerMsg(worker *Worker) {
}).Debug("receive worker heartbeat") }).Debug("receive worker heartbeat")
case *omanager.WorkerMessage_Status: case *omanager.WorkerMessage_Status:
// todo: store worker status // todo: store worker status
worker.status = msg.Status.DeviceStatus
log.WithFields(log.Fields{ log.WithFields(log.Fields{
"worker": worker.uuid, "worker": worker.uuid,
}).Debugf("receive worker status:0x%x", msg.Status.DeviceStatus) }).Debugf("receive worker status:0x%x", msg.Status.DeviceStatus)
...@@ -363,11 +383,13 @@ func (wm *WorkerManager) handleWorkerMsg(worker *Worker) { ...@@ -363,11 +383,13 @@ func (wm *WorkerManager) handleWorkerMsg(worker *Worker) {
} }
if worker.addr != "" { if worker.addr != "" {
wm.AddWorker(worker) wm.AddWorker(worker)
wm.SetWorkerAddr(worker, worker.addr)
} }
} }
case *omanager.WorkerMessage_DeviceUsage: case *omanager.WorkerMessage_DeviceUsage:
// todo: handler worker device usage // todo: handler worker device usage
worker.usageInfo = msg.DeviceUsage.Usage
log.WithFields(log.Fields{ log.WithFields(log.Fields{
"worker": worker.uuid, "worker": worker.uuid,
}).Debugf("receive worker device usage:%v", msg.DeviceUsage.Usage) }).Debugf("receive worker device usage:%v", msg.DeviceUsage.Usage)
......
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