private void validate() { if (this.first.compareTo(this.last) > 0) { selfRef().release(); throw new IllegalStateException(String.format("SSTable first key %s > last key %s", this.first, this.last)); } }
private void releaseReferences(Iterable<SSTableReader> oldSSTables, boolean tolerateCompacted) { for (SSTableReader sstable : oldSSTables) { boolean firstToCompact = sstable.markObsolete(this); assert tolerateCompacted || firstToCompact : sstable + " was already marked compacted"; sstable.selfRef().release(); } }
/** * Removes every SSTable in the directory from the DataTracker's view. * @param directory the unreadable directory, possibly with SSTables in it, but not necessarily. */ void removeUnreadableSSTables(File directory) { View currentView, newView; Set<SSTableReader> remaining = new HashSet<>(); do { currentView = view.get(); for (SSTableReader r : currentView.nonCompactingSStables()) if (!r.descriptor.directory.equals(directory)) remaining.add(r); if (remaining.size() == currentView.nonCompactingSStables().size()) return; newView = currentView.replace(currentView.sstables, remaining); } while (!view.compareAndSet(currentView, newView)); for (SSTableReader sstable : currentView.sstables) if (!remaining.contains(sstable)) sstable.selfRef().release(); notifySSTablesChanged(remaining, Collections.<SSTableReader>emptySet(), OperationType.UNKNOWN); }
public RefViewFragment selectAndReference(Function<DataTracker.View, List<SSTableReader>> filter) { long failingSince = -1L; while (true) { ViewFragment view = select(filter); Refs<SSTableReader> refs = Refs.tryRef(view.sstables); if (refs != null) return new RefViewFragment(view.sstables, view.memtables, refs); if (failingSince <= 0) { failingSince = System.nanoTime(); } else if (System.nanoTime() - failingSince > TimeUnit.MILLISECONDS.toNanos(100)) { List<SSTableReader> released = new ArrayList<>(); for (SSTableReader reader : view.sstables) if (reader.selfRef().globalCount() == 0) released.add(reader); NoSpamLogger.log(logger, NoSpamLogger.Level.WARN, 1, TimeUnit.SECONDS, "Spinning trying to capture readers {}, released: {}, ", view.sstables, released); failingSince = System.nanoTime(); } } }
refs.tryRef(sstable); sstable.selfRef().release();
sstable.selfRef().release(); throw t;
sstable.selfRef().release();
private void replaceWithFinishedReaders(List<SSTableReader> finished) { if (isOffline) { for (SSTableReader reader : discard) { if (!reader.isReplaced()) reader.markObsolete(null); reader.selfRef().release(); } } else { dataTracker.replaceEarlyOpenedFiles(discard, finished); dataTracker.unmarkCompacting(discard); } discard.clear(); }
sstable.selfRef().release();
sstable.selfRef().release();
sstable.selfRef().release();
cfs.getDataTracker().addSSTables(Collections.singleton(newInOrderSstable)); else if (newInOrderSstable != null) newInOrderSstable.selfRef().release(); outputHandler.warn(String.format("%d out of order rows found while scrubbing %s; Those have been written (in order) to a new sstable (%s)", outOfOrderRows.size(), sstable, newInOrderSstable)); newSstable.selfRef().release();