Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Telemetry support for streaming events #13

Merged
merged 131 commits into from
Sep 1, 2022
Merged
Show file tree
Hide file tree
Changes from 128 commits
Commits
Show all changes
131 commits
Select commit Hold shift + click to select a range
f217325
Events client is being invoked.
renukamanavalan Jun 27, 2022
075ad82
temp commit to enable merge
renukamanavalan Jul 5, 2022
d7ba03b
end to end work
renukamanavalan Jul 7, 2022
142991e
Set swss log level
renukamanavalan Jul 8, 2022
42f96ac
skip re-defining -v flag
renukamanavalan Jul 10, 2022
58e62f8
tabs/spaces corrections; no code change
renukamanavalan Jul 10, 2022
b634ba4
re-evaluate log messages; no code change
renukamanavalan Jul 10, 2022
117b6ef
s/space/tab; no code change
renukamanavalan Jul 10, 2022
a4eb82f
per review comments
renukamanavalan Jul 13, 2022
946b840
tab & syntax correction
renukamanavalan Jul 13, 2022
8e243a2
Merge pull request #2 from renukamanavalan/remanava
renukamanavalan Jul 13, 2022
35e0b75
Updated per new API in swsscommon
renukamanavalan Jul 27, 2022
e31346c
Merge remote-tracking branch 'oldstream/syslog_telemetry_shared'
renukamanavalan Jul 29, 2022
5751f32
GTM warning
renukamanavalan Jul 29, 2022
6fc0318
compile fix
renukamanavalan Jul 30, 2022
3308f5f
Merge remote-tracking branch 'upstream/statistics' into statistics
renukamanavalan Jul 30, 2022
6a61230
compile fix
renukamanavalan Jul 30, 2022
e1f2563
compile fix
renukamanavalan Jul 30, 2022
ea9d323
compile fix
renukamanavalan Jul 31, 2022
c9bb9cf
compile fix
renukamanavalan Jul 31, 2022
2668660
compile fix
renukamanavalan Jul 31, 2022
7e4ccb2
compile fix
renukamanavalan Jul 31, 2022
3af02c8
compile fix
renukamanavalan Jul 31, 2022
d944308
compile fix
renukamanavalan Jul 31, 2022
21cc55f
compile fix
renukamanavalan Jul 31, 2022
7fa5bec
compile fix
renukamanavalan Jul 31, 2022
f047cfa
compile fix
renukamanavalan Jul 31, 2022
4281d3c
compile fix
renukamanavalan Jul 31, 2022
a179324
compile fix
renukamanavalan Jul 31, 2022
288a573
compile fix
renukamanavalan Jul 31, 2022
9b416a3
compile fix
renukamanavalan Jul 31, 2022
e5b1c9e
compile fix
renukamanavalan Jul 31, 2022
04b32e4
compile fix
renukamanavalan Jul 31, 2022
4b0c9da
compile fix
renukamanavalan Jul 31, 2022
da6dee0
compile fix
renukamanavalan Jul 31, 2022
f3cf71c
compile fix
renukamanavalan Jul 31, 2022
df68b34
compile fix
renukamanavalan Jul 31, 2022
d53152d
compile fix
renukamanavalan Jul 31, 2022
3e78234
compile fix
renukamanavalan Jul 31, 2022
11993a9
compile fix
renukamanavalan Jul 31, 2022
207379f
compile fix
renukamanavalan Jul 31, 2022
f83d69d
compile fix
renukamanavalan Jul 31, 2022
5b09be2
compile fix
renukamanavalan Jul 31, 2022
cd8ff91
compile fix
renukamanavalan Jul 31, 2022
c8bb91d
compile fix
renukamanavalan Jul 31, 2022
2ae210b
compile fix
renukamanavalan Jul 31, 2022
e4dc521
compile fix
renukamanavalan Jul 31, 2022
358dc4e
compile fix
renukamanavalan Jul 31, 2022
acbb8fc
compile fix
renukamanavalan Jul 31, 2022
26f3fbb
compile fix
renukamanavalan Jul 31, 2022
3929051
compile fix
renukamanavalan Jul 31, 2022
46705fb
compile fix
renukamanavalan Jul 31, 2022
7c77f08
compile fix
renukamanavalan Jul 31, 2022
1597a12
compile fix
renukamanavalan Jul 31, 2022
f3e6d60
compile fix
renukamanavalan Jul 31, 2022
138ef85
compile fix
renukamanavalan Jul 31, 2022
2bc16ac
connect to DB on demand
renukamanavalan Aug 3, 2022
091ab6d
syntax bug
renukamanavalan Aug 3, 2022
b65f2e8
try
renukamanavalan Aug 3, 2022
2f40300
minor
renukamanavalan Aug 4, 2022
6acdfae
added DB
renukamanavalan Aug 4, 2022
5ae622f
Adding DB
renukamanavalan Aug 4, 2022
c562387
include DB
renukamanavalan Aug 4, 2022
4ba3a4e
fix
renukamanavalan Aug 5, 2022
23a65af
fix
renukamanavalan Aug 5, 2022
bab9cd2
fix
renukamanavalan Aug 5, 2022
d53509c
fix
renukamanavalan Aug 5, 2022
c1bc05b
fix
renukamanavalan Aug 5, 2022
7489296
fix
renukamanavalan Aug 5, 2022
3b3f0da
fix
renukamanavalan Aug 5, 2022
f36f977
fix
renukamanavalan Aug 5, 2022
844d5ee
fix
renukamanavalan Aug 5, 2022
c036ee4
fix
renukamanavalan Aug 5, 2022
fe6f3d8
fix
renukamanavalan Aug 5, 2022
4ea200e
fix
renukamanavalan Aug 5, 2022
1226810
fix
renukamanavalan Aug 5, 2022
8800619
fix
renukamanavalan Aug 5, 2022
8865679
fix
renukamanavalan Aug 5, 2022
eedbb85
fix
renukamanavalan Aug 5, 2022
e5f7c9b
fix
renukamanavalan Aug 5, 2022
15c7dc6
fix
renukamanavalan Aug 5, 2022
a89fac6
fix
renukamanavalan Aug 5, 2022
2c5aae0
fix
renukamanavalan Aug 5, 2022
9f1b7fd
minor
renukamanavalan Aug 8, 2022
576e520
telemetry does not initiate hearbeat events, as eventd does that
renukamanavalan Aug 8, 2022
7f5aaa7
skip heartbeat when q is non-empty
renukamanavalan Aug 9, 2022
fca0ba1
block heartbeat
renukamanavalan Aug 9, 2022
552f6f2
compile
renukamanavalan Aug 9, 2022
baaa0b0
compile
renukamanavalan Aug 9, 2022
84e3394
drop SyncResponse
renukamanavalan Aug 9, 2022
0cbef7d
minor
renukamanavalan Aug 9, 2022
c3947b6
debug
renukamanavalan Aug 9, 2022
f644130
minor
renukamanavalan Aug 9, 2022
5107bdf
debug
renukamanavalan Aug 9, 2022
1d35cfd
debug
renukamanavalan Aug 9, 2022
41ad1ce
debug
renukamanavalan Aug 9, 2022
226f370
debug
renukamanavalan Aug 9, 2022
69fcc44
debug
renukamanavalan Aug 9, 2022
cc022cf
debug
renukamanavalan Aug 9, 2022
fd4c9cb
dropped DEBUG code
renukamanavalan Aug 9, 2022
2c38179
Pass heartbeat param to swsscommon lib
renukamanavalan Aug 16, 2022
9c17765
syntax
renukamanavalan Aug 16, 2022
f123649
syntax
renukamanavalan Aug 16, 2022
7c9959e
review comments
renukamanavalan Aug 18, 2022
d5ba1cb
Merge pull request #2 from sonic-net/master
renukamanavalan Aug 26, 2022
0535ccd
Add some log statements to see issue in build
zbud-msft Aug 29, 2022
404acac
Add logs in different process
zbud-msft Aug 29, 2022
7c3f78a
Add additional logs
zbud-msft Aug 30, 2022
2af5931
Add new log
zbud-msft Aug 30, 2022
47d6706
Add log
zbud-msft Aug 30, 2022
acca289
Add new log
zbud-msft Aug 30, 2022
a3a536f
Add new task and script for swss common
zbud-msft Aug 30, 2022
f680378
Add missing dependencies
zbud-msft Aug 30, 2022
446cf79
Fix syntax
zbud-msft Aug 30, 2022
714627a
Change install location
zbud-msft Aug 30, 2022
d41d9e6
Separate changes
zbud-msft Aug 30, 2022
914aec0
Fix cgo tag
zbud-msft Aug 30, 2022
a488a3e
Change cgo tag
zbud-msft Aug 30, 2022
ae399a5
Change pipeline for swss common
zbud-msft Aug 30, 2022
e8cd26d
Change pipeline
zbud-msft Aug 30, 2022
aa5900a
Add libswsscommon dev
zbud-msft Aug 30, 2022
74b7d3c
Add sonic-swss-common repo
zbud-msft Aug 30, 2022
2dc465c
Change cgo tag
zbud-msft Aug 30, 2022
4fee7a1
Add sonic-swss-common dir
zbud-msft Aug 30, 2022
40b4b14
Change location
zbud-msft Aug 30, 2022
8074388
Clean up yml file
zbud-msft Aug 30, 2022
8df4e88
Fix LGTM
zbud-msft Aug 30, 2022
863d69d
Merge pull request #3 from renukamanavalan/fixBuildIssues
zbud-msft Aug 30, 2022
9e45f26
review comments
renukamanavalan Aug 31, 2022
69b9040
Merge remote-tracking branch 'upstream/master' into statistics
renukamanavalan Aug 31, 2022
8d9e564
Added unit tests
renukamanavalan Sep 1, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 39 additions & 1 deletion azure-pipelines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@ resources:
type: github
name: sonic-net/sonic-mgmt-common
endpoint: sonic-net
- repository: sonic-swss-common
type: github
name: sonic-net/sonic-swss-common
endpoint: sonic-net

stages:
- stage: Build
Expand Down Expand Up @@ -47,7 +51,12 @@ stages:
- checkout: sonic-mgmt-common
clean: true
submodules: recursive
displayName: 'Checkout code'
displayName: 'Checkout sonic-mgmt-common'

- checkout: sonic-swss-common
clean: true
submodules: recursive
displayName: 'Checkout sonic-swss-common'

- task: DownloadPipelineArtifact@2
inputs:
Expand Down Expand Up @@ -81,6 +90,16 @@ stages:
sudo dpkg -i ../target/debs/buster/libyang*1.0.73*.deb
displayName: "Install dependency"

- script: |
# LIBSWSSCOMMON
sudo apt-get -y purge libhiredis-dev libnl-3-dev libnl-route-3-dev
sudo dpkg -i ../target/debs/buster/libnl-3-200_*.deb
sudo dpkg -i ../target/debs/buster/libnl-genl-3-200_*.deb
sudo dpkg -i ../target/debs/buster/libnl-route-3-200_*.deb
sudo dpkg -i ../target/debs/buster/libnl-nf-3-200_*.deb
sudo dpkg -i ../target/debs/buster/libhiredis0.14_*.deb
displayName: "Install libswsscommon dependencies"

- script: |
set -ex
# Install .NET CORE
Expand All @@ -90,6 +109,25 @@ stages:
sudo apt-get install -y dotnet-sdk-5.0
displayName: "Install .NET CORE"

- task: DownloadPipelineArtifact@2
inputs:
source: specific
project: build
pipeline: Azure.sonic-swss-common
artifact: sonic-swss-common
runVersion: 'latestFromBranch'
runBranch: 'refs/heads/master'
displayName: "Download sonic-swss-common"

- script: |
set -ex
# LIBSWSSCOMMON
sudo dpkg -i libswsscommon_1.0.0_amd64.deb
sudo dpkg -i libswsscommon-dev_1.0.0_amd64.deb
sudo dpkg -i python3-swsscommon_1.0.0_amd64.deb
workingDirectory: $(Pipeline.Workspace)/
displayName: 'Install libswsscommon package'

- script: |
set -ex
ls -l
Expand Down
33 changes: 30 additions & 3 deletions gnmi_server/client_subscribe.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,31 @@ type Client struct {
// Wait for all sub go routine to finish
w sync.WaitGroup
fatal bool
logLevel int
}

// Syslog level for error
const logLevelError int = 3
const logLevelDebug int = 7
const logLevelMax int = logLevelDebug

// NewClient returns a new initialized client.
func NewClient(addr net.Addr) *Client {
pq := queue.NewPriorityQueue(1, false)
return &Client{
addr: addr,
q: pq,
logLevel: logLevelError,
}
}

func (c *Client) setLogLevel(lvl int) {
if (lvl >= 0) {
if lvl < logLevelMax {
c.logLevel = lvl
} else {
c.logLevel = logLevelMax
}
}
}

Expand Down Expand Up @@ -121,8 +138,12 @@ func (c *Client) Run(stream gnmipb.GNMI_SubscribeServer) (err error) {
}
var dc sdc.Client

mode := c.subscribe.GetMode()

if target == "OTHERS" {
dc, err = sdc.NewNonDbClient(paths, prefix)
} else if ((target == "EVENTS") && (mode == gnmipb.SubscriptionList_STREAM)) {
dc, err = sdc.NewEventClient(paths, prefix, c.logLevel)
} else if _, ok, _, _ := sdc.IsTargetDb(target); ok {
dc, err = sdc.NewDbClient(paths, prefix)
} else {
Expand All @@ -134,7 +155,7 @@ func (c *Client) Run(stream gnmipb.GNMI_SubscribeServer) (err error) {
return grpc.Errorf(codes.NotFound, "%v", err)
}

switch mode := c.subscribe.GetMode(); mode {
switch mode {
case gnmipb.SubscriptionList_STREAM:
c.stop = make(chan struct{}, 1)
c.w.Add(1)
Expand All @@ -155,7 +176,7 @@ func (c *Client) Run(stream gnmipb.GNMI_SubscribeServer) (err error) {

log.V(1).Infof("Client %s running", c)
go c.recv(stream)
err = c.send(stream)
err = c.send(stream, dc)
c.Close()
// Wait until all child go routines exited
c.w.Wait()
Expand Down Expand Up @@ -226,8 +247,9 @@ func (c *Client) recv(stream gnmipb.GNMI_SubscribeServer) {
}

// send runs until process Queue returns an error.
func (c *Client) send(stream gnmipb.GNMI_SubscribeServer) error {
func (c *Client) send(stream gnmipb.GNMI_SubscribeServer, dc sdc.Client) error {
for {
var val *sdc.Value
items, err := c.q.Get(1)

if items == nil {
Expand All @@ -241,12 +263,14 @@ func (c *Client) send(stream gnmipb.GNMI_SubscribeServer) error {
}

var resp *gnmipb.SubscribeResponse

switch v := items[0].(type) {
case sdc.Value:
if resp, err = sdc.ValToResp(v); err != nil {
c.errors++
return err
}
val = &v;
default:
log.V(1).Infof("Unknown data type %v for %s in queue", items[0], c)
c.errors++
Expand All @@ -257,8 +281,11 @@ func (c *Client) send(stream gnmipb.GNMI_SubscribeServer) error {
if err != nil {
log.V(1).Infof("Client %s sending error:%v", c, err)
c.errors++
dc.FailedSend()
return err
}

dc.SentOne(val)
log.V(5).Infof("Client %s done sending, msg count %d, msg %v", c, c.sendMsg, resp)
}
}
3 changes: 3 additions & 0 deletions gnmi_server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ type Config struct {
// Port for the Server to listen on. If 0 or unset the Server will pick a port
// for this Server.
Port int64
LogLevel int
UserAuth AuthTypes
}

Expand Down Expand Up @@ -234,6 +235,8 @@ func (s *Server) Subscribe(stream gnmipb.GNMI_SubscribeServer) error {

c := NewClient(pr.Addr)

c.setLogLevel(s.config.LogLevel)

s.cMu.Lock()
if oc, ok := s.clients[c.String()]; ok {
log.V(2).Infof("Delete duplicate client %s", oc)
Expand Down
15 changes: 13 additions & 2 deletions sonic_data_client/db_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,12 @@ type Client interface {

// Close provides implemenation for explicit cleanup of Client
Close() error

// callbacks on send failed
FailedSend()

// callback on sent
SentOne(*Value)
}

type Stream interface {
Expand Down Expand Up @@ -271,7 +277,6 @@ func (c *DbClient) PollRun(q *queue.PriorityQueue, poll chan struct{}, w *sync.W
SyncResponse: false,
Val: val,
}

c.q.Put(Value{spbv})
log.V(6).Infof("Added spbv #%v", spbv)
}
Expand Down Expand Up @@ -488,7 +493,7 @@ func populateDbtablePath(prefix, path *gnmipb.Path, pathG2S *map[*gnmipb.Path][]
}

if targetDbName == "COUNTERS_DB" {
err := initCountersPortNameMap()
err := initCountersPortNameMap()
if err != nil {
return err
}
Expand Down Expand Up @@ -1230,6 +1235,12 @@ func (c *DbClient) Capabilities() []gnmipb.ModelData {
return nil
}

func (c *DbClient) SentOne(val *Value) {
}

func (c *DbClient) FailedSend() {
}

// validateSampleInterval validates the sampling interval of the given subscription.
func validateSampleInterval(sub *gnmipb.Subscription) (time.Duration, error) {
requestedInterval := time.Duration(sub.GetSampleInterval())
Expand Down
Loading