Date: 2021-12-22

Tag: 2.8.3

## Overview

2.8.3 is the 2nd [stable][release_policy] version of the 2.8 release
series. It introduces 3 improvements and resolves 24 bugs since
2.8.2.

The "stable" label means that we have all planned features implemented and we
see no high-impact issues. However, if you encounter an issue, feel free to
[report it][issues] on GitHub.

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

## Compatibility

Tarantool 2.x is backward compatible with Tarantool 1.10.x in the 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/

## Functionality added or changed

### LuaJIT

* Introduced support for `LJ_DUALNUM` mode in luajit-gdb.py (gh-6224).

### Build

* Stop support of Ubuntu Trusty (14.04). (gh-6502)
* Bump debian package compatibility level to 10 (gh-5429).
  Bump minimal required debhelper to version 10 (except for Ubuntu Xenial).

## Bugs fixed

### Core

* Disallow yields after DDL operations in MVCC mode. It fixes crash which takes
  place in case several transactions refer to system spaces (gh-5998).
* Fixed bug in MVCC connected which happens on rollback after
  DDL operation (gh-5998).
* Fix a bug when rollback resulted in unserializable behaviour (gh-6325)
* Fixed a crash during replace of malformed tuple into _schema system space
  (gh-6332).
* Fix memory leak in case of replace during background alter of primary index (gh-6290)
* Fix a bug when rollbacked changes appears in built-in-background index (gh-5958)
* Fix a bug when index was inconsistent after background build in case when the primary index is hash (gh-5977)
* Now inserting a tuple with the wrong "id" field into the \_priv space will
  return the correct error (gh-6295).
* Fixed dirty read in MVCC after space alter (gh-6263, gh-6318).
* Fixed a crash caused by a race between box.session.push() and closing
  connection (gh-6520).
* Fixed crash in case a fiber changing box.cfg.listen is woken up (gh-6480).
* Fixed box.cfg.listen not reverted to the old address
  in case the new one is invalid (gh-6092).
* Fixed a bug because of which the garbage collector could remove an xlog file
  that is still in use (gh-6554).
* Fix crash during granting priveleges from guest (gh-5389).

### Replication

* Fixed replica reconnecting to a living master on any `box.cfg{replication=...}`
  change. Such reconnects could lead to replica failing to restore connection
  for `replication_timeout` seconds (gh-4669).

### LuaJIT

* Fixed the order VM registers are allocated by LuaJIT frontend in case of
  `BC_ISGE` and `BC_ISGT` (gh-6227).
* Fixed inconsistency while searching for an error function when unwinding a C
  protected frame to handle a runtime error (e.g. an error in __gc handler).

### Lua

* When error is raised during encoding call results, auxiliary lightuserdata
  value is not removed from the main Lua coroutine stack. Prior to the fix it
  leads to undefined behaviour during the next usage of this Lua coroutine
  (gh-4617).
* Fixed Lua C API misuse, when the error is raised during call results encoding
  on unprotected coroutine and expected to be catched on the different one, that
  is protected (gh-6248).
* Fixed net.box error in case connections are frequently opened and closed
  (gh-6217).
* Fixed incorrect handling of variable number of arguments in box.func:call() (gh-6405).

#### Triggers

* Fixed possibility crash in case when trigger removes itself.
  Fixed possibility crash in case when someone destroy trigger,
  when it's yield (gh-6266).

### SQL

* Now, when copying an empty string, an error will not be set
  unnecessarily (gh-6157, gh-6399).

### Build

* The Debian package does not depend on binutils anymore (gh-6699).
* Fix build errors with glibc-2.34 (gh-6686).
