holoscan::FastDdsPubSubContext

Beta
View as Markdown

Resource managing DDS participant and GPU staging for pub/sub.

FastDdsPubSubContext provides:

  • DDS DomainParticipant lifecycle management
  • Automatic discovery via SPDP/SEDP (no central registry needed)
  • Allocator for GPU tensor staging (RMMAllocator or UnboundedAllocator)
  • CUDA stream for async memory copies
#include <holoscan/fastdds_pubsub_context.hpp>

Inherits from: holoscan::Resource (public)


Constructors

FastDdsPubSubContext

Destructor

~FastDdsPubSubContext


Methods

setup

void holoscan::FastDdsPubSubContext::setup(
ComponentSpec &spec
) override

Define the resource specification.

Parameters

spec
ComponentSpec &

The reference to the component specification.

initialize

void holoscan::FastDdsPubSubContext::initialize() override

Initialize the component.

This method is called only once when the component is created for the first time, and use of light-weight initialization.

participant

eprosima::fastdds::dds::DomainParticipant * holoscan::FastDdsPubSubContext::participant() const

Get the DDS DomainParticipant.

Returns: Pointer to the participant, or nullptr if not initialized.

allocator

std::shared_ptr<Allocator> holoscan::FastDdsPubSubContext::allocator() const

Get the allocator for GPU staging.

This allocator (typically RMMAllocator or UnboundedAllocator) is used for allocating pinned host memory buffers for GPU D2H/H2D staging operations.

Returns: Shared pointer to the allocator.

cuda_stream

cudaStream_t holoscan::FastDdsPubSubContext::cuda_stream() const

Get the CUDA stream for staging operations.

Returns: The CUDA stream handle.

get_or_create_topic

eprosima::fastdds::dds::Topic * holoscan::FastDdsPubSubContext::get_or_create_topic(
const std::string &topic_name,
const std::string &type_name
)

Get or create a DDS topic.

Topics are cached and reused within this participant.

Returns: Pointer to the Topic, or nullptr on failure.

Parameters

topic_name
const std::string &

The topic name (e.g., “/sensors/camera”).

type_name
const std::string &

The registered type name (e.g., “holoscan::Entity”).

get_discovered_topics

std::vector<std::string> holoscan::FastDdsPubSubContext::get_discovered_topics() const

Get list of discovered topics.

Returns: Vector of topic names currently discovered by this participant.

domain_id

int32_t holoscan::FastDdsPubSubContext::domain_id() const

Get the DDS domain ID.

Returns: The domain ID.

participant_name

std::string holoscan::FastDdsPubSubContext::participant_name() const

Get the participant name.

Returns: The participant name.

transport_profile

std::string holoscan::FastDdsPubSubContext::transport_profile() const

Get the transport profile.

Returns: The transport profile name (“LARGE_DATA”, “DEFAULT”, or “SHM_ONLY”).

default_qos

nvidia::gxf::QoSProfile holoscan::FastDdsPubSubContext::default_qos() const

Get the default QoS profile for endpoints.

Resolves the default_qos_profile string parameter (from YAML or Arg) into a QoSProfile struct using QoSProfile::from_name(). Falls back to QoSProfile::Default() if the name is empty or unrecognized.

Used by FastDdsTransport when no per-topic QoS is specified.

Returns: The resolved QoSProfile struct.

native_buffer_policy

nvidia::gxf::NativeBufferPolicy holoscan::FastDdsPubSubContext::native_buffer_policy() const

Get the native buffer policy.

native_buffer_acquire_timeout_ms

int64_t holoscan::FastDdsPubSubContext::native_buffer_acquire_timeout_ms() const

Get the CUDA IPC handle acquisition timeout (ms).

native_buffer_export_ttl_ms

int64_t holoscan::FastDdsPubSubContext::native_buffer_export_ttl_ms() const

Get the stale export TTL (ms).

gpu_device_uuid

const std::string & holoscan::FastDdsPubSubContext::gpu_device_uuid() const

Get the GPU device UUID string.

host_id

const std::string & holoscan::FastDdsPubSubContext::host_id() const

Stable host identifier (e.g.

Linux /etc/machine-id) for discovery.

gpu_device_id

int32_t holoscan::FastDdsPubSubContext::gpu_device_id() const

Get the GPU device ID.

native_buffer_capability

nvidia::gxf::NativeBufferCapability holoscan::FastDdsPubSubContext::native_buffer_capability() const

Get the local native buffer capability for discovery advertisement.

resource_type

ResourceType holoscan::FastDdsPubSubContext::resource_type() const

Get the resource type.

Returns: The resource type.

name

Resource & holoscan::FastDdsPubSubContext::name(
const std::string &name
) &

Set the name of the resource.

Returns: The reference to the resource.

Parameters

name
const std::string &

The name of the resource.

fragment

Resource & holoscan::FastDdsPubSubContext::fragment(
Fragment *fragment
)

Set the fragment of the resource.

Returns: The reference to the resource.

Parameters

fragment
Fragment *

The pointer to the fragment of the resource.

spec

Resource & holoscan::FastDdsPubSubContext::spec(
const std::shared_ptr<ComponentSpec> &spec
)

Set the component specification to the resource.

Returns: The reference to the resource.

Parameters

spec
const std::shared_ptr<ComponentSpec> &

The component specification.

spec_shared

std::shared_ptr<ComponentSpec> holoscan::FastDdsPubSubContext::spec_shared()

Get the shared pointer to the component spec.

Returns: The shared pointer to the component spec.

to_yaml_node

YAML::Node holoscan::FastDdsPubSubContext::to_yaml_node() const override

Get a YAML representation of the resource.

Returns: YAML node including spec of the resource in addition to the base component properties.

set_parameters

void holoscan::FastDdsPubSubContext::set_parameters() override

Set the parameters based on defaults (sets GXF parameters for GXF components).

id

int64_t holoscan::ComponentBase::id() const

Get the identifier of the component.

By default, the identifier is set to -1. It is set to a valid value when the component is initialized.

With the default executor (GXFExecutor), the identifier is set to the GXF component ID.

Returns: The identifier of the component.

add_arg

void holoscan::ComponentBase::add_arg(
const Arg &arg
)

Add an argument to the component.

Parameters

arg
const Arg &

The argument to add.

args

std::vector<Arg> & holoscan::ComponentBase::args()

Get the list of arguments.

Returns: The vector of arguments.

description

std::string holoscan::ComponentBase::description() const

Get a description of the component.

Returns: YAML string.

See also: to_yaml_node()

service

template <typename ServiceT = DefaultFragmentService>
std::shared_ptr<ServiceT> holoscan::ComponentBase::service(
std::string_view id = ""
) const

Retrieve a registered fragment service or resource.

Retrieves a previously registered fragment service or resource by its type and optional identifier. Returns nullptr if no service/resource is found with the specified type and identifier.

Note that any changes to the service retrieval logic in this method should be synchronized with the implementation in Fragment::service() method to maintain consistency.

Returns: The shared pointer to the service/resource, or nullptr if not found or if type casting fails.

Template parameters

ServiceT
typename

The type of the service/resource to retrieve. Must inherit from either Resource or FragmentService. Defaults to DefaultFragmentService if not specified.

Parameters

id
std::string_viewDefaults to ""

The identifier of the service/resource. If empty, retrieves by type only.

get_service_by_type_info

std::shared_ptr<FragmentService> holoscan::ComponentBase::get_service_by_type_info(
const std::type_info &service_type,
std::string_view id = ""
) const

Retrieve a registered fragment service or resource for Python bindings.

This is a helper method for Python bindings to retrieve a service by its C++ type info.

Returns: The shared pointer to the base service, or nullptr if not found.

Parameters

service_type
const std::type_info &

The type info of the service/resource to retrieve.

id
std::string_viewDefaults to ""

The identifier of the service/resource. If empty, retrieves by type only.

reset_backend_objects

virtual void holoscan::ComponentBase::reset_backend_objects()

Reset any backend-specific objects (e.g. GXF GraphEntity).

configure_transports

void holoscan::FastDdsPubSubContext::configure_transports(
eprosima::fastdds::dds::DomainParticipantQos &pqos
)

configure_discovery_peers

void holoscan::FastDdsPubSubContext::configure_discovery_peers(
eprosima::fastdds::dds::DomainParticipantQos &pqos
)

cleanup

void holoscan::FastDdsPubSubContext::cleanup()

update_params_from_args

void holoscan::FastDdsPubSubContext::update_params_from_args()

Update parameters based on the specified arguments.

service_provider

void holoscan::ComponentBase::service_provider(
FragmentServiceProvider *provider
)

Set the service provider that owns this component.


Static methods

register_converter

template <typename typeT>
static void holoscan::ComponentBase::register_converter()

Register the argument setter for the given type.

If an operator or resource has an argument with a custom type, the argument setter must be registered using this method.

The argument setter is used to set the value of the argument from the YAML configuration.

This method can be called in the initialization phase of the operator/resource (e.g., initialize()). The example below shows how to register the argument setter for the custom type (Vec3):

It is assumed that YAML::convert<T>::encode and YAML::convert<T>::decode are implemented for the given type. You need to specialize the YAML::convert<> template class.

For example, suppose that you had a Vec3 class with the following members:

You can define the YAML::convert<Vec3> as follows in a ‘.cpp’ file:

Please refer to the yaml-cpp documentation for more details.

Template parameters

typeT
typename

The type of the argument to register.

Example

void MyOp::initialize() {
register_converter<Vec3>();
}

Example

struct Vec3 {
// make sure you have overloaded operator==() for the comparison
double x, y, z;
};

Example

namespace YAML {
template<>
struct convert<Vec3> {
static Node encode(const Vec3& rhs) {
Node node;
node.push_back(rhs.x);
node.push_back(rhs.y);
node.push_back(rhs.z);
return node;
}
static bool decode(const Node& node, Vec3& rhs) {
if(!node.IsSequence() || node.size() != 3) {
return false;
}
rhs.x = node[0].as<double>();
rhs.y = node[1].as<double>();
rhs.z = node[2].as<double>();
return true;
}
};
}

register_argument_setter

template <typename typeT>
void holoscan::ComponentBase::register_argument_setter()

Register the argument setter for the given type.

Please refer to the documentation of register_converter() for more details.

Template parameters

typeT
typename

The type of the argument to register.


Types

ResourceType

Resource type used for the initialization of the resource.

NameValueDescription
kNativeNative resource.
kGXFGXF resource.

Member variables

NameTypeDescription
domain_id_Parameter< int32_t >
participant_name_Parameter< std::string >
discovery_peers_Parameter< std::vector< std::string > >
transport_profile_Parameter< std::string >
default_qos_profile_Parameter< std::string >
allocator_Parameter< std::shared_ptr< Allocator > >
native_buffer_policy_str_Parameter< std::string >
native_buffer_acquire_timeout_ms_Parameter< int64_t >
native_buffer_export_ttl_ms_Parameter< int64_t >
participant_eprosima::fastdds::dds::DomainParticipant *
topics_std::unordered_map< std::string, eprosima::fastdds::dds::Topic * >
topics_mutex_std::mutex
cuda_stream_cudaStream_t
native_buffer_policy_enum_nvidia::gxf::NativeBufferPolicy
gpu_device_uuid_std::string
gpu_device_id_int32_t
cuda_ipc_supported_bool
host_id_std::stringPopulated at initialize() from HOLOSCAN_HOST_ID (if set) or /etc/machine-id.
resource_type_ResourceTypeThe type of the resource.
is_initialized_boolWhether the resource is initialized.
spec_std::shared_ptr< ComponentSpec >The component specification.
id_int64_tThe ID of the component.
name_std::stringName of the component.
fragment_Fragment *Pointer to the fragment that owns this component.
args_std::vector< Arg >List of arguments.
service_provider_FragmentServiceProvider *Pointer to the service provider.