Skip to content

Adds description of the on_event callback to custom application roles #5232

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 8 commits into
base: latest
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions doc/platform/app/app_roles.rst
Original file line number Diff line number Diff line change
Expand Up @@ -64,13 +64,41 @@ Creating a custom role
Overview
~~~~~~~~

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.
For example, a logging role can be created to add logging functionality on top of the built-in one.

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
every time a ``box.status`` system event is broadcasted, or after the ``apply`` action of the configuration update is finished.
If multiple custom roles have the ``on_event`` callback defined, these callbacks are called one after another in the order
defined by roles dependencies.

The ``on_event`` callback provides 3 arguments, when it is called:

- ``config``, which contains the configuration of the role;

- ``key``, which reflects the trigger event:
- ``config.apply`` if the callback was triggered by a configuration update;
- ``box.status`` if it was triggered by the ``box.status`` system event.

- ``value``, which shows and logs the information about the instance status as in the trigger ``box.status`` system event.
If the callback is triggered by a configuration update, the ``value`` shows the information of the most recent ``box.status`` system event.

.. NOTE::

- All ``on_event`` callbacks with the ``config.apply`` key are executed as a part of the configuration process.
Process statuses ``ready`` or ``check_warnings`` are reached only after all such ``on_event`` callbacks are done.

- All ``on_event`` callbacks are executed inside of a ``pcall``. If an error is raised for a callback, it is logged with
the ``error`` level and the series execution continues.

Creating a custom role includes the following steps:

#. (Optional) Define the role configuration schema.
#. Define a function that validates a role configuration.
#. Define a function that applies a validated configuration.
#. Define a function that stops a role.
#. (Optional) Define roles from which this custom role depends on.
#. (Optional) Define the ``on_event`` callback function.

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

Expand All @@ -81,6 +109,13 @@ As a result, a role module should return an object that has corresponding functi
apply = function() -- ... -- end,
stop = function() -- ... -- end,
dependencies = { -- ... -- },
on_event = function(config, key, value)
local log = require('log')

log.info('roles_cfg.my_role.foo: ' .. config.foo)
log.info('on_event is triggered by ' .. key)
log.info('is_ro: ' .. value.is_ro)
end,
}

The examples below show how to do this.
Expand Down