Skip to content

Commit 3dc98aa

Browse files
committed
fix: versionMap store bugs and adjust the code order
1. fix key bug in etcd where volumeVersionMap is stored 2. reorder code and optimize initVersionMap function 3. add some comments
1 parent 1075c00 commit 3dc98aa

File tree

4 files changed

+43
-41
lines changed

4 files changed

+43
-41
lines changed

internal/model/volume.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,6 @@ type Bind struct {
1616
Dest string `json:"dest"`
1717
}
1818

19-
func (b *Bind) Equal(other *Bind) bool {
20-
return b.Src == other.Src && b.Dest == other.Dest
21-
}
22-
2319
func (b *Bind) Format() string {
2420
return fmt.Sprintf("%s:%s", b.Src, b.Dest)
2521
}

internal/scheduler/gpuscheduler/scheduler.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ import (
1717
const (
1818
// 默认的可用GPU 数量
1919
defaultAvailableGpuNums = 8
20-
// gpuStatusMapKey 用于存储 GPU 使用信息的 key
20+
21+
// gpuScheduler 存储在 etcd 中的 key
2122
gpuStatusMapKey = "gpuStatusMapKey"
2223
)
2324

@@ -36,6 +37,7 @@ func Init(cfg *config.Config) error {
3637
if err != nil {
3738
return err
3839
}
40+
3941
if Scheduler.AvailableGpuNums == 0 || len(Scheduler.GpuStatusMap) == 0 {
4042
// 如果没有初始化过
4143
Scheduler.AvailableGpuNums = defaultAvailableGpuNums
@@ -119,13 +121,14 @@ func (s *scheduler) serialize() *string {
119121
}
120122

121123
func initFormEtcd() (s *scheduler, err error) {
122-
s = &scheduler{
123-
GpuStatusMap: make(map[string]byte),
124-
}
125124
bytes, err := etcd.Get(etcd.Gpus, gpuStatusMapKey)
126125
if err != nil {
127126
return s, err
128127
}
128+
129+
s = &scheduler{
130+
GpuStatusMap: make(map[string]byte),
131+
}
129132
if len(bytes) != 0 {
130133
err = json.Unmarshal(bytes, &s)
131134
}

internal/scheduler/portscheduler/scheduler.go

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -13,43 +13,46 @@ import (
1313
)
1414

1515
const (
16+
// 默认端口范围 [4000, 65535]
1617
defaultStartPort = 40000
1718
defaultEndPort = 65535
18-
AvailablePortCount = defaultEndPort - defaultStartPort + 1
19-
usedPortSetKey = "usedPortSetKey"
19+
availablePortCount = defaultEndPort - defaultStartPort + 1
20+
21+
// portScheduler 存储在 etcd 中的 key
22+
usedPortSetKey = "usedPortSetKey"
2023
)
2124

2225
var Scheduler *scheduler
2326

24-
type scheduler struct {
25-
sync.RWMutex
27+
type portParams struct {
2628
StartPort int
2729
EndPort int
2830
AvailableCount int
29-
UsedPortSet map[int]struct{}
3031
}
3132

32-
type Alias struct {
33-
StartPort int
34-
EndPort int
35-
AvailableCount int
36-
UsedPortSet []int
33+
type scheduler struct {
34+
sync.RWMutex
35+
36+
portParams
37+
UsedPortSet map[int]struct{}
38+
}
39+
40+
type alias struct {
41+
portParams
42+
UsedPortSet []int
3743
}
3844

3945
// MarshalJSON 重载序列化结构体为 JSON 的方法
40-
// 如果直接将 scheduler 序列化,UsedPortSet 字段以 map 的形式输出,value为 struct{}{},而且是乱序的
46+
// 如果直接将 scheduler 序列化,UsedPortSet 字段以 map 的形式输出,value为 struct{}{},而且是乱序
4147
func (s *scheduler) MarshalJSON() ([]byte, error) {
4248
onlyKeys := make([]int, 0, len(s.UsedPortSet))
4349
for k, _ := range s.UsedPortSet {
4450
onlyKeys = append(onlyKeys, k)
4551
}
4652
sort.Ints(onlyKeys)
47-
return json.Marshal(Alias{
48-
s.StartPort,
49-
s.EndPort,
50-
s.AvailableCount,
51-
onlyKeys,
52-
})
53+
return json.Marshal(alias{
54+
portParams: s.portParams,
55+
UsedPortSet: onlyKeys})
5356
}
5457

5558
func Init(cfg *config.Config) error {
@@ -63,7 +66,7 @@ func Init(cfg *config.Config) error {
6366
// 如果没有初始化过
6467
Scheduler.StartPort = defaultStartPort
6568
Scheduler.EndPort = defaultEndPort
66-
Scheduler.AvailableCount = AvailablePortCount
69+
Scheduler.AvailableCount = availablePortCount
6770
if cfg.StartPort >= 0 && cfg.EndPort >= 0 {
6871
Scheduler.StartPort = cfg.StartPort
6972
Scheduler.EndPort = cfg.EndPort
@@ -143,18 +146,16 @@ func initFormEtcd() (s *scheduler, err error) {
143146
if err != nil {
144147
return s, err
145148
}
146-
var alias Alias
149+
150+
var alias alias
147151
if len(bytes) != 0 {
148152
err = json.Unmarshal(bytes, &alias)
149153
}
150154

151155
s = &scheduler{
152-
StartPort: alias.StartPort,
153-
EndPort: alias.EndPort,
154-
AvailableCount: alias.AvailableCount,
155-
UsedPortSet: make(map[int]struct{}, len(alias.UsedPortSet)),
156+
portParams: alias.portParams,
157+
UsedPortSet: make(map[int]struct{}, len(alias.UsedPortSet)),
156158
}
157-
158159
for _, port := range alias.UsedPortSet {
159160
s.UsedPortSet[port] = struct{}{}
160161
}

internal/version/version.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,13 @@ import (
1111

1212
var (
1313
// ContainerVersionMap 用于追踪容器的版本信息
14-
ContainerVersionMap versionMap
14+
ContainerVersionMap *versionMap
1515
// VolumeVersionMap 用于跟踪 Volume 的版本信息
16-
VolumeVersionMap versionMap
16+
VolumeVersionMap *versionMap
1717
)
1818

1919
const (
20+
// 存储在 etcd 中的 key
2021
containerVersionMapKey = "containerVersionMapKey"
2122
volumeVersionMapKey = "volumeVersionMapKey"
2223
)
@@ -25,8 +26,8 @@ type versionMap struct {
2526
cmap.ConcurrentMap[string, sync2.AtomicInt64]
2627
}
2728

28-
func newVersionMap() versionMap {
29-
return versionMap{cmap.New[sync2.AtomicInt64]()}
29+
func newVersionMap() *versionMap {
30+
return &versionMap{cmap.New[sync2.AtomicInt64]()}
3031
}
3132

3233
func (vm *versionMap) serialize() *string {
@@ -37,12 +38,12 @@ func (vm *versionMap) serialize() *string {
3738

3839
func Init() error {
3940
var err error
40-
ContainerVersionMap, err = initVersionMap()
41+
ContainerVersionMap, err = initVersionMap(containerVersionMapKey)
4142
if err != nil {
4243
return err
4344
}
4445

45-
VolumeVersionMap, err = initVersionMap()
46+
VolumeVersionMap, err = initVersionMap(volumeVersionMapKey)
4647
if err != nil {
4748
return err
4849
}
@@ -60,12 +61,13 @@ func Close() error {
6061
return nil
6162
}
6263

63-
func initVersionMap() (vm versionMap, err error) {
64-
vm = newVersionMap()
65-
bytes, err := etcd.Get(etcd.Versions, containerVersionMapKey)
64+
func initVersionMap(key string) (vm *versionMap, err error) {
65+
bytes, err := etcd.Get(etcd.Versions, key)
6666
if err != nil {
6767
return vm, err
6868
}
69+
70+
vm = newVersionMap()
6971
if len(bytes) != 0 {
7072
err = json.Unmarshal(bytes, &vm)
7173
}

0 commit comments

Comments
 (0)