Skip to main content

TDengine 3.4.3.6 Release Notes

Release date: 2026-10-24

Release typeRecommended for
Maintenance releaseUsers of stream processing, virtual tables, subscriptions, or taosX OPC DA ingestion

1. Highlights​

  • SQL Server as an external source: Federated query can register on-premises SQL Server 2019 and 2022, query its tables and views, and reference them from virtual tables. Stream processing can use those columns together with local columns.
  • OPC DA and PI: An OPC DA point task can use a PI-compatible quality mode and a digital-state value map. Migration tools can rebuild a PI archive on a PI server, then replay the points through OPC DA onto existing TDengine tables.
  • Security fixes: Malformed metadata, WAL, query, stream, and subscription input that could crash taosd or cross a buffer is rejected. In the community edition, an unauthorized user can no longer administer users and sessions. The Grafana data-source plugin upgrades kin-openapi.

2. Features​

2.1 Query and stream processing​

  • Federated query can register on-premises SQL Server 2019 and 2022 as an external source and query its tables and views. See Federated Query.
  • A stream can use a virtual table that references SQL Server columns, and mix those columns with local columns. A short reference and an explicit database or schema reference identify the same remote table. Completed window results are kept after a reference is rebound.
  • Every stream notification event includes triggerTableName. For PARTITION BY tbname it is the trigger child-table name without a database prefix. A virtual child table uses the virtual child-table name. Otherwise the value is an empty string. See Notification Mechanism in Stream Processing.

2.2 Subscription, ingestion, and taosExplorer​

  • Table and database subscriptions accept msg.consume.start.ts. Only rows whose primary timestamp is at or after that Unix time in milliseconds are consumed. The default is 0, which does not filter. Column subscriptions are unchanged. See msg.consume.start.ts.
  • An OPC DA point task accepts a PI-compatible quality mode and a digital-state value map. Migration tools can rebuild a PI archive on a PI server, then replay and map the points onto existing TDengine tables through OPC DA. See OPC DA.
  • The self-hosted taosExplorer SQL editor can set the frontend timeout for the current execution. The default is 60 seconds, and the range is 1 to 3600 seconds. A request timeout shows a yellow warning and does not cancel a query that is still running on the server.

3. Enhancements​

3.1 Query​

  • information_schema.ins_tables filtered by table_name with equality or IN uses the table-name index instead of scanning every table in the vnode.
  • Creating or querying a virtual table with a very large number of columns resolves column references by column id, so SQL analysis no longer scans every column repeatedly.
  • Single-table SUM, AVG, and COUNT on a tag, and INTERVAL queries partitioned by tags, run faster.
  • A super-table INTERVAL query that also has LIMIT can use the INTERVAL_LIMIT() hint to stop scanning after the windows it needs. The hint takes no parameters and does nothing unless it is written in the statement. See INTERVAL_LIMIT.
  • Most BLOB column queries are faster. An eligible count(blob) uses block-level precomputed statistics again. Some medium-length SELECT queries of BLOB values may be slower and use more memory.
  • A last_row query on a super table grouped by child table produces rows while the cache is still being scanned, so a super table with many child tables returns sooner.
  • Queries that do not read a BLOB column no longer check the BLOB length on every row.
  • With DEBUG logging enabled, scalar evaluation no longer writes a debug line for every column argument, so a JOIN is not slowed by that log output.
  • A grouped last() query no longer keeps a stale null flag on a reused scan block. The per-query reader timing log is DEBUG instead of INFO.

3.2 Stream processing​

  • A stream that reads calculation data from an external table uses the time expressions in the calculation statement. A window join clips only the side that references those time columns. A due PERIOD window is no longer skipped because of idle throttling.
  • A stream with a standalone SLIDING and IGNORE_NODATA_TRIGGER no longer builds every empty window across a large time gap. Window results stay the same, and other groups are no longer held behind that gap.

3.3 Clients​

  • libtaos.so no longer depends on libtaosnative.so. A WebSocket-only deployment can load the client by itself.

4. Fixes​

4.1 Severe issues​

  • The InfluxDB connector could exit before its readers started. The migration task was reported successful and no rows were written. Affected versions: all versions.
  • A partitioned window stream could emit an empty aggregate for a group that had no valid input on a vgroup. The output order was wrong and the stream entered Failed. Affected versions: v3.4.2.9 through v3.4.2.14.
  • Allocating a TDB free page rewrote the page before the rollback log. An unexpected restart could corrupt the free-page chain, and the next allocation exited on an invalid page number. A TDB file that was already damaged is not repaired by this upgrade and can still show an oversized file or an invalid page number. Affected versions: all versions.
  • An encrypted backup left the buffer length set after a full cipher block. A later write could emit the old block again, and restore failed with Invalid message. Affected versions: v3.4.3.3 through v3.4.3.4.
  • v3.4.3.5 rejects stream checkpoints written by v3.4.3.0 through v3.4.3.4, reports Invalid message, and the stream enters Failed. This release reads those checkpoints again. Affected versions: v3.4.3.5.
  • History calculation of a virtual-table stream crashed taosd when a condition compared a column that the filter had left empty. Affected versions: v3.3.0 and later.
  • A virtual super-table aggregation that groups by a source-table tag, when the time filter can be pushed down, crashed the client. Affected versions: v3.4.0 and later.
  • Destroying a stream task freed its data cache before iterators that were still using it, so taosd accessed freed memory during shutdown. Affected versions: v3.3.8 and later.
  • A stream that uses %%trows crashed taosd with an out-of-bounds access when a window contained variable-length columns and the row order did not match the write order. Affected versions: v3.3.8 and later.
  • taosX OPC UA collection left sessions open after a subscription failure, a reconnect, or task exit. Sessions accumulated until later connections were rejected and the task failed to start again. Affected versions: all versions.
  • Repeated lookups of virtual child-table names in information_schema.ins_tables by UID, during a burst of events, could saturate taosd. Affected versions: all versions.

4.2 Query and virtual tables​

  • ALTER statements for a virtual-table SERIES no longer leak the alias, external source name, and tag condition after parsing. Repeating the statement no longer grows client memory.
  • On non-Windows platforms, building Arrow from source uses the project's OpenSSL 3.1.3 for its bundled Thrift, so the macOS build no longer picks an incompatible OpenSSL 4.
  • The user manual now states that FIRST and LAST on a non-primary timestamp follow the effective timeline, and are not equivalent to ORDER BY on the argument column with LIMIT 1.
  • The user manual now states that a user privilege takes priority over a role privilege of the same type, and that the later-updated role privilege is used when the user has none.

4.3 Stream processing and virtual tables​

  • A single-start EVENT_WINDOW with TRUE_FOR sends the historical OPEN notification when the duration is already met, even if the window is still open at the end of the history scan.
  • CREATE STREAM inside an explicit transaction creates an output super table or a NODELAY table that is visible in the same transaction once the statement succeeds.
  • After a virtual-table column is rebound, a stream redeploy that does not finish within 60 seconds stops retrying and fails the stream with an explicit error. A redeploy that finishes within 60 seconds is unchanged.
  • A stream that uses only some columns of a virtual table no longer adds a calculation reader and retries when an unused column is rebound. Rebinding a column that the calculation or WHERE uses still deploys a reader when needed.
  • A stream sourced from a virtual super table no longer fetches database routing from the mnode repeatedly, or resolves unused column references, while parsing tag references.

4.4 Storage, cluster, and subscription​

  • When level 0 has more than one disk, WAL retention and rollback delete WAL files on the non-primary mount points. Disk usage no longer keeps growing from those files.
  • BALANCE VGROUP LEADER logs the vgroup, database, and error when it cannot add a vgroup to the balance transaction.
  • Snapshot restore, including REDISTRIBUTE VGROUP, places data files on the storage tier selected from the file time and the KEEP configuration, instead of writing every file to tier 0.
  • An ONLY META or WITH META super-table subscription applies the WHERE condition to child tables in the metadata snapshot. A child-table name condition no longer delivers create events for every child table.
  • The default session.timeout.ms for a consumer that does not set it is 45 seconds. It was 12 seconds. Delayed heartbeat processing no longer removes that consumer from the group.
  • When a consumer unsubscribes while a rebalance is being committed, a stale rebalance result no longer sets the consumer back to ready. The topic can be dropped immediately.
  • When monitor protocol logging is enabled, taosd estimates the line count of a multi-line JSON message from its size, so log files rotate and compress at numOfLogLines.
  • taosd and taos no longer fail to start when an existing writable log file cannot be changed to mode 0666. They keep the current permissions and print a warning.

4.5 Writes, clients, taosX, and taosExplorer​

  • On Windows, the xnoded readiness probe waits up to 3 seconds per attempt. A started xnoded is no longer treated as unreachable and stopped during XNODE creation or restart.
  • On Windows, taosd, taosAdapter, taosKeeper, taosX, and taosExplorer restart 10, 30, 90, 180, and 300 seconds after an abnormal exit, at most five times, and then stop restarting automatically.
  • During an AVRO restore, taosdump no longer reports a just-created table as missing. It stops the restore when CREATE DATABASE fails, and it shows progress while creating child tables.
  • The Rust WebSocket documentation examples no longer panic on database creation when tokio is 1.54 or newer.
  • A task run through taosX-Agent no longer stays queued after a start fails while taosX-Agent is not connected. It starts automatically after taosX-Agent reconnects.
  • In taosExplorer, an empty point list for a pSpace source shows an error instead of a blank toast. On Chrome or Edge 86, the metrics dialog after a task starts is no longer offset and can scroll.

5. Security​

5.1 Vulnerability fixes​

See Security Advisories.

  • The TMQ client checks field lengths and the remaining message while decoding an ask-ep response. An overlong topic, database name, or FQDN is rejected instead of overflowing the client stack. CWE-121.
  • WAL recovery no longer treats a forged frame header inside a record body as a new log record, and it no longer adopts a forged index or truncates the log from that header. An invalid record length no longer crashes taosd or hangs recovery.
  • Query execution and stream decoding check data-block values against the planned column width. An invalid block returns an error. Normal query results stay the same.
  • ALTER STABLE rejects an empty field array or a length that does not match, instead of crashing mnode. CREATE TSMA no longer stores a query tree that later metadata reads interpret as the wrong node type. SHOW STABLES no longer writes past the stack buffer while joining rollup function names. A stream fetch request that omits runtime information no longer crashes taosd.
  • CREATE STREAM rejects a client-supplied plan whose node type is wrong or that lacks a required child, and it rejects a request that omits the name, database, or table. DROP XNODE JOB and REBALANCE XNODE JOB reject a WHERE condition that is null or missing an operand. Nested batch metadata requests are rejected, and a batch shorter than a message header is no longer written. CWE-674. Querying information_schema.ins_dnode_variables no longer uses an invalid system-table type index.
  • Creating a super table rejects a fixed-width column whose length is outside the type's allowed range, so that width is no longer copied into subscription and stream blocks.
  • snode checks the length, runtime parameters, and task type of stream checkpoint, fetch, calc, and drop messages, and rejects malformed input.
  • Query metadata and EXPLAIN payloads are checked for length, counts, and pointers before use. SHOW CREATE output is bounded. A backup falls back when a create statement exceeds the buffer.
  • When mnode applies a committed metadata record, it checks the record header length and type, and rejects an over-long payload or a write that bypasses the transaction. Subscription metadata decoding checks string lengths and entry counts, so an oversized payload no longer overflows the mnode heap.
  • In the community edition, GRANT or a role change no longer uses an uninitialized user object. Privilege checks for user and session administration are in place, so an unauthorized user can no longer set a TOTP secret, end another session, or alter a role.
  • SHOW VARIABLES no longer returns sensitive settings such as the object-storage access string, including for a user who can view configuration.
  • Query spill files use random names, exclusive creation, and owner-only permissions, and no longer follow a symlink placed in tempDir. CWE-59.
  • The Grafana data-source plugin upgrades kin-openapi from 0.144.0 to 0.149.0. That upgrade fixes CVE-2026-100347 (GHSA-fh4f-47mf-f2gj), CVE-2026-100348 (GHSA-mh7x-f8wq-4jhx), CVE-2026-100351 (GHSA-23vg-4cjm-66q5), CVE-2026-100352 (GHSA-rj39-cv6w-8wv7), CVE-2026-100353 (GHSA-vrcc-3ch7-hppw), and CVE-2026-100354 (GHSA-g8cf-rcjf-c8cf).
  • The JDBCDemo example upgrades jackson-databind from 2.18.9 to 2.18.10, fixing CVE-2026-83557 (GHSA-gx83-3vf8-gh7j). Server behavior is unchanged.

5.2 Hardening​

  • Transport checks on unauthenticated messages reject a malformed endpoint set, an overlong telemetry address, a cross-connection task release, and an invalid message type.
  • Before forwarding monitor statistics, mnode checks that the claimed user exists and rejects invalid JSON.
  • Stream heartbeat task type and status are range-checked before they are written to logs or SHOW output. Assigning a consumer group to a worker no longer uses a negative index.

6. Upgrade notes​

6.1 Upgrade path​

  • Versions that can upgrade directly: v3.3.7 and later.
  • Rolling upgrade: supported, from v3.4.3.0 through v3.4.3.5.
  • Downgrade or rollback: supported, from v3.4.3.0 through v3.4.3.5.
  • Minimum client and connector version: v3.4.3.0.

6.2 Behavior changes​

  • A consumer that does not set session.timeout.ms now uses 45 seconds. The previous default was 12 seconds.
  • An ONLY META or WITH META super-table subscription delivers metadata create events only for child tables that match WHERE. A name filter no longer delivers a create event for every child table.
  • SHOW VARIABLES no longer returns the object-storage access string, including for a user who could view it before.
  • In the community edition, an unauthorized user can no longer set a TOTP secret, end another session, or alter a role.
  • After a virtual-table column rebind, a stream redeploy that does not finish within 60 seconds fails the stream instead of retrying without a limit. Drop the streams on that virtual super table and create them again. A redeploy that finishes within 60 seconds is unchanged.
  • Every stream notification event now includes triggerTableName. A consumer that rejects unknown JSON fields needs to accept this field.
  • A single-start EVENT_WINDOW with TRUE_FOR can send a historical OPEN notification that was not sent before, when the duration is met and the window is still open at the end of the history scan.
  • Snapshot restore and REDISTRIBUTE VGROUP place files on the tier selected from file time and KEEP, instead of writing all of them to tier 0.
  • On Windows, taosd, taosAdapter, taosKeeper, taosX, and taosExplorer restart automatically after an abnormal exit, at most five times.
  • Some medium-length SELECT queries of BLOB values may be slower and use more memory. Eligible count(blob) queries are faster. Results are unchanged.

6.3 Configuration changes​

Two subscription settings change. No server parameter is added or removed.

ParameterPurpose
msg.consume.start.tsTable and database subscriptions consume only rows whose primary timestamp is at or after this Unix time in milliseconds. The default is 0, which does not filter. Column subscriptions ignore it.
session.timeout.msHow long a consumer may go without a heartbeat before it is removed from the group. For a consumer that does not set it, the default is now 45 seconds. It was 12 seconds.

6.4 Keyword changes​

No reserved keywords were added or removed relative to v3.4.3.3. INTERVAL_LIMIT is a query hint, not a new reserved keyword.

6.5 System table changes​

No system tables or columns were added, removed, or lengthened in this release.

6.6 Dependency changes​

ComponentDependencyv3.4.3.3v3.4.3.6
taosAdapterklauspost/compress1.18.61.18.7
taosKeepergolang.org/x/crypto0.56.00.58.0
taosKeepergolang.org/x/net0.57.00.61.0
taosKeepergolang.org/x/sys0.47.00.49.0
taosKeepergolang.org/x/text0.41.00.43.0
taosXzip2.4.29.0.5
taosXrustls-webpki0.103.150.103.16
taosXwebpki-roots1.0.71.0.10
taosX InfluxDB pluginnetty4.1.118.Final4.1.101.Final
Rust connectorrustls0.23.450.23.46
Grafana plugin tdengine-datasourcekin-openapi0.144.00.149.0
Grafana plugin tdengine-datasourceklauspost/compress1.17.91.18.7
Grafana plugin tdengine-datasourcejsonschema6.0.26.0.3
Grafana plugin tdengine-datasourcegolang.org/x/net0.58.00.60.0
Grafana plugin tdengine-datasourcegolang.org/x/sys0.47.00.48.0
Grafana plugin tdengine-datasourcegolang.org/x/text0.41.00.42.0
Grafana plugin tdengine-datasourcedompurify3.4.133.4.16
Grafana plugin tdengine-datasourceaxios1.18.0no longer a dependency

6.7 Before you upgrade​

An upgrade from v3.3.6 cannot keep the old stream processing. If the old streams, TSMA, snode, and their data directories are not removed, taosd fails to start. See Compatibility Notes. A cluster that already rebuilt stream processing on v3.4.2.0 or later does not need to repeat those steps when rolling to this release.

When upgrading from a version before v3.4 to this release, taosX does not migrate existing tasks automatically. Before v3.4, tasks were stored in SQLite. From v3.4 on, they are stored in mnode. Export the tasks in taosExplorer before the upgrade, import them afterward, and start the tasks that should run. If the tasks were not exported before the upgrade, they do not appear in taosExplorer afterward. See Migrate Tasks When Upgrading from a Version Before v3.4 to v3.4.x. A cluster already running on v3.4.0.0 or later, with tasks stored in mnode, does not need to repeat those steps when rolling to this release.

7. Known issues​

None.

8. Downloads​

Packages are available from the TDengine download center. Each package includes SPDX and CycloneDX SBOMs, and a SHA256 checksum.