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).