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))