[WIP] Upgrade ONOS to karaf version 4.2.1

Change-Id: I7cd40c995bdf1c80f94b1895fb3344e32404c7fa
diff --git a/core/net/src/main/java/org/onosproject/cluster/impl/ClusterMetadataManager.java b/core/net/src/main/java/org/onosproject/cluster/impl/ClusterMetadataManager.java
index 7dbf139..b242a3c 100644
--- a/core/net/src/main/java/org/onosproject/cluster/impl/ClusterMetadataManager.java
+++ b/core/net/src/main/java/org/onosproject/cluster/impl/ClusterMetadataManager.java
@@ -15,20 +15,8 @@
  */
 package org.onosproject.cluster.impl;
 
-import java.net.Inet4Address;
-import java.net.InetAddress;
-import java.net.MalformedURLException;
-import java.net.NetworkInterface;
-import java.net.SocketException;
-import java.net.URL;
-import java.net.UnknownHostException;
-import java.util.Enumeration;
-
-import org.apache.felix.scr.annotations.Activate;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Deactivate;
-import org.apache.felix.scr.annotations.Service;
 import org.onlab.packet.IpAddress;
+import org.onlab.util.Tools;
 import org.onosproject.cluster.ClusterMetadata;
 import org.onosproject.cluster.ClusterMetadataAdminService;
 import org.onosproject.cluster.ClusterMetadataEvent;
@@ -41,11 +29,26 @@
 import org.onosproject.cluster.DefaultControllerNode;
 import org.onosproject.cluster.NodeId;
 import org.onosproject.cluster.PartitionId;
+import org.onosproject.event.EventDeliveryService;
 import org.onosproject.net.provider.AbstractListenerProviderRegistry;
 import org.onosproject.net.provider.AbstractProviderService;
 import org.onosproject.store.service.Versioned;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferenceCardinality;
 import org.slf4j.Logger;
 
+import java.net.Inet4Address;
+import java.net.InetAddress;
+import java.net.MalformedURLException;
+import java.net.NetworkInterface;
+import java.net.SocketException;
+import java.net.URL;
+import java.net.UnknownHostException;
+import java.util.Enumeration;
+
 import static com.google.common.base.Preconditions.checkNotNull;
 import static org.onosproject.security.AppGuard.checkPermission;
 import static org.onosproject.security.AppPermission.Type.CLUSTER_READ;
@@ -54,8 +57,7 @@
 /**
  * Implementation of ClusterMetadataService.
  */
-@Component(immediate = true)
-@Service
+@Component(immediate = true, service = {ClusterMetadataService.class, ClusterMetadataAdminService.class, ClusterMetadataProviderRegistry.class})
 public class ClusterMetadataManager
     extends AbstractListenerProviderRegistry<ClusterMetadataEvent,
                                              ClusterMetadataEventListener,
@@ -63,6 +65,9 @@
                                              ClusterMetadataProviderService>
     implements ClusterMetadataService, ClusterMetadataAdminService, ClusterMetadataProviderRegistry {
 
+    private static final int MAX_WAIT_TRIES = 600;
+    private static final int MAX_WAIT_MS = 100;
+
     private final Logger log = getLogger(getClass());
     private ControllerNode localNode;
 
@@ -82,10 +87,21 @@
     @Override
     public ClusterMetadata getClusterMetadata() {
         checkPermission(CLUSTER_READ);
+        waitForAvailableProvider();
         Versioned<ClusterMetadata> metadata = getProvider().getClusterMetadata();
         return metadata.value();
     }
 
+    // FIXME: Temporary hack to navigate around bootstrap timing issue
+    private void waitForAvailableProvider() {
+        for (int i = 0; i < MAX_WAIT_TRIES && getProvider() == null; i++) {
+            Tools.delay(MAX_WAIT_MS);
+        }
+        if (getProvider() == null) {
+            log.error("Unable to find cluster metadata provider");
+            throw new IllegalStateException("Unable to find cluster metadata provider");
+        }
+    }
 
     @Override
     protected ClusterMetadataProviderService createProviderService(