Release
Announcing Toise 0.17.0 — saying what an answer is worth
Some values look more solid than they are. An entity id looks durable; a nanosecond timestamp looks exact. 0.17.0 publishes what Toise already knew about both, so a consumer can use them safely. Additive: new fields and an argument that accepts more forms. Every existing call keeps working.
A handle that survives failover
An entity id is minted locally by each replica, and minted again when an entity returns after the resurrection window. A consumer that keeps one across a failover or an outage can find it resolves to nothing.
Every entity now carries identity_fingerprint
(identityFingerprint on GraphQL). It derives from the
identifying attributes alone, so it is identical on every node and across
incarnations. Every read surface that accepts an id accepts a fingerprint.
The id stays, documented for what it is: local to one node and one
incarnation.
Reach an entity by the identity you hold
Asking about a known host used to take two calls: one to trade
host.id for an entity id, one for the real question. The
handle argument now also accepts the identity written inline:
host:host.id=6ccc0dcc-...
service.listener:service.endpoint=h1:80/tcp,network.transport=tcp
No tool grows a new parameter. The three forms cannot be confused: an id
carries no colon, a fingerprint a colon and no =, an identity
both. Matching stays exact.
Timestamps that state their resolution
event_time is when a producer observed a fact, not when the
fact became true. Without knowing the producer's cadence, a consumer can
read too much into a gap: 47 seconds between two observations says little
about order when the cadence is 30 seconds.
The engine already knew each producer's declared interval. It is now
published: get_entity and entity_history carry a
resolution block, and GraphQL exposes
Entity.resolution. It states the coarsest interval among the
producers referencing the entity, and it is absent rather than approximate
when none is declared. It ships as a sentence as well as a number, so it
is read the right way.
Also in this release
- The identity hash now costs one allocation instead of seven. It runs on the ingest path too, once per observation, so the gain reaches beyond the new field.
- The hash encoding is frozen by golden tests, because it keys stored indexes and annotations.
- The GraphQL docs no longer say an id survives identity changes; since exact matching, a changed identifying attribute is a different entity.
Get it
go install github.com/toise-dev/toise/cmd/toise-server@v0.17.0
Binaries for linux and darwin (amd64 / arm64) are on the release, each with a checksum, and the container image is on GHCR. See the 0.17.0 docs and the changelog.