Skip to content

Commit 84e3446

Browse files
committed
Moves description of the on_event callback to a separate subsection
Adds links from role creation steps to all subsections mentioned in the steps (configuration schema, validation function, apply function, etc.); Fixes #5244
1 parent 39fe077 commit 84e3446

File tree

1 file changed

+58
-29
lines changed

1 file changed

+58
-29
lines changed

doc/platform/app/app_roles.rst

Lines changed: 58 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -67,39 +67,16 @@ Overview
6767
A custom application role is an object which implements custom functions or logic adding to Tarantool's built-in roles and roles provided by third-party Lua modules.
6868
For example, a logging role can be created to add logging functionality on top of the built-in one.
6969

70-
Since version :doc:`3.4.0 </release/3.4.0>`, you can define an ``on_event`` callback for custom roles. The ``on_event`` callback is called
71-
every time a ``box.status`` system event is broadcasted.
72-
If multiple custom roles have the ``on_event`` callback defined, these callbacks are called one after another in the order
73-
defined by roles dependencies.
74-
75-
The ``on_event`` callback returns 3 arguments, when it is called:
76-
77-
- ``config``, which contains the configuration of the role;
7870

79-
- ``key``, which reflects the trigger event and is set to:
80-
81-
- ``config.apply`` if the callback was triggered by a configuration update;
82-
83-
- ``box.status`` if it was triggered by the ``box.status`` system event.
84-
- ``value``, which shows and logs the information about the instance status as in the trigger ``box.status`` system event.
85-
If the callback is triggered by a configuration update, the ``value`` shows the information of the most recent ``box.status`` system event.
86-
87-
.. NOTE::
88-
89-
- All ``on_event`` callbacks with the ``config.apply`` key are executed as a part of the configuration process.
90-
Process statuses ``ready`` or ``check_warnings`` are reached only after all such ``on_event`` callbacks are done.
91-
92-
- All ``on_event`` callbacks are executed inside of a ``pcall``. If an error is raised for a callback, it is logged
93-
with the ``error`` level and the series execution continues.
9471

9572
Creating a custom role includes the following steps:
9673

97-
#. (Optional) Define the role configuration schema.
98-
#. Define a function that validates a role configuration.
99-
#. Define a function that applies a validated configuration.
100-
#. Define a function that stops a role.
101-
#. (Optional) Define roles from which this custom role depends on.
102-
#. (Optional) Define the ``on_event`` callback function.
74+
#. (Optional) Define the :ref:`role configuration schema <roles_create_custom_role_schema>`.
75+
#. Define a function that :ref:`validates a role configuration <roles_create_custom_role_validate>`.
76+
#. Define a function that :ref:`applies a validated configuration <roles_create_custom_role_apply>`.
77+
#. Define a function that :ref:`stops a role <roles_create_custom_role_stop>`.
78+
#. (Optional) Define roles from which this custom role :ref:`depends on <roles_create_custom_role_dependencies>`.
79+
#. (Optional) Define the ``on_event`` :ref:`callback function <roles_create_custom_role_on_event_callback>.
10380

10481
As a result, a role module should return an object that has corresponding functions and fields specified:
10582

@@ -228,7 +205,59 @@ This means that all the dependencies of a role should be defined in the ``roles`
228205
229206
You can find the full example here: `application_role_cfg <https://github.com/tarantool/doc/tree/latest/doc/code_snippets/snippets/config/instances.enabled/application_role_cfg>`_.
230207

208+
.. _roles_create_custom_role_on_event_callback:
209+
210+
On_event callback
211+
212+
Since version :doc:`3.4.0 </release/3.4.0>`, you can define the ``on_event`` callback for custom roles. The ``on_event`` callback is called
213+
every time a ``box.status`` system event is broadcasted.
214+
If multiple custom roles have the ``on_event`` callback defined, these callbacks are called one after another in the order
215+
defined by roles dependencies.
231216

217+
The ``on_event`` callback returns 3 arguments, when it is called:
218+
219+
- ``config``, which contains the configuration of the role;
220+
221+
- ``key``, which reflects the trigger event and is set to:
222+
223+
- ``config.apply`` if the callback was triggered by a configuration update;
224+
225+
- ``box.status`` if it was triggered by the ``box.status`` system event.
226+
- ``value``, which shows and logs the information about the instance status as in the trigger ``box.status`` system event.
227+
If the callback is triggered by a configuration update, the ``value`` shows the information of the most recent ``box.status`` system event.
228+
229+
.. NOTE::
230+
231+
- All ``on_event`` callbacks with the ``config.apply`` key are executed as a part of the configuration process.
232+
Process statuses ``ready`` or ``check_warnings`` are reached only after all such ``on_event`` callbacks are done.
233+
234+
- All ``on_event`` callbacks are executed inside of a ``pcall``. If an error is raised for a callback, it is logged
235+
with the ``error`` level and the series execution continues.
236+
237+
.. code-block:: lua
238+
239+
return {
240+
validate = function() end,
241+
apply = function()
242+
_G.foo = 0
243+
end,
244+
stop = function()
245+
_G.foo = -1
246+
_G.bar = nil
247+
end,
248+
on_event = function(config, key, value)
249+
assert(_G.foo >= 0)
250+
assert(config == 12345)
251+
if(_G.foo == 0) then
252+
assert(key == 'config.apply')
253+
else
254+
assert(key == 'box.status')
255+
end
256+
_G.is_ro = value.is_ro
257+
_G.foo = _G.foo + 1
258+
_G.bar = config
259+
end,
260+
}
232261
233262
.. _roles_create_custom_role_init:
234263

0 commit comments

Comments
 (0)