You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2022/04/28 00:17:02 UTC

[skywalking-banyandb-java-client] branch main updated: Truncate duration unit at days (#11)

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

wusheng 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 9780718  Truncate duration unit at days (#11)
9780718 is described below

commit 97807183cf152dc1b686263fe32d71ee5618f808
Author: Jiajing LU <lu...@gmail.com>
AuthorDate: Thu Apr 28 08:16:58 2022 +0800

    Truncate duration unit at days (#11)
---
 .../banyandb/v1/client/BanyanDBClient.java         | 60 ++++++++++++++++++++--
 .../banyandb/v1/client/metadata/Duration.java      | 30 +----------
 .../banyandb/v1/client/metadata/Measure.java       |  9 +++-
 .../banyandb/v1/client/metadata/Property.java      |  2 +-
 .../banyandb/v1/client/metadata/Stream.java        |  9 +++-
 .../banyandb/v1/client/metadata/TagFamilySpec.java |  9 +++-
 6 files changed, 81 insertions(+), 38 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 98501c9..23d8ff7 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
@@ -328,6 +328,7 @@ public class BanyanDBClient implements Closeable {
             store.get(property.group(), property.name(), property.id());
             store.update(property);
         } catch (BanyanDBException ex) {
+            // multiple entity can share a single index rule
             if (ex.getStatus().equals(Status.Code.NOT_FOUND)) {
                 store.create(property);
                 return;
@@ -349,6 +350,18 @@ public class BanyanDBClient implements Closeable {
         return store.get(group, name, id);
     }
 
+    /**
+     * List Properties
+     *
+     * @param group group of the metadata
+     * @param name  name of the metadata
+     * @return all properties belonging to the group and the name
+     */
+    public List<Property> findProperties(String group, String name) throws BanyanDBException {
+        PropertyStore store = new PropertyStore(checkNotNull(this.channel));
+        return store.list(group, name);
+    }
+
     /**
      * Delete property
      *
@@ -373,7 +386,14 @@ public class BanyanDBClient implements Closeable {
 
         IndexRuleMetadataRegistry irRegistry = new IndexRuleMetadataRegistry(checkNotNull(this.channel));
         for (final IndexRule ir : indexRules) {
-            irRegistry.create(ir);
+            try {
+                irRegistry.create(ir);
+            } catch (BanyanDBException ex) {
+                if (ex.getStatus().equals(Status.Code.ALREADY_EXISTS)) {
+                    continue;
+                }
+                throw ex;
+            }
         }
 
         List<String> indexRuleNames = indexRules.stream().map(IndexRule::name).collect(Collectors.toList());
@@ -398,7 +418,15 @@ public class BanyanDBClient implements Closeable {
 
         IndexRuleMetadataRegistry irRegistry = new IndexRuleMetadataRegistry(checkNotNull(this.channel));
         for (final IndexRule ir : indexRules) {
-            irRegistry.create(ir);
+            try {
+                irRegistry.create(ir);
+            } catch (BanyanDBException ex) {
+                // multiple entity can share a single index rule
+                if (ex.getStatus().equals(Status.Code.ALREADY_EXISTS)) {
+                    continue;
+                }
+                throw ex;
+            }
         }
 
         List<String> indexRuleNames = indexRules.stream().map(IndexRule::name).collect(Collectors.toList());
@@ -411,6 +439,26 @@ public class BanyanDBClient implements Closeable {
         irbRegistry.create(binding);
     }
 
+    /**
+     * Try to find the group defined
+     *
+     * @param name name of the group
+     * @return the group found in BanyanDB
+     */
+    public Group findGroup(String name) throws BanyanDBException {
+        Preconditions.checkArgument(!Strings.isNullOrEmpty(name));
+
+        try {
+            return new GroupMetadataRegistry(checkNotNull(this.channel)).get(name, name);
+        } catch (BanyanDBException ex) {
+            if (ex.getStatus().equals(Status.Code.NOT_FOUND)) {
+                return null;
+            }
+
+            throw ex;
+        }
+    }
+
     /**
      * Try to find the stream from the BanyanDB with given group and name.
      *
@@ -423,7 +471,9 @@ public class BanyanDBClient implements Closeable {
         Preconditions.checkArgument(!Strings.isNullOrEmpty(name));
 
         Stream s = new StreamMetadataRegistry(checkNotNull(this.channel)).get(group, name);
-        return s.withIndexRules(findIndexRulesByGroupAndBindingName(group, IndexRuleBinding.defaultBindingRule(name)));
+        s = s.withIndexRules(findIndexRulesByGroupAndBindingName(group, IndexRuleBinding.defaultBindingRule(name)));
+        MetadataCache.INSTANCE.register(s);
+        return s;
     }
 
     /**
@@ -438,7 +488,9 @@ public class BanyanDBClient implements Closeable {
         Preconditions.checkArgument(!Strings.isNullOrEmpty(name));
 
         Measure m = new MeasureMetadataRegistry(checkNotNull(this.channel)).get(group, name);
-        return m.withIndexRules(findIndexRulesByGroupAndBindingName(group, IndexRuleBinding.defaultBindingRule(name)));
+        m = m.withIndexRules(findIndexRulesByGroupAndBindingName(group, IndexRuleBinding.defaultBindingRule(name)));
+        MetadataCache.INSTANCE.register(m);
+        return m;
     }
 
     private List<IndexRule> findIndexRulesByGroupAndBindingName(String group, String bindingName) throws BanyanDBException {
diff --git a/src/main/java/org/apache/skywalking/banyandb/v1/client/metadata/Duration.java b/src/main/java/org/apache/skywalking/banyandb/v1/client/metadata/Duration.java
index 060cd76..ad5530e 100644
--- a/src/main/java/org/apache/skywalking/banyandb/v1/client/metadata/Duration.java
+++ b/src/main/java/org/apache/skywalking/banyandb/v1/client/metadata/Duration.java
@@ -27,11 +27,9 @@ import java.util.regex.Pattern;
 @EqualsAndHashCode
 public class Duration {
     private static final Pattern DURATION_PATTERN =
-            Pattern.compile("(((?<year>[0-9]+)y)?((?<week>[0-9]+)w)?((?<day>[0-9]+)d)?((?<hour>[0-9]+)h)?((?<minute>[0-9]+)m)?|0)");
+            Pattern.compile("(((?<day>\\d+)d)?((?<hour>\\d+)h)?((?<minute>\\d+)m)?|0)");
     private static final long MINUTES_PER_HOUR = 60;
     private static final long MINUTES_PER_DAY = MINUTES_PER_HOUR * 24;
-    private static final long MINUTES_PER_WEEK = MINUTES_PER_DAY * 7;
-    private static final long MINUTES_PER_YEAR = MINUTES_PER_DAY * 365;
 
     @EqualsAndHashCode.Exclude
     private volatile String text;
@@ -48,16 +46,6 @@ public class Duration {
 
         final StringBuilder builder = new StringBuilder();
         long minutes = this.minutes;
-        if (minutes >= MINUTES_PER_YEAR) {
-            long years = minutes / MINUTES_PER_YEAR;
-            builder.append(years).append("y");
-            minutes = minutes % MINUTES_PER_YEAR;
-        }
-        if (minutes >= MINUTES_PER_WEEK) {
-            long weeks = minutes / MINUTES_PER_WEEK;
-            builder.append(weeks).append("w");
-            minutes = minutes % MINUTES_PER_WEEK;
-        }
         if (minutes >= MINUTES_PER_DAY) {
             long weeks = minutes / MINUTES_PER_DAY;
             builder.append(weeks).append("d");
@@ -88,14 +76,6 @@ public class Duration {
             return new Duration(0);
         }
         long total = 0;
-        final String years = matcher.group("year");
-        if (!Strings.isNullOrEmpty(years)) {
-            total += Long.parseLong(years) * MINUTES_PER_YEAR;
-        }
-        final String weeks = matcher.group("week");
-        if (!Strings.isNullOrEmpty(weeks)) {
-            total += Long.parseLong(weeks) * MINUTES_PER_WEEK;
-        }
         final String days = matcher.group("day");
         if (!Strings.isNullOrEmpty(days)) {
             total += Long.parseLong(days) * MINUTES_PER_DAY;
@@ -122,12 +102,4 @@ public class Duration {
     public static Duration ofDays(long days) {
         return ofHours(days * MINUTES_PER_DAY);
     }
-
-    public static Duration ofWeeks(long weeks) {
-        return ofHours(weeks * MINUTES_PER_WEEK);
-    }
-
-    public static Duration ofYears(long years) {
-        return ofHours(years * MINUTES_PER_YEAR);
-    }
 }
diff --git a/src/main/java/org/apache/skywalking/banyandb/v1/client/metadata/Measure.java b/src/main/java/org/apache/skywalking/banyandb/v1/client/metadata/Measure.java
index 80b021d..3e586c4 100644
--- a/src/main/java/org/apache/skywalking/banyandb/v1/client/metadata/Measure.java
+++ b/src/main/java/org/apache/skywalking/banyandb/v1/client/metadata/Measure.java
@@ -85,6 +85,11 @@ public abstract class Measure extends NamedSchema<BanyandbDatabase.Measure> {
             return this;
         }
 
+        public final Measure.Builder addTagFamilies(Iterable<TagFamilySpec> tagFamilySpecs) {
+            tagFamiliesBuilder().addAll(tagFamilySpecs);
+            return this;
+        }
+
         abstract ImmutableList.Builder<FieldSpec> fieldsBuilder();
 
         public final Measure.Builder addField(FieldSpec fieldSpec) {
@@ -95,7 +100,9 @@ public abstract class Measure extends NamedSchema<BanyandbDatabase.Measure> {
         abstract ImmutableList.Builder<IndexRule> indexRulesBuilder();
 
         public final Measure.Builder addIndexes(Iterable<IndexRule> indexRules) {
-            indexRulesBuilder().addAll(indexRules);
+            for (final IndexRule ir : indexRules) {
+                this.addIndex(ir);
+            }
             return this;
         }
 
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
index 785389b..72771e5 100644
--- 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
@@ -33,7 +33,7 @@ import java.util.List;
 public abstract class Property extends NamedSchema<BanyandbProperty.Property> {
     public abstract String id();
 
-    abstract ImmutableList<TagAndValue<?>> tags();
+    public abstract ImmutableList<TagAndValue<?>> tags();
 
     @Override
     public BanyandbProperty.Property serialize() {
diff --git a/src/main/java/org/apache/skywalking/banyandb/v1/client/metadata/Stream.java b/src/main/java/org/apache/skywalking/banyandb/v1/client/metadata/Stream.java
index 9bf62c1..88864fb 100644
--- a/src/main/java/org/apache/skywalking/banyandb/v1/client/metadata/Stream.java
+++ b/src/main/java/org/apache/skywalking/banyandb/v1/client/metadata/Stream.java
@@ -71,10 +71,17 @@ public abstract class Stream extends NamedSchema<BanyandbDatabase.Stream> {
             return this;
         }
 
+        public final Builder addTagFamilies(Iterable<TagFamilySpec> tagFamilySpecs) {
+            tagFamiliesBuilder().addAll(tagFamilySpecs);
+            return this;
+        }
+
         abstract ImmutableList.Builder<IndexRule> indexRulesBuilder();
 
         public final Builder addIndexes(Iterable<IndexRule> indexRules) {
-            indexRulesBuilder().addAll(indexRules);
+            for (final IndexRule ir : indexRules) {
+                this.addIndex(ir);
+            }
             return this;
         }
 
diff --git a/src/main/java/org/apache/skywalking/banyandb/v1/client/metadata/TagFamilySpec.java b/src/main/java/org/apache/skywalking/banyandb/v1/client/metadata/TagFamilySpec.java
index ff14425..a09f048 100644
--- a/src/main/java/org/apache/skywalking/banyandb/v1/client/metadata/TagFamilySpec.java
+++ b/src/main/java/org/apache/skywalking/banyandb/v1/client/metadata/TagFamilySpec.java
@@ -36,12 +36,12 @@ public abstract class TagFamilySpec implements Serializable<BanyandbDatabase.Tag
     /**
      * name of the tag family
      */
-    abstract String tagFamilyName();
+    public abstract String tagFamilyName();
 
     /**
      * TagSpec(s) contained in this family
      */
-    abstract ImmutableList<TagSpec> tagSpecs();
+    public abstract ImmutableList<TagSpec> tagSpecs();
 
     public static TagFamilySpec.Builder create(String tagFamilyName) {
         return new AutoValue_TagFamilySpec.Builder().setTagFamilyName(tagFamilyName);
@@ -58,6 +58,11 @@ public abstract class TagFamilySpec implements Serializable<BanyandbDatabase.Tag
             return this;
         }
 
+        public final Builder addTagSpecs(Iterable<TagSpec> tagSpecs) {
+            tagSpecsBuilder().addAll(tagSpecs);
+            return this;
+        }
+
         public abstract TagFamilySpec build();
     }