[NO ISSUE][OTH] Several LSM clean ups
Change-Id: Ic0dd73231f28d831cd0fd23bb514f5b39a632ab2
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17525
Reviewed-by: Murtadha Hubail <mhubail@apache.org>
Tested-by: Murtadha Hubail <mhubail@apache.org>
Integration-Tests: Murtadha Hubail <mhubail@apache.org>
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeFileManager.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeFileManager.java
index b5d1c79..91316dc 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeFileManager.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeFileManager.java
@@ -20,7 +20,6 @@
package org.apache.hyracks.storage.am.lsm.btree.impls;
import java.io.FilenameFilter;
-import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
@@ -32,7 +31,6 @@
import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.api.io.FileReference;
import org.apache.hyracks.api.io.IIOManager;
-import org.apache.hyracks.api.util.IoUtil;
import org.apache.hyracks.storage.am.common.api.ITreeIndex;
import org.apache.hyracks.storage.am.lsm.common.impls.AbstractLSMIndexFileManager;
import org.apache.hyracks.storage.am.lsm.common.impls.IndexComponentFileReference;
@@ -42,7 +40,7 @@
public class LSMBTreeFileManager extends AbstractLSMIndexFileManager {
- private static final FilenameFilter btreeFilter =
+ private static final FilenameFilter BTREE_FILTER =
(dir, name) -> !name.startsWith(".") && name.endsWith(BTREE_SUFFIX);
private final TreeIndexFactory<? extends ITreeIndex> btreeFactory;
private final boolean hasBloomFilter;
@@ -62,7 +60,7 @@
@Override
public LSMComponentFileReferences getRelFlushFileReference() throws HyracksDataException {
- String baseName = getNextComponentSequence(btreeFilter);
+ String baseName = getNextComponentSequence(BTREE_FILTER);
return new LSMComponentFileReferences(getFileReference(baseName + DELIMITER + BTREE_SUFFIX), null,
hasBloomFilter ? getFileReference(baseName + DELIMITER + BLOOM_FILTER_SUFFIX) : null);
}
@@ -79,11 +77,8 @@
List<LSMComponentFileReferences> validFiles = new ArrayList<>();
ArrayList<IndexComponentFileReference> allBTreeFiles = new ArrayList<>();
ArrayList<IndexComponentFileReference> allBloomFilterFiles = new ArrayList<>();
- // create transaction filter <to hide transaction files>
- FilenameFilter transactionFilter = getTransactionFileFilter(false);
// List of valid BTree files.
- cleanupAndGetValidFilesInternal(getCompoundFilter(transactionFilter, btreeFilter), btreeFactory, allBTreeFiles,
- btreeFactory.getBufferCache());
+ cleanupAndGetValidFilesInternal(BTREE_FILTER, btreeFactory, allBTreeFiles, btreeFactory.getBufferCache());
HashSet<String> btreeFilesSet = new HashSet<>();
for (IndexComponentFileReference cmpFileName : allBTreeFiles) {
int index = cmpFileName.getFileName().lastIndexOf(DELIMITER);
@@ -91,8 +86,7 @@
}
if (hasBloomFilter) {
- validateFiles(btreeFilesSet, allBloomFilterFiles, getCompoundFilter(transactionFilter, bloomFilterFilter),
- null, btreeFactory.getBufferCache());
+ validateFiles(btreeFilesSet, allBloomFilterFiles, BLOOM_FILTER_FILTER, null, btreeFactory.getBufferCache());
// Sanity check.
if (allBTreeFiles.size() != allBloomFilterFiles.size()) {
throw HyracksDataException.create(ErrorCode.UNEQUAL_NUM_FILTERS_TREES, baseDir);
@@ -100,12 +94,12 @@
}
// Trivial cases.
- if (allBTreeFiles.isEmpty() || hasBloomFilter && allBloomFilterFiles.isEmpty()) {
+ if (allBTreeFiles.isEmpty()) {
return validFiles;
}
// Special case: sorting is not required
- if (allBTreeFiles.size() == 1 && (!hasBloomFilter || allBloomFilterFiles.size() == 1)) {
+ if (allBTreeFiles.size() == 1) {
validFiles.add(new LSMComponentFileReferences(allBTreeFiles.get(0).getFileRef(), null,
hasBloomFilter ? allBloomFilterFiles.get(0).getFileRef() : null));
return validFiles;
@@ -169,7 +163,7 @@
}
IndexComponentFileReference cmpBTreeFileName = null;
IndexComponentFileReference cmpBloomFilterFileName = null;
- while (btreeFileIter.hasNext() && (hasBloomFilter ? bloomFilterFileIter.hasNext() : true)) {
+ while (btreeFileIter.hasNext() && (!hasBloomFilter || bloomFilterFileIter.hasNext())) {
cmpBTreeFileName = btreeFileIter.next();
if (hasBloomFilter) {
cmpBloomFilterFileName = bloomFilterFileIter.next();
@@ -180,44 +174,4 @@
return validFiles;
}
-
- @Override
- public LSMComponentFileReferences getNewTransactionFileReference() throws IOException {
- String sequence = getNextComponentSequence(btreeFilter);
- // Create transaction lock file
- IoUtil.create(baseDir.getChild(TXN_PREFIX + sequence));
- String baseName = getNextComponentSequence(btreeFilter);
- return new LSMComponentFileReferences(baseDir.getChild(baseName + DELIMITER + BTREE_SUFFIX), null,
- baseDir.getChild(baseName + DELIMITER + BLOOM_FILTER_SUFFIX));
- }
-
- @Override
- public LSMComponentFileReferences getTransactionFileReferenceForCommit() throws HyracksDataException {
- FilenameFilter transactionFilter;
- String[] files = baseDir.getFile().list(txnFileNameFilter);
- if (files.length == 0) {
- return null;
- }
- if (files.length != 1) {
- throw HyracksDataException.create(ErrorCode.FOUND_MULTIPLE_TRANSACTIONS, baseDir);
- } else {
- transactionFilter = getTransactionFileFilter(true);
- FileReference txnFile = baseDir.getChild(files[0]);
- // get the actual transaction files
- files = baseDir.getFile().list(transactionFilter);
- IoUtil.delete(txnFile);
- }
- FileReference bTreeFileRef = null;
- FileReference bloomFilterFileRef = null;
- for (String fileName : files) {
- if (fileName.endsWith(BTREE_SUFFIX)) {
- bTreeFileRef = baseDir.getChild(fileName);
- } else if (fileName.endsWith(BLOOM_FILTER_SUFFIX)) {
- bloomFilterFileRef = baseDir.getChild(fileName);
- } else {
- throw HyracksDataException.create(ErrorCode.UNRECOGNIZED_INDEX_COMPONENT_FILE, fileName);
- }
- }
- return new LSMComponentFileReferences(bTreeFileRef, null, bloomFilterFileRef);
- }
}
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeWithBuddyAbstractCursor.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeWithBuddyAbstractCursor.java
deleted file mode 100644
index e7b8bbd..0000000
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeWithBuddyAbstractCursor.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.hyracks.storage.am.lsm.btree.impls;
-
-import java.util.List;
-
-import org.apache.hyracks.api.exceptions.HyracksDataException;
-import org.apache.hyracks.dataflow.common.data.accessors.ITupleReference;
-import org.apache.hyracks.storage.am.bloomfilter.impls.BloomFilter;
-import org.apache.hyracks.storage.am.btree.api.IBTreeLeafFrame;
-import org.apache.hyracks.storage.am.btree.impls.BTree;
-import org.apache.hyracks.storage.am.btree.impls.BTree.BTreeAccessor;
-import org.apache.hyracks.storage.am.btree.impls.BTreeRangeSearchCursor;
-import org.apache.hyracks.storage.am.btree.impls.RangePredicate;
-import org.apache.hyracks.storage.am.common.api.ILSMIndexCursor;
-import org.apache.hyracks.storage.am.common.api.ITreeIndexCursor;
-import org.apache.hyracks.storage.am.common.impls.IndexAccessParameters;
-import org.apache.hyracks.storage.am.lsm.common.api.ILSMComponent;
-import org.apache.hyracks.storage.am.lsm.common.api.ILSMComponent.LSMComponentType;
-import org.apache.hyracks.storage.am.lsm.common.api.ILSMHarness;
-import org.apache.hyracks.storage.am.lsm.common.api.ILSMIndexOperationContext;
-import org.apache.hyracks.storage.common.EnforcedIndexCursor;
-import org.apache.hyracks.storage.common.ICursorInitialState;
-import org.apache.hyracks.storage.common.IIndexAccessParameters;
-import org.apache.hyracks.storage.common.IIndexCursorStats;
-import org.apache.hyracks.storage.common.ISearchPredicate;
-import org.apache.hyracks.storage.common.MultiComparator;
-
-public abstract class LSMBTreeWithBuddyAbstractCursor extends EnforcedIndexCursor implements ILSMIndexCursor {
-
- protected boolean open;
- protected BTreeRangeSearchCursor[] btreeCursors;
- protected BTreeRangeSearchCursor[] buddyBtreeCursors;
- protected BTreeAccessor[] btreeAccessors;
- protected BTreeAccessor[] buddyBtreeAccessors;
- protected BloomFilter[] buddyBtreeBloomFilters;
- protected MultiComparator btreeCmp;
- protected MultiComparator buddyBtreeCmp;
- protected int numberOfTrees;
- protected RangePredicate btreeRangePredicate;
- protected RangePredicate buddyBtreeRangePredicate;
- protected ITupleReference frameTuple;
- protected boolean includeMutableComponent;
- protected ILSMHarness lsmHarness;
- protected boolean foundNext;
- protected final ILSMIndexOperationContext opCtx;
- protected final IIndexAccessParameters iap;
-
- protected final long[] hashes = BloomFilter.createHashArray();
-
- protected List<ILSMComponent> operationalComponents;
-
- public LSMBTreeWithBuddyAbstractCursor(ILSMIndexOperationContext opCtx, IIndexCursorStats stats) {
- super();
- this.opCtx = opCtx;
- this.iap = IndexAccessParameters.createNoOpParams(stats);
- buddyBtreeRangePredicate = new RangePredicate(null, null, true, true, null, null);
- }
-
- public ITreeIndexCursor getCursor(int cursorIndex) {
- return btreeCursors[cursorIndex];
- }
-
- @Override
- public void doOpen(ICursorInitialState initialState, ISearchPredicate searchPred) throws HyracksDataException {
-
- LSMBTreeWithBuddyCursorInitialState lsmInitialState = (LSMBTreeWithBuddyCursorInitialState) initialState;
- btreeCmp = lsmInitialState.getBTreeCmp();
- buddyBtreeCmp = lsmInitialState.getBuddyBTreeCmp();
-
- operationalComponents = lsmInitialState.getOperationalComponents();
- lsmHarness = lsmInitialState.getLSMHarness();
- numberOfTrees = operationalComponents.size();
-
- if (btreeCursors == null || btreeCursors.length != numberOfTrees) {
- // need to re-use the following four instead of re-creating
- btreeCursors = new BTreeRangeSearchCursor[numberOfTrees];
- buddyBtreeCursors = new BTreeRangeSearchCursor[numberOfTrees];
- btreeAccessors = new BTreeAccessor[numberOfTrees];
- buddyBtreeAccessors = new BTreeAccessor[numberOfTrees];
- buddyBtreeBloomFilters = new BloomFilter[numberOfTrees];
- }
-
- includeMutableComponent = false;
-
- for (int i = 0; i < numberOfTrees; i++) {
- ILSMComponent component = operationalComponents.get(i);
- BTree btree;
- BTree buddyBtree;
- if (component.getType() == LSMComponentType.MEMORY) {
- // This is not needed at the moment but is implemented anyway
- includeMutableComponent = true;
- // No need for a bloom filter for the in-memory BTree.
- if (buddyBtreeCursors[i] == null) {
- buddyBtreeCursors[i] = new BTreeRangeSearchCursor(
- (IBTreeLeafFrame) lsmInitialState.getBuddyBTreeLeafFrameFactory().createFrame(), false);
- } else {
- buddyBtreeCursors[i].close();
- }
- btree = ((LSMBTreeWithBuddyMemoryComponent) component).getIndex();
- buddyBtree = ((LSMBTreeWithBuddyMemoryComponent) component).getBuddyIndex();
- buddyBtreeBloomFilters[i] = null;
- } else {
- if (buddyBtreeCursors[i] == null) {
- buddyBtreeCursors[i] = new BTreeRangeSearchCursor(
- (IBTreeLeafFrame) lsmInitialState.getBuddyBTreeLeafFrameFactory().createFrame(), false);
- } else {
- buddyBtreeCursors[i].close();
- }
- btree = ((LSMBTreeWithBuddyDiskComponent) component).getIndex();
- buddyBtree = ((LSMBTreeWithBuddyDiskComponent) component).getBuddyIndex();
- buddyBtreeBloomFilters[i] = ((LSMBTreeWithBuddyDiskComponent) component).getBloomFilter();
- }
- IBTreeLeafFrame leafFrame = (IBTreeLeafFrame) lsmInitialState.getBTreeLeafFrameFactory().createFrame();
- if (btreeAccessors[i] == null) {
- btreeCursors[i] = new BTreeRangeSearchCursor(leafFrame, false);
- btreeAccessors[i] = btree.createAccessor(iap);
- buddyBtreeAccessors[i] = buddyBtree.createAccessor(iap);
- } else {
- btreeCursors[i].close();
- btreeAccessors[i].reset(btree, iap);
- buddyBtreeAccessors[i].reset(buddyBtree, iap);
- }
- }
- btreeRangePredicate = (RangePredicate) searchPred;
- buddyBtreeRangePredicate.reset(null, null, true, true, buddyBtreeCmp, buddyBtreeCmp);
- open = true;
- }
-
- @Override
- public void doDestroy() throws HyracksDataException {
- if (!open) {
- return;
- }
- try {
- if (btreeCursors != null && buddyBtreeCursors != null) {
- for (int i = 0; i < numberOfTrees; i++) {
- btreeCursors[i].destroy();
- buddyBtreeCursors[i].destroy();
- }
- }
- btreeCursors = null;
- buddyBtreeCursors = null;
- } finally {
- lsmHarness.endSearch(opCtx);
- }
- foundNext = false;
- open = false;
- }
-
- @Override
- public ITupleReference doGetTuple() {
- return frameTuple;
- }
-
- @Override
- public boolean getSearchOperationCallbackProceedResult() {
- return false;
- }
-
-}
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeWithBuddyCursorInitialState.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeWithBuddyCursorInitialState.java
deleted file mode 100644
index 1e98248..0000000
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeWithBuddyCursorInitialState.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.hyracks.storage.am.lsm.btree.impls;
-
-import java.util.List;
-
-import org.apache.hyracks.storage.am.common.api.ITreeIndexFrameFactory;
-import org.apache.hyracks.storage.am.lsm.common.api.ILSMComponent;
-import org.apache.hyracks.storage.am.lsm.common.api.ILSMHarness;
-import org.apache.hyracks.storage.common.ICursorInitialState;
-import org.apache.hyracks.storage.common.ISearchOperationCallback;
-import org.apache.hyracks.storage.common.MultiComparator;
-import org.apache.hyracks.storage.common.buffercache.ICachedPage;
-
-public class LSMBTreeWithBuddyCursorInitialState implements ICursorInitialState {
- private final ITreeIndexFrameFactory btreeInteriorFrameFactory;
- private final ITreeIndexFrameFactory btreeLeafFrameFactory;
- private final ITreeIndexFrameFactory buddyBtreeLeafFrameFactory;
- private MultiComparator btreeCmp;
- private MultiComparator buddyBtreeCmp;
- private final ILSMHarness lsmHarness;
-
- private ISearchOperationCallback searchCallback;
- private List<ILSMComponent> operationalComponents;
-
- public LSMBTreeWithBuddyCursorInitialState(ITreeIndexFrameFactory btreeInteriorFrameFactory,
- ITreeIndexFrameFactory btreeLeafFrameFactory, ITreeIndexFrameFactory buddyBtreeLeafFrameFactory,
- ILSMHarness lsmHarness, MultiComparator btreeCmp, MultiComparator buddyBtreeCmp,
- ISearchOperationCallback searchCallback, List<ILSMComponent> operationalComponents) {
- this.btreeLeafFrameFactory = btreeLeafFrameFactory;
- this.btreeInteriorFrameFactory = btreeInteriorFrameFactory;
- this.buddyBtreeLeafFrameFactory = buddyBtreeLeafFrameFactory;
- this.btreeCmp = btreeCmp;
- this.buddyBtreeCmp = buddyBtreeCmp;
- this.lsmHarness = lsmHarness;
- this.searchCallback = searchCallback;
- this.operationalComponents = operationalComponents;
- }
-
- public ITreeIndexFrameFactory getBTreeInteriorFrameFactory() {
- return btreeInteriorFrameFactory;
- }
-
- public ITreeIndexFrameFactory getBTreeLeafFrameFactory() {
- return btreeLeafFrameFactory;
- }
-
- public ITreeIndexFrameFactory getBuddyBTreeLeafFrameFactory() {
- return buddyBtreeLeafFrameFactory;
- }
-
- public MultiComparator getBTreeCmp() {
- return btreeCmp;
- }
-
- public MultiComparator getBuddyBTreeCmp() {
- return buddyBtreeCmp;
- }
-
- public List<ILSMComponent> getOperationalComponents() {
- return operationalComponents;
- }
-
- public ILSMHarness getLSMHarness() {
- return lsmHarness;
- }
-
- @Override
- public ICachedPage getPage() {
- return null;
- }
-
- @Override
- public void setPage(ICachedPage page) {
- }
-
- @Override
- public ISearchOperationCallback getSearchOperationCallback() {
- return searchCallback;
- }
-
- @Override
- public void setSearchOperationCallback(ISearchOperationCallback searchCallback) {
- this.searchCallback = searchCallback;
- }
-
- @Override
- public MultiComparator getOriginalKeyComparator() {
- return btreeCmp;
- }
-
- @Override
- public void setOriginialKeyComparator(MultiComparator originalCmp) {
- this.btreeCmp = originalCmp;
- }
-
- public void setOperationalComponents(List<ILSMComponent> operationalComponents) {
- this.operationalComponents = operationalComponents;
- }
-}
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeWithBuddyDiskComponent.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeWithBuddyDiskComponent.java
deleted file mode 100644
index 1e9dade..0000000
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeWithBuddyDiskComponent.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.hyracks.storage.am.lsm.btree.impls;
-
-import java.util.Set;
-
-import org.apache.hyracks.api.exceptions.HyracksDataException;
-import org.apache.hyracks.storage.am.bloomfilter.impls.BloomFilter;
-import org.apache.hyracks.storage.am.btree.impls.BTree;
-import org.apache.hyracks.storage.am.lsm.common.api.AbstractLSMWithBuddyDiskComponent;
-import org.apache.hyracks.storage.am.lsm.common.api.ILSMComponentFilter;
-import org.apache.hyracks.storage.am.lsm.common.impls.AbstractLSMIndex;
-import org.apache.hyracks.storage.common.buffercache.IBufferCache;
-
-public class LSMBTreeWithBuddyDiskComponent extends AbstractLSMWithBuddyDiskComponent {
- private final BTree btree;
- private final BloomFilter bloomFilter;
- private final BTree buddyBtree;
-
- public LSMBTreeWithBuddyDiskComponent(AbstractLSMIndex lsmIndex, BTree btree, BTree buddyBtree,
- BloomFilter bloomFilter, ILSMComponentFilter filter) {
- super(lsmIndex, LSMBTreeDiskComponent.getMetadataPageManager(btree), filter);
- this.btree = btree;
- this.bloomFilter = bloomFilter;
- this.buddyBtree = buddyBtree;
- }
-
- @Override
- public BTree getBuddyIndex() {
- return buddyBtree;
- }
-
- @Override
- public long getComponentSize() {
- return LSMBTreeDiskComponent.getComponentSize(btree)
- + LSMBTreeWithBloomFilterDiskComponent.getComponentSize(bloomFilter)
- + buddyBtree.getFileReference().getFile().length();
- }
-
- @Override
- public Set<String> getLSMComponentPhysicalFiles() {
- Set<String> files = LSMBTreeDiskComponent.getFiles(btree);
- LSMBTreeWithBloomFilterDiskComponent.addFiles(files, bloomFilter);
- files.add(buddyBtree.getFileReference().getFile().getAbsolutePath());
- return files;
- }
-
- @Override
- public void validate() throws HyracksDataException {
- throw new UnsupportedOperationException("Validation not implemented for LSM B-Trees with Buddy B-Tree.");
- }
-
- @Override
- public int getFileReferenceCount() {
- return LSMBTreeDiskComponent.getFileReferenceCount(btree);
- }
-
- @Override
- public BTree getMetadataHolder() {
- return btree;
- }
-
- @Override
- public BTree getIndex() {
- return btree;
- }
-
- @Override
- public BloomFilter getBloomFilter() {
- return bloomFilter;
- }
-
- @Override
- public IBufferCache getBloomFilterBufferCache() {
- return getMetadataHolder().getBufferCache();
- }
-}
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeWithBuddyDiskComponentFactory.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeWithBuddyDiskComponentFactory.java
deleted file mode 100644
index bfa2314..0000000
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeWithBuddyDiskComponentFactory.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.hyracks.storage.am.lsm.btree.impls;
-
-import org.apache.hyracks.api.exceptions.HyracksDataException;
-import org.apache.hyracks.storage.am.bloomfilter.impls.BloomFilterFactory;
-import org.apache.hyracks.storage.am.btree.impls.BTree;
-import org.apache.hyracks.storage.am.lsm.common.api.IComponentFilterHelper;
-import org.apache.hyracks.storage.am.lsm.common.api.ILSMDiskComponentFactory;
-import org.apache.hyracks.storage.am.lsm.common.impls.AbstractLSMIndex;
-import org.apache.hyracks.storage.am.lsm.common.impls.LSMComponentFileReferences;
-import org.apache.hyracks.storage.am.lsm.common.impls.TreeIndexFactory;
-
-public class LSMBTreeWithBuddyDiskComponentFactory implements ILSMDiskComponentFactory {
-
- protected final TreeIndexFactory<BTree> btreeFactory;
- protected final IComponentFilterHelper filterHelper;
- protected final BloomFilterFactory bloomFilterFactory;
- protected final TreeIndexFactory<BTree> buddyBtreeFactory;
-
- public LSMBTreeWithBuddyDiskComponentFactory(TreeIndexFactory<BTree> btreeFactory,
- TreeIndexFactory<BTree> buddyBtreeFactory, BloomFilterFactory bloomFilterFactory,
- IComponentFilterHelper filterHelper) {
- this.btreeFactory = btreeFactory;
- this.filterHelper = filterHelper;
- this.bloomFilterFactory = bloomFilterFactory;
- this.buddyBtreeFactory = buddyBtreeFactory;
- }
-
- public int[] getBloomFilterKeyFields() {
- return bloomFilterFactory == null ? null : bloomFilterFactory.getBloomFilterKeyFields();
- }
-
- @Override
- public LSMBTreeWithBuddyDiskComponent createComponent(AbstractLSMIndex lsmIndex, LSMComponentFileReferences cfr)
- throws HyracksDataException {
- return new LSMBTreeWithBuddyDiskComponent(lsmIndex,
- btreeFactory.createIndexInstance(cfr.getInsertIndexFileReference()),
- buddyBtreeFactory.createIndexInstance(cfr.getDeleteIndexFileReference()),
- bloomFilterFactory.createBloomFiltertInstance(cfr.getBloomFilterFileReference()),
- filterHelper == null ? null : filterHelper.createFilter());
- }
-}
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeWithBuddyFileManager.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeWithBuddyFileManager.java
deleted file mode 100644
index 81e6d10..0000000
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeWithBuddyFileManager.java
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.hyracks.storage.am.lsm.btree.impls;
-
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.hyracks.api.exceptions.ErrorCode;
-import org.apache.hyracks.api.exceptions.HyracksDataException;
-import org.apache.hyracks.api.io.FileReference;
-import org.apache.hyracks.api.io.IIOManager;
-import org.apache.hyracks.api.util.IoUtil;
-import org.apache.hyracks.storage.am.common.api.ITreeIndex;
-import org.apache.hyracks.storage.am.lsm.common.impls.AbstractLSMIndexFileManager;
-import org.apache.hyracks.storage.am.lsm.common.impls.IndexComponentFileReference;
-import org.apache.hyracks.storage.am.lsm.common.impls.LSMComponentFileReferences;
-import org.apache.hyracks.storage.am.lsm.common.impls.TreeIndexFactory;
-
-public class LSMBTreeWithBuddyFileManager extends AbstractLSMIndexFileManager {
-
- private final TreeIndexFactory<? extends ITreeIndex> btreeFactory;
- private final TreeIndexFactory<? extends ITreeIndex> buddyBtreeFactory;
-
- private static FilenameFilter btreeFilter = (dir, name) -> !name.startsWith(".") && name.endsWith(BTREE_SUFFIX);
-
- private static FilenameFilter buddyBtreeFilter =
- (dir, name) -> !name.startsWith(".") && name.endsWith(DELETE_TREE_SUFFIX);
-
- public LSMBTreeWithBuddyFileManager(IIOManager ioManager, FileReference file,
- TreeIndexFactory<? extends ITreeIndex> btreeFactory,
- TreeIndexFactory<? extends ITreeIndex> buddyBtreeFactory) {
- super(ioManager, file, null);
- this.buddyBtreeFactory = buddyBtreeFactory;
- this.btreeFactory = btreeFactory;
- }
-
- @Override
- public LSMComponentFileReferences getRelFlushFileReference() throws HyracksDataException {
- String baseName = getNextComponentSequence(btreeFilter);
- return new LSMComponentFileReferences(baseDir.getChild(baseName + DELIMITER + BTREE_SUFFIX),
- baseDir.getChild(baseName + DELIMITER + DELETE_TREE_SUFFIX),
- baseDir.getChild(baseName + DELIMITER + BLOOM_FILTER_SUFFIX));
- }
-
- @Override
- public LSMComponentFileReferences getRelMergeFileReference(String firstFileName, String lastFileName) {
- final String baseName = IndexComponentFileReference.getMergeSequence(firstFileName, lastFileName);
- return new LSMComponentFileReferences(baseDir.getChild(baseName + DELIMITER + BTREE_SUFFIX),
- baseDir.getChild(baseName + DELIMITER + DELETE_TREE_SUFFIX),
- baseDir.getChild(baseName + DELIMITER + BLOOM_FILTER_SUFFIX));
- }
-
- @Override
- public List<LSMComponentFileReferences> cleanupAndGetValidFiles() throws HyracksDataException {
- List<LSMComponentFileReferences> validFiles = new ArrayList<>();
- ArrayList<IndexComponentFileReference> allBTreeFiles = new ArrayList<>();
- ArrayList<IndexComponentFileReference> allBuddyBTreeFiles = new ArrayList<>();
- ArrayList<IndexComponentFileReference> allBloomFilterFiles = new ArrayList<>();
- // Create transaction file filter
- FilenameFilter transactionFilefilter = getTransactionFileFilter(false);
- // Gather files.
- cleanupAndGetValidFilesInternal(getCompoundFilter(btreeFilter, transactionFilefilter), btreeFactory,
- allBTreeFiles, btreeFactory.getBufferCache());
- HashSet<String> btreeFilesSet = new HashSet<>();
- for (IndexComponentFileReference cmpFileName : allBTreeFiles) {
- btreeFilesSet.add(cmpFileName.getSequence());
- }
- validateFiles(btreeFilesSet, allBuddyBTreeFiles, getCompoundFilter(buddyBtreeFilter, transactionFilefilter),
- buddyBtreeFactory, btreeFactory.getBufferCache());
- validateFiles(btreeFilesSet, allBloomFilterFiles, getCompoundFilter(bloomFilterFilter, transactionFilefilter),
- null, btreeFactory.getBufferCache());
- // Sanity check.
- if (allBTreeFiles.size() != allBuddyBTreeFiles.size() || allBTreeFiles.size() != allBloomFilterFiles.size()) {
- throw HyracksDataException.create(ErrorCode.UNEQUAL_NUM_FILTERS_TREES, baseDir);
- }
- // Trivial cases.
- if (allBTreeFiles.isEmpty() || allBuddyBTreeFiles.isEmpty() || allBloomFilterFiles.isEmpty()) {
- return validFiles;
- }
- if (allBTreeFiles.size() == 1 && allBuddyBTreeFiles.size() == 1 && allBloomFilterFiles.size() == 1) {
- validFiles.add(new LSMComponentFileReferences(allBTreeFiles.get(0).getFileRef(),
- allBuddyBTreeFiles.get(0).getFileRef(), allBloomFilterFiles.get(0).getFileRef()));
- return validFiles;
- }
-
- // Sorts files names from earliest to latest sequence.
- Collections.sort(allBTreeFiles);
- Collections.sort(allBuddyBTreeFiles);
- Collections.sort(allBloomFilterFiles);
-
- List<IndexComponentFileReference> validComparableBTreeFiles = new ArrayList<>();
- IndexComponentFileReference lastBTree = allBTreeFiles.get(0);
- validComparableBTreeFiles.add(lastBTree);
-
- List<IndexComponentFileReference> validComparableBuddyBTreeFiles = new ArrayList<>();
- IndexComponentFileReference lastBuddyBTree = allBuddyBTreeFiles.get(0);
- validComparableBuddyBTreeFiles.add(lastBuddyBTree);
-
- List<IndexComponentFileReference> validComparableBloomFilterFiles = new ArrayList<>();
- IndexComponentFileReference lastBloomFilter = allBloomFilterFiles.get(0);
- validComparableBloomFilterFiles.add(lastBloomFilter);
-
- for (int i = 1; i < allBTreeFiles.size(); i++) {
- IndexComponentFileReference currentBTree = allBTreeFiles.get(i);
- IndexComponentFileReference currentBuddyBTree = allBuddyBTreeFiles.get(i);
- IndexComponentFileReference currentBloomFilter = allBloomFilterFiles.get(i);
- // Current start sequence is greater than last stop sequence
- if (currentBTree.isMoreRecentThan(lastBTree) && currentBuddyBTree.isMoreRecentThan(lastBuddyBTree)
- && currentBloomFilter.isMoreRecentThan(lastBloomFilter)) {
- validComparableBTreeFiles.add(currentBTree);
- validComparableBuddyBTreeFiles.add(currentBuddyBTree);
- validComparableBloomFilterFiles.add(currentBloomFilter);
- lastBTree = currentBTree;
- lastBuddyBTree = currentBuddyBTree;
- lastBloomFilter = currentBloomFilter;
- } else if (currentBTree.isWithin(lastBTree) && currentBuddyBTree.isWithin(lastBuddyBTree)
- && currentBloomFilter.isWithin(lastBloomFilter)) {
- // Invalid files are completely contained in last sequence.
- delete(treeFactory.getBufferCache(), currentBTree.getFileRef());
- delete(treeFactory.getBufferCache(), currentBuddyBTree.getFileRef());
- delete(treeFactory.getBufferCache(), currentBloomFilter.getFileRef());
- } else {
- // This scenario should not be possible.
- throw HyracksDataException.create(ErrorCode.FOUND_OVERLAPPING_LSM_FILES, baseDir);
- }
- }
-
- // Sort valid files in reverse lexicographical order, such that newer
- // files come first.
- validComparableBTreeFiles.sort(recencyCmp);
- validComparableBuddyBTreeFiles.sort(recencyCmp);
- validComparableBloomFilterFiles.sort(recencyCmp);
-
- Iterator<IndexComponentFileReference> btreeFileIter = validComparableBTreeFiles.iterator();
- Iterator<IndexComponentFileReference> buddyBtreeFileIter = validComparableBuddyBTreeFiles.iterator();
- Iterator<IndexComponentFileReference> bloomFilterFileIter = validComparableBloomFilterFiles.iterator();
- while (btreeFileIter.hasNext() && buddyBtreeFileIter.hasNext()) {
- IndexComponentFileReference cmpBTreeFileName = btreeFileIter.next();
- IndexComponentFileReference cmpBuddyBTreeFileName = buddyBtreeFileIter.next();
- IndexComponentFileReference cmpBloomFilterFileName = bloomFilterFileIter.next();
- validFiles.add(new LSMComponentFileReferences(cmpBTreeFileName.getFileRef(),
- cmpBuddyBTreeFileName.getFileRef(), cmpBloomFilterFileName.getFileRef()));
- }
-
- return validFiles;
- }
-
- @Override
- public LSMComponentFileReferences getNewTransactionFileReference() throws IOException {
- // Create transaction lock file
- String baseName = getNextComponentSequence(btreeFilter);
- Files.createFile(Paths.get(baseDir + TXN_PREFIX + baseName));
- return new LSMComponentFileReferences(baseDir.getChild(baseName + DELIMITER + BTREE_SUFFIX),
- baseDir.getChild(baseName + DELIMITER + DELETE_TREE_SUFFIX),
- baseDir.getChild(baseName + DELIMITER + BLOOM_FILTER_SUFFIX));
- }
-
- @Override
- public LSMComponentFileReferences getTransactionFileReferenceForCommit() throws HyracksDataException {
- FilenameFilter transactionFilter;
- String[] files = baseDir.getFile().list(txnFileNameFilter);
- if (files.length == 0) {
- return null;
- }
- if (files.length != 1) {
- throw HyracksDataException.create(ErrorCode.FOUND_MULTIPLE_TRANSACTIONS, baseDir);
- } else {
- transactionFilter = getTransactionFileFilter(true);
- // get the actual transaction files
- files = baseDir.getFile().list(transactionFilter);
- if (files.length < 3) {
- throw HyracksDataException.create(ErrorCode.UNEQUAL_NUM_FILTERS_TREES, baseDir);
- }
- IoUtil.delete(baseDir.getChild(files[0]));
- }
- FileReference bTreeFileRef = null;
- FileReference buddyBTreeFileRef = null;
- FileReference bloomFilterFileRef = null;
- for (String fileName : files) {
- if (fileName.endsWith(BTREE_SUFFIX)) {
- bTreeFileRef = baseDir.getChild(fileName);
- } else if (fileName.endsWith(DELETE_TREE_SUFFIX)) {
- buddyBTreeFileRef = baseDir.getChild(fileName);
- } else if (fileName.endsWith(BLOOM_FILTER_SUFFIX)) {
- bloomFilterFileRef = baseDir.getChild(fileName);
- } else {
- throw HyracksDataException.create(ErrorCode.UNRECOGNIZED_INDEX_COMPONENT_FILE, fileName);
- }
- }
-
- return new LSMComponentFileReferences(bTreeFileRef, buddyBTreeFileRef, bloomFilterFileRef);
- }
-
-}
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeWithBuddyMemoryComponent.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeWithBuddyMemoryComponent.java
deleted file mode 100644
index feed07e..0000000
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeWithBuddyMemoryComponent.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.hyracks.storage.am.lsm.btree.impls;
-
-import org.apache.hyracks.api.exceptions.HyracksDataException;
-import org.apache.hyracks.storage.am.btree.impls.BTree;
-import org.apache.hyracks.storage.am.lsm.common.api.ILSMComponentFilter;
-import org.apache.hyracks.storage.am.lsm.common.api.IVirtualBufferCache;
-import org.apache.hyracks.storage.am.lsm.common.impls.AbstractLSMIndex;
-import org.apache.hyracks.storage.am.lsm.common.impls.AbstractLSMWithBuddyMemoryComponent;
-import org.apache.hyracks.storage.am.lsm.common.impls.LSMComponentFileReferences;
-
-/*
- * This class is also not needed at the moment but is implemented anyway
- */
-public class LSMBTreeWithBuddyMemoryComponent extends AbstractLSMWithBuddyMemoryComponent {
-
- private final BTree btree;
- private final BTree buddyBtree;
-
- public LSMBTreeWithBuddyMemoryComponent(AbstractLSMIndex lsmIndex, BTree btree, BTree buddyBtree,
- IVirtualBufferCache vbc, ILSMComponentFilter filter) {
- super(lsmIndex, vbc, filter);
- this.btree = btree;
- this.buddyBtree = buddyBtree;
- }
-
- @Override
- public BTree getIndex() {
- return btree;
- }
-
- @Override
- public BTree getBuddyIndex() {
- return buddyBtree;
- }
-
- @Override
- public void validate() throws HyracksDataException {
- throw new UnsupportedOperationException("Validation not implemented for LSM B-Trees with Buddy B-Tree.");
- }
-
- @Override
- public LSMComponentFileReferences getComponentFileRefs() {
- return new LSMComponentFileReferences(btree.getFileReference(), buddyBtree.getFileReference(), null);
- }
-}
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeWithBuddyMergeOperation.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeWithBuddyMergeOperation.java
deleted file mode 100644
index 3876afa..0000000
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeWithBuddyMergeOperation.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.hyracks.storage.am.lsm.btree.impls;
-
-import org.apache.hyracks.api.io.FileReference;
-import org.apache.hyracks.storage.am.lsm.common.api.ILSMIOOperationCallback;
-import org.apache.hyracks.storage.am.lsm.common.api.ILSMIndexAccessor;
-import org.apache.hyracks.storage.am.lsm.common.impls.LSMComponentFileReferences;
-import org.apache.hyracks.storage.am.lsm.common.impls.MergeOperation;
-import org.apache.hyracks.storage.common.IIndexCursor;
-import org.apache.hyracks.storage.common.IIndexCursorStats;
-
-public class LSMBTreeWithBuddyMergeOperation extends MergeOperation {
-
- private final FileReference buddyBtreeMergeTarget;
- private final FileReference bloomFilterMergeTarget;
- private final boolean keepDeletedTuples;
-
- public LSMBTreeWithBuddyMergeOperation(ILSMIndexAccessor accessor, IIndexCursor cursor, IIndexCursorStats stats,
- FileReference target, FileReference buddyBtreeMergeTarget, FileReference bloomFilterMergeTarget,
- ILSMIOOperationCallback callback, String indexIdentifier, boolean keepDeletedTuples) {
- super(accessor, target, callback, indexIdentifier, cursor, stats);
- this.buddyBtreeMergeTarget = buddyBtreeMergeTarget;
- this.bloomFilterMergeTarget = bloomFilterMergeTarget;
- this.keepDeletedTuples = keepDeletedTuples;
- }
-
- public FileReference getBuddyBTreeTarget() {
- return buddyBtreeMergeTarget;
- }
-
- public FileReference getBloomFilterTarget() {
- return bloomFilterMergeTarget;
- }
-
- public boolean isKeepDeletedTuples() {
- return keepDeletedTuples;
- }
-
- @Override
- public LSMComponentFileReferences getComponentFiles() {
- return new LSMComponentFileReferences(target, buddyBtreeMergeTarget, bloomFilterMergeTarget);
- }
-
-}
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeWithBuddySearchCursor.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeWithBuddySearchCursor.java
deleted file mode 100644
index ac3c8ae7..0000000
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeWithBuddySearchCursor.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.hyracks.storage.am.lsm.btree.impls;
-
-import org.apache.hyracks.api.exceptions.HyracksDataException;
-import org.apache.hyracks.dataflow.common.data.accessors.ITupleReference;
-import org.apache.hyracks.dataflow.common.data.accessors.PermutingTupleReference;
-import org.apache.hyracks.storage.am.lsm.common.api.ILSMComponentFilter;
-import org.apache.hyracks.storage.am.lsm.common.api.ILSMIndexOperationContext;
-import org.apache.hyracks.storage.common.ICursorInitialState;
-import org.apache.hyracks.storage.common.IIndexCursorStats;
-import org.apache.hyracks.storage.common.ISearchPredicate;
-import org.apache.hyracks.storage.common.NoOpIndexCursorStats;
-
-public class LSMBTreeWithBuddySearchCursor extends LSMBTreeWithBuddyAbstractCursor {
- private int currentCursor;
- private final PermutingTupleReference buddyBTreeTuple;
-
- public LSMBTreeWithBuddySearchCursor(ILSMIndexOperationContext opCtx, int[] buddyBTreeFields) {
- this(opCtx, buddyBTreeFields, NoOpIndexCursorStats.INSTANCE);
- }
-
- public LSMBTreeWithBuddySearchCursor(ILSMIndexOperationContext opCtx, int[] buddyBTreeFields,
- IIndexCursorStats stats) {
- super(opCtx, stats);
- currentCursor = 0;
- this.buddyBTreeTuple = new PermutingTupleReference(buddyBTreeFields);
- }
-
- @Override
- public void doDestroy() throws HyracksDataException {
- super.doDestroy();
- currentCursor = 0;
- }
-
- @Override
- public void doClose() throws HyracksDataException {
- if (!open) {
- return;
- }
-
- currentCursor = 0;
- foundNext = false;
- try {
- for (int i = 0; i < numberOfTrees; i++) {
- btreeCursors[i].close();
- buddyBtreeCursors[i].close();
- }
- btreeCursors = null;
- buddyBtreeCursors = null;
- } finally {
- lsmHarness.endSearch(opCtx);
- }
- }
-
- private void searchNextCursor() throws HyracksDataException {
- if (currentCursor < numberOfTrees) {
- btreeCursors[currentCursor].close();
- btreeAccessors[currentCursor].search(btreeCursors[currentCursor], btreeRangePredicate);
- }
- }
-
- @Override
- public boolean doHasNext() throws HyracksDataException {
- if (foundNext) {
- return true;
- }
- while (currentCursor < numberOfTrees) {
- while (btreeCursors[currentCursor].hasNext()) {
- btreeCursors[currentCursor].next();
- ITupleReference currentTuple = btreeCursors[currentCursor].getTuple();
- buddyBTreeTuple.reset(btreeCursors[currentCursor].getTuple());
- boolean killerTupleFound = false;
- for (int i = 0; i < currentCursor && !killerTupleFound; i++) {
- if (buddyBtreeBloomFilters[i] != null
- && !buddyBtreeBloomFilters[i].contains(buddyBTreeTuple, hashes)) {
- continue;
- }
- buddyBtreeCursors[i].close();
- buddyBtreeRangePredicate.setHighKey(buddyBTreeTuple, true);
- buddyBtreeRangePredicate.setLowKey(buddyBTreeTuple, true);
- buddyBtreeAccessors[i].search(buddyBtreeCursors[i], buddyBtreeRangePredicate);
- try {
- if (buddyBtreeCursors[i].hasNext()) {
- killerTupleFound = true;
- }
- } finally {
- buddyBtreeCursors[i].close();
- }
- }
- if (!killerTupleFound) {
- frameTuple = currentTuple;
- foundNext = true;
- return true;
- }
- }
- btreeCursors[currentCursor].close();
- currentCursor++;
- searchNextCursor();
- }
- return false;
- }
-
- @Override
- public void doNext() throws HyracksDataException {
- foundNext = false;
- }
-
- @Override
- public ITupleReference getFilterMinTuple() {
- ILSMComponentFilter filter = getFilter();
- return filter == null ? null : filter.getMinTuple();
- }
-
- @Override
- public ITupleReference getFilterMaxTuple() {
- ILSMComponentFilter filter = getFilter();
- return filter == null ? null : filter.getMaxTuple();
- }
-
- private ILSMComponentFilter getFilter() {
- if (currentCursor < 0) {
- return null;
- }
- return operationalComponents.get(currentCursor).getLSMComponentFilter();
- }
-
- @Override
- public void doOpen(ICursorInitialState initialState, ISearchPredicate searchPred) throws HyracksDataException {
- super.doOpen(initialState, searchPred);
- searchNextCursor();
- }
-}
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeWithBuddySortedCursor.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeWithBuddySortedCursor.java
deleted file mode 100644
index ce47589..0000000
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeWithBuddySortedCursor.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.hyracks.storage.am.lsm.btree.impls;
-
-import org.apache.hyracks.api.exceptions.HyracksDataException;
-import org.apache.hyracks.dataflow.common.data.accessors.ITupleReference;
-import org.apache.hyracks.dataflow.common.data.accessors.PermutingTupleReference;
-import org.apache.hyracks.storage.am.lsm.common.api.ILSMComponentFilter;
-import org.apache.hyracks.storage.am.lsm.common.api.ILSMIndexOperationContext;
-import org.apache.hyracks.storage.common.ICursorInitialState;
-import org.apache.hyracks.storage.common.IIndexCursorStats;
-import org.apache.hyracks.storage.common.ISearchPredicate;
-import org.apache.hyracks.storage.common.util.IndexCursorUtils;
-
-public class LSMBTreeWithBuddySortedCursor extends LSMBTreeWithBuddyAbstractCursor {
- // TODO: This class can be removed and instead use a search cursor that uses
- // a logic similar
- // to the one in LSMRTreeWithAntiMatterTuplesSearchCursor
- // currently, this cursor is only used when doing merge operations.
- private boolean[] depletedBtreeCursors;
- private int foundIn = -1;
- private PermutingTupleReference buddyBtreeTuple;
-
- public LSMBTreeWithBuddySortedCursor(ILSMIndexOperationContext opCtx, int[] buddyBTreeFields,
- IIndexCursorStats stats) throws HyracksDataException {
- super(opCtx, stats);
- this.buddyBtreeTuple = new PermutingTupleReference(buddyBTreeFields);
- close();
- }
-
- public ILSMIndexOperationContext getOpCtx() {
- return opCtx;
- }
-
- @Override
- public void doClose() throws HyracksDataException {
- depletedBtreeCursors = new boolean[numberOfTrees];
- foundNext = false;
- try {
- for (int i = 0; i < numberOfTrees; i++) {
- btreeCursors[i].close();
- btreeAccessors[i].search(btreeCursors[i], btreeRangePredicate);
- if (btreeCursors[i].hasNext()) {
- btreeCursors[i].next();
- } else {
- depletedBtreeCursors[i] = true;
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- throw new HyracksDataException("error while reseting the btrees of the lsm btree with buddy btree", e);
- } finally {
- if (open) {
- lsmHarness.endSearch(opCtx);
- }
- }
- }
-
- @Override
- public ITupleReference getFilterMinTuple() {
- ILSMComponentFilter filter = getFilter();
- return filter == null ? null : filter.getMinTuple();
- }
-
- @Override
- public ITupleReference getFilterMaxTuple() {
- ILSMComponentFilter filter = getFilter();
- return filter == null ? null : filter.getMaxTuple();
- }
-
- private ILSMComponentFilter getFilter() {
- if (foundIn < 0) {
- return null;
- }
- return operationalComponents.get(foundIn).getLSMComponentFilter();
- }
-
- @Override
- public boolean doHasNext() throws HyracksDataException {
- while (!foundNext) {
- frameTuple = null;
-
- if (foundIn != -1) {
- if (btreeCursors[foundIn].hasNext()) {
- btreeCursors[foundIn].next();
- } else {
- depletedBtreeCursors[foundIn] = true;
- }
- }
-
- foundIn = -1;
- for (int i = 0; i < numberOfTrees; i++) {
- if (depletedBtreeCursors[i]) {
- continue;
- }
-
- if (frameTuple == null) {
- frameTuple = btreeCursors[i].getTuple();
- foundIn = i;
- continue;
- }
-
- if (btreeCmp.compare(frameTuple, btreeCursors[i].getTuple()) > 0) {
- frameTuple = btreeCursors[i].getTuple();
- foundIn = i;
- }
- }
-
- if (foundIn == -1) {
- return false;
- }
-
- boolean killed = false;
- buddyBtreeTuple.reset(frameTuple);
- for (int i = 0; i < foundIn; i++) {
- buddyBtreeCursors[i].close();
- buddyBtreeRangePredicate.setHighKey(buddyBtreeTuple, true);
- btreeRangePredicate.setLowKey(buddyBtreeTuple, true);
- btreeAccessors[i].search(btreeCursors[i], btreeRangePredicate);
- try {
- if (btreeCursors[i].hasNext()) {
- killed = true;
- break;
- }
- } finally {
- btreeCursors[i].close();
- }
- }
- if (!killed) {
- foundNext = true;
- }
- }
-
- return true;
- }
-
- @Override
- public void doNext() throws HyracksDataException {
- foundNext = false;
- }
-
- @Override
- public void doOpen(ICursorInitialState initialState, ISearchPredicate searchPred) throws HyracksDataException {
- super.doOpen(initialState, searchPred);
- depletedBtreeCursors = new boolean[numberOfTrees];
- foundNext = false;
- for (int i = 0; i < numberOfTrees; i++) {
- btreeCursors[i].close();
- }
- IndexCursorUtils.open(btreeAccessors, btreeCursors, btreeRangePredicate);
- try {
- for (int i = 0; i < numberOfTrees; i++) {
- if (btreeCursors[i].hasNext()) {
- btreeCursors[i].next();
- } else {
- depletedBtreeCursors[i] = true;
- }
- }
- } catch (Throwable th) { // NOSONAR Must catch all failures to close before throwing
- for (int i = 0; i < numberOfTrees; i++) {
- IndexCursorUtils.close(btreeCursors[i], th);
- }
- throw HyracksDataException.create(th);
- }
- }
-}
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBuddyBTreeMergeCursor.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBuddyBTreeMergeCursor.java
deleted file mode 100644
index eb4b29d..0000000
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBuddyBTreeMergeCursor.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.hyracks.storage.am.lsm.btree.impls;
-
-import org.apache.hyracks.api.exceptions.HyracksDataException;
-import org.apache.hyracks.storage.am.btree.impls.BTree;
-import org.apache.hyracks.storage.am.btree.impls.RangePredicate;
-import org.apache.hyracks.storage.am.common.api.ITreeIndexAccessor;
-import org.apache.hyracks.storage.am.lsm.common.api.ILSMComponent;
-import org.apache.hyracks.storage.am.lsm.common.api.ILSMIndexOperationContext;
-import org.apache.hyracks.storage.am.lsm.common.impls.LSMIndexSearchCursor;
-import org.apache.hyracks.storage.common.ICursorInitialState;
-import org.apache.hyracks.storage.common.IIndexAccessor;
-import org.apache.hyracks.storage.common.IIndexCursor;
-import org.apache.hyracks.storage.common.IIndexCursorStats;
-import org.apache.hyracks.storage.common.ISearchPredicate;
-import org.apache.hyracks.storage.common.util.IndexCursorUtils;
-
-public class LSMBuddyBTreeMergeCursor extends LSMIndexSearchCursor {
-
- public LSMBuddyBTreeMergeCursor(ILSMIndexOperationContext opCtx, IIndexCursorStats stats) {
- super(opCtx, true, stats);
- }
-
- @Override
- protected boolean isDeleted(PriorityQueueElement checkElement) throws HyracksDataException {
- return false;
- }
-
- @Override
- public void doOpen(ICursorInitialState initialState, ISearchPredicate searchPred) throws HyracksDataException {
- LSMBTreeWithBuddyCursorInitialState lsmInitialState = (LSMBTreeWithBuddyCursorInitialState) initialState;
- cmp = lsmInitialState.getBuddyBTreeCmp();
- operationalComponents = lsmInitialState.getOperationalComponents();
- // We intentionally set the lsmHarness to null so that we don't call
- // lsmHarness.endSearch() because we already do that when we merge
- // actual index.
- lsmHarness = null;
- int numBTrees = operationalComponents.size();
- rangeCursors = new IIndexCursor[numBTrees];
- RangePredicate btreePredicate = new RangePredicate(null, null, true, true, cmp, cmp);
- IIndexAccessor[] btreeAccessors = new ITreeIndexAccessor[numBTrees];
- for (int i = 0; i < numBTrees; i++) {
- ILSMComponent component = operationalComponents.get(i);
- BTree buddyBtree = ((LSMBTreeWithBuddyDiskComponent) component).getBuddyIndex();
- btreeAccessors[i] = buddyBtree.createAccessor(iap);
- rangeCursors[i] = btreeAccessors[i].createSearchCursor(false);
- }
- IndexCursorUtils.open(btreeAccessors, rangeCursors, btreePredicate);
- try {
- setPriorityQueueComparator();
- initPriorityQueue();
- } catch (Throwable th) { // NOSONAR: Must catch all failures
- IndexCursorUtils.close(rangeCursors, th);
- throw HyracksDataException.create(th);
- }
- }
-}
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMIndexFileManager.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMIndexFileManager.java
index 2d38758..f2727ed 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMIndexFileManager.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMIndexFileManager.java
@@ -19,7 +19,6 @@
package org.apache.hyracks.storage.am.lsm.common.api;
-import java.io.IOException;
import java.util.Comparator;
import java.util.List;
@@ -53,33 +52,6 @@
Comparator<String> getFileNameComparator();
/**
- * @return delete existing transaction disk component file reference
- * @throws HyracksDataException
- */
- void deleteTransactionFiles() throws HyracksDataException;
-
- /**
- * Rename files of a transaction removing the transaction prefix and return the component file reference in order to be committed
- *
- * @return the renamed component file references
- * @throws HyracksDataException
- */
- LSMComponentFileReferences getTransactionFileReferenceForCommit() throws HyracksDataException;
-
- /**
- * Recover transaction files without returning them
- *
- * @throws HyracksDataException
- */
- void recoverTransaction() throws HyracksDataException;
-
- /**
- * @return a reference to the transaction disk component file reference
- * @throws IOException
- */
- LSMComponentFileReferences getNewTransactionFileReference() throws IOException;
-
- /**
* Initializes the last used sequence
*
* @param lastUsedSeq
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbortRecoverLSMIndexFileManager.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbortRecoverLSMIndexFileManager.java
deleted file mode 100644
index 72d5423..0000000
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbortRecoverLSMIndexFileManager.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.hyracks.storage.am.lsm.common.impls;
-
-import org.apache.hyracks.api.io.FileReference;
-import org.apache.hyracks.api.io.IIOManager;
-
-public class AbortRecoverLSMIndexFileManager extends AbstractLSMIndexFileManager {
- public AbortRecoverLSMIndexFileManager(IIOManager ioManager, FileReference file) {
- super(ioManager, file, null);
- }
-}
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMIndexFileManager.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMIndexFileManager.java
index 5d70337..4da207d 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMIndexFileManager.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMIndexFileManager.java
@@ -20,7 +20,6 @@
package org.apache.hyracks.storage.am.lsm.common.impls;
import java.io.FilenameFilter;
-import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
@@ -79,17 +78,12 @@
* Indicates Look Aside File (LAF) for compressed indexes
*/
public static final String LAF_SUFFIX = ".dic";
- /**
- * Hides transaction components until they are either committed by removing this file or deleted along with the file
- */
- public static final String TXN_PREFIX = ".T";
public static final long UNINITIALIZED_COMPONENT_SEQ = -1;
public static final FilenameFilter COMPONENT_FILES_FILTER = (dir, name) -> !name.startsWith(".");
- protected static final FilenameFilter txnFileNameFilter = (dir, name) -> name.startsWith(TXN_PREFIX);
- protected static FilenameFilter bloomFilterFilter =
+ protected static FilenameFilter BLOOM_FILTER_FILTER =
(dir, name) -> !name.startsWith(".") && name.endsWith(BLOOM_FILTER_SUFFIX);
protected static final Comparator<String> cmp = new FileNameComparator();
- private static final FilenameFilter dummyFilter = (dir, name) -> true;
+
protected final IIOManager ioManager;
// baseDir should reflect dataset name and partition name and be absolute
protected final FileReference baseDir;
@@ -293,19 +287,7 @@
return baseDir;
}
- @Override
- public void recoverTransaction() throws HyracksDataException {
- String[] files = listDirFiles(baseDir, txnFileNameFilter);
- if (files.length == 0) {
- // Do nothing
- } else if (files.length > 1) {
- throw HyracksDataException.create(ErrorCode.FOUND_MULTIPLE_TRANSACTIONS, baseDir);
- } else {
- IoUtil.delete(baseDir.getChild(files[0]));
- }
- }
-
- private class RecencyComparator implements Comparator<IndexComponentFileReference> {
+ private static class RecencyComparator implements Comparator<IndexComponentFileReference> {
@Override
public int compare(IndexComponentFileReference a, IndexComponentFileReference b) {
int startCmp = -Long.compare(a.getSequenceStart(), b.getSequenceStart());
@@ -316,65 +298,15 @@
}
}
- // This function is used to delete transaction files for aborted transactions
- @Override
- public void deleteTransactionFiles() throws HyracksDataException {
- String[] files = listDirFiles(baseDir, txnFileNameFilter);
- if (files.length == 0) {
- // Do nothing
- } else if (files.length > 1) {
- throw HyracksDataException.create(ErrorCode.FOUND_MULTIPLE_TRANSACTIONS, baseDir);
- } else {
- //create transaction filter
- FilenameFilter transactionFilter = createTransactionFilter(files[0], true);
- String[] componentsFiles = listDirFiles(baseDir, transactionFilter);
- for (String fileName : componentsFiles) {
- FileReference file = baseDir.getChild(fileName);
- IoUtil.delete(file);
- }
- // delete the txn lock file
- IoUtil.delete(baseDir.getChild(files[0]));
- }
- }
-
- @Override
- public LSMComponentFileReferences getNewTransactionFileReference() throws IOException {
- return null;
- }
-
- @Override
- public LSMComponentFileReferences getTransactionFileReferenceForCommit() throws HyracksDataException {
- return null;
- }
-
@Override
public void initLastUsedSeq(long lastUsedSeq) {
lastUsedComponentSeq = lastUsedSeq;
}
- private static FilenameFilter createTransactionFilter(String transactionFileName, final boolean inclusive) {
- final String timeStamp =
- transactionFileName.substring(transactionFileName.indexOf(TXN_PREFIX) + TXN_PREFIX.length());
- return (dir, name) -> inclusive == name.startsWith(timeStamp);
- }
-
- protected FilenameFilter getTransactionFileFilter(boolean inclusive) throws HyracksDataException {
- String[] files = listDirFiles(baseDir, txnFileNameFilter);
- if (files.length == 0) {
- return dummyFilter;
- } else {
- return createTransactionFilter(files[0], inclusive);
- }
- }
-
protected void delete(IBufferCache bufferCache, FileReference fileRef) throws HyracksDataException {
bufferCache.deleteFile(fileRef);
}
- protected FilenameFilter getCompoundFilter(final FilenameFilter filter1, final FilenameFilter filter2) {
- return (dir, name) -> filter1.accept(dir, name) && filter2.accept(dir, name);
- }
-
protected String getNextComponentSequence(FilenameFilter filenameFilter) throws HyracksDataException {
if (lastUsedComponentSeq == UNINITIALIZED_COMPONENT_SEQ) {
lastUsedComponentSeq = getOnDiskLastUsedComponentSequence(filenameFilter);
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndexFileManager.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndexFileManager.java
index 83f6573..3b8f82a 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndexFileManager.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndexFileManager.java
@@ -92,7 +92,7 @@
validateFiles(deletedKeysBTreeFilesSet, allInvListsFiles, invListFilter, null, btreeFactory.getBufferCache());
validateFiles(deletedKeysBTreeFilesSet, allDictBTreeFiles, dictBTreeFilter, btreeFactory,
btreeFactory.getBufferCache());
- validateFiles(deletedKeysBTreeFilesSet, allBloomFilterFiles, bloomFilterFilter, null,
+ validateFiles(deletedKeysBTreeFilesSet, allBloomFilterFiles, BLOOM_FILTER_FILTER, null,
btreeFactory.getBufferCache());
// Sanity check.
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeFileManager.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeFileManager.java
index 81e8f83..a511f8c 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeFileManager.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeFileManager.java
@@ -20,9 +20,6 @@
package org.apache.hyracks.storage.am.lsm.rtree.impls;
import java.io.FilenameFilter;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
@@ -33,7 +30,6 @@
import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.api.io.FileReference;
import org.apache.hyracks.api.io.IIOManager;
-import org.apache.hyracks.api.util.IoUtil;
import org.apache.hyracks.storage.am.common.api.ITreeIndex;
import org.apache.hyracks.storage.am.lsm.common.impls.AbstractLSMIndexFileManager;
import org.apache.hyracks.storage.am.lsm.common.impls.IndexComponentFileReference;
@@ -80,20 +76,14 @@
ArrayList<IndexComponentFileReference> allBTreeFiles = new ArrayList<>();
ArrayList<IndexComponentFileReference> allBloomFilterFiles = new ArrayList<>();
- // Create a transaction filter <- to hide transaction components->
- FilenameFilter transactionFilter = getTransactionFileFilter(false);
-
// Gather files.
- cleanupAndGetValidFilesInternal(getCompoundFilter(transactionFilter, btreeFilter), btreeFactory, allBTreeFiles,
- btreeFactory.getBufferCache());
+ cleanupAndGetValidFilesInternal(btreeFilter, btreeFactory, allBTreeFiles, btreeFactory.getBufferCache());
HashSet<String> btreeFilesSet = new HashSet<>();
for (IndexComponentFileReference cmpFileName : allBTreeFiles) {
btreeFilesSet.add(cmpFileName.getSequence());
}
- validateFiles(btreeFilesSet, allRTreeFiles, getCompoundFilter(transactionFilter, rtreeFilter), rtreeFactory,
- btreeFactory.getBufferCache());
- validateFiles(btreeFilesSet, allBloomFilterFiles, getCompoundFilter(transactionFilter, bloomFilterFilter), null,
- btreeFactory.getBufferCache());
+ validateFiles(btreeFilesSet, allRTreeFiles, rtreeFilter, rtreeFactory, btreeFactory.getBufferCache());
+ validateFiles(btreeFilesSet, allBloomFilterFiles, BLOOM_FILTER_FILTER, null, btreeFactory.getBufferCache());
// Sanity check.
if (allRTreeFiles.size() != allBTreeFiles.size() || allBTreeFiles.size() != allBloomFilterFiles.size()) {
@@ -101,11 +91,11 @@
}
// Trivial cases.
- if (allRTreeFiles.isEmpty() || allBTreeFiles.isEmpty() || allBloomFilterFiles.isEmpty()) {
+ if (allRTreeFiles.isEmpty()) {
return validFiles;
}
- if (allRTreeFiles.size() == 1 && allBTreeFiles.size() == 1 && allBloomFilterFiles.size() == 1) {
+ if (allRTreeFiles.size() == 1) {
validFiles.add(new LSMComponentFileReferences(allRTreeFiles.get(0).getFileRef(),
allBTreeFiles.get(0).getFileRef(), allBloomFilterFiles.get(0).getFileRef()));
return validFiles;
@@ -171,49 +161,4 @@
}
return validFiles;
}
-
- @Override
- public LSMComponentFileReferences getNewTransactionFileReference() throws IOException {
- String baseName = getNextComponentSequence(btreeFilter);
- // Create transaction lock file
- Files.createFile(Paths.get(baseDir + TXN_PREFIX + baseName));
- return new LSMComponentFileReferences(baseDir.getChild(baseName + DELIMITER + RTREE_SUFFIX),
- baseDir.getChild(baseName + DELIMITER + BTREE_SUFFIX),
- baseDir.getChild(baseName + DELIMITER + BLOOM_FILTER_SUFFIX));
- }
-
- @Override
- public LSMComponentFileReferences getTransactionFileReferenceForCommit() throws HyracksDataException {
- FilenameFilter transactionFilter;
- String[] files = baseDir.getFile().list(txnFileNameFilter);
- if (files.length == 0) {
- return null;
- }
- if (files.length != 1) {
- throw HyracksDataException.create(ErrorCode.FOUND_MULTIPLE_TRANSACTIONS, baseDir);
- } else {
- transactionFilter = getTransactionFileFilter(true);
- // get the actual transaction files
- files = baseDir.getFile().list(transactionFilter);
- if (files.length < 3) {
- throw HyracksDataException.create(ErrorCode.UNEQUAL_NUM_FILTERS_TREES, baseDir);
- }
- IoUtil.delete(baseDir.getChild(files[0]));
- }
- FileReference rTreeFileRef = null;
- FileReference bTreeFileRef = null;
- FileReference bloomFilterFileRef = null;
- for (String fileName : files) {
- if (fileName.endsWith(BTREE_SUFFIX)) {
- bTreeFileRef = baseDir.getChild(fileName);
- } else if (fileName.endsWith(RTREE_SUFFIX)) {
- rTreeFileRef = baseDir.getChild(fileName);
- } else if (fileName.endsWith(BLOOM_FILTER_SUFFIX)) {
- bloomFilterFileRef = baseDir.getChild(fileName);
- } else {
- throw HyracksDataException.create(ErrorCode.UNRECOGNIZED_INDEX_COMPONENT_FILE, fileName);
- }
- }
- return new LSMComponentFileReferences(rTreeFileRef, bTreeFileRef, bloomFilterFileRef);
- }
}