btlqql opened a new pull request, #2523:
URL: https://github.com/apache/rocketmq-dashboard/pull/2523

   ## What is the purpose of the change
   
   `listRegistryClusters` fanned its NameServer probes out onto an unbounded 
cached thread pool. `CompletableFuture.orTimeout` only completed the wrapper 
future, so a probe blocked on an unreachable NameServer kept its worker thread, 
and every refresh of the cluster list accumulated more blocked threads.
   
   ## Brief changelog
   
   - new bounded, closeable `RegistryProbeRunner`: a fixed-size worker pool 
with a bounded queue replaces the unbounded cached thread pool
   - when a probe exceeds its deadline the worker is explicitly cancelled 
(interrupted) so the pool thread is released, instead of leaking behind the 
timed-out future
   - a saturated queue degrades the offending registry entry to unavailable 
(logged) rather than throwing or growing the pool
   - the runner is shut down on Spring context close; idle workers (including 
core) time out so a quiet registry holds no threads
   - the admin clients the probes drive already carry a 5s RPC timeout 
(`MqAdminExtFactory`), so released workers don't pile up behind hung calls
   
   ## How was this patch verified
   
   - server: `ClusterServiceRegistryTest` 5/5, including two new tests that 
block every probe and assert the pool never grows past its bound across 
repeated refreshes, and that a saturated queue degrades without throwing; full 
`mvn test` ran 1500 tests with only the 7 pre-existing environment failures in 
the CLI agent tests (missing `sh` binary on a Windows machine, identical on the 
clean base)
   
   Fixes #2472
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to