if (last.startOffset() == range.startOffset()) { updateRangeStatus0(lastIdx, last, range, status); if (first.startOffset() == range.startOffset()) { updateRangeStatus0(firstIdx, first, range, status); if (midRange.startOffset() == range.startOffset()) { updateRangeStatus0(midIdx, midRange, range, status); if (midRange.less(range.startOffset())) lastIdx = midIdx; else { assert midRange.greater(range.startOffset());
if (last.startOffset() == range.startOffset()) { updateRangeStatus0(lastIdx, last, range, status); if (first.startOffset() == range.startOffset()) { updateRangeStatus0(firstIdx, first, range, status); if (midRange.startOffset() == range.startOffset()) { updateRangeStatus0(midIdx, midRange, range, status); if (midRange.less(range.startOffset())) lastIdx = midIdx; else { assert midRange.greater(range.startOffset());
/** * Adds range to the list of already existing ranges. Added range must be located after * the last range in this map. If added range is adjacent to the last range in the map, * added range will be concatenated to the last one. * * @param range Range to add. */ public void addRange(GridGgfsFileAffinityRange range) { if (range == null || range.empty()) return; // We cannot add range in the middle of the file. if (ranges == null) { ranges = new ArrayList<>(); ranges.add(range); return; } assert !ranges.isEmpty(); GridGgfsFileAffinityRange last = ranges.get(ranges.size() - 1); // Ensure that range being added is located to the right of last range in list. assert last.greater(range.startOffset()) : "Cannot add range to middle of map [last=" + last + ", range=" + range + ']'; // Try to concat last and new range. GridGgfsFileAffinityRange concat = last.concat(range); // Simply add range to the end of the list if they are not adjacent. if (concat == null) ranges.add(range); else ranges.set(ranges.size() - 1, concat); }
/** * Adds range to the list of already existing ranges. Added range must be located after * the last range in this map. If added range is adjacent to the last range in the map, * added range will be concatenated to the last one. * * @param range Range to add. */ public void addRange(GridGgfsFileAffinityRange range) { if (range == null || range.empty()) return; // We cannot add range in the middle of the file. if (ranges == null) { ranges = new ArrayList<>(); ranges.add(range); return; } assert !ranges.isEmpty(); GridGgfsFileAffinityRange last = ranges.get(ranges.size() - 1); // Ensure that range being added is located to the right of last range in list. assert last.greater(range.startOffset()) : "Cannot add range to middle of map [last=" + last + ", range=" + range + ']'; // Try to concat last and new range. GridGgfsFileAffinityRange concat = last.concat(range); // Simply add range to the end of the list if they are not adjacent. if (concat == null) ranges.add(range); else ranges.set(ranges.size() - 1, concat); }
if (midRange.less(range.startOffset())) lastIdx = midIdx; else { assert midRange.greater(range.startOffset());
if (midRange.less(range.startOffset())) lastIdx = midIdx; else { assert midRange.greater(range.startOffset());
long partEnd = Math.min(end, range.startOffset());
long partEnd = Math.min(end, range.startOffset());
/** * Tries to remove blocks affected by fragmentizer. If {@code cleanNonColocated} is {@code true}, will remove * non-colocated blocks as well. * * @param fileInfo File info to clean up. * @param range Range to clean up. * @param cleanNonColocated {@code True} if all blocks should be cleaned. */ public void cleanBlocks(GridGgfsFileInfo fileInfo, GridGgfsFileAffinityRange range, boolean cleanNonColocated) { long startIdx = range.startOffset() / fileInfo.blockSize(); long endIdx = range.endOffset() / fileInfo.blockSize(); if (log.isDebugEnabled()) log.debug("Cleaning blocks [fileInfo=" + fileInfo + ", range=" + range + ", cleanNonColocated=" + cleanNonColocated + ", startIdx=" + startIdx + ", endIdx=" + endIdx + ']'); try { try (GridDataLoader<GridGgfsBlockKey, byte[]> ldr = dataLoader()) { for (long idx = startIdx; idx <= endIdx; idx++) { ldr.removeData(new GridGgfsBlockKey(fileInfo.id(), range.affinityKey(), fileInfo.evictExclude(), idx)); if (cleanNonColocated) ldr.removeData(new GridGgfsBlockKey(fileInfo.id(), null, fileInfo.evictExclude(), idx)); } } } catch (GridException e) { log.error("Failed to clean up file range [fileInfo=" + fileInfo + ", range=" + range + ']', e); } }
/** * Tries to remove blocks affected by fragmentizer. If {@code cleanNonColocated} is {@code true}, will remove * non-colocated blocks as well. * * @param fileInfo File info to clean up. * @param range Range to clean up. * @param cleanNonColocated {@code True} if all blocks should be cleaned. */ public void cleanBlocks(GridGgfsFileInfo fileInfo, GridGgfsFileAffinityRange range, boolean cleanNonColocated) { long startIdx = range.startOffset() / fileInfo.blockSize(); long endIdx = range.endOffset() / fileInfo.blockSize(); if (log.isDebugEnabled()) log.debug("Cleaning blocks [fileInfo=" + fileInfo + ", range=" + range + ", cleanNonColocated=" + cleanNonColocated + ", startIdx=" + startIdx + ", endIdx=" + endIdx + ']'); try { try (GridDataLoader<GridGgfsBlockKey, byte[]> ldr = dataLoader()) { for (long idx = startIdx; idx <= endIdx; idx++) { ldr.removeData(new GridGgfsBlockKey(fileInfo.id(), range.affinityKey(), fileInfo.evictExclude(), idx)); if (cleanNonColocated) ldr.removeData(new GridGgfsBlockKey(fileInfo.id(), null, fileInfo.evictExclude(), idx)); } } } catch (GridException e) { log.error("Failed to clean up file range [fileInfo=" + fileInfo + ", range=" + range + ']', e); } }
long startIdx = range.startOffset() / fileInfo.blockSize();
long startIdx = range.startOffset() / fileInfo.blockSize();