Provided by: elektra-doc_0.8.14-5_all bug

NAME

       md_doc_help_elektra-plugins-ordering - elektra-plugins-ordering(7) -- ordering of plugins
       You should first read elektra-plugins(7) to get an idea about plugins.

       This document describes how elektra-plugins(7) are ordered with an elektra-backend(7).

       Multiple plugins open up many ways in which they can be arranged. A simple way is to have
       one array with pointers to plugins. To store a KeySet, the first plugin starts off with
       the KeySet passed to it. The resulting KeySet is given to the next plugin. This is
       repeated for every plugin in the array.

       To obtain a KeySet, the array of plugins is processed the other way round. An empty KeySet
       is passed to the last plugin. The resulting KeySet is handed over to the previous one
       until the first plugin is executed.

       This approach has shown not to be powerful enough to express all use cases by counter-
       evidence. Logging should take place after the storage plugin performs its actions in both
       directions. It is not possible to do this with a single array processed in a way as
       described above.

       Two individual lists (get+set list) of plugins solve the described problem. Instead of
       bidirectional processing of a single list two separate arrays are used. It turns out that
       error scenarios also make this approach unsuccessful. When a plugin fails, no other plugin
       must be executed later on because it might depend on the previous plugin to work
       correctly. In kdbGet(), this works well -- the update process will be stopped. But during
       kdbSet(), changes to the file system must be reverted. Plugins can leave a lock, temporary
       file or journal. These resources need to be cleaned up properly.

   Error List
       So every backend additionally needs a third array that is executed in error scenarios
       during kdbSet(). Plugins responsible for the cleanup, rollback or error notification are
       inserted into it.

       The resolver plugin requires this error list to do a proper rollback. Another use case is
       logging after a failure has happened.

   Placements
       The ordering of plugins inside these three arrays is controlled by elektra-contracts(7).
       Each of the three arrays has ten slots. These slots have names to be referred to in the
       contract.

       Here you see a table that contains all names:

           0     prerollback       getresolver         setresolver
           1     prerollback       pregetstorage      presetstorage
           2     prerollback       pregetstorage      presetstorage
           3     prerollback       pregetstorage      presetstorage
           4     prerollback       pregetstorage      presetstorage
           5      rollback            getstorage         setstorage
           6    postrollback      postgetstorage      precommit
           7    postrollback      postgetstorage         commit
           8    postrollback      postgetstorage     postcommit
           9    postrollback      postgetstorage     postcommit

       how the placement is influenced using infos/placement, infos/ordering and infos/stacking
       as described in CONTRACT.ini.

Version 0.8.14                           Tue Dec 15md0doc_help_elektra-plugins-ordering(3elektra)