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"));
}
}