This is an automated email from the ASF dual-hosted git repository. wusheng pushed a commit to branch api-version in repository https://gitbox.apache.org/repos/asf/skywalking.git
commit 7b1ab03ece2714e2d013a0271493f6cf892c642e Author: Wu Sheng <[email protected]> AuthorDate: Sun Jan 12 20:18:31 2025 +0800 BanyanDB: Add support for compatibility checks based on the BanyanDB server's API version. --- docs/en/changes/changes.md | 1 + oap-server-bom/pom.xml | 2 +- .../plugin/banyandb/BanyanDBStorageClient.java | 66 +++++++++++++++------- test/e2e-v2/script/env | 2 +- 4 files changed, 50 insertions(+), 21 deletions(-) diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md index 45ba862892..b34473e928 100644 --- a/docs/en/changes/changes.md +++ b/docs/en/changes/changes.md @@ -58,6 +58,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/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
