Search documentation of Localize

# Localize.DataLoader (Localize v0.39.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

child_spec(init_arg)

Returns a specification to start this module under a supervisor.

load(key, load_fn)

Loads an ETF data file, serialized through the GenServer.

start_link(options \\ [])

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.