Tarantool 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.
- Exit gracefully when a main script throws an error: notify systemd, log the error. gh-4382
- Enable
__pairs
and__ipairs
metamethods from Lua 5.2. gh-4560 We still conform Lua 5.1 API that is not always compatible with Lua 5.2. The change is only about those metamethods.
- 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-3760This 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-4643Apply 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-4637Allow 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.
- Disable verbose mode when
{verbose = false}
is passed. 28f8a5eb - Fix assertion fail after a curl write error. gh-4232
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