in common/src/main/java/io/opentelemetry/sdk/trace/FieldBackedSpanValueStorageProvider.java [52:81]
static {
FieldBackedSpanValueStorageProvider resultInstance = null;
MethodHandle getter = null;
AtomicReferenceFieldUpdater<SdkSpan, Object> setter = null;
try {
Field storageField = SdkSpan.class.getDeclaredField(FIELD_NAME);
if (storageField.getType() != Object.class) {
throw new IllegalStateException("Unexpected field type: " + storageField.getType());
}
getter = MethodHandles.lookup().unreflectGetter(storageField);
setter = AtomicReferenceFieldUpdater.newUpdater(SdkSpan.class, Object.class, FIELD_NAME);
logger.log(Level.FINE, "Using field-backed storage for SpanValues", FIELD_NAME);
resultInstance = new FieldBackedSpanValueStorageProvider();
} catch (NoSuchFieldException e) {
logger.log(
Level.FINE,
"Using map-backed storage for SpanValues because Field '{0}' does not exist on SdkSpan",
FIELD_NAME);
} catch (Exception e) {
logger.log(Level.SEVERE, "Failed to initialize span value storage", e);
throw new IllegalStateException(e);
}
spanFieldGetter = getter;
spanFieldSetter = setter;
INSTANCE = resultInstance;
}