This release did not happen yet.
Please always update this file within every PR:
- write what changed
- use links pointing to your change (See Documentation Guidelines)
- add your name at the end of the line Syntax: (your name)
For example, Max would write:
- Added a new [doc plugin](https://www.libelektra.org/plugins/doc) _(Max)_
Pick a random line to write your changes to minimize the chances of conflicts in this file.
For non-trivial changes, you can choose to be part of the highlighted changes. Please write a highlight section in this case.
After the horizontal line the release notes for the next version starts.
<<scripts/generate-news-entry
>>
We are proud to release Elektra 0.9.<>.
Elektra serves as a universal and secure framework to access configuration settings in a global, hierarchical key database. For more information, visit https://libelektra.org.
You can also read the news on our website.
You can try out the latest Elektra release using our docker image elektra/elektra. This is the quickest way to get started with Elektra without compiling and other obstacles, simply run:
docker pull elektra/elektra
docker run -it elektra/elektra
- <>
- <>
- <>
The entire logic for backends has been rewritten.
Instead of calling most plugin directly, libelektra-kdb
now only calls so-called backend plugins and special hook plugins.
There is a contract between libelektra-kdb
and the backend plugins.
All backend plugins must adhere to this contract.
To achieve this goal, most backend plugins will call other plugins (like libelektra-kdb
did previously).
The logic previously implemented in libelektra-kdb
was moved to the new default backend plugin backend
.
It works like the old system, but now also allows an unlimited number of plugins in positions where that makes sense.
For example, you can have unlimited postgetstorage
plugins, but only a single getresolver
.
There have also been slight changes to kdbGet
and kdbSet
.
Please read their API docs to find out, if you rely on any behavior that has been altered.
You can also read the new low-level docs to find out all the intricate details.
The structure of system:/elektra/mountpoints
changed as well.
Take a look at the new docs, if you need to know details.
- Implement hooks. (Maximilian Irlinger @atmaxinger)
- Removed old global plugins code. (Maximilian Irlinger @atmaxinger)
- New backend logic, based on PR #2969 by @vLesk (@kodebach)
Thanks to (Maximilian Irlinger @atmaxinger) our Key
and KeySet
datastructures are now fully copy-on-write!
This means noticeably reduced memory usage for cases where keys and keysets are copied and/or duplicated!
We run some very promising benchmarks, each were performed with 400,000 keys.
All benchmarks were executed using valgrind --tool=massif --time-unit=B --max-snapshots=200 --threshold=0.1
.
Benchmark | Old Implementation | Copy-on-Write | Size Reduction | Remarks |
---|---|---|---|---|
createkeys.c |
5.3 MiB | 6.5 MiB | -22 % | |
deepdup.c |
10.5 MiB | 8.2 MiB | 22 % | |
large.c |
18.9 MiB | 15.3 MiB | 19 % | |
kdb.c |
23.5 MiB | 17.8 MiB | 24 % | |
kdbget.c |
11.0 MiB | 8.8 MiB | 20 % | |
kdbmodify.c |
11.0 MiB | 8.8 MiB | 20 % | Same results as kdbget.c |
First, it should be noted that a single key, without counting payload, is about 50% larger with the copy-on-write implementation.
This explains why the createkeys.c
benchmark yields a negative reduction result.
This benchmark only allocates keys, so not much improvement can be expected there.
Still, as other stuff also uses heap memory, the overall memory consumption only increased by 22%, which is far less than 50%.
All other benchmarks saw meaningful reductions of heap memory used.
One interesting observation is that kdbget.c
and kdbmodify.c
used exactly the same memory.
This can most likely be explained by internal caching within the memory allocator of glibc
.
We also performed runtime tests on the same benchmarks using perf stat --repeat 13
to ensure no major performance regressions occur.
Benchmark | Old Implementation | Deviation | Copy-on-Write | Deviation | Runtime Increase |
---|---|---|---|---|---|
createkeys.c |
0.209572 s | 0.36 % | 0.21987 s | 0.77 % | 4.9 % |
deepdup.c |
0.23025 s | 0.47 % | 0.231804 s | 0.32 % | 0.6 % |
large.c |
1.14038 s | 0.21 % | 1.14837 s | 0.21 % | 0.7 % |
kdb.c |
1.9270 s | 2.63 % | 1.93354 s | 0.17 % | 0.3 % |
kdbget.c |
0.145663 s | 0.17 % | 0.15763 s | 0.70 % | 8.2 % |
kdbmodify.c |
0.146506 s | 0.19 % | 0.156347 s | 0.15 % | 6.7 % |
Overall, the runtime performance hit is less than 10%.
The more a program does, the less the additional overhead of the copy-on-write algorithms matter.
One interesting detail is that keyCopy
and keyDup
have become quite a bit faster.
This can be seen by comparing the differences between createkeys.c
and deepdup.c
.
The differences are 21 ms for the old implementation and 12 ms for the copy-on-write implementation.
The following text lists news about the plugins we updated in this release.
- <>
- <>
- Fix an issue where trying to set invalid meta-keys won't show an error (Juri Schreib @Bujuhu)
- <>
- <>
- Removed the
list
plugin. (Maximilian Irlinger @atmaxinger)
- Made logchange a notification-send hook plugin (Maximilian Irlinger @atmaxinger)
- <>
- <>
- Fix broken /pythongen link on homepage (@stefnotch)
- Fix redirect logic to not cause loops (@stefnotch)
- Remove duplicated link to
TESTING.md
file (@stefnotch), (@janldeboer) - <>
- Restructure parts of the links on the website (@stefnotch), (@janldeboer)
- Fix bug, where meta-keys that cannot be inserted don't report an error (@Bujuhu)
- <>
- <>
- Add error handling if uname call fails (Richard Stöckl @Eiskasten)
- <>
- elektraQuickdumpSet: don't fclose if stdout (@hannes99)
- Add encoding test for blockresolver read (@dtdirect)
- Refactor and restructure blockresolver (@dtdirect)
- Remove code duplication in the data block calculation (Richard Stöckl @Eiskasten)
- <>
- <>
- Add xfconf storage plugin with the ability to read and write to xfconf channels (Richard Stöckl @Eiskasten)
- <>
- <>
- Make xfconf valgrind suppressions more flexible to lib updates. (Mihael Pranjić @mpranj)
- Fix an Issue with validationg RFC 822 date-times (Juri Schreib @Bujuhu) (Nikola Prvulovic @Dynamichost96)
- Improve Code Coverage (Juri Schreib @Bujuhu) (Nikola Prvulovic @Dynamichost96)
- Fix a bug where writing unkown meta keys will fail silently (Juri Schreib @Bujuhu)
- <>
- <>
The text below summarizes updates to the C (and C++)-based libraries of Elektra.
- Restructured contrib/api (Markus Raab).
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- The Key and KeySet datastructures are now fully copy-on-write. (Maximilian Irlinger @atmaxinger)
keyCopy
now only allocates additional memory ifKEY_CP_META
orKEY_CP_ALL
is used. (Maximilian Irlinger @atmaxinger)- <>
- <>
- Check for circular links (overrides) (@0x6178656c)
- <>
- <>
- <>
- Check file flags for elektraIoFdSetFlags: file flags must be exactly one of: read only, write only or read write (Richard Stöckl @Eiskasten)
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- <>
Bindings allow you to utilize Elektra using various programming languages. This section keeps you up-to-date with the multi-language support provided by Elektra.
- Remove fallback code. (Markus Raab)
- Command-line functionality broken due to new-backend differences.
- <>
- <>
- Use
KDB_MAX_PATH_LENGTH
for better portability. (Markus Raab) - <>
- <>
- <>
- <>
- Documentation: Improved build instructions (@Bujuhu)
- Add validation on get for whitelist plugin (@Bujuhu)
- <>
- fix "feature
resolver
is required" error (Markus Raab) - <>
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- Removed
global-mount
andglobal-umount
commands. (Maximilian Irlinger @atmaxinger) - <>
- Fixed SIGSEGV when using find without argument (Christian Jonak-Moechel @joni1993)
- Removed leftover package-lock.json file (stefnotch)
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- Added automatic spelling corrections for changeset. (Maximilian Irlinger @atmaxinger)
- Introduce shebang-conventions (@0x6178656c)
- Apply auto-fixes from shellcheck (@0x6178656c)
- <>
- <>
- <>
- Add scripts to enable and disable pre-commit hooks (Juri Schreib @Bujuhu) (Nikola Prvulovic @Dynamichost96)
- <>
- <>
- Link Checker: Add documentation for the usage and how it behaves (Richard Stöckl @Eiskasten)
- <>
- <>
- Sed: Add spelling correction for "key-value storage" (@Bujuhu)
- <>
- Fix/extends some shell recorder tests (@Joni1993)
- <>
- <>
- Fix warning parsing in shell recorder (@Joni1993)
- <>
- Replaced
egrep
bygrep -E
(@0x6178656c and @janldeboer) - <>
- <>
- Add audit-dependencies script to check for vulnerabilities for npm depndencies (Juri Schreib @Bujuhu) (Nikola Prvulovic @Dynamichost96)
- <>
- <>
- Improve page on compilation (@0x6178656c)
- Improve page for bindings (@0x6178656c)
- Improve page for getting started (@stefnotch)
- <>
- <>
- Remove version number from docker README and replace it with latest (@Joni1993)
- <>
- Fix grammar for
elektra-granularity.md
(@dtdirect) - Rephrase sections in doc/dev/error-* (@dtdirect)
- Improve Git.md (Juri Schreib @Bujuhu) (Nikola Prvulovic @Dynamichost96)
- Unify spelling of man pages (@stefnotch) (@janldeboer)
- Extend consistency check
check_doc.sh
to work for contrib, dev and tutorials (@Joni1993) - <>
- <>
- Fix internal links (@0x6178656c)
- <>
- <>
- Update AUR Link from
elektra
tolibelektra
package (@Bujuhu) - <>
- <>
- Update example Ansible playbook in VISION.md (@Bujuhu)
- <>
- Harmonize spelling of Git (@Joni1993)
- Update packaging instructions for Fedora (@0x6178656c)
- <>
- <>
- Improve use of gender (@0x6178656c)
- documentation: fix some minor mistakes in CONTRIBUTING.md (@Joni1993)
- fix various spelling errors (@Joni1993)
- <>
- <>
- Denoted package names & global variable names in INSTALL.md as
Code
(@janldeboer) - <>
- Improve readability of doc/tutorials/highlevel.md (@deoknats861)
- Improve reference to Podman documentation (@0x6178656c)
- <>
- <>
- Unify spelling of documentation (@Joni1993)
- <>
- Fix typo in dev/hooks.md (@dtdirect)
- Remove unused images from doc/images (@dtdirect)
- <>
- <>
- Fixed Coverage Badge Link (@janldeboer)
- <>
- Improve CONTRIBUTING doc (Juri Schreib @Bujuhu) (Nikola Prvulovic @Dynamichost96)
- <>
- Update Doxyfile with Doxygen 1.9.4 (@0x6178656c)
- Add project logo to Doxygen in Doxyfile (@dtdirect)
- Add mermaid.js to the project using doxygen-mermaid (@dtdirect)
- Create diagrams in mermaid.js to use in doxygen (@dtdirect)
- Create README for Doxygen and Mermaid JS (@dtdirect)
- <>
- <>
- <>
- tutorial: Add automatic validation to Docker tutorial (Schreib @Bujuhu) (Nikola Prvulovic @Dynamichost96)
- Add mention of audit-dependencies script in doc/todo/RELEASE.md (@Bujuhu)
- <>
- <>
- Move note in GETSTARTED.md (@Joni1993)
- <>
- <>
- Use
code
blocks to prevent Markdown from falsy rendering LaTeX (@stefnotch), (@janldeboer) - <>
- Fix broken links in use cases for KDB after files were renamed. (Florian Lindner @flo91)
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- Enhance notifications.md in doc/tutorial (@dtdirect)
- <>
- <>
- <>
- <>
- Add tutorial how to suppress memleaks in plugins from dependencies. (Richard Stöckl @Eiskasten)
- <>
- Write about history to make plans of Elektra's adoption more clear. (Markus Raab)
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- Improve Use Cases Template (@kodebach and Markus Raab)
- <>
- <>
- <>
- <>
- Use cases for KDB (@kodebach)
- Use cases for
libelektra-core
(@kodebach) - <>
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- Decide and implement decision process (Markus Raab)
- Decided future library split (@kodebach)
- decided decision process (Markus Raab)
- draft for man pages (Markus Raab)
- <>
- Add decision for change tracking (Maximilian Irlinger @atmaxinger)
- <>
- Create decision for allowed and prohibited operation seqences (Maximilian Irlinger @atmaxinger)
- <>
- Add decisions about location of headers and use of
#include
in the repo (@kodebach) - <>
- <>
- <>
- <>
- <>
- Many small fixes to adapt to documentation guidelines and new decision process. (Markus Raab)
- <>
- Add decision for read-only keynames (Maximilian Irlinger @atmaxinger)
- <>
- <>
- Revive keyname decision (@kodebach)
- <>
- <>
- Add decision for copy-on-write and provide implementation suggestions. (Maximilian Irlinger @atmaxinger)
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- Update internal cache (Markus Raab)
- Move internal cache back to draft (@kodebach)
- <>
- <>
- <>
- <>
- <>
- Replace TOC-style README.md with folders and generate HTML for website (@kodebach)
- <>
- <>
- <>
- <>
- <>
- <>
- Added Documentation Guidelines (Markus Raab)
- Add links and formatting to documents affected by PR#4492 (Document Guidelines) and rephrase some parts. (Florian Lindner @flo91)
- Decisions for changes to
keyIsBelow
and newkeyGetNextPart
functions (@kodebach) - Apply fix spelling to more files. (Markus Raab)
- Add tutorial for manual installation from the AUR on Arch Linux (@Bujuhu)
- <>
- Add Markdown shell recorder validation to install.webui.md (@deoknats861)
- <>
- Fix the outdated array tutorial (Juri Schreib @Bujuhu) (Nikola Prvulovic @Dynamichost96)
- <>
- <>
- Reinstate mounting tutorial (@Bujuhu)
- <>
- <>
- <>
- <>
- Make namespaces tutorial verifiable (@0x6178656c)
- Move Podman-related information to a dedicated page. (@0x6178656c)
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- Update man page (patch) as suggested by the CI to fix CI error on master. (Florian Lindner @flo91)
- <>
- <>
- Added links to the website & webui after further reading. (Philipp Nirnberger @nirnberger)
- <>
- Fix an Issue where scripts/dev/fix-spelling does not work, if a resolved path contains whitespaces (Juri Schreib @Bujuhu) (Nikola Prvulovic @Dynamichost96)
- Rename scripts/sed to scripts/spelling.sed (Juri Schreib @Bujuhu) (Nikola Prvulovic @Dynamichost96)
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- Add test using shellcheck (@0x6178656c)
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- Add check if file exists. (@0x6178656c)
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- Fix warning for CMP0115 (0x6178656c)
- Change Doxygen configuration for LaTeX (0x6178656c)
- <>
- Fix developer warning for package DISCOUNT (Dennis Toth @dtdirect)
- Pass
--stacktrace
to gradle for the JNA builds. (Maximilian Irlinger @atmaxinger) - <>
- <>
- Adapt npm build flags to remove reproducability issues (Juri Schreib @Bujuhu) (Nikola Prvulovic @Dynamichost96)
- <>
- Fix creation of shell recorder tests. (@0x6178656c)
- Update packagename
libpcrec++-dev
tolibpcrecpp0v5
in Debian Sid. (Richard Stöckl @Eiskasten) - <>
- <>
- Add shellcheck to Debian containers. (@0x6178656c)
- Use
openjdk-17-jdk
in Debian Sid. (Maximilian Irlinger @atmaxinger) - <>
- Update Alpine Linux to 3.16.3. (Mihael Pranjić @mpranj)
- Add Fedora 37 images. (Mihael Pranjić @mpranj)
- Use Gradle 7.5.1. (Mihael Pranjić @mpranj)
- <>
- <>
- <>
- <>
- Add Fedora 37 builds, drop Fedora 35 builds. (Mihael Pranjić @mpranj)
- <>
- <>
- Run more tests also on Master. (Markus Raab)
- Move doc to main build stage. (Markus Raab)
- <>
- <>
- <>
- Upgrade Jenkins node container to Debian bullseye (@0x6178656c)
- <>
- <>
- <>
- Use Fedora 37. (Mihael Pranjić @mpranj)
- Fix
macos_instance
reference, upgrade to macOS Ventura (by default), use Python 3.11 and Ruby 3.x. (Mihael Pranjić @mpranj) - <>
- <>
- <>
- <>
- Add auto-cancellation-running action. (Tomislav Makar @tmakar)
- <>
- <>
- <>
- Change stale issue/PR checking to GitHub action. (@0x6178656c)
- Update configuration of stale issue/PR action. (@0x6178656c)
- <>
- Upgrade actions to recent versions and remove deprecated ruby-setup action. (Mihael Pranjić @mpranj)
The website is generated from the repository, so all information about plugins, bindings and tools are always up-to-date. Furthermore, we changed:
- <>
- <>
- Update npm packages. (Mihael Pranjić @mpranj)
- Change URLs to say man-page with a dash (@stefnotch) (@janldeboer)
- <>
- <>
We are currently working on following topics:
- Session recording and better Ansible integration (Maximilian Irlinger @atmaxinger)
- Change tracking. (Maximilian Irlinger @atmaxinger)
- <>
- <>
We closed <> issues for this release.
<<scripts/git-release-stats 0.9.VER-1 0.9.<<VERSION>>
>>
Thanks to all authors for making this release possible!
We welcome new contributors! Read here about how to get started.
As first step, you could give us feedback about these release notes. Contact us via our issue tracker.
You can download the release from
The hashsums are:
<<scripts/generate-hashsums elektra-0.9.<<VERSION>>.tar.gz
>>
The release tarball is also available signed using GnuPG from
The following GPG Key was used to sign this release: 12CC44541E1B8AD9B66AFAD55262E7353324914A
Already built API documentation can be found
Subscribe to the RSS feed to always get the release notifications.
If you also want to participate, or for any questions and comments, please contact us via our issue tracker on GitHub.
For more information, see https://libelektra.org.
Best regards, Elektra Initiative