public void defineIndexRules()

in src/main/java/org/apache/skywalking/banyandb/v1/client/BanyanDBClient.java [577:611]


    public void defineIndexRules(Measure measure, List<IndexRule> indexRules) throws BanyanDBException {
        Preconditions.checkArgument(measure != null, "measure cannot be null");

        IndexRuleMetadataRegistry irRegistry = new IndexRuleMetadataRegistry(checkNotNull(this.channel));
        for (final IndexRule ir : indexRules) {
            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;
            }
        }
        if (indexRules.isEmpty()) {
            return;
        }

        List<String> indexRuleNames = indexRules.stream().map(indexRule -> indexRule.getMetadata().getName()).collect(Collectors.toList());

        IndexRuleBinding binding = IndexRuleBinding.newBuilder()
                                                   .setMetadata(Metadata.newBuilder()
                                                                        .setGroup(
                                                                            measure.getMetadata().getGroup())
                                                                        .setName(
                                                                            measure.getMetadata().getName()))
                                                   .setSubject(Subject.newBuilder()
                                                                      .setName(measure.getMetadata()
                                                                                      .getName())
                                                                      .setCatalog(
                                                                          BanyandbCommon.Catalog.CATALOG_MEASURE))
                                                   .addAllRules(indexRuleNames).build();
        this.define(binding);
    }