You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by de...@apache.org on 2022/04/02 07:46:44 UTC

[hive] branch master updated: HIVE-26062: Make sure that running 4.0.0-alpha-2 above 4.0.0-alpha-1 HMS DB reports the correct error (Zhihua Deng reviewed by Peter Vary) (#3138)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 8d0365f  HIVE-26062: Make sure that running 4.0.0-alpha-2 above 4.0.0-alpha-1 HMS DB reports the correct error (Zhihua Deng reviewed by Peter Vary) (#3138)
8d0365f is described below

commit 8d0365f840b830c67ab68fcd63f6d49e4ccbef70
Author: dengzh <de...@gmail.com>
AuthorDate: Sat Apr 2 15:46:21 2022 +0800

    HIVE-26062: Make sure that running 4.0.0-alpha-2 above 4.0.0-alpha-1 HMS DB reports the correct error (Zhihua Deng reviewed by Peter Vary) (#3138)
---
 .../hadoop/hive/metastore/MetaStoreSchemaInfo.java | 32 +++++++++++++++-------
 .../hive/metastore/TestMetaStoreSchemaInfo.java    | 12 +++++++-
 2 files changed, 33 insertions(+), 11 deletions(-)

diff --git a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/MetaStoreSchemaInfo.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/MetaStoreSchemaInfo.java
index 0466a7f..223455d 100644
--- a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/MetaStoreSchemaInfo.java
+++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/MetaStoreSchemaInfo.java
@@ -33,6 +33,7 @@ import java.util.Map;
 
 import com.google.common.collect.ImmutableMap;
 
+import org.apache.commons.lang3.StringUtils;
 import org.apache.hadoop.hive.metastore.tools.schematool.HiveSchemaHelper;
 import org.apache.hadoop.hive.metastore.tools.schematool.HiveSchemaHelper.MetaStoreConnectionInfo;
 import org.apache.hadoop.hive.metastore.utils.MetastoreVersionInfo;
@@ -205,19 +206,30 @@ public class MetaStoreSchemaInfo implements IMetaStoreSchemaInfo {
       return false;
     }
 
-    for (int i = 0; i < dbVerParts.length; i++) {
-      int dbVerPart = Integer.parseInt(dbVerParts[i]);
-      int hiveVerPart = Integer.parseInt(hiveVerParts[i]);
-      if (dbVerPart > hiveVerPart) {
-        return true;
-      } else if (dbVerPart < hiveVerPart) {
-        return false;
-      } else {
-        continue; // compare next part
+    hiveVerParts = hiveVersion.split("\\.|-");
+    dbVerParts = dbVersion.split("\\.|-");
+    for (int i = 0; i < Math.min(hiveVerParts.length, dbVerParts.length); i++) {
+      int compare = compareVersion(dbVerParts[i], hiveVerParts[i]);
+      if (compare != 0) {
+        return compare > 0;
       }
     }
+    return hiveVerParts.length > dbVerParts.length;
+  }
 
-    return true;
+  private int compareVersion(String dbVerPart, String hiveVerPart) {
+    if (dbVerPart.equals(hiveVerPart)) {
+      return 0;
+    }
+    boolean isDbVerNum = StringUtils.isNumeric(dbVerPart);
+    boolean isHiveVerNum = StringUtils.isNumeric(hiveVerPart);
+    if (isDbVerNum && isHiveVerNum) {
+      return Integer.parseInt(dbVerPart) - Integer.parseInt(hiveVerPart);
+    } else if (!isDbVerNum && !isHiveVerNum) {
+      return dbVerPart.compareTo(hiveVerPart);
+    }
+    // return -1 for one is a number but the other is a string
+    return -1;
   }
 
   @Override
diff --git a/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/TestMetaStoreSchemaInfo.java b/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/TestMetaStoreSchemaInfo.java
index a756e40..87f52b7 100644
--- a/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/TestMetaStoreSchemaInfo.java
+++ b/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/TestMetaStoreSchemaInfo.java
@@ -42,6 +42,12 @@ public class TestMetaStoreSchemaInfo {
     Assert.assertTrue(metastoreSchemaInfo.isVersionCompatible("1.0.2", "2.0.1"));
     Assert.assertTrue(metastoreSchemaInfo.isVersionCompatible("0.0.9", "9.0.0"));
 
+    Assert.assertTrue(metastoreSchemaInfo.isVersionCompatible("4.0.0-alpha-1", "4.0.0-alpha-2"));
+    Assert.assertTrue(metastoreSchemaInfo.isVersionCompatible("4.0.0-alpha-1", "4.0.0-alpha"));
+    Assert.assertTrue(metastoreSchemaInfo.isVersionCompatible("4.0.0-alpha-1", "4.0.0"));
+    Assert.assertTrue(metastoreSchemaInfo.isVersionCompatible("4.0.0-alpha-1", "4.0.1"));
+    Assert.assertTrue(metastoreSchemaInfo.isVersionCompatible("4.0.0-alpha-1", "4.0.0-beta"));
+
     // check equivalent versions, should be compatible
     Assert.assertTrue(metastoreSchemaInfo.isVersionCompatible("0.13.0", "0.13.1"));
     Assert.assertTrue(metastoreSchemaInfo.isVersionCompatible("0.13.1", "0.13.0"));
@@ -49,7 +55,11 @@ public class TestMetaStoreSchemaInfo {
     // check incompatible versions
     Assert.assertFalse(metastoreSchemaInfo.isVersionCompatible("0.1.1", "0.1.0"));
     Assert.assertFalse(metastoreSchemaInfo.isVersionCompatible("4.0.1", "0.1.0"));
-
+    Assert.assertFalse(metastoreSchemaInfo.isVersionCompatible("4.0.1", "4.0.0-alpha-1"));
+    Assert.assertFalse(metastoreSchemaInfo.isVersionCompatible("4.0.0", "4.0.0-alpha-1"));
+    Assert.assertFalse(metastoreSchemaInfo.isVersionCompatible("4.0.0-alpha-2", "4.0.0-alpha-1"));
+    Assert.assertFalse(metastoreSchemaInfo.isVersionCompatible("4.0.0-alpha", "4.0.0-alpha-1"));
+    Assert.assertFalse(metastoreSchemaInfo.isVersionCompatible("4.0.0-beta", "4.0.0-alpha-1"));
   }
 
 }