Skip to content

Commit 879b644

Browse files
authored
fix: Adding a defer func to connecttoTelemetryservice() to prevent CNI fro… (#1800)
* Adding a defer func to connecttoTelemetryservice() to prevent CNI from stucking in case of telemetry service failure. * fix: addressing the comments for telemetry defer function. * fix: addressing the comments for telemetry defer func.
1 parent a3682cf commit 879b644

File tree

1 file changed

+25
-23
lines changed

1 file changed

+25
-23
lines changed

telemetry/telemetrybuffer.go

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import (
2020
"github.com/Azure/azure-container-networking/common"
2121
"github.com/Azure/azure-container-networking/log"
2222
"github.com/Azure/azure-container-networking/platform"
23-
"github.com/pkg/errors"
2423
)
2524

2625
// TelemetryConfig - telemetry config read by telemetry service
@@ -328,34 +327,37 @@ func (tb *TelemetryBuffer) ConnectCNIToTelemetryService(telemetryNumRetries, tel
328327
path, dir := getTelemetryServiceDirectory()
329328
args := []string{"-d", dir}
330329
for attempt := 0; attempt < 2; attempt++ {
331-
if err := tb.Connect(); err != nil {
332-
log.Logf("Connection to telemetry socket failed: %v", err)
333-
if runtime.GOOS == "windows" {
334-
if err = netPlugin.LockKeyValueStore(); err != nil {
335-
log.Logf("lock acquire error: %v", err)
336-
return errors.Wrap(err, "lock acquire error")
337-
}
338-
}
339-
if err = tb.Cleanup(FdName); err != nil {
340-
return errors.Wrap(err, "cleanup failed")
341-
}
342-
if err = StartTelemetryService(path, args); err != nil {
343-
return errors.Wrap(err, "StartTelemetryService failed")
330+
tb.startAndConnectTelemetryService(telemetryNumRetries, telemetryWaitTimeInMilliseconds, netPlugin, path, args)
331+
}
332+
return nil
333+
}
334+
335+
// This function is getting called from ConnectCNIToTelemetryService() in each attempt inside for loop
336+
// This function has been created to be able to add defer within the for loop
337+
func (tb *TelemetryBuffer) startAndConnectTelemetryService(telemetryNumRetries, telemetryWaitTimeInMilliseconds int, netPlugin *cni.Plugin, path string, args []string) {
338+
if err := tb.Connect(); err != nil {
339+
log.Logf("Connection to telemetry socket failed: %v", err)
340+
if runtime.GOOS == "windows" {
341+
if err = netPlugin.LockKeyValueStore(); err != nil {
342+
log.Logf("lock acquire error: %v", err)
344343
}
345-
WaitForTelemetrySocket(telemetryNumRetries, time.Duration(telemetryWaitTimeInMilliseconds))
346-
if runtime.GOOS == "windows" {
344+
defer func() {
347345
if err = netPlugin.UnLockKeyValueStore(); err != nil {
348346
log.Logf("failed to relinquish lock error: %v", err)
349-
return errors.Wrap(err, "failed to relinquish lock error")
350347
}
351-
}
352-
} else {
353-
tb.Connected = true
354-
log.Logf("Connected to telemetry service")
355-
return nil
348+
}()
349+
}
350+
if err = tb.Cleanup(FdName); err != nil {
351+
log.Logf("cleanup failed: %v", err)
356352
}
353+
if err = StartTelemetryService(path, args); err != nil {
354+
log.Logf("StartTelemetryService failed: %v", err)
355+
}
356+
WaitForTelemetrySocket(telemetryNumRetries, time.Duration(telemetryWaitTimeInMilliseconds))
357+
} else {
358+
tb.Connected = true
359+
log.Logf("Connected to telemetry service")
357360
}
358-
return nil
359361
}
360362

361363
func getTelemetryServiceDirectory() (path string, dir string) {

0 commit comments

Comments
 (0)