diff options
author | aky <aky@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2011-06-16 20:28:00 +0000 |
---|---|---|
committer | aky <aky@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2011-06-16 20:28:00 +0000 |
commit | ea2354fe1a7b7c40defc6c4094e1477051e91ca8 (patch) | |
tree | a8b4d98e24f547b93e62cb47f567b53daa7e31cd /TAO/orbsvcs/orbsvcs/LWFT/ForwardingAgent.cpp | |
parent | eb6d9d34c28a9b1ce979b4c4c962f06fce515aea (diff) | |
download | ATCD-DeCoM.tar.gz |
Thu Jun 16 20:25:08 UTC 2011 Akshay V. Dabholkar <aky@dre.vanderbilt.edu>DeCoM
* orbsvcs/LWFT_Service:
* orbsvcs/LWFT_Service/LWFT_Service.mpc:
* orbsvcs/LWFT_Service/RMOptions.h:
* orbsvcs/LWFT_Service/RMOptions.cpp:
* orbsvcs/LWFT_Service/ReplicationManager_process.cpp:
* orbsvcs/LWFT_Service/host_monitor.cpp:
* orbsvcs/orbsvcs/LWFT:
* orbsvcs/orbsvcs/LWFT/AppInfo.idl:
* orbsvcs/orbsvcs/LWFT/AppOptions.h:
* orbsvcs/orbsvcs/LWFT/AppOptions.cpp:
* orbsvcs/orbsvcs/LWFT/AppSideMonitor_Handler.h:
* orbsvcs/orbsvcs/LWFT/AppSideMonitor_Handler.cpp:
* orbsvcs/orbsvcs/LWFT/AppSideMonitor_Thread.h:
* orbsvcs/orbsvcs/LWFT/AppSideMonitor_Thread.cpp:
* orbsvcs/orbsvcs/LWFT/AppSideReg.h:
* orbsvcs/orbsvcs/LWFT/AppSideReg.cpp:
* orbsvcs/orbsvcs/LWFT/Barrier_Guard.h:
* orbsvcs/orbsvcs/LWFT/Barrier_Guard.cpp:
* orbsvcs/orbsvcs/LWFT/Client_ORBInitializer.h:
* orbsvcs/orbsvcs/LWFT/Client_ORBInitializer.cpp:
* orbsvcs/orbsvcs/LWFT/Client_Request_Interceptor.h:
* orbsvcs/orbsvcs/LWFT/Client_Request_Interceptor.cpp:
* orbsvcs/orbsvcs/LWFT/CorbaStateUpdate.h:
* orbsvcs/orbsvcs/LWFT/CorbaStateUpdate.cpp:
* orbsvcs/orbsvcs/LWFT/DDSFailure.h:
* orbsvcs/orbsvcs/LWFT/DDSFailure.cpp:
* orbsvcs/orbsvcs/LWFT/DDSStateReaderListener_T.h:
* orbsvcs/orbsvcs/LWFT/DDSStateReaderListener_T.cpp:
* orbsvcs/orbsvcs/LWFT/DDSStateUpdate_T.h:
* orbsvcs/orbsvcs/LWFT/DDSStateUpdate_T.cpp:
* orbsvcs/orbsvcs/LWFT/Failure_Handler.h:
* orbsvcs/orbsvcs/LWFT/Failure_Handler.cpp:
* orbsvcs/orbsvcs/LWFT/FaultNotification.idl:
* orbsvcs/orbsvcs/LWFT/ForwardingAgent.h:
* orbsvcs/orbsvcs/LWFT/ForwardingAgent.cpp:
* orbsvcs/orbsvcs/LWFT/ForwardingAgent.idl:
* orbsvcs/orbsvcs/LWFT/HMOptions.h:
* orbsvcs/orbsvcs/LWFT/HMOptions.cpp:
* orbsvcs/orbsvcs/LWFT/HostMonitor.idl:
* orbsvcs/orbsvcs/LWFT/HostMonitorImpl.h:
* orbsvcs/orbsvcs/LWFT/HostMonitorImpl.cpp:
* orbsvcs/orbsvcs/LWFT/IOR_Interceptor.h:
* orbsvcs/orbsvcs/LWFT/IOR_Interceptor.cpp:
* orbsvcs/orbsvcs/LWFT/LWFT.mpc:
* orbsvcs/orbsvcs/LWFT/LWFTDataStructures.idl:
* orbsvcs/orbsvcs/LWFT/LWFT_Client.vcproj:
* orbsvcs/orbsvcs/LWFT/LWFT_Client_Init.h:
* orbsvcs/orbsvcs/LWFT/LWFT_Client_Init.cpp:
* orbsvcs/orbsvcs/LWFT/LWFT_Common.vcproj:
* orbsvcs/orbsvcs/LWFT/LWFT_ReplicationManager.vcproj:
* orbsvcs/orbsvcs/LWFT/LWFT_Server.vcproj:
* orbsvcs/orbsvcs/LWFT/LWFT_Server_Init.h:
* orbsvcs/orbsvcs/LWFT/LWFT_Server_Init.cpp:
* orbsvcs/orbsvcs/LWFT/LWFT_StateSyncAgent.vcproj:
* orbsvcs/orbsvcs/LWFT/Monitor_Manager.h:
* orbsvcs/orbsvcs/LWFT/Monitor_Manager.inl:
* orbsvcs/orbsvcs/LWFT/Monitor_Manager.cpp:
* orbsvcs/orbsvcs/LWFT/Monitor_Thread.h:
* orbsvcs/orbsvcs/LWFT/Monitor_Thread.cpp:
* orbsvcs/orbsvcs/LWFT/ObjectReferenceFactory.h:
* orbsvcs/orbsvcs/LWFT/ObjectReferenceFactory.cpp:
* orbsvcs/orbsvcs/LWFT/ObjectReferenceFactory.idl:
* orbsvcs/orbsvcs/LWFT/README:
* orbsvcs/orbsvcs/LWFT/RM_Proxy.h:
* orbsvcs/orbsvcs/LWFT/RM_Proxy.cpp:
* orbsvcs/orbsvcs/LWFT/ReplicatedApplication.idl:
* orbsvcs/orbsvcs/LWFT/ReplicationManager.h:
* orbsvcs/orbsvcs/LWFT/ReplicationManager.cpp:
* orbsvcs/orbsvcs/LWFT/ReplicationManager.idl:
* orbsvcs/orbsvcs/LWFT/ServerORBInitializer.h:
* orbsvcs/orbsvcs/LWFT/ServerORBInitializer.cpp:
* orbsvcs/orbsvcs/LWFT/StateSyncAgentTask.h:
* orbsvcs/orbsvcs/LWFT/StateSyncAgentTask.cpp:
* orbsvcs/orbsvcs/LWFT/StateSynchronizationAgent.idl:
* orbsvcs/orbsvcs/LWFT/StateSynchronizationAgent_i.h:
* orbsvcs/orbsvcs/LWFT/StateSynchronizationAgent_i.cpp:
* orbsvcs/orbsvcs/LWFT/StateSynchronizationAgent_i_T.cpp:
* orbsvcs/orbsvcs/LWFT/StatefulObject.h:
* orbsvcs/orbsvcs/LWFT/StatefulObject.cpp:
* orbsvcs/orbsvcs/LWFT/Timer.h:
* orbsvcs/orbsvcs/LWFT/Timer.cpp:
* orbsvcs/orbsvcs/LWFT/Utilization_Monitor.h:
* orbsvcs/orbsvcs/LWFT/Utilization_Monitor.cpp:
* orbsvcs/orbsvcs/LWFT/host_monitor_export.h:
* orbsvcs/orbsvcs/LWFT/lwft_client_export.h:
* orbsvcs/orbsvcs/LWFT/lwft_common_export.h:
* orbsvcs/orbsvcs/LWFT/lwft_server_export.h:
* orbsvcs/orbsvcs/LWFT/rm_export.h:
* orbsvcs/orbsvcs/LWFT/rm_impl_export.h:
* orbsvcs/orbsvcs/LWFT/ssa_export.h:
Merged additive orbsvcs of LWFT(FLARE) implementation
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/LWFT/ForwardingAgent.cpp')
-rw-r--r-- | TAO/orbsvcs/orbsvcs/LWFT/ForwardingAgent.cpp | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/TAO/orbsvcs/orbsvcs/LWFT/ForwardingAgent.cpp b/TAO/orbsvcs/orbsvcs/LWFT/ForwardingAgent.cpp new file mode 100644 index 00000000000..396e28aef2e --- /dev/null +++ b/TAO/orbsvcs/orbsvcs/LWFT/ForwardingAgent.cpp @@ -0,0 +1,98 @@ +// $Id$ + +#include "ForwardingAgent.h" + +ForwardingAgent_i::ForwardingAgent_i (bool proactive) + : proactive_ (proactive), + update_count_ (0) +{ +} + +ForwardingAgent_i::~ForwardingAgent_i (void) +{ +} + +void +ForwardingAgent_i::proactive (bool v) +{ + proactive_ = v; +} + +CORBA::Object_ptr +ForwardingAgent_i::next_member (const char *ior_string) +{ + // ACE_DEBUG ((LM_DEBUG, + // "FA: NEXT MEMBER CALLED for ior_string = %s.\n", + // ior_string)); + ACE_Guard <ACE_Thread_Mutex> guard (ior_map_mutex_); + + AGENT_RANKED_IOR_LIST ranked_ior_list; + + int result = + this->objectid_rankedior_map_.find (ACE_CString (ior_string), + ranked_ior_list); + + //size_t siz = ranked_ior_list.ior_list.size (); + //ACE_DEBUG ((LM_DEBUG, + // "next_member: IOR list size = %u\n", + // siz)); + + if ((result == 0) && (ranked_ior_list.ior_list.size () > 0)) + { + CORBA::Object_var ior (ranked_ior_list.ior_list.front ()); + ranked_ior_list.ior_list.pop_front (); + this->objectid_rankedior_map_.rebind (ACE_CString (ior_string), + ranked_ior_list); + return CORBA::Object::_duplicate (ior.in ()); + } + + ACE_ERROR_RETURN ((LM_ERROR, + "FA: No ior list entry for tag=%s!!!\n", + ior_string), + 0); +} + +void +ForwardingAgent_i::update_rank_list (const RankList & rank_list) +{ + ACE_Guard <ACE_Thread_Mutex> guard (ior_map_mutex_); + objectid_rankedior_map_.close (); + objectid_rankedior_map_.open (); + /* + ACE_DEBUG((LM_TRACE, + "ForwardingAgent - " + "Received rank_list length = %d.\n", + rank_list.length ())); + */ + for (size_t i = 0; i < rank_list.length (); ++i) + { + /* + ACE_DEBUG ((LM_TRACE, + "\toid(%s) = %d entries\n", + rank_list[i].object_id.in (), + rank_list[i].ior_list.length ())); + */ + AGENT_RANKED_IOR_LIST ranked_ior_list; + ranked_ior_list.now = rank_list[i].now; + + for (size_t j = 0; j < rank_list[i].ior_list.length (); ++j) + { + ranked_ior_list.ior_list.push_back ( + CORBA::Object::_duplicate (rank_list[i].ior_list[j])); + } + + ACE_CString oid (rank_list[i].object_id); + objectid_rankedior_map_.bind (oid, ranked_ior_list); + } +} + +void +ForwardingAgent_i::initialize (CORBA::Object_ptr rm_ior) +{ + this->RM_var_ = ReplicationManager::_narrow (rm_ior); + ForwardingAgent_var temp = this->_this (); + + //ACE_DEBUG ((LM_DEBUG, "FA: calling register agent\n")); + RankList *rank_list = this->RM_var_->register_agent (temp.in ()); + update_rank_list (*rank_list); +} |