Download Latest Version 2.11.7 source code.tar.gz (8.7 MB)
Email in envelope

Get an email when there's a new version of Tarantool

Home / 2.11.6
Name Modified Size InfoDownloads / Week
Parent folder
2.11.6 source code.tar.gz 2025-02-24 8.7 MB
2.11.6 source code.zip 2025-02-24 10.8 MB
README.md 2025-02-24 7.2 kB
Totals: 3 Items   19.5 MB 0

Date: 2025-02-24 Tag: 2.11.6

Announcement: double field type problems

Users who ever used the double field type in vinyl indexes might have their indexes broken. Regardless of this release. Preferably prior to the upgrade the users must get rid of the double indexed field type in vinyl. It must be drop-in replaceable by the number field type.

The reason is that the sorting of double fields would always compare the field values as C-language doubles, even when actual integers are stored. This works fine for small numbers, but starting from 2^53 the double-style comparison loses precision. For example, 18446744073709551615 and 18446744073709551614 would be considered the same values.

Besides, point-lookups in such index are going to be broken by design too - looking up by 18446744073709551615 can return 18446744073709551614 and many other integers around this point.

Unfortunately, even if the user doesn't have the double type in any vinyl indexes, but ever had it before, it is still unsafe. A double index altered to number or scalar would remain broken. It is very important that users rebuild all the vinyl indexes that have or ever had the double field type in them. What is worse, just an alter double -> number won't work. The old index must be dropped and a new one must be created. In any order.

See more details in gh-9965 and gh-11017.

Overview

2.11.6 is the next stable release in the long-term support (LTS) version of the 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 32 issues since the 2.11.5 version.

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 using the box.schema.upgrade() procedure to unlock all the new features of the 2.x series.

Bugs fixed

Core

  • Fixed a bug when a server could crash if a client sent an IPROTO replication request without waiting for pending requests to complete (gh-10155).
  • Fixed a bug when the sequence:reset() call result was not recovered after the server restart (gh-9871).
  • Fixed several bugs in the numbers comparison and hashing in tuple keys. It allowed to insert the same key multiple times into a unique index, and sometimes wouldn't allow to find an existing key in an index. Could happen when numbers were encoded in MessagePack suboptimally and when the double field type was used (gh-9965).
  • Fixed the issue with hanging write operations forever triggered by heavy write load and WAL writing failures on cascade rollback (gh-11081).

Memtx

  • Fixed a crash when memtx MVCC tried to abort an already committed non-memtx transaction if it used a system space view or tried to perform a DDL operation (gh-10715).
  • Fixed a bug when Tarantool with memtx MVCC enabled was aborted on workload with many index:get() operations reading nothing (gh-11022).

Vinyl

  • Fixed a bug when a deleted tuple wasn't purged from a secondary index data stored on disk in case it was updated more than once in the same transaction. The bug couldn't result in inconsistent query results, but it could lead to performance degradation and increased disk usage (gh-10820, gh-10822).
  • Fixed a bug when joining a new replica to a master instance that experiences a heavy write load severely degrades the master instance performance. The fix should also speed up long-running scan requests (gh-10846).
  • Fixed a bug when a tuple could disappear from a multikey index in case it replaced a tuple with duplicate multikey array entries created in the same transaction. With the enabled defer_deletes space option, the bug could also trigger a crash (gh-10869, gh-10870).
  • Fixed a bug when the tuple cache was not properly invalidated in case a WAL write error occurred while committing a space.delete() operation. The bug could lead to a crash or an invalid read query result (gh-10879).
  • Fixed a bug when a deleted secondary index key wasn't purged on compaction of a space with the defer_deletes option enabled (gh-10895).
  • 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-11079).
  • Fixed a bug in the tuple cache when a tuple could become inaccessible via a secondary index after a transaction rollback caused by a WAL write error (gh-11140).

Replication

  • RAFT requests are now sent with 0 (not local) GROUP_ID (gh-10727).
  • Fixed a bug when the RAFT state wasn't sent during the META_JOIN stage, which could lead to split-brain (gh-10089).
  • Fixed a bug when anonymous replicas could participate in elections or even be chosen as a leader. It is now forbidden to configure a replica so that replication_anon is true and election_mode is not off (gh-10561).

LuaJIT

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

  • Fixed compilation of getmetatable() for io objects.
  • Fixed dirty reads from recorded IR_NOP.
  • Fixed fusing optimization across table.clear() or insertion of a new key.
  • Disabled FMA optimization on aarch64 to avoid incorrect results in floating point arithmetics. Optimization may be enabled for the JIT engine via the command jit.opt.start("+fma").
  • Fixed machine code zone overflow for trace recording on x86/x64.
  • Fixed possible infinite loop during recording a chunk that uses upvalues.
  • Fixed recording of bit.bor()/bit.bxor()/bit.band() with string arguments.
  • Fixed parsing of for _ in loop.

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

  • Fixed compiler warning in setfenv() / getfenv() with negative levels as the argument.
  • Fixed register allocation for stores into sunk values (gh-10746).
  • Fixed a crash when using a Lua C function as a vmevent handler for trace events.
  • Fixed the compilation of ... in select().

log

  • Fixed log message being truncated to 1024 bytes with JSON logger (gh-10918).

net.box

  • Fixed a bug when the request counter used by a net.box client to implement the graceful shutdown protocol could underflow while it was fetching the schema from the remote end. In case of a debug build, the bug would crash the client. In case of a release build, the bug would result in a timeout while executing the remote server shutdown (gh-11062).

Build

  • Ubuntu Noble (24.04) is now supported.
Source: README.md, updated 2025-02-24