Skip to content

Commit

Permalink
fix: Do lookup on connection before do request (#151)
Browse files Browse the repository at this point in the history
* WIP: Show conn lookup via monitors

Signed-off-by: Denis Tingaikin <denis.tingajkin@xored.com>

* add missed imports cache

Signed-off-by: Denis Tingaikin <denis.tingajkin@xored.com>

* fix ci issues

Signed-off-by: Denis Tingaikin <denis.tingajkin@xored.com>
  • Loading branch information
denis-tingaikin committed Apr 7, 2021
1 parent bf2b389 commit 2b2f3dd
Show file tree
Hide file tree
Showing 10 changed files with 122 additions and 51 deletions.
10 changes: 5 additions & 5 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ jobs:
- name: Setup Go
uses: actions/setup-go@v1
with:
go-version: 1.15
go-version: 1.16
- name: Build
run: go build -race ./...

Expand Down Expand Up @@ -91,7 +91,7 @@ jobs:
- uses: actions/checkout@v2
- uses: actions/setup-go@v1
with:
go-version: 1.15
go-version: 1.16
- run: go mod tidy
- name: Check for changes
run: |
Expand All @@ -104,7 +104,7 @@ jobs:
- uses: actions/checkout@v2
- uses: actions/setup-go@v1
with:
go-version: 1.15
go-version: 1.16
- run: go generate ./...
- name: Check for changes
run: |
Expand All @@ -129,7 +129,7 @@ jobs:
- uses: actions/checkout@v2
- uses: actions/setup-go@v1
with:
go-version: 1.15
go-version: 1.16
- name: Build container
run: docker build .
- name: Run tests
Expand Down Expand Up @@ -167,7 +167,7 @@ jobs:
- uses: actions/checkout@v2
- uses: actions/setup-go@v1
with:
go-version: 1.15
go-version: 1.16
- name: Build ${NAME}:${GITHUB_SHA::8} image
run: docker build . -t "${ORG}/${NAME}:${GITHUB_SHA::8}" --target runtime
- name: Build ${NAME}:latest image
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/docker-push.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
- uses: actions/checkout@v2
- uses: actions/setup-go@v1
with:
go-version: 1.15
go-version: 1.16
- name: Build ${NAME}:${GITHUB_SHA::8} image
run: docker build . -t "${ORG}/${NAME}:${GITHUB_SHA::8}" --target runtime
- name: Build ${NAME}:latest image
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/update-cmd-repositories.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ jobs:
token: ${{ secrets.NSM_BOT_GITHUB_TOKEN }}
- uses: actions/setup-go@v1
with:
go-version: 1.15
go-version: 1.16
- name: Push update to the ${{ matrix.repository }}
working-directory: networkservicemesh/${{ matrix.repository }}
run: |
Expand Down
4 changes: 2 additions & 2 deletions .golangci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ linters-settings:
dupl:
threshold: 150
funlen:
Lines: 100
Statements: 50
Lines: 200
Statements: 100
goconst:
min-len: 2
min-occurrences: 2
Expand Down
5 changes: 4 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM golang:1.15-buster as go
FROM golang:1.16-buster as go
ENV GO111MODULE=on
ENV CGO_ENABLED=0
ENV GOBIN=/bin
Expand All @@ -9,6 +9,9 @@ RUN dl https://github.com/spiffe/spire/releases/download/v0.11.1/spire-0.11.1-li

FROM go as build
WORKDIR /build
COPY go.mod go.sum ./
COPY ./internal/imports imports
RUN go build ./imports
COPY . .
RUN go build -o /bin/app .

Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module github.com/networkservicemesh/cmd-nsc

go 1.15
go 1.16

require (
github.com/antonfisher/nested-logrus-formatter v1.1.0
Expand Down
26 changes: 0 additions & 26 deletions go.sum

Large diffs are not rendered by default.

22 changes: 22 additions & 0 deletions internal/imports/gen.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// Copyright (c) 2021 Cisco 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 imports is used for generating list of imports to optimize use of docker build cache
package imports

//go:generate bash -c "rm -rf imports_linux.go"
//go:generate bash -c "cd $(mktemp -d) && GO111MODULE=on go get github.com/edwarnicke/imports-gen@v1.1.0"
//go:generate bash -c "GOOS=linux ${GOPATH}/bin/imports-gen"
43 changes: 43 additions & 0 deletions internal/imports/imports_linux.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
// DO NOT EDIT - generated by github.com/edwarnicke/imports-gen
package imports

import (
_ "context"
_ "fmt"
_ "github.com/antonfisher/nested-logrus-formatter"
_ "github.com/edwarnicke/grpcfd"
_ "github.com/kelseyhightower/envconfig"
_ "github.com/networkservicemesh/api/pkg/api/networkservice"
_ "github.com/networkservicemesh/api/pkg/api/networkservice/mechanisms/common"
_ "github.com/networkservicemesh/api/pkg/api/networkservice/mechanisms/kernel"
_ "github.com/networkservicemesh/api/pkg/api/networkservice/mechanisms/vfio"
_ "github.com/networkservicemesh/sdk-sriov/pkg/networkservice/common/mechanisms/vfio"
_ "github.com/networkservicemesh/sdk-sriov/pkg/networkservice/common/token"
_ "github.com/networkservicemesh/sdk/pkg/networkservice/chains/client"
_ "github.com/networkservicemesh/sdk/pkg/networkservice/common/authorize"
_ "github.com/networkservicemesh/sdk/pkg/networkservice/common/mechanisms"
_ "github.com/networkservicemesh/sdk/pkg/networkservice/common/mechanisms/kernel"
_ "github.com/networkservicemesh/sdk/pkg/networkservice/common/mechanisms/sendfd"
_ "github.com/networkservicemesh/sdk/pkg/networkservice/core/chain"
_ "github.com/networkservicemesh/sdk/pkg/tools/grpcutils"
_ "github.com/networkservicemesh/sdk/pkg/tools/jaeger"
_ "github.com/networkservicemesh/sdk/pkg/tools/log"
_ "github.com/networkservicemesh/sdk/pkg/tools/log/logruslogger"
_ "github.com/networkservicemesh/sdk/pkg/tools/nsurl"
_ "github.com/networkservicemesh/sdk/pkg/tools/opentracing"
_ "github.com/networkservicemesh/sdk/pkg/tools/signalctx"
_ "github.com/networkservicemesh/sdk/pkg/tools/spiffejwt"
_ "github.com/networkservicemesh/sdk/pkg/tools/token"
_ "github.com/pkg/errors"
_ "github.com/sirupsen/logrus"
_ "github.com/spiffe/go-spiffe/v2/spiffetls/tlsconfig"
_ "github.com/spiffe/go-spiffe/v2/svid/x509svid"
_ "github.com/spiffe/go-spiffe/v2/workloadapi"
_ "github.com/stretchr/testify/require"
_ "google.golang.org/grpc"
_ "google.golang.org/grpc/credentials"
_ "net/url"
_ "os"
_ "testing"
_ "time"
)
57 changes: 43 additions & 14 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,15 +85,15 @@ func main() {
// ********************************************************************************
// Get config from environment
// ********************************************************************************
rootConf := &config.Config{}
if err := envconfig.Usage("nsm", rootConf); err != nil {
c := &config.Config{}
if err := envconfig.Usage("nsm", c); err != nil {
logger.Fatal(err)
}
if err := envconfig.Process("nsm", rootConf); err != nil {
if err := envconfig.Process("nsm", c); err != nil {
logger.Fatalf("error processing rootConf from env: %+v", err)
}

logger.Infof("rootConf: %+v", rootConf)
logger.Infof("rootConf: %+v", c)

// ********************************************************************************
// Get a x509Source
Expand All @@ -112,19 +112,19 @@ func main() {
// ********************************************************************************
// Dial to NSManager
// ********************************************************************************
dialCtx, cancel := context.WithTimeout(ctx, rootConf.DialTimeout)
dialCtx, cancel := context.WithTimeout(ctx, c.DialTimeout)
defer cancel()

logger.Infof("NSC: Connecting to Network Service Manager %v", rootConf.ConnectTo.String())
logger.Infof("NSC: Connecting to Network Service Manager %v", c.ConnectTo.String())
cc, err := grpc.DialContext(
dialCtx,
grpcutils.URLToTarget(&rootConf.ConnectTo),
grpcutils.URLToTarget(&c.ConnectTo),
append(opentracing.WithTracingDial(),
grpcfd.WithChainStreamInterceptor(),
grpcfd.WithChainUnaryInterceptor(),
grpc.WithDefaultCallOptions(
grpc.WaitForReady(true),
grpc.PerRPCCredentials(token.NewPerRPCCredentials(spiffejwt.TokenGeneratorFunc(source, rootConf.MaxTokenLifetime))),
grpc.PerRPCCredentials(token.NewPerRPCCredentials(spiffejwt.TokenGeneratorFunc(source, c.MaxTokenLifetime))),
),
grpc.WithTransportCredentials(
grpcfd.TransportCredentials(
Expand All @@ -142,7 +142,7 @@ func main() {
// ********************************************************************************
nsmClient := client.NewClient(ctx,
cc,
client.WithName(rootConf.Name),
client.WithName(c.Name),
client.WithAuthorizeClient(authorize.NewClient()),
client.WithAdditionalFunctionality(
sriovtoken.NewClient(),
Expand All @@ -153,21 +153,46 @@ func main() {
sendfd.NewClient(),
))

monitorClient := networkservice.NewMonitorConnectionClient(cc)

// ********************************************************************************
// Create Network Service Manager nsmClient
// ********************************************************************************

// ********************************************************************************
// Initiate connections
// ********************************************************************************
for i := 0; i < len(rootConf.NetworkServices); i++ {
for i := 0; i < len(c.NetworkServices); i++ {
// Update network services configs
u := (*nsurl.NSURL)(&rootConf.NetworkServices[i])
u := (*nsurl.NSURL)(&c.NetworkServices[i])

id := fmt.Sprintf("%s-%d", c.Name, i)

monitorCtx, cancelMonitor := context.WithTimeout(ctx, c.RequestTimeout)
defer cancelMonitor()

stream, err := monitorClient.MonitorConnections(monitorCtx, &networkservice.MonitorScopeSelector{
PathSegments: []*networkservice.PathSegment{
{
Id: id,
},
},
})

if err != nil {
logger.Fatal(err.Error())
}

event, err := stream.Recv()

if err != nil {
logger.Fatal(err.Error())
}

// Construct a request
request := &networkservice.NetworkServiceRequest{
Connection: &networkservice.Connection{
Id: fmt.Sprintf("%s-%d", rootConf.Name, i),
Id: id,
NetworkService: u.NetworkService(),
Labels: u.Labels(),
},
Expand All @@ -176,7 +201,11 @@ func main() {
},
}

requestCtx, cancelRequest := context.WithTimeout(ctx, rootConf.RequestTimeout)
if conn, ok := event.Connections[id]; ok {
request.Connection = conn
}

requestCtx, cancelRequest := context.WithTimeout(ctx, c.RequestTimeout)
defer cancelRequest()

resp, err := nsmClient.Request(requestCtx, request)
Expand All @@ -186,7 +215,7 @@ func main() {
}

defer func() {
closeCtx, cancelClose := context.WithTimeout(context.Background(), rootConf.RequestTimeout)
closeCtx, cancelClose := context.WithTimeout(context.Background(), c.RequestTimeout)
defer cancelClose()
_, _ = nsmClient.Close(closeCtx, resp)
}()
Expand Down

0 comments on commit 2b2f3dd

Please sign in to comment.