This is an automated email from the ASF dual-hosted git repository.

eldenmoon pushed a commit to branch cs_opt_version-3.1
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/cs_opt_version-3.1 by this 
push:
     new f3048ce50ad fix cloud meta for segment v3 (#58590)
f3048ce50ad is described below

commit f3048ce50ad61e5270f6e8a0ad7a07d7e11aad40
Author: lihangyu <[email protected]>
AuthorDate: Tue Dec 2 05:05:16 2025 +0800

    fix cloud meta for segment v3 (#58590)
---
 .../org/apache/doris/alter/CloudRollupJobV2.java   | 43 ++++++++++-----------
 .../apache/doris/alter/CloudSchemaChangeJobV2.java |  2 +-
 .../apache/doris/cloud/backup/CloudRestoreJob.java | 44 +++++++++++-----------
 .../cloud/common/util/CloudPropertyAnalyzer.java   |  1 -
 .../cloud/datasource/CloudInternalCatalog.java     | 15 +++++++-
 .../ext_meta/test_storage_format_v2_1.groovy       |  6 +--
 6 files changed, 62 insertions(+), 49 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/alter/CloudRollupJobV2.java 
b/fe/fe-core/src/main/java/org/apache/doris/alter/CloudRollupJobV2.java
index 4ef9ab42780..fcf7409c430 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/alter/CloudRollupJobV2.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/alter/CloudRollupJobV2.java
@@ -214,27 +214,28 @@ public class CloudRollupJobV2 extends RollupJobV2 {
             for (Tablet rollupTablet : rollupIndex.getTablets()) {
                 OlapFile.TabletMetaCloudPB.Builder builder =
                         ((CloudInternalCatalog) 
Env.getCurrentInternalCatalog())
-                            .createTabletMetaBuilder(tableId, rollupIndexId,
-                            partitionId, rollupTablet, tabletType, 
rollupSchemaHash,
-                                    rollupKeysType, rollupShortKeyColumnCount, 
tbl.getCopiedBfColumns(),
-                                    tbl.getBfFpp(), null, rollupSchema,
-                                    tbl.getDataSortInfo(), 
tbl.getCompressionType(), tbl.getStoragePolicy(),
-                                    tbl.isInMemory(), true,
-                                    tbl.getName(), tbl.getTTLSeconds(),
-                                    tbl.getEnableUniqueKeyMergeOnWrite(), 
tbl.storeRowColumn(),
-                                    tbl.getBaseSchemaVersion(), 
tbl.getCompactionPolicy(),
-                                    
tbl.getTimeSeriesCompactionGoalSizeMbytes(),
-                                    
tbl.getTimeSeriesCompactionFileCountThreshold(),
-                                    
tbl.getTimeSeriesCompactionTimeThresholdSeconds(),
-                                    
tbl.getTimeSeriesCompactionEmptyRowsetsThreshold(),
-                                    
tbl.getTimeSeriesCompactionLevelThreshold(),
-                                    tbl.disableAutoCompaction(),
-                                    
tbl.getRowStoreColumnsUniqueIds(rowStoreColumns),
-                                    tbl.getEnableMowLightDelete(), null,
-                                    tbl.rowStorePageSize(),
-                                    tbl.variantEnableFlattenNested(),
-                                    tbl.storagePageSize(), 
tbl.getTDEAlgorithmPB(),
-                                    tbl.storageDictPageSize(), true);
+                                .createTabletMetaBuilder(tableId, 
rollupIndexId,
+                                        partitionId, rollupTablet, tabletType, 
rollupSchemaHash,
+                                        rollupKeysType, 
rollupShortKeyColumnCount, tbl.getCopiedBfColumns(),
+                                        tbl.getBfFpp(), null, rollupSchema,
+                                        tbl.getDataSortInfo(), 
tbl.getCompressionType(), tbl.getStorageFormat(),
+                                        tbl.getStoragePolicy(),
+                                        tbl.isInMemory(), true,
+                                        tbl.getName(), tbl.getTTLSeconds(),
+                                        tbl.getEnableUniqueKeyMergeOnWrite(), 
tbl.storeRowColumn(),
+                                        tbl.getBaseSchemaVersion(), 
tbl.getCompactionPolicy(),
+                                        
tbl.getTimeSeriesCompactionGoalSizeMbytes(),
+                                        
tbl.getTimeSeriesCompactionFileCountThreshold(),
+                                        
tbl.getTimeSeriesCompactionTimeThresholdSeconds(),
+                                        
tbl.getTimeSeriesCompactionEmptyRowsetsThreshold(),
+                                        
tbl.getTimeSeriesCompactionLevelThreshold(),
+                                        tbl.disableAutoCompaction(),
+                                        
tbl.getRowStoreColumnsUniqueIds(rowStoreColumns),
+                                        tbl.getEnableMowLightDelete(), null,
+                                        tbl.rowStorePageSize(),
+                                        tbl.variantEnableFlattenNested(),
+                                        tbl.storagePageSize(), 
tbl.getTDEAlgorithmPB(),
+                                        tbl.storageDictPageSize(), true);
                 requestBuilder.addTabletMetas(builder);
             } // end for rollupTablets
             requestBuilder.setDbId(dbId);
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/alter/CloudSchemaChangeJobV2.java 
b/fe/fe-core/src/main/java/org/apache/doris/alter/CloudSchemaChangeJobV2.java
index 50a7f2c33da..2a2b32e693d 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/alter/CloudSchemaChangeJobV2.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/alter/CloudSchemaChangeJobV2.java
@@ -258,7 +258,7 @@ public class CloudSchemaChangeJobV2 extends 
SchemaChangeJobV2 {
                                             
tbl.getPartitionInfo().getTabletType(partitionId),
                                             shadowSchemaHash, originKeysType, 
shadowShortKeyColumnCount, bfColumns,
                                             bfFpp, tabletIndexes, 
shadowSchema, tbl.getDataSortInfo(),
-                                            tbl.getCompressionType(),
+                                            tbl.getCompressionType(), 
tbl.getStorageFormat(),
                                             tbl.getStoragePolicy(), 
tbl.isInMemory(), true,
                                             tbl.getName(), tbl.getTTLSeconds(),
                                             
tbl.getEnableUniqueKeyMergeOnWrite(), tbl.storeRowColumn(),
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/cloud/backup/CloudRestoreJob.java 
b/fe/fe-core/src/main/java/org/apache/doris/cloud/backup/CloudRestoreJob.java
index 4f0a7bce1b9..1a1bfb296ee 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/cloud/backup/CloudRestoreJob.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/cloud/backup/CloudRestoreJob.java
@@ -375,27 +375,29 @@ public class CloudRestoreJob extends RestoreJob {
                     try {
                         requestBuilder.addTabletMetas(((CloudInternalCatalog) 
Env.getCurrentInternalCatalog())
                                 .createTabletMetaBuilder(localTbl.getId(), 
restoredIdx.getId(),
-                                    restorePart.getId(), restoreTablet,
-                                    
localTbl.getPartitionInfo().getTabletType(restorePart.getId()),
-                                    indexMeta.getSchemaHash(), 
indexMeta.getKeysType(),
-                                    indexMeta.getShortKeyColumnCount(), 
localTbl.getCopiedBfColumns(),
-                                    localTbl.getBfFpp(), indexes, 
indexMeta.getSchema(), localTbl.getDataSortInfo(),
-                                    localTbl.getCompressionType(), 
localTbl.getStoragePolicy(),
-                                    localTbl.isInMemory(), false, 
localTbl.getName(), localTbl.getTTLSeconds(),
-                                    localTbl.getEnableUniqueKeyMergeOnWrite(), 
localTbl.storeRowColumn(),
-                                    localTbl.getBaseSchemaVersion(), 
localTbl.getCompactionPolicy(),
-                                    
localTbl.getTimeSeriesCompactionGoalSizeMbytes(),
-                                    
localTbl.getTimeSeriesCompactionFileCountThreshold(),
-                                    
localTbl.getTimeSeriesCompactionTimeThresholdSeconds(),
-                                    
localTbl.getTimeSeriesCompactionEmptyRowsetsThreshold(),
-                                    
localTbl.getTimeSeriesCompactionLevelThreshold(), 
localTbl.disableAutoCompaction(),
-                                    
localTbl.getRowStoreColumnsUniqueIds(rowStoreColumns),
-                                    localTbl.getEnableMowLightDelete(),
-                                    
localTbl.getInvertedIndexFileStorageFormat(),
-                                    localTbl.rowStorePageSize(),
-                                    localTbl.variantEnableFlattenNested(),
-                                    localTbl.storagePageSize(), 
localTbl.getTDEAlgorithmPB(),
-                                    localTbl.storageDictPageSize(), false));
+                                        restorePart.getId(), restoreTablet,
+                                        
localTbl.getPartitionInfo().getTabletType(restorePart.getId()),
+                                        indexMeta.getSchemaHash(), 
indexMeta.getKeysType(),
+                                        indexMeta.getShortKeyColumnCount(), 
localTbl.getCopiedBfColumns(),
+                                        localTbl.getBfFpp(), indexes, 
indexMeta.getSchema(), localTbl.getDataSortInfo(),
+                                        localTbl.getCompressionType(), 
localTbl.getStorageFormat(),
+                                        localTbl.getStoragePolicy(),
+                                        localTbl.isInMemory(), false, 
localTbl.getName(), localTbl.getTTLSeconds(),
+                                        
localTbl.getEnableUniqueKeyMergeOnWrite(), localTbl.storeRowColumn(),
+                                        localTbl.getBaseSchemaVersion(), 
localTbl.getCompactionPolicy(),
+                                        
localTbl.getTimeSeriesCompactionGoalSizeMbytes(),
+                                        
localTbl.getTimeSeriesCompactionFileCountThreshold(),
+                                        
localTbl.getTimeSeriesCompactionTimeThresholdSeconds(),
+                                        
localTbl.getTimeSeriesCompactionEmptyRowsetsThreshold(),
+                                        
localTbl.getTimeSeriesCompactionLevelThreshold(),
+                                        localTbl.disableAutoCompaction(),
+                                        
localTbl.getRowStoreColumnsUniqueIds(rowStoreColumns),
+                                        localTbl.getEnableMowLightDelete(),
+                                        
localTbl.getInvertedIndexFileStorageFormat(),
+                                        localTbl.rowStorePageSize(),
+                                        localTbl.variantEnableFlattenNested(),
+                                        localTbl.storagePageSize(), 
localTbl.getTDEAlgorithmPB(),
+                                        localTbl.storageDictPageSize(), 
false));
                         // In cloud mode all storage medium will be saved to 
HDD.
                         TabletMeta tabletMeta = new TabletMeta(db.getId(), 
localTbl.getId(), restorePart.getId(),
                                 restoredIdx.getId(), 
indexMeta.getSchemaHash(), TStorageMedium.HDD);
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/cloud/common/util/CloudPropertyAnalyzer.java
 
b/fe/fe-core/src/main/java/org/apache/doris/cloud/common/util/CloudPropertyAnalyzer.java
index b41570a25fc..7ac160f4b18 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/cloud/common/util/CloudPropertyAnalyzer.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/cloud/common/util/CloudPropertyAnalyzer.java
@@ -30,7 +30,6 @@ public class CloudPropertyAnalyzer extends PropertyAnalyzer {
         forceProperties = ImmutableList.of(
                 RewriteProperty.delete(PropertyAnalyzer.PROPERTIES_INMEMORY),
                 
RewriteProperty.delete(PropertyAnalyzer.PROPERTIES_STORAGE_MEDIUM),
-                
RewriteProperty.replace(PropertyAnalyzer.PROPERTIES_STORAGE_FORMAT, "V2"),
                 
RewriteProperty.delete(PropertyAnalyzer.PROPERTIES_STORAGE_POLICY),
                 
RewriteProperty.delete(PropertyAnalyzer.PROPERTIES_STORAGE_COOLDOWN_TIME),
                 
RewriteProperty.delete(PropertyAnalyzer.PROPERTIES_MIN_LOAD_REPLICA_NUM),
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/cloud/datasource/CloudInternalCatalog.java
 
b/fe/fe-core/src/main/java/org/apache/doris/cloud/datasource/CloudInternalCatalog.java
index 9d516880818..457a5ca1f13 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/cloud/datasource/CloudInternalCatalog.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/cloud/datasource/CloudInternalCatalog.java
@@ -65,6 +65,7 @@ import org.apache.doris.rpc.RpcException;
 import org.apache.doris.thrift.TCompressionType;
 import org.apache.doris.thrift.TInvertedIndexFileStorageFormat;
 import org.apache.doris.thrift.TSortType;
+import org.apache.doris.thrift.TStorageFormat;
 import org.apache.doris.thrift.TTabletType;
 
 import com.google.common.base.Preconditions;
@@ -165,7 +166,8 @@ public class CloudInternalCatalog extends InternalCatalog {
                 OlapFile.TabletMetaCloudPB.Builder builder = 
createTabletMetaBuilder(tbl.getId(), indexId,
                         partitionId, tablet, tabletType, schemaHash, keysType, 
shortKeyColumnCount,
                         bfColumns, tbl.getBfFpp(), indexes, columns, 
tbl.getDataSortInfo(),
-                        tbl.getCompressionType(), storagePolicy, isInMemory, 
false, tbl.getName(), tbl.getTTLSeconds(),
+                        tbl.getCompressionType(), tbl.getStorageFormat(), 
storagePolicy, isInMemory, false,
+                        tbl.getName(), tbl.getTTLSeconds(),
                         tbl.getEnableUniqueKeyMergeOnWrite(), 
tbl.storeRowColumn(), indexMeta.getSchemaVersion(),
                         tbl.getCompactionPolicy(), 
tbl.getTimeSeriesCompactionGoalSizeMbytes(),
                         tbl.getTimeSeriesCompactionFileCountThreshold(),
@@ -203,7 +205,7 @@ public class CloudInternalCatalog extends InternalCatalog {
             long partitionId, Tablet tablet, TTabletType tabletType, int 
schemaHash, KeysType keysType,
             short shortKeyColumnCount, Set<String> bfColumns, double bfFpp, 
List<Index> indexes,
             List<Column> schemaColumns, DataSortInfo dataSortInfo, 
TCompressionType compressionType,
-            String storagePolicy, boolean isInMemory, boolean isShadow,
+            TStorageFormat storageFormat, String storagePolicy, boolean 
isInMemory, boolean isShadow,
             String tableName, long ttlSeconds, boolean 
enableUniqueKeyMergeOnWrite,
             boolean storeRowColumn, int schemaVersion, String compactionPolicy,
             Long timeSeriesCompactionGoalSizeMbytes, Long 
timeSeriesCompactionFileCountThreshold,
@@ -313,6 +315,15 @@ public class CloudInternalCatalog extends InternalCatalog {
                 break;
         }
 
+        // Enable external column meta layout when storage_format is V3 (Cloud 
mode).
+        switch (storageFormat) {
+            case V3:
+                schemaBuilder.setIsExternalSegmentMetaUsedDefault(true);
+                break;
+            default:
+                break;
+        }
+
         schemaBuilder.setSortColNum(dataSortInfo.getColNum());
         for (int i = 0; i < schemaColumns.size(); i++) {
             Column column = schemaColumns.get(i);
diff --git 
a/regression-test/suites/variant_p0/ext_meta/test_storage_format_v2_1.groovy 
b/regression-test/suites/variant_p0/ext_meta/test_storage_format_v2_1.groovy
index d7fe1e48e3a..ece39caed92 100644
--- a/regression-test/suites/variant_p0/ext_meta/test_storage_format_v2_1.groovy
+++ b/regression-test/suites/variant_p0/ext_meta/test_storage_format_v2_1.groovy
@@ -19,9 +19,9 @@ suite("test_storage_format_v2_1") {
     def tableName = "test_storage_format_v2_1_table"
     
     // Test 1: Create table with storage_format = V2.1
-    sql "DROP TABLE IF EXISTS ${tableName}"
+    sql "DROP TABLE IF EXISTS test_storage_format_v2_1_table"
     sql """
-        CREATE TABLE ${tableName} (
+        CREATE TABLE test_storage_format_v2_1_table (
             k bigint,
             v variant
         )
@@ -47,7 +47,7 @@ suite("test_storage_format_v2_1") {
     // Verify table properties
     def result = sql "SHOW CREATE TABLE ${tableName}"
     logger.info("Show create table result: ${result}")
-    assertTrue(result[0][1].contains("V3"), 
+    assertTrue(result[0][1].contains("\"storage_format\" = \"V3\""), 
                "Table should be created with storage_format V3")
     
     // Cleanup


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to