Skip to content

1.1.2

Choose a tag to compare

@Hyshmily Hyshmily released this 02 Jun 07:43
  • Report Backpressure MechanismHotKeyReporter.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 PoolHotKeyReporter 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.
  • New Configuration PropertiesHotKeyProperties added queueCapacity (default 10000), queueOfferTimeoutMs (default 100), consumerCount (default 0 = auto), prefix hotkey.local.*.
  • Actuator Queue MetricsHotKeyEndpoint added 4 monitoring fields: reportQueueDepth, reportQueueCapacity, reportExpiredCount, reportQueueFullCount, injected via ObjectProvider<HotKeyReporter> into HotKeyActuatorAutoConfiguration.
  • Reporter Lifecycle ManagementHotKeyReportAutoConfiguration uses initMethod = "start" and destroyMethod = "stop" to manage HotKeyReporter dispatcher threads.
  • Negative Shard Routing FixHotKeyReporter 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 FixHotKeyAspect 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.
  • Fixed known bugs