• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

ben-manes / caffeine / #5698
100%
master: 100%

Build:
Build:
LAST BUILD BRANCH: v3.dev
DEFAULT BRANCH: master
Ran 30 Jul 2026 10:02AM UTC
Jobs 1
Files 78
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

30 Jul 2026 09:29AM UTC coverage: 99.918% (-0.07%) from 99.988%
#5698

push

github

ben-manes
Fix minor defects found by a review sweep

- Prefer the operation's own failure over a throwing synchronous jcache
  listener's, retaining the latter as suppressed. awaitSynchronous()
  became throwing, so putAll, removeAll, invoke, and LoadingCacheProxy's
  get and getAll discarded the writer, loader, or entry processor
  failure that the specification requires the caller to observe.
- Chain the per-key dispatch queue with handleAsync so that a
  predecessor which completed exceptionally, as dispatch rethrows an
  Error, cannot suppress the next event's delivery. thenApplyAsync
  relayed the throwable and silently never invoked the listener, losing
  a same-key event. The predecessor's failure is still observed through
  the pending list, which holds each synchronous event's own future.
- Guard the synchronous listener exception fold against self-
  suppression, as a listener that rethrows a stored exception yields the
  same instance for two events and Throwable.addSuppressed then throws,
  masking the failure it was folding. Restore awaitSynchronous()'s fast
  path for when nothing is pending, which delegating to
  chainSynchronous() had dropped.
- Span the CompletionListener notification with loadAll's tracked future
  so that close() awaits the callback rather than returning while it is
  still queued, and clear the pending synchronous futures in a finally
  so an Error cannot strand them for the next load to join and
  misreport. The notification is composed onto the load rather than
  joined, as its dispatches run on the executor that the load itself
  occupies.
- Unregister the JMX beans before destroyCache frees the cache name, as
  otherwise a same-named replacement cache's beans are unregistered
  instead, and route them through the toggles so that the statistics and
  configuration flags are applied and a failing unregistration is
  aggregated rather than aborting the close. Share the suppression logic
  as suppress(), which tolerates a nu... (continued)

4221 of 4239 branches covered (99.58%)

83 of 88 new or added lines in 7 files covered. (94.32%)

1 existing line in 1 file now uncovered.

8523 of 8530 relevant lines covered (99.92%)

1.0 hits per line

Uncovered Changes

Lines Coverage ∆ File
3
99.61
-0.39% jcache/src/main/java/com/github/benmanes/caffeine/jcache/CacheProxy.java
2
97.18
-2.82% jcache/src/main/java/com/github/benmanes/caffeine/jcache/LoadingCacheProxy.java

Coverage Regressions

Lines Coverage ∆ File
1
98.78
-1.22% caffeine/src/main/java/com/github/benmanes/caffeine/cache/StripedBuffer.java
Jobs
ID Job ID Ran Files Coverage
1 #5698.1 30 Jul 2026 10:02AM UTC 78
99.92
Source Files on build #5698
  • Tree
  • List 78
  • Changed 8
  • Source Changed 7
  • Coverage Changed 6
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • fec17608 on github
  • Prev Build on master
  • Next Build on v3.dev
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc