예제 #1
0
  /** Restart a dead avatar node as a standby avatar. */
  public void restartStandby(int nnIndex) throws IOException {
    AvatarInfo dead = getDeadAvatar(nnIndex);
    if (getPrimaryAvatar(nnIndex) == null || dead == null) {
      throw new IOException("cannot start standby avatar: " + "primary or dead avatar not found");
    }
    LOG.info("restarting " + dead.startupOption + " as standby");
    NameNodeInfo nni = this.nameNodes[nnIndex];
    String[] args;
    ArrayList<String> argList = new ArrayList<String>();
    argList.add(dead.startupOption);
    argList.add(AvatarConstants.StartupOption.STANDBY.getName());
    argList.add(AvatarConstants.StartupOption.REGULAR.getName());
    if (federation) {
      argList.add(StartupOption.SERVICE.getName());
      argList.add(nni.nameserviceId);
    }
    args = new String[argList.size()];
    argList.toArray(args);
    dead.avatar = AvatarNode.createAvatarNode(args, getServerConf(dead.startupOption, nni));
    dead.state = AvatarState.STANDBY;

    if (dead.avatar == null) {
      throw new IOException("cannot start avatar node");
    }
  }
예제 #2
0
  /** Kill the standby avatar node. */
  public void killStandby(int nnIndex) throws IOException {
    AvatarInfo standby = getStandbyAvatar(nnIndex);
    if (standby != null) {
      standby.avatar.shutdownAvatar();

      standby.avatar = null;
      standby.state = AvatarState.DEAD;

      try {
        Thread.sleep(1000);
      } catch (InterruptedException ignore) {
        // do nothing
      }

    } else {
      LOG.info("can't kill standby avatar, already dead");
    }
  }
예제 #3
0
  /** Make standby avatar the new primary avatar. Kill the old primary avatar first if necessary. */
  public void failOver(int nnIndex) throws IOException {
    if (getPrimaryAvatar(nnIndex) != null) {
      LOG.info("killing primary avatar before failover");
      killPrimary(nnIndex);
    }

    AvatarInfo standby = getStandbyAvatar(nnIndex);
    if (standby == null) {
      throw new IOException("no standby avatar running");
    }

    standby.avatar.setAvatar(AvatarConstants.Avatar.ACTIVE);
    standby.state = AvatarState.ACTIVE;
    registerZooKeeperNode(
        standby.nnPort,
        standby.nnDnPort,
        standby.httpPort,
        standby.rpcPort,
        this.nameNodes[nnIndex]);
  }
예제 #4
0
  /**
   * Kill the primary avatar node.
   *
   * @param clearZK clear zookeeper?
   */
  public void killPrimary(int nnIndex, boolean clearZK) throws IOException {
    AvatarInfo primary = getPrimaryAvatar(nnIndex);
    if (primary != null) {
      if (clearZK) {
        clearZooKeeperNode(nnIndex);
      }

      primary.avatar.shutdownAvatar();

      primary.avatar = null;
      primary.state = AvatarState.DEAD;

      try {
        Thread.sleep(1000);
      } catch (InterruptedException ignore) {
        // do nothing
      }

    } else {
      throw new IOException("can't kill primary avatar, already dead");
    }
  }