Skip to content

Commit 48b5f8a

Browse files
committed
feat: change the error handler when the key does not exist in etcd
1 parent ddc2ee5 commit 48b5f8a

File tree

5 files changed

+44
-11
lines changed

5 files changed

+44
-11
lines changed

internal/etcd/common.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import (
77
"time"
88

99
"github.com/pkg/errors"
10+
11+
"github.com/mayooot/gpu-docker-api/internal/xerrors"
1012
)
1113

1214
const (
@@ -57,11 +59,10 @@ func Get(resource EtcdResource, key string) (bytes []byte, err error) {
5759
if err != nil {
5860
return bytes, errors.Wrapf(err, "etcd.Get failed, key: %s", key)
5961
}
60-
61-
if len(resp.Kvs) != 0 {
62-
bytes = resp.Kvs[0].Value
62+
if len(resp.Kvs) == 0 {
63+
return bytes, errors.Wrapf(xerrors.NewNotExistInEtcdError(), "etcd.Get failed, key: %s", key)
6364
}
64-
return bytes, err
65+
return resp.Kvs[0].Value, err
6566
}
6667

6768
func Del(resource EtcdResource, key string) error {

internal/scheduler/gpuscheduler/scheduler.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,11 @@ func (s *scheduler) serialize() *string {
123123
func initFormEtcd() (s *scheduler, err error) {
124124
bytes, err := etcd.Get(etcd.Gpus, gpuStatusMapKey)
125125
if err != nil {
126-
return s, err
126+
if xerrors.IsNotExistInEtcdError(err) {
127+
err = nil
128+
} else {
129+
return s, err
130+
}
127131
}
128132

129133
s = &scheduler{

internal/scheduler/portscheduler/scheduler.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -124,12 +124,11 @@ func (s *scheduler) RestorePorts(ports []int) {
124124
}
125125
}
126126

127-
// GetUsedPortSet 获取 GPU 使用信息
128-
func (s *scheduler) GetUsedPortSet() map[int]struct{} {
127+
// GetPortStatus 获取 Port 使用情况
128+
func (s *scheduler) GetPortStatus() *scheduler {
129129
s.RLock()
130130
defer s.RUnlock()
131-
132-
return s.UsedPortSet
131+
return s
133132
}
134133

135134
func (s *scheduler) serialize() *string {
@@ -144,7 +143,11 @@ func (s *scheduler) serialize() *string {
144143
func initFormEtcd() (s *scheduler, err error) {
145144
bytes, err := etcd.Get(etcd.Ports, usedPortSetKey)
146145
if err != nil {
147-
return s, err
146+
if xerrors.IsNotExistInEtcdError(err) {
147+
err = nil
148+
} else {
149+
return s, err
150+
}
148151
}
149152

150153
var alias alias

internal/version/version.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"github.com/siddontang/go/sync2"
88

99
"github.com/mayooot/gpu-docker-api/internal/etcd"
10+
"github.com/mayooot/gpu-docker-api/internal/xerrors"
1011
)
1112

1213
var (
@@ -64,7 +65,11 @@ func Close() error {
6465
func initVersionMap(key string) (vm *versionMap, err error) {
6566
bytes, err := etcd.Get(etcd.Versions, key)
6667
if err != nil {
67-
return vm, err
68+
if xerrors.IsNotExistInEtcdError(err) {
69+
err = nil
70+
} else {
71+
return vm, err
72+
}
6873
}
6974

7075
vm = newVersionMap()

internal/xerrors/etcd.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package xerrors
2+
3+
import (
4+
"github.com/pkg/errors"
5+
)
6+
7+
const (
8+
notExistInEtcd = "not exist in etcd"
9+
)
10+
11+
func NewNotExistInEtcdError() error {
12+
return errors.New(notExistInEtcd)
13+
}
14+
15+
func IsNotExistInEtcdError(err error) bool {
16+
if err == nil {
17+
return false
18+
}
19+
return errors.Cause(err).Error() == notExistInEtcd
20+
}

0 commit comments

Comments
 (0)