Skip to content

[INLONG-12200][SDK] Avoid calling the handler while holding the lock to prevent reentrant deadlock in Dataproxy Go SDK - #12207

Open
yfsn666 wants to merge 1 commit into
apache:masterfrom
yfsn666:INLONG-12200
Open

[INLONG-12200][SDK] Avoid calling the handler while holding the lock to prevent reentrant deadlock in Dataproxy Go SDK#12207
yfsn666 wants to merge 1 commit into
apache:masterfrom
yfsn666:INLONG-12200

Conversation

@yfsn666

@yfsn666 yfsn666 commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Fixes #12200

Motivation

In the Dataproxy Go SDK, if an OnEndpointUpdate handler calls back into AddEventHandler/DelEventHandler/GetEndpoints from within the Manager-based or DNS discoverer's lookup, the same goroutine re-enters the discoverer's RWMutex and deadlocks.

Modifications

In both the Manager-based discoverer (dataproxy/discoverer.go) and the DNS discoverer (discoverer/dns.go), copy the handler list while holding the read lock, release the lock, and only then invoke the OnEndpointUpdate callbacks.

Verifying this change

(Please pick either of the following options)

  • This change is a trivial rework/code cleanup without any test coverage.

  • This change is already covered by existing tests, such as:
    (please describe tests)

  • This change added tests and can be verified as follows:

    (example:)

    • Added integration tests for end-to-end deployment with large payloads (10MB)
    • Extended integration test for recovery after broker failure

Documentation

  • Does this pull request introduce a new feature? no

…to prevent reentrant deadlock in Dataproxy Go SDK
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Improve][SDK] Avoid calling endpoint update handlers while holding the lock in the Dataproxy Go SDK discoverers

1 participant