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 2023/03/24 02:28:46 UTC

[skywalking-banyandb-java-client] branch main updated: Add multi-ID and multi-tag filters to property list operation (#39)

This is an automated email from the ASF dual-hosted git repository.

hanahmily pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/skywalking-banyandb-java-client.git


The following commit(s) were added to refs/heads/main by this push:
     new bb8c43d  Add multi-ID and multi-tag filters to property list operation (#39)
bb8c43d is described below

commit bb8c43d4b8a380e04f8a0543a64e35e3d251651e
Author: Gao Hongtao <ha...@gmail.com>
AuthorDate: Fri Mar 24 10:28:41 2023 +0800

    Add multi-ID and multi-tag filters to property list operation (#39)
    
    This update introduces two filters in the property client that enable
    property selection based on multiple IDs and multiple tags. These
    filters are fully supported by the server.
---
 .../banyandb/v1/client/BanyanDBClient.java         | 16 ++++++++++++-
 .../banyandb/v1/client/metadata/PropertyStore.java | 20 ++++++++++------
 .../v1/client/ITBanyanDBPropertyTests.java         | 28 ++++++++++++++++++++++
 .../v1/client/metadata/PropertyStoreTest.java      |  2 +-
 4 files changed, 57 insertions(+), 9 deletions(-)

diff --git a/src/main/java/org/apache/skywalking/banyandb/v1/client/BanyanDBClient.java b/src/main/java/org/apache/skywalking/banyandb/v1/client/BanyanDBClient.java
index 5c5e902..c6abc80 100644
--- a/src/main/java/org/apache/skywalking/banyandb/v1/client/BanyanDBClient.java
+++ b/src/main/java/org/apache/skywalking/banyandb/v1/client/BanyanDBClient.java
@@ -361,8 +361,22 @@ public class BanyanDBClient implements Closeable {
      * @return all properties belonging to the group and the name
      */
     public List<Property> findProperties(String group, String name) throws BanyanDBException {
+        return findProperties(group, name, null, null);
+
+    }
+
+    /**
+     * List Properties
+     *
+     * @param group group of the metadata
+     * @param name  name of the metadata
+     * @param ids   identities of the properties
+     * @param tags  tags to be returned
+     * @return all properties belonging to the group and the name
+     */
+    public List<Property> findProperties(String group, String name, List<String> ids, List<String> tags) throws BanyanDBException {
         PropertyStore store = new PropertyStore(checkNotNull(this.channel));
-        return store.list(group, name);
+        return store.list(group, name, ids, tags);
     }
 
     /**
diff --git a/src/main/java/org/apache/skywalking/banyandb/v1/client/metadata/PropertyStore.java b/src/main/java/org/apache/skywalking/banyandb/v1/client/metadata/PropertyStore.java
index 8758746..c75ebf8 100644
--- a/src/main/java/org/apache/skywalking/banyandb/v1/client/metadata/PropertyStore.java
+++ b/src/main/java/org/apache/skywalking/banyandb/v1/client/metadata/PropertyStore.java
@@ -97,14 +97,20 @@ public class PropertyStore {
         return Property.fromProtobuf(resp.getProperty());
     }
 
-    public List<Property> list(String group, String name) throws BanyanDBException {
+    public List<Property> list(String group, String name, List<String> ids, List<String> tags) throws BanyanDBException {
+        BanyandbProperty.ListRequest.Builder builder = BanyandbProperty.ListRequest.newBuilder()
+                .setContainer(BanyandbCommon.Metadata.newBuilder()
+                .setGroup(group)
+                .setName(name)
+                .build());
+        if (ids != null && ids.size() > 0) {
+            builder.addAllIds(ids);
+        }
+        if (tags != null && tags.size() > 0) {
+            builder.addAllTags(tags);
+        }
         BanyandbProperty.ListResponse resp = HandleExceptionsWith.callAndTranslateApiException(() ->
-                this.stub.list(BanyandbProperty.ListRequest.newBuilder()
-                        .setContainer(BanyandbCommon.Metadata.newBuilder()
-                                .setGroup(group)
-                                .setName(name)
-                                .build())
-                        .build()));
+                this.stub.list(builder.build()));
 
         return resp.getPropertyList().stream().map(Property::fromProtobuf).collect(Collectors.toList());
     }
diff --git a/src/test/java/org/apache/skywalking/banyandb/v1/client/ITBanyanDBPropertyTests.java b/src/test/java/org/apache/skywalking/banyandb/v1/client/ITBanyanDBPropertyTests.java
index b2eaf03..f3524d4 100644
--- a/src/test/java/org/apache/skywalking/banyandb/v1/client/ITBanyanDBPropertyTests.java
+++ b/src/test/java/org/apache/skywalking/banyandb/v1/client/ITBanyanDBPropertyTests.java
@@ -28,6 +28,8 @@ import org.junit.Before;
 import org.junit.Test;
 
 import java.io.IOException;
+import java.util.Arrays;
+import java.util.List;
 import java.util.concurrent.TimeUnit;
 
 import static org.awaitility.Awaitility.await;
@@ -100,4 +102,30 @@ public class ITBanyanDBPropertyTests extends BanyanDBClientTestCI {
             Assert.assertEquals(property2, gotProperty);
         });
     }
+
+    @Test
+    public void test_PropertyList() throws BanyanDBException {
+        Property property = Property.create("default", "sw", "id1")
+                .addTag(TagAndValue.newStringTag("name", "bar"))
+                .build();
+        Assert.assertTrue(this.client.apply(property).created());
+        property = Property.create("default", "sw", "id2")
+                .addTag(TagAndValue.newStringTag("name", "foo"))
+                .build();
+        Assert.assertTrue(this.client.apply(property).created());
+
+        await().atMost(10, TimeUnit.SECONDS).untilAsserted(() -> {
+            List<Property> gotProperties = client.findProperties("default", "sw");
+            Assert.assertEquals(2, gotProperties.size());
+        });
+        await().atMost(10, TimeUnit.SECONDS).untilAsserted(() -> {
+            List<Property> gotProperties = client.findProperties("default", "sw", Arrays.asList("id1", "id2"), null);
+            Assert.assertEquals(2, gotProperties.size());
+        });
+        await().atMost(10, TimeUnit.SECONDS).untilAsserted(() -> {
+            List<Property> gotProperties = client.findProperties("default", "sw", Arrays.asList("id2"), null);
+            Assert.assertEquals(1, gotProperties.size());
+        });
+    }
+
 }
diff --git a/src/test/java/org/apache/skywalking/banyandb/v1/client/metadata/PropertyStoreTest.java b/src/test/java/org/apache/skywalking/banyandb/v1/client/metadata/PropertyStoreTest.java
index 8cceff0..ad31872 100644
--- a/src/test/java/org/apache/skywalking/banyandb/v1/client/metadata/PropertyStoreTest.java
+++ b/src/test/java/org/apache/skywalking/banyandb/v1/client/metadata/PropertyStoreTest.java
@@ -121,7 +121,7 @@ public class PropertyStoreTest extends AbstractBanyanDBClientTest {
                 .addTag(TagAndValue.newStringTag("name", "hello"))
                 .build();
         Assert.assertTrue(this.store.apply(property, PropertyStore.Strategy.REPLACE).created());
-        List<Property> listProperties = this.store.list("default", "sw");
+        List<Property> listProperties = this.store.list("default", "sw", null, null);
         Assert.assertNotNull(listProperties);
         Assert.assertEquals(1, listProperties.size());
         Assert.assertEquals(listProperties.get(0), property);