2.11.3
Date: 2024-04-17
Tag: 2.11.3
Overview
2.11.3 is the next stable release in the long-term support (LTS)
versionrelease_policy 2.11.x release series.
The label "stable" means there are 1.10.x-based applications running in
production for quite a while without known crashes, incorrect results or
other showstopper bugs.
This release resolves roughly 54 issues since the 2.11.2 version.
Compatibility
Tarantool 2.11.x is backward compatible with Tarantool 1.10.x in binary data
layout, client-server protocol and replication protocol.
Please upgrade using the box.schema.upgrade()
procedure to unlock
all the new features of the 2.11.x series.
Bugs fixed
Core
- Fixed a bug when the assertion in
box_wait_limbo_acked
would fail. The
assertion is that the lsn of the last entry in limbo is always positive after
wal_sync
. Before the patch, if thereplication_synchro_quorum
was set too
high on the replica, it would never be reached. After the timeout was
triggered, the user received aTimedOut
error. If the quorum was greater
than or equal to the number of instances in the replica set, the program
immediately stopped with a segmentation fault (gh-9235). - Fixed a bug when the assertion in
box_promote_qsync
would fail in the
debug build mode. The assertion is that at the moment whenbox_promote_qsync
is called, no other promote is being executed. It turned out that this
assertion is basically incorrect. In the release build mode, this incorrect
assumption could potentially lead to writing 2 PROMOTE entries in the same
term (gh-9263). - The error messages are no longer stripped (gh-4975).
- Increased the maximum number of tuples in a hash index from 2147483648 (2^31)
to 4294967288 (2^32 - 8) (gh-9864). - Fixed a bug that resulted in a crash when both MVCC and index with the
exclude_null
part were used (gh-9954). - Now
box.cfg()
correctly interprets theTT_LISTEN
andTT_REPLICATION
environment variables with query parameters (gh-9539). - The
exclude_null
option is now supported by functional indexes (gh-9732).
Replication
- Now transactions are not rolled back if the transaction fiber is
cancelled when waiting for quorum from replicas (gh-9480). - Fixed a bug when replication broke with
ER_PROTOCOL
when transactions ended
with a local space operation (gh-9491). - Fixed an issue when it was possible to use the
box_collect_confirmed_vclock
stack after return (gh-9505).
LuaJIT
Backported patches from the vanilla LuaJIT trunk (gh-9145, gh-9595). The
following issues were fixed as part of this activity:
- Fixed CSE of a
REF_BASE
operand acrossIR_RETF
. - Fixed the fold rule for
BUFHDR APPEND
. - Fixed HREFK, ALOAD, HLOAD, forwarding vs.
table.clear()
. - Fixed snapshot PC when linking to
BC_JLOOP
that was aBC_RET*
. - Fixed dangling references to CType.
- Ensured returned string is alive in
ffi.typeinfo()
. - Fixed the missing initialization of the internal structure, leading to a
crash when recording a trace with an allocation of cdata. - Limited exponent range in number parsing by
2^20
. - Fixed double-emitting of
IR_NEWREF
when restoring sunk values for side
trace (gh-7937). - Fixed the
IR_HREFK
optimization for huge tables. - Fixed recording of the
__concat
metamethod. - Fixed the embedded bytecode loader.
- Improved error reporting on stack overflow.
- Fixed assertion on the Lua stack overflow for a stitched trace.
- Fixed snapshoting of functions for non-base frames.
- Fixed a crash in the allocator during sysprof profiling (gh-8140).
- No side traces are recorded now after disabling the JIT via
jit.off()
. - Fixed handling of instable boolean types in TDUP load forwarding.
- Fixed a crash during the restoration of the sunk
TNEW
with a huge array
part. - Fixed stack-buffer-overflow for
string.format()
with%g
modifier and
length modifier. - Fixed recording of
setmetatable()
withnil
as the second argument. - Fixed recording of
select()
in case with negative first argument. - Fixed use-def analysis for child upvalues.
- Added the
cc
file type for saving bytecode. - Fixed C file generation in
jit.bcsave
. - Fixed trace error handling during trace stitching.
- Fixed recording of the
__concat
metamethod for vararg or protected frames. - Fixed recording of a side trace returning to a lower frame with a maximum
possible frame size. - Fixed
debug.setmetatable()
andlua_setmetatable()
with enabled
jit.dump()
. - Fixed recording of side traces with a down-recursion.
Lua
- Fixed a memory leak in
error_object:set_prev()
(gh-9694). - Fixed alias detection in the YAML encoder (gh-8350, gh-8310, gh-8321).
- Fixed a regression that caused the
wait_connected = false
option of
net_box.connect
to yield, despite being required to be fully asynchronous
(gh-9489). - Fixed a bug in
net.box
when a connection with asynchronous requests could
get garbage collected (gh-9629). - Fixed an inconsistency between the documented
on_disconnect
trigger behavior
ofnet.box
connections when an error is thrown and the actual behavior
(gh-9717). - Fixed a bug in the
on_disconnect
trigger ofnet.box
connections that
caused Tarantool server to hang indefinitely when an error was thrown from the
trigger (gh-9797). - The
on_schema_reload
trigger behavior ofnet.box
connections when an
error is thrown is now consistent with the behavior of theon_disconnect
trigger (gh-9679). - Fixed a bug when a
net.box
connection remained active after being closed
from the connection'son_connect
trigger (gh-9827).
HTTP client
- Fixed a crash on garbage collection of httpc objects (gh-9283).
- Fixed a crash due to a race in GC finalizers (gh-9346).
- Fixed behaviour of GC-finalizer of HTTP client Lua object when chunked HTTP
request is alive. (gh-9453).
SQL
- Fixed a memory leak when an error occurred in
SELECT
with aGROUP BY
expression (gh-8535, ghs-125). - Fixed a crash when a decimal literal representing a decimal number greater
than or equal to 10^38 was parsed in SQL (gh-9469).
Datetime
- Fixed a bug in
strptime
when the assertion was triggered (gh-8525).
Build
- Updated libcurl to version 8.5.0.
Testing
- Bumped
metrics
submodule to commit3370f85
to fix compatibility with
luatest
commitd985997
.
Tools
- Added the
--human-readable
option for themisc.memprof
parser to print
sizes like 1KiB, 234MiB, 2GiB, etc.
Made the errors from the profilers more user-friendly (gh-9217).