BlockUC和Replica


  /**
   * Block replica states, which it can go through while being constructed.
   */
  enum ReplicaState {
    /** Replica is finalized. The state when replica is not modified. */
    FINALIZED(0),
    /** Replica is being written to. */
    RBW(1),
    /** Replica is waiting to be recovered. */
    RWR(2),
    /** Replica is under recovery. */
    RUR(3),
    /** Temporary replica: created for replication and relocation only. */
    TEMPORARY(4);

    private static final ReplicaState[] cachedValues = ReplicaState.values();

    private final int value;

    ReplicaState(int v) {
      value = v;
    }

    public int getValue() {
      return value;
    }

    public static ReplicaState getState(int v) {
      return cachedValues[v];
    }

    /** Read from in */
    public static ReplicaState read(DataInput in) throws IOException {
      return cachedValues[in.readByte()];
    }

    /** Write to out */
    public void write(DataOutput out) throws IOException {
      out.writeByte(ordinal());
    }
  }

  /**
   * States, which a block can go through while it is under construction.
   */
  enum BlockUCState {
    /**
     * Block construction completed.
* The block has at least the configured minimal replication number * of {@link ReplicaState#FINALIZED} replica(s), and is not going to be * modified. * NOTE, in some special cases, a block may be forced to COMPLETE state, * even if it doesn't have required minimal replications. */ COMPLETE, /** * The block is under construction.
* It has been recently allocated for write or append. */ UNDER_CONSTRUCTION, /** * The block is under recovery.
* When a file lease expires its last block may not be {@link #COMPLETE} * and needs to go through a recovery procedure, * which synchronizes the existing replicas contents. */ UNDER_RECOVERY, /** * The block is committed.
* The client reported that all bytes are written to data-nodes * with the given generation stamp and block length, but no * {@link ReplicaState#FINALIZED} * replicas has yet been reported by data-nodes themselves. */ COMMITTED }