Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/rst/developer_manual/installation/sources/windows.rst
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ Colcon installation (recommended)
cd <path\to\user\workspace>\Fast-DDS-Spy
mkdir src
wget https://raw.githubusercontent.com/eProsima/Fast-DDS-Spy/main/fastddsspy.repos
vcs import src < fastddsspy.repos
vcs import src --input fastddsspy.repos

.. note::

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ Local installation
mkdir <path\to\user\workspace>\fastdds-spy\build
cd <path\to\user\workspace>\fastdds-spy
wget https://raw.githubusercontent.com/eProsima/Fast-DDS-Spy/main/fastddsspy.repos
vcs import src < fastddsspy.repos
vcs import src --input fastddsspy.repos

#. Compile all dependencies using CMake_.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,9 @@ class InstanceCache

// topic_name -> [key_field_names]
std::map<std::string, std::vector<std::string>> key_fields_cache_;

// Topics already warned because key metadata could not be discovered
std::set<std::string> no_key_metadata_warned_topics_;
};

} /* namespace participants */
Expand Down
18 changes: 16 additions & 2 deletions fastddsspy_participants/src/cpp/model/InstanceCache.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,18 @@ bool InstanceCache::add_or_update_instance(

extract_key_field_names_(topic.m_topic_name, dyn_type);

auto key_fields_it = key_fields_cache_.find(topic.m_topic_name);
if (key_fields_it == key_fields_cache_.end() || key_fields_it->second.empty())
{
if (no_key_metadata_warned_topics_.insert(topic.m_topic_name).second)
{
EPROSIMA_LOG_WARNING(FASTDDSSPY_INSTANCECACHE,
"No key metadata discovered for topic: " << topic.m_topic_name
<< ". Skipping key instance caching.");
}
return false;
}

auto& topic_instances = instances_by_topic_[topic.m_topic_name];

auto instance_it = topic_instances.find(instance_handle);
Expand Down Expand Up @@ -184,6 +196,7 @@ void InstanceCache::clear() noexcept
std::unique_lock<std::shared_timed_mutex> lock(mutex_);
instances_by_topic_.clear();
key_fields_cache_.clear();
no_key_metadata_warned_topics_.clear();
}

// Private methods
Expand All @@ -192,8 +205,9 @@ void InstanceCache::extract_key_field_names_(
const std::string& topic_name,
const fastdds::dds::DynamicType::_ref_type& dyn_type) noexcept
{
// Already cached?
if (key_fields_cache_.find(topic_name) != key_fields_cache_.end())
// Recompute only if key metadata has not been discovered yet
auto cached_keys_it = key_fields_cache_.find(topic_name);
if (cached_keys_it != key_fields_cache_.end() && !cached_keys_it->second.empty())
{
return;
}
Expand Down
Loading