Skip to content

Releases: tarantool/tarantool

2.11.3

18 Apr 09:00
Compare
Choose a tag to compare

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)
version
release_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 the replication_synchro_quorum was set too
    high on the replica, it would never be reached. After the timeout was
    triggered, the user received a TimedOut 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 when box_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 the TT_LISTEN and TT_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 across IR_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 a BC_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() with nil 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() and lua_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
    of net.box connections when an error is thrown and the actual behavior
    (gh-9717).
  • Fixed a bug in the on_disconnect trigger of net.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 of net.box connections when an
    error is thrown is now consistent with the behavior of the on_disconnect
    trigger (gh-9679).
  • Fixed a bug when a net.box connection remained active after being closed
    from the connection's on_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 a GROUP 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 commit 3370f85 to fix compatibility with
    luatest commit d985997.

Tools

  • Added the --human-readable option for the misc.memprof parser to print
    sizes like 1KiB, 234MiB, 2GiB, etc.
    Made the errors from the profilers more user-friendly (gh-9217).

3.1.0

16 Apr 21:11
Compare
Choose a tag to compare

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 module trigger, for example:
    local trigger = require('trigger')
    trigger.set('box.iproto.override.select', 'my_select', my_select_handler)
    The method works before the initial 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 with CRITICAL level (gh-8138).
  • Added a new flag tarantool.build.test_build that shows whether a build
    flag TEST_BUILD is set.
  • Hide redundant fields from box.error.unpack() if
    the box_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 to box.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 of box.error.new
    (gh-9102).
  • Added a prev argument to the table constructor of box.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.errors serialization and added a new
    box_error_serialize_verbose option to compat to retain old behaviour
    (gh-9105).
  • Added autocompletion (including payload fields) to box.error (gh-9107).
  • Added the level argument to box.error and box.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-in metrics.

Http client

  • Added the http_version option to the request(), post(),
    get() and other request functions from the http.client module (gh-9806).

Config

  • Added new config.etcd options watchers.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 the instance option to
    config:get() (gh-9680).
  • Introduced the instance_uri() method for the config module (gh-9842).

Experimental

  • Introduced the experimental.connpool module and the
    connect() function of this module (gh-9842).
  • Introduced the filter() function in the experimental.connpool
    module (gh-9842).
  • Introduced the call() function in the experimental.connpool
    module (gh-9842).
  • Introduced the mode option for the filter() and call() functions
    in the experimental.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 or on_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 the tt 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 the misc.memprof parser to print
    sizes like 1KiB, 234MiB, 2GiB, etc.
    Made the errors from the profilers more user-friendly (gh-9217).

3.0.2

16 Apr 21:14
Compare
Choose a tag to compare

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() with nil 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() and lua_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
    of net.box connections when an error is thrown and the actual behavior
    (gh-9717).
  • Fixed a bug in the on_disconnect trigger of net.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 of net.box connections when an
    error is thrown is now consistent with the behavior of the on_disconnect
    trigger (gh-9679).
  • Fixed a bug when a net.box connection remained active after being closed
    from the connection's on_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-dynamic box.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 commit 3370f85 to fix compatibility with
    luatest commit d985997.

Tools

  • tarantoolctl has been removed. Systemd, sysvinit and logrotate scripts
    based on it were also removed. All this functionality is covered by the tt
    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 the misc.memprof parser to print
    sizes like 1KiB, 234MiB, 2GiB, etc.
    Made the errors from the profilers more user-friendly (gh-9217).

3.0.1

26 Jan 10:13
Compare
Choose a tag to compare

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

26 Dec 12:12
Compare
Choose a tag to compare

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() and space: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,
    and box.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 for box.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, set box.cfg.bootstrap_strategy
    to 'config' and set bootstrap_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, set box.cfg.bootstrap_strategy to
    'supervised', and the nodes will only bootstrap off the node on which you
    called box.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 as box.cfg.replicaset_uuid. Its value
    must be the same across all instances of one replica set. The replica set name
    is displayed in box.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 as box.cfg.instance_uuid. Its value must be
    unique in the replica set. The instance name is displayed in box.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 = {
              ...
          },
          ...
      }

    (gh-7999, gh-8539).

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 as MP_BIN so
    it can be used for storing binary blobs in the database. This also works the
    other way round: data fields stored as MP_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 option binary_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, and box.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 and password fields in uri.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. If msgpack.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 function from_fd for creating a new
    connection from a socket file descriptor number (gh-8984).

Popen

  • Introduced new option inherit_fds for popen.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 from net.box
    (i.e., the call_16 option and the call_16 method for net.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 option box_tuple_new_vararg.
  • [Breaking change] Introduced the new sql object type for
    box.schema.user.grant. Now only users with the 'execute' privilege
    granted on sql or universe can execute SQL expressions with the
    IPROTO_EXECUTE or IPROTO_PREPARE requests. To revert to the old behavior
    (no SQL access checks), use the sql_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 parameter hostname (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 the print and use_nbsp options. With the
    yaml_pretty_multiline compat option enabled by default, ...
Read more

2.11.2

07 Dec 14:06
Compare
Choose a tag to compare

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 into box.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 than 1e38. 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 with box.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 an on_replace or before_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 and math.pow() function inconsistencies.

  • Fixed parsing with predicting next() and pairs().

  • 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 (for x = -0 the result
    should be 0).

  • Fixed output for IR_CONV in jit.dump().

  • Fixed math.min()/math.max() inconsistencies for x86/x86_64 architectures
    when called with a NaN argument or -0 and 0.

  • 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
    during CREATE TABLE (gh-9229).
  • The EXISTS predicate no longer requires LIMIT 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(),
    and box.info.sql() are called before box.cfg{} (gh-9173).
  • Added a c_func_iproto_multireturn option to the compat 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 if os.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
    flag ENABLE_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

20 Nov 12:00
Compare
Choose a tag to compare
3.0.0-beta1 Pre-release
Pre-release

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 run box.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 before box.cfg().
  • Introduced new methods tuple:info() and space: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 for box.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, set box.cfg.bootstrap_strategy
    to 'config' and set bootstrap_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, set box.cfg.bootstrap_strategy to
    'supervised', and the nodes will only bootstrap off the node on which you
    called box.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 as box.cfg.replicaset_uuid. Its value
    must be the same across all instances of one replicaset. The replicaset name
    is displayed in box.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 as box.cfg.instance_uuid. Its value must be
    unique in the replicaset. The instance name is displayed in box.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 = {
              ...
          },
          ...
      }

    (gh-7999, gh-8539).

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 as MP_BIN so
    it can be used for storing binary blobs in the database. This also works the
    other way round: data fields stored as MP_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 option binary_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, and box.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. If msgpack.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 function from_fd for creating a new
    connection from a socket file descriptor number (gh-8984).

Popen

  • Introduced new option inherit_fds for popen.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 from net.box
    (i.e., the call_16 option and the call_16 method for net.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 parameter hostname (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 the print and use_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 the fselect 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 via box.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 option box_tuple_new_vararg.
  • Sped up index.select and index.pairs with the after 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...
Read more

2.10.8

14 Sep 09:46
Compare
Choose a tag to compare

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 the on_commit/on_rollback triggers are set
    (gh-8505).
  • Fixed a bug causing the effective session and user are not propagated to
    box.on_commit and box.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 with election_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 and math.pow() function inconsistencies.

  • Fixed parsing with predicting next() and pairs().

  • 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 for net.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 the language 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

12 Sep 08:09
Compare
Choose a tag to compare
3.0.0-alpha3 Pre-release
Pre-release

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 run box.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 for box.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, set box.cfg.bootstrap_strategy
    to 'config' and set bootstrap_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, set box.cfg.bootstrap_strategy to
    'supervised', and the nodes will only bootstrap off the node on which you
    called box.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 as box.cfg.replicaset_uuid. Its value
    must be the same across all instances of one replicaset. The replicaset name
    is displayed in box.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 as box.cfg.instance_uuid. Its value must be
    unique in the replicaset. The instance name is displayed in box.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 = {
              ...
          },
          ...
      }

    (gh-7999, gh-8539).

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 as MP_BIN so
    it can be used for storing binary blobs in the database. This also works the
    other way round: data fields stored as MP_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 option binary_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 function from_fd for creating a new
    connection from a socket file descriptor number (gh-8984).

Popen

  • Introduced new option inherit_fds for popen.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 from net.box
    (i.e., the call_16 option and the call_16 method for net.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 parameter hostname (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 the print and use_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 the fselect 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 via box.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 option box_tuple_new_vararg.
  • Sped up index.select and index.pairs with the after 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 and lua_call object types for
    box.schema.user.grant. Granting the 'execute' privilege on lua_eval
    allows the user to execute an arbitrary Lua expression with the
    IPROTO_EVAL request. Granting the 'execute' privilege on lua_call
    allows the user to execute any global user-defined Lua function with
    the IPROTO_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 on sql or universe can execute SQL expressions with the
    IPROTO_EXECUTE or IPROTO_PREPARE requests. To revert to the old behavior
    (no SQL access checks), use the sql_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
    flag ENABLE_ASAN is set.
  • Added the leader_name field to box.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 ...
Read more

3.0.0-alpha2

23 Aug 14:40
Compare
Choose a tag to compare
3.0.0-alpha2 Pre-release
Pre-release

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 run box.schema.upgrade() before you can execute any DDL
    operations (gh-7149).
  • The _schema.max_id field in the box.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 with malloc(). 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, set box.cfg.bootstrap_strategy
    to 'config' and set bootstrap_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, set box.cfg.bootstrap_strategy to
    'supervised', and the nodes will only bootstrap off the node on which you
    called box.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 as box.cfg.replicaset_uuid. Its value
    must be the same across all instances of one replicaset. The replicaset name
    is displayed in box.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 as box.cfg.instance_uuid. Its value must be
    unique in the replicaset. The instance name is displayed in box.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 = {
              ...
          },
          ...
      }

    (gh-7999, gh-8539).

  • Implemented correct recovery of mixed transactions. To do this, set
    box.cfg.force_recovery to true. If you need to revert to the old
    behavior, don't set the force_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 as MP_BIN so
    it can be used for storing binary blobs in the database. This also works the
    other way round: data fields stored as MP_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 option binary_data_decoding
    was introduced to revert the built-in decoder to the old behavior (gh-1629).
  • Added the :is_new() and :is_old() helpers to tarantool.compat
    options to simplify effective value checks (gh-8807).

Netbox

  • Introduced the new net.box module function from_fd for creating a new
    connection from a socket file descriptor number (gh-8984).

Popen

  • Introduced new option inherit_fds for popen.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 from net.box
    (i.e., the call_16 option and the call_16 method for net.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 parameter hostname (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 the print and use_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 the fselect 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 via box.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 option box_tuple_new_vararg.
  • Allowed truncation of temporary and local spaces in the read-only mode
    (gh-5616).
  • Sped up index.select and index.pairs with the after 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 and lua_call object types for
    box.schema.user.grant. Granting the 'execute' privilege on lua_eval
    allows the user to execute an arbitrary Lua expression with the
    IPROTO_EVAL request. Granting the 'execute' privilege on lua_call
    allows the user to execute any global user-defined Lua function with
    the IPROTO_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 on sql or universe can execute SQL expressions with the
    IPROTO_EXECUTE or IPROTO_PREPARE requests. To revert to the old behavior
    (no SQL access checks), use the sql_priv compat option (gh-8803).

Cfg

  • Implemented a way to set a table a...
Read more