summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/LWFT/ForwardingAgent.cpp
diff options
context:
space:
mode:
authoraky <aky@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2011-06-16 20:28:00 +0000
committeraky <aky@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2011-06-16 20:28:00 +0000
commitea2354fe1a7b7c40defc6c4094e1477051e91ca8 (patch)
treea8b4d98e24f547b93e62cb47f567b53daa7e31cd /TAO/orbsvcs/orbsvcs/LWFT/ForwardingAgent.cpp
parenteb6d9d34c28a9b1ce979b4c4c962f06fce515aea (diff)
downloadATCD-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.cpp98
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);
+}