A GenServer that serializes ETF data file loading to prevent race conditions.
When multiple processes request the same data concurrently,
the first request triggers the load and subsequent requests
wait for it to complete. This avoids duplicate file reads and
redundant :persistent_term.put/2 calls (each of which
triggers a global GC).
The server is started as part of the Localize supervision
tree. All ETF file loading goes through load/2.
Summary
Functions
Returns a specification to start this module under a supervisor.
Loads an ETF data file, serialized through the GenServer.
Starts the data loader GenServer.
Functions
Returns a specification to start this module under a supervisor.
See Supervisor.
Loads an ETF data file, serialized through the GenServer.
If the data is already cached in :persistent_term, returns
it immediately without contacting the server. Otherwise,
delegates to the GenServer which ensures only one load per
key occurs.
Arguments
keyis the:persistent_termkey (e.g.,{:localize, :supplemental, "aliases.etf"}).load_fnis a zero-arity function that reads and decodes the file, returning the data to be cached.
Returns
- The loaded data.
Starts the data loader GenServer.