Luo Chen has uploaded a new change for review.

  https://asterix-gerrit.ics.uci.edu/1796

Change subject: Allow change insert/delete mode for anti-matter LSM index
......................................................................

Allow change insert/delete mode for anti-matter LSM index

Currently, when we bulk load an lsm index, the leaf factory of the index
only allows to insert tuples, but not deleting tuples (i.e.,
inserting anti-matter tuples). However, the new change of creating
secondary index requires inserting both matter and anti-matter tuples.
This change exposes set insert/delete mode API for tuple writer factory
when we bulk load an lsm index component. This is achived basically
the same way as bulk loading an ExternalBTree.

Change-Id: I6665f56a5d2183697197298fa24824eeb827686a
---
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/ExternalBTree.java
D 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/tuples/LSMBTreeRefrencingTupleWriterFactory.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/tuples/LSMBTreeTupleWriter.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/tuples/LSMBTreeTupleWriterFactory.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/utils/LSMBTreeUtil.java
A 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMTreeTupleWriter.java
A 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMTreeTupleWriterFactory.java
A 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/tuples/LSMTreeRefrencingTupleWriterFactory.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/tuples/LSMRTreeTupleWriter.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/tuples/LSMRTreeTupleWriterFactory.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/tuples/LSMRTreeTupleWriterFactoryForPointMBR.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/tuples/LSMRTreeTupleWriterForPointMBR.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/utils/LSMRTreeUtils.java
13 files changed, 231 insertions(+), 124 deletions(-)


  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb 
refs/changes/96/1796/1

diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/ExternalBTree.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/ExternalBTree.java
index c641dc1..3f92a3c 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/ExternalBTree.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/ExternalBTree.java
@@ -35,11 +35,9 @@
 import org.apache.hyracks.storage.am.common.api.IMetadataPageManager;
 import org.apache.hyracks.storage.am.common.api.ITreeIndexCursor;
 import org.apache.hyracks.storage.am.common.api.ITreeIndexFrameFactory;
-import org.apache.hyracks.storage.am.common.api.ITreeIndexTupleWriterFactory;
 import org.apache.hyracks.storage.am.common.api.ITwoPCIndexBulkLoader;
 import org.apache.hyracks.storage.am.common.impls.NoOpOperationCallback;
 import org.apache.hyracks.storage.am.common.ophelpers.IndexOperation;
-import 
org.apache.hyracks.storage.am.lsm.btree.tuples.LSMBTreeRefrencingTupleWriterFactory;
 import org.apache.hyracks.storage.am.lsm.common.api.ILSMComponent;
 import org.apache.hyracks.storage.am.lsm.common.api.ILSMDiskComponent;
 import org.apache.hyracks.storage.am.lsm.common.api.ILSMIOOperation;
@@ -50,6 +48,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.ILSMTreeTupleWriterFactory;
 import org.apache.hyracks.storage.am.lsm.common.api.ITwoPCIndex;
 import org.apache.hyracks.storage.am.lsm.common.api.LSMOperationType;
 import 
org.apache.hyracks.storage.am.lsm.common.impls.BlockingIOOperationCallbackWrapper;
@@ -449,7 +448,7 @@
     public class LSMTwoPCBTreeBulkLoader implements IIndexBulkLoader, 
ITwoPCIndexBulkLoader {
         private final ILSMDiskComponent component;
         private final IIndexBulkLoader componentBulkLoader;
-        private final ITreeIndexTupleWriterFactory frameTupleWriterFactory;
+        private final ILSMTreeTupleWriterFactory frameTupleWriterFactory;
 
         private final boolean isTransaction;
 
@@ -463,8 +462,8 @@
                 component = createBulkLoadTarget();
             }
 
-            frameTupleWriterFactory =
-                    ((LSMBTreeDiskComponent) 
component).getBTree().getLeafFrameFactory().getTupleWriterFactory();
+            frameTupleWriterFactory = (ILSMTreeTupleWriterFactory) 
((LSMBTreeDiskComponent) component).getBTree()
+                    .getLeafFrameFactory().getTupleWriterFactory();
 
             componentBulkLoader =
                     createComponentBulkLoader(component, fillFactor, 
verifyInput, numElementsHint, false, true);
@@ -499,9 +498,9 @@
         // calling delete
         @Override
         public void delete(ITupleReference tuple) throws HyracksDataException {
-            ((LSMBTreeRefrencingTupleWriterFactory) 
frameTupleWriterFactory).setMode(IndexOperation.DELETE);
+            frameTupleWriterFactory.setDelete(true);
             componentBulkLoader.add(tuple);
-            ((LSMBTreeRefrencingTupleWriterFactory) 
frameTupleWriterFactory).setMode(IndexOperation.INSERT);
+            frameTupleWriterFactory.setDelete(false);
         }
 
         @Override
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/tuples/LSMBTreeRefrencingTupleWriterFactory.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/tuples/LSMBTreeRefrencingTupleWriterFactory.java
deleted file mode 100644
index 24ae68c..0000000
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/tuples/LSMBTreeRefrencingTupleWriterFactory.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.hyracks.storage.am.lsm.btree.tuples;
-
-import org.apache.hyracks.api.dataflow.value.ITypeTraits;
-import org.apache.hyracks.storage.am.common.api.ITreeIndexTupleWriter;
-import org.apache.hyracks.storage.am.common.ophelpers.IndexOperation;
-import org.apache.hyracks.storage.am.common.tuples.TypeAwareTupleWriterFactory;
-
-/**
- * This is a TupleWriterFactory that can be used to reference the last writer 
it created
- * and switch between actual and antimatter writer modes
- * @author alamouda
- *
- */
-public class LSMBTreeRefrencingTupleWriterFactory extends 
TypeAwareTupleWriterFactory{
-    private static final long serialVersionUID = 1L;
-    private final ITypeTraits[] typeTraits;
-    private final int numKeyFields;
-    private boolean isDelete;
-    private LSMBTreeTupleWriter createdTupleWriter;
-
-    public LSMBTreeRefrencingTupleWriterFactory(ITypeTraits[] typeTraits, int 
numKeyFields, boolean isDelete) {
-        super(typeTraits);
-        this.typeTraits = typeTraits;
-        this.numKeyFields = numKeyFields;
-        this.isDelete = isDelete;
-    }
-
-    @Override
-    public ITreeIndexTupleWriter createTupleWriter() {
-        createdTupleWriter = new LSMBTreeTupleWriter(typeTraits, numKeyFields, 
isDelete);
-        return createdTupleWriter;
-    }
-
-    public void setMode(IndexOperation op){
-        if(op == IndexOperation.INSERT){
-            this.isDelete = false;
-            if(createdTupleWriter != null){
-                this.createdTupleWriter.setAntimatter(false);
-            }
-        } else if(op == IndexOperation.DELETE){
-            this.isDelete = true;
-            if(createdTupleWriter != null){
-                this.createdTupleWriter.setAntimatter(true);
-            }
-        }
-    }
-
-    public LSMBTreeTupleWriter getCreatedTupleWriter() {
-        return createdTupleWriter;
-    }
-}
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/tuples/LSMBTreeTupleWriter.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/tuples/LSMBTreeTupleWriter.java
index 3c60f15..c083f17 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/tuples/LSMBTreeTupleWriter.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/tuples/LSMBTreeTupleWriter.java
@@ -23,20 +23,21 @@
 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.tuples.TypeAwareTupleWriter;
+import org.apache.hyracks.storage.am.lsm.common.api.ILSMTreeTupleWriter;
 
-public class LSMBTreeTupleWriter extends TypeAwareTupleWriter {
-    private boolean isAntimatter;
+public class LSMBTreeTupleWriter extends TypeAwareTupleWriter implements 
ILSMTreeTupleWriter {
+    private boolean isDelete;
     private final int numKeyFields;
 
-    public LSMBTreeTupleWriter(ITypeTraits[] typeTraits, int numKeyFields, 
boolean isAntimatter) {
+    public LSMBTreeTupleWriter(ITypeTraits[] typeTraits, int numKeyFields, 
boolean isDelete) {
         super(typeTraits);
         this.numKeyFields = numKeyFields;
-        this.isAntimatter = isAntimatter;
+        this.isDelete = isDelete;
     }
 
     @Override
     public int bytesRequired(ITupleReference tuple) {
-        if (isAntimatter) {
+        if (isDelete) {
             // Only requires space for the key fields.
             return super.bytesRequired(tuple, 0, numKeyFields);
         } else {
@@ -57,19 +58,19 @@
     @Override
     protected int getNullFlagsBytes(int numFields) {
         // +1.0 is for matter/antimatter bit.
-        return (int) Math.ceil(((double) numFields + 1.0) / 8.0);
+        return (int) Math.ceil((numFields + 1.0) / 8.0);
     }
 
     @Override
     protected int getNullFlagsBytes(ITupleReference tuple) {
         // +1.0 is for matter/antimatter bit.
-        return (int) Math.ceil(((double) tuple.getFieldCount() + 1.0) / 8.0);
+        return (int) Math.ceil((tuple.getFieldCount() + 1.0) / 8.0);
     }
 
     @Override
     public int writeTuple(ITupleReference tuple, byte[] targetBuf, int 
targetOff) {
         int bytesWritten = -1;
-        if (isAntimatter) {
+        if (isDelete) {
             bytesWritten = super.writeTupleFields(tuple, 0, numKeyFields, 
targetBuf, targetOff);
             setAntimatterBit(targetBuf, targetOff);
         } else {
@@ -83,8 +84,8 @@
         targetBuf[targetOff] = (byte) (targetBuf[targetOff] | (1 << 7));
     }
 
-    // Allow using the same writer for both delete and insert tuples
-    public void setAntimatter(boolean isAntimatter) {
-        this.isAntimatter = isAntimatter;
+    @Override
+    public void setDelete(boolean isDelete) {
+        this.isDelete = isDelete;
     }
 }
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/tuples/LSMBTreeTupleWriterFactory.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/tuples/LSMBTreeTupleWriterFactory.java
index 5ee2b81..f6147be 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/tuples/LSMBTreeTupleWriterFactory.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/tuples/LSMBTreeTupleWriterFactory.java
@@ -20,14 +20,15 @@
 package org.apache.hyracks.storage.am.lsm.btree.tuples;
 
 import org.apache.hyracks.api.dataflow.value.ITypeTraits;
-import org.apache.hyracks.storage.am.common.api.ITreeIndexTupleWriter;
 import org.apache.hyracks.storage.am.common.tuples.TypeAwareTupleWriterFactory;
+import org.apache.hyracks.storage.am.lsm.common.api.ILSMTreeTupleWriter;
+import org.apache.hyracks.storage.am.lsm.common.api.ILSMTreeTupleWriterFactory;
 
-public class LSMBTreeTupleWriterFactory extends TypeAwareTupleWriterFactory {
+public class LSMBTreeTupleWriterFactory extends TypeAwareTupleWriterFactory 
implements ILSMTreeTupleWriterFactory {
 
     private static final long serialVersionUID = 1L;
-    private final int numKeyFields;
-    private final boolean isDelete;
+    protected final int numKeyFields;
+    protected boolean isDelete;
 
     public LSMBTreeTupleWriterFactory(ITypeTraits[] typeTraits, int 
numKeyFields, boolean isDelete) {
         super(typeTraits);
@@ -36,7 +37,13 @@
     }
 
     @Override
-    public ITreeIndexTupleWriter createTupleWriter() {
+    public ILSMTreeTupleWriter createTupleWriter() {
         return new LSMBTreeTupleWriter(typeTraits, numKeyFields, isDelete);
     }
+
+    @Override
+    public void setDelete(boolean isDelete) {
+        this.isDelete = isDelete;
+    }
+
 }
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/utils/LSMBTreeUtil.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/utils/LSMBTreeUtil.java
index 0e5fcdb..70d82a2 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/utils/LSMBTreeUtil.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/utils/LSMBTreeUtil.java
@@ -39,7 +39,6 @@
 import org.apache.hyracks.storage.am.lsm.btree.impls.LSMBTreeFileManager;
 import 
org.apache.hyracks.storage.am.lsm.btree.impls.LSMBTreeWithBuddyFileManager;
 import 
org.apache.hyracks.storage.am.lsm.btree.tuples.LSMBTreeCopyTupleWriterFactory;
-import 
org.apache.hyracks.storage.am.lsm.btree.tuples.LSMBTreeRefrencingTupleWriterFactory;
 import 
org.apache.hyracks.storage.am.lsm.btree.tuples.LSMBTreeTupleWriterFactory;
 import org.apache.hyracks.storage.am.lsm.common.api.ILSMIOOperationCallback;
 import org.apache.hyracks.storage.am.lsm.common.api.ILSMIOOperationScheduler;
@@ -52,6 +51,7 @@
 import org.apache.hyracks.storage.am.lsm.common.impls.ComponentFilterHelper;
 import 
org.apache.hyracks.storage.am.lsm.common.impls.LSMComponentFilterManager;
 import org.apache.hyracks.storage.am.lsm.common.impls.TreeIndexFactory;
+import 
org.apache.hyracks.storage.am.lsm.common.tuples.LSMTreeRefrencingTupleWriterFactory;
 import org.apache.hyracks.storage.common.buffercache.IBufferCache;
 import org.apache.hyracks.storage.common.file.IFileMapProvider;
 
@@ -74,16 +74,21 @@
                 new LSMBTreeTupleWriterFactory(typeTraits, 
cmpFactories.length, true);
         LSMBTreeCopyTupleWriterFactory copyTupleWriterFactory =
                 new LSMBTreeCopyTupleWriterFactory(typeTraits, 
cmpFactories.length);
+        LSMTreeRefrencingTupleWriterFactory bulkLoadTupleWriterFactory = new 
LSMTreeRefrencingTupleWriterFactory(
+                new LSMBTreeTupleWriterFactory(filterTypeTraits, 
cmpFactories.length, false));
+
         ITreeIndexFrameFactory insertLeafFrameFactory = new 
BTreeNSMLeafFrameFactory(insertTupleWriterFactory);
         ITreeIndexFrameFactory copyTupleLeafFrameFactory = new 
BTreeNSMLeafFrameFactory(copyTupleWriterFactory);
         ITreeIndexFrameFactory deleteLeafFrameFactory = new 
BTreeNSMLeafFrameFactory(deleteTupleWriterFactory);
         ITreeIndexFrameFactory interiorFrameFactory = new 
BTreeNSMInteriorFrameFactory(insertTupleWriterFactory);
+        ITreeIndexFrameFactory bulkLoadLeafFrameFactory = new 
BTreeNSMLeafFrameFactory(bulkLoadTupleWriterFactory);
 
         TreeIndexFactory<BTree> diskBTreeFactory =
                 new BTreeFactory(ioManager, diskBufferCache, 
diskFileMapProvider, freePageManagerFactory,
                         interiorFrameFactory, copyTupleLeafFrameFactory, 
cmpFactories, typeTraits.length);
-        TreeIndexFactory<BTree> bulkLoadBTreeFactory = new 
BTreeFactory(ioManager, diskBufferCache, diskFileMapProvider,
-                freePageManagerFactory, interiorFrameFactory, 
insertLeafFrameFactory, cmpFactories, typeTraits.length);
+        TreeIndexFactory<BTree> bulkLoadBTreeFactory =
+                new BTreeFactory(ioManager, diskBufferCache, 
diskFileMapProvider, freePageManagerFactory,
+                        interiorFrameFactory, bulkLoadLeafFrameFactory, 
cmpFactories, typeTraits.length);
 
         BloomFilterFactory bloomFilterFactory = needKeyDupCheck
                 ? new BloomFilterFactory(diskBufferCache, diskFileMapProvider, 
bloomFilterKeyFields) : null;
@@ -125,8 +130,8 @@
         ITreeIndexFrameFactory deleteLeafFrameFactory = new 
BTreeNSMLeafFrameFactory(deleteTupleWriterFactory);
         ITreeIndexFrameFactory interiorFrameFactory = new 
BTreeNSMInteriorFrameFactory(insertTupleWriterFactory);
         // This is the tuple writer that can do both inserts and deletes
-        LSMBTreeRefrencingTupleWriterFactory referencingTupleWriterFactory =
-                new LSMBTreeRefrencingTupleWriterFactory(typeTraits, 
cmpFactories.length, false);
+        LSMTreeRefrencingTupleWriterFactory referencingTupleWriterFactory = 
new LSMTreeRefrencingTupleWriterFactory(
+                new LSMBTreeTupleWriterFactory(typeTraits, 
cmpFactories.length, false));
         // This is the leaf frame factory for transaction components since it
         // can be used for both inserts and deletes
         ITreeIndexFrameFactory dualLeafFrameFactory = new 
BTreeNSMLeafFrameFactory(referencingTupleWriterFactory);
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMTreeTupleWriter.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMTreeTupleWriter.java
new file mode 100644
index 0000000..d896075
--- /dev/null
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMTreeTupleWriter.java
@@ -0,0 +1,34 @@
+/*
+ * 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.api;
+
+import org.apache.hyracks.storage.am.common.api.ITreeIndexTupleWriter;
+
+/**
+ * This interface allows to write both insert (matter) and delete 
(anti-matter) tuples
+ *
+ * @author luochen
+ *
+ */
+public interface ILSMTreeTupleWriter extends ITreeIndexTupleWriter {
+
+    void setDelete(boolean isDelete);
+
+}
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMTreeTupleWriterFactory.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMTreeTupleWriterFactory.java
new file mode 100644
index 0000000..c206980
--- /dev/null
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMTreeTupleWriterFactory.java
@@ -0,0 +1,30 @@
+/*
+ * 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.api;
+
+import org.apache.hyracks.storage.am.common.api.ITreeIndexTupleWriterFactory;
+
+public interface ILSMTreeTupleWriterFactory extends 
ITreeIndexTupleWriterFactory {
+
+    @Override
+    public ILSMTreeTupleWriter createTupleWriter();
+
+    public void setDelete(boolean isDelete);
+}
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/tuples/LSMTreeRefrencingTupleWriterFactory.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/tuples/LSMTreeRefrencingTupleWriterFactory.java
new file mode 100644
index 0000000..d527cda
--- /dev/null
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/tuples/LSMTreeRefrencingTupleWriterFactory.java
@@ -0,0 +1,53 @@
+/*
+ * 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.tuples;
+
+import org.apache.hyracks.storage.am.lsm.common.api.ILSMTreeTupleWriter;
+import org.apache.hyracks.storage.am.lsm.common.api.ILSMTreeTupleWriterFactory;
+
+/**
+ * This is a TupleWriterFactory that can be used to reference the last writer 
it created
+ * and switch between actual and antimatter writer modes
+ *
+ */
+public class LSMTreeRefrencingTupleWriterFactory implements 
ILSMTreeTupleWriterFactory {
+    private static final long serialVersionUID = 1L;
+
+    private final ILSMTreeTupleWriterFactory factory;
+    private ILSMTreeTupleWriter createdTupleWriter;
+
+    public LSMTreeRefrencingTupleWriterFactory(ILSMTreeTupleWriterFactory 
factory) {
+        this.factory = factory;
+    }
+
+    @Override
+    public ILSMTreeTupleWriter createTupleWriter() {
+        createdTupleWriter = factory.createTupleWriter();
+        return createdTupleWriter;
+    }
+
+    @Override
+    public void setDelete(boolean isDelete) {
+        this.factory.setDelete(isDelete);
+        if (this.createdTupleWriter != null) {
+            this.createdTupleWriter.setDelete(isDelete);
+        }
+    }
+
+}
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/tuples/LSMRTreeTupleWriter.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/tuples/LSMRTreeTupleWriter.java
index 3e586e6..3d32775 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/tuples/LSMRTreeTupleWriter.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/tuples/LSMRTreeTupleWriter.java
@@ -22,14 +22,15 @@
 import org.apache.hyracks.api.dataflow.value.ITypeTraits;
 import org.apache.hyracks.dataflow.common.data.accessors.ITupleReference;
 import org.apache.hyracks.storage.am.common.api.ITreeIndexTupleReference;
+import org.apache.hyracks.storage.am.lsm.common.api.ILSMTreeTupleWriter;
 import org.apache.hyracks.storage.am.rtree.tuples.RTreeTypeAwareTupleWriter;
 
-public class LSMRTreeTupleWriter extends RTreeTypeAwareTupleWriter {
-    private final boolean isAntimatter;
+public class LSMRTreeTupleWriter extends RTreeTypeAwareTupleWriter implements 
ILSMTreeTupleWriter {
+    private boolean isDelete;
 
-    public LSMRTreeTupleWriter(ITypeTraits[] typeTraits, boolean isAntimatter) 
{
+    public LSMRTreeTupleWriter(ITypeTraits[] typeTraits, boolean isDelete) {
         super(typeTraits);
-        this.isAntimatter = isAntimatter;
+        this.isDelete = isDelete;
     }
 
     @Override
@@ -45,7 +46,7 @@
     @Override
     public int writeTuple(ITupleReference tuple, byte[] targetBuf, int 
targetOff) {
         int bytesWritten = super.writeTuple(tuple, targetBuf, targetOff);
-        if (isAntimatter) {
+        if (isDelete) {
             setAntimatterBit(targetBuf, targetOff);
         }
         return bytesWritten;
@@ -54,13 +55,13 @@
     @Override
     protected int getNullFlagsBytes(int numFields) {
         // +1.0 is for matter/antimatter bit.
-        return (int) Math.ceil(((double) numFields + 1.0) / 8.0);
+        return (int) Math.ceil((numFields + 1.0) / 8.0);
     }
 
     @Override
     protected int getNullFlagsBytes(ITupleReference tuple) {
         // +1.0 is for matter/antimatter bit.
-        return (int) Math.ceil(((double) tuple.getFieldCount() + 1.0) / 8.0);
+        return (int) Math.ceil((tuple.getFieldCount() + 1.0) / 8.0);
     }
 
     protected void setAntimatterBit(byte[] targetBuf, int targetOff) {
@@ -68,4 +69,9 @@
         targetBuf[targetOff] = (byte) (targetBuf[targetOff] | (1 << 7));
     }
 
+    @Override
+    public void setDelete(boolean isDelete) {
+        this.isDelete = isDelete;
+    }
+
 }
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/tuples/LSMRTreeTupleWriterFactory.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/tuples/LSMRTreeTupleWriterFactory.java
index 0c21194..2394067 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/tuples/LSMRTreeTupleWriterFactory.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/tuples/LSMRTreeTupleWriterFactory.java
@@ -20,14 +20,15 @@
 package org.apache.hyracks.storage.am.lsm.rtree.tuples;
 
 import org.apache.hyracks.api.dataflow.value.ITypeTraits;
-import org.apache.hyracks.storage.am.common.api.ITreeIndexTupleWriter;
 import org.apache.hyracks.storage.am.common.tuples.TypeAwareTupleWriterFactory;
+import org.apache.hyracks.storage.am.lsm.common.api.ILSMTreeTupleWriter;
+import org.apache.hyracks.storage.am.lsm.common.api.ILSMTreeTupleWriterFactory;
 
-public class LSMRTreeTupleWriterFactory extends TypeAwareTupleWriterFactory {
+public class LSMRTreeTupleWriterFactory extends TypeAwareTupleWriterFactory 
implements ILSMTreeTupleWriterFactory {
 
     private static final long serialVersionUID = 1L;
     private final ITypeTraits[] typeTraits;
-    private final boolean isDelete;
+    private boolean isDelete;
 
     public LSMRTreeTupleWriterFactory(ITypeTraits[] typeTraits, boolean 
isDelete) {
         super(typeTraits);
@@ -36,7 +37,12 @@
     }
 
     @Override
-    public ITreeIndexTupleWriter createTupleWriter() {
+    public ILSMTreeTupleWriter createTupleWriter() {
         return new LSMRTreeTupleWriter(typeTraits, isDelete);
     }
+
+    @Override
+    public void setDelete(boolean isDelete) {
+        this.isDelete = isDelete;
+    }
 }
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/tuples/LSMRTreeTupleWriterFactoryForPointMBR.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/tuples/LSMRTreeTupleWriterFactoryForPointMBR.java
index c18823a..0ab3ec3 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/tuples/LSMRTreeTupleWriterFactoryForPointMBR.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/tuples/LSMRTreeTupleWriterFactoryForPointMBR.java
@@ -20,26 +20,37 @@
 package org.apache.hyracks.storage.am.lsm.rtree.tuples;
 
 import org.apache.hyracks.api.dataflow.value.ITypeTraits;
-import org.apache.hyracks.storage.am.common.api.ITreeIndexTupleWriter;
 import org.apache.hyracks.storage.am.common.tuples.TypeAwareTupleWriterFactory;
+import org.apache.hyracks.storage.am.lsm.common.api.ILSMTreeTupleWriter;
+import org.apache.hyracks.storage.am.lsm.common.api.ILSMTreeTupleWriterFactory;
 
-public class LSMRTreeTupleWriterFactoryForPointMBR extends 
TypeAwareTupleWriterFactory {
+public class LSMRTreeTupleWriterFactoryForPointMBR extends 
TypeAwareTupleWriterFactory
+        implements ILSMTreeTupleWriterFactory {
 
     private static final long serialVersionUID = 1L;
     private final int keyFieldCount;
     private final int valueFieldCount;
     private final boolean antimatterAware;
+    private boolean isDelete;
 
     public LSMRTreeTupleWriterFactoryForPointMBR(ITypeTraits[] typeTraits, int 
keyFieldCount, int valueFieldCount,
-            boolean antimatterAware) {
+            boolean antimatterAware, boolean isDelete) {
         super(typeTraits);
         this.keyFieldCount = keyFieldCount;
         this.valueFieldCount = valueFieldCount;
         this.antimatterAware = antimatterAware;
+        this.isDelete = isDelete;
     }
 
     @Override
-    public ITreeIndexTupleWriter createTupleWriter() {
-        return new LSMRTreeTupleWriterForPointMBR(typeTraits, keyFieldCount, 
valueFieldCount, antimatterAware);
+    public ILSMTreeTupleWriter createTupleWriter() {
+        return new LSMRTreeTupleWriterForPointMBR(typeTraits, keyFieldCount, 
valueFieldCount, antimatterAware,
+                isDelete);
     }
+
+    @Override
+    public void setDelete(boolean isDelete) {
+        this.isDelete = isDelete;
+    }
+
 }
\ No newline at end of file
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/tuples/LSMRTreeTupleWriterForPointMBR.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/tuples/LSMRTreeTupleWriterForPointMBR.java
index 5de4d20..ca5a446 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/tuples/LSMRTreeTupleWriterForPointMBR.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/tuples/LSMRTreeTupleWriterForPointMBR.java
@@ -23,6 +23,7 @@
 import org.apache.hyracks.dataflow.common.data.accessors.ITupleReference;
 import org.apache.hyracks.storage.am.common.api.ITreeIndexTupleReference;
 import org.apache.hyracks.storage.am.lsm.common.api.ILSMTreeTupleReference;
+import org.apache.hyracks.storage.am.lsm.common.api.ILSMTreeTupleWriter;
 import org.apache.hyracks.storage.am.rtree.tuples.RTreeTypeAwareTupleWriter;
 import org.apache.hyracks.util.encoding.VarLenIntEncoderDecoder;
 
@@ -40,16 +41,17 @@
  * the stored point MBR [0.4, 0.3, 1] and generates a tuple reference which is 
externally shown as [0.4, 0.3, 0.4, 0.3, 1].
  */
 
-public class LSMRTreeTupleWriterForPointMBR extends RTreeTypeAwareTupleWriter {
+public class LSMRTreeTupleWriterForPointMBR extends RTreeTypeAwareTupleWriter 
implements ILSMTreeTupleWriter {
     private final int inputKeyFieldCount; //double field count for mbr 
secondary key of an input tuple
     private final int valueFieldCount; //value(or payload or primary key) 
field count (same for an input tuple and a stored tuple)
     private final int inputTotalFieldCount; //total field count (key + value 
fields) of an input tuple.
     private final int storedKeyFieldCount; //double field count to be stored 
for the mbr secondary key
     private final int storedTotalFieldCount; //total field count (key + value 
fields) of a stored tuple.
     private final boolean antimatterAware;
+    private boolean isDelete;
 
     public LSMRTreeTupleWriterForPointMBR(ITypeTraits[] typeTraits, int 
keyFieldCount, int valueFieldCount,
-            boolean antimatterAware) {
+            boolean antimatterAware, boolean isDelete) {
         super(typeTraits);
         this.inputKeyFieldCount = keyFieldCount;
         this.valueFieldCount = valueFieldCount;
@@ -75,7 +77,8 @@
 
     @Override
     public ITreeIndexTupleReference createTupleReference() {
-        return new LSMRTreeTupleReferenceForPointMBR(typeTraits, 
inputKeyFieldCount, valueFieldCount, antimatterAware);
+        return new LSMRTreeTupleReferenceForPointMBR(typeTraits, 
inputKeyFieldCount, valueFieldCount,
+                antimatterAware);
     }
 
     @Override
@@ -87,7 +90,7 @@
             targetBuf[runner++] = (byte) 0;
         }
 
-        // write field slots for variable length fields which applies only to 
value fields in RTree 
+        // write field slots for variable length fields which applies only to 
value fields in RTree
         for (int i = inputKeyFieldCount; i < inputTotalFieldCount; i++) {
             if (!typeTraits[i].isFixedLength()) {
                 runner += 
VarLenIntEncoderDecoder.encode(tuple.getFieldLength(i), targetBuf, runner);
@@ -106,10 +109,16 @@
         }
 
         //set antimatter bit if necessary
+        //this is used when we flush an in-memory rtree into disk, and insert 
anti-matter tuples from in-memory buddy btree into disk rtree
         if (antimatterAware) {
             if (tuple instanceof ILSMTreeTupleReference && 
((ILSMTreeTupleReference) tuple).isAntimatter()) {
                 setAntimatterBit(targetBuf, targetOff);
             }
+        }
+
+        //this is used during creating secondary index operation, where we 
explicitly insert some antimatter tuple
+        if (isDelete) {
+            setAntimatterBit(targetBuf, targetOff);
         }
 
         return runner - targetOff;
@@ -123,10 +132,12 @@
                 "writeTupleFields(ITupleReference, int, int, byte[], int) not 
implemented for RTreeTypeAwareTupleWriterForPointMBR class.");
     }
 
+    @Override
     protected int getNullFlagsBytes(ITupleReference tuple) {
-        return (int) Math.ceil((double) (storedTotalFieldCount + 
(antimatterAware ? 1 : 0)) / 8.0);
+        return (int) Math.ceil((storedTotalFieldCount + (antimatterAware ? 1 : 
0)) / 8.0);
     }
 
+    @Override
     protected int getFieldSlotsBytes(ITupleReference tuple) {
         int fieldSlotBytes = 0;
         for (int i = inputKeyFieldCount; i < inputTotalFieldCount; i++) {
@@ -146,4 +157,9 @@
         // Set leftmost bit to 1.
         targetBuf[targetOff] = (byte) (targetBuf[targetOff] | (1 << 7));
     }
+
+    @Override
+    public void setDelete(boolean isDelete) {
+        this.isDelete = isDelete;
+    }
 }
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 d390be0..0a0d123 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
@@ -50,6 +50,7 @@
 import org.apache.hyracks.storage.am.lsm.common.impls.ComponentFilterHelper;
 import 
org.apache.hyracks.storage.am.lsm.common.impls.LSMComponentFilterManager;
 import org.apache.hyracks.storage.am.lsm.common.impls.TreeIndexFactory;
+import 
org.apache.hyracks.storage.am.lsm.common.tuples.LSMTreeRefrencingTupleWriterFactory;
 import org.apache.hyracks.storage.am.lsm.rtree.impls.ExternalRTree;
 import org.apache.hyracks.storage.am.lsm.rtree.impls.LSMRTree;
 import org.apache.hyracks.storage.am.lsm.rtree.impls.LSMRTreeFileManager;
@@ -92,7 +93,7 @@
         ITreeIndexTupleWriterFactory rtreeLeafFrameTupleWriterFactory = null;
         if (isPointMBR) {
             rtreeLeafFrameTupleWriterFactory =
-                    new LSMRTreeTupleWriterFactoryForPointMBR(typeTraits, 
keyFieldCount, valueFieldCount, false);
+                    new LSMRTreeTupleWriterFactoryForPointMBR(typeTraits, 
keyFieldCount, valueFieldCount, false, false);
         } else {
             rtreeLeafFrameTupleWriterFactory = 
rtreeInteriorFrameTupleWriterFactory;
         }
@@ -154,17 +155,22 @@
                 new LSMRTreeTupleWriterFactory(typeTraits, false);
         ITreeIndexTupleWriterFactory rtreeLeafFrameTupleWriterFactory;
         ITreeIndexTupleWriterFactory rtreeLeafFrameCopyTupleWriterFactory;
+        ITreeIndexTupleWriterFactory rtreeLeafFrameBulkLoadWriterFactory;
         if (isPointMBR) {
             int keyFieldCount = rtreeCmpFactories.length;
             int valueFieldCount = btreeComparatorFactories.length - 
keyFieldCount;
             rtreeLeafFrameTupleWriterFactory =
-                    new LSMRTreeTupleWriterFactoryForPointMBR(typeTraits, 
keyFieldCount, valueFieldCount, true);
+                    new LSMRTreeTupleWriterFactoryForPointMBR(typeTraits, 
keyFieldCount, valueFieldCount, true, false);
             rtreeLeafFrameCopyTupleWriterFactory =
-                    new LSMRTreeTupleWriterFactoryForPointMBR(typeTraits, 
keyFieldCount, valueFieldCount, true);
-
+                    new LSMRTreeTupleWriterFactoryForPointMBR(typeTraits, 
keyFieldCount, valueFieldCount, true, false);
+            rtreeLeafFrameBulkLoadWriterFactory = new 
LSMTreeRefrencingTupleWriterFactory(
+                    new LSMRTreeTupleWriterFactoryForPointMBR(typeTraits, 
keyFieldCount, valueFieldCount, true, false));
         } else {
             rtreeLeafFrameTupleWriterFactory = new 
LSMRTreeTupleWriterFactory(typeTraits, false);
             rtreeLeafFrameCopyTupleWriterFactory = new 
LSMRTreeCopyTupleWriterFactory(typeTraits);
+            rtreeLeafFrameBulkLoadWriterFactory =
+                    new LSMTreeRefrencingTupleWriterFactory(new 
LSMRTreeTupleWriterFactory(typeTraits, false));
+
         }
         LSMRTreeTupleWriterFactory btreeTupleWriterFactory = new 
LSMRTreeTupleWriterFactory(typeTraits, true);
 
@@ -172,6 +178,8 @@
                 rtreeInteriorFrameTupleWriterFactory, valueProviderFactories, 
rtreePolicyType, isPointMBR);
         ITreeIndexFrameFactory rtreeLeafFrameFactory = new 
RTreeNSMLeafFrameFactory(rtreeLeafFrameTupleWriterFactory,
                 valueProviderFactories, rtreePolicyType, isPointMBR);
+        ITreeIndexFrameFactory rtreeLeafFrameBulkLoadFactory = new 
RTreeNSMLeafFrameFactory(
+                rtreeLeafFrameBulkLoadWriterFactory, valueProviderFactories, 
rtreePolicyType, isPointMBR);
 
         ITreeIndexFrameFactory btreeInteriorFrameFactory = new 
BTreeNSMInteriorFrameFactory(btreeTupleWriterFactory);
         ITreeIndexFrameFactory btreeLeafFrameFactory = new 
BTreeNSMLeafFrameFactory(btreeTupleWriterFactory);
@@ -183,7 +191,7 @@
                 typeTraits.length, isPointMBR);
 
         TreeIndexFactory<RTree> bulkLoadRTreeFactory = new 
RTreeFactory(ioManager, diskBufferCache, diskFileMapProvider,
-                freePageManagerFactory, rtreeInteriorFrameFactory, 
rtreeLeafFrameFactory, rtreeCmpFactories,
+                freePageManagerFactory, rtreeInteriorFrameFactory, 
rtreeLeafFrameBulkLoadFactory, rtreeCmpFactories,
                 typeTraits.length, isPointMBR);
 
         // The first field is for the sorted curve (e.g. Hilbert curve), and 
the
@@ -242,7 +250,7 @@
         ITreeIndexTupleWriterFactory rtreeLeafFrameTupleWriterFactory = null;
         if (isPointMBR) {
             rtreeLeafFrameTupleWriterFactory =
-                    new LSMRTreeTupleWriterFactoryForPointMBR(typeTraits, 
keyFieldCount, valueFieldCount, false);
+                    new LSMRTreeTupleWriterFactoryForPointMBR(typeTraits, 
keyFieldCount, valueFieldCount, false, false);
         } else {
             rtreeLeafFrameTupleWriterFactory = 
rtreeInteriorFrameTupleWriterFactory;
         }

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/1796
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I6665f56a5d2183697197298fa24824eeb827686a
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Luo Chen <[email protected]>

Reply via email to