# 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][release_policy][release_policy] 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.

[release_policy]: https://www.tarantool.io/en/doc/latest/release/policy/
[issues]: https://github.com/tarantool/tarantool/issues

## 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][upgrade] using the `box.schema.upgrade()` procedure to unlock
all the new features of the 2.x series.

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

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