diff --git a/pkg/networkservice/chains/nsmgr/server_test.go b/pkg/networkservice/chains/nsmgr/server_test.go index 7c2462117..9b29d9bde 100644 --- a/pkg/networkservice/chains/nsmgr/server_test.go +++ b/pkg/networkservice/chains/nsmgr/server_test.go @@ -577,6 +577,13 @@ func testNSEAndClient( _, err = domain.Nodes[0].EndpointRegistryClient.Unregister(ctx, nseReg) require.NoError(t, err) + + for _, nsName := range nseReg.NetworkServiceNames { + _, err = domain.Nodes[0].NSRegistryClient.Unregister(ctx, ®istry.NetworkService{ + Name: nsName, + }) + require.NoError(t, err) + } } type passThroughClient struct { diff --git a/pkg/tools/sandbox/builder.go b/pkg/tools/sandbox/builder.go index 6ad7dec3d..8d28e6438 100644 --- a/pkg/tools/sandbox/builder.go +++ b/pkg/tools/sandbox/builder.go @@ -32,9 +32,11 @@ import ( "github.com/networkservicemesh/sdk/pkg/networkservice/chains/nsmgr" "github.com/networkservicemesh/sdk/pkg/networkservice/chains/nsmgrproxy" "github.com/networkservicemesh/sdk/pkg/networkservice/common/authorize" + "github.com/networkservicemesh/sdk/pkg/registry/chains/client" "github.com/networkservicemesh/sdk/pkg/registry/chains/memory" "github.com/networkservicemesh/sdk/pkg/registry/chains/proxydns" "github.com/networkservicemesh/sdk/pkg/registry/common/dnsresolve" + "github.com/networkservicemesh/sdk/pkg/registry/common/interpose" "github.com/networkservicemesh/sdk/pkg/tools/grpcutils" "github.com/networkservicemesh/sdk/pkg/tools/logger" "github.com/networkservicemesh/sdk/pkg/tools/mergectx" @@ -272,10 +274,12 @@ func (b *Builder) newNode(ctx context.Context, registryURL *url.URL) *Node { nsmgrCC := b.dialContext(ctx, nsmgrEntry.URL) node := &Node{ - ctx: b.ctx, - NSMgr: nsmgrEntry, - ForwarderRegistryClient: NewRegistryClient(ctx, nsmgrCC, true), - EndpointRegistryClient: NewRegistryClient(ctx, nsmgrCC, false), + ctx: b.ctx, + NSMgr: nsmgrEntry, + ForwarderRegistryClient: client.NewNetworkServiceEndpointClient(ctx, nsmgrCC, + interpose.NewNetworkServiceEndpointRegistryClient()), + EndpointRegistryClient: client.NewNetworkServiceEndpointClient(ctx, nsmgrCC), + NSRegistryClient: registryapi.NewNetworkServiceRegistryClient(nsmgrCC), } if b.setupNode != nil { diff --git a/pkg/tools/sandbox/node.go b/pkg/tools/sandbox/node.go index e9c7eaf91..b6d5df83a 100644 --- a/pkg/tools/sandbox/node.go +++ b/pkg/tools/sandbox/node.go @@ -22,6 +22,7 @@ import ( "net/url" "github.com/google/uuid" + "github.com/networkservicemesh/api/pkg/api/networkservice/payload" "google.golang.org/grpc" "github.com/networkservicemesh/api/pkg/api/networkservice" @@ -46,6 +47,7 @@ type Node struct { NSMgr *NSMgrEntry ForwarderRegistryClient registry.NetworkServiceEndpointRegistryClient EndpointRegistryClient registry.NetworkServiceEndpointRegistryClient + NSRegistryClient registry.NetworkServiceRegistryClient } // NewForwarder starts a new forwarder and registers it on the node NSMgr @@ -67,7 +69,7 @@ func (n *Node) NewForwarder( grpc.WithInsecure(), grpc.WithDefaultCallOptions(grpc.WaitForReady(true)), )) - entry, err := n.newEndpoint(ctx, nse, generatorFunc, true, additionalFunctionality...) + entry, err := n.newEndpoint(ctx, nse, generatorFunc, n.ForwarderRegistryClient, additionalFunctionality...) if err != nil { return nil, err } @@ -83,14 +85,14 @@ func (n *Node) NewEndpoint( generatorFunc token.GeneratorFunc, additionalFunctionality ...networkservice.NetworkServiceServer, ) (*EndpointEntry, error) { - return n.newEndpoint(ctx, nse, generatorFunc, false, additionalFunctionality...) + return n.newEndpoint(ctx, nse, generatorFunc, n.EndpointRegistryClient, additionalFunctionality...) } func (n *Node) newEndpoint( ctx context.Context, nse *registry.NetworkServiceEndpoint, generatorFunc token.GeneratorFunc, - isForwarder bool, + registryClient registry.NetworkServiceEndpointRegistryClient, additionalFunctionality ...networkservice.NetworkServiceServer, ) (_ *EndpointEntry, err error) { ctx = mergectx.WithValuesFromContext(ctx, logger.WithLog(context.Background())) @@ -118,13 +120,6 @@ func (n *Node) newEndpoint( nse.Url = u.String() // 3. Register with the node registry client - var registryClient registry.NetworkServiceEndpointRegistryClient - if isForwarder { - registryClient = n.ForwarderRegistryClient - } else { - registryClient = n.EndpointRegistryClient - } - var reg *registry.NetworkServiceEndpoint if reg, err = registryClient.Register(ctx, nse); err != nil { return nil, err @@ -133,12 +128,17 @@ func (n *Node) newEndpoint( nse.Name = reg.Name nse.ExpirationTime = reg.ExpirationTime - if isForwarder { - logger.Log(ctx).Infof("Started listen forwarder %s on %s.", nse.Name, u.String()) - } else { - logger.Log(ctx).Infof("Started listen endpoint %s on %s.", nse.Name, u.String()) + for _, nsName := range nse.NetworkServiceNames { + if _, err = n.NSRegistryClient.Register(ctx, ®istry.NetworkService{ + Name: nsName, + Payload: payload.IP, + }); err != nil { + return nil, err + } } + logger.Log(ctx).Infof("Started listen endpoint %s on %s.", nse.Name, u.String()) + return &EndpointEntry{Endpoint: ep, URL: u}, nil } diff --git a/pkg/tools/sandbox/registry_client.go b/pkg/tools/sandbox/registry_client.go deleted file mode 100644 index 8ef98bf62..000000000 --- a/pkg/tools/sandbox/registry_client.go +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright (c) 2021 Doc.ai and/or its affiliates. -// -// SPDX-License-Identifier: Apache-2.0 -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at: -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package sandbox - -import ( - "context" - - "github.com/golang/protobuf/ptypes/empty" - "github.com/pkg/errors" - "google.golang.org/grpc" - - "github.com/networkservicemesh/api/pkg/api/networkservice/payload" - "github.com/networkservicemesh/api/pkg/api/registry" - - "github.com/networkservicemesh/sdk/pkg/registry/common/interpose" - "github.com/networkservicemesh/sdk/pkg/registry/common/null" - "github.com/networkservicemesh/sdk/pkg/registry/common/refresh" - "github.com/networkservicemesh/sdk/pkg/registry/core/chain" -) - -type registryClient struct { - nsClient registry.NetworkServiceRegistryClient - nseClient registry.NetworkServiceEndpointRegistryClient -} - -// NewRegistryClient returns NSE registry client to register NSE to registry -func NewRegistryClient(ctx context.Context, cc grpc.ClientConnInterface, isForwarder bool) registry.NetworkServiceEndpointRegistryClient { - var interposeClient registry.NetworkServiceEndpointRegistryClient - if isForwarder { - interposeClient = interpose.NewNetworkServiceEndpointRegistryClient() - } else { - interposeClient = null.NewNetworkServiceEndpointRegistryClient() - } - return ®istryClient{ - nsClient: registry.NewNetworkServiceRegistryClient(cc), - nseClient: chain.NewNetworkServiceEndpointRegistryClient( - refresh.NewNetworkServiceEndpointRegistryClient( - refresh.WithChainContext(ctx)), - interposeClient, - registry.NewNetworkServiceEndpointRegistryClient(cc), - ), - } -} - -func (c *registryClient) Register(ctx context.Context, nse *registry.NetworkServiceEndpoint, opts ...grpc.CallOption) (_ *registry.NetworkServiceEndpoint, err error) { - if nse, err = c.nseClient.Register(ctx, nse, opts...); err != nil { - return nil, err - } - for _, name := range nse.NetworkServiceNames { - if _, err = c.nsClient.Register(ctx, ®istry.NetworkService{ - Name: name, - Payload: payload.IP, - }, opts...); err != nil { - return nil, err - } - } - return nse, err -} - -func (c *registryClient) Find(ctx context.Context, query *registry.NetworkServiceEndpointQuery, opts ...grpc.CallOption) (registry.NetworkServiceEndpointRegistry_FindClient, error) { - return c.nseClient.Find(ctx, query, opts...) -} - -func (c *registryClient) Unregister(ctx context.Context, nse *registry.NetworkServiceEndpoint, opts ...grpc.CallOption) (_ *empty.Empty, err error) { - if _, unregisterErr := c.nseClient.Unregister(ctx, nse, opts...); unregisterErr != nil { - err = errors.Wrapf(unregisterErr, "%v\n", err) - } - for _, name := range nse.NetworkServiceNames { - if _, unregisterErr := c.nsClient.Unregister(ctx, ®istry.NetworkService{ - Name: name, - Payload: payload.IP, - }, opts...); unregisterErr != nil { - err = errors.Wrapf(unregisterErr, "%v\n", err) - } - } - return new(empty.Empty), err -}