Skip to content

Commit 27e1acb

Browse files
authored
Merge pull request #1722 from sjenning/skip-subcontainer-update-v2
Skip subcontainer update on v2 calls
2 parents 0df211f + 9a028b6 commit 27e1acb

File tree

4 files changed

+53
-9
lines changed

4 files changed

+53
-9
lines changed

manager/container.go

+6-4
Original file line numberDiff line numberDiff line change
@@ -113,16 +113,18 @@ func (c *containerData) allowErrorLogging() bool {
113113
return false
114114
}
115115

116-
func (c *containerData) GetInfo() (*containerInfo, error) {
116+
func (c *containerData) GetInfo(shouldUpdateSubcontainers bool) (*containerInfo, error) {
117117
// Get spec and subcontainers.
118118
if time.Since(c.lastUpdatedTime) > 5*time.Second {
119119
err := c.updateSpec()
120120
if err != nil {
121121
return nil, err
122122
}
123-
err = c.updateSubcontainers()
124-
if err != nil {
125-
return nil, err
123+
if shouldUpdateSubcontainers {
124+
err = c.updateSubcontainers()
125+
if err != nil {
126+
return nil, err
127+
}
126128
}
127129
c.lastUpdatedTime = time.Now()
128130
}

manager/container_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ func TestGetInfo(t *testing.T) {
174174
)
175175
mockHandler.Aliases = []string{"a1", "a2"}
176176

177-
info, err := cd.GetInfo()
177+
info, err := cd.GetInfo(true)
178178
if err != nil {
179179
t.Fatal(err)
180180
}

manager/manager.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -400,7 +400,7 @@ func (self *manager) GetContainerSpec(containerName string, options v2.RequestOp
400400
var errs partialFailure
401401
specs := make(map[string]v2.ContainerSpec)
402402
for name, cont := range conts {
403-
cinfo, err := cont.GetInfo()
403+
cinfo, err := cont.GetInfo(false)
404404
if err != nil {
405405
errs.append(name, "GetInfo", err)
406406
}
@@ -449,7 +449,7 @@ func (self *manager) GetContainerInfoV2(containerName string, options v2.Request
449449
infos := make(map[string]v2.ContainerInfo, len(containers))
450450
for name, container := range containers {
451451
result := v2.ContainerInfo{}
452-
cinfo, err := container.GetInfo()
452+
cinfo, err := container.GetInfo(false)
453453
if err != nil {
454454
errs.append(name, "GetInfo", err)
455455
infos[name] = result
@@ -473,7 +473,7 @@ func (self *manager) GetContainerInfoV2(containerName string, options v2.Request
473473

474474
func (self *manager) containerDataToContainerInfo(cont *containerData, query *info.ContainerInfoRequest) (*info.ContainerInfo, error) {
475475
// Get the info from the container.
476-
cinfo, err := cont.GetInfo()
476+
cinfo, err := cont.GetInfo(true)
477477
if err != nil {
478478
return nil, err
479479
}

manager/manager_test.go

+43-1
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,48 @@ func expectManagerWithContainers(containers []string, query *info.ContainerInfoR
124124
return m, infosMap, handlerMap
125125
}
126126

127+
// Expect a manager with the specified containers and query. Returns the manager, map of ContainerInfo objects,
128+
// and map of MockContainerHandler objects.}
129+
func expectManagerWithContainersV2(containers []string, query *info.ContainerInfoRequest, t *testing.T) (*manager, map[string]*info.ContainerInfo, map[string]*containertest.MockContainerHandler) {
130+
infosMap := make(map[string]*info.ContainerInfo, len(containers))
131+
handlerMap := make(map[string]*containertest.MockContainerHandler, len(containers))
132+
133+
for _, container := range containers {
134+
infosMap[container] = itest.GenerateRandomContainerInfo(container, 4, query, 1*time.Second)
135+
}
136+
137+
memoryCache := memory.New(time.Duration(query.NumStats)*time.Second, nil)
138+
sysfs := &fakesysfs.FakeSysFs{}
139+
m := createManagerAndAddContainers(
140+
memoryCache,
141+
sysfs,
142+
containers,
143+
func(h *containertest.MockContainerHandler) {
144+
cinfo := infosMap[h.Name]
145+
ref, err := h.ContainerReference()
146+
if err != nil {
147+
t.Error(err)
148+
}
149+
for _, stat := range cinfo.Stats {
150+
err = memoryCache.AddStats(ref, stat)
151+
if err != nil {
152+
t.Error(err)
153+
}
154+
}
155+
spec := cinfo.Spec
156+
157+
h.On("GetSpec").Return(
158+
spec,
159+
nil,
160+
).Once()
161+
handlerMap[h.Name] = h
162+
},
163+
t,
164+
)
165+
166+
return m, infosMap, handlerMap
167+
}
168+
127169
func TestGetContainerInfo(t *testing.T) {
128170
containers := []string{
129171
"/c1",
@@ -173,7 +215,7 @@ func TestGetContainerInfoV2(t *testing.T) {
173215
NumStats: 2,
174216
}
175217

176-
m, _, handlerMap := expectManagerWithContainers(containers, query, t)
218+
m, _, handlerMap := expectManagerWithContainersV2(containers, query, t)
177219

178220
infos, err := m.GetContainerInfoV2("/", options)
179221
if err != nil {

0 commit comments

Comments
 (0)