private void addOperationalMemoryComponents(List<ILSMComponent> operationalComponents, boolean modification) { // add current memory component first if needed if (numScheduledFlushes < memoryComponents.size()) { ILSMMemoryComponent c = memoryComponents.get(currentMutableComponentId.get()); // The current mutable component is added if modification or readable // This ensures that activation of new component only happens in case of modifications // and allow for controlling that without stopping search operations if (modification || c.isReadable()) { operationalComponents.add(c); } } if (modification && numScheduledFlushes >= memoryComponents.size()) { // will fail the enterComponent call and retry operationalComponents.add(memoryComponents.get(0)); return; } addImmutableMemoryComponents(operationalComponents); }
private void addImmutableMemoryComponents(List<ILSMComponent> operationalComponents) { int cmc = currentMutableComponentId.get(); int numImmutableMemoryComponents = Integer.min(numScheduledFlushes, memoryComponents.size()); int next = numScheduledFlushes < memoryComponents.size() ? cmc : getNextToBeFlushed(); for (int i = 0; i < numImmutableMemoryComponents; i++) { next--; if (next < 0) { next = memoryComponents.size() - 1; } //newer components first ILSMMemoryComponent c = memoryComponents.get(next); if (c.isReadable()) { operationalComponents.add(c); } } }
private ILSMMemoryComponent getOldestReadableMemoryComponent() { synchronized (getOperationTracker()) { int cmc = currentMutableComponentId.get(); int numImmutableMemoryComponents = Integer.min(numScheduledFlushes, memoryComponents.size()); int next = numScheduledFlushes < memoryComponents.size() ? cmc : getNextToBeFlushed(); for (int i = 0; i < numImmutableMemoryComponents; i++) { next--; if (next < 0) { next = memoryComponents.size() - 1; } } // start going forward for (int i = 0; i < numImmutableMemoryComponents; i++) { if (memoryComponents.get(next).isReadable()) { return memoryComponents.get(next); } next++; if (next == memoryComponents.size()) { next = 0; } } throw new IllegalStateException("Couldn't find any readable component"); } }
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; }
if (c.isReadable()) { c.getMetadata().get(key, value); if (value.getLength() != 0) {
if (cmc.isReadable()) { index.getCurrentMemoryComponent().getMetadata().get(key, value);