From 5bfb8867f7316e07b4b77b40500f2ddaa0b488cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Magiera?= Date: Sun, 4 Nov 2018 22:48:37 +0100 Subject: [PATCH] Load static plugins in init MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit License: MIT Signed-off-by: Ɓukasz Magiera --- cmd/ipfs/main.go | 9 +++++---- plugin/loader/load.go | 30 ++++++++++++++++-------------- repo/fsrepo/config_test.go | 17 +++++++++++------ 3 files changed, 32 insertions(+), 24 deletions(-) diff --git a/cmd/ipfs/main.go b/cmd/ipfs/main.go index f3672f180..378334f14 100644 --- a/cmd/ipfs/main.go +++ b/cmd/ipfs/main.go @@ -174,10 +174,11 @@ func makeExecutor(req *cmds.Request, env interface{}) (cmds.Executor, error) { if err != nil { return nil, err } - if ok { - if _, err := loader.LoadPlugins(pluginpath); err != nil { - log.Error("error loading plugins: ", err) - } + if !ok { + pluginpath = "" + } + if _, err := loader.LoadPlugins(pluginpath); err != nil { + log.Error("error loading plugins: ", err) } exctr = cmds.NewExecutor(req.Root) diff --git a/plugin/loader/load.go b/plugin/loader/load.go index b6ddb7b37..bce3e42c4 100644 --- a/plugin/loader/load.go +++ b/plugin/loader/load.go @@ -22,20 +22,22 @@ func LoadPlugins(pluginDir string) ([]plugin.Plugin, error) { plMap[v.Name()] = v } - newPls, err := loadDynamicPlugins(pluginDir) - if err != nil { - return nil, err - } - - for _, pl := range newPls { - if ppl, ok := plMap[pl.Name()]; ok { - // plugin is already preloaded - return nil, fmt.Errorf( - "plugin: %s, is duplicated in version: %s, "+ - "while trying to load dynamically: %s", - ppl.Name(), ppl.Version(), pl.Version()) + if pluginDir != "" { + newPls, err := loadDynamicPlugins(pluginDir) + if err != nil { + return nil, err + } + + for _, pl := range newPls { + if ppl, ok := plMap[pl.Name()]; ok { + // plugin is already preloaded + return nil, fmt.Errorf( + "plugin: %s, is duplicated in version: %s, "+ + "while trying to load dynamically: %s", + ppl.Name(), ppl.Version(), pl.Version()) + } + plMap[pl.Name()] = pl } - plMap[pl.Name()] = pl } pls := make([]plugin.Plugin, 0, len(plMap)) @@ -43,7 +45,7 @@ func LoadPlugins(pluginDir string) ([]plugin.Plugin, error) { pls = append(pls, v) } - err = initialize(pls) + err := initialize(pls) if err != nil { return nil, err } diff --git a/repo/fsrepo/config_test.go b/repo/fsrepo/config_test.go index 8ab6846c6..07d3349ef 100644 --- a/repo/fsrepo/config_test.go +++ b/repo/fsrepo/config_test.go @@ -1,4 +1,4 @@ -package fsrepo +package fsrepo_test import ( "encoding/json" @@ -7,7 +7,10 @@ import ( "reflect" "testing" - config "gx/ipfs/QmbK4EmM2Xx5fmbqK38TGP3PpY66r3tkXLZTcc7dF9mFwM/go-ipfs-config" + "github.com/ipfs/go-ipfs/plugin/loader" + "github.com/ipfs/go-ipfs/repo/fsrepo" + + "gx/ipfs/QmPEpj17FDRpc7K1aArKZp3RsHtzRMKykeK9GVgn4WQGPR/go-ipfs-config" ) // note: to test sorting of the mountpoints in the disk spec they are @@ -72,6 +75,8 @@ var measureConfig = []byte(`{ }`) func TestDefaultDatastoreConfig(t *testing.T) { + loader.LoadPlugins("") + dir, err := ioutil.TempDir("", "ipfs-datastore-config-test") if err != nil { t.Fatal(err) @@ -84,7 +89,7 @@ func TestDefaultDatastoreConfig(t *testing.T) { t.Fatal(err) } - dsc, err := AnyDatastoreConfig(config.Spec) + dsc, err := fsrepo.AnyDatastoreConfig(config.Spec) if err != nil { t.Fatal(err) } @@ -122,7 +127,7 @@ func TestLevelDbConfig(t *testing.T) { t.Fatal(err) } - dsc, err := AnyDatastoreConfig(spec) + dsc, err := fsrepo.AnyDatastoreConfig(spec) if err != nil { t.Fatal(err) } @@ -160,7 +165,7 @@ func TestFlatfsConfig(t *testing.T) { t.Fatal(err) } - dsc, err := AnyDatastoreConfig(spec) + dsc, err := fsrepo.AnyDatastoreConfig(spec) if err != nil { t.Fatal(err) } @@ -198,7 +203,7 @@ func TestMeasureConfig(t *testing.T) { t.Fatal(err) } - dsc, err := AnyDatastoreConfig(spec) + dsc, err := fsrepo.AnyDatastoreConfig(spec) if err != nil { t.Fatal(err) }