ThingsBoard 4.4.0.1 Release
- Updated Java time zone data in Docker images to reflect 2026 daylight saving time changes by @ViacheslavKlimov in https://github.com/thingsboard/docker/pull/44
- Updated Node.js to 22.23.4 in Docker images to reflect 2026 daylight saving time changes by @ViacheslavKlimov in https://github.com/thingsboard/thingsboard/pull/16380 and https://github.com/thingsboard/thingsboard/pull/16381
- Updated UI time zone data to reflect 2026 daylight saving time changes in Canada, Morocco and Moldova by @vvlladd28 in https://github.com/thingsboard/thingsboard/pull/16362
Full Changelog: https://github.com/thingsboard/thingsboard/compare/v4.4...v4.4.0.1
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.
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
percentile_discandpercentile_contare now available as aggregates and as whole-partition window functions, withquantile_disc/quantile_contaliases. They also accept an array of percentiles and returnDOUBLE[], e.g.percentile_cont(price, ARRAY[0.5, 0.95, 0.99]).approx_percentilegains the same array form. As part of this change,approx_percentileandapprox_medianno longer return another group's value for empty groups. #6680HORIZON JOINsupports right-hand filters, either inON(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-keyONpredicates were silently ignored. #7688HORIZON JOINwithout 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. ADECLARE ... AUDITED @varmarks view parameters whose resolved values QuestDB Enterprise records on each read. A declared variable can now hold the list that anINfilter tests against. #7602 lag()/lead()work over SYMBOL columns. #7351
- Parallel
GROUP BYover hash joins. AGROUP BY(or aSAMPLE BYrewritten 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 ParquetLEFT JOINbenchmark, 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=falseturns it off. #7618 LATEST ONis faster. Filtered and multi-symbolLATEST ONqueries ran 2.9-7.1x faster on the PR's benchmark. A key filter outside aLATEST ONsubquery is now pushed inside, so QuestDB finds the latest row only for the requested keys. #7655, #7615LIKE,ILIKEand 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.enabledcontrols this. #7354- Calendar-aligned
SAMPLE BYwith 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_fallocatetime 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 TABLEwith many SYMBOL columns is faster innosynccommit mode. #7912- Worker fibers reduce GC pressure and resume latency for suspendable SQL and protocol work. #7379, #7561
- 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 apartition-compactionworker, controlled bycairo.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.enabledis on by default. #7634 - Retryable bounded shutdown. Embedders and deployment controllers can stop the server within a deadline, then retry. #7540
- Browsers can connect to QWP over WebSocket, either same-origin with session-cookie authentication or cross-origin through the reloadable
qwp.browser.allowed.originsallowlist. 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
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
HORIZON JOINwithout aggregates no longer de-duplicates its output. AddSELECT DISTINCTor an explicitGROUP BYto get the old result. Materialized views over such queries needREFRESH MATERIALIZED VIEW <name> FULL. #7682HORIZON JOINrejects unsupportedONpredicates 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_000Lori::long * j. This reverts #4824 and #7021. #7320 - Malformed intervals are rejected.
SAMPLE BY,timestamp_floor()and materialized viewREFRESHintervals 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 BYand partitioned CTAS over otherdateadd()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 hiddenORDER BYcolumn. #7681subsampleis 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:
UPDATEon tables with Parquet partitions,ADD INDEXwith cold partitions, andALTER COLUMN TYPEwith read-only partitions. #7666 - Some partitioned CTAS over a multi-key
LATEST ONwith a covering index no longer infer the designated timestamp. SpecifyTIMESTAMP(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
SHOWstatements through a regular view. #7687 - HTTP sessions end with their credentials. A request whose
Authorizationheader is rejected gets 401 and closes the session instead of falling back to the session cookie. #7799 - Bundled Java client:
sf_max_total_bytesnow 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
- 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
- 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
- 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
- build: drop x86-64 (Intel) macOS support and run macOS tests on Apple Silicon by @bluestreak01 in #7555
Full Changelog: 10.0.1...10.1.0
ThingsBoard 4.3.1.7 Release
- Updated Java time zone data in Docker images to reflect 2026 daylight saving time changes by @ViacheslavKlimov in https://github.com/thingsboard/docker/pull/44
- Updated Node.js to 22.23.4 in Docker images to reflect 2026 daylight saving time changes by @ViacheslavKlimov in https://github.com/thingsboard/thingsboard/pull/16380
- Updated UI time zone data to reflect 2026 daylight saving time changes in Canada, Morocco and Moldova by @vvlladd28 in https://github.com/thingsboard/thingsboard/pull/16362
Full Changelog: https://github.com/thingsboard/thingsboard/compare/v4.3.1.6...v4.3.1.7
ThingsBoard 4.2.2.7 Release
- Updated Java time zone data in Docker images to reflect 2026 daylight saving time changes by @ViacheslavKlimov in https://github.com/thingsboard/docker/pull/44
- Updated Node.js to 22.23.4 in Docker images to reflect 2026 daylight saving time changes by @ViacheslavKlimov in https://github.com/thingsboard/thingsboard/pull/16380
- Updated UI time zone data to reflect 2026 daylight saving time changes in Canada, Morocco and Moldova by @vvlladd28 in https://github.com/thingsboard/thingsboard/pull/16362
Full Changelog: https://github.com/thingsboard/thingsboard/compare/v4.2.2.6...v4.2.2.7
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.
- Version bump by @pluknet in https://github.com/nginx/nginx/pull/1846
- HTTP/3: avoid undefined behaviour with empty encoder field values by @dgprivate in https://github.com/nginx/nginx/pull/1701
- Win32: removed the iocp event module by @VadimZhestikov in https://github.com/nginx/nginx/pull/1823
- Control: logged errors from accepted socket setup. by @OskarEichler in https://github.com/nginx/nginx/pull/1720
- Dav: restored the request URI on a destination mapping error by @VadimZhestikov in https://github.com/nginx/nginx/pull/1778
- SSL: ignored EIO after shutdown with kernel TLS by @VadimZhestikov in https://github.com/nginx/nginx/pull/1788
- SSL: workaround for i2d_SSL_SESSION() negative values by @VadimZhestikov in https://github.com/nginx/nginx/pull/1599
- Control API: use more portable ioctl(FIOASYNC) by @bavshin-f5 in https://github.com/nginx/nginx/pull/1819
- Fixed Priority parsing of large integers on 32-bit platforms by @nishat-06 in https://github.com/nginx/nginx/pull/1814
- JSON: parser API refactoring. by @ensh63 in https://github.com/nginx/nginx/pull/1806
- Fixed a typo by @osokin in https://github.com/nginx/nginx/pull/1857
- GH: workflow to generate windows zip by @saikrishnakumarreddy in https://github.com/nginx/nginx/pull/1815
- GH: request an id token and pass secrets to a callee in buildbot.yml by @thresheek in https://github.com/nginx/nginx/pull/1804
- Misc: fixed "zip" target with GNU sed by @pluknet in https://github.com/nginx/nginx/pull/1859
- HTTP/3: avoid unaligned stores in Huffman encoding by @daewoo1109 in https://github.com/nginx/nginx/pull/1317
- working_directory fixes by @pluknet in https://github.com/nginx/nginx/pull/1855
- nginx-1.31.8-RELEASE by @pluknet in https://github.com/nginx/nginx/pull/1886
- @dgprivate made their first contribution in https://github.com/nginx/nginx/pull/1701
- @OskarEichler made their first contribution in https://github.com/nginx/nginx/pull/1720
- @ensh63 made their first contribution in https://github.com/nginx/nginx/pull/1806
- @osokin made their first contribution in https://github.com/nginx/nginx/pull/1857
- @daewoo1109 made their first contribution in https://github.com/nginx/nginx/pull/1317
Full Changelog: https://github.com/nginx/nginx/compare/release-1.31.7...release-1.31.8