8000 Releases · tarantool/tarantool · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Releases: tarantool/tarantool

3.4.0

15 Apr 12:25
Compare
Choose a tag to compare

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) and pp (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 to box.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 the box.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 the default
    annotation for a composite type.
  • <schema object>:validate() now takes into account the unique_items annotation.
    Also, schema.set() now accepts a user-provided validate 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, and is_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 before box.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 the failover.execute call.

Metrics

  • Updated the metrics submodule to 1.3.0.

    • Fixed read-only status detection in the replication metrics
      (gh-495).

    • Added a new cpu_extended metrics category, enabled by default
      (gh-498).

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 option txn_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

10 Apr 21:36
Compare
Choose a tag to compare

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 the double
    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 with checkpoint_interval enabled (gh-9820).
  • Fixed a bug when the sizes of xlog files created before the server restart
    were not taken into account during the checkpoint_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 many index: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 with ER_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() for io 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
    command jit.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 ... in select().
  • 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
    named memprof.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

24 Feb 20:44
Compare
Choose a tag to compare

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 the double
    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 many index: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 enabled defer_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 a space.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 the defer_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
    that replication_anon is true and election_mode is not off
    (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() for io 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
    command jit.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 ... in select().

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

25 Dec 14:35
Compare
Choose a tag to compare

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 the defer_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 a space.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 the defer_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
    that replication_anon is true and election_mode is not off
    (gh-10561).

Config

  • Don't fail if the sharding.roles option is not set for some instances
    (gh-10458).
  • schema:get()/schema:set() and config: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 an any 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 of app.cfg and roles_cfg) are merged deeply
    (gh-10450).
  • Fixed on_event roles callback receiving wrong config argument (gh-10934).

3.3.0

29 Nov 20:48
Compare
Choose a tag to compare

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

2.11.5

22 Nov 15:39
Compare
Choose a tag to compare

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 the IllegalParams error if the index had
    the exclude_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 from INFO to VERBOSE (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 the read-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() 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).

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 returning NULL.
  • 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 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.

Datetime

  • Fixed a bug that caused datetime.parse() ignore the tzoffset
    option if a custom format was used (gh-8333).
  • Forbid non-integers in datetime.new() (gh-10391).
  • Forbid non-integers in :set() and datetime.parse() (gh-10391).
  • Implemented the tz option in datetime: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

  • The BUILD_MISC_DOCS curl option is now disabled by default (gh-10576).
  • Several forgotten curl options are set in our build script.
  • Updated libcurl to version curl-8_10_1-241-g461ce6c61 (gh-10576).

3.2.1

28 Oct 17:03
Compare
Choose a tag to compare

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 from INFO to VERBOSE (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 the read-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 returning NULL.
  • 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() from cdata to number
    (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 the tzoffset
    option if a custom format was used (gh-8333).
  • Forbid non-integers in datetime.new() (gh-10391).
  • Forbid non-integers in :set() and datetime.parse() (gh-10391).
  • Forbid non-integers in SQL's CAST({}) AS datetime (gh-10391).
  • Implemented the tz option in datetime: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

  • The BUILD_MISC_DOCS curl option is now disabled by default (gh-10576).
  • Several forgotten curl options are set in our build script.
  • Updated libcurl to version curl-8_10_1-241-g461ce6c61 (gh-10576).

3.2.0

27 Aug 19:15
Compare
Choose a tag to compare

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 option wait. 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 and confirm_lag fields to box.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-only state subtable for the Lua
    space object returned from the box.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 the is_sync option
    set for the space (gh-9723).

Lua

  • Added support for the level argument in box.error and box.error.new
    when an error is created using an error code (gh-9792).
  • Added box.error.is that checks whether its argument is a box.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 with histogram:observe from the metrics 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
    the tzdata 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 the any type
    (gh-10205).
  • config:get() now supports indexing values inside app.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() and connpool.call() functions now support
    filtering by the sharding.roles option (gh-10318).

Console

  • Interactive console now performs non-local assignments to a per-session
    variable scope if the console_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 the console_session_scope_vars compat
    option is set to new (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

26 Aug 18:44
Compare
Choose a tag to compare

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 the IllegalParams error if the index has
    the exclude_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 after console.socket has changed (gh-9535).
  • Fixed a bug where the default value for box.replication_sync_timeout was
    not set correctly (gh-10280).

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

2.11.4

20 Aug 10:34
Compare
Choose a tag to compare

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
    a hash 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 the fiber_set_joinable function panics if a fiber is dead or joined
    already. The fiber_join and fiber_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 invalid UPSERT 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() with box.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 through box.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 the jit.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's on_schema_reload trigger (gh-9621).

URI

  • Fixed a bug that caused characters A-F to be unsupported in IPv6
    addresses. 4BEA Changed the uri.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.
0