# 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][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 52 issues since the 2.11.4 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 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).
