public ILSMIndexAccessor createAccessor(AbstractLSMIndexOperationContext opCtx) { return new LSMTreeIndexAccessor(getHarness(), opCtx, cursorFactory); }
@Override public void start() throws HyracksDataException { lsmAccessor.getCtx().setOperation(IndexOperation.UPSERT); }
@Override public void nextFrame(ByteBuffer buffer) throws HyracksDataException { accessor.reset(buffer); int itemCount = accessor.getTupleCount(); lsmAccessor.batchOperate(accessor, tuple, processor, frameOpCallback); if (itemCount > 0) { lastRecordInTimeStamp = System.currentTimeMillis(); } }
@Override public void performOp(ITupleReference tuple, TestOperation op) throws HyracksDataException { LSMTreeIndexAccessor accessor = (LSMTreeIndexAccessor) indexAccessor; IIndexCursor searchCursor = accessor.createSearchCursor(false); LSMBTreeOpContext concreteCtx = (LSMBTreeOpContext) accessor.getCtx(); MultiComparator cmp = concreteCtx.getCmp(); RangePredicate rangePred = new RangePredicate(tuple, tuple, true, true, cmp, cmp); case INSERT: try { accessor.insert(tuple); } catch (HyracksDataException e) { if (e.getErrorCode() != ErrorCode.DUPLICATE_KEY) { accessor.delete(deleteTuple); } catch (HyracksDataException e) { accessor.update(tuple); } catch (HyracksDataException e) { if (e.getErrorCode() != ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY rangePred.setLowKey(tuple, true); rangePred.setHighKey(tuple, true); accessor.search(searchCursor, rangePred); consumeCursorTuples(searchCursor); break; rangePred.setLowKey(null, true); rangePred.setHighKey(null, true); accessor.search(searchCursor, rangePred);
resetSearchPredicate(index); if (isFiltered || isDelete || hasSecondaries) { lsmAccessor.search(cursor, searchPred); try { if (cursor.hasNext()) { lsmAccessor.forceDelete(tuple); recordWasDeleted = true; } else if (!isDelete) { abstractModCallback.setOp(Operation.UPSERT); lsmAccessor.forceUpsert(tuple); recordWasInserted = true; lsmAccessor.updateFilter(prevTuple);
@Override public ILSMIndexAccessor createAccessor(ISearchOperationCallback searchCallback, int targetIndexVersion) throws HyracksDataException { ExternalBTreeOpContext opCtx = createOpContext(searchCallback, targetIndexVersion); return new LSMTreeIndexAccessor(getHarness(), opCtx, cursorFactory); }
@Override public void finish() throws HyracksDataException { lsmAccessor.getCtx().setOperation(IndexOperation.UPSERT); }
@Override public ILSMIndexAccessor createAccessor(IIndexAccessParameters iap) { LSMRTreeOpContext opCtx = createOpContext(iap); return new LSMTreeIndexAccessor(getHarness(), opCtx, cursorFactory); }
@Override public ILSMIndexAccessor createAccessor(IIndexAccessParameters iap) { ExternalBTreeOpContext opCtx = createOpContext(iap.getSearchOperationCallback(), version); return new LSMTreeIndexAccessor(getHarness(), opCtx, cursorFactory); }
@Override protected ILSMIOOperation createMergeOperation(AbstractLSMIndexOperationContext opCtx, LSMComponentFileReferences mergeFileRefs, ILSMIOOperationCallback callback) throws HyracksDataException { boolean returnDeletedTuples = false; List<ILSMComponent> mergingComponents = opCtx.getComponentHolder(); if (mergingComponents.get(mergingComponents.size() - 1) != diskComponents.get(diskComponents.size() - 1)) { returnDeletedTuples = true; } LSMRTreeWithAntiMatterTuplesSearchCursor cursor = new LSMRTreeWithAntiMatterTuplesSearchCursor(opCtx, returnDeletedTuples); ILSMIndexAccessor accessor = new LSMTreeIndexAccessor(getHarness(), opCtx, cursorFactory); return new LSMRTreeMergeOperation(accessor, cursor, mergeFileRefs.getInsertIndexFileReference(), null, null, callback, getIndexIdentifier()); } }
@Override public ILSMIndexAccessor createAccessor(ISearchOperationCallback searchCallback, int targetIndexVersion) throws HyracksDataException { return new LSMTreeIndexAccessor(getHarness(), createOpContext(searchCallback, targetIndexVersion), ctx -> new LSMBTreeWithBuddySearchCursor(ctx, buddyBTreeFields)); }
@Override protected ILSMIOOperation createFlushOperation(AbstractLSMIndexOperationContext opCtx, LSMComponentFileReferences componentFileRefs, ILSMIOOperationCallback callback) throws HyracksDataException { ILSMIndexAccessor accessor = new LSMTreeIndexAccessor(getHarness(), opCtx, cursorFactory); return new LSMRTreeFlushOperation(accessor, componentFileRefs.getInsertIndexFileReference(), null, null, callback, getIndexIdentifier()); }
@Override public ILSMIndexAccessor createAccessor(IIndexAccessParameters iap) throws HyracksDataException { return new LSMTreeIndexAccessor(getHarness(), createOpContext(iap.getSearchOperationCallback(), version), ctx -> new LSMBTreeWithBuddySearchCursor(ctx, buddyBTreeFields)); }
@Override public LSMBTreeWithBuddyMergeOperation createMergeOperation(ILSMIndexOperationContext ctx) throws HyracksDataException { ILSMIndexOperationContext bctx = createOpContext(NoOpOperationCallback.INSTANCE, 0); bctx.setOperation(IndexOperation.MERGE); List<ILSMComponent> mergingComponents = ctx.getComponentHolder(); LSMBTreeWithBuddySortedCursor cursor = new LSMBTreeWithBuddySortedCursor(bctx, buddyBTreeFields); LSMComponentFileReferences relMergeFileRefs = getMergeTargetFileName(mergingComponents); ILSMIndexAccessor accessor = new LSMTreeIndexAccessor(getHarness(), bctx, opCtx -> new LSMBTreeWithBuddySearchCursor(opCtx, buddyBTreeFields)); // Since we have two lists of components, to tell whether we need to // keep deleted tuples, we need to know // which list to check against and we need to synchronize for this boolean keepDeleteTuples = false; if (version == 0) { keepDeleteTuples = mergingComponents.get(mergingComponents.size() - 1) != diskComponents .get(diskComponents.size() - 1); } else { keepDeleteTuples = mergingComponents.get(mergingComponents.size() - 1) != secondDiskComponents .get(secondDiskComponents.size() - 1); } LSMBTreeWithBuddyMergeOperation mergeOp = new LSMBTreeWithBuddyMergeOperation(accessor, cursor, relMergeFileRefs.getInsertIndexFileReference(), relMergeFileRefs.getDeleteIndexFileReference(), relMergeFileRefs.getBloomFilterFileReference(), ioOpCallback, fileManager.getBaseDir().getAbsolutePath(), keepDeleteTuples); ioOpCallback.scheduled(mergeOp); return mergeOp; }
LSMComponentFileReferences relMergeFileRefs = fileManager.getRelMergeFileReference(firstFile.getFile().getName(), lastFile.getFile().getName()); ILSMIndexAccessor accessor = new LSMTreeIndexAccessor(getHarness(), opCtx, cursorFactory); LSMBTreeMergeOperation mergeOp = new LSMBTreeMergeOperation(accessor, cursor, relMergeFileRefs.getInsertIndexFileReference(), relMergeFileRefs.getBloomFilterFileReference(),
@Override public ILSMIndexAccessor createAccessor(AbstractLSMIndexOperationContext opCtx) { return new LSMTreeIndexAccessor(getHarness(), opCtx, ctx -> new TestLsmBtreeSearchCursor(ctx, this)); }