You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zookeeper.apache.org by ma...@apache.org on 2008/11/18 18:23:10 UTC

svn commit: r718659 - in /hadoop/zookeeper/branches/branch-3.0: ./ src/java/jmx/org/apache/zookeeper/server/ src/java/jmx/org/apache/zookeeper/server/quorum/ src/java/main/org/apache/zookeeper/server/ src/java/main/org/apache/zookeeper/server/quorum/

Author: mahadev
Date: Tue Nov 18 09:23:10 2008
New Revision: 718659

URL: http://svn.apache.org/viewvc?rev=718659&view=rev
Log:
ZOOKEEPER-217. Fix errors in config to be thrown as Exceptions. (mahadev)

Modified:
    hadoop/zookeeper/branches/branch-3.0/CHANGES.txt
    hadoop/zookeeper/branches/branch-3.0/src/java/jmx/org/apache/zookeeper/server/ManagedZooKeeperServerMain.java
    hadoop/zookeeper/branches/branch-3.0/src/java/jmx/org/apache/zookeeper/server/quorum/ManagedQuorumPeerMain.java
    hadoop/zookeeper/branches/branch-3.0/src/java/main/org/apache/zookeeper/server/ServerConfig.java
    hadoop/zookeeper/branches/branch-3.0/src/java/main/org/apache/zookeeper/server/ZooKeeperServerMain.java
    hadoop/zookeeper/branches/branch-3.0/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeerConfig.java
    hadoop/zookeeper/branches/branch-3.0/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeerMain.java

Modified: hadoop/zookeeper/branches/branch-3.0/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/branches/branch-3.0/CHANGES.txt?rev=718659&r1=718658&r2=718659&view=diff
==============================================================================
--- hadoop/zookeeper/branches/branch-3.0/CHANGES.txt (original)
+++ hadoop/zookeeper/branches/branch-3.0/CHANGES.txt Tue Nov 18 09:23:10 2008
@@ -15,6 +15,8 @@
 
    ZOOKEEPER-219. fix events.poll timeout in watcher test to be longer. (pat
 via mahadev)
+   
+   ZOOKEEPER-217. Fix errors in config to be thrown as Exceptions. (mahadev)
 
 Release 3.0.0 - 2008-10-21
 

Modified: hadoop/zookeeper/branches/branch-3.0/src/java/jmx/org/apache/zookeeper/server/ManagedZooKeeperServerMain.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/branches/branch-3.0/src/java/jmx/org/apache/zookeeper/server/ManagedZooKeeperServerMain.java?rev=718659&r1=718658&r2=718659&view=diff
==============================================================================
--- hadoop/zookeeper/branches/branch-3.0/src/java/jmx/org/apache/zookeeper/server/ManagedZooKeeperServerMain.java (original)
+++ hadoop/zookeeper/branches/branch-3.0/src/java/jmx/org/apache/zookeeper/server/ManagedZooKeeperServerMain.java Tue Nov 18 09:23:10 2008
@@ -23,6 +23,7 @@
 import java.io.File;
 import java.io.IOException;
 
+import org.apache.log4j.Logger;
 import org.apache.zookeeper.jmx.server.ConnectionMXBean;
 import org.apache.zookeeper.jmx.server.DataTreeMXBean;
 import org.apache.zookeeper.jmx.server.ZooKeeperServerMXBean;
@@ -53,6 +54,7 @@
  */
 public class ManagedZooKeeperServerMain extends ZooKeeperServerMain {
     
+    private static final Logger LOG = Logger.getLogger(ManagedZooKeeperServerMain.class);
     /**
      * To start the server specify the client port number and the data directory
      * on the command line.
@@ -60,7 +62,12 @@
      * @param args command line parameters.
      */
     public static void main(String[] args) {
-        ServerConfig.parse(args);
+        try {
+            ServerConfig.parse(args);
+        } catch(Exception e) {
+            LOG.fatal("Error in config", e);
+            System.exit(2);
+        }
         ZooKeeperObserverManager.setAsConcrete();
         runStandalone(new ZooKeeperServer.Factory() {
             public NIOServerCnxn.Factory createConnectionFactory()throws IOException {

Modified: hadoop/zookeeper/branches/branch-3.0/src/java/jmx/org/apache/zookeeper/server/quorum/ManagedQuorumPeerMain.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/branches/branch-3.0/src/java/jmx/org/apache/zookeeper/server/quorum/ManagedQuorumPeerMain.java?rev=718659&r1=718658&r2=718659&view=diff
==============================================================================
--- hadoop/zookeeper/branches/branch-3.0/src/java/jmx/org/apache/zookeeper/server/quorum/ManagedQuorumPeerMain.java (original)
+++ hadoop/zookeeper/branches/branch-3.0/src/java/jmx/org/apache/zookeeper/server/quorum/ManagedQuorumPeerMain.java Tue Nov 18 09:23:10 2008
@@ -85,7 +85,12 @@
             ManagedZooKeeperServerMain.main(args);
             return;
         }
-        QuorumPeerConfig.parse(args);
+        try {
+            QuorumPeerConfig.parse(args);
+        } catch(Exception e) {
+            LOG.fatal("Error in config ", e);
+            System.exit(2);
+        }
         if (!QuorumPeerConfig.isStandalone()) {
             ZooKeeperObserverManager.setAsConcrete();
             runPeer(new QuorumPeer.Factory() {

Modified: hadoop/zookeeper/branches/branch-3.0/src/java/main/org/apache/zookeeper/server/ServerConfig.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/branches/branch-3.0/src/java/main/org/apache/zookeeper/server/ServerConfig.java?rev=718659&r1=718658&r2=718659&view=diff
==============================================================================
--- hadoop/zookeeper/branches/branch-3.0/src/java/main/org/apache/zookeeper/server/ServerConfig.java (original)
+++ hadoop/zookeeper/branches/branch-3.0/src/java/main/org/apache/zookeeper/server/ServerConfig.java Tue Nov 18 09:23:10 2008
@@ -51,18 +51,16 @@
     
     protected static ServerConfig instance=null;
     
-    public static void parse(String[] args) {
+    public static void parse(String[] args) throws Exception {
         if(instance!=null)
             return;
         if (args.length != 2) {
-            System.err.println("USAGE: ZooKeeperServer port datadir\n");
-            System.exit(2);
+            throw new IllegalArgumentException("Invalid usage.");
         }
         try {
               instance=new ServerConfig(Integer.parseInt(args[0]),args[1],args[1]);
         } catch (NumberFormatException e) {
-            System.err.println(args[0] + " is not a valid port number");
-            System.exit(2);
+            throw new IllegalArgumentException(args[0] + " is not a valid port number");
         }
     }
 

Modified: hadoop/zookeeper/branches/branch-3.0/src/java/main/org/apache/zookeeper/server/ZooKeeperServerMain.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/branches/branch-3.0/src/java/main/org/apache/zookeeper/server/ZooKeeperServerMain.java?rev=718659&r1=718658&r2=718659&view=diff
==============================================================================
--- hadoop/zookeeper/branches/branch-3.0/src/java/main/org/apache/zookeeper/server/ZooKeeperServerMain.java (original)
+++ hadoop/zookeeper/branches/branch-3.0/src/java/main/org/apache/zookeeper/server/ZooKeeperServerMain.java Tue Nov 18 09:23:10 2008
@@ -31,14 +31,20 @@
 public class ZooKeeperServerMain {
 
     private static final Logger LOG = Logger.getLogger(ZooKeeperServerMain.class);
-
+    private static final String USAGE = "Usage: ZooKeeperServerMain port datadir";
     /*
      * Start up the ZooKeeper server.
      *
      * @param args the port and data directory
      */
     public static void main(String[] args) {
-        ServerConfig.parse(args);
+        try {
+            ServerConfig.parse(args);
+        } catch(Exception e) {
+            LOG.fatal("Error in config", e);
+            LOG.info(USAGE);
+            System.exit(2);
+        }
         runStandalone(new ZooKeeperServer.Factory() {
             public NIOServerCnxn.Factory createConnectionFactory() throws IOException {
                 return new NIOServerCnxn.Factory(ServerConfig.getClientPort());

Modified: hadoop/zookeeper/branches/branch-3.0/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeerConfig.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/branches/branch-3.0/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeerConfig.java?rev=718659&r1=718658&r2=718659&view=diff
==============================================================================
--- hadoop/zookeeper/branches/branch-3.0/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeerConfig.java (original)
+++ hadoop/zookeeper/branches/branch-3.0/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeerConfig.java Tue Nov 18 09:23:10 2008
@@ -47,145 +47,137 @@
         super(port, dataDir, dataLogDir);
     }
 
-    public static void parse(String[] args) {
-        if(instance!=null)
+    public static void parse(String[] args) throws Exception {
+        if (instance != null)
             return;
-
+        if (args.length != 1) {
+            throw new IllegalArgumentException("Invalid usage.");
+        }
+        File zooCfgFile = new File(args[0]);
+        if (!zooCfgFile.exists()) {
+            throw new IllegalArgumentException(zooCfgFile.toString()
+                    + " file is missing");
+        }
+        Properties cfg = new Properties();
+        FileInputStream zooCfgStream = new FileInputStream(zooCfgFile);
         try {
-            if (args.length != 1) {
-                System.err.println("USAGE: configFile");
-                System.exit(2);
-            }
-            File zooCfgFile = new File(args[0]);
-            if (!zooCfgFile.exists()) {
-                LOG.error(zooCfgFile.toString() + " file is missing");
-                System.exit(2);
+            cfg.load(zooCfgStream);
+        } finally {
+            zooCfgStream.close();
+        }
+        HashMap<Long, QuorumServer> servers = new HashMap<Long, QuorumServer>();
+        String dataDir = null;
+        String dataLogDir = null;
+        int clientPort = 0;
+        int tickTime = 0;
+        int initLimit = 0;
+        int syncLimit = 0;
+        int electionAlg = 3;
+        int electionPort = 2182;
+        for (Entry<Object, Object> entry : cfg.entrySet()) {
+            String key = entry.getKey().toString();
+            String value = entry.getValue().toString();
+            if (key.equals("dataDir")) {
+                dataDir = value;
+            } else if (key.equals("dataLogDir")) {
+                dataLogDir = value;
+            } else if (key.equals("clientPort")) {
+                clientPort = Integer.parseInt(value);
+            } else if (key.equals("tickTime")) {
+                tickTime = Integer.parseInt(value);
+            } else if (key.equals("initLimit")) {
+                initLimit = Integer.parseInt(value);
+            } else if (key.equals("syncLimit")) {
+                syncLimit = Integer.parseInt(value);
+            } else if (key.equals("electionAlg")) {
+                electionAlg = Integer.parseInt(value);
+            } else if (key.startsWith("server.")) {
+                int dot = key.indexOf('.');
+                long sid = Long.parseLong(key.substring(dot + 1));
+                String parts[] = value.split(":");
+                if ((parts.length != 2) && (parts.length != 3)) {
+                    LOG
+                            .error(value
+                                    + " does not have the form host:port or host:port:port");
+                }
+                InetSocketAddress addr = new InetSocketAddress(parts[0],
+                        Integer.parseInt(parts[1]));
+                if (parts.length == 2)
+                    servers.put(Long.valueOf(sid), new QuorumServer(sid, addr));
+                else if (parts.length == 3) {
+                    InetSocketAddress electionAddr = new InetSocketAddress(
+                            parts[0], Integer.parseInt(parts[2]));
+                    servers.put(Long.valueOf(sid), new QuorumServer(sid, addr,
+                            electionAddr));
+                }
+            } else {
+                System.setProperty("zookeeper." + key, value);
             }
-            Properties cfg = new Properties();
-            FileInputStream zooCfgStream = new FileInputStream(zooCfgFile);
-            try {
-                cfg.load(zooCfgStream);
-            } finally {
-                zooCfgStream.close();
+        }
+        if (dataDir == null) {
+            throw new IllegalArgumentException("dataDir is not set");
+        }
+        if (dataLogDir == null) {
+            dataLogDir = dataDir;
+        } else {
+            if (!new File(dataLogDir).isDirectory()) {
+                throw new IllegalArgumentException("dataLogDir " + dataLogDir
+                        + " is missing.");
             }
-            HashMap<Long,QuorumServer> servers = new HashMap<Long,QuorumServer>();
-            String dataDir = null;
-            String dataLogDir = null;
-            int clientPort = 0;
-            int tickTime = 0;
-            int initLimit = 0;
-            int syncLimit = 0;
-            int electionAlg = 3;
-            int electionPort = 2182;
-            for (Entry<Object, Object> entry : cfg.entrySet()) {
-                String key = entry.getKey().toString();
-                String value = entry.getValue().toString();
-                if (key.equals("dataDir")) {
-                    dataDir = value;
-                } else if (key.equals("dataLogDir")) {
-                    dataLogDir = value;
-                } else if (key.equals("clientPort")) {
-                    clientPort = Integer.parseInt(value);
-                } else if (key.equals("tickTime")) {
-                    tickTime = Integer.parseInt(value);
-                } else if (key.equals("initLimit")) {
-                    initLimit = Integer.parseInt(value);
-                } else if (key.equals("syncLimit")) {
-                    syncLimit = Integer.parseInt(value);
-                } else if (key.equals("electionAlg")) {
-                    electionAlg = Integer.parseInt(value);
-                } else if (key.startsWith("server.")) {
-                    int dot = key.indexOf('.');
-                    long sid = Long.parseLong(key.substring(dot + 1));
-                    String parts[] = value.split(":");
-                    if ((parts.length != 2) && 
-                            (parts.length != 3)){
-                        LOG.error(value
-                                + " does not have the form host:port or host:port:port");
-                    }
-                    InetSocketAddress addr = new InetSocketAddress(parts[0],
-                            Integer.parseInt(parts[1])); 
-                    if(parts.length == 2)
-                        servers.put(Long.valueOf(sid), new QuorumServer(sid, addr));
-                    else if(parts.length == 3){
-                        InetSocketAddress electionAddr = new InetSocketAddress(parts[0],
-                                Integer.parseInt(parts[2]));
-                        servers.put(Long.valueOf(sid), new QuorumServer(sid, addr, electionAddr));
-                    }
-                } else {
-                    System.setProperty("zookeeper." + key, value);
+        }
+        if (clientPort == 0) {
+            throw new IllegalArgumentException("clientPort is not set");
+        }
+        if (tickTime == 0) {
+            throw new IllegalArgumentException("tickTime is not set");
+        }
+        if (servers.size() > 1 && initLimit == 0) {
+            throw new IllegalArgumentException("initLimit is not set");
+        }
+        if (servers.size() > 1 && syncLimit == 0) {
+            throw new IllegalArgumentException("syncLimit is not set");
+        }
+        QuorumPeerConfig conf = new QuorumPeerConfig(clientPort, dataDir,
+                dataLogDir);
+        conf.tickTime = tickTime;
+        conf.initLimit = initLimit;
+        conf.syncLimit = syncLimit;
+        conf.electionAlg = electionAlg;
+        conf.servers = servers;
+        if (servers.size() > 1) {
+            /*
+             * If using FLE, then every server requires a separate election
+             * port.
+             */
+            if (electionAlg != 0) {
+                for (QuorumServer s : servers.values()) {
+                    if (s.electionAddr == null)
+                        throw new IllegalArgumentException(
+                                "Missing election port for server: " + s.id);
                 }
             }
-            if (dataDir == null) {
-                LOG.error("dataDir is not set");
-                System.exit(2);
+
+            File myIdFile = new File(dataDir, "myid");
+            if (!myIdFile.exists()) {
+                throw new IllegalArgumentException(myIdFile.toString()
+                        + " file is missing");
             }
-            if (dataLogDir == null) {
-                dataLogDir = dataDir;
-            } else {
-                if (!new File(dataLogDir).isDirectory()) {
-                    LOG.error("dataLogDir " + dataLogDir+ " is missing.");
-                    System.exit(2);
-                }
+            BufferedReader br = new BufferedReader(new FileReader(myIdFile));
+            String myIdString;
+            try {
+                myIdString = br.readLine();
+            } finally {
+                br.close();
             }
-            if (clientPort == 0) {
-                LOG.error("clientPort is not set");
-                System.exit(2);
-            }
-            if (tickTime == 0) {
-                LOG.error("tickTime is not set");
-                System.exit(2);
-            }
-            if (servers.size() > 1 && initLimit == 0) {
-                LOG.error("initLimit is not set");
-                System.exit(2);
-            }
-            if (servers.size() > 1 && syncLimit == 0) {
-                LOG.error("syncLimit is not set");
-                System.exit(2);
-            }
-            QuorumPeerConfig conf = new QuorumPeerConfig(clientPort, dataDir,
-                    dataLogDir);
-            conf.tickTime = tickTime;
-            conf.initLimit = initLimit;
-            conf.syncLimit = syncLimit;
-            conf.electionAlg = electionAlg;
-            conf.servers = servers;
-            if (servers.size() > 1) {
-                /*
-                 * If using FLE, then every server requires a separate election port.
-                 */
-                if(electionAlg != 0){
-                   for(QuorumServer s : servers.values()){
-                       if(s.electionAddr == null)
-                           LOG.error("Missing election port for server: " + s.id);
-                   }
-                }
-                
-                File myIdFile = new File(dataDir, "myid");
-                if (!myIdFile.exists()) {
-                    LOG.error(myIdFile.toString() + " file is missing");
-                    System.exit(2);
-                }
-                BufferedReader br = new BufferedReader(new FileReader(myIdFile));
-                String myIdString;
-                try {
-                    myIdString = br.readLine();
-                } finally {
-                    br.close();
-                }
-                try {
-                    conf.serverId = Long.parseLong(myIdString);
-                } catch (NumberFormatException e) {
-                    LOG.error(myIdString + " is not a number");
-                    System.exit(2);
-                }
+            try {
+                conf.serverId = Long.parseLong(myIdString);
+            } catch (NumberFormatException e) {
+                throw new IllegalArgumentException("serverid " + myIdString
+                        + " is not a number");
             }
-            instance=conf;
-        } catch (Exception e) {
-            LOG.error("FIXMSG",e);
-            System.exit(2);
         }
+        instance = conf;
+       
     }
 
     @Override

Modified: hadoop/zookeeper/branches/branch-3.0/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeerMain.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/branches/branch-3.0/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeerMain.java?rev=718659&r1=718658&r2=718659&view=diff
==============================================================================
--- hadoop/zookeeper/branches/branch-3.0/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeerMain.java (original)
+++ hadoop/zookeeper/branches/branch-3.0/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeerMain.java Tue Nov 18 09:23:10 2008
@@ -67,7 +67,12 @@
             ZooKeeperServerMain.main(args);
             return;
         }
-        QuorumPeerConfig.parse(args);
+        try {
+            QuorumPeerConfig.parse(args);
+        } catch(Exception e) {
+            LOG.fatal("Error in config", e);
+            System.exit(2);
+        }
         if (!QuorumPeerConfig.isStandalone()) {
             runPeer(new QuorumPeer.Factory() {
                 public QuorumPeer create(NIOServerCnxn.Factory cnxnFactory) throws IOException {