in oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBIndexInstaller.java [262:362]
private ResourceExist checkResourceExistence(MetadataRegistry.SchemaMetadata metadata,
BanyanDBClient client) throws BanyanDBException {
ResourceExist resourceExist;
Group.Builder gBuilder
= Group.newBuilder()
.setMetadata(BanyandbCommon.Metadata.newBuilder().setName(metadata.getGroup()));
BanyandbCommon.ResourceOpts.Builder optsBuilder = BanyandbCommon.ResourceOpts.newBuilder().setShardNum(metadata.getResource().getShardNum());
switch (metadata.getKind()) {
case STREAM:
optsBuilder.setSegmentInterval(
IntervalRule.newBuilder()
.setUnit(
IntervalRule.Unit.UNIT_DAY)
.setNum(
metadata.getResource().getSegmentInterval()))
.setTtl(
IntervalRule.newBuilder()
.setUnit(
IntervalRule.Unit.UNIT_DAY)
.setNum(
metadata.getResource().getTtl()));
resourceExist = client.existStream(metadata.getGroup(), metadata.name());
gBuilder.setCatalog(BanyandbCommon.Catalog.CATALOG_STREAM).build();
break;
case MEASURE:
optsBuilder.setSegmentInterval(
IntervalRule.newBuilder()
.setUnit(
IntervalRule.Unit.UNIT_DAY)
.setNum(
metadata.getResource().getSegmentInterval()))
.setTtl(
IntervalRule.newBuilder()
.setUnit(
IntervalRule.Unit.UNIT_DAY)
.setNum(
metadata.getResource().getTtl()));
resourceExist = client.existMeasure(metadata.getGroup(), metadata.name());
gBuilder.setCatalog(BanyandbCommon.Catalog.CATALOG_MEASURE).build();
break;
case PROPERTY:
resourceExist = client.existProperty(metadata.getGroup(), metadata.name());
gBuilder.setCatalog(BanyandbCommon.Catalog.CATALOG_PROPERTY).build();
break;
default:
throw new IllegalStateException("unknown metadata kind: " + metadata.getKind());
}
if (CollectionUtils.isNotEmpty(metadata.getResource().getAdditionalLifecycleStages())) {
for (BanyanDBStorageConfig.Stage stage : metadata.getResource().getAdditionalLifecycleStages()) {
optsBuilder.addStages(
BanyandbCommon.LifecycleStage.newBuilder()
.setName(stage.getName().name())
.setShardNum(stage.getShardNum())
.setSegmentInterval(
IntervalRule.newBuilder().setUnit(IntervalRule.Unit.UNIT_DAY)
.setNum(stage.getSegmentInterval()))
.setTtl(
IntervalRule.newBuilder()
.setUnit(
IntervalRule.Unit.UNIT_DAY)
.setNum(
stage.getTtl()))
.setNodeSelector(stage.getNodeSelector())
.setClose(stage.isClose())
);
}
}
if (CollectionUtils.isNotEmpty(metadata.getResource().getDefaultQueryStages())) {
optsBuilder.addAllDefaultStages(metadata.getResource().getDefaultQueryStages());
}
gBuilder.setResourceOpts(optsBuilder.build());
if (!RunningMode.isNoInitMode()) {
if (!groupAligned.contains(metadata.getGroup())) {
// create the group if not exist
if (!resourceExist.hasGroup()) {
try {
Group g = client.define(gBuilder.build());
if (g != null) {
log.info("group {} created", g.getMetadata().getName());
}
} catch (BanyanDBException ex) {
if (ex.getStatus().equals(Status.Code.ALREADY_EXISTS)) {
log.info("group {} already created by another OAP node", metadata.getGroup());
} else {
throw ex;
}
}
} else {
// update the group if necessary
if (this.checkGroup(metadata, client)) {
client.update(gBuilder.build());
log.info("group {} updated", metadata.getGroup());
}
}
// mark the group as aligned
groupAligned.add(metadata.getGroup());
}
}
return resourceExist;
}