protected void startBookieServer() throws Exception {
   int port = PortManager.nextFreePort();
   File tmpDir =
       org.apache.hedwig.util.FileUtils.createTempDirectory(getClass().getName() + port, "test");
   org.apache.bookkeeper.conf.ServerConfiguration conf =
       newServerConfiguration(
           port, zkUtil.getZooKeeperConnectString(), tmpDir, new File[] {tmpDir});
   conf.setAllowLoopback(true);
   bks.add(startBookie(conf));
   bkConfs.add(conf);
 }
    protected org.apache.bookkeeper.proto.BookieServer startBookie(
        org.apache.bookkeeper.conf.ServerConfiguration conf) throws Exception {
      org.apache.bookkeeper.proto.BookieServer server =
          new org.apache.bookkeeper.proto.BookieServer(conf);
      server.start();

      int port = conf.getBookiePort();
      while (zkUtil
              .getZooKeeperClient()
              .exists(
                  "/ledgers/available/" + InetAddress.getLocalHost().getHostAddress() + ":" + port,
                  false)
          == null) {
        Thread.sleep(500);
      }
      return server;
    }
 protected org.apache.bookkeeper.conf.ServerConfiguration newServerConfiguration(
     int port, String zkServers, File journalDir, File[] ledgerDirs) {
   org.apache.bookkeeper.conf.ServerConfiguration conf =
       new org.apache.bookkeeper.conf.ServerConfiguration();
   conf.setAllowLoopback(true);
   conf.setBookiePort(port);
   conf.setZkServers(zkServers);
   conf.setJournalDirName(journalDir.getPath());
   String[] ledgerDirNames = new String[ledgerDirs.length];
   for (int i = 0; i < ledgerDirs.length; i++) {
     ledgerDirNames[i] = ledgerDirs[i].getPath();
   }
   conf.setLedgerDirNames(ledgerDirNames);
   return conf;
 }