Cleanup a few of the CORD apps.

* Removed or turned per-packet logs down to trace in the PIM app
* Can now reconfigure remote sync host in CordMcast
* CordMcast catches REST exceptions rather than bombing

Change-Id: Iae027d5ce1d9047827ea80b071dc77ca49c65206
diff --git a/src/main/java/org/onosproject/cordmcast/CordMcast.java b/src/main/java/org/onosproject/cordmcast/CordMcast.java
index 565d76b..76c6fd2 100644
--- a/src/main/java/org/onosproject/cordmcast/CordMcast.java
+++ b/src/main/java/org/onosproject/cordmcast/CordMcast.java
@@ -21,6 +21,7 @@
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.sun.jersey.api.client.Client;
+import com.sun.jersey.api.client.ClientHandlerException;
 import com.sun.jersey.api.client.WebResource;
 import com.sun.jersey.api.client.filter.HTTPBasicAuthFilter;
 import org.apache.felix.scr.annotations.Activate;
@@ -83,6 +84,7 @@
 @Component(immediate = true)
 public class CordMcast {
 
+    private static final int DEFAULT_REST_TIMEOUT_MS = 2000;
     private static final int DEFAULT_PRIORITY = 1000;
     private static final short DEFAULT_MCAST_VLAN = 4000;
     private static final String DEFAULT_SYNC_HOST = "10.90.0.8:8181";
@@ -149,8 +151,6 @@
 
         appId = coreService.registerApplication("org.onosproject.cordmcast");
 
-        fabricOnosUrl = "http://" + syncHost + "/onos/v1/mcast";
-
         clearRemoteRoutes();
 
         mcastService.addListener(listener);
@@ -192,7 +192,7 @@
             s = get(properties, "priority");
             priority = isNullOrEmpty(s) ? DEFAULT_PRIORITY : Integer.parseInt(s.trim());
 
-            s = get(properties, syncHost);
+            s = get(properties, "syncHost");
             syncHost = isNullOrEmpty(s) ? DEFAULT_SYNC_HOST : s.trim();
         } catch (Exception e) {
             user = DEFAULT_USER;
@@ -202,6 +202,11 @@
             vlanEnabled = false;
             priority = DEFAULT_PRIORITY;
         }
+        fabricOnosUrl = createRemoteUrl(syncHost);
+    }
+
+    private static String createRemoteUrl(String remoteHost) {
+        return "http://" + remoteHost + "/onos/v1/mcast";
     }
 
     private class InternalMulticastListener implements McastListener {
@@ -369,13 +374,18 @@
             return;
         }
 
-        log.debug("Sending route to other ONOS: {}", route);
+        log.debug("Sending route {} to other ONOS {}", route, fabricOnosUrl);
 
         WebResource.Builder builder = getClientBuilder(fabricOnosUrl);
 
         ObjectNode json = codecService.getCodec(McastRoute.class)
                 .encode(route, new AbstractWebResource());
-        builder.post(json.toString());
+
+        try {
+            builder.post(json.toString());
+        } catch (ClientHandlerException e) {
+            log.warn("Unable to send route to remote controller: {}", e.getMessage());
+        }
     }
 
     private void removeRemoteRoute(McastRoute route) {
@@ -384,13 +394,17 @@
             return;
         }
 
-        log.debug("Removing route from other ONOS: {}", route);
+        log.debug("Removing route {} from other ONOS {}", route, fabricOnosUrl);
 
         WebResource.Builder builder = getClientBuilder(fabricOnosUrl);
 
         ObjectNode json = codecService.getCodec(McastRoute.class)
                 .encode(route, new AbstractWebResource());
-        builder.delete(json.toString());
+        try {
+            builder.delete(json.toString());
+        } catch (ClientHandlerException e) {
+            log.warn("Unable to delete route from remote controller: {}", e.getMessage());
+        }
     }
 
     private void clearRemoteRoutes() {
@@ -399,23 +413,28 @@
             return;
         }
 
-        log.debug("Clearing remote multicast routes");
+        log.debug("Clearing remote multicast routes from {}", fabricOnosUrl);
 
         WebResource.Builder builder = getClientBuilder(fabricOnosUrl);
-
-        String response = builder
-                .accept(MediaType.APPLICATION_JSON_TYPE)
-                .get(String.class);
-
-        JsonCodec<McastRoute> routeCodec = codecService.getCodec(McastRoute.class);
-        ObjectMapper mapper = new ObjectMapper();
         List<McastRoute> mcastRoutes = Lists.newArrayList();
+
         try {
+            String response = builder
+                    .accept(MediaType.APPLICATION_JSON_TYPE)
+                    .get(String.class);
+
+            JsonCodec<McastRoute> routeCodec = codecService.getCodec(McastRoute.class);
+            ObjectMapper mapper = new ObjectMapper();
+
+
             ObjectNode node = (ObjectNode) mapper.readTree(response);
             ArrayNode list = (ArrayNode) node.path("routes");
 
             list.forEach(n -> mcastRoutes.add(
                     routeCodec.decode((ObjectNode) n, new AbstractWebResource())));
+
+        } catch (ClientHandlerException e) {
+            log.warn("Unable to clear routes from remote controller: {}", e.getMessage());
         } catch (IOException e) {
             log.warn("Error clearing remote routes", e);
         }
@@ -429,6 +448,8 @@
 
     private WebResource.Builder getClientBuilder(String uri) {
         Client client = Client.create();
+        client.setConnectTimeout(DEFAULT_REST_TIMEOUT_MS);
+        client.setReadTimeout(DEFAULT_REST_TIMEOUT_MS);
         client.addFilter(new HTTPBasicAuthFilter(user, password));
         WebResource resource = client.resource(uri);
         return resource.accept(JSON_UTF_8.toString())