Configurable clustername

- Configurable clustername for ZooKeeper, Hazelcast, RAMCloud

Change-Id: I2862c7667ece21733f95b25fad3840777314170d
diff --git a/src/main/java/net/onrc/onos/core/registry/ZookeeperRegistry.java b/src/main/java/net/onrc/onos/core/registry/ZookeeperRegistry.java
index 38ca110..7bc2a75 100644
--- a/src/main/java/net/onrc/onos/core/registry/ZookeeperRegistry.java
+++ b/src/main/java/net/onrc/onos/core/registry/ZookeeperRegistry.java
@@ -68,7 +68,12 @@
     // configuration parameter
     private String connectionString = "localhost:2181";
 
-    private static final String NAMESPACE = "onos";
+    /**
+     * JVM Option to specify ZooKeeper namespace.
+     */
+    public static final String ZK_NAMESPACE_KEY = "zookeeper.namespace";
+    private static final String DEFAULT_NAMESPACE = "onos";
+    private String namespace = DEFAULT_NAMESPACE;
     private static final String SWITCH_LATCHES_PATH = "/switches";
     private static final String CLUSTER_LEADER_PATH = "/cluster/leader";
 
@@ -570,6 +575,12 @@
         }
         log.info("Setting Zookeeper connection string to {}", this.connectionString);
 
+        namespace = System.getProperty(ZK_NAMESPACE_KEY, DEFAULT_NAMESPACE).trim();
+        if (namespace.isEmpty()) {
+            namespace = DEFAULT_NAMESPACE;
+        }
+        log.info("Setting Zookeeper namespace to {}", namespace);
+
         restApi = context.getServiceImpl(IRestApiService.class);
 
         switches = new ConcurrentHashMap<String, SwitchLeadershipData>();
@@ -581,7 +592,7 @@
                 SESSION_TIMEOUT, CONNECTION_TIMEOUT, retryPolicy);
 
         curatorFrameworkClient.start();
-        curatorFrameworkClient = curatorFrameworkClient.usingNamespace(NAMESPACE);
+        curatorFrameworkClient = curatorFrameworkClient.usingNamespace(namespace);
 
         distributedIdCounter = new DistributedAtomicLong(
                 curatorFrameworkClient,