int numComponents = immutableComponents.size(); for (int i = 0; i < numComponents; i++) { if (immutableComponents.get(i).getComponentSize() > maxMergableComponentSize || immutableComponents.get(i).getState() != ComponentState.READABLE_UNWRITABLE) { continue; long startComponentSize = immutableComponents.get(i).getComponentSize(); boolean mergeable = true; for (; j < numComponents; j++) { long componentSize = immutableComponents.get(j).getComponentSize(); if (componentSize > maxMergableComponentSize || immutableComponents.get(j).getState() != ComponentState.READABLE_UNWRITABLE) {
private boolean scheduleMerge(final ILSMIndex index) throws HyracksDataException { Optional<Long> latestSeq = ((AbstractLSMIndex) index).getLatestDiskComponentSequence(); if (!latestSeq.isPresent()) { return false; } // sequence number starts from 0, and thus latestSeq + 1 gives the number of flushes int numFlushes = latestSeq.get().intValue() + 1; List<ILSMDiskComponent> immutableComponents = new ArrayList<>(index.getDiskComponents()); Collections.reverse(immutableComponents); int size = immutableComponents.size(); int depth = 0; while (treeDepth(depth) < numFlushes) { depth++; } int mergedIndex = binomialIndex(depth, Math.min(depth, numComponents) - 1, numFlushes - treeDepth(depth - 1) - 1); if (mergedIndex == size - 1) { return false; } long mergeSize = 0; List<ILSMDiskComponent> mergableComponents = new ArrayList<ILSMDiskComponent>(); for (int i = mergedIndex; i < immutableComponents.size(); i++) { mergeSize = mergeSize + immutableComponents.get(i).getComponentSize(); mergableComponents.add(immutableComponents.get(i)); } Collections.reverse(mergableComponents); ILSMIndexAccessor accessor = index.createAccessor(NoOpIndexAccessParameters.INSTANCE); accessor.scheduleMerge(mergableComponents); return true; }
ILSMDiskComponent component = Mockito.mock(ILSMDiskComponent.class); Mockito.when(component.getId()).thenReturn(id); Mockito.when(component.getComponentSize()).thenReturn(DEFAULT_COMPONENT_SIZE); Mockito.when(component.getState()).thenReturn(ComponentState.READABLE_UNWRITABLE); components.add(component);
@Override public void end() throws HyracksDataException { try { ioOpCallback.afterOperation(loadOp); componentBulkLoader.end(); if (component.getComponentSize() > 0) { if (isTransaction) { // Since this is a transaction component, validate and // deactivate. it could later be added or deleted try { component.markAsValid(durable, loadOp); } finally { ioOpCallback.afterFinalize(loadOp); } component.deactivate(); } else { ioOpCallback.afterFinalize(loadOp); getHarness().addBulkLoadedComponent(loadOp); } } } finally { ioOpCallback.completed(loadOp); } }
@Override public void end() throws HyracksDataException { try { ioOpCallback.afterOperation(loadOp); componentBulkLoader.end(); if (component.getComponentSize() > 0) { if (isTransaction) { // Since this is a transaction component, validate and // deactivate. it could later be added or deleted try { component.markAsValid(durable, loadOp); } finally { ioOpCallback.afterFinalize(loadOp); } component.deactivate(); } else { ioOpCallback.afterFinalize(loadOp); getHarness().addBulkLoadedComponent(loadOp); } } } finally { ioOpCallback.completed(loadOp); } }
@Override public void end() throws HyracksDataException { try { ioOpCallback.afterOperation(loadOp); componentBulkLoader.end(); if (component.getComponentSize() > 0) { if (isTransaction) { // Since this is a transaction component, validate and // deactivate. it could later be added or deleted try { component.markAsValid(durable, loadOp); } finally { ioOpCallback.afterFinalize(loadOp); } component.deactivate(); } else { ioOpCallback.afterFinalize(loadOp); getHarness().addBulkLoadedComponent(loadOp); } } } finally { ioOpCallback.completed(loadOp); } }
private void presistComponentToDisk() throws HyracksDataException { try { lsmIndex.getIOOperationCallback().afterOperation(opCtx.getIoOperation()); componentBulkLoader.end(); } catch (Throwable th) { // NOSONAR Must not call afterFinalize without setting failure fail(th); throw th; } finally { lsmIndex.getIOOperationCallback().afterFinalize(opCtx.getIoOperation()); } if (opCtx.getIoOperation().getStatus() == LSMIOOperationStatus.SUCCESS && opCtx.getIoOperation().getNewComponent().getComponentSize() > 0) { lsmIndex.getHarness().addBulkLoadedComponent(opCtx.getIoOperation()); } }