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);
}