Release: v. 2.6.1 Date: 2020-10-22 Tag: 2.6.1-0-gcfe0d1a
2.6.1 is the beta version of the 2.6 release series.
This release introduces roughly 17 features and resolves 22 bugs since the 2.5.1 version. There may be bugs in less common areas. If you find any, feel free to report an issue at GitHub.
Notable changes are:
Transactional manager for the memtx engine that allows yielding in transactions. It also guarantees the data consistency for synchronous replication, eliminating dirty reads for unconfirmed transactions.
Raft-based automated failover mechanism for a single-leader replica set. Replica set can be configured to provide automated leader election and failover. Accompanied with synchronous replication it brings data safety and service reliability on a new level.
Tarantool 2.x is backward compatible with Tarantool 1.10.x in the binary data layout, client-server protocol, and replication protocol.
box.schema.upgrade() procedure to unlock all the new
features of the 2.x series.
There are changes labeled with [Breaking change]. It means that the old behavior was considered error-prone and therefore changed to protect users from unintended mistakes. However, there is a little probability that someone can lean on the old behavior, and this label is to bring attention to the things that have been changed.
- Introduce a function to check that the specified value is of UUID type (gh-5171). Read more: uuid.is_uuid().
- A new function
space:alter(options)to change some space settings without recreation nor touching
_spacespace. Read more: space_object:alter().
- Composite types extraction is now supported in key_def (gh-4538).
- Make memtx tuple hints an optional feature (gh-4927). Read more: Options for space_object:create_index().
Rework upsert operation in vinyl so that now (gh-5107):
- if upsert can’t be applied it is skipped and corresponding error is logged (gh-1622);
- upserts now follow associative property: the result of several upserts does not depend on the order of their application (gh-5105);
- upserts referring to -1 fieldno are handled correctly now (gh-5087).
- there’s no more upserts squash procedure: upserts referring to the same field with arithmetic operations are not merged into one operation since resulting upsert might not be applied - as a result both upserts would be ignored (meanwhile only one should be).
- [Breaking change] Introduce LuaJIT platform metrics (gh-5187).
Read more: LuaJIT metrics.
- This change introduces new builtin library “misc” that may conflict with user’s modules.
- SQL views are not alterable anymore. Beforehand it led to the undefined behaviour.
- Introduce “automatic index” optimization. Ephemeral space with single index can be created to store and speed-up intermediate results access during query execution (gh-4933).
- Automated leader election based on Raft algorithm (gh-1146). Read more: Automated leader election.
- When election is enabled, a newly elected leader will automatically finish all the synchronous transactions, created by the old leader (gh-5339).
- Tarantool static build is enhanced in scope of gh-5095. It can be built on the host machine with no Docker at all. As a result it can be built using the OSX environment.
- Fixed a bug related to ignoring internal getaddrinfo errors on macOS in logger (gh-4138).
- Fixed a crash when JSON tuple field access was used to get a multikey indexed field, and when a JSON contained [*] in the beginning (gh-5224).
- Fixed msgpack extension types decoding error message (gh-5016).
- Dropped restrictions on nullable multikey index root. They were introduced due to inaccuracy in multikey index realization. It is now fixed. Also all fields are now nullable by default as it was before 2.2.1 (gh-5192).
- Fixed fibers switch-over to prevent JIT machinery misbehavior. Trace recording is aborted when fiber yields the execution. The yield occurring while the compiled code is being run (it’s likely a function with a yield underneath called via LuaJIT FFI) leads to the platform panic (gh-1700, gh-4491).
- Fixed fibers switch-over to prevent implicit GC disabling. The yield occurring while user-defined __gc metamethod is running leads to the platform panic.
- Fixed a bug when a rolled back synchronous transaction could become committed after restart (gh-5140).
- Fixed crash in synchronous replication when master’s local WAL write fails (gh-5146).
- Instance will terminate if a synchronous transaction confirmation or rollback fail. Before it was undefined behavior (gh-5159).
- Snapshot could contain changes from a rolled back synchronous transaction (gh-5167).
- Fixed a crash when synchronous transaction’s rollback and confirm could be written simultaneously for the same LSN (gh-5185).
- Fixed a crash when replica cleared synchronous transaction queue, while it was not empty on master (gh-5195).
- During recovery of synchronous changes from snapshot the instance could crash (gh-5288).
- Having synchronous rows in the snapshot could make the instance hang on recovery (gh-5298).
- Anonymous replica could be registered and could prevent WAL files removal (gh-5287).
- XlogGapError is not a critical error anymore. It means, box.info.replication will show upstream status as ‘loading’ if the error was found. The upstream will be restarted until the error is resolved automatically with a help of another instance, or until the replica is removed from box.cfg.replication (gh-5287).
- Fixed the error occurring on loading luajit-gdb.py with Python 2 (gh-4828).
- Fixed a bug related to ignoring internal getaddrinfo errors. Now they can be thrown out by Lua socket functions (gh-4138).
- Fixed: import of table.clear() method (gh-5210). Affected versions: all 2.6.* until 2.6.0-53-g09aa813 (exclusive).
- Fixed unhandled Lua error that may lead to memory leaks and
Transactional manager for memtx engine (gh-4897).
- Get rid of typedef redefinitions for compatibility with C99 (gh-5313).