Merge pull request #1614 from micro/runtime-clients
Runtime Options: Replace client.DefaultClient
This commit is contained in:
		| @@ -3,7 +3,6 @@ package vpath | |||||||
|  |  | ||||||
| import ( | import ( | ||||||
| 	"errors" | 	"errors" | ||||||
| 	"fmt" |  | ||||||
| 	"net/http" | 	"net/http" | ||||||
| 	"regexp" | 	"regexp" | ||||||
| 	"strings" | 	"strings" | ||||||
| @@ -28,8 +27,6 @@ func (r *Resolver) Resolve(req *http.Request) (*resolver.Endpoint, error) { | |||||||
| 		return nil, errors.New("unknown name") | 		return nil, errors.New("unknown name") | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	fmt.Println(req.URL.Path) |  | ||||||
|  |  | ||||||
| 	parts := strings.Split(req.URL.Path[1:], "/") | 	parts := strings.Split(req.URL.Path[1:], "/") | ||||||
| 	if len(parts) == 1 { | 	if len(parts) == 1 { | ||||||
| 		return &resolver.Endpoint{ | 		return &resolver.Endpoint{ | ||||||
|   | |||||||
| @@ -4,6 +4,7 @@ import ( | |||||||
| 	"time" | 	"time" | ||||||
|  |  | ||||||
| 	"github.com/micro/go-micro/v2/auth/provider" | 	"github.com/micro/go-micro/v2/auth/provider" | ||||||
|  | 	"github.com/micro/go-micro/v2/client" | ||||||
| 	"github.com/micro/go-micro/v2/store" | 	"github.com/micro/go-micro/v2/store" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| @@ -12,10 +13,12 @@ func NewOptions(opts ...Option) Options { | |||||||
| 	for _, o := range opts { | 	for _, o := range opts { | ||||||
| 		o(&options) | 		o(&options) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if len(options.Namespace) == 0 { | 	if len(options.Namespace) == 0 { | ||||||
| 		options.Namespace = DefaultNamespace | 		options.Namespace = DefaultNamespace | ||||||
| 	} | 	} | ||||||
|  | 	if options.Client == nil { | ||||||
|  | 		options.Client = client.DefaultClient | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	return options | 	return options | ||||||
| } | } | ||||||
| @@ -39,6 +42,8 @@ type Options struct { | |||||||
| 	LoginURL string | 	LoginURL string | ||||||
| 	// Store to back auth | 	// Store to back auth | ||||||
| 	Store store.Store | 	Store store.Store | ||||||
|  | 	// Client to use for RPC | ||||||
|  | 	Client client.Client | ||||||
| } | } | ||||||
|  |  | ||||||
| type Option func(o *Options) | type Option func(o *Options) | ||||||
| @@ -100,6 +105,13 @@ func LoginURL(url string) Option { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // WithClient sets the client to use when making requests | ||||||
|  | func WithClient(c client.Client) Option { | ||||||
|  | 	return func(o *Options) { | ||||||
|  | 		o.Client = c | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
| type GenerateOptions struct { | type GenerateOptions struct { | ||||||
| 	// Metadata associated with the account | 	// Metadata associated with the account | ||||||
| 	Metadata map[string]string | 	Metadata map[string]string | ||||||
|   | |||||||
| @@ -42,9 +42,11 @@ func (s *svc) Init(opts ...auth.Option) { | |||||||
| 		o(&s.options) | 		o(&s.options) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	dc := client.DefaultClient | 	if s.options.Client == nil { | ||||||
| 	s.auth = pb.NewAuthService("go.micro.auth", dc) | 		s.options.Client = client.DefaultClient | ||||||
| 	s.rule = pb.NewRulesService("go.micro.auth", dc) | 	} | ||||||
|  | 	s.auth = pb.NewAuthService("go.micro.auth", s.options.Client) | ||||||
|  | 	s.rule = pb.NewRulesService("go.micro.auth", s.options.Client) | ||||||
|  |  | ||||||
| 	// if we have a JWT public key passed as an option, | 	// if we have a JWT public key passed as an option, | ||||||
| 	// we can decode tokens with the type "JWT" locally | 	// we can decode tokens with the type "JWT" locally | ||||||
|   | |||||||
| @@ -4,7 +4,6 @@ import ( | |||||||
| 	"context" | 	"context" | ||||||
| 	"time" | 	"time" | ||||||
|  |  | ||||||
| 	"github.com/micro/go-micro/v2/auth" |  | ||||||
| 	"github.com/micro/go-micro/v2/broker" | 	"github.com/micro/go-micro/v2/broker" | ||||||
| 	"github.com/micro/go-micro/v2/client/selector" | 	"github.com/micro/go-micro/v2/client/selector" | ||||||
| 	"github.com/micro/go-micro/v2/codec" | 	"github.com/micro/go-micro/v2/codec" | ||||||
| @@ -17,7 +16,6 @@ type Options struct { | |||||||
| 	ContentType string | 	ContentType string | ||||||
|  |  | ||||||
| 	// Plugged interfaces | 	// Plugged interfaces | ||||||
| 	Auth      auth.Auth |  | ||||||
| 	Broker    broker.Broker | 	Broker    broker.Broker | ||||||
| 	Codecs    map[string]codec.NewCodec | 	Codecs    map[string]codec.NewCodec | ||||||
| 	Registry  registry.Registry | 	Registry  registry.Registry | ||||||
| @@ -105,7 +103,6 @@ func NewOptions(options ...Option) Options { | |||||||
| 		}, | 		}, | ||||||
| 		PoolSize:  DefaultPoolSize, | 		PoolSize:  DefaultPoolSize, | ||||||
| 		PoolTTL:   DefaultPoolTTL, | 		PoolTTL:   DefaultPoolTTL, | ||||||
| 		Auth:      auth.DefaultAuth, |  | ||||||
| 		Broker:    broker.DefaultBroker, | 		Broker:    broker.DefaultBroker, | ||||||
| 		Selector:  selector.DefaultSelector, | 		Selector:  selector.DefaultSelector, | ||||||
| 		Registry:  registry.DefaultRegistry, | 		Registry:  registry.DefaultRegistry, | ||||||
| @@ -126,13 +123,6 @@ func Broker(b broker.Broker) Option { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| // Auth to be used when making a request |  | ||||||
| func Auth(a auth.Auth) Option { |  | ||||||
| 	return func(o *Options) { |  | ||||||
| 		o.Auth = a |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Codec to be used to encode/decode requests for a given content type | // Codec to be used to encode/decode requests for a given content type | ||||||
| func Codec(contentType string, c codec.NewCodec) Option { | func Codec(contentType string, c codec.NewCodec) Option { | ||||||
| 	return func(o *Options) { | 	return func(o *Options) { | ||||||
|   | |||||||
| @@ -13,6 +13,7 @@ import ( | |||||||
| 	"github.com/micro/go-micro/v2/client" | 	"github.com/micro/go-micro/v2/client" | ||||||
| 	"github.com/micro/go-micro/v2/client/selector" | 	"github.com/micro/go-micro/v2/client/selector" | ||||||
| 	"github.com/micro/go-micro/v2/config" | 	"github.com/micro/go-micro/v2/config" | ||||||
|  | 	configSrc "github.com/micro/go-micro/v2/config/source" | ||||||
| 	configSrv "github.com/micro/go-micro/v2/config/source/service" | 	configSrv "github.com/micro/go-micro/v2/config/source/service" | ||||||
| 	"github.com/micro/go-micro/v2/debug/profile" | 	"github.com/micro/go-micro/v2/debug/profile" | ||||||
| 	"github.com/micro/go-micro/v2/debug/profile/http" | 	"github.com/micro/go-micro/v2/debug/profile/http" | ||||||
| @@ -500,7 +501,6 @@ func (c *cmd) Before(ctx *cli.Context) error { | |||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		*c.opts.Auth = a() | 		*c.opts.Auth = a() | ||||||
| 		clientOpts = append(clientOpts, client.Auth(*c.opts.Auth)) |  | ||||||
| 		serverOpts = append(serverOpts, server.Auth(*c.opts.Auth)) | 		serverOpts = append(serverOpts, server.Auth(*c.opts.Auth)) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @@ -716,7 +716,7 @@ func (c *cmd) Before(ctx *cli.Context) error { | |||||||
| 	(*c.opts.Auth).Init(authOpts...) | 	(*c.opts.Auth).Init(authOpts...) | ||||||
|  |  | ||||||
| 	if ctx.String("config") == "service" { | 	if ctx.String("config") == "service" { | ||||||
| 		opt := config.WithSource(configSrv.NewSource()) | 		opt := config.WithSource(configSrv.NewSource(configSrc.WithClient(*c.opts.Client))) | ||||||
| 		if err := (*c.opts.Config).Init(opt); err != nil { | 		if err := (*c.opts.Config).Init(opt); err != nil { | ||||||
| 			logger.Fatalf("Error configuring config: %v", err) | 			logger.Fatalf("Error configuring config: %v", err) | ||||||
| 		} | 		} | ||||||
|   | |||||||
| @@ -100,6 +100,12 @@ func Registry(r *registry.Registry) Option { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func Runtime(r *runtime.Runtime) Option { | ||||||
|  | 	return func(o *Options) { | ||||||
|  | 		o.Runtime = r | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
| func Transport(t *transport.Transport) Option { | func Transport(t *transport.Transport) Option { | ||||||
| 	return func(o *Options) { | 	return func(o *Options) { | ||||||
| 		o.Transport = t | 		o.Transport = t | ||||||
|   | |||||||
| @@ -3,6 +3,7 @@ package source | |||||||
| import ( | import ( | ||||||
| 	"context" | 	"context" | ||||||
|  |  | ||||||
|  | 	"github.com/micro/go-micro/v2/client" | ||||||
| 	"github.com/micro/go-micro/v2/config/encoder" | 	"github.com/micro/go-micro/v2/config/encoder" | ||||||
| 	"github.com/micro/go-micro/v2/config/encoder/json" | 	"github.com/micro/go-micro/v2/config/encoder/json" | ||||||
| ) | ) | ||||||
| @@ -13,6 +14,9 @@ type Options struct { | |||||||
|  |  | ||||||
| 	// for alternative data | 	// for alternative data | ||||||
| 	Context context.Context | 	Context context.Context | ||||||
|  |  | ||||||
|  | 	// Client to use for RPC | ||||||
|  | 	Client client.Client | ||||||
| } | } | ||||||
|  |  | ||||||
| type Option func(o *Options) | type Option func(o *Options) | ||||||
| @@ -21,6 +25,7 @@ func NewOptions(opts ...Option) Options { | |||||||
| 	options := Options{ | 	options := Options{ | ||||||
| 		Encoder: json.NewEncoder(), | 		Encoder: json.NewEncoder(), | ||||||
| 		Context: context.Background(), | 		Context: context.Background(), | ||||||
|  | 		Client:  client.DefaultClient, | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	for _, o := range opts { | 	for _, o := range opts { | ||||||
| @@ -36,3 +41,10 @@ func WithEncoder(e encoder.Encoder) Option { | |||||||
| 		o.Encoder = e | 		o.Encoder = e | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // WithClient sets the source client | ||||||
|  | func WithClient(c client.Client) Option { | ||||||
|  | 	return func(o *Options) { | ||||||
|  | 		o.Client = c | ||||||
|  | 	} | ||||||
|  | } | ||||||
|   | |||||||
| @@ -24,7 +24,7 @@ type service struct { | |||||||
| } | } | ||||||
|  |  | ||||||
| func (m *service) Read() (set *source.ChangeSet, err error) { | func (m *service) Read() (set *source.ChangeSet, err error) { | ||||||
| 	client := proto.NewConfigService(m.serviceName, client.DefaultClient) | 	client := proto.NewConfigService(m.serviceName, m.opts.Client) | ||||||
| 	req, err := client.Read(context.Background(), &proto.ReadRequest{ | 	req, err := client.Read(context.Background(), &proto.ReadRequest{ | ||||||
| 		Namespace: m.namespace, | 		Namespace: m.namespace, | ||||||
| 		Path:      m.path, | 		Path:      m.path, | ||||||
| @@ -37,7 +37,7 @@ func (m *service) Read() (set *source.ChangeSet, err error) { | |||||||
| } | } | ||||||
|  |  | ||||||
| func (m *service) Watch() (w source.Watcher, err error) { | func (m *service) Watch() (w source.Watcher, err error) { | ||||||
| 	client := proto.NewConfigService(m.serviceName, client.DefaultClient) | 	client := proto.NewConfigService(m.serviceName, m.opts.Client) | ||||||
| 	stream, err := client.Watch(context.Background(), &proto.WatchRequest{ | 	stream, err := client.Watch(context.Background(), &proto.WatchRequest{ | ||||||
| 		Namespace: m.namespace, | 		Namespace: m.namespace, | ||||||
| 		Path:      m.path, | 		Path:      m.path, | ||||||
| @@ -87,6 +87,10 @@ func NewSource(opts ...source.Option) source.Source { | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	if options.Client == nil { | ||||||
|  | 		options.Client = client.DefaultClient | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	s := &service{ | 	s := &service{ | ||||||
| 		serviceName: addr, | 		serviceName: addr, | ||||||
| 		opts:        options, | 		opts:        options, | ||||||
|   | |||||||
							
								
								
									
										11
									
								
								options.go
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								options.go
									
									
									
									
									
								
							| @@ -14,6 +14,7 @@ import ( | |||||||
| 	"github.com/micro/go-micro/v2/debug/profile" | 	"github.com/micro/go-micro/v2/debug/profile" | ||||||
| 	"github.com/micro/go-micro/v2/debug/trace" | 	"github.com/micro/go-micro/v2/debug/trace" | ||||||
| 	"github.com/micro/go-micro/v2/registry" | 	"github.com/micro/go-micro/v2/registry" | ||||||
|  | 	"github.com/micro/go-micro/v2/runtime" | ||||||
| 	"github.com/micro/go-micro/v2/server" | 	"github.com/micro/go-micro/v2/server" | ||||||
| 	"github.com/micro/go-micro/v2/store" | 	"github.com/micro/go-micro/v2/store" | ||||||
| 	"github.com/micro/go-micro/v2/transport" | 	"github.com/micro/go-micro/v2/transport" | ||||||
| @@ -29,6 +30,7 @@ type Options struct { | |||||||
| 	Server    server.Server | 	Server    server.Server | ||||||
| 	Store     store.Store | 	Store     store.Store | ||||||
| 	Registry  registry.Registry | 	Registry  registry.Registry | ||||||
|  | 	Runtime   runtime.Runtime | ||||||
| 	Transport transport.Transport | 	Transport transport.Transport | ||||||
| 	Profile   profile.Profile | 	Profile   profile.Profile | ||||||
|  |  | ||||||
| @@ -55,6 +57,7 @@ func newOptions(opts ...Option) Options { | |||||||
| 		Server:    server.DefaultServer, | 		Server:    server.DefaultServer, | ||||||
| 		Store:     store.DefaultStore, | 		Store:     store.DefaultStore, | ||||||
| 		Registry:  registry.DefaultRegistry, | 		Registry:  registry.DefaultRegistry, | ||||||
|  | 		Runtime:   runtime.DefaultRuntime, | ||||||
| 		Transport: transport.DefaultTransport, | 		Transport: transport.DefaultTransport, | ||||||
| 		Context:   context.Background(), | 		Context:   context.Background(), | ||||||
| 		Signal:    true, | 		Signal:    true, | ||||||
| @@ -152,7 +155,6 @@ func Tracer(t trace.Tracer) Option { | |||||||
| func Auth(a auth.Auth) Option { | func Auth(a auth.Auth) Option { | ||||||
| 	return func(o *Options) { | 	return func(o *Options) { | ||||||
| 		o.Auth = a | 		o.Auth = a | ||||||
| 		o.Client.Init(client.Auth(a)) |  | ||||||
| 		o.Server.Init(server.Auth(a)) | 		o.Server.Init(server.Auth(a)) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| @@ -182,6 +184,13 @@ func Transport(t transport.Transport) Option { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // Runtime sets the runtime | ||||||
|  | func Runtime(r runtime.Runtime) Option { | ||||||
|  | 	return func(o *Options) { | ||||||
|  | 		o.Runtime = r | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
| // Convenience options | // Convenience options | ||||||
|  |  | ||||||
| // Address sets the address of the server | // Address sets the address of the server | ||||||
|   | |||||||
| @@ -3,6 +3,8 @@ package runtime | |||||||
| import ( | import ( | ||||||
| 	"context" | 	"context" | ||||||
| 	"io" | 	"io" | ||||||
|  |  | ||||||
|  | 	"github.com/micro/go-micro/v2/client" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| type Option func(o *Options) | type Option func(o *Options) | ||||||
| @@ -17,6 +19,8 @@ type Options struct { | |||||||
| 	Source string | 	Source string | ||||||
| 	// Base image to use | 	// Base image to use | ||||||
| 	Image string | 	Image string | ||||||
|  | 	// Client to use when making requests | ||||||
|  | 	Client client.Client | ||||||
| } | } | ||||||
|  |  | ||||||
| // WithSource sets the base image / repository | // WithSource sets the base image / repository | ||||||
| @@ -47,6 +51,13 @@ func WithImage(t string) Option { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // WithClient sets the client to use | ||||||
|  | func WithClient(c client.Client) Option { | ||||||
|  | 	return func(o *Options) { | ||||||
|  | 		o.Client = c | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
| type CreateOption func(o *CreateOptions) | type CreateOption func(o *CreateOptions) | ||||||
|  |  | ||||||
| type ReadOption func(o *ReadOptions) | type ReadOption func(o *ReadOptions) | ||||||
|   | |||||||
| @@ -24,6 +24,9 @@ func (s *svc) Init(opts ...runtime.Option) error { | |||||||
| 		o(&s.options) | 		o(&s.options) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	// reset the runtime as the client could have changed | ||||||
|  | 	s.runtime = pb.NewRuntimeService(runtime.DefaultName, s.options.Client) | ||||||
|  |  | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -278,19 +281,17 @@ func (s *svc) String() string { | |||||||
|  |  | ||||||
| // NewRuntime creates new service runtime and returns it | // NewRuntime creates new service runtime and returns it | ||||||
| func NewRuntime(opts ...runtime.Option) runtime.Runtime { | func NewRuntime(opts ...runtime.Option) runtime.Runtime { | ||||||
| 	// get default options | 	var options runtime.Options | ||||||
| 	options := runtime.Options{} |  | ||||||
|  |  | ||||||
| 	// apply requested options |  | ||||||
| 	for _, o := range opts { | 	for _, o := range opts { | ||||||
| 		o(&options) | 		o(&options) | ||||||
| 	} | 	} | ||||||
|  | 	if options.Client == nil { | ||||||
| 	// create default client | 		options.Client = client.DefaultClient | ||||||
| 	cli := client.DefaultClient | 	} | ||||||
|  |  | ||||||
| 	return &svc{ | 	return &svc{ | ||||||
| 		options: options, | 		options: options, | ||||||
| 		runtime: pb.NewRuntimeService(runtime.DefaultName, cli), | 		runtime: pb.NewRuntimeService(runtime.DefaultName, options.Client), | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										19
									
								
								service.go
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								service.go
									
									
									
									
									
								
							| @@ -3,7 +3,7 @@ package micro | |||||||
| import ( | import ( | ||||||
| 	"os" | 	"os" | ||||||
| 	"os/signal" | 	"os/signal" | ||||||
| 	"runtime" | 	rtime "runtime" | ||||||
| 	"strings" | 	"strings" | ||||||
| 	"sync" | 	"sync" | ||||||
|  |  | ||||||
| @@ -15,6 +15,7 @@ import ( | |||||||
| 	"github.com/micro/go-micro/v2/debug/trace" | 	"github.com/micro/go-micro/v2/debug/trace" | ||||||
| 	"github.com/micro/go-micro/v2/logger" | 	"github.com/micro/go-micro/v2/logger" | ||||||
| 	"github.com/micro/go-micro/v2/plugin" | 	"github.com/micro/go-micro/v2/plugin" | ||||||
|  | 	"github.com/micro/go-micro/v2/runtime" | ||||||
| 	"github.com/micro/go-micro/v2/server" | 	"github.com/micro/go-micro/v2/server" | ||||||
| 	"github.com/micro/go-micro/v2/store" | 	"github.com/micro/go-micro/v2/store" | ||||||
| 	signalutil "github.com/micro/go-micro/v2/util/signal" | 	signalutil "github.com/micro/go-micro/v2/util/signal" | ||||||
| @@ -98,6 +99,7 @@ func (s *service) Init(opts ...Option) { | |||||||
| 			cmd.Auth(&s.opts.Auth), | 			cmd.Auth(&s.opts.Auth), | ||||||
| 			cmd.Broker(&s.opts.Broker), | 			cmd.Broker(&s.opts.Broker), | ||||||
| 			cmd.Registry(&s.opts.Registry), | 			cmd.Registry(&s.opts.Registry), | ||||||
|  | 			cmd.Runtime(&s.opts.Runtime), | ||||||
| 			cmd.Transport(&s.opts.Transport), | 			cmd.Transport(&s.opts.Transport), | ||||||
| 			cmd.Client(&s.opts.Client), | 			cmd.Client(&s.opts.Client), | ||||||
| 			cmd.Config(&s.opts.Config), | 			cmd.Config(&s.opts.Config), | ||||||
| @@ -112,13 +114,10 @@ func (s *service) Init(opts ...Option) { | |||||||
| 		name := s.opts.Cmd.App().Name | 		name := s.opts.Cmd.App().Name | ||||||
| 		s.opts.Store.Init(store.Table(name)) | 		s.opts.Store.Init(store.Table(name)) | ||||||
|  |  | ||||||
| 		// TODO: replace Cmd.Init with config.Load | 		// Set the client for the micro clients | ||||||
| 		// Right now we're just going to load a token | 		s.opts.Auth.Init(auth.WithClient(s.Client())) | ||||||
| 		// May need to re-read value on change | 		s.opts.Runtime.Init(runtime.WithClient(s.Client())) | ||||||
| 		// TODO: should be scoped to micro/auth/token | 		s.opts.Store.Init(store.WithClient(s.Client())) | ||||||
| 		// if tk, _ := config.Get("token"); len(tk) > 0 { |  | ||||||
| 		// 	s.opts.Auth.Init(auth.ServiceToken(tk)) |  | ||||||
| 		// } |  | ||||||
| 	}) | 	}) | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -192,9 +191,9 @@ func (s *service) Run() error { | |||||||
| 	// start the profiler | 	// start the profiler | ||||||
| 	if s.opts.Profile != nil { | 	if s.opts.Profile != nil { | ||||||
| 		// to view mutex contention | 		// to view mutex contention | ||||||
| 		runtime.SetMutexProfileFraction(5) | 		rtime.SetMutexProfileFraction(5) | ||||||
| 		// to view blocking profile | 		// to view blocking profile | ||||||
| 		runtime.SetBlockProfileRate(1) | 		rtime.SetBlockProfileRate(1) | ||||||
|  |  | ||||||
| 		if err := s.opts.Profile.Start(); err != nil { | 		if err := s.opts.Profile.Start(); err != nil { | ||||||
| 			return err | 			return err | ||||||
|   | |||||||
| @@ -3,6 +3,8 @@ package store | |||||||
| import ( | import ( | ||||||
| 	"context" | 	"context" | ||||||
| 	"time" | 	"time" | ||||||
|  |  | ||||||
|  | 	"github.com/micro/go-micro/v2/client" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| // Options contains configuration for the Store | // Options contains configuration for the Store | ||||||
| @@ -17,6 +19,8 @@ type Options struct { | |||||||
| 	Table string | 	Table string | ||||||
| 	// Context should contain all implementation specific options, using context.WithValue. | 	// Context should contain all implementation specific options, using context.WithValue. | ||||||
| 	Context context.Context | 	Context context.Context | ||||||
|  | 	// Client to use for RPC | ||||||
|  | 	Client client.Client | ||||||
| } | } | ||||||
|  |  | ||||||
| // Option sets values in Options | // Option sets values in Options | ||||||
| @@ -52,6 +56,13 @@ func WithContext(c context.Context) Option { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // WithClient sets the stores client to use for RPC | ||||||
|  | func WithClient(c client.Client) Option { | ||||||
|  | 	return func(o *Options) { | ||||||
|  | 		o.Client = c | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
| // ReadOptions configures an individual Read operation | // ReadOptions configures an individual Read operation | ||||||
| type ReadOptions struct { | type ReadOptions struct { | ||||||
| 	Database, Table string | 	Database, Table string | ||||||
|   | |||||||
| @@ -219,12 +219,16 @@ func NewStore(opts ...store.Option) store.Store { | |||||||
| 		o(&options) | 		o(&options) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	if options.Client == nil { | ||||||
|  | 		options.Client = client.DefaultClient | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	service := &serviceStore{ | 	service := &serviceStore{ | ||||||
| 		options:  options, | 		options:  options, | ||||||
| 		Database: options.Database, | 		Database: options.Database, | ||||||
| 		Table:    options.Table, | 		Table:    options.Table, | ||||||
| 		Nodes:    options.Nodes, | 		Nodes:    options.Nodes, | ||||||
| 		Client:   pb.NewStoreService("go.micro.store", client.DefaultClient), | 		Client:   pb.NewStoreService("go.micro.store", options.Client), | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return service | 	return service | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user