Skip to content

Commit c84e2b3

Browse files
nybidarigvisor-bot
authored andcommitted
Add new extension method to support shim grouping.
PiperOrigin-RevId: 888728008
1 parent 5b37484 commit c84e2b3

File tree

2 files changed

+37
-13
lines changed

2 files changed

+37
-13
lines changed

pkg/shim/v1/extension/extension.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@ import (
2626
// extension should not handle this task request. Returning an error will fail the task request.
2727
var NewExtension func(ctx context.Context, next TaskServiceExt, req *task.CreateTaskRequest) (TaskServiceExt, error)
2828

29+
// NewPodExtension registers an extension constructor which is used when grouping is enabled.
30+
// It may return nil, nil to indicate that the extension should not handle this task request.
31+
// Returning an error will fail the task request.
32+
var NewPodExtension func(ctx context.Context, next TaskServiceExt) (TaskServiceExt, error)
33+
2934
// FSRestoreConfig is the configuration for a FS restore request.
3035
type FSRestoreConfig struct {
3136
ImagePath string

pkg/shim/v1/service.go

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ func New(ctx context.Context, id string, publisher shim.Publisher, cancel func()
6969
s.shimAddress = address
7070
}
7171

72+
s.grouping = getEnableGrouping()
7273
return s, nil
7374
}
7475

@@ -109,6 +110,9 @@ type service struct {
109110
//
110111
// Protected by mu.
111112
ext extension.TaskServiceExt
113+
114+
// grouping indicates if shim grouping is enabled.
115+
grouping bool
112116
}
113117

114118
var _ shim.Shim = (*service)(nil)
@@ -290,22 +294,37 @@ func (s *service) Cleanup(ctx context.Context) (*taskapi.DeleteResponse, error)
290294
func (s *service) Create(ctx context.Context, r *taskapi.CreateTaskRequest) (*taskapi.CreateTaskResponse, error) {
291295
log.L.Debugf("Create, id: %s, bundle: %q", r.ID, r.Bundle)
292296

293-
// Check if we need to create an extension to intercept calls to the container's shim.
294-
if extension.NewExtension != nil {
295-
s.mu.Lock()
296-
var err error
297-
s.ext, err = extension.NewExtension(ctx, s.main, r)
298-
if err != nil {
299-
s.mu.Unlock()
300-
return nil, err
297+
s.mu.Lock()
298+
if s.grouping {
299+
// Create shim extension if required.
300+
if s.ext == nil && extension.NewPodExtension != nil {
301+
log.L.Infof("Create shim extension per pod")
302+
var err error
303+
s.ext, err = extension.NewPodExtension(ctx, s.main)
304+
if err != nil {
305+
log.L.Debugf("Creating shim extension per pod failed with error: %v", err)
306+
s.mu.Unlock()
307+
return nil, err
308+
}
301309
}
302-
if s.ext == nil {
303-
log.L.Debugf("No extension created for container")
304-
} else {
305-
log.L.Infof("Extension created for container")
310+
} else {
311+
// Check if we need to create an extension to intercept calls to the container's shim.
312+
if extension.NewExtension != nil {
313+
log.L.Infof("Create shim extension per container")
314+
var err error
315+
s.ext, err = extension.NewExtension(ctx, s.main, r)
316+
if err != nil {
317+
s.mu.Unlock()
318+
return nil, err
319+
}
306320
}
307-
s.mu.Unlock()
308321
}
322+
if s.ext == nil {
323+
log.L.Debugf("No extension created")
324+
} else {
325+
log.L.Infof("Extension created")
326+
}
327+
s.mu.Unlock()
309328

310329
resp, err := s.get().Create(ctx, r)
311330
return resp, errdefs.ToGRPC(err)

0 commit comments

Comments
 (0)