You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asterixdb.apache.org by am...@apache.org on 2017/01/07 05:48:37 UTC
[2/5] asterixdb git commit: Change the API for writing and reading
metadata pages
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/90cdbac7/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/frames/LSMComponentFilterFrameFactory.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/frames/LSMComponentFilterFrameFactory.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/frames/LSMComponentFilterFrameFactory.java
index 7a75534..999f72b 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/frames/LSMComponentFilterFrameFactory.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/frames/LSMComponentFilterFrameFactory.java
@@ -20,21 +20,19 @@
package org.apache.hyracks.storage.am.lsm.common.frames;
import org.apache.hyracks.storage.am.common.api.ITreeIndexTupleWriterFactory;
-import org.apache.hyracks.storage.am.lsm.common.api.ILSMComponentFilterFrame;
import org.apache.hyracks.storage.am.lsm.common.api.ILSMComponentFilterFrameFactory;
+import org.apache.hyracks.storage.am.lsm.common.api.ILSMComponentFilterReference;
public class LSMComponentFilterFrameFactory implements ILSMComponentFilterFrameFactory {
private final ITreeIndexTupleWriterFactory tupleWriterFactory;
- private final int pageSize;
- public LSMComponentFilterFrameFactory(ITreeIndexTupleWriterFactory tupleWriterFactory, int pageSize) {
+ public LSMComponentFilterFrameFactory(ITreeIndexTupleWriterFactory tupleWriterFactory) {
this.tupleWriterFactory = tupleWriterFactory;
- this.pageSize = pageSize;
}
@Override
- public ILSMComponentFilterFrame createFrame() {
- return new LSMComponentFilterFrame(tupleWriterFactory.createTupleWriter(), pageSize);
+ public ILSMComponentFilterReference createFrame() {
+ return new LSMComponentFilterReference(tupleWriterFactory.createTupleWriter());
}
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/90cdbac7/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/frames/LSMComponentFilterReference.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/frames/LSMComponentFilterReference.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/frames/LSMComponentFilterReference.java
new file mode 100644
index 0000000..f04cbb0
--- /dev/null
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/frames/LSMComponentFilterReference.java
@@ -0,0 +1,163 @@
+/*
+ * 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.frames;
+
+import org.apache.hyracks.data.std.api.IValueReference;
+import org.apache.hyracks.data.std.primitive.BooleanPointable;
+import org.apache.hyracks.data.std.primitive.IntegerPointable;
+import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
+import org.apache.hyracks.dataflow.common.data.accessors.ITupleReference;
+import org.apache.hyracks.storage.am.common.api.ITreeIndexTupleReference;
+import org.apache.hyracks.storage.am.common.api.ITreeIndexTupleWriter;
+import org.apache.hyracks.storage.am.lsm.common.api.ILSMComponentFilterReference;
+
+/**
+ * When written to disk:
+ * [min set?][max set?][min length][min][max length][max]
+ */
+public class LSMComponentFilterReference implements ILSMComponentFilterReference {
+
+ private static final int MIN_SET_INDICATOR_OFFSET = 0;
+ private static final int MAX_SET_INDICATOR_OFFSET = 1;
+
+ private final ArrayBackedValueStorage min;
+ private final ArrayBackedValueStorage max;
+ private ArrayBackedValueStorage binaryFilter;
+ private final ITreeIndexTupleWriter tupleWriter;
+ private ITreeIndexTupleReference minTuple;
+ private ITreeIndexTupleReference maxTuple;
+
+ public LSMComponentFilterReference(ITreeIndexTupleWriter tupleWriter) {
+ this.tupleWriter = tupleWriter;
+ min = new ArrayBackedValueStorage();
+ max = new ArrayBackedValueStorage();
+ binaryFilter = new ArrayBackedValueStorage();
+ minTuple = tupleWriter.createTupleReference();
+ maxTuple = tupleWriter.createTupleReference();
+ }
+
+ @Override
+ public void writeMinTuple(ITupleReference tuple) {
+ binaryFilter.reset();
+ min.reset();
+ min.setSize(tupleWriter.bytesRequired(tuple));
+ tupleWriter.writeTuple(tuple, min.getByteArray(), 0);
+ }
+
+ @Override
+ public void writeMaxTuple(ITupleReference tuple) {
+ binaryFilter.reset();
+ max.reset();
+ max.setSize(tupleWriter.bytesRequired(tuple));
+ tupleWriter.writeTuple(tuple, max.getByteArray(), 0);
+ }
+
+ @Override
+ public boolean isMinTupleSet() {
+ return min.getLength() > 0;
+ }
+
+ @Override
+ public boolean isMaxTupleSet() {
+ return max.getLength() > 0;
+ }
+
+ @Override
+ public ITupleReference getMinTuple() {
+ minTuple.resetByTupleOffset(min.getByteArray(), 0);
+ return minTuple;
+ }
+
+ @Override
+ public ITupleReference getMaxTuple() {
+ maxTuple.resetByTupleOffset(max.getByteArray(), 0);
+ return maxTuple;
+ }
+
+ @Override
+ public byte[] getByteArray() {
+ if (binaryFilter.getLength() == 0) {
+ int binarySize = 2;
+ if (min.getLength() > 0) {
+ binarySize += Integer.BYTES + min.getLength();
+ }
+ if (max.getLength() > 0) {
+ binarySize += Integer.BYTES + max.getLength();
+ }
+ binaryFilter.setSize(binarySize);
+ byte[] buf = binaryFilter.getByteArray();
+ BooleanPointable.setBoolean(buf, MIN_SET_INDICATOR_OFFSET, min.getLength() == 0);
+ BooleanPointable.setBoolean(buf, MAX_SET_INDICATOR_OFFSET, max.getLength() == 0);
+ int offset = 2;
+ if (min.getLength() > 0) {
+ IntegerPointable.setInteger(buf, offset, min.getLength());
+ offset += Integer.BYTES;
+ System.arraycopy(min.getByteArray(), 0, buf, offset, min.getLength());
+ }
+ if (max.getLength() > 0) {
+ IntegerPointable.setInteger(buf, offset, max.getLength());
+ offset += Integer.BYTES;
+ System.arraycopy(max.getByteArray(), 0, buf, offset, max.getLength());
+ }
+ }
+ return binaryFilter.getByteArray();
+ }
+
+ @Override
+ public int getStartOffset() {
+ return 0;
+ }
+
+ @Override
+ public int getLength() {
+ return binaryFilter.getLength();
+ }
+
+ @Override
+ public void reset() {
+ min.reset();
+ max.reset();
+ binaryFilter.reset();
+ }
+
+ @Override
+ public void set(byte[] bytes, int start, int length) {
+ boolean isMinSet = BooleanPointable.getBoolean(bytes, MIN_SET_INDICATOR_OFFSET + start);
+ boolean isMaxSet = BooleanPointable.getBoolean(bytes, MAX_SET_INDICATOR_OFFSET + start);
+ int srcOffset = start + 2;
+ if (isMinSet) {
+ min.setSize(IntegerPointable.getInteger(bytes, srcOffset));
+ srcOffset += Integer.BYTES;
+ System.arraycopy(bytes, srcOffset, min.getByteArray(), 0, min.getLength());
+ srcOffset += min.getLength();
+ }
+ if (isMaxSet) {
+ max.setSize(IntegerPointable.getInteger(bytes, srcOffset));
+ srcOffset += Integer.BYTES;
+ System.arraycopy(bytes, srcOffset, max.getByteArray(), 0, max.getLength());
+ }
+ binaryFilter.reset();
+ }
+
+ @Override
+ public void set(IValueReference pointer) {
+ set(pointer.getByteArray(), pointer.getStartOffset(), pointer.getLength());
+ }
+}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/90cdbac7/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/freepage/VirtualFreePageManager.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/freepage/VirtualFreePageManager.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/freepage/VirtualFreePageManager.java
index 5771728..08c75dc 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/freepage/VirtualFreePageManager.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/freepage/VirtualFreePageManager.java
@@ -25,7 +25,7 @@ import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.storage.am.common.api.IPageManager;
import org.apache.hyracks.storage.am.common.api.ITreeIndexFrame;
import org.apache.hyracks.storage.am.common.api.ITreeIndexFrameFactory;
-import org.apache.hyracks.storage.am.common.api.ITreeIndexMetaDataFrame;
+import org.apache.hyracks.storage.am.common.api.ITreeIndexMetadataFrame;
import org.apache.hyracks.storage.common.buffercache.IBufferCache;
import org.apache.hyracks.storage.common.buffercache.ICachedPage;
import org.apache.hyracks.storage.common.file.BufferedFileHandle;
@@ -44,34 +44,34 @@ public class VirtualFreePageManager implements IPageManager {
}
@Override
- public int takePage(ITreeIndexMetaDataFrame metaFrame) throws HyracksDataException {
+ public int takePage(ITreeIndexMetadataFrame metaFrame) throws HyracksDataException {
// The very first call returns page id 2 because the BTree uses
// the first page as metadata page, and the second page as root page.
return currentPageId.incrementAndGet();
}
@Override
- public int takeBlock(ITreeIndexMetaDataFrame metaFrame, int count) throws HyracksDataException {
+ public int takeBlock(ITreeIndexMetadataFrame metaFrame, int count) throws HyracksDataException {
return currentPageId.getAndUpdate(operand -> operand + count) + 1;
}
@Override
- public int getMaxPageId(ITreeIndexMetaDataFrame metaFrame) throws HyracksDataException {
+ public int getMaxPageId(ITreeIndexMetadataFrame metaFrame) throws HyracksDataException {
return currentPageId.get();
}
@Override
- public ITreeIndexMetaDataFrame createMetadataFrame() {
+ public ITreeIndexMetadataFrame createMetadataFrame() {
return null;
}
@Override
- public void releasePage(ITreeIndexMetaDataFrame metaFrame, int freePage) throws HyracksDataException {
+ public void releasePage(ITreeIndexMetadataFrame metaFrame, int freePage) throws HyracksDataException {
throw new HyracksDataException("Pages of an in memory index are released through the virtual buffer cache");
}
@Override
- public void releaseBlock(ITreeIndexMetaDataFrame metaFrame, int startingPage, int count)
+ public void releaseBlock(ITreeIndexMetadataFrame metaFrame, int startingPage, int count)
throws HyracksDataException {
throw new HyracksDataException("Pages of an in memory index are released through the virtual buffer cache");
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/90cdbac7/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMComponent.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMComponent.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMComponent.java
index c678878..cf50c00 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMComponent.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMComponent.java
@@ -18,15 +18,21 @@
*/
package org.apache.hyracks.storage.am.lsm.common.impls;
+import org.apache.hyracks.data.std.primitive.LongPointable;
+import org.apache.hyracks.storage.am.common.freepage.MutableArrayValueReference;
import org.apache.hyracks.storage.am.lsm.common.api.ILSMComponent;
import org.apache.hyracks.storage.am.lsm.common.api.ILSMComponentFilter;
public abstract class AbstractLSMComponent implements ILSMComponent {
+ public static final MutableArrayValueReference MARKER_LSN_KEY = new MutableArrayValueReference("Marker"
+ .getBytes());
+
protected ComponentState state;
protected int readerCount;
protected final ILSMComponentFilter filter;
protected long mostRecentMarkerLSN;
+ protected final LongPointable pointable = (LongPointable) LongPointable.FACTORY.createPointable();
public AbstractLSMComponent(ILSMComponentFilter filter, long mostRecentMarkerLSN) {
this.filter = filter;
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/90cdbac7/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMIndexFileManager.java
----------------------------------------------------------------------
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 43b6f92..731d312 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
@@ -37,7 +37,8 @@ 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.storage.am.common.api.ITreeIndex;
-import org.apache.hyracks.storage.am.common.api.ITreeIndexMetaDataFrame;
+import org.apache.hyracks.storage.am.common.api.ITreeIndexFrame;
+import org.apache.hyracks.storage.am.common.api.ITreeIndexMetadataFrame;
import org.apache.hyracks.storage.am.common.api.IndexException;
import org.apache.hyracks.storage.am.lsm.common.api.ILSMIndexFileManager;
import org.apache.hyracks.storage.common.buffercache.IBufferCache;
@@ -94,7 +95,7 @@ public abstract class AbstractLSMIndexFileManager implements ILSMIndexFileManage
if (metadataPage < 0) {
return TreeIndexState.INVALID;
}
- ITreeIndexMetaDataFrame metadataFrame = treeIndex.getPageManager().createMetadataFrame();
+ ITreeIndexMetadataFrame metadataFrame = treeIndex.getPageManager().createMetadataFrame();
ICachedPage page = bufferCache.pin(BufferedFileHandle.getDiskPageId(treeIndex.getFileId(), metadataPage),
false);
page.acquireReadLatch();
@@ -102,7 +103,7 @@ public abstract class AbstractLSMIndexFileManager implements ILSMIndexFileManage
metadataFrame.setPage(page);
if (!metadataFrame.isValid()) {
return TreeIndexState.INVALID;
- } else if (metadataFrame.getVersion() != ITreeIndexMetaDataFrame.VERSION) {
+ } else if (metadataFrame.getVersion() != ITreeIndexFrame.Constants.VERSION) {
return TreeIndexState.VERSION_MISMATCH;
} else {
return TreeIndexState.VALID;
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/90cdbac7/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMComponentFilter.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMComponentFilter.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMComponentFilter.java
index f7bc2ad..32937a9 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMComponentFilter.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMComponentFilter.java
@@ -70,7 +70,7 @@ public class LSMComponentFilter implements ILSMComponentFilter {
tupleWriter.writeTuple(tuple, minTupleBytes, 0);
minTupleBuf = ByteBuffer.wrap(minTupleBytes);
minTuple = tupleWriter.createTupleReference();
- ((ITreeIndexTupleReference) minTuple).resetByTupleOffset(minTupleBuf, 0);
+ ((ITreeIndexTupleReference) minTuple).resetByTupleOffset(minTupleBuf.array(), 0);
} else {
int c = cmp.compare(tuple, minTuple);
if (c < 0) {
@@ -82,7 +82,7 @@ public class LSMComponentFilter implements ILSMComponentFilter {
} else {
tupleWriter.writeTuple(tuple, minTupleBytes, 0);
}
- ((ITreeIndexTupleReference) minTuple).resetByTupleOffset(minTupleBuf, 0);
+ ((ITreeIndexTupleReference) minTuple).resetByTupleOffset(minTupleBuf.array(), 0);
}
}
if (maxTuple == null) {
@@ -91,7 +91,7 @@ public class LSMComponentFilter implements ILSMComponentFilter {
tupleWriter.writeTuple(tuple, maxTupleBytes, 0);
maxTupleBuf = ByteBuffer.wrap(maxTupleBytes);
maxTuple = tupleWriter.createTupleReference();
- ((ITreeIndexTupleReference) maxTuple).resetByTupleOffset(maxTupleBuf, 0);
+ ((ITreeIndexTupleReference) maxTuple).resetByTupleOffset(maxTupleBuf.array(), 0);
} else {
int c = cmp.compare(tuple, maxTuple);
if (c > 0) {
@@ -103,7 +103,7 @@ public class LSMComponentFilter implements ILSMComponentFilter {
} else {
tupleWriter.writeTuple(tuple, maxTupleBytes, 0);
}
- ((ITreeIndexTupleReference) maxTuple).resetByTupleOffset(maxTupleBuf, 0);
+ ((ITreeIndexTupleReference) maxTuple).resetByTupleOffset(maxTupleBuf.array(), 0);
}
}
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/90cdbac7/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMComponentFilterManager.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMComponentFilterManager.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMComponentFilterManager.java
index 0fbbbdf..a8b4c70 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMComponentFilterManager.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMComponentFilterManager.java
@@ -25,22 +25,19 @@ import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.dataflow.common.data.accessors.ITupleReference;
import org.apache.hyracks.storage.am.common.api.IMetadataPageManager;
import org.apache.hyracks.storage.am.common.api.ITreeIndex;
+import org.apache.hyracks.storage.am.common.freepage.MutableArrayValueReference;
import org.apache.hyracks.storage.am.common.ophelpers.MultiComparator;
import org.apache.hyracks.storage.am.lsm.common.api.ILSMComponentFilter;
-import org.apache.hyracks.storage.am.lsm.common.api.ILSMComponentFilterFrame;
import org.apache.hyracks.storage.am.lsm.common.api.ILSMComponentFilterFrameFactory;
import org.apache.hyracks.storage.am.lsm.common.api.ILSMComponentFilterManager;
-import org.apache.hyracks.storage.common.buffercache.IBufferCache;
-import org.apache.hyracks.storage.common.buffercache.ICachedPage;
-import org.apache.hyracks.storage.common.file.BufferedFileHandle;
+import org.apache.hyracks.storage.am.lsm.common.api.ILSMComponentFilterReference;
public class LSMComponentFilterManager implements ILSMComponentFilterManager {
- private final IBufferCache bufferCache;
+ public static final MutableArrayValueReference FILTER_KEY = new MutableArrayValueReference("Filter".getBytes());
private final ILSMComponentFilterFrameFactory filterFrameFactory;
- public LSMComponentFilterManager(IBufferCache bufferCache, ILSMComponentFilterFrameFactory filterFrameFactory) {
- this.bufferCache = bufferCache;
+ public LSMComponentFilterManager(ILSMComponentFilterFrameFactory filterFrameFactory) {
this.filterFrameFactory = filterFrameFactory;
}
@@ -56,11 +53,8 @@ public class LSMComponentFilterManager implements ILSMComponentFilterManager {
@Override
public void writeFilterInfo(ILSMComponentFilter filter, ITreeIndex treeIndex) throws HyracksDataException {
IMetadataPageManager treeMetaManager = (IMetadataPageManager) treeIndex.getPageManager();
- ICachedPage filterPage = treeMetaManager.getFilterPage();
+ ILSMComponentFilterReference filterFrame = filterFrameFactory.createFrame();
try {
- ILSMComponentFilterFrame filterFrame = filterFrameFactory.createFrame();
- filterFrame.setPage(filterPage);
- filterFrame.initBuffer();
if (filter.getMinTuple() != null) {
filterFrame.writeMinTuple(filter.getMinTuple());
}
@@ -68,39 +62,23 @@ public class LSMComponentFilterManager implements ILSMComponentFilterManager {
filterFrame.writeMaxTuple(filter.getMaxTuple());
}
} finally {
- treeMetaManager.setFilterPage(filterPage);
+ treeMetaManager.put(treeMetaManager.createMetadataFrame(), FILTER_KEY, filterFrame);
}
}
@Override
public boolean readFilterInfo(ILSMComponentFilter filter, ITreeIndex treeIndex) throws HyracksDataException {
- int fileId = treeIndex.getFileId();
IMetadataPageManager treeMetaManager = (IMetadataPageManager) treeIndex.getPageManager();
- int componentFilterPageId = treeMetaManager.getFilterPageId();
- if (componentFilterPageId < 0) {
+ ILSMComponentFilterReference filterFrame = filterFrameFactory.createFrame();
+ treeMetaManager.get(treeMetaManager.createMetadataFrame(), FILTER_KEY, filterFrame);
+ // TODO: Filters never have one of min/max set and the other not
+ if (!filterFrame.isMinTupleSet() || !filterFrame.isMaxTupleSet()) {
return false;
}
-
- ICachedPage filterPage = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, componentFilterPageId),
- false);
-
- filterPage.acquireReadLatch();
- try {
- ILSMComponentFilterFrame filterFrame = filterFrameFactory.createFrame();
- filterFrame.setPage(filterPage);
-
- if (!filterFrame.isMinTupleSet() || !filterFrame.isMaxTupleSet()) {
- return false;
- }
- List<ITupleReference> filterTuples = new ArrayList<>();
- filterTuples.add(filterFrame.getMinTuple());
- filterTuples.add(filterFrame.getMaxTuple());
- updateFilterInfo(filter, filterTuples);
-
- } finally {
- filterPage.releaseReadLatch();
- bufferCache.unpin(filterPage);
- }
+ List<ITupleReference> filterTuples = new ArrayList<>();
+ filterTuples.add(filterFrame.getMinTuple());
+ filterTuples.add(filterFrame.getMaxTuple());
+ updateFilterInfo(filter, filterTuples);
return true;
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/90cdbac7/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java
index 896d513..a6868f0 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java
@@ -66,7 +66,7 @@ public class LSMHarness implements ILSMHarness {
//only durable indexes are replicated
this.replicationEnabled = replicationEnabled && lsmIndex.isDurable();
if (replicationEnabled) {
- this.componentsToBeReplicated = new ArrayList<ILSMComponent>();
+ this.componentsToBeReplicated = new ArrayList<>();
}
}
@@ -314,7 +314,7 @@ public class LSMHarness implements ILSMHarness {
for (ILSMComponent inactiveComp : inactiveDiskComponents) {
if (((AbstractDiskLSMComponent) inactiveComp).getFileReferenceCount() == 1) {
if (inactiveDiskComponentsToBeDeleted == null) {
- inactiveDiskComponentsToBeDeleted = new LinkedList<ILSMComponent>();
+ inactiveDiskComponentsToBeDeleted = new LinkedList<>();
}
inactiveDiskComponentsToBeDeleted.add(inactiveComp);
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/90cdbac7/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/VirtualBufferCache.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/VirtualBufferCache.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/VirtualBufferCache.java
index 416f859..49f9060 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/VirtualBufferCache.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/VirtualBufferCache.java
@@ -22,9 +22,7 @@ import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Collections;
import java.util.concurrent.atomic.AtomicInteger;
-import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantLock;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -36,7 +34,7 @@ import org.apache.hyracks.storage.common.buffercache.ICacheMemoryAllocator;
import org.apache.hyracks.storage.common.buffercache.ICachedPage;
import org.apache.hyracks.storage.common.buffercache.IExtraPageBlockHelper;
import org.apache.hyracks.storage.common.buffercache.IFIFOPageQueue;
-import org.apache.hyracks.storage.common.buffercache.IQueueInfo;
+import org.apache.hyracks.storage.common.buffercache.VirtualPage;
import org.apache.hyracks.storage.common.file.BufferedFileHandle;
import org.apache.hyracks.storage.common.file.IFileMapManager;
import org.apache.hyracks.storage.common.file.TransientFileMapManager;
@@ -106,19 +104,19 @@ public class VirtualBufferCache implements IVirtualBufferCache {
VirtualPage prev = null;
VirtualPage curr = bucket.cachedPage;
while (curr != null) {
- if (BufferedFileHandle.getFileId(curr.dpid) == fileId) {
+ if (BufferedFileHandle.getFileId(curr.dpid()) == fileId) {
if (prev == null) {
- bucket.cachedPage = curr.next;
+ bucket.cachedPage = curr.next();
curr.reset();
curr = bucket.cachedPage;
} else {
- prev.next = curr.next;
+ prev.next(curr.next());
curr.reset();
- curr = prev.next;
+ curr = prev.next();
}
} else {
prev = curr;
- curr = curr.next;
+ curr = curr.next();
}
}
} finally {
@@ -134,18 +132,18 @@ public class VirtualBufferCache implements IVirtualBufferCache {
int end = nextFree - 1;
while (start < end) {
VirtualPage lastUsed = pages.get(end);
- while (end > 0 && lastUsed.dpid == -1) {
+ while (end > 0 && lastUsed.dpid() == -1) {
--end;
lastUsed = pages.get(end);
}
if (end == 0) {
- nextFree = lastUsed.dpid == -1 ? 0 : 1;
+ nextFree = lastUsed.dpid() == -1 ? 0 : 1;
break;
}
VirtualPage firstUnused = pages.get(start);
- while (start < end && firstUnused.dpid != -1) {
+ while (start < end && firstUnused.dpid() != -1) {
++start;
firstUnused = pages.get(start);
}
@@ -177,10 +175,10 @@ public class VirtualBufferCache implements IVirtualBufferCache {
try {
page = bucket.cachedPage;
while (page != null) {
- if (page.dpid == dpid) {
+ if (page.dpid() == dpid) {
return page;
}
- page = page.next;
+ page = page.next();
}
if (!newPage) {
@@ -189,7 +187,7 @@ public class VirtualBufferCache implements IVirtualBufferCache {
}
page = getOrAllocPage(dpid);
- page.next = bucket.cachedPage;
+ page.next(bucket.cachedPage);
bucket.cachedPage = page;
} finally {
bucket.bucketLock.unlock();
@@ -207,14 +205,14 @@ public class VirtualBufferCache implements IVirtualBufferCache {
VirtualPage page;
synchronized (pages) {
if (nextFree >= pages.size()) {
- page = new VirtualPage(allocator.allocate(pageSize, 1)[0]);
- page.multiplier = 1;
+ page = new VirtualPage(allocator.allocate(pageSize, 1)[0], pageSize);
+ page.multiplier(1);
pages.add(page);
} else {
page = pages.get(nextFree);
}
++nextFree;
- page.dpid = dpid;
+ page.dpid(dpid);
}
return page;
}
@@ -248,8 +246,8 @@ public class VirtualBufferCache implements IVirtualBufferCache {
} else {
largePages.getAndAdd(multiplier - origMultiplier);
}
- ((VirtualPage) cPage).buffer = newBuffer;
- ((VirtualPage) cPage).multiplier = multiplier;
+ ((VirtualPage) cPage).buffer(newBuffer);
+ ((VirtualPage) cPage).multiplier(multiplier);
}
@Override
@@ -352,76 +350,6 @@ public class VirtualBufferCache implements IVirtualBufferCache {
}
}
- private class VirtualPage implements ICachedPage {
- ByteBuffer buffer;
- final ReadWriteLock latch;
- volatile long dpid;
- int multiplier;
- VirtualPage next;
-
- public VirtualPage(ByteBuffer buffer) {
- this.buffer = buffer;
- latch = new ReentrantReadWriteLock(true);
- dpid = -1;
- next = null;
- }
-
- public void reset() {
- dpid = -1;
- next = null;
- }
-
- @Override
- public ByteBuffer getBuffer() {
- return buffer;
- }
-
- @Override
- public void acquireReadLatch() {
- latch.readLock().lock();
- }
-
- @Override
- public void releaseReadLatch() {
- latch.readLock().unlock();
- }
-
- @Override
- public void acquireWriteLatch() {
- latch.writeLock().lock();
- }
-
- @Override
- public void releaseWriteLatch(boolean markDirty) {
- latch.writeLock().unlock();
- }
-
- @Override
- public boolean confiscated() {
- return false;
- }
-
- @Override
- public IQueueInfo getQueueInfo() {
- return null;
- }
-
- @Override
- public void setQueueInfo(IQueueInfo queueInfo) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public int getPageSize() {
- return pageSize;
- }
-
- @Override
- public int getFrameSizeMultiplier() {
- return multiplier;
- }
- }
-
//These 4 methods aren't applicable here.
@Override
public int createMemFile() throws HyracksDataException {
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/90cdbac7/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndex.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndex.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndex.java
index cb4b67a..403fa09 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndex.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndex.java
@@ -68,6 +68,7 @@ import org.apache.hyracks.storage.am.lsm.common.api.ILSMIndexOperationContext;
import org.apache.hyracks.storage.am.lsm.common.api.ILSMMergePolicy;
import org.apache.hyracks.storage.am.lsm.common.api.ILSMOperationTracker;
import org.apache.hyracks.storage.am.lsm.common.api.IVirtualBufferCache;
+import org.apache.hyracks.storage.am.lsm.common.api.LSMOperationType;
import org.apache.hyracks.storage.am.lsm.common.freepage.VirtualFreePageManager;
import org.apache.hyracks.storage.am.lsm.common.impls.AbstractLSMIndex;
import org.apache.hyracks.storage.am.lsm.common.impls.BTreeFactory;
@@ -772,6 +773,7 @@ public class LSMInvertedIndex extends AbstractLSMIndex implements IInvertedIndex
if (isEmptyComponent) {
cleanupArtifacts();
} else {
+ ioOpCallback.afterOperation(LSMOperationType.FLUSH, null, component);
lsmHarness.addBulkLoadedComponent(component);
}
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/90cdbac7/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/util/InvertedIndexUtils.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/util/InvertedIndexUtils.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/util/InvertedIndexUtils.java
index 702e653..b8dd258 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/util/InvertedIndexUtils.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/util/InvertedIndexUtils.java
@@ -164,9 +164,8 @@ public class InvertedIndexUtils {
if (filterCmpFactories != null) {
TypeAwareTupleWriterFactory filterTupleWriterFactory = new TypeAwareTupleWriterFactory(filterTypeTraits);
filterFactory = new LSMComponentFilterFactory(filterTupleWriterFactory, filterCmpFactories);
- filterFrameFactory = new LSMComponentFilterFrameFactory(filterTupleWriterFactory,
- diskBufferCache.getPageSize());
- filterManager = new LSMComponentFilterManager(diskBufferCache, filterFrameFactory);
+ filterFrameFactory = new LSMComponentFilterFrameFactory(filterTupleWriterFactory);
+ filterManager = new LSMComponentFilterManager(filterFrameFactory);
}
LSMInvertedIndex invIndex = new LSMInvertedIndex(ioManager, virtualBufferCaches, invIndexFactory,
deletedKeysBTreeFactory,
@@ -216,9 +215,8 @@ public class InvertedIndexUtils {
if (filterCmpFactories != null) {
TypeAwareTupleWriterFactory filterTupleWriterFactory = new TypeAwareTupleWriterFactory(filterTypeTraits);
filterFactory = new LSMComponentFilterFactory(filterTupleWriterFactory, filterCmpFactories);
- filterFrameFactory = new LSMComponentFilterFrameFactory(filterTupleWriterFactory,
- diskBufferCache.getPageSize());
- filterManager = new LSMComponentFilterManager(diskBufferCache, filterFrameFactory);
+ filterFrameFactory = new LSMComponentFilterFrameFactory(filterTupleWriterFactory);
+ filterManager = new LSMComponentFilterManager(filterFrameFactory);
}
PartitionedLSMInvertedIndex invIndex = new PartitionedLSMInvertedIndex(ioManager, virtualBufferCaches,
invIndexFactory,
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/90cdbac7/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTree.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTree.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTree.java
index 0ce35d4..bfaef38 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTree.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTree.java
@@ -67,6 +67,7 @@ import org.apache.hyracks.storage.am.lsm.common.api.ILSMIndexOperationContext;
import org.apache.hyracks.storage.am.lsm.common.api.ILSMMergePolicy;
import org.apache.hyracks.storage.am.lsm.common.api.ILSMOperationTracker;
import org.apache.hyracks.storage.am.lsm.common.api.IVirtualBufferCache;
+import org.apache.hyracks.storage.am.lsm.common.api.LSMOperationType;
import org.apache.hyracks.storage.am.lsm.common.impls.LSMComponentFileReferences;
import org.apache.hyracks.storage.am.lsm.common.impls.LSMComponentFilterManager;
import org.apache.hyracks.storage.am.lsm.common.impls.LSMTreeIndexAccessor;
@@ -599,6 +600,7 @@ public class LSMRTree extends AbstractLSMRTree {
if (isEmptyComponent) {
cleanupArtifacts();
} else {
+ ioOpCallback.afterOperation(LSMOperationType.FLUSH, null, component);
lsmHarness.addBulkLoadedComponent(component);
}
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/90cdbac7/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeWithAntiMatterTuples.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeWithAntiMatterTuples.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeWithAntiMatterTuples.java
index 5565872..6b67494 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeWithAntiMatterTuples.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeWithAntiMatterTuples.java
@@ -58,6 +58,7 @@ import org.apache.hyracks.storage.am.lsm.common.api.ILSMIndexOperationContext;
import org.apache.hyracks.storage.am.lsm.common.api.ILSMMergePolicy;
import org.apache.hyracks.storage.am.lsm.common.api.ILSMOperationTracker;
import org.apache.hyracks.storage.am.lsm.common.api.IVirtualBufferCache;
+import org.apache.hyracks.storage.am.lsm.common.api.LSMOperationType;
import org.apache.hyracks.storage.am.lsm.common.impls.LSMComponentFileReferences;
import org.apache.hyracks.storage.am.lsm.common.impls.LSMComponentFilterManager;
import org.apache.hyracks.storage.am.lsm.common.impls.LSMIndexSearchCursor;
@@ -433,6 +434,7 @@ public class LSMRTreeWithAntiMatterTuples extends AbstractLSMRTree {
if (isEmptyComponent) {
cleanupArtifacts();
} else {
+ ioOpCallback.afterOperation(LSMOperationType.FLUSH, null, component);
lsmHarness.addBulkLoadedComponent(component);
}
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/90cdbac7/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/TreeTupleSorter.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/TreeTupleSorter.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/TreeTupleSorter.java
index 429c65d..70b1141 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/TreeTupleSorter.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/TreeTupleSorter.java
@@ -61,11 +61,13 @@ public class TreeTupleSorter implements ITreeIndexCursor {
cmp = MultiComparator.create(comparatorFactories);
}
+ @Override
public void reset() {
numTuples = 0;
currentTupleIndex = 0;
}
+ @Override
public boolean hasNext() throws HyracksDataException {
if (numTuples <= currentTupleIndex) {
return false;
@@ -77,17 +79,19 @@ public class TreeTupleSorter implements ITreeIndexCursor {
false);
try {
leafFrame1.setPage(node1);
- frameTuple1.resetByTupleOffset(leafFrame1.getBuffer(), tPointers[currentTupleIndex * 2 + 1]);
+ frameTuple1.resetByTupleOffset(leafFrame1.getBuffer().array(), tPointers[currentTupleIndex * 2 + 1]);
} finally {
bufferCache.unpin(node1);
}
return true;
}
+ @Override
public void next() {
currentTupleIndex++;
}
+ @Override
public ITupleReference getTuple() {
return frameTuple1;
}
@@ -138,8 +142,9 @@ public class TreeTupleSorter implements ITreeIndexCursor {
}
--c;
}
- if (b > c)
+ if (b > c) {
break;
+ }
swap(tPointers, b++, c--);
}
@@ -185,8 +190,8 @@ public class TreeTupleSorter implements ITreeIndexCursor {
leafFrame2.setPage(node2);
try {
- frameTuple1.resetByTupleOffset(leafFrame1.getBuffer(), j1);
- frameTuple2.resetByTupleOffset(leafFrame2.getBuffer(), j2);
+ frameTuple1.resetByTupleOffset(leafFrame1.getBuffer().array(), j1);
+ frameTuple2.resetByTupleOffset(leafFrame2.getBuffer().array(), j2);
return cmp.selectiveFieldCompare(frameTuple1, frameTuple2, comparatorFields);
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/90cdbac7/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/tuples/LSMRTreeTupleReference.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/tuples/LSMRTreeTupleReference.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/tuples/LSMRTreeTupleReference.java
index 4c5c9a4..f49ecb0 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/tuples/LSMRTreeTupleReference.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/tuples/LSMRTreeTupleReference.java
@@ -39,7 +39,7 @@ public class LSMRTreeTupleReference extends TypeAwareTupleReference implements I
public boolean isAntimatter() {
// Check if the leftmost bit is 0 or 1.
final byte mask = (byte) (1 << 7);
- if ((buf.array()[tupleStartOff] & mask) != 0) {
+ if ((buf[tupleStartOff] & mask) != 0) {
return true;
}
return false;
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/90cdbac7/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/tuples/LSMRTreeTupleReferenceForPointMBR.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/tuples/LSMRTreeTupleReferenceForPointMBR.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/tuples/LSMRTreeTupleReferenceForPointMBR.java
index 48b22ec..4ea10a3 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/tuples/LSMRTreeTupleReferenceForPointMBR.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/tuples/LSMRTreeTupleReferenceForPointMBR.java
@@ -19,8 +19,6 @@
package org.apache.hyracks.storage.am.lsm.rtree.tuples;
-import java.nio.ByteBuffer;
-
import org.apache.hyracks.api.dataflow.value.ITypeTraits;
import org.apache.hyracks.storage.am.common.api.ITreeIndexFrame;
import org.apache.hyracks.storage.am.lsm.common.api.ILSMTreeTupleReference;
@@ -36,7 +34,7 @@ public class LSMRTreeTupleReferenceForPointMBR implements ILSMTreeTupleReference
private final int nullFlagsBytes;
private final int[] decodedFieldSlots;
- private ByteBuffer buf;
+ private byte[] buf;
private int tupleStartOff;
private int dataStartOff;
private final boolean antimatterAware;
@@ -55,7 +53,7 @@ public class LSMRTreeTupleReferenceForPointMBR implements ILSMTreeTupleReference
}
@Override
- public void resetByTupleOffset(ByteBuffer buf, int tupleStartOff) {
+ public void resetByTupleOffset(byte[] buf, int tupleStartOff) {
this.buf = buf;
this.tupleStartOff = tupleStartOff;
@@ -74,7 +72,7 @@ public class LSMRTreeTupleReferenceForPointMBR implements ILSMTreeTupleReference
decodedFieldSlots[field++] = decodedFieldSlots[i];
}
//step3. decode field slots for value field
- encDec.reset(buf.array(), tupleStartOff + nullFlagsBytes);
+ encDec.reset(buf, tupleStartOff + nullFlagsBytes);
for (int i = inputKeyFieldCount; i < inputTotalFieldCount; i++) {
if (!typeTraits[i].isFixedLength()) {
//value fields
@@ -92,7 +90,7 @@ public class LSMRTreeTupleReferenceForPointMBR implements ILSMTreeTupleReference
@Override
public void resetByTupleIndex(ITreeIndexFrame frame, int tupleIndex) {
- resetByTupleOffset(frame.getBuffer(), frame.getTupleOffset(tupleIndex));
+ resetByTupleOffset(frame.getBuffer().array(), frame.getTupleOffset(tupleIndex));
}
@Override
@@ -112,7 +110,7 @@ public class LSMRTreeTupleReferenceForPointMBR implements ILSMTreeTupleReference
@Override
public byte[] getFieldData(int fIdx) {
- return buf.array();
+ return buf;
}
@Override
@@ -154,7 +152,7 @@ public class LSMRTreeTupleReferenceForPointMBR implements ILSMTreeTupleReference
public boolean isAntimatter() {
// Check if the leftmost bit is 0 or 1.
final byte mask = (byte) (1 << 7);
- if ((buf.array()[tupleStartOff] & mask) != 0) {
+ if ((buf[tupleStartOff] & mask) != 0) {
return true;
}
return false;
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/90cdbac7/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/utils/LSMRTreeUtils.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/utils/LSMRTreeUtils.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/utils/LSMRTreeUtils.java
index 158b095..624c7de 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/utils/LSMRTreeUtils.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/utils/LSMRTreeUtils.java
@@ -128,9 +128,8 @@ public class LSMRTreeUtils {
if (filterCmpFactories != null) {
TypeAwareTupleWriterFactory filterTupleWriterFactory = new TypeAwareTupleWriterFactory(filterTypeTraits);
filterFactory = new LSMComponentFilterFactory(filterTupleWriterFactory, filterCmpFactories);
- filterFrameFactory = new LSMComponentFilterFrameFactory(filterTupleWriterFactory,
- diskBufferCache.getPageSize());
- filterManager = new LSMComponentFilterManager(diskBufferCache, filterFrameFactory);
+ filterFrameFactory = new LSMComponentFilterFrameFactory(filterTupleWriterFactory);
+ filterManager = new LSMComponentFilterManager(filterFrameFactory);
}
ILSMIndexFileManager fileNameManager = new LSMRTreeFileManager(ioManager, diskFileMapProvider, file,
diskRTreeFactory,
@@ -214,9 +213,8 @@ public class LSMRTreeUtils {
if (filterCmpFactories != null) {
TypeAwareTupleWriterFactory filterTupleWriterFactory = new TypeAwareTupleWriterFactory(filterTypeTraits);
filterFactory = new LSMComponentFilterFactory(filterTupleWriterFactory, filterCmpFactories);
- filterFrameFactory = new LSMComponentFilterFrameFactory(filterTupleWriterFactory,
- diskBufferCache.getPageSize());
- filterManager = new LSMComponentFilterManager(diskBufferCache, filterFrameFactory);
+ filterFrameFactory = new LSMComponentFilterFrameFactory(filterTupleWriterFactory);
+ filterManager = new LSMComponentFilterManager(filterFrameFactory);
}
ILSMIndexFileManager fileNameManager = new LSMRTreeWithAntiMatterTuplesFileManager(ioManager,
diskFileMapProvider, file,
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/90cdbac7/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/frames/RStarTreePolicy.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/frames/RStarTreePolicy.java b/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/frames/RStarTreePolicy.java
index a46f755..bf37eab 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/frames/RStarTreePolicy.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/frames/RStarTreePolicy.java
@@ -220,19 +220,19 @@ public class RStarTreePolicy implements IRTreePolicy {
}
int tupleOff = slotManager.getTupleOff(slotManager.getSlotEndOff());
- frameTuple.resetByTupleOffset(buf, tupleOff);
+ frameTuple.resetByTupleOffset(buf.array(), tupleOff);
int splitKeySize = tupleWriter.bytesRequired(frameTuple, 0, keyValueProviders.length);
splitKey.initData(splitKeySize);
leftRTreeFrame.adjustMBR();
rTreeTupleWriterleftRTreeFrame.writeTupleFields(leftRTreeFrame.getMBRTuples(), 0,
rTreeSplitKey.getLeftPageBuffer(), 0);
- rTreeSplitKey.getLeftTuple().resetByTupleOffset(rTreeSplitKey.getLeftPageBuffer(), 0);
+ rTreeSplitKey.getLeftTuple().resetByTupleOffset(rTreeSplitKey.getLeftPageBuffer().array(), 0);
((IRTreeFrame) rightFrame).adjustMBR();
rTreeTupleWriterRightFrame.writeTupleFields(((RTreeNSMFrame) rightFrame).getMBRTuples(), 0,
rTreeSplitKey.getRightPageBuffer(), 0);
- rTreeSplitKey.getRightTuple().resetByTupleOffset(rTreeSplitKey.getRightPageBuffer(), 0);
+ rTreeSplitKey.getRightTuple().resetByTupleOffset(rTreeSplitKey.getRightPageBuffer().array(), 0);
tupleEntries1.clear();
tupleEntries2.clear();
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/90cdbac7/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/frames/RTreeNSMFrame.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/frames/RTreeNSMFrame.java b/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/frames/RTreeNSMFrame.java
index 84cb82e..9acfd39 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/frames/RTreeNSMFrame.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/frames/RTreeNSMFrame.java
@@ -35,20 +35,20 @@ import org.apache.hyracks.storage.common.buffercache.IBufferCache;
import org.apache.hyracks.storage.common.buffercache.IExtraPageBlockHelper;
public abstract class RTreeNSMFrame extends TreeIndexNSMFrame implements IRTreeFrame {
- protected static final int pageNsnOff = flagOff + 1; // 22
- protected static final int rightPageOff = pageNsnOff + 8; // 30
+ protected static final int PAGE_NSN_OFFSET = TreeIndexNSMFrame.RESERVED_HEADER_SIZE;
+ protected static final int RIGHT_PAGE_OFFSET = PAGE_NSN_OFFSET + 8;
protected ITreeIndexTupleReference[] mbrTuples;
protected ITreeIndexTupleReference cmpFrameTuple;
- private static final double doubleEpsilon = computeDoubleEpsilon();
+ private static final double DOUBLE_EPSILON = computeDoubleEpsilon();
protected final IPrimitiveValueProvider[] keyValueProviders;
protected IRTreePolicy rtreePolicy;
protected final boolean isPointMBR;
public RTreeNSMFrame(ITreeIndexTupleWriter tupleWriter, IPrimitiveValueProvider[] keyValueProviders,
- RTreePolicyType rtreePolicyType, boolean isPointMBR) {
+ RTreePolicyType rtreePolicyType, boolean isPointMBR) {
super(tupleWriter, new UnorderedSlotManager());
this.mbrTuples = new ITreeIndexTupleReference[keyValueProviders.length];
for (int i = 0; i < keyValueProviders.length; i++) {
@@ -58,9 +58,9 @@ public abstract class RTreeNSMFrame extends TreeIndexNSMFrame implements IRTreeF
this.keyValueProviders = keyValueProviders;
if (rtreePolicyType == RTreePolicyType.RTREE) {
- rtreePolicy = new RTreePolicy(tupleWriter, keyValueProviders, cmpFrameTuple, totalFreeSpaceOff);
+ rtreePolicy = new RTreePolicy(tupleWriter, keyValueProviders, cmpFrameTuple, TOTAL_FREE_SPACE_OFFSET);
} else {
- rtreePolicy = new RStarTreePolicy(tupleWriter, keyValueProviders, cmpFrameTuple, totalFreeSpaceOff);
+ rtreePolicy = new RStarTreePolicy(tupleWriter, keyValueProviders, cmpFrameTuple, TOTAL_FREE_SPACE_OFFSET);
}
this.isPointMBR = isPointMBR;
}
@@ -75,38 +75,38 @@ public abstract class RTreeNSMFrame extends TreeIndexNSMFrame implements IRTreeF
}
public static double doubleEpsilon() {
- return doubleEpsilon;
+ return DOUBLE_EPSILON;
}
@Override
public void initBuffer(byte level) {
super.initBuffer(level);
- buf.putLong(pageNsnOff, 0);
- buf.putInt(rightPageOff, -1);
+ buf.putLong(PAGE_NSN_OFFSET, 0);
+ buf.putInt(RIGHT_PAGE_OFFSET, -1);
}
public void setTupleCount(int tupleCount) {
- buf.putInt(tupleCountOff, tupleCount);
+ buf.putInt(Constants.TUPLE_COUNT_OFFSET, tupleCount);
}
@Override
public void setPageNsn(long pageNsn) {
- buf.putLong(pageNsnOff, pageNsn);
+ buf.putLong(PAGE_NSN_OFFSET, pageNsn);
}
@Override
public long getPageNsn() {
- return buf.getLong(pageNsnOff);
+ return buf.getLong(PAGE_NSN_OFFSET);
}
@Override
public int getRightPage() {
- return buf.getInt(rightPageOff);
+ return buf.getInt(RIGHT_PAGE_OFFSET);
}
@Override
public void setRightPage(int rightPage) {
- buf.putInt(rightPageOff, rightPage);
+ buf.putInt(RIGHT_PAGE_OFFSET, rightPage);
}
public ITreeIndexTupleReference[] getMBRTuples() {
@@ -115,7 +115,7 @@ public abstract class RTreeNSMFrame extends TreeIndexNSMFrame implements IRTreeF
@Override
public void split(ITreeIndexFrame rightFrame, ITupleReference tuple, ISplitKey splitKey,
- IExtraPageBlockHelper extraPageBlockHelper, IBufferCache bufferCache)
+ IExtraPageBlockHelper extraPageBlockHelper, IBufferCache bufferCache)
throws HyracksDataException {
rtreePolicy.split(this, buf, rightFrame, slotManager, frameTuple, tuple, splitKey);
}
@@ -156,11 +156,25 @@ public abstract class RTreeNSMFrame extends TreeIndexNSMFrame implements IRTreeF
@Override
public int getPageHeaderSize() {
- return rightPageOff + 4;
+ return RIGHT_PAGE_OFFSET + 4;
}
@Override
public void setMultiComparator(MultiComparator cmp) {
// currently, R-Tree Frames are unsorted
}
+
+ @Override
+ public String toString() {
+ return new StringBuilder(this.getClass().getSimpleName()).append('\n').append(
+ "Tuple Count: " + getTupleCount()).append('\n').append("Free Space offset: " + buf
+ .getInt(Constants.FREE_SPACE_OFFSET)).append('\n').append("Level: " + buf
+ .get(Constants.LEVEL_OFFSET)).append('\n').append("LSN: "
+ + buf.getLong(PAGE_LSN_OFFSET)).append('\n').append(
+ "Total Free Space: " + buf.getInt(TOTAL_FREE_SPACE_OFFSET)).append(
+ '\n').append("Flag: " + buf.get(
+ FLAG_OFFSET)).append('\n')
+ .append("NSN: " + buf.getLong(PAGE_NSN_OFFSET)).append('\n').append("Right Page:")
+ .append(buf.getInt(RIGHT_PAGE_OFFSET)).toString();
+ }
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/90cdbac7/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/frames/RTreeNSMInteriorFrame.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/frames/RTreeNSMInteriorFrame.java b/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/frames/RTreeNSMInteriorFrame.java
index a368c9a..efdb67f 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/frames/RTreeNSMInteriorFrame.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/frames/RTreeNSMInteriorFrame.java
@@ -141,10 +141,10 @@ public class RTreeNSMInteriorFrame extends RTreeNSMFrame implements IRTreeInteri
public boolean compact() {
resetSpaceParams();
- int tupleCount = buf.getInt(tupleCountOff);
- int freeSpace = buf.getInt(freeSpaceOff);
+ int tupleCount = buf.getInt(Constants.TUPLE_COUNT_OFFSET);
+ int freeSpace = buf.getInt(Constants.FREE_SPACE_OFFSET);
- ArrayList<SlotOffTupleOff> sortedTupleOffs = new ArrayList<SlotOffTupleOff>();
+ ArrayList<SlotOffTupleOff> sortedTupleOffs = new ArrayList<>();
sortedTupleOffs.ensureCapacity(tupleCount);
for (int i = 0; i < tupleCount; i++) {
int slotOff = slotManager.getSlotOff(i);
@@ -155,7 +155,7 @@ public class RTreeNSMInteriorFrame extends RTreeNSMFrame implements IRTreeInteri
for (int i = 0; i < sortedTupleOffs.size(); i++) {
int tupleOff = sortedTupleOffs.get(i).tupleOff;
- frameTuple.resetByTupleOffset(buf, tupleOff);
+ frameTuple.resetByTupleOffset(buf.array(), tupleOff);
int tupleEndOff = frameTuple.getFieldStart(frameTuple.getFieldCount() - 1)
+ frameTuple.getFieldLength(frameTuple.getFieldCount() - 1);
@@ -166,8 +166,8 @@ public class RTreeNSMInteriorFrame extends RTreeNSMFrame implements IRTreeInteri
freeSpace += tupleLength;
}
- buf.putInt(freeSpaceOff, freeSpace);
- buf.putInt(totalFreeSpaceOff, buf.capacity() - freeSpace - tupleCount * slotManager.getSlotSize());
+ buf.putInt(Constants.FREE_SPACE_OFFSET, freeSpace);
+ buf.putInt(TOTAL_FREE_SPACE_OFFSET, buf.capacity() - freeSpace - tupleCount * slotManager.getSlotSize());
return false;
}
@@ -175,23 +175,25 @@ public class RTreeNSMInteriorFrame extends RTreeNSMFrame implements IRTreeInteri
@Override
public FrameOpSpaceStatus hasSpaceInsert(ITupleReference tuple) throws HyracksDataException {
int bytesRequired = tupleWriter.bytesRequired(tuple) + childPtrSize;
- if (bytesRequired + slotManager.getSlotSize() <= buf.capacity() - buf.getInt(freeSpaceOff)
- - (buf.getInt(tupleCountOff) * slotManager.getSlotSize()))
+ if (bytesRequired + slotManager.getSlotSize() <= buf.capacity() - buf.getInt(Constants.FREE_SPACE_OFFSET)
+ - (buf.getInt(Constants.TUPLE_COUNT_OFFSET) * slotManager.getSlotSize())) {
return FrameOpSpaceStatus.SUFFICIENT_CONTIGUOUS_SPACE;
- else if (bytesRequired + slotManager.getSlotSize() <= buf.getInt(totalFreeSpaceOff))
+ } else if (bytesRequired + slotManager.getSlotSize() <= buf.getInt(TOTAL_FREE_SPACE_OFFSET)) {
return FrameOpSpaceStatus.SUFFICIENT_SPACE;
- else
+ } else {
return FrameOpSpaceStatus.INSUFFICIENT_SPACE;
+ }
}
public FrameOpSpaceStatus hasSpaceInsert(int bytesRequired) {
- if (bytesRequired + slotManager.getSlotSize() <= buf.capacity() - buf.getInt(freeSpaceOff)
- - (buf.getInt(tupleCountOff) * slotManager.getSlotSize()))
+ if (bytesRequired + slotManager.getSlotSize() <= buf.capacity() - buf.getInt(Constants.FREE_SPACE_OFFSET)
+ - (buf.getInt(Constants.TUPLE_COUNT_OFFSET) * slotManager.getSlotSize())) {
return FrameOpSpaceStatus.SUFFICIENT_CONTIGUOUS_SPACE;
- else if (bytesRequired + slotManager.getSlotSize() <= buf.getInt(totalFreeSpaceOff))
+ } else if (bytesRequired + slotManager.getSlotSize() <= buf.getInt(TOTAL_FREE_SPACE_OFFSET)) {
return FrameOpSpaceStatus.SUFFICIENT_SPACE;
- else
+ } else {
return FrameOpSpaceStatus.INSUFFICIENT_SPACE;
+ }
}
@Override
@@ -220,6 +222,7 @@ public class RTreeNSMInteriorFrame extends RTreeNSMFrame implements IRTreeInteri
tupleB.getFieldData(cmp.getKeyFieldCount() - 1), getChildPointerOff(tupleB), childPtrSize);
}
+ @Override
public int getTupleSize(ITupleReference tuple) {
return tupleWriter.bytesRequired(tuple) + childPtrSize;
}
@@ -231,16 +234,17 @@ public class RTreeNSMInteriorFrame extends RTreeNSMFrame implements IRTreeInteri
@Override
public void insert(ITupleReference tuple, int tupleIndex) {
frameTuple.setFieldCount(tuple.getFieldCount());
- slotManager.insertSlot(AbstractSlotManager.GREATEST_KEY_INDICATOR, buf.getInt(freeSpaceOff));
- int freeSpace = buf.getInt(freeSpaceOff);
+ slotManager.insertSlot(AbstractSlotManager.GREATEST_KEY_INDICATOR, buf.getInt(Constants.FREE_SPACE_OFFSET));
+ int freeSpace = buf.getInt(Constants.FREE_SPACE_OFFSET);
int bytesWritten = tupleWriter.writeTupleFields(tuple, 0, tuple.getFieldCount(), buf.array(), freeSpace);
System.arraycopy(tuple.getFieldData(tuple.getFieldCount() - 1), getChildPointerOff(tuple), buf.array(),
freeSpace + bytesWritten, childPtrSize);
int tupleSize = bytesWritten + childPtrSize;
- buf.putInt(tupleCountOff, buf.getInt(tupleCountOff) + 1);
- buf.putInt(freeSpaceOff, buf.getInt(freeSpaceOff) + tupleSize);
- buf.putInt(totalFreeSpaceOff, buf.getInt(totalFreeSpaceOff) - tupleSize - slotManager.getSlotSize());
+ buf.putInt(Constants.TUPLE_COUNT_OFFSET, buf.getInt(Constants.TUPLE_COUNT_OFFSET) + 1);
+ buf.putInt(Constants.FREE_SPACE_OFFSET, buf.getInt(Constants.FREE_SPACE_OFFSET) + tupleSize);
+ buf.putInt(TOTAL_FREE_SPACE_OFFSET, buf.getInt(TOTAL_FREE_SPACE_OFFSET) - tupleSize - slotManager
+ .getSlotSize());
}
@@ -250,7 +254,7 @@ public class RTreeNSMInteriorFrame extends RTreeNSMFrame implements IRTreeInteri
int slotOff = slotManager.getSlotOff(tupleIndex);
int tupleOff = slotManager.getTupleOff(slotOff);
- frameTuple.resetByTupleOffset(buf, tupleOff);
+ frameTuple.resetByTupleOffset(buf.array(), tupleOff);
int tupleSize = tupleWriter.bytesRequired(frameTuple);
// perform deletion (we just do a memcpy to overwrite the slot)
@@ -259,9 +263,9 @@ public class RTreeNSMInteriorFrame extends RTreeNSMFrame implements IRTreeInteri
System.arraycopy(buf.array(), slotStartOff, buf.array(), slotStartOff + slotManager.getSlotSize(), length);
// maintain space information
- buf.putInt(tupleCountOff, buf.getInt(tupleCountOff) - 1);
- buf.putInt(totalFreeSpaceOff,
- buf.getInt(totalFreeSpaceOff) + tupleSize + childPtrSize + slotManager.getSlotSize());
+ buf.putInt(Constants.TUPLE_COUNT_OFFSET, buf.getInt(Constants.TUPLE_COUNT_OFFSET) - 1);
+ buf.putInt(TOTAL_FREE_SPACE_OFFSET,
+ buf.getInt(TOTAL_FREE_SPACE_OFFSET) + tupleSize + childPtrSize + slotManager.getSlotSize());
}
@Override
@@ -288,12 +292,12 @@ public class RTreeNSMInteriorFrame extends RTreeNSMFrame implements IRTreeInteri
// For debugging.
public ArrayList<Integer> getChildren(MultiComparator cmp) {
- ArrayList<Integer> ret = new ArrayList<Integer>();
+ ArrayList<Integer> ret = new ArrayList<>();
frameTuple.setFieldCount(cmp.getKeyFieldCount());
- int tupleCount = buf.getInt(tupleCountOff);
+ int tupleCount = buf.getInt(Constants.TUPLE_COUNT_OFFSET);
for (int i = 0; i < tupleCount; i++) {
int tupleOff = slotManager.getTupleOff(slotManager.getSlotOff(i));
- frameTuple.resetByTupleOffset(buf, tupleOff);
+ frameTuple.resetByTupleOffset(buf.array(), tupleOff);
int intVal = IntegerPointable.getInteger(buf.array(), frameTuple.getFieldStart(frameTuple.getFieldCount() - 1)
+ frameTuple.getFieldLength(frameTuple.getFieldCount() - 1));
ret.add(intVal);
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/90cdbac7/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/frames/RTreeNSMLeafFrame.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/frames/RTreeNSMLeafFrame.java b/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/frames/RTreeNSMLeafFrame.java
index ed8f14c..b8b8877 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/frames/RTreeNSMLeafFrame.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/frames/RTreeNSMLeafFrame.java
@@ -71,18 +71,19 @@ public class RTreeNSMLeafFrame extends RTreeNSMFrame implements IRTreeLeafFrame
return true;
}
+ @Override
public int getTupleSize(ITupleReference tuple) {
return tupleWriter.bytesRequired(tuple);
}
@Override
public void insert(ITupleReference tuple, int tupleIndex) {
- slotManager.insertSlot(-1, buf.getInt(freeSpaceOff));
- int bytesWritten = tupleWriter.writeTuple(tuple, buf.array(), buf.getInt(freeSpaceOff));
-
- buf.putInt(tupleCountOff, buf.getInt(tupleCountOff) + 1);
- buf.putInt(freeSpaceOff, buf.getInt(freeSpaceOff) + bytesWritten);
- buf.putInt(totalFreeSpaceOff, buf.getInt(totalFreeSpaceOff) - bytesWritten - slotManager.getSlotSize());
+ slotManager.insertSlot(-1, buf.getInt(Constants.FREE_SPACE_OFFSET));
+ int bytesWritten = tupleWriter.writeTuple(tuple, buf.array(), buf.getInt(Constants.FREE_SPACE_OFFSET));
+ buf.putInt(Constants.TUPLE_COUNT_OFFSET, buf.getInt(Constants.TUPLE_COUNT_OFFSET) + 1);
+ buf.putInt(Constants.FREE_SPACE_OFFSET, buf.getInt(Constants.FREE_SPACE_OFFSET) + bytesWritten);
+ buf.putInt(TOTAL_FREE_SPACE_OFFSET, buf.getInt(TOTAL_FREE_SPACE_OFFSET) - bytesWritten - slotManager
+ .getSlotSize());
}
@Override
@@ -90,7 +91,7 @@ public class RTreeNSMLeafFrame extends RTreeNSMFrame implements IRTreeLeafFrame
int slotOff = slotManager.getSlotOff(tupleIndex);
int tupleOff = slotManager.getTupleOff(slotOff);
- frameTuple.resetByTupleOffset(buf, tupleOff);
+ frameTuple.resetByTupleOffset(buf.array(), tupleOff);
int tupleSize = tupleWriter.bytesRequired(frameTuple);
// perform deletion (we just do a memcpy to overwrite the slot)
@@ -99,8 +100,9 @@ public class RTreeNSMLeafFrame extends RTreeNSMFrame implements IRTreeLeafFrame
System.arraycopy(buf.array(), slotStartOff, buf.array(), slotStartOff + slotManager.getSlotSize(), length);
// maintain space information
- buf.putInt(tupleCountOff, buf.getInt(tupleCountOff) - 1);
- buf.putInt(totalFreeSpaceOff, buf.getInt(totalFreeSpaceOff) + tupleSize + slotManager.getSlotSize());
+ buf.putInt(Constants.TUPLE_COUNT_OFFSET, buf.getInt(Constants.TUPLE_COUNT_OFFSET) - 1);
+ buf.putInt(TOTAL_FREE_SPACE_OFFSET, buf.getInt(TOTAL_FREE_SPACE_OFFSET) + tupleSize + slotManager
+ .getSlotSize());
}
@Override
@@ -108,6 +110,7 @@ public class RTreeNSMLeafFrame extends RTreeNSMFrame implements IRTreeLeafFrame
return frameTuple.getFieldCount();
}
+ @Override
public ITupleReference getBeforeTuple(ITupleReference tuple, int targetTupleIndex, MultiComparator cmp)
throws HyracksDataException {
// Examine the tuple index to determine whether it is valid or not.
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/90cdbac7/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/frames/RTreePolicy.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/frames/RTreePolicy.java b/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/frames/RTreePolicy.java
index 2ca9548..31466ee 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/frames/RTreePolicy.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/frames/RTreePolicy.java
@@ -191,18 +191,18 @@ public class RTreePolicy implements IRTreePolicy {
}
int tupleOff = slotManager.getTupleOff(slotManager.getSlotEndOff());
- frameTuple.resetByTupleOffset(buf, tupleOff);
+ frameTuple.resetByTupleOffset(buf.array(), tupleOff);
int splitKeySize = tupleWriter.bytesRequired(frameTuple, 0, keyValueProviders.length);
splitKey.initData(splitKeySize);
leftRTreeFrame.adjustMBR();
rTreeTupleWriterLeftFrame.writeTupleFields(leftRTreeFrame.getMBRTuples(), 0, rTreeSplitKey.getLeftPageBuffer(), 0);
- rTreeSplitKey.getLeftTuple().resetByTupleOffset(rTreeSplitKey.getLeftPageBuffer(), 0);
+ rTreeSplitKey.getLeftTuple().resetByTupleOffset(rTreeSplitKey.getLeftPageBuffer().array(), 0);
((IRTreeFrame) rightFrame).adjustMBR();
rTreeTupleWriterRightFrame.writeTupleFields(((RTreeNSMFrame) rightFrame).getMBRTuples(), 0,
rTreeSplitKey.getRightPageBuffer(), 0);
- rTreeSplitKey.getRightTuple().resetByTupleOffset(rTreeSplitKey.getRightPageBuffer(), 0);
+ rTreeSplitKey.getRightTuple().resetByTupleOffset(rTreeSplitKey.getRightPageBuffer().array(), 0);
}
@Override
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/90cdbac7/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/impls/RTree.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/impls/RTree.java b/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/impls/RTree.java
index 0dbdaba..9cd16c4 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/impls/RTree.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/impls/RTree.java
@@ -988,7 +988,7 @@ public class RTree extends AbstractTreeIndex {
//not a leaf
if (nodeFrontiers.indexOf(n) != 0) {
interiorFrame.setPage(n.page);
- mbrTuple.resetByTupleOffset(mbr, 0);
+ mbrTuple.resetByTupleOffset(mbr.array(), 0);
interiorFrame.insert(mbrTuple, -1);
interiorFrame.getBuffer().putInt(
interiorFrame.getTupleOffset(interiorFrame.getTupleCount() - 1) + mbrTuple.getTupleSize(),
@@ -1041,7 +1041,7 @@ public class RTree extends AbstractTreeIndex {
mbr = ByteBuffer.allocate(bytesRequired);
}
interiorFrameTupleWriter.writeTupleFields(((RTreeNSMFrame) lowerFrame).getMBRTuples(), 0, mbr, 0);
- mbrTuple.resetByTupleOffset(mbr, 0);
+ mbrTuple.resetByTupleOffset(mbr.array(), 0);
NodeFrontier frontier = nodeFrontiers.get(level);
interiorFrame.setPage(frontier.page);
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/90cdbac7/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/impls/RTreeOpContext.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/impls/RTreeOpContext.java b/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/impls/RTreeOpContext.java
index e25c644..4bc4d61 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/impls/RTreeOpContext.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/impls/RTreeOpContext.java
@@ -28,7 +28,7 @@ import org.apache.hyracks.storage.am.common.api.IPageManager;
import org.apache.hyracks.storage.am.common.api.IIndexOperationContext;
import org.apache.hyracks.storage.am.common.api.IModificationOperationCallback;
import org.apache.hyracks.storage.am.common.api.ITreeIndexCursor;
-import org.apache.hyracks.storage.am.common.api.ITreeIndexMetaDataFrame;
+import org.apache.hyracks.storage.am.common.api.ITreeIndexMetadataFrame;
import org.apache.hyracks.storage.am.common.ophelpers.IndexOperation;
import org.apache.hyracks.storage.am.common.ophelpers.MultiComparator;
import org.apache.hyracks.storage.am.rtree.api.IRTreeInteriorFrame;
@@ -46,7 +46,7 @@ public class RTreeOpContext implements IIndexOperationContext, IExtraPageBlockHe
public ITreeIndexCursor cursor;
public RTreeCursorInitialState cursorInitialState;
public final IPageManager freePageManager;
- public final ITreeIndexMetaDataFrame metaFrame;
+ public final ITreeIndexMetadataFrame metaFrame;
public RTreeSplitKey splitKey;
public ITupleReference tuple;
// Used to record the pageIds and pageLsns of the visited pages.
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/90cdbac7/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/impls/RTreeSplitKey.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/impls/RTreeSplitKey.java b/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/impls/RTreeSplitKey.java
index d89c12b..f6bdcfb 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/impls/RTreeSplitKey.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/impls/RTreeSplitKey.java
@@ -41,6 +41,7 @@ public class RTreeSplitKey implements ISplitKey {
this.rightTuple = rightTuple;
}
+ @Override
public void initData(int keySize) {
// try to reuse existing memory from a lower-level split if possible
this.keySize = keySize;
@@ -63,8 +64,8 @@ public class RTreeSplitKey implements ISplitKey {
rightPageBuf = ByteBuffer.wrap(rightPageData);
}
- leftTuple.resetByTupleOffset(leftPageBuf, 0);
- rightTuple.resetByTupleOffset(rightPageBuf, 0);
+ leftTuple.resetByTupleOffset(leftPageBuf.array(), 0);
+ rightTuple.resetByTupleOffset(rightPageBuf.array(), 0);
}
public void resetLeftPage() {
@@ -93,18 +94,22 @@ public class RTreeSplitKey implements ISplitKey {
return rightTuple;
}
+ @Override
public int getLeftPage() {
return leftPageBuf.getInt(keySize);
}
+ @Override
public int getRightPage() {
return rightPageBuf.getInt(keySize);
}
+ @Override
public void setLeftPage(int page) {
leftPageBuf.putInt(keySize, page);
}
+ @Override
public void setRightPage(int page) {
rightPageBuf.putInt(keySize, page);
}
@@ -115,12 +120,12 @@ public class RTreeSplitKey implements ISplitKey {
copy.leftPageData = leftPageData.clone();
copy.leftPageBuf = ByteBuffer.wrap(copy.leftPageData);
copy.leftTuple.setFieldCount(leftTuple.getFieldCount());
- copy.leftTuple.resetByTupleOffset(copy.leftPageBuf, 0);
+ copy.leftTuple.resetByTupleOffset(copy.leftPageBuf.array(), 0);
copy.rightPageData = rightPageData.clone();
copy.rightPageBuf = ByteBuffer.wrap(copy.rightPageData);
copy.rightTuple.setFieldCount(rightTuple.getFieldCount());
- copy.rightTuple.resetByTupleOffset(copy.rightPageBuf, 0);
+ copy.rightTuple.resetByTupleOffset(copy.rightPageBuf.array(), 0);
return copy;
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/90cdbac7/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/VirtualPage.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/VirtualPage.java b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/VirtualPage.java
new file mode 100644
index 0000000..cfca77a
--- /dev/null
+++ b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/VirtualPage.java
@@ -0,0 +1,124 @@
+/*
+ * 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.common.buffercache;
+
+import java.nio.ByteBuffer;
+import java.util.concurrent.locks.ReadWriteLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+
+public class VirtualPage implements ICachedPage {
+ private final ReadWriteLock latch;
+ private final int pageSize;
+ private ByteBuffer buffer;
+ private volatile long dpid;
+ private int multiplier;
+ private VirtualPage next;
+
+ public VirtualPage(ByteBuffer buffer, int pageSize) {
+ this.buffer = buffer;
+ this.pageSize = pageSize;
+ latch = new ReentrantReadWriteLock(true);
+ dpid = -1;
+ next = null;
+ }
+
+ public void reset() {
+ dpid = -1;
+ next = null;
+ }
+
+ @Override
+ public ByteBuffer getBuffer() {
+ return buffer;
+ }
+
+ @Override
+ public void acquireReadLatch() {
+ latch.readLock().lock();
+ }
+
+ @Override
+ public void releaseReadLatch() {
+ latch.readLock().unlock();
+ }
+
+ @Override
+ public void acquireWriteLatch() {
+ latch.writeLock().lock();
+ }
+
+ @Override
+ public void releaseWriteLatch(boolean markDirty) {
+ latch.writeLock().unlock();
+ }
+
+ @Override
+ public boolean confiscated() {
+ return false;
+ }
+
+ @Override
+ public IQueueInfo getQueueInfo() {
+ return null;
+ }
+
+ @Override
+ public void setQueueInfo(IQueueInfo queueInfo) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public int getPageSize() {
+ return pageSize;
+ }
+
+ @Override
+ public int getFrameSizeMultiplier() {
+ return multiplier;
+ }
+
+ public void multiplier(int multiplier) {
+ this.multiplier = multiplier;
+ }
+
+ public long dpid() {
+ return dpid;
+ }
+
+ public void dpid(long dpid) {
+ this.dpid = dpid;
+ }
+
+ public VirtualPage next() {
+ return next;
+ }
+
+ public void next(VirtualPage next) {
+ this.next = next;
+ }
+
+ public ByteBuffer buffer() {
+ return buffer;
+ }
+
+ public void buffer(ByteBuffer buffer) {
+ this.buffer = buffer;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/90cdbac7/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/BTreeExamplesTest.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/BTreeExamplesTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/BTreeExamplesTest.java
index 70e92a3..dd4dbbb 100644
--- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/BTreeExamplesTest.java
+++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/BTreeExamplesTest.java
@@ -26,7 +26,7 @@ import org.apache.hyracks.storage.am.btree.frames.BTreeLeafFrameType;
import org.apache.hyracks.storage.am.btree.util.BTreeTestHarness;
import org.apache.hyracks.storage.am.btree.util.BTreeUtils;
import org.apache.hyracks.storage.am.common.api.ITreeIndex;
-import org.apache.hyracks.storage.am.common.api.ITreeIndexMetaDataFrameFactory;
+import org.apache.hyracks.storage.am.common.api.ITreeIndexMetadataFrameFactory;
import org.apache.hyracks.storage.am.common.api.TreeIndexException;
import org.apache.hyracks.storage.am.common.frames.LIFOMetaDataFrameFactory;
import org.apache.hyracks.storage.am.common.freepage.LinkedMetaDataPageManager;
@@ -50,7 +50,7 @@ public class BTreeExamplesTest extends OrderedIndexExamplesTest {
protected ITreeIndex createTreeIndex(ITypeTraits[] typeTraits, IBinaryComparatorFactory[] cmpFactories,
int[] bloomFilterKeyFields, ITypeTraits[] filterTypeTraits, IBinaryComparatorFactory[] filterCmpFactories,
int[] btreeFields, int[] filterFields) throws TreeIndexException {
- ITreeIndexMetaDataFrameFactory metaFrameFactory = new LIFOMetaDataFrameFactory();
+ ITreeIndexMetadataFrameFactory metaFrameFactory = new LIFOMetaDataFrameFactory();
LinkedMetaDataPageManager freePageManager = new LinkedMetaDataPageManager(harness.getBufferCache(),
metaFrameFactory);
return BTreeUtils.createBTree(harness.getBufferCache(), harness.getFileMapProvider(), typeTraits, cmpFactories,