Tarantool 1.10.5
Release: v. 1.10.5
Date: 2020-01-14 Tag: 1.10.5-0-g83a2ae9
1.10.5 is the next stable release of the 1.10.x 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 30 issues since 1.10.4. There may be bugs in less common areas. If you find any, feel free to report an issue at GitHub.
Tarantool 1.10.x is backward compatible with Tarantool 1.9.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 1.10.x series.
- fiber: make sure the guard page is created; refuse to create a new fiber otherwise (gh-4541). It is possible in case of heavy memory usage, say, when there is no resources to split VMAs.
- Forbid
00000000-0000-0000-0000-000000000000
as the value ofbox.cfg({<...>})
options:replicaset_uuid
andinstance_uuid
(gh-4282). It did not work as expected: the nil UUID was treated as absence of the value. - Update cache of universe privileges without reconnect (gh-2763).
- net.box: don’t fire the
on_connect
trigger on schema update (gh-4593). Also don’t fire theon_disconnect
trigger if a connection never entered into theactive
state (e.g. when the first schema fetch is failed). - func: fix use-after-free on function unload. fce9cf96
- Don’t destroy a session until
box.session.on_disconnect(<...>)
triggers are finished (gh-4627). This means, for example, thatbox.session.id()
can be safely invoked from theon_disconnect
trigger. Before this changebox.session.id()
returned garbage (usually 0) after yield in theon_disconnect
trigger. Note: tarantool/queue module is affected by this problem in some scenarios. It is especially suggested to update Tarantool at least to this release if you’re using this module. - Handle OOM gracefully during allocating a buffer for binary protocol response. 5c5a4e2d
- func: Fix
box.schema.func.drop(<..>)
to unload unused modules (gh-4648). Also fixbox.schema.func.create(<..>)
to avoid loading a module again when another function from the module is loaded. - Encode Lua number -2^63 as integer in
msgpack.encode()
and box’s functions (gh-4672).
Prefer to bootstrap a replica from a fully bootstrapped instance rather than from an instance that is in the process of bootstrapping (gh-4527).
This change enables the case when two nodes (B, C) are being bootstrapped simultaneously using the one that is already bootstrapped (A), while A is configured to replicate from {B, C} and B – from {A, C}.
Return immediately from
box.cfg{<...>}
when an instance is reconfigured withreplication_connect_quorum = 0
(gh-3760).This change also fixes the behaviour of reconfiguration with non-zero
replication_connect_quorum
:box.cfg{<...>}
returns immediately regardless of whether connections to upstreams are established.Auto reconnect a replica if password is invalid (gh-4550).
Use empty password when a URI in
box.cfg{replication = <...>}
is likelogin@host:port
(gh-4605).This behaviour matches the net.box’s one now. Explicit
login:@host:port
was necessary before, otherwise a replica displayed the following error:Missing mandatory field ‘tuple’ in request
Fix segfault during replication configuration (
box.cfg{replication = <...>}
call) (gh-4440, gh-4576, gh-4586, gh-4643).Apply replication settings of
box.cfg({<...>})
in the strict order (gh-4433).
Fix handling of a socket read error in the console client (
console.connect(<URI>)
ortarantoolctl connect/enter <...>
). 1f86e6ccHandle the “not enough memory” error gracefully when it is raised from
lua_newthread()
(gh-4556). There are several cases when a new Lua thread is created:- Start executing a Lua function call or an eval request (from a
binary protocol, SQL or with
box.func.<...>:call()
). - Create of a new fiber.
- Start execution of a trigger.
- Start of encoding into a YAML format (
yaml.encode()
).
- Start executing a Lua function call or an eval request (from a
binary protocol, SQL or with
Fix stack-use-after-scope in
json.decode()
(gh-4637).Allow to use
cdata<struct ibuf *>
(e.g. buffer.IBUF_SHARED) as the argument tomsgpack.encode()
. 6d38f0c5 Before this change thecdata<struct ibuf>
type was allowed, but not the corresponding pointer type.A pointer returned by
msgpack.decode*(cdata<[char] const *>)
functions can be assigned to buffer.rpos now (and the same for msgpackffi) (gh-3926).All those functions now return
cdata<char *>
orcdata<const char *>
depending of a passed argument. Example of the code that did not work:res, buf.rpos = msgpack.decode(buf.rpos, buf:size())
.Fix race in
fio.mktree()
when two tarantool processes create the same directory tree simultaneously (gh-4660). This problem affects tarantool/cartrige, see cartrige#gh-382.
Fix the “Data segment size exceeds process limit” error on FreeBSD/x64: do not change resource limits when it is not necessary (gh-4537).
fold: keep type of emitted CONV in sync with its mode. LuaJIT#524 This fixes the following assertion fail:
asm_conv: Assertion `((IRType)((ir->t).irt & IRT_TYPE)) != st’ failed
- Fix CLI boolean options handling in
tarantoolctl cat <...>
, such as--show-system
(gh-4076). - Fix segfault (out of bounds access) when a stack unwinding error
occurs at backtrace printing (gh-4636). Backtrace is printed
on SIGFPE and SIGSEGV signals or when LuaJIT finds itself in the unrecoverable
state (
lua_atpanic()
). - Clear terminal state on panic (gh-4466).