Обновлена 15 сентября 2026 г. в 08:55
Режим закрытия канала файберов
Параметр: fiber_channel_close_mode
До изменения при использовании channel:close() наблюдалось неожиданное
поведение: канал закрывался полностью, а все непрочитанные события
отбрасывались.
Старое и новое поведение
Модуль compat позволяет выбрать между принудительным и корректным
закрытием канала. Последнее является новым поведением.
tarantool> compat = require('compat')---...tarantool> compat---- - yaml_pretty_multiline: default (old)- json_escape_forward_slash: default (old)- fiber_channel_close_mode: default (old)...tarantool> fiber = require('fiber')---...tarantool> ch = fiber.channel(10)---...tarantool> ch:put('one')---- true...tarantool> ch:put('two')---- true...tarantool> ch:get()---- one...tarantool> ch:close()---...tarantool> ch:get()---- null...tarantool> compat.fiber_channel_close_mode = 'new'---...tarantool> ch = fiber.channel(10)---...tarantool> ch:put('one')---- true...tarantool> ch:put('two')---- true...tarantool> ch:get()---- one...tarantool> ch:close()---...tarantool> ch:get()---- two...tarantool> ch:get()---- null...
Выбрать новое или старое поведение можно в compat. Это повлияет на все
существующие и будущие каналы.
Известные проблемы совместимости
На данный момент несовместимые модули не известны.
Обнаружение проблем в кодовой базе
Новое поведение в основном обратно совместимо. Единственная известная
проблема, которая может возникнуть — это когда код рассчитывает на то,
что канал будет полностью закрыт после ch:close(), а ch:get() вернёт
nil.