示例#1
0
  @Override
  public Block promote(Block block) {
    synchronized (this) {
      checkUpdate(Promote);
      Long id = block.getId();
      add(Promote, id);

      if (!activeWriteBlocks.contains(id) && !activeReadBlocks.contains(id))
        error(Promote, id + " is not an active block");

      if (activeReadBlocks.contains(id))
        // Remove one read count
        // Really, do this if obtained via "getRead" and not "getWrite"
        activeReadBlocks.remove(id);

      // Double promotion results in only one entry.
      if (!activeWriteBlocks.contains(id)) activeWriteBlocks.add(id);
    }
    return blockMgr.promote(block);
  }