Releases: tarantool/tarantool
3.4.0
Date: 2025-04-15
Tag: 3.4.0
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 introduces 20 improvements and resolves 4
bugs since 3.3.2.
Notable changes are:
- Cross-engine transactions are now possible between memtx and vinyl spaces.
- Functional indexes are now supported by memtx MVCC.
- Forbade creating multikey indexes when memtx MVCC is enabled because they are
not supported in this scenario. - Added 'native'
bootstrap_strategy
to replicaset config.
Please, consider the complete 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 them to imitate some 2.x behavior. This allows to perform application code
updates step-by-step, not all-at-once.
Functionality added or changed
Memtx
- Added support for functional indexes in MVCC transaction manager.
Vinyl
- Added support for the
np
(next prefix) andpp
(previous prefix) iterators
(gh-10647).
Replication
- Allowed to call
box.ctl.make_bootstrap_leader()
before the first
box.cfg()
call in the'supervised'
bootstrap strategy (gh-10858). - Added the
graceful
option tobox.ctl.make_bootstrap_leader()
(gh-11272). - Allow to bootstrap the initial database in read-only mode in the 'supervised'
bootstrap strategy. - Now
box.cfg({bootstrap_strategy = 'supervised'})
without upstreams waits
for thebox.ctl.make_bootstrap_leader(<...>)
command till the replication
connect timeout instead of an immediate fail.
Lua
- Built-in logger now encodes table arguments in the JSON format (gh-8611).
Core
- Removed the warning logged by potentially long
index.select()
calls.
The warning became useless after the introduction of the fiber slice limit. - Added support for cross-engine transactions. It is now possible to mix
statements for different storage engines in the same transaction. Note
that to mix memtx and vinyl statements, the configuration option
database.memtx_use_mvcc_engine
must be enabled (gh-1803). - Introduced the
index:quantile()
function for finding a quantile key in
an indexed data range. The function is implemented by memtx and vinyl tree
indexes (gh-11111).
Config
- Added the
replication.reconnect_timeout
option. The option shows
the timeout in seconds between attempts to reconnect to a master
in case of connection failure (gh-11115, part of gh-10059). - The
<schema object>:map()
method now supports transformation of a composite
type (gh-10756).
It also makes<schema object>:apply_default()
support thedefault
annotation for a composite type. <schema object>:validate()
now takes into account theunique_items
annotation.
Also,schema.set()
now accepts a user-providedvalidate
annotation.- Now Tarantool instances configured in the supervised failover mode don't
choose learner instances as a bootstrap leader (gh-10842). - Now the
stop
callback for the roles is called during graceful shutdown. The
stop
callbacks are called in the reverse order of roles startup (gh-10795). - Added the
has_role
,is_router
, andis_storage
methods to the
config
module to check if a role is enabled on an instance (gh-11288). - Introduced an
early_load: true
tag for roles and scripts. When set, it makes
Tarantool load the role or execute the script beforebox.cfg
(gh-10182). - Added
replication.bootstrap_strategy
=native
(gh-10857). - Now, when the instance is configured with bootstrap strategy
supervised
or
native
and uses a supervised failover coordinator the guest user is
automatically granted privileges for performing the initial bootstrap
using thefailover.execute
call.
Metrics
-
Updated the metrics submodule to 1.3.0.
Bugs fixed
Core
- Changed the level of the "N messages suppressed" warning logged when
Tarantool processes snapshot rows at a high rate from "warn" to "info".
Memtx
- Tarantool allowed to create multikey indexes with memtx MVCC enabled,
but they were not supported. This led to a crash or a panic. Now
Tarantool raises an error when one tries to create an index of the kind
with memtx MVCC enabled (gh-6385).
Replication
- Fixed a bug when with the new
replication_synchro_timeout
behavior
(compat.replication_synchro_timeout = 'new'
) a user fiber could hang
indefinitely if for some reason the quorum could not respond with an ACK
to a synchronous transaction.
A new configuration optiontxn_synchro_timeout
has been introduced
for this purpose.
Config
- Now,
replication.bootstrap_strategy
can't be specified in the instance scope
since it only makes sense to specify the option for at least the whole
replicaset.
3.3.2
3.3.2
Date: 2025-04-10
Tag: 3.3.2
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 52 bugs since 3.3.1.
Announcement: double
field type problems
Users who ever used the double
field type in vinyl indexes might have their
indexes broken. Regardless of this release. Preferably prior to the upgrade the
users must get rid of the double
indexed field type in vinyl. It must be
drop-in replaceable by the number
field type.
The reason
8000
is that the sorting of double
fields would always compare the field
values as C-language doubles, even when actual integers are stored. This works
fine for small numbers, but starting from 2^53 the double-style comparison
loses precision. For example, 18446744073709551615 and 18446744073709551614
would be considered the same values.
Besides, point-lookups in such index are going to be broken by design too -
looking up by 18446744073709551615 can return 18446744073709551614 and many
other integers around this point.
Unfortunately, even if the user doesn't have the double
type in any vinyl
indexes, but ever had it before, it is still unsafe. A double
index
altered to number
or scalar
would remain broken. It is very important that
users rebuild all the vinyl indexes that have or ever had the double
field
type in them. What is worse, just an alter double
-> number
won't
work. The old index must be dropped and a new one must be created. In any
order. See also gh-9965 and gh-11017 for more details.
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 that an 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.
Bugs fixed
Core
- Fixed a bug when the
sequence:reset()
call result was not recovered
after the server restart (gh-9871). - Fixed log message being truncated to 1024 bytes with JSON logger (gh-10918).
- Fixed several bugs related to numbers comparison and hashing in tuple keys. It
allowed to insert the same key multiple times into a unique index, and
sometimes wouldn't allow to find an existing key in an index. Could happen
when numbers were encoded in MessagePack suboptimally and when thedouble
field type was used (gh-9965). - Fixed the issue with hanging write operations forever triggered by heavy
write load and WAL writing failures on cascade rollback (gh-11081). - Fixed a bug when cancelling a fiber waiting in WAL queue corrupted the
the WAL (gh-11078). - Fixed a bug when the timestamps of snapshots created before the server restart
were not taken into account withcheckpoint_interval
enabled (gh-9820). - Fixed a bug when the sizes of xlog files created before the server restart
were not taken into account during thecheckpoint_wal_threshold
exceedance
checks (gh-9811). - Fixed a bug when transactions in the WAL queue were not rolled back on WAL
error (gh-11179). - Fixed a bug when the WAL queue was not flushed properly. In particular
when building an index of a vinyl space. In the latter case it might make
the new index miss data from transactions in the queue
(gh-11118, gh-11119). - Fixed a bug when a record could be lost from the
_gc_consumers
space after
receiving a promote request from another instance and restarting the current
instance (gh-11053). - Fixed a bug when
box.commit({wait = 'none'})
could yield (gh-11224). - Fixed use-after-free for a session created implicitly when using
tnt_tx_push()
to execute code making access checks (gh-11267).
Memtx
- Fixed a crash when memtx MVCC tried to abort an already committed
non-memtx transaction if it used a system space view or tried to
perform a DDL operation (gh-10715). - Fixed a bug when Tarantool with memtx MVCC enabled was aborted on
workload with manyindex:get()
operations reading nothing (gh-11022). - Fixed a crash on OOM on insertion in tree indexes of the memtx engine (gh-11326).
- Tarantool allowed to create multikey and functional indexes with
memtx MVCC enabled, but they were not supported. This led to a crash
or a panic. Now Tarantool raises an error when one tries to create
an index of the kind with memtx MVCC enabled (gh-6385, gh-11099).
Vinyl
- Fixed a bug when aborting a transaction by timeout while it was executing
a statement could trigger a crash (gh-11088). - Fixed a bug in the tuple cache when a transaction operating in a read view
could skip a tuple deleted after the read view creation (gh-11079, gh-11294). - Fixed a bug in the tuple cache when a tuple could become inaccessible via
a secondary index after a transaction rollback caused by a WAL write error
(gh-11140). - Fixed a bug when the garbage collector purged run files left after a dropped
space without waiting for compaction completion. The bug could result in
a compaction failure with a "No such file or directory" error (gh-11163). - Fixed a bug when
space:truncate()
failed withER_TRANSACTION_YIELD
(gh-11249).
Replication
- Fixed a crash which could happen while an instance was shut down
having an unfinished synchronous transaction (gh-10766). - Fixed a bug when the synchronous queue size limit was not enabled
after recovering from local snapshot-files, i.e. its size was not limited by
replication_synchro_queue_max_size
(gh-11091). - Fixed a crash which could happen during relay thread shut down (gh-9920).
LuaJIT
Backported patches from the vanilla LuaJIT trunk (gh-10709, gh-11055). The
following issues were fixed as part of this activity:
- Fixed compilation of
getmetatable()
forio
objects. - Fixed dirty reads from recorded
IR_NOP
. - Fixed fusing optimization across
table.clear()
or insertion of a new key. - Disabled FMA optimization on aarch64 to avoid incorrect results in floating
point arithmetics. Optimization may be enabled for the JIT engine via the
commandjit.opt.start("+fma")
. - Fixed machine code zone overflow for trace recording on x86/x64.
- Fixed possible infinite loop during recording a chunk that used upvalues.
- Fixed recording of
bit.bor()
/bit.bxor()
/bit.band()
with string
arguments. - Fixed parsing of
for _ in
loop. - Fixed compiler warning in
setfenv()
/getfenv()
with negative levels as
the argument. - Fixed register allocation for stores into sunk values (gh-10746).
- Fixed a crash when using a Lua C function as a vmevent handler for trace
events. - Fixed the compilation of
...
inselect()
. - Fixed closing the report file without samples for
jit.p
. - Fixed the OOM error handling during recording the
__concat
metamethod. - Fixed the second
trace.flush()
call for an already flushed trace. - Fixed bit op coercion for shifts in DUALNUM builds.
- Fixed
IR_ABC
hoisting. - Returned the rehashing of the cdata finalizer table at the end of the GC
cycle to avoid memory overgrowing for cdata-intensive workloads.
Lua
- Fixed a bug when the request counter used by a
net.box
client to implement
the graceful shutdown protocol could underflow while it was fetching the
schema from the remote end. In case of a debug build, the bug would crash
the client. In case of a release build, the bug would result in a timeout
while executing a remote server shutdown (gh-11062).
SQL
- Fixed undefined behavior of SQL when using positive
MP_INT
numbers in
MessagePack anywhere (bound arguments, tuples, C functions) (gh-10132).
Config
- Now the
failover
section can be defined only in the global configuration
scope. - Now runtime
lua_call
privileges are also applied before the initial
bootstrap, making it possible to permit some functions to be executed by the
guest user before setting up the cluster.
Tools
Fixed a bunch of bugs in LuaJIT profilers:
misc.sysprof.stop()
returns a correct error message if the profiler is not
running.misc.sysprof.start()
now raises an error if an argument has an incorrect
type.
Made LuaJIT profilers more user-friendly:
misc.memprof.start()
without arguments writes a dump into a default file
namedmemprof.bin
instead of raising an error.misc.sysprof.start()
provides more verbose errors in case of profiler
misuse.- If the profiler is disabled for the target platform, it is now mentioned in
the error message explicitly. misc.sysprof.start()
without arguments starts the profiler in the default
mode"D"
.
2.11.6
Date: 2025-02-24
Tag: 2.11.6
Announcement: double
field type problems
Users who ever used the double
field type in vinyl indexes might have their
indexes broken. Regardless of this release. Preferably prior to the upgrade the
users must get rid of the double
indexed field type in vinyl. It must be
drop-in replaceable by the number
field type.
The reason is that the sorting of double
fields would always compare the field
values as C-language doubles, even when actual integers are stored. This works
fine for small numbers, but starting from 2^53 the double-style comparison
loses precision. For example, 18446744073709551615 and 18446744073709551614
would be considered the same values.
Besides, point-lookups in such index are going to be broken by design too -
looking up by 18446744073709551615 can return 18446744073709551614 and many
other integers around this point.
Unfortunately, even if the user doesn't have the double
type in any vinyl
indexes, but ever had it before, it is still unsafe. A double
index
altered to number
or scalar
would remain broken. It is very important that
users rebuild all the vinyl indexes that have or ever had the double
field
type in them. What is worse, just an alter double
-> number
won't
work. The old index must be dropped and a new one must be created. In any
order.
See more details in gh-9965 and gh-11017.
Overview
2.11.6 is the next stable release in the long-term support (LTS)
version of the 2.11.x release series.
The label "stable" means there are 2.11.x-based applications running in
production for quite a while without known crashes, incorrect results or
other showstopper bugs.
This release resolves 32 issues since the 2.11.5 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.x series.
Bugs fixed
Core
- Fixed a bug when a server could crash if a client sent an IPROTO replication
request without waiting for pending requests to complete (gh-10155). - Fixed a bug when the
sequence:reset()
call result was not recovered
after the server restart (gh-9871). - Fixed several bugs in the numbers comparison and hashing in tuple keys. It
allowed to insert the same key multiple times into a unique index, and
sometimes wouldn't allow to find an existing key in an index. Could happen
when numbers were encoded in MessagePack suboptimally and when thedouble
field type was used (gh-9965). - Fixed the issue with hanging write operations forever triggered by heavy
write load and WAL writing failures on cascade rollback (gh-11081).
Memtx
- Fixed a crash when memtx MVCC tried to abort an already committed
non-memtx transaction if it used a system space view or tried to
perform a DDL operation (gh-10715). - Fixed a bug when Tarantool with memtx MVCC enabled was aborted on
workload with manyindex:get()
operations reading nothing (gh-11022).
Vinyl
- Fixed a bug when a deleted tuple wasn't purged from a secondary index data
stored on disk in case it was updated more than once in the same transaction.
The bug couldn't result in inconsistent query results, but it could lead to
performance degradation and increased disk usage (gh-10820, gh-10822). - Fixed a bug when joining a new replica to a master instance that experiences
a heavy write load severely degrades the master instance performance.
The fix should also speed up long-running scan requests (gh-10846). - Fixed a bug when a tuple could disappear from a multikey index in case it
replaced a tuple with duplicate multikey array entries created in the same
transaction. With the enableddefer_deletes
space option, the bug could
also trigger a crash (gh-10869, gh-10870). - Fixed a bug when the tuple cache was not properly invalidated in case
a WAL write error occurred while committing aspace.delete()
operation.
The bug could lead to a crash or an invalid read query result (gh-10879). - Fixed a bug when a deleted secondary index key wasn't purged on compaction
of a space with thedefer_deletes
option enabled (gh-10895). - Fixed a bug in the tuple cache when a transaction operating in a read view
could skip a tuple deleted after the read view creation (gh-11079). - Fixed a bug in the tuple cache when a tuple could become inaccessible via
a secondary index after a transaction rollback caused by a WAL write error
(gh-11140).
Replication
- RAFT requests are now sent with 0 (not local) GROUP_ID (gh-10727).
- Fixed a bug when the RAFT state wasn't sent during the
META_JOIN
stage,
which could lead to split-brain (gh-10089). - Fixed a bug when anonymous replicas could participate in elections or even
be chosen as a leader. It is now forbidden to configure a replica so
thatreplication_anon
istrue
andelection_mode
is notoff
(gh-10561).
LuaJIT
Backported patches from the vanilla LuaJIT trunk (gh-10709). The following
issues were fixed as part of this activity:
- Fixed compilation of
getmetatable()
forio
objects. - Fixed dirty reads from recorded
IR_NOP
. - Fixed fusing optimization across
table.clear()
or insertion of a new key. - Disabled FMA optimization on aarch64 to avoid incorrect results in floating
point arithmetics. Optimization may be enabled for the JIT engine via the
commandjit.opt.start("+fma")
. - Fixed machine code zone overflow for trace recording on x86/x64.
- Fixed possible infinite loop during recording a chunk that uses upvalues.
- Fixed recording of
bit.bor()
/bit.bxor()
/bit.band()
with string
arguments. - Fixed parsing of
for _ in
loop.
Backported patches from the vanilla LuaJIT trunk (gh-11055). The following
issues were fixed as part of this activity:
- Fixed compiler warning in
setfenv()
/getfenv()
with negative levels as
the argument. - Fixed register allocation for stores into sunk values (gh-10746).
- Fixed a crash when using a Lua C function as a vmevent handler for trace
events. - Fixed the compilation of
...
inselect()
.
log
- Fixed log message being truncated to 1024 bytes with JSON logger (gh-10918).
net.box
- Fixed a bug when the request counter used by a
net.box
client to implement
the graceful shutdown protocol could underflow while it was fetching the
schema from the remote end. In case of a debug build, the bug would crash
the client. In case of a release build, the bug would result in a timeout
while executing the remote server shutdown (gh-11062).
Build
- Ubuntu Noble (24.04) is now supported.
3.3.1
3.3.1
Date: 2024-12-25
Tag: 3.3.1
Overview
3.3.1 is the 2nd stable version of the 3.3 release
series. It resolves 11 bugs since 3.3.0.
The "stable" label means that we have all planned features implemented and we
see no high-impact issues. However, if you encounter an issue, feel free to
report it on GitHub.
Compatibility
Tarantool 3.x is backward compatible with Tarantool 2.11.x in the 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 3.x series.
Bugs fixed
Core
- Fixed a bug when IPROTO_INDEX_NAME was mapped into a wrong index identifier (gh-9923).
Vinyl
- Fixed a bug when a tuple could disappear from a multikey index in case it
replaced a tuple with duplicate multikey array entries created in the same
transaction. With thedefer_deletes
space option enabled, the bug could
also trigger a crash (gh-10869, gh-10870). - Fixed a bug when the tuple cache was not properly invalidated in case
a WAL write error occurred while committing aspace.delete()
operation.
The bug could lead to a crash or an invalid read query result (gh-10879). - Fixed a bug when a deleted secondary index key wasn't purged on space
compaction with thedefer_deletes
option enabled (gh-10895). - Fixed a use-after-free bug in the transaction manager that could be triggered
by a race between DDL and DML operations affecting the same space (gh-10707).
Replication
- Fixed a bug when anonymous replicas could participate in elections or even
be chosen as a leader. It is now forbidden to configure a replica so
thatreplication_anon
istrue
andelection_mode
is notoff
(gh-10561).
Config
- Don't fail if the
sharding.roles
option is not set for some instances
(gh-10458). schema:get()
/schema:set()
andconfig:get()
no longer change the
passed path if it is passed as a table (gh-10855).- Now Tarantool writes a detailed error message if it finds
replica sets with the same names in different groups, or instances
with the same names in different replica sets in the provided
configuration (gh-10347). <schema object>:merge()
now performs a deep merge inside anany
scalar
value if left-hand and right-hand values are both tables, where all the keys
are strings. This way, cluster configuration options that are marked as
any
in the schema (fields ofapp.cfg
androles_cfg
) are merged deeply
(gh-10450).- Fixed
on_event
roles callback receiving wrongconfig
argument (gh-10934).
3.3.0
3.3.0
Date: 2024-11-29
Tag: 3.3.0
Overview
3.3.0 is the first stable version of the 3.3 release
series. It introduces 31 improvements and resolves 24 bugs since
3.2.1.
The "stable" label means that we have all planned features implemented and we
see no high-impact issues. However, if you encounter an issue, feel free to
report it on GitHub.
Compatibility
Tarantool 3.x is backward compatible with Tarantool 2.11.x in the 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 3.x series.
Functionality added or changed
Core
- Added the
box.ctl.wal_sync()
function, which waits until
all submitted writes are successfully flushed to the disk.
Throws an error if a write fails. After the function is
executed one may reliably usebox.info.vclock
for comparisons
when choosing a new master (gh-10142). - Allowed DDL before calling
box.schema.upgrade
since schema version 2.11.1.
Creating persistent trigger is forbidden until schema version 3.1.0.
Using persistent names is allowed since schema version 2.11.5 (gh-10520). - Added the
dd_version
field to thebox.status
system event (gh-10546). - New public C API functions
tnt_tx_push(callback)
andtnt_tx_flush()
allow to send work to TX thread from any other thread. - Exposed the
box_slab_info()
function via C module API. - Added support for asynchronous wait modes (
box.commit{wait = ...}
) to
synchronous transactions. Changes committed this way can be observed with the
read-committed
isolation level. Such transactions will not get
rolled back due toreplication_synchro_timeout
(gh-10583).
Memtx
- Improved the performance of tree index methods: the
select()
method withoffset
specified and thecount()
method. The underlying algorithm for these methods is
changed: the old algorithm's time complexity wasO(n)
, wheren
is the value of
offset
or the amount of counted tuples. The new algorithm's complexity is
O(log(size))
, wheresize
is the number of tuples stored in the index. Now
it does not depend on theoffset
value or the amount of tuples to count. It
is safe to use these functions with arbitrary big offset values and tuple
count (gh-8204). - Now DDL operations abort only transactions related to the space that
they are modifying (gh-10377).
Replication
- Now all replicas have WAL GC consumers persisted in the
_gc_consumers
space (gh-10154). Thewal_cleanup_delay
option is no longer needed,
so it is deprecated. - A new compat option
compat.replication_synchro_timeout
has been added.
This option determines whether thereplication.synchro_timeout
option rolls
back transactions. When set to 'new', transactions are not rolled back due to
a timeout. In this modereplication.synchro_timeout
is used to wait
for confirmation in promote/demote and gc-checkpointing. If 'old' is set, the
behavior is no different from what it was before this patch appeared. - A new
replication.synchro_queue_max_size
option limits the number of
transactions in the master synchronous queue.
replication.synchro_queue_max_size
is measured in the number of bytes to be
written (0 means unlimited, which was the default behavior before).
Currently, this option defaults to 16 megabytes.
(gh-7486) - Added the
box.ctl.replica_gc
function that allows to clean up
resources of a disconnected replica (gh-10755). - Now anonymous replicas retain required xlogs. Outdated anonymous replicas
and their WAL GC state are deleted automatically when being disconnected
forbox.cfg.replication_anon_ttl
seconds (gh-10755).
Lua
- Introduced a new
offset
parameter in theindex:pairs
method. It allows to
skip the first tuples of the iterator (gh-8204). - Introduced a new
index:offset_of
method. It allows to get the position in
the index relative to the iterator direction of a tuple matching the given
key and iterator (gh-8204). - Introduced a new
encode_key_order
option for the JSON encoder. It allows
you to pass the order of keys in the resulting JSON string (gh-10606). - Introduced the
version
Lua module, which enables creation and
comparison of version objects. The module eases the use of
features blocked beforebox.schema.upgrade
(gh-10521).
Config
- Now users can specify the
lua_call
option to allow calling Lua functions
even when the database is in read-only mode or has an outdated schema version
(gh-10310). - Now, when running in the supervised failover mode, the instance
with the highest priority is selected as the bootstrap leader by
default (gh-10552). - Improved the error message about array data when a record or a map is
expected (gh-10241, gh-10242). config:info()
and its aliasbox.info.config
now has thehierarchy
field
that shows the configured instance, replica set, and group names (gh-10308).- Added the
isolated
option for instances (gh-10796). - Added the
lua.memory
parameter to set up the maximum available RAM for
Lua scripts (gh-9849). - Added the
:jsonschema()
method to theconfig
module. This method generates
and returns the JSON schema of the cluster configuration, providing a detailed
description of each field (gh-10636). - Introduced the
on_event
callback for roles (gh-10538). - Introduced public API for raising alerts (gh-10873).
- Added the
replication.autoexpel
option (gh-10823). - Added the
<schema object>:jsonschema()
method to
experimental.config.utils.schema
for generating a JSON schema
representation as a Lua table (gh-10636).
Connpool
connpool.filter()
now works faster, especially in case there are
unavailable instances (gh-10286).- Now
connpool.filter()
returns only alive instances by default.
To use the old behavior and acquire all instances the new option
skip_connection_check
can be used (gh-10596). - The
connpool.call()
method now works faster in general when it works in
modes different fromprefer_ro
/prefer_rw
(gh-10598).
Bugs fixed
Core
- Allow to downgrade without removing instance/replicaset/cluster names
(gh-10150). - Fixed a bug when log entries did not contain the file name and line at some
log levels in plain format (gh-9913). - Fixed a bug that prevented
update()
operations on fields with a
fixed-size floating-point type (gh-9929). - The
bootstrap_leader
configuration option is now dynamic (gh-10604). - Fixed a bug when a server could crash if a client sent an IPROTO replication
request without waiting for pending requests to complete (gh-10155). - Fixed a bug when the
drop_while
method of index iterators (index:pairs()
,
space:pairs()
) dropped an extra element (gh-6403). - Added missing key value check for fixed integer types (gh-10777).
- Fixed the crash caused by asynchronously committing an asynchronous
transaction following a synchronous timed out transaction (gh-10853).
Memtx
- Fixed a crash when a transaction that was processed concurrently with
background index build was rolled back due to WAL failure (gh-10620).
Vinyl
- Fixed a bug when
index.stat()
andindex.len()
could report a wrong number
of in-memory statements for a non-unique multi-key index of a space with
thedefer_deletes
option enabled (gh-10751). - Fixed a bug when a deleted tuple wasn't purged from a secondary index data
stored on disk in case it was updated more than once in the same transaction.
The bug couldn't result in inconsistent query results, but it could lead to
performance degradation and increased disk usage (gh-10820, gh-10822). - Fixed a bug when joining a new replica to a master instance that experienced
a heavy write load would severely degrade the master instance performance.
The fix should also speed up long-running scan requests (gh-10846).
Replication
- RAFT requests are now sent with 0 (not local) GROUP_ID (gh-10727).
- Fixed a bug when the RAFT state wasn't sent during the
META_JOIN
stage,
which could lead to split-brain (gh-10089). - Fixed a bug when master entered read-only mode and couldn't add new replicas
to the replica set after replication reconfiguration (gh-10760).
Lua
- Now
fun.chain
works correctly with iterators withoutparam
. - Now
fun.drop_while
supports stateful iterators. - Populated the
fun
module with the missingmaximum_by
alias
ofmax_by
. - Now
fun.nth
andfun.length
work correctly with Luafun iterators.
SQL
- Fixed a bug when an SQL count statement wasn't tracked by MVCC if it was
the first in a transaction (gh-10825).
Config
- Fixed the handling of the
log.modules
option removal (gh-10728). - Fixed the handling of the
wal.ext
option removal (ghe-963). - Fixed the handling of the
audit_log.spaces
option removal (ghe-964).
Upgrade
- Automatically fix incorrect format of user-defined spaces and empty password
for users during upgrade (gh-10180).
2.11.5
2.11.5
Date: 2024-11-22
Tag: 2.11.5
Overview
2.11.5 is the next stable release in the long-term support (LTS)
version 2.11.x release series.
The label "stable" means there are 2.11.x-based applications running in
production for quite a while without known crashes, incorrect results or
other showstopper bugs.
This release resolves 52 issues since the 2.11.4 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.x series.
Bugs fixed
Core
- Fixed a memory leak in coio on address resolution error (gh-10482).
- Fixed a memory leak on foreign key constraint check failure (gh-10476).
- Fixed a memory leak on an attempt to create or modify a user denied due to
access restrictions (gh-10485). - Fixed a crash when
slab_alloc_factor
was low and memory pressure was high
(gh-10148). - Fixed a crash when the first of two consequent DDL operations was
rolled back due to WAL failure (gh-10235). - Fixed an inconsistency between internal caches and system spaces with
MVCC enabled that could lead to unexplainable errors (gh-10262). - Fixed a bug when the
drop_while
method of index iterators (index:pairs()
,
space:pairs()
) dropped an extra element (gh-6403).
Memtx
- Fixed a crash when using pagination over a non-unique index with range
requests and MVCC enabled (gh-10448). - Fixed a bug when
index:count()
could return a wrong number, raise the
last error, or fail with theIllegalParams
error if the index had
theexclude_null
attribute and MVCC was enabled (gh-10396). - Fixed a crash on transaction rollback if memory usage was close to the limit
(gh-10551). - Fixed several bugs when DDL with MVCC enabled could lead to a crash
or violate isolation of other transactions (gh-10146). - Fixed a crash when a transaction that was processed concurrently with
background index build was rolled back due to WAL failure (gh-10620).
Vinyl
- Eliminated an unnecessary disk read when a key that was recently updated or
deleted was accessed via a unique secondary index (gh-10442). - Fixed a bug when recovery could fail with the error "Invalid VYLOG file:
Run XXXX deleted but not registered" or "Invalid VYLOG file: Run XXX deleted
twice" in case a dump or compaction completed with a disk write error after
the target index was dropped (gh-10452). - Fixed a memory leak on dump/compaction failure (gh-10489).
- Fixed a bug when
index.select()
could silently skip a tuple if it failed to
load a row from a run file (gh-10512). - Lowered the level used for logging range dump, compaction, split, and
coalesce events fromINFO
toVERBOSE
(gh-10524). - Fixed a bug when a compaction task could crash on a disk read error
(gh-10555). - Fixed a bug when
index.select()
executed in theread-confirmed
transaction isolation mode (default for read-only transactions) could corrupt
the tuple cache by creating a chain bypassing an unconfirmed tuple. The bug
could lead to a crash or invalid query results (gh-10558). - Added a fiber slice check to
index.count()
to prevent it from blocking
for too long while counting tuples in a space stored in memory (gh-10553). - Fixed a bug when an attempt to alter the primary index of an empty space
triggered a crash if executed concurrently with a DML request (gh-10603). - Fixed a bug when
index.stat()
andindex.len()
could report a wrong number
of in-memory statements for a non-unique multi-key index of a space with
thedefer_deletes
option enabled (gh-10751).
Replication
- Fixed a memory leak on disconnection from replica (gh-10480).
- Optimized synchronous transaction queue processing (gh-9917).
LuaJIT
Backported patches from the vanilla LuaJIT trunk (gh-10199). The following
issues were fixed as part of this activity:
- Now 64-bit non-FAT Mach-O object files are generated via
-b -o osx
. - Fixed
string.format()
compilation with many elements. - Fixed
dlerror()
in FFI call returningNULL
. - Fixed
__tostring
metamethod access to enum cdata value. - Fixed limit check in narrowing optimization.
- Dropped finalizer table rehashing after GC cycle (gh-10290).
- Fixed recording of
select(string, ...)
. - Fixed stack allocation after on-trace stack check.
- Fixed recording of the
__concat
metamethod that threw an error. - Fixed bit op coercion in
DUALNUM
builds. - Fixed 64-bit shift fold rules.
- Fixed loop optimizations for cdata arguments of vararg FFI functions.
Lua
- Fixed a memory leak in
xlog.pairs()
on failure to open the file (gh-10479). - Fixed a memory leak in
iconv.new()
(gh-10487). - Now
fun.chain
works correctly with iterators withoutparam
. - Now
fun.drop_while
supports stateful iterators. - Populated the
fun
module with the missingmaximum_by
alias
ofmax_by
. - Now
fun.nth
andfun.length
work correctly with Luafun iterators.
Datetime
- Fixed a bug that caused
datetime.parse()
ignore thetzoffset
option if a custom format was used (gh-8333). - Forbid non-integers in
datetime.new()
(gh-10391). - Forbid non-integers in
:set()
anddatetime.parse()
(gh-10391). - Implemented the
tz
option indatetime:parse()
(gh-10420).
SQL
- Fixed a bug when an SQL count statement wasn't tracked by MVCC if it was
the first in a transaction (gh-10825). - Forbid non-integers in SQL's
CAST({}) AS datetime
(gh-10391).
Upgrade
- The incorrect format of user-defined spaces and empty password for users
during upgrade from old schema versions (~1.6.8) are fixed automatically now
(gh-10180).
Build
3.2.1
3.2.1
Date: 2024-10-28
Tag: 3.2.1
Overview
3.2.1 is the 2nd stable version of the 3.2 release
series. It resolves 46 bugs since 3.2.0.
The "stable" label means that we have all planned features implemented and we
see no high-impact issues. However, if you encounter an issue, feel free to
report it on GitHub.
Compatibility
Tarantool 3.x is backward compatible with Tarantool 2.11.x in the 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 3.x series.
Bugs fixed
Core
- Fixed a memory leak in coio on address resolution error (gh-10482).
- Fixed a memory leak in IPROTO on execution of the callback installed with
box.iproto.override()
(gh-10477). - Fixed a memory leak on foreign key constraint check failure (gh-10476).
- Fixed a memory leak on an attempt to create or modify a user denied due to
access restrictions (gh-10485). - Fixed a crash when
slab_alloc_factor
was low and memory pressure was high
(gh-10148). - Fixed a crash in swim on Tarantool shutdown (gh-10495).
- Fixed a crash when the first of two consequent DDL operations was
rolled back due to WAL failure (gh-10235). - Fixed an inconsistency between internal caches and system spaces with
MVCC enabled that could lead to unexplainable errors (gh-10262).
Config
- Fixed scaling a replicaset down to one instance (gh-10716).
Memtx
- Fixed a crash on transaction rollback if memory usage was close to the limit
(gh-10551). - Fixed several bugs when DDL with MVCC enabled could lead to a crash
or violate isolation of other transactions (gh-10146).
Vinyl
- Fixed a memory leak on dump/compaction failure (gh-10489).
- Fixed a bug when
index.select()
could silently skip a tuple if it failed to
load a row from a run file (gh-10512). - Lowered the level used for logging range dump, compaction, split, and
coalesce events fromINFO
toVERBOSE
(gh-10524). - Fixed a bug when a compaction task could crash on a disk read error
(gh-10555). - Fixed a bug when
index.select()
executed in theread-confirmed
transaction isolation mode (default for read-only transactions) could corrupt
the tuple cache by creating a chain bypassing an unconfirmed tuple. The bug
could lead to a crash or invalid query results (gh-10558). - Added a fiber slice check to
index.count()
to prevent it from blocking
for too long while counting tuples in a space stored in memory (gh-10553). - Fixed a bug when an attempt to alter the primary index of an empty space
triggered a crash if executed concurrently with a DML request (gh-10603).
Replication
- Fixed a memory leak on disconnection from replica (gh-10480).
- Fixed a memory leak on a replica when it was removed from the cluster
(gh-10490). - Optimized synchronous transaction queue processing (gh-9917).
LuaJIT
Backported patches from the vanilla LuaJIT trunk (gh-10199). The following
issues were fixed as part of this activity:
- Now 64-bit non-FAT Mach-O object files are generated via
-b -o osx
. - Fixed
string.format()
compilation with many elements. - Fixed
dlerror()
in FFI call returningNULL
. - Fixed
__tostring
metamethod access to enum cdata value. - Fixed limit check in narrowing optimization.
- Dropped finalizer table rehashing after GC cycle (gh-10290).
- Fixed recording of
select(string, ...)
. - Fixed stack allocation after on-trace stack check.
- Fixed recording of
__concat
metamethod that throws an error. - Fixed bit op coercion in
DUALNUM
builds. - Fixed 64-bit shift fold rules.
- Fixed loop optimizations for cdata arguments of vararg FFI functions.
Lua
- Changed return value type of
space:bsize()
fromcdata
tonumber
(gh-9735).
Xlog
- Fixed a memory leak in
xlog.pairs()
on failure to open the file (gh-10479).
Iconv
- Fixed a memory leak in
iconv.new()
(gh-10487).
Datetime
- Fixed a bug that caused
datetime.parse()
ignore thetzoffset
option if a custom format was used (gh-8333). - Forbid non-integers in
datetime.new()
(gh-10391). - Forbid non-integers in
:set()
anddatetime.parse()
(gh-10391). - Forbid non-integers in SQL's
CAST({}) AS datetime
(gh-10391). - Implemented the
tz
option indatetime:parse()
(gh-10420).
Netbox
- Fixed a crash when
net.box
triggers deleted themselves (gh-10622).
SQL
- Fixed a memory leak on an attempt to alter a table view (gh-10484).
Build
3.2.0
3.2.0
Date: 2024-08-26
Tag: 3.2.0
Overview
3.2.0 is the first stable version of the 3.2 release
series. It introduces 30 improvements and resolves 5 bugs since
3.1.2.
The "stable" label means that we have all planned features implemented and we
see no high-impact issues. However, if you encounter an issue, feel free to
report it on GitHub.
Compatibility
Tarantool 3.x is backward compatible with Tarantool 2.11.x in the 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 3.x series.
Functionality added or changed
Core
- Implemented new iterators for the memtx tree index: 'np' (next prefix)
and 'pp' (previous prefix) (gh-9994). - The splice operation (':') in update/upsert is now allowed for varbinary fields
and can take a varbinary argument for insertion (gh-9997). - Any 128-byte sequence is considered as a valid UUID value to support all
RFC 9562 UUID versions (gh-5444). box.commit()
has a new optionwait
. It can be passed as
box.commit{wait=...}
and regulates whether the commit must be blocking or
async (gh-67).- Added the source tuple as a second argument for the functional variant of the
default field values (gh-9825). - Added the
tuple:format
method to get the tuple format (gh-10005). - Added the
is_interval
function to check that the provided value is
interval
(gh-10269). - A functional index can now use a function that does not have the flag
is_sandboxed
(gh-10349).
Replication
- Added the
age
andconfirm_lag
fields tobox.info.synchro.queue
: the
former shows the time that the oldest entry currently present in the queue has
spent waiting for the quorum, while the latter shows the time that the latest
successfully confirmed entry waited for the quorum to gather (gh-9918). - A replica deleted from the
_cluster
space now applies its own deletion and
does not try to rejoin (gh-10088). - Made all of the system spaces synchronous by default when the synchronous
queue is claimed, i.e.,box.info.synchro.queue.owner ~= 0
. Added a
box_consider_system_spaces_synchronous
backward compatibility option to
control this behavior. Added a new read-onlystate
subtable for the Lua
space object returned from thebox.space
registry. This subtable has an
is_sync
field that reflects the effective state of replication for system
spaces. For user spaces, this field will always mirror theis_sync
option
set for the space (gh-9723).
Lua
- Added support for the
level
argument inbox.error
andbox.error.new
when an error is created using an error code (gh-9792). - Added
box.error.is
that checks whether its argument is abox.error
. - Introduced a standard Lua way to get the length of
key_def
(gh-10111). - Introduced Lua implementation of the protobuf encoder (gh-9844).
- Deprecated using
cdata
values withhistogram:observe
from themetrics
module. - Updated memtx metrics descriptions from the
metrics
module to be consistent. - Added new metrics to the
metrics
module:tnt_memtx_tuples_data_total
,
tnt_memtx_tuples_data_read_view
,tnt_memtx_tuples_data_garbage
,
tnt_memtx_index_total
,tnt_memtx_index_read_view
,tnt_vinyl_memory_tuple
,
tnt_config_alerts
,tnt_config_status
. - Introduced the
tarantool.build.tzdata_version
option to get
thetzdata
version.
Popen
- Eliminated polling in
<popen handle>:wait()
, so now it reacts to SIGCHLD
faster and performs less unnecessary work (gh-4915). - Added the
timeout
parameter for<popen handle>:wait()
(gh-4916).
Config
- Expose configuration status from
box.info.config
(gh-10044). - Expose the
experimental.config.utils.schema
built-in module to the public
API (gh-10117). <schema object>:get()
now supports indexing values inside theany
type
(gh-10205).config:get()
now supports indexing values insideapp.cfg.<key>
and
roles_cfg.<key>
(gh-10205).- Allow to delete a field or set it to
box.NULL
using the<schema object>:set()
method (gh-10190, gh-10193, gh-10194). - Now it is possible to grant access to a specific global Lua function
in the declarative configuration (gh-10304).
Connpool
- The
connpool.filter()
andconnpool.call()
functions now support
filtering by thesharding.roles
option (gh-10318).
Console
- Interactive console now performs non-local assignments to a per-session
variable scope if theconsole_session_scope_vars
compat option is set to
new
(gh-9985). - Interactive console now automatically adds frequently used built-in modules
into the initial environment if theconsole_session_scope_vars
compat
option is set tonew
(gh-9986).
Bugs fixed
Core
- Added details for DML specific errors (gh-7223).
- Now fully-temporary spaces DDL does not abort concurrent purely remote
(applier) transactions, and DDL in purely remote transactions does not abort
concurrent fully-temporary spaces transactions (gh-9720).
Replication
- Fixed a bug that allowed asynchronous transactions from a replica deleted from
the cluster to arrive on the remaining cluster members (gh-10266). - Significantly improved replication performance by batching rows to be sent
before dispatch. Batch size in bytes may be controlled by a new tweak
xrow_stream_flush_size
(default is 16 kb) (gh-10161).
Lua
Popen
- Defined the behavior of in-progress
<popen handle>:wait()
when
<popen handle>:close()
is called in another fiber: now it returns an error
instead of accessing a freed memory and, likely, hanging forever (gh-7653).
3.1.2
3.1.2
Date: 2024-08-26
Tag: 3.1.2
Overview
3.1.2 is the 3rd stable version of the 3.1 release
series. It resolves 14 bugs since 3.1.1.
The "stable" label means that we have all planned features implemented and we
see no high-impact issues. However, if you encounter an issue, feel free to
report it on GitHub.
Compatibility
Tarantool 3.x is backward compatible with Tarantool 2.11.x in the 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 3.x series.
Bugs fixed
Memtx
- Fixed a crash when using pagination over a non-unique index with range
requests and MVCC enabled (gh-10448). - Fixed a bug when
index:count()
could return a wrong number, raise the
last error, or fail with theIllegalParams
error if the index has
theexclude_null
attribute and MVCC is enabled (gh-10396).
Vinyl
- Fixed a bug when any DDL operation aborted unrelated transactions (gh-10375).
- Eliminated an unnecessary disk read when a key that was recently updated or
deleted was accessed via a unique secondary index (gh-10442). - Fixed a bug when recovery could fail with the error "Invalid VYLOG file:
Run XXXX deleted but not registered" or "Invalid VYLOG file: Run XXX deleted
twice" in case a dump or compaction completed with a disk write error after
the target index was dropped (gh-10452).
LuaJIT
Backported patches from the vanilla LuaJIT trunk (gh-10199). The following
issues were fixed as part of this activity:
- Fixed GC marking of the cdata finalizer table.
Lua
YAML
- Strings with large exponential values equal to infinity are now encoded as
strings instead of numbers (gh-10164).
Core
- Fixed a bug that caused synchronous transactions (created with
box.begin{is_sync = true}
) on asynchronous spaces to get committed
asynchronously during recovery (gh-10412).
Config
- User rights are now automatically granted/revoked after upgrading
without restarting (gh-9849). - Fixed a bug that causes Tarantool to continue listening on the previous socket
even afterconsole.socket
has changed (gh-9535). - Fixed a bug where the default value for
box.replication_sync_timeout
was
not set correctly (gh-10280).
Datetime
2.11.4
2.11.4
Date: 2024-08-16
Tag: 2.11.4
Overview
2.11.4 is the next stable release in the long-term support (LTS)
version 2.11.x release series.
The label "stable" means there are 2.11.x-based applications running in
production for quite a while without known crashes, incorrect results or
other showstopper bugs.
This release resolves roughly 51 issues since the 2.11.3 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.x series.
Bugs fixed
Core
- Fixed a bug when hashing a tuple with
double
fields could crash.
The bug could trigger a crash in memtx while inserting a tuple into
ahash
index and in vinyl while writing a bloom filter on dump or
compaction (gh-10090). - Fixed a bug when the system setting
kern.ipc.somaxconn
on Mac was ignored
for listening sockets. Now it is used, but capped at 32367 due to how
listen()
works on Mac (gh-8130). - Fixed memory leaks on using dead fiber (gh-10187).
- Fixed a possible inconsistent state entering if fibers are joined incorrectly.
Now thefiber_set_joinable
function panics if a fiber is dead or joined
already. Thefiber_join
andfiber_join_timeout
functions now panic on a
double join if it is possible to detect it (gh-7562). - Fixed a hang on fiber self-join (gh-10196).
- Fixed the
wal_queue_max_size
configuration option not being applied during
the initial configuration (gh-10013). - Fixed rollback of DDL statements on the
_space
space (gh-9893). - Fixed memory leak on functional index drop (gh-10163).
Vinyl
- Fixed a use-after-free bug in the compaction scheduler triggered by a race
with a concurrent DDL operation (gh-9995). - Fixed a bug in the transaction manager when a tuple was not committed to
a unique nullable secondary index (gh-9769). - Fixed a bug when creation of a new index crashed while trying to process
an invalidUPSERT
statement (gh-10026). - Fixed a bug when a duplicate key error referred to a wrong index (gh-5975).
- Fixed a bug when a DDL operation dropping a unique index could crash
if performed concurrently with DML requests (gh-10094). - Fixed a bug when a DDL operation crashed in case of extending the key parts
of a secondary index with the primary index key parts (gh-10095). - Fixed a bug when an
upsert
statement crashed in case the created tuple had
fields conflicting with the primary key definition (gh-10099). - Fixed a bug when a tuple was not returned by range
select
. The bug could
also trigger a crash in the read iterator (gh-10109). - Fixed a bug when internal optimization algorithm caused a crash while a read
thread tried to look up a tuple field (gh-10123). - Fixed a bug when recovery failed with the error "Invalid VYLOG file: Run XXXX
forgotten but not registered" (gh-10128). - Fixed a bug when a race between
box.snapshot
and the creation of a new
index could lead to a fiber hang (gh-10233, gh-10267). - Fixed a multi-threading race condition that could cause a writer thread to
crash while looking up a tuple format (gh-10278). - Fixed a bug when recovery could fail with the error "Invalid VYLOG file:
Deleted range XXXX has run slices" or "Invalid VYLOG file: Run XXXX committed
after deletion" after an index drop (gh-10277). - The
force_recovery
mode can now be used to suppress "Invalid VYLOG file"
recovery errors (gh-10292). - Fixed a bug when any DDL operation aborted unrelated transactions (gh-10375).
Replication
- Fixed a bug when a replica could timeout on subscribe if the master had to
open a big enough xlog file for that (gh-9094). - Fixed a bug that the
box.info.replication[...].downstream.lag
value could be
misleading, not updating in time, frozen (gh-9748). - Fixed a bug when
box.ctl.demote()
withbox.cfg{election_mode = 'off'}
and an owned synchro queue could simply do nothing (gh-6860). - Fixed a bug that allowed the old leader in the
box.cfg{election_mode = 'candidate'
mode to get re-elected after resigning
itself throughbox.ctl.demote
(gh-9855). - Fixed the inability to add a new replica to the replicaset if the user has
manually made space_cluster
synchronous. Now the synchronous replication
quorum is updated after the_cluster
change is confirmed by a quorum rather
than immediately after persisting the configuration change in the WAL
(gh-10087). - Fixed a bug when an anonymous replica register or a replica name assignment
could fail with an error "LSN for ... is used twice" in release and crash in
debug (gh-9916). - Fixed anonymous replicas not receiving the synchronous transaction queue state
during join (gh-9401).
LuaJIT
Backported patches from the vanilla LuaJIT trunk (gh-9924). The following issues
were fixed as part of this activity:
- Fixed
BC_VARG
recording. - Fixed
ffi.alignof()
for reference types. - Fixed
sizeof()
expression in C parser for reference types. - Fixed
ffi.metatype()
for typedefs with attributes. - Fixed
ffi.metatype()
for non-raw types. - Fixed IR chain invariant in DCE.
- Fixed OOM errors handling during trace stitching.
- Fixed
IR_HREF
vs.IR_HREFK
aliasing in non-nil
store check. - Fixed generation of Mach-O object files.
- Fixed undefined behavior when negating
INT_MIN
integers. - Replaced the numeric values of NYI bytecodes that can't be compiled, with
their names in thejit.dump()
.
Backported patches from the vanilla LuaJIT trunk (gh-10199). The following
issues were fixed as part of this activity:
- Fixed GC marking of the cdata finalizer table.
Lua
net.box
- Fixed a corner case when the netbox connection's worker fiber could crash
(gh-9621). - Fixed a bug that caused a
net.box
connection to crash after being closed
from the connection'son_schema_reload
trigger (gh-9621).
URI
- Fixed a bug that caused characters A-F to be unsupported in IPv6
addresses. 4BEA Changed theuri.format
output for IPv6 to be
encapsulated in brackets[]
(gh-9556).
YAML
- Strings with large exponential values equal to infinity are now encoded as
strings instead of numbers (gh-10164).
Datetime
- Fixed a bug with setting unspecified fields to undefined values
(gh-8588). - Added the
tz
field to a table produced by:totable()
(gh-10331). - Added the
timestamp
field to a table produced by:totable()
(gh-10374).
Build
- Updated OpenSSL to version 3.2.1 (gh-7502).
- Updated libcurl to version 8.8.0.