4.15. XML Configuration

4.15.1. [Minor] Setting monitoring.telemetry_data.metrics in a derived profile or using an XML snippet did not override inherited values

When configuring QoS profiles in XML, setting the sequence monitoring.telemetry_data.metrics in a derived profile—either via a snippet or by defining the value directly—did not override the inherited value from the base profile or previously applied snippets. Instead, the previous sequence values remained in effect (merged behavior).

With this fix, the sequence is now always fully replaced when explicitly defined in a derived profile, whether through a snippet or directly in the profile.

For example:

<qos_library name="MyLibrary">
        <qos_profile name="MyBaseProfile">
            <participant_factory_qos>
                <monitoring>
                    <telemetry_data>
                        <metrics>
                            <element>
                                <resource_selection>//data_writers/*</resource_selection>
                                <enabled_metrics_selection>
                                    <element>dds_data_writer_reliable_cache_*</element>
                                </enabled_metrics_selection>
                            </element>
                        </metrics>
                    </telemetry_data>
                </monitoring>
            </participant_factory_qos>
        </qos_profile>
        <qos_profile name="MySnippet">
            <?rti-qos_snippet?>
            <participant_factory_qos>
                <monitoring>
                    <telemetry_data>
                        <metrics>
                            <element>
                                <resource_selection>//data_writers/MyWriter</resource_selection>
                                <enabled_metrics_selection>
                                    <element>dds_data_writer_deadline_missed_total</element>
                                </enabled_metrics_selection>
                            </element>
                        </metrics>
                    </telemetry_data>
                </monitoring>
            </participant_factory_qos>
        </qos_profile>
        <qos_profile name="DerivedProfileWithSnippet" base_name="MyBaseProfile">
            <base_name>
                <element>MyLibrary::MySnippet</element>
            </base_name>
        </qos_profile>
        <qos_profile name="DerivedProfileDirect" base_name="MyBaseProfile">
            <participant_factory_qos>
                <monitoring>
                    <telemetry_data>
                        <metrics>
                            <element>
                                <resource_selection>//data_writers/MyWriter</resource_selection>
                                <enabled_metrics_selection>
                                    <element>dds_data_writer_deadline_missed_total</element>
                                </enabled_metrics_selection>
                            </element>
                        </metrics>
                    </telemetry_data>
                </monitoring>
            </participant_factory_qos>
        </qos_profile>
    </qos_library>

Before the fix, both DerivedProfileWithSnippet and DerivedProfileDirect contained two entries in the <metrics> sequence:

  • //data_writers/*

  • //data_writers/MyWriter

The explicitly defined sequence was merged with the inherited sequence instead of replacing it.

After the fix, both derived profiles now contain only one entry in the <metrics> sequence:

  • //data_writers/MyWriter

Any explicitly defined monitoring.telemetry_data.metrics sequence—whether introduced via a snippet or directly in the derived profile—fully replaces the inherited values.

This behavior now aligns with Connext’s documented rule that sequences defined in a derived QoS profile replace the corresponding sequences in the base profile.

[RTI Issue ID CORE-16518]