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

yuqi4733 pushed a commit to branch branch-0.9
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/branch-0.9 by this push:
     new 84818c8be6 [#4707] fix (client): Fix the Gravitino client-side version 
verification to ignore minor version numbers  (#8276)
84818c8be6 is described below

commit 84818c8be61c3899739d45ca378fe8acb85eed6c
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Wed Aug 27 20:44:18 2025 +0800

    [#4707] fix (client): Fix the Gravitino client-side version verification to 
ignore minor version numbers  (#8276)
    
    ### What changes were proposed in this pull request?
    
    Fix the Gravitino client-side version verification to ignore minor
    version numbers
    
    ### Why are the changes needed?
    
    Fix: #4707
    
    ### Does this PR introduce _any_ user-facing change?
    
    No
    
    ### How was this patch tested?
    
    UTs
    
    ---------
    
    Co-authored-by: Yuhui <[email protected]>
---
 .../gravitino/client/GravitinoClientBase.java      |  4 +--
 .../apache/gravitino/client/GravitinoVersion.java  | 27 ++++++++-----------
 .../gravitino/client/TestGravitinoAdminClient.java |  2 +-
 .../gravitino/client/TestGravitinoVersion.java     | 31 +++++++++++-----------
 .../gravitino/client/gravitino_client_base.py      |  4 +--
 .../gravitino/client/gravitino_version.py          |  8 ++++++
 .../tests/unittests/test_gravitino_version.py      | 17 ++++++++++++
 7 files changed, 57 insertions(+), 36 deletions(-)

diff --git 
a/clients/client-java/src/main/java/org/apache/gravitino/client/GravitinoClientBase.java
 
b/clients/client-java/src/main/java/org/apache/gravitino/client/GravitinoClientBase.java
index 1e39133e72..02027235cd 100644
--- 
a/clients/client-java/src/main/java/org/apache/gravitino/client/GravitinoClientBase.java
+++ 
b/clients/client-java/src/main/java/org/apache/gravitino/client/GravitinoClientBase.java
@@ -98,9 +98,9 @@ public abstract class GravitinoClientBase implements 
Closeable {
   public void checkVersion() {
     GravitinoVersion serverVersion = serverVersion();
     GravitinoVersion clientVersion = clientVersion();
-    if (clientVersion.compareTo(serverVersion) > 0) {
+    if (!clientVersion.compatibleWithServerVersion(serverVersion)) {
       throw new GravitinoRuntimeException(
-          "Gravitino does not support the case that the client-side version is 
higher than the server-side version."
+          "Gravitino does not support the case that the client-side major 
version is higher than the server-side version."
               + "The client version is %s, and the server version %s",
           clientVersion.version(), serverVersion.version());
     }
diff --git 
a/clients/client-java/src/main/java/org/apache/gravitino/client/GravitinoVersion.java
 
b/clients/client-java/src/main/java/org/apache/gravitino/client/GravitinoVersion.java
index 3324422366..08d3f8408d 100644
--- 
a/clients/client-java/src/main/java/org/apache/gravitino/client/GravitinoVersion.java
+++ 
b/clients/client-java/src/main/java/org/apache/gravitino/client/GravitinoVersion.java
@@ -25,7 +25,7 @@ import org.apache.gravitino.dto.VersionDTO;
 import org.apache.gravitino.exceptions.GravitinoRuntimeException;
 
 /** Apache Gravitino version information. */
-public class GravitinoVersion extends VersionDTO implements Comparable {
+public class GravitinoVersion extends VersionDTO {
 
   private static final int VERSION_PART_NUMBER = 3;
 
@@ -53,21 +53,16 @@ public class GravitinoVersion extends VersionDTO implements 
Comparable {
     throw new GravitinoRuntimeException("Invalid version string " + version());
   }
 
-  @Override
-  public int compareTo(Object o) {
-    if (!(o instanceof GravitinoVersion)) {
-      return 1;
-    }
-    GravitinoVersion other = (GravitinoVersion) o;
-
+  /**
+   * Check if the current version is compatible with the server version.
+   *
+   * @param serverVersion the server version to check compatibility with
+   * @return true if the client current major version is less than or equal to 
the server's major
+   *     version
+   */
+  public boolean compatibleWithServerVersion(GravitinoVersion serverVersion) {
     int[] left = getVersionNumber();
-    int[] right = other.getVersionNumber();
-    for (int i = 0; i < VERSION_PART_NUMBER; i++) {
-      int v = left[i] - right[i];
-      if (v != 0) {
-        return v;
-      }
-    }
-    return 0;
+    int[] right = serverVersion.getVersionNumber();
+    return left[0] <= right[0];
   }
 }
diff --git 
a/clients/client-java/src/test/java/org/apache/gravitino/client/TestGravitinoAdminClient.java
 
b/clients/client-java/src/test/java/org/apache/gravitino/client/TestGravitinoAdminClient.java
index 66960791ec..d7d133729a 100644
--- 
a/clients/client-java/src/test/java/org/apache/gravitino/client/TestGravitinoAdminClient.java
+++ 
b/clients/client-java/src/test/java/org/apache/gravitino/client/TestGravitinoAdminClient.java
@@ -290,7 +290,7 @@ public class TestGravitinoAdminClient extends TestBase {
 
   @Test
   public void testCheckVersionFailed() throws JsonProcessingException {
-    String version = "0.1.1";
+    String version = "-1.1.1";
     String date = "2024-01-03 12:28:33";
     String commitId = "6ef1f9d";
 
diff --git 
a/clients/client-java/src/test/java/org/apache/gravitino/client/TestGravitinoVersion.java
 
b/clients/client-java/src/test/java/org/apache/gravitino/client/TestGravitinoVersion.java
index 15c9c222d3..a94a16a96b 100644
--- 
a/clients/client-java/src/test/java/org/apache/gravitino/client/TestGravitinoVersion.java
+++ 
b/clients/client-java/src/test/java/org/apache/gravitino/client/TestGravitinoVersion.java
@@ -18,6 +18,7 @@
  */
 package org.apache.gravitino.client;
 
+import static org.junit.Assert.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -133,25 +134,25 @@ public class TestGravitinoVersion {
   }
 
   @Test
-  void testVersionCompare() {
+  void testVersionCompatibility() {
     GravitinoVersion version1 = new GravitinoVersion("2.5.3", "2023-01-01", 
"1234567");
-    // test equal
-    GravitinoVersion version2 = new GravitinoVersion("2.5.3", "2023-01-01", 
"1234567");
-    assertEquals(0, version1.compareTo(version2));
+    GravitinoVersion version2 = new GravitinoVersion("2.5.4", "2023-01-01", 
"1234567");
+    assertTrue(version1.compatibleWithServerVersion(version2));
 
-    // test less than
-    version1 = new GravitinoVersion("2.5.3", "2023-01-01", "1234567");
+    version1 = new GravitinoVersion("2.6.3", "2023-01-01", "1234567");
+    version2 = new GravitinoVersion("2.6.3", "2023-01-01", "1234567");
+    assertTrue(version1.compatibleWithServerVersion(version2));
+
+    version1 = new GravitinoVersion("2.6.3", "2023-01-01", "1234567");
     version2 = new GravitinoVersion("2.5.4", "2023-01-01", "1234567");
-    assertTrue(version1.compareTo(version2) < 0);
+    assertTrue(version1.compatibleWithServerVersion(version2));
 
-    // test greater than
-    version1 = new GravitinoVersion("2.5.3", "2023-01-01", "1234567");
-    version2 = new GravitinoVersion("2.5.2", "2023-01-01", "1234567");
-    assertTrue(version1.compareTo(version2) > 0);
+    version1 = new GravitinoVersion("2.6.3", "2023-01-01", "1234567");
+    version2 = new GravitinoVersion("3.5.4", "2023-01-01", "1234567");
+    assertTrue(version1.compatibleWithServerVersion(version2));
 
-    // test equal with suffix
-    version1 = new GravitinoVersion("2.5.3", "2023-01-01", "1234567");
-    version2 = new GravitinoVersion("2.5.3-SNAPSHOT", "2023-01-01", "1234567");
-    assertEquals(0, version1.compareTo(version2));
+    version1 = new GravitinoVersion("3.6.3", "2023-01-01", "1234567");
+    version2 = new GravitinoVersion("2.5.4", "2023-01-01", "1234567");
+    assertFalse(version1.compatibleWithServerVersion(version2));
   }
 }
diff --git a/clients/client-python/gravitino/client/gravitino_client_base.py 
b/clients/client-python/gravitino/client/gravitino_client_base.py
index 7a1744595f..cf4c801c85 100644
--- a/clients/client-python/gravitino/client/gravitino_client_base.py
+++ b/clients/client-python/gravitino/client/gravitino_client_base.py
@@ -98,10 +98,10 @@ class GravitinoClientBase:
         server_version = self.get_server_version()
         client_version = self.get_client_version()
 
-        if client_version > server_version:
+        if not client_version.compatible_with_server_version(server_version):
             raise GravitinoRuntimeException(
                 "Gravitino does not support the case that "
-                "the client-side version is higher than the server-side 
version."
+                "the client-side major version is higher than the server-side 
version."
                 f"The client version is {client_version.version()}, and the 
server version {server_version.version()}"
             )
 
diff --git a/clients/client-python/gravitino/client/gravitino_version.py 
b/clients/client-python/gravitino/client/gravitino_version.py
index 6919643fcf..ac445b6408 100644
--- a/clients/client-python/gravitino/client/gravitino_version.py
+++ b/clients/client-python/gravitino/client/gravitino_version.py
@@ -77,3 +77,11 @@ class GravitinoVersion(VersionDTO):
         if self.patch != other.patch:
             return False
         return True
+
+    def compatible_with_server_version(self, server_version) -> bool:
+        """
+        Check if the current version is compatible with the server version.
+        Compatibility is defined such that the client major version is less 
than or equal
+        to the server major version.
+        """
+        return self.major <= server_version.major
diff --git a/clients/client-python/tests/unittests/test_gravitino_version.py 
b/clients/client-python/tests/unittests/test_gravitino_version.py
index 9e70b17bc1..9f7446c7e2 100644
--- a/clients/client-python/tests/unittests/test_gravitino_version.py
+++ b/clients/client-python/tests/unittests/test_gravitino_version.py
@@ -191,3 +191,20 @@ class TestGravitinoVersion(unittest.TestCase):
 
         self.assertRaises(GravitinoRuntimeException, version1.__eq__, version2)
         self.assertRaises(GravitinoRuntimeException, version1.__gt__, version2)
+
+    def test_compatible_server_version(self):
+        version1 = GravitinoVersion(VersionDTO("1.6.0", "2023-01-01", 
"1234567"))
+        version2 = GravitinoVersion(VersionDTO("1.6.0", "2023-01-01", 
"1234567"))
+        self.assertTrue(version1.compatible_with_server_version(version2))
+
+        version1 = GravitinoVersion(VersionDTO("1.6.0", "2023-01-01", 
"1234567"))
+        version2 = GravitinoVersion(VersionDTO("2.6.1", "2023-01-01", 
"1234567"))
+        self.assertTrue(version1.compatible_with_server_version(version2))
+
+        version1 = GravitinoVersion(VersionDTO("1.6.0", "2023-01-01", 
"1234567"))
+        version2 = GravitinoVersion(VersionDTO("1.4.0", "2023-01-01", 
"1234567"))
+        self.assertTrue(version1.compatible_with_server_version(version2))
+
+        version1 = GravitinoVersion(VersionDTO("1.6.0", "2023-01-01", 
"1234567"))
+        version2 = GravitinoVersion(VersionDTO("0.6.0", "2023-01-01", 
"1234567"))
+        self.assertFalse(version1.compatible_with_server_version(version2))

Reply via email to