in oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/DefaultScopeDefine.java [206:288]
private static void addNewScope(ScopeDeclaration declaration, Class originalClass) {
int id = declaration.id();
if (ID_2_NAME.containsKey(id)) {
throw new UnexpectedException(
"ScopeDeclaration id=" + id + " at " + originalClass.getName() + " has conflict with another named " + ID_2_NAME
.get(id));
}
if (id < 0) {
throw new UnexpectedException(
"ScopeDeclaration id=" + id + " at " + originalClass.getName() + " is negative. ");
}
String name = declaration.name();
if (NAME_2_ID.containsKey(name)) {
throw new UnexpectedException(
"ScopeDeclaration fieldName=" + name + " at " + originalClass.getName() + " has conflict with another id= " + NAME_2_ID
.get(name));
}
ID_2_NAME.put(id, name);
NAME_2_ID.put(name, id);
List<ScopeDefaultColumn> scopeDefaultColumns = new ArrayList<>();
ScopeDefaultColumn.VirtualColumnDefinition virtualColumn = (ScopeDefaultColumn.VirtualColumnDefinition) originalClass
.getAnnotation(ScopeDefaultColumn.VirtualColumnDefinition.class);
if (virtualColumn != null) {
scopeDefaultColumns.add(
new ScopeDefaultColumn(virtualColumn.fieldName(), virtualColumn.columnName(), virtualColumn
.type(), virtualColumn.isID(), virtualColumn.length(), false, false));
}
Field[] scopeClassField = originalClass.getDeclaredFields();
if (scopeClassField != null) {
for (Field field : scopeClassField) {
ScopeDefaultColumn.DefinedByField definedByField = field.getAnnotation(
ScopeDefaultColumn.DefinedByField.class);
ScopeDefaultColumn.BanyanDB banyanDB = field.getAnnotation(
ScopeDefaultColumn.BanyanDB.class);
boolean groupByCondInTopN = false;
if (banyanDB != null) {
groupByCondInTopN = banyanDB.groupByCondInTopN();
}
if (definedByField != null) {
if (!definedByField.requireDynamicActive() || ACTIVE_EXTRA_MODEL_COLUMNS) {
scopeDefaultColumns.add(
new ScopeDefaultColumn(
field.getName(), definedByField.columnName(), field.getType(), false,
definedByField.length(), groupByCondInTopN, definedByField.isAttribute()
));
}
}
}
}
SCOPE_COLUMNS.put(name, scopeDefaultColumns);
String catalogName = declaration.catalog();
switch (catalogName) {
case SERVICE_CATALOG_NAME:
SERVICE_CATALOG.put(id, Boolean.TRUE);
break;
case SERVICE_INSTANCE_CATALOG_NAME:
SERVICE_INSTANCE_CATALOG.put(id, Boolean.TRUE);
break;
case ENDPOINT_CATALOG_NAME:
ENDPOINT_CATALOG.put(id, Boolean.TRUE);
break;
case SERVICE_RELATION_CATALOG_NAME:
SERVICE_RELATION_CATALOG.put(id, Boolean.TRUE);
break;
case SERVICE_INSTANCE_RELATION_CATALOG_NAME:
SERVICE_INSTANCE_RELATION_CATALOG.put(id, Boolean.TRUE);
break;
case ENDPOINT_RELATION_CATALOG_NAME:
ENDPOINT_RELATION_CATALOG.put(id, Boolean.TRUE);
break;
case PROCESS_CATALOG_NAME:
PROCESS_CATALOG.put(id, Boolean.TRUE);
break;
case PROCESS_RELATION_CATALOG_NAME:
PROCESS_RELATION_CATALOG.put(id, Boolean.TRUE);
break;
}
}