diff --git a/pkg/networkservice/common/monitor/eventloop.go b/pkg/networkservice/common/monitor/eventloop.go index bfe84a1d9..0722080e5 100644 --- a/pkg/networkservice/common/monitor/eventloop.go +++ b/pkg/networkservice/common/monitor/eventloop.go @@ -42,6 +42,7 @@ func newEventLoop(ctx context.Context, ec EventConsumer, cc grpc.ClientConnInter // Create new eventLoopCtx and store its eventLoopCancel eventLoopCtx, eventLoopCancel := context.WithCancel(ctx) + cev := &eventLoop{ eventLoopCtx: eventLoopCtx, conn: conn, @@ -91,17 +92,14 @@ func (cev *eventLoop) eventLoop() { connOut := cev.conn.Clone() if err != nil && connOut != nil { // If we get an error, we've lost our connection... Send Down update - connOut := cev.conn.Clone() - if connOut != nil { - connOut.State = networkservice.State_DOWN - eventOut := &networkservice.ConnectionEvent{ - Type: networkservice.ConnectionEventType_UPDATE, - Connections: map[string]*networkservice.Connection{ - cev.conn.GetId(): connOut, - }, - } - _ = cev.eventConsumer.Send(eventOut) + connOut.State = networkservice.State_DOWN + eventOut := &networkservice.ConnectionEvent{ + Type: networkservice.ConnectionEventType_UPDATE, + Connections: map[string]*networkservice.Connection{ + cev.conn.GetId(): connOut, + }, } + _ = cev.eventConsumer.Send(eventOut) return } _ = cev.eventConsumer.Send(eventIn) diff --git a/pkg/networkservice/common/monitor/server.go b/pkg/networkservice/common/monitor/server.go index a8d5daa94..c180e1871 100644 --- a/pkg/networkservice/common/monitor/server.go +++ b/pkg/networkservice/common/monitor/server.go @@ -24,8 +24,11 @@ import ( "context" "github.com/golang/protobuf/ptypes/empty" + "github.com/pkg/errors" + "github.com/networkservicemesh/sdk/pkg/networkservice/common/clientconn" "github.com/networkservicemesh/sdk/pkg/networkservice/utils/metadata" + "github.com/networkservicemesh/sdk/pkg/tools/postpone" "github.com/networkservicemesh/api/pkg/api/networkservice" @@ -55,7 +58,7 @@ func NewServer(chainCtx context.Context, monitorServerPtr *networkservice.Monito } func (m *monitorServer) Request(ctx context.Context, request *networkservice.NetworkServiceRequest) (*networkservice.Connection, error) { - // closeCtxFunc := postpone.ContextWithValues(ctx) + closeCtxFunc := postpone.ContextWithValues(ctx) // Cancel any existing eventLoop cancelEventLoop, loaded := loadAndDelete(ctx, metadata.IsClient(m)) if loaded { @@ -83,20 +86,17 @@ func (m *monitorServer) Request(ctx context.Context, request *networkservice.Net // If we have a clientconn ... we must be part of a passthrough server, and have a client to pass // events through from, so start an eventLoop - // cc, ccLoaded := clientconn.Load(ctx) - // log.FromContext(ctx).Infof("ccLoaded") - // if ccLoaded { - // log.FromContext(ctx).Infof("newEventLoop") - // cancelEventLoop, eventLoopErr := newEventLoop(m.chainCtx, m.MonitorConnectionServer.(EventConsumer), cc, conn) - // if eventLoopErr != nil { - // closeCtx, closeCancel := closeCtxFunc() - // defer closeCancel() - // _, _ = next.Client(closeCtx).Close(closeCtx, conn) - // return nil, errors.Wrap(eventLoopErr, "unable to monitor") - // } - // log.FromContext(ctx).Infof("STORE") - // store(ctx, metadata.IsClient(m), cancelEventLoop) - // } + cc, ccLoaded := clientconn.Load(ctx) + if ccLoaded { + cancelEventLoop, eventLoopErr := newEventLoop(m.chainCtx, m.MonitorConnectionServer.(EventConsumer), cc, conn) + if eventLoopErr != nil { + closeCtx, closeCancel := closeCtxFunc() + defer closeCancel() + _, _ = next.Client(closeCtx).Close(closeCtx, conn) + return nil, errors.Wrap(eventLoopErr, "unable to monitor") + } + store(ctx, metadata.IsClient(m), cancelEventLoop) + } return conn, nil } diff --git a/pkg/networkservice/common/updatepath/client.go b/pkg/networkservice/common/updatepath/client.go index ea527ad96..9c71cf83a 100644 --- a/pkg/networkservice/common/updatepath/client.go +++ b/pkg/networkservice/common/updatepath/client.go @@ -56,14 +56,9 @@ func (i *updatePathClient) Request(ctx context.Context, request *networkservice. return nil, err } - segments := conn.GetPath().GetPathSegments() - if segments != nil && len(segments) > int(index) { - conn.Id = segments[index].Id - } - - path := conn.GetPath() - if path != nil { - path.Index = index + if conn.GetPath() != nil && len(conn.GetPath().GetPathSegments()) > int(index) { + conn.Id = conn.GetPath().GetPathSegments()[index].Id + conn.GetPath().Index = index } return conn, nil