Part 11 modified-value history (#668) follow-ups: QuestDB TTL exposure, schema-v2 posture, cross-node ordering #674
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Follow-ups from the #668 review and live gate (Part 11 modified-value history).
sample_modifiedTTL vs far-future timestamps. The TTL is keyed on the sample's source time. If QuestDB measures TTL from the table's max timestamp (verify for the deployed version), one HistoryUpdate Insert at a far-future time (e.g. a 2062 typo) drops every older audit partition on the next commit — the record of who changed history is erased by a history change.samplehas the same exposure. Consider rejecting far-future HistoryUpdate timestamps.RequiredVersion = 2stops all historian traffic (incl. continuous-historization drains) onAutoCreateSchema=falseuntil script 002 is applied. Alternative: accept v1 and fail only modified reads / HistoryUpdate.ModifiedIdordering follows each node's wall clock.Security:Acl:Enabled=falseany admitted session (incl. anonymous) can read who rewrote history (documented in security.md).IsDeleteModified; upsert recorded asUpdate(not split Insert/Replace); noAuditHistoryUpdateEvent.historyread --modifiedprints a stack trace on a Bad node status (HistoryReadStatus.ThrowIfRefused) — print the status cleanly.Done — merged to master (
e59ab693, review follow-ups029a9162; client item in3067146b/045a21da).questdb/questdb:10.0.1: TTL is judged againstmin(max table timestamp, wall clock)(cairo.ttl.use.wall.clock=true, the default); a 2066 row evicted nothing. Pinned byTtlWallClockTests(a partition >30 days old IS evicted, partitions inside TTL survive a far-future commit) + a docs note to keep the settingtrue. As hygiene, HistoryUpdate now refuses a SourceTimestamp beyondnow + ServerHistorian:HistoryUpdateMaxFutureSkew(default 1 day; ≤0 disables) with per-itemBadOutOfRange— all backends; the live recorder is not bounded (device clocks may run ahead).SupportsModifiedTrail(v ≥ 2). On v1 historization/raw/events/retention keep working; modified reads and HistoryUpdate refuse node-levelBadHistoryOperationUnsupportedwith nothing sent; retention skipsSampleModified; one Warning per boot. (A peer upgrading the DB to v2 at runtime is picked up on restart.)BadInvalidState; closed until this node's first redundancy snapshot (boot window), admin-only nodes ungated. Unsupported requests answerBadHistoryOperationUnsupportedbefore the gate. QuestDB retry duplicates documented (no DEDUP key can collapse them).4./5. Documented (anonymous-readable with ACL off; IsDeleteModified / split Insert-Replace / AuditHistoryUpdateEvent not implemented).
Live gate (docker-dev, livegate-5): Primary (central-2, ServiceLevel 250) insert ⇒ GoodEntryInserted, Secondary ⇒
BadInvalidStateand no row; now+2d ⇒BadOutOfRange, now+12h accepted. v1-only DB withAutoCreateSchema=false:hist.Samplekept rising, raw reads OK,--modified/HistoryUpdate ⇒BadHistoryOperationUnsupported, one Warning per node.