Tarantool CE/EE Documentation portal logo
Помощь
Обновлена 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.