提交 01514d51 作者: Steven Allen

plugin: allow plugins to implement multiple (or no) plugin interfaces

There's no reason for these to be exclusive.

License: MIT
Signed-off-by: 's avatarSteven Allen <steven@stebalien.com>
上级 35aaa98f
...@@ -69,7 +69,7 @@ func loadPlugins(repoPath string) (*loader.PluginLoader, error) { ...@@ -69,7 +69,7 @@ func loadPlugins(repoPath string) (*loader.PluginLoader, error) {
log.Error("error initializing plugins: ", err) log.Error("error initializing plugins: ", err)
} }
if err := plugins.Run(); err != nil { if err := plugins.Inject(); err != nil {
log.Error("error running plugins: ", err) log.Error("error running plugins: ", err)
} }
return plugins, nil return plugins, nil
......
...@@ -69,7 +69,7 @@ func loadDynamicPlugins(pluginDir string) ([]plugin.Plugin, error) { ...@@ -69,7 +69,7 @@ func loadDynamicPlugins(pluginDir string) ([]plugin.Plugin, error) {
return loadPluginsFunc(pluginDir) return loadPluginsFunc(pluginDir)
} }
//Initialize all loaded plugins // Initialize initializes all loaded plugins
func (loader *PluginLoader) Initialize() error { func (loader *PluginLoader) Initialize() error {
for _, p := range loader.plugins { for _, p := range loader.plugins {
err := p.Init() err := p.Init()
...@@ -81,33 +81,36 @@ func (loader *PluginLoader) Initialize() error { ...@@ -81,33 +81,36 @@ func (loader *PluginLoader) Initialize() error {
return nil return nil
} }
//Run the plugins // Inject hooks all the plugins into the appropriate subsystems.
func (loader *PluginLoader) Run() error { func (loader *PluginLoader) Inject() error {
for _, pl := range loader.plugins { for _, pl := range loader.plugins {
switch pl := pl.(type) { if pl, ok := pl.(plugin.PluginIPLD); ok {
case plugin.PluginIPLD: err := injectIPLDPlugin(pl)
err := runIPLDPlugin(pl)
if err != nil { if err != nil {
return err return err
} }
case plugin.PluginTracer: }
err := runTracerPlugin(pl) if pl, ok := pl.(plugin.PluginTracer); ok {
err := injectTracerPlugin(pl)
if err != nil { if err != nil {
return err return err
} }
case plugin.PluginDatastore: }
err := fsrepo.AddDatastoreConfigHandler(pl.DatastoreTypeName(), pl.DatastoreConfigParser()) if pl, ok := pl.(plugin.PluginDatastore); ok {
err := injectDatastorePlugin(pl)
if err != nil { if err != nil {
return err return err
} }
default:
panic(pl)
} }
} }
return nil return nil
} }
func runIPLDPlugin(pl plugin.PluginIPLD) error { func injectDatastorePlugin(pl plugin.PluginDatastore) error {
return fsrepo.AddDatastoreConfigHandler(pl.DatastoreTypeName(), pl.DatastoreConfigParser())
}
func injectIPLDPlugin(pl plugin.PluginIPLD) error {
err := pl.RegisterBlockDecoders(ipld.DefaultBlockDecoder) err := pl.RegisterBlockDecoders(ipld.DefaultBlockDecoder)
if err != nil { if err != nil {
return err return err
...@@ -115,7 +118,7 @@ func runIPLDPlugin(pl plugin.PluginIPLD) error { ...@@ -115,7 +118,7 @@ func runIPLDPlugin(pl plugin.PluginIPLD) error {
return pl.RegisterInputEncParsers(coredag.DefaultInputEncParsers) return pl.RegisterInputEncParsers(coredag.DefaultInputEncParsers)
} }
func runTracerPlugin(pl plugin.PluginTracer) error { func injectTracerPlugin(pl plugin.PluginTracer) error {
tracer, err := pl.InitTracer() tracer, err := pl.InitTracer()
if err != nil { if err != nil {
return err return err
......
...@@ -84,7 +84,7 @@ func TestDefaultDatastoreConfig(t *testing.T) { ...@@ -84,7 +84,7 @@ func TestDefaultDatastoreConfig(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
err = loader.Run() err = loader.Inject()
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论