# 2.11.3

Date: 2024-04-17
Tag: 2.11.3

## Overview

2.11.3 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 1.10.x-based applications running in
production for quite a while without known crashes, incorrect results or
other showstopper bugs.

This release resolves roughly 54 issues since the 2.11.2 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.11.x series.

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

## Bugs fixed

### Core

* Fixed a bug when the assertion in `box_wait_limbo_acked` would fail. The
  assertion is that the lsn of the last entry in limbo is always positive after
  `wal_sync`. Before the patch, if the `replication_synchro_quorum` was set too
  high on the replica, it would never be reached. After the timeout was
  triggered, the user received a `TimedOut` error. If the quorum was greater
  than or equal to the number of instances in the replica set, the program
  immediately stopped with a segmentation fault (gh-9235).
* Fixed a bug when the assertion in `box_promote_qsync` would fail in the
  debug build mode. The assertion is that at the moment when `box_promote_qsync`
  is called, no other promote is being executed. It turned out that this
  assertion is basically incorrect. In the release build mode, this incorrect
  assumption could potentially lead to writing 2 PROMOTE entries in the same
  term (gh-9263).
* The error messages are no longer stripped (gh-4975).
* Increased the maximum number of tuples in a hash index from 2147483648 (2^31)
  to 4294967288 (2^32 - 8) (gh-9864).
* Fixed a bug that resulted in a crash when both MVCC and index with the `exclude_null` part were used (gh-9954).
* Now `box.cfg()` correctly interprets the `TT_LISTEN` and `TT_REPLICATION`
  environment variables with query parameters (gh-9539).
* The `exclude_null` option is now supported by functional indexes (gh-9732).

### Replication

* Now transactions are not rolled back if the transaction fiber is
  cancelled when waiting for quorum from replicas (gh-9480).
* Fixed a bug when replication broke with `ER_PROTOCOL` when transactions ended
  with a local space operation (gh-9491).
* Fixed an issue when it was possible to use the
  `box_collect_confirmed_vclock` stack after return (gh-9505).

### LuaJIT

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

* Fixed CSE of a `REF_BASE` operand across `IR_RETF`.
* Fixed the fold rule for `BUFHDR APPEND`.
* Fixed HREFK, ALOAD, HLOAD, forwarding vs. `table.clear()`.
* Fixed snapshot PC when linking to `BC_JLOOP` that was a `BC_RET*`.
* Fixed dangling references to CType.
* Ensured returned string is alive in `ffi.typeinfo()`.
* Fixed the missing initialization of the internal structure, leading to a
  crash when recording a trace with an allocation of cdata.
* Limited exponent range in number parsing by `2^20`.
* Fixed double-emitting of `IR_NEWREF` when restoring sunk values for side
  trace (gh-7937).
* Fixed the `IR_HREFK` optimization for huge tables.
* Fixed recording of the `__concat` metamethod.
* Fixed the embedded bytecode loader.
* Improved error reporting on stack overflow.
* Fixed assertion on the Lua stack overflow for a stitched trace.
* Fixed snapshoting of functions for non-base frames.
* Fixed a crash in the allocator during sysprof profiling (gh-8140).
* No side traces are recorded now after disabling the JIT via `jit.off()`.
* Fixed handling of instable boolean types in TDUP load forwarding.
* Fixed a crash during the restoration of the sunk `TNEW` with a huge array
  part.
* Fixed stack-buffer-overflow for `string.format()` with `%g` modifier and
  length modifier.
* Fixed recording of `setmetatable()` with `nil` as the second argument.
* Fixed recording of `select()` in case with negative first argument.
* Fixed use-def analysis for child upvalues.
* Added the `cc` file type for saving bytecode.
* Fixed C file generation in `jit.bcsave`.
* Fixed trace error handling during trace stitching.
* Fixed recording of the `__concat` metamethod for vararg or protected frames.
* Fixed recording of a side trace returning to a lower frame with a maximum
  possible frame size.
* Fixed `debug.setmetatable()` and `lua_setmetatable()` with enabled
  `jit.dump()`.
* Fixed recording of side traces with a down-recursion.

### Lua

* Fixed a memory leak in `error_object:set_prev()` (gh-9694).
* Fixed alias detection in the YAML encoder (gh-8350, gh-8310, gh-8321).
* Fixed a regression that caused the `wait_connected = false` option of
  `net_box.connect` to yield, despite being required to be fully asynchronous
  (gh-9489).
* Fixed a bug in `net.box` when a connection with asynchronous requests could
  get garbage collected (gh-9629).
* Fixed an inconsistency between the documented `on_disconnect` trigger behavior
  of `net.box` connections when an error is thrown and the actual behavior
  (gh-9717).
* Fixed a bug in the `on_disconnect` trigger of `net.box` connections that
  caused Tarantool server to hang indefinitely when an error was thrown from the
  trigger (gh-9797).
* The `on_schema_reload` trigger behavior of `net.box` connections when an
  error is thrown is now consistent with the behavior of the `on_disconnect`
  trigger (gh-9679).
* Fixed a bug when a `net.box` connection remained active after being closed
  from the connection's `on_connect` trigger (gh-9827).

#### HTTP client

* Fixed a crash on garbage collection of httpc objects (gh-9283).
* Fixed a crash due to a race in GC finalizers (gh-9346).
* Fixed behaviour of GC-finalizer of HTTP client Lua object when chunked HTTP
  request is alive. (gh-9453).

### SQL

* Fixed a memory leak when an error occurred in `SELECT` with a `GROUP BY`
  expression (gh-8535, ghs-125).
* Fixed a crash when a decimal literal representing a decimal number greater
  than or equal to 10^38 was parsed in SQL (gh-9469).

### Datetime

* Fixed a bug in `strptime` when the assertion was triggered (gh-8525).

## Build

* Updated libcurl to version 8.5.0.

## Testing

* Bumped `metrics` submodule to commit `3370f85` to fix compatibility with
  `luatest` commit `d985997`.

## Tools

* Added the `--human-readable` option for the `misc.memprof` parser to print
  sizes like 1KiB, 234MiB, 2GiB, etc.
  Made the errors from the profilers more user-friendly (gh-9217).
