From 2594d128f875c3253df53bd610a8feb216b04e23 Mon Sep 17 00:00:00 2001 From: scott lewis Date: Tue, 9 Aug 2022 09:15:04 +0800 Subject: [PATCH] refactor: isolate filter with appid --- cmd/cmd.go | 2 +- pkg/executor/read_write_splitting.go | 2 +- pkg/executor/sharding.go | 2 +- pkg/executor/single_db.go | 2 +- pkg/filter/filters.go | 16 +++++++++++----- pkg/listener/http.go | 2 +- pkg/resource/data_source.go | 2 +- 7 files changed, 17 insertions(+), 11 deletions(-) diff --git a/cmd/cmd.go b/cmd/cmd.go index 4aaf94b1..fd2a1fd5 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -91,7 +91,7 @@ var ( if err != nil { log.Fatal(errors.Wrapf(err, "failed to create filter: %s", filterConf.Name)) } - filter.RegisterFilter(filterConf.Name, f) + filter.RegisterFilter(appid, filterConf.Name, f) } resource.RegisterDBManager(appid, dbpackConf.DataSources, func(dbName, dsn string) pools.Factory { diff --git a/pkg/executor/read_write_splitting.go b/pkg/executor/read_write_splitting.go index 975a03e1..1cbef282 100644 --- a/pkg/executor/read_write_splitting.go +++ b/pkg/executor/read_write_splitting.go @@ -98,7 +98,7 @@ func NewReadWriteSplittingExecutor(conf *config.Executor) (proto.Executor, error for i := 0; i < len(conf.Filters); i++ { filterName := conf.Filters[i] - f := filter.GetFilter(filterName) + f := filter.GetFilter(conf.AppID, filterName) if f != nil { preFilter, ok := f.(proto.DBPreFilter) if ok { diff --git a/pkg/executor/sharding.go b/pkg/executor/sharding.go index c872d810..8380fea9 100644 --- a/pkg/executor/sharding.go +++ b/pkg/executor/sharding.go @@ -86,7 +86,7 @@ func NewShardingExecutor(conf *config.Executor) (proto.Executor, error) { for i := 0; i < len(conf.Filters); i++ { filterName := conf.Filters[i] - f := filter.GetFilter(filterName) + f := filter.GetFilter(conf.AppID, filterName) if f != nil { preFilter, ok := f.(proto.DBPreFilter) if ok { diff --git a/pkg/executor/single_db.go b/pkg/executor/single_db.go index c5eace29..7e835ca2 100644 --- a/pkg/executor/single_db.go +++ b/pkg/executor/single_db.go @@ -73,7 +73,7 @@ func NewSingleDBExecutor(conf *config.Executor) (proto.Executor, error) { for i := 0; i < len(conf.Filters); i++ { filterName := conf.Filters[i] - f := filter.GetFilter(filterName) + f := filter.GetFilter(conf.AppID, filterName) if f != nil { preFilter, ok := f.(proto.DBPreFilter) if ok { diff --git a/pkg/filter/filters.go b/pkg/filter/filters.go index 9357c336..36a73dcb 100644 --- a/pkg/filter/filters.go +++ b/pkg/filter/filters.go @@ -16,7 +16,11 @@ package filter -import "github.com/cectc/dbpack/pkg/proto" +import ( + "strings" + + "github.com/cectc/dbpack/pkg/proto" +) var ( filterFactories = make(map[string]proto.FilterFactory) @@ -31,10 +35,12 @@ func GetFilterFactory(kind string) proto.FilterFactory { return filterFactories[kind] } -func RegisterFilter(name string, filter proto.Filter) { - filters[name] = filter +func RegisterFilter(appid, name string, filter proto.Filter) { + key := strings.Join([]string{appid, name}, "-") + filters[key] = filter } -func GetFilter(name string) proto.Filter { - return filters[name] +func GetFilter(appid, name string) proto.Filter { + key := strings.Join([]string{appid, name}, "-") + return filters[key] } diff --git a/pkg/listener/http.go b/pkg/listener/http.go index f7c8064d..01cc44fa 100644 --- a/pkg/listener/http.go +++ b/pkg/listener/http.go @@ -86,7 +86,7 @@ func NewHttpListener(conf *config.Listener) (proto.Listener, error) { for i := 0; i < len(conf.Filters); i++ { filterName := conf.Filters[i] - f := filter.GetFilter(filterName) + f := filter.GetFilter(conf.AppID, filterName) if f != nil { preFilter, ok := f.(proto.HttpPreFilter) if ok { diff --git a/pkg/resource/data_source.go b/pkg/resource/data_source.go index 0ee6c8d4..95d840af 100644 --- a/pkg/resource/data_source.go +++ b/pkg/resource/data_source.go @@ -56,7 +56,7 @@ func RegisterDBManager(appid string, dataSources []*config.DataSource, factory f db := sql.NewDB(dataSource.Name, dataSource.PingInterval, dataSource.PingTimesForChangeStatus, resourcePool) for j := 0; j < len(dataSource.Filters); j++ { filterName := dataSource.Filters[j] - f := filter.GetFilter(filterName) + f := filter.GetFilter(appid, filterName) if f != nil { preFilter, ok := f.(proto.DBConnectionPreFilter) if ok {