A concurrent data structure that exposes a linear sequence of R
resources as a single
cats.effect.kernel.Resource in F
without accumulation.
A Hotswap is allocated within a cats.effect.kernel.Resource that dictates the scope
of its lifetime. After creation, a Resource[F, R]
can be swapped in by calling swap.
The newly acquired resource is returned and is released either when the Hotswap is
finalized or upon the next call to swap, whichever occurs first.
The following diagram illustrates the linear allocation and release of three resources r1
,
r2
, and r3
cycled through Hotswap:
>----- swap(r1) ---- swap(r2) ---- swap(r3) ----X
| | | | |
Creation | | | |
r1 acquired | | |
r2 acquired | |
r1 released r3 acquired |
r2 released |
r3 released
Hotswap is particularly useful when working with effects that cycle through resources, like writing bytes to files or rotating files every N bytes or M seconds. Without Hotswap, such effects leak resources: on each file rotation, a file handle or some internal resource handle accumulates. With Hotswap, the only registered resource is the Hotswap itself, and each file is swapped in only after swapping the previous one out.
Ported from https://github.com/typelevel/fs2.
Attributes
- Companion:
- object
- Source:
- Hotswap.scala
- Graph
- Supertypes