@@ -27,6 +27,7 @@ const (
2727 pluginName = "CNI"
2828 telemetryNumRetries = 5
2929 telemetryWaitTimeInMilliseconds = 200
30+ name = "azure-vnet"
3031)
3132
3233// Version is populated by make during build.
@@ -48,26 +49,13 @@ func printVersion() {
4849 fmt .Printf ("Azure CNI Version %v\n " , version )
4950}
5051
51- // If report write succeeded, mark the report flag state to false.
52- func markSendReport (reportManager * telemetry.ReportManager , tb * telemetry.TelemetryBuffer ) {
53- if err := reportManager .SetReportState (telemetry .CNITelemetryFile ); err != nil {
54- log .Printf ("SetReportState failed due to %v" , err )
55- reflect .ValueOf (reportManager .Report ).Elem ().FieldByName ("ErrorMessage" ).SetString (err .Error ())
56-
57- if err := reportManager .SendReport (tb ); err != nil {
58- log .Printf ("SendReport failed due to %v" , err )
59- }
60- }
61- }
62-
6352// send error report to hostnetagent if CNI encounters any error.
6453func reportPluginError (reportManager * telemetry.ReportManager , tb * telemetry.TelemetryBuffer , err error ) {
6554 log .Printf ("Report plugin error" )
66- reportManager .Report .(* telemetry.CNIReport ).GetReport (pluginName , version , ipamQueryURL )
6755 reflect .ValueOf (reportManager .Report ).Elem ().FieldByName ("ErrorMessage" ).SetString (err .Error ())
6856
6957 if err := reportManager .SendReport (tb ); err != nil {
70- log .Printf ("SendReport failed due to %v" , err )
58+ log .Errorf ("SendReport failed due to %v" , err )
7159 }
7260}
7361
@@ -152,6 +140,15 @@ func main() {
152140 err error
153141 )
154142
143+ log .SetName (name )
144+ log .SetLevel (log .LevelInfo )
145+ if err = log .SetTarget (log .TargetLogfile ); err != nil {
146+ fmt .Printf ("Failed to setup cni logging: %v\n " , err )
147+ return
148+ }
149+
150+ defer log .Close ()
151+
155152 config .Version = version
156153 reportManager := & telemetry.ReportManager {
157154 HostNetAgentURL : hostNetAgentURL ,
@@ -171,45 +168,40 @@ func main() {
171168 cniReport .VMUptime = upTime .Format ("2006-01-02 15:04:05" )
172169 }
173170
174- tb := telemetry .NewTelemetryBuffer ("" )
175- tb .ConnectToTelemetryService (telemetryNumRetries , telemetryWaitTimeInMilliseconds )
176- defer tb .Close ()
177-
178- t := time .Now ()
179- cniReport .Timestamp = t .Format ("2006-01-02 15:04:05" )
180171 cniReport .GetReport (pluginName , version , ipamQueryURL )
181-
182- if ! reportManager .GetReportState (telemetry .CNITelemetryFile ) {
183- log .Printf ("GetReport state file didn't exist. Setting flag to true" )
184-
185- err = reportManager .SendReport (tb )
186- if err != nil {
187- log .Printf ("SendReport failed due to %v" , err )
188- } else {
189- markSendReport (reportManager , tb )
190- }
191- }
192-
193172 startTime := time .Now ().UnixNano () / int64 (time .Millisecond )
194173
195- netPlugin , err := network .NewPlugin (& config )
174+ netPlugin , err := network .NewPlugin (name , & config )
196175 if err != nil {
197176 log .Printf ("Failed to create network plugin, err:%v.\n " , err )
198- reportPluginError (reportManager , tb , err )
199177 return
200178 }
201179
202180 netPlugin .SetCNIReport (cniReport )
203181
182+ // CNI Acquires lock
204183 if err = netPlugin .Plugin .InitializeKeyValueStore (& config ); err != nil {
205- log .Printf ("Failed to initialize key-value store of network plugin, err:%v.\n " , err )
206- reportPluginError (reportManager , tb , err )
184+ log .Errorf ("Failed to initialize key-value store of network plugin, err:%v.\n " , err )
185+ tb := telemetry .NewTelemetryBuffer ("" )
186+ if tberr := tb .Connect (); tberr == nil {
187+ reportPluginError (reportManager , tb , err )
188+ tb .Close ()
189+ }
207190 return
208191 }
209192
193+ // Start telemetry process if not already started. This should be done inside lock, otherwise multiple process
194+ // end up creating/killing telemetry process results in undesired state.
195+ tb := telemetry .NewTelemetryBuffer ("" )
196+ tb .ConnectToTelemetryService (telemetryNumRetries , telemetryWaitTimeInMilliseconds )
197+ defer tb .Close ()
198+
199+ t := time .Now ()
200+ cniReport .Timestamp = t .Format ("2006-01-02 15:04:05" )
201+
210202 defer func () {
211203 if errUninit := netPlugin .Plugin .UninitializeKeyValueStore (); errUninit != nil {
212- log .Printf ("Failed to uninitialize key-value store of network plugin, err:%v.\n " , err )
204+ log .Errorf ("Failed to uninitialize key-value store of network plugin, err:%v.\n " , errUninit )
213205 }
214206
215207 if recover () != nil {
@@ -218,7 +210,7 @@ func main() {
218210 }()
219211
220212 if err = netPlugin .Start (& config ); err != nil {
221- log .Printf ("Failed to start network plugin, err:%v.\n " , err )
213+ log .Errorf ("Failed to start network plugin, err:%v.\n " , err )
222214 reportPluginError (reportManager , tb , err )
223215 panic ("network plugin start fatal error" )
224216 }
@@ -227,14 +219,19 @@ func main() {
227219 if handled == true {
228220 log .Printf ("CNI UPDATE finished." )
229221 } else if err = netPlugin .Execute (cni .PluginApi (netPlugin )); err != nil {
230- log .Printf ("Failed to execute network plugin, err:%v.\n " , err )
222+ log .Errorf ("Failed to execute network plugin, err:%v.\n " , err )
231223 }
232224
233225 endTime := time .Now ().UnixNano () / int64 (time .Millisecond )
234226 reflect .ValueOf (reportManager .Report ).Elem ().FieldByName ("OperationDuration" ).SetInt (int64 (endTime - startTime ))
235227
236228 netPlugin .Stop ()
237229
230+ // release cni lock
231+ if errUninit := netPlugin .Plugin .UninitializeKeyValueStore (); errUninit != nil {
232+ log .Errorf ("Failed to uninitialize key-value store of network plugin, err:%v.\n " , errUninit )
233+ }
234+
238235 if err != nil {
239236 reportPluginError (reportManager , tb , err )
240237 panic ("network plugin execute fatal error" )
@@ -244,9 +241,9 @@ func main() {
244241 reflect .ValueOf (reportManager .Report ).Elem ().FieldByName ("CniSucceeded" ).SetBool (true )
245242
246243 if err = reportManager .SendReport (tb ); err != nil {
247- log .Printf ("SendReport failed due to %v" , err )
244+ log .Errorf ("SendReport failed due to %v" , err )
248245 } else {
249246 log .Printf ("Sending report succeeded" )
250- markSendReport (reportManager , tb )
251247 }
248+
252249}
0 commit comments