OpenDDS
Snapshot(2023/04/07-19:43)
|
#include <OwnershipManager.h>
Classes | |
struct | InstanceMap |
struct | OwnershipWriterInfos |
struct | WriterInfo |
Public Member Functions | |
typedef | OPENDDS_SET (DataReaderImpl *) ReaderSet |
typedef | OPENDDS_MAP (OPENDDS_STRING, InstanceMap) TypeInstanceMap |
typedef | OPENDDS_VECTOR (WriterInfo) WriterInfos |
typedef | OPENDDS_VECTOR (InstanceState_rch) InstanceStateVec |
typedef | OPENDDS_MAP (DDS::InstanceHandle_t, OwnershipWriterInfos) InstanceOwnershipWriterInfos |
OwnershipManager () | |
~OwnershipManager () | |
int | instance_lock_acquire () |
int | instance_lock_release () |
void | set_instance_map (const char *type_name, const RcHandle< RcObject > &instance_map, DataReaderImpl *reader) |
RcHandle< RcObject > | get_instance_map (const char *type_name, DataReaderImpl *reader) |
void | unregister_reader (const char *type_name, DataReaderImpl *reader) |
void | remove_writer (const GUID_t &pub_id) |
void | remove_writers (const DDS::InstanceHandle_t &instance_handle) |
bool | remove_writer (const DDS::InstanceHandle_t &instance_handle, const GUID_t &pub_id) |
bool | is_owner (const DDS::InstanceHandle_t &instance_handle, const GUID_t &pub_id) |
bool | select_owner (const DDS::InstanceHandle_t &instance_handle, const GUID_t &pub_id, const CORBA::Long &ownership_strength, InstanceState_rch instance_state) |
void | remove_owner (const DDS::InstanceHandle_t &instance_handle) |
void | remove_instance (InstanceState *instance_state) |
void | update_ownership_strength (const GUID_t &pub_id, const CORBA::Long &ownership_strength) |
Private Member Functions | |
bool | remove_writer (const DDS::InstanceHandle_t &instance_handle, OwnershipWriterInfos &infos, const GUID_t &pub_id) |
void | remove_owner (const DDS::InstanceHandle_t &instance_handle, OwnershipWriterInfos &infos, bool sort) |
void | remove_candidate (OwnershipWriterInfos &infos, const GUID_t &pub_id) |
void | broadcast_new_owner (const DDS::InstanceHandle_t &instance_handle, OwnershipWriterInfos &infos, const GUID_t &owner) |
Private Attributes | |
ACE_Thread_Mutex | instance_lock_ |
TypeInstanceMap | type_instance_map_ |
InstanceOwnershipWriterInfos | instance_ownership_infos_ |
Definition at line 31 of file OwnershipManager.h.
OpenDDS::DCPS::OwnershipManager::OwnershipManager | ( | ) |
Definition at line 33 of file OwnershipManager.cpp.
OpenDDS::DCPS::OwnershipManager::~OwnershipManager | ( | ) |
Definition at line 37 of file OwnershipManager.cpp.
References ACE_DEBUG, ACE_TEXT(), and LM_WARNING.
|
private |
Definition at line 385 of file OwnershipManager.cpp.
References ACE_DEBUG, ACE_TEXT(), OpenDDS::DCPS::OwnershipManager::OwnershipWriterInfos::candidates_, OpenDDS::DCPS::DCPS_debug_level, OpenDDS::DCPS::OwnershipManager::OwnershipWriterInfos::instance_states_, LM_DEBUG, OpenDDS::DCPS::OwnershipManager::OwnershipWriterInfos::owner_, and OpenDDS::DCPS::OwnershipManager::WriterInfo::ownership_strength_.
RcHandle< RcObject > OpenDDS::DCPS::OwnershipManager::get_instance_map | ( | const char * | type_name, |
DataReaderImpl * | reader | ||
) |
Accesor of the instance map for provided type. It is called once for each new instance in a datareader.
Definition at line 64 of file OwnershipManager.cpp.
References OpenDDS::DCPS::find(), OpenDDS::DCPS::OwnershipManager::InstanceMap::map_, and OpenDDS::DCPS::OwnershipManager::InstanceMap::readers_.
Referenced by OpenDDS::DCPS::DataReaderImpl_T< DynamicSample >::store_instance_data().
int OpenDDS::DCPS::OwnershipManager::instance_lock_acquire | ( | ) |
Acquire/release lock for type instance map. The following functions are synchronized by instance_lock_.
Definition at line 52 of file OwnershipManager.cpp.
int OpenDDS::DCPS::OwnershipManager::instance_lock_release | ( | ) |
Definition at line 58 of file OwnershipManager.cpp.
bool OpenDDS::DCPS::OwnershipManager::is_owner | ( | const DDS::InstanceHandle_t & | instance_handle, |
const GUID_t & | pub_id | ||
) |
Return true if the provide writer is the owner of the instance.
Definition at line 187 of file OwnershipManager.cpp.
References ACE_GUARD_RETURN.
Referenced by OpenDDS::DCPS::DataReaderImpl::data_received(), and OpenDDS::DCPS::InstanceState::dispose_was_received().
typedef OpenDDS::DCPS::OwnershipManager::OPENDDS_MAP | ( | OPENDDS_STRING | , |
InstanceMap | |||
) |
typedef OpenDDS::DCPS::OwnershipManager::OPENDDS_MAP | ( | DDS::InstanceHandle_t | , |
OwnershipWriterInfos | |||
) |
typedef OpenDDS::DCPS::OwnershipManager::OPENDDS_SET | ( | DataReaderImpl * | ) |
typedef OpenDDS::DCPS::OwnershipManager::OPENDDS_VECTOR | ( | WriterInfo | ) |
typedef OpenDDS::DCPS::OwnershipManager::OPENDDS_VECTOR | ( | InstanceState_rch | ) |
|
private |
Definition at line 260 of file OwnershipManager.cpp.
References OpenDDS::DCPS::OwnershipManager::OwnershipWriterInfos::candidates_.
void OpenDDS::DCPS::OwnershipManager::remove_instance | ( | InstanceState * | instance_state | ) |
Definition at line 132 of file OwnershipManager.cpp.
References ACE_GUARD, and OpenDDS::DCPS::InstanceState::instance_handle().
Referenced by OpenDDS::DCPS::InstanceState::~InstanceState().
void OpenDDS::DCPS::OwnershipManager::remove_owner | ( | const DDS::InstanceHandle_t & | instance_handle | ) |
Remove an owner of the specified instance.
Definition at line 410 of file OwnershipManager.cpp.
References ACE_GUARD, and OPENDDS_END_VERSIONED_NAMESPACE_DECL.
|
private |
Definition at line 234 of file OwnershipManager.cpp.
References OpenDDS::DCPS::OwnershipManager::OwnershipWriterInfos::candidates_, OpenDDS::DCPS::Util::DescendingOwnershipStrengthSort(), OpenDDS::DCPS::GUID_UNKNOWN, OpenDDS::DCPS::OwnershipManager::OwnershipWriterInfos::owner_, and OpenDDS::DCPS::OwnershipManager::WriterInfo::pub_id_.
void OpenDDS::DCPS::OwnershipManager::remove_writer | ( | const GUID_t & | pub_id | ) |
Remove a writer from all instances ownership collection.
Definition at line 119 of file OwnershipManager.cpp.
References ACE_GUARD.
Referenced by OpenDDS::DCPS::InstanceState::unregister_was_received(), OpenDDS::DCPS::DataReaderImpl::writer_became_dead(), and OpenDDS::DCPS::DataReaderImpl::writer_removed().
bool OpenDDS::DCPS::OwnershipManager::remove_writer | ( | const DDS::InstanceHandle_t & | instance_handle, |
const GUID_t & | pub_id | ||
) |
Remove a writer that write to the specified instance. Return true if it's the owner writer removed.
Definition at line 203 of file OwnershipManager.cpp.
References ACE_GUARD_RETURN.
|
private |
Definition at line 218 of file OwnershipManager.cpp.
References OpenDDS::DCPS::OwnershipManager::OwnershipWriterInfos::owner_, and OpenDDS::DCPS::OwnershipManager::WriterInfo::pub_id_.
void OpenDDS::DCPS::OwnershipManager::remove_writers | ( | const DDS::InstanceHandle_t & | instance_handle | ) |
Remove all writers that write to the specified instance.
Definition at line 149 of file OwnershipManager.cpp.
References ACE_DEBUG, ACE_GUARD, ACE_TEXT(), OpenDDS::DCPS::DCPS_debug_level, and LM_DEBUG.
Referenced by OpenDDS::DCPS::DataReaderImpl::process_deadline(), and OpenDDS::DCPS::DataReaderImpl::release_instance().
bool OpenDDS::DCPS::OwnershipManager::select_owner | ( | const DDS::InstanceHandle_t & | instance_handle, |
const GUID_t & | pub_id, | ||
const CORBA::Long & | ownership_strength, | ||
InstanceState_rch | instance_state | ||
) |
Determine if the provided publication can be the owner.
Definition at line 284 of file OwnershipManager.cpp.
References ACE_GUARD_RETURN, OpenDDS::DCPS::OwnershipManager::OwnershipWriterInfos::candidates_, OpenDDS::DCPS::Util::DescendingOwnershipStrengthSort(), OpenDDS::DCPS::GUID_UNKNOWN, OpenDDS::DCPS::OwnershipManager::OwnershipWriterInfos::instance_states_, OpenDDS::DCPS::OwnershipManager::OwnershipWriterInfos::owner_, OpenDDS::DCPS::OwnershipManager::WriterInfo::ownership_strength_, OpenDDS::DCPS::OwnershipManager::WriterInfo::pub_id_, and OpenDDS::DCPS::InstanceState::registered().
Referenced by OpenDDS::DCPS::DataReaderImpl::ownership_filter_instance().
void OpenDDS::DCPS::OwnershipManager::set_instance_map | ( | const char * | type_name, |
const RcHandle< RcObject > & | instance_map, | ||
DataReaderImpl * | reader | ||
) |
The instance map per type is created by the concrete datareader when first sample with the type is received.
Definition at line 77 of file OwnershipManager.cpp.
References ACE_DEBUG, ACE_ERROR, ACE_TEXT(), OpenDDS::DCPS::bind(), OpenDDS::DCPS::DCPS_debug_level, OpenDDS::DCPS::RcHandle< T >::in(), LM_DEBUG, and LM_ERROR.
Referenced by OpenDDS::DCPS::DataReaderImpl_T< DynamicSample >::store_instance_data().
void OpenDDS::DCPS::OwnershipManager::unregister_reader | ( | const char * | type_name, |
DataReaderImpl * | reader | ||
) |
The readers that access the instance map are keep tracked as ref counting to the instance map. The readers need unregister itself with the instance map upon unregistering instance.The instance map is deleted upon the last reader unregistering an instance of the type.
Definition at line 95 of file OwnershipManager.cpp.
References ACE_DEBUG, ACE_GUARD, ACE_TEXT(), OpenDDS::DCPS::DCPS_debug_level, OpenDDS::DCPS::find(), LM_DEBUG, OpenDDS::DCPS::OwnershipManager::InstanceMap::map_, OpenDDS::DCPS::OwnershipManager::InstanceMap::readers_, and OpenDDS::DCPS::unbind().
Referenced by OpenDDS::DCPS::DataReaderImpl::cleanup().
void OpenDDS::DCPS::OwnershipManager::update_ownership_strength | ( | const GUID_t & | pub_id, |
const CORBA::Long & | ownership_strength | ||
) |
Update the ownership strength of a publication.
|
private |
Definition at line 173 of file OwnershipManager.h.
|
private |
Definition at line 175 of file OwnershipManager.h.
|
private |
Definition at line 174 of file OwnershipManager.h.