@@ -34,6 +34,18 @@ func NewPlugin(name, version string) (*Plugin, error) {
3434 return nil , err
3535 }
3636
37+ // Initialize logging.
38+ log .SetName (plugin .Name )
39+ log .SetLevel (log .LevelInfo )
40+ err = log .SetTarget (log .TargetLogfile )
41+ if err != nil {
42+ log .Printf ("[cni] Failed to configure logging, err:%v.\n " , err )
43+ return & Plugin {
44+ Plugin : plugin ,
45+ version : version ,
46+ }, err
47+ }
48+
3749 return & Plugin {
3850 Plugin : plugin ,
3951 version : version ,
@@ -45,14 +57,6 @@ func (plugin *Plugin) Initialize(config *common.PluginConfig) error {
4557 // Initialize the base plugin.
4658 plugin .Plugin .Initialize (config )
4759
48- // Initialize logging.
49- log .SetName (plugin .Name )
50- log .SetLevel (log .LevelInfo )
51- err := log .SetTarget (log .TargetLogfile )
52- if err != nil {
53- log .Printf ("[cni] Failed to configure logging, err:%v.\n " , err )
54- return err
55- }
5660 return nil
5761}
5862
@@ -164,6 +168,21 @@ func (plugin *Plugin) InitializeKeyValueStore(config *common.PluginConfig) error
164168 log .Printf ("[cni] Failed to create store: %v." , err )
165169 return err
166170 }
171+
172+ // Force unlock the json store if the lock file is left on the node after reboot
173+ if lockFileModTime , err := plugin .Store .GetLockFileModificationTime (); err == nil {
174+ rebootTime , err := platform .GetLastRebootTime ()
175+ log .Printf ("[cni] reboot time %v storeLockFile mod time %v" , rebootTime , lockFileModTime )
176+ if err == nil && rebootTime .After (lockFileModTime ) {
177+ log .Printf ("[cni] Detected Reboot" )
178+
179+ if err := plugin .Store .Unlock (true ); err != nil {
180+ log .Printf ("[cni] Failed to force unlock store due to error %v" , err )
181+ } else {
182+ log .Printf ("[cni] Force unlocked the store successfully" )
183+ }
184+ }
185+ }
167186 }
168187
169188 // Acquire store lock.
@@ -180,7 +199,7 @@ func (plugin *Plugin) InitializeKeyValueStore(config *common.PluginConfig) error
180199// Uninitialize key-value store
181200func (plugin * Plugin ) UninitializeKeyValueStore () error {
182201 if plugin .Store != nil {
183- err := plugin .Store .Unlock ()
202+ err := plugin .Store .Unlock (false )
184203 if err != nil {
185204 log .Printf ("[cni] Failed to unlock store: %v." , err )
186205 return err
0 commit comments