Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
N
nodemanager
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Odysseus
nodemanager
Commits
024fdef8
Commit
024fdef8
authored
Jun 03, 2024
by
vicotor
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add more msg handler
parent
f3f5c792
Changes
5
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
413 additions
and
304 deletions
+413
-304
taskresult.go
server/taskresult.go
+4
-4
worker.go
server/worker.go
+352
-9
workerManager.go
server/workerManager.go
+26
-202
worker_registry.go
server/worker_registry.go
+15
-38
workerstatu.go
server/workerstatu.go
+16
-51
No files found.
server/taskresult.go
View file @
024fdef8
...
...
@@ -28,7 +28,7 @@ func (wm *WorkerManager) taskResult(worker *Worker, task *odysseus.TaskContent,
}
func
(
wm
*
WorkerManager
)
computeTaskResult
(
worker
*
Worker
,
task
*
odysseus
.
TaskContent
,
result
*
omanager
.
SubmitTaskResult
)
(
*
odysseus
.
TaskProof
,
error
)
{
if
worker
.
info
.
nodeInfo
==
nil
{
if
worker
.
info
==
nil
{
return
nil
,
errors
.
New
(
"unknown worker node info"
)
}
//log.WithFields(log.Fields{
...
...
@@ -89,7 +89,7 @@ func (wm *WorkerManager) computeTaskResult(worker *Worker, task *odysseus.TaskCo
// verify miner_signature
// miner_signature = sign(hash((task_id+hash(task_param)+hash(task_result)))
verified
:=
utils
.
VerifySignature
(
utils
.
CombineBytes
([]
byte
(
result
.
TaskId
),
paramHash
[
:
],
resultHash
[
:
]),
result
.
MinerSignature
,
utils
.
FromHex
(
worker
.
info
.
nodeInfo
.
Info
.
MinerPubkey
))
result
.
MinerSignature
,
utils
.
FromHex
(
worker
.
info
.
Info
.
MinerPubkey
))
log
.
WithFields
(
log
.
Fields
{
"task-id"
:
task
.
TaskId
,
"minerSignatureVerify"
:
verified
,
...
...
@@ -131,7 +131,7 @@ func (wm *WorkerManager) computeTaskResult(worker *Worker, task *odysseus.TaskCo
}
func
(
wm
*
WorkerManager
)
standardTaskResult
(
worker
*
Worker
,
task
*
odysseus
.
TaskContent
,
result
*
omanager
.
SubmitTaskResult
)
(
*
odysseus
.
TaskProof
,
error
)
{
if
worker
.
info
.
nodeInfo
==
nil
{
if
worker
.
info
==
nil
{
return
nil
,
errors
.
New
(
"unknown worker node info"
)
}
//log.WithFields(log.Fields{
...
...
@@ -181,7 +181,7 @@ func (wm *WorkerManager) standardTaskResult(worker *Worker, task *odysseus.TaskC
// verify miner_signature
// miner_signature = sign(hash((task_id+hash(task_param)+hash(task_result)))
verified
:=
utils
.
VerifySignature
(
utils
.
CombineBytes
([]
byte
(
result
.
TaskId
),
paramHash
[
:
],
resultHash
[
:
]),
result
.
MinerSignature
,
utils
.
FromHex
(
worker
.
info
.
nodeInfo
.
Info
.
MinerPubkey
))
result
.
MinerSignature
,
utils
.
FromHex
(
worker
.
info
.
Info
.
MinerPubkey
))
log
.
WithFields
(
log
.
Fields
{
"task-id"
:
task
.
TaskId
,
"minerSignatureVerify"
:
verified
,
...
...
server/worker.go
View file @
024fdef8
This diff is collapsed.
Click to expand it.
server/workerManager.go
View file @
024fdef8
This diff is collapsed.
Click to expand it.
server/worker_registry.go
View file @
024fdef8
...
...
@@ -30,26 +30,6 @@ func (w workerRegistry) Instance() string {
func
(
w
workerRegistry
)
Status
()
string
{
return
fmt
.
Sprintf
(
"%s"
,
w
.
worker
.
status
)
}
func
generateAGpuRam
()
int
{
return
1024
*
1024
*
1024
*
(
rand
.
Intn
(
3
)
*
8
+
8
)
// 8, 16, 24
}
func
generateARam
()
(
int64
,
int64
)
{
return
32
*
1024
*
1024
*
1024
,
int64
(
rand
.
Intn
(
10
))
*
1024
*
1024
*
1024
}
func
generateAGpuModel
()
string
{
m
:=
rand
.
Intn
(
4
)
*
10
+
3060
// 3060 ~ 3090
return
fmt
.
Sprintf
(
"Nvidia GTX %d"
,
m
)
}
func
generateMac
()
string
{
return
fmt
.
Sprintf
(
"%02x:%02x:%02x:%02x:%02x:%02x"
,
rand
.
Intn
(
256
),
rand
.
Intn
(
256
),
rand
.
Intn
(
256
),
rand
.
Intn
(
256
),
rand
.
Intn
(
256
),
rand
.
Intn
(
256
))
}
func
(
w
workerRegistry
)
DetailInfo
()
(
json
.
RawMessage
,
error
)
{
if
w
.
worker
==
nil
{
return
nil
,
fmt
.
Errorf
(
"worker is nil"
)
...
...
@@ -73,9 +53,9 @@ func (w workerRegistry) DetailInfo() (json.RawMessage, error) {
ActiveNM
:
make
([]
string
,
0
),
TaskList
:
taskList
,
}
if
w
.
worker
.
info
.
nodeInfo
!=
nil
{
info
.
BenefitAddress
=
w
.
worker
.
info
.
nodeInfo
.
Info
.
BenefitAddress
info
.
IP
=
w
.
worker
.
info
.
nodeInfo
.
Hardware
.
NET
.
Ip
if
w
.
worker
.
info
!=
nil
{
info
.
BenefitAddress
=
w
.
worker
.
info
.
Info
.
BenefitAddress
info
.
IP
=
w
.
worker
.
info
.
Hardware
.
NET
.
Ip
}
nmList
,
_
:=
w
.
wm
.
WorkerNmList
(
w
.
worker
)
...
...
@@ -85,27 +65,24 @@ func (w workerRegistry) DetailInfo() (json.RawMessage, error) {
info
.
ActiveNM
=
append
(
info
.
ActiveNM
,
endpoint
)
}
}
info
.
HearBeat
=
w
.
w
m
.
GetHeartBeat
(
w
.
worker
.
uuid
)
*
1000
// to ms
info
.
HearBeat
=
w
.
w
orker
.
heartBeat
*
1000
// to ms
info
.
MinerAddress
=
w
.
worker
.
workerAddr
info
.
Nonce
=
0
if
w
.
worker
.
info
.
nodeInfo
!=
nil
{
info
.
CpuModel
=
w
.
worker
.
info
.
nodeInfo
.
Hardware
.
CPU
.
Model
info
.
CpuCore
=
int
(
w
.
worker
.
info
.
nodeInfo
.
Hardware
.
CPU
.
Cores
)
if
info
.
CpuCore
==
0
{
info
.
CpuModel
=
"Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz"
info
.
CpuCore
=
8
}
info
.
GPUModel
=
generateAGpuModel
()
info
.
GPURam
=
generateAGpuRam
()
ramTotal
,
ramUsed
:=
generateARam
()
info
.
RamTotal
=
ramTotal
info
.
RamUsed
=
ramUsed
if
w
.
worker
.
info
!=
nil
{
info
.
CpuModel
=
w
.
worker
.
info
.
Hardware
.
CPU
.
Model
info
.
CpuCore
=
int
(
w
.
worker
.
info
.
Hardware
.
CPU
.
Cores
)
info
.
GPUModel
=
w
.
worker
.
info
.
Hardware
.
GPU
[
0
]
.
Model
info
.
GPURam
=
int
(
w
.
worker
.
info
.
Hardware
.
GPU
[
0
]
.
MemTotal
)
info
.
RamTotal
=
w
.
worker
.
info
.
Hardware
.
RAM
.
Total
info
.
RamUsed
=
info
.
RamTotal
-
w
.
worker
.
info
.
Hardware
.
RAM
.
Free
}
info
.
MacAddress
=
w
.
worker
.
info
.
Hardware
.
NET
.
Mac
// todo: record the create time and bootup time
info
.
CreateTime
=
time
.
Now
()
.
Add
(
time
.
Hour
*
24
*
4
)
.
Unix
()
info
.
BootupTime
=
time
.
Now
()
.
Add
(
time
.
Hour
*
12
)
.
Unix
()
info
.
Workload
=
rand
.
Intn
(
500
)
+
1000
info
.
MacAddress
=
generateMac
()
return
json
.
Marshal
(
info
)
}
server/workerstatu.go
View file @
024fdef8
...
...
@@ -9,7 +9,6 @@ import (
"github.com/odysseus/mogo/operator"
"github.com/odysseus/mogo/types"
"github.com/odysseus/nodemanager/config"
omanager
"github.com/odysseus/odysseus-protocol/gen/proto/go/nodemanager/v2"
log
"github.com/sirupsen/logrus"
"go.mongodb.org/mongo-driver/mongo"
"strconv"
...
...
@@ -17,24 +16,10 @@ import (
"time"
)
func
(
wm
*
WorkerManager
)
UpdateWorkerUsageInfo
(
worker
*
Worker
,
usageInfo
*
omanager
.
DeviceUsageResponse
)
{
// todo: update usage info to mogo.
wm
.
rdb
.
Set
(
context
.
Background
(),
workerUsageInfoKey
(
worker
),
usageInfo
.
String
(),
0
)
}
func
(
wm
*
WorkerManager
)
UpdateWorkerDeviceInfo
(
worker
*
Worker
,
deviceInfos
*
omanager
.
DeviceInfoMessage
)
{
// todo: update device info to mogo.
wm
.
rdb
.
Set
(
context
.
Background
(),
workerDeviceInfoKey
(
worker
),
deviceInfos
.
String
(),
0
)
}
func
(
wm
*
WorkerManager
)
GetWorkerNonce
(
worker
*
Worker
)
(
int
,
error
)
{
return
0
,
nil
}
func
(
wm
*
WorkerManager
)
updateWorkerInfo
(
worker
*
Worker
,
winfo
*
operator
.
WorkerInfo
)
error
{
// 2. update worker running info.
wm
.
workerRunningOperator
.
DeleteByWorkerId
(
context
.
Background
(),
worker
.
WorkerAccount
()
.
String
())
for
_
,
running
:=
range
worker
.
info
.
nodeInfo
.
Models
.
RunningModels
{
for
_
,
running
:=
range
worker
.
info
.
Models
.
RunningModels
{
id
,
_
:=
strconv
.
Atoi
(
running
.
ModelId
)
iInfo
:=
&
operator
.
WorkerRunningInfo
{
WorkerId
:
worker
.
WorkerAccount
()
.
String
(),
...
...
@@ -52,14 +37,14 @@ func (wm *WorkerManager) updateWorkerInfo(worker *Worker, winfo *operator.Worker
}
// 3. update worker installed info.
wm
.
workerInstalledOperator
.
DeleteByWorkerId
(
context
.
Background
(),
worker
.
WorkerAccount
()
.
String
())
for
_
,
installed
:=
range
worker
.
info
.
nodeInfo
.
Models
.
InstalledModels
{
for
_
,
installed
:=
range
worker
.
info
.
Models
.
InstalledModels
{
id
,
_
:=
strconv
.
Atoi
(
installed
.
ModelId
)
iInfo
:=
&
operator
.
WorkerInstalledInfo
{
WorkerId
:
worker
.
WorkerAccount
()
.
String
(),
ModelId
:
id
,
}
if
len
(
worker
.
info
.
nodeInfo
.
Hardware
.
GPU
)
>
0
{
iInfo
.
GpuFree
=
worker
.
info
.
nodeInfo
.
Hardware
.
GPU
[
0
]
.
MemFree
if
len
(
worker
.
info
.
Hardware
.
GPU
)
>
0
{
iInfo
.
GpuFree
=
worker
.
info
.
Hardware
.
GPU
[
0
]
.
MemFree
}
_
,
err
:=
wm
.
workerInstalledOperator
.
Insert
(
context
.
Background
(),
iInfo
)
if
err
!=
nil
{
...
...
@@ -72,9 +57,9 @@ func (wm *WorkerManager) updateWorkerInfo(worker *Worker, winfo *operator.Worker
}
// 1. update worker info.
winfo
.
Hardware
=
types
.
PbToHardwareInfo
(
worker
.
info
.
nodeInfo
.
Hardware
)
winfo
.
Models
=
types
.
PbToModelInfo
(
worker
.
info
.
nodeInfo
.
Models
)
winfo
.
NodeInfo
=
types
.
PbToNodeInfo
(
worker
.
info
.
nodeInfo
.
Info
)
winfo
.
Hardware
=
types
.
PbToHardwareInfo
(
worker
.
info
.
Hardware
)
winfo
.
Models
=
types
.
PbToModelInfo
(
worker
.
info
.
Models
)
winfo
.
NodeInfo
=
types
.
PbToNodeInfo
(
worker
.
info
.
Info
)
err
:=
wm
.
workerInfoOperator
.
UpdateWorker
(
context
.
Background
(),
winfo
)
if
err
!=
nil
{
return
err
...
...
@@ -87,9 +72,9 @@ func (wm *WorkerManager) addWorkerInfo(worker *Worker) error {
// 1. add worker info.
_
,
err
:=
wm
.
workerInfoOperator
.
InsertWorker
(
context
.
Background
(),
&
operator
.
WorkerInfo
{
WorkerId
:
worker
.
WorkerAccount
()
.
String
(),
NodeInfo
:
types
.
PbToNodeInfo
(
worker
.
info
.
nodeInfo
.
Info
),
Models
:
types
.
PbToModelInfo
(
worker
.
info
.
nodeInfo
.
Models
),
Hardware
:
types
.
PbToHardwareInfo
(
worker
.
info
.
nodeInfo
.
Hardware
),
NodeInfo
:
types
.
PbToNodeInfo
(
worker
.
info
.
Info
),
Models
:
types
.
PbToModelInfo
(
worker
.
info
.
Models
),
Hardware
:
types
.
PbToHardwareInfo
(
worker
.
info
.
Hardware
),
})
if
err
!=
nil
{
return
err
...
...
@@ -97,7 +82,7 @@ func (wm *WorkerManager) addWorkerInfo(worker *Worker) error {
// 2. add worker running info.
for
_
,
running
:=
range
worker
.
info
.
nodeInfo
.
Models
.
RunningModels
{
for
_
,
running
:=
range
worker
.
info
.
Models
.
RunningModels
{
id
,
_
:=
strconv
.
Atoi
(
running
.
ModelId
)
iInfo
:=
&
operator
.
WorkerRunningInfo
{
WorkerId
:
worker
.
WorkerAccount
()
.
String
(),
...
...
@@ -115,14 +100,14 @@ func (wm *WorkerManager) addWorkerInfo(worker *Worker) error {
}
// 3. add worker installed info.
for
_
,
installed
:=
range
worker
.
info
.
nodeInfo
.
Models
.
InstalledModels
{
for
_
,
installed
:=
range
worker
.
info
.
Models
.
InstalledModels
{
id
,
_
:=
strconv
.
Atoi
(
installed
.
ModelId
)
iInfo
:=
&
operator
.
WorkerInstalledInfo
{
WorkerId
:
worker
.
WorkerAccount
()
.
String
(),
ModelId
:
id
,
}
if
len
(
worker
.
info
.
nodeInfo
.
Hardware
.
GPU
)
>
0
{
iInfo
.
GpuFree
=
worker
.
info
.
nodeInfo
.
Hardware
.
GPU
[
0
]
.
MemFree
if
len
(
worker
.
info
.
Hardware
.
GPU
)
>
0
{
iInfo
.
GpuFree
=
worker
.
info
.
Hardware
.
GPU
[
0
]
.
MemFree
}
_
,
err
:=
wm
.
workerInstalledOperator
.
Insert
(
context
.
Background
(),
iInfo
)
if
err
!=
nil
{
...
...
@@ -196,8 +181,8 @@ func (wm *WorkerManager) InActiveWorker(worker *Worker) {
if
list
,
err
:=
wm
.
rdb
.
SMembers
(
context
.
Background
(),
workerStatusKey
(
worker
))
.
Result
();
err
==
nil
&&
len
(
list
)
==
0
{
wm
.
rdb
.
Del
(
context
.
Background
(),
workerStatusKey
(
worker
))
if
worker
.
info
.
nodeInfo
!=
nil
{
wm
.
delWorkerFromWhiteListSet
(
worker
,
worker
.
info
.
nodeInfo
.
Info
.
BenefitAddress
)
if
worker
.
info
!=
nil
{
wm
.
delWorkerFromWhiteListSet
(
worker
,
worker
.
info
.
Info
.
BenefitAddress
)
// delete worker info from mogo.
n
,
err
:=
wm
.
workerInfoOperator
.
DeleteByWorkerId
(
context
.
Background
(),
worker
.
WorkerAccount
()
.
String
())
if
err
!=
nil
{
...
...
@@ -260,26 +245,6 @@ func (wm *WorkerManager) checkWhiteList(worker *Worker, benefit string) error {
}
}
func
workerResourceInfoKey
(
w
*
Worker
)
string
{
return
config
.
WORKER_RESOURCE_INFO_PREFIX
+
w
.
workerAddr
}
func
workerBootedResourceInfoKey
(
w
*
Worker
)
string
{
return
config
.
WORKER_BOOTED_RESOURCE_INFO_PREFIX
+
w
.
workerAddr
}
func
workerDeviceInfoKey
(
w
*
Worker
)
string
{
return
config
.
WORKER_DEVICE_INFO_PREFIX
+
w
.
workerAddr
}
func
workerUsageInfoKey
(
w
*
Worker
)
string
{
return
config
.
WORKER_USAGE_INFO_PREFIX
+
w
.
workerAddr
}
func
workerDeviceStatusInfoKey
(
w
*
Worker
)
string
{
return
config
.
WORKER_DEVICE_STATUS_PREFIX
+
w
.
workerAddr
}
func
workerSetsKey
(
benefit
string
)
string
{
return
config
.
WORKER_SETS_PREFIX
+
benefit
}
...
...
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