diff --git a/client/service/proto/client.pb.go b/client/service/proto/client.pb.go deleted file mode 100644 index 8d82354e..00000000 --- a/client/service/proto/client.pb.go +++ /dev/null @@ -1,402 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// source: client/service/proto/client.proto - -package go_micro_client - -import ( - context "context" - fmt "fmt" - proto "github.com/golang/protobuf/proto" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" - math "math" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package - -type Request struct { - Service string `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` - Endpoint string `protobuf:"bytes,2,opt,name=endpoint,proto3" json:"endpoint,omitempty"` - ContentType string `protobuf:"bytes,3,opt,name=content_type,json=contentType,proto3" json:"content_type,omitempty"` - Body []byte `protobuf:"bytes,4,opt,name=body,proto3" json:"body,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Request) Reset() { *m = Request{} } -func (m *Request) String() string { return proto.CompactTextString(m) } -func (*Request) ProtoMessage() {} -func (*Request) Descriptor() ([]byte, []int) { - return fileDescriptor_27c3d425ddd1a066, []int{0} -} - -func (m *Request) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Request.Unmarshal(m, b) -} -func (m *Request) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Request.Marshal(b, m, deterministic) -} -func (m *Request) XXX_Merge(src proto.Message) { - xxx_messageInfo_Request.Merge(m, src) -} -func (m *Request) XXX_Size() int { - return xxx_messageInfo_Request.Size(m) -} -func (m *Request) XXX_DiscardUnknown() { - xxx_messageInfo_Request.DiscardUnknown(m) -} - -var xxx_messageInfo_Request proto.InternalMessageInfo - -func (m *Request) GetService() string { - if m != nil { - return m.Service - } - return "" -} - -func (m *Request) GetEndpoint() string { - if m != nil { - return m.Endpoint - } - return "" -} - -func (m *Request) GetContentType() string { - if m != nil { - return m.ContentType - } - return "" -} - -func (m *Request) GetBody() []byte { - if m != nil { - return m.Body - } - return nil -} - -type Response struct { - Body []byte `protobuf:"bytes,1,opt,name=body,proto3" json:"body,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Response) Reset() { *m = Response{} } -func (m *Response) String() string { return proto.CompactTextString(m) } -func (*Response) ProtoMessage() {} -func (*Response) Descriptor() ([]byte, []int) { - return fileDescriptor_27c3d425ddd1a066, []int{1} -} - -func (m *Response) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Response.Unmarshal(m, b) -} -func (m *Response) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Response.Marshal(b, m, deterministic) -} -func (m *Response) XXX_Merge(src proto.Message) { - xxx_messageInfo_Response.Merge(m, src) -} -func (m *Response) XXX_Size() int { - return xxx_messageInfo_Response.Size(m) -} -func (m *Response) XXX_DiscardUnknown() { - xxx_messageInfo_Response.DiscardUnknown(m) -} - -var xxx_messageInfo_Response proto.InternalMessageInfo - -func (m *Response) GetBody() []byte { - if m != nil { - return m.Body - } - return nil -} - -type Message struct { - Topic string `protobuf:"bytes,1,opt,name=topic,proto3" json:"topic,omitempty"` - ContentType string `protobuf:"bytes,2,opt,name=content_type,json=contentType,proto3" json:"content_type,omitempty"` - Body []byte `protobuf:"bytes,3,opt,name=body,proto3" json:"body,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Message) Reset() { *m = Message{} } -func (m *Message) String() string { return proto.CompactTextString(m) } -func (*Message) ProtoMessage() {} -func (*Message) Descriptor() ([]byte, []int) { - return fileDescriptor_27c3d425ddd1a066, []int{2} -} - -func (m *Message) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Message.Unmarshal(m, b) -} -func (m *Message) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Message.Marshal(b, m, deterministic) -} -func (m *Message) XXX_Merge(src proto.Message) { - xxx_messageInfo_Message.Merge(m, src) -} -func (m *Message) XXX_Size() int { - return xxx_messageInfo_Message.Size(m) -} -func (m *Message) XXX_DiscardUnknown() { - xxx_messageInfo_Message.DiscardUnknown(m) -} - -var xxx_messageInfo_Message proto.InternalMessageInfo - -func (m *Message) GetTopic() string { - if m != nil { - return m.Topic - } - return "" -} - -func (m *Message) GetContentType() string { - if m != nil { - return m.ContentType - } - return "" -} - -func (m *Message) GetBody() []byte { - if m != nil { - return m.Body - } - return nil -} - -func init() { - proto.RegisterType((*Request)(nil), "go.micro.client.Request") - proto.RegisterType((*Response)(nil), "go.micro.client.Response") - proto.RegisterType((*Message)(nil), "go.micro.client.Message") -} - -func init() { proto.RegisterFile("client/service/proto/client.proto", fileDescriptor_27c3d425ddd1a066) } - -var fileDescriptor_27c3d425ddd1a066 = []byte{ - // 267 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x91, 0xc1, 0x4b, 0xc3, 0x30, - 0x14, 0xc6, 0x97, 0x6d, 0xb6, 0xf3, 0x39, 0x10, 0x1e, 0x1e, 0x62, 0x0f, 0xb2, 0xf5, 0xd4, 0x53, - 0x2b, 0x7a, 0x16, 0x0f, 0x3d, 0x0b, 0x52, 0xc5, 0xab, 0xb4, 0xd9, 0x63, 0x06, 0xba, 0x24, 0x36, - 0xd9, 0xa0, 0x7f, 0xa4, 0xff, 0x93, 0x90, 0x46, 0x27, 0xba, 0x5d, 0xbc, 0xe5, 0xfb, 0x7e, 0xe4, - 0x7b, 0x2f, 0x5f, 0x60, 0x29, 0x5a, 0x49, 0xca, 0x15, 0x96, 0xba, 0x9d, 0x14, 0x54, 0x98, 0x4e, - 0x3b, 0x5d, 0x0c, 0x66, 0xee, 0x05, 0x9e, 0xaf, 0x75, 0xbe, 0x91, 0xa2, 0xd3, 0xf9, 0x60, 0xa7, - 0x3b, 0x88, 0x2b, 0x7a, 0xdf, 0x92, 0x75, 0xc8, 0x21, 0x0e, 0x37, 0x39, 0x5b, 0xb0, 0xec, 0xb4, - 0xfa, 0x92, 0x98, 0xc0, 0x8c, 0xd4, 0xca, 0x68, 0xa9, 0x1c, 0x1f, 0x7b, 0xf4, 0xad, 0x71, 0x09, - 0x73, 0xa1, 0x95, 0x23, 0xe5, 0x5e, 0x5d, 0x6f, 0x88, 0x4f, 0x3c, 0x3f, 0x0b, 0xde, 0x73, 0x6f, - 0x08, 0x11, 0xa6, 0x8d, 0x5e, 0xf5, 0x7c, 0xba, 0x60, 0xd9, 0xbc, 0xf2, 0xe7, 0xf4, 0x0a, 0x66, - 0x15, 0x59, 0xa3, 0x95, 0xdd, 0x73, 0xf6, 0x83, 0xbf, 0x40, 0xfc, 0x40, 0xd6, 0xd6, 0x6b, 0xc2, - 0x0b, 0x38, 0x71, 0xda, 0x48, 0x11, 0xb6, 0x1a, 0xc4, 0x9f, 0xb9, 0xe3, 0xe3, 0x73, 0x27, 0xfb, - 0xdc, 0x9b, 0x0f, 0x06, 0x51, 0xe9, 0x9f, 0x8e, 0x77, 0x30, 0x2d, 0xeb, 0xb6, 0x45, 0x9e, 0xff, - 0x2a, 0x25, 0x0f, 0x8d, 0x24, 0x97, 0x07, 0xc8, 0xb0, 0x73, 0x3a, 0xc2, 0x12, 0xa2, 0x27, 0xd7, - 0x51, 0xbd, 0xf9, 0x67, 0x40, 0xc6, 0xae, 0x19, 0xde, 0x43, 0xfc, 0xb8, 0x6d, 0x5a, 0x69, 0xdf, - 0x0e, 0xa4, 0x84, 0x02, 0x92, 0xa3, 0x24, 0x1d, 0x35, 0x91, 0xff, 0xd7, 0xdb, 0xcf, 0x00, 0x00, - 0x00, 0xff, 0xff, 0xd6, 0x3f, 0xc3, 0xa1, 0xfc, 0x01, 0x00, 0x00, -} - -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConn - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 - -// ClientClient is the client API for Client service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type ClientClient interface { - // Call allows a single request to be made - Call(ctx context.Context, in *Request, opts ...grpc.CallOption) (*Response, error) - // Stream is a bidirectional stream - Stream(ctx context.Context, opts ...grpc.CallOption) (Client_StreamClient, error) - // Publish publishes a message and returns an empty Message - Publish(ctx context.Context, in *Message, opts ...grpc.CallOption) (*Message, error) -} - -type clientClient struct { - cc *grpc.ClientConn -} - -func NewClientClient(cc *grpc.ClientConn) ClientClient { - return &clientClient{cc} -} - -func (c *clientClient) Call(ctx context.Context, in *Request, opts ...grpc.CallOption) (*Response, error) { - out := new(Response) - err := c.cc.Invoke(ctx, "/go.micro.client.Client/Call", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *clientClient) Stream(ctx context.Context, opts ...grpc.CallOption) (Client_StreamClient, error) { - stream, err := c.cc.NewStream(ctx, &_Client_serviceDesc.Streams[0], "/go.micro.client.Client/Stream", opts...) - if err != nil { - return nil, err - } - x := &clientStreamClient{stream} - return x, nil -} - -type Client_StreamClient interface { - Send(*Request) error - Recv() (*Response, error) - grpc.ClientStream -} - -type clientStreamClient struct { - grpc.ClientStream -} - -func (x *clientStreamClient) Send(m *Request) error { - return x.ClientStream.SendMsg(m) -} - -func (x *clientStreamClient) Recv() (*Response, error) { - m := new(Response) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -func (c *clientClient) Publish(ctx context.Context, in *Message, opts ...grpc.CallOption) (*Message, error) { - out := new(Message) - err := c.cc.Invoke(ctx, "/go.micro.client.Client/Publish", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// ClientServer is the server API for Client service. -type ClientServer interface { - // Call allows a single request to be made - Call(context.Context, *Request) (*Response, error) - // Stream is a bidirectional stream - Stream(Client_StreamServer) error - // Publish publishes a message and returns an empty Message - Publish(context.Context, *Message) (*Message, error) -} - -// UnimplementedClientServer can be embedded to have forward compatible implementations. -type UnimplementedClientServer struct { -} - -func (*UnimplementedClientServer) Call(ctx context.Context, req *Request) (*Response, error) { - return nil, status.Errorf(codes.Unimplemented, "method Call not implemented") -} -func (*UnimplementedClientServer) Stream(srv Client_StreamServer) error { - return status.Errorf(codes.Unimplemented, "method Stream not implemented") -} -func (*UnimplementedClientServer) Publish(ctx context.Context, req *Message) (*Message, error) { - return nil, status.Errorf(codes.Unimplemented, "method Publish not implemented") -} - -func RegisterClientServer(s *grpc.Server, srv ClientServer) { - s.RegisterService(&_Client_serviceDesc, srv) -} - -func _Client_Call_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(Request) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ClientServer).Call(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/go.micro.client.Client/Call", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ClientServer).Call(ctx, req.(*Request)) - } - return interceptor(ctx, in, info, handler) -} - -func _Client_Stream_Handler(srv interface{}, stream grpc.ServerStream) error { - return srv.(ClientServer).Stream(&clientStreamServer{stream}) -} - -type Client_StreamServer interface { - Send(*Response) error - Recv() (*Request, error) - grpc.ServerStream -} - -type clientStreamServer struct { - grpc.ServerStream -} - -func (x *clientStreamServer) Send(m *Response) error { - return x.ServerStream.SendMsg(m) -} - -func (x *clientStreamServer) Recv() (*Request, error) { - m := new(Request) - if err := x.ServerStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -func _Client_Publish_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(Message) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ClientServer).Publish(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/go.micro.client.Client/Publish", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ClientServer).Publish(ctx, req.(*Message)) - } - return interceptor(ctx, in, info, handler) -} - -var _Client_serviceDesc = grpc.ServiceDesc{ - ServiceName: "go.micro.client.Client", - HandlerType: (*ClientServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Call", - Handler: _Client_Call_Handler, - }, - { - MethodName: "Publish", - Handler: _Client_Publish_Handler, - }, - }, - Streams: []grpc.StreamDesc{ - { - StreamName: "Stream", - Handler: _Client_Stream_Handler, - ServerStreams: true, - ClientStreams: true, - }, - }, - Metadata: "client/service/proto/client.proto", -} diff --git a/client/service/proto/client.pb.micro.go b/client/service/proto/client.pb.micro.go deleted file mode 100644 index bdfe1081..00000000 --- a/client/service/proto/client.pb.micro.go +++ /dev/null @@ -1,215 +0,0 @@ -// Code generated by protoc-gen-micro. DO NOT EDIT. -// source: client/service/proto/client.proto - -package go_micro_client - -import ( - fmt "fmt" - proto "github.com/golang/protobuf/proto" - math "math" -) - -import ( - context "context" - api "github.com/micro/go-micro/v3/api" - client "github.com/micro/go-micro/v3/client" - server "github.com/micro/go-micro/v3/server" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package - -// Reference imports to suppress errors if they are not otherwise used. -var _ api.Endpoint -var _ context.Context -var _ client.Option -var _ server.Option - -// Api Endpoints for Client service - -func NewClientEndpoints() []*api.Endpoint { - return []*api.Endpoint{} -} - -// Client API for Client service - -type ClientService interface { - // Call allows a single request to be made - Call(ctx context.Context, in *Request, opts ...client.CallOption) (*Response, error) - // Stream is a bidirectional stream - Stream(ctx context.Context, opts ...client.CallOption) (Client_StreamService, error) - // Publish publishes a message and returns an empty Message - Publish(ctx context.Context, in *Message, opts ...client.CallOption) (*Message, error) -} - -type clientService struct { - c client.Client - name string -} - -func NewClientService(name string, c client.Client) ClientService { - return &clientService{ - c: c, - name: name, - } -} - -func (c *clientService) Call(ctx context.Context, in *Request, opts ...client.CallOption) (*Response, error) { - req := c.c.NewRequest(c.name, "Client.Call", in) - out := new(Response) - err := c.c.Call(ctx, req, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *clientService) Stream(ctx context.Context, opts ...client.CallOption) (Client_StreamService, error) { - req := c.c.NewRequest(c.name, "Client.Stream", &Request{}) - stream, err := c.c.Stream(ctx, req, opts...) - if err != nil { - return nil, err - } - return &clientServiceStream{stream}, nil -} - -type Client_StreamService interface { - Context() context.Context - SendMsg(interface{}) error - RecvMsg(interface{}) error - Close() error - Send(*Request) error - Recv() (*Response, error) -} - -type clientServiceStream struct { - stream client.Stream -} - -func (x *clientServiceStream) Close() error { - return x.stream.Close() -} - -func (x *clientServiceStream) Context() context.Context { - return x.stream.Context() -} - -func (x *clientServiceStream) SendMsg(m interface{}) error { - return x.stream.Send(m) -} - -func (x *clientServiceStream) RecvMsg(m interface{}) error { - return x.stream.Recv(m) -} - -func (x *clientServiceStream) Send(m *Request) error { - return x.stream.Send(m) -} - -func (x *clientServiceStream) Recv() (*Response, error) { - m := new(Response) - err := x.stream.Recv(m) - if err != nil { - return nil, err - } - return m, nil -} - -func (c *clientService) Publish(ctx context.Context, in *Message, opts ...client.CallOption) (*Message, error) { - req := c.c.NewRequest(c.name, "Client.Publish", in) - out := new(Message) - err := c.c.Call(ctx, req, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// Server API for Client service - -type ClientHandler interface { - // Call allows a single request to be made - Call(context.Context, *Request, *Response) error - // Stream is a bidirectional stream - Stream(context.Context, Client_StreamStream) error - // Publish publishes a message and returns an empty Message - Publish(context.Context, *Message, *Message) error -} - -func RegisterClientHandler(s server.Server, hdlr ClientHandler, opts ...server.HandlerOption) error { - type client interface { - Call(ctx context.Context, in *Request, out *Response) error - Stream(ctx context.Context, stream server.Stream) error - Publish(ctx context.Context, in *Message, out *Message) error - } - type Client struct { - client - } - h := &clientHandler{hdlr} - return s.Handle(s.NewHandler(&Client{h}, opts...)) -} - -type clientHandler struct { - ClientHandler -} - -func (h *clientHandler) Call(ctx context.Context, in *Request, out *Response) error { - return h.ClientHandler.Call(ctx, in, out) -} - -func (h *clientHandler) Stream(ctx context.Context, stream server.Stream) error { - return h.ClientHandler.Stream(ctx, &clientStreamStream{stream}) -} - -type Client_StreamStream interface { - Context() context.Context - SendMsg(interface{}) error - RecvMsg(interface{}) error - Close() error - Send(*Response) error - Recv() (*Request, error) -} - -type clientStreamStream struct { - stream server.Stream -} - -func (x *clientStreamStream) Close() error { - return x.stream.Close() -} - -func (x *clientStreamStream) Context() context.Context { - return x.stream.Context() -} - -func (x *clientStreamStream) SendMsg(m interface{}) error { - return x.stream.Send(m) -} - -func (x *clientStreamStream) RecvMsg(m interface{}) error { - return x.stream.Recv(m) -} - -func (x *clientStreamStream) Send(m *Response) error { - return x.stream.Send(m) -} - -func (x *clientStreamStream) Recv() (*Request, error) { - m := new(Request) - if err := x.stream.Recv(m); err != nil { - return nil, err - } - return m, nil -} - -func (h *clientHandler) Publish(ctx context.Context, in *Message, out *Message) error { - return h.ClientHandler.Publish(ctx, in, out) -} diff --git a/client/service/proto/client.proto b/client/service/proto/client.proto deleted file mode 100644 index b5703cf2..00000000 --- a/client/service/proto/client.proto +++ /dev/null @@ -1,30 +0,0 @@ -syntax = "proto3"; - -package go.micro.client; - -// Client is the micro client interface -service Client { - // Call allows a single request to be made - rpc Call(Request) returns (Response) {}; - // Stream is a bidirectional stream - rpc Stream(stream Request) returns (stream Response) {}; - // Publish publishes a message and returns an empty Message - rpc Publish(Message) returns (Message) {}; -} - -message Request { - string service = 1; - string endpoint = 2; - string content_type = 3; - bytes body = 4; -} - -message Response { - bytes body = 1; -} - -message Message { - string topic = 1; - string content_type = 2; - bytes body = 3; -} diff --git a/network/mucp/mucp.go b/network/mucp/mucp.go index 7859b740..33786058 100644 --- a/network/mucp/mucp.go +++ b/network/mucp/mucp.go @@ -1079,7 +1079,7 @@ func (n *mucpNetwork) processNetChan(listener tunnel.Listener) { // pruneRoutes prunes routes return by given query func (n *mucpNetwork) pruneRoutes(q ...router.LookupOption) error { - routes, err := n.router.Table().List() + routes, err := n.router.Table().Read() if err != nil && err != router.ErrRouteNotFound { return err } @@ -1258,7 +1258,7 @@ func (n *mucpNetwork) manage() { } // get a list of all routes - routes, err := n.options.Router.Table().List() + routes, err := n.options.Router.Table().Read() if err != nil { if logger.V(logger.DebugLevel, logger.DefaultLogger) { logger.Debugf("Network failed listing routes when pruning peers: %v", err) @@ -1344,7 +1344,7 @@ func (n *mucpNetwork) manage() { // based on the advertisement strategy encoded in protobuf // It returns error if the routes failed to be retrieved from the routing table func (n *mucpNetwork) getProtoRoutes() ([]*pb.Route, error) { - routes, err := n.router.Table().List() + routes, err := n.router.Table().Read() if err != nil && err != router.ErrRouteNotFound { return nil, err } diff --git a/router/options.go b/router/options.go index 358afdfe..30cd93bb 100644 --- a/router/options.go +++ b/router/options.go @@ -77,3 +77,16 @@ func DefaultOptions() Options { Context: context.Background(), } } + +type ReadOptions struct { + Service string +} + +type ReadOption func(o *ReadOptions) + +// ReadService sets the service to read from the table +func ReadService(s string) ReadOption { + return func(o *ReadOptions) { + o.Service = s + } +} diff --git a/router/registry/registry.go b/router/registry/registry.go index a7b63ddd..f36a8703 100644 --- a/router/registry/registry.go +++ b/router/registry/registry.go @@ -266,7 +266,7 @@ func (r *rtr) Lookup(service string, opts ...router.LookupOption) ([]router.Rout q := router.NewLookup(opts...) // if we find the routes filter and return them - routes, err := r.table.Query(service) + routes, err := r.table.Read(router.ReadService(service)) if err == nil { routes = router.Filter(routes, q) if len(routes) == 0 { diff --git a/router/registry/table.go b/router/registry/table.go index c2682554..9f99a6aa 100644 --- a/router/registry/table.go +++ b/router/registry/table.go @@ -198,35 +198,35 @@ func (t *table) Update(r router.Route) error { return nil } -// List returns a list of all routes in the table -func (t *table) List() ([]router.Route, error) { +// Read entries from the table +func (t *table) Read(opts ...router.ReadOption) ([]router.Route, error) { + var options router.ReadOptions + for _, o := range opts { + o(&options) + } + t.RLock() defer t.RUnlock() var routes []router.Route - for _, rmap := range t.routes { - for _, route := range rmap { - routes = append(routes, route.route) + + // get the routes based on options passed + if len(options.Service) > 0 { + routeMap, ok := t.routes[options.Service] + if !ok { + return nil, router.ErrRouteNotFound } + for _, rt := range routeMap { + routes = append(routes, rt.route) + } + return routes, nil } - return routes, nil -} - -// Lookup queries routing table and returns all routes that match the lookup query -func (t *table) Query(service string) ([]router.Route, error) { - t.RLock() - defer t.RUnlock() - - routeMap, ok := t.routes[service] - if !ok { - return nil, router.ErrRouteNotFound - } - - var routes []router.Route - - for _, rt := range routeMap { - routes = append(routes, rt.route) + // otherwise get all routes + for _, serviceRoutes := range t.routes { + for _, rt := range serviceRoutes { + routes = append(routes, rt.route) + } } return routes, nil diff --git a/router/registry/table_test.go b/router/registry/table_test.go index 2aacd812..7d7b7898 100644 --- a/router/registry/table_test.go +++ b/router/registry/table_test.go @@ -99,7 +99,7 @@ func TestList(t *testing.T) { } } - routes, err := table.List() + routes, err := table.Read() if err != nil { t.Fatalf("error listing routes: %s", err) } @@ -116,7 +116,7 @@ func TestQuery(t *testing.T) { t.Fatalf("error adding route: %s", err) } - rt, err := table.Query(route.Service) + rt, err := table.Read(router.ReadService(route.Service)) if err != nil { t.Fatal("Expected a route got err", err) } diff --git a/router/router.go b/router/router.go index 307a8fc1..779d8615 100644 --- a/router/router.go +++ b/router/router.go @@ -45,10 +45,8 @@ type Table interface { Delete(Route) error // Update route in the routing table Update(Route) error - // List all routes in the table - List() ([]Route, error) - // Query routes in the routing table - Query(service string) ([]Route, error) + // Read is for querying the table + Read(...ReadOption) ([]Route, error) } // Option used by the router diff --git a/router/static/static.go b/router/static/static.go index 28211c5b..0030c3f8 100644 --- a/router/static/static.go +++ b/router/static/static.go @@ -44,7 +44,7 @@ func (s *static) Table() router.Table { func (s *static) Lookup(service string, opts ...router.LookupOption) ([]router.Route, error) { options := router.NewLookup(opts...) - _, _ , err := net.SplitHostPort(service) + _, _, err := net.SplitHostPort(service) if err == nil { // use the address options.Address = service