Skip to content

Releases: chrisvest/stormpot

stormpot-4.0

12 Oct 02:52
stormpot-4.0
4df3871
Compare
Choose a tag to compare

Stormpot 4.0

This is a major release that adds many features and upgrades the minimum Java version requirement to Java 21.

The most notable features are adding support for virtual threads.
The background allocator thread is now a virtual thread by default.
There is also a new virtual-thread-safe PoolTap implementation available from Pool.getVirtualThreadSafeTap().
The claim methods on the Pool interface still rely on ThreadLocal variables, however, and should be avoided if you plan to access the pool from virtual threads.

The leak detector is now off by default.
The implementation of the leak detector has also changed to make it dramatically more scalable with large pool sizes.

Speaking of large pools, it is now possible to create pools with more than 2 billion objects.
It's still recommended to keep pools as small as possible, but if you really need a very large number of objects, it's now possible.

Threaded and inline pools can now change their Allocator implementation after they've been created.
This is useful if you want to change how objects of the same type are created.
The process of switching allocators is asynchronous and eventual, but more controlled than building this functionality into your Allocator implementation itself.
Direct pools cannot switch allocators, because all their objects are given up front when the pool is created, and their objects are assumed to not need any significant lifecycle management from the pool.

This is a major release that breaks API/ABI compatibility, but the changes are fairly small, so migrating an existing code base should not be too much trouble.
See api-changes.json for the complete list of compatibility changes.

What's Changed

Full Changelog: stormpot-3.2...stormpot-4.0

stormpot-3.2

16 Jun 04:26
stormpot-3.2
984000d
Compare
Choose a tag to compare

What's Changed

New Contributors

Full Changelog: stormpot-3.1...stormpot-3.2

Stormpot 3.1

17 Jun 21:02
Compare
Choose a tag to compare

Stormpot 3.1 is fully backwards compatible with 3.0, but adds a number of new features:

  • It is now possible to create pools with a size of zero, and to change the target size of a pool to be zero. Such pools will behave as if they are perpetually depleted, that is, as if all of their objects have been claimed. These empty pools can still have their target size increased at any later time.
  • A new “inline” pool mode has been added. In this mode there is no background thread, and thus none of the background services are available. Object allocation and deallocation instead occur inline with the claim calls, hence the name. This means that these pools are lighter on CPU and memory resources.

Stormpot 3.0.1

15 May 12:00
stormpot-3.0.1
Compare
Choose a tag to compare

This is a patch-release that fixes a bug where explicitly expired objects would not get to be deallocated by the configured allocator, when the pool was shut down. #135

Stormpot 2.4.2

15 May 12:00
Compare
Choose a tag to compare

This is a patch-release that fixes a bug where explicitly expired objects would not get to be deallocated by the configured allocator, when the BlazePool was shut down. #135

Stormpot 3.0

10 Nov 09:49
Compare
Choose a tag to compare

Major release.

  • Java 11 is now the minimum required version.
  • Updated, modern, and ergonomic APIs.
  • Pools are now created with Pool.from(allocator).build().
  • There is only a single pool implementation now.
  • New Pool.of(...) API to create a pool with pre-allocated objects, and no background thread.
  • Improved handling of prolonged allocation failures.
  • Lower idle CPU usage.

Stormpot 2.4.1

01 Jun 20:56
Compare
Choose a tag to compare

This is a bug-fix release, that fixes a couple of cases where the background thread could get stuck at 100% CPU usage when objects are explicitly expired, or the pool is shrunk while there are poisoned slots.

Stormpot 2.4

06 Sep 13:04
Compare
Choose a tag to compare

Performance release.

  • Improved performance of Slot.release in the BlazePool implementation, by making it do a lazySet of the slot status, instead of a compareAndSet.
  • Claimed objects can now be explicitly expired with the Slot.expire method, if they are discovered to have expired after they were claimed.
  • New CompoundExpiration that can combine two expiration policies.

Stormpot 2.3

22 Nov 15:52
Compare
Choose a tag to compare

Feature release:

  • A new ManagedPool interface exposes a pool as an MXBean for management with JMX.
  • It is now possible to enable background expiration checking, which helps reduce tail latency and prevents reallocation storms after prolonged periods of inactivity.
  • It is now possible to supply a custom ThreadFactory that the pool can use for creating its background allocation thread.
  • A precise object leak detection mechanism has been added, and is enabled by default. It can detect when a program leaks claimed objects by losing the references to them.
  • All the documentation is now formatted with AsciiDoctor.
  • Stormpot now builds on Java 8.
  • The pool no longer shuts down when an InterruptedException is thrown from the allocators allocate() or reallocate() methods.

Stormpot 2.2

14 Mar 19:30
Compare
Choose a tag to compare

Lots of incremental improvements:

  • False sharing has been reduced in the BlazePool implementation, improving performance.
  • Numerous adjustments to the BlazePool implementation to improve inlining and optimisation behaviour, improving performance.
  • Fix a bug in BlazePool where the exception in a poisoned slot could bubble out through claim() calls more than once.
  • Fix a bug where the Allocator could eat the interrupt that was meant to signal to the allocation thread that it should begin shutting down. This signal is now no longer missed.
  • Poisoned slots are now proactively reallocated, if possible. This way, a temporary outage that then resolves itself, won't leave the pool full of poisoned slots that each have to bubble up through a claim() call before they can be reallocated.
  • Expiration.hasExpired() is now allowed to throw exceptions.
  • A new Reallocator API has been added. It can potentially reduce old-gen garbage accretion, in cases where Poolable instances can be reused across deallocate/allocate calls.
  • A new TimeSpreadExpiration has been added and made the default Expiration. It prevents all slots in the pool from expiring all at once.
  • Tons of fuzzing and stress testing have been performed. No released bugs found, though.