Skip to content

Commit f27ac91

Browse files
committed
adaptation: expose source plugins for adjustments and errors.
Expose owning plugins for adjustments returned by CreateContainer. Include plugin in errors which originate from processing a request by a plugin. Signed-off-by: Krisztian Litkey <krisztian.litkey@intel.com>
1 parent f9a8a9e commit f27ac91

3 files changed

Lines changed: 24 additions & 9 deletions

File tree

pkg/adaptation/adaptation.go

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ func (r *Adaptation) UpdatePodSandbox(ctx context.Context, req *UpdatePodSandbox
231231
for _, plugin := range r.plugins {
232232
_, err := plugin.updatePodSandbox(ctx, req)
233233
if err != nil {
234-
return nil, err
234+
return nil, pluginError(plugin, err)
235235
}
236236
}
237237

@@ -257,7 +257,7 @@ func (r *Adaptation) RemovePodSandbox(ctx context.Context, evt *StateChangeEvent
257257
}
258258

259259
// CreateContainer relays the corresponding CRI request to plugins.
260-
func (r *Adaptation) CreateContainer(ctx context.Context, req *CreateContainerRequest) (*CreateContainerResponse, error) {
260+
func (r *Adaptation) CreateContainer(ctx context.Context, req *CreateContainerRequest) (*CreateContainerResponse, *api.OwningPlugins, error) {
261261
r.Lock()
262262
defer r.Unlock()
263263
defer r.removeClosedPlugins()
@@ -280,15 +280,20 @@ func (r *Adaptation) CreateContainer(ctx context.Context, req *CreateContainerRe
280280
}
281281
rpl, err := plugin.createContainer(ctx, req)
282282
if err != nil {
283-
return nil, err
283+
return nil, nil, pluginError(plugin, err)
284284
}
285285
err = result.apply(rpl, plugin.name())
286286
if err != nil {
287-
return nil, err
287+
return nil, nil, err
288288
}
289289
}
290290

291-
return r.validateContainerAdjustment(ctx, validate, result)
291+
rpl, err := r.validateContainerAdjustment(ctx, validate, result)
292+
if err != nil {
293+
return nil, nil, err
294+
}
295+
296+
return rpl, result.owners, nil
292297
}
293298

294299
// PostCreateContainer relays the corresponding CRI event to plugins.
@@ -319,7 +324,7 @@ func (r *Adaptation) UpdateContainer(ctx context.Context, req *UpdateContainerRe
319324
for _, plugin := range r.plugins {
320325
rpl, err := plugin.updateContainer(ctx, req)
321326
if err != nil {
322-
return nil, err
327+
return nil, pluginError(plugin, err)
323328
}
324329
err = result.apply(rpl, plugin.name())
325330
if err != nil {
@@ -346,7 +351,7 @@ func (r *Adaptation) StopContainer(ctx context.Context, req *StopContainerReques
346351
for _, plugin := range r.plugins {
347352
rpl, err := plugin.stopContainer(ctx, req)
348353
if err != nil {
349-
return nil, err
354+
return nil, pluginError(plugin, err)
350355
}
351356
err = result.apply(rpl, plugin.name())
352357
if err != nil {
@@ -376,7 +381,7 @@ func (r *Adaptation) StateChange(ctx context.Context, evt *StateChangeEvent) err
376381
for _, plugin := range r.plugins {
377382
err := plugin.StateChange(ctx, evt)
378383
if err != nil {
379-
return err
384+
return pluginError(plugin, err)
380385
}
381386
}
382387

@@ -720,3 +725,10 @@ func (b *PluginSyncBlock) Unblock() {
720725
b.r = nil
721726
}
722727
}
728+
729+
func pluginError(plugin *plugin, err error) error {
730+
if err == nil {
731+
return nil
732+
}
733+
return fmt.Errorf("plugin %q: %w", plugin.name(), err)
734+
}

pkg/adaptation/api.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,8 @@ type (
104104
POSIXRlimit = api.POSIXRlimit
105105
SecurityProfile = api.SecurityProfile
106106
User = api.User
107+
OwningPlugins = api.OwningPlugins
108+
FieldOwners = api.FieldOwners
107109

108110
EventMask = api.EventMask
109111
)

pkg/adaptation/suite_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,8 @@ func (m *mockRuntime) UpdatePodSandbox(ctx context.Context, req *api.UpdatePodSa
246246
func (m *mockRuntime) CreateContainer(ctx context.Context, req *api.CreateContainerRequest) (*api.CreateContainerResponse, error) {
247247
b := m.runtime.BlockPluginSync()
248248
defer b.Unblock()
249-
return m.runtime.CreateContainer(ctx, req)
249+
rpl, _, err := m.runtime.CreateContainer(ctx, req)
250+
return rpl, err
250251
}
251252

252253
func (m *mockRuntime) UpdateContainer(ctx context.Context, req *api.UpdateContainerRequest) (*api.UpdateContainerResponse, error) {

0 commit comments

Comments
 (0)