Skip to content

Commit d1527be

Browse files
authored
Revert "Return sample notifying changes on instance state (#5943)" (#5968)
This reverts commit 0b18cfe. Signed-off-by: Jorge J. Perez <[email protected]>
1 parent 837b184 commit d1527be

File tree

11 files changed

+229
-524
lines changed

11 files changed

+229
-524
lines changed

src/cpp/fastdds/subscriber/DataReaderImpl.cpp

Lines changed: 26 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -388,28 +388,6 @@ bool DataReaderImpl::wait_for_unread_message(
388388
void DataReaderImpl::set_read_communication_status(
389389
bool trigger_value)
390390
{
391-
if (trigger_value)
392-
{
393-
auto user_reader = user_datareader_;
394-
395-
//First check if we can handle with on_data_on_readers
396-
SubscriberListener* subscriber_listener =
397-
subscriber_->get_listener_for(StatusMask::data_on_readers());
398-
if (subscriber_listener != nullptr)
399-
{
400-
subscriber_listener->on_data_on_readers(subscriber_->user_subscriber_);
401-
}
402-
else
403-
{
404-
// If not, try with on_data_available
405-
DataReaderListener* listener = get_listener_for(StatusMask::data_available());
406-
if (listener != nullptr)
407-
{
408-
listener->on_data_available(user_reader);
409-
}
410-
}
411-
}
412-
413391
StatusMask notify_status = StatusMask::data_on_readers();
414392
subscriber_->user_subscriber_->get_statuscondition().get_impl()->set_status(notify_status, trigger_value);
415393

@@ -741,6 +719,11 @@ ReturnCode_t DataReaderImpl::read_or_take_next_sample(
741719
return RETCODE_NOT_ENABLED;
742720
}
743721

722+
if (history_.getHistorySize() == 0)
723+
{
724+
return RETCODE_NO_DATA;
725+
}
726+
744727
#if HAVE_STRICT_REALTIME
745728
auto max_blocking_time = std::chrono::steady_clock::now() +
746729
std::chrono::microseconds(::TimeConv::Time_t2MicroSecondsInt64(qos_.reliability().max_blocking_time));
@@ -935,6 +918,25 @@ void DataReaderImpl::InnerDataReaderListener::on_data_available(
935918

936919
if (data_reader_->on_data_available(writer_guid, first_sequence, last_sequence))
937920
{
921+
auto user_reader = data_reader_->user_datareader_;
922+
923+
//First check if we can handle with on_data_on_readers
924+
SubscriberListener* subscriber_listener =
925+
data_reader_->subscriber_->get_listener_for(StatusMask::data_on_readers());
926+
if (subscriber_listener != nullptr)
927+
{
928+
subscriber_listener->on_data_on_readers(data_reader_->subscriber_->user_subscriber_);
929+
}
930+
else
931+
{
932+
// If not, try with on_data_available
933+
DataReaderListener* listener = data_reader_->get_listener_for(StatusMask::data_available());
934+
if (listener != nullptr)
935+
{
936+
listener->on_data_available(user_reader);
937+
}
938+
}
939+
938940
data_reader_->set_read_communication_status(true);
939941
}
940942
}
@@ -1174,10 +1176,7 @@ void DataReaderImpl::update_subscription_matched_status(
11741176

11751177
if (count_change < 0)
11761178
{
1177-
if (history_.writer_not_alive(status.remoteEndpointGuid))
1178-
{
1179-
set_read_communication_status(true);
1180-
}
1179+
history_.writer_not_alive(status.remoteEndpointGuid);
11811180
try_notify_read_conditions();
11821181
}
11831182
}
@@ -1492,10 +1491,7 @@ LivelinessChangedStatus& DataReaderImpl::update_liveliness_status(
14921491
{
14931492
if (0 < status.not_alive_count_change)
14941493
{
1495-
if (history_.writer_not_alive(iHandle2GUID(status.last_publication_handle)))
1496-
{
1497-
set_read_communication_status(true);
1498-
}
1494+
history_.writer_not_alive(iHandle2GUID(status.last_publication_handle));
14991495
try_notify_read_conditions();
15001496
}
15011497

src/cpp/fastdds/subscriber/DataReaderImpl/ReadTakeCommand.hpp

Lines changed: 1 addition & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -180,18 +180,6 @@ struct ReadTakeCommand
180180
++it;
181181
}
182182

183-
// Check if there is a state notification sample available
184-
if (!finished_ && instance_->second->has_state_notification_sample)
185-
{
186-
// Add sample and info to collections
187-
bool deserialization_error = false;
188-
bool added = add_sample(nullptr, deserialization_error);
189-
if (added && take_samples)
190-
{
191-
instance_->second->has_state_notification_sample = false;
192-
}
193-
}
194-
195183
if (current_slot_ > first_slot)
196184
{
197185
history_.instance_viewed_nts(instance_->second);
@@ -406,34 +394,7 @@ struct ReadTakeCommand
406394
}
407395

408396
SampleInfo& info = sample_infos_[current_slot_];
409-
const DataReaderInstance& instance = *instance_->second;
410-
if (item)
411-
{
412-
generate_info(info, instance, item);
413-
}
414-
else
415-
{
416-
fastdds::rtps::Time_t current_time;
417-
fastdds::rtps::Time_t::now(current_time);
418-
419-
info.sample_state = NOT_READ_SAMPLE_STATE;
420-
info.instance_state = instance.instance_state;
421-
info.view_state = instance.view_state;
422-
info.disposed_generation_count = instance.disposed_generation_count;
423-
info.no_writers_generation_count = instance.no_writers_generation_count;
424-
info.sample_rank = 0;
425-
info.generation_rank = 0;
426-
info.absolute_generation_rank = 0;
427-
info.source_timestamp = current_time;
428-
info.reception_timestamp = current_time;
429-
info.instance_handle = instance_->first;
430-
info.publication_handle = HANDLE_NIL;
431-
432-
info.sample_identity = rtps::SampleIdentity{};
433-
info.related_sample_identity = rtps::SampleIdentity{};
434-
435-
info.valid_data = false;
436-
}
397+
generate_info(info, *instance_->second, item);
437398
}
438399

439400
bool check_datasharing_validity(

src/cpp/fastdds/subscriber/history/DataReaderHistory.cpp

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -661,7 +661,7 @@ void DataReaderHistory::check_and_remove_instance(
661661
{
662662
DataReaderInstance* instance = instance_info->second.get();
663663

664-
if (instance->cache_changes.empty() && (false == instance->has_state_notification_sample))
664+
if (instance->cache_changes.empty())
665665
{
666666
if (InstanceStateKind::ALIVE_INSTANCE_STATE != instance->instance_state &&
667667
instance->alive_writers.empty() &&
@@ -887,24 +887,13 @@ bool DataReaderHistory::update_instance_nts(
887887
return ret;
888888
}
889889

890-
bool DataReaderHistory::writer_not_alive(
890+
void DataReaderHistory::writer_not_alive(
891891
const GUID_t& writer_guid)
892892
{
893-
bool ret_val = false;
894-
895893
for (auto& it : instances_)
896894
{
897-
bool had_notification_sample = it.second->has_state_notification_sample;
898895
it.second->writer_removed(counters_, writer_guid);
899-
if (it.second->has_state_notification_sample && !had_notification_sample)
900-
{
901-
// Mark instance as data available
902-
data_available_instances_[it.first] = it.second;
903-
ret_val = true;
904-
}
905896
}
906-
907-
return ret_val;
908897
}
909898

910899
StateFilter DataReaderHistory::get_mask_status() const noexcept

src/cpp/fastdds/subscriber/history/DataReaderHistory.hpp

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -349,15 +349,7 @@ class DataReaderHistory : public eprosima::fastdds::rtps::ReaderHistory
349349
bool update_instance_nts(
350350
CacheChange_t* const change);
351351

352-
/*!
353-
* @brief Inform the history that a writer should be considered as not alive.
354-
*
355-
* @param [in] writer_guid GUID of the writer that should be considered as not alive.
356-
*
357-
* @return true if a state notification sample was added to at least one instance.
358-
* This would mean that DATA_AVAILABLE status (and listener) shall be notified.
359-
*/
360-
bool writer_not_alive(
352+
void writer_not_alive(
361353
const fastdds::rtps::GUID_t& writer_guid);
362354

363355
void check_and_remove_instance(

src/cpp/fastdds/subscriber/history/DataReaderInstance.hpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,6 @@ struct DataReaderInstance
5858
int32_t disposed_generation_count = 0;
5959
//! Current no_writers generation of the instance
6060
int32_t no_writers_generation_count = 0;
61-
//! Whether the instance has a state notification sample available
62-
bool has_state_notification_sample = false;
6361

6462
DataReaderInstance(
6563
const eprosima::fastdds::ResourceLimitedContainerConfig& changes_allocation,
@@ -134,7 +132,6 @@ struct DataReaderInstance
134132
break;
135133
}
136134

137-
has_state_notification_sample = false;
138135
return ret_val;
139136
}
140137

@@ -160,7 +157,6 @@ struct DataReaderInstance
160157
if (alive_writers.empty() && (InstanceStateKind::ALIVE_INSTANCE_STATE == instance_state))
161158
{
162159
instance_state = InstanceStateKind::NOT_ALIVE_NO_WRITERS_INSTANCE_STATE;
163-
has_state_notification_sample = true;
164160
}
165161
if (ALIVE_INSTANCE_STATE == instance_state)
166162
{
@@ -295,7 +291,6 @@ struct DataReaderInstance
295291
{
296292
instance_state = InstanceStateKind::NOT_ALIVE_NO_WRITERS_INSTANCE_STATE;
297293
counters_update(counters.instances_alive, counters.instances_no_writers, counters, false);
298-
has_state_notification_sample = true;
299294
}
300295

301296
ret_val = true;

test/blackbox/api/dds-pim/PubSubReader.hpp

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
#include <Windows.h>
3636
#endif // _MSC_VER
3737
#include <fastdds/dds/builtin/topic/ParticipantBuiltinTopicData.hpp>
38-
#include <fastdds/dds/common/InstanceHandle.hpp>
3938
#include <fastdds/dds/core/condition/GuardCondition.hpp>
4039
#include <fastdds/dds/core/condition/StatusCondition.hpp>
4140
#include <fastdds/dds/core/condition/WaitSet.hpp>
@@ -1786,10 +1785,7 @@ class PubSubReader
17861785

17871786
if (eprosima::fastdds::dds::RETCODE_OK == datareader_->take(data_seq, info_seq))
17881787
{
1789-
if (info_seq[0].publication_handle != eprosima::fastdds::dds::HANDLE_NIL)
1790-
{
1791-
current_processed_count_++;
1792-
}
1788+
current_processed_count_++;
17931789
return true;
17941790
}
17951791
return false;
@@ -1801,10 +1797,7 @@ class PubSubReader
18011797
eprosima::fastdds::dds::SampleInfo dds_info;
18021798
if (datareader_->take_next_sample(data, &dds_info) == eprosima::fastdds::dds::RETCODE_OK)
18031799
{
1804-
if (dds_info.publication_handle != eprosima::fastdds::dds::HANDLE_NIL)
1805-
{
1806-
current_processed_count_++;
1807-
}
1800+
current_processed_count_++;
18081801
return true;
18091802
}
18101803
return false;
@@ -2024,8 +2017,7 @@ class PubSubReader
20242017
ReturnCode_t success = take_ ?
20252018
datareader->take_next_sample((void*)&data, &info) :
20262019
datareader->read_next_sample((void*)&data, &info);
2027-
if ((eprosima::fastdds::dds::RETCODE_OK == success) &&
2028-
(info.publication_handle != eprosima::fastdds::dds::HANDLE_NIL))
2020+
if (eprosima::fastdds::dds::RETCODE_OK == success)
20292021
{
20302022
returnedValue = true;
20312023

@@ -2079,12 +2071,6 @@ class PubSubReader
20792071
type& data = datas[i];
20802072
eprosima::fastdds::dds::SampleInfo& info = infos[i];
20812073

2082-
// Skip unknown samples
2083-
if (info.publication_handle == eprosima::fastdds::dds::HANDLE_NIL)
2084-
{
2085-
continue;
2086-
}
2087-
20882074
// Check order of changes.
20892075
LastSeqInfo seq_info{ info.instance_handle, info.sample_identity.writer_guid() };
20902076
ASSERT_LT(last_seq[seq_info], info.sample_identity.sequence_number());

0 commit comments

Comments
 (0)