code: synchronized boolean add(
                             BlockInfo blockInfo,
                             int curReplicas, 
                             int decomissionedReplicas,
                             int expectedReplicas) {
      if(curReplicas<0 || expectedReplicas <= curReplicas) {
        return false;
      }
      int priLevel = getPriority(blockInfo, curReplicas, decomissionedReplicas,
                                 expectedReplicas);
      INodeFile fileINode = blockInfo.getINode();
      if (priLevel == QUEUE_WITH_CORRUPT_BLOCKS && fileINode != null &&
          fileINode.getStorageType().equals(StorageType.RAID_STORAGE)) {
        RaidCodec codec = ((INodeRaidStorage) fileINode.getStorage()).getCodec();
        return raidQueue.add(blockInfo, codec);
      }
      
      if(priLevel != LEVEL && priorityQueues.get(priLevel).add(blockInfo)) {
        if (NameNode.stateChangeLog.isDebugEnabled()) {
          NameNode.stateChangeLog.debug(
                                        "BLOCK* NameSystem.UnderReplicationBlock.add:"
                                        + blockInfo
                                        + " has only "+curReplicas
                                        + " replicas and need " + expectedReplicas
                                        + " replicas so is added to neededReplications"
                                        + " at priority level " + priLevel);
        }
        return true;
      }
      return false;
    }
docs: /* add a block to a under replication queue according to its priority
  @param block a under replication block
  @param curReplicas current number of replicas of the block
  @param expectedReplicas expected number of replicas of the block