Localize.DataLoader (Localize v0.38.0)

Copy Markdown View Source

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

child_spec(init_arg)

Returns a specification to start this module under a supervisor.

See Supervisor.

load(key, load_fn)

@spec load(term(), (-> term())) :: term()

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

  • key is the :persistent_term key (e.g., {:localize, :supplemental, "aliases.etf"}).

  • load_fn is a zero-arity function that reads and decodes the file, returning the data to be cached.

Returns

  • The loaded data.

start_link(options \\ [])

Starts the data loader GenServer.