summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/LWFT/AppSideReg.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/AppSideReg.cpp
parenteb6d9d34c28a9b1ce979b4c4c962f06fce515aea (diff)
downloadATCD-ea2354fe1a7b7c40defc6c4094e1477051e91ca8.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/AppSideReg.cpp')
-rw-r--r--TAO/orbsvcs/orbsvcs/LWFT/AppSideReg.cpp148
1 files changed, 148 insertions, 0 deletions
diff --git a/TAO/orbsvcs/orbsvcs/LWFT/AppSideReg.cpp b/TAO/orbsvcs/orbsvcs/LWFT/AppSideReg.cpp
new file mode 100644
index 00000000000..1fd659402e7
--- /dev/null
+++ b/TAO/orbsvcs/orbsvcs/LWFT/AppSideReg.cpp
@@ -0,0 +1,148 @@
+// -*- C++ -*-
+// $Id$
+
+/**
+ * @file C++ Implementation: AppSideReg
+ *
+ * @brief Defines implementation of AppSideReg.
+ *
+ */
+#include "ace/Barrier.h"
+
+#include "AppSideReg.h"
+#include "AppOptions.h"
+
+AppSideReg::AppSideReg (CORBA::ORB_ptr orb)
+ : HM_ior_ (AppOptions::instance ()->host_monitor_ior ()),
+ orb_ (CORBA::ORB::_duplicate (orb))
+{
+}
+
+AppSideReg::~AppSideReg (void)
+{
+ // Now that this class is no longer a thread, the line below
+ // will have to appear somewhere else.
+// monitor_->stop ();
+}
+
+int
+AppSideReg::register_process (void)
+{
+ try
+ {
+ CORBA::Object_var obj = orb_->string_to_object (HM_ior_.c_str());
+
+ if (CORBA::is_nil (obj))
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "AppSideReg::svc: nil HM reference\n"),
+ 1);
+ }
+
+ /// Downcast the object reference to a reference of type HostMonitor.
+ this->hmvar_ = HostMonitor::_narrow (obj);
+
+ if (CORBA::is_nil (hmvar_))
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "AppSideReg::svc: HostMonitor "
+ "narrow failed.\n"),
+ 1);
+ }
+
+ // retrieve the heartbeat port number from the HostMonitor if no
+ // port parameter has been given.
+ if (AppOptions::instance ()->port () == 0)
+ {
+ try
+ {
+ port_ = hmvar_->heartbeat_port ();
+ }
+ catch (CORBA::SystemException &)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "AppSideReg::svc: HostMonitor "
+ "heartbeat_port () call failed.\n"),
+ 1);
+ }
+ }
+ else
+ {
+ port_ = AppOptions::instance ()->port ();
+ }
+
+ ACE_DEBUG ((LM_TRACE,
+ "AppSideReg: creating the host monitor\n"));
+
+ ACE_Barrier internal_thread_barrier (2);
+ AppSideMonitor_Thread *mon =
+ new AppSideMonitor_Thread (internal_thread_barrier,
+ port_);
+
+ mon->activate ();
+
+ //ACE_DEBUG ((LM_TRACE, "Host monitor activated\n"));
+
+ internal_thread_barrier.wait ();
+
+ // Store monitor in singleton so it will stay around.
+ AppOptions::instance ()->monitor (mon);
+
+ //ACE_DEBUG ((LM_TRACE, "AppSideReg::svc before registering process.\n"));
+
+ try
+ {
+ //ACE_DEBUG ((LM_TRACE, "AppSideReg::svc - got heartbeat port %d from hm.\n", port_));
+ CORBA::Boolean good_register =
+ hmvar_->register_process (
+ AppOptions::instance ()->process_id ().c_str (),
+ AppOptions::instance ()->host_id ().c_str (),
+ port_);
+
+ if (good_register)
+ {
+ /*
+ ACE_DEBUG ((LM_TRACE,
+ "Registered successfully %s with host monitor.\n",
+ AppOptions::instance()->process_id().c_str()));
+ */
+ }
+ else
+ {
+ ACE_DEBUG ((LM_ERROR,
+ "Registeration with the monitor failed. Maybe the "
+ "hostmonitor needs to be set to another "
+ "port range.\n"));
+ }
+ }
+ catch (CORBA::Exception &)
+ {
+ ACE_DEBUG ((LM_ERROR,
+ "AppSideReg: exception from register_process.\n"));
+ throw;
+ }
+
+ //ACE_DEBUG ((LM_DEBUG, "Registering process\n"));
+ }
+ catch (CORBA::Exception &ex)
+ {
+ ACE_PRINT_EXCEPTION (ex,
+ "AppSideReg: A CORBA exception was raised:");
+ return -1;
+ }
+ catch (...)
+ {
+ ACE_DEBUG ((LM_ERROR, "AppSideReg: Unknown exception raised!"));
+ return -1;
+ }
+
+ return 0;
+}
+
+void
+AppSideReg::unregister_process (void)
+{
+ hmvar_->unregister_process (
+ AppOptions::instance ()->process_id ().c_str ());
+}
+