From 80c6b00edd03b787126dbf34a109f6e36594479d Mon Sep 17 00:00:00 2001 From: Jaeryn Chu Date: Thu, 3 Jan 2019 14:32:27 -0800 Subject: [PATCH 1/2] Limiting the size of our buffered payload to ~2MB --- telemetry/telemetrybuffer.go | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/telemetry/telemetrybuffer.go b/telemetry/telemetrybuffer.go index 8a9214787f..61d1b0464f 100644 --- a/telemetry/telemetrybuffer.go +++ b/telemetry/telemetrybuffer.go @@ -17,15 +17,14 @@ import ( // FdName - file descriptor name // Delimiter - delimiter for socket reads/writes // HostNetAgentURL - host net agent url of type payload -// DefaultDncReportsSize - default DNC report slice size -// DefaultCniReportsSize - default CNI report slice size -// DefaultNpmReportsSize - default NPM report slice size // DefaultInterval - default interval for sending payload to host +// MaxPayloadSize - max payload size (~2MB) const ( FdName = "azure-telemetry" Delimiter = '\n' HostNetAgentURL = "http://169.254.169.254/machine/plugins?comp=netagent&type=payload" DefaultInterval = 1 * time.Minute + MaxPayloadSize = 2097 ) // TelemetryBuffer object @@ -205,15 +204,32 @@ func (tb *TelemetryBuffer) sendToHost() error { // push - push the report (x) to corresponding slice func (pl *Payload) push(x interface{}) { + truncate := false + if pl.len() > MaxPayloadSize { + truncate = true + } + switch x.(type) { case DNCReport: pl.DNCReports = append(pl.DNCReports, x.(DNCReport)) + if truncate { + pl.DNCReports = pl.DNCReports[1:] + } case CNIReport: pl.CNIReports = append(pl.CNIReports, x.(CNIReport)) + if truncate { + pl.CNIReports = pl.CNIReports[1:] + } case NPMReport: pl.NPMReports = append(pl.NPMReports, x.(NPMReport)) + if truncate { + pl.NPMReports = pl.NPMReports[1:] + } case CNSReport: pl.CNSReports = append(pl.CNSReports, x.(CNSReport)) + if truncate { + pl.CNSReports = pl.CNSReports[1:] + } } } @@ -228,3 +244,8 @@ func (pl *Payload) reset() { pl.CNSReports = nil pl.CNSReports = make([]CNSReport, 0) } + +// len - get number of payload items +func (pl *Payload) len() int { + return len(pl.CNIReports) + len(pl.CNSReports) + len(pl.DNCReports) + len(pl.NPMReports) +} From 404cb5399c4582a6eb655d8f2f9a1e3f77f2b499 Mon Sep 17 00:00:00 2001 From: Jaeryn Chu Date: Thu, 28 Feb 2019 17:05:14 -0800 Subject: [PATCH 2/2] Clearing/resetting connections slice in telemetry buffer. --- telemetry/telemetrybuffer.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/telemetry/telemetrybuffer.go b/telemetry/telemetrybuffer.go index 54e9e70dfb..cb5436a984 100644 --- a/telemetry/telemetrybuffer.go +++ b/telemetry/telemetrybuffer.go @@ -239,13 +239,15 @@ func (tb *TelemetryBuffer) Close() { tb.listener = nil } - for index, conn := range tb.connections { + for _, conn := range tb.connections { if conn != nil { telemetryLogger.Printf("connection close") conn.Close() - remove(tb.connections, index) } } + + tb.connections = nil + tb.connections = make([]net.Conn, 0) } // sendToHost - send payload to host