summaryrefslogtreecommitdiff
path: root/plugins/kv
diff options
context:
space:
mode:
authorValery Piashchynski <[email protected]>2021-06-18 12:00:05 +0300
committerValery Piashchynski <[email protected]>2021-06-18 12:00:05 +0300
commit9e8bad3988c1fec2e545898d529446f7b93e537b (patch)
treed91159b8c78c8add1981641499ef81c821d5d363 /plugins/kv
parentfe7bb0fe758d573fe353df028257ed66c6eccf66 (diff)
- Rework finished
Signed-off-by: Valery Piashchynski <[email protected]>
Diffstat (limited to 'plugins/kv')
-rw-r--r--plugins/kv/config.go2
-rw-r--r--plugins/kv/drivers/boltdb/driver.go2
-rw-r--r--plugins/kv/drivers/boltdb/plugin.go2
-rw-r--r--plugins/kv/drivers/memcached/driver.go2
-rw-r--r--plugins/kv/drivers/memcached/plugin.go2
-rw-r--r--plugins/kv/interface.go15
-rw-r--r--plugins/kv/plugin.go55
-rw-r--r--plugins/kv/rpc.go2
8 files changed, 43 insertions, 39 deletions
diff --git a/plugins/kv/config.go b/plugins/kv/config.go
index 66095817..09ba79cd 100644
--- a/plugins/kv/config.go
+++ b/plugins/kv/config.go
@@ -1,6 +1,6 @@
package kv
-// Config represents general storage configuration with keys as the user defined kv-names and values as the drivers
+// Config represents general storage configuration with keys as the user defined kv-names and values as the constructors
type Config struct {
Data map[string]interface{} `mapstructure:"kv"`
}
diff --git a/plugins/kv/drivers/boltdb/driver.go b/plugins/kv/drivers/boltdb/driver.go
index 5f4d98b1..4b675271 100644
--- a/plugins/kv/drivers/boltdb/driver.go
+++ b/plugins/kv/drivers/boltdb/driver.go
@@ -9,10 +9,10 @@ import (
"time"
"github.com/spiral/errors"
- kvv1 "github.com/spiral/roadrunner/v2/pkg/proto/kv/v1beta"
"github.com/spiral/roadrunner/v2/plugins/config"
"github.com/spiral/roadrunner/v2/plugins/kv"
"github.com/spiral/roadrunner/v2/plugins/logger"
+ kvv1 "github.com/spiral/roadrunner/v2/proto/kv/v1beta"
"github.com/spiral/roadrunner/v2/utils"
bolt "go.etcd.io/bbolt"
)
diff --git a/plugins/kv/drivers/boltdb/plugin.go b/plugins/kv/drivers/boltdb/plugin.go
index 28e2a89c..6ae1a1f6 100644
--- a/plugins/kv/drivers/boltdb/plugin.go
+++ b/plugins/kv/drivers/boltdb/plugin.go
@@ -46,7 +46,7 @@ func (s *Plugin) Stop() error {
return nil
}
-func (s *Plugin) KVProvide(key string) (kv.Storage, error) {
+func (s *Plugin) KVConstruct(key string) (kv.Storage, error) {
const op = errors.Op("boltdb_plugin_provide")
st, err := NewBoltDBDriver(s.log, key, s.cfgPlugin, s.stop)
if err != nil {
diff --git a/plugins/kv/drivers/memcached/driver.go b/plugins/kv/drivers/memcached/driver.go
index c1f79cbb..a2787d72 100644
--- a/plugins/kv/drivers/memcached/driver.go
+++ b/plugins/kv/drivers/memcached/driver.go
@@ -6,10 +6,10 @@ import (
"github.com/bradfitz/gomemcache/memcache"
"github.com/spiral/errors"
- kvv1 "github.com/spiral/roadrunner/v2/pkg/proto/kv/v1beta"
"github.com/spiral/roadrunner/v2/plugins/config"
"github.com/spiral/roadrunner/v2/plugins/kv"
"github.com/spiral/roadrunner/v2/plugins/logger"
+ kvv1 "github.com/spiral/roadrunner/v2/proto/kv/v1beta"
)
type Driver struct {
diff --git a/plugins/kv/drivers/memcached/plugin.go b/plugins/kv/drivers/memcached/plugin.go
index 936b2047..22ea5cca 100644
--- a/plugins/kv/drivers/memcached/plugin.go
+++ b/plugins/kv/drivers/memcached/plugin.go
@@ -34,7 +34,7 @@ func (s *Plugin) Name() string {
// Available interface implementation
func (s *Plugin) Available() {}
-func (s *Plugin) KVProvide(key string) (kv.Storage, error) {
+func (s *Plugin) KVConstruct(key string) (kv.Storage, error) {
const op = errors.Op("boltdb_plugin_provide")
st, err := NewMemcachedDriver(s.log, key, s.cfgPlugin)
if err != nil {
diff --git a/plugins/kv/interface.go b/plugins/kv/interface.go
index fd906041..ffdbbe62 100644
--- a/plugins/kv/interface.go
+++ b/plugins/kv/interface.go
@@ -1,6 +1,6 @@
package kv
-import kvv1 "github.com/spiral/roadrunner/v2/pkg/proto/kv/v1beta"
+import kvv1 "github.com/spiral/roadrunner/v2/proto/kv/v1beta"
// Storage represents single abstract storage.
type Storage interface {
@@ -29,13 +29,8 @@ type Storage interface {
Delete(keys ...string) error
}
-// StorageDriver interface provide storage
-type StorageDriver interface {
- Provider
-}
-
-// Provider provides storage based on the config
-type Provider interface {
- // KVProvide provides Storage based on the config key
- KVProvide(key string) (Storage, error)
+// Constructor provides storage based on the config
+type Constructor interface {
+ // KVConstruct provides Storage based on the config key
+ KVConstruct(key string) (Storage, error)
}
diff --git a/plugins/kv/plugin.go b/plugins/kv/plugin.go
index 716e0d4c..03dbaed6 100644
--- a/plugins/kv/plugin.go
+++ b/plugins/kv/plugin.go
@@ -24,8 +24,8 @@ const (
// Plugin for the unified storage
type Plugin struct {
log logger.Logger
- // drivers contains general storage drivers, such as boltdb, memory, memcached, redis.
- drivers map[string]StorageDriver
+ // constructors contains general storage constructors, such as boltdb, memory, memcached, redis.
+ constructors map[string]Constructor
// storages contains user-defined storages, such as boltdb-north, memcached-us and so on.
storages map[string]Storage
// KV configuration
@@ -43,7 +43,7 @@ func (p *Plugin) Init(cfg config.Configurer, log logger.Logger) error {
if err != nil {
return errors.E(op, err)
}
- p.drivers = make(map[string]StorageDriver, 5)
+ p.constructors = make(map[string]Constructor, 5)
p.storages = make(map[string]Storage, 5)
p.log = log
p.cfgPlugin = cfg
@@ -81,7 +81,7 @@ func (p *Plugin) Serve() chan error { //nolint:gocognit
addr: [ "localhost:11211" ]
- For this config we should have 3 drivers: memory, boltdb and memcached but 4 KVs: default, boltdb-south, boltdb-north and memcached
+ For this config we should have 3 constructors: memory, boltdb and memcached but 4 KVs: default, boltdb-south, boltdb-north and memcached
when user requests for example boltdb-south, we should provide that particular preconfigured storage
*/
for k, v := range p.cfg.Data {
@@ -90,9 +90,18 @@ func (p *Plugin) Serve() chan error { //nolint:gocognit
continue
}
- if _, ok := v.(map[string]interface{})[driver]; !ok {
- errCh <- errors.E(op, errors.Errorf("could not find mandatory driver field in the %s storage", k))
- return errCh
+ // check type of the v
+ // should be a map[string]interface{}
+ switch t := v.(type) {
+ // correct type
+ case map[string]interface{}:
+ if _, ok := t[driver]; !ok {
+ errCh <- errors.E(op, errors.Errorf("could not find mandatory driver field in the %s storage", k))
+ return errCh
+ }
+ default:
+ p.log.Warn("wrong type detected in the configuration, please, check yaml indentation")
+ continue
}
// config key for the particular sub-driver kv.memcached
@@ -100,12 +109,12 @@ func (p *Plugin) Serve() chan error { //nolint:gocognit
// at this point we know, that driver field present in the configuration
switch v.(map[string]interface{})[driver] {
case memcached:
- if _, ok := p.drivers[memcached]; !ok {
- p.log.Warn("no memcached drivers registered", "registered", p.drivers)
+ if _, ok := p.constructors[memcached]; !ok {
+ p.log.Warn("no memcached constructors registered", "registered", p.constructors)
continue
}
- storage, err := p.drivers[memcached].KVProvide(configKey)
+ storage, err := p.constructors[memcached].KVConstruct(configKey)
if err != nil {
errCh <- errors.E(op, err)
return errCh
@@ -115,12 +124,12 @@ func (p *Plugin) Serve() chan error { //nolint:gocognit
p.storages[k] = storage
case boltdb:
- if _, ok := p.drivers[boltdb]; !ok {
- p.log.Warn("no boltdb drivers registered", "registered", p.drivers)
+ if _, ok := p.constructors[boltdb]; !ok {
+ p.log.Warn("no boltdb constructors registered", "registered", p.constructors)
continue
}
- storage, err := p.drivers[boltdb].KVProvide(configKey)
+ storage, err := p.constructors[boltdb].KVConstruct(configKey)
if err != nil {
errCh <- errors.E(op, err)
return errCh
@@ -129,12 +138,12 @@ func (p *Plugin) Serve() chan error { //nolint:gocognit
// save the storage
p.storages[k] = storage
case memory:
- if _, ok := p.drivers[memory]; !ok {
- p.log.Warn("no in-memory drivers registered", "registered", p.drivers)
+ if _, ok := p.constructors[memory]; !ok {
+ p.log.Warn("no in-memory constructors registered", "registered", p.constructors)
continue
}
- storage, err := p.drivers[memory].KVProvide(configKey)
+ storage, err := p.constructors[memory].KVConstruct(configKey)
if err != nil {
errCh <- errors.E(op, err)
return errCh
@@ -143,15 +152,15 @@ func (p *Plugin) Serve() chan error { //nolint:gocognit
// save the storage
p.storages[k] = storage
case redis:
- if _, ok := p.drivers[redis]; !ok {
- p.log.Warn("no redis drivers registered", "registered", p.drivers)
+ if _, ok := p.constructors[redis]; !ok {
+ p.log.Warn("no redis constructors registered", "registered", p.constructors)
continue
}
// first - try local configuration
switch {
case p.cfgPlugin.Has(configKey):
- storage, err := p.drivers[redis].KVProvide(configKey)
+ storage, err := p.constructors[redis].KVConstruct(configKey)
if err != nil {
errCh <- errors.E(op, err)
return errCh
@@ -160,7 +169,7 @@ func (p *Plugin) Serve() chan error { //nolint:gocognit
// save the storage
p.storages[k] = storage
case p.cfgPlugin.Has(redis):
- storage, err := p.drivers[redis].KVProvide(configKey)
+ storage, err := p.constructors[redis].KVConstruct(configKey)
if err != nil {
errCh <- errors.E(op, err)
return errCh
@@ -194,9 +203,9 @@ func (p *Plugin) Collects() []interface{} {
}
}
-func (p *Plugin) GetAllStorageDrivers(name endure.Named, storage StorageDriver) {
- // save the storage driver
- p.drivers[name.Name()] = storage
+func (p *Plugin) GetAllStorageDrivers(name endure.Named, constructor Constructor) {
+ // save the storage constructor
+ p.constructors[name.Name()] = constructor
}
// RPC returns associated rpc service.
diff --git a/plugins/kv/rpc.go b/plugins/kv/rpc.go
index ab1f7f31..af763600 100644
--- a/plugins/kv/rpc.go
+++ b/plugins/kv/rpc.go
@@ -2,8 +2,8 @@ package kv
import (
"github.com/spiral/errors"
- kvv1 "github.com/spiral/roadrunner/v2/pkg/proto/kv/v1beta"
"github.com/spiral/roadrunner/v2/plugins/logger"
+ kvv1 "github.com/spiral/roadrunner/v2/proto/kv/v1beta"
)
// Wrapper for the plugin