This is an automated email from the ASF dual-hosted git repository.
yuqi4733 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git
The following commit(s) were added to refs/heads/main by this push:
new a28c72224c [#4707] fix (client): Fix the Gravitino client-side version
verification to ignore minor version numbers (#8224)
a28c72224c is described below
commit a28c72224cf1180aeb5607bf365008fa645f3ea2
Author: Yuhui <[email protected]>
AuthorDate: Tue Aug 26 10:22:48 2025 +0800
[#4707] fix (client): Fix the Gravitino client-side version verification to
ignore minor version numbers (#8224)
### 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
---
.../gravitino/client/GravitinoClientBase.java | 4 +--
.../apache/gravitino/client/GravitinoVersion.java | 27 ++++++++-----------
.../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 ++++++++++++
6 files changed, 56 insertions(+), 35 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 0e1860adaa..dc7a479388 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
@@ -100,9 +100,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/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 2aeeba99d3..4e59a81673 100644
--- a/clients/client-python/gravitino/client/gravitino_client_base.py
+++ b/clients/client-python/gravitino/client/gravitino_client_base.py
@@ -102,10 +102,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))