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/AppSideReg.cpp | |
parent | eb6d9d34c28a9b1ce979b4c4c962f06fce515aea (diff) | |
download | ATCD-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.cpp | 148 |
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 ()); +} + |