Skip to main content

Temporal configuration

[temporal]​

Reading, recording and storing Temporal Evolutions.

[temporal.query]​

How much of a Temporal Evolution one temporal read returns before it is paged.
[temporal.query]
default_last_n = 100
max_last_n = 1000
max_edge_group = 100000
max_aggregation_instances = 1000000

temporal.query.default_last_n​

positive integerrestart to apply

Instances per attribute a temporal read without lastN returns before it is paged forwards.

Default
100
Must be
0 < default_last_n
Environment variable
ANDROMEDA__TEMPORAL__QUERY__DEFAULT_LAST_N

temporal.query.max_last_n​

integerrestart to apply

The largest lastN answered in one response. A larger lastN is narrowed to this many instances per attribute and paged backwards with a 206 whose Content-Range still reports the requested lastN. It is also the most whole periods per attribute on one page of an aggregated read.

Default
1000
Must be
temporal.query.default_last_n ≤ max_last_n ≤ 5000
Environment variable
ANDROMEDA__TEMPORAL__QUERY__MAX_LAST_N

temporal.query.max_edge_group​

integerrestart to apply

The most instances of one attribute sharing one instant that a temporal page carries. A page never splits the instances sharing the instant at its edge, since a client resumes from a timestamp that cannot point inside an instant, so it carries them whole however far past its size that takes it. A larger group is refused with 403 TooManyResults.

Default
100000
Must be
temporal.query.max_last_n ≤ max_edge_group ≤ 1000000
Environment variable
ANDROMEDA__TEMPORAL__QUERY__MAX_EDGE_GROUP

temporal.query.max_aggregation_instances​

positive integerrestart to apply

The most raw instances per attribute one page of an aggregated temporal read folds, beside its temporal.query.max_last_n periods. A page that would fold more ends at the start of the period the first instance beyond the bound falls in; a first period holding more than the bound is read whole, since a period is never split.

Default
1000000
Must be
0 < max_aggregation_instances ≤ 100000000
Environment variable
ANDROMEDA__TEMPORAL__QUERY__MAX_AGGREGATION_INSTANCES

[temporal.history]​

Whether Core API writes are recorded in history, and how the queue that records history is drained.
[temporal.history]
core_writes = "recorded"
batch_size = 256
stuck_after_attempts = 10

temporal.history.core_writes​

stringrestart to apply

Whether Core API writes add to the history of the entities they change. With "not-recorded" only the Temporal API writes history, for a producer that publishes its history there alone; Core writes change current state, and Core queries see them, either way.

Default
"recorded"
Allowed values
"recorded"A Core API write that changes current state records the attribute instances it modified or removed and any Scope it changed or cleared; a write restating what the entity holds records nothing.
"not-recorded"Core API writes leave history untouched: only the Temporal API adds to it or removes from it.
Environment variable
ANDROMEDA__TEMPORAL__HISTORY__CORE_WRITES

temporal.history.batch_size​

positive integerrestart to apply

The most history writes one pass claims. The pass applies them in one transaction, so a larger batch spreads each statement's cost over more writes.

Default
256
Must be
0 < batch_size
Environment variable
ANDROMEDA__TEMPORAL__HISTORY__BATCH_SIZE

temporal.history.stuck_after_attempts​

positive integerrestart to apply

Failed attempts from which a history write that keeps failing is reported stuck, logged and counted on each further failure. It is never discarded, since it is history the broker has already accepted, and it keeps being retried, never waiting longer than temporal.history.queue.max_retry_interval.

Default
10
Must be
0 < stuck_after_attempts
Environment variable
ANDROMEDA__TEMPORAL__HISTORY__STUCK_AFTER_ATTEMPTS

[temporal.history.queue]​

The queue of committed history writes, including those of respond-async batches. A failed write is retried on a delay that doubles from temporal.history.queue.retry_interval up to temporal.history.queue.max_retry_interval.
[temporal.history.queue]
poll_interval = "1s"
max_poll_interval = "30s"
lease_timeout = "30s"
retry_interval = "2s"
max_retry_interval = "5m"

temporal.history.queue.poll_interval​

non-zero durationrestart to apply

How soon an idle worker polls again once a commit's wake has been handled: the floor of its idle backoff. A commit in the same broker process wakes the worker at once.

Default
"1s"
Must be
0 < poll_interval
Environment variable
ANDROMEDA__TEMPORAL__HISTORY__QUEUE__POLL_INTERVAL

temporal.history.queue.max_poll_interval​

durationrestart to apply

The longest the idle backoff grows to while no commit wakes the worker. Also how soon a job committed by another broker process is picked up.

Default
"30s"
Must be
temporal.history.queue.poll_interval ≤ max_poll_interval
Environment variable
ANDROMEDA__TEMPORAL__HISTORY__QUEUE__MAX_POLL_INTERVAL

temporal.history.queue.lease_timeout​

non-zero durationrestart to apply

How long a claim keeps a job from every other worker. A worker that dies leaves its jobs unclaimable for the rest of the term. It is applied in whole seconds, rounded down.

Default
"30s"
Must be
0 < database.acquire_timeout + 5s ≤ lease_timeout
Environment variable
ANDROMEDA__TEMPORAL__HISTORY__QUEUE__LEASE_TIMEOUT

temporal.history.queue.retry_interval​

non-zero durationrestart to apply

The delay before a failed job's first retry. Each later retry waits twice as long as the one before, up to the longest retry delay.

Default
"2s"
Must be
0 < retry_interval
Environment variable
ANDROMEDA__TEMPORAL__HISTORY__QUEUE__RETRY_INTERVAL

temporal.history.queue.max_retry_interval​

durationrestart to apply

The longest a retry delay grows to.

Default
"5m"
Must be
temporal.history.queue.retry_interval ≤ max_retry_interval
Environment variable
ANDROMEDA__TEMPORAL__HISTORY__QUEUE__MAX_RETRY_INTERVAL

[temporal.storage]​

How history is partitioned, converted to the columnstore and aged out.
[temporal.storage]
# chunk_interval = "7days"

temporal.storage.chunk_interval​

durationrestart to apply

The span of time one history partition covers. Left out, the broker leaves each history table's partitioning as it stands, which is 7 days on a table it created. A change is reconciled against the stored partitioning when the broker next opens the tenant; shorten it if the largest partition still in the rowstore keeps passing 4 GB.

Default
Not set. Example: "7days"
Must be
a whole number of days
Environment variable
ANDROMEDA__TEMPORAL__STORAGE__CHUNK_INTERVAL

[temporal.storage.columnstore]​

When history partitions are converted to the columnstore.
[temporal.storage.columnstore]
convert_after = "30days"
sweep_interval = "1h"

temporal.storage.columnstore.convert_after​

durationrestart to apply

The age past which a history partition is converted to the columnstore. Only the TimescaleDB TSL edition has a columnstore; on the Apache-2.0 edition the key has no effect.

Default
"30days"
Must be
temporal.storage.chunk_interval ≤ convert_after, a whole number of days
Environment variable
ANDROMEDA__TEMPORAL__STORAGE__COLUMNSTORE__CONVERT_AFTER

temporal.storage.columnstore.sweep_interval​

non-zero durationrestart to apply

How often partitions past temporal.storage.columnstore.convert_after are converted. The first sweep runs when a tenant opens.

Default
"1h"
Must be
0 < sweep_interval
Environment variable
ANDROMEDA__TEMPORAL__STORAGE__COLUMNSTORE__SWEEP_INTERVAL

[temporal.storage.retention]​

Whether, and at what age, history is deleted.
[temporal.storage.retention]
mode = "disabled"
# delete_after = "365days"
sweep_interval = "1h"

temporal.storage.retention.delete_after​

durationrestart to apply

How much history to keep. History partitions recorded entirely before this age are dropped, together with the Scope history no remaining instance needs. Left out, no age is set and no history is deleted.

Default
Not set. Example: "365days"
Must be
a whole number of days
Environment variable
ANDROMEDA__TEMPORAL__STORAGE__RETENTION__DELETE_AFTER

temporal.storage.retention.sweep_interval​

non-zero durationrestart to apply

How often history past temporal.storage.retention.delete_after is deleted while retention is enabled. The first sweep runs when a tenant opens.

Default
"1h"
Must be
0 < sweep_interval
Environment variable
ANDROMEDA__TEMPORAL__STORAGE__RETENTION__SWEEP_INTERVAL