Fix: re-instantiate the k8s watcher on receiving onclose event

Change-Id: Id7c1fa3124e3cfaccad4dae5c993d2a2f76d964f
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtPodWatcher.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtPodWatcher.java
index c792bef..c24356f 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtPodWatcher.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtPodWatcher.java
@@ -99,6 +99,14 @@
         log.info("Stopped");
     }
 
+    private void instantiatePodWatcher() {
+        KubernetesClient client = k8sClient(kubevirtApiConfigService);
+
+        if (client != null) {
+            client.pods().inAnyNamespace().watch(internalKubevirtPodWatcher);
+        }
+    }
+
     private class InternalKubevirtApiConfigListener implements KubevirtApiConfigListener {
 
         private boolean isRelevantHelper() {
@@ -125,11 +133,7 @@
                 return;
             }
 
-            KubernetesClient client = k8sClient(kubevirtApiConfigService);
-
-            if (client != null) {
-                client.pods().inAnyNamespace().watch(internalKubevirtPodWatcher);
-            }
+            instantiatePodWatcher();
         }
     }
 
@@ -157,7 +161,11 @@
 
         @Override
         public void onClose(WatcherException e) {
-            log.warn("Pod watcher OnClose", e);
+            // due to the bugs in fabric8, pod watcher might be closed,
+            // we will re-instantiate the pod watcher in this case
+            // FIXME: https://github.com/fabric8io/kubernetes-client/issues/2135
+            log.warn("Pod watcher OnClose, re-instantiate the POD watcher...");
+            instantiatePodWatcher();
         }
 
         private void processAddition(Pod pod) {
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/NetworkAttachmentDefinitionWatcher.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/NetworkAttachmentDefinitionWatcher.java
index bae08bc..32bed58 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/NetworkAttachmentDefinitionWatcher.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/NetworkAttachmentDefinitionWatcher.java
@@ -138,6 +138,18 @@
         log.info("Stopped");
     }
 
+    private void instantiateWatcher() {
+        KubernetesClient client = k8sClient(configService);
+
+        if (client != null) {
+            try {
+                client.customResource(nadCrdCxt).watch(watcher);
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
     private class InternalKubevirtApiConfigListener implements KubevirtApiConfigListener {
 
         private boolean isRelevantHelper() {
@@ -164,15 +176,7 @@
                 return;
             }
 
-            KubernetesClient client = k8sClient(configService);
-
-            if (client != null) {
-                try {
-                    client.customResource(nadCrdCxt).watch(watcher);
-                } catch (IOException e) {
-                    e.printStackTrace();
-                }
-            }
+            instantiateWatcher();
         }
     }
 
@@ -201,7 +205,12 @@
 
         @Override
         public void onClose(WatcherException e) {
-            log.warn("Network-attachment-definition watcher OnClose", e);
+            // due to the bugs in fabric8, the watcher might be closed,
+            // we will re-instantiate the watcher in this case
+            // FIXME: https://github.com/fabric8io/kubernetes-client/issues/2135
+            log.warn("Network-attachment-definition watcher OnClose, re-instantiate the watcher...");
+
+            instantiateWatcher();
         }
 
         private void processAddition(String resource) {