コード例 #1
0
  private synchronized void mergeAndWrite() throws IOException {
    List<CheckpointData> ackedList = new ArrayList<CheckpointData>();
    List<CheckpointData> removed = new ArrayList<CheckpointData>();

    for (CheckpointData data : pending) {
      if (data.isAcked == true) {
        ackedList.add(data);
        removed.add(data);
      } else {
        break;
      }
    }
    pending.removeAll(removed);

    // TODO rety(tag)로 충분하나?. 순서대로 안왔을 때 보장은 안 해줘도 되나?
    for (CheckpointData data : ackedList) {
      for (String fileName : data.fileOffsets.keySet()) {
        fileOffsets.put(fileName, data.fileOffsets.get(fileName));
      }
    }
    writeToFile();
  }