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

ben-manes / caffeine / #5614 / 1
100%
master: 100%

Build:
Build:
LAST BUILD BRANCH: v3.dev
DEFAULT BRANCH: master
Ran 11 Jul 2026 09:59PM UTC
Files 78
Run time 2s
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

11 Jul 2026 09:20PM UTC coverage: 99.988% (-0.01%) from 100.0%
#5614.1

push

github

ben-manes
Probe quietly in the async VarExpiration putIfAbsent

BoundedVarExpiration.putIfAbsentAsync probed for a present entry with a
non-quiet cache.getIfPresent, which runs the read path through the
cache's configured AsyncExpiry and so applies the user's expireAfterRead
to the existing entry. A present-entry putIfAbsent then rewrote the
entry's expiration, violating the "no effect on the duration if the
entry was present" contract. The synchronous path routes the same probe
through FixedExpireAfterWrite, whose read leg is identity, so it never
recomputes the duration.

Probe with getIfPresentQuietly instead; the retries were already quiet,
so the loop-carried priorFuture collapses into the loop. This does not
apply to AsMapView.putIfAbsent, whose synchronous counterpart passes the
user Expiry and so correctly consults expireAfterRead on both paths.

4124 of 4134 branches covered (99.76%)

8385 of 8386 relevant lines covered (99.99%)

1.0 hits per line

Source Files on job #5614.1
  • Tree
  • List 78
  • Changed 4
  • Source Changed 3
  • Coverage Changed 4
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Build 5614
  • 38d5f409 on github
  • Prev Job for on v3.dev (##5613.1)
  • Next Job for on v3.dev (##5615.1)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc