>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

Reply via email to