public static void main (String[] argv) {
        
        String configFile = (argv.length == 0) ? null : argv[0];
        log.info("Starting the AetherNode");
        ConfigMgr.initConfig(configFile);
        
        
        if (ConfigMgr.getIfDebug()) {
            log.setLevel(Level.FINE);
        }
            
        try {
            ClusterMgr clusterManager = ClusterMgr.getInstance();
            DataMgr dataManager = new DataMgr();
            Thread clusterMgrThread = new Thread(clusterManager);
            Thread dataMgrThread = new Thread(dataManager);
            
            log.fine("Launching cluster manager");
            clusterMgrThread.start();
            
            while (true) {
                /* Wait for cluster manager to come up. We can then procceed
                 * to start data manager
                 */

                try {
                    if (clusterUp) {
                        log.fine("Launching data manager");
                        dataMgrThread.start();
                        break;
                    } else {
                        Thread.sleep(500);
                    }
                } catch (InterruptedException ex) {
                    // nothing to do here
                }
            }
            
            Replication repl = Replication.getInstance();
            
        } catch (UnsupportedOperationException ex) {
            // This means cluster manager is already running. No worries then.
        } catch (SocketException ex) {
            log.severe("Could not start cluster manager");
        } catch (IOException ex) {
            log.severe("Could not start data manager");
        }
    }