Примечания к версиям
Примечания к версиям

Примечания к версиям

Примечания к версиям

The Release Notes are summaries of significant changes introduced in Tarantool 2.2.1, 2.1.2, 2.1.1, 2.0.4, 1.10.4, 1.10.3, 1.10.2, 1.9.0, 1.8.1, 1.7.6, 1.7.5, 1.7.4, 1.7.3, 1.7.2, 1.7.1, 1.6.9, 1.6.8, and 1.6.6.

Более мелкие изменения и исправления дефектов указаны в отчетах о выпущенных стабильных релизах (milestone = closed) на GitHub.

Версия 2.x

Tarantool 2.x is backward compatible with Tarantool 1.10.x in binary data layout, client-server protocol and replication protocol. You can upgrade using the box.schema.upgrade() procedure.

Release 2.2.1

Release type: beta. Release date: 2019-08-02.

Announcement: https://github.com/tarantool/tarantool/releases/tag/2.2.1.

This is a beta version of the 2.2 series. The label «beta» means we have no critical issues and all planned features are there.

The goal of this release is to introduce new indexing features, extend SQL feature set, and improve integration with the core.

Изменения или добавления функциональности:

  • (SQL) ALTER now allows to add a constraint:

  • (SQL) CHECK constraints are validated during DML operations performed from the Lua land:

    s = box.schema.space.create('withdata')
    pk = s:create_index('pk')
    s:format({{'idx', 'number'}})
    s:create_check_constraint('le10', '"idx" < 10')
    tarantool> s:insert({11})
    - error: 'Check constraint failed ''le10'': "idx" < 10'
  • (SQL) New SQL types introduced: VARBINARY, UNSIGNED, and BOOLEAN.

  • (SQL) CREATE TABLE statement (and all other data definition statements) are now truly transactional.

  • (SQL) SQL now uses Tarantool diagnostics API to set errors, so error reporting now provides an error code in addition to error message.

  • (SQL) Multiple improvements to the type system to make it more consistent.

  • (SQL) Added aliases for LENGTH() from ANSI SQL: CHAR_LENGTH() and CHARACTER_LENGTH().

  • (SQL) It is possible to use HAVING without GROUP BY.

  • (Server) New fixed point type (DECIMAL) introduced to Tarantool:

    decimal = require('decimal')
    tarantool> a = decimal.new('123.456789')
    tarantool> decimal.precision(a)
    - 9
    tarantool> decimal.scale(a)
    - 6
    tarantool> decimal.round(a, 4)
    - '123.4568'
  • (Server) Multikey index support:

    -- Multikey indexes (for memtx tree & vinyl);
    -- cannot be primary; may be non-unique
    s = box.schema.space.create('clients', {engine = 'vinyl'})
    pk = s:create_index('pk')
    phone_type = s:create_index('phone_type', {
        unique = false,
        parts = {{'[3][*].type', 'str'}}})
    s:insert({1, 'James',
             {{type = 'home', number = '999'},
              {type = 'work', number = '777'}
    s:insert({2, 'Bob',
              {{type = 'work', number = '888'}}})
    s:insert({3, 'Alice', {{type = 'home', number = '333'}}})
    tarantool> phone_type:select('work')
    - - [1, 'James', [{'type': 'home', 'number': '999'},
                      {'type': 'work', 'number': '777'}]]
      - [2, 'Bob', [{'type': 'work', 'number': '888'}]]
  • (Server) Now it is possible to make functions persistent:

                          {body = [[function(a,b) return a+b end]],
                          is_deterministic = true})
    tarantool> box.func.summarize
    - aggregate: none
      returns: any
        lua: true
        sql: false
      id: 66
      is_sandboxed: false
      setuid: false
      is_multikey: false
      is_deterministic: true
      body: function(a,b) return a+b end
      name: summarize
      language: LUA
    tarantool> box.func.summarize:call({1, 2})
    - 3
  • (Server) Functional indexes implemented:

    -- Functional multikey indexes: define is_multikey = true
    -- in function definition and return a table of keys from function
    lua_code = [[function(tuple)
                    local address = string.split(tuple[2])
                    local ret = {}
                    for _, v in pairs(address) do table.insert(ret, {utf8.upper(v)}) end
                    return ret
    box.schema.func.create('addr_extractor', {body = lua_code,
                                              is_deterministic = true,
                                              is_sandboxed = true,
                                              opts = {is_multikey = true}})
    s = box.schema.space.create('withdata')
    pk = s:create_index('name', {parts = {1, 'string'}})
    idx = s:create_index('addr', {unique = false, func = box.func.addr_extractor.id, parts = {{1, 'string', collation = 'unicode_ci'}}})
    s:insert({"James", "SIS Building Lambeth London UK"})
    s:insert({"Sherlock", "221B Baker St Marylebone London NW1 6XE UK"})
    tarantool>  idx:select('Sis')
    - - ['James', 'SIS Building Lambeth London UK']
  • Partial core dumps, which are now on by default. It is now possible to avoid dumping tuples at all during core dump.

  • Data definition statements, such as create or alter index, which do not yield, can now be used in a transaction. This in practice includes all statements except creating an index on a non-empty space, or changing a format on a non-empty space.

  • It is now possible to set a sequence not only for the first part of the index:

    s.index.pk:alter{sequence = {field = 2}}
  • Allow to call box.session.exists() and box.session.fd() without any arguments.

  • New function introduced to get an index key from a tuple:

    s = box.schema.space.create('withdata')
    pk = s:create_index('pk')
    sk = s:create_index('sk', {parts = {
          {2, 'number', path = 'a'},
          {2, 'number', path = 'b'}}})
    s:insert{1, {a = 1, b = 1}}
    s:insert{2, {a = 1, b = 2}}
    s:insert{3, {a = 3, b = 3}}
    key_def_lib = require('key_def')
    key_def = key_def_lib.new(pk.parts)
    for _, tuple in sk:pairs({1}) do
        local key = key_def:extract_key(tuple)
  • (Engines) New protocol (called SWIM) implemented to keep a table of cluster members.

  • (Engines) Removed yields from Vinyl DDL on commit triggers.

  • (Engines) Improved performance of SELECT-s on memtx spaces. The drawback is that now every memtx-tree tuple consumes extra 8 bytes for a search hint.

  • (Engines) Indexes of memtx spaces are now built in background fibers. This means that we do not block the event loop during index build anymore.

  • Replication applier now can apply transactions which were concurrent on the master concurrently on replica. This dramatically improves replication peak performance, from ~50K writes per second to 200K writes per second and higher on a single instance.

  • Transaction boundaries introduced to replication protocol. This means that Tarantool replication is now transaction-safe, and also reduces load on replica write ahead log in case the master uses a lot of multi-statement transactions.

  • Tuple access by field name for net.box:

    box.cfg{listen = 3302}
    box.schema.user.grant('guest','read, write, execute', 'space')
    box.schema.user.grant('guest', 'create', 'space')
    box.schema.create_space("named", {format = {{name = "id"}}})
    box.space.named:create_index('id', {parts = {{1, 'unsigned'}}})
    require('net.box').connect('localhost', 3302).space.named:get(1).id
  • Cluster id check is now the slave’s responsibility.

  • It is now possible to set the output format to Lua instead of YAML in the interactive console.

  • Multiple new collations added. New collations follow this naming pattern:


    Three strengths are used:

    • Primary - «s1”
    • Secondary - «s2»
    • Tertiary - «s3»

    The following list contains so-called «stable» collations - the ones whose sort order doesn’t depend on the ICU version:

  • New function utime() introduced to the fio module.

  • Merger for tuples streams added.

Release 2.1.2

Release type: stable. Release date: 2019-04-05.

Announcement: https://github.com/tarantool/tarantool/releases/tag/2.1.2.

This is the first stable release in the 2.x series.

The goal of this release is to significantly extend SQL support and increase stability.

Изменения или добавления функциональности:

  • (SQL) box.sql.execute() replaced with box.execute(). It now works just like netbox.execute(): returns result set metadata, row count, etc. E.g.:

    box.execute("CREATE TABLE person(id INTEGER PRIMARY KEY, birth_year INT)")
    - row_count: 1
    box.execute("SELECT birth_year FROM person")
    - metadata:
      - name: birth_year
        type: INTEGER
      - [1983]
      - [1984]
  • (SQL) Type system was significantly refactored.

  • (SQL) There are cases in SQL when it is possible to do Tarantool’s update operation for UPDATE statement, instead of doing delete + insert. However, there are cases where SQL semantics is too complex. E.g.:

    CREATE TABLE file (id INT PRIMARY KEY, checksum INT);
    INSERT INTO stock VALUES (1, 3),(2, 4),(3,5);
    CREATE UNIQUE INDEX i ON file (checksum);
    SELECT * FROM file;
    -- [1, 3], [2, 4], [3, 5]
    UPDATE OR REPLACE file SET checksum = checksum + 1;
    SELECT * FROM stock;
    -- [1, 4], [3, 6]

    I.e. [1, 3] tuple is updated as [1, 4] and have replaced tuple [2, 4]. This logic is implemented by preventive tuple deletion from all corresponding indexes in SQL.

  • (SQL) Now SQL’s integer type is stored as integer in space’s format. It was stored as scalar before, which made comarisons slow.

  • (SQL) It is now possible to define a constraint within column definition. E.g.:

    CREATE TABLE person (id INT PRIMARY KEY, age INT, CHECK (age > 10));
  • (SQL) Syntax for the pragma pragma index_info is now unified with table_info. E.g. to get information on index age_index of table person you can write:

    pragma index_info(person.age_index);
  • (Server) It is now possible to index a field specified using JSON. E.g.:

    person = box.schema.create_space("person")
    name_idx = person:create_index('name', {parts = {{'[2]fname', 'str'}, {'[2]sname', 'str'}}})
    person:insert({1, {fname='James', sname='Bond'}, {town='London', country='GB', organization='MI6'}})
  • (Server) In case of out of space event, Tarantool is now allowed to delete backup WAL files not needed for recovery from the last checkpoint.

  • (Server) Add support for tarantoolctl rocks pack / unpack subcommands. The subcommands are used to create / deploy binary rock distributions.

  • (Server) string.rstrip and string.lstrip should accept symbols to strip. Add optional „chars“ parameter for specifying the unwanted characters. E.g.:

    local chars = "#\0"
    str = "##Hello world!#"
    print(string.strip(str, chars)) -- "Hello world!"
  • (Server) on_shutdown trigger added. It may be set in a way similar to space:on_replace triggers:

    box.ctl.on_shutdown(new_trigger, old_trigger)
  • (Server) on_schema_init trigger added. It may be set before the first call to box.cfg() and is fired during box.cfg() before user data recovery start. To set the trigger, say:

    box.ctl.on_schema_init(new_trig, old_trig)
  • (Server) A new option for the snapshot daemon, box.cfg.checkpoint_wal_threshold, allows to limit the maximum disk size of maintained WALs. Once the configured threshold is exceeded, the WAL thread notifies the checkpoint daemon that it’s time to make a new checkpoint and delete old WAL files.

  • (Server) New types of privileges – to create, alter and drop space – were introduced. In order to create, drop or alter space or index, you should have a corresponding privilege. E.g.:

    box.schema.user.create("optimizer", { password  = 'secret' })
    box.schema.user.grant("optimizer", "alter", "space")
    person = box.schema.space.create("person")
    i = s:create_index("primary") -- success
    s:insert{1} -- fail
    s:select{} -- fail
    s:drop() -- fail

    Notice the incompatible change: Tarantool 1.10 requires read/write/execute privileges on an object to allow create, drop or alter. These privileges are no longer sufficient in 2.1. To remedy the problem, Tarantool 2.1 automatically grants create/drop/alter privileges on an object if a user has read/write/execute privileges on it during schema upgrade. But old scripts may stop working if read/write/execute is granted after schema upgrade.

    Additionally, create/drop/alter privileges are already supported in 1.10, which also supports the old semantics of read/write/execute. You are encouraged to grant new privileges in 1.10 before upgrade and modify your scripts.

Release 2.1.1

Тип версии: альфа. Дата выхода: 2018-11-14.

Announcement: https://github.com/tarantool/tarantool/releases/tag/2.1.1.

В данной версии исправлены все значимые ошибки альфа-версии 2.0.4 и расширен набор SQL-функций Tarantool’а.

Версия 2.0.4

Тип версии: альфа. Дата выхода: 2018-02-15.

Объявление о выходе: https://github.com/tarantool/tarantool/releases/tag/2.0.4.

Эта версия следует за версиями 1.8.x. В ней увеличена общая стабильность SQL-движка и появились некоторые новые функции.

Изменения или добавления функциональности:

  • Добавлена поддержка сортировки SQL путем добавления набора символов libICU и библиотеки сортировки.
  • Расширение интерфейса IPROTO для поддержки запросов SQL.
  • Расширение подсистемы net.box для поддержки запросов SQL.
  • Включение оператора ANALYZE, чтобы получать правильные результаты, необходимые для эффективных планов запросов.
  • Добавление точек сохранения. Запрос SAVEPOINT работает без ошибок.
  • Добавление запроса ALTER TABLE ... RENAME.
  • Улучшение правил для имен идентификаторов: теперь полностью согласуются с интерфейсом на Lua.
  • Поддержка триггеров; структура триггера тела теперь сохраняется в снимках Tarantool’а и переживают перезапуск сервера.
  • Значительное улучшение производительности.

Версия 1.10

Release 1.10.4

Release type: stable (lts). Release date: 2019-09-26. Tag: 1-10-4.

Announcement: https://github.com/tarantool/tarantool/releases/tag/1.10.4.


1.10.4 is the next stable (lts) release in the 1.10 series. The label „stable“ means we have had systems running in production without known crashes, bad results or other showstopper bugs for quite a while now.

This release resolves about 50 issues since 1.10.3.


Tarantool 1.10.x is backward compatible with Tarantool 1.9.x in binary data layout, client-server protocol and replication protocol. Please upgrade using the box.schema.upgrade() procedure to unlock all the new features of the 1.10.x series when migrating from 1.9 version.

Functionality added or changed

  • (Engines) Improve dump start/stop logging. When initiating memory dump, print how much memory is going to be dumped, expected dump rate, ETA, and the recent write rate. Upon dump completion, print observed dump rate in addition to dump size and duration.

  • (Engines) Look up key in reader thread. If a key isn’t found in the tuple cache, we fetch it from a run file. In this case disk read and page decompression is done by a reader thread, however key lookup in the fetched page is still performed by the TX thread. Since pages are immutable, this could as well be done by the reader thread, which would allow us to save some precious CPU cycles for TX. Issue 4257.

  • (Core) Improve box.stat.net. Issue 4150.

  • (Core) Add idle to downstream status in box.info. When a relay sends a row it updates last_row_time value with the current time. When box.info() is called, idle is set to current_time - last_row_time.

  • (Replication) Print corrupted rows on decoding error. Improve row printing to log. Print the header row by row, 16 bytes in a row, and format output to match xxd output:

    [001] 2019-04-05 18:22:46.679 [11859] iproto V> Got a corrupted row:
    [001] 2019-04-05 18:22:46.679 [11859] iproto V> 00000000: A3 02 D6 5A E4 D9 E7 68 A1 53 8D 53 60 5F 20 3F
    [001] 2019-04-05 18:22:46.679 [11859] iproto V> 00000010: D8 E2 D6 E2 A3 02 D6 5A E4 D9 E7 68 A1 53 8D 53
  • (Lua) Add type of operation to space trigger parameters. For example, a trigger function may now look like this:

    function before_replace_trig(old, new, space_name, op_type)
        if op_type == 'INSERT' then
            return old
            return new

    Issue 4099.

  • (Lua) Add debug.sourcefile() and debug.sourcedir() helpers (and debug.__file__ and debug.__dir__ shortcuts) to determine the location of a current Lua source file. Part of issue 4193.

  • (HTTP client) Add max_total_connections option in addition to max_connections to allow more fine-grained tuning of libcurl connection cache. Don’t restrict the total connections` with a constant value by default, but use libcurl’s default, which scales the threshold according to easy handles count. Issue 3945.

Bugs fixed

  • (Vinyl) Fix assertion failure in vy_tx_handle_deferred_delete. Issue 4294.
  • (Vinyl) Don’t purge deleted runs from vylog on compaction. Cherry-picked from issue 4218.
  • (Vinyl) Don’t throttle DDL. Issue 4238.
  • (Vinyl) Fix deferred DELETE statement lost on commit. Issue 4248.
  • (Vinyl) Fix assertion while recovering dumped statement. Issue 4222.
  • (Vinyl) Reset dump watermark after updating memory limit. Issue 3864.
  • (Vinyl) Be pessimistic about write rate when setting dump watermark. Issue 4166.
  • (Vinyl) Fix crash if space is dropped while space.get is reading from it. Issue 4109.
  • (Vinyl) Fix crash during index build. Issue 4152.
  • (Vinyl) Don’t compress L1 runs. Issue 2389.
  • (Vinyl) Account statements skipped on read.
  • (Vinyl) Take into account primary key lookup in latency accounting.
  • (Vinyl) Fix vy_range_update_compaction_priority hang.
  • (Vinyl) Free region on vylog commit instead of resetting it and clean up region after allocating surrogate statement.
  • (Vinyl) Increase even more the open file limit in systemd unit file.
  • (Vinyl) Increment min range size to 128MB
  • (Memtx) Cancel checkpoint thread at exit. Issue 4170.
  • (Core) Fix crash for update with empty tuple. Issue 4041.
  • (Core) Fix use-after-free in space_truncate. Issue 4093.
  • (Core) Fix error while altering index with sequence. Issue 4214.
  • (Core) Detect a new invalid json path case. Issue 4419.
  • (Core) Fix empty password authentication. Issue 4327.
  • (Core) Fix txn::sub_stmt_begin array size.
  • (Core) Account index.pairs in box.stat.SELECT().
  • (Replication) Disallow bootstrap of read-only masters. Issue 4321.
  • (Replication) Enter orphan mode on manual replication configuration change. Issue 4424.
  • (Replication) Set last_row_time to now in relay_new and relay_start. PR 4431.
  • (Replication) Stop relay on subscribe error. Issue 4399.
  • (Replication) Init coio watcher before join/subscribe. Issue 4110.
  • (Replication) Allow to change instance id during join. Issue 4107.
  • (Replication) Fix garbage collection logic.
  • (Replication) Revert packet boundary checking for iproto.
  • (Replication) Do not abort replication on ER_UNKNOWN_REPLICA.
  • (Replication) Reduce effects of input buffer fragmentation on large cfg.readahead.
  • (Replication) Fix upgrade from 1.7 (it doesn’t recognize IPROTO_VOTE request type).
  • (Replication) Fix memory leak in call / eval in the case when a transaction is not committed. Issue 4388.
  • (Lua) Fix fio.mktree() error reporting. Issue 4044.
  • (Lua) Fix segfault on ffi.C_say() without filename. Issue 4336.
  • (Lua) Fix segfault on json.encode() on a recursive table. Issue 4366.
  • (Lua) Fix pwd.getpwall() and pwd.getgrall() hang on CentOS 6 and FreeBSD 12. Issues 4447, 4428.
  • (Lua) Fix a segfault during initialization of a cipher from crypto module. Issue 4223.
  • (HTTP client) Reduce stack consumption during waiting for a DNS resolving result. Issue 4179.
  • (HTTP client) Increase max outgoing header size to 8 KiB. Issue 3959.
  • (HTTP client) Verify «headers» option stronger. Issues 4281, 3679.
  • (HTTP client) Use bundled libcurl rather than system-wide by default. Issues 4318, 4180, 4288, 4389, 4397.
  • (HTTP client) This closes several known problems that were fixed in recent libcurl versions, including segfaults, hangs, memory leaks and performance problems.
  • (LuaJIT) Fix overflow of snapshot map offset. Part of issue 4171.
  • (LuaJIT) Fix rechaining of pseudo-resurrected string keys. Part of issue 4171.
  • (LuaJIT) Fix fold machinery misbehaves. Issue 4376.
  • (LuaJIT) Fix for debug.getinfo(1,“>S“). Issue 3833.
  • (LuaJIT) Fix string.find recording. Issue 4476.
  • (LuaJIT) Fixed a segfault when unsinking 64-bit pointers.
  • (Misc) Increase even more the open file limit in systemd unit file.
  • (Misc) Raise error in tarantoolctl when box.cfg() isn’t called. Issue 3953.
  • (Misc) Support systemd’s NOTIFY_SOCKET on OS X. Issue 4436.
  • (Misc) Fix coio_getaddrinfo() when 0 timeout is passed (affects netbox’s connect_timeout). Issue 4209.
  • (Misc) Fix coio_do_copyfile() to perform truncate of destination (affects fio.copyfile()). Issue 4181.
  • (Misc) Make hints in coio_getaddrinfo() optional.
  • (Misc) Validate msgpack.decode() cdata size argument. Issue 4224.
  • (Misc) Fix linking with static openssl library. Issue 4437.


  • (Core) Deprecate rows_per_wal in favor of wal_max_size. Part of issue 3762.

Release 1.10.3

Release type: stable (lts). Release date: 2019-04-01. Tag: 1-10-3.

Announcement: https://github.com/tarantool/tarantool/releases/tag/1.10.3.


1.10.3 is the next stable (lts) release in the 1.10 series. The label „stable“ means we have had systems running in production without known crashes, bad results or other showstopper bugs for quite a while now.

This release resolves 69 issues since 1.10.2.


Tarantool 1.10.x is backward compatible with Tarantool 1.9.x in binary data layout, client-server protocol and replication protocol. Please upgrade using the box.schema.upgrade() procedure to unlock all the new features of the 1.10.x series when migrating from 1.9 version.

Functionality added or changed

  • (Engines) Randomize vinyl index compaction Issue 3944.
  • (Engines) Throttle tx thread if compaction doesn’t keep up with dumps Issue 3721.
  • (Engines) Do not apply run_count_per_level to the last level Issue 3657.
  • (Server) Report the number of active iproto connections Issue 3905.
  • (Replication) Never keep a dead replica around if running out of disk space Issue 3397.
  • (Replication) Report join progress to the replica log Issue 3165.
  • (Lua) Expose snapshot status in box.info.gc() Issue 3935.
  • (Lua) Show names of Lua functions in backtraces in fiber.info() Issue 3538.
  • (Lua) Check if transaction opened Issue 3518.

Bugs fixed

  • (Engines) Tarantool crashes if DML races with DDL Issue 3420.
  • (Engines) Recovery error if DDL is aborted Issue 4066.
  • (Engines) Tarantool could commit in the read-only mode Issue 4016.
  • (Engines) Vinyl iterator crashes if used throughout DDL Issue 4000.
  • (Engines) Vinyl doesn’t exit until dump/compaction is complete Issue 3949.
  • (Engines) After re-creating secondary index no data is visible Issue 3903.
  • (Engines) box.info.memory().tx underflow Issue 3897.
  • (Engines) Vinyl stalls on intensive random insertion Issue 3603.
  • (Server) Newer version of libcurl explodes fiber stack Issue 3569.
  • (Server) SIGHUP crashes tarantool Issue 4063.
  • (Server) checkpoint_daemon.lua:49: bad argument #2 to „format“ Issue 4030.
  • (Server) fiber:name() show only part of name Issue 4011.
  • (Server) Second hot standby switch may fail Issue 3967.
  • (Server) Updating box.cfg.readahead doesn’t affect existing connections Issue 3958.
  • (Server) fiber.join() blocks in „suspended“ if fiber has cancelled Issue 3948.
  • (Server) Tarantool can be crashed by sending gibberish to a binary socket Issue 3900.
  • (Server) Stored procedure to produce push-messages never breaks on client disconnect Issue 3859.
  • (Server) Tarantool crashed in lj_vm_return Issue 3840.
  • (Server) Fiber executing box.cfg() may process messages from iproto Issue 3779.
  • (Server) Possible regression on nosqlbench Issue 3747.
  • (Server) Assertion after improper index creation Issue 3744.
  • (Server) Tarantool crashes on vshard startup (lj_gc_step) Issue 3725.
  • (Server) Do not restart replication on box.cfg if the configuration didn’t change Issue 3711.
  • (Replication) Applier times out too fast when reading large tuples Issue 4042.
  • (Replication) Vinyl replica join fails Issue 3968.
  • (Replication) Error during replication Issue 3910.
  • (Replication) Downstream status doesn’t show up in replication.info unless the channel is broken Issue 3904.
  • (Replication) replication fails: tx checksum mismatch Issue 3993.
  • (Replication) Rebootstrap crashes if master has replica’s rows Issue 3740.
  • (Replication) After restart tuples revert back to their old state which was before replica sync Issue 3722.
  • (Replication) Add vclock for safer hot standby switch Issue 3002.
  • (Replication) Master row is skipped forever in case of wal write failure Issue 2283.
  • (Lua) space:frommap():tomap() conversion fail Issue 4045.
  • (Lua) Non-informative message when trying to read a negative count of bytes from socket Issue 3979.
  • (Lua) space:frommap raise «tuple field does not match…» even for nullable field Issue 3883.
  • (Lua) Tarantool crashes on net.box.call after some uptime with vshard internal fiber Issue 3751.
  • (Lua) Heap use after free in lbox_error Issue 1955.
  • (Misc) http.client doesn’t honour „connection: keep-alive“ Issue 3955.
  • (Misc) net.box wait_connected is broken Issue 3856.
  • (Misc) Mac build fails on Mojave Issue 3797.
  • (Misc) FreeBSD build error: no SSL support Issue 3750.
  • (Misc) „http.client“ sets invalid (?) reason Issue 3681.
  • (Misc) Http client silently modifies headers when value is not a «string» or a «number» Issue 3679.
  • (Misc) yaml.encode uses multiline format for „false“ and „true“ Issue 3662.
  • (Misc) yaml.encode encodes „null“ incorrectly Issue 3583.
  • (Misc) Error object message is empty Issue 3604.
  • (Misc) Log can be flooded by warning messages Issue 2218.


Версия 1.10.2

Тип версии: стабильная (lts). Дата выхода: 2018-10-13. Тег: 1-10-2.

Объявление о выходе: https://github.com/tarantool/tarantool/releases/tag/1.10.2.

Данная сборка представляет собой первую стабильную (lts) версию в серии 1.10. Кроме того, Tarantool 1.10.2 представляет собой мажорную версию, версия Tarantool 1.9.2 объявлена устаревшей. Это обновление содержит 95 исправлений по сравнению с версией 1.9.2.

Tarantool 1.10.x обратно совместим с Tarantool 1.9.x в том, что касается структуры бинарных данных, клиент-серверного протокола и протокола репликации. Обновление можно произвести с помощью процедуры box.schema.upgrade().

Цель данного релиза – значительно повысить стабильность vinyl'а и реализовать автоматическую повторную настройку набора реплик в Tarantool’е.

Изменения или добавления функциональности:

  • (Движки) поддержка изменения ALTER непустых спейсов в vinyl’е. Проблема 1653.
  • (Движки) кортежи, которые хранятся в кэше vinyl’а, не учитываются в индексах того же спейса. Проблема 3478.
  • (Движки) хранение стека операций обновления и вставки UPSERT в vy_read_iterator. Проблема 1833.
  • (Движки) box.ctl.reset_stat(), функция сброса статистики в vinyl’е. Проблема 3198.
  • (Сервер) настройка места назначения syslog. Проблема 3487.
  • (Сервер) допустимость неопределенного значения разного вида в индексах и форматах. Проблема 3430.
  • (Сервер) допустимость резервного копирования любой контрольной точки, а не только последней. Проблема 3410.
  • (Сервер) метод, чтобы определить был ли запуск или перезапуск процесса Tarantool’а осуществлен с помощью tarantoolctl (переменные окружения TARANTOOLCTL и TARANTOOL_RESTARTED). Проблемы 3384, 3215.
  • (Сервер) конфигурационный параметр net_msg_max ограничивает число выделенных файберов. Проблема 3320.
  • (Репликация) отображение статуса соединения, если последующий сервер отключается от предыдущего (box.info.replication.downstream.status = disconnected). Проблема 3365.
  • (Репликация) спейсы с локальной репликацией Проблема 3443.
  • (Репликация) replication_skip_conflict, новый параметр в box.cfg{} для пропуска конфликтов строк при репликации. Проблема 3270.
  • (Репликация) удаление старых снимков, которые не нужны репликами. Проблема 3444.
  • (Репликации) запись в журнал попытки повторного коммита. Проблема 3105.
  • (Lua) новая функция fiber.join(). Проблема 1397.
  • (Lua) новая опция names_only для tuple:tomap(). Проблема 3280.
  • (Lua) поддержка специализированных серверов для модулей (опции server и only-server для команды tarantoolctl rocks). Проблема 2640.
  • (Lua) передача триггеров on_commit/on_rollback в Lua. Проблема 857.
  • (Lua) новая функция box.is_in_txn() для проверки наличия открытой транзакции. Проблема 3518.
  • (Lua) доступ к полю кортежа по JSON-пути (по номеру, имени и пути). Проблема`1285 <https://github.com/tarantool/tarantool/issues/1285>`_.
  • (Lua) новая функция space:frommap(). Проблема 3282.
  • (Lua) новый модуль utf8, который имплементирует привязки libicu для использования в Lua. Проблемы 3290, 3385.

Версия 1.9

Версия 1.9.0

Тип версии: стабильная. Дата выхода: 2018-02-26. Тег: 1.9.0-4-g195d446.

Объявление о выходе: https://github.com/tarantool/tarantool/releases/tag/1.9.0.

Эта версия следует за стабильной версией 1.7.6. Цель данной версии – повысить стабилизацию vinyl’а и репликации типа мастер-мастер, для чего предусмотрено значительное количество новых функций. Следуйте инструкциям по загрузке по ссылке https://tarantool.io/en/download/download.html для установки пакета для вашей операционной системы.

Изменения или добавления функциональности:

  • (Безопасность) появилась возможность блокировки и разблокировки пользователей. Проблема 2898.
  • (Безопасность) новая функция box.session.euid() возвращает действующего пользователя. Действующий пользователь может отличаться от авторизованного пользователя при использовании функций setuid или box.session.su. Проблема 2994.
  • (Безопасность) новая роль суперпользователя super. Чтобы отключить управление доступом, следует назначить пользователю guest роль „super“. Проблема 3022.
  • (Безопасность) триггер on_auth срабатывает, когда аутентификация пройдена, а также, когда аутентификация не пройдена. Проблема 3039.
  • (Репликация/восстановление) новый алгоритм конфигурации репликации: если экземпляр не подключается к количеству узлов, указанному в replication_quorum, за количество секунд, указанное в replication_connect_timeout, сервер начинает работу, но в качестве одиночного, то есть в режиме только для чтения, пока реплики не подключатся друг к другу. Проблемы 3151 и 2958.
  • (Репликация/восстановление) после включения репликации при запуске сервер не начинает обработку запросов на запись до синхронизации со всеми подключенными узлами.
  • (Репликация/восстановление) появилась возможность явным образом задать UUID экземпляра и UUID набора реплик в качестве конфигурационных параметров. Проблема 2967.
  • (Репликация/восстановление) box.once() больше не прекращает работу на реплике в режиме только для чтения, а переходит в режим ожидания. Проблема 2537.
  • (Репликация/восстановление) force_recovery может пропускать поврежденный xlog-файл. Проблема 3076.
  • (Репликация/восстановление) улучшен мониторинг репликации: box.info.replication показывает IP-адрес:порт узла в сети и правильную задержку репликации для неактивных узлов. Проблема 2753 и 2689.
  • (Сервер приложений) новые триггеры до события (before) можно использовать для разрешения конфликтов при репликации типа мастер-мастер. Проблема 2993.
  • (Сервер приложений) http client правильно разбирает файлы cookie и поддерживает пути http+unix://. Проблемы 3040 и 2801.
  • (Сервер приложений) в модуле fio появилась поддержка file_exists(), rename() работает в разных файловых системах, read() без аргументов выполняет чтение всего файла. Проблемы 2924, 2751 и 2925.
  • (Сервер приложений) ошибки в модуле fio соответствуют стандартам вызова функции в Tarantool’е и всегда возвращают сообщение об ошибке вместе с флагом ошибки.
  • (Сервер приложений) модуль digest поддерживает алгоритм хеширования паролей pbkdf2, который используется в приложениях, совместимых с PCI/DSS. Проблема 2874.
  • (Сервер приложений) box.info.memory() обеспечивает общий обзор использования памяти сервера: работа по сети, Lua, транзакции и индексы. Проблема 934.
  • (База данных) появилась возможность добавить отсутствующие поля кортежа в индекс, что используется при добавлении индекса вместе с эволюцией схемы базы данных. Проблема 2988.
  • (База данных) множество улучшений поддержки типов полей при создании или изменении спейсов и индексов. Проблемы 2893, 3011 и 3008.
  • (База данных) появилась возможность включения опции is_nullable для поля, даже если спейс не является пустым, с мгновенным применением изменений. Проблема 2973.
  • (База данных) улучшены многие аспекты журналирования: отдельные сообщения (проблемы 1972, 2743, 2900), увеличение количества записей при необходимости (проблемы 3096, 2871).
  • (Движок базы данных Vinyl) появилась возможность сделать уникальный индекс в vinyl’е неуникальным без повторного создания индекса. Проблема 2449.
  • (Движок базы данных Vinyl) улучшена производительность операций обновления UPDATE, замены REPLACE и восстановления при наличии вторичных ключей. Проблемы 2289, 2875 и 3154.
  • (Движок базы данных Vinyl) space:len() и space:bsize() работают с vinyl’ом (хотя и неточно). Проблема 3056.
  • (Движок базы данных Vinyl) улучшена скорость восстановления при наличии вторичных ключей. Проблема 2099.
  • (Сборки) Поддержка Alpine Linux. Проблема 3067.

Версия 1.8

Версия 1.8.1

Тип версии: альфа. Дата выхода: 2017-05-17. Тег: 1.8.1.

Объявление о выходе: https://groups.google.com/forum/#!msg/tarantool-ru/XYaoqJpc544/mSvKrYwNAgAJ.

Эта альфа-версия обеспечивает поддержку значительного подмножества SQL по стандарту ISO/IEC 9075:2011 включая объединения, подзапросы и представления. SQL – главная особенность серии версий 1.8, в которую мы планируем добавить поддержку коннекторов ODBC и JDBC, триггеров SQL, подготовленных операторов, безопасности и ролей, и в целом гарантировать, что SQL является полноправным языком запросов в Tarantool’е.

Изменения или добавления функциональности:

  • A new function box.sql.execute() (later changed to box.execute in Tarantool 2.1) was added to query Tarantool databases using SQL statements, e.g.:

    tarantool> box.sql.execute([[SELECT * FROM _schema]]);
  • Полная совместимость функций SQL и Lua.

  • В консоль Tarantool’а добавлены новые мета-команды.

    Теперь можно задать язык ввода: SQL или Lua, – например:

    tarantool> \set language sql
    tarantool> SELECT * FROM _schema;
    tarantool> \set language lua
    tarantool> print("Hello, world!")
  • Поддержка большинства операторов SQL:


      tarantool> CREATE TABLE table1 (column1 INTEGER PRIMARY KEY, column2 VARCHAR(100));
    • операторы INSERT/UPDATE/DELETE:

      tarantool> INSERT INTO table1 VALUES (1, 'A');
      tarantool> UPDATE table1 SET column2 = 'B';
    • оператор SELECT, включая усложненные варианты с составными операциями JOIN, вложенными операциями SELECT и т.п.:

      tarantool> SELECT sum(column1) FROM table1 WHERE column2 LIKE '_B' GROUP BY column2;
    • оператор WITH

      tarantool> WITH cte AS ( SELECT SUBSTR(column2,1,2), column1 FROM table1 WHERE column1 >= 0) SELECT * FROM cte;
    • SQL-схема является персистентной, поэтому она может пережить восстановление из созданного снимка: последовательность snapshot()/restore().

    • Функции SQL описаны в практическом задании.

Версия 1.7

Версия 1.7.6

Тип версии: стабильная. Дата выхода: 2017-11-07. Тег: 1.7.6-0-g7b2945d6c.

Объявление о выходе: https://groups.google.com/forum/#!topic/tarantool/hzc7O2YDZUc.

Данная сборка представляет собой очередную стабильную версию в серии 1.7. Это обновление содержит более 75 исправлений по сравнению с версией 1.7.5.

Что нового в Tarantool 1.7.6?

Добавлены новые опции:

  • net_box (время ожидания),
  • функции string,
  • форматы для спейса (имена и типы полей, задаваемые пользователем),
  • base64 (опция urlsafe), а также
  • создание индекса (сортировка, is-nullable (возможность допустить неопределенное значение), имена полей).

Несовместимые изменения:

  • Расширенная структура box.space._index поддерживает функции is_nullable и collation (сортировка). Все новые индексы, созданные по столбцам со свойствами is_nullable или collation получат новый формат определения. Обновите клиентские библиотеки, если планируете использовать новые возможности. Проблема 2802
  • fiber_name() теперь выдает ошибку вместо усечения длинных имен файберов. Мы обнаружили, что некоторые Lua-модули, такие как expirationd, используют fiber.name() для определения фоновых задач. Если же имя усечено, они упускают файбер из вида. Обновление позволит обнаружить ошибки, вызванные усечением имени файбера fiber.name(). Используйте fiber.name(name, { truncate = true }) для моделирования старого поведения системы. Проблема 2622
  • space:format() проверяется в DML-операциях. Раньше space:format() использовался только в клиентских библиотеках, но с версии Tarantoool 1.7.6 типы полей в space:format() проверяются на стороне сервера при каждой DML-операции, и имена полей могут использоваться в индексах и Lua-коде. Если space:format() использовался нестандартно, обновите структуру и имена типов в соответствии с официальной документацией по форматам спейса.

Изменения или добавления функциональности:

  • Гибридная модель данных без схемы + со схемой. Раньше версии Tarantool позволяли хранить произвольный набор документов в формате MessagePack в спейсах. Начиная с версии Tarantool 1.7.6, можно использовать space:format() для определения условий и ограничений схемы для кортежей в спейсах. Определенные типы полей автоматически проверяются при каждой DML-операции, а определенные имена полей могут использоваться вместо номеров полей в Lua-коде. Добавлена новая функция tuple:tomap() для конвертации кортежа в Lua-словарь пар ключ-значение.
  • Поддержка сортировки и Юникода. По умолчанию, когда Tarantool сопоставляет строки, он берет во внимание только числовое значение каждого байта в строке. Чтобы задействовать такое распределение, как в телефонных справочниках и словарях, в Tarantool’е версии 1.7.6 впервые поддерживается сортировка по Таблице сортировки символов Юникода по умолчанию (Default Unicode Collation Element Table (DUCET)) и в соответствии с правилами, описанными в Техническом стандарте Юникода №10 – Алгоритм сортировки по Юникоду (Unicode® Technical Standard #10 Unicode Collation Algorithm (UTS #10 UCA)). См. сортировку.
  • Значения NULL в уникальных и неуникальных индексах. По умолчанию, все поля в Tarantool’е «НЕ NULL». Начиная с версии Tarantool 1.7.6, можно использовать опцию is_nullable (возможность допустить неопределенное значение) в space:format() или в определении части индекса, чтобы разрешить хранение значения NULL в индексах. Tarantool частично реализует троичную логику из стандарта SQL и позволяет хранить несколько значений NULL в уникальных индексах. Проблема 1557.
  • Последовательности и внедрение автоматического увеличения auto_increment(). В версии Tarantool 1.7.6 впервые реализованы генераторы порядковых номеров (как CREATE SEQUENCE – создание последовательности – в SQL). Эта функция используется для внедрения нового персистентного автоматического увеличения в спейсах. Проблема 389.
  • Vinyl: появляется блокировка разрывов в менеджере транзакций Vinyl’а. Новый блокирующий механизм в менеджере Vinyl TX снижает количестве конфликтов в транзакциях. Проблема 2671.
  • net.box: триггеры on_connect и on_disconnect (по подключению/отключению). Проблема 2858.
  • Структурированная запись в журнал в формате JSON. Проблема 2795.
  • (Lua) Lua: string.strip() Проблема 2785.
  • (Lua) добавлен API base64_urlsafe_encode() для модуля digest. Проблема 2777.
  • Запись конфликтов в ключах в журнал в рамках репликации мастер-мастер. Проблема 2779.
  • Возможность отключить обратную трассировку в fiber.info(). Проблема 2878.
  • Реализована возможность создания сторонних библиотек tarantoolctl rocks make *.spec. Проблема 2846.
  • Новая функция загрузчика, используемого по умолчанию, позволяет искать модули .rocks в родительской иерархии. Проблема 2676.
  • Поддержка опций SOL_TCP в socket:setsockopt(). Проблема 598.
  • Частичное моделирование LuaSocket поверх Tarantool Socket. Проблема 2727.

Инструменты разработчика:

  • Интеграция с IntelliJ IDEA с поддержкой отладки. Появилась возможность использовать IntelliJ IDEA в качестве IDE для разработки и отладки Lua-приложений для Tarantool’а. См. Использование IDE.
  • Интеграция с удаленным Lua-отладчиком MobDebug. Проблема 2728.
  • Настройка /usr/bin/tarantool в качестве альтернативного Lua-интерпретатора для Debian/Ubuntu. Проблема 2730.

Новые сторонние библиотеки:

  • smtp.client – поддержка SMTP по libcurl.

Версия 1.7.5

Тип версии: стабильная. Дата выхода: 2017-08-22. Тег: 1.7.5.

Объявление о выходе: https://github.com/tarantool/doc/issues/289.

Данная сборка представляет собой стабильную версию в серии 1.7. Это обновление содержит более 160 исправлений по сравнению с версией 1.7.4.

Изменения или добавления функциональности:

  • (Vinyl) новый режим принудительного восставовления force_recovery для восстановления поврежденных файлов на диске. Используйте box.cfg{force_recovery=true} для восстановления файлов с данными, поврежденными в результате проблем с оборудованием или отключения электроэнергии. Проблема 2253.
  • (Vinyl) параметры индекса можно менять на лету без необходимости пересборки. Появилась возможность динамически изменять параметры page_size, run_size_ratio, run_count_per_level и bloom_fpr с помощью index:alter(). Изменения вступают в силу только для вновь созданных файлов. Проблема 2109.
  • (Vinyl) улучшен вывод box.info.vinyl() и index:info(). Проблема 1662.
  • (Vinyl) появляется опция box.cfg.vinyl_timeout для управления загрузкой на основе квот. Проблема 2014.
  • Memtx: стабильные итераторы index:pairs() для TREE-индекса. TREE-итераторы автоматически восстанавливаются в правильном положении после изменений индекса. Проблема 1796.
  • (Memtx) предсказуемый порядок для неуникальных TREE-индексов. Неуникальные TREE-индексы сохраняют порядок сортировки для дублирующихся записей. Проблема 2476.
  • (Memtx+Vinyl) динамическая настройка максимального размера кортежа. Впервые конфигурационные параметры box.cfg.memtx_max_tuple_size и box.cfg.vinyl_max_tuple_size можно изменять на лету без необходимости перезагрузки сервера. Проблема 2667.
  • (Memtx+Vinyl) новая реализация. Усечение спейса больше не вызывает повторное создание всех индексов. Проблема 618.
  • Максимальная длина всех идентификаторов расширена с 32 до 65 тысяч символов. Имена спейса, пользователя и функции больше не ограничены 32 символами. Проблема 944.
  • Сообщения контрольного сигнала для репликации. Репликационный клиент теперь выборочно отправляет подтверждение обработки записей и автоматически переподключается в случае замедления. Также в рамках этого изменения box.info.replication[replica_id].vclock будет отображать определенный vclock удаленной реплики. Проблема 2484.
  • Отслеживание удаленных реплик во время обслуживания WAL. Мастер репликации будет автоматически сохранять xlog-файлы, необходимые для удаленных реплик. Проблема 748.
  • Enabled box.tuple.new() to work without box.cfg(). Issue 2047.
  • Надстройка box.atomic(fun, …) будет выполнять функции в транзакции. Проблема 818.
  • Вспомогательная функция box.session.type() будет определять тип сессии. Проблема 2642.
  • Горячая перезагрузка кода для хранимых процедур на языке C. Используйте box.schema.func.reload('modulename.function') для перезагрузки библиотек общего пользования на лету. Проблема 910.
  • API для Lua: string.hex() и str:hex(). Проблема 2522.
  • Менеджер пакетов на основе LuaRocks. Используйте tarantoolctl rocks install MODULENAME для установки Lua-модуля MODULENAME (имя модуля) из https://rocks.tarantool.org/. Проблема 2067.
  • Опции командной строки в Lua 5.1. Бинарный протокол Tarantool’а поддерживает опции командной строки: „-i“, „-e“, „-m“ и „-l“. Проблема 1265.
  • Экспериментальный режим GC64 для LuaJIT. Режим GC64 позволяет работать со спейсами с полным адресом на 64-битных хостах. Включить настройку можно с помощью -DLUAJIT_ENABLE_GC64=ON compile-time. Проблема 2643.
  • Регистратор журнала syslog поддерживает неблокирующий режим. box.cfg{log_nonblock=true} также работает для регистратора syslog. Проблема 2466.
  • Добавлен уровень записи в журнал VERBOSE выше INFO. Проблема 2467.
  • Tarantool автоматически делает снимки каждый час. Установите box.cfg{checkpoint_interval=0, чтобы восстановить поведение предыдущих версий. Проблема 2496.
  • Увеличена точность для процентного соотношения, приведенного с помощью box.slab.info(). Проблема 2082.
  • Трассировка стека будет содержать имена символов на всех поддерживаемых платформах. В предыдущих версиях Tarantool не отображал значимые имена функций в fiber.info() на платформах не-x86. Проблема 2103.
  • Появилась возможность создания файбера с заданным размером стека из API для языка C. Проблема 2438.
  • В API для языка C добавлена функция ipc_cond. Проблема 1451.

Новые сторонние библиотеки:

  • http.client (встроенная) - HTTP-клиент на основе libcurl с поддержкой SSL/TLS. Проблема 2083.
  • iconv (встроенная) - привязки для iconv. Проблема 2587.
  • authman - API для регистрации пользователя и входа в систему с использованием email и социальных сетей.
  • document - хранит вложенные документы в Tarantool’е.
  • synchronized - критические секции для Lua.

Версия 1.7.4

Тип версии: предварительная версия. Дата выхода: 2017-05-12. Тег версии: 1.7.4.

Объявление о выходе: https://github.com/tarantool/tarantool/releases/tag/1.7.4 или https://groups.google.com/forum/#!topic/tarantool/3x88ATX9YbY

Данная сборка представляет собой предварительную версию перед выпуском нового релиза в серии 1.7. Движок vinyl, ключевой компонент 1.7.x, обладает полностью реализованной заявленной функциональностью.

Несовместимые изменения

  • Для поддержки vinyl были внесены следующие изменения в параметры box.cfg():

    • переименование snap_dir в memtx_dir
    • переименование slab_alloc_arena (гигабайты) в memtx_memory (байты), значение, используемое по умолчанию, изменилось с 1 Гб на 256 МБ
    • переименование slab_alloc_minimal в memtx_min_tuple_size
    • переименование slab_alloc_maximal в memtx_max_tuple_size
    • slab_alloc_factor больше не используется, не применимо в 1.7.x
    • переименование snapshot_count в checkpoint_count
    • переименование snapshot_period в checkpoint_interval
    • переименование logger в log
    • переименование logger_nonblock в log_nonblock
    • переименование logger_level в log_level
    • переименование replication_source в replication
    • panic_on_snap_error = true и panic_on_wal_error = true заменены force_recovery = false

    В версиях Tarantool’а до 1.8 можно использовать устаревшие параметры как для начальной, так и для рабочей конфигурации, но в таком случае система запишет сообщение предупреждения в журнал сервера. Проблемы 1927 и 2042.

  • Режим hot standby (горячее резервирование) по умолчанию будет отключен. Tarantool автоматически находит еще один запущенный экземпляр в той же директории wal_dir и откажется запускаться. Используйте box.cfg {hot_standby = true} для включения режима hot standby. Проблема 775.

  • Операция UPSERT по вторичному ключу запрещена во избежание неопределенности семантики. Проблема 2226.

  • В формат box.info и box.info.replication для отображения информации о подключениях к upstream и downstream внесены следующие изменения (Проблема 723):

    • Добавление box.info.replication[instance_id].downstream.vclock для отображения последней строки, отправленной на удаленную реплику.
    • Добавление box.info.replication[instance_id].id.
    • Добавление box.info.replication[instance_id].lsn.
    • Перемещение box.info.replication[instance_id].{vclock,status,error} в box.info.replication[instance_id].upstream.{vclock,status,error}.
    • Включение всех зарегистрированных реплик из box.space._cluster в вывод box.info.replication.
    • Переименование box.info.server.id в box.info.id
    • Переименование box.info.server.lsn в box.info.lsn
    • Переименование box.info.server.uuid в box.info.uuid
    • Переименование box.info.cluster.signature в box.info.signature
    • Возврат значения nil вместо -1 функциями box.info.id и box.info.lsn во время начальной настройки кластера.
  • net.box: добавление запрошенные параметров во все запросы:

    • изменение conn.call(func_name, arg1, arg2,...) на conn.call(func_name, {arg1, arg2, ...}, opts)
    • изменение conn.eval(func_name, arg1, arg2,...) на conn.eval(func_name, {arg1, arg2, ...}, opts)
  • Все запросы поддерживают параметры timeout = <seconds>``(время задержки в секундах), ``buffer = <ibuf> (буфер).

  • Добавление опции connect_timeout в netbox.connect().

  • netbox:timeout() и conn:timeout() объявлены устаревшими. Используйте netbox.connect(host, port, { call_16 = true }), чтобы получить поведение как в 1.6.x. Проблема 2195.

  • Конфигурация systemd будет поддерживать Type=Notify / sd_notify(). systemctl start tarantool@ЭКЗЕМПЛЯР будет ожидать, пока Tarantool не запустится и не восстановится из xlog-файлов. Статус восстановления передается в systemctl status tarantool@ЭКЗЕМПЛЯР. Проблема 1923.

  • Модуль log не будет присоединять ко всем сообщениям полный путь к бинарному файлу при использовании без box.cfg(). Проблема 1876.

  • Переименование require('log').logger_pid() в require('log').pid(). Проблема 2917.

  • Удаленные определения и функции, совместимые с Lua 5.0 (Проблема 2396):

    • luaL_Reg заменяет удаленный luaL_reg
    • lua_objlen(L, i) заменяет удаленный luaL_getn(L, i)
    • Удаление luaL_setn(L, i, j) (пустая операция)
    • luaL_ref(L, lock) заменяет удаленный lua_ref(L, lock)
    • lua_rawgeti(L, LUA_REGISTRYINDEX, (ref)) заменяет удаленный lua_getref(L,ref)
    • luaL_unref(L, ref) заменяет удаленный lua_unref(L, ref).
    • math.fmod() заменяет удаленный math.mod()
    • string.gmatch() заменяет удаленный string.gfind()

Изменения или добавления функциональности:

  • (Vinyl) многоуровневое слияние. Планировщик слияния будет группировать забеги одного диапазона в уровни, чтобы снизить «паразитную» запись во время слияния. Новая функция позволит Vinyl’у поддерживать сценарии 1:100+ оперативная память:диск. Проблема 1821.

  • (Vinyl) Фильтры Блума для упорядоченных файлов. Фильтр Блума – это вероятностная структура данных, которую можно использовать для проверки наличия необходимого ключа в файле без считывания самого файла с диска. Фильтр Блума может выдавать ложноположительное срабатывание (элемента в множестве нет, но структура данных сообщает, что он есть), но не ложноотрицательное. Данная функция уменьшает объем поиска, необходимый для случайного просмотра, и ускоряет операции REPLACE/DELETE со вторичными ключами. Проблема 1919.

  • (Vinyl) кэш на уровне ключей для поиска точек и запросов по диапазону. Движок базы данных Vinyl кэширует выбранные ключи и диапазоны ключей вместо страниц диска полностью, как в традиционных базах данных. Такой подход более эффективен, поскольку кэш не заполнен сырыми данными. Проблема 1692.

  • (Vinyl) внедрение уровня общей памяти для in-memory индексов. Все in-memory индексы спейса будут хранить указатели на одни и те же кортежи, вместо закэшированных данных вторичного индекса. Данная функция значительно уменьшает объем необходимой памяти в случае вторичных ключей. Проблема 1908.

  • (Vinyl) новая реализация передачи начального состояния JOIN-команды в протоколе репликации. Новый протокол репликации исправляет проблемы с согласованностью и вторичными ключами. Мы внедрили специальный вид просмотра по всей базе данных с небольшой нагрузкой, чтобы избежать неподтвержденного чтения в JOIN-процедуре. В традиционных базах данных на основе B-Tree такое не представляется возможным. Проблема 2001.

  • (Vinyl) забеги по всему индексу. Удалены диапазоны из оперативной памяти и уровень LSM-дерева на диске. Проблема 2209.

  • (Vinyl) объединение небольших диапазонов. Перед созданием дампа или слиянием диапазона рассмотрите возможность объединения его с соседними диапазонами. Проблема 1735.

  • (Vinyl) внедрен многосторонний журнал для метаданных. Информация о всех Vinyl-файлах будет записываться в специальный .vylog-файл. Проблема 1967.

  • (Vinyl) появились постоянные вторичные ключи. Проблема 2410.

  • (Memtx+Vinyl) внедрен низкоуровневый API для Lua в целях создания согласованных резервных копий данных Memtx + Vinyl. Новая функциональность обеспечивает создание резервных копий всех спейсов с помощью функций box.backup.start()/stop(). box.backup.start() останавливает работу сборщика мусора Tarantool’а и возвращает список файлов для копирования. Затем эти файлы можно скопировать с помощью любого стороннего средства, например, cp, ln, tar, rsync и т.д. box.backup.stop() возобновляет работу сборщика мусора. Чтобы немедленно восстановить данные, скопируйте созданные резервные копии в новую директорию, а затем запустите новый экземпляр Tarantool’а. Нет необходимости в дополнительной подготовке, преобразовании или распаковывании. Проблема 1916.

  • (Vinyl) добавлена статистика для фоновых рабочих процессов в box.info.vinyl(). Проблема 2005.

  • (Memtx+Vinyl) уменьшен объем необходимой памяти для индексов с последовательными ключами, которые начинаются с первого поля. Такая оптимизация была необходима для вторичных ключей в Vinyl’е, но мы также оптимизировали Memtx. Проблема 2046.

  • LuaJIT получил все изменения с последней версии 2.1.0b3 с нашими патчами (Проблема 2396):

    • Добавлен бэкенд для JIT-компилятора для архитектуры ARM64
    • Добавлен бэкенд и интерпретатор для JIT-компилятора для архитектуры MIPS64
    • Добавлены некоторые расширения для Lua 5.2 и Lua 5.3
    • Исправление нескольких ошибок
    • Удалены устаревшие функции Lua 5.0 (см. несовместимые изменения выше).
  • Запущен новый умный алгоритм хеширования строк в LuaJIT, чтобы избежать замедления работы в случае множества коллизий. Разработали Юрий Соколов (@funny-falcon) и Ник Заварицкий (@mejedi). См. https://github.com/tarantool/luajit/pull/2.

  • box.snapshot() теперь обновляет время mtime в файле снимка, если не было изменений в базе данных с момента последнего снимка. Проблема 2045.

  • Внедрена функция space:bsize() для возврата объема памяти, занятого всеми кортежами спейса. Разработал Роман Токарев (@rtokarev). Проблема 2043.

  • Новые функции Lua/C вынесены в общедоступный API:

    • luaT_pushtuple, luaT_istuple (проблема 1878)
    • luaT_error, luaT_call, luaT_cpcall (проблема 2291)
    • luaT_state (проблема 2416)
  • Новые функции Box/C вынесены в общедоступный API: box_key_def, box_tuple_format, tuple_compare(), tuple_compare_with_key(). Проблема 2225.

  • Можно осуществлять ротацию xlog-файлов на основе размера (wal_max_size), а также количества записанных строк (rows_per_wal). Проблема 173.

  • Добавлены следующие API: string.split(), string.startswith(), string.endswith(), string.ljust(), string.rjust(), string.center(). Проблемы 2211, 2214, 2415.

  • Добавлены функции table.copy() и table.deepcopy(). Проблема 2212.

  • Добавлен модуль pwd для работы с пользователями и группами в UNIX. Проблема 2213.

  • Удалены неуместные сообщения «client unix/: connected» из журналов. Используйте вместо них триггеры box.session.on_connect()/on_disconnect() (на подключение / отключение). Проблема 1938.

    Триггеры box.session.on_connect()/on_disconnect()/on_auth() также срабатывают для подключений административной консоли.

  • tarantoolctl: следующие команды: eval, enter, connect – теперь поддерживают конвейеры UNIX. Проблема 672.

  • tarantoolctl: более точные сообщения об ошибке; добавлена новая страница справочника. Проблема 1488.

  • tarantoolctl: добавлен фильтр по replica_id для команд cat и play. Проблема 2301.

  • tarantoolctl: Команды start, stop и restart перенаправляют на systemctl start/stop/restart, когда запущен systemd. Проблема 2254.

  • net.box: по запросу добавлена опция buffer = <buffer> для хранения исходных ответов MessagePack в буфер C. Проблема 2195.

  • net.box: добавлена опция connect_timeout. Проблема 2054.

  • net.box: добавлена ловушка on_schema_reload(). Проблема 2021.

  • net.box: conn.schema_version и space.connection дополнены API. Проблема 2412.

  • log: debug()/info()/warn()/error() не выдают сбой при ошибках форматирования. Проблема 889.

  • crypto: добавлена поддержка HMAC. Разработал Андрей Куликов (@amdei). Проблема 725.

Версия 1.7.3

Тип версии: бета. Дата выхода: 2016-12-24. Тег версии: 1.7.3-0-gf0c92aa.

Объявление о выходе: https://github.com/tarantool/tarantool/releases/tag/1.7.3

Данная сборка представляет собой вторую бета-версию в серии 1.7.

Несовместимые изменения:

  • Удалена поврежденная Lua-функция coredump(). Используйте вместо нее gdb -batch -ex "generate-core-file" -p $PID. Проблема 1886.
  • Структура диска Vinyl изменилась с версии 1.7.2: добавлен механизм компрессии ZStandard и улучшена производительность вторичных ключей. Используйте механизм репликации для обновления с бета-версии 1.7.2. Проблема 1656.

Изменения или добавления функциональности:

  • Значительный прогресс в стабилизации движка базы данных Vinyl:
    • Исправлены большинство известных отказов системы и ошибок, выдающих плохие результаты.
    • Замена формата всех файлов с данными на XLOG/SNAP.
    • Использование механизма компрессии ZStandard для всех файлов с данными.
    • Сжатие операций UPSERT на лету и объединение горячих клавиш с помощью фонового файбера.
    • Значительное улучшение производительности index:pairs() и index:count().
    • Удаление ненужных конфликтов из транзакций.
    • Уровень In-memory по большей части заменен структурами данных memtx.
    • В большинстве случаев используются специализированные распределители ресурсов.
  • Мы все еще активно работаем над Vinyl’ом и планируем добавить многоуровневое слияние и улучшить производительность в работе со вторичными ключами в версии 1.7.4. Это подразумевает изменение формата данных.
  • Поддержка DML-запросов для триггеров space:on_replace(). Проблема 587.
  • UPSERT можно использовать с пустым списком операций. Проблема 1854.
  • Lua-функции будут управлять переменными окружения. Проблема 1718.
  • Lua-библиотека будет считывать снимки Tarantool’а и xlog-файлы. Проблема 1782.
  • Новые команды в tarantoolctl: play и``cat``. Проблема 1861.
  • Улучшена поддержка большого количества активных сетевых клиентов. Проблема #5#1892.
  • Поддержка синтаксиса space:pairs(key, iterator-type). Проблема 1875.
  • Автоматическая настройка кластера будет работать и без авторизации. Проблема 1589.
  • При репликации попытки повторного подключения к мастеру бесконечны. Проблема 1511.
  • Временные спейсы будут работать с box.cfg { read_only = true }. Проблема 1378.
  • Максимальная длина имени спейса увеличена до 64 байтов (ранее 32). Проблема 2008.

Версия 1.7.2

Тип версии: бета. Дата выхода: 2016-09-29. Тег версии: 1.7.2-1-g92ed6c4.

Объявление о выходе: https://groups.google.com/forum/#!topic/tarantool-ru/qUYUesEhRQg

Данная сборка представляет собой версию в серии 1.7.

Несовместимые изменения:

  • Команда нового бинарного протокола для вызова CALL больше не ограничивает функцию в возврате массива кортежей и позволяет возвращать произвольный результат в формате MsgPack/JSON, включая scalar (скалярные значения), nil (нулевые значения) и void (пусто). Старый метод CALL оставлен нетронутым для обратной совместимости. В следующей основной версии он будет удален. Все драйверы для языков программирования будут постепенно переведены на использование нового метода CALL. Проблема 1296.

Изменения или добавления функциональности:

  • Разработка движка базы данных Vinyl, наконец, перешла в бета-стадию. В данной версии исправлены более 90 ошибок в Vinyl’е, в частности, удаление непредсказуемых скачков задержки отклика, все известные отказы системы и ошибки, выдающие плохие результаты или их отсутствие.
    • новая архитектура на основе кооперативной многозадачности для устранения скачков задержки отклика,
    • поддержка непоследовательных составных ключей,
    • поддержка вторичных ключей,
    • поддержка auto_increment(),
    • типы полей в индексах: number (число), integer (целое число), scalar (скаляр),
    • операции INSERT, REPLACE и UPDATE возвращают новый кортеж, как в memtx’е.
  • Мы все еще активно работаем над Vinyl’ом и планируем добавить механизм компрессии zstd и новый распределитель ресурсов для Vinyl’а в версии 1.7.3. Это подразумевает изменение формата данных, который планируется внедрить до того, как версия 1.7 станет общедоступной.
  • Автодополнение по Tab в интерактивной консоли, команды require(„console“).connect()`, tarantoolctl enter и tarantoolctl connect. Проблемы 86 и 1790. Используйте клавишу TAB для автодополнения имен переменных, функций и метаметодов в Lua.
  • Новая реализация net.box с улучшенной производительностью и решением проблем, когда сборщик мусора в Lua работает с недоступными соединениями. Проблемы 799, 800, 1138 и 1750.
  • Появилась компрессия снимков memtx и xlog-файлов на лету с использованием быстрого алгоритма компрессии ZStandard. Компрессия настраивается автоматически для получения оптимального соотношения между использованием ЦП и пропускной способностью диска.
  • fiber.cond() – новый механизм синхронизации для кооперативной многозадачности. Проблема 1731.
  • Tarantool теперь можно устанавливать из универсальных Snappy-пакетов (http://snapcraft.io/) с помощью команды snap install tarantool --channel=beta.

Новые модули и пакеты:

  • curl - неблокирующие привязки для libcurl
  • prometheus - сборщик метрик Prometheus для Tarantool’а
  • gis - полнофункциональное геопространственное расширение для Tarantool’а
  • mqtt - клиент MQTT-протокола для Tarantool’а
  • luaossl - самый полноценный OpenSSL-модуль во вселенной Lua

Устаревшие, удаленные и несовместимые функции:

  • Имена типов полей num и str объявлены устаревшими, используйте вместо них unsigned и string. Проблема 1534.

  • Удалены space:inc() и space:dec() (объявлены устаревшими в версии 1.6.x). Проблема 1289.

  • Функция fiber:cancel() теперь является асинхронной и не ждет завершения работы файбера. Проблема 1732.

  • Склонная к ошибкам функция tostring() была удалена из API digest. Проблема 1591.

  • Поддержка SHA-0 (digest.sha()) прекращается по причине обновления OpenSSL.

  • net.box будет использовать индексы, начинающиеся с 1, для space.name.index[x].parts. Проблемы 1729.

  • Бинарный файл Tarantool’а будет динамически связываться с libssl.so во время компиляции вместо загрузки во время выполнения.

  • Пакеты Debian и Ubuntu будут использовать встроенную конфигурацию systemd вместе с вышедшими из употребления скриптами sysvinit.

    В systemd появляется возможность управления несколькими экземплярами. Чтобы обновить, выполните следующие действия:

    1. Установите новые пакеты версии 1.7.2.
    2. Убедитесь в наличии файла ИМЯ_ЭКЗЕМПЛЯРА.lua в директории /etc/tarantool/instace.enabled.
    3. Остановите ЭКЗЕМПЛЯР с помощью tarantoolctl stop ИМЯ_ЭКЗЕМПЛЯРА.
    4. Запустите ЭКЗЕМПЛЯР с помощью systemctl start tarantool@ИМЯ_ЭКЗЕМПЛЯРА.
    5. Включите ЭКЗЕМПЛЯР во время загрузки системы с помощью systemctl enable tarantool@ИМЯ_ЭКЗЕМПЛЯРА.
    6. Введите команду systemctl disable tarantool; update-rc.d tarantool remove, чтобы отключить надстройки, совместимые с sysvinit.

    Для получения дополнительной информации см. комментарии к проблеме 1291 и главу по администрированию серверной части.

  • Пакеты для Debian и Ubuntu запускают готовый к использованию экземпляр example.lua при чистой установке пакета. В экземпляре, используемом по умолчанию, предоставлены права на universe для пользователя guest и настроено прослушивание по «locahost:3313».

  • Пакеты для Fedora 22 объявлены устаревшими (прекращение поддержки).

Версия 1.7.1

Тип версии: альфа. Дата выхода: 2016-07-11.

Объявление о выходе: https://groups.google.com/forum/#!topic/tarantool/KGYj3VKJKb8

Данная сборка представляет собой первую альфа-версию в серии 1.7. Основной функцией данной версии является новый движок базы данных под названием «vinyl». Vinyl представляет собой оптимизированный для записи движок базы данных, который позволяет сохранять объем сохраняемых данных, превышающий объем доступной памяти в 10-100 раз. Vinyl является продолжением движка Sophia из версии 1.6, а именно ответвлением и дальним родственником Sophia Дмитрия Симоненко. Новый Vinyl заменяет Sophia. Он реализован в виде журнально-структурированного дерева со слиянием (log-structured merge tree – LSM-tree). Однако усовершенствование таких традиционных недостатков журнально-структурированных хранилищ, как низкая производительность при чтении и непредсказуемая задержка во времени при записи, стоит больших усилий. Отдельный индекс секционирован по диапазонам между многими структурами данных LSM, в каждой из который находятся собственные буферы оперативной памяти регулируемого размера. Секционирование по диапазонам позволяет осуществить слияние LSM-уровней, чтобы добиться большей детализации, а также отдать приоритет горячим диапазонам по отношению к холодным в том, что касается доступа к ресурсам, таким как оперативная память и ввод-вывод. Планировщик слияний предназначен для сведения времени задержки записи к минимуму, а также для поддержания производительности при чтении в приемлемых пределах. На сегодняшний день Vinyl поддерживает только первичные индексы. Индекс может состоять из 256 частей, как в MemTX’е, по сравнению с 8 в Sophia. Поддерживает чтение по компонентам ключа. Вскоре ожидается поддержка непоследовательных составных ключей, а также вторичных ключей. Наше намерение заключается в том, чтобы убрать любые ограничения, которые есть сейчас в Vinyl’е, чтобы сделать его полноценным компонентом Tarantool’а.

Изменения или добавления функциональности:

  • Дисковый движок, который в более ранних версиях Tarantool’а назывался sophia или phia, заменен новым движком под названием vinyl.
  • Добавлены новые типы индексируемых полей.
  • Обновлена версия LuaJIT.
  • Поддерживается автоматическая настройка набора реплик, что существенно упрощает настройку нового набора реплик.
  • Функция space_object:inc() объявлена устаревшей.
  • Функция space_object:dec() объявлена устаревшей.
  • Добавлена функция space_object:bsize().
  • Удалена функция box.coredump(), аналог см. в главе Создание дампов памяти.
  • Добавлена опция настройки hot_standby (горячий резерв).
  • Исправленные или переименованные конфигурационные параметры:
    • slab_alloc_arena (в гигабайтах) в memtx_memory (в байтах),
    • slab_alloc_minimal в memtx_min_tuple_size,
    • slab_alloc_maximal в memtx_max_tuple_size,
    • replication_source в replication,
    • snap_dir в memtx_dir,
    • logger в log,
    • logger_nonblock в log_nonblock,
    • snapshot_count в checkpoint_count,
    • snapshot_period в checkpoint_interval,
    • panic_on_wal_error и panic_on_snap_error объединены в force_recovery.
  • В версиях Tarantool’а до 1.8 можно использовать устаревшие параметры как для начальной, так и для рабочей конфигурации, но в таком случае Tarantool выдаст предупреждение. Также можно указывать как устаревшие, так и новые параметры при условии, что их значения согласованы. В противном случае, Tarantool выдаст ошибку.
  • У кластера репликации появилась возможность автоматической настройки, что существенно упрощает настройку нового кластера.
  • Новые индексируемые типы данных: INTEGER (целое число) и SCALAR (скаляр).
  • Рефакторинг кода и улучшение производительности.
  • LuaJIT обновлен до версии 2.1-beta116.

Версия 1.6

Версия 1.6.9

Тип версии: обновленная. Дата выхода: 2016-09-27. Тег версии: 1.6.9-4-gcc9ddd7.

С 15 февраля 2017 года вследствие проблемы № 2040 Удалить движок sophia из версии 1.6, движок базы данных под названием sophia отсутствует. В версии 1.7 его заменит движок базы данных vinyl.

Несовместимые изменения:

  • Поддержка SHA-0 (digest.sha()) прекращается по причине обновления OpenSSL.
  • Бинарный файл Tarantool’а будет динамически связываться с libssl.so во время компиляции вместо загрузки во время выполнения.
  • Пакеты для Fedora 22 объявлены устаревшими (прекращение поддержки).

Изменения или добавления функциональности:

  • Автодополнение по Tab в интерактивной консоли. Проблема 86
  • Принимаются во внимание переменные окружения LUA_PATH и LUA_CPATH, как в PUC-RIO Lua. Проблема 1428
  • Поиск по библиотекам .dylib, а также .so в OS X. Проблема 810.
  • Новая опция box.cfg { read_only = true } для моделирования поведения главный-ведомый. Проблема 246
  • Опция if_not_exists = true добавлена в box.schema.user.grant. Проблема 1683
  • Функции clock_realtime()/monotonic() добавлены в общедоступный API для языка C. Проблема 1455
  • Появляется space:count(key, opts) в качестве псевдонима для space.index.primary:count(key, opts). Проблема 1391
  • Обновление скрипта для 1.6.4 -> 1.6.8 -> 1.6.9. Проблема 1281
  • Поддержка OpenSSL 1.1. Проблема 1722

Новые модули и пакеты:

  • curl - неблокирующие привязки для libcurl
  • prometheus - сборщик метрик Prometheus для Tarantool’а
  • gis – полнофункциональное геопространственное расширение для Tarantool’а.
  • mqtt – клиент MQTT-протокола для Tarantool’а
  • luaossl - самый полноценный OpenSSL-модуль во вселенной Lua

Версия 1.6.8

Тип версии: обновленная. Дата выхода: 2016-02-25. Тег версии: 1.6.8-525-ga571ac0.

Несовместимые изменения:

  • RPM-пакеты для CentOS 7 / RHEL 7 Fedora 22+ будут использовать встроенную конфигурацию systemd без устаревших скриптов sysvinit. В systemd появляется возможность управления несколькими экземплярами. Чтобы обновить, выполните следующие действия:

    1. Убедитесь в наличии файла ИМЯ_ЭКЗЕМПЛЯРА.lua в директории /etc/tarantool/instace.available.
    2. Остановите ЭКЗЕМПЛЯР с помощью tarantoolctl stop ИМЯ_ЭКЗЕМПЛЯРА.
    3. Запустите ЭКЗЕМПЛЯР с помощью systemctl start tarantool@ИМЯ_ЭКЗЕМПЛЯРА.
    4. Включите ЭКЗЕМПЛЯР во время загрузки системы с помощью systemctl enable tarantool@ИМЯ_ЭКЗЕМПЛЯРА.

    Директория /etc/tarantool/instance.enabled больше не используется для платформ, запускаемых по systemd.

    Для получения дополнительной информации см. главу по администрированию серверной части.

  • Движок Sophia был обновлен до версии 2.1 для исправления ошибок upsert, нарушения целостности данных в памяти и других ошибок. Sophia версии 2.1 не поддерживает старый формат данных версии 1.1. Используйте репликацию в Tarantool’е для обновления. Проблема 1222

  • Ubuntu Vivid, Fedora 20, Fedora 21 объявлены устаревшими по причине прекращения поддержки.

  • i686-пакеты объявлены устаревшими. Используйте наши спецификации по RPM и DEB для сборки на своей инфраструктуре.

  • Обновите yum.repos.d и/или apt sources.list.d в соответствии с инструкциями по ссылке http://tarantool.org/download.html

Изменения или добавления функциональности:

  • Tarantool в версии 1.6.8 полностью поддерживает процессоры ARMv7 и ARMv8 (aarch64). Теперь можно будет использовать Tarantool на самых разных пользовательских устройствах от популярного Raspberry PI 2 и до плат размером с монету и безымянных мини-микро-нано-компьютеров. Проблема 1153. (На qemu также работает хорошо, но у нас нет оборудования, чтобы проверить.)

  • Функции компаратора кортежей были оптимизированы, чтобы обеспечить повышение производительности на 30%, когда индексный ключ состоит из 2, 3 и более частей. Проблема 969.

  • Изменения распределителя кортежей дают улучшение производительности еще на 15%. Проблема 1298

  • Производительность передачи данных репликации была улучшена путем уменьшения объема данных в повторном сканировании. Проблема 11150

  • В демоне создания снимков появилась произвольная задержка, что снижает возможность того, что несколько экземпляров будут делать снимки одновременно. Проблема 732.

  • Движок базы данных Sophia был обновлен до версии 2.1:

    • изоляция сериализуемых снимков (SSI – Serializable Snapshot Isolation),
    • режим хранения в оперативной памяти,
    • режим хранения без кэша,
    • режим хранения в кэше с подключением к базе данных,
    • внедренный AMQ-фильтр,
    • режим LRU (удаление страниц, которые дольше всего не использовались),
    • отдельная компрессия горячих и холодных данных,
    • внедрение снимков для быстрого восстановления,
    • реорганизация и исправление ошибок в upsert,
    • новые метрики производительности.

    Обратите внимание на «Несовместимые изменения» выше.

  • Возможно удаление серверов с ненулевым LSN из спейса _cluster. Проблема 1219.

  • net.box теперь автоматически перезагружает схемы спейса и индексов. Проблема 1183.

  • Максимальное количество индексов в спейсе было увеличено до 128. Проблема 1311.

  • Новая встроенная конфигурацию systemd с поддержкой управления экземплярами и контролем демонов (только CentOS 7 и Fedora 22+). См. «Несовместимые изменения» выше. Проблема 1264.

  • Пакет Tarantool’а принят в официальный репозиторий Fedora (https://apps.fedoraproject.org/packages/tarantool).

  • Пакет Tarantool’а (OS X) принят в официальный репозиторий Homebrew (http://brewformulas.org/tarantool).

  • Поддержка компилятора Clang добавлена в FreeBSD. Проблема 786.

  • Добавлена поддержка библиотеки musl libc, используемой образами Alpine Linux и Docker. Проблема 1249.

  • Добавлена поддержка GCC 6.0.

  • Получили поддержку Ubuntu Wily, Xenial и Fedora 22, 23 и 24, для которых мы создаем официальные пакеты.

  • box.info.cluster.uuid можно использовать для получения UUID кластера. Проблема 1117.

  • Многочисленные исправления в документации, добавлена документация по пакетам syslog, clock, fiber.storage, встроенное практическое задание получило обновление.

Новые модули и пакеты:

  • Tarantool перешел на новую облачную инфраструктуру на основе Docker. Новый инструмент интеграции разработки buildbot значительно уменьшает время передачи коммитов в пакеты. Официальные репозитории по ссылке http://tarantool.org теперь содержат последнюю версию сервера, модулей и коннекторов. См. http://github.com/tarantool/build
  • Репозитории по ссылке http://tarantool.org/download.html were был перенесены в облачное хранилище http://packagecloud.io (при поддержке Amazon AWS). Благодарим packagecloud.io за поддержку свободного ПО!
  • memcached – внедрение текстового и бинарного протокола memcached для Tarantool’а. Превращает Tarantool в memcached с доступом к базе данных с репликацией по схеме мастер-мастер. См. https://github.com/tarantool/memcached
  • migrate – модуль Tarantool’а для миграции с версии 1.5 на версию 1.6. См. https://github.com/bigbes/migrate
  • cqueues – асинхронный Lua-каркас для работы по сети с потоками и уведомлениями (разработал @daurnimator). Проблема 1204.

Версия 1.6.7

Тип версии: обновленная. Дата выхода: 2015-11-17.

Несовместимые изменения:

  • Изменился синтаксис команды upsert, и из нее был удален дополнительный аргумент key. Первичный ключ для поиска всегда берется из кортежа, который является вторым аргументом в upsert. upsert() добавили довольно поздно в рабочем цикле, и в проекте была очевидная ошибка, которую нам пришлось исправлять. Извините.
  • Функцию fiber.channel.broadcast() удалили, потому что ее никто не использовал, и она работала некорректно.
  • Команда reload утилиты tarantoolctl переименована в``eval``.

Изменения или добавления функциональности:

  • Опция logger допускает синтаксис для вывода в системный журнал syslog. Используйте синтаксис URI, чтобы определить место назначения журнала: в файл, в конвейер или syslog.
  • replication_source принимает массив URI, так что в каждой реплике может быть до 30 узлов.
  • RTREE-индекс принимает два типа функций distance: euclid и manhattan.
  • fio.abspath() – новая функция в модуле fio для конвертации относительного пути в абсолютный.
  • Название процесса теперь можно определить с помощью встроенного модуля title.
  • В данной версии используется LuaJIT 2.1.

Новые сторонние библиотеки:

  • memcached помогает Tarantool’у понимать бинарный протокол Memcached. Поддержка текстового протокола находится в процессе разработки и будет добавлена в отдельный модуль без изменений основных компонентов.

Версия 1.6.6

Тип версии: обновленная. Дата выхода: 2015-08-28.

Tarantool версии 1.6 больше не получает значимых новых функций, но продолжает поддерживаться. Разработчики сосредоточили свои усилия на версии 1.9.

Несовместимые изменения:

  • Появляется новая схема системного спейса _index для размещения многомерных RTREE-индексов. Tarantool 1.6.6 нормально работает со старыми снимками и системными спейсами, но нельзя будет запустить Tarantool версии 1.6.5 с директорий, созданной в Tarantool’е версии 1.6.6, как нельзя будет ввести запрос в Tarantool 1.6.6 с net.box версии 1.6.5.
  • Переименование box.info.snapshot_pid в box.info.snapshot_in_progress

Изменения или добавления функциональности:

  • Потоковая архитектура для работы по сети. Сетевой ввод-вывод окончательно переведен на отдельный поток, что увеличит производительность отдельного экземпляра до 50%.
  • Потоковая архитектура для создания контрольных точек. Tarantool больше не делает ответвлений для создания снимка, а использует отдельный поток, получая доступ к данным с помощью вида постоянного просмотра. Это помогает устранить скачки задержки отклика во время создания снимков.
  • Хранимые процедуры на языках C/C++. Хранимые процедуры на языках C/C++ дают скорость (в 3-4 раза больше по сравнению с Lua-версией по нашим подсчетам), а также возможность неограниченного расширения. Поскольку процедуры C/C++ выполняются там же, где располагается база данных, они могут с легкостью повредить базу данных. См. API для языка C.
  • Многомерный RTREE-индекс. RTREE-индекс теперь поддерживает большое количество измерений (до 32). Cтруктура данных RTREE была оптимизирована так, чтобы действительно использовать R*-TREE. Мы работаем над дальнейшим улучшением индекса, в частности, над функцией конфигурации расстояния. См. https://github.com/tarantool/tarantool/wiki/R-tree-index-quick-start-and-usage
  • Sophia 2.1.1 с поддержкой компрессии и составных первичных ключей. См. https://groups.google.com/forum/#!topic/sophia-database/GfcbEC7ksRg
  • В бинарном протоколе и в хранимых функциях доступна новая команда upsert. Ключевое преимущество команды upsert в том, что она работает намного быстрее с хранилищами, оптимизированными для чтения (движок базы данных sophia), однако есть также некоторые оговорки. Для получения дополнительной информации см. проблему 905. И хотя преимущество производительности upsert наиболее очевидно с движком sophia, команда работает со всеми движками базы данных.
  • Более точная информация диагностики памяти для файберов, кортежей и индексов. Используйте новую команду box.slab.stats() для получения подробной информация о кортежах/индексах, команда fiber.info() отобразит информацию о памяти, занятой файбером.
  • Операции update и delete работают с использованием вторичного индекса, если индекс уникальный.
  • Триггеры для аутентификации. Установите триггеры box.session.on_auth для отслеживания событий аутентификации. API для триггеров улучшили, чтобы он отображал все заданные триггеры, старые триггеры легко удалить.
  • Разнообразные улучшения производительности встроенного модуля net.box.
  • Оптимизация производительности BITSET-индекса.
  • panic_on_wal_error представляет собой динамический параметр конфигурации.
  • Поле iproto sync доступно в Lua как session.sync().
  • box.once() – новый метод для вызова кода однократно в течение срока жизни экземпляра и набора реплик. Используйте once() для настройки спейсов и пользователей, а также для обновления схемы в эксплуатационной среде.
  • box.error.last() возвращает последнюю ошибку в сессии.

Новые сторонние библиотеки:

  • Следующие модули LuaJIT 2.0 теперь являются встроенными: jit.*, jit.dump, jit.util, jit.vmdef. См. http://luajit.org/ext_jit.html
  • strict – встроенный пакет, который запрещает использование необъявленных переменных в Lua. Работа ведется в таком режиме, когда Tarantool компилируется с отладкой. Чтобы включить/отключить этот режим, используйте require('strict').on()/require('strict').off() соответственно.
  • pg и mysql – модули, доступные по ссылке http://rocks.tarantool.org – работают с MySQL и PostgreSQL из Tarantool’а.
  • gperftools – модуль, доступный по ссылке http://rocks.tarantool.org – получает данные о производительности с помощью Google gperf из Tarantool’а.
  • csv – встроенный модуль для разбора и загрузки данных в формате CSV (значения, разделенные запятыми).

Поддержка новой платформы:

  • Fedora 22, Ubuntu Vivid