You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Report Backpressure Mechanism — HotKeyReporter.flush() changed to enqueue via LinkedBlockingQueue.offer(timeout), no longer direct publish. When queue is full, after 100ms timeout it discards with WARN, backpressure naturally flows to Caffeine 30s eviction for rate limiting.
Dedicated Consumer Thread Pool — HotKeyReporter starts N daemon consumer threads (max(1, shardCount/2), configurable consumerCount) consuming from bounded queue and publishing to RabbitMQ. Each consumer checks 5s expiration when dequeuing, silently discarding expired entries.
Actuator Queue Metrics — HotKeyEndpoint added 4 monitoring fields: reportQueueDepth, reportQueueCapacity, reportExpiredCount, reportQueueFullCount, injected via ObjectProvider<HotKeyReporter> into HotKeyActuatorAutoConfiguration.
Reporter Lifecycle Management — HotKeyReportAutoConfiguration uses initMethod = "start" and destroyMethod = "stop" to manage HotKeyReporter dispatcher threads.
Negative Shard Routing Fix — HotKeyReporter shard routing changed from Math.abs(key.hashCode()) % shardCount to Math.floorMod(key.hashCode(), shardCount). Eliminates Integer.MIN_VALUE edge case where Math.abs(Integer.MIN_VALUE) returns negative causing array index out of bounds.
Checked Exception Propagation Fix — HotKeyAspect replaced throw new RuntimeException(e) with Lombok-free sneakyThrow(e), preserving original checked exception types through Supplier/Runnable lambdas in handleRead and handleWrite, so callers don't need to catch RuntimeException wrapper.