Design Discussion: D-Bus Signal: Notify Property Changed
by Pavel Březina
https://fedorahosted.org/sssd/wiki/DesignDocs/DBusSignalPropertyChanged
= D-Bus Signal: Notify Property Changed =
Related ticket(s):
* https://fedorahosted.org/sssd/ticket/2233
Related design page(s):
* https://fedorahosted.org/sssd/wiki/DesignDocs/DBusResponder
=== Problem statement ===
This design document describes how to implement
org.freedesktop.DBus.Properties.!PropertiesChanged signal for SSSD
objects exported in the IFP responder.
== D-Bus Interface ==
=== org.freedesktop.DBus.Properties ===
==== Signals ====
* !PropertiesChanged(s interface_name, {sv} changed_properties, as
invalidated_properties)
* interface_name: name of the interface on which the properties are
defined
* changed_properties: changed properties with new values
* invalidated_properties: changed properties but the new values are
not send with them
* this signal is emitted for every property annotated with
org.freedesktop.DBus.Property.!EmitsChangedSignal, this annotation may
be also used for the whole interface meaning that every property within
this interface emits the signal
=== Overview of the solution ===
Changes in properties are detected in new LDB plugin inside a ''mod''
hook. The plugin writes list of changed properties in a TDB-based
changelog which is periodically consumed by IFP responder. IFP then
emits !PropertiesChanged signal per each modified object.
=== Implementation details ===
==== TDB Format ====
* '''TDB Name''': ''ifp_changelog.tdb''
* '''Key''': dn of modified object
* '''Value''': chained list of modified properties in the form
''total_num\0prop1\0prop2\0...\0''
==== IFP Side ====
1. TDB database is created on IFP start and deleted on IFP termination.
* on IFP start:
* if TDB file does not exist it is created
* if TDB file exist (unexpected termination of IFP) it is flushed, we
do not care about the data inside
* on correct IFP termination
* the TDB file is deleted
2. A periodic task ''IFP: notify properties changed'' is created, it is
responsible for emitting the ''!PropertiesChanged'' signal
* Periodic task flow:
1. Lock TDB for read-only access
2. Traverse the TDB and remember dn and properties for all modified
objects
3. Flush TDB
4. Release the lock
5. Create and emit D-Bus signal per each object that is exported on
IFP bus and supports ''!PropertiesChanged'' signal
==== LDB Plugin Side ====
1. If TDB file does not exist just quit
2. If modified object supports the signal store it in the TDB
=== Configuration changes ===
In IFP section:
* '''ifp_notification_interval''': period of ''IFP: notify properties
changed'', disabled if 0, default 300 (5 minutes)
=== How To Test ===
1. Hook onto ''!PropertiesChanged'' signal, e. g. with ''dbus-monitor'̈́'
2. Trigger change of user/group
3. Signal should be recieved
=== Questions ===
1. Do we want to use ''changed_properties'' or ''invalidated_properties''
=== Authors ===
* Pavel Březina <pbrezina(a)redhat.com>
8 years, 10 months
[ding-libs] Announcing DING-LIBS 0.5.0
by Pavel Reichl
The SSSD team is proud to announce the 0.5.0 release of ding-libs
utility library.
It can be downloaded from
https://fedorahosted.org/sssd/wiki/Releases#DING-LIBSReleases
== Highlights ==
=== libini_config ===
* This release adds an API to create, modify and save INI files
* Merging configuration snippets installed in different locations is supported
=== libcollection ===
* New functions: `col_get_dup_item`, `col_delete_item_with_cb`, `col_remove_item_with_cb`
== Note for distribution packagers ==
* New public header file `ini_cofigmod.h`
* API and ABI is backward compatible with last release (0.4.0)
== Detailed Changelog ==
Dmitri Pal (22):
* Print info when array is empty
* Declaring new internal access check function
* Refactored access control check
* New function to merge snippets
* Test file for unit test
* [INI] Make the merge function build
* Function to return one of the dups
* Allow to modify item name
* Expose delete with callback function
* Comment creation helper
* Comment can be NULL
* Move definition to common header
* Fix wrapping error
* New interface to modify configuration
* Build new interface
* Generate doxy doc for INI modification API
* Cleaning doxygen comments
* Change order of the headers
* New interface to save configuration in a file
* Implementation of the interface to save configuration
* Unit test for the save interface
* Build new tests for the save interface
Lukas Slebodnik (10):
* SPEC: Use correct soname for packages lib{collection,ini_config}
* SPEC: Do not include compiled files into package libdhash-devel
* ini_config_ut: enable verbose mode with env variable
* collection: Add new function col_remove_item_with_cb
* INI: Fix memory leak with INI_VA_CLEAN
* COLLECTION: Return the last duplicate for big index
* INI: Fix adding string with INI_VA_MODADD_E and big index
* INI: Add check based test ini_configmod_ut_check
* Bump version-info
* Update versions before 0.5.0 release
8 years, 10 months