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 <lujiajing1...@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); +}