diff --git a/doc/release/enterprise-changelog.rst b/doc/release/enterprise-changelog.rst index 3479d639d..d12cb6b26 100644 --- a/doc/release/enterprise-changelog.rst +++ b/doc/release/enterprise-changelog.rst @@ -15,9 +15,240 @@ A :ref:`Tarantool Enterprise SDK ` version consists of two For example: ``2.11.1-0-gc42d9735b-r589``. -- ``TARANTOOL_BASE_VERSION`` is the Community version which the Enterprise version is based on. +- ``TARANTOOL_BASE_VERSION`` is the Enterprise version. - ``REVISION`` is the SDK revision. Besides Tarantool itself, it includes the ``tt`` utility, a set of open and closed source modules, and examples. Learn more from :ref:`Package contents `. +r708 +---- + +В релизе обновлены ключевые зависимости платформы: Tarantool 2.11.9 — bugfix‑релиз ветки 2.11, +ориентированный на повышение стабильности и предсказуемости работы. +В релизе улучшены диагностика и реакция на ошибки WAL, устранены зависания и проблемы обслуживания WAL‑файлов в Core, +а также внесён большой набор исправлений в LuaJIT и модуль Datetime. +Дополнительно обновлены и доработаны ключевые компоненты экосистемы (``crud``, ``vshard``, ``metrics``, ``tt-ee``, ``cartridge``, ``http``, ``graphqlapi-helpers``), +включая улучшения безопасной работы при ребалансировке, отказоустойчивого чтения и изменения в TLS/mTLS‑настройках HTTP. + +Tarantool 2.11.8 -> 2.11.9 +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Это bugfix-релиз: исправлено 34 проблемы с версии 2.11.8 (r702). + +* Версия 2.x — предыдущая стабильная ветка; рекомендуется обновляться до 3.x. +* Чтобы обновиться с Tarantool 2.x на 3.x см. `процедуру обновления `__. + +Core +^^^^ + +**Добавлено:** + +* Новое встроенное системное событие ``box.wal_error``, которое + рассылается каждый раз, когда Tarantool не удаётся зафиксировать + транзакцию в журнале предзаписи (WAL) (`gh-12585 `__). + +**Исправлено:** + +* Ошибка, из-за которой Tarantool мог зависать при использовании ``box.watch`` (`gh-9632 `__). +* Ошибка, при которой файлы ``.xlog.inprogress`` не удалялись + автоматически во время запуска сервера, если ``wal_dir`` задан и отличается от значения по умолчанию (`gh-12081 `__). +* Ошибка, при которой локальный спейс нельзя было очистить + (truncate), если спейс ``_truncate`` настроен как синхронный (synchronous) (`gh-12585 `__). + + +Выбор лидера +^^^^^^^^^^^^ + +* Если при записи в WAL возникает ``ER_WAL_IO``, текущий лидер при первом же + таком случае отказывается от своей роли. + +LuaJIT +^^^^^^ + +**Добавлено:** + +* Поддержка ``ffi.abi("dualnum")`` для определения режима LuaJIT (dual-number: различение целых int64 и double). +* Добавлены флаги ``misc.memprof.available`` и ``misc.sysprof.available`` для + определения доступности соответствующего профайлера в текущей сборке. + Подробнее про профайлеры в разделах `LuaJIT memory profiler `__ и `LuaJIT platform profiler `__. + +**Исправлено:** + +* Некорректная генерация ``IR_TBAR`` на aarch64. +* Обработка переполнения стека при выходе из трассировки. +* «Висячие» ссылки на ``CType``. +* Закрытие состояния VM после раннего OOM. +* Генерация ``IR_MUL`` на x86/x64. +* Некорректное объединение инструкций ``stp``/ ``ldp`` на + aarch64. +* Инвалидизация записи SCEV при возврате в более низкий фрейм. +* Сборка на macOS 15/Clang 16. +* Генерация ``IR_HREFK`` на aarch64. +* Проверки стека в varargs-вызовах в сборке GC64. +* Проверки стека в ``pcall()``/ ``xpcall()`` в сборке GC64. +* Лимит аллокаций для сборки без JIT. +* Обработка ошибок OOM при расширении стека в ``coroutine.resume()`` + и ``lua_checkstack()``. +* Запись (recording) циклов со значением шага ``-0`` или управляющими + значениями ``NaN``. +* Формирование сообщений об ошибках, когда ошибка возникает во время + обработки ошибки. +* «Висячая» ссылка для FFI callback. +* ``BC_UNM`` для аргумента ``-0`` в режиме ``dual-number``. +* Сужение (narrowing) унарного минуса в режиме ``dual-number``. +* Запись (recording) ``string.byte()``, ``string.sub()`` и + ``string.find()``. +* Отсутствие преобразования типов для слотов ``BC_FORI`` в режиме + ``dual-number``. +* Различные пограничные случаи в ``VM events``. +* Запись разрешения индекса конструктора в JIT-компиляторе. +* Предупреждение UBSan в ``unpack()``. + + +Модуль Datetime +^^^^^^^^^^^^^^^ + +**Исправлено:** + +* Падение из-за срабатывания ``assert`` при разборе неоднозначной + даты: когда в тексте одновременно указаны день года (``yday``, который + неявно задаёт месяц и день месяца) и календарный месяц (без дня месяца). + Теперь такие случаи распознаются, и отображается ошибка. +* Вычисления ``tzoffset`` для случаев вида + ``new({timestamp=x, tz='Zone'})``. +* Неконсистентность между датами, создаваемыми + ``new({tzoffset=x})``, и ``d:set({tzoffset=x})``, когда ``d.tz ~= ''`` идёт + перед ``set()``. +* Теперь ``datetime.new()`` и ``datetime_object:set()`` проверяют, что значение + ``timestamp`` находится в допустимом диапазоне. +* Проверка типа ``timestamp`` в ``set()``. + +Для обратной совместимости добавлена опция +``compat.datetime_setfn_timestamp_type_check``. Сейчас она по умолчанию +выключена («старое» поведение), то есть проверка типа не выполняется. «Новое» +поведение с проверкой типа планируется сделать значением по умолчанию в версии 4.x. + +.. note:: + + Ниже приведены модули, в которых произошли изменения. + Если модуль не указан в списке ниже, то обновления для него не выпускались. + + +crud 1.6.1 → 1.7.5 +~~~~~~~~~~~~~~~~~~ + +.. note:: + + Начиная с CRUD 1.6.0 закрыта уязвимость, позволявшая выполнять операции, на которые у пользователя не было прав. + Теперь CRUD строго соблюдает права доступа: пользователь может выполнять только те действия, которые разрешены его привилегиями. + Если приложению требуется доступ к служебным спейсам, соответствующие права необходимо выдавать явно. + +**Добавлено:** + +* Метод ``crud.locate()`` для определения, где находится кортеж — в движке memtx или vinyl. Работает для спейсов, управляемых enterprise-модулем ``cooler``. +* В ``crud.len`` добавлена поддержка опций: ``mode``, ``balance``, ``prefer_replica``, ``request_timeout``. +* ``safe mode`` – безопасный режим, предотвращающий запись данных в неверный набор реплик во время ребалансировки vshard. +* Метрика ``tnt_crud_router_cache_clear_ts``, помогающая корректно отключать безопасный режим в кластере. +* Автоматическое переключение в безопасный режим при старте ребалансировки. +* Возможность вручную вернуть быстрый режим (``fast mode``). +* Метрика ``tnt_crud_storage_nil_bucket_id_compat_total`` для отслеживания операций, выполненных без ``bucket_ref`` (режим совместимости со старыми роутерами). + +**Исправлено:** + +* Операции только для чтения (``get``, ``select``, ``pairs``, ``count``, ``min``, ``max``) теперь выполняются через здоровые реплики, даже если все мастер-узлы в кластере недоступны. +* Совместимость узлов хранилища с роутерами версии < 1.7.0: в ``get``, ``update``, ``delete`` корректно обрабатывается ``bucket_id = nil``. В этом случае хранилище пропускает ``bucket referencing`` и пишет ``rate-limited`` предупреждение о сниженной безопасности ребаланса во время обновления без простоя (*rolling upgrade*). +* Ошибка ``bucket_ref`` в методах ``crud.*_many`` теперь возвращается в виде массива. +* Вызов ``bucket_unref`` вынесен из транзакции. +* Предотвращено создание дублирующихся метрик при повторном вызове ``init``. +* Предотвращено создание дублирующихся триггеров на спейсe ``_crud_settings_local`` при повторном вызове ``init``. +* Взаимная блокировка в ``crud.schema()`` после ошибки перезагрузки схемы. +* Удалена метрика ``tnt_crud_storage_safe_mode_enabled`` с роутера. +* Убрана обёртка ``wrap_box_space_func_result`` для сокращения аллокаций и ускорения вызовов узла хранилища. + +**Изменено:** + +* При переключении в безопасный режим прекращена практика пометки/остановки iproto файберов в быстром режиме; корректность операций на узле хранилища проверяется через ``yield_checks`` в тестах. +* Переключение в безопасный режим перенесено с триггера ``on_commit`` на ``on_replace``. +* Спейсы на движке vinyl всегда работают в безопасном режиме. + +vshard 0.1.37 → 0.1.39 +~~~~~~~~~~~~~~~~~~~~~~ + +Версия 0.1.39 полностью совместима с предыдущими версиями vshard. + +**Добавлено:** + +* Возможность отключать ограничитель частоты логирования (log rate limiter) через модуль ``consts``. + +**Исправлено:** + +* Проблема, из‑за которой старый мастер-узел не мог обнаружить новый мастер-экземпляр в пределах набора реплик. +* Утечка соединений: соединение не освобождалось сборщиком мусора после реконфигурации или перезагрузки. +* Ограничение транзакций при работе с ``_bucket``: ранее ``on_commit``‑триггер на ``_bucket`` блокировал запись в другие спейсы в + рамках той же транзакции (например, из ``on_replace``‑триггеров). Теперь такие сценарии разрешены — в ``on_commit`` пропускаются изменения, относящиеся к «чужим» спейсам. + +metrics 1.6.2 → 1.7.0 +~~~~~~~~~~~~~~~~~~~~~ + +* ``graphite``: добавлена возможность отправлять метрики на несколько серверов. +* Обратная совместимость с предыдущей версией плагина сохранена. +* Изменения в поведении: + + - ``init`` теперь присваивает уникальное имя создаваемому файберу ``fiber`` на основе входных опций ``graphite server`` (если переданы). + - добавлен метод ``stop()`` для остановки всех файберов ``fibers``, запущенных плагином. + + +tt-ee v2.11.4 -> v2.12.0 +~~~~~~~~~~~~~~~~~~~~~~~~ + +* Исправления, выявленные CVE-линтерами. +* ``tt pack``: добавлена поддержка вложенных файлов ``.packignore`` в корне + окружения tt. +* ``tt status``: добавлена опция ``--format`` для вывода в форматах JSON и YAML + (машиночитаемый вывод). + + +cartridge 2.16.4 → 2.16.6 +~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Изменено:** + +* На странице кода дерево файлов больше не раскрывается автоматически по умолчанию. +* Зависимости: + + - ``vshard`` с версии 0.1.37 до 0.1.39 (изменения см. выше). + - ``membership`` c версии 2.5.2 до 2.5.3. Обновлена версия CMake, чтобы избежать проблем совместимости с CMake 4.x. + - ``cartridge-metrics-role`` с версии 0.1.1 до 0.1.3. Обновлена версия CMake, чтобы избежать проблем совместимости с CMake 4.x. Исправлен CI: обновлена версия Ubuntu; вместо ``tarantoolctl`` теперь используется ``tt``. + - ``graphql`` с версии 0.3.0 до 0.3.1. ``luagraphqlparser`` обновлен до версии 0.2.1. + - ``http`` с версии 1.8.0 до 1.9.0 (изменения см. ниже). + +**Исправлено:** + +* Мониторинг синхронных спейсов с учётом фактического режима ``failover``: + предупреждение о синхронных спейсах теперь пишется в журнал только если ``failover`` настроен в режиме, который их не поддерживает (например, ``eventual`` или ``stateful`` без ``synchro_mode``), а не всегда при старте экземпляра; + в модуль ``cartridge.failover`` добавлена функция ``is_sync_spaces_supported()``; синхронные спейсы теперь определяются динамически, включая спейсы, добавленные во время работы. + +http 1.8.0 → 1.9.0 +~~~~~~~~~~~~~~~~~~ + +**Добавлено:** + +* Опция ``ssl_verify_client`` . + +**Исправлено:** + +* Сервер больше не пересоздаётся, если его адрес и порт не изменились. +* Применение параметров сервера при перезагрузке конфигурации: сервер больше не остаётся без изменений после обновления настроек. + +**Несовместимое изменение (Breaking change):** + +* При указании ``ca_file`` взаимная TLS-аутентификация (mTLS) теперь включается по умолчанию. + + +graphqlapi-helpers +~~~~~~~~~~~~~~~~~~ + +* Обновление модуля ``graphqlapi-helpers`` с 0.0.9-1 на 0.0.11-1. + Новая версия работает без зависимостей от ``ddl-ee`` и ``crud-ee``. + r703 ----