Reorganizing lsm-btree code into meaningful packages.

git-svn-id: https://hyracks.googlecode.com/svn/branches/hyracks_lsm_tree@1031 123451ca-8445-de46-9d55-352943316053
diff --git a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/FreePageManagerFactory.java b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/freepage/FreePageManagerFactory.java
similarity index 93%
rename from hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/FreePageManagerFactory.java
rename to hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/freepage/FreePageManagerFactory.java
index b88cc88..4285490 100644
--- a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/FreePageManagerFactory.java
+++ b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/freepage/FreePageManagerFactory.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.hyracks.storage.am.lsmtree.impls;
+package edu.uci.ics.hyracks.storage.am.lsmtree.freepage;
 
 import edu.uci.ics.hyracks.storage.am.common.api.IFreePageManager;
 import edu.uci.ics.hyracks.storage.am.common.api.ITreeIndexMetaDataFrameFactory;
diff --git a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/InMemoryBufferCache.java b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/freepage/InMemoryBufferCache.java
similarity index 98%
rename from hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/InMemoryBufferCache.java
rename to hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/freepage/InMemoryBufferCache.java
index 1849f06..c523440 100644
--- a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/InMemoryBufferCache.java
+++ b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/freepage/InMemoryBufferCache.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.hyracks.storage.am.lsmtree.impls;
+package edu.uci.ics.hyracks.storage.am.lsmtree.freepage;
 
 import java.nio.ByteBuffer;
 import java.util.concurrent.locks.ReadWriteLock;
diff --git a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/InMemoryBufferCacheFactory.java b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/freepage/InMemoryBufferCacheFactory.java
similarity index 93%
rename from hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/InMemoryBufferCacheFactory.java
rename to hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/freepage/InMemoryBufferCacheFactory.java
index 21ec0da..07e1c15 100644
--- a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/InMemoryBufferCacheFactory.java
+++ b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/freepage/InMemoryBufferCacheFactory.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.hyracks.storage.am.lsmtree.impls;
+package edu.uci.ics.hyracks.storage.am.lsmtree.freepage;
 
 import edu.uci.ics.hyracks.storage.common.buffercache.HeapBufferAllocator;
 import edu.uci.ics.hyracks.storage.common.buffercache.IBufferCache;
diff --git a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/InMemoryBufferCacheTest.java b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/freepage/InMemoryBufferCacheTest.java
similarity index 98%
rename from hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/InMemoryBufferCacheTest.java
rename to hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/freepage/InMemoryBufferCacheTest.java
index 5b1a409..418ed5c 100644
--- a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/InMemoryBufferCacheTest.java
+++ b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/freepage/InMemoryBufferCacheTest.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.hyracks.storage.am.lsmtree.impls;
+package edu.uci.ics.hyracks.storage.am.lsmtree.freepage;
 
 import static org.junit.Assert.fail;
 
diff --git a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/InMemoryFreePageManager.java b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/freepage/InMemoryFreePageManager.java
similarity index 97%
rename from hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/InMemoryFreePageManager.java
rename to hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/freepage/InMemoryFreePageManager.java
index 42c4bf3..9331c04 100644
--- a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/InMemoryFreePageManager.java
+++ b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/freepage/InMemoryFreePageManager.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.hyracks.storage.am.lsmtree.impls;
+package edu.uci.ics.hyracks.storage.am.lsmtree.freepage;
 
 import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
 import edu.uci.ics.hyracks.storage.am.common.api.IFreePageManager;
diff --git a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/InMemoryFreePageManagerTest.java b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/freepage/InMemoryFreePageManagerTest.java
similarity index 96%
rename from hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/InMemoryFreePageManagerTest.java
rename to hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/freepage/InMemoryFreePageManagerTest.java
index d61735f..71a781c 100644
--- a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/InMemoryFreePageManagerTest.java
+++ b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/freepage/InMemoryFreePageManagerTest.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.hyracks.storage.am.lsmtree.impls;
+package edu.uci.ics.hyracks.storage.am.lsmtree.freepage;
 
 import static org.junit.Assert.fail;
 
diff --git a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/AbstractLSMTreeTest.java b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/AbstractLSMTreeTest.java
deleted file mode 100644
index 17de58c..0000000
--- a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/AbstractLSMTreeTest.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package edu.uci.ics.hyracks.storage.am.lsmtree.impls;
-
-import java.io.File;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Random;
-import java.util.logging.Logger;
-
-import org.junit.After;
-import org.junit.Before;
-
-import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
-import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
-import edu.uci.ics.hyracks.api.io.FileReference;
-import edu.uci.ics.hyracks.storage.common.buffercache.IBufferCache;
-import edu.uci.ics.hyracks.storage.common.file.IFileMapProvider;
-import edu.uci.ics.hyracks.test.support.TestStorageManagerComponentHolder;
-import edu.uci.ics.hyracks.test.support.TestUtils;
-
-public abstract class AbstractLSMTreeTest {
-    protected static final Logger LOGGER = Logger.getLogger(AbstractLSMTreeTest.class.getName());
-    public static final long RANDOM_SEED = 50;
-    
-    private static final int PAGE_SIZE = 256;
-    private static final int NUM_PAGES = 10;
-    private static final int MAX_OPEN_FILES = 10;
-    private static final int HYRACKS_FRAME_SIZE = 128;
-        
-    protected IHyracksTaskContext ctx; 
-    protected IBufferCache bufferCache;
-    protected int btreeFileId;
-    
-    protected final Random rnd = new Random();
-    protected final static SimpleDateFormat simpleDateFormat = new SimpleDateFormat("ddMMyy-hhmmssSS");
-    protected final static String tmpDir = System.getProperty("java.io.tmpdir");
-    protected final static String sep = System.getProperty("file.separator");
-    protected String fileName;    
-    
-    @Before
-    public void setUp() throws HyracksDataException {
-        fileName = tmpDir + sep + simpleDateFormat.format(new Date());
-        ctx = TestUtils.create(getHyracksFrameSize());
-        TestStorageManagerComponentHolder.init(getPageSize(), getNumPages(), getMaxOpenFiles());
-        bufferCache = TestStorageManagerComponentHolder.getBufferCache(ctx);
-        IFileMapProvider fmp = TestStorageManagerComponentHolder.getFileMapProvider(ctx);
-        FileReference file = new FileReference(new File(fileName)); 
-        bufferCache.createFile(file);
-        btreeFileId = fmp.lookupFileId(file);
-        bufferCache.openFile(btreeFileId);
-        rnd.setSeed(RANDOM_SEED);
-    }
-    
-    @After
-    public void tearDown() throws HyracksDataException {
-        bufferCache.closeFile(btreeFileId);
-        bufferCache.close();
-        File f = new File(fileName);
-        f.deleteOnExit();
-    }
-    
-    public int getPageSize() {
-        return PAGE_SIZE;
-    }
-    
-    public int getNumPages() {
-        return NUM_PAGES;
-    }
-    
-    public int getHyracksFrameSize() {
-        return HYRACKS_FRAME_SIZE;
-    }
-    
-    public int getMaxOpenFiles() {
-        return MAX_OPEN_FILES;
-    }
-}
diff --git a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/BTreeFactory.java b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/BTreeFactory.java
index 1584f2c..f5bfaec 100644
--- a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/BTreeFactory.java
+++ b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/BTreeFactory.java
@@ -3,6 +3,7 @@
 import edu.uci.ics.hyracks.storage.am.btree.impls.BTree;
 import edu.uci.ics.hyracks.storage.am.common.api.ITreeIndexFrameFactory;
 import edu.uci.ics.hyracks.storage.am.common.ophelpers.MultiComparator;
+import edu.uci.ics.hyracks.storage.am.lsmtree.freepage.FreePageManagerFactory;
 import edu.uci.ics.hyracks.storage.common.buffercache.IBufferCache;
 
 public class BTreeFactory {
diff --git a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMTree.java b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMTree.java
index fb5d741..de6b524 100644
--- a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMTree.java
+++ b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMTree.java
@@ -30,6 +30,8 @@
 import edu.uci.ics.hyracks.storage.am.common.api.TreeIndexException;
 import edu.uci.ics.hyracks.storage.am.common.ophelpers.IndexOp;
 import edu.uci.ics.hyracks.storage.am.common.ophelpers.MultiComparator;
+import edu.uci.ics.hyracks.storage.am.lsmtree.freepage.InMemoryFreePageManager;
+import edu.uci.ics.hyracks.storage.am.lsmtree.tuples.LSMTypeAwareTupleReference;
 import edu.uci.ics.hyracks.storage.common.buffercache.IBufferCache;
 import edu.uci.ics.hyracks.storage.common.file.IFileMapManager;
 
diff --git a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMTreeDeleteTest.java b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMTreeDeleteTest.java
deleted file mode 100644
index 3375918..0000000
--- a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMTreeDeleteTest.java
+++ /dev/null
@@ -1,1095 +0,0 @@
-package edu.uci.ics.hyracks.storage.am.lsmtree.impls;
-
-import static org.junit.Assert.fail;
-
-import java.io.ByteArrayInputStream;
-import java.io.DataInput;
-import java.io.DataInputStream;
-import java.io.DataOutput;
-import java.io.File;
-import java.nio.ByteBuffer;
-
-import org.junit.Test;
-
-import edu.uci.ics.hyracks.api.comm.IFrameTupleAccessor;
-import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
-import edu.uci.ics.hyracks.api.dataflow.value.IBinaryComparator;
-import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
-import edu.uci.ics.hyracks.api.dataflow.value.ITypeTraits;
-import edu.uci.ics.hyracks.api.dataflow.value.RecordDescriptor;
-import edu.uci.ics.hyracks.api.io.FileReference;
-import edu.uci.ics.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
-import edu.uci.ics.hyracks.data.std.primitive.IntegerPointable;
-import edu.uci.ics.hyracks.dataflow.common.comm.io.ArrayTupleBuilder;
-import edu.uci.ics.hyracks.dataflow.common.comm.io.ArrayTupleReference;
-import edu.uci.ics.hyracks.dataflow.common.comm.io.FrameTupleAccessor;
-import edu.uci.ics.hyracks.dataflow.common.comm.io.FrameTupleAppender;
-import edu.uci.ics.hyracks.dataflow.common.data.accessors.FrameTupleReference;
-import edu.uci.ics.hyracks.dataflow.common.data.accessors.ITupleReference;
-import edu.uci.ics.hyracks.dataflow.common.data.marshalling.IntegerSerializerDeserializer;
-import edu.uci.ics.hyracks.storage.am.btree.frames.BTreeNSMInteriorFrameFactory;
-import edu.uci.ics.hyracks.storage.am.btree.frames.BTreeNSMLeafFrameFactory;
-import edu.uci.ics.hyracks.storage.am.btree.impls.RangePredicate;
-import edu.uci.ics.hyracks.storage.am.common.api.IFreePageManager;
-import edu.uci.ics.hyracks.storage.am.common.api.ITreeIndexAccessor;
-import edu.uci.ics.hyracks.storage.am.common.api.ITreeIndexCursor;
-import edu.uci.ics.hyracks.storage.am.common.api.ITreeIndexFrameFactory;
-import edu.uci.ics.hyracks.storage.am.common.api.ITreeIndexMetaDataFrameFactory;
-import edu.uci.ics.hyracks.storage.am.common.api.TreeIndexException;
-import edu.uci.ics.hyracks.storage.am.common.frames.LIFOMetaDataFrameFactory;
-import edu.uci.ics.hyracks.storage.am.common.ophelpers.MultiComparator;
-import edu.uci.ics.hyracks.storage.common.buffercache.IBufferCache;
-import edu.uci.ics.hyracks.storage.common.file.IFileMapManager;
-import edu.uci.ics.hyracks.storage.common.file.IFileMapProvider;
-import edu.uci.ics.hyracks.test.support.TestStorageManagerComponentHolder;
-import edu.uci.ics.hyracks.test.support.TestUtils;
-
-public class LSMTreeDeleteTest extends AbstractLSMTreeTest {
-
-    private static final int PAGE_SIZE = 256;
-    private static final int NUM_PAGES = 100;
-    private static final int MAX_OPEN_FILES = 100;
-    private static final int HYRACKS_FRAME_SIZE = 128;
-    private IHyracksTaskContext ctx = TestUtils.create(HYRACKS_FRAME_SIZE);
-
-    // BASIC DELETE TEST
-    // create a fix-length lsm tree, and do 100 deletes. That is insert 100
-    // delete nodes into the in-memory tree.
-    @Test
-    public void Test1() throws Exception {
-        // in disk
-        TestStorageManagerComponentHolder.init(PAGE_SIZE, NUM_PAGES, MAX_OPEN_FILES);
-        IBufferCache bufferCache = TestStorageManagerComponentHolder.getBufferCache(ctx);
-        IFileMapProvider fmp = TestStorageManagerComponentHolder.getFileMapProvider(ctx);
-        FileReference file = new FileReference(new File(fileName));
-        bufferCache.createFile(file);
-        int fileId = fmp.lookupFileId(file);
-        bufferCache.openFile(fileId);
-
-        // in memory
-        InMemoryBufferCacheFactory InMemBufferCacheFactory = new InMemoryBufferCacheFactory(PAGE_SIZE, NUM_PAGES);
-        IBufferCache memBufferCache = InMemBufferCacheFactory.createInMemoryBufferCache();
-
-        // declare fields
-        int fieldCount = 2;
-        ITypeTraits[] typeTraits = new ITypeTraits[fieldCount];
-        typeTraits[0] = IntegerPointable.TYPE_TRAITS;
-        typeTraits[1] = IntegerPointable.TYPE_TRAITS;
-
-        // declare keys
-        int keyFieldCount = 1;
-        IBinaryComparator[] cmps = new IBinaryComparator[keyFieldCount];
-        cmps[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY).createBinaryComparator();
-
-        MultiComparator cmp = new MultiComparator(cmps);
-
-        LSMTypeAwareTupleWriterFactory insertTupleWriterFactory = new LSMTypeAwareTupleWriterFactory(typeTraits, false);
-        LSMTypeAwareTupleWriterFactory deleteTupleWriterFactory = new LSMTypeAwareTupleWriterFactory(typeTraits, true);
-
-        ITreeIndexFrameFactory insertLeafFrameFactory = new BTreeNSMLeafFrameFactory(insertTupleWriterFactory);
-        ITreeIndexFrameFactory deleteLeafFrameFactory = new BTreeNSMLeafFrameFactory(deleteTupleWriterFactory);
-        ITreeIndexFrameFactory interiorFrameFactory = new BTreeNSMInteriorFrameFactory(insertTupleWriterFactory);
-        ITreeIndexMetaDataFrameFactory metaFrameFactory = new LIFOMetaDataFrameFactory();
-
-        IFreePageManager memFreePageManager = new InMemoryFreePageManager(100, metaFrameFactory);
-
-        FreePageManagerFactory freePageManagerFactory = new FreePageManagerFactory(bufferCache, metaFrameFactory);
-        BTreeFactory bTreeFactory = new BTreeFactory(bufferCache, freePageManagerFactory, cmp, fieldCount,
-                interiorFrameFactory, insertLeafFrameFactory);
-
-        LSMTree lsmtree = new LSMTree(memBufferCache, bufferCache, fieldCount, cmp, memFreePageManager,
-                interiorFrameFactory, insertLeafFrameFactory, deleteLeafFrameFactory, bTreeFactory,
-                (IFileMapManager) fmp);
-
-        lsmtree.create(fileId);
-        lsmtree.open(fileId);
-
-        ByteBuffer frame = ctx.allocateFrame();
-        FrameTupleAppender appender = new FrameTupleAppender(ctx.getFrameSize());
-
-        ArrayTupleBuilder tb = new ArrayTupleBuilder(fieldCount);
-        DataOutput dos = tb.getDataOutput();
-
-        ISerializerDeserializer[] recDescSers = { IntegerSerializerDeserializer.INSTANCE,
-                IntegerSerializerDeserializer.INSTANCE };
-        RecordDescriptor recDesc = new RecordDescriptor(recDescSers);
-
-        IFrameTupleAccessor accessor = new FrameTupleAccessor(ctx.getFrameSize(), recDesc);
-        accessor.reset(frame);
-
-        FrameTupleReference tuple = new FrameTupleReference();
-
-        ITreeIndexAccessor lsmTreeAccessor = lsmtree.createAccessor();
-
-        int resultSize = 50;
-        int[][] resultArray = new int[resultSize][3];
-
-        for (int i = 0; i < resultSize; i++) {
-            resultArray[i][0] = i;
-            resultArray[i][1] = i + 1;
-            resultArray[i][2] = 1;
-        }
-
-        // delete
-        for (int i = 0; i < resultSize; i++) {
-
-            int f0 = resultArray[i][0];
-            int f1 = resultArray[i][1];
-
-            tb.reset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f0, dos);
-            tb.addFieldEndOffset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f1, dos);
-            tb.addFieldEndOffset();
-
-            appender.reset(frame, true);
-            appender.append(tb.getFieldEndOffsets(), tb.getByteArray(), 0, tb.getSize());
-
-            tuple.reset(accessor, 0);
-
-            ArrayTupleReference t = new ArrayTupleReference();
-            t.reset(tb.getFieldEndOffsets(), tb.getByteArray());
-
-            try {
-                lsmTreeAccessor.delete(t);
-            } catch (TreeIndexException e) {
-                System.out.println("test01:" + e);
-                e.printStackTrace();
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-
-        // scan
-        ITreeIndexCursor scanCursor = new LSMTreeRangeSearchCursor();
-        RangePredicate nullPred = new RangePredicate(true, null, null, true, true, null, null);
-        lsmTreeAccessor.search(scanCursor, nullPred);
-
-        try {
-            int scanTupleIndex = 0;
-            int arrayIndex = 0;
-            Object o = null;
-            while (scanCursor.hasNext()) {
-                scanCursor.next();
-                ITupleReference frameTuple = scanCursor.getTuple();
-                int numPrintFields = Math.min(frameTuple.getFieldCount(), recDescSers.length);
-
-                for (int i = 0; i < numPrintFields; i++) {
-                    ByteArrayInputStream inStream = new ByteArrayInputStream(frameTuple.getFieldData(i),
-                            frameTuple.getFieldStart(i), frameTuple.getFieldLength(i));
-                    DataInput dataIn = new DataInputStream(inStream);
-                    o = recDescSers[i].deserialize(dataIn);
-
-                }
-                while (resultArray[arrayIndex][2] != 0) {
-                    arrayIndex++;
-                }
-                if (Integer.parseInt(o.toString()) != resultArray[arrayIndex][1]) {
-                    fail("Input value and Output value doesn't match on the " + scanTupleIndex + " tuple\n");
-                }
-                scanTupleIndex++;
-                arrayIndex++;
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        } finally {
-            scanCursor.close();
-        }
-
-        lsmtree.close();
-        bufferCache.closeFile(fileId);
-        memBufferCache.close();
-    }
-
-    // INSERT-DELETE TEST
-    // create a fix-length lsm tree. First, do 100 insertions,
-    // and then do 50 deletions which has the same 50 keys which are part of the
-    // insertions.
-    @Test
-    public void Test2() throws Exception {
-        // in disk
-        TestStorageManagerComponentHolder.init(PAGE_SIZE, NUM_PAGES, MAX_OPEN_FILES);
-        IBufferCache bufferCache = TestStorageManagerComponentHolder.getBufferCache(ctx);
-        IFileMapProvider fmp = TestStorageManagerComponentHolder.getFileMapProvider(ctx);
-        FileReference file = new FileReference(new File(fileName));
-        bufferCache.createFile(file);
-        int fileId = fmp.lookupFileId(file);
-        bufferCache.openFile(fileId);
-
-        // in memory
-        InMemoryBufferCacheFactory InMemBufferCacheFactory = new InMemoryBufferCacheFactory(PAGE_SIZE, NUM_PAGES);
-        IBufferCache memBufferCache = InMemBufferCacheFactory.createInMemoryBufferCache();
-
-        // declare fields
-        int fieldCount = 2;
-        ITypeTraits[] typeTraits = new ITypeTraits[fieldCount];
-        typeTraits[0] = IntegerPointable.TYPE_TRAITS;
-        typeTraits[1] = IntegerPointable.TYPE_TRAITS;
-
-        // declare keys
-        int keyFieldCount = 1;
-        IBinaryComparator[] cmps = new IBinaryComparator[keyFieldCount];
-        cmps[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY).createBinaryComparator();
-
-        MultiComparator cmp = new MultiComparator(cmps);
-
-        LSMTypeAwareTupleWriterFactory insertTupleWriterFactory = new LSMTypeAwareTupleWriterFactory(typeTraits, false);
-        LSMTypeAwareTupleWriterFactory deleteTupleWriterFactory = new LSMTypeAwareTupleWriterFactory(typeTraits, true);
-
-        ITreeIndexFrameFactory insertLeafFrameFactory = new BTreeNSMLeafFrameFactory(insertTupleWriterFactory);
-        ITreeIndexFrameFactory deleteLeafFrameFactory = new BTreeNSMLeafFrameFactory(deleteTupleWriterFactory);
-        ITreeIndexFrameFactory interiorFrameFactory = new BTreeNSMInteriorFrameFactory(insertTupleWriterFactory);
-        ITreeIndexMetaDataFrameFactory metaFrameFactory = new LIFOMetaDataFrameFactory();
-
-        IFreePageManager memFreePageManager = new InMemoryFreePageManager(100, metaFrameFactory);
-
-        FreePageManagerFactory freePageManagerFactory = new FreePageManagerFactory(bufferCache, metaFrameFactory);
-        BTreeFactory bTreeFactory = new BTreeFactory(bufferCache, freePageManagerFactory, cmp, fieldCount,
-                interiorFrameFactory, insertLeafFrameFactory);
-
-        LSMTree lsmtree = new LSMTree(memBufferCache, bufferCache, fieldCount, cmp, memFreePageManager,
-                interiorFrameFactory, insertLeafFrameFactory, deleteLeafFrameFactory, bTreeFactory,
-                (IFileMapManager) fmp);
-
-        lsmtree.create(fileId);
-        lsmtree.open(fileId);
-
-        ByteBuffer frame = ctx.allocateFrame();
-        FrameTupleAppender appender = new FrameTupleAppender(ctx.getFrameSize());
-
-        ArrayTupleBuilder tb = new ArrayTupleBuilder(fieldCount);
-        DataOutput dos = tb.getDataOutput();
-
-        ISerializerDeserializer[] recDescSers = { IntegerSerializerDeserializer.INSTANCE,
-                IntegerSerializerDeserializer.INSTANCE };
-        RecordDescriptor recDesc = new RecordDescriptor(recDescSers);
-
-        IFrameTupleAccessor accessor = new FrameTupleAccessor(ctx.getFrameSize(), recDesc);
-        accessor.reset(frame);
-
-        FrameTupleReference tuple = new FrameTupleReference();
-
-        int resultSize = 100;
-        int deleteStartPosition = 50;
-        int[][] resultArray = new int[resultSize][3];
-
-        for (int i = 0; i < resultSize; i++) {
-            resultArray[i][0] = i;
-            resultArray[i][1] = i + 1;
-            resultArray[i][2] = 0;
-        }
-
-        // insert
-        ITreeIndexAccessor lsmTreeAccessor = lsmtree.createAccessor();
-        for (int i = 0; i < resultSize; i++) {
-
-            int f0 = resultArray[i][0];
-            int f1 = resultArray[i][1];
-
-            tb.reset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f0, dos);
-            tb.addFieldEndOffset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f1, dos);
-            tb.addFieldEndOffset();
-
-            appender.reset(frame, true);
-            appender.append(tb.getFieldEndOffsets(), tb.getByteArray(), 0, tb.getSize());
-
-            tuple.reset(accessor, 0);
-
-            ArrayTupleReference t = new ArrayTupleReference();
-            t.reset(tb.getFieldEndOffsets(), tb.getByteArray());
-
-            try {
-                lsmTreeAccessor.insert(t);
-            } catch (TreeIndexException e) {
-                System.out.println("test02:" + e);
-                e.printStackTrace();
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-
-        // delete
-        for (int i = deleteStartPosition; i < resultSize; i++) {
-
-            int f0 = resultArray[i][0];
-            int f1 = ++resultArray[i][1];
-            resultArray[i][2] = 1;
-
-            tb.reset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f0, dos);
-            tb.addFieldEndOffset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f1, dos);
-            tb.addFieldEndOffset();
-
-            appender.reset(frame, true);
-            appender.append(tb.getFieldEndOffsets(), tb.getByteArray(), 0, tb.getSize());
-
-            tuple.reset(accessor, 0);
-
-            ArrayTupleReference t = new ArrayTupleReference();
-            t.reset(tb.getFieldEndOffsets(), tb.getByteArray());
-
-            try {
-                lsmTreeAccessor.delete(t);
-            } catch (TreeIndexException e) {
-                System.out.println("test02:" + e);
-                e.printStackTrace();
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-
-        // scan
-        ITreeIndexCursor scanCursor = new LSMTreeRangeSearchCursor();
-        RangePredicate nullPred = new RangePredicate(true, null, null, true, true, null, null);
-        lsmTreeAccessor.search(scanCursor, nullPred);
-
-        try {
-            int scanTupleIndex = 0;
-            int arrayIndex = 0;
-            Object o = null;
-            while (scanCursor.hasNext()) {
-                scanCursor.next();
-                ITupleReference frameTuple = scanCursor.getTuple();
-                int numPrintFields = Math.min(frameTuple.getFieldCount(), recDescSers.length);
-
-                for (int i = 0; i < numPrintFields; i++) {
-                    ByteArrayInputStream inStream = new ByteArrayInputStream(frameTuple.getFieldData(i),
-                            frameTuple.getFieldStart(i), frameTuple.getFieldLength(i));
-                    DataInput dataIn = new DataInputStream(inStream);
-                    o = recDescSers[i].deserialize(dataIn);
-
-                }
-                while (resultArray[arrayIndex][2] != 0) {
-                    arrayIndex++;
-                }
-                if (Integer.parseInt(o.toString()) != resultArray[arrayIndex][1]) {
-                    fail("Input value and Output value doesn't match on the " + scanTupleIndex + " tuple\n");
-                }
-
-                scanTupleIndex++;
-                arrayIndex++;
-
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        } finally {
-            scanCursor.close();
-        }
-
-        lsmtree.close();
-        bufferCache.closeFile(fileId);
-        memBufferCache.close();
-    }
-
-    // DELETE->INSERT TEST
-    // create a fix-length lsm tree. First, do 100 deletions,
-    // and then do 50 insertions which has the same 50 keys which are part of
-    // the deletions.
-    @Test
-    public void Test3() throws Exception {
-        System.out.println("TEST3");
-        // in disk
-        TestStorageManagerComponentHolder.init(PAGE_SIZE, NUM_PAGES, MAX_OPEN_FILES);
-        IBufferCache bufferCache = TestStorageManagerComponentHolder.getBufferCache(ctx);
-        IFileMapProvider fmp = TestStorageManagerComponentHolder.getFileMapProvider(ctx);
-        FileReference file = new FileReference(new File(fileName));
-        bufferCache.createFile(file);
-        int fileId = fmp.lookupFileId(file);
-        bufferCache.openFile(fileId);
-
-        // in mem
-        InMemoryBufferCacheFactory InMemBufferCacheFactory = new InMemoryBufferCacheFactory(PAGE_SIZE, NUM_PAGES);
-        IBufferCache memBufferCache = InMemBufferCacheFactory.createInMemoryBufferCache();
-
-        // declare fields
-        int fieldCount = 2;
-        ITypeTraits[] typeTraits = new ITypeTraits[fieldCount];
-        typeTraits[0] = IntegerPointable.TYPE_TRAITS;
-        typeTraits[1] = IntegerPointable.TYPE_TRAITS;
-
-        // declare keys
-        int keyFieldCount = 1;
-        IBinaryComparator[] cmps = new IBinaryComparator[keyFieldCount];
-        cmps[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY).createBinaryComparator();
-
-        MultiComparator cmp = new MultiComparator(cmps);
-
-        LSMTypeAwareTupleWriterFactory insertTupleWriterFactory = new LSMTypeAwareTupleWriterFactory(typeTraits, false);
-        LSMTypeAwareTupleWriterFactory deleteTupleWriterFactory = new LSMTypeAwareTupleWriterFactory(typeTraits, true);
-
-        ITreeIndexFrameFactory insertLeafFrameFactory = new BTreeNSMLeafFrameFactory(insertTupleWriterFactory);
-        ITreeIndexFrameFactory deleteLeafFrameFactory = new BTreeNSMLeafFrameFactory(deleteTupleWriterFactory);
-        // change
-        ITreeIndexFrameFactory interiorFrameFactory = new BTreeNSMInteriorFrameFactory(insertTupleWriterFactory);
-        ITreeIndexMetaDataFrameFactory metaFrameFactory = new LIFOMetaDataFrameFactory();
-
-        IFreePageManager memFreePageManager = new InMemoryFreePageManager(100, metaFrameFactory);
-
-        FreePageManagerFactory freePageManagerFactory = new FreePageManagerFactory(bufferCache, metaFrameFactory);
-        BTreeFactory bTreeFactory = new BTreeFactory(bufferCache, freePageManagerFactory, cmp, fieldCount,
-                interiorFrameFactory, insertLeafFrameFactory);
-
-        LSMTree lsmtree = new LSMTree(memBufferCache, bufferCache, fieldCount, cmp, memFreePageManager,
-                interiorFrameFactory, insertLeafFrameFactory, deleteLeafFrameFactory, bTreeFactory,
-                (IFileMapManager) fmp);
-
-        lsmtree.create(fileId);
-        lsmtree.open(fileId);
-
-        ByteBuffer frame = ctx.allocateFrame();
-        FrameTupleAppender appender = new FrameTupleAppender(ctx.getFrameSize());
-
-        ArrayTupleBuilder tb = new ArrayTupleBuilder(fieldCount);
-        DataOutput dos = tb.getDataOutput();
-
-        ISerializerDeserializer[] recDescSers = { IntegerSerializerDeserializer.INSTANCE,
-                IntegerSerializerDeserializer.INSTANCE };
-        RecordDescriptor recDesc = new RecordDescriptor(recDescSers);
-
-        IFrameTupleAccessor accessor = new FrameTupleAccessor(ctx.getFrameSize(), recDesc);
-        accessor.reset(frame);
-
-        FrameTupleReference tuple = new FrameTupleReference();
-
-        int resultSize = 100;
-        int insertStartPosition = 50;
-        int[][] resultArray = new int[resultSize][3];
-
-        for (int i = 0; i < resultSize; i++) {
-            resultArray[i][0] = i;
-            resultArray[i][1] = i + 1;
-            resultArray[i][2] = 1;
-        }
-
-        // delete
-        ITreeIndexAccessor lsmTreeAccessor = lsmtree.createAccessor();
-        for (int i = 0; i < resultSize; i++) {
-
-            int f0 = resultArray[i][0];
-            int f1 = resultArray[i][1];
-
-            tb.reset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f0, dos);
-            tb.addFieldEndOffset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f1, dos);
-            tb.addFieldEndOffset();
-
-            appender.reset(frame, true);
-            appender.append(tb.getFieldEndOffsets(), tb.getByteArray(), 0, tb.getSize());
-
-            tuple.reset(accessor, 0);
-
-            ArrayTupleReference t = new ArrayTupleReference();
-            t.reset(tb.getFieldEndOffsets(), tb.getByteArray());
-
-            try {
-                lsmTreeAccessor.delete(t);
-            } catch (TreeIndexException e) {
-                System.out.println("test03:" + e);
-                e.printStackTrace();
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-
-        // insert
-        for (int i = insertStartPosition; i < resultSize; i++) {
-
-            int f0 = resultArray[i][0];
-            int f1 = ++resultArray[i][1];
-            resultArray[i][2] = 0;
-
-            tb.reset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f0, dos);
-            tb.addFieldEndOffset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f1, dos);
-            tb.addFieldEndOffset();
-
-            appender.reset(frame, true);
-            appender.append(tb.getFieldEndOffsets(), tb.getByteArray(), 0, tb.getSize());
-
-            tuple.reset(accessor, 0);
-
-            ArrayTupleReference t = new ArrayTupleReference();
-            t.reset(tb.getFieldEndOffsets(), tb.getByteArray());
-
-            try {
-                lsmTreeAccessor.insert(t);
-            } catch (TreeIndexException e) {
-                System.out.println("test03:" + e);
-                e.printStackTrace();
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-
-        // scan
-        ITreeIndexCursor scanCursor = new LSMTreeRangeSearchCursor();
-        RangePredicate nullPred = new RangePredicate(true, null, null, true, true, null, null);
-        lsmTreeAccessor.search(scanCursor, nullPred);
-
-        try {
-            int scanTupleIndex = 0;
-            int arrayIndex = 0;
-            Object o = null;
-            while (scanCursor.hasNext()) {
-                scanCursor.next();
-                ITupleReference frameTuple = scanCursor.getTuple();
-                int numPrintFields = Math.min(frameTuple.getFieldCount(), recDescSers.length);
-
-                for (int i = 0; i < numPrintFields; i++) {
-                    ByteArrayInputStream inStream = new ByteArrayInputStream(frameTuple.getFieldData(i),
-                            frameTuple.getFieldStart(i), frameTuple.getFieldLength(i));
-                    DataInput dataIn = new DataInputStream(inStream);
-                    o = recDescSers[i].deserialize(dataIn);
-                }
-                while (resultArray[arrayIndex][2] != 0) {
-                    arrayIndex++;
-                }
-                if (Integer.parseInt(o.toString()) != resultArray[arrayIndex][1]) {
-                    fail("Input value and Output value doesn't match on the " + scanTupleIndex + " tuple\n");
-                }
-
-                scanTupleIndex++;
-                arrayIndex++;
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        } finally {
-            scanCursor.close();
-        }
-
-        lsmtree.close();
-        bufferCache.closeFile(fileId);
-        memBufferCache.close();
-    }
-
-    // TEST DELETION and PageAllocationException
-    // create a fix-length lsm tree. First, do 811 deletions,
-    // the page will be run out on the 810th deletions, if there is any
-    // exception returns, the test case fails.
-    @Test
-    public void Test4() throws Exception {
-        // in disk
-        TestStorageManagerComponentHolder.init(PAGE_SIZE, NUM_PAGES, MAX_OPEN_FILES);
-        IBufferCache bufferCache = TestStorageManagerComponentHolder.getBufferCache(ctx);
-        IFileMapProvider fmp = TestStorageManagerComponentHolder.getFileMapProvider(ctx);
-        FileReference file = new FileReference(new File(fileName));
-        bufferCache.createFile(file);
-        int fileId = fmp.lookupFileId(file);
-        bufferCache.openFile(fileId);
-
-        // in memory
-        InMemoryBufferCacheFactory InMemBufferCacheFactory = new InMemoryBufferCacheFactory(PAGE_SIZE, NUM_PAGES);
-        IBufferCache memBufferCache = InMemBufferCacheFactory.createInMemoryBufferCache();
-
-        // declare fields
-        int fieldCount = 2;
-        ITypeTraits[] typeTraits = new ITypeTraits[fieldCount];
-        typeTraits[0] = IntegerPointable.TYPE_TRAITS;
-        typeTraits[1] = IntegerPointable.TYPE_TRAITS;
-
-        // declare keys
-        int keyFieldCount = 1;
-        IBinaryComparator[] cmps = new IBinaryComparator[keyFieldCount];
-        cmps[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY).createBinaryComparator();
-
-        MultiComparator cmp = new MultiComparator(cmps);
-
-        LSMTypeAwareTupleWriterFactory insertTupleWriterFactory = new LSMTypeAwareTupleWriterFactory(typeTraits, false);
-        LSMTypeAwareTupleWriterFactory deleteTupleWriterFactory = new LSMTypeAwareTupleWriterFactory(typeTraits, true);
-
-        ITreeIndexFrameFactory insertLeafFrameFactory = new BTreeNSMLeafFrameFactory(insertTupleWriterFactory);
-        ITreeIndexFrameFactory deleteLeafFrameFactory = new BTreeNSMLeafFrameFactory(deleteTupleWriterFactory);
-        ITreeIndexFrameFactory interiorFrameFactory = new BTreeNSMInteriorFrameFactory(insertTupleWriterFactory);
-        ITreeIndexMetaDataFrameFactory metaFrameFactory = new LIFOMetaDataFrameFactory();
-
-        IFreePageManager memFreePageManager = new InMemoryFreePageManager(100, metaFrameFactory);
-
-        FreePageManagerFactory freePageManagerFactory = new FreePageManagerFactory(bufferCache, metaFrameFactory);
-        BTreeFactory bTreeFactory = new BTreeFactory(bufferCache, freePageManagerFactory, cmp, fieldCount,
-                interiorFrameFactory, insertLeafFrameFactory);
-
-        // For the Flush Mechanism
-        LSMTree lsmtree = new LSMTree(memBufferCache, bufferCache, fieldCount, cmp, memFreePageManager,
-                interiorFrameFactory, insertLeafFrameFactory, deleteLeafFrameFactory, bTreeFactory,
-                (IFileMapManager) fmp);
-
-        lsmtree.create(fileId);
-        lsmtree.open(fileId);
-
-        ByteBuffer frame = ctx.allocateFrame();
-        FrameTupleAppender appender = new FrameTupleAppender(ctx.getFrameSize());
-
-        ArrayTupleBuilder tb = new ArrayTupleBuilder(fieldCount);
-        DataOutput dos = tb.getDataOutput();
-
-        ISerializerDeserializer[] recDescSers = { IntegerSerializerDeserializer.INSTANCE,
-                IntegerSerializerDeserializer.INSTANCE };
-        RecordDescriptor recDesc = new RecordDescriptor(recDescSers);
-
-        IFrameTupleAccessor accessor = new FrameTupleAccessor(ctx.getFrameSize(), recDesc);
-        accessor.reset(frame);
-
-        FrameTupleReference tuple = new FrameTupleReference();
-
-        int resultSize = 811;
-        int[][] resultArray = new int[resultSize][2];
-
-        for (int i = 0; i < resultSize; i++) {
-            resultArray[i][0] = i;
-            resultArray[i][1] = i + 1;
-        }
-
-        // delete
-        ITreeIndexAccessor lsmTreeAccessor = lsmtree.createAccessor();
-        for (int i = 0; i < resultSize; i++) {
-
-            int f0 = resultArray[i][0];
-            int f1 = resultArray[i][1];
-
-            tb.reset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f0, dos);
-            tb.addFieldEndOffset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f1, dos);
-            tb.addFieldEndOffset();
-
-            appender.reset(frame, true);
-            appender.append(tb.getFieldEndOffsets(), tb.getByteArray(), 0, tb.getSize());
-
-            tuple.reset(accessor, 0);
-
-            ArrayTupleReference t = new ArrayTupleReference();
-            t.reset(tb.getFieldEndOffsets(), tb.getByteArray());
-
-            try {
-                lsmTreeAccessor.delete(t);
-            } catch (TreeIndexException e) {
-                System.out.println("test04:" + e);
-                e.printStackTrace();
-                fail("test04: Catch TreeIndexException" + e);
-            } catch (Exception e) {
-                e.printStackTrace();
-                fail("test04: Catch Other Exceptions" + e);
-            }
-        }
-    }
-
-    // DELETE -> DELETE
-    // create a fix-length lsm tree. First, do 100 deletions,
-    // and then do 50 deletions which has the same 50 keys which are part of the
-    // first deletions.
-    @Test
-    public void Test5() throws Exception {
-        // in disk
-        TestStorageManagerComponentHolder.init(PAGE_SIZE, NUM_PAGES, MAX_OPEN_FILES);
-        IBufferCache bufferCache = TestStorageManagerComponentHolder.getBufferCache(ctx);
-        IFileMapProvider fmp = TestStorageManagerComponentHolder.getFileMapProvider(ctx);
-        FileReference file = new FileReference(new File(fileName));
-        bufferCache.createFile(file);
-        int fileId = fmp.lookupFileId(file);
-        bufferCache.openFile(fileId);
-
-        // in memory
-        InMemoryBufferCacheFactory InMemBufferCacheFactory = new InMemoryBufferCacheFactory(PAGE_SIZE, NUM_PAGES);
-        IBufferCache memBufferCache = InMemBufferCacheFactory.createInMemoryBufferCache();
-
-        // declare fields
-        int fieldCount = 2;
-        ITypeTraits[] typeTraits = new ITypeTraits[fieldCount];
-        typeTraits[0] = IntegerPointable.TYPE_TRAITS;
-        typeTraits[1] = IntegerPointable.TYPE_TRAITS;
-
-        // declare keys
-        int keyFieldCount = 1;
-        IBinaryComparator[] cmps = new IBinaryComparator[keyFieldCount];
-        cmps[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY).createBinaryComparator();
-
-        MultiComparator cmp = new MultiComparator(cmps);
-
-        LSMTypeAwareTupleWriterFactory insertTupleWriterFactory = new LSMTypeAwareTupleWriterFactory(typeTraits, false);
-        LSMTypeAwareTupleWriterFactory deleteTupleWriterFactory = new LSMTypeAwareTupleWriterFactory(typeTraits, true);
-
-        ITreeIndexFrameFactory insertLeafFrameFactory = new BTreeNSMLeafFrameFactory(insertTupleWriterFactory);
-        ITreeIndexFrameFactory deleteLeafFrameFactory = new BTreeNSMLeafFrameFactory(deleteTupleWriterFactory);
-        ITreeIndexFrameFactory interiorFrameFactory = new BTreeNSMInteriorFrameFactory(insertTupleWriterFactory);
-        ITreeIndexMetaDataFrameFactory metaFrameFactory = new LIFOMetaDataFrameFactory();
-
-        IFreePageManager memFreePageManager = new InMemoryFreePageManager(100, metaFrameFactory);
-
-        FreePageManagerFactory freePageManagerFactory = new FreePageManagerFactory(bufferCache, metaFrameFactory);
-        BTreeFactory bTreeFactory = new BTreeFactory(bufferCache, freePageManagerFactory, cmp, fieldCount,
-                interiorFrameFactory, insertLeafFrameFactory);
-
-        LSMTree lsmtree = new LSMTree(memBufferCache, bufferCache, fieldCount, cmp, memFreePageManager,
-                interiorFrameFactory, insertLeafFrameFactory, deleteLeafFrameFactory, bTreeFactory,
-                (IFileMapManager) fmp);
-
-        lsmtree.create(fileId);
-        lsmtree.open(fileId);
-
-        ByteBuffer frame = ctx.allocateFrame();
-        FrameTupleAppender appender = new FrameTupleAppender(ctx.getFrameSize());
-
-        ArrayTupleBuilder tb = new ArrayTupleBuilder(fieldCount);
-        DataOutput dos = tb.getDataOutput();
-
-        ISerializerDeserializer[] recDescSers = { IntegerSerializerDeserializer.INSTANCE,
-                IntegerSerializerDeserializer.INSTANCE };
-        RecordDescriptor recDesc = new RecordDescriptor(recDescSers);
-
-        IFrameTupleAccessor accessor = new FrameTupleAccessor(ctx.getFrameSize(), recDesc);
-        accessor.reset(frame);
-
-        FrameTupleReference tuple = new FrameTupleReference();
-
-        int resultSize = 100;
-        int insertStartPosition = 50;
-        int[][] resultArray = new int[resultSize][3];
-
-        for (int i = 0; i < resultSize; i++) {
-            resultArray[i][0] = i;
-            resultArray[i][1] = i + 1;
-            resultArray[i][2] = 1;
-        }
-
-        // First deletion part
-        ITreeIndexAccessor lsmTreeAccessor = lsmtree.createAccessor();
-        for (int i = 0; i < resultSize; i++) {
-
-            int f0 = resultArray[i][0];
-            int f1 = resultArray[i][1];
-
-            tb.reset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f0, dos);
-            tb.addFieldEndOffset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f1, dos);
-            tb.addFieldEndOffset();
-
-            appender.reset(frame, true);
-            appender.append(tb.getFieldEndOffsets(), tb.getByteArray(), 0, tb.getSize());
-
-            tuple.reset(accessor, 0);
-
-            ArrayTupleReference t = new ArrayTupleReference();
-            t.reset(tb.getFieldEndOffsets(), tb.getByteArray());
-
-            try {
-                lsmTreeAccessor.delete(t);
-            } catch (TreeIndexException e) {
-                System.out.println("test05:" + e);
-                e.printStackTrace();
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-
-        // Second delete part
-        for (int i = insertStartPosition; i < resultSize; i++) {
-
-            int f0 = resultArray[i][0];
-            int f1 = ++resultArray[i][1];
-            resultArray[i][2] = 1;
-
-            tb.reset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f0, dos);
-            tb.addFieldEndOffset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f1, dos);
-            tb.addFieldEndOffset();
-
-            appender.reset(frame, true);
-            appender.append(tb.getFieldEndOffsets(), tb.getByteArray(), 0, tb.getSize());
-
-            tuple.reset(accessor, 0);
-
-            ArrayTupleReference t = new ArrayTupleReference();
-            t.reset(tb.getFieldEndOffsets(), tb.getByteArray());
-
-            try {
-                lsmTreeAccessor.insert(t);
-            } catch (TreeIndexException e) {
-                System.out.println("test05:" + e);
-                e.printStackTrace();
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-
-        // scan
-        ITreeIndexCursor scanCursor = new LSMTreeRangeSearchCursor();
-        RangePredicate nullPred = new RangePredicate(true, null, null, true, true, null, null);
-        lsmTreeAccessor.search(scanCursor, nullPred);
-
-        try {
-            int scanTupleIndex = 0;
-            int arrayIndex = 0;
-            Object o = null;
-            while (scanCursor.hasNext()) {
-                scanCursor.next();
-                ITupleReference frameTuple = scanCursor.getTuple();
-                int numPrintFields = Math.min(frameTuple.getFieldCount(), recDescSers.length);
-
-                for (int i = 0; i < numPrintFields; i++) {
-                    ByteArrayInputStream inStream = new ByteArrayInputStream(frameTuple.getFieldData(i),
-                            frameTuple.getFieldStart(i), frameTuple.getFieldLength(i));
-                    DataInput dataIn = new DataInputStream(inStream);
-                    o = recDescSers[i].deserialize(dataIn);
-
-                }
-                while (resultArray[arrayIndex][2] != 0) {
-                    arrayIndex++;
-                }
-                if (Integer.parseInt(o.toString()) != resultArray[arrayIndex][1]) {
-                    fail("Input value and Output value doesn't match on the " + scanTupleIndex + " tuple\n");
-                }
-
-                scanTupleIndex++;
-                arrayIndex++;
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        } finally {
-            scanCursor.close();
-        }
-
-        lsmtree.close();
-        bufferCache.closeFile(fileId);
-        memBufferCache.close();
-    }
-
-    // INSERT -> DELETE -> INSERT
-    // create a fix-length lsm tree. Do the insertion, deletion and insertion.
-    // the final result will be
-    // | 0~9 | 10~19 | 20~39 | 40~59 | 60~79 | 80~99 |
-    // | f1=10 | f1=9 | f1=8 | f1=7 | f1=6 | f1=5 |
-    // | Insert| Insert| Delete| Delete| Insert| Insert|
-    @Test
-    public void Test6() throws Exception {
-
-        // in disk
-        TestStorageManagerComponentHolder.init(PAGE_SIZE, NUM_PAGES, MAX_OPEN_FILES);
-        IBufferCache bufferCache = TestStorageManagerComponentHolder.getBufferCache(ctx);
-        IFileMapProvider fmp = TestStorageManagerComponentHolder.getFileMapProvider(ctx);
-        FileReference file = new FileReference(new File(fileName));
-        bufferCache.createFile(file);
-        int fileId = fmp.lookupFileId(file);
-        bufferCache.openFile(fileId);
-
-        // in mem
-        InMemoryBufferCacheFactory InMemBufferCacheFactory = new InMemoryBufferCacheFactory(PAGE_SIZE, NUM_PAGES);
-        IBufferCache memBufferCache = InMemBufferCacheFactory.createInMemoryBufferCache();
-
-        // declare fields
-        int fieldCount = 2;
-        ITypeTraits[] typeTraits = new ITypeTraits[fieldCount];
-        typeTraits[0] = IntegerPointable.TYPE_TRAITS;
-        typeTraits[1] = IntegerPointable.TYPE_TRAITS;
-
-        // declare keys
-        int keyFieldCount = 1;
-        IBinaryComparator[] cmps = new IBinaryComparator[keyFieldCount];
-        cmps[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY).createBinaryComparator();
-
-        MultiComparator cmp = new MultiComparator(cmps);
-
-        LSMTypeAwareTupleWriterFactory insertTupleWriterFactory = new LSMTypeAwareTupleWriterFactory(typeTraits, false);
-        LSMTypeAwareTupleWriterFactory deleteTupleWriterFactory = new LSMTypeAwareTupleWriterFactory(typeTraits, true);
-
-        ITreeIndexFrameFactory insertLeafFrameFactory = new BTreeNSMLeafFrameFactory(insertTupleWriterFactory);
-        ITreeIndexFrameFactory deleteLeafFrameFactory = new BTreeNSMLeafFrameFactory(deleteTupleWriterFactory);
-        ITreeIndexFrameFactory interiorFrameFactory = new BTreeNSMInteriorFrameFactory(insertTupleWriterFactory);
-        ITreeIndexMetaDataFrameFactory metaFrameFactory = new LIFOMetaDataFrameFactory();
-
-        IFreePageManager memFreePageManager = new InMemoryFreePageManager(100, metaFrameFactory);
-
-        FreePageManagerFactory freePageManagerFactory = new FreePageManagerFactory(bufferCache, metaFrameFactory);
-        BTreeFactory bTreeFactory = new BTreeFactory(bufferCache, freePageManagerFactory, cmp, fieldCount,
-                interiorFrameFactory, insertLeafFrameFactory);
-
-        LSMTree lsmtree = new LSMTree(memBufferCache, bufferCache, fieldCount, cmp, memFreePageManager,
-                interiorFrameFactory, insertLeafFrameFactory, deleteLeafFrameFactory, bTreeFactory,
-                (IFileMapManager) fmp);
-
-        lsmtree.create(fileId);
-        lsmtree.open(fileId);
-
-        ByteBuffer frame = ctx.allocateFrame();
-        FrameTupleAppender appender = new FrameTupleAppender(ctx.getFrameSize());
-
-        ArrayTupleBuilder tb = new ArrayTupleBuilder(fieldCount);
-        DataOutput dos = tb.getDataOutput();
-
-        ISerializerDeserializer[] recDescSers = { IntegerSerializerDeserializer.INSTANCE,
-                IntegerSerializerDeserializer.INSTANCE };
-        RecordDescriptor recDesc = new RecordDescriptor(recDescSers);
-
-        IFrameTupleAccessor accessor = new FrameTupleAccessor(ctx.getFrameSize(), recDesc);
-        accessor.reset(frame);
-
-        FrameTupleReference tuple = new FrameTupleReference();
-
-        ITreeIndexAccessor lsmTreeAccessor = lsmtree.createAccessor();
-
-        int resultSize = 180;
-        int[][] resultArray = new int[resultSize][3];
-
-        // insert
-        for (int i = 0; i < 180; i++) {
-            int f0 = i % 100;
-            int f1;
-            if (i >= 100) {
-                f1 = 6;
-            } else {
-                f1 = 5;
-            }
-
-            resultArray[f0][0] = f0;
-            resultArray[f0][1] = f1;
-            resultArray[f0][2] = 0;
-
-            tb.reset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f0, dos);
-            tb.addFieldEndOffset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f1, dos);
-            tb.addFieldEndOffset();
-
-            appender.reset(frame, true);
-            appender.append(tb.getFieldEndOffsets(), tb.getByteArray(), 0, tb.getSize());
-
-            tuple.reset(accessor, 0);
-
-            ArrayTupleReference t = new ArrayTupleReference();
-            t.reset(tb.getFieldEndOffsets(), tb.getByteArray());
-
-            try {
-                lsmTreeAccessor.insert(t);
-            } catch (TreeIndexException e) {
-                System.out.println("test06:" + e);
-                e.printStackTrace();
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-
-        // delete
-        for (int i = 0; i < 100; i++) {
-            int f0 = i % 60;
-            int f1;
-            if (i >= 60) {
-                f1 = 8;
-            } else {
-                f1 = 7;
-            }
-
-            resultArray[f0][0] = f0;
-            resultArray[f0][1] = f1;
-            resultArray[f0][2] = 1;
-
-            tb.reset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f0, dos);
-            tb.addFieldEndOffset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f1, dos);
-            tb.addFieldEndOffset();
-
-            appender.reset(frame, true);
-            appender.append(tb.getFieldEndOffsets(), tb.getByteArray(), 0, tb.getSize());
-
-            tuple.reset(accessor, 0);
-
-            ArrayTupleReference t = new ArrayTupleReference();
-            t.reset(tb.getFieldEndOffsets(), tb.getByteArray());
-
-            try {
-                lsmTreeAccessor.delete(t);
-            } catch (TreeIndexException e) {
-                System.out.println("test06:" + e);
-                e.printStackTrace();
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-
-        }
-
-        // reinsert
-        for (int i = 0; i < 30; i++) {
-            int f0 = i % 20;
-            int f1;
-            if (i >= 20) {
-                f1 = 10;
-            } else {
-                f1 = 9;
-            }
-
-            resultArray[f0][0] = f0;
-            resultArray[f0][1] = f1;
-            resultArray[f0][2] = 0;
-
-            tb.reset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f0, dos);
-            tb.addFieldEndOffset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f1, dos);
-            tb.addFieldEndOffset();
-
-            appender.reset(frame, true);
-            appender.append(tb.getFieldEndOffsets(), tb.getByteArray(), 0, tb.getSize());
-
-            tuple.reset(accessor, 0);
-
-            ArrayTupleReference t = new ArrayTupleReference();
-            t.reset(tb.getFieldEndOffsets(), tb.getByteArray());
-
-            try {
-                lsmTreeAccessor.insert(t);
-            } catch (TreeIndexException e) {
-                System.out.println("test06:" + e);
-                e.printStackTrace();
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-
-        // scan
-        ITreeIndexCursor scanCursor = new LSMTreeRangeSearchCursor();
-        RangePredicate nullPred = new RangePredicate(true, null, null, true, true, null, null);
-        lsmTreeAccessor.search(scanCursor, nullPred);
-
-        try {
-            int scanTupleIndex = 0;
-            int arrayIndex = 0;
-            Object o = null;
-            while (scanCursor.hasNext()) {
-                scanCursor.next();
-                ITupleReference frameTuple = scanCursor.getTuple();
-                int numPrintFields = Math.min(frameTuple.getFieldCount(), recDescSers.length);
-
-                for (int i = 0; i < numPrintFields; i++) {
-                    ByteArrayInputStream inStream = new ByteArrayInputStream(frameTuple.getFieldData(i),
-                            frameTuple.getFieldStart(i), frameTuple.getFieldLength(i));
-                    DataInput dataIn = new DataInputStream(inStream);
-                    o = recDescSers[i].deserialize(dataIn);
-                }
-                while (resultArray[arrayIndex][2] != 0) {
-                    arrayIndex++;
-                }
-                if (Integer.parseInt(o.toString()) != resultArray[arrayIndex][1]) {
-                    fail("Input value and Output value doesn't match on the " + scanTupleIndex + " tuple\n");
-                }
-
-                scanTupleIndex++;
-                arrayIndex++;
-            }
-
-        } catch (Exception e) {
-            e.printStackTrace();
-        } finally {
-            scanCursor.close();
-        }
-
-        lsmtree.close();
-        bufferCache.closeFile(fileId);
-        memBufferCache.close();
-    }
-}
diff --git a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMTreeFlushTest.java b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMTreeFlushTest.java
deleted file mode 100644
index c0f67b1..0000000
--- a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMTreeFlushTest.java
+++ /dev/null
@@ -1,748 +0,0 @@
-package edu.uci.ics.hyracks.storage.am.lsmtree.impls;
-
-import java.io.DataOutput;
-import java.io.File;
-import java.nio.ByteBuffer;
-
-import org.junit.Test;
-
-import edu.uci.ics.hyracks.api.comm.IFrameTupleAccessor;
-import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
-import edu.uci.ics.hyracks.api.dataflow.value.IBinaryComparator;
-import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
-import edu.uci.ics.hyracks.api.dataflow.value.ITypeTraits;
-import edu.uci.ics.hyracks.api.dataflow.value.RecordDescriptor;
-import edu.uci.ics.hyracks.api.io.FileReference;
-import edu.uci.ics.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
-import edu.uci.ics.hyracks.data.std.primitive.IntegerPointable;
-import edu.uci.ics.hyracks.dataflow.common.comm.io.ArrayTupleBuilder;
-import edu.uci.ics.hyracks.dataflow.common.comm.io.ArrayTupleReference;
-import edu.uci.ics.hyracks.dataflow.common.comm.io.FrameTupleAccessor;
-import edu.uci.ics.hyracks.dataflow.common.comm.io.FrameTupleAppender;
-import edu.uci.ics.hyracks.dataflow.common.data.accessors.FrameTupleReference;
-import edu.uci.ics.hyracks.dataflow.common.data.marshalling.IntegerSerializerDeserializer;
-import edu.uci.ics.hyracks.storage.am.btree.api.IBTreeLeafFrame;
-import edu.uci.ics.hyracks.storage.am.btree.frames.BTreeNSMInteriorFrameFactory;
-import edu.uci.ics.hyracks.storage.am.btree.frames.BTreeNSMLeafFrameFactory;
-import edu.uci.ics.hyracks.storage.am.common.api.IFreePageManager;
-import edu.uci.ics.hyracks.storage.am.common.api.ITreeIndexAccessor;
-import edu.uci.ics.hyracks.storage.am.common.api.ITreeIndexFrameFactory;
-import edu.uci.ics.hyracks.storage.am.common.api.ITreeIndexMetaDataFrameFactory;
-import edu.uci.ics.hyracks.storage.am.common.api.TreeIndexException;
-import edu.uci.ics.hyracks.storage.am.common.frames.LIFOMetaDataFrameFactory;
-import edu.uci.ics.hyracks.storage.am.common.freepage.LinkedListFreePageManager;
-import edu.uci.ics.hyracks.storage.am.common.ophelpers.MultiComparator;
-import edu.uci.ics.hyracks.storage.common.buffercache.IBufferCache;
-import edu.uci.ics.hyracks.storage.common.file.IFileMapManager;
-import edu.uci.ics.hyracks.storage.common.file.IFileMapProvider;
-import edu.uci.ics.hyracks.test.support.TestStorageManagerComponentHolder;
-import edu.uci.ics.hyracks.test.support.TestUtils;
-
-public class LSMTreeFlushTest extends AbstractLSMTreeTest {
-    private static final int PAGE_SIZE = 256;
-    private static final int NUM_PAGES = 100;
-    private static final int MAX_OPEN_FILES = 10000;
-    private static final int HYRACKS_FRAME_SIZE = 128;
-    private IHyracksTaskContext ctx = TestUtils.create(HYRACKS_FRAME_SIZE);
-
-    // BASIC TEST
-    // @Test
-    // public void Test1() throws Exception {
-    // System.out.printf("TEST1 START\n");
-    // //in disk
-    // TestStorageManagerComponentHolder.init(PAGE_SIZE, NUM_PAGES,
-    // MAX_OPEN_FILES);
-    // IBufferCache bufferCache =
-    // TestStorageManagerComponentHolder.getBufferCache(ctx);
-    // IFileMapProvider fmp =
-    // TestStorageManagerComponentHolder.getFileMapProvider(ctx);
-    // FileReference file = new FileReference(new File(fileName));
-    // bufferCache.createFile(file);
-    // int fileId = fmp.lookupFileId(file);
-    // bufferCache.openFile(fileId);
-    //
-    // //in memory
-    // InMemoryBufferCacheFactory InMemBufferCacheFactory = new
-    // InMemoryBufferCacheFactory(PAGE_SIZE, NUM_PAGES);
-    // IBufferCache memBufferCache =
-    // InMemBufferCacheFactory.createInMemoryBufferCache();
-    //
-    // // declare fields
-    // int fieldCount = 2;
-    // ITypeTrait[] typeTraits = new ITypeTrait[fieldCount];
-    // typeTraits[0] = new TypeTrait(4);
-    // typeTraits[1] = new TypeTrait(4);
-    //
-    // // declare keys
-    // int keyFieldCount = 1;
-    // IBinaryComparatorFactory[] cmpFactories = new
-    // IBinaryComparatorFactory[keyFieldCount];
-    // cmpFactories[0] = IntegerBinaryComparatorFactory.INSTANCE;
-    //
-    // MultiComparator cmp = BTreeUtils.createMultiComparator(cmpFactories);
-    //
-    // LSMTypeAwareTupleWriterFactory insertTupleWriterFactory = new
-    // LSMTypeAwareTupleWriterFactory(typeTraits, false);
-    // LSMTypeAwareTupleWriterFactory deleteTupleWriterFactory = new
-    // LSMTypeAwareTupleWriterFactory(typeTraits, true);
-    //
-    // ITreeIndexFrameFactory insertLeafFrameFactory = new
-    // BTreeNSMLeafFrameFactory(insertTupleWriterFactory);
-    // ITreeIndexFrameFactory deleteLeafFrameFactory = new
-    // BTreeNSMLeafFrameFactory(deleteTupleWriterFactory);
-    // ITreeIndexFrameFactory interiorFrameFactory = new
-    // BTreeNSMInteriorFrameFactory(insertTupleWriterFactory);
-    // ITreeIndexMetaDataFrameFactory metaFrameFactory = new
-    // LIFOMetaDataFrameFactory();
-    //
-    // IBTreeLeafFrame insertLeafFrame = (IBTreeLeafFrame)
-    // insertLeafFrameFactory.createFrame();
-    //
-    // IFreePageManager freePageManager = new
-    // LinkedListFreePageManager(bufferCache, fileId, 0, metaFrameFactory);
-    // IFreePageManager memFreePageManager = new InMemoryFreePageManager(100,
-    // metaFrameFactory);
-    //
-    // // For the Flush Mechanism
-    // LSMEntireTupleWriterFactory flushTupleWriterFactory = new
-    // LSMEntireTupleWriterFactory(typeTraits);
-    // ITreeIndexFrameFactory flushLeafFrameFactory = new
-    // BTreeNSMLeafFrameFactory(flushTupleWriterFactory);
-    // FreePageManagerFactory freePageManagerFactory = new
-    // FreePageManagerFactory(bufferCache, metaFrameFactory);
-    // BTreeFactory bTreeFactory = new BTreeFactory(bufferCache,
-    // freePageManagerFactory, cmp, fieldCount, interiorFrameFactory,
-    // flushLeafFrameFactory);
-    //
-    //
-    //
-    // // LSMTree lsmtree = new LSMTree(3, 100, 2, memBufferCache, bufferCache,
-    // fieldCount, cmp, memFreePageManager,
-    // // freePageManager, interiorFrameFactory, insertLeafFrameFactory,
-    // deleteLeafFrameFactory, bTreeFactory, flushLeafFrameFactory,
-    // (IFileMapManager)fmp);
-    // //
-    // LSMTree lsmtree = LSMTreeUtils.createLSMTree(memBufferCache, bufferCache,
-    // fileId, typeTraits, cmp.getComparators(), BTreeLeafFrameType.REGULAR_NSM,
-    // (IFileMapManager)fmp);
-    // lsmtree.create(fileId);
-    // lsmtree.open(fileId);
-    //
-    // ByteBuffer frame = ctx.allocateFrame();
-    // FrameTupleAppender appender = new FrameTupleAppender(ctx.getFrameSize());
-    //
-    // ArrayTupleBuilder tb = new ArrayTupleBuilder(fieldCount);
-    // DataOutput dos = tb.getDataOutput();
-    //
-    // ISerializerDeserializer[] recDescSers = {
-    // IntegerSerializerDeserializer.INSTANCE,
-    // IntegerSerializerDeserializer.INSTANCE };
-    // RecordDescriptor recDesc = new RecordDescriptor(recDescSers);
-    //
-    // IFrameTupleAccessor accessor = new FrameTupleAccessor(ctx.getFrameSize(),
-    // recDesc);
-    // accessor.reset(frame);
-    //
-    // FrameTupleReference tuple = new FrameTupleReference();
-    //
-    // int resultSize = 100;
-    // int[][] resultArray = new int[resultSize][2];
-    //
-    //
-    // //insert 100 tuples
-    // for (int i = 0; i < resultSize; i++){
-    // resultArray[i][0] = i;
-    // resultArray[i][1] = 1;
-    // }
-    //
-    //
-    // LSMTreeOpContext insertOpCtx = lsmtree.createOpContext(IndexOp.INSERT);
-    // for (int i = 0; i < resultSize; i++) {
-    //
-    // int f0 = resultArray[i][0];
-    // int f1 = resultArray[i][1];
-    //
-    // tb.reset();
-    // IntegerSerializerDeserializer.INSTANCE.serialize(f0, dos);
-    // tb.addFieldEndOffset();
-    // IntegerSerializerDeserializer.INSTANCE.serialize(f1, dos);
-    // tb.addFieldEndOffset();
-    //
-    // appender.reset(frame, true);
-    // appender.append(tb.getFieldEndOffsets(), tb.getByteArray(), 0,
-    // tb.getSize());
-    //
-    // tuple.reset(accessor, 0);
-    //
-    // ArrayTupleReference t = new ArrayTupleReference();
-    // t.reset(tb.getFieldEndOffsets(), tb.getByteArray());
-    //
-    // try {
-    // lsmtree.insert(t, insertOpCtx);
-    // } catch (TreeIndexException e) {
-    // System.out.println("test01:" + e);
-    // e.printStackTrace();
-    // } catch (Exception e) {
-    // e.printStackTrace();
-    // }
-    // }
-    // // Delete the first 50 keys in the in-memory tree
-    // insertOpCtx = lsmtree.createOpContext(IndexOp.DELETE);
-    // for (int i = 0; i < 50; i++){
-    // resultArray[i][0] = i;
-    // resultArray[i][1] = 1;
-    // }
-    //
-    // for (int i = 0; i < 50; i++) {
-    //
-    // int f0 = resultArray[i][0];
-    // int f1 = resultArray[i][1];
-    //
-    // tb.reset();
-    // IntegerSerializerDeserializer.INSTANCE.serialize(f0, dos);
-    // tb.addFieldEndOffset();
-    // IntegerSerializerDeserializer.INSTANCE.serialize(f1, dos);
-    // tb.addFieldEndOffset();
-    //
-    // appender.reset(frame, true);
-    // appender.append(tb.getFieldEndOffsets(), tb.getByteArray(), 0,
-    // tb.getSize());
-    //
-    // tuple.reset(accessor, 0);
-    //
-    // ArrayTupleReference t = new ArrayTupleReference();
-    // t.reset(tb.getFieldEndOffsets(), tb.getByteArray());
-    //
-    // try {
-    // lsmtree.delete(t, insertOpCtx);
-    // } catch (TreeIndexException e) {
-    // System.out.println("test01:" + e);
-    // e.printStackTrace();
-    // } catch (Exception e) {
-    // e.printStackTrace();
-    // }
-    // }
-    //
-    //
-    // //Flush the tree into the first in Disk tree
-    // lsmtree.flushInMemoryBtree();
-    //
-    // //insert 50 delete nodes
-    // insertOpCtx = lsmtree.createOpContext(IndexOp.DELETE);
-    // for (int i = 0; i < 50; i++){
-    // resultArray[i][0] = i;
-    // resultArray[i][1] = 2;
-    // }
-    //
-    // for (int i = 0; i < 50; i++) {
-    //
-    // int f0 = resultArray[i][0];
-    // int f1 = resultArray[i][1];
-    //
-    // tb.reset();
-    // IntegerSerializerDeserializer.INSTANCE.serialize(f0, dos);
-    // tb.addFieldEndOffset();
-    // IntegerSerializerDeserializer.INSTANCE.serialize(f1, dos);
-    // tb.addFieldEndOffset();
-    //
-    // appender.reset(frame, true);
-    // appender.append(tb.getFieldEndOffsets(), tb.getByteArray(), 0,
-    // tb.getSize());
-    //
-    // tuple.reset(accessor, 0);
-    //
-    // ArrayTupleReference t = new ArrayTupleReference();
-    // t.reset(tb.getFieldEndOffsets(), tb.getByteArray());
-    //
-    // try {
-    // lsmtree.delete(t, insertOpCtx);
-    // } catch (TreeIndexException e) {
-    // System.out.println("test01:" + e);
-    // e.printStackTrace();
-    // } catch (Exception e) {
-    // e.printStackTrace();
-    // }
-    // }
-    //
-    // // insert 25 nodes
-    // insertOpCtx = lsmtree.createOpContext(IndexOp.INSERT);
-    // for (int i = 0; i < resultSize; i++){
-    // resultArray[i][0] = i;
-    // resultArray[i][1] = 2;
-    // }
-    // for (int i = 0; i < 25; i++) {
-    //
-    // int f0 = resultArray[i][0];
-    // int f1 = resultArray[i][1];
-    //
-    // tb.reset();
-    // IntegerSerializerDeserializer.INSTANCE.serialize(f0, dos);
-    // tb.addFieldEndOffset();
-    // IntegerSerializerDeserializer.INSTANCE.serialize(f1, dos);
-    // tb.addFieldEndOffset();
-    //
-    // appender.reset(frame, true);
-    // appender.append(tb.getFieldEndOffsets(), tb.getByteArray(), 0,
-    // tb.getSize());
-    //
-    // tuple.reset(accessor, 0);
-    //
-    // ArrayTupleReference t = new ArrayTupleReference();
-    // t.reset(tb.getFieldEndOffsets(), tb.getByteArray());
-    //
-    // try {
-    // lsmtree.insert(t, insertOpCtx);
-    // } catch (TreeIndexException e) {
-    // System.out.println("test01:" + e);
-    // e.printStackTrace();
-    // } catch (Exception e) {
-    // e.printStackTrace();
-    // }
-    // }
-    //
-    // //Flush the tree into the fist in Disk tree, which have fieldId as "1"
-    // lsmtree.flushInMemoryBtree();
-    //
-    // //Print out the first in Disk Btree
-    // System.out.println("LSMTreeFlushTest: start print the first tree");
-    // lsmtree.scanDiskTree(0);
-    // //Print out the second in Disk Btree
-    // System.out.println("LSMTreeFlushTest: start print the second tree");
-    // lsmtree.scanDiskTree(1);
-    //
-    //
-    // lsmtree.close();
-    // bufferCache.closeFile(fileId);
-    // memBufferCache.close();
-    //
-    // System.out.printf("End of TEST1()\n");
-    //
-    // }
-    // TEST auto Flush
-    @Test
-    public void Test2() throws Exception {
-        System.out.printf("TEST2 START\n");
-        // in disk
-        TestStorageManagerComponentHolder.init(PAGE_SIZE, NUM_PAGES, MAX_OPEN_FILES);
-        IBufferCache bufferCache = TestStorageManagerComponentHolder.getBufferCache(ctx);
-        IFileMapProvider fmp = TestStorageManagerComponentHolder.getFileMapProvider(ctx);
-        FileReference file = new FileReference(new File(fileName));
-        bufferCache.createFile(file);
-        int fileId = fmp.lookupFileId(file);
-        bufferCache.openFile(fileId);
-
-        // in memory
-        InMemoryBufferCacheFactory InMemBufferCacheFactory = new InMemoryBufferCacheFactory(PAGE_SIZE, NUM_PAGES);
-        IBufferCache memBufferCache = InMemBufferCacheFactory.createInMemoryBufferCache();
-
-        // declare fields
-        int fieldCount = 2;
-        ITypeTraits[] typeTraits = new ITypeTraits[fieldCount];
-        typeTraits[0] = IntegerPointable.TYPE_TRAITS;
-        typeTraits[1] = IntegerPointable.TYPE_TRAITS;
-
-        // declare keys
-        int keyFieldCount = 1;
-        IBinaryComparator[] cmps = new IBinaryComparator[keyFieldCount];
-        cmps[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY).createBinaryComparator();
-
-        MultiComparator cmp = new MultiComparator(cmps);
-
-        LSMTypeAwareTupleWriterFactory insertTupleWriterFactory = new LSMTypeAwareTupleWriterFactory(typeTraits, false);
-        LSMTypeAwareTupleWriterFactory deleteTupleWriterFactory = new LSMTypeAwareTupleWriterFactory(typeTraits, true);
-
-        ITreeIndexFrameFactory insertLeafFrameFactory = new BTreeNSMLeafFrameFactory(insertTupleWriterFactory);
-        ITreeIndexFrameFactory deleteLeafFrameFactory = new BTreeNSMLeafFrameFactory(deleteTupleWriterFactory);
-        ITreeIndexFrameFactory interiorFrameFactory = new BTreeNSMInteriorFrameFactory(insertTupleWriterFactory);
-        ITreeIndexMetaDataFrameFactory metaFrameFactory = new LIFOMetaDataFrameFactory();
-
-        IBTreeLeafFrame insertLeafFrame = (IBTreeLeafFrame) insertLeafFrameFactory.createFrame();
-
-        IFreePageManager freePageManager = new LinkedListFreePageManager(bufferCache, fileId, 0, metaFrameFactory);
-        IFreePageManager memFreePageManager = new InMemoryFreePageManager(NUM_PAGES, metaFrameFactory);
-
-        // For the Flush Mechanism
-        LSMEntireTupleWriterFactory flushTupleWriterFactory = new LSMEntireTupleWriterFactory(typeTraits);
-        ITreeIndexFrameFactory flushLeafFrameFactory = new BTreeNSMLeafFrameFactory(flushTupleWriterFactory);
-        FreePageManagerFactory freePageManagerFactory = new FreePageManagerFactory(bufferCache, metaFrameFactory);
-        BTreeFactory bTreeFactory = new BTreeFactory(bufferCache, freePageManagerFactory, cmp, fieldCount,
-                interiorFrameFactory, flushLeafFrameFactory);
-
-        LSMTree lsmtree = new LSMTree(memBufferCache, bufferCache, fieldCount, cmp, memFreePageManager,
-                interiorFrameFactory, insertLeafFrameFactory, deleteLeafFrameFactory, bTreeFactory,
-                (IFileMapManager) fmp);
-
-        lsmtree.create(fileId);
-        lsmtree.open(fileId);
-
-        ByteBuffer frame = ctx.allocateFrame();
-        FrameTupleAppender appender = new FrameTupleAppender(ctx.getFrameSize());
-
-        ArrayTupleBuilder tb = new ArrayTupleBuilder(fieldCount);
-        DataOutput dos = tb.getDataOutput();
-
-        ISerializerDeserializer[] recDescSers = { IntegerSerializerDeserializer.INSTANCE,
-                IntegerSerializerDeserializer.INSTANCE };
-        RecordDescriptor recDesc = new RecordDescriptor(recDescSers);
-
-        IFrameTupleAccessor accessor = new FrameTupleAccessor(ctx.getFrameSize(), recDesc);
-        accessor.reset(frame);
-
-        FrameTupleReference tuple = new FrameTupleReference();
-
-        int resultSize = 820;
-        int[][] resultArray = new int[resultSize][2];
-
-        // insert 820 tuples
-        for (int i = 0; i < resultSize; i++) {
-            resultArray[i][0] = i;
-            resultArray[i][1] = i;
-        }
-
-        ITreeIndexAccessor lsmTreeAccessor = lsmtree.createAccessor();
-        for (int i = 0; i < resultSize; i++) {
-
-            int f0 = resultArray[i][0];
-            int f1 = resultArray[i][1];
-
-            tb.reset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f0, dos);
-            tb.addFieldEndOffset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f1, dos);
-            tb.addFieldEndOffset();
-
-            appender.reset(frame, true);
-            appender.append(tb.getFieldEndOffsets(), tb.getByteArray(), 0, tb.getSize());
-
-            tuple.reset(accessor, 0);
-
-            ArrayTupleReference t = new ArrayTupleReference();
-            t.reset(tb.getFieldEndOffsets(), tb.getByteArray());
-
-            try {
-                lsmTreeAccessor.insert(t);
-            } catch (TreeIndexException e) {
-                System.out.println("test02:" + e);
-                e.printStackTrace();
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-
-        // Print out the third in Disk Btree
-        System.out.println("LSMTreeFlushTest: start print the first tree");
-        // lsmtree.scanDiskTree(2);
-        // Print out the second in Disk Btree
-        System.out.println("LSMTreeFlushTest: start print the first tree");
-        // lsmtree.scanDiskTree(1);
-        // Print out the first in Disk Btree
-        System.out.println("LSMTreeFlushTest: start print the first tree");
-        lsmtree.scanDiskTree(0);
-
-        lsmtree.close();
-        bufferCache.closeFile(fileId);
-        memBufferCache.close();
-
-        System.out.printf("End of TEST2()\n");
-
-    }
-
-    // @Test
-    // public void Test3() throws Exception {
-    // System.out.printf("TEST3 START\n");
-    // //in disk
-    // TestStorageManagerComponentHolder.init(PAGE_SIZE, NUM_PAGES,
-    // MAX_OPEN_FILES);
-    // IBufferCache bufferCache =
-    // TestStorageManagerComponentHolder.getBufferCache(ctx);
-    // IFileMapProvider fmp =
-    // TestStorageManagerComponentHolder.getFileMapProvider(ctx);
-    // FileReference file = new FileReference(new File(fileName));
-    // bufferCache.createFile(file);
-    // int fileId = fmp.lookupFileId(file);
-    // bufferCache.openFile(fileId);
-    //
-    // //in memory
-    // InMemoryBufferCacheFactory InMemBufferCacheFactory = new
-    // InMemoryBufferCacheFactory(PAGE_SIZE, NUM_PAGES);
-    // IBufferCache memBufferCache =
-    // InMemBufferCacheFactory.createInMemoryBufferCache();
-    //
-    // // declare fields
-    // int fieldCount = 2;
-    // ITypeTrait[] typeTraits = new ITypeTrait[fieldCount];
-    // typeTraits[0] = new TypeTrait(4);
-    // typeTraits[1] = new TypeTrait(4);
-    //
-    // // declare keys
-    // int keyFieldCount = 1;
-    // IBinaryComparatorFactory[] cmpFactories = new
-    // IBinaryComparatorFactory[keyFieldCount];
-    // cmpFactories[0] = IntegerBinaryComparatorFactory.INSTANCE;
-    //
-    // MultiComparator cmp = BTreeUtils.createMultiComparator(cmpFactories);
-    //
-    // LSMTypeAwareTupleWriterFactory insertTupleWriterFactory = new
-    // LSMTypeAwareTupleWriterFactory(typeTraits, false);
-    // LSMTypeAwareTupleWriterFactory deleteTupleWriterFactory = new
-    // LSMTypeAwareTupleWriterFactory(typeTraits, true);
-    //
-    // ITreeIndexFrameFactory insertLeafFrameFactory = new
-    // BTreeNSMLeafFrameFactory(insertTupleWriterFactory);
-    // ITreeIndexFrameFactory deleteLeafFrameFactory = new
-    // BTreeNSMLeafFrameFactory(deleteTupleWriterFactory);
-    // ITreeIndexFrameFactory interiorFrameFactory = new
-    // BTreeNSMInteriorFrameFactory(insertTupleWriterFactory);
-    // ITreeIndexMetaDataFrameFactory metaFrameFactory = new
-    // LIFOMetaDataFrameFactory();
-    //
-    // IBTreeLeafFrame insertLeafFrame = (IBTreeLeafFrame)
-    // insertLeafFrameFactory.createFrame();
-    //
-    // IFreePageManager freePageManager = new
-    // LinkedListFreePageManager(bufferCache, fileId, 0, metaFrameFactory);
-    // IFreePageManager memFreePageManager = new InMemoryFreePageManager(30,
-    // metaFrameFactory);
-    //
-    // // For the Flush Mechanism
-    // LSMEntireTupleWriterFactory flushTupleWriterFactory = new
-    // LSMEntireTupleWriterFactory(typeTraits);
-    // ITreeIndexFrameFactory flushLeafFrameFactory = new
-    // BTreeNSMLeafFrameFactory(flushTupleWriterFactory);
-    // FreePageManagerFactory freePageManagerFactory = new
-    // FreePageManagerFactory(bufferCache, metaFrameFactory);
-    // BTreeFactory bTreeFactory = new BTreeFactory(bufferCache,
-    // freePageManagerFactory, cmp, fieldCount, interiorFrameFactory,
-    // flushLeafFrameFactory);
-    //
-    //
-    //
-    // LSMTree lsmtree = new LSMTree(memBufferCache, bufferCache, fieldCount,
-    // cmp, memFreePageManager, interiorFrameFactory, insertLeafFrameFactory,
-    // deleteLeafFrameFactory, bTreeFactory, (IFileMapManager)fmp);
-    //
-    // lsmtree.create(fileId);
-    // lsmtree.open(fileId);
-    //
-    // ByteBuffer frame = ctx.allocateFrame();
-    // FrameTupleAppender appender = new FrameTupleAppender(ctx.getFrameSize());
-    //
-    // ArrayTupleBuilder tb = new ArrayTupleBuilder(fieldCount);
-    // DataOutput dos = tb.getDataOutput();
-    //
-    // ISerializerDeserializer[] recDescSers = {
-    // IntegerSerializerDeserializer.INSTANCE,
-    // IntegerSerializerDeserializer.INSTANCE };
-    // RecordDescriptor recDesc = new RecordDescriptor(recDescSers);
-    //
-    // IFrameTupleAccessor accessor = new FrameTupleAccessor(ctx.getFrameSize(),
-    // recDesc);
-    // accessor.reset(frame);
-    //
-    // FrameTupleReference tuple = new FrameTupleReference();
-    //
-    // int resultSize = 500;
-    // int[][] resultArray = new int[resultSize][2];
-    //
-    //
-    // //insert 250 tuples
-    // System.out.printf("Start for 1st Insert\n");
-    // LSMTreeOpContext insertOpCtx = lsmtree.createOpContext(IndexOp.INSERT);
-    // for (int i = 0; i < 252; i++){
-    // resultArray[i][0] = i;
-    // resultArray[i][1] = i;
-    // }
-    // for (int i = 0; i < 252; i++) {
-    //
-    // int f0 = resultArray[i][0];
-    // int f1 = resultArray[i][1];
-    //
-    // tb.reset();
-    // IntegerSerializerDeserializer.INSTANCE.serialize(f0, dos);
-    // tb.addFieldEndOffset();
-    // IntegerSerializerDeserializer.INSTANCE.serialize(f1, dos);
-    // tb.addFieldEndOffset();
-    //
-    // appender.reset(frame, true);
-    // appender.append(tb.getFieldEndOffsets(), tb.getByteArray(), 0,
-    // tb.getSize());
-    //
-    // tuple.reset(accessor, 0);
-    //
-    // ArrayTupleReference t = new ArrayTupleReference();
-    // t.reset(tb.getFieldEndOffsets(), tb.getByteArray());
-    //
-    // try {
-    // lsmtree.insert(t, insertOpCtx);
-    // } catch (TreeIndexException e) {
-    // System.out.println("test03:" + e);
-    // e.printStackTrace();
-    // } catch (Exception e) {
-    // e.printStackTrace();
-    // }
-    // }
-    // System.out.printf("Start for 2nd Insert\n");
-    // //delete 126~251. Deletion of 251 cause the flush
-    // insertOpCtx.reset(IndexOp.DELETE);
-    // // LSMTreeOpContext insertOpCtx =
-    // lsmtree.createOpContext(IndexOp.DELETE);
-    // for (int i = 125; i < 253; i++){
-    // resultArray[i][0] = i;
-    // resultArray[i][1] = i;
-    // }
-    // for (int i = 126; i < 253; i++) {
-    // int f0 = resultArray[i][0];
-    // int f1 = resultArray[i][1];
-    //
-    // tb.reset();
-    // IntegerSerializerDeserializer.INSTANCE.serialize(f0, dos);
-    // tb.addFieldEndOffset();
-    // IntegerSerializerDeserializer.INSTANCE.serialize(f1, dos);
-    // tb.addFieldEndOffset();
-    //
-    // appender.reset(frame, true);
-    // appender.append(tb.getFieldEndOffsets(), tb.getByteArray(), 0,
-    // tb.getSize());
-    //
-    // tuple.reset(accessor, 0);
-    //
-    // ArrayTupleReference t = new ArrayTupleReference();
-    // t.reset(tb.getFieldEndOffsets(), tb.getByteArray());
-    //
-    // try {
-    // lsmtree.delete(t, insertOpCtx);
-    // } catch (TreeIndexException e) {
-    // System.out.println("test03:" + e);
-    // e.printStackTrace();
-    // } catch (Exception e) {
-    // e.printStackTrace();
-    // }
-    // }
-    // //delete 0~250
-    // insertOpCtx = lsmtree.createOpContext(IndexOp.INSERT);
-    // for (int i = 130; i > 0; i--){
-    // resultArray[i][0] = i;
-    // resultArray[i][1] = i;
-    // }
-    // for (int i = 130; i > 0; i--) {
-    //
-    // int f0 = resultArray[i][0];
-    // int f1 = resultArray[i][1];
-    //
-    // tb.reset();
-    // IntegerSerializerDeserializer.INSTANCE.serialize(f0, dos);
-    // tb.addFieldEndOffset();
-    // IntegerSerializerDeserializer.INSTANCE.serialize(f1, dos);
-    // tb.addFieldEndOffset();
-    //
-    // appender.reset(frame, true);
-    // appender.append(tb.getFieldEndOffsets(), tb.getByteArray(), 0,
-    // tb.getSize());
-    //
-    // tuple.reset(accessor, 0);
-    //
-    // ArrayTupleReference t = new ArrayTupleReference();
-    // t.reset(tb.getFieldEndOffsets(), tb.getByteArray());
-    //
-    // try {
-    // lsmtree.insert(t, insertOpCtx);
-    // } catch (TreeIndexException e) {
-    // System.out.println("test03:" + e);
-    // e.printStackTrace();
-    // } catch (Exception e) {
-    // e.printStackTrace();
-    // }
-    // }
-    //
-    // //
-    // //
-    // //
-    // // //Print out the second in Disk Btree
-    // // System.out.println("LSMTreeFlushTest: start print the second tree");
-    // // lsmtree.scanDiskTree(1);
-    // // //Print out the first in Disk Btree
-    // // System.out.println("LSMTreeFlushTest: start print the first tree");
-    // // lsmtree.scanDiskTree(0);
-    // //
-    // // //Print out the In-memory Tree
-    // //
-    // System.out.println("LSMTreeFlushTest: start print the In-memory tree");
-    // // lsmtree.scanInMemoryTree();
-    // // //TODO: scan whole tree
-    //
-    // LOGGER.info("RANGE SEARCH:");
-    //
-    // BTreeOpContext searchOpCtx = lsmtree.createOpContext(IndexOp.SEARCH);
-    // ITreeIndexCursor rangeCursor = new LSMTreeRangeSearchCursor();
-    //
-    // // build low and high keys
-    // ArrayTupleBuilder ktb = new ArrayTupleBuilder(cmp.getKeyFieldCount());
-    // DataOutput kdos = ktb.getDataOutput();
-    //
-    // ISerializerDeserializer[] keyDescSers = {
-    // IntegerSerializerDeserializer.INSTANCE };
-    // RecordDescriptor keyDesc = new RecordDescriptor(keyDescSers);
-    // IFrameTupleAccessor keyAccessor = new
-    // FrameTupleAccessor(ctx.getFrameSize(), keyDesc);
-    // keyAccessor.reset(frame);
-    //
-    // appender.reset(frame, true);
-    //
-    // // build and append low key
-    // ktb.reset();
-    // IntegerSerializerDeserializer.INSTANCE.serialize(-1, kdos);
-    // ktb.addFieldEndOffset();
-    // appender.append(ktb.getFieldEndOffsets(), ktb.getByteArray(), 0,
-    // ktb.getSize());
-    //
-    // // build and append high key
-    // ktb.reset();
-    // IntegerSerializerDeserializer.INSTANCE.serialize(300, kdos);
-    // ktb.addFieldEndOffset();
-    // appender.append(ktb.getFieldEndOffsets(), ktb.getByteArray(), 0,
-    // ktb.getSize());
-    //
-    // // create tuplereferences for search keys
-    // FrameTupleReference lowKey = new FrameTupleReference();
-    // lowKey.reset(keyAccessor, 0);
-    //
-    // FrameTupleReference highKey = new FrameTupleReference();
-    // highKey.reset(keyAccessor, 1);
-    //
-    // IBinaryComparator[] searchCmps = new IBinaryComparator[1];
-    // searchCmps[0] =
-    // IntegerBinaryComparatorFactory.INSTANCE.createBinaryComparator();
-    // MultiComparator searchCmp = new MultiComparator(searchCmps);
-    //
-    // RangePredicate rangePred = new RangePredicate(true, lowKey, highKey,
-    // true, true, searchCmp, searchCmp);
-    // lsmtree.search(rangeCursor, rangePred, searchOpCtx);
-    //
-    // try {
-    // while (rangeCursor.hasNext()) {
-    // rangeCursor.next();
-    // ITupleReference frameTuple = rangeCursor.getTuple();
-    // String rec = TupleUtils.printTuple(frameTuple, recDescSers);
-    // if(((LSMTypeAwareTupleReference)frameTuple).isDelete()) {
-    // System.out.println("del " + rec);
-    // }
-    // else {
-    // System.out.println("ins " + rec);
-    // }
-    // // System.out.println("------------------");
-    // }
-    // } catch (Exception e) {
-    // e.printStackTrace();
-    // } finally {
-    // rangeCursor.close();
-    // }
-    //
-    // lsmtree.close();
-    // bufferCache.closeFile(fileId);
-    // memBufferCache.close();
-    //
-    // System.out.printf("End of TEST3()\n");
-    //
-    // }
-
-}
\ No newline at end of file
diff --git a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMTreeMergeTest.java b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMTreeMergeTest.java
deleted file mode 100644
index 75d6ce1..0000000
--- a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMTreeMergeTest.java
+++ /dev/null
@@ -1,371 +0,0 @@
-package edu.uci.ics.hyracks.storage.am.lsmtree.impls;
-
-import java.io.DataOutput;
-import java.io.File;
-import java.nio.ByteBuffer;
-
-import org.junit.Test;
-
-import edu.uci.ics.hyracks.api.comm.IFrameTupleAccessor;
-import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
-import edu.uci.ics.hyracks.api.dataflow.value.IBinaryComparator;
-import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
-import edu.uci.ics.hyracks.api.dataflow.value.ITypeTraits;
-import edu.uci.ics.hyracks.api.dataflow.value.RecordDescriptor;
-import edu.uci.ics.hyracks.api.io.FileReference;
-import edu.uci.ics.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
-import edu.uci.ics.hyracks.data.std.primitive.IntegerPointable;
-import edu.uci.ics.hyracks.dataflow.common.comm.io.ArrayTupleBuilder;
-import edu.uci.ics.hyracks.dataflow.common.comm.io.ArrayTupleReference;
-import edu.uci.ics.hyracks.dataflow.common.comm.io.FrameTupleAccessor;
-import edu.uci.ics.hyracks.dataflow.common.comm.io.FrameTupleAppender;
-import edu.uci.ics.hyracks.dataflow.common.data.accessors.FrameTupleReference;
-import edu.uci.ics.hyracks.dataflow.common.data.marshalling.IntegerSerializerDeserializer;
-import edu.uci.ics.hyracks.storage.am.btree.api.IBTreeLeafFrame;
-import edu.uci.ics.hyracks.storage.am.btree.frames.BTreeNSMInteriorFrameFactory;
-import edu.uci.ics.hyracks.storage.am.btree.frames.BTreeNSMLeafFrameFactory;
-import edu.uci.ics.hyracks.storage.am.common.api.IFreePageManager;
-import edu.uci.ics.hyracks.storage.am.common.api.ITreeIndexAccessor;
-import edu.uci.ics.hyracks.storage.am.common.api.ITreeIndexFrameFactory;
-import edu.uci.ics.hyracks.storage.am.common.api.ITreeIndexMetaDataFrameFactory;
-import edu.uci.ics.hyracks.storage.am.common.api.TreeIndexException;
-import edu.uci.ics.hyracks.storage.am.common.frames.LIFOMetaDataFrameFactory;
-import edu.uci.ics.hyracks.storage.am.common.freepage.LinkedListFreePageManager;
-import edu.uci.ics.hyracks.storage.am.common.ophelpers.MultiComparator;
-import edu.uci.ics.hyracks.storage.common.buffercache.IBufferCache;
-import edu.uci.ics.hyracks.storage.common.file.IFileMapManager;
-import edu.uci.ics.hyracks.storage.common.file.IFileMapProvider;
-import edu.uci.ics.hyracks.test.support.TestStorageManagerComponentHolder;
-import edu.uci.ics.hyracks.test.support.TestUtils;
-
-public class LSMTreeMergeTest extends AbstractLSMTreeTest {
-    private static final int PAGE_SIZE = 256;
-    private static final int NUM_PAGES = 30;
-    private static final int MAX_OPEN_FILES = 100;
-    private static final int HYRACKS_FRAME_SIZE = 128;
-    private IHyracksTaskContext ctx = TestUtils.create(HYRACKS_FRAME_SIZE);
-
-    @Test
-    public void Test1() throws Exception {
-        System.out.printf("TEST1 START\n");
-        // in disk
-        TestStorageManagerComponentHolder.init(PAGE_SIZE, NUM_PAGES, MAX_OPEN_FILES);
-        IBufferCache bufferCache = TestStorageManagerComponentHolder.getBufferCache(ctx);
-        IFileMapProvider fmp = TestStorageManagerComponentHolder.getFileMapProvider(ctx);
-        FileReference file = new FileReference(new File(fileName));
-        bufferCache.createFile(file);
-        int fileId = fmp.lookupFileId(file);
-        bufferCache.openFile(fileId);
-
-        // in memory
-        InMemoryBufferCacheFactory InMemBufferCacheFactory = new InMemoryBufferCacheFactory(PAGE_SIZE, NUM_PAGES);
-        IBufferCache memBufferCache = InMemBufferCacheFactory.createInMemoryBufferCache();
-
-        // declare fields
-        int fieldCount = 2;
-        ITypeTraits[] typeTraits = new ITypeTraits[fieldCount];
-        typeTraits[0] = IntegerPointable.TYPE_TRAITS;
-        typeTraits[1] = IntegerPointable.TYPE_TRAITS;
-
-        // declare keys
-        int keyFieldCount = 1;
-        IBinaryComparator[] cmps = new IBinaryComparator[keyFieldCount];
-        cmps[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY).createBinaryComparator();
-
-        MultiComparator cmp = new MultiComparator(cmps);
-
-        LSMTypeAwareTupleWriterFactory insertTupleWriterFactory = new LSMTypeAwareTupleWriterFactory(typeTraits, false);
-        LSMTypeAwareTupleWriterFactory deleteTupleWriterFactory = new LSMTypeAwareTupleWriterFactory(typeTraits, true);
-
-        ITreeIndexFrameFactory insertLeafFrameFactory = new BTreeNSMLeafFrameFactory(insertTupleWriterFactory);
-        ITreeIndexFrameFactory deleteLeafFrameFactory = new BTreeNSMLeafFrameFactory(deleteTupleWriterFactory);
-        ITreeIndexFrameFactory interiorFrameFactory = new BTreeNSMInteriorFrameFactory(insertTupleWriterFactory);
-        ITreeIndexMetaDataFrameFactory metaFrameFactory = new LIFOMetaDataFrameFactory();
-
-        IBTreeLeafFrame insertLeafFrame = (IBTreeLeafFrame) insertLeafFrameFactory.createFrame();
-
-        IFreePageManager freePageManager = new LinkedListFreePageManager(bufferCache, fileId, 0, metaFrameFactory);
-        IFreePageManager memFreePageManager = new InMemoryFreePageManager(NUM_PAGES, metaFrameFactory);
-
-        // For the Flush Mechanism
-        LSMEntireTupleWriterFactory flushTupleWriterFactory = new LSMEntireTupleWriterFactory(typeTraits);
-        ITreeIndexFrameFactory flushLeafFrameFactory = new BTreeNSMLeafFrameFactory(flushTupleWriterFactory);
-        FreePageManagerFactory freePageManagerFactory = new FreePageManagerFactory(bufferCache, metaFrameFactory);
-        BTreeFactory bTreeFactory = new BTreeFactory(bufferCache, freePageManagerFactory, cmp, fieldCount,
-                interiorFrameFactory, flushLeafFrameFactory);
-
-        LSMTree lsmtree = new LSMTree(memBufferCache, bufferCache, fieldCount, cmp, memFreePageManager,
-                interiorFrameFactory, insertLeafFrameFactory, deleteLeafFrameFactory, bTreeFactory,
-                (IFileMapManager) fmp);
-
-        // LSMTree lsmtree = LSMTreeUtils.createLSMTree(10, 30, 2,
-        // memBufferCache, bufferCache, fileId, typeTraits,
-        // cmp.getComparators(), BTreeLeafFrameType.REGULAR_NSM,
-        // (IFileMapManager)fmp);
-
-        lsmtree.create(fileId);
-        lsmtree.open(fileId);
-
-        ByteBuffer frame = ctx.allocateFrame();
-        FrameTupleAppender appender = new FrameTupleAppender(ctx.getFrameSize());
-
-        ArrayTupleBuilder tb = new ArrayTupleBuilder(fieldCount);
-        DataOutput dos = tb.getDataOutput();
-
-        ISerializerDeserializer[] recDescSers = { IntegerSerializerDeserializer.INSTANCE,
-                IntegerSerializerDeserializer.INSTANCE };
-        RecordDescriptor recDesc = new RecordDescriptor(recDescSers);
-
-        IFrameTupleAccessor accessor = new FrameTupleAccessor(ctx.getFrameSize(), recDesc);
-        accessor.reset(frame);
-
-        FrameTupleReference tuple = new FrameTupleReference();
-
-        int resultSize = 100000;
-        int[][] resultArray = new int[resultSize][2];
-
-        // insert 0~250 tuples
-        System.out.printf("Start for 1st Insert\n");
-        ITreeIndexAccessor lsmTreeAccessor = lsmtree.createAccessor();
-        for (int i = 0; i < 251; i++) {
-            resultArray[i][0] = i;
-            resultArray[i][1] = i;
-        }
-        for (int i = 0; i < 251; i++) {
-
-            int f0 = resultArray[i][0];
-            int f1 = resultArray[i][1];
-
-            tb.reset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f0, dos);
-            tb.addFieldEndOffset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f1, dos);
-            tb.addFieldEndOffset();
-
-            appender.reset(frame, true);
-            appender.append(tb.getFieldEndOffsets(), tb.getByteArray(), 0, tb.getSize());
-
-            tuple.reset(accessor, 0);
-
-            ArrayTupleReference t = new ArrayTupleReference();
-            t.reset(tb.getFieldEndOffsets(), tb.getByteArray());
-
-            try {
-                lsmTreeAccessor.insert(t);
-            } catch (TreeIndexException e) {
-                System.out.println("test03:" + e);
-                e.printStackTrace();
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-        System.out.printf("Start for 2nd Insert\n");
-        // delete 126~250.
-        for (int i = 126; i < 251; i++) {
-            resultArray[i][0] = i;
-            resultArray[i][1] = i;
-        }
-        for (int i = 126; i < 251; i++) {
-            int f0 = resultArray[i][0];
-            int f1 = resultArray[i][1];
-
-            tb.reset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f0, dos);
-            tb.addFieldEndOffset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f1, dos);
-            tb.addFieldEndOffset();
-
-            appender.reset(frame, true);
-            appender.append(tb.getFieldEndOffsets(), tb.getByteArray(), 0, tb.getSize());
-
-            tuple.reset(accessor, 0);
-
-            ArrayTupleReference t = new ArrayTupleReference();
-            t.reset(tb.getFieldEndOffsets(), tb.getByteArray());
-
-            try {
-                lsmTreeAccessor.delete(t);
-            } catch (TreeIndexException e) {
-                System.out.println("test03:" + e);
-                e.printStackTrace();
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-        // insert 251~1
-        for (int i = 251; i > 0; i--) {
-            resultArray[i][0] = i;
-            resultArray[i][1] = i;
-        }
-        for (int i = 251; i > 0; i--) {
-
-            int f0 = resultArray[i][0];
-            int f1 = resultArray[i][1];
-
-            tb.reset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f0, dos);
-            tb.addFieldEndOffset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f1, dos);
-            tb.addFieldEndOffset();
-
-            appender.reset(frame, true);
-            appender.append(tb.getFieldEndOffsets(), tb.getByteArray(), 0, tb.getSize());
-
-            tuple.reset(accessor, 0);
-
-            ArrayTupleReference t = new ArrayTupleReference();
-            t.reset(tb.getFieldEndOffsets(), tb.getByteArray());
-
-            try {
-                lsmTreeAccessor.insert(t);
-            } catch (TreeIndexException e) {
-                System.out.println("test03:" + e);
-                e.printStackTrace();
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-        // delete 100~0
-        for (int i = 100; i >= 0; i--) {
-            resultArray[i][0] = i;
-            resultArray[i][1] = i;
-        }
-        for (int i = 100; i >= 0; i--) {
-
-            int f0 = resultArray[i][0];
-            int f1 = resultArray[i][1];
-
-            tb.reset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f0, dos);
-            tb.addFieldEndOffset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f1, dos);
-            tb.addFieldEndOffset();
-
-            appender.reset(frame, true);
-            appender.append(tb.getFieldEndOffsets(), tb.getByteArray(), 0, tb.getSize());
-
-            tuple.reset(accessor, 0);
-
-            ArrayTupleReference t = new ArrayTupleReference();
-            t.reset(tb.getFieldEndOffsets(), tb.getByteArray());
-
-            try {
-                lsmTreeAccessor.delete(t);
-            } catch (TreeIndexException e) {
-                System.out.println("test03:" + e);
-                e.printStackTrace();
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-        // insert 1~50
-        for (int i = 1; i < 51; i++) {
-            resultArray[i][0] = i;
-            resultArray[i][1] = i;
-        }
-        for (int i = 1; i < 51; i++) {
-
-            int f0 = resultArray[i][0];
-            int f1 = resultArray[i][1];
-
-            tb.reset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f0, dos);
-            tb.addFieldEndOffset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f1, dos);
-            tb.addFieldEndOffset();
-
-            appender.reset(frame, true);
-            appender.append(tb.getFieldEndOffsets(), tb.getByteArray(), 0, tb.getSize());
-
-            tuple.reset(accessor, 0);
-
-            ArrayTupleReference t = new ArrayTupleReference();
-            t.reset(tb.getFieldEndOffsets(), tb.getByteArray());
-
-            try {
-                lsmTreeAccessor.insert(t);
-            } catch (TreeIndexException e) {
-                System.out.println("test03:" + e);
-                e.printStackTrace();
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-
-        lsmtree.merge();
-
-        // Output should be:
-        // In memory tree = 0->del, 1~50 ins
-        // MergedTree = 0->ins, 1~100->del, 101~251->ins
-        // Whole search = 1~50,101~251
-
-        // System.out.println("LSMTreeFlushTest: start print the first tree");
-        // lsmtree.scanDiskTree(1);
-        //
-        // Print out the first in Disk Btree
-        // System.out.println("LSMTreeFlushTest: start print the first tree");
-        // lsmtree.scanDiskTree(0);
-        // Print out the In-memory Tree
-        System.out.println("LSMTreeFlushTest: start print the In-memory tree");
-        lsmtree.scanInMemoryTree();
-        // TODO: scan whole tree
-        /*
-         * System.out.println("Range SEARCH:");
-         * 
-         * BTreeOpContext searchOpCtx = lsmtree.createOpContext(IndexOp.SEARCH);
-         * ITreeIndexCursor rangeCursor = new LSMTreeRangeSearchCursor();
-         * 
-         * // build low and high keys ArrayTupleBuilder ktb = new
-         * ArrayTupleBuilder(cmp.getKeyFieldCount()); DataOutput kdos =
-         * ktb.getDataOutput();
-         * 
-         * ISerializerDeserializer[] keyDescSers = {
-         * IntegerSerializerDeserializer.INSTANCE }; RecordDescriptor keyDesc =
-         * new RecordDescriptor(keyDescSers); IFrameTupleAccessor keyAccessor =
-         * new FrameTupleAccessor( ctx.getFrameSize(), keyDesc);
-         * keyAccessor.reset(frame);
-         * 
-         * appender.reset(frame, true);
-         * 
-         * // build and append low key ktb.reset();
-         * IntegerSerializerDeserializer.INSTANCE.serialize(-1, kdos);
-         * ktb.addFieldEndOffset(); appender.append(ktb.getFieldEndOffsets(),
-         * ktb.getByteArray(), 0, ktb.getSize());
-         * 
-         * // build and append high key ktb.reset();
-         * IntegerSerializerDeserializer.INSTANCE.serialize(300, kdos);
-         * ktb.addFieldEndOffset(); appender.append(ktb.getFieldEndOffsets(),
-         * ktb.getByteArray(), 0, ktb.getSize());
-         * 
-         * // create tuplereferences for search keys FrameTupleReference lowKey
-         * = new FrameTupleReference(); lowKey.reset(keyAccessor, 0);
-         * 
-         * FrameTupleReference highKey = new FrameTupleReference();
-         * highKey.reset(keyAccessor, 1);
-         * 
-         * IBinaryComparator[] searchCmps = new IBinaryComparator[1];
-         * searchCmps[0] = IntegerBinaryComparatorFactory.INSTANCE
-         * .createBinaryComparator(); MultiComparator searchCmp = new
-         * MultiComparator(searchCmps);
-         * 
-         * RangePredicate rangePred = new RangePredicate(true, lowKey, highKey,
-         * true, true, searchCmp, searchCmp); lsmtree.search(rangeCursor,
-         * rangePred, searchOpCtx);
-         * 
-         * try { while (rangeCursor.hasNext()) { rangeCursor.next();
-         * ITupleReference frameTuple = rangeCursor.getTuple(); String rec =
-         * TupleUtils.printTuple(frameTuple, recDescSers); if
-         * (((LSMTypeAwareTupleReference) frameTuple).isDelete()) {
-         * System.out.println("del " + rec); } else { System.out.println("ins "
-         * + rec); } // System.out.println("------------------"); } } catch
-         * (Exception e) { e.printStackTrace(); } finally { rangeCursor.close();
-         * }
-         */
-        lsmtree.close();
-        bufferCache.closeFile(fileId);
-        memBufferCache.close();
-
-        System.out.printf("End of TEST1()\n");
-
-    }
-}
diff --git a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMTreeRangeSearchCursor.java b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMTreeRangeSearchCursor.java
index eaa99ac..079dada 100644
--- a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMTreeRangeSearchCursor.java
+++ b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMTreeRangeSearchCursor.java
@@ -10,6 +10,7 @@
 import edu.uci.ics.hyracks.storage.am.common.api.ISearchPredicate;
 import edu.uci.ics.hyracks.storage.am.common.api.ITreeIndexCursor;
 import edu.uci.ics.hyracks.storage.am.common.ophelpers.MultiComparator;
+import edu.uci.ics.hyracks.storage.am.lsmtree.tuples.LSMTypeAwareTupleReference;
 import edu.uci.ics.hyracks.storage.common.buffercache.IBufferCache;
 import edu.uci.ics.hyracks.storage.common.buffercache.ICachedPage;
 
diff --git a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMTreeSearchTest.java b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMTreeSearchTest.java
deleted file mode 100644
index d26ba3f..0000000
--- a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMTreeSearchTest.java
+++ /dev/null
@@ -1,409 +0,0 @@
-package edu.uci.ics.hyracks.storage.am.lsmtree.impls;
-
-import java.io.DataOutput;
-import java.io.File;
-import java.nio.ByteBuffer;
-import java.util.Date;
-import java.util.Random;
-
-import org.junit.Test;
-
-import edu.uci.ics.hyracks.api.comm.IFrameTupleAccessor;
-import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
-import edu.uci.ics.hyracks.api.dataflow.value.IBinaryComparator;
-import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
-import edu.uci.ics.hyracks.api.dataflow.value.ITypeTraits;
-import edu.uci.ics.hyracks.api.dataflow.value.RecordDescriptor;
-import edu.uci.ics.hyracks.api.io.FileReference;
-import edu.uci.ics.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
-import edu.uci.ics.hyracks.data.std.primitive.IntegerPointable;
-import edu.uci.ics.hyracks.dataflow.common.comm.io.ArrayTupleBuilder;
-import edu.uci.ics.hyracks.dataflow.common.comm.io.ArrayTupleReference;
-import edu.uci.ics.hyracks.dataflow.common.comm.io.FrameTupleAccessor;
-import edu.uci.ics.hyracks.dataflow.common.comm.io.FrameTupleAppender;
-import edu.uci.ics.hyracks.dataflow.common.data.accessors.FrameTupleReference;
-import edu.uci.ics.hyracks.dataflow.common.data.accessors.ITupleReference;
-import edu.uci.ics.hyracks.dataflow.common.data.marshalling.IntegerSerializerDeserializer;
-import edu.uci.ics.hyracks.dataflow.common.util.TupleUtils;
-import edu.uci.ics.hyracks.storage.am.btree.api.IBTreeInteriorFrame;
-import edu.uci.ics.hyracks.storage.am.btree.api.IBTreeLeafFrame;
-import edu.uci.ics.hyracks.storage.am.btree.frames.BTreeNSMInteriorFrameFactory;
-import edu.uci.ics.hyracks.storage.am.btree.frames.BTreeNSMLeafFrameFactory;
-import edu.uci.ics.hyracks.storage.am.btree.impls.BTree;
-import edu.uci.ics.hyracks.storage.am.btree.impls.RangePredicate;
-import edu.uci.ics.hyracks.storage.am.common.api.IFreePageManager;
-import edu.uci.ics.hyracks.storage.am.common.api.ITreeIndexAccessor;
-import edu.uci.ics.hyracks.storage.am.common.api.ITreeIndexCursor;
-import edu.uci.ics.hyracks.storage.am.common.api.ITreeIndexFrameFactory;
-import edu.uci.ics.hyracks.storage.am.common.api.ITreeIndexMetaDataFrame;
-import edu.uci.ics.hyracks.storage.am.common.api.ITreeIndexMetaDataFrameFactory;
-import edu.uci.ics.hyracks.storage.am.common.api.TreeIndexException;
-import edu.uci.ics.hyracks.storage.am.common.frames.LIFOMetaDataFrameFactory;
-import edu.uci.ics.hyracks.storage.am.common.freepage.LinkedListFreePageManager;
-import edu.uci.ics.hyracks.storage.am.common.ophelpers.MultiComparator;
-import edu.uci.ics.hyracks.storage.am.common.tuples.TypeAwareTupleWriterFactory;
-import edu.uci.ics.hyracks.storage.common.buffercache.IBufferCache;
-import edu.uci.ics.hyracks.storage.common.file.IFileMapManager;
-import edu.uci.ics.hyracks.storage.common.file.IFileMapProvider;
-import edu.uci.ics.hyracks.test.support.TestStorageManagerComponentHolder;
-import edu.uci.ics.hyracks.test.support.TestUtils;
-
-// TODO: needs a big cleanup phase.
-public class LSMTreeSearchTest extends AbstractLSMTreeTest {
-
-    private static final int PAGE_SIZE = 256;
-    private static final int NUM_PAGES = 10;
-    private static final int MAX_OPEN_FILES = 100;
-    private static final int HYRACKS_FRAME_SIZE = 128;
-    private IHyracksTaskContext ctx = TestUtils.create(HYRACKS_FRAME_SIZE);
-
-    @Test
-    public void Test1() throws Exception {
-        // in disk
-        TestStorageManagerComponentHolder.init(PAGE_SIZE, NUM_PAGES, MAX_OPEN_FILES);
-        IBufferCache bufferCache = TestStorageManagerComponentHolder.getBufferCache(ctx);
-        IFileMapProvider fmp = TestStorageManagerComponentHolder.getFileMapProvider(ctx);
-        FileReference file = new FileReference(new File(fileName));
-        bufferCache.createFile(file);
-        int fileId = fmp.lookupFileId(file);
-        bufferCache.openFile(fileId);
-
-        // in memory
-        InMemoryBufferCacheFactory InMemBufferCacheFactory = new InMemoryBufferCacheFactory(PAGE_SIZE, NUM_PAGES);
-        IBufferCache memBufferCache = InMemBufferCacheFactory.createInMemoryBufferCache();
-
-        // declare fields
-        int fieldCount = 2;
-        ITypeTraits[] typeTraits = new ITypeTraits[fieldCount];
-        typeTraits[0] = IntegerPointable.TYPE_TRAITS;
-        typeTraits[1] = IntegerPointable.TYPE_TRAITS;
-
-        // declare keys
-        int keyFieldCount = 1;
-        IBinaryComparator[] cmps = new IBinaryComparator[keyFieldCount];
-        cmps[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY).createBinaryComparator();
-
-        MultiComparator cmp = new MultiComparator(cmps);
-
-        LSMTypeAwareTupleWriterFactory insertTupleWriterFactory = new LSMTypeAwareTupleWriterFactory(typeTraits, false);
-        LSMTypeAwareTupleWriterFactory deleteTupleWriterFactory = new LSMTypeAwareTupleWriterFactory(typeTraits, true);
-
-        ITreeIndexFrameFactory insertLeafFrameFactory = new BTreeNSMLeafFrameFactory(insertTupleWriterFactory);
-        ITreeIndexFrameFactory deleteLeafFrameFactory = new BTreeNSMLeafFrameFactory(deleteTupleWriterFactory);
-        ITreeIndexFrameFactory interiorFrameFactory = new BTreeNSMInteriorFrameFactory(insertTupleWriterFactory);
-        ITreeIndexMetaDataFrameFactory metaFrameFactory = new LIFOMetaDataFrameFactory();
-
-        IBTreeLeafFrame insertLeafFrame = (IBTreeLeafFrame) insertLeafFrameFactory.createFrame();
-
-        IFreePageManager freePageManager = new LinkedListFreePageManager(bufferCache, fileId, 0, metaFrameFactory);
-        IFreePageManager memFreePageManager = new InMemoryFreePageManager(100, metaFrameFactory);
-
-        LSMEntireTupleWriterFactory flushTupleWriterFactory = new LSMEntireTupleWriterFactory(typeTraits);
-        ITreeIndexFrameFactory flushLeafFrameFactory = new BTreeNSMLeafFrameFactory(flushTupleWriterFactory);
-        FreePageManagerFactory freePageManagerFactory = new FreePageManagerFactory(bufferCache, metaFrameFactory);
-        BTreeFactory bTreeFactory = new BTreeFactory(bufferCache, freePageManagerFactory, cmp, fieldCount,
-                interiorFrameFactory, flushLeafFrameFactory);
-
-        LSMTree lsmtree = new LSMTree(memBufferCache, bufferCache, fieldCount, cmp, memFreePageManager,
-                interiorFrameFactory, insertLeafFrameFactory, deleteLeafFrameFactory, bTreeFactory,
-                (IFileMapManager) fmp);
-
-        lsmtree.create(fileId);
-        lsmtree.open(fileId);
-
-        ByteBuffer frame = ctx.allocateFrame();
-        FrameTupleAppender appender = new FrameTupleAppender(ctx.getFrameSize());
-
-        ArrayTupleBuilder tb = new ArrayTupleBuilder(fieldCount);
-        DataOutput dos = tb.getDataOutput();
-
-        ISerializerDeserializer[] recDescSers = { IntegerSerializerDeserializer.INSTANCE,
-                IntegerSerializerDeserializer.INSTANCE };
-        RecordDescriptor recDesc = new RecordDescriptor(recDescSers);
-
-        IFrameTupleAccessor accessor = new FrameTupleAccessor(ctx.getFrameSize(), recDesc);
-        accessor.reset(frame);
-
-        FrameTupleReference tuple = new FrameTupleReference();
-
-        ITreeIndexAccessor lsmTreeAccessor = lsmtree.createAccessor();
-
-        // delete
-        for (int i = 26; i < 36; i++) {
-
-            int f0 = i;
-            int f1 = -1;
-
-            tb.reset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f0, dos);
-            tb.addFieldEndOffset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f1, dos);
-            tb.addFieldEndOffset();
-
-            appender.reset(frame, true);
-            appender.append(tb.getFieldEndOffsets(), tb.getByteArray(), 0, tb.getSize());
-
-            tuple.reset(accessor, 0);
-
-            ArrayTupleReference t = new ArrayTupleReference();
-            t.reset(tb.getFieldEndOffsets(), tb.getByteArray());
-
-            try {
-                lsmTreeAccessor.delete(t);
-            } catch (TreeIndexException e) {
-                System.out.println("test01:" + e);
-                e.printStackTrace();
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-
-        for (int i = 21; i < 31; i++) {
-            int f0 = i;
-            int f1 = 0;
-
-            tb.reset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f0, dos);
-            tb.addFieldEndOffset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f1, dos);
-            tb.addFieldEndOffset();
-
-            appender.reset(frame, true);
-            appender.append(tb.getFieldEndOffsets(), tb.getByteArray(), 0, tb.getSize());
-
-            tuple.reset(accessor, 0);
-
-            ArrayTupleReference t = new ArrayTupleReference();
-            t.reset(tb.getFieldEndOffsets(), tb.getByteArray());
-
-            try {
-                lsmTreeAccessor.insert(t);
-            } catch (TreeIndexException e) {
-                System.out.println("test01:" + e);
-                e.printStackTrace();
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-
-        // In disk insertions 1
-
-        LOGGER.info("Start in-disk insertions");
-
-        fileName = tmpDir + sep + simpleDateFormat.format(new Date());
-        FileReference file_1 = new FileReference(new File(fileName));
-        bufferCache.createFile(file_1);
-        int fileId_1 = fmp.lookupFileId(file_1);
-        bufferCache.openFile(fileId_1);
-
-        TypeAwareTupleWriterFactory tupleWriterFactory = new TypeAwareTupleWriterFactory(typeTraits);
-        ITreeIndexFrameFactory leafFrameFactory = new BTreeNSMLeafFrameFactory(tupleWriterFactory);
-
-        IBTreeLeafFrame leafFrame = (IBTreeLeafFrame) leafFrameFactory.createFrame();
-        IBTreeInteriorFrame interiorFrame = (IBTreeInteriorFrame) interiorFrameFactory.createFrame();
-        ITreeIndexMetaDataFrame metaFrame = metaFrameFactory.createFrame();
-
-        IFreePageManager freePageManager_1 = new LinkedListFreePageManager(bufferCache, fileId_1, 0, metaFrameFactory);
-
-        BTree btree_1 = new BTree(bufferCache, fieldCount, cmp, freePageManager_1, interiorFrameFactory,
-                leafFrameFactory);
-        btree_1.create(fileId_1);
-        btree_1.open(fileId_1);
-
-        // TODO: rename this one.
-        InDiskTreeInfo info_1 = new InDiskTreeInfo(btree_1);
-        lsmtree.inDiskTreeInfoList.add(info_1);
-
-        Random rnd = new Random();
-        rnd.setSeed(50);
-
-        LOGGER.info("INSERTING INTO TREE");
-
-        // ByteBuffer
-        frame = ctx.allocateFrame();
-        // FrameTupleAppender
-        appender = new FrameTupleAppender(ctx.getFrameSize());
-        // ArrayTupleBuilder
-        tb = new ArrayTupleBuilder(fieldCount);
-        // DataOutput
-        dos = tb.getDataOutput();
-
-        recDesc = new RecordDescriptor(recDescSers);
-
-        accessor.reset(frame);
-
-        tuple = new FrameTupleReference();
-
-        ITreeIndexAccessor indexAccessor_1 = btree_1.createAccessor();
-
-        // 10000
-        for (int i = 16; i < 41; i++) {
-
-            int f0 = i;
-            int f1 = 1;
-
-            tb.reset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f0, dos);
-            tb.addFieldEndOffset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f1, dos);
-            tb.addFieldEndOffset();
-
-            appender.reset(frame, true);
-            appender.append(tb.getFieldEndOffsets(), tb.getByteArray(), 0, tb.getSize());
-
-            tuple.reset(accessor, 0);
-
-            ArrayTupleReference t = new ArrayTupleReference();
-            t.reset(tb.getFieldEndOffsets(), tb.getByteArray());
-
-            if (i % 10 == 0) {
-                System.out.println("INSERTING " + i + " : " + f0 + " " + f1);
-            }
-
-            try {
-                indexAccessor_1.insert(t);
-            } catch (TreeIndexException e) {
-                e.printStackTrace();
-                System.out.println("Error: " + e);
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-        // btree_1.close();
-
-        // In disk insertions 2
-
-        LOGGER.info("Start in-disk insertions");
-
-        fileName = tmpDir + sep + simpleDateFormat.format(new Date());
-        FileReference file_2 = new FileReference(new File(fileName));
-        bufferCache.createFile(file_2);
-        int fileId_2 = fmp.lookupFileId(file_2);
-        bufferCache.openFile(fileId_2);
-
-        IFreePageManager freePageManager_2 = new LinkedListFreePageManager(bufferCache, fileId_2, 0, metaFrameFactory);
-        BTree btree_2 = new BTree(bufferCache, fieldCount, cmp, freePageManager_2, interiorFrameFactory,
-                leafFrameFactory);
-        btree_2.create(fileId_2);
-        btree_2.open(fileId_2);
-
-        InDiskTreeInfo info_2 = new InDiskTreeInfo(btree_2);
-        lsmtree.inDiskTreeInfoList.add(info_2);
-
-        LOGGER.info("INSERTING INTO TREE");
-
-        // ByteBuffer
-        frame = ctx.allocateFrame();
-        // FrameTupleAppender
-        appender = new FrameTupleAppender(ctx.getFrameSize());
-        // ArrayTupleBuilder
-        tb = new ArrayTupleBuilder(fieldCount);
-        // DataOutput
-        dos = tb.getDataOutput();
-
-        recDesc = new RecordDescriptor(recDescSers);
-
-        accessor.reset(frame);
-
-        tuple = new FrameTupleReference();
-
-        ITreeIndexAccessor indexAccessor_2 = btree_2.createAccessor();
-
-        // 10000
-        for (int i = 11; i < 51; i++) {
-
-            int f0 = i;
-            int f1 = 2;
-
-            tb.reset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f0, dos);
-            tb.addFieldEndOffset();
-            IntegerSerializerDeserializer.INSTANCE.serialize(f1, dos);
-            tb.addFieldEndOffset();
-
-            appender.reset(frame, true);
-            appender.append(tb.getFieldEndOffsets(), tb.getByteArray(), 0, tb.getSize());
-
-            tuple.reset(accessor, 0);
-
-            ArrayTupleReference t = new ArrayTupleReference();
-            t.reset(tb.getFieldEndOffsets(), tb.getByteArray());
-
-            if (i % 10 == 0) {
-                System.out.println("INSERTING " + i + " : " + f0 + " " + f1);
-            }
-
-            try {
-                indexAccessor_2.insert(t);
-            } catch (TreeIndexException e) {
-                e.printStackTrace();
-                System.out.println("Error: " + e);
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-        // btree_2.close();
-
-        // range search in [-1000, 1000]
-        LOGGER.info("RANGE SEARCH:");
-
-        ITreeIndexCursor rangeCursor = new LSMTreeRangeSearchCursor();
-
-        // build low and high keys
-        ArrayTupleBuilder ktb = new ArrayTupleBuilder(cmp.getKeyFieldCount());
-        DataOutput kdos = ktb.getDataOutput();
-
-        ISerializerDeserializer[] keyDescSers = { IntegerSerializerDeserializer.INSTANCE };
-        RecordDescriptor keyDesc = new RecordDescriptor(keyDescSers);
-        IFrameTupleAccessor keyAccessor = new FrameTupleAccessor(ctx.getFrameSize(), keyDesc);
-        keyAccessor.reset(frame);
-
-        appender.reset(frame, true);
-
-        // build and append low key
-        ktb.reset();
-        IntegerSerializerDeserializer.INSTANCE.serialize(-100, kdos);
-        ktb.addFieldEndOffset();
-        appender.append(ktb.getFieldEndOffsets(), ktb.getByteArray(), 0, ktb.getSize());
-
-        // build and append high key
-        ktb.reset();
-        IntegerSerializerDeserializer.INSTANCE.serialize(100, kdos);
-        ktb.addFieldEndOffset();
-        appender.append(ktb.getFieldEndOffsets(), ktb.getByteArray(), 0, ktb.getSize());
-
-        // create tuplereferences for search keys
-        FrameTupleReference lowKey = new FrameTupleReference();
-        lowKey.reset(keyAccessor, 0);
-
-        FrameTupleReference highKey = new FrameTupleReference();
-        highKey.reset(keyAccessor, 1);
-
-        IBinaryComparator[] searchCmps = cmps;
-        MultiComparator searchCmp = new MultiComparator(searchCmps);
-
-        RangePredicate rangePred = new RangePredicate(true, lowKey, highKey, true, true, searchCmp, searchCmp);
-        lsmTreeAccessor.search(rangeCursor, rangePred);
-
-        try {
-            while (rangeCursor.hasNext()) {
-                rangeCursor.next();
-                ITupleReference frameTuple = rangeCursor.getTuple();
-                String rec = TupleUtils.printTuple(frameTuple, recDescSers);
-                if (((LSMTypeAwareTupleReference) frameTuple).isDelete()) {
-                    System.out.println("del " + rec);
-                } else {
-                    System.out.println("ins " + rec);
-                }
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        } finally {
-            rangeCursor.close();
-        }
-
-        lsmtree.close();
-        bufferCache.closeFile(fileId);
-        memBufferCache.close();
-    }
-}
\ No newline at end of file
diff --git a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/perf/InMemoryBTreeRunner.java b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/perf/InMemoryBTreeRunner.java
index b6a5170..e411856 100644
--- a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/perf/InMemoryBTreeRunner.java
+++ b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/perf/InMemoryBTreeRunner.java
@@ -19,8 +19,8 @@
 import edu.uci.ics.hyracks.storage.am.common.tuples.TypeAwareTupleWriterFactory;
 import edu.uci.ics.hyracks.storage.am.lsmtree.datagen.DataGenThread;
 import edu.uci.ics.hyracks.storage.am.lsmtree.datagen.TupleBatch;
-import edu.uci.ics.hyracks.storage.am.lsmtree.impls.InMemoryBufferCache;
-import edu.uci.ics.hyracks.storage.am.lsmtree.impls.InMemoryFreePageManager;
+import edu.uci.ics.hyracks.storage.am.lsmtree.freepage.InMemoryBufferCache;
+import edu.uci.ics.hyracks.storage.am.lsmtree.freepage.InMemoryFreePageManager;
 import edu.uci.ics.hyracks.storage.common.buffercache.HeapBufferAllocator;
 import edu.uci.ics.hyracks.storage.common.buffercache.IBufferCache;
 import edu.uci.ics.hyracks.storage.common.buffercache.ICacheMemoryAllocator;
diff --git a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/perf/LSMTreeRunner.java b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/perf/LSMTreeRunner.java
index 0d537b6..b9175ad 100644
--- a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/perf/LSMTreeRunner.java
+++ b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/perf/LSMTreeRunner.java
@@ -15,7 +15,7 @@
 import edu.uci.ics.hyracks.storage.am.common.ophelpers.MultiComparator;
 import edu.uci.ics.hyracks.storage.am.lsmtree.datagen.DataGenThread;
 import edu.uci.ics.hyracks.storage.am.lsmtree.datagen.TupleBatch;
-import edu.uci.ics.hyracks.storage.am.lsmtree.impls.InMemoryBufferCacheFactory;
+import edu.uci.ics.hyracks.storage.am.lsmtree.freepage.InMemoryBufferCacheFactory;
 import edu.uci.ics.hyracks.storage.am.lsmtree.impls.LSMTree;
 import edu.uci.ics.hyracks.storage.common.buffercache.IBufferCache;
 import edu.uci.ics.hyracks.storage.common.file.IFileMapManager;
diff --git a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/perf/LSMTreeUtils.java b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/perf/LSMTreeUtils.java
index 22d006c..853f658 100644
--- a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/perf/LSMTreeUtils.java
+++ b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/perf/LSMTreeUtils.java
@@ -11,12 +11,12 @@
 import edu.uci.ics.hyracks.storage.am.common.api.ITreeIndexMetaDataFrameFactory;
 import edu.uci.ics.hyracks.storage.am.common.frames.LIFOMetaDataFrameFactory;
 import edu.uci.ics.hyracks.storage.am.common.ophelpers.MultiComparator;
+import edu.uci.ics.hyracks.storage.am.lsmtree.freepage.FreePageManagerFactory;
+import edu.uci.ics.hyracks.storage.am.lsmtree.freepage.InMemoryFreePageManager;
 import edu.uci.ics.hyracks.storage.am.lsmtree.impls.BTreeFactory;
-import edu.uci.ics.hyracks.storage.am.lsmtree.impls.FreePageManagerFactory;
-import edu.uci.ics.hyracks.storage.am.lsmtree.impls.InMemoryFreePageManager;
-import edu.uci.ics.hyracks.storage.am.lsmtree.impls.LSMEntireTupleWriterFactory;
 import edu.uci.ics.hyracks.storage.am.lsmtree.impls.LSMTree;
-import edu.uci.ics.hyracks.storage.am.lsmtree.impls.LSMTypeAwareTupleWriterFactory;
+import edu.uci.ics.hyracks.storage.am.lsmtree.tuples.LSMEntireTupleWriterFactory;
+import edu.uci.ics.hyracks.storage.am.lsmtree.tuples.LSMTypeAwareTupleWriterFactory;
 import edu.uci.ics.hyracks.storage.common.buffercache.IBufferCache;
 import edu.uci.ics.hyracks.storage.common.file.IFileMapManager;
 
diff --git a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/ILSMTreeTupleReference.java b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/tuples/ILSMTreeTupleReference.java
similarity index 76%
rename from hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/ILSMTreeTupleReference.java
rename to hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/tuples/ILSMTreeTupleReference.java
index 09ca355..68f2672 100644
--- a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/ILSMTreeTupleReference.java
+++ b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/tuples/ILSMTreeTupleReference.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.hyracks.storage.am.lsmtree.impls;
+package edu.uci.ics.hyracks.storage.am.lsmtree.tuples;
 
 import edu.uci.ics.hyracks.storage.am.common.api.ITreeIndexTupleReference;
 
diff --git a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMEntireTupleWriter.java b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/tuples/LSMEntireTupleWriter.java
similarity index 94%
rename from hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMEntireTupleWriter.java
rename to hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/tuples/LSMEntireTupleWriter.java
index 793ec04..e94ef1f 100644
--- a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMEntireTupleWriter.java
+++ b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/tuples/LSMEntireTupleWriter.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.hyracks.storage.am.lsmtree.impls;
+package edu.uci.ics.hyracks.storage.am.lsmtree.tuples;
 
 import edu.uci.ics.hyracks.api.dataflow.value.ITypeTraits;
 import edu.uci.ics.hyracks.dataflow.common.data.accessors.ITupleReference;
diff --git a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMEntireTupleWriterFactory.java b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/tuples/LSMEntireTupleWriterFactory.java
similarity index 91%
rename from hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMEntireTupleWriterFactory.java
rename to hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/tuples/LSMEntireTupleWriterFactory.java
index de7befa..6bbc7a6 100644
--- a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMEntireTupleWriterFactory.java
+++ b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/tuples/LSMEntireTupleWriterFactory.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.hyracks.storage.am.lsmtree.impls;
+package edu.uci.ics.hyracks.storage.am.lsmtree.tuples;
 
 import edu.uci.ics.hyracks.api.dataflow.value.ITypeTraits;
 import edu.uci.ics.hyracks.storage.am.common.api.ITreeIndexTupleWriter;
diff --git a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMTypeAwareTupleReference.java b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/tuples/LSMTypeAwareTupleReference.java
similarity index 93%
rename from hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMTypeAwareTupleReference.java
rename to hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/tuples/LSMTypeAwareTupleReference.java
index 90b564f..a5a3ee4 100644
--- a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMTypeAwareTupleReference.java
+++ b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/tuples/LSMTypeAwareTupleReference.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.hyracks.storage.am.lsmtree.impls;
+package edu.uci.ics.hyracks.storage.am.lsmtree.tuples;
 
 import edu.uci.ics.hyracks.api.dataflow.value.ITypeTraits;
 import edu.uci.ics.hyracks.storage.am.common.tuples.TypeAwareTupleReference;
diff --git a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMTypeAwareTupleReferenceTest.java b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/tuples/LSMTypeAwareTupleReferenceTest.java
similarity index 97%
rename from hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMTypeAwareTupleReferenceTest.java
rename to hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/tuples/LSMTypeAwareTupleReferenceTest.java
index 815187e..77fe2f3 100644
--- a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMTypeAwareTupleReferenceTest.java
+++ b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/tuples/LSMTypeAwareTupleReferenceTest.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.hyracks.storage.am.lsmtree.impls;
+package edu.uci.ics.hyracks.storage.am.lsmtree.tuples;
 
 import static org.junit.Assert.fail;
 
diff --git a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMTypeAwareTupleWriter.java b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/tuples/LSMTypeAwareTupleWriter.java
similarity index 96%
rename from hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMTypeAwareTupleWriter.java
rename to hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/tuples/LSMTypeAwareTupleWriter.java
index 25411a0..d4dd104 100644
--- a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMTypeAwareTupleWriter.java
+++ b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/tuples/LSMTypeAwareTupleWriter.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.hyracks.storage.am.lsmtree.impls;
+package edu.uci.ics.hyracks.storage.am.lsmtree.tuples;
 
 import edu.uci.ics.hyracks.api.dataflow.value.ITypeTraits;
 import edu.uci.ics.hyracks.dataflow.common.data.accessors.ITupleReference;
diff --git a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMTypeAwareTupleWriterFactory.java b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/tuples/LSMTypeAwareTupleWriterFactory.java
similarity index 92%
rename from hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMTypeAwareTupleWriterFactory.java
rename to hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/tuples/LSMTypeAwareTupleWriterFactory.java
index c2eb30e..d424a61 100644
--- a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMTypeAwareTupleWriterFactory.java
+++ b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/tuples/LSMTypeAwareTupleWriterFactory.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.hyracks.storage.am.lsmtree.impls;
+package edu.uci.ics.hyracks.storage.am.lsmtree.tuples;
 
 import edu.uci.ics.hyracks.api.dataflow.value.ITypeTraits;
 import edu.uci.ics.hyracks.storage.am.common.api.ITreeIndexTupleWriter;
diff --git a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMTypeAwareTupleWriterFactoryTest.java b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/tuples/LSMTypeAwareTupleWriterFactoryTest.java
similarity index 94%
rename from hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMTypeAwareTupleWriterFactoryTest.java
rename to hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/tuples/LSMTypeAwareTupleWriterFactoryTest.java
index 43879c0..a9cab04 100644
--- a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMTypeAwareTupleWriterFactoryTest.java
+++ b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/tuples/LSMTypeAwareTupleWriterFactoryTest.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.hyracks.storage.am.lsmtree.impls;
+package edu.uci.ics.hyracks.storage.am.lsmtree.tuples;
 
 import static org.junit.Assert.fail;
 
diff --git a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMTypeAwareTupleWriterTest.java b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/tuples/LSMTypeAwareTupleWriterTest.java
similarity index 98%
rename from hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMTypeAwareTupleWriterTest.java
rename to hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/tuples/LSMTypeAwareTupleWriterTest.java
index 91bb6e1..75e76bb 100644
--- a/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/impls/LSMTypeAwareTupleWriterTest.java
+++ b/hyracks-storage-am-lsmtree-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsmtree/tuples/LSMTypeAwareTupleWriterTest.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.hyracks.storage.am.lsmtree.impls;
+package edu.uci.ics.hyracks.storage.am.lsmtree.tuples;
 
 import static org.junit.Assert.fail;