in src/main/java/org/apache/skywalking/banyandb/v1/client/BanyanDBClient.java [509:536]
private 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::name).collect(Collectors.toList());
IndexRuleBindingMetadataRegistry irbRegistry = new IndexRuleBindingMetadataRegistry(checkNotNull(this.channel));
IndexRuleBinding binding = IndexRuleBinding.create(measure.group(),
IndexRuleBinding.defaultBindingRule(measure.name()),
IndexRuleBinding.Subject.referToMeasure(measure.name()),
indexRuleNames);
irbRegistry.create(binding);
}