private void triggerScheduleMerge(ILSMIndex index, List<ILSMDiskComponent> immutableComponents, int startIndex, int endIndex) throws HyracksDataException { List<ILSMDiskComponent> mergableComponents = new ArrayList<>(immutableComponents.subList(startIndex, endIndex + 1)); // Reverse the components order back to its original order Collections.reverse(mergableComponents); index.createAccessor(NoOpIndexAccessParameters.INSTANCE).scheduleMerge(mergableComponents); }
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; }
accessor.scheduleMerge(mergableComponents);
return null; }).when(accessor).scheduleMerge(Mockito.anyListOf(ILSMDiskComponent.class));
ILSMIOOperation merge = accessor.scheduleMerge(btree.getDiskComponents()); merge.sync(); Assert.assertEquals(LSMIOOperationStatus.FAILURE, merge.getStatus()); scheduler.modify = false; accessor.scheduleMerge(btree.getDiskComponents()); Assert.assertEquals(1, btree.getDiskComponents().size()); btree.deactivate();
mergedComponents.add(diskComponents.get(i)); mergeAccessor.scheduleMerge(mergedComponents); merger.waitUntilCount(1);
accessor.scheduleMerge(((LSMBTree) ctx.getIndex()).getDiskComponents());
mergedComponents.add(diskComponents.get(i)); mergeAccessor.scheduleMerge(mergedComponents); merger.waitUntilCount(1);
mergedComponents.add(diskComponents.get(i)); mergeAccessor.scheduleMerge(mergedComponents); merger.waitUntilCount(1);
ILSMIOOperation merge = mergeAccessor.scheduleMerge(mergedComponents); merge.sync(); if (merge.getStatus() == LSMIOOperationStatus.FAILURE) {
accessor.scheduleMerge(((LSMBTree) ctx.getIndex()).getDiskComponents());