Liveliness QoS implementation for auto and manual-by-participant
This commit adds support for the liveliness QoS for the liveliness kinds automatic and manual-by-participant. It also implements the lease_duration from this QoS, which was ignored until now. In the api the function dds_assert_liveliness is added to assert liveliness on a participant, which can be used when using liveliness kind manual-by-participant. Liveliness kind manual-by-topic is not yet supported, this will be added in a later commit. * Proxy participants now have 2 fibheaps to keep leases: one for leases of pwrs with automatic liveliness and one for leases of the pwrs with manual-by-participant liveliness (both protected by the proxypp lock). The minl_auto and minl_man members represent the shortest lease from these fibheaps and these leases are renewed when receiving data. Replacing the minl_ leases is now done by replacing the lease object (atomic ptr) with delayed deletion of the old lease using the gc. * Proxy writers are set not-alive when the lease expired, and reset to alive then data is received. When data is received by a pwr, the other pwrs in the proxypp might also be set alive. I think the specification is not clear at this point, and for now I have not implemented this * I refactored out the counter for man-by-pp proxy writers and improved locking when updating the min-leases on the proxy participant, so I think this fixes the race conditions. Some additional tests are required, e.g. to test the not-alive->alive transition for pwrs. I will add these in short term, as well as the implementation of the manual-by-topic liveliness kind. Signed-off-by: Dennis Potman <dennis.potman@adlinktech.com>
This commit is contained in:
parent
482e1cd006
commit
3822f42eff
16 changed files with 1116 additions and 259 deletions
|
@ -59,6 +59,9 @@ typedef int64_t dds_duration_t;
|
|||
/** @name Infinite timeout for relative time */
|
||||
#define DDS_INFINITY ((dds_duration_t) INT64_MAX)
|
||||
|
||||
/** @name Invalid duration value */
|
||||
#define DDS_DURATION_INVALID ((dds_duration_t) INT64_MIN)
|
||||
|
||||
/** @name Macro definition for time conversion to nanoseconds
|
||||
@{**/
|
||||
#define DDS_SECS(n) ((n) * DDS_NSECS_IN_SEC)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue