>From Ritik Raj <[email protected]>:

Ritik Raj has uploaded this change for review. ( 
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19950 )


Change subject: [ASTERIXDB-3601][STO][CONF] adding cofig for selecting pagezero 
writer
......................................................................

[ASTERIXDB-3601][STO][CONF] adding cofig for selecting pagezero writer

Change-Id: Ifb612c025c41929a8d6ee44d9761286345ca85b6
---
M 
asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/flush/FlushColumnTupleWriter.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/IColumnPageZeroWriter.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/api/AbstractColumnTupleWriter.java
M 
asterixdb/asterix-column/src/test/java/org/apache/asterix/column/test/bytes/AbstractBytesTest.java
M 
asterixdb/asterix-column/src/main/java/org/apache/asterix/column/zero/PageZeroWriterFlavorSelector.java
M 
asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/merge/MergeColumnTupleWriter.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/IColumnPageZeroWriterFlavorSelector.java
M 
hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/controllers/NCConfig.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/ColumnBTreeBulkloader.java
9 files changed, 113 insertions(+), 53 deletions(-)



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

diff --git 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/flush/FlushColumnTupleWriter.java
 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/flush/FlushColumnTupleWriter.java
index c83d9d7..018c604 100644
--- 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/flush/FlushColumnTupleWriter.java
+++ 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/flush/FlushColumnTupleWriter.java
@@ -145,26 +145,39 @@

     @Override
     public int getPageZeroWriterOccupiedSpace(int 
maxColumnsInPageZerothSegment, boolean includeCurrentTupleColumns,
-            boolean adaptive) {
-        int totalNumberOfColumns = 
getAbsoluteNumberOfColumns(includeCurrentTupleColumns);
-        totalNumberOfColumns = Math.min(totalNumberOfColumns, 
maxColumnsInPageZerothSegment);
+            IColumnPageZeroWriter.ColumnPageZeroWriterType writerType) {
+        int spaceOccupiedByDefaultWriter;
+        int spaceOccupiedBySparseWriter;

-        int spaceOccupiedByDefaultWriter = 
DefaultColumnMultiPageZeroWriter.EXTENDED_HEADER_SIZE + totalNumberOfColumns
-                * (DefaultColumnPageZeroWriter.COLUMN_OFFSET_SIZE + 
DefaultColumnPageZeroWriter.FILTER_SIZE);
-
-        if (!adaptive) {
-            // go for default multipage writer
+        if (writerType == 
IColumnPageZeroWriter.ColumnPageZeroWriterType.DEFAULT) {
+            // go for default multi-page writer
+            spaceOccupiedByDefaultWriter =
+                    
getSpaceOccupiedByDefaultWriter(maxColumnsInPageZerothSegment, 
includeCurrentTupleColumns);
             return spaceOccupiedByDefaultWriter;
+        } else if (writerType == 
IColumnPageZeroWriter.ColumnPageZeroWriterType.SPARSE) {
+            // Maximum space occupied by the columns = 
maxColumnsInPageZerothSegment * (offset + filter size)
+            spaceOccupiedBySparseWriter = 
getSpaceOccupiedBySparseWriter(maxColumnsInPageZerothSegment);
+            return spaceOccupiedBySparseWriter;
         }

-        // Maximum space occupied by the columns = 
maxColumnsInPageZerothSegment * (offset + filter size)
-        int spaceOccupiedBySparseWriter = 
getSpaceOccupiedBySparseWriter(maxColumnsInPageZerothSegment);
+        spaceOccupiedByDefaultWriter =
+                getSpaceOccupiedByDefaultWriter(maxColumnsInPageZerothSegment, 
includeCurrentTupleColumns);
+        spaceOccupiedBySparseWriter = 
getSpaceOccupiedBySparseWriter(maxColumnsInPageZerothSegment);
         
pageZeroWriterFlavorSelector.switchPageZeroWriterIfNeeded(spaceOccupiedByDefaultWriter,
-                spaceOccupiedBySparseWriter, adaptive);
+                spaceOccupiedBySparseWriter);

         return Math.min(spaceOccupiedBySparseWriter, 
spaceOccupiedByDefaultWriter);
     }

+    private int getSpaceOccupiedByDefaultWriter(int 
maxColumnsInPageZerothSegment, boolean includeCurrentTupleColumns) {
+        int spaceOccupiedByDefaultWriter;
+        int totalNumberOfColumns = 
getAbsoluteNumberOfColumns(includeCurrentTupleColumns);
+        totalNumberOfColumns = Math.min(totalNumberOfColumns, 
maxColumnsInPageZerothSegment);
+        spaceOccupiedByDefaultWriter = 
DefaultColumnMultiPageZeroWriter.EXTENDED_HEADER_SIZE + totalNumberOfColumns
+                * (DefaultColumnPageZeroWriter.COLUMN_OFFSET_SIZE + 
DefaultColumnPageZeroWriter.FILTER_SIZE);
+        return spaceOccupiedByDefaultWriter;
+    }
+
     private int getSpaceOccupiedBySparseWriter(int 
maxColumnsInPageZerothSegment) {
         int presentColumns = presentColumnsIndexes.size() + 
transformerForCurrentTuple.getExtraColumnsCount();
         int numberOfPagesRequired = (int) Math.ceil(
diff --git 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/merge/MergeColumnTupleWriter.java
 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/merge/MergeColumnTupleWriter.java
index 8688a66..a71fc2a 100644
--- 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/merge/MergeColumnTupleWriter.java
+++ 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/merge/MergeColumnTupleWriter.java
@@ -163,27 +163,38 @@

     @Override
     public int getPageZeroWriterOccupiedSpace(int 
maxColumnsInPageZerothSegment, boolean includeCurrentTupleColumns,
-            boolean adaptive) {
-        int totalNumberOfColumns = 
getAbsoluteNumberOfColumns(includeCurrentTupleColumns);
-        totalNumberOfColumns = Math.min(totalNumberOfColumns, 
maxColumnsInPageZerothSegment);
+            IColumnPageZeroWriter.ColumnPageZeroWriterType writerType) {
+        int spaceOccupiedByDefaultWriter;
+        int spaceOccupiedBySparseWriter;

-        int spaceOccupiedByDefaultWriter = 
DefaultColumnMultiPageZeroWriter.EXTENDED_HEADER_SIZE + totalNumberOfColumns
-                * (DefaultColumnPageZeroWriter.COLUMN_OFFSET_SIZE + 
DefaultColumnPageZeroWriter.FILTER_SIZE);
-
-        if (!adaptive) {
-            // go for default multipage writer
+        if (writerType == 
IColumnPageZeroWriter.ColumnPageZeroWriterType.DEFAULT) {
+            // go for default multi-page writer
+            spaceOccupiedByDefaultWriter =
+                    
getSpaceOccupiedByDefaultWriter(maxColumnsInPageZerothSegment, 
includeCurrentTupleColumns);
             return spaceOccupiedByDefaultWriter;
+        } else if (writerType == 
IColumnPageZeroWriter.ColumnPageZeroWriterType.SPARSE) {
+            // Maximum space occupied by the columns = 
maxColumnsInPageZerothSegment * (offset + filter size)
+            spaceOccupiedBySparseWriter = 
getSpaceOccupiedBySparseWriter(maxColumnsInPageZerothSegment);
+            return spaceOccupiedBySparseWriter;
         }

-        int presentColumns = presentColumnsIndexes.size();
-
-        // space occupied by the sparse writer
-        int spaceOccupiedBySparseWriter = 
getSpaceOccupiedBySparseWriter(maxColumnsInPageZerothSegment);
+        spaceOccupiedBySparseWriter = 
getSpaceOccupiedBySparseWriter(maxColumnsInPageZerothSegment);
+        spaceOccupiedByDefaultWriter =
+                getSpaceOccupiedByDefaultWriter(maxColumnsInPageZerothSegment, 
includeCurrentTupleColumns);
         
pageZeroWriterFlavorSelector.switchPageZeroWriterIfNeeded(spaceOccupiedByDefaultWriter,
-                spaceOccupiedBySparseWriter, adaptive);
+                spaceOccupiedBySparseWriter);
         return Math.min(spaceOccupiedBySparseWriter, 
spaceOccupiedByDefaultWriter);
     }

+    private int getSpaceOccupiedByDefaultWriter(int 
maxColumnsInPageZerothSegment, boolean includeCurrentTupleColumns) {
+        int spaceOccupiedByDefaultWriter;
+        int totalNumberOfColumns = 
getAbsoluteNumberOfColumns(includeCurrentTupleColumns);
+        totalNumberOfColumns = Math.min(totalNumberOfColumns, 
maxColumnsInPageZerothSegment);
+        spaceOccupiedByDefaultWriter = 
DefaultColumnMultiPageZeroWriter.EXTENDED_HEADER_SIZE + totalNumberOfColumns
+                * (DefaultColumnPageZeroWriter.COLUMN_OFFSET_SIZE + 
DefaultColumnPageZeroWriter.FILTER_SIZE);
+        return spaceOccupiedByDefaultWriter;
+    }
+
     private int getSpaceOccupiedBySparseWriter(int 
maxColumnsInPageZerothSegment) {
         int presentColumns = presentColumnsIndexes.size();
         int numberOfPagesRequired = (int) Math.ceil(
diff --git 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/zero/PageZeroWriterFlavorSelector.java
 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/zero/PageZeroWriterFlavorSelector.java
index d1c719b..add4039 100644
--- 
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/zero/PageZeroWriterFlavorSelector.java
+++ 
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/zero/PageZeroWriterFlavorSelector.java
@@ -40,11 +40,11 @@

 /**
  * Selector that chooses between different page zero writer implementations 
based on space efficiency.
- *
+ *<p>
  * This class implements an optimization strategy for sparse columns:
  * - Default writer: Allocates space for all columns in the schema (suitable 
for dense data)
  * - Sparse writer: Only allocates space for present columns (suitable for 
sparse data)
- *
+ *<p>
  * The selector automatically chooses the most space-efficient option based on 
the actual
  * space requirements of each approach.
  */
@@ -63,22 +63,16 @@

     /**
      * Selects the optimal page zero writer based on space efficiency.
-     *
+     * <p>
      * This method compares the space requirements of both writer types and 
selects
      * the one that uses less space. This optimization is particularly 
beneficial
      * for sparse datasets where many columns may be null or missing.
-     *
+     * </p>
      * @param spaceOccupiedByDefaultWriter Space in bytes required by the 
default writer
      * @param spaceOccupiedBySparseWriter Space in bytes required by the 
sparse writer
      */
     @Override
-    public void switchPageZeroWriterIfNeeded(int spaceOccupiedByDefaultWriter, 
int spaceOccupiedBySparseWriter,
-            boolean adaptive) {
-        if (!adaptive) {
-            // If not adaptive, always use the default writer
-            writerFlag = MULTI_PAGE_DEFAULT_WRITER_FLAG;
-            return;
-        }
+    public void switchPageZeroWriterIfNeeded(int spaceOccupiedByDefaultWriter, 
int spaceOccupiedBySparseWriter) {
         if (spaceOccupiedByDefaultWriter <= spaceOccupiedBySparseWriter) {
             // Default writer is more space-efficient (or equal), use it
             writerFlag = MULTI_PAGE_DEFAULT_WRITER_FLAG;
@@ -88,10 +82,15 @@
         }
     }

+    @Override
+    public void setPageZeroWriterFlag(byte writerFlag) {
+        this.writerFlag = writerFlag;
+    }
+
     /**
      * Returns the currently selected page zero writer instance.
      * Writers are cached to avoid repeated object creation.
-     *
+     *
      * @return the selected writer instance
      * @throws IllegalStateException if an unsupported writer flag is 
encountered
      */
@@ -111,7 +110,7 @@
      * Creates a page zero reader instance based on the provided flag.
      * This method is used during deserialization to create the appropriate 
reader
      * for the writer type that was used during serialization.
-     *
+     *
      * @param flag The flag code identifying the writer type 
(DEFAULT_WRITER_FLAG=default, SPARSE_WRITER_FLAG=sparse)
      * @return the appropriate reader instance
      * @throws IllegalStateException if an unsupported reader flag is 
encountered
diff --git 
a/asterixdb/asterix-column/src/test/java/org/apache/asterix/column/test/bytes/AbstractBytesTest.java
 
b/asterixdb/asterix-column/src/test/java/org/apache/asterix/column/test/bytes/AbstractBytesTest.java
index faa2a87..6e85d29 100644
--- 
a/asterixdb/asterix-column/src/test/java/org/apache/asterix/column/test/bytes/AbstractBytesTest.java
+++ 
b/asterixdb/asterix-column/src/test/java/org/apache/asterix/column/test/bytes/AbstractBytesTest.java
@@ -62,6 +62,7 @@
 import 
org.apache.hyracks.storage.am.lsm.btree.column.api.AbstractColumnTupleWriter;
 import 
org.apache.hyracks.storage.am.lsm.btree.column.api.IColumnWriteMultiPageOp;
 import 
org.apache.hyracks.storage.am.lsm.btree.column.cloud.buffercache.write.DefaultColumnWriteContext;
+import 
org.apache.hyracks.storage.am.lsm.btree.column.impls.btree.IColumnPageZeroWriter;
 import org.apache.hyracks.util.StorageUtil;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
@@ -202,7 +203,8 @@
         //Reserved for the number of pages
         int requiredFreeSpace = HEADER_SIZE;
         //Columns' Offsets
-        requiredFreeSpace += columnWriter.getPageZeroWriterOccupiedSpace(100, 
true, false);
+        requiredFreeSpace += columnWriter.getPageZeroWriterOccupiedSpace(100, 
true,
+                IColumnPageZeroWriter.ColumnPageZeroWriterType.DEFAULT);
         //Occupied space from previous writes
         requiredFreeSpace += columnWriter.getPrimaryKeysEstimatedSize();
         //New tuple required space
diff --git 
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/controllers/NCConfig.java
 
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/controllers/NCConfig.java
index 0e7de33..9a8d9ac 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/controllers/NCConfig.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/controllers/NCConfig.java
@@ -108,7 +108,7 @@
                         
.joinPath(appConfig.getString(ControllerConfig.Option.DEFAULT_DIR), "passwd"),
                 ControllerConfig.Option.DEFAULT_DIR.cmdline() + "/passwd"),
         STORAGE_MAX_COLUMNS_IN_ZEROTH_SEGMENT(INTEGER_BYTE_UNIT, 5000),
-        ADAPTIVE_PAGE_ZERO_WRITER_SELECTION(BOOLEAN, false);
+        STORAGE_PAGE_ZERO_WRITER(STRING, "default");

         private final IOptionType parser;
         private final String defaultValueDescription;
@@ -261,9 +261,9 @@
                     return "The maximum time to wait for the tasks to be 
aborted";
                 case STORAGE_MAX_COLUMNS_IN_ZEROTH_SEGMENT:
                     return "The maximum number of columns in zero segment 
(default: 5000).";
-                case ADAPTIVE_PAGE_ZERO_WRITER_SELECTION:
-                    return "The config to choose between writers dynamically 
(default: false, i.e. use the "
-                            + "default writer for all segments).";
+                case STORAGE_PAGE_ZERO_WRITER:
+                    return "The config to choose between writers for page 
zero. (Possible values: default, sparse, adaptive), "
+                            + "(default value: default)";
                 default:
                     throw new IllegalStateException("Not yet implemented: " + 
this);
             }
@@ -647,7 +647,7 @@
         return appConfig.getInt(Option.STORAGE_MAX_COLUMNS_IN_ZEROTH_SEGMENT);
     }

-    public boolean isAdaptivePageZeroWriterSelection() {
-        return 
appConfig.getBoolean(Option.ADAPTIVE_PAGE_ZERO_WRITER_SELECTION);
+    public String getStoragePageZeroWriter() {
+        return appConfig.getString(Option.STORAGE_PAGE_ZERO_WRITER);
     }
 }
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/api/AbstractColumnTupleWriter.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/api/AbstractColumnTupleWriter.java
index 01661e7..bb54a28 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/api/AbstractColumnTupleWriter.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/api/AbstractColumnTupleWriter.java
@@ -65,7 +65,7 @@
      * @return the size needed to store columns' offsets
      */
     public abstract int getPageZeroWriterOccupiedSpace(int 
maxColumnsInPageZerothSegment,
-            boolean includeCurrentTupleColumns, boolean adaptive);
+            boolean includeCurrentTupleColumns, 
IColumnPageZeroWriter.ColumnPageZeroWriterType adaptive);

     /**
      * @return maximum number of tuples to be stored per page (i.e., page0)
@@ -112,4 +112,10 @@
      * @return
      */
     public abstract IColumnPageZeroWriterFlavorSelector 
getColumnPageZeroWriterFlavorSelector();
+
+    public void setWriterType(IColumnPageZeroWriter.ColumnPageZeroWriterType 
pageZeroWriterType) {
+        if (pageZeroWriterType != 
IColumnPageZeroWriter.ColumnPageZeroWriterType.ADAPTIVE) {
+            
getColumnPageZeroWriterFlavorSelector().setPageZeroWriterFlag(pageZeroWriterType.getWriterFlag());
+        }
+    }
 }
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/ColumnBTreeBulkloader.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/ColumnBTreeBulkloader.java
index 7549059..beb1a64 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/ColumnBTreeBulkloader.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/ColumnBTreeBulkloader.java
@@ -57,7 +57,7 @@
     private final ISplitKey lowKey;
     private final IColumnWriteContext columnWriteContext;
     private final int maxColumnsInPageZerothSegment;
-    private final boolean adaptiveWriter;
+    private final IColumnPageZeroWriter.ColumnPageZeroWriterType 
pageZeroWriterType;
     private boolean setLowKey;
     private int tupleCount;

@@ -87,7 +87,8 @@

         // Writer config
         maxColumnsInPageZerothSegment = 
storageConfig.getStorageMaxColumnsInZerothSegment();
-        adaptiveWriter = storageConfig.isAdaptivePageZeroWriterSelection();
+        pageZeroWriterType =
+                
IColumnPageZeroWriter.ColumnPageZeroWriterType.valueOf(storageConfig.getStoragePageZeroWriter());

         // For logging. Starts with 1 for page0
         numberOfPagesInCurrentLeafNode = 1;
@@ -119,6 +120,8 @@
     private boolean isFull(ITupleReference tuple) throws HyracksDataException {
         if (tupleCount == 0) {
             columnWriter.updateColumnMetadataForCurrentTuple(tuple);
+            // this is for non-adaptive case.
+            columnWriter.setWriterType(pageZeroWriterType);
             return false;
         } else if (tupleCount >= columnWriter.getMaxNumberOfTuples()) {
             //We reached the maximum number of tuples
@@ -127,7 +130,7 @@
         //Columns' Offsets
         columnWriter.updateColumnMetadataForCurrentTuple(tuple);
         int requiredFreeSpace =
-                
columnWriter.getPageZeroWriterOccupiedSpace(maxColumnsInPageZerothSegment, 
true, adaptiveWriter);
+                
columnWriter.getPageZeroWriterOccupiedSpace(maxColumnsInPageZerothSegment, 
true, pageZeroWriterType);
         //Occupied space from previous writes
         requiredFreeSpace += columnWriter.getPrimaryKeysEstimatedSize();
         //min and max tuples' sizes
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/IColumnPageZeroWriter.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/IColumnPageZeroWriter.java
index 1008d09..e8f6f35 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/IColumnPageZeroWriter.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/IColumnPageZeroWriter.java
@@ -49,6 +49,22 @@

     int MIN_COLUMN_SPACE = 4 + 16; // offset + filter size

+    enum ColumnPageZeroWriterType {
+        DEFAULT((byte) 2), // multi-page default page zero
+        SPARSE((byte) 3), // multi-page sparse page zero
+        ADAPTIVE((byte) -1); // adaptive writer that switches between default 
and sparse based on space efficiency
+
+        private final byte writerFlag;
+
+        ColumnPageZeroWriterType(byte writerFlag) {
+            this.writerFlag = writerFlag;
+        }
+
+        public byte getWriterFlag() {
+            return writerFlag;
+        }
+    }
+
     /**
      * Initializes the writer with page zero buffer and column information.
      *
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/IColumnPageZeroWriterFlavorSelector.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/IColumnPageZeroWriterFlavorSelector.java
index fa8e3f6..e3f1098 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/IColumnPageZeroWriterFlavorSelector.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/IColumnPageZeroWriterFlavorSelector.java
@@ -34,16 +34,15 @@

     /**
      * Evaluates and switches the page zero writer based on space efficiency.
-     *
+     * <p>
      * This method compares the space requirements of both writer 
implementations
      * and selects the one that uses less space. The decision is made 
dynamically
      * for each batch of data to optimize storage utilization.
-     *
+     *
      * @param spaceOccupiedByDefaultWriter Space in bytes required by the 
default writer
-     * @param spaceOccupiedBySparseWriter Space in bytes required by the 
sparse writer
+     * @param spaceOccupiedBySparseWriter  Space in bytes required by the 
sparse writer
      */
-    void switchPageZeroWriterIfNeeded(int spaceOccupiedByDefaultWriter, int 
spaceOccupiedBySparseWriter,
-            boolean adaptive);
+    void switchPageZeroWriterIfNeeded(int spaceOccupiedByDefaultWriter, int 
spaceOccupiedBySparseWriter);

     /**
      * Creates the appropriate page zero reader for the given writer type.
@@ -58,6 +57,8 @@
      */
     IColumnPageZeroReader createPageZeroReader(byte flag, int capacity);

+    void setPageZeroWriterFlag(byte writerFlag);
+
     /**
      * Returns the currently selected page zero writer instance.
      *

--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19950
To unsubscribe, or for help writing mail filters, visit 
https://asterix-gerrit.ics.uci.edu/settings

Gerrit-Project: asterixdb
Gerrit-Branch: ionic
Gerrit-Change-Id: Ifb612c025c41929a8d6ee44d9761286345ca85b6
Gerrit-Change-Number: 19950
Gerrit-PatchSet: 1
Gerrit-Owner: Ritik Raj <[email protected]>
Gerrit-MessageType: newchange

Reply via email to