3.6.3
Date: 2026-05-25
Tag: 3.6.3
Overview
Tarantool 3.x is the recommended release series. Users of Tarantool 2.11 are
encouraged to update to the latest 3.x release.
This release resolves 36 bugs since 3.6.2.
Please consider the full list of user-visible changes below.
Compatibility
Tarantool 2.x and 3.x are compatible in the binary data layout, client-server
protocol, and replication protocol. It means upgrade may be performed with zero
downtime for read requests and the order-of-network-lag downtime for write
requests.
Please follow the upgrade procedure to plan your update actions.
Users of Tarantool 2.x may be interested in the compat options that
allow to imitate some 2.x behavior. This allows to perform application code
update step-by-step, not all-at-once.
Tools
Introduced the misc.memprof.available and misc.sysprof.available flags to
determine whether the corresponding profiler is available for the current
Tarantool build (gh-12215).
Bugs fixed
Core
- Fixed a bug where
box.ctl.promote()returned before the instance became
writable (gh-10040). - Fixed a bug where
.xlog.inprogressfiles were not automatically deleted
during server startup if thewal_dirvalue was not the default (gh-12081). - Fixed a bug where a local space could not be truncated when the
_truncate
space was synchronous (gh-12585). - Connections introduced using
box.session.new()are no longer
dropped in the isolated mode (gh-12479).
Replication
- Fixed a bug where the replication could get stuck upon receipt
of a 'promote' entry from a newly elected leader. This was
likely to happen when the receiver itself had been a leader not
long ago and still had some transactions in the synchro queue
not yet written to the journal (gh-12205). - Fixed a bug where a replica on subscribe could get stuck in the
syncstate
for the duration ofreplication.timeout. This issue was observable in
box.info.replication[...].upstreamand could lead to temporary
inconveniences, such as the inability to runbox.ctl.promote()(when
election_modewas notoff) (gh-12025).
LuaJIT
Backported patches from the vanilla LuaJIT trunk (gh-12134). The following
issues were fixed as part of this activity:
- Added
ffi.abi("dualnum"). - Fixed stack checks in varargs calls in the GC64 build.
- Fixed stack checks in
pcall()/xpcall()in the GC64 build. - Fixed the allocation limit for the no-JIT build.
- Fixed handling of OOM errors on stack resizing in
coroutine.resume()and
lua_checkstack(). - Fixed recording of loops with a
-0stepvalue orNaNcontrol values. - Fixed error reporting when an error occurs during error handling.
- Fixed a dangling reference for FFI callbacks.
- Fixed
BC_UNMfor a-0argument in the dual-number mode. - Fixed narrowing of unary minus in the dual-number mode.
- Fixed recording of
string.byte(),string.sub(), andstring.find(). - Fixed missing type conversion for
BC_FORIslots in the dual-number mode. - Fixed various corner cases in VM events.
- Fixed constructor index resolution recording in the JIT compiler.
- Fixed a UBSan warning in
unpack(). - Fixed snapshot purge while recording a function header.
SQL
- Fixed an integer overflow in the SQL built-in function PRINTF
(ghs-161). - Fixed a segfault in the SQL built-in function REPLACE
(ghs-160). - Removed the non-working ON CONFLICT clause for the NULL property
in column definitions within CREATE TABLE statements (gh-12701).
Config
- Fixed a startup failure when a Tarantool 3.x instance configured via
the declarative config joined a 2.x replica set, where the master had
no instance or replica set names stored in its snapshot (gh-10426). - Fixed a bug in the supervised bootstrap strategy when a replica could hang on
startup while joining an already bootstrapped replica set (gh-11318).
Datetime
- Fixed an assertion failure on an ambiguous case where day of year (
yday,
which defines calendar month and month day implicitly) and calendar month
(without a month day) were both defined in the date text. Now such case is
detected and an error is thrown (gh-11347). - Fixed
tzoffsetcalculations for cases likenew({timestamp=x, tz='Zone'})
(gh-12412). - Fixed inconsistency between dates produced by
new({tzoffset=x})
andd:set({tzoffset=x})whered.tz ~= ''comes beforeset()
(gh-7680, gh-12416). - Now
datetime.new()anddatetime_object:set()
check the timestamp value to be in the valid range (gh-12147). - Fixed timestamp type checking in
set().
For backward compatibility thecompat.datetime_setfn_timestamp_type_check
option has been introduced. It's disabled by default for now ('old' behavior),
which means no type check is performed. The 'new' behavior (with type check)
is planned to be set as the default in version 4.x (gh-12411). - Fixed corruption of a datetime object by the
set()function
when an error occurs (gh-12171).
Election
- Fixed a bug where a newly elected leader could become writable (
box.info.ro
isfalse) immediately afterbox.info.election.state == 'leader'but before
it claimed the synchronous transactions queue (box.info.synchro.queue.owner
is not this node). This could occur only when the synchronous queue was
previously unclaimed, which typically happens on cluster startup (gh-12333). - Fixed a bug where a replica could crash or exhibit undefined behavior when
the election leader sent this replica a synchronous replication control
command (promotion or demotion), but the replica received it just before
performing a cascading journal rollback. This could happen if the
wal.queue_max_sizesetting was reached (gh-12557).
Uri
- Fixed a Use-After-Poison crash in
uri.format()caused by a long
URI (ghs-151).