2023-04-20 12:40:22 +00:00
|
|
|
// Copyright (c) HashiCorp, Inc.
|
|
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
|
2023-04-14 16:24:46 +00:00
|
|
|
package rpcclient
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
|
|
|
|
"github.com/hashicorp/consul/agent/cache"
|
|
|
|
"github.com/hashicorp/consul/agent/structs"
|
|
|
|
"github.com/hashicorp/consul/agent/submatview"
|
|
|
|
"github.com/hashicorp/go-hclog"
|
|
|
|
"google.golang.org/grpc"
|
|
|
|
)
|
|
|
|
|
|
|
|
// NetRPC reprents an interface for making RPC requests
|
|
|
|
type NetRPC interface {
|
|
|
|
RPC(ctx context.Context, method string, args interface{}, reply interface{}) error
|
|
|
|
}
|
|
|
|
|
|
|
|
// CacheGetter represents an interface for interacting with the cache
|
|
|
|
type CacheGetter interface {
|
|
|
|
Get(ctx context.Context, t string, r cache.Request) (interface{}, cache.ResultMeta, error)
|
|
|
|
NotifyCallback(ctx context.Context, t string, r cache.Request, cID string, cb cache.Callback) error
|
|
|
|
}
|
|
|
|
|
|
|
|
// MaterializedViewStore represents an interface for interacting with the material view store
|
|
|
|
type MaterializedViewStore interface {
|
|
|
|
Get(ctx context.Context, req submatview.Request) (submatview.Result, error)
|
|
|
|
NotifyCallback(ctx context.Context, req submatview.Request, cID string, cb cache.Callback) error
|
|
|
|
}
|
|
|
|
|
|
|
|
// MaterializerDeps include the dependencies for the materializer
|
|
|
|
type MaterializerDeps struct {
|
|
|
|
Conn *grpc.ClientConn
|
|
|
|
Logger hclog.Logger
|
|
|
|
}
|
|
|
|
|
|
|
|
// Client represents a rpc client, a new Client is created in each sub-package
|
|
|
|
// embedding this object. Methods are therefore implemented in the subpackages
|
|
|
|
// as well.
|
|
|
|
type Client struct {
|
|
|
|
NetRPC NetRPC
|
|
|
|
Cache CacheGetter
|
|
|
|
ViewStore MaterializedViewStore
|
|
|
|
MaterializerDeps MaterializerDeps
|
|
|
|
CacheName string
|
|
|
|
UseStreamingBackend bool
|
|
|
|
QueryOptionDefaults func(options *structs.QueryOptions)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Close any underlying connections used by the client.
|
|
|
|
func (c *Client) Close() error {
|
|
|
|
if c == nil {
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
return c.MaterializerDeps.Conn.Close()
|
|
|
|
}
|