You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by lu...@apache.org on 2022/04/05 14:10:51 UTC
[skywalking-banyandb-java-client] 01/01: adjust API and add property support
This is an automated email from the ASF dual-hosted git repository.
lujiajing pushed a commit to branch add-property-api
in repository https://gitbox.apache.org/repos/asf/skywalking-banyandb-java-client.git
commit ec26b4b3c22fbeb63c53e08407b34487ec4f10d2
Author: Megrez Lu <lu...@gmail.com>
AuthorDate: Tue Apr 5 22:10:35 2022 +0800
adjust API and add property support
---
.../banyandb/v1/client/PairQueryCondition.java | 64 ++++-----------
.../skywalking/banyandb/v1/client/TagAndValue.java | 67 +++++++++++++++-
.../banyandb/v1/client/metadata/Property.java | 75 ++++++++++++++++++
src/main/proto/banyandb/v1/banyandb-property.proto | 90 ++++++++++++++++++++++
4 files changed, 244 insertions(+), 52 deletions(-)
diff --git a/src/main/java/org/apache/skywalking/banyandb/v1/client/PairQueryCondition.java b/src/main/java/org/apache/skywalking/banyandb/v1/client/PairQueryCondition.java
index ff7540f..f2f2b0c 100644
--- a/src/main/java/org/apache/skywalking/banyandb/v1/client/PairQueryCondition.java
+++ b/src/main/java/org/apache/skywalking/banyandb/v1/client/PairQueryCondition.java
@@ -25,43 +25,32 @@ import java.util.List;
/**
* PairQuery represents a query condition, including tag name, operator, and value(s);
*/
-public abstract class PairQueryCondition<T> extends TagAndValue<T> {
+public abstract class PairQueryCondition<T> {
protected final BanyandbModel.Condition.BinaryOp op;
+ private final TagAndValue<T> tagAndValue;
- private PairQueryCondition(String tagName, BanyandbModel.Condition.BinaryOp op, T value) {
- super(tagName, value);
+ private PairQueryCondition(BanyandbModel.Condition.BinaryOp op, TagAndValue<T> tagAndValue) {
this.op = op;
+ this.tagAndValue = tagAndValue;
}
BanyandbModel.Condition build() {
return BanyandbModel.Condition.newBuilder()
- .setName(this.tagName)
+ .setName(this.tagAndValue.getTagName())
.setOp(this.op)
- .setValue(buildTypedPair()).build();
+ .setValue(this.tagAndValue.buildTypedTagValue()).build();
}
- /**
- * The various implementations should build different TypedPair
- *
- * @return typedPair to be included
- */
- protected abstract BanyandbModel.TagValue buildTypedPair();
+ public String getTagName() {
+ return this.tagAndValue.getTagName();
+ }
/**
* LongQueryCondition represents `tag(Long) $op value` condition.
*/
public static class LongQueryCondition extends PairQueryCondition<Long> {
private LongQueryCondition(String tagName, BanyandbModel.Condition.BinaryOp op, Long value) {
- super(tagName, op, value);
- }
-
- @Override
- protected BanyandbModel.TagValue buildTypedPair() {
- return BanyandbModel.TagValue.newBuilder()
- .setInt(BanyandbModel.Int
- .newBuilder()
- .setValue(value).build())
- .build();
+ super(op, new TagAndValue.LongTagPair(tagName, value));
}
/**
@@ -142,16 +131,7 @@ public abstract class PairQueryCondition<T> extends TagAndValue<T> {
*/
public static class StringQueryCondition extends PairQueryCondition<String> {
private StringQueryCondition(String tagName, BanyandbModel.Condition.BinaryOp op, String value) {
- super(tagName, op, value);
- }
-
- @Override
- protected BanyandbModel.TagValue buildTypedPair() {
- return BanyandbModel.TagValue.newBuilder()
- .setStr(BanyandbModel.Str
- .newBuilder()
- .setValue(value).build())
- .build();
+ super(op, new TagAndValue.StringTagPair(tagName, value));
}
/**
@@ -184,16 +164,7 @@ public abstract class PairQueryCondition<T> extends TagAndValue<T> {
*/
public static class StringArrayQueryCondition extends PairQueryCondition<List<String>> {
private StringArrayQueryCondition(String tagName, BanyandbModel.Condition.BinaryOp op, List<String> value) {
- super(tagName, op, value);
- }
-
- @Override
- protected BanyandbModel.TagValue buildTypedPair() {
- return BanyandbModel.TagValue.newBuilder()
- .setStrArray(BanyandbModel.StrArray
- .newBuilder()
- .addAllValue(value).build())
- .build();
+ super(op, new TagAndValue.StringArrayTagPair(tagName, value));
}
/**
@@ -250,16 +221,7 @@ public abstract class PairQueryCondition<T> extends TagAndValue<T> {
*/
public static class LongArrayQueryCondition extends PairQueryCondition<List<Long>> {
private LongArrayQueryCondition(String tagName, BanyandbModel.Condition.BinaryOp op, List<Long> value) {
- super(tagName, op, value);
- }
-
- @Override
- protected BanyandbModel.TagValue buildTypedPair() {
- return BanyandbModel.TagValue.newBuilder()
- .setIntArray(BanyandbModel.IntArray
- .newBuilder()
- .addAllValue(value).build())
- .build();
+ super(op, new TagAndValue.LongArrayTagPair(tagName, value));
}
/**
diff --git a/src/main/java/org/apache/skywalking/banyandb/v1/client/TagAndValue.java b/src/main/java/org/apache/skywalking/banyandb/v1/client/TagAndValue.java
index afab5b6..cf4ad0f 100644
--- a/src/main/java/org/apache/skywalking/banyandb/v1/client/TagAndValue.java
+++ b/src/main/java/org/apache/skywalking/banyandb/v1/client/TagAndValue.java
@@ -21,6 +21,7 @@ package org.apache.skywalking.banyandb.v1.client;
import java.util.List;
import com.google.protobuf.ByteString;
+import com.google.protobuf.NullValue;
import lombok.EqualsAndHashCode;
import org.apache.skywalking.banyandb.model.v1.BanyandbModel;
@@ -50,7 +51,21 @@ public abstract class TagAndValue<T> extends Value<T> {
return this.value == null;
}
- static TagAndValue<?> build(BanyandbModel.Tag tag) {
+ /**
+ * TagValue is referenced from various derived data structs.
+ *
+ * @return TagValue to be included
+ */
+ protected abstract BanyandbModel.TagValue buildTypedTagValue();
+
+ public BanyandbModel.Tag build() {
+ return BanyandbModel.Tag.newBuilder()
+ .setKey(this.tagName)
+ .setValue(buildTypedTagValue())
+ .build();
+ }
+
+ static TagAndValue<?> fromProtobuf(BanyandbModel.Tag tag) {
switch (tag.getValue().getValueCase()) {
case INT:
return new LongTagPair(tag.getKey(), tag.getValue().getInt().getValue());
@@ -73,30 +88,73 @@ public abstract class TagAndValue<T> extends Value<T> {
StringTagPair(final String tagName, final String value) {
super(tagName, value);
}
+
+ @Override
+ protected BanyandbModel.TagValue buildTypedTagValue() {
+ return BanyandbModel.TagValue.newBuilder()
+ .setStr(BanyandbModel.Str
+ .newBuilder()
+ .setValue(value).build())
+ .build();
+ }
}
public static class StringArrayTagPair extends TagAndValue<List<String>> {
StringArrayTagPair(final String tagName, final List<String> value) {
super(tagName, value);
}
+
+ @Override
+ protected BanyandbModel.TagValue buildTypedTagValue() {
+ return BanyandbModel.TagValue.newBuilder()
+ .setStrArray(BanyandbModel.StrArray
+ .newBuilder()
+ .addAllValue(value).build())
+ .build();
+ }
}
public static class LongTagPair extends TagAndValue<Long> {
LongTagPair(final String tagName, final Long value) {
super(tagName, value);
}
+
+ @Override
+ protected BanyandbModel.TagValue buildTypedTagValue() {
+ return BanyandbModel.TagValue.newBuilder()
+ .setInt(BanyandbModel.Int
+ .newBuilder()
+ .setValue(value).build())
+ .build();
+ }
}
public static class LongArrayTagPair extends TagAndValue<List<Long>> {
LongArrayTagPair(final String tagName, final List<Long> value) {
super(tagName, value);
}
+
+ @Override
+ protected BanyandbModel.TagValue buildTypedTagValue() {
+ return BanyandbModel.TagValue.newBuilder()
+ .setIntArray(BanyandbModel.IntArray
+ .newBuilder()
+ .addAllValue(value).build())
+ .build();
+ }
}
public static class BinaryTagPair extends TagAndValue<ByteString> {
public BinaryTagPair(String fieldName, ByteString byteString) {
super(fieldName, byteString);
}
+
+ @Override
+ protected BanyandbModel.TagValue buildTypedTagValue() {
+ return BanyandbModel.TagValue.newBuilder()
+ .setBinaryData(this.value)
+ .build();
+ }
}
public static class NullTagPair extends TagAndValue<Void> {
@@ -104,6 +162,13 @@ public abstract class TagAndValue<T> extends Value<T> {
super(tagName, null);
}
+ @Override
+ protected BanyandbModel.TagValue buildTypedTagValue() {
+ return BanyandbModel.TagValue.newBuilder()
+ .setNull(NullValue.NULL_VALUE)
+ .build();
+ }
+
@Override
public boolean isNull() {
return true;
diff --git a/src/main/java/org/apache/skywalking/banyandb/v1/client/metadata/Property.java b/src/main/java/org/apache/skywalking/banyandb/v1/client/metadata/Property.java
new file mode 100644
index 0000000..5669bc2
--- /dev/null
+++ b/src/main/java/org/apache/skywalking/banyandb/v1/client/metadata/Property.java
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.banyandb.v1.client.metadata;
+
+import com.google.auto.value.AutoValue;
+import com.google.common.collect.ImmutableList;
+import org.apache.skywalking.banyandb.model.v1.BanyandbModel;
+import org.apache.skywalking.banyandb.property.v1.BanyandbProperty;
+import org.apache.skywalking.banyandb.v1.client.TagAndValue;
+
+import java.time.ZonedDateTime;
+import java.util.ArrayList;
+import java.util.List;
+
+@AutoValue
+public abstract class Property extends NamedSchema<BanyandbProperty.Property> {
+ abstract String id();
+
+ abstract ImmutableList<TagAndValue<?>> tags();
+
+ @Override
+ public BanyandbProperty.Property serialize() {
+ List<BanyandbModel.Tag> tags = new ArrayList<>(this.tags().size());
+ for (final TagAndValue<?> tagAndValue : this.tags()) {
+ tags.add(tagAndValue.build());
+ }
+ return BanyandbProperty.Property.newBuilder()
+ .setMetadata(BanyandbProperty.Metadata.newBuilder()
+ .setId(id())
+ .setContainer(buildMetadata())
+ .build())
+ .addAllTags(tags)
+ .build();
+ }
+
+ public static Builder create(String group, String name, String id) {
+ return new AutoValue_Property.Builder().setGroup(group).setName(name).setId(id);
+ }
+
+ @AutoValue.Builder
+ public abstract static class Builder {
+ abstract Builder setGroup(String group);
+
+ abstract Builder setName(String name);
+
+ abstract Builder setUpdatedAt(ZonedDateTime updatedAt);
+
+ public abstract Builder setId(String id);
+
+ abstract ImmutableList.Builder<TagAndValue<?>> tagsBuilder();
+
+ public final Builder addTag(TagAndValue<?> tagAndValue) {
+ tagsBuilder().add(tagAndValue);
+ return this;
+ }
+
+ public abstract Property build();
+ }
+}
diff --git a/src/main/proto/banyandb/v1/banyandb-property.proto b/src/main/proto/banyandb/v1/banyandb-property.proto
new file mode 100644
index 0000000..fafe19f
--- /dev/null
+++ b/src/main/proto/banyandb/v1/banyandb-property.proto
@@ -0,0 +1,90 @@
+// Licensed to Apache Software Foundation (ASF) under one or more contributor
+// license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright
+// ownership. Apache Software Foundation (ASF) licenses this file to you under
+// the Apache License, Version 2.0 (the "License"); you may
+// not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+syntax = "proto3";
+
+option java_package = "org.apache.skywalking.banyandb.property.v1";
+
+package banyandb.property.v1;
+
+import "google/protobuf/timestamp.proto";
+import "banyandb/v1/banyandb-common.proto";
+import "banyandb/v1/banyandb-model.proto";
+
+// Metadata is for multi-tenant use
+message Metadata {
+ // container is created when it receives the first property
+ common.v1.Metadata container = 1;
+ // id identifies a property
+ string id = 2;
+}
+
+// Property stores the user defined data
+message Property {
+ // metadata is the identity of a property
+ Metadata metadata = 1;
+ // tag stores the content of a property
+ repeated model.v1.Tag tags = 2;
+ // updated_at indicates when the property is updated
+ google.protobuf.Timestamp updated_at = 3;
+}
+
+message CreateRequest {
+ banyandb.property.v1.Property property = 1;
+}
+
+message CreateResponse {
+}
+
+message UpdateRequest {
+ banyandb.property.v1.Property property = 1;
+}
+
+message UpdateResponse {
+}
+
+message DeleteRequest {
+ banyandb.property.v1.Metadata metadata = 1;
+}
+
+message DeleteResponse {
+ bool deleted = 1;
+}
+
+message GetRequest {
+ banyandb.property.v1.Metadata metadata = 1;
+}
+
+message GetResponse {
+ banyandb.property.v1.Property property = 1;
+}
+
+message ListRequest {
+ banyandb.common.v1.Metadata container = 1;
+}
+
+message ListResponse {
+ repeated banyandb.property.v1.Property property = 1;
+}
+
+service PropertyService {
+ rpc Create(CreateRequest) returns (CreateResponse);
+ rpc Update(UpdateRequest) returns (UpdateResponse);
+ rpc Delete(DeleteRequest) returns (DeleteResponse);
+ rpc Get(GetRequest) returns (GetResponse);
+ rpc List(ListRequest) returns (ListResponse);
+}