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

morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 21b32280306 [fix](catalog) gen partition id by name (#39325)
21b32280306 is described below

commit 21b322803060cbf2db9b48ddbca0c25e2f2a1363
Author: Mingyu Chen <morning...@163.com>
AuthorDate: Mon Aug 19 14:18:05 2024 +0800

    [fix](catalog) gen partition id by name (#39325)
    
    Followup #38525
    Previously, we use sequence number to generate partition id of table in
    hive metastore.
    for example, there are 2 partitions: `dt=2024-10-02` and
    `dt=2024-10-03`, the partition id will be 0 and 1.
    But if a new partition being added: `dt=2024-10-01`, the partiton id
    will be 0, 1, and 2.
    You can see, before, the id `0` is for `dt=2024-10-02`, but now `0` is
    for `dt=2024-10-01`.
    
    This PR use catalog/db/table/partition name to generate a id for the
    partition,
    so that each partition will have unique id.
---
 .../apache/doris/datasource/hive/HiveMetaStoreCache.java   | 14 ++++----------
 .../java/org/apache/doris/datasource/CatalogMgrTest.java   |  2 +-
 .../apache/doris/planner/ListPartitionPrunerV2Test.java    | 12 ++++++------
 3 files changed, 11 insertions(+), 17 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HiveMetaStoreCache.java
 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HiveMetaStoreCache.java
index 312f2382b0d..ad36dc221d8 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HiveMetaStoreCache.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HiveMetaStoreCache.java
@@ -34,6 +34,7 @@ import org.apache.doris.common.UserException;
 import org.apache.doris.common.security.authentication.AuthenticationConfig;
 import org.apache.doris.common.util.CacheBulkLoader;
 import org.apache.doris.common.util.LocationPath;
+import org.apache.doris.common.util.Util;
 import org.apache.doris.datasource.CacheException;
 import org.apache.doris.datasource.hive.AcidInfo.DeleteDeltaInfo;
 import org.apache.doris.datasource.property.PropertyConverter;
@@ -250,9 +251,8 @@ public class HiveMetaStoreCache {
         Map<Long, PartitionItem> idToPartitionItem = 
Maps.newHashMapWithExpectedSize(partitionNames.size());
         BiMap<String, Long> partitionNameToIdMap = 
HashBiMap.create(partitionNames.size());
         Map<Long, List<UniqueId>> idToUniqueIdsMap = 
Maps.newHashMapWithExpectedSize(partitionNames.size());
-        long idx = 0;
         for (String partitionName : partitionNames) {
-            long partitionId = idx++;
+            long partitionId = Util.genIdByName(catalog.getName(), key.dbName, 
key.tblName, partitionName);
             ListPartitionItem listPartitionItem = 
toListPartitionItem(partitionName, key.types);
             idToPartitionItem.put(partitionId, listPartitionItem);
             partitionNameToIdMap.put(partitionName, partitionId);
@@ -273,7 +273,7 @@ public class HiveMetaStoreCache {
             singleUidToColumnRangeMap = 
ListPartitionPrunerV2.genSingleUidToColumnRange(singleColumnRangeMap);
         }
         Map<Long, List<String>> partitionValuesMap = 
ListPartitionPrunerV2.getPartitionValuesMap(idToPartitionItem);
-        return new HivePartitionValues(idToPartitionItem, uidToPartitionRange, 
rangeToId, singleColumnRangeMap, idx,
+        return new HivePartitionValues(idToPartitionItem, uidToPartitionRange, 
rangeToId, singleColumnRangeMap,
                 partitionNameToIdMap, idToUniqueIdsMap, 
singleUidToColumnRangeMap, partitionValuesMap);
     }
 
@@ -638,13 +638,12 @@ public class HiveMetaStoreCache {
         Map<String, Long> partitionNameToIdMapBefore = 
copy.getPartitionNameToIdMap();
         Map<Long, List<UniqueId>> idToUniqueIdsMap = 
copy.getIdToUniqueIdsMap();
         Map<Long, PartitionItem> idToPartitionItem = new HashMap<>();
-        long idx = copy.getNextPartitionId();
         for (String partitionName : partitionNames) {
             if (partitionNameToIdMapBefore.containsKey(partitionName)) {
                 LOG.info("addPartitionsCache partitionName:[{}] has exist in 
table:[{}]", partitionName, tblName);
                 continue;
             }
-            long partitionId = idx++;
+            long partitionId = Util.genIdByName(catalog.getName(), dbName, 
tblName, partitionName);
             ListPartitionItem listPartitionItem = 
toListPartitionItem(partitionName, key.types);
             idToPartitionItemBefore.put(partitionId, listPartitionItem);
             idToPartitionItem.put(partitionId, listPartitionItem);
@@ -653,7 +652,6 @@ public class HiveMetaStoreCache {
         Map<Long, List<String>> partitionValuesMapBefore = 
copy.getPartitionValuesMap();
         Map<Long, List<String>> partitionValuesMap = 
ListPartitionPrunerV2.getPartitionValuesMap(idToPartitionItem);
         partitionValuesMapBefore.putAll(partitionValuesMap);
-        copy.setNextPartitionId(idx);
         if (key.types.size() > 1) {
             Map<UniqueId, Range<PartitionKey>> uidToPartitionRangeBefore = 
copy.getUidToPartitionRange();
             // uidToPartitionRange and rangeToId are only used for 
multi-column partition
@@ -1075,7 +1073,6 @@ public class HiveMetaStoreCache {
 
     @Data
     public static class HivePartitionValues {
-        private long nextPartitionId;
         private BiMap<String, Long> partitionNameToIdMap;
         private Map<Long, List<UniqueId>> idToUniqueIdsMap;
         private Map<Long, PartitionItem> idToPartitionItem;
@@ -1094,7 +1091,6 @@ public class HiveMetaStoreCache {
                 Map<UniqueId, Range<PartitionKey>> uidToPartitionRange,
                 Map<Range<PartitionKey>, UniqueId> rangeToId,
                 RangeMap<ColumnBound, UniqueId> singleColumnRangeMap,
-                long nextPartitionId,
                 BiMap<String, Long> partitionNameToIdMap,
                 Map<Long, List<UniqueId>> idToUniqueIdsMap,
                 Map<UniqueId, Range<ColumnBound>> singleUidToColumnRangeMap,
@@ -1103,7 +1099,6 @@ public class HiveMetaStoreCache {
             this.uidToPartitionRange = uidToPartitionRange;
             this.rangeToId = rangeToId;
             this.singleColumnRangeMap = singleColumnRangeMap;
-            this.nextPartitionId = nextPartitionId;
             this.partitionNameToIdMap = partitionNameToIdMap;
             this.idToUniqueIdsMap = idToUniqueIdsMap;
             this.singleUidToColumnRangeMap = singleUidToColumnRangeMap;
@@ -1112,7 +1107,6 @@ public class HiveMetaStoreCache {
 
         public HivePartitionValues copy() {
             HivePartitionValues copy = new HivePartitionValues();
-            copy.setNextPartitionId(nextPartitionId);
             copy.setPartitionNameToIdMap(partitionNameToIdMap == null ? null : 
HashBiMap.create(partitionNameToIdMap));
             copy.setIdToUniqueIdsMap(idToUniqueIdsMap == null ? null : 
Maps.newHashMap(idToUniqueIdsMap));
             copy.setIdToPartitionItem(idToPartitionItem == null ? null : 
Maps.newHashMap(idToPartitionItem));
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/datasource/CatalogMgrTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/datasource/CatalogMgrTest.java
index 5f1e19f3284..e5e8a9d71a5 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/datasource/CatalogMgrTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/datasource/CatalogMgrTest.java
@@ -548,7 +548,7 @@ public class CatalogMgrTest extends TestWithFeService {
             singleUidToColumnRangeMap = 
ListPartitionPrunerV2.genSingleUidToColumnRange(singleColumnRangeMap);
         }
         Map<Long, List<String>> partitionValuesMap = 
ListPartitionPrunerV2.getPartitionValuesMap(idToPartitionItem);
-        return new HivePartitionValues(idToPartitionItem, uidToPartitionRange, 
rangeToId, singleColumnRangeMap, idx,
+        return new HivePartitionValues(idToPartitionItem, uidToPartitionRange, 
rangeToId, singleColumnRangeMap,
                 partitionNameToIdMap, idToUniqueIdsMap, 
singleUidToColumnRangeMap, partitionValuesMap);
     }
 
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/planner/ListPartitionPrunerV2Test.java
 
b/fe/fe-core/src/test/java/org/apache/doris/planner/ListPartitionPrunerV2Test.java
index 6c1accce675..5af7b831e98 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/planner/ListPartitionPrunerV2Test.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/planner/ListPartitionPrunerV2Test.java
@@ -103,8 +103,8 @@ public class ListPartitionPrunerV2Test {
         String tblName = "tb";
         HiveMetaStoreCache.HivePartitionValues partitionValues = 
cache.getPartitionValues(dbName, tblName, types);
         Assert.assertEquals(1, partitionValues.getIdToPartitionItem().size());
-        
Assert.assertTrue(partitionValues.getIdToPartitionItem().containsKey(0L));
-        List<PartitionKey> items = 
partitionValues.getIdToPartitionItem().get(0L).getItems();
+        
Assert.assertTrue(partitionValues.getIdToPartitionItem().containsKey(8882801933302843777L));
+        List<PartitionKey> items = 
partitionValues.getIdToPartitionItem().get(8882801933302843777L).getItems();
         Assert.assertEquals(1, items.size());
         PartitionKey partitionKey = items.get(0);
         Assert.assertEquals("1.234", partitionKey.getKeys().get(0).toString());
@@ -116,8 +116,8 @@ public class ListPartitionPrunerV2Test {
         cache.addPartitionsCache(dbName, tblName, values, types);
         HiveMetaStoreCache.HivePartitionValues partitionValues2 = 
cache.getPartitionValues(dbName, tblName, types);
         Assert.assertEquals(2, partitionValues2.getIdToPartitionItem().size());
-        
Assert.assertTrue(partitionValues2.getIdToPartitionItem().containsKey(1L));
-        List<PartitionKey> items2 = 
partitionValues2.getIdToPartitionItem().get(1L).getItems();
+        
Assert.assertTrue(partitionValues2.getIdToPartitionItem().containsKey(7070400225537799947L));
+        List<PartitionKey> items2 = 
partitionValues2.getIdToPartitionItem().get(7070400225537799947L).getItems();
         Assert.assertEquals(1, items2.size());
         PartitionKey partitionKey2 = items2.get(0);
         Assert.assertEquals("5.678", 
partitionKey2.getKeys().get(0).toString());
@@ -128,8 +128,8 @@ public class ListPartitionPrunerV2Test {
         cache.invalidateTableCache(dbName, tblName);
         HiveMetaStoreCache.HivePartitionValues partitionValues3 = 
cache.getPartitionValues(dbName, tblName, types);
         Assert.assertEquals(1, partitionValues3.getIdToPartitionItem().size());
-        
Assert.assertTrue(partitionValues3.getIdToPartitionItem().containsKey(0L));
-        List<PartitionKey> items3 = 
partitionValues3.getIdToPartitionItem().get(0L).getItems();
+        
Assert.assertTrue(partitionValues3.getIdToPartitionItem().containsKey(8882801933302843777L));
+        List<PartitionKey> items3 = 
partitionValues3.getIdToPartitionItem().get(8882801933302843777L).getItems();
         Assert.assertEquals(1, items3.size());
         PartitionKey partitionKey3 = items3.get(0);
         Assert.assertEquals("1.234", 
partitionKey3.getKeys().get(0).toString());


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to