Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.apache.solr.cloud;
  
  /*
   * Licensed to the Apache Software Foundation (ASF) under one or more
   * contributor license agreements. See the NOTICE file distributed with this
   * work for additional information regarding copyright ownership. The ASF
   * licenses this file to You under the Apache License, Version 2.0 (the
   * "License"); you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
  * 
  * http://www.apache.org/licenses/LICENSE-2.0
  * 
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  * License for the specific language governing permissions and limitations under
  * the License.
  */
 
 import java.io.File;
 import java.util.List;
 
 
 
 public class ZkTestServer {
   public static final int TICK_TIME = 1000;
 
   private static Logger log = LoggerFactory.getLogger(ZkTestServer.class);
   
   protected final ZKServerMain zkServer = new ZKServerMain();
 
   private String zkDir;
 
   private int clientPort;
 
   private Thread zooThread;
   
   private int theTickTime = ;
 
   class ZKServerMain {
 
     private ServerCnxnFactory cnxnFactory;
     private ZooKeeperServer zooKeeperServer;
     
     protected void initializeAndRun(String[] argsthrows ConfigException,
         IOException {
       try {
         ManagedUtil.registerLog4jMBeans();
       } catch (JMException e) {
         .warn("Unable to register log4j JMX control"e);
       }
       
       ServerConfig config = new ServerConfig();
       if (args.length == 1) {
         config.parse(args[0]);
       } else {
         config.parse(args);
       }
       
       runFromConfig(config);
     }

    
Run from a ServerConfig.

Parameters:
config ServerConfig to use.
Throws:
java.io.IOException If there is a low-level I/O error.
 
     public void runFromConfig(ServerConfig configthrows IOException {
       .info("Starting server");
       try {
         // Note that this thread isn't going to be doing anything else,
         // so rather than spawning another thread, we will just call
         // run() in this thread.
         // create a file logger url from the command line args
          = new ZooKeeperServer();
         
         FileTxnSnapLog ftxn = new FileTxnSnapLog(new File(
             config.getDataLogDir()), new File(config.getDataDir()));
         .setTxnLogFactory(ftxn);
        .setTickTime(config.getTickTime());
         = ServerCnxnFactory.createFactory();
            config.getMaxClientCnxns());
        .join();
        if (.isRunning()) {
          .shutdown();
        }
      } catch (InterruptedException e) {
        // warn, but generally this is ok
        .warn("Server interrupted"e);
      }
    }

    
Shutdown the serving instance

Throws:
java.io.IOException If there is a low-level I/O error.
    protected void shutdown() throws IOException {
      if (zkDb != null) {
        zkDb.close();
      }
      if ( != null && .getLocalPort() != 0) {
        waitForServerDown(getZkHost() + ":" + getPort(), 5000);
      }
      if ( != null) {
        .shutdown();
      }
    }
    public int getLocalPort() {
      if ( == null) {
        throw new IllegalStateException("A port has not yet been selected");
      }
      int port;
      try {
        port = .getLocalPort();
      } catch (NullPointerException e) {
        throw new IllegalStateException("A port has not yet been selected");
      }
      if (port == 0) {
        throw new IllegalStateException("A port has not yet been selected");
      }
      return port;
    }
  }
  public ZkTestServer(String zkDir) {
    this. = zkDir;
  }
  public ZkTestServer(String zkDirint port) {
    this. = zkDir;
    this. = port;
  }
  public String getZkHost() {
    return "127.0.0.1:" + .getLocalPort();
  }
  public String getZkAddress() {
    return "127.0.0.1:" + .getLocalPort() + "/solr";
  }
  public int getPort() {
    return .getLocalPort();
  }
  
  public void expire(final long sessionId) {
      @Override
      public long getSessionId() {
        return sessionId;
      }
      @Override
      public int getTimeout() {
        return 4000;
      }
      @Override
      public boolean isClosing() {
        return false;
      }});
  }
  public void run() throws InterruptedException {
    .info("STARTING ZK TEST SERVER");
    // we don't call super.setUp
     = new Thread() {
      
      @Override
      public void run() {
        ServerConfig config = new ServerConfig() {
          {
            setClientPort(ZkTestServer.this.);
            this. = ;
            this. = ;
            this. = ;
          }
          
          public void setClientPort(int clientPort) {
            if ( != null) {
              try {
                this. = new InetSocketAddress(
                        InetAddress.getByName(.getHostName()), clientPort);
              } catch (UnknownHostException e) {
                throw new RuntimeException(e);
              }
            } else {
              this. = new InetSocketAddress(clientPort);
            }
            ..println("client port:" + this.);
          }
        };
        try {
          .runFromConfig(config);
        } catch (Throwable e) {
          throw new RuntimeException(e);
        }
      }
    };
    .setDaemon(true);
    .start();
    int cnt = 0;
    int port = -1;
    try {
       port = getPort();
    } catch(IllegalStateException e) {
      
    }
    while (port < 1) {
      Thread.sleep(100);
      try {
        port = getPort();
      } catch(IllegalStateException e) {
        
      }
      if (cnt == 500) {
        throw new RuntimeException("Could not get the port for ZooKeeper server");
      }
      cnt++;
    }
    .info("start zk server on port:" + port);
  }
  @SuppressWarnings("deprecation")
  public void shutdown() throws IOException {
    // TODO: this can log an exception while trying to unregister a JMX MBean
  }
 
  
  public static boolean waitForServerDown(String hplong timeout) {
    long start = System.currentTimeMillis();
    while (true) {
      try {
        HostPort hpobj = parseHostPortList(hp).get(0);
        send4LetterWord(hpobj.hosthpobj.port"stat");
      } catch (IOException e) {
        return true;
      }
      
      if (System.currentTimeMillis() > start + timeout) {
        break;
      }
      try {
        Thread.sleep(250);
      } catch (InterruptedException e) {
        // ignore
      }
    }
    return false;
  }
  
  public static class HostPort {
    String host;
    int port;
    
    HostPort(String hostint port) {
      this. = host;
      this. = port;
    }
  }
  
  
Send the 4letterword

Parameters:
host the destination host
port the destination port
cmd the 4letterword
Returns:
server response
  public static String send4LetterWord(String hostint portString cmd)
          throws IOException
  {
      .info("connecting to " + host + " " + port);
      Socket sock = new Socket(hostport);
      BufferedReader reader = null;
      try {
          OutputStream outstream = sock.getOutputStream();
          outstream.write(cmd.getBytes("US-ASCII"));
          outstream.flush();
          // this replicates NC - close the output stream before reading
          sock.shutdownOutput();
          reader =
                  new BufferedReader(
                          new InputStreamReader(sock.getInputStream(), "US-ASCII"));
          StringBuilder sb = new StringBuilder();
          String line;
          while((line = reader.readLine()) != null) {
              sb.append(line + "\n");
          }
          return sb.toString();
      } finally {
          sock.close();
          if (reader != null) {
              reader.close();
          }
      }
  }
  
  public static List<HostPortparseHostPortList(String hplist) {
    ArrayList<HostPortalist = new ArrayList<HostPort>();
    for (String hp : hplist.split(",")) {
      int idx = hp.lastIndexOf(':');
      String host = hp.substring(0, idx);
      int port;
      try {
        port = Integer.parseInt(hp.substring(idx + 1));
      } catch (RuntimeException e) {
        throw new RuntimeException("Problem parsing " + hp + e.toString());
      }
      alist.add(new HostPort(hostport));
    }
    return alist;
  }
  public int getTheTickTime() {
    return ;
  }
  public void setTheTickTime(int theTickTime) {
    this. = theTickTime;
  }
  public String getZkDir() {
    return ;
  }
New to GrepCode? Check out our FAQ X