void discardEntriesFromCache(ManagedCursorImpl cursor, PositionImpl newPosition) { Pair<PositionImpl, PositionImpl> pair = activeCursors.cursorUpdated(cursor, newPosition); if (pair != null) { entryCache.invalidateEntries(pair.getRight()); } }
@Override public void markDelete(Position position, Map<String, Long> properties) throws ManagedLedgerException { this.position = position; container.cursorUpdated(this, (PositionImpl) position); }
void updateCursor(ManagedCursorImpl cursor, PositionImpl newPosition) { Pair<PositionImpl, PositionImpl> pair = cursors.cursorUpdated(cursor, newPosition); if (pair == null) { // Cursor has been removed in the meantime trimConsumedLedgersInBackground(); return; } PositionImpl previousSlowestReader = pair.getLeft(); PositionImpl currentSlowestReader = pair.getRight(); if (previousSlowestReader.compareTo(currentSlowestReader) == 0) { // The slowest consumer has not changed position. Nothing to do right now return; } // Only trigger a trimming when switching to the next ledger if (previousSlowestReader.getLedgerId() != newPosition.getLedgerId()) { trimConsumedLedgersInBackground(); } }
@Test void updatingCursorOutsideContainer() throws Exception { ManagedCursorContainer container = new ManagedCursorContainer(); ManagedCursor cursor1 = new MockManagedCursor(container, "test1", new PositionImpl(5, 5)); container.add(cursor1); assertEquals(container.getSlowestReaderPosition(), new PositionImpl(5, 5)); MockManagedCursor cursor2 = new MockManagedCursor(container, "test2", new PositionImpl(2, 2)); container.add(cursor2); assertEquals(container.getSlowestReaderPosition(), new PositionImpl(2, 2)); cursor2.position = new PositionImpl(8, 8); // Until we don't update the container, the ordering will not change assertEquals(container.getSlowestReaderPosition(), new PositionImpl(2, 2)); container.cursorUpdated(cursor2, cursor2.position); assertEquals(container.getSlowestReaderPosition(), new PositionImpl(5, 5)); }
container.cursorUpdated(c1, c1.position); assertEquals(container.getSlowestReaderPosition(), new PositionImpl(5, 1)); container.cursorUpdated(c1, c1.position); assertEquals(container.getSlowestReaderPosition(), new PositionImpl(5, 1)); container.cursorUpdated(c2, c2.position); assertEquals(container.getSlowestReaderPosition(), new PositionImpl(5, 6)); container.cursorUpdated(c3, c3.position); assertEquals(container.getSlowestReaderPosition(), new PositionImpl(5, 6)); container.cursorUpdated(c1, c1.position); assertEquals(container.getSlowestReaderPosition(), new PositionImpl(6, 4)); container.cursorUpdated(c2, c2.position); assertEquals(container.getSlowestReaderPosition(), new PositionImpl(4, 4)); container.cursorUpdated(c4, c4.position);
container.cursorUpdated(c1, c1.position); assertEquals(container.getSlowestReaderPosition(), new PositionImpl(5, 1)); container.cursorUpdated(c2, c2.position); assertEquals(container.getSlowestReaderPosition(), new PositionImpl(5, 6)); container.cursorUpdated(c1, c1.position); assertEquals(container.getSlowestReaderPosition(), new PositionImpl(5, 6)); container.cursorUpdated(c3, c3.position); assertEquals(container.getSlowestReaderPosition(), new PositionImpl(5, 6)); container.cursorUpdated(c1, c1.position); assertEquals(container.getSlowestReaderPosition(), new PositionImpl(5, 6)); container.cursorUpdated(c2, c2.position); assertEquals(container.getSlowestReaderPosition(), new PositionImpl(6, 4)); container.cursorUpdated(c4, c4.position);
void discardEntriesFromCache(ManagedCursorImpl cursor, PositionImpl newPosition) { Pair<PositionImpl, PositionImpl> pair = activeCursors.cursorUpdated(cursor, newPosition); if (pair != null) { entryCache.invalidateEntries(pair.getRight()); } }
void discardEntriesFromCache(ManagedCursorImpl cursor, PositionImpl newPosition) { Pair<PositionImpl, PositionImpl> pair = activeCursors.cursorUpdated(cursor, newPosition); if (pair != null) { entryCache.invalidateEntries(pair.second); } }
void updateCursor(ManagedCursorImpl cursor, PositionImpl newPosition) { Pair<PositionImpl, PositionImpl> pair = cursors.cursorUpdated(cursor, newPosition); if (pair == null) { // Cursor has been removed in the meantime trimConsumedLedgersInBackground(); return; } PositionImpl previousSlowestReader = pair.getLeft(); PositionImpl currentSlowestReader = pair.getRight(); if (previousSlowestReader.compareTo(currentSlowestReader) == 0) { // The slowest consumer has not changed position. Nothing to do right now return; } // Only trigger a trimming when switching to the next ledger if (previousSlowestReader.getLedgerId() != newPosition.getLedgerId()) { trimConsumedLedgersInBackground(); } }
void updateCursor(ManagedCursorImpl cursor, PositionImpl newPosition) { Pair<PositionImpl, PositionImpl> pair = cursors.cursorUpdated(cursor, newPosition); if (pair == null) { // Cursor has been removed in the meantime trimConsumedLedgersInBackground(); return; } PositionImpl previousSlowestReader = pair.first; PositionImpl currentSlowestReader = pair.second; if (previousSlowestReader.compareTo(currentSlowestReader) == 0) { // The slowest consumer has not changed position. Nothing to do right now return; } // Only trigger a trimming when switching to the next ledger if (previousSlowestReader.getLedgerId() != newPosition.getLedgerId()) { trimConsumedLedgersInBackground(); } }