Top.Mail.Ru
Примечания к версиям | Tarantool
 
Примечания к версиям
Примечания к версиям

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

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

Примечания к версиям содержат краткое описание значимых изменений в следующих версиях 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.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.

Version 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:

    CREATE TABLE t2 (id INT PRIMARY KEY);
    ALTER TABLE t2 ADD CONSTRAINT ck CHECK(id  > 0);
    
  • (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:

    box.schema.func.create('summarize',
                          {body = [[function(a,b) return a+b end]],
                          is_deterministic = true})
    
    tarantool> box.func.summarize
    - aggregate: none
      returns: any
      exports:
        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
                 end]]
    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}}
    sk:select(2)
    
    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)
        pk:delete(key)
    end
    s:select()
    
  • (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'}}})
    box.space.named:insert({1})
    
    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:

    unicode_<locale>_<strength>
    

    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:

    unicode_am_s3
    unicode_fi_s3
    unicode_de__phonebook_s3
    unicode_haw_s3
    unicode_he_s3
    unicode_hi_s3
    unicode_is_s3
    unicode_ja_s3
    unicode_ko_s3
    unicode_lt_s3
    unicode_pl_s3
    unicode_si_s3
    unicode_es_s3
    
  • 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
      rows:
      - [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")
    box.session.su("optimizer")
    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

Release type: beta. Release date: 2018-11-14.

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

This release resolves all major bugs since 2.0.4 alpha and extends Tarantool’s SQL feature set.

Release 2.0.4

Release type: alpha. Release date: 2018-02-15.

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

This is a successor of the 1.8.x releases. It improves the overall stability of the SQL engine and has some new features.

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

  • Added support for SQL collations by incorporating libICU character set and collation library.
  • IPROTO interface was extended to support SQL queries.
  • net.box subsystem was extended to support SQL queries.
  • Enabled ANALYZE statement to produce correct results, necessary for efficient query plans.
  • Enabled savepoints functionality. SAVEPOINT statement works w/o issues.
  • Enabled ALTER TABLE ... RENAME statement.
  • Improved rules for identifier names: now fully consistent with Lua frontend.
  • Enabled support for triggers; trigger bodies now persist in Tarantool snapshots and survive server restart.
  • Significant performance improvements.

Версия 1.10

Версия 1.10.4

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

Сообщение: https://github.com/tarantool/tarantool/releases/tag/1.10.4.

Общие сведения

1.10.4 представляет собой очередную стабильную (lts) версию в серии 1.10. Пометка «стабильная» означает, что некоторые системы в течение определенного времени успешно отработали в производственной среде без известных сбоев, ненадежных результатов и прочих неисправностей.

Данная версия содержит около 50 исправлений по сравнению с версией 1.10.3.

Совместимость

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

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

  • (Движки) Улучшена запись в журнал о событиях начала/окончания процесса создания дампа. При запуске создания дампа записывается объем памяти, для которого создается дамп, предполагаемая скорость создания дампа, ETA, а также последняя скорость записи. По окончании создания дампа записывается зарегистрированная скорость создания дампа, а также размер дампа и длительность.

  • (Движки) Поиск ключа в потоке чтения. Если ключ не обнаружен в кэше кортежа, забираем его из файла забега. В этом случае чтение с диска и распаковка страницы выполняется потоком чтения, однако поиск ключа на выбранной странице все еще выполняется потоком TX. Поскольку страницы являются неизменяемыми, это может сделать поток чтения, что позволит нам сэкономить ценные циклы ЦП для TX. Проблема 4257.

  • (Ядро) Улучшена работа box.stat.net. Проблема 4150.

  • (Ядро) Добавлен статус idle (простаивание) для downstream в box.info. Когда передается строка, обновляется значение last_row_time с текущим временем. Когда идет вызов box.info(), значение idle задается как current_time (текущее время) - last_row_time (время передачи последней строки).

  • (Репликация) Вывод поврежденных данных при ошибке декодирования. Улучшена запись строк в журнал. Вывод заголовка построчно, 16 байтов в строке, формат вывода соответствует выводу xxd:

    [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) Добавлен тип операций в параметры триггера. Например, теперь функция с триггером может выглядеть следующим образом:

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

    Проблема 4099.

  • (Lua) Добавлены debug.sourcefile() и debug.sourcedir() (а также ускоренные методы debug.__file__ и debug.__dir__) для обнаружения местонахождения текущего исходного файла на Lua. Часть проблемы 4193.

  • (HTTP-клиент) Добавлена опция max_total_connections в дополнение к max_connections, что позволяет более тонко настраивать кэш соединения libcurl. Общее число соединений больше не ограничено постоянным значением по умолчанию, а используется значение по умолчанию из``libcurl``, что масштабирует предел в зависимости от количества обработчиков. Проблема 3945.

Исправленные ошибки

  • (Vinyl) Исправлен отказ в vy_tx_handle_deferred_delete. Проблема 4294.
  • (Vinyl) Не очищать удаленные забеги из vylog при слиянии. Отдельные элементы из проблемы 4218.
  • (Vinyl) Не управлять загрузкой DDL. Проблема 4238.
  • (Vinyl) Исправить потерю при коммите отложенных предложений DELETE. Проблема 4248.
  • (Vinyl) Исправить допустимость неопределенного значения при восстановлении предложения из дампа. Проблема 4222.
  • (Vinyl) Сбросить уровень дампа после обновления предела загрузки памяти. Проблема 3864.
  • (Vinyl) Применять пессимистический прогноз скорости записи при установленном уровне дампа. Проблема 4166.
  • (Vinyl) Исправить сбой при удалении спейса во время чтения из него через space.get. Проблема 4109.
  • (Vinyl) Исправить сбой во время создания индекса. Проблема 4152.
  • (Vinyl) Не сжимать забеги L1. Проблема 2389.
  • (Vinyl) Считать операторы, пропущенные при чтении.
  • (Vinyl) Принять во внимание поиск первичного ключа при учете задержек.
  • (Vinyl) Исправить зависание vy_range_update_compaction_priority.
  • (Vinyl) Освобождать область при фиксации vylog вместо сброса и очищать после выделения заместителя оператора.
  • (Vinyl) Еще увеличить ограничение на количество открытых файлов в файле systemd.
  • (Vinyl) Увеличить минимальный размер диапазона до 128 Мбайт
  • (Memtx) Отменить поток создания контрольных точек на выходе. Проблема 4170.
  • (Ядро) Исправить отказ для обновления с пустым кортежем. Проблема 4041.
  • (Ядро) Исправить использование освобожденной памяти в space_truncate. Проблема 4093.
  • (Ядро) Исправить ошибку при изменении индекса с последовательностью. Проблема 4214.
  • (Ядро) Выявить новый случай неправильного json-пути. Проблема 4419.
  • (Ядро) Исправить аутентификацию с пустым паролем. Проблема 4327.
  • (Ядро) Исправить размер массива txn::sub_stmt_begin.
  • (Ядро) Учитывать index.pairs в box.stat.SELECT().
  • (Репликация) Запретить настройку мастеров только для чтения. Проблема 4321.
  • (Репликация) Входить в режим одиночного сервера при ручном изменении настройки репликации. Проблема 4424.
  • (Репликация) Задать значение now для last_row_time в relay_new и relay_start. Проблема 4431.
  • (Репликация) Остановить передачу данных при ошибке подписки. Проблема 4399.
  • (Репликация) Запустить средство отслеживания coio перед join/subscribe. Проблема 4110.
  • (Репликация) Разрешить изменение идентификатора экземпляра во время присоединения. Проблема 4107.
  • (Репликация) Исправить логику сборки мусора.
  • (Репликация) Вернуть проверку границ пакета для iproto.
  • (Репликация) Не прерывать репликацию при ER_UNKNOWN_REPLICA.
  • (Репликация) Уменьшить воздействие фрагментации буфера ввода при большом cfg.readahead.
  • (Репликация) Исправить обновление с 1.7 (не распознает тип запроса IPROTO_VOTE).
  • (Репликация) Исправить утечку памяти в call / eval в случае отсутствия коммита транзакции. Проблема 4388.
  • (Lua) Исправить регистрацию ошибок fio.mktree(). Проблема 4044.
  • (Lua) Исправить ошибку сегментации в ffi.C_say() без имени файла. Проблема 4336.
  • (Lua) Исправить ошибку сегментации в json.encode() на рекурсивную таблицу. Проблема 4366.
  • (Lua) Исправить зависание pwd.getpwall() и pwd.getgrall() на CentOS 6 и FreeBSD 12. Проблемы 4447, 4428.
  • (Lua) Исправить ошибку сегментации во время инициализации cipher from crypto module. Проблема 4223.
  • (HTTP-клиент) Уменьшить потребление стека во время ожидания результата определения DNS. Проблема 4179.
  • (HTTP-клиент) Увеличить максимальный размер заголовка до 8 КиБ. Проблема 3959.
  • (HTTP-клиент) Сильнее проверять опцию «headers». Проблемы 4281, 3679.
  • (HTTP-клиент) Использовать libcurl в комплекте, а не системный по умолчанию. Проблемы 4318, 4180, 4288, 4389, 4397.
  • (HTTP-клиент) Закрывает несколько известных проблем, которые были исправлены в последних версиях libcurl, включая ошибки сегментации, зависания, утечки памяти и проблемы производительности.
  • (LuaJIT) Исправить переполнение массива снимка. Часть проблемы 4171.
  • (LuaJIT) Исправить повторное сцепление псевдо-восстановленных строковых ключей. Часть проблемы 4171.
  • (LuaJIT) Исправить ошибки алгоритма свертывания. Проблема 4376.
  • (LuaJIT) Исправить debug.getinfo(1,“>S“). Проблема 3833.
  • (LuaJIT) Исправить записи string.find. Проблема 4476.
  • (LuaJIT) Исправлена ошибка нетонущих 64-битных указателей.
  • (Разное) Еще увеличить предел количества открытых файлов в файле systemd.
  • (Разное) Выдавать ошибку в tarantoolctl при отсутствии вызова box.cfg(). Проблема 3953.
  • (Разное) Поддерживать NOTIFY_SOCKET из systemd на OS X. Проблема 4436.
  • (Разное) Исправить coio_getaddrinfo() при передаче времени ожидания 0 (влияет на connect_timeout в netbox). Проблема 4209.
  • (Разное) Исправить coio_do_copyfile() для выполнения усечения места назначения (влияет на fio.copyfile()). Проблема 4181.
  • (Разное) Сделать подсказки в coio_getaddrinfo() необязательными.
  • (Разное) Проверять аргумент размера msgpack.decode(). Проблема 4224.
  • (Разное) Исправить привязку к статической библиотеке openssl. Проблема 4437.

Устаревшие функции

  • (Ядро) wal_max_size заменяет устаревший rows_per_wal. Часть проблемы 3762.

Версия 1.10.3

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

Сообщение: https://github.com/tarantool/tarantool/releases/tag/1.10.3.

Общие сведения

1.10.3 представляет собой очередную стабильную (lts) версию в серии 1.10. Пометка «стабильная» означает, что некоторые системы в течение определенного времени успешно отработали в производственной среде без известных сбоев, ненадежных результатов и прочих неисправностей.

Данная версия содержит 69 исправлений по сравнению с версией 1.10.2.

Совместимость

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

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

  • (Движки) Слияние индексов в vinyl’е носит случайный характер. Проблема 3944.
  • (Движки) Регулировка потока tx, если слияние не успевает за созданием дампов. Проблема 3721.
  • (Движки) Отмена run_count_per_level для последнего уровня. Проблема 3657.
  • (Сервер) Отчет о количестве активных соединений iproto. Проблема 3905.
  • (Репликация) Удаление мертвой реплики, когда не хватает свободного места на диске. Проблема 3397.
  • (Репликация) Отчет о состоянии присоединения в журнале реплики. Проблема 3165.
  • (Lua) Отображение статуса снимка в box.info.gc(). Проблема 3935.
  • (Lua) Отображение имен Lua-функций в обратной трассировке fiber.info(). Проблема 3538.
  • (Lua) Проверка наличия открытой транзакции. Проблема 3518.

Исправленные ошибки

  • (Движки) Сбой Tarantool’а при гонке потоков DML и DDL. Проблема 3420.
  • (Движки) Ошибка восстановления при прерывании работы DDL. Проблема 4066.
  • (Движки) Коммиты Tarantool’а в режиме только для чтения. Проблема 4016.
  • (Движки) Сбой итератора vinyl’а при использовании DDL. Проблема 4000.
  • (Движки) Vinyl не завершает работу, пока не закончится создание дампа или слияние. Проблема 3949.
  • (Движки) После повторного создания вторичного индекса не видно данных. Проблема 3903.
  • (Движки) Незагруженность box.info.memory().tx. Проблема 3897.
  • (Движки) Vinyl замедляет скорость при интенсивных случайных вставках. Проблема 3603.
  • (Сервер) Новая версия libcurl вызывает переполнение стека файбера. Проблема 3569.
  • (Сервер) SIGHUP вызывает завершение работы Tarantool’а. Проблема 4063.
  • (Сервер) checkpoint_daemon.lua:49: неправильный аргумент №2 для „format“. Проблема 4030.
  • (Сервер) fiber:name() показывает только часть имени. Проблема 4011.
  • (Сервер) Второе переключение режима горячего резервирования hot standby может не сработать. Проблема 3967.
  • (Сервер) Обновление box.cfg.readahead не влияет на текущие соединения. Проблема 3958.
  • (Сервер) fiber.join() остается заблокирован в статусе „suspended“, если файбер был отменен. Проблема 3948.
  • (Сервер) Tarantool может завершить работу с ошибкой при отправке ненужных данных в бинарный сокет. Проблема 3900.
  • (Сервер) Хранимая процедура для создания push-сообщений не прерывается при отключении клиента. Проблема 3859.
  • (Сервер) Tarantool завершил работу с ошибкой в lj_vm_return. Проблема 3840.
  • (Сервер) Файбер, выполняющий box.cfg(), может обрабатывать сообщения из iproto. Проблема 3779.
  • (Сервер) Возможная регрессия на nosqlbench. Проблема 3747.
  • (Сервер) Утверждение после неправильного создания индекса. Проблема 3744.
  • (Сервер) Сбой Tarantool’а при запуске поvshard (lj_gc_step). Проблема 3725.
  • (Сервер) Репликация не запускается повторно на box.cfg, если конфигурация не изменилась. Проблема 3711.
  • (Репликация) Время работы наложения (applier) сокращается при чтении кортежей большого размера. Проблема 4042.
  • (Репликация) Сбой присоединения реплики Vinyl. Проблема 3968.
  • (Репликация) Ошибка во время репликации. Проблема 3910.
  • (Репликация) Статус downstream не отображается в replication.info, если канал не сломан. Проблема 3904.
  • (Репликация) Сбой репликации: несовпадение контрольной суммы tx. Проблема 3993.
  • (Репликация) Повторная настройка не производится, если на мастере есть строки из реплики. Проблема 3740.
  • (Репликация) После перезапуска состояние кортежей откатывается на дорепликационное состояние. Проблема 3722.
  • (Репликация) Добавление vclock для более безопасного переключения в режим горячего резервирования hot standby. Проблема 3002.
  • (Репликация) Строка из мастера исчезает при сбое записи в журнал упреждающей записи. Проблема 2283.
  • (Lua) Сбой преобразования space:frommap():tomap(). Проблема 4045.
  • (Lua) Неинформативное сообщение при попытке прочитать отрицательное значение счетчика байтов из сокета. Проблема 3979.
  • (Lua) space:frommap вызывает ошибку несовпадения кортежей («tuple field does not match…») даже для нулевого поля. Проблема 3883.
  • (Lua) Завершение работы Tarantool’а с ошибкой на net.box.call после нормальной работы с внутренним файбером vshard. Проблема 3751.
  • (Lua) Использование динамической памяти в lbox_error. Проблема 1955.
  • (Разное) http.client не подтверждает „connection: keep-alive“. Проблема 3955.
  • (Разное) Сломан wait_connected в net.box. Проблема 3856.
  • (Разное) Сборка Mac завершается с ошибкой в Mojave. Проблема 3797.
  • (Разное) Ошибка сборки FreeBSD: отсутствует поддержка SSL. Проблема 3750.
  • (Разное) „http.client“ выдает неправильную (?) причину. Проблема 3681.
  • (Разное) Http client молча изменяет заголовки, когда значение – не «строка» и не «число». Проблема 3679.
  • (Разное) yaml.encode использует многострочный формат для „false“ и „true“. Проблема 3662.
  • (Разное) yaml.encode неправильно кодирует „null“. Проблема 3583.
  • (Разное) Пустое сообщение объекта ошибки. Проблема 3604.
  • (Разное) Журнал переполняется предупреждениями. Проблема 2218.

Устаревшие функции

  • Опция console=true для net.box.new() объявлена устаревшей.

Версия 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 (Сервер) допустимость :ref:`резервного копирования любой контрольной точки <reference_lua-box_backup-backup_start>, а не только последней. Проблема 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.

Version 1.8

Release 1.8.1

Release type: alpha. Release date: 2017-05-17. Tag: 1.8.1.

Announcement: https://groups.google.com/forum/#!msg/tarantool-ru/XYaoqJpc544/mSvKrYwNAgAJ.

This is an alpha release which delivers support for a substantial subset of the ISO/IEC 9075:2011 SQL standard, including joins, subqueries and views. SQL is a major feature of the 1.8 release series, in which we plan to add support for ODBC and JDBC connectors, SQL triggers, prepared statements, security and roles, and generally ensure SQL is a first class query language in 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 and Lua are fully interoperable.

  • New meta-commands introduced to Tarantool’s console.

    You can now set input language to either SQL or Lua, e.g.:

    tarantool> \set language sql
    tarantool> SELECT * FROM _schema;
    tarantool> \set language lua
    tarantool> print("Hello, world!")
    
  • Most SQL statements are supported:

    • CREATE/DROP TABLE/INDEX/VIEW

      tarantool> CREATE TABLE table1 (column1 INTEGER PRIMARY KEY, column2 VARCHAR(100));
      
    • INSERT/UPDATE/DELETE statements e.g.:

      tarantool> INSERT INTO table1 VALUES (1, 'A');
      ...
      tarantool> UPDATE table1 SET column2 = 'B';
      
    • SELECT statements, including complex complicated variants which include multiple JOINs, nested SELECTs etc. e.g.:

      tarantool> SELECT sum(column1) FROM table1 WHERE column2 LIKE '_B' GROUP BY column2;
      
    • WITH statements e.g.

      tarantool> WITH cte AS ( SELECT SUBSTR(column2,1,2), column1 FROM table1 WHERE column1 >= 0) SELECT * FROM cte;
      
    • SQL schema is persistent, so it is able to survive snapshot()/restore() sequence.

    • SQL features are described in a tutorial.

Версия 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() использовался только в клиентских библиотеках, но с версии Tarantool 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