3 hours ago
thingsboard

ThingsBoard 4.4.0.1 Release

What's Changed

Core & Rule Engine

UI

Full Changelog: https://github.com/thingsboard/thingsboard/compare/v4.4...v4.4.0.1

4 hours ago
questdb

10.1.0

QuestDB 10.1.0

QuestDB 10.1.0 adds new SQL features, makes several query shapes faster, and fixes a large batch of correctness and reliability bugs. New SQL includes SUBSAMPLE for server-side downsampling, the percentile_disc / percentile_cont functions, right-hand filters in HORIZON JOIN, and audited views. Parallel GROUP BY now runs over hash joins, and LATEST ON, symbol LIKE/regex filters, SAMPLE BY ... TIME ZONE and out-of-order ingestion on XFS are faster.

This release contains several breaking changes. Read the Breaking changes section before you upgrade, especially if you use HORIZON JOIN, dateadd() timestamps, INT arithmetic, interval strings such as '1min', or Intel macOS.

For any questions or feedback, please join us on Slack or on Discourse.

See also our prettier release notes page.

Highlights

SUBSAMPLE: server-side downsampling

The new SUBSAMPLE clause cuts a time-series result down to a fixed number of representative rows before QuestDB sends it to the client. A chart can ask for as many points as it can draw instead of fetching millions of rows. Unlike SAMPLE BY, SUBSAMPLE returns original rows, not aggregates, so every column of a selected row is unchanged.

SELECT ... FROM ... [WHERE ...] [SAMPLE BY ...] SUBSAMPLE method(args) [ORDER BY ...] [LIMIT ...]

The methods are lttb, m4, minmax, uniform, cadence and sdt. Input size is capped by cairo.sql.subsample.max.rows (default 100,000,000). subsample is now a reserved word (see Breaking changes). #7013

New SQL capabilities

  • percentile_disc and percentile_cont are now available as aggregates and as whole-partition window functions, with quantile_disc / quantile_cont aliases. They also accept an array of percentiles and return DOUBLE[], e.g. percentile_cont(price, ARRAY[0.5, 0.95, 0.99]). approx_percentile gains the same array form. As part of this change, approx_percentile and approx_median no longer return another group's value for empty groups. #6680
  • HORIZON JOIN supports right-hand filters, either in ON (ON (t.sym = q.sym AND q.venue = 'A')) or as a filtered subquery (HORIZON JOIN (quotes WHERE venue = 'A') q). The filter runs before ASOF matching, so each row matches the latest qualifying right-hand row. Before this change, non-key ON predicates were silently ignored. #7688
  • HORIZON JOIN without aggregates returns one row per left-hand row and offset, and keeps the left-hand designated timestamp. #7682
  • Audited views and IN lists in DECLARE. A DECLARE ... AUDITED @var marks view parameters whose resolved values QuestDB Enterprise records on each read. A declared variable can now hold the list that an IN filter tests against. #7602
  • lag() / lead() work over SYMBOL columns. #7351

Faster queries and ingestion

  • Parallel GROUP BY over hash joins. A GROUP BY (or a SAMPLE BY rewritten to one) over an INNER, LEFT or eligible RIGHT equi-join now builds one shared hash table and joins and aggregates on the worker pool. In the PR's 4M-row Parquet LEFT JOIN benchmark, latency dropped from about 101 ms to 50 ms and peak memory from 308 MB to 165 MB. This is on by default; cairo.sql.parallel.hash.join.groupby.enabled=false turns it off. #7618
  • LATEST ON is faster. Filtered and multi-symbol LATEST ON queries ran 2.9-7.1x faster on the PR's benchmark. A key filter outside a LATEST ON subquery is now pushed inside, so QuestDB finds the latest row only for the requested keys. #7655, #7615
  • LIKE, ILIKE and regex filters on indexed SYMBOL columns can use the index, including the negated forms. Selective patterns ran 35-73x faster in the PR's benchmark. Broad patterns fall back to a scan. cairo.sql.symbol.pattern.index.enabled controls this. #7354
  • Calendar-aligned SAMPLE BY with a DST time zone runs up to about 65% faster for day buckets. #7706
  • Out-of-order commits on XFS no longer wait on a synchronous disk write per column. In the PR's test, posix_fallocate time during WAL apply fell from 2,171 ms to 28 ms. #7795
  • Fewer ingestion and query stalls from slow munmap, which no longer runs while holding a process-wide lock. #7771
  • Joins on SYMBOL keys use less memory. Their symbol translation caches moved off-heap and count toward the per-query memory limit. Some join shapes run slower: LT and two-key ASOF JOINs ran 1.16-1.22x slower, and HORIZON JOINs 1.46-1.51x slower, at the default cairo.sql.join.symbol.translation.cache.capacity. #7650
  • CREATE TABLE with many SYMBOL columns is faster in nosync commit mode. #7912
  • Worker fibers reduce GC pressure and resume latency for suspendable SQL and protocol work. #7379, #7561

Storage and operations

  • Merge-append partitions (opt-in). With cairo.o3.partition.merge.append.enabled, a backdated write into a cold partition appends the touched rows instead of rewriting the whole partition. This cuts O3 write amplification. The partition keeps superseded data as dead space until compaction reclaims it. The flag is off by default. Every non-read-only server now runs a partition-compaction worker, controlled by cairo.partition.compaction.check.interval (default 2 minutes; a negative value disables it). #7595
  • Global metrics are persisted to sys.metrics, a day-partitioned table with configurable sampling, TTL and exclusions. metrics.persist.enabled is on by default. #7634
  • Retryable bounded shutdown. Embedders and deployment controllers can stop the server within a deadline, then retry. #7540

QWP, security and Web Console

  • Browsers can connect to QWP over WebSocket, either same-origin with session-cookie authentication or cross-origin through the reloadable qwp.browser.allowed.origins allowlist. Capability negotiation also works without custom headers. #7531, #7683
  • Large QWP query results no longer crash the server. In a 50-million-row read, peak RSS fell from 6.40 GiB to 462 MiB. Rows left over from a cancelled query no longer reach the next query on the same connection. #7755
  • ILP-over-HTTP authorizes each request as its own identity. Before this fix, a keep-alive connection could check later commits against the identity of the first writer. #7643
  • Web Console 2.0.4 adds live views support, a query activity drawer, an option to run the full query text, and rule-based trends in the result grid. #7691

Correctness fixes

This release fixes wrong results, compile failures, hangs and crashes across HORIZON JOIN, WINDOW JOIN, SAMPLE BY (including FILL), ORDER BY, LATEST ON and dateadd() queries. It also fixes filters over UUID, IPv4, CHAR, SYMBOL and BOOLEAN columns, covering and posting indexes, parallel filtered scans, and materialized view refresh. Other fixes cover log writer hangs and failures, Parquet rewrites after a column type change, and resumed HTTP static file downloads. #7681, #7550, #7871, #7877, #7664, #7675, #7880

Breaking changes 💥

  • HORIZON JOIN without aggregates no longer de-duplicates its output. Add SELECT DISTINCT or an explicit GROUP BY to get the old result. Materialized views over such queries need REFRESH MATERIALIZED VIEW <name> FULL. #7682
  • HORIZON JOIN rejects unsupported ON predicates with an error. Before this change, it ignored them. #7688
  • INT arithmetic wraps at 32 bits in every context, including under a 64-bit cast or on insert into a LONG column. To compute at 64 bits, widen an operand: secs * 1_000_000L or i::long * j. This reverts #4824 and #7021. #7320
  • Malformed intervals are rejected. SAMPLE BY, timestamp_floor() and materialized view REFRESH intervals must use a one-letter unit (1m, 100T, 1d). Before this change, '1min' was silently read as 1 nanosecond and '100ms' as 1 second. #7702
  • dateadd() projections keep a designated timestamp only for fixed-duration units over the designated timestamp itself. Time-series joins, SAMPLE BY and partitioned CTAS over other dateadd() projections, such as month or year units, now fail to compile. Views that depend on them become invalid. Queries also no longer return an extra hidden ORDER BY column. #7681
  • subsample is a reserved word. Quote existing identifiers with that name, e.g. "subsample". #7013
  • Statements that would suspend a WAL table are rejected at compile time: UPDATE on tables with Parquet partitions, ADD INDEX with cold partitions, and ALTER COLUMN TYPE with read-only partitions. #7666
  • Some partitioned CTAS over a multi-key LATEST ON with a covering index no longer infer the designated timestamp. Specify TIMESTAMP(col) explicitly. #7615
  • Object visibility. In Enterprise, users no longer see tables and views they hold no permission on. In open source, a materialized or live view can no longer reach catalogue functions or SHOW statements through a regular view. #7687
  • HTTP sessions end with their credentials. A request whose Authorization header is rejected gets 401 and closes the session instead of falling back to the session cookie. #7799
  • Bundled Java client: sf_max_total_bytes now caps a sender pool as a whole rather than each sender. #7736
  • x86-64 (Intel) macOS is no longer supported. QuestDB no longer ships native binaries for that platform. #7555

Changelog

Features

  • feat(core): support retryable bounded shutdown by @kafka1991 in #7540
  • feat(sql): accelerate LIKE/ILIKE/regex filters on indexed symbol columns by @nwoolmer in #7354
  • feat(qwp): support browser negotiation and session authentication by @glasstiger in #7531
  • feat(core): add query resource isolation primitives by @kafka1991 in #7585
  • feat(sql): breaking change 💥 - add SUBSAMPLE clause for server-side downsampling; subsample becomes a reserved word by @javier in #7013
  • feat(sql): restrict security-context functions in materialized and live views by @glasstiger in #7631
  • feat(core): persist global metrics to sys.metrics by @ideoma in #7634
  • feat(qwp): allow authenticated browser WebSockets by @glasstiger in #7683
  • feat(sql): breaking change 💥 - support right-hand side filtering in HORIZON JOIN by @kafka1991 in #7688
  • feat(sql): add audited views and IN lists in DECLARE variables by @nwoolmer in #7602
  • feat(sql): breaking change 💥 - return one row per left-hand row and offset from HORIZON JOIN without aggregates by @bluestreak01 in #7682
  • feat(core): add merge-append partitions to cut O3 write amplification by @ideoma in #7595
  • feat(sql): add percentile_disc and percentile_cont aggregate and window functions, and fix approx_percentile and approx_median results for empty groups by @nwoolmer in #6680
  • feat(sql): parallelize GROUP BY over hash joins by @puzpuzpuz in #7618

Performance

  • perf(core): reduce GC pressure from suspendable workloads by @kafka1991 in #7379
  • perf(core): reduce Fiber resume latency and improve execution locality by @kafka1991 in #7561
  • perf(sql): breaking change 💥 - speed up latest-by queries with partition-key filters by @mtopolnik in #7615
  • perf(sql): reduce memory used by joins on SYMBOL keys by @puzpuzpuz in #7650
  • perf(sql): speed up calendar-aligned SAMPLE BY with a time zone by @puzpuzpuz in #7706
  • perf(core): reduce ingestion and query stalls caused by slow file unmapping by @jerrinot in #7771
  • perf(core): speed up applying out-of-order commits on XFS by @jerrinot in #7795
  • perf(sql): speed up filtered and multi-symbol LATEST ON queries by @kafka1991 in #7655
  • perf(core): skip per-symbol-column msync on CREATE TABLE in nosync mode, make async mmap sync a no-op by @ideoma in #7912

Fixes

  • fix(sql): make INT arithmetic wrap consistently at 32 bits in every context by @puzpuzpuz in #7320
  • fix(wal): prevent invalid symbol mappings by @kafka1991 in #7518
  • fix(core): fix concurrent queue spuriously reporting empty under contention by @kafka1991 in #7557
  • fix(sql): fix join filtering and Parquet pruning after conversion by @kafka1991 in #7541
  • fix(core): prevent false live view invalidation during replica catch-up by @jovfer in #7543
  • fix(sql): fix a parallel GROUP BY or horizon join failure being misreported as a timeout by @kafka1991 in #7581
  • fix(core): prevent NULL covered values written after a posting index seal by @bluestreak01 in #7603
  • fix(core): make live view registry publication and removal generation-aware by @bluestreak01 in #7609
  • fix(wal): keep the _rebase_source marker through the dropped-table sweep by @ideoma in #7600
  • fix(sql): fix wrong results and crashes in filters over UUID, IPv4, CHAR, SYMBOL and BOOLEAN columns, in covering indexes and on out-of-range nanosecond timestamps by @puzpuzpuz in #7550
  • fix(sql): keep materialized views refreshing and clean up dropped-view timers by @puzpuzpuz in #7573
  • fix(sql): fix covering index nulling included columns before their index by @ideoma in #7559
  • fix(ilp): authorize ILP-over-HTTP inserts as the identity of each request by @glasstiger in #7643
  • fix(sql): fix materialized view refresh retries on reader pool exhaustion by @bluestreak01 in #7669
  • fix(sql): allow lag/lead over SYMBOL columns by @jerrinot in #7351
  • fix(http): fix resumed static file downloads by @emrberk in #7652
  • fix(sql): breaking change 💥 - reject UPDATE and schema changes that would suspend tables with parquet or cold partitions by @ideoma in #7666
  • fix(core): fix posting index corruption on very large partitions by @jerrinot in #7664
  • fix(sql): breaking change 💥 - reject malformed intervals like '1min' instead of silently misreading them by @jerrinot in #7702
  • fix(core): fix instance hang when a log call fails mid-message by @ideoma in #7675
  • chore(qwp): breaking change 💥 - make sf_max_total_bytes cap the whole sender pool and close sender connections cleanly - OSS tandem by @bluestreak01 in #7736
  • fix(qwp): fix QWP query clients failing or reporting an invalid row count on TRUNCATE, SET and similar statements, and QWP senders timing out on close() by @bluestreak01 in #7770
  • fix(sql): fix hangs, slowdowns and wrong counts in parallel filtered queries by @kafka1991 in #7871
  • fix(sql): fix HORIZON JOIN overflow messages and missing RANGE offsets by @kafka1991 in #7902
  • chore(core): breaking change 💥 - hide tables and views from users who cannot access them by @glasstiger in #7687
  • fix(core): fix repeated parquet rewrites and misplaced column data after column type change by @ideoma in #7880
  • fix(sql): breaking change 💥 - fix wrong results, failures, hangs and a crash in HORIZON JOIN, WINDOW JOIN, SAMPLE BY, ORDER BY and dateadd() queries by @puzpuzpuz in #7681
  • fix(core): make rolling logs visible promptly and recover from log writer failures by @ideoma in #7640
  • fix(sql): prevent EXPLAIN failures after compiler reuse by @kafka1991 in #7900
  • fix(qwp): prevent crashes on large query results by @jerrinot in #7755
  • fix(sql): fix SAMPLE BY FILL returning wrong rows when a column shares the timestamp name or an outer GROUP BY wraps the fill by @jovfer in #7877
  • fix(core): breaking change 💥 - tie HTTP sessions to their credentials and stop reused JSON parsers growing their copy buffer - OSS tandem by @glasstiger in #7799

Platform

  • build: drop x86-64 (Intel) macOS support and run macOS tests on Apple Silicon by @bluestreak01 in #7555

Web Console

Full Changelog: 10.0.1...10.1.0

6 hours ago
thingsboard

ThingsBoard 4.3.1.7 Release

What's Changed

Core & Rule Engine

UI

Full Changelog: https://github.com/thingsboard/thingsboard/compare/v4.3.1.6...v4.3.1.7

6 hours ago
thingsboard

ThingsBoard 4.2.2.7 Release

What's Changed

Core & Rule Engine

UI

Full Changelog: https://github.com/thingsboard/thingsboard/compare/v4.2.2.6...v4.2.2.7

23 hours ago
ClickHouse
1 days ago
nginx

release-1.31.8

nginx-1.31.8 mainline version has been released.

See official CHANGES on nginx.org.

Below is a release summary generated by GitHub.

What's Changed

New Contributors

Full Changelog: https://github.com/nginx/nginx/compare/release-1.31.7...release-1.31.8