[SDFAB-642][SDFAB-643] Fix device disconnection when an instance rejoins

Changes in the GDP are done to make sure the default availability is always
updated through the two step process defined in the provider and to prevent
the disconnection of the devices when an instance rejoins the cluster

Finally, the patch improves logging inside the GossipDeviceStore and improve
the stability of PiPipeconfWatchdogManager by getting rid of the timer and
timer task and by executing the event listeners inside an executor.

Change-Id: Ibc6ce711e15e86bde05dbf3b1c37d2a93516fae3
diff --git a/core/api/src/main/java/org/onosproject/net/device/DefaultDeviceDescription.java b/core/api/src/main/java/org/onosproject/net/device/DefaultDeviceDescription.java
index d0b7b2b..271e678 100644
--- a/core/api/src/main/java/org/onosproject/net/device/DefaultDeviceDescription.java
+++ b/core/api/src/main/java/org/onosproject/net/device/DefaultDeviceDescription.java
@@ -217,6 +217,7 @@
                 .add("hw", hwVersion).add("sw", swVersion)
                 .add("serial", serialNumber)
                 .add("chassisId", chassisId)
+                .add("defaultAvailable", defaultAvailable)
                 .add("annotations", annotations())
                 .toString();
     }
diff --git a/core/api/src/main/java/org/onosproject/net/device/DeviceProviderService.java b/core/api/src/main/java/org/onosproject/net/device/DeviceProviderService.java
index b00fa63..f11f0cc 100644
--- a/core/api/src/main/java/org/onosproject/net/device/DeviceProviderService.java
+++ b/core/api/src/main/java/org/onosproject/net/device/DeviceProviderService.java
@@ -105,4 +105,14 @@
      */
     void updatePortStatistics(DeviceId deviceId, Collection<PortStatistics> portStatistics);
 
+    /**
+     * Returns the specified device description.
+     *
+     * @param deviceId device identifier
+     * @return device description or null if not present
+     */
+    default DeviceDescription getDeviceDescription(DeviceId deviceId) {
+        return null;
+    }
+
 }
diff --git a/core/api/src/main/java/org/onosproject/net/device/DeviceStore.java b/core/api/src/main/java/org/onosproject/net/device/DeviceStore.java
index bd59838..ed5d33d 100644
--- a/core/api/src/main/java/org/onosproject/net/device/DeviceStore.java
+++ b/core/api/src/main/java/org/onosproject/net/device/DeviceStore.java
@@ -208,6 +208,17 @@
     PortDescription getPortDescription(ProviderId providerId, DeviceId deviceId, PortNumber portNumber);
 
     /**
+     * Returns the specified device description.
+     *
+     * @param providerId provider identifier
+     * @param deviceId device identifier
+     * @return device description or null if not present
+     */
+    default DeviceDescription getDeviceDescription(ProviderId providerId, DeviceId deviceId) {
+        return null;
+    }
+
+    /**
      * Indicates whether the specified device is available/online.
      *
      * @param deviceId device identifier