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
|
@ -3260,6 +3260,29 @@ dds_get_matched_publication_data (
|
|||
dds_entity_t reader,
|
||||
dds_instance_handle_t ih);
|
||||
|
||||
/**
|
||||
* @brief This operation manually asserts the liveliness of a writer
|
||||
* or domain participant.
|
||||
*
|
||||
* This operation manually asserts the liveliness of a writer
|
||||
* or domain participant. This is used in combination with the Liveliness
|
||||
* QoS policy to indicate that the entity remains active. This operation need
|
||||
* only be used if the liveliness kind in the QoS is either
|
||||
* DDS_LIVELINESS_MANUAL_BY_PARTICIPANT or DDS_LIVELINESS_MANUAL_BY_TOPIC.
|
||||
*
|
||||
* @param[in] entity A domain participant or writer
|
||||
*
|
||||
* @returns A dds_return_t indicating success or failure.
|
||||
*
|
||||
* @retval DDS_RETCODE_OK
|
||||
* The operation was successful.
|
||||
* @retval DDS_RETCODE_ILLEGAL_OPERATION
|
||||
* The operation is invoked on an inappropriate object.
|
||||
*/
|
||||
DDS_EXPORT dds_return_t
|
||||
dds_assert_liveliness (
|
||||
dds_entity_t entity);
|
||||
|
||||
#if defined (__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue