Releases: tarantool/tarantool
2.11.3
2.11.3
Date: 2024-04-17
Tag: 2.11.3
Overview
2.11.3 is the next stable release in the long-term support (LTS)
versionrelease_policy 2.11.x release 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 54 issues since the 2.11.2 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.11.x series.
Bugs fixed
Core
- Fixed a bug when the assertion in
box_wait_limbo_acked
would fail. The
assertion is that the lsn of the last entry in limbo is always positive after
wal_sync
. Before the patch, if thereplication_synchro_quorum
was set too
high on the replica, it would never be reached. After the timeout was
triggered, the user received aTimedOut
error. If the quorum was greater
than or equal to the number of instances in the replica set, the program
immediately stopped with a segmentation fault (gh-9235). - Fixed a bug when the assertion in
box_promote_qsync
would fail in the
debug build mode. The assertion is that at the moment whenbox_promote_qsync
is called, no other promote is being executed. It turned out that this
assertion is basically incorrect. In the release build mode, this incorrect
assumption could potentially lead to writing 2 PROMOTE entries in the same
term (gh-9263). - The error messages are no longer stripped (gh-4975).
- Increased the maximum number of tuples in a hash index from 2147483648 (2^31)
to 4294967288 (2^32 - 8) (gh-9864). - Fixed a bug that resulted in a crash when both MVCC and index with the
exclude_null
part were used (gh-9954). - Now
box.cfg()
correctly interprets theTT_LISTEN
andTT_REPLICATION
environment variables with query parameters (gh-9539). - The
exclude_null
option is now supported by functional indexes (gh-9732).
Replication
- Now transactions are not rolled back if the transaction fiber is
cancelled when waiting for quorum from replicas (gh-9480). - Fixed a bug when replication broke with
ER_PROTOCOL
when transactions ended
with a local space operation (gh-9491). - Fixed an issue when it was possible to use the
box_collect_confirmed_vclock
stack after return (gh-9505).
LuaJIT
Backported patches from the vanilla LuaJIT trunk (gh-9145, gh-9595). The
following issues were fixed as part of this activity:
- Fixed CSE of a
REF_BASE
operand acrossIR_RETF
. - Fixed the fold rule for
BUFHDR APPEND
. - Fixed HREFK, ALOAD, HLOAD, forwarding vs.
table.clear()
. - Fixed snapshot PC when linking to
BC_JLOOP
that was aBC_RET*
. - Fixed dangling references to CType.
- Ensured returned string is alive in
ffi.typeinfo()
. - Fixed the missing initialization of the internal structure, leading to a
crash when recording a trace with an allocation of cdata. - Limited exponent range in number parsing by
2^20
. - Fixed double-emitting of
IR_NEWREF
when restoring sunk values for side
trace (gh-7937). - Fixed the
IR_HREFK
optimization for huge tables. - Fixed recording of the
__concat
metamethod. - Fixed the embedded bytecode loader.
- Improved error reporting on stack overflow.
- Fixed assertion on the Lua stack overflow for a stitched trace.
- Fixed snapshoting of functions for non-base frames.
- Fixed a crash in the allocator during sysprof profiling (gh-8140).
- No side traces are recorded now after disabling the JIT via
jit.off()
. - Fixed handling of instable boolean types in TDUP load forwarding.
- Fixed a crash during the restoration of the sunk
TNEW
with a huge array
part. - Fixed stack-buffer-overflow for
string.format()
with%g
modifier and
length modifier. - Fixed recording of
setmetatable()
withnil
as the second argument. - Fixed recording of
select()
in case with negative first argument. - Fixed use-def analysis for child upvalues.
- Added the
cc
file type for saving bytecode. - Fixed C file generation in
jit.bcsave
. - Fixed trace error handling during trace stitching.
- Fixed recording of the
__concat
metamethod for vararg or protected frames. - Fixed recording of a side trace returning to a lower frame with a maximum
possible frame size. - Fixed
debug.setmetatable()
andlua_setmetatable()
with enabled
jit.dump()
. - Fixed recording of side traces with a down-recursion.
Lua
- Fixed a memory leak in
error_object:set_prev()
(gh-9694). - Fixed alias detection in the YAML encoder (gh-8350, gh-8310, gh-8321).
- Fixed a regression that caused the
wait_connected = false
option of
net_box.connect
to yield, despite being required to be fully asynchronous
(gh-9489). - Fixed a bug in
net.box
when a connection with asynchronous requests could
get garbage collected (gh-9629). - Fixed an inconsistency between the documented
on_disconnect
trigger behavior
ofnet.box
connections when an error is thrown and the actual behavior
(gh-9717). - Fixed a bug in the
on_disconnect
trigger ofnet.box
connections that
caused Tarantool server to hang indefinitely when an error was thrown from the
trigger (gh-9797). - The
on_schema_reload
trigger behavior ofnet.box
connections when an
error is thrown is now consistent with the behavior of theon_disconnect
trigger (gh-9679). - Fixed a bug when a
net.box
connection remained active after being closed
from the connection'son_connect
trigger (gh-9827).
HTTP client
- Fixed a crash on garbage collection of httpc objects (gh-9283).
- Fixed a crash due to a race in GC finalizers (gh-9346).
- Fixed behaviour of GC-finalizer of HTTP client Lua object when chunked HTTP
request is alive. (gh-9453).
SQL
- Fixed a memory leak when an error occurred in
SELECT
with aGROUP BY
expression (gh-8535, ghs-125). - Fixed a crash when a decimal literal representing a decimal number greater
than or equal to 10^38 was parsed in SQL (gh-9469).
Datetime
- Fixed a bug in
strptime
when the assertion was triggered (gh-8525).
Build
- Updated libcurl to version 8.5.0.
Testing
- Bumped
metrics
submodule to commit3370f85
to fix compatibility with
luatest
commitd985997
.
Tools
- Added the
--human-readable
option for themisc.memprof
parser to print
sizes like 1KiB, 234MiB, 2GiB, etc.
Made the errors from the profilers more user-friendly (gh-9217).
3.1.0
3.1.0
Date: 2024-04-16
Tag: 3.1.0
Overview
3.1.0 is the first stable version of the 3.1 release
series. It introduces 28 improvements and resolves 2 bugs since
3.0.2.
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 3.x is backward compatible with Tarantool 2.11.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 3.x series.
Functionality added or changed
Core
- Introduced fixed-size numeric field types:
uint8
,int8
,uint16
,int16
,
uint32
,int32
,uint64
,int64
,float32
,float64
(gh-9548). - Now it is possible to set IPROTO request handler callbacks by using the new
Lua moduletrigger
, for example:The method works before the initiallocal trigger = require('trigger') trigger.set('box.iproto.override.select', 'my_select', my_select_handler)
box.cfg{}
call. Also, the method allows
setting multiple handlers for a single request type (gh-8138). box.iproto.override()
was switched to the universal trigger registry. As a
side effect, now this function does not raise an error when a wrong request
type is passed. All such errors are logged withCRITICAL
level (gh-8138).- Added a new flag
tarantool.build.test_build
that shows whether a build
flagTEST_BUILD
is set. - Hide redundant fields from
box.error.unpack()
if
thebox_error_unpack_type_and_code
compat option is set to 'new'.
The default behaviour is 'old' (gh-9101). - Sped up the creation of large sparse tuples by up to 3.5x in a synthetic test.
- Error details are now available as error payload fields (gh-9108).
- Added the
name
field to an error object (gh-9875). - Added a
trigger
option tobox.schema.func.create
. This option allows creating
persistent triggers (gh-8663).
Lua
- Now it is possible to add custom payload fields to
box.error
(gh-9104). - Added a
message
argument to the table constructor ofbox.error.new
(gh-9102). - Added a
prev
argument to the table constructor ofbox.error.new
(gh-9103). - Now it is possible to access a payload field of an error's cause directly
from the error (gh-9106). - Increased the verbosity of
box.error
s serialization and added a new
box_error_serialize_verbose
option tocompat
to retain old behaviour
(gh-9105). - Added autocompletion (including payload fields) to
box.error
(gh-9107). - Added the
level
argument tobox.error
andbox.error.new
to specify
the stack frame used for setting the error location (gh-9792). - Added key validation and comparison functions to the
key_def
module
(gh-9863). - Added a
tnt_election_leader_idle
metric to built-inmetrics
.
Http client
- Added the
http_version
option to therequest()
,post()
,
get()
and other request functions from thehttp.client
module (gh-9806).
Config
- Added new
config.etcd
optionswatchers.reconnect_timeout
and
watchers.reconnect_max_attempts
(ghe-647). - Introduced the
sharding.rebalancer_mode
option (gh-9657). - Introduced the
sharding.weight
configuration option, which reflects
the relative amount of data that a replicaset can store (gh-9775). config:info()
can now display source metadata from the last successful
load along with source metadata from the very last load attempt (gh-9780).- Introduced the
labels
configuration option. The labels are maps with
string keys that are merged to instance level (gh-9809). - Added the
config:instances()
method and theinstance
option to
config:get()
(gh-9680). - Introduced the
instance_uri()
method for theconfig
module (gh-9842).
Experimental
- Introduced the
experimental.connpool
module and the
connect()
function of this module (gh-9842). - Introduced the
filter()
function in theexperimental.connpool
module (gh-9842). - Introduced the
call()
function in theexperimental.connpool
module (gh-9842). - Introduced the
mode
option for thefilter()
andcall()
functions
in theexperimental.connpool
module (gh-9930).
Bugs fixed
Core
- Provided old and new tuples in
box.error.TUPLE_FOUND
(gh-6166). - An attempt to execute a DDL, DML, DQL, DCL or TCL query within
a transactional trigger (on_commit
oron_rollback
) now fails
with a specific error (gh-9186, gh-7331).
For the list of other bugs fixed you can refer to the 3.0.2 release notes,
since most of the bugs are backported to the previous version.
Tools
tarantoolctl
has been removed. Systemd, sysvinit and logrotate
scripts based on it were also removed. All this functionality is covered by thett
utility.
tarantoolctl
is no longer available in official deb and rpm packages. This change will only
affect the absence of tarantoolctl in future releases of tarball archives.
(gh-9443).- Added the
--human-readable
option for themisc.memprof
parser to print
sizes like 1KiB, 234MiB, 2GiB, etc.
Made the errors from the profilers more user-friendly (gh-9217).
3.0.2
3.0.2
Date: 2024-04-16
Tag: 3.0.2
Overview
3.0.2 is the third stable version of the 3.0 release
series. It resolves 31 bugs since 3.0.1.
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 3.x is backward compatible with Tarantool 2.11.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 3.x series.
Bugs fixed
Core
- Fixed a bug when Tarantool could hang due to
box.watch
(gh-9632). - Fixed a crash on dropping a just accepted connection (gh-9717).
- The error messages are no longer stripped (gh-4975).
- Increased the maximum number of tuples in a hash index from 2147483648 (2^31)
to 4294967288 (2^32 - 8) (gh-9864). - Now all triggers either have a direct impact on the execution flow (for
example, closing a connection or throwing an error) or print a message to
the error log when they throw an error (gh-9309). - The
exclude_null
option is now supported by functional indexes (gh-9732). - Fixed a memory leak when dropping fully-temporary spaces (gh-9296).
- Fixed a bug that resulted in a crash when both MVCC and index with the
exclude_null
part were used (gh-9954).
Replication
- Fixed a bug when replication broke with
ER_PROTOCOL
when transactions ended
with a local space operation (gh-9491). - Fixed an issue when it was possible to use the
box_collect_confirmed_vclock
stack after return (gh-9505).
Raft
- Now the leader resigns on the first encounter with the
ER_WAL_IO
write error (gh-9399).
LuaJIT
Backported patches from the vanilla LuaJIT trunk (gh-9145, gh-9595). The
following issues were fixed as part of this activity:
- Limited exponent range in number parsing by
2^20
. - Fixed build with internal unwinding.
- Fixed double-emitting of
IR_NEWREF
when restoring sunk values for side
trace (gh-7937). - Fixed the
IR_HREFK
optimization for huge tables. - Fixed recording of the
__concat
metamethod. - Fixed the embedded bytecode loader.
- Improved error reporting on stack overflow.
- Fixed assertion on the Lua stack overflow for a stitched trace.
- Fixed snapshoting of functions for non-base frames.
- Fixed a crash in the allocator during sysprof profiling (gh-8140).
- No side traces are recorded now after disabling the JIT via
jit.off()
. - Fixed handling of instable boolean types in TDUP load forwarding.
- Fixed a crash during the restoration of the sunk
TNEW
with a huge array
part. - Fixed stack-buffer-overflow for
string.format()
with%g
modifier and
length modifier. - Fixed recording of
setmetatable()
withnil
as the second argument. - Fixed recording of
select()
in case with negative first argument. - Fixed use-def analysis for child upvalues.
- Added the
cc
file type for saving bytecode. - Fixed C file generation in
jit.bcsave
. - Fixed trace error handling during trace stitching.
- Fixed recording of the
__concat
metamethod for vararg or protected frames. - Fixed recording of a side trace returning to a lower frame with a maximum
possible frame size. - Fixed
debug.setmetatable()
andlua_setmetatable()
with enabled
jit.dump()
. - Fixed recording of side traces with a down-recursion.
Lua
- Fixed a memory leak in
error_object:set_prev()
(gh-9694). - Fixed alias detection in the YAML encoder (gh-8350, gh-8310, gh-8321).
- Fixed a regression that caused the
wait_connected = false
option of
net_box.connect
to yield, despite being required to be fully asynchronous
(gh-9489). - Fixed a bug in
net.box
when a connection with asynchronous requests could
get garbage collected (gh-9629). - Fixed an inconsistency between the documented
on_disconnect
trigger behavior
ofnet.box
connections when an error is thrown and the actual behavior
(gh-9717). - Fixed a bug in the
on_disconnect
trigger ofnet.box
connections that
caused Tarantool server to hang indefinitely when an error was thrown from the
trigger (gh-9797). - The
on_schema_reload
trigger behavior ofnet.box
connections when an
error is thrown is now consistent with the behavior of theon_disconnect
trigger (gh-9679). - Fixed a bug when a
net.box
connection remained active after being closed
from the connection'son_connect
trigger (gh-9827).
Config
- Fixed a bug when only one alert of a particular type is reported in
config:info().alerts
instead of several ones. Examples of such alerts are
privilege grant delay due to a lack of a space/function/sequence and skipping
of a non-dynamicbox.cfg()
option applies on the configuration reloading
(gh-9586). - An alert regarding delayed privilege granting is now cleared when the
privilege is granted (gh-9574). - Calling
require('config'):get()
in role code now returns the configuration
that is currently applied (gh-9649). - The config status is now set after the
post_apply
phase (ghe-643). - A non-existent role can now be assigned in the
credential
section of
the configuration (gh-9643). - Privileges that were not granted by the config module are no longer
revoked by the config module (gh-9643). - Fixed a non-verbose error on an empty configuration file.
Now Tarantool can successfully start up with an empty configuration
file using data from other configuration sources (gh-9845). - Added additional validation to a cluster's configuration.
Now it is forbidden to create an empty group or
replicaset (gh-9895). - Added a subject URI to the error that is thrown on configuration
verification (gh-9644). - Added a warning with the skipped (unsuitable) URI to replicaset
and sharding configuration (gh-9644).
Datetime
- Fixed a bug in
strptime
when the assertion was triggered (gh-8525).
Build
- Fixed
package.cpath
for Debian based distros (gh-9580).
Testing
- Bumped
metrics
submodule to commit3370f85
to fix compatibility with
luatest
commitd985997
.
Tools
tarantoolctl
has been removed. Systemd, sysvinit and logrotate scripts
based on it were also removed. All this functionality is covered by thett
utility.tarantoolctl
is no longer available in official deb and rpm
packages. This change will only affect the absence of tarantoolctl in future
releases of tarball archives. (gh-9443).- Added the
--human-readable
option for themisc.memprof
parser to print
sizes like 1KiB, 234MiB, 2GiB, etc.
Made the errors from the profilers more user-friendly (gh-9217).
3.0.1
3.0.1
Date: 2024-01-25
Tag: 3.0.1
Overview
3.0.1 is the 2nd stable version of the 3.0 release
series. It resolves 4 bugs since 3.0.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 3.x is backward compatible with Tarantool 2.11.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 3.x series.
Bugs fixed
Lua
- Fixed the incorrect propagation of Lua errors raised while loading
the module via the Tarantool-specific loaders.
Config
- Fixed an issue when a leader fails to start with the
attempt to index a nil value
error if a config with all UUIDs set is used during a cluster's
bootstrap (gh-9572).
Httpc
- Fixed a bug when read from a chunked request returns
nothing (gh-9547).
Build
- Updated libcurl to version 8.5.0.
3.0.0
3.0.0
Date: 2023-12-26
Tag: 3.0.0
Overview
3.0.0 is the first stable version of the 3.0 release
series. It introduces 65 improvements and resolves 38 bugs since
2.11.2.
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 3.x is backward compatible with Tarantool 2.11.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 3.x series.
Functionality added or changed
Core
- Now
index_object.parts
contains the following methods, similar to the
key_def
Lua module:extract_key()
,compare()
,compare_with_key()
,
merge()
(gh-7356). - Introduced the
box.watch_once()
function to get the value currently
associated with a notification key on the local instance without subscribing
to future changes (gh-6493). - Introduced the new
IPROTO_WATCH_ONCE
request to get the value currently
associated with a notification key on a remote instance without subscribing
to future changes (gh-6493). - Introduced the
conn:watch_once()
net.box connection method to get the value
currently associated with a notification key on a remote instance without
subscribing to future changes. The new method is implemented using the
IPROTO_WATCH_ONCE
request type (gh-6493). - Introduced the default field values in the space format (gh-8157).
- Added support for functional variant of the default field values (gh-8609).
- box.schema can now be accessed before box.cfg().
- Introduced new methods
tuple:info()
andspace:stat()
with the detailed
information on memory consumed by data (gh-6762). - Introduced the new built-in system event
box.wal_error
that is broadcast
whenever Tarantool fails to commit a transaction to the write-ahead log
(gh-9405). - Introduced transaction-related events
box.before_commit
,box.on_commit
,
andbox.on_rollback
for the new trigger registry. One of the main advantages
of the new triggers is that they can be set for all transactions rather than
setting them within each transaction (gh-5717, gh-8656).
Memtx
- Added memtx read view statistics to
box.stat.memtx()
(gh-8501).
Vinyl
- Introduced the
memory.tuple
statistic forbox.stat.vinyl()
that shows
the total size of memory occupied by all tuples allocated by the Vinyl engine
(gh-8485).
Replication
-
Added a new
bootstrap_leader
configuration option to specify the node from
which a replica should bootstrap. To do this, setbox.cfg.bootstrap_strategy
to'config'
and setbootstrap_leader
value to either the URI or UUID of
the desired bootstrap leader. For example:box.cfg{ bootstrap_strategy = 'config', bootstrap_leader = 'localhost:3301', replication = { 'localhost:3301', 'localhost:3302', }, listen = '3302', }
(gh-7999).
-
You may now control which node new replicas choose as a bootstrap leader
without touching node config. To do so, setbox.cfg.bootstrap_strategy
to
'supervised'
, and the nodes will only bootstrap off the node on which you
calledbox.ctl.make_bootstrap_leader()
last.
This works on an empty replica set bootstrap as well: start the admin console
before configuring the nodes. Then configure the nodes:box.cfg{ bootstrap_strategy = 'supervised', replication = ..., listen = ..., }
Finally, call
box.ctl.make_bootstrap_leader()
through the admin console
on the node you want to promote. All the nodes will bootstrap off that node
(gh-8509). -
A new option
box.cfg.cluster_name
allows assigning a human-readable name to
the entire cluster. It has to match in all instances and is displayed in
box.info.cluster.name
(gh-5029). -
A new option
box.cfg.replicaset_name
allows assigning a human-readable name
to the replica set. It works the same asbox.cfg.replicaset_uuid
. Its value
must be the same across all instances of one replica set. The replica set name
is displayed inbox.info.replicaset.name
(gh-5029). -
A new option
box.cfg.instance_name
allows assigning a human-readable name to
the instance. It works the same asbox.cfg.instance_uuid
. Its value must be
unique in the replica set. The instance name is displayed inbox.info.name
.
Names of other replicas in the same replica set are visible in
box.info.replication[id].name
(gh-5029). -
Instance at rebootstrap can change its UUID while keeping its numeric ID if it
has the same non-empty instance name (gh-5029). -
Added the ability to set the
bootstrap_leader
configuration option to the
instance name of the desired bootstrap leader:box.cfg{ bootstrap_strategy = 'config', bootstrap_leader = 'leader-name', replication = { ... }, ... }
LuaJIT
- LuaJIT now can handle exceptions on traces (gh-7745).
Lua
- [Breaking change] Added the new
varbinary
type to Lua. An object of
this type is similar to a plain string but encoded in MsgPack asMP_BIN
so
it can be used for storing binary blobs in the database. This also works the
other way round: data fields stored asMP_BIN
are now decoded in Lua as
varbinary objects, not as plain strings, as they used to be. Since the latter
may cause compatibility issues, the new compat optionbinary_data_decoding
was introduced to revert the built-in decoder to the old behavior (gh-1629). - Introduced the new Lua module
trigger
. This module enables managing and
calling triggers stored in trigger registry (gh-8656). - Triggers from
space_object
,box.session
, andbox.ctl
were moved to
the trigger registry (gh-8657). - Introduced a new event 'tarantool.trigger.on_change' in the trigger registry.
It is called when any event in the trigger registry is modified (gh-8664). - Introduced helpers for encoding and decoding IPROTO packets in Lua (gh-8054).
- Any callable object can now be registered as a trigger (gh-6484).
- All triggers are now provided with optional names (gh-8659).
- Introduced the
login
andpassword
fields inuri.parse()
(gh-9435).
Msgpack
- Improved error reporting for
msgpack.decode
. Now, an error raised by
mgpack.decode
has a detailed error message and the offset in the input
data. Ifmsgpack.decode
failed to unpack a MsgPack extension, it also
includes the error cause pointing to the error in the extension data
(gh-7986).
Netbox
- Introduced the new
net.box
module functionfrom_fd
for creating a new
connection from a socket file descriptor number (gh-8984).
Popen
- Introduced new option
inherit_fds
forpopen.new
. The option takes
an array of file descriptor numbers that should be left open in the child
process (gh-8926).
Socket
- Introduced new socket functions
socket.socketpair
,socket.from_fd
, and
socket:detach
(gh-8927).
Xlog
- Introduced the
xlog.meta()
method for reading a meta block from an xlog
file.
SQL
- [Breaking change] The
DROP CONSTRAINT
statement has been
improved (gh-9112). - [Breaking change] Names in SQL are now case-sensitive. To support backward
compatibility, a second lookup using a name normalized using the old rules is
added (gh-4467). - [Breaking change] SQL now uses the BOX mechanism for default
values (gh-8793). - Introduced the
SHOW CREATE TABLE
statement (gh-8098). SHOW CREATE TABLE
no longer supports the DEFAULT clause (gh-8793).SQL_EXPR
functions can now be set as a default value (gh-8793).- A literal set as the default value can no longer have a
+
or-
sign unless
the literal is numeric (gh-8793).
Box
- [Breaking change] Dropped support for
IPROTO_CALL16
fromnet.box
(i.e., thecall_16
option and thecall_16
method fornet.box
connections) (gh-8636). - [Breaking change] Disabled argument list syntax of
box.tuple.new
(this
was needed for gh-4693). It is possible to switch to the old behavior using
the compatibility optionbox_tuple_new_vararg
. - [Breaking change] Introduced the new
sql
object type for
box.schema.user.grant
. Now only users with the'execute'
privilege
granted onsql
oruniverse
can execute SQL expressions with the
IPROTO_EXECUTE
orIPROTO_PREPARE
requests. To revert to the old behavior
(no SQL access checks), use thesql_priv
compat option (gh-8803). - Non-system spaces in a snapshot file are now sorted by their IDs.
As before, all non-system spaces are stored after system spaces (gh-7954). - Added support for square brackets in procedure resolution for Lua calls
(gh-8604). - Added support for accepting IPROTO requests with a space or index name instead
of an identifier (gh-8146). - Added a new
box.info
parameterhostname
(gh-8605). - Added the
box.cfg.memtx_sort_threads
parameter that specifies the number of
threads used to sort indexes keys on loading a memtx database. OpenMP is
not used to sort keys anymore (gh-3389). - Changed the output of the
fselect
index method from a table of strings to
a multi-line string and dropped theprint
anduse_nbsp
options. With the
yaml_pretty_multiline
compat option enabled by default, ...
2.11.2
Date: 2023-12-07
Tag: 2.11.2
Overview
2.11.2 is the 3rd stable version of the 2.11 release
series. It resolves 38 bugs since 2.11.1.
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.
Bugs fixed
Core
- Fixed a crash that could happen when inserting an index definition with an
empty parts list directly intobox.space._index
(gh-8688). - Fixed the memory leak on unpacking an invalid MsgPack error extension
(gh-8921). - Fixed a use-after-free bug in fiber recycling code (gh-9020).
- Fixed a use-after-free bug in iproto server code (gh-9037).
- Fixed a heap-buffer-overflow bug in fiber creation code (gh-9026).
- Eliminated implicit conversion of unprintable utf-8 strings to binary blobs
when encoded in YAML. Now unprintable characters are encoded as escaped utf-8
code points, for example,\x80
or\u200B
(gh-8756). - An error is no longer raised on an attempt to print a dead fiber (gh-4265).
- Fixed a possible out-of-bound write in debug build on unpacking a MsgPack
error extension (gh-9098). - Fixed a bug that caused a replication error after calling
box.schema.downgrade
(gh-9049). - Fixed a possible crash when unpacking an invalid MsgPack error extension
(gh-9136). - Fixed a wrong assertion in index comparators when comparing decimals with
floats greater than1e38
. The error was present only in the debug build.
Despite the failing assertion, the behavior after the assertion was correct
(gh-8472). - Fixed a bug that could result in the incorrect
space:bsize()
when altering
a primary index concurrently with DML operations (gh-9247). - Fixed a crash that happened while printing the stack trace on a stack
overflow bug (gh-9222). - Fixed the behavior of
log.cfg{modules = ...}
. Now, instead of merging the
new log modules configuration with the old one, it completely overwrites the
current configuration, which is consistent withbox.cfg{log_modules = ...}
(gh-7962). - Fixed a bug in the network buffer that could result in a crash when there are
a lot of pending requests (gh-9218) - Fixed a potential data corruption when the number of tuples in a hash index
is more than 2147483648 (gh-3594). - Fixed graceful shutdown break on init script exit (gh-9411).
- Fixed potential use-after-free on Tarantool shutdown with lingering
fiber join (gh-9406). - Fixed incorrect calculation of requests in progress in case of iproto
override fallback (gh-9345).
Replication
- Fixed a false-positive split-brain in a replica set on the first
promotion after an upgrade from versions before 2.10.1 (gh-8996). - Fixed replicas writing corrupted xlogs when appending data to a local space
from anon_replace
orbefore_replace
trigger on a global replicated space.
Such xlogs were unrecoverable and caused other nodes to break replication with
the replica (gh-8746, gh-8958). - Fixed a false-positive split-brain error when an old synchronous transaction
queue owner confirmed the same transactions which were already confirmed by
the new queue owner, or rolled back the same transactions which were rolled
back by the new queue owner (gh-9138).
LuaJIT
Backported patches from the vanilla LuaJIT trunk (gh-8825). The following issues
were fixed as part of this activity:
-
Prevent integer overflow while parsing long strings.
-
Fixed various
^
operator andmath.pow()
function inconsistencies. -
Fixed parsing with predicting
next()
andpairs()
. -
Fixed binary number literal parsing. Parsing of binary number with a zero
fractional part raises error too now. -
Fixed load forwarding optimization applied after table rehashing.
-
Fixed recording of the
BC_TSETM
. -
Fixed the panic routine when
mprotect
fails to change flags for mcode area. -
Fixed handling of instable types in TNEW/TDUP load forwarding.
-
Handled table unsinking in the presence of
IRFL_TAB_NOMM
. -
Fixed a bug when an error could be raised on the non-currently executed
coroutine (gh-6323).
Backported patches from the vanilla LuaJIT trunk (gh-9145). The following issues
were fixed as part of this activity: -
Fixed error handling after return from a child coroutine.
-
Fixed clashing of addresses in the
__call
metamethod return dispatch (again). -
Fixed the assembling for the head of the side trace (gh-8767).
-
Prevented compilation of
__concat
methamethod with tailcall to fast
function. -
Fixed buffer overflow in parsing the
#pragma
directive via FFI (gh-9339).
Now the error is thrown when more than 6 alignment settings are pushed on the
internal stack. -
Fixed incorrect fold rule for
x - (-0)
on trace (forx = -0
the result
should be0
). -
Fixed output for
IR_CONV
injit.dump()
. -
Fixed
math.min()
/math.max()
inconsistencies for x86/x86_64 architectures
when called with a NaN argument or-0
and0
. -
Fixed
math.ceil(x)
result sign for -1 < x < 0.5. -
Errors from gc finalizers are now printed instead of being rethrown.
-
Fixed
lua_concat()
. -
Fixed possible storing of NaN keys to table on trace.
-
Fixed ABC FOLD optimization with constants.
-
Marked
CONV
as non-weak, to prevent invalid control flow path choice. -
Fixed sysprof crash during stack unwinding for FFUNC (gh-8594).
Lua
- An error from a serializer function for cdata and userdata is not ignored now
(gh-9396).
Http client
- Fixed a streaming connection stuck if etcd is stopped
unexpectedly (gh-9086).
SQL
- Fixed a memory leak in a parser for a column's default rule (gh-9159).
- Fixed assertion in a debug build when a collation was added after an index
with more than one field (gh-9229). - Fixed a bug that in some cases would not assign collations to an index created
duringCREATE TABLE
(gh-9229). - The
EXISTS
predicate no longer requiresLIMIT 1
to work correctly if more
than one row is returned in the subselect (gh-8676).
Box
- The maximum length of
box.cfg{}
string parameters is now 512 to support a
lengthy args, such as list of audit events (ghe-523). - Fixed crashes if
box.info.memory()
,box.info.gc()
,box.info.vinyl()
,
andbox.info.sql()
are called beforebox.cfg{}
(gh-9173). - Added a
c_func_iproto_multireturn
option to thecompat
module. The new
behavior drops an additional array that wraps multiple results returned via
iproto (gh-4799). - Fixed a bug that allows downgrading from a schema version more recent than
a Tarantool version (gh-9182). - Fixed a bug when
on_shutdown
triggers weren't run ifos.exit()
was
called from-e
command-line option (gh-9266).
Net.box
- It is now possible to call stored Lua functions and C module functions with
require('net.box').self:call()
(gh-9131).
Misc
- Updated luarocks version to 3.9.2 to address rockspec security issues (gh-6587).
Testing
- Added a new flag
tarantool.build.asan
that shows whether build
flagENABLE_ASAN
is set. The flag is intended to ease tests
backporting from the master branch.
Tools
Debugger
- Introduced readline support to tarantool debugger (gh-7738).
3.0.0-beta1
Date: 2023-11-20
Tag: 3.0.0-beta1
Overview
3.0.0-beta1 is the beta version of the 3.0 release series.
This release introduces 95 new features and resolves 51 bugs since
the 2.11 version. There can be bugs in less common areas. If you find any,
feel free to report an issue on GitHub.
Notable changes are:
- New configuration capabilities (gh-8724)
- Fixes and improvements of the configuration process based on early adopters feedback.
Compatibility
Tarantool 3.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] Disabled DDL operations with an old system schema.
Now you have to runbox.schema.upgrade()
before you can execute any DDL
operations (gh-7149).
- Now
index_object.parts
contains the following methods, similar to the
key_def
Lua module:extract_key()
,compare()
,compare_with_key()
,
merge()
(gh-7356). - Introduced the
box.watch_once()
function to get the value currently
associated with a notification key on the local instance without subscribing
to future changes (gh-6493). - Introduced the new
IPROTO_WATCH_ONCE
request to get the value currently
associated with a notification key on a remote instance without subscribing
to future changes (gh-6493). - Introduced the
conn:watch_once()
net.box connection method to get the value
currently associated with a notification key on a remote instance without
subscribing to future changes. The new method is implemented using the
IPROTO_WATCH_ONCE
request type (gh-6493). - Introduced the default field values in the space format (gh-8157).
- Added support for functional variant of the default field values (gh-8609).
box.schema
can now be accessed beforebox.cfg()
.- Introduced new methods
tuple:info()
andspace:stat()
with the detailed
information on memory consumed by data (gh-6762).
Memtx
- Added memtx read view statistics to
box.stat.memtx()
(gh-8501).
Vinyl
- Introduced the
memory.tuple
statistic forbox.stat.vinyl()
that shows
the total size of memory occupied by all tuples allocated by the Vinyl engine
(gh-8485).
Replication
-
Added a new
bootstrap_leader
configuration option to specify the node from
which a replica should bootstrap. To do this, setbox.cfg.bootstrap_strategy
to'config'
and setbootstrap_leader
value to either the URI or UUID of
the desired bootstrap leader. For example:box.cfg{ bootstrap_strategy = 'config', bootstrap_leader = 'localhost:3301', replication = { 'localhost:3301', 'localhost:3302', }, listen = '3302', }
(gh-7999).
-
You may now control which node new replicas choose as a bootstrap leader
without touching node config. To do so, setbox.cfg.bootstrap_strategy
to
'supervised'
, and the nodes will only bootstrap off the node on which you
calledbox.ctl.make_bootstrap_leader()
last.
This works on an empty replica set bootstrap as well: start the admin console
before configuring the nodes. Then configure the nodes:box.cfg{ bootstrap_strategy = 'supervised', replication = ..., listen = ..., }
Finally, call
box.ctl.make_bootstrap_leader()
through the admin console
on the node you want to promote. All the nodes will bootstrap off that node
(gh-8509). -
A new option
box.cfg.cluster_name
allows assigning a human-readable name to
the entire cluster. It has to match in all instances and is displayed in
box.info.cluster.name
(gh-5029). -
A new option
box.cfg.replicaset_name
allows assigning a human-readable name
to the replicaset. It works the same asbox.cfg.replicaset_uuid
. Its value
must be the same across all instances of one replicaset. The replicaset name
is displayed inbox.info.replicaset.name
(gh-5029). -
A new option
box.cfg.instance_name
allows assigning a human-readable name to
the instance. It works the same asbox.cfg.instance_uuid
. Its value must be
unique in the replicaset. The instance name is displayed inbox.info.name
.
Names of other replicas in the same replicaset are visible in
box.info.replication[id].name
(gh-5029). -
Instance at rebootstrap can change its UUID while keeping its numeric ID if it
has the same non-empty instance name (gh-5029). -
Added the ability to set the
bootstrap_leader
configuration option to the
instance name of the desired bootstrap leader:box.cfg{ bootstrap_strategy = 'config', bootstrap_leader = 'leader-name', replication = { ... }, ... }
LuaJIT
- LuaJIT now can handle exceptions on traces (gh-7745).
Lua
- [Breaking change] Added the new
varbinary
type to Lua. An object of
this type is similar to a plain string but encoded in MsgPack asMP_BIN
so
it can be used for storing binary blobs in the database. This also works the
other way round: data fields stored asMP_BIN
are now decoded in Lua as
varbinary objects, not as plain strings, as they used to be. Since the latter
may cause compatibility issues, the new compat optionbinary_data_decoding
was introduced to revert the built-in decoder to the old behavior (gh-1629). - Introduced the new Lua module
trigger
. This module enables managing and
calling triggers stored in trigger registry (gh-8656). - Triggers from
space_object
,box.session
, andbox.ctl
were moved to
the trigger registry (gh-8657). - Introduced a new event
'tarantool.trigger.on_change'
in the trigger registry.
It is called when any event in the trigger registry is modified (gh-8664). - Introduced helpers for encoding and decoding IPROTO packets in Lua (gh-8054).
Msgpack
- Improved error reporting for
msgpack.decode
. Now, an error raised by
mgpack.decode
has a detailed error message and the offset in the input
data. Ifmsgpack.decode
failed to unpack a MsgPack extension, it also
includes the error cause pointing to the error in the extension data
(gh-7986).
Netbox
- Introduced the new
net.box
module functionfrom_fd
for creating a new
connection from a socket file descriptor number (gh-8984).
Popen
- Introduced new option
inherit_fds
forpopen.new
. The option takes
an array of file descriptor numbers that should be left open in the child
process (gh-8926).
Socket
- Introduced new socket functions
socket.socketpair
,socket.from_fd
, and
socket:detach
(gh-8927).
Xlog
- Introduced the
xlog.meta()
method for reading a meta block from an xlog
file.
SQL
- Introduced the
SHOW CREATE TABLE
statement (gh-8098). - [Breaking change] The
DROP CONSTRAINT
statement has been
improved (gh-9112). - [Breaking change] Names in SQL are now case sensitive. To support backward
compatibility, a second lookup using a name normalized using the old rules is
added (gh-4467). SHOW CREATE TABLE
no longer supports the DEFAULT clause (gh-8793).SQL_EXPR
functions can now be set as a default value (gh-8793).- A literal set as the default value can no longer have a
+
or-
sign unless
the literal is numeric (gh-8793). - [Breaking change] SQL now uses the
box
mechanism for default
values (gh-8793).
App
- Added the new
--force-recovery
CLI option (gh-8876).
Box
- Non-system spaces in a snapshot file are now sorted by their IDs.
As before, all non-system spaces are stored after system spaces (gh-7954). - [Breaking change] Dropped support for
IPROTO_CALL16
fromnet.box
(i.e., thecall_16
option and thecall_16
method fornet.box
connections) (gh-8636). - Added support for square brackets in procedure resolution for Lua calls
(gh-8604). - Added support for accepting IPROTO requests with a space or index name instead
of an identifier (gh-8146). - Added a new
box.info
parameterhostname
(gh-8605). - Added the
box.cfg.memtx_sort_threads
parameter that specifies the number of
threads used to sort indexes keys on loading a memtx database. OpenMP is
not used to sort keys anymore (gh-3389). - Changed the output of the
fselect
index method from a table of strings to
a multiline string and dropped theprint
anduse_nbsp
options. With the
yaml_pretty_multiline
compat option enabled by default, multiline strings
now look good in the console, so there's no need to return a table of strings
to prettify thefselect
output anymore. - Allowed multiple updates to the same tuple field in a single call (gh-8226).
- Introduced
box.tuple.format
that enables format definition for tuples
created viabox.tuple.new
(standalone tuples) (gh-4693). - [Breaking change] Disabled argument list syntax of
box.tuple.new
(this
was needed for gh-4693). It is possible to switch to the old behavior using
the compatibility optionbox_tuple_new_vararg
. - Sped up
index.select
andindex.pairs
with theafter
option by up to 30%
in a synthetic test by eliminating an extra buffer allocation. - The function
box.session.push
is now deprecated. Consider using
box.broadcast
instead (gh-8802). - Introduced the new function
box.session.new
for creating a new IPROTO
ses...
2.10.8
Date: 2023-09-14
Tag: 2.10.8
Overview
2.10.8 is the ninth stable version of the 2.10 release
series. It introduces 5 improvements and resolves 28 bugs since
2.10.7.
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
Box
- The maximum length of
box.cfg{}
string parameters is now 512 instead of 256.
Test
Fuzz
- LuaJIT now can be fuzzed using grammar-based fuzzer (gh-4823).
Build
- Hardening against memory corruption attacks is now enabled by default on
FreeBSD (gh-7536). - Added the CMake option
FIBER_STACK_SIZE
to set the default fiber stack size. - Updated libcurl to version 8.3.0.
Bugs fixed
Core
- Fixed a bug when Tarantool failed to decode a request containing an unknown
IPROTO key. The bug resulted in broken connectivity between Tarantool 2.10
and 2.11 (gh-8745). - Fixed a bug causing the
ER_CURSOR_NO_TRANSACTION
failure for transactions
on synchronous spaces when theon_commit/on_rollback
triggers are set
(gh-8505). - Fixed a bug causing the effective session and user are not propagated to
box.on_commit
andbox.on_rollback
trigger callbacks when transaction
is synchronous (gh-8742). - Fixed a crash that could happen when Tarantool is started in the
background mode
(gh-6128). - Fixed a bug when MVCC sometimes lost gap record (gh-8326).
- Fixed a bug when MVCC rollback of prepared statement could break internal
invariants (gh-8648). - Now MVCC engine automatically aborts a transaction if it reads changes
of a prepared transaction and this transaction is aborted (gh-8654). - Fixed a bug that caused writing incorrect values into the
stream_id
field
of xlog headers (gh-8783). - Fixed a bug when a space that is referenced by a foreign key could not
be truncated even if the referring space was empty (gh-8946). - Fixed a crash that could happen when Tarantool is compiled by
clang
version 15 and above with enabled AddressSanitizer
(tarantool/tarantool-qa#321). - Fixed a use-after-free bug in iproto server code (gh-9037).
- Fixed a heap-buffer-overflow bug in fiber creation code (gh-9026).
Memtx
- Fixed a heap-use-after-free bug in the transaction manager, which could occur
when performing a DDL operation concurrently with a transaction on the same
space (gh-8781).
Vinyl
- Fixed a heap-use-after-free bug in the Vinyl read iterator caused by a race
between a disk read and a memory dump task. The bug could lead to a crash or
an invalid query result (gh-8852).
Replication
- Fixed a possible failure to promote the desired node by
box.ctl.promote()
on
a cluster with nodes configured withelection_mode = "candidate"
(gh-8497). - Fixed nodes configured with
election_mode = 'candidate'
spuriously detecting
a split-vote when another candidate should win with exactly a quorum of votes
for it (gh-8698).
LuaJIT
Backported patches from the vanilla LuaJIT trunk (gh-8516). The following issues
were fixed as part of this activity:
-
Fixed canonicalization of +-0.0 keys for
IR_NEWREF
. -
Fixed result truncation for
bit.rol
on x86_64 platforms. -
Fixed
lua_yield()
invocation inside C hooks. -
Fixed memory chunk allocation beyond the memory limit.
-
Fixed TNEW load forwarding with instable types.
-
Fixed use-def analysis for
BC_VARG
,BC_FUNCV
.
Backported patches from the vanilla LuaJIT trunk (gh-8825). The following issues
were fixed as part of this activity: -
Fixed
BC_UCLO
insertion for returns. -
Fixed recording of
BC_VARG
with unused vararg values. -
Initialization instructions on trace are now emitted only for the first
member of a union. -
Prevent integer overflow while parsing long strings.
-
Fixed various
^
operator andmath.pow()
function inconsistencies. -
Fixed parsing with predicting
next()
andpairs()
. -
Fixed binary number literal parsing. Parsing of binary number with a zero
fractional part raises error too now. -
Fixed load forwarding optimization applied after table rehashing.
-
Fixed recording of the
BC_TSETM
.
Lua
- Fixed the xlog reader Lua module to show unknown row header fields. Before
this change the xlog reader silently skipped them.
Netbox
- Fixed a heap-use-after-free bug in the function creating a tuple format Lua
object fornet.box
(gh-8889).
Box
- Fixed the memory leaks caused by the multi-statement transaction errors in the
space index building and the space format checking operations (gh-8773). - Fixed a bug in the box console implementation because of
which thelanguage
parameter was shared between connected
clients (gh-8817). - Fixed an invalid memory access in a corner case of a specialized comparison
function (gh-8899).
Console
- Fixed console ignoring
-i
flag in case stdin is not a tty (gh-5064).
Datetime
- Fixed a bug raising a false positive error when creating new intervals with
range boundary values (gh-8878). - Fixed a bug with buffer overflow in tnt_strptime (gh-8502).
Http
- Fixed a streaming connection stuck if etcd is stopped
unexpectedly (gh-9086).
Msgpack
- Fixed decoding datetime intervals with fields larger than possible int32
values (gh-8887).
3.0.0-alpha3
Date: 2023-09-12
Tag: 3.0.0-alpha3
Overview
3.0.0-alpha3 is the alpha version of the 3.0 release series.
This release introduces 71 new features and resolves 23 bugs since
the 2.11.1 version. There can be bugs in less common areas. If you find any,
feel free to report an issue on GitHub.
Notable changes are:
- Added initial support of configuring vshard's storage and router roles in the
declarative configuration (gh-9007). - Fixes and improvements of the configuration process based on early adopters feedback.
- New config sections: metrics, feedback, vinyl, flightrec (EE), security (EE) (gh-8861).
- Added initial support of roles in the declarative configuration.
Compatibility
Tarantool 3.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] Disabled DDL operations with an old system schema.
Now you have to runbox.schema.upgrade()
before you can execute any DDL
operations (gh-7149).
- Now
index_object.parts
contains the following methods, similar to the
key_def
Lua module:extract_key()
,compare()
,compare_with_key()
,
merge()
(gh-7356). - Introduced the
box.watch_once()
function to get the value currently
associated with a notification key on the local instance without subscribing
to future changes (gh-6493). - Introduced the new
IPROTO_WATCH_ONCE
request to get the value currently
associated with a notification key on a remote instance without subscribing
to future changes (gh-6493). - Introduced the
conn:watch_once()
net.box connection method to get the value
currently associated with a notification key on a remote instance without
subscribing to future changes. The new method is implemented using the
IPROTO_WATCH_ONCE
request type (gh-6493). - Introduced the default field values in the space format (gh-8157).
- Added support for functional variant of the default field values (gh-8609).
Memtx
- Added memtx read view statistics to
box.stat.memtx()
(gh-8501).
Vinyl
- Introduced the
memory.tuple
statistic forbox.stat.vinyl()
that shows
the total size of memory occupied by all tuples allocated by the Vinyl engine
(gh-8485).
Replication
-
Added a new
bootstrap_leader
configuration option to specify the node from
which a replica should bootstrap. To do this, setbox.cfg.bootstrap_strategy
to'config'
and setbootstrap_leader
value to either the URI or UUID of
the desired bootstrap leader. For example:box.cfg{ bootstrap_strategy = 'config', bootstrap_leader = 'localhost:3301', replication = { 'localhost:3301', 'localhost:3302', }, listen = '3302', }
(gh-7999).
-
You may now control which node new replicas choose as a bootstrap leader
without touching node config. To do so, setbox.cfg.bootstrap_strategy
to
'supervised'
, and the nodes will only bootstrap off the node on which you
calledbox.ctl.make_bootstrap_leader()
last.
This works on an empty replica set bootstrap as well: start the admin console
before configuring the nodes. Then configure the nodes:box.cfg{ bootstrap_strategy = 'supervised', replication = ..., listen = ..., }
Finally, call
box.ctl.make_bootstrap_leader()
through the admin console
on the node you want to promote. All the nodes will bootstrap off that node
(gh-8509). -
A new option
box.cfg.cluster_name
allows assigning a human-readable name to
the entire cluster. It has to match in all instances and is displayed in
box.info.cluster.name
(gh-5029). -
A new option
box.cfg.replicaset_name
allows assigning a human-readable name
to the replicaset. It works the same asbox.cfg.replicaset_uuid
. Its value
must be the same across all instances of one replicaset. The replicaset name
is displayed inbox.info.replicaset.name
(gh-5029). -
A new option
box.cfg.instance_name
allows assigning a human-readable name to
the instance. It works the same asbox.cfg.instance_uuid
. Its value must be
unique in the replicaset. The instance name is displayed inbox.info.name
.
Names of other replicas in the same replicaset are visible in
box.info.replication[id].name
(gh-5029). -
Instance at rebootstrap can change its UUID while keeping its numeric ID if it
has the same non-empty instance name (gh-5029). -
Added the ability to set the
bootstrap_leader
configuration option to the
instance name of the desired bootstrap leader:box.cfg{ bootstrap_strategy = 'config', bootstrap_leader = 'leader-name', replication = { ... }, ... }
LuaJIT
- LuaJIT now can handle exceptions on traces (gh-7745).
Lua
- [Breaking change] Added the new
varbinary
type to Lua. An object of
this type is similar to a plain string but encoded in MsgPack asMP_BIN
so
it can be used for storing binary blobs in the database. This also works the
other way round: data fields stored asMP_BIN
are now decoded in Lua as
varbinary objects, not as plain strings, as they used to be. Since the latter
may cause compatibility issues, the new compat optionbinary_data_decoding
was introduced to revert the built-in decoder to the old behavior (gh-1629). - Introduced the new Lua module
trigger
. This module enables managing and
calling triggers stored in trigger registry (gh-8656).
Netbox
- Introduced the new
net.box
module functionfrom_fd
for creating a new
connection from a socket file descriptor number (gh-8984).
Popen
- Introduced new option
inherit_fds
forpopen.new
. The option takes
an array of file descriptor numbers that should be left open in the child
process (gh-8926).
Socket
- Introduced new socket functions
socket.socketpair
,socket.from_fd
, and
socket:detach
(gh-8927).
SQL
- Introduced the
SHOW CREATE TABLE
statement (gh-8098).
Box
- Non-system spaces in a snapshot file are now sorted by their IDs.
As before, all non-system spaces are stored after system spaces (gh-7954). - [Breaking change] Dropped support for
IPROTO_CALL16
fromnet.box
(i.e., thecall_16
option and thecall_16
method fornet.box
connections) (gh-8636). - Added support for square brackets in procedure resolution for Lua calls
(gh-8604). - Added support for accepting IPROTO requests with a space or index name instead
of an identifier (gh-8146). - Added a new
box.info
parameterhostname
(gh-8605). - Added the
box.cfg.memtx_sort_threads
parameter that specifies the number of
threads used to sort indexes keys on loading a memtx database. OpenMP is
not used to sort keys anymore (gh-3389). - Changed the output of the
fselect
index method from a table of strings to
a multi-line string and dropped theprint
anduse_nbsp
options. With the
yaml_pretty_multiline
compat option enabled by default, multi-line strings
now look good in the console, so there's no need to return a table of strings
to prettify thefselect
output anymore. - Allowed multiple updates to the same tuple field in a single call (gh-8226).
- Introduced
box.tuple.format
that enables format definition for tuples
created viabox.tuple.new
(standalone tuples) (gh-4693). - [Breaking change] Disabled argument list syntax of
box.tuple.new
(this
was needed for gh-4693). It is possible to switch to the old behavior using
the compatibility optionbox_tuple_new_vararg
. - Sped up
index.select
andindex.pairs
with theafter
option by up to 30%
in a synthetic test by eliminating an extra buffer allocation. - The function
box.session.push
is now deprecated. Consider using
box.broadcast
instead (gh-8802). - Introduced the new function
box.session.new
for creating a new IPROTO
session from a socket file descriptor number (gh-8801). - Introduced the new
lua_eval
andlua_call
object types for
box.schema.user.grant
. Granting the'execute'
privilege onlua_eval
allows the user to execute an arbitrary Lua expression with the
IPROTO_EVAL
request. Granting the'execute'
privilege onlua_call
allows the user to execute any global user-defined Lua function with
theIPROTO_CALL
request (gh-8803). - [Breaking change] Introduced the new
sql
object type for
box.schema.user.grant
. Now only users with the'execute'
privilege
granted onsql
oruniverse
can execute SQL expressions with the
IPROTO_EXECUTE
orIPROTO_PREPARE
requests. To revert to the old behavior
(no SQL access checks), use thesql_priv
compat option (gh-8803). - The maximum length of
box.cfg{}
string parameters is now 512 instead of 256. - Added a new flag
tarantool.build.asan
that shows whether build
flagENABLE_ASAN
is set. - Added the
leader_name
field tobox.info.election
(gh-8931).
Cli
- [Behavior change] Disabled starting the Lua REPL by default when running
Tarantool. Now, Tarantool yields the message that shows the command usage.
To run the Lua REPL, just set the-i
flag. To pass a Lua script contents via
stdin
, use dash (-
) as the script name. For more information see a help
message by running `tarantool ...
3.0.0-alpha2
Date: 2023-08-23
Tag: 3.0.0-alpha2
Overview
3.0.0-alpha2 is the alpha version of the 3.0 release series.
This release introduces 74 new features and resolves 87 bugs since
the 2.11.0 version. There can be bugs in less common areas. If you find any,
feel free to report an issue on GitHub.
Notable changes are:
- Added initial support of configuring vshard's storage and router roles in the
declarative configuration (gh-9007). - Fixes and improvements of the configuration process based on early adopters feedback.
- New config sections: metrics, feedback, vinyl, flightrec (EE), security (EE) (gh-8861).
Compatibility
Tarantool 3.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] Disabled DDL operations with an old system schema.
Now you have to runbox.schema.upgrade()
before you can execute any DDL
operations (gh-7149).
- The
_schema.max_id
field in thebox.space._schema
function is now deprecated.
Now the_space:max()
function is used instead of_schema.max_id
(gh-5997). - Added the new function
box.malloc.info()
for reporting memory usage of
Tarantool internal data structures allocated withmalloc()
. The function
is available only on Linux (gh-7311). - Now
index_object.parts
contains the following methods, similar to the
key_def
Lua module:extract_key()
,compare()
,compare_with_key()
,
merge()
(gh-7356). - Introduced the
box.watch_once()
function to get the value currently
associated with a notification key on the local instance without subscribing
to future changes (gh-6493). - Introduced the new
IPROTO_WATCH_ONCE
request to get the value currently
associated with a notification key on a remote instance without subscribing
to future changes (gh-6493). - Introduced the
conn:watch_once()
net.box connection method to get the value
currently associated with a notification key on a remote instance without
subscribing to future changes. The new method is implemented using the
IPROTO_WATCH_ONCE
request type (gh-6493). - Introduced the default field values in the space format (gh-8157).
- Added support for a functional variant of the default field values (gh-8609).
Memtx
- Added memtx read view statistics to
box.stat.memtx()
(gh-8501).
Replication
-
Added a new
bootstrap_leader
configuration option to specify the node from
which a replica should bootstrap. To do this, setbox.cfg.bootstrap_strategy
to'config'
and setbootstrap_leader
value to either the URI or UUID of
the desired bootstrap leader. For example:box.cfg{ bootstrap_strategy = 'config', bootstrap_leader = 'localhost:3301', replication = { 'localhost:3301', 'localhost:3302', }, listen = '3302', }
(gh-7999).
-
You may now control which node new replicas choose as a bootstrap leader
without touching node config. To do so, setbox.cfg.bootstrap_strategy
to
'supervised'
, and the nodes will only bootstrap off the node on which you
calledbox.ctl.make_bootstrap_leader()
last.
This works on an empty replica set bootstrap as well: start the admin console
before configuring the nodes. Then configure the nodes:box.cfg{ bootstrap_strategy = 'supervised', replication = ..., listen = ..., }
Finally, call
box.ctl.make_bootstrap_leader()
through the admin console
on the node you want to promote. All the nodes will bootstrap off that node
(gh-8509). -
A new option
box.cfg.cluster_name
allows assigning a human-readable name to
the entire cluster. It has to match in all instances and is displayed in
box.info.cluster.name
(gh-5029). -
A new option
box.cfg.replicaset_name
allows assigning a human-readable name
to the replicaset. It works the same asbox.cfg.replicaset_uuid
. Its value
must be the same across all instances of one replicaset. The replicaset name
is displayed inbox.info.replicaset.name
(gh-5029). -
A new option
box.cfg.instance_name
allows assigning a human-readable name to
the instance. It works the same asbox.cfg.instance_uuid
. Its value must be
unique in the replicaset. The instance name is displayed inbox.info.name
.
Names of other replicas in the same replicaset are visible in
box.info.replication[id].name
(gh-5029). -
Instance at rebootstrap can change its UUID while keeping its numeric ID if it
has the same non-empty instance name (gh-5029). -
Added the ability to set the
bootstrap_leader
configuration option to the
instance name of the desired bootstrap leader:box.cfg{ bootstrap_strategy = 'config', bootstrap_leader = 'leader-name', replication = { ... }, ... }
-
Implemented correct recovery of mixed transactions. To do this, set
box.cfg.force_recovery
totrue
. If you need to revert to the old
behavior, don't set theforce_recovery
option (gh-7932).
LuaJIT
- LuaJIT now can handle exceptions on traces (gh-7745).
Lua
- Embedded the
tarantool/metrics
module for metrics aggregation and export (gh-7725). - Metrics can now be configured using the
box.cfg()
function (gh-7725). - [Breaking change] Added the new
varbinary
type to Lua. An object of
this type is similar to a plain string but encoded in MsgPack asMP_BIN
so
it can be used for storing binary blobs in the database. This also works the
other way round: data fields stored asMP_BIN
are now decoded in Lua as
varbinary objects, not as plain strings, as they used to be. Since the latter
may cause compatibility issues, the new compat optionbinary_data_decoding
was introduced to revert the built-in decoder to the old behavior (gh-1629). - Added the
:is_new()
and:is_old()
helpers totarantool.compat
options to simplify effective value checks (gh-8807).
Netbox
- Introduced the new
net.box
module functionfrom_fd
for creating a new
connection from a socket file descriptor number (gh-8984).
Popen
- Introduced new option
inherit_fds
forpopen.new
. The option takes
an array of file descriptor numbers that should be left open in the child
process (gh-8926).
Socket
- Introduced new socket functions
socket.socketpair
,socket.from_fd
, and
socket:detach
(gh-8927).
SQL
- Introduced the
SHOW CREATE TABLE
statement (gh-8098).
Box
- Non-system spaces in a snapshot file are now sorted by their IDs.
As before, all non-system spaces are stored after system spaces (gh-7954). - [Breaking change] Dropped support for
IPROTO_CALL16
fromnet.box
(i.e., thecall_16
option and thecall_16
method fornet.box
connections) (gh-8636). - Added support for square brackets in procedure resolution for Lua calls
(gh-8604). - Added support for accepting IPROTO requests with a space or index name instead
of an identifier (gh-8146). - Added a new
box.info
parameterhostname
(gh-8605). - Added the
box.cfg.memtx_sort_threads
parameter that specifies the number of
threads used to sort indexes keys on loading a memtx database. OpenMP is
not used to sort keys anymore (gh-3389). - Changed the output of the
fselect
index method from a table of strings to
a multi-line string and dropped theprint
anduse_nbsp
options. With the
yaml_pretty_multiline
compat option enabled by default, multi-line strings
now look good in the console, so there's no need to return a table of strings
to prettify thefselect
output anymore. - Allowed multiple updates to the same tuple field in a single call (gh-8226).
- Introduced
box.tuple.format
that enables format definition for tuples
created viabox.tuple.new
(standalone tuples) (gh-4693). - [Breaking change] Disabled argument list syntax of
box.tuple.new
(this
was needed for gh-4693). It is possible to switch to the old behavior using
the compatibility optionbox_tuple_new_vararg
. - Allowed truncation of temporary and local spaces in the read-only mode
(gh-5616). - Sped up
index.select
andindex.pairs
with theafter
option by up to 30%
in a synthetic test by eliminating an extra buffer allocation. - The function
box.session.push
is now deprecated. Consider using
box.broadcast
instead (gh-8802). - Introduced the new function
box.session.new
for creating a new IPROTO
session from a socket file descriptor number (gh-8801). - Introduced the new
lua_eval
andlua_call
object types for
box.schema.user.grant
. Granting the'execute'
privilege onlua_eval
allows the user to execute an arbitrary Lua expression with the
IPROTO_EVAL
request. Granting the'execute'
privilege onlua_call
allows the user to execute any global user-defined Lua function with
theIPROTO_CALL
request (gh-8803). - [Breaking change] Introduced the new
sql
object type for
box.schema.user.grant
. Now only users with the'execute'
privilege
granted onsql
oruniverse
can execute SQL expressions with the
IPROTO_EXECUTE
orIPROTO_PREPARE
requests. To revert to the old behavior
(no SQL access checks), use thesql_priv
compat option (gh-8803).
Cfg
- Implemented a way to set a table a...