[BROKEN] 2.10.1
Due to a critical regression consider this release "totally broken". Please, avoid using it.
Date: 2022-08-08
Tag: 2.10.1
Overview
Notable changes are:
- Interactive transactions are now possible in remote binary consoles.
- Improved the string representation of datetime intervals.
2.10.1 is the 2-nd stable version of the 2.10 release
series. It introduces 17 improvements and resolves 52 bugs since
2.10.0.
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 on GitHub.
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 using the box.schema.upgrade()
procedure to unlock
all the new features of the 2.x series.
Functionality added or changed
Core
- [Breaking change] Conflicted transactions now throw the
Transaction has been aborted by conflict
error on any CRUD operations
until they are either rolled back (which will return no error) or committed
(which will return the same error) (gh-7240). - Read-view transactions now become conflicted on attempts to perform DML
statements immediately. Previously, this was detected only on the transaction
preparation stage, that is, when callingbox.commit
(gh-7240). - Interactive transactions are now possible in remote binary consoles (gh-7413).
- It is now possible to omit
space
in declarations of foreign keys that
refer to the same space (gh-7200).
Datetime
-
Improved the string representation of datetime intervals.
Now nanoseconds aren't converted and attached to seconds;
the intervals are displayed "as is". Example:local ival = date.interval.new{year = 12345, hour = 48, min = 3, sec = 1, nsec = 12345678} print(tostring(ival))
Before:
'+12345 years, 48 hours, 3 minutes, 1.012345678 seconds'
Now:
'+12345 years, 48 hours, 3 minutes, 1 seconds, 12345678 nanoseconds'
Decimal
- Added C module API for decimals (gh-7228).
- Added Lua/C accessors for decimals into the module API (gh-7228).
Tuple
- Added the
box_tuple_field_by_path()
function into the module API. It allow the
access to tuple fields from C code using a JSON path (gh-7228).
Build
- Fedora 30, 31,32, and 33 are no longer supported.
- Ubuntu 20.10 (Groovy Gorilla) and 21.04 (Hirsute Hippo) are no longer supported.
- Updated libcurl to version 7.84.0.
- Updated OpenSSL used for static builds to version 1.1.1q.
- Ubuntu 21.10 (Impish Indri) is no longer supported.
- Updated Ncurses used for static builds to version 6.3-20220716 .
- Updated Readline used for static builds to version 8.0p1.
- Updated libyaml to the version with fixed stack overflows.
- Updated zstd to version 1.5.2.
- Updated zlib used for static builds to version 1.2.12.
Bugs fixed
Core
-
Improved validation of incoming tuples. Now tuples coming over the network
can't contain malformed decimals, uuids, or datetime values (gh-6857). -
Fixed a bug in the net.box connector because of which a client could fail to
close its connection when receiving a shutdown request from the server. This
could lead to the server hanging on exit (gh-7225). -
Fixed a crash and possible undefined behaviour when using
scalar
andnumber
indexes
over fields containing both decimals and doubleInf
orNaN
.For vinyl spaces, the above conditions could lead to wrong ordering of
indexed values. To fix the issue, recreate the indexes on such
spaces following this guide (gh-6377). -
Fixed a bug because of which a net.box connection was not properly terminated
when the process had a child (for example, started withpopen
) sharing the
connection socket fd. The bug could lead to a server hanging on exit while
executing the graceful shutdown protocol (gh-7256). -
Removed an assertion on
fiber_wakeup()
calls with dead fibers
in debug builds. Such behavior was inconsistent with release builds,
in which the same calls were allowed (gh-5843). -
Fixed the
exclude_null
index option not working for multikey and JSON indexes (gh-5861). -
Fixed the performance degradation of fiber backtrace collection
after the backtrace rework (gh-7207). -
Fixed a hang when a synchronous request was issued from a net.box
on_connect
oron_schema_reload
trigger. Now an error is raised instead (gh-5358). -
Fixed a crash that could happen on x86 systems without the
RDTSCP
instruction (gh-5869). -
Fixed a bug that allowed to access indexed fields of nested tuples with
[*]
in Lua (gh-5226). -
Fixed the behavior of
space_object:fselect()
on binary data (gh-7040). -
Fixed Tarantool not being able to recover from old snapshots when
box.cfg.work_dir
andbox.cfg.memtx_dir
were both set (gh-7232). -
Fixed Tarantool terminations on error messages with invalid UTF-8
sequences (gh-6781 and gh-6934). -
Fixed a bug when the "Transaction is active at return from function" error
was overwriting expression evaluation errors in case the expression begins a transaction (gh-7288). -
Added type checking for options in net.box's remote queries and
connect method. Now graceful errors are thrown in case of incorrect
options (gh-6063, gh-6530). -
Fixed
space_object:format()
andspace_object.foreign_key
returning
incorrect numbers of foreign key fields (gh-7350). -
Fixed the foreign key check on
space_object:truncate()
calls (gh-7309). -
Fixed a crash when
box.stat.net.thread[i]
is called with invalidi
values (gh-7196). -
Fixed a low-probability stack overlow bug in the qsort implementation.
Memtx
- Fixed the ability to perform read-only operations in conflicting transactions
in memtx, which led to spurious results (gh-7238). - Fixed false assertion on repeatable
replace
with the memtx transaction
manager enabled (gh-7214). - Fixed false transaction conflict on repeatable
insert
/upsert
with the memtx transaction manager enabled (gh-7217). - Fixed dirty reads in the 'GT' iterator of HASH indexes (gh-7477).
- Fixed phantom reads in reverse iterators (gh-7409).
- Fixed
select
withLE
iterator in memtx TREE index returning
deleted tuple (gh-7432). - Fixed incorrect handling of corner cases gap tracking in transaction
manager (gh-7375). - Fixed a bug in the memtx hash index implementation that could lead to
uncommitted data written to a snapshot file (gh-7539).
Vinyl
- Fixed a bug in the vinyl upsert squashing optimization that could lead to
a segmentation fault error (gh-5080). - Fixed a bug in the vinyl garbage collector. It could skip stale tuples stored
in a secondary index if upsert operations were used on the space before the index
was created (gh-3638). - Fixed a bug in the vinyl read iterator that could result in a significant
performance degradation of range select requests in the presence of an intensive
write workload (gh-5700). - Explicitly disabled the hot standby mode for vinyl. Now an attempt to enable
the hot standby mode in case the master instance has vinyl spaces results in
an error. Before this change, the behavior was undefined (gh-6565).
Replication
- Added the logging of the error reason on a replica in case when
the master didn't send a greeting message (gh-7204). - Fixed replication being stuck occasionally for no obvious reasons.
- Fixed a possible split-brain when the old synchro queue owner might finalize the
transactions in the presence of the new owner (gh-5295). - Improved the detection of possible split-brain situations, for example, when
multiple leaders were working independently due to manually lowered quorum.
Once a node discovers that it received some foreign data, it immediately
stops replication from such a node with an ER_SPLIT_BRAIN error (gh-5295). - Fixed a false positive split-brain error after
box.ctl.demote()
(gh-7286). - Fixed a bug when followers with
box.cfg.election_mode
turned on did not notice
the leader hang due to a long request, such as aselect{}
from a large
space or apairs
iteration without yields between loop cycles (gh-7512).
LuaJIT
Backported patches from vanilla LuaJIT trunk (gh-6548). In the scope of this
activity, the following issues have been resolved:
-
Fixed emitting for fuse load of constant in GC64 mode (gh-4095, gh-4199, gh-4614).
-
Now initialization of zero-filled struct is compiled (gh-4630, gh-5885).
-
Actually implemented
maxirconst
option for tuning JIT compiler. -
Fixed JIT stack of Lua slots overflow during recording for metamethod calls.
-
Fixed bytecode dump unpatching for JLOOP in up-recursion compiled functions.
-
Fixed FOLD rule for strength reduction of widening in cdata indexing.
-
Fixed
string.char()
recording without arguments. -
Fixed
print()
behaviour with the reloaded default metatable for numbers. -
tonumber("-0")
now saves the sign of number for conversion. -
tonumber()
now give predictable results for negative non-base-10 numbers. -
Fixed write barrier for
debug.setupvalue()
andlua_setupvalue()
. -
Fixed conflict between 64 bit lightuserdata and ITERN key for ARM64.
-
Fixed emitting assembly for HREFK on ARM64.
-
Fixed pass-by-value struct in FFI calls on ARM64.
-
jit.p
now flushes and closes output file after run, not at program exit. -
Fixed
jit.p
profiler interaction with GC finalizers. -
Fixed the case for partial recording of vararg function body with the fixed
number of result values in withLJ_GC64
(i.e.LJ_FR2
enabled) (gh-7172). -
Added
/proc/self/exe
symlink resolution to the symtab module to obtain the
.symtab section for the Tarantool executable. -
Introduced stack sandwich support to sysprof's parser (gh-7244).
-
Disabled proto and trace information dumpers in sysprof's default mode.
Attempts to use them lead to a segmentation fault due to an uninitialized buffer
(gh-7264).
Backported patches from vanilla LuaJIT trunk (gh-7230). In the scope of this
activity, the following issues have been resolved: -
Fix handling of errors during trace snapshot restore.
Lua
- The
fiber_obj:info()
now correctly handles its options (gh-7210). - Fixed a bug when Ctrl+C doesn't discard the multiline input (gh-7109).
SQL
- Fixed the creation of ephemeral space format in
ORDER BY
(gh-7043). - The result type of arithmetic operations between two unsigned values is now
INTEGER
(gh-7295). - Fixed a bug with the
ANY
type in the ephemeral space format inORDER BY
(gh-7043). - Truncation of a space no longer corrupts prepared statements (gh-7358).
Datetime
- Fixed a bug when
date:set{hour=nil,min=XXX}
did not retain the originalhour
value. (gh-7298). - Introduced the validation of incoming data at the moment
messagepack is converted to datetime (gh-6723).
HTTP client
- Enabled the automatic detection of system CA certificates in the runtime (gh-7372).
It was disabled in 2.10.0, which led to the inability to use HTTPS without
theverify_peer = false
option.