Fiber channel close mode
Before the change, there was an unexpected behavior when using channel:close()
because it closed the channel entirely and discarded all unread events.
The compat
module allows you chose between the channel force and graceful closing. The latter is a new behavior.
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
...
You can select new/old behavior in compat
. It will affect all existing channels and the future ones.