void returnFilesForScan(Long reservationId) { final Set<FileRef> filesToDelete = new HashSet<>(); synchronized (tablet) { Set<FileRef> absFilePaths = scanFileReservations.remove(reservationId); if (absFilePaths == null) throw new IllegalArgumentException("Unknown scan reservation id " + reservationId); boolean notify = false; for (FileRef path : absFilePaths) { long refCount = fileScanReferenceCounts.decrement(path, 1); if (refCount == 0) { if (filesToDeleteAfterScan.remove(path)) filesToDelete.add(path); notify = true; } else if (refCount < 0) throw new IllegalStateException("Scan ref count for " + path + " is " + refCount); } if (notify) tablet.notifyAll(); } if (filesToDelete.size() > 0) { log.debug("Removing scan refs from metadata {} {}", tablet.getExtent(), filesToDelete); MetadataTableUtil.removeScanFiles(tablet.getExtent(), filesToDelete, tablet.getContext(), tablet.getTabletServer().getLock()); } }
void returnFilesForScan(Long reservationId) { final Set<FileRef> filesToDelete = new HashSet<>(); synchronized (tablet) { Set<FileRef> absFilePaths = scanFileReservations.remove(reservationId); if (absFilePaths == null) throw new IllegalArgumentException("Unknown scan reservation id " + reservationId); boolean notify = false; for (FileRef path : absFilePaths) { long refCount = fileScanReferenceCounts.decrement(path, 1); if (refCount == 0) { if (filesToDeleteAfterScan.remove(path)) filesToDelete.add(path); notify = true; } else if (refCount < 0) throw new IllegalStateException("Scan ref count for " + path + " is " + refCount); } if (notify) tablet.notifyAll(); } if (filesToDelete.size() > 0) { log.debug("Removing scan refs from metadata " + tablet.getExtent() + " " + filesToDelete); MetadataTableUtil.removeScanFiles(tablet.getExtent(), filesToDelete, tablet.getTabletServer(), tablet.getTabletServer().getLock()); } }