Примечания к версиям
Примечания к версиям содержат краткое описание значимых изменений в следующих версиях Tarantool’а: 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.
Версия 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.
- (Сервер) метод, чтобы определить был ли запуск или перезапуск процесса 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.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.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?
- В дополнение к откату транзакции, появился откат на определенную точку в пределах транзакции – поддержка точки сохранения.
- Появился новый объектный тип: последовательности. Устаревший вариант, автоматическое увеличение, объявлен устаревшим.
- В строковых индексах появилась сортировка.
Добавлены новые опции:
Несовместимые изменения:
- Расширенная структура
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:
Новые функции 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()
была удалена из APIdigest
. Проблема 1591.Поддержка SHA-0 (
digest.sha()
) прекращается по причине обновления OpenSSL.
net.box
будет использовать индексы, начинающиеся с 1, дляspace.name.index[x].parts
. Проблемы 1729.Бинарный файл Tarantool’а будет динамически связываться с
libssl.so
во время компиляции вместо загрузки во время выполнения.Пакеты Debian и Ubuntu будут использовать встроенную конфигурацию
systemd
вместе с вышедшими из употребления скриптамиsysvinit
.В
systemd
появляется возможность управления несколькими экземплярами. Чтобы обновить, выполните следующие действия:
- Установите новые пакеты версии 1.7.2.
- Убедитесь в наличии файла
ИМЯ_ЭКЗЕМПЛЯРА.lua
в директории/etc/tarantool/instance.enabled
.- Остановите ЭКЗЕМПЛЯР с помощью
tarantoolctl stop ИМЯ_ЭКЗЕМПЛЯРА
.- Запустите ЭКЗЕМПЛЯР с помощью
systemctl start tarantool@ИМЯ_ЭКЗЕМПЛЯРА
.- Включите ЭКЗЕМПЛЯР во время загрузки системы с помощью
systemctl enable tarantool@ИМЯ_ЭКЗЕМПЛЯРА
.- Введите команду
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.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 появляется возможность управления несколькими экземплярами. Чтобы обновить, выполните следующие действия:
- Убедитесь в наличии файла
ИМЯ_ЭКЗЕМПЛЯРА.lua
в директории/etc/tarantool/instace.available
.- Остановите ЭКЗЕМПЛЯР с помощью
tarantoolctl stop ИМЯ_ЭКЗЕМПЛЯРА
.- Запустите ЭКЗЕМПЛЯР с помощью
systemctl start tarantool@ИМЯ_ЭКЗЕМПЛЯРА
.- Включите ЭКЗЕМПЛЯР во время загрузки системы с помощью
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
и/или aptsources.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/memcachedmigrate
– модуль Tarantool’а для миграции с версии 1.5 на версию 1.6. См. https://github.com/bigbes/migratecqueues
– асинхронный 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.htmlstrict
– встроенный пакет, который запрещает использование необъявленных переменных в 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