Skip to content

Data loss with persistent QoS #5990

@lobmoo

Description

@lobmoo

Is there an already existing issue for this?

  • I have searched the existing issues

Expected behavior

When I use Fast DDS, I run into a problem.
I send 1000 uint16 data points per write, and I write 100 times — that’s a total of 100,000 data points. I use persistence storage and I want the reader to be able to receive the data even if it starts later. However, I’m seeing that when the reader starts after the writer, it only receives the first 1,000–10,000 data points — the rest never arrive.

If I change it to send 1,000 writes instead, the reader can receive more historical data — around 10,000 points — but still not all of them. I’ve also tested with SQLite persistence, and the result is the same, which confuses me.

Here is my QoS configuration:

void DDSDataWriterQosHanler::setDurability(u_int32_t depth)
{
m_dataWriterQos.reliability().kind = RELIABLE_RELIABILITY_QOS;
m_dataWriterQos.reliability().max_blocking_time = {1, 0};
m_dataWriterQos.durability().kind = TRANSIENT_DURABILITY_QOS;
m_dataWriterQos.history().kind = KEEP_ALL_HISTORY_QOS;
// m_dataWriterQos.properties().properties().emplace_back("dds.persistence.guid", generate_ascii_guid());
m_dataWriterQos.history().depth = static_cast<int32_t>(depth);
}

void DDSDataWriterQosHanler::setResourceLimits(uint32_t max_samples = 0,
uint32_t max_instances = 0,
uint32_t max_samples_per_instance = 0)
{
m_dataWriterQos.resource_limits().max_samples = static_cast<int32_t>(max_samples);
m_dataWriterQos.resource_limits().max_instances = static_cast<int32_t>(max_instances);
m_dataWriterQos.resource_limits().max_samples_per_instance =
static_cast<int32_t>(max_samples_per_instance);
}
handler.setDurability(10000);
handler.setResourceLimits(-1, -1, -1);
The following figure: originally 100,000 points were sent, but only the first 8,000 were received.”
Image

Current behavior

no

Steps to reproduce

no

Fast DDS version/commit

3.2.2

Platform/Architecture

Ubuntu Focal 20.04 amd64

Transport layer

Default configuration, UDPv4 & SHM

Additional context

No response

XML configuration file

Relevant log output

Network traffic capture

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions