>From Wail Alkowaileet <[email protected]>:
Wail Alkowaileet has uploaded this change for review. (
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17554 )
Change subject: [WIP] Fix columnar delete issues
......................................................................
[WIP] Fix columnar delete issues
Change-Id: I9a28b7fe7b7b89636dd10b62769b2e78d7979654
---
M
asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/PrimitiveColumnValuesReader.java
M
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/lsm/tuples/AbstractColumnTupleReference.java
M
asterixdb/asterix-column/src/main/java/org/apache/asterix/column/tuple/MergeColumnTupleReference.java
M
asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/merge/MergeColumnTupleWriter.java
M
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/ColumnBTreeBulkloader.java
M
asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/AbstractColumnValuesReader.java
6 files changed, 46 insertions(+), 24 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/54/17554/1
diff --git
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/merge/MergeColumnTupleWriter.java
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/merge/MergeColumnTupleWriter.java
index 41a8263..767ef1c 100644
---
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/merge/MergeColumnTupleWriter.java
+++
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/merge/MergeColumnTupleWriter.java
@@ -108,11 +108,11 @@
if (skipCount > 0) {
writtenComponents.add(-componentIndex, skipCount);
}
- if (columnTuple.isAntimatter()) {
- writtenComponents.add(-componentIndex);
- } else {
+
+ if (!columnTuple.isAntimatter()) {
writtenComponents.add(componentIndex);
}
+
writePrimaryKeys(columnTuple);
}
@@ -127,6 +127,7 @@
primaryKeysEstimatedSize = primaryKeySize;
}
+ //TODO LOG errors
private void writeNonKeyColumns() throws HyracksDataException {
for (int i = 0; i < writtenComponents.getNumberOfBlocks(); i++) {
int componentIndex = writtenComponents.getBlockValue(i);
diff --git
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/tuple/MergeColumnTupleReference.java
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/tuple/MergeColumnTupleReference.java
index 61030e1..7657009 100644
---
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/tuple/MergeColumnTupleReference.java
+++
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/tuple/MergeColumnTupleReference.java
@@ -33,6 +33,8 @@
import
org.apache.hyracks.storage.am.lsm.btree.column.impls.btree.ColumnBTreeReadLeafFrame;
public final class MergeColumnTupleReference extends
AbstractAsterixColumnTupleReference {
+ // NoOP callback is for empty pages only
+ private static final IEndOfPageCallBack EMPTY_PAGE_CALLBACK =
createNoOpCallBack();
private final IColumnValuesReader[] columnReaders;
private int skipCount;
private IEndOfPageCallBack endOfPageCallBack;
@@ -41,6 +43,7 @@
MergeColumnReadMetadata columnMetadata, IColumnReadMultiPageOp
multiPageOp) {
super(componentIndex, frame, columnMetadata, multiPageOp);
this.columnReaders = columnMetadata.getColumnReaders();
+ endOfPageCallBack = EMPTY_PAGE_CALLBACK;
}
@Override
@@ -112,4 +115,14 @@
public void registerEndOfPageCallBack(IEndOfPageCallBack
endOfPageCallBack) {
this.endOfPageCallBack = endOfPageCallBack;
}
+
+ private static IEndOfPageCallBack createNoOpCallBack() {
+ return columnTuple -> {
+ if (!columnTuple.isEmpty()) {
+ // safeguard against unset proper call back for non-empty pages
+ throw new NullPointerException("endOfPageCallBack is null");
+ }
+ };
+ }
+
}
diff --git
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/AbstractColumnValuesReader.java
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/AbstractColumnValuesReader.java
index 41dfea2..feb3479 100644
---
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/AbstractColumnValuesReader.java
+++
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/AbstractColumnValuesReader.java
@@ -18,6 +18,8 @@
*/
package org.apache.asterix.column.values.reader;
+import org.apache.parquet.bytes.BytesUtils;
+
import java.io.IOException;
import
org.apache.asterix.column.bytes.decoder.ParquetRunLengthBitPackingHybridDecoder;
@@ -31,7 +33,6 @@
import org.apache.asterix.om.types.ATypeTag;
import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.data.std.api.IValueReference;
-import org.apache.parquet.bytes.BytesUtils;
abstract class AbstractColumnValuesReader implements IColumnValuesReader {
protected final AbstractValueReader valueReader;
@@ -61,15 +62,11 @@
}
valueIndex++;
- try {
- int actualLevel = definitionLevels.readInt();
- //Check whether the level is for a null value
- nullLevel = ColumnValuesUtil.isNull(nullBitMask, actualLevel);
- //Clear the null bit to allow repeated value readers determine the
correct delimiter for null values
- level = ColumnValuesUtil.clearNullBit(nullBitMask, actualLevel);
- } catch (IOException e) {
- throw HyracksDataException.create(e);
- }
+ int actualLevel = definitionLevels.readInt();
+ //Check whether the level is for a null value
+ nullLevel = ColumnValuesUtil.isNull(nullBitMask, actualLevel);
+ //Clear the null bit to allow repeated value readers determine the
correct delimiter for null values
+ level = ColumnValuesUtil.clearNullBit(nullBitMask, actualLevel);
}
abstract void resetValues();
diff --git
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/PrimitiveColumnValuesReader.java
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/PrimitiveColumnValuesReader.java
index 8fdf1b5..5ed9e92 100644
---
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/PrimitiveColumnValuesReader.java
+++
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/PrimitiveColumnValuesReader.java
@@ -52,13 +52,9 @@
return false;
}
- try {
- nextLevel();
- if (primaryKey || level == maxLevel) {
- valueReader.nextValue();
- }
- } catch (IOException e) {
- throw HyracksDataException.create(e);
+ nextLevel();
+ if (primaryKey || level == maxLevel) {
+ valueReader.nextValue();
}
return true;
}
@@ -96,7 +92,7 @@
@Override
public void write(IColumnValuesWriter writer, boolean callNext) throws
HyracksDataException {
if (callNext && !next()) {
- throw new IllegalStateException("No more values");
+ throw new IllegalStateException("no more values, column index: " +
columnIndex);
}
writer.writeLevel(level);
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/ColumnBTreeBulkloader.java
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/ColumnBTreeBulkloader.java
index 48bd180..dbdad43 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/ColumnBTreeBulkloader.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/ColumnBTreeBulkloader.java
@@ -123,6 +123,7 @@
super.end();
}
+ //TODO Better logging on error
@Override
protected void writeFullLeafPage() throws HyracksDataException {
NodeFrontier leafFrontier = nodeFrontiers.get(0);
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/lsm/tuples/AbstractColumnTupleReference.java
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/lsm/tuples/AbstractColumnTupleReference.java
index 310b0b6..5cbcb5e 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/lsm/tuples/AbstractColumnTupleReference.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/lsm/tuples/AbstractColumnTupleReference.java
@@ -18,7 +18,8 @@
*/
package org.apache.hyracks.storage.am.lsm.btree.column.impls.lsm.tuples;
-import static
org.apache.hyracks.storage.am.lsm.btree.column.impls.btree.AbstractColumnBTreeLeafFrame.HEADER_SIZE;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
import java.nio.ByteBuffer;
@@ -29,8 +30,8 @@
import org.apache.hyracks.storage.am.lsm.btree.column.api.IColumnTupleIterator;
import
org.apache.hyracks.storage.am.lsm.btree.column.api.projection.IColumnProjectionInfo;
import
org.apache.hyracks.storage.am.lsm.btree.column.impls.btree.ColumnBTreeReadLeafFrame;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+
+import static
org.apache.hyracks.storage.am.lsm.btree.column.impls.btree.AbstractColumnBTreeLeafFrame.HEADER_SIZE;
public abstract class AbstractColumnTupleReference implements
IColumnTupleIterator {
private static final Logger LOGGER = LogManager.getLogger();
@@ -172,6 +173,10 @@
return frame.getTupleCount();
}
+ protected final boolean isEmpty() {
+ return frame.getTupleCount() == 0;
+ }
+
@Override
public final void next() throws HyracksDataException {
onNext();
--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17554
To unsubscribe, or for help writing mail filters, visit
https://asterix-gerrit.ics.uci.edu/settings
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Change-Id: I9a28b7fe7b7b89636dd10b62769b2e78d7979654
Gerrit-Change-Number: 17554
Gerrit-PatchSet: 1
Gerrit-Owner: Wail Alkowaileet <[email protected]>
Gerrit-MessageType: newchange