Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
scheduler
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
scheduler
Commits
3ade7f32
Commit
3ade7f32
authored
Mar 04, 2024
by
vicotor
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update scheduler
parent
bf072567
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
35 additions
and
50 deletions
+35
-50
nmstatus.go
server/nmstatus.go
+0
-46
worker.go
server/worker.go
+35
-4
No files found.
server/nmstatus.go
View file @
3ade7f32
package
server
package
server
import
(
"encoding/json"
"github.com/odysseus/service-registry/common"
"github.com/odysseus/service-registry/query"
"github.com/odysseus/service-registry/registry"
"github.com/redis/go-redis/v9"
"time"
)
func
(
n
*
Node
)
allNodeManager
()
map
[
string
]
registry
.
RegistryInfo
{
querier
:=
query
.
NewQuery
(
registry
.
RedisConnParam
{
Addr
:
n
.
conf
.
Redis
.
Addr
,
Password
:
n
.
conf
.
Redis
.
Password
,
DbIndex
:
n
.
conf
.
Redis
.
DbIndex
,
})
result
,
err
:=
querier
.
Select
(
common
.
SERVICE_NODE_MANAGER
)
.
List
()
if
err
!=
nil
{
return
nil
}
res
:=
make
(
map
[
string
]
registry
.
RegistryInfo
,
0
)
for
_
,
v
:=
range
result
{
var
info
registry
.
RegistryInfo
var
nminfo
query
.
NodeManagerInfo
if
err
:=
json
.
Unmarshal
([]
byte
(
v
),
&
info
);
err
!=
nil
{
continue
}
if
err
:=
json
.
Unmarshal
([]
byte
(
info
.
Detail
),
&
nminfo
);
err
!=
nil
{
continue
}
else
{
res
[
nminfo
.
Endpoint
]
=
info
}
}
return
res
}
// managerUpdateTm got nm latest update time.
func
(
n
*
Node
)
managerLatestUpdateTm
(
rdb
*
redis
.
Client
,
manager_endpoint
string
)
int64
{
var
invalid
int64
=
1000000000
allnm
:=
n
.
allNodeManager
()
if
_
,
ok
:=
allnm
[
manager_endpoint
];
ok
{
return
allnm
[
manager_endpoint
]
.
Timestamp
-
time
.
Now
()
.
Unix
()
}
return
invalid
}
server/worker.go
View file @
3ade7f32
...
@@ -12,6 +12,8 @@ import (
...
@@ -12,6 +12,8 @@ import (
"google.golang.org/grpc"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
"google.golang.org/grpc/credentials/insecure"
"strconv"
"strconv"
"strings"
"time"
)
)
var
(
var
(
...
@@ -25,6 +27,8 @@ var (
...
@@ -25,6 +27,8 @@ var (
type
Worker
struct
{
type
Worker
struct
{
workerid
string
workerid
string
addr
string
nonce
int64
priority
int
priority
int
managers
[]
string
managers
[]
string
}
}
...
@@ -38,6 +42,7 @@ func PopWorker(rdb *redis.Client) (Worker, error) {
...
@@ -38,6 +42,7 @@ func PopWorker(rdb *redis.Client) (Worker, error) {
break
break
}
}
log
.
WithField
(
"elem"
,
elem
)
.
Debug
(
"lPop worker"
)
log
.
WithField
(
"elem"
,
elem
)
.
Debug
(
"lPop worker"
)
addr
,
nonce
:=
parseWorkerId
(
elem
)
managerList
,
err
:=
rdb
.
SMembers
(
context
.
Background
(),
workerStatusKey
(
elem
))
.
Result
()
managerList
,
err
:=
rdb
.
SMembers
(
context
.
Background
(),
workerStatusKey
(
elem
))
.
Result
()
if
err
!=
nil
{
if
err
!=
nil
{
log
.
WithError
(
err
)
.
Error
(
"get worker status failed"
)
log
.
WithError
(
err
)
.
Error
(
"get worker status failed"
)
...
@@ -49,6 +54,8 @@ func PopWorker(rdb *redis.Client) (Worker, error) {
...
@@ -49,6 +54,8 @@ func PopWorker(rdb *redis.Client) (Worker, error) {
}
}
return
Worker
{
return
Worker
{
workerid
:
elem
,
workerid
:
elem
,
addr
:
addr
,
nonce
:
nonce
,
priority
:
i
,
priority
:
i
,
managers
:
managerList
,
managers
:
managerList
,
},
nil
},
nil
...
@@ -75,6 +82,29 @@ func newManagerClient(endpoint string) (omanager.NodeManagerServiceClient, error
...
@@ -75,6 +82,29 @@ func newManagerClient(endpoint string) (omanager.NodeManagerServiceClient, error
return
manager
,
nil
return
manager
,
nil
}
}
func
parseWorkerId
(
elem
string
)
(
string
,
int64
)
{
split
:=
"_"
strs
:=
strings
.
Split
(
elem
,
split
)
if
len
(
strs
)
==
2
{
addr
:=
strs
[
0
]
nonce
,
_
:=
strconv
.
ParseInt
(
strs
[
1
],
10
,
64
)
return
addr
,
nonce
}
return
""
,
0
}
func
parseWorkerNmValue
(
nmValue
string
)
(
string
,
int64
)
{
split
:=
"#"
strs
:=
strings
.
Split
(
nmValue
,
split
)
if
len
(
strs
)
==
2
{
endpoint
:=
strs
[
0
]
timestamp
,
_
:=
strconv
.
ParseInt
(
strs
[
1
],
10
,
64
)
return
endpoint
,
timestamp
}
return
""
,
0
}
func
(
n
*
Node
)
DispatchTask
(
rdb
*
redis
.
Client
,
worker
Worker
,
task
*
odysseus
.
TaskContent
)
error
{
func
(
n
*
Node
)
DispatchTask
(
rdb
*
redis
.
Client
,
worker
Worker
,
task
*
odysseus
.
TaskContent
)
error
{
l
:=
log
.
WithField
(
"task-id"
,
task
.
TaskId
)
l
:=
log
.
WithField
(
"task-id"
,
task
.
TaskId
)
l
.
WithFields
(
log
.
Fields
{
l
.
WithFields
(
log
.
Fields
{
...
@@ -82,15 +112,16 @@ func (n *Node) DispatchTask(rdb *redis.Client, worker Worker, task *odysseus.Tas
...
@@ -82,15 +112,16 @@ func (n *Node) DispatchTask(rdb *redis.Client, worker Worker, task *odysseus.Tas
"managerList"
:
worker
.
managers
,
"managerList"
:
worker
.
managers
,
})
.
Debug
(
"dispatch task to worker"
)
})
.
Debug
(
"dispatch task to worker"
)
for
_
,
manager
:=
range
worker
.
managers
{
for
_
,
manager
:=
range
worker
.
managers
{
if
latest
:=
n
.
managerLatestUpdateTm
(
rdb
,
manager
);
latest
>
int64
(
config
.
GetConfig
()
.
MaxNmUpdateEx
)
{
endpoint
,
updateTime
:=
parseWorkerNmValue
(
manager
)
if
time
.
Now
()
.
Unix
()
-
updateTime
>
int64
(
config
.
GetConfig
()
.
MaxNmUpdateEx
)
{
l
.
WithField
(
"manager"
,
manager
)
.
Warn
(
"ignore the manager because of not update tm"
)
l
.
WithField
(
"manager"
,
manager
)
.
Warn
(
"ignore the manager because of not update tm"
)
continue
continue
}
}
client
,
err
:=
newManagerClient
(
manager
)
client
,
err
:=
newManagerClient
(
endpoint
)
if
err
!=
nil
{
if
err
!=
nil
{
l
.
WithFields
(
log
.
Fields
{
l
.
WithFields
(
log
.
Fields
{
"manager"
:
manager
,
"manager"
:
endpoint
,
"error"
:
err
,
"error"
:
err
,
})
.
Error
(
"connect to manager failed"
)
})
.
Error
(
"connect to manager failed"
)
continue
continue
...
@@ -101,7 +132,7 @@ func (n *Node) DispatchTask(rdb *redis.Client, worker Worker, task *odysseus.Tas
...
@@ -101,7 +132,7 @@ func (n *Node) DispatchTask(rdb *redis.Client, worker Worker, task *odysseus.Tas
})
})
if
err
!=
nil
{
if
err
!=
nil
{
l
.
WithFields
(
log
.
Fields
{
l
.
WithFields
(
log
.
Fields
{
"manager"
:
manager
,
"manager"
:
endpoint
,
"error"
:
err
,
"error"
:
err
,
})
.
Error
(
"dispatch to manager failed"
)
})
.
Error
(
"dispatch to manager failed"
)
...
...
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