Remove ArrivalOfDataAssertsPpAndEpLiveliness option

The Compatibility/ArrivalOfDataAssertsPpAndEpLiveliness option was a
rather strange option: receipt of a message is proof of the existence of
the sender, so having an option to not treat it as such only adds
complexity without any benefit.

Signed-off-by: Erik Boasson <eb@ilities.com>
This commit is contained in:
Erik Boasson 2019-06-06 10:20:19 +02:00 committed by eboasson
parent 7bffaedde8
commit 8a1980faa6
6 changed files with 9 additions and 29 deletions

View file

@ -372,7 +372,6 @@ struct config
enum nn_standards_conformance standards_conformance; enum nn_standards_conformance standards_conformance;
int explicitly_publish_qos_set_to_default; int explicitly_publish_qos_set_to_default;
enum many_sockets_mode many_sockets_mode; enum many_sockets_mode many_sockets_mode;
int arrival_of_data_asserts_pp_and_ep_liveliness;
int assume_rti_has_pmd_endpoints; int assume_rti_has_pmd_endpoints;
int port_dg; int port_dg;

View file

@ -351,7 +351,6 @@ struct proxy_writer {
unsigned last_fragnum_reset: 1; /* iff set, heartbeat advertising last_seq as highest seq resets last_fragnum */ unsigned last_fragnum_reset: 1; /* iff set, heartbeat advertising last_seq as highest seq resets last_fragnum */
unsigned deliver_synchronously: 1; /* iff 1, delivery happens straight from receive thread for non-historical data; else through delivery queue "dqueue" */ unsigned deliver_synchronously: 1; /* iff 1, delivery happens straight from receive thread for non-historical data; else through delivery queue "dqueue" */
unsigned have_seen_heartbeat: 1; /* iff 1, we have received at least on heartbeat from this proxy writer */ unsigned have_seen_heartbeat: 1; /* iff 1, we have received at least on heartbeat from this proxy writer */
unsigned assert_pp_lease: 1; /* iff 1, renew the proxy-participant's lease when data comes in */
unsigned local_matching_inprogress: 1; /* iff 1, we are still busy matching local readers; this is so we don't deliver incoming data to some but not all readers initially */ unsigned local_matching_inprogress: 1; /* iff 1, we are still busy matching local readers; this is so we don't deliver incoming data to some but not all readers initially */
#ifdef DDSI_INCLUDE_SSM #ifdef DDSI_INCLUDE_SSM
unsigned supports_ssm: 1; /* iff 1, this proxy writer supports SSM */ unsigned supports_ssm: 1; /* iff 1, this proxy writer supports SSM */
@ -370,7 +369,6 @@ struct proxy_reader {
struct proxy_endpoint_common c; struct proxy_endpoint_common c;
unsigned deleting: 1; /* set when being deleted */ unsigned deleting: 1; /* set when being deleted */
unsigned is_fict_trans_reader: 1; /* only true when it is certain that is a fictitious transient data reader (affects built-in topic generation) */ unsigned is_fict_trans_reader: 1; /* only true when it is certain that is a fictitious transient data reader (affects built-in topic generation) */
unsigned assert_pp_lease: 1; /* iff 1, renew the proxy-participant's lease when data comes in */
#ifdef DDSI_INCLUDE_SSM #ifdef DDSI_INCLUDE_SSM
unsigned favours_ssm: 1; /* iff 1, this proxy reader favours SSM when available */ unsigned favours_ssm: 1; /* iff 1, this proxy reader favours SSM when available */
#endif #endif

View file

@ -432,8 +432,6 @@ static const struct cfgelem compatibility_cfgelems[] = {
{ LEAF ("ManySocketsMode"), 1, "single", ABSOFF (many_sockets_mode), 0, uf_many_sockets_mode, 0, pf_many_sockets_mode, { LEAF ("ManySocketsMode"), 1, "single", ABSOFF (many_sockets_mode), 0, uf_many_sockets_mode, 0, pf_many_sockets_mode,
BLURB("<p>This option specifies whether a network socket will be created for each domain participant on a host. The specification seems to assume that each participant has a unique address, and setting this option will ensure this to be the case. This is not the defeault.</p>\n\ BLURB("<p>This option specifies whether a network socket will be created for each domain participant on a host. The specification seems to assume that each participant has a unique address, and setting this option will ensure this to be the case. This is not the defeault.</p>\n\
<p>Disabling it slightly improves performance and reduces network traffic somewhat. It also causes the set of port numbers needed by DDSI2E to become predictable, which may be useful for firewall and NAT configuration.</p>") }, <p>Disabling it slightly improves performance and reduces network traffic somewhat. It also causes the set of port numbers needed by DDSI2E to become predictable, which may be useful for firewall and NAT configuration.</p>") },
{ LEAF("ArrivalOfDataAssertsPpAndEpLiveliness"), 1, "true", ABSOFF(arrival_of_data_asserts_pp_and_ep_liveliness), 0, uf_boolean, 0, pf_boolean,
BLURB("<p>When set to true, arrival of a message from a peer asserts liveliness of that peer. When set to false, only SPDP and explicit lease renewals have this effect.</p>") },
{ LEAF("AssumeRtiHasPmdEndpoints"), 1, "false", ABSOFF(assume_rti_has_pmd_endpoints), 0, uf_boolean, 0, pf_boolean, { LEAF("AssumeRtiHasPmdEndpoints"), 1, "false", ABSOFF(assume_rti_has_pmd_endpoints), 0, uf_boolean, 0, pf_boolean,
BLURB("<p>This option assumes ParticipantMessageData endpoints required by the liveliness protocol are present in RTI participants even when not properly advertised by the participant discovery protocol.</p>") }, BLURB("<p>This option assumes ParticipantMessageData endpoints required by the liveliness protocol are present in RTI participants even when not properly advertised by the participant discovery protocol.</p>") },
END_MARKER END_MARKER

View file

@ -4128,11 +4128,6 @@ int new_proxy_writer (const struct nn_guid *ppguid, const struct nn_guid *guid,
pwr->supports_ssm = (addrset_contains_ssm (as) && config.allowMulticast & AMC_SSM) ? 1 : 0; pwr->supports_ssm = (addrset_contains_ssm (as) && config.allowMulticast & AMC_SSM) ? 1 : 0;
#endif #endif
/* Only assert PP lease on receipt of data if enabled (duh) and the proxy participant is a
"real" participant, rather than the thing we use for endpoints discovered via the DS */
pwr->assert_pp_lease =
(unsigned) !!config.arrival_of_data_asserts_pp_and_ep_liveliness;
assert (pwr->c.xqos->present & QP_LIVELINESS); assert (pwr->c.xqos->present & QP_LIVELINESS);
if (pwr->c.xqos->liveliness.kind != DDS_LIVELINESS_AUTOMATIC) if (pwr->c.xqos->liveliness.kind != DDS_LIVELINESS_AUTOMATIC)
DDS_LOG(DDS_LC_DISCOVERY, " FIXME: only AUTOMATIC liveliness supported"); DDS_LOG(DDS_LC_DISCOVERY, " FIXME: only AUTOMATIC liveliness supported");
@ -4336,9 +4331,6 @@ int new_proxy_reader (const struct nn_guid *ppguid, const struct nn_guid *guid,
prd->favours_ssm = (favours_ssm && config.allowMulticast & AMC_SSM) ? 1 : 0; prd->favours_ssm = (favours_ssm && config.allowMulticast & AMC_SSM) ? 1 : 0;
#endif #endif
prd->is_fict_trans_reader = 0; prd->is_fict_trans_reader = 0;
/* Only assert PP lease on receipt of data if enabled (duh) and the proxy participant is a
"real" participant, rather than the thing we use for endpoints discovered via the DS */
prd->assert_pp_lease = (unsigned) !!config.arrival_of_data_asserts_pp_and_ep_liveliness;
ddsrt_avl_init (&prd_writers_treedef, &prd->writers); ddsrt_avl_init (&prd_writers_treedef, &prd->writers);

View file

@ -363,8 +363,9 @@ void handle_PMD (UNUSED_ARG (const struct receiver_state *rst), nn_wctime_t time
{ {
/* Renew lease if arrival of this message didn't already do so, also renew the lease /* Renew lease if arrival of this message didn't already do so, also renew the lease
of the virtual participant used for DS-discovered endpoints */ of the virtual participant used for DS-discovered endpoints */
if (!config.arrival_of_data_asserts_pp_and_ep_liveliness) #if 0 // FIXME: superfluous ... receipt of the message already did it */
lease_renew (ddsrt_atomic_ldvoidp (&pp->lease), now_et ()); lease_renew (ddsrt_atomic_ldvoidp (&pp->lease), now_et ());
#endif
} }
} }
break; break;

View file

@ -715,8 +715,7 @@ static int handle_AckNack (struct receiver_state *rst, nn_etime_t tnow, const Ac
} }
/* liveliness is still only implemented partially (with all set to AUTOMATIC, BY_PARTICIPANT, &c.), so we simply renew the proxy participant's lease. */ /* liveliness is still only implemented partially (with all set to AUTOMATIC, BY_PARTICIPANT, &c.), so we simply renew the proxy participant's lease. */
if (prd->assert_pp_lease) lease_renew (ddsrt_atomic_ldvoidp (&prd->c.proxypp->lease), tnow);
lease_renew (ddsrt_atomic_ldvoidp (&prd->c.proxypp->lease), tnow);
if (!wr->reliable) /* note: reliability can't be changed */ if (!wr->reliable) /* note: reliability can't be changed */
{ {
@ -1189,8 +1188,7 @@ static int handle_Heartbeat (struct receiver_state *rst, nn_etime_t tnow, struct
/* liveliness is still only implemented partially (with all set to AUTOMATIC, /* liveliness is still only implemented partially (with all set to AUTOMATIC,
BY_PARTICIPANT, &c.), so we simply renew the proxy participant's lease. */ BY_PARTICIPANT, &c.), so we simply renew the proxy participant's lease. */
if (pwr->assert_pp_lease) lease_renew (ddsrt_atomic_ldvoidp (&pwr->c.proxypp->lease), tnow);
lease_renew (ddsrt_atomic_ldvoidp (&pwr->c.proxypp->lease), tnow);
DDS_TRACE(PGUIDFMT" -> "PGUIDFMT":", PGUID (src), PGUID (dst)); DDS_TRACE(PGUIDFMT" -> "PGUIDFMT":", PGUID (src), PGUID (dst));
@ -1326,8 +1324,7 @@ static int handle_HeartbeatFrag (struct receiver_state *rst, UNUSED_ARG(nn_etime
} }
/* liveliness is still only implemented partially (with all set to AUTOMATIC, BY_PARTICIPANT, &c.), so we simply renew the proxy participant's lease. */ /* liveliness is still only implemented partially (with all set to AUTOMATIC, BY_PARTICIPANT, &c.), so we simply renew the proxy participant's lease. */
if (pwr->assert_pp_lease) lease_renew (ddsrt_atomic_ldvoidp (&pwr->c.proxypp->lease), tnow);
lease_renew (ddsrt_atomic_ldvoidp (&pwr->c.proxypp->lease), tnow);
DDS_TRACE(" "PGUIDFMT" -> "PGUIDFMT"", PGUID (src), PGUID (dst)); DDS_TRACE(" "PGUIDFMT" -> "PGUIDFMT"", PGUID (src), PGUID (dst));
ddsrt_mutex_lock (&pwr->e.lock); ddsrt_mutex_lock (&pwr->e.lock);
@ -1453,8 +1450,7 @@ static int handle_NackFrag (struct receiver_state *rst, nn_etime_t tnow, const N
} }
/* liveliness is still only implemented partially (with all set to AUTOMATIC, BY_PARTICIPANT, &c.), so we simply renew the proxy participant's lease. */ /* liveliness is still only implemented partially (with all set to AUTOMATIC, BY_PARTICIPANT, &c.), so we simply renew the proxy participant's lease. */
if (prd->assert_pp_lease) lease_renew (ddsrt_atomic_ldvoidp (&prd->c.proxypp->lease), tnow);
lease_renew (ddsrt_atomic_ldvoidp (&prd->c.proxypp->lease), tnow);
if (!wr->reliable) /* note: reliability can't be changed */ if (!wr->reliable) /* note: reliability can't be changed */
{ {
@ -1700,8 +1696,7 @@ static int handle_Gap (struct receiver_state *rst, nn_etime_t tnow, struct nn_rm
} }
/* liveliness is still only implemented partially (with all set to AUTOMATIC, BY_PARTICIPANT, &c.), so we simply renew the proxy participant's lease. */ /* liveliness is still only implemented partially (with all set to AUTOMATIC, BY_PARTICIPANT, &c.), so we simply renew the proxy participant's lease. */
if (pwr->assert_pp_lease) lease_renew (ddsrt_atomic_ldvoidp (&pwr->c.proxypp->lease), tnow);
lease_renew (ddsrt_atomic_ldvoidp (&pwr->c.proxypp->lease), tnow);
ddsrt_mutex_lock (&pwr->e.lock); ddsrt_mutex_lock (&pwr->e.lock);
if ((wn = ddsrt_avl_lookup (&pwr_readers_treedef, &pwr->readers, &dst)) == NULL) if ((wn = ddsrt_avl_lookup (&pwr_readers_treedef, &pwr->readers, &dst)) == NULL)
@ -2133,10 +2128,7 @@ static void handle_regular (struct receiver_state *rst, nn_etime_t tnow, struct
/* liveliness is still only implemented partially (with all set to /* liveliness is still only implemented partially (with all set to
AUTOMATIC, BY_PARTICIPANT, &c.), so we simply renew the proxy AUTOMATIC, BY_PARTICIPANT, &c.), so we simply renew the proxy
participant's lease. */ participant's lease. */
if (pwr->assert_pp_lease) lease_renew (ddsrt_atomic_ldvoidp (&pwr->c.proxypp->lease), tnow);
{
lease_renew (ddsrt_atomic_ldvoidp (&pwr->c.proxypp->lease), tnow);
}
/* Shouldn't lock the full writer, but will do so for now */ /* Shouldn't lock the full writer, but will do so for now */
ddsrt_mutex_lock (&pwr->e.lock); ddsrt_mutex_lock (&pwr->e.lock);