Skip to content

3.3.0

Latest
Compare
Choose a tag to compare
@sergepetrenko sergepetrenko released this 29 Nov 20:48
· 58 commits to master since this release

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 use box.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 the box.status system event (gh-10546).
  • New public C API functions tnt_tx_push(callback) and tnt_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 to replication_synchro_timeout (gh-10583).

Memtx

  • Improved the performance of tree index methods: the select() method with offset
    specified and the count() method. The underlying algorithm for these methods is
    changed: the old algorithm's time complexity was O(n), where n is the value of
    offset or the amount of counted tuples. The new algorithm's complexity is
    O(log(size)), where size is the number of tuples stored in the index. Now
    it does not depend on the offset 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). The wal_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 the replication.synchro_timeout option rolls
    back transactions. When set to 'new', transactions are not rolled back due to
    a timeout. In this mode replication.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
    for box.cfg.replication_anon_ttl seconds (gh-10755).

Lua

  • Introduced a new offset parameter in the index: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 before box.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 alias box.info.config now has the hierarchy 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 the config 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 from prefer_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() and index.len() could report a wrong number
    of in-memory statements for a non-unique multi-key index of a space with
    the defer_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 without param.
  • Now fun.drop_while supports stateful iterators.
  • Populated the fun module with the missing maximum_by alias
    of max_by.
  • Now fun.nth and fun.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).