@Override public final String toString() { return "{\"class\" : \"" + getClass().getSimpleName() + "\", \"dir\" : \"" + fileManager.getBaseDir() + "\", \"memory\" : " + (memoryComponents == null ? 0 : memoryComponents) + ", \"disk\" : " + diskComponents.size() + ", \"num-scheduled-flushes\":" + numScheduledFlushes + ", \"current-memory-component\":" + currentMutableComponentId.get() + "}"; }
@Override public synchronized void destroy() throws HyracksDataException { if (isActive) { throw HyracksDataException.create(ErrorCode.CANNOT_DESTROY_ACTIVE_INDEX); } destroyDiskComponents(); fileManager.deleteDirs(); }
public void deleteTransactionComponent() throws HyracksDataException { fileManager.deleteTransactionFiles(); }
@Override public ILSMDiskComponent createBulkLoadTarget() throws HyracksDataException { LSMComponentFileReferences componentFileRefs = fileManager.getRelFlushFileReference(); return createDiskComponent(bulkLoadComponentFactory, componentFileRefs.getInsertIndexFileReference(), componentFileRefs.getDeleteIndexFileReference(), componentFileRefs.getBloomFilterFileReference(), true); }
public LSMTwoPCBTreeBulkLoader(float fillFactor, boolean verifyInput, long numElementsHint, boolean isTransaction, Map<String, Object> parameters) throws HyracksDataException { this.isTransaction = isTransaction; // Create the appropriate target LSMComponentFileReferences componentFileRefs; if (isTransaction) { try { componentFileRefs = fileManager.getNewTransactionFileReference(); } catch (IOException e) { throw HyracksDataException.create(e); } component = createDiskComponent(transactionComponentFactory, componentFileRefs.getInsertIndexFileReference(), null, componentFileRefs.getBloomFilterFileReference(), true); } else { componentFileRefs = fileManager.getRelFlushFileReference(); component = createDiskComponent(bulkLoadComponentFactory, componentFileRefs.getInsertIndexFileReference(), componentFileRefs.getDeleteIndexFileReference(), componentFileRefs.getBloomFilterFileReference(), true); } loadOp = new LoadOperation(componentFileRefs, ioOpCallback, getIndexIdentifier(), parameters); loadOp.setNewComponent(component); ioOpCallback.scheduled(loadOp); ioOpCallback.beforeOperation(loadOp); componentBulkLoader = component.createBulkLoader(loadOp, fillFactor, verifyInput, numElementsHint, false, true, true); }
FileReference lastFile = lastBTree.getFileReference(); 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(), ioOpCallback, fileManager.getBaseDir().getAbsolutePath()); ioOpCallback.scheduled(mergeOp); return mergeOp;
protected LSMComponentFileReferences getMergeTargetFileName(List<ILSMComponent> mergingDiskComponents) throws HyracksDataException { BTree lastTree = ((LSMBTreeWithBuddyDiskComponent) mergingDiskComponents.get(0)).getIndex(); BTree firstTree = ((LSMBTreeWithBuddyDiskComponent) mergingDiskComponents.get(mergingDiskComponents.size() - 1)) .getIndex(); FileReference firstFile = firstTree.getFileReference(); FileReference lastFile = lastTree.getFileReference(); LSMComponentFileReferences fileRefs = fileManager.getRelMergeFileReference(firstFile.getFile().getName(), lastFile.getFile().getName()); return fileRefs; }
private void loadDiskComponents() throws HyracksDataException { diskComponents.clear(); List<LSMComponentFileReferences> validFileReferences = fileManager.cleanupAndGetValidFiles(); for (LSMComponentFileReferences lsmComponentFileReferences : validFileReferences) { ILSMDiskComponent component = createDiskComponent(componentFactory, lsmComponentFileReferences.getInsertIndexFileReference(), lsmComponentFileReferences.getDeleteIndexFileReference(), lsmComponentFileReferences.getBloomFilterFileReference(), false); diskComponents.add(component); } }
@Override public void commitTransaction() throws HyracksDataException { LSMComponentFileReferences componentFileReferences = fileManager.getTransactionFileReferenceForCommit(); ILSMDiskComponent component = null; if (componentFileReferences != null) { component = createDiskComponent(componentFactory, componentFileReferences.getInsertIndexFileReference(), null, componentFileReferences.getBloomFilterFileReference(), false); } getHarness().addTransactionComponents(component); }
@Override public void recoverTransaction() throws HyracksDataException { fileManager.recoverTransaction(); } }
@Override public ILSMIOOperation createFlushOperation(ILSMIndexOperationContext ctx) throws HyracksDataException { ILSMMemoryComponent flushingComponent = getCurrentMemoryComponent(); if (flushingComponent.getWriterCount() > 0) { throw new IllegalStateException( "createFlushOperation is called on a component with writers: " + flushingComponent); } // take care of the flush cycling ILSMIOOperation flushOp = TracedIOOperation.wrap(createFlushOperation(createOpContext(NoOpIndexAccessParameters.INSTANCE), fileManager.getRelFlushFileReference(), ioOpCallback), tracer); // Changing the flush status should *always* precede changing the mutable component. flushingComponent.schedule(LSMIOOperationType.FLUSH); numScheduledFlushes++; changeFlushStatusForCurrentMutableCompoent(false); changeMutableComponent(); ILSMIndexAccessor accessor = flushOp.getAccessor(); ILSMIndexOperationContext flushCtx = accessor.getOpContext(); flushCtx.setOperation(ctx.getOperation()); // Could be component delete flushCtx.getComponentHolder().add(flushingComponent); flushCtx.setIoOperation(flushOp); propagateMap(ctx, flushCtx); ioOpCallback.scheduled(flushOp); return flushOp; }
public LSMTwoPCBTreeWithBuddyBulkLoader(float fillFactor, boolean verifyInput, long numElementsHint, boolean isTransaction, Map<String, Object> parameters) throws HyracksDataException { this.isTransaction = isTransaction; // Create the appropriate target LSMComponentFileReferences componentFileRefs; if (isTransaction) { try { componentFileRefs = fileManager.getNewTransactionFileReference(); } catch (IOException e) { throw HyracksDataException.create(e); } component = createDiskComponent(bulkLoadComponentFactory, componentFileRefs.getInsertIndexFileReference(), componentFileRefs.getDeleteIndexFileReference(), componentFileRefs.getBloomFilterFileReference(), true); } else { componentFileRefs = fileManager.getRelFlushFileReference(); component = createDiskComponent(bulkLoadComponentFactory, componentFileRefs.getInsertIndexFileReference(), componentFileRefs.getDeleteIndexFileReference(), componentFileRefs.getBloomFilterFileReference(), true); } loadOp = new LoadOperation(componentFileRefs, ioOpCallback, getIndexIdentifier(), parameters); loadOp.setNewComponent(component); ioOpCallback.scheduled(loadOp); ioOpCallback.beforeOperation(loadOp); componentBulkLoader = component.createBulkLoader(loadOp, fillFactor, verifyInput, numElementsHint, false, true, false); }
@Override protected LSMComponentFileReferences getMergeFileReferences(ILSMDiskComponent firstComponent, ILSMDiskComponent lastComponent) throws HyracksDataException { RTree firstTree = (RTree) firstComponent.getIndex(); RTree lastTree = (RTree) lastComponent.getIndex(); FileReference firstFile = firstTree.getFileReference(); FileReference lastFile = lastTree.getFileReference(); return fileManager.getRelMergeFileReference(firstFile.getFile().getName(), lastFile.getFile().getName()); } }
validFileReferences = fileManager.cleanupAndGetValidFiles(); for (LSMComponentFileReferences lsmComponentFileReferences : validFileReferences) { ILSMDiskComponent component =
@Override public void commitTransaction() throws HyracksDataException { LSMComponentFileReferences componentFileRefrences = fileManager.getTransactionFileReferenceForCommit(); ILSMDiskComponent component = null; if (componentFileRefrences != null) { component = createDiskComponent(componentFactory, componentFileRefrences.getInsertIndexFileReference(), componentFileRefrences.getDeleteIndexFileReference(), componentFileRefrences.getBloomFilterFileReference(), false); } getHarness().addTransactionComponents(component); }
@Override public void recoverTransaction() throws HyracksDataException { fileManager.recoverTransaction(); }
public IIndexBulkLoader createBulkLoader(float fillLevel, boolean verifyInput, long numElementsHint, Map<String, Object> parameters) throws HyracksDataException { AbstractLSMIndexOperationContext opCtx = createOpContext(NoOpIndexAccessParameters.INSTANCE); opCtx.setParameters(parameters); LSMComponentFileReferences componentFileRefs = fileManager.getRelFlushFileReference(); LoadOperation loadOp = new LoadOperation(componentFileRefs, ioOpCallback, getIndexIdentifier(), parameters); loadOp.setNewComponent(createDiskComponent(bulkLoadComponentFactory, componentFileRefs.getInsertIndexFileReference(), componentFileRefs.getDeleteIndexFileReference(), componentFileRefs.getBloomFilterFileReference(), true)); ioOpCallback.scheduled(loadOp); opCtx.setIoOperation(loadOp); return new LSMIndexDiskComponentBulkLoader(this, opCtx, fillLevel, verifyInput, numElementsHint); }
@Override public String getIndexIdentifier() { return fileManager.getBaseDir().getAbsolutePath(); }
public LSMTwoPCRTreeBulkLoader(float fillFactor, boolean verifyInput, long numElementsHint, boolean isTransaction, Map<String, Object> parameters) throws HyracksDataException { this.isTransaction = isTransaction; // Create the appropriate target LSMComponentFileReferences componentFileRefs; if (isTransaction) { try { componentFileRefs = fileManager.getNewTransactionFileReference(); } catch (IOException e) { throw HyracksDataException.create(e); } component = createDiskComponent(componentFactory, componentFileRefs.getInsertIndexFileReference(), componentFileRefs.getDeleteIndexFileReference(), componentFileRefs.getBloomFilterFileReference(), true); } else { componentFileRefs = fileManager.getRelFlushFileReference(); component = createDiskComponent(bulkLoadComponentFactory, componentFileRefs.getInsertIndexFileReference(), componentFileRefs.getDeleteIndexFileReference(), componentFileRefs.getBloomFilterFileReference(), true); } loadOp = new LoadOperation(componentFileRefs, ioOpCallback, getIndexIdentifier(), parameters); loadOp.setNewComponent(component); ioOpCallback.scheduled(loadOp); ioOpCallback.beforeOperation(loadOp); componentBulkLoader = component.createBulkLoader(loadOp, fillFactor, verifyInput, numElementsHint, false, true, false); }
@Override public void destroy() throws HyracksDataException { if (isActive) { throw new HyracksDataException("Failed to destroy the index since it is activated."); } for (ILSMDiskComponent c : diskComponents) { c.destroy(); // Remove from second list to avoid destroying twice secondDiskComponents.remove(c); } for (ILSMDiskComponent c : secondDiskComponents) { c.destroy(); } diskComponents.clear(); secondDiskComponents.clear(); fileManager.deleteDirs(); version = 0; }