# 3.5.1

Date: 2025-11-21
Tag: 3.5.1

## 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 25 bugs since 3.5.0.

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 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][upgrade] to plan your update actions.

Users of Tarantool 2.x may be interested in the [compat][compat] options that
allow to imitate some 2.x behavior. This allows to perform application code
update step-by-step, not all-at-once.

[compat]: https://www.tarantool.io/en/doc/latest/reference/configuration/configuration_reference/#compat

[upgrade]: https://www.tarantool.io/en/doc/latest/book/admin/upgrades/

## Bugs fixed

### Core

* Transaction savepoint functions are now properly exported in the C API
  (gh-11731).
* Fixed a bug where `box.schema.downgrade` to versions 2.11.5+ would erroneously
  set schema version to 2.11.1 instead of 2.11.5 (gh-11204).
* Fixed a bug when the instance hung during transition to RW
  state after promotion with a quorum greater than the
  number of registered instances in the replicaset. Now the
  transition can be continued by reducing the
  `replication_synchro_quorum` value (gh-11574).
* Fixed a crash when a tuple field or key part of a fixed decimal type is
  `MP_NIL` (gh-ee-1454).
* Fixed an issue when `tostring()` is applied to an error raised inside
  `box.atomic()` (gh-11823).
* Fixed an issue where the predefined `replication` role was not treated
  as a system role and therefore could be dropped or modified. Now it is
  properly protected like other system roles (`guest`, `admin`, `public`,
  `super`) (gh-11848).
* Fixed a crash on reconnecting to syslog server (gh-11840).
* Fixed a crash when pagination was used on a `sysview` space (gh-11953).

### Memtx

* Fixed a crash on OOM on insertion in tree index of memtx engine (gh-11788).
* Fixed an MVCC bug when a transaction performing insert-after-delete
  with the same primary key (for example, `delete{4}` followed by
  `insert{4, 3}`) could create secondary key duplicates (gh-11686).
* Fixed an MVCC bug when a transaction performing get-after-replace could
  dirty-read nothing (gh-11687).
* Fixed an MVCC bug that could lead to duplicates in secondary indexes
  after a rollback (gh-11660).
* Fixed an MVCC bug that could lead to dirty gap read in secondary indexes
  after a rollback (gh-11802).
* Fixed a crash when using the maximum allowed number of indexes with MVCC
  enabled (gh-11929).
* Fixed a crash when trying to use pagination along with the key
  in RTREE indexes (gh-11963).

### Vinyl

* Fixed a bug when a WAL write error could lead to the violation of a unique
  constraint in a space with the enabled `defer_deletes` option (gh-11969).

### Replication

* Fixed a bug where `box.begin{txn_isolation = 'linearizable'}` could crash when
  the max size of the synchronous transactions queue was reached (the setting
  `box.cfg.replication_synchro_queue_max_size`) (gh-11807).
* Fixed a false-positive assertion failure that could occur when calling
  `box.ctl.make_bootstrap_leader()` during recovery (gh-11704).
* Fixed the election state corruption after an anonymous replica
  becomes non-anonymous (gh-11938).
* Fixed a bug where a node configured with `election_mode = 'off'` would prevent
  nodes with `election_mode = 'candidate'` from starting new elections after the
  leader death (gh-12018).
* Fixed a bug where the replication downstream could get stuck when the replica
  had `box.cfg.replication_synchro_queue_max_size` set to a smaller value than
  the master (gh-11836).
* Fixed a bug that a snapshot file could contain an outdated synchronous
  replication's confirmation LSN or a term. That was only possible when the
  synchronous replication was used (gh-11754).

### Lua

* Fixed a bug when a lot of "Connection refused" messages were
  printed in the log file when a `net.box` connection fails with
  the `reconnect_after` option (gh-10506).
* Fixed a bug that caused incorrect display of string uri
  parameters in returned uri of `uri.format` (gh-11820).

### Config

* IPROTO SSL options can now be properly configured by specifying the
  `iproto.ssl` section.
