Skip to content

Commit ec90ff2

Browse files
authored
get nodes to speed up bind methods (#237)
1 parent 9cf7783 commit ec90ff2

File tree

1 file changed

+13
-9
lines changed

1 file changed

+13
-9
lines changed

store/etcdv3/container.go

+13-9
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ func (m *Mercury) ListNodeContainers(ctx context.Context, nodename string, label
148148
key := fmt.Sprintf(nodeContainersKey, nodename, "")
149149
resp, err := m.Get(ctx, key, clientv3.WithPrefix())
150150
if err != nil {
151-
return []*types.Container{}, err
151+
return nil, err
152152
}
153153

154154
containers := []*types.Container{}
@@ -246,21 +246,26 @@ func (m *Mercury) doGetContainers(ctx context.Context, keys []string) (container
246246

247247
func (m *Mercury) bindContainersAdditions(ctx context.Context, containers []*types.Container) ([]*types.Container, error) {
248248
nodes := map[string]*types.Node{}
249+
nodenames := []string{}
250+
nodenameCache := map[string]struct{}{}
249251
statusKeys := map[string]string{}
250252
for _, container := range containers {
251253
appname, entrypoint, _, err := utils.ParseContainerName(container.Name)
252254
if err != nil {
253255
return nil, err
254256
}
255257
statusKeys[container.ID] = filepath.Join(containerStatusPrefix, appname, entrypoint, container.Nodename, container.ID)
256-
if _, ok := nodes[container.Nodename]; !ok {
257-
node, err := m.GetNode(ctx, container.Nodename)
258-
if err != nil {
259-
return nil, err
260-
}
261-
nodes[node.Name] = node
258+
if _, ok := nodenameCache[container.Nodename]; !ok {
259+
nodenameCache[container.Nodename] = struct{}{}
260+
nodenames = append(nodenames, container.Nodename)
262261
}
263-
262+
}
263+
ns, err := m.GetNodes(ctx, nodenames)
264+
if err != nil {
265+
return nil, err
266+
}
267+
for _, node := range ns {
268+
nodes[node.Name] = node
264269
}
265270

266271
for index, container := range containers {
@@ -273,7 +278,6 @@ func (m *Mercury) bindContainersAdditions(ctx context.Context, containers []*typ
273278
}
274279
kv, err := m.GetOne(ctx, statusKeys[container.ID])
275280
if err != nil {
276-
// log.Warnf("[bindContainersAdditions] get status err: %v", err)
277281
continue
278282
}
279283
status := &types.StatusMeta{}

0 commit comments

Comments
 (0)