You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@asterixdb.apache.org by AsterixDB Code Review <do...@asterix-gerrit.ics.uci.edu> on 2025/06/17 16:10:33 UTC
Change in asterixdb[ionic]: [ASTERIXDB-3601][STO][CONF] adding cofig for selecting pagezero writer
From Ritik Raj <ri...@couchbase.com>:
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 <ri...@couchbase.com>
Gerrit-MessageType: newchange