# 2.11.7

Date: 2025-05-29
Tag: 2.11.7

## Overview

2.x is the old stable release series. Users are encouraged to update to the
latest 3.x release.

This is a bugfix release. It resolves 28 issues since the previous
version.

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

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

## Bugs fixed

### Core

* Fixed a bug where passwords are leaked into logs
  when using `listen` and `bootstrap_leader` options (gh-10653).
* Fixed a bug when cancelling a fiber waiting in WAL queue corrupted 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 WAL queue was not flushed properly. In particular
  when building an index of a vinyl space. In the latter case it could lead to
  the new index missing data from transactions in the queue (gh-11118, gh-11119).
* Changed the error code of `box.error.INVALID_DEC`. It was mistakenly assigned the
  value 279. Now it is 277.
* Fixed a bug where tuples with JSON paths in the sequential
  field order could not be found in a hash index (gh-11014).

### Memtx

* 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).
* Fixed a bug that caused memtx MVCC to miss conflicts over key definitions
  that used the number type or collations (gh-10159, gh-11292).

### Vinyl

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

### Replication

* Fixed a crash which could happen during relay thread shutdown (gh-9920).

### Lua

* Fixed decoding of escape sequences for single-byte character codes from YAML.
  Before the fix, single-byte character codes between `0x80` and `0xff` would
  be erroneously converted to two-byte UTF-8 code points, for example, `\x80`
  would be decoded as `\uC280` (gh-8782).

### LuaJIT

Backported patches from the vanilla LuaJIT trunk (gh-11055). The following
issues were fixed as part of this activity:

* Fixed closing the report file without samples for `jit.p`.
* Fixed the OOM error handling while 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.

### SQL

* Fixed undefined behavior of SQL when using positive `MP_INT` numbers in
  MessagePack anywhere (bound arguments, tuples, C functions) (gh-10132).

### 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 the dump into the 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"`.
