This is an automated email from the ASF dual-hosted git repository.
wusheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking.git
The following commit(s) were added to refs/heads/master by this push:
new ca5c8b29e1 BanyanDB: Add support for compatibility checks based on API
version (#12959)
ca5c8b29e1 is described below
commit ca5c8b29e1ce46bfbbe4ded108f292d8ca22cd4d
Author: 吴晟 Wu Sheng <[email protected]>
AuthorDate: Sun Jan 12 21:34:51 2025 +0800
BanyanDB: Add support for compatibility checks based on API version (#12959)
---
docs/en/changes/changes.md | 3 +
docs/en/setup/backend/storages/banyandb.md | 6 ++
oap-server-bom/pom.xml | 2 +-
.../plugin/banyandb/BanyanDBStorageClient.java | 66 +++++++++++++++-------
test/e2e-v2/script/env | 2 +-
5 files changed, 58 insertions(+), 21 deletions(-)
diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md
index 45ba862892..4d2707f12f 100644
--- a/docs/en/changes/changes.md
+++ b/docs/en/changes/changes.md
@@ -13,6 +13,8 @@
source tar from the website and publish them to your private maven
repository.
* [Breaking Change] Remove H2 as storage option permanently. BanyanDB 0.8(OAP
10.2 required) is easy, stable and
production-ready. Don't need H2 as default storage anymore.
+* [Breaking Change] Bump up BanyanDB server version to 0.8.0. This version is
not compatible with the previous
+ versions. Please upgrade the BanyanDB server to 0.8.0 before upgrading OAP
to 10.2.0.
#### OAP Server
@@ -58,6 +60,7 @@
* Added `maxLabelCount` parameter in the `labelCount` function of OAL to limit
the number of labels can be counted.
* Adapt the new Browser API(`/browser/perfData/webVitals`,
`/browser/perfData/resources`) protocol.
* Add Circuit Breaking mechanism.
+* BanyanDB: Add support for compatibility checks based on the BanyanDB
server's API version.
#### UI
diff --git a/docs/en/setup/backend/storages/banyandb.md
b/docs/en/setup/backend/storages/banyandb.md
index 954e31d278..5019604dc0 100644
--- a/docs/en/setup/backend/storages/banyandb.md
+++ b/docs/en/setup/backend/storages/banyandb.md
@@ -14,6 +14,12 @@ bydb.version=x.y
bydb.api.version=x.y
```
+If the BanyanDB server API version is not compatible with the OAP server, the
OAP server will not start, and the following error message will be displayed:
+```shell
+... ERROR [] - ... Incompatible BanyanDB server API version: 0.x. But accepted
versions: 0.y
+org.apache.skywalking.oap.server.library.module.ModuleStartException:
Incompatible BanyanDB server API version...
+```
+
### Configuration
```yaml
diff --git a/oap-server-bom/pom.xml b/oap-server-bom/pom.xml
index 92ffd3f9c3..6daee56197 100644
--- a/oap-server-bom/pom.xml
+++ b/oap-server-bom/pom.xml
@@ -72,7 +72,7 @@
<httpcore.version>4.4.13</httpcore.version>
<httpasyncclient.version>4.1.5</httpasyncclient.version>
<commons-compress.version>1.21</commons-compress.version>
- <banyandb-java-client.version>0.8.0-rc1</banyandb-java-client.version>
+ <banyandb-java-client.version>0.8.0-rc2</banyandb-java-client.version>
<kafka-clients.version>3.4.0</kafka-clients.version>
<spring-kafka-test.version>2.4.6.RELEASE</spring-kafka-test.version>
<consul.client.version>1.5.3</consul.client.version>
diff --git
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBStorageClient.java
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBStorageClient.java
index a00ab5af24..e324a5e231 100644
---
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBStorageClient.java
+++
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBStorageClient.java
@@ -19,8 +19,22 @@
package org.apache.skywalking.oap.server.storage.plugin.banyandb;
import io.grpc.Status;
+import io.grpc.StatusRuntimeException;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.skywalking.banyandb.common.v1.BanyandbCommon;
+import org.apache.skywalking.banyandb.common.v1.BanyandbCommon.Group;
import org.apache.skywalking.banyandb.database.v1.BanyandbDatabase;
+import org.apache.skywalking.banyandb.database.v1.BanyandbDatabase.Measure;
+import org.apache.skywalking.banyandb.database.v1.BanyandbDatabase.Stream;
+import
org.apache.skywalking.banyandb.database.v1.BanyandbDatabase.TopNAggregation;
import org.apache.skywalking.banyandb.property.v1.BanyandbProperty;
+import
org.apache.skywalking.banyandb.property.v1.BanyandbProperty.ApplyRequest.Strategy;
+import
org.apache.skywalking.banyandb.property.v1.BanyandbProperty.DeleteResponse;
+import org.apache.skywalking.banyandb.property.v1.BanyandbProperty.Property;
import org.apache.skywalking.banyandb.v1.client.BanyanDBClient;
import org.apache.skywalking.banyandb.v1.client.MeasureBulkWriteProcessor;
import org.apache.skywalking.banyandb.v1.client.MeasureQuery;
@@ -33,13 +47,6 @@ import
org.apache.skywalking.banyandb.v1.client.StreamQueryResponse;
import org.apache.skywalking.banyandb.v1.client.StreamWrite;
import org.apache.skywalking.banyandb.v1.client.TopNQuery;
import org.apache.skywalking.banyandb.v1.client.TopNQueryResponse;
-import org.apache.skywalking.banyandb.common.v1.BanyandbCommon.Group;
-import
org.apache.skywalking.banyandb.database.v1.BanyandbDatabase.TopNAggregation;
-import org.apache.skywalking.banyandb.database.v1.BanyandbDatabase.Measure;
-import org.apache.skywalking.banyandb.database.v1.BanyandbDatabase.Stream;
-import org.apache.skywalking.banyandb.property.v1.BanyandbProperty.Property;
-import
org.apache.skywalking.banyandb.property.v1.BanyandbProperty.ApplyRequest.Strategy;
-import
org.apache.skywalking.banyandb.property.v1.BanyandbProperty.DeleteResponse;
import
org.apache.skywalking.banyandb.v1.client.grpc.exception.AlreadyExistsException;
import
org.apache.skywalking.banyandb.v1.client.grpc.exception.BanyanDBException;
import org.apache.skywalking.oap.server.library.client.Client;
@@ -47,15 +54,13 @@ import
org.apache.skywalking.oap.server.library.client.healthcheck.DelegatedHeal
import
org.apache.skywalking.oap.server.library.client.healthcheck.HealthCheckable;
import org.apache.skywalking.oap.server.library.util.HealthChecker;
-import java.io.IOException;
-import java.util.Collections;
-import java.util.List;
-
/**
* BanyanDBStorageClient is a simple wrapper for the underlying {@link
BanyanDBClient},
* which implement {@link Client} and {@link HealthCheckable}.
*/
+@Slf4j
public class BanyanDBStorageClient implements Client, HealthCheckable {
+ private static final String[] COMPATIBLE_SERVER_API_VERSIONS = {"0.8"};
final BanyanDBClient client;
private final DelegatedHealthChecker healthChecker = new
DelegatedHealthChecker();
private final int flushTimeout;
@@ -70,6 +75,29 @@ public class BanyanDBStorageClient implements Client,
HealthCheckable {
@Override
public void connect() throws Exception {
this.client.connect();
+ BanyandbCommon.APIVersion apiVersion;
+ try {
+ apiVersion = this.client.getAPIVersion();
+ } catch (BanyanDBException e) {
+ final Throwable cause = e.getCause();
+ if (cause instanceof StatusRuntimeException) {
+ final Status status = ((StatusRuntimeException)
cause).getStatus();
+ if (Status.Code.UNIMPLEMENTED.equals(status.getCode())) {
+ log.error("fail to get BanyanDB API version, server
version < 0.8 is not supported.");
+ }
+ }
+ throw e;
+ }
+ final boolean isCompatible =
Arrays.stream(COMPATIBLE_SERVER_API_VERSIONS)
+ .anyMatch(v ->
v.equals(apiVersion.getVersion()));
+ final String revision = apiVersion.getRevision();
+ log.info("BanyanDB server API version: {}, revision: {}",
apiVersion.getVersion(), revision);
+ if (!isCompatible) {
+ throw new IllegalStateException(
+ "Incompatible BanyanDB server API version: " +
apiVersion.getVersion() + ". But accepted versions: "
+ + String.join(", ", COMPATIBLE_SERVER_API_VERSIONS));
+ }
+
}
@Override
@@ -79,10 +107,10 @@ public class BanyanDBStorageClient implements Client,
HealthCheckable {
public List<Property> listProperties(String group, String name) throws
IOException {
try {
- BanyandbProperty.QueryResponse resp =
this.client.query(BanyandbProperty.QueryRequest.newBuilder()
- .addGroups(group)
- .setContainer(name)
- .build());
+ BanyandbProperty.QueryResponse resp =
this.client.query(BanyandbProperty.QueryRequest.newBuilder()
+
.addGroups(group)
+
.setContainer(name)
+
.build());
this.healthChecker.health();
return resp.getPropertiesList();
} catch (BanyanDBException ex) {
@@ -99,10 +127,10 @@ public class BanyanDBStorageClient implements Client,
HealthCheckable {
public Property queryProperty(String group, String name, String id) throws
IOException {
try {
BanyandbProperty.QueryResponse resp =
this.client.query(BanyandbProperty.QueryRequest.newBuilder()
- .addGroups(group)
- .setContainer(name)
- .addIds(id)
- .build());
+
.addGroups(group)
+
.setContainer(name)
+
.addIds(id)
+
.build());
this.healthChecker.health();
if (resp.getPropertiesCount() == 0) {
return null;
diff --git a/test/e2e-v2/script/env b/test/e2e-v2/script/env
index d038376708..9853834403 100644
--- a/test/e2e-v2/script/env
+++ b/test/e2e-v2/script/env
@@ -23,7 +23,7 @@
SW_AGENT_CLIENT_JS_COMMIT=af0565a67d382b683c1dbd94c379b7080db61449
SW_AGENT_CLIENT_JS_TEST_COMMIT=4f1eb1dcdbde3ec4a38534bf01dded4ab5d2f016
SW_KUBERNETES_COMMIT_SHA=6fe5e6f0d3b7686c6be0457733e825ee68cb9b35
SW_ROVER_COMMIT=0ae8f12d6eb6cc9fa125c603ee57d0b21fc8c6d0
-SW_BANYANDB_COMMIT=8dfe616f332848f041b0f184b023d9a256eac39e
+SW_BANYANDB_COMMIT=362d68ed79c532e6d61dd6674cce38090caa0da7
SW_AGENT_PHP_COMMIT=3192c553002707d344bd6774cfab5bc61f67a1d3
SW_CTL_COMMIT=67cbc89dd7b214d5791321a7ca992f940cb586ba