mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
f29bbd16f5
Adds 2 new methods to v2 plugin `Acquire` and `Release` which allow refcounting directly at the plugin level instead of just the store. Since a graphdriver is initialized exactly once, and is really managed by a separate object, it didn't really seem right to call `getter.Get()` to refcount graphdriver plugins. On shutdown it was particularly weird where we'd either need to keep a driver reference in daemon, or keep a reference to the pluggin getter in the layer store, and even then still store extra details on if the graphdriver is a plugin or not. Instead the plugin proxy itself will handle calling the neccessary refcounting methods directly on the plugin object. Also adds a new interface in `plugingetter` to account for these new functions which are not going to be implemented by v1 plugins. Changes terms `plugingetter.CREATE` and `plugingetter.REMOVE` to `ACQUIRE` and `RELEASE` respectively, which seems to be better adjectives for what we're doing. Signed-off-by: Brian Goff <cpuguy83@gmail.com>
34 lines
802 B
Go
34 lines
802 B
Go
package plugingetter
|
|
|
|
import "github.com/docker/docker/pkg/plugins"
|
|
|
|
const (
|
|
// LOOKUP doesn't update RefCount
|
|
LOOKUP = 0
|
|
// ACQUIRE increments RefCount
|
|
ACQUIRE = 1
|
|
// RELEASE decrements RefCount
|
|
RELEASE = -1
|
|
)
|
|
|
|
// CompatPlugin is a abstraction to handle both v2(new) and v1(legacy) plugins.
|
|
type CompatPlugin interface {
|
|
Client() *plugins.Client
|
|
Name() string
|
|
BasePath() string
|
|
IsV1() bool
|
|
}
|
|
|
|
// CountedPlugin is a plugin which is reference counted.
|
|
type CountedPlugin interface {
|
|
Acquire()
|
|
Release()
|
|
CompatPlugin
|
|
}
|
|
|
|
// PluginGetter is the interface implemented by Store
|
|
type PluginGetter interface {
|
|
Get(name, capability string, mode int) (CompatPlugin, error)
|
|
GetAllByCap(capability string) ([]CompatPlugin, error)
|
|
Handle(capability string, callback func(string, *plugins.Client))
|
|
}
|