refactor(trace): move sink registration to TraceSink default methods and restrict registry APIs

This commit is contained in:
2026-04-28 14:58:09 +08:00
parent 73f6ff2745
commit e66ed9e9c0
2 changed files with 14 additions and 8 deletions

View File

@@ -137,7 +137,7 @@ public final class Agent {
AgentContext.INSTANCE.addPostShutdownHook( AgentContext.INSTANCE.addPostShutdownHook(
"trace-sink-registry-close", "trace-sink-registry-close",
90, 90,
TraceSinkRegistry::close TraceSinkRegistry.INSTANCE::close
); );
AgentContext.INSTANCE.addPostShutdownHook( AgentContext.INSTANCE.addPostShutdownHook(
"config-center-close", "config-center-close",

View File

@@ -27,11 +27,10 @@ object TraceSinkRegistry {
private val closed = AtomicBoolean(false) private val closed = AtomicBoolean(false)
init { init {
register(FileTraceSink) FileTraceSink.register()
} }
@JvmStatic internal fun register(sink: TraceSink) {
fun register(sink: TraceSink) {
if (closed.get()) { if (closed.get()) {
log.warn("TraceSinkRegistry is closed, skip trace sink: {}", sink.javaClass.name) log.warn("TraceSinkRegistry is closed, skip trace sink: {}", sink.javaClass.name)
return return
@@ -41,12 +40,10 @@ object TraceSinkRegistry {
} }
} }
@JvmStatic internal fun unregister(sink: TraceSink) {
fun unregister(sink: TraceSink) {
sinks.remove(sink) sinks.remove(sink)
} }
@JvmStatic
fun publish(event: TraceEvent) { fun publish(event: TraceEvent) {
for (sink in sinks) { for (sink in sinks) {
runCatching { runCatching {
@@ -57,7 +54,6 @@ object TraceSinkRegistry {
} }
} }
@JvmStatic
fun close() { fun close() {
if (!closed.compareAndSet(false, true)) { if (!closed.compareAndSet(false, true)) {
return return
@@ -74,6 +70,16 @@ object TraceSinkRegistry {
} }
interface TraceSink : AutoCloseable { interface TraceSink : AutoCloseable {
fun register() {
TraceSinkRegistry.register(this)
}
fun unregister() {
TraceSinkRegistry.unregister(this)
}
fun consume(event: TraceEvent) fun consume(event: TraceEvent)
override fun close() { override fun close() {