From f55701b374c78e4fc7057dd8489d93cd334c3b3e Mon Sep 17 00:00:00 2001 From: Asim Aslam Date: Sun, 23 Aug 2020 13:59:19 +0100 Subject: [PATCH] Strip cache from the client. Its only used externally in a wrapper --- client/cache.go | 66 ------------------------------------- client/cache_test.go | 77 -------------------------------------------- client/options.go | 14 -------- 3 files changed, 157 deletions(-) delete mode 100644 client/cache.go delete mode 100644 client/cache_test.go diff --git a/client/cache.go b/client/cache.go deleted file mode 100644 index dfcff812..00000000 --- a/client/cache.go +++ /dev/null @@ -1,66 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - "fmt" - "hash/fnv" - "time" - - "github.com/micro/go-micro/v3/metadata" - cache "github.com/patrickmn/go-cache" -) - -// NewCache returns an initialised cache. -func NewCache() *Cache { - return &Cache{ - cache: cache.New(cache.NoExpiration, 30*time.Second), - } -} - -// Cache for responses -type Cache struct { - cache *cache.Cache -} - -// Get a response from the cache -func (c *Cache) Get(ctx context.Context, req Request) (interface{}, bool) { - return c.cache.Get(key(ctx, req)) -} - -// Set a response in the cache -func (c *Cache) Set(ctx context.Context, req Request, rsp interface{}, expiry time.Duration) { - c.cache.Set(key(ctx, req), rsp, expiry) -} - -// List the key value pairs in the cache -func (c *Cache) List() map[string]string { - items := c.cache.Items() - - rsp := make(map[string]string, len(items)) - for k, v := range items { - bytes, _ := json.Marshal(v.Object) - rsp[k] = string(bytes) - } - - return rsp -} - -// key returns a hash for the context and request -func key(ctx context.Context, req Request) string { - ns, _ := metadata.Get(ctx, "Micro-Namespace") - - bytes, _ := json.Marshal(map[string]interface{}{ - "namespace": ns, - "request": map[string]interface{}{ - "service": req.Service(), - "endpoint": req.Endpoint(), - "method": req.Method(), - "body": req.Body(), - }, - }) - - h := fnv.New64() - h.Write(bytes) - return fmt.Sprintf("%x", h.Sum(nil)) -} diff --git a/client/cache_test.go b/client/cache_test.go deleted file mode 100644 index 8125e67e..00000000 --- a/client/cache_test.go +++ /dev/null @@ -1,77 +0,0 @@ -package client - -import ( - "context" - "testing" - "time" - - "github.com/micro/go-micro/v3/metadata" -) - -func TestCache(t *testing.T) { - ctx := context.TODO() - req := &testRequest{service: "go.micro.service.foo", method: "Foo.Bar"} - - t.Run("CacheMiss", func(t *testing.T) { - if _, ok := NewCache().Get(ctx, req); ok { - t.Errorf("Expected to get no result from Get") - } - }) - - t.Run("CacheHit", func(t *testing.T) { - c := NewCache() - - rsp := "theresponse" - c.Set(ctx, req, rsp, time.Minute) - - if res, ok := c.Get(ctx, req); !ok { - t.Errorf("Expected a result, got nothing") - } else if res != rsp { - t.Errorf("Expected '%v' result, got '%v'", rsp, res) - } - }) -} - -func TestCacheKey(t *testing.T) { - ctx := context.TODO() - - req1 := &testRequest{service: "go.micro.service.foo", method: "Foo.Bar"} - req2 := &testRequest{service: "go.micro.service.foo", method: "Foo.Baz"} - req3 := &testRequest{service: "go.micro.service.foo", method: "Foo.Bar", body: "customquery"} - - t.Run("IdenticalRequests", func(t *testing.T) { - key1 := key(ctx, req1) - key2 := key(ctx, req1) - if key1 != key2 { - t.Errorf("Expected the keys to match for identical requests and context") - } - }) - - t.Run("DifferentRequestEndpoints", func(t *testing.T) { - key1 := key(ctx, req1) - key2 := key(ctx, req2) - - if key1 == key2 { - t.Errorf("Expected the keys to differ for different request endpoints") - } - }) - - t.Run("DifferentRequestBody", func(t *testing.T) { - key1 := key(ctx, req2) - key2 := key(ctx, req3) - - if key1 == key2 { - t.Errorf("Expected the keys to differ for different request bodies") - } - }) - - t.Run("DifferentMetadata", func(t *testing.T) { - mdCtx := metadata.Set(context.TODO(), "Micro-Namespace", "bar") - key1 := key(mdCtx, req1) - key2 := key(ctx, req1) - - if key1 == key2 { - t.Errorf("Expected the keys to differ for different metadata") - } - }) -} diff --git a/client/options.go b/client/options.go index 4328c8e0..94f8fe94 100644 --- a/client/options.go +++ b/client/options.go @@ -36,9 +36,6 @@ type Options struct { PoolSize int PoolTTL time.Duration - // Response cache - Cache *Cache - // Middleware for client Wrappers []Wrapper @@ -55,8 +52,6 @@ type CallOptions struct { Address []string // Backoff func Backoff BackoffFunc - // Duration to cache the response for - CacheExpiry time.Duration // Transport Dial Timeout DialTimeout time.Duration // Number of Call attempts @@ -109,7 +104,6 @@ type RequestOptions struct { func NewOptions(options ...Option) Options { opts := Options{ - Cache: NewCache(), Context: context.Background(), ContentType: "application/protobuf", Codecs: make(map[string]codec.NewCodec), @@ -357,14 +351,6 @@ func WithAuthToken() CallOption { } } -// WithCache is a CallOption which sets the duration the response -// shoull be cached for -func WithCache(c time.Duration) CallOption { - return func(o *CallOptions) { - o.CacheExpiry = c - } -} - // WithNetwork is a CallOption which sets the network attribute func WithNetwork(n string) CallOption { return func(o *CallOptions) {