code: public synchronized void createHole(final long iRecordOffset, final int iRecordSize) throws IOException {
      final long timer = OProfiler.getInstance().startChrono();
  
      // IN MEMORY
      final int recycledPosition;
      final ODataHoleInfo hole;
      if (!freeHoles.isEmpty()) {
        // RECYCLE THE FIRST FREE HOLE
        recycledPosition = freeHoles.remove(0);
        hole = availableHolesList.get(recycledPosition);
        hole.dataOffset = iRecordOffset;
        hole.size = iRecordSize;
      } else {
        // APPEND A NEW ONE
        recycledPosition = getHoles();
        hole = new ODataHoleInfo(iRecordSize, iRecordOffset, recycledPosition);
        availableHolesList.add(hole);
        file.allocateSpace(RECORD_SIZE);
      }
  
      availableHolesBySize.put(hole, hole);
      availableHolesByPosition.put(hole, hole);
  
      if (maxHoleSize < iRecordSize)
        maxHoleSize = iRecordSize;
  
      // TO FILE
      final long p = recycledPosition * RECORD_SIZE;
      file.writeLong(p, iRecordOffset);
      file.writeInt(p + OBinaryProtocol.SIZE_LONG, iRecordSize);
  
      OProfiler.getInstance().stopChrono(PROFILER_DATA_HOLE_CREATE, timer);
    }
docs: Appends the hole to the end of the segment.
  
  @throws IOException