private long lsnFromImmutableMemoryComponents() { List<ILSMMemoryComponent> memComponents = index.getMemoryComponents(); int numOtherMemComponents = memComponents.size() - 1; int next = index.getCurrentMemoryComponentIndex(); long lsn = ComponentUtils.NOT_FOUND; for (int i = 0; i < numOtherMemComponents; i++) { next = next - 1; if (next < 0) { next = memComponents.size() - 1; } ILSMMemoryComponent c = index.getMemoryComponents().get(next); if (c.isReadable()) { try { lsn = ComponentUtils.getLong(c.getMetadata(), ComponentUtils.MARKER_LSN_KEY, ComponentUtils.NOT_FOUND, buffer); } catch (HyracksDataException e) { // Should never happen since this is a memory component throw new IllegalStateException(e); } if (lsn != ComponentUtils.NOT_FOUND) { return lsn; } } } return lsn; }
int next = index.getCurrentMemoryComponentIndex(); if (loggable) { LOGGER.log(Level.DEBUG, index + " has " + numOtherMemComponents + " immutable memory components");
index.create(); index.activate(); Assert.assertEquals(getExpectedMemoryComponentIndex(0), index.getCurrentMemoryComponentIndex()); flush(ctx); Assert.assertEquals(getExpectedMemoryComponentIndex(1), index.getCurrentMemoryComponentIndex()); Assert.assertEquals(0, index.getDiskComponents().size()); CountingIoOperationCallback ioCallback = (CountingIoOperationCallback) index.getIOOperationCallback(); Assert.assertEquals(getExpectedMemoryComponentIndex(0), index.getCurrentMemoryComponentIndex()); Assert.assertEquals(1, index.getDiskComponents().size()); Assert.assertEquals(ioCallback.getBeforeOperationCount(), ioCallback.getAfterOperationCount()); Assert.assertEquals(getExpectedMemoryComponentIndex(1), index.getCurrentMemoryComponentIndex()); Assert.assertEquals(2, index.getDiskComponents().size()); Assert.assertEquals(ioCallback.getBeforeOperationCount(), ioCallback.getAfterOperationCount());
index.create(); index.activate(); Assert.assertEquals(getExpectedMemoryComponentIndex(0), index.getCurrentMemoryComponentIndex()); testUtils.insertIntTuples(ctx, numTuplesToInsert, harness.getRandom()); flush(ctx); Assert.assertEquals(getExpectedMemoryComponentIndex(1), index.getCurrentMemoryComponentIndex()); Assert.assertEquals(1, index.getDiskComponents().size()); CountingIoOperationCallback ioCallback = (CountingIoOperationCallback) index.getIOOperationCallback(); Assert.assertEquals(getExpectedMemoryComponentIndex(0), index.getCurrentMemoryComponentIndex()); Assert.assertEquals(2, index.getDiskComponents().size()); Assert.assertEquals(ioCallback.getBeforeOperationCount(), ioCallback.getAfterOperationCount()); Assert.assertEquals(getExpectedMemoryComponentIndex(1), index.getCurrentMemoryComponentIndex()); Assert.assertEquals(3, index.getDiskComponents().size()); Assert.assertEquals(ioCallback.getBeforeOperationCount(), ioCallback.getAfterOperationCount());
index.create(); index.activate(); Assert.assertEquals(getExpectedMemoryComponentIndex(0), index.getCurrentMemoryComponentIndex()); testUtils.insertIntTuples(ctx, numTuplesToInsert, harness.getRandom()); flush(ctx); Assert.assertEquals(getExpectedMemoryComponentIndex(1), index.getCurrentMemoryComponentIndex()); Assert.assertEquals(1, index.getDiskComponents().size()); CountingIoOperationCallback ioCallback = (CountingIoOperationCallback) index.getIOOperationCallback(); Assert.assertEquals(getExpectedMemoryComponentIndex(0), index.getCurrentMemoryComponentIndex()); Assert.assertEquals(1, index.getDiskComponents().size()); Assert.assertEquals(ioCallback.getBeforeOperationCount(), ioCallback.getAfterOperationCount()); Assert.assertEquals(getExpectedMemoryComponentIndex(1), index.getCurrentMemoryComponentIndex()); Assert.assertEquals(2, index.getDiskComponents().size()); Assert.assertEquals(ioCallback.getBeforeOperationCount(), ioCallback.getAfterOperationCount()); Assert.assertEquals(getExpectedMemoryComponentIndex(0), index.getCurrentMemoryComponentIndex()); Assert.assertEquals(3, index.getDiskComponents().size()); Assert.assertEquals(ioCallback.getBeforeOperationCount(), ioCallback.getAfterOperationCount());
index.create(); index.activate(); Assert.assertEquals(getExpectedMemoryComponentIndex(0), index.getCurrentMemoryComponentIndex()); int numMemoryComponents = index.getNumberOfAllMemoryComponents(); int expectedMemoryComponent = numFlushes % numMemoryComponents; Assert.assertEquals(getExpectedMemoryComponentIndex(expectedMemoryComponent), index.getCurrentMemoryComponentIndex()); Assert.assertEquals(0, index.getDiskComponents().size()); EncapsulatingIoCallback encapsulating = (EncapsulatingIoCallback) index.getIOOperationCallback(); flush(ctx); Assert.assertEquals(getExpectedMemoryComponentIndex((expectedMemoryComponent + 1) % numMemoryComponents), index.getCurrentMemoryComponentIndex()); Assert.assertEquals(1, index.getDiskComponents().size()); Assert.assertEquals(ioCallback.getBeforeOperationCount(), ioCallback.getAfterOperationCount());