Registry database
Starting from the version 3.4, EVA ICS uses structured document database as the primary storage of all configurations. In EVA ICS it is called “registry system” or just “registry”.
Technology
EVA ICS uses YEDB as the structured database. YEDB is fast, easy to repair and crash-free.
Registry service is embedded into the node server and is always started automatically.
Registry can be managed with eva-shell and “sbin/eva-registry-cli” command-line tools.
Reasons
Why EVA ICS has been switched to the registry database, instead of using simple “ini” and “json” files:
Crash-free storage of configurations, inventory and data objects;
easy management with command line tools and API;
strict data schemas;
unification;
easy-to-use SDK.
Maintenance
When deploying / undeploying lots of items, removed/overridden registry keys are not deleted but moved to the database trash. It is a good idea to clean it from time to time with “eva-registry purge” or “registry_safe_purge” API method.
“.trash” folder can also be used to restore keys deleted by accident.
When key data is changed, the server keeps its 10 backup copies by default, which can be also used to restore data if necessary.
All data is stored in “runtime/registry” directory, which should not be accessed directly, unless data loss occur.
Starting the registry service only
The following command:
EVA_NODE_MODE=registry /opt/eva4/bin/eva-control start
allows to temporary start the registry database server only.
Bus cheat-sheet
“eva.registry” service accepts all YEDB API calls via the local bus.
Purge
To automatically purge the registry, e.g. after undeploying multiple items, execute:
/opt/eva4/sbin/bus /opt/eva4/var/bus.ipc rpc call eva.registry safe_purge
The same can be done with eva-shell:
eva svc call eva.registry safe_purge
Temporary enable/disable auto-flush
To deploy multiple items, it may be useful to disable the registry auto-flush feature:
/opt/eva4/sbin/bus /opt/eva4/var/bus.ipc rpc call eva.registry server_set name=auto_flush value=false
The same can be done with eva-shell:
eva svc call eva.registry server_set name=auto_flush value=false
Structure
Each EVA ICS node creates registry key “eva”, all data is being stored in its sub-keys.
A strict schema “.schema/eva” is created for all data keys, except “user_data” and “svc_data”, which (as well as their sub-keys) can contain any fields.
Keys can be edited with CLI tools.
Key |
user-editable |
Description |
---|---|---|
config/bus |
yes |
the local bus configuration |
config/core |
yes |
the primary node configuration |
config/python-venv |
yes |
Python venv configuration |
config/registry |
yes |
the registry service configuration |
config/logs |
yes |
logging configuration |
data |
forbidden |
system objects |
inventory |
not rec. |
inventory key (EVA ICS items) |
state |
not rec. |
item states |
svc |
not rec. |
external service configuration |
svc_data |
not rec. |
used by external services |
user_data |
yes |
any user-defined data |