You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by ha...@apache.org on 2022/12/29 13:40:09 UTC
[skywalking-banyandb-java-client] 01/01: Drop invalid entries on writing.
This is an automated email from the ASF dual-hosted git repository.
hanahmily pushed a commit to branch debug
in repository https://gitbox.apache.org/repos/asf/skywalking-banyandb-java-client.git
commit 3daf9cb0c8f1421220a9d7715fbbe23ccaa7d493
Author: Gao Hongtao <ha...@gmail.com>
AuthorDate: Thu Dec 29 21:39:05 2022 +0800
Drop invalid entries on writing.
Signed-off-by: Gao Hongtao <ha...@gmail.com>
---
.../banyandb/v1/client/AbstractBulkWriteProcessor.java | 17 ++++++++++++++---
.../skywalking/banyandb/v1/client/AbstractWrite.java | 18 ++++++++++++++++++
2 files changed, 32 insertions(+), 3 deletions(-)
diff --git a/src/main/java/org/apache/skywalking/banyandb/v1/client/AbstractBulkWriteProcessor.java b/src/main/java/org/apache/skywalking/banyandb/v1/client/AbstractBulkWriteProcessor.java
index bc3aea8..5ccb885 100644
--- a/src/main/java/org/apache/skywalking/banyandb/v1/client/AbstractBulkWriteProcessor.java
+++ b/src/main/java/org/apache/skywalking/banyandb/v1/client/AbstractBulkWriteProcessor.java
@@ -23,6 +23,7 @@ import io.grpc.stub.AbstractAsyncStub;
import io.grpc.stub.StreamObserver;
import lombok.extern.slf4j.Slf4j;
+import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
@@ -66,11 +67,21 @@ public abstract class AbstractBulkWriteProcessor<REQ extends com.google.protobuf
final StreamObserver<REQ> writeRequestStreamObserver
= this.buildStreamObserver(stub.withDeadlineAfter(flushInterval, TimeUnit.SECONDS), batch);
+ List sentData = new ArrayList(data.size());
try {
data.forEach(holder -> {
Holder h = (Holder) holder;
- REQ request = ((AbstractWrite<REQ>) h.writeEntity()).build();
+ AbstractWrite<REQ> entity = (AbstractWrite<REQ>) h.writeEntity();
+ REQ request;
+ try {
+ request = entity.build();
+ } catch (Throwable bt) {
+ log.error("building the entity fails: {}", entity.toString(), bt);
+ h.future().completeExceptionally(bt);
+ return;
+ }
writeRequestStreamObserver.onNext(request);
+ sentData.add(h);
});
} catch (Throwable t) {
log.error("Transform and send request to BanyanDB fail.", t);
@@ -80,12 +91,12 @@ public abstract class AbstractBulkWriteProcessor<REQ extends com.google.protobuf
}
batch.whenComplete((ignored, exp) -> {
if (exp != null) {
- data.stream().map((Function<Object, CompletableFuture<Void>>) o -> ((Holder) o).future())
+ sentData.stream().map((Function<Object, CompletableFuture<Void>>) o -> ((Holder) o).future())
.forEach((Consumer<CompletableFuture<Void>>) it -> it.completeExceptionally(exp));
log.error("Failed to execute requests in bulk", exp);
} else {
log.debug("Succeeded to execute {} requests in bulk", data.size());
- data.stream().map((Function<Object, CompletableFuture<Void>>) o -> ((Holder) o).future())
+ sentData.stream().map((Function<Object, CompletableFuture<Void>>) o -> ((Holder) o).future())
.forEach((Consumer<CompletableFuture<Void>>) it -> it.complete(null));
}
});
diff --git a/src/main/java/org/apache/skywalking/banyandb/v1/client/AbstractWrite.java b/src/main/java/org/apache/skywalking/banyandb/v1/client/AbstractWrite.java
index 6ad76ca..4e07af9 100644
--- a/src/main/java/org/apache/skywalking/banyandb/v1/client/AbstractWrite.java
+++ b/src/main/java/org/apache/skywalking/banyandb/v1/client/AbstractWrite.java
@@ -19,6 +19,8 @@
package org.apache.skywalking.banyandb.v1.client;
import com.google.protobuf.Timestamp;
+
+import java.util.Map;
import java.util.Optional;
import lombok.Getter;
import org.apache.skywalking.banyandb.common.v1.BanyandbCommon;
@@ -91,4 +93,20 @@ public abstract class AbstractWrite<P extends com.google.protobuf.GeneratedMessa
}
protected abstract P build(BanyandbCommon.Metadata metadata, Timestamp ts);
+
+ @Override
+ public String toString() {
+ StringBuilder stringBuilder = new StringBuilder();
+ stringBuilder.append("group=").append(group).append(", ").append("name=")
+ .append(name).append(", ").append("timestamp=").append(timestamp).append(", ");
+ for (int i = 0; i < this.tags.length; i++) {
+ final int index = i;
+ Map<String, MetadataCache.TagInfo> tagMap = this.entityMetadata.getTagOffset();
+ Optional<String> tagName = tagMap.keySet().stream().filter(name -> tagMap.get(name).getOffset() == index).findAny();
+ if (tagName.isPresent()) {
+ stringBuilder.append(tagName.get()).append("=").append(((Serializable<BanyandbModel.TagValue>) this.tags[i]).serialize()).append(", ");
+ }
+ }
+ return stringBuilder.toString();
+ }
}