Skip to main content

Timeplus Enterprise 3.3

Key Highlights​

For a detailed tour of the new features in this release, see What's New in Timeplus Enterprise 3.3.

Key highlights of the Timeplus 3.3 release include:

  1. New backup and recovery capabilities: a stream tool for stream data recovery and backup/restore, sequence-aware backup and recovery controls, plus more resilient recovery paths with incremental commit replay and self-healing from torn WAL tails.
  2. Smarter cluster workload balancing: stream-shard leader rebalancing and a reliable workload rebalancer for materialized views, with new SYSTEM TRANSFER SCHED MATERIALIZED VIEW / SYSTEM REBALANCE SCHED MATERIALIZED VIEWS commands and configurable scheduling policies.
  3. Major Python UDF upgrades: embedded CPython migrated to 3.14 free-threaded with improved observability, UDF init hooks via SETTINGS, and automatic package reconciliation from S3-hosted requirements.txt.
  4. Faster and leaner startup and recovery: lazy-loaded primary key index to bound startup memory, memory-pressure interventions to prevent materialized-view reboot recovery storms, and containment of single-table startup failures.
  5. Streaming SQL enhancements: streaming LEFT ANTI JOIN, SHUFFLE BY propagation through CTE/subquery boundaries, shard pruning for IN-subqueries, and a new offsets-only checkpoint mode.
  6. Broad stability and correctness hardening across Raft replication, checkpoints, mutable streams, Kafka sources, and memory accounting.

Supported OS​

Deployment TypeOS
Linux bare metalx64 or ARM chips: Ubuntu 20.04+, RHEL 8+, Fedora 35+, Amazon Linux 2023
Mac bare metalIntel or Apple chips: macOS 14, macOS 15
KubernetesKubernetes 1.25+, with Helm 3.12+

Releases​

We recommend using stable releases for production deployment. Engineering builds are available for testing and evaluation purposes.

3.3.3​

Released on 09-29-2026. Installation options:

  • For Linux or Mac users: Downloads
  • For Docker users (not recommended for production): docker run -p 8000:8000 docker.timeplus.com/timeplus/timeplus-enterprise:3.3.3
  • For Kubernetes users: helm install timeplus/timeplus-enterprise --version 13.0.7

Component versions:

  • timeplusd 3.3.3
  • timeplus_appserver 3.3.1
  • timeplus_connector 3.1.0
  • timeplus cli 3.0.0
  • timeplus byoc 1.0.1-rc.2

Changelog​

This release consolidates timeplusd changes introduced since 3.3.1. For changes already published in 3.3.1, see the 3.3.1 changelog below.

Features and Enhancements

  • Harden timeplusd meta CLI and add offline database drop for outage remediation (#12300)
  • Add partition-scoped backup and additive fill restore to the stream tool (#12331)

Bug Fixes

  • Fix a Raft scheduler deadlock that occurred when an outbound send queue was full (#12418). Impact: could halt replication and leader election cluster-wide until restarted.
  • Reject pausing a materialized view before its first pipeline build (#12328). Impact: a SYSTEM PAUSE MATERIALIZED VIEW issued right after CREATE MATERIALIZED VIEW could block DDL processing on a node until it was restarted. Such a pause now fails with RESOURCE_NOT_INITED and can be retried.
  • Recover trimmed Raft hard state from the durable checkpoint record (#12400). Impact: a replica could fatal-abort on every startup after a hard reset.
  • Release historical parts once a streaming query has read them (#12375). Impact: outdated parts could not be deleted while the streaming query or materialized view that read them was running, growing disk usage.
  • Retry a failed historical commit instead of wedging the committed sn (#12404). Impact: one failed commit could freeze a shard and grow disk usage indefinitely.
  • Reset exec_mode for parallel-replica remote legs so materialized views over log external streams can start (#12373). Impact: such MVs could never start on a multi-node cluster.
  • Fix checkpoint barrier loss in RemoteSource async-read path (#12326). Impact: an MV could silently get stuck at its first checkpoint epoch forever.
  • Make NativeLog fetch honor the caller's byte budget (#12350). Impact: background polling could fetch up to 8192x more data than intended, risking OOM.
  • Fix secondary index rebuild on mutable streams when the index key columns are a subset of the primary key (#12351). Impact: ALTER STREAM ... ADD INDEX backfilled existing rows under empty index keys, so index queries missed old rows and empty-string lookups returned bogus matches.
  • Make SYSTEM STOP MERGES/MOVES cover every shard of a multi-shard stream (#12304). Impact: the command silently affected only the first shard.
  • CREATE STORAGE POLICY now rejects read-only and write-once (e.g. s3_plain) disks (#12377). Impact: TTL moves to such disks retried forever, causing massive redundant S3 writes. Existing storage policies are not re-validated on upgrade; if one uses a write-once disk, move it to a disk type that supports renames, such as s3.
  • Rewind idempotent keys when an inline historical commit fails (#12392). Impact: could cause permanent, silent data loss on commit failure.
  • Fix null idempotent keys after a schema switch inside a historical commit batch (#12406). Impact: could crash the whole server (no data loss).
  • Fix NULL handling in arg_min/arg_max over nullable columns (#12407). Impact: a NULL value could overwrite the aggregate result, and affected materialized views could fail checkpoint recovery with CORRUPTED_DATA.
  • Parse creation query AST every time on provisioner retry, so a retried CREATE no longer carries a stale UUID (#12325). Impact: a stale orphan directory could block cluster-wide schema creation.
  • Fix PEM files not being flushed to disk for Kafka, HTTP and Splunk HEC external streams (#12335). Impact: the CA or private key file could be written empty, breaking TLS connections.

3.3.1​

Released on 08-01-2026. Installation options:

  • For Linux or Mac users: Downloads
  • For Docker users (not recommended for production): docker run -p 8000:8000 docker.timeplus.com/timeplus/timeplus-enterprise:3.3.1
  • For Kubernetes users: helm install timeplus/timeplus-enterprise --version 13.0.6

Component versions:

  • timeplusd 3.3.1
  • timeplus_appserver 3.3.1
  • timeplus_connector 3.1.0
  • timeplus cli 3.0.0
  • timeplus byoc 1.0.1-rc.2

Changelog​

This release consolidates all timeplusd changes from 3.2.11 through 3.3.1.

Features and Enhancements

  • Add sequence-aware backup and recovery controls (#12274)
  • Enable SYSTEM STOP and START MOVES (#12270)
  • Add stream tool for stream data recovery and backup/restore (#12267)
  • Tolerate corrupted checkpoint lease and keep it renewed during recovery (#12266)
  • Contain single-table startup failure, raise broken-parts bytes threshold, shard-attributed load logs (#12264)
  • Lazy-load primary key index to bound startup memory (#12250)
  • Migrate embedded CPython to 3.14 free-threaded + FT observability (#11852)
  • Memory-pressure interventions for materialized-view reboot recovery storm (#12219)
  • MergeTree global merge settings (#12224)
  • Propagate SHUFFLE BY through CTE/subquery boundaries (#12129)
  • Stream-shard leader rebalancing — config + balancing core (#12204/#12215)
  • Reliable workload rebalancer for Raft materialized views + manual trigger (#12204/#12205)
  • Support Python UDF init hooks via SETTINGS (#12198)
  • SYSTEM TRANSFER SCHED MATERIALIZED VIEW (#12189/#12201)
  • SYSTEM REBALANCE SCHED MATERIALIZED VIEWS - manual rebalance trigger (#12200)
  • Schedule policy (#12196)
  • Reconcile Python UDF packages from S3-hosted requirements.txt (#12186/#12187)
  • Throttle repeated Kafka broker outage warnings (#12191/#12194)
  • Support flush hook in Python external stream sink (#12183/#12184)
  • Refine merge settings (#12178)
  • Prefer not to merge settings (#12161)
  • Add offsets-only checkpoint mode (#11753)
  • Enhance stall detection (#12074)
  • Enable shard pruning for IN-subquery and literal tuple-IN (#12139)
  • Support NATS NKey authentication (#12120)
  • Support streaming LEFT ANTI JOIN (#12119)
  • Support setting JWT and seed content in settings (#12116)
  • Block mutable stream secondary index creation for unsupported key expressions (#12113)
  • Refresh QueryScope per build to clear phantom memory_tracker amount (#12096)
  • Unblock metric tick from S3 LIST + TTL cache historical-store size (#12052)
  • Enable vertical merge for wide part (#12057)

Bug Fixes

  • Decode pip output as UTF-8 instead of the locale encoding (#12293)
  • Keep -1/+1 consecutive pair contiguous through the shard merge (#12234)
  • Stage pip into the Python asset so package install works (#12285)
  • Sync executor with upstream and back off merge selection after memory-limited failures (#12247)
  • Clamp negative low_sn to 0 when logging processed_sn fallback (#12277)
  • Fix SYSTEM STOP MERGES segfault on streams without local historical storage (#12268)
  • Bound hydrated bytes parked in shared storage fetch batches (#12262)
  • Fix silent data loss when Raft proposals are dropped during no-leader windows (#12260)
  • Fix JS UDF dictionary getValue/batchGetValues missing-key handling (#12253)
  • Fix stream recovery replay with incremental commits (#12251)
  • Stop torn-tail recovery from inverting a loglet (#12238)
  • Stop the historical-recovery OOM crash-loop at write, load, and recover (#12237)
  • Gate retention on a real applied-SN (#12228)
  • Rebind prefix-range slices after merge (#12230)
  • Reduce default TTL of high-frequency metric logs (#12226)
  • Override isReady() to gate materialized view builds on schema readiness (#12222)
  • Check attributes existence before JSON extraction (#12216)
  • Mitigate Protobuf map-entry issue for Confluent schema registry (#12211)
  • Manual rebalance trigger: immediate task is not a scheduling failure (#12208)
  • Deterministic per-stream tie-break to remove low-node-ID placement bias (#12207)
  • Use the shard's storage when listing active parts in system.parts (#12192, #12193)
  • Roll back torn WAL tail on partial write under ENOSPC (#12185)
  • Throw bad_alloc on failed ByteVector allocation instead of NULL dereference (#12181)
  • Suppress phantom changelog rows in multishard memory aggregation (#12162)
  • Restore data_version on StoragePolicyDescriptor deserialize (#12170)
  • Drop spurious "Profile counters are not set" warning (#12166)
  • Clone inner_query and serialize lazy semantic init (#12152)
  • EMIT ON UPDATE no longer drops updates when +1 partner is filtered to empty (#12126)
  • Direct join honors nullable left keys (#12143)
  • Enforce NAMED_COLLECTION access in settings merge (#12151)
  • Fix DROP DATABASE CASCADE failure when alerts exist (#12130, #12158)
  • Self-heal NativeLog replica from torn-WAL inconsistency instead of crash-looping (#12156)
  • Restore min_size_to_keep floor for metadata and checkpoint logs (#12137)
  • Make version_column + TTL safe (#11991)
  • Cap delayed write streams for parallel-write disks (#12123)
  • Background NativeLog commit no longer throws TOO_MANY_PARTS (#12112)
  • Skip filter and expression fusion when child carries substream-aware stateful functions (#12111)
  • Bump V8 and cherry-pick ARM64 64K-page fixes (#12105)
  • Apply proposed librdkafka fix for improved Kafka stability (#12103)
  • Fix Pulsar health check and ddl_index/named_collection issues (#12088)
  • Fix mutable stream file descriptor leak (#12093)
  • Align DNSResolver throw type with upstream (#12087)
  • Fix incorrect alert dependency tracking behavior (#12080)
  • Resolve Python interpreter symlinks recursively (#12081)
  • Fix Kafka client race between shutdown() and read() (#12078)
  • Fix mutable stream corruption after adding an index and rebooting (#12070)
  • Probe builtin views via system.stream_shards (#12047)
  • Retry on Poco::Exception in ReadBufferFromS3::nextImpl (#12041)
  • Fix hanging issue when recreating Kafka consumer (#12038)
  • Gate OTel external stream on USE_GRPC (#12032)
  • Fix data race in getting watermark (#12031)