diff options
Diffstat (limited to 'TAO/orbsvcs/Scheduling_Service/Scheduling_Service.cpp')
-rw-r--r-- | TAO/orbsvcs/Scheduling_Service/Scheduling_Service.cpp | 404 |
1 files changed, 74 insertions, 330 deletions
diff --git a/TAO/orbsvcs/Scheduling_Service/Scheduling_Service.cpp b/TAO/orbsvcs/Scheduling_Service/Scheduling_Service.cpp index 4d45539f9a7..096e0b13227 100644 --- a/TAO/orbsvcs/Scheduling_Service/Scheduling_Service.cpp +++ b/TAO/orbsvcs/Scheduling_Service/Scheduling_Service.cpp @@ -1,187 +1,24 @@ // $Id$ #include "ace/Get_Opt.h" -#include "ace/Auto_Ptr.h" -#include "orbsvcs/CosNamingC.h" - -#include "Scheduling_Service.h" - -ACE_RCSID(Scheduling_Service, Scheduling_Service, "$Id$") - -// Default Constructor. - -TAO_Scheduling_Service::TAO_Scheduling_Service (void) - : scheduler_impl_ (0), - ior_file_name_ (0), - pid_file_name_ (0), - service_name_ ("ScheduleService"), - scheduler_type_ (CONFIG) -{ -} - - -// Constructor taking the command-line arguments. - -TAO_Scheduling_Service::TAO_Scheduling_Service (int argc, char *argv[]) - : scheduler_impl_ (0), - ior_file_name_ (0), - pid_file_name_ (0), - service_name_ ("ScheduleService"), - scheduler_type_ (CONFIG) -{ - this->init (argc, argv); -} - -// Destructor. - -TAO_Scheduling_Service::~TAO_Scheduling_Service (void) -{ -} - - -// Initialize the Scheduling Service with the arguments. - -int -TAO_Scheduling_Service::init (int argc, char *argv[]) -{ - int result; - CORBA::ORB_var orb; - PortableServer::POAManager_ptr poa_manager; - - ACE_TRY_NEW_ENV - { - // Initialize ORB manager. - this->orb_manager_.init (argc, argv, ACE_TRY_ENV); - ACE_TRY_CHECK; - - orb = this->orb_manager_.orb (); - ACE_TRY_CHECK; - - poa_manager = this->orb_manager_.poa_manager (); - ACE_TRY_CHECK; - - poa_manager->activate (ACE_TRY_ENV); - ACE_TRY_CHECK; - - // Check the non-ORB arguments. this needs to come before we - // initialize the scheduler implementation so that we know which - // type of scheduler to use. - - result = this->parse_args (argc, argv); - if (result < 0) - return result; - - // Construct a scheduler implementation of the specified type. - switch (this->scheduler_type_) - { - -// The templatized method parameters needed by the reconfig scheduler -// class template are hopelessly broken on pre-2.8 versions of g++. -#if (! defined (__GNUC__)) || (__GNUC__ > 2) || \ -(__GNUC__ == 2 && defined (__GNUC_MINOR__) && __GNUC_MINOR__ >= 8) - - case RECONFIG: - ACE_NEW_THROW_EX (scheduler_impl_, - RECONFIG_SCHED_TYPE, - CORBA::NO_MEMORY ()); - ACE_TRY_CHECK; - break; - -#endif /* __GNUC__ */ - - case CONFIG: - ACE_NEW_THROW_EX (scheduler_impl_, - CONFIG_SCHED_TYPE, - CORBA::NO_MEMORY ()); - ACE_TRY_CHECK; - break; - - default: - ACE_ERROR_RETURN ((LM_ERROR, - "TAO_Scheduling_Service::init: " - "unrecognized Scheduler_Type"), -1); - } - - // Locate the naming service. - CORBA::Object_var naming_obj = - orb->resolve_initial_references ("NameService"); - if (CORBA::is_nil (naming_obj.in ())) - ACE_ERROR_RETURN ((LM_ERROR, - " (%P|%t) Unable to locate the Naming Service.\n"), - -1); - CosNaming::NamingContext_var naming_context = - CosNaming::NamingContext::_narrow (naming_obj.in (), ACE_TRY_ENV); - ACE_TRY_CHECK; - - RtecScheduler::Scheduler_var scheduler = - this->scheduler_impl_->_this (ACE_TRY_ENV); - ACE_TRY_CHECK; - - CORBA::String_var scheduler_ior_string = - orb->object_to_string (scheduler.in (), ACE_TRY_ENV); - ACE_TRY_CHECK; - - ACE_DEBUG ((LM_DEBUG, "The scheduler IOR is <%s>\n", - scheduler_ior_string.in ())); - - // Register the servant with the Naming Context.... - CosNaming::Name schedule_name (1); - schedule_name.length (1); - schedule_name[0].id = CORBA::string_dup (this->service_name_); - naming_context->rebind (schedule_name, scheduler.in (), ACE_TRY_ENV); - ACE_TRY_CHECK; - - if (this->ior_file_name_ != 0) - { - FILE *iorf = fopen (this->ior_file_name_, "w"); - if (iorf != 0) - { - ACE_OS::fprintf (iorf, - "%s\n", - scheduler_ior_string.in ()); - ACE_OS::fclose (iorf); - } - } - - if (this->pid_file_name_ != 0) - { - FILE *pidf = fopen (this->pid_file_name_, "w"); - if (pidf != 0) - { - ACE_OS::fprintf (pidf, - "%d\n", - ACE_OS::getpid ()); - ACE_OS::fclose (pidf); - } - } - } - ACE_CATCHANY - { - ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "TAO_Scheduling_Service::init"); - return -1; - } - ACE_ENDTRY; - - return 0; -} +#include "tao/corba.h" +#include "orbsvcs/CosNamingC.h" -// Runs the TAO_Scheduling_Service. +#if defined (TAO_USES_STRATEGY_SCHEDULER) +#include "orbsvcs/Sched/Strategy_Scheduler.h" +#endif /* defined (TAO_USES_STRATEGY_SCHEDULER) */ -int -TAO_Scheduling_Service::run (CORBA_Environment& ACE_TRY_ENV) -{ - // Run the ORB manager. - return this->orb_manager_.run (ACE_TRY_ENV); -} +#include "orbsvcs/Sched/Config_Scheduler.h" +ACE_RCSID(Scheduling_Service, Scheduling_Service, "$Id$") -// Parses the command line arguments. +const char* service_name = "ScheduleService"; int -TAO_Scheduling_Service::parse_args (int argc, char *argv[]) +parse_args (int argc, char *argv []) { - ACE_Get_Opt get_opt (argc, argv, "n:p:s:"); + ACE_Get_Opt get_opt (argc, argv, "n:"); int opt; while ((opt = get_opt ()) != EOF) @@ -189,77 +26,15 @@ TAO_Scheduling_Service::parse_args (int argc, char *argv[]) switch (opt) { case 'n': - this->service_name_ = get_opt.optarg; - break; - - case 'p': - this->pid_file_name_ = get_opt.optarg; + service_name = get_opt.optarg; break; - - case 'o': - this->ior_file_name_ = get_opt.optarg; - break; - -// The templatized method parameters needed by the reconfig scheduler -// class template are hopelessly broken on pre-2.8 versions of g++. -#if (! defined (__GNUC__)) || (__GNUC__ > 2) || \ -(__GNUC__ == 2 && defined (__GNUC_MINOR__) && __GNUC_MINOR__ >= 8) - - case 's': - if (ACE_OS::strcasecmp ("CONFIG", get_opt.optarg) == 0) - { - this->scheduler_type_ = CONFIG; - } - else if (ACE_OS::strcasecmp ("RECONFIG", get_opt.optarg) == 0) - { - this->scheduler_type_ = RECONFIG; - } - else - { - ACE_DEBUG ((LM_DEBUG, - "Usage: %s " - "[-n service_name] " - "[-p pid_file_name] " - "[-o ior_file_name] " - "[-s <CONFIG | reconfig>]" - "\n", - argv[0])); - - return -1; - } - break; - -#endif /* __GNUC__ */ - case '?': default: - -// The templatized method parameters needed by the reconfig scheduler -// class template are hopelessly broken on pre-2.8 versions of g++. -#if (! defined (__GNUC__)) || (__GNUC__ > 2) || \ -(__GNUC__ == 2 && defined (__GNUC_MINOR__) && __GNUC_MINOR__ >= 8) - - ACE_DEBUG ((LM_DEBUG, - "Usage: %s " - "[-n service_name] " - "[-p pid_file_name] " - "[-o ior_file_name] " - "[-s <CONFIG | reconfig>]" - "\n", - argv[0])); - -#else /* __GNUC__ <= 2.8 */ - ACE_DEBUG ((LM_DEBUG, "Usage: %s " - "[-n service_name] " - "[-p pid_file_name] " - "[-o ior_file_name] " + "-n service_name " "\n", argv[0])); - -#endif /* __GNUC__ */ - return -1; } } @@ -269,107 +44,76 @@ TAO_Scheduling_Service::parse_args (int argc, char *argv[]) int main (int argc, char *argv[]) { - ACE_TRY_NEW_ENV + TAO_TRY { - TAO_Scheduling_Service scheduling_service; + // Initialize ORB. + CORBA::ORB_var orb = + CORBA::ORB_init (argc, argv, "", TAO_TRY_ENV); + TAO_CHECK_ENV; + + if (parse_args (argc, argv) != 0) + return 1; + + CORBA::Object_var poa_object = + orb->resolve_initial_references("RootPOA"); + if (CORBA::is_nil (poa_object.in ())) + ACE_ERROR_RETURN ((LM_ERROR, + " (%P|%t) Unable to initialize the POA.\n"), + 1); - ACE_DEBUG ((LM_DEBUG, - "%s; initializing scheduling service\n", __FILE__)); + PortableServer::POA_var root_poa = + PortableServer::POA::_narrow (poa_object.in (), TAO_TRY_ENV); + TAO_CHECK_ENV; - if (scheduling_service.init (argc, argv) < 0) - ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "init"), 1); + PortableServer::POAManager_var poa_manager = + root_poa->the_POAManager (TAO_TRY_ENV); + TAO_CHECK_ENV; - ACE_DEBUG ((LM_DEBUG, - "%s; running scheduling service\n", __FILE__)); + CORBA::Object_var naming_obj = + orb->resolve_initial_references ("NameService"); + if (CORBA::is_nil (naming_obj.in ())) + ACE_ERROR_RETURN ((LM_ERROR, + " (%P|%t) Unable to initialize the POA.\n"), + 1); + + CosNaming::NamingContext_var naming_context = + CosNaming::NamingContext::_narrow (naming_obj.in (), TAO_TRY_ENV); + TAO_CHECK_ENV; + + // Create an Scheduling service servant... + ACE_Config_Scheduler scheduler_impl; + TAO_CHECK_ENV; + + RtecScheduler::Scheduler_var scheduler = + scheduler_impl._this (TAO_TRY_ENV); + TAO_CHECK_ENV; + + CORBA::String_var str = + orb->object_to_string (scheduler.in (), TAO_TRY_ENV); + TAO_CHECK_ENV; + + ACE_DEBUG ((LM_DEBUG, "The scheduler IOR is <%s>\n", str.in ())); + + // Register the servant with the Naming Context.... + CosNaming::Name schedule_name (1); + schedule_name.length (1); + schedule_name[0].id = CORBA::string_dup (service_name); + naming_context->bind (schedule_name, scheduler.in (), TAO_TRY_ENV); + TAO_CHECK_ENV; + + poa_manager->activate (TAO_TRY_ENV); + TAO_CHECK_ENV; + + ACE_DEBUG ((LM_DEBUG, "%s; running scheduling service\n", __FILE__)); + if (orb->run () == -1) + ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "run"), 1); - scheduling_service.run (ACE_TRY_ENV); - ACE_TRY_CHECK; } - ACE_CATCHANY + TAO_CATCHANY { - ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "schedule_service"); - return 1; + TAO_TRY_ENV.print_exception ("schedule_service"); } - ACE_ENDTRY; + TAO_ENDTRY; return 0; } - - -#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION) -#if (! defined (__GNUC__)) || (__GNUC__ > 2) || \ -(__GNUC__ == 2 && defined (__GNUC_MINOR__) && __GNUC_MINOR__ >= 8) -template class auto_ptr<RtecScheduler::Config_Info>; -template class auto_ptr<RtecScheduler::RT_Info>; -template class auto_ptr<TAO_Reconfig_Scheduler_Entry>; -template class ACE_Auto_Basic_Ptr<RtecScheduler::Config_Info>; -template class ACE_Auto_Basic_Ptr<RtecScheduler::RT_Info>; -template class ACE_Auto_Basic_Ptr<TAO_Reconfig_Scheduler_Entry>; -template class ACE_Equal_To<int>; -template class ACE_Hash_Map_Manager_Ex<int, RtecScheduler::Config_Info *, ACE_Hash<int>, ACE_Equal_To<int>, ACE_SYNCH_MUTEX>; -template class ACE_Hash_Map_Manager_Ex<int, RtecScheduler::Dependency_Set *, ACE_Hash<int>, ACE_Equal_To<int>, ACE_SYNCH_MUTEX>; -template class ACE_Hash_Map_Manager_Ex<int, RtecScheduler::RT_Info *, ACE_Hash<int>, ACE_Equal_To<int>, ACE_SYNCH_MUTEX>; -template class ACE_Hash_Map_Iterator_Base_Ex<int, RtecScheduler::Config_Info *, ACE_Hash<int>, ACE_Equal_To<int>, ACE_SYNCH_MUTEX>; -template class ACE_Hash_Map_Iterator_Base_Ex<int, RtecScheduler::Dependency_Set *, ACE_Hash<int>, ACE_Equal_To<int>, ACE_SYNCH_MUTEX>; -template class ACE_Hash_Map_Iterator_Base_Ex<int, RtecScheduler::RT_Info *, ACE_Hash<int>, ACE_Equal_To<int>, ACE_SYNCH_MUTEX>; -template class ACE_Hash_Map_Iterator_Ex<int,RtecScheduler::Config_Info*,ACE_Hash<int>,ACE_Equal_To<int>,ACE_Thread_Mutex>; -template class ACE_Hash_Map_Iterator_Ex<int,RtecScheduler::Dependency_Set*,ACE_Hash<int>,ACE_Equal_To<int>,ACE_Thread_Mutex>; -template class ACE_Hash_Map_Iterator_Ex<int,RtecScheduler::RT_Info*,ACE_Hash<int>,ACE_Equal_To<int>,ACE_Thread_Mutex>; -template class ACE_Hash_Map_Reverse_Iterator_Ex<int,RtecScheduler::Config_Info*,ACE_Hash<int>,ACE_Equal_To<int>,ACE_Thread_Mutex>; -template class ACE_Hash_Map_Reverse_Iterator_Ex<int,RtecScheduler::Dependency_Set*,ACE_Hash<int>,ACE_Equal_To<int>,ACE_Thread_Mutex>; -template class ACE_Hash_Map_Reverse_Iterator_Ex<int,RtecScheduler::RT_Info*,ACE_Hash<int>,ACE_Equal_To<int>,ACE_Thread_Mutex>; -template class ACE_Hash_Map_Entry<int, RtecScheduler::Config_Info *>; -template class ACE_Hash_Map_Entry<int, RtecScheduler::Dependency_Set *>; -template class ACE_Hash_Map_Entry<int, RtecScheduler::RT_Info *>; -template class ACE_RB_Tree<const char *, RtecScheduler::RT_Info *, ACE_Less_Than<const char *>, ACE_SYNCH_MUTEX>; -template class ACE_RB_Tree_Node<const char *, RtecScheduler::RT_Info *>; -template class ACE_RB_Tree_Iterator<const char *, RtecScheduler::RT_Info *, ACE_Less_Than<const char *>, ACE_SYNCH_MUTEX>; -template class ACE_RB_Tree_Iterator_Base<char const *, RtecScheduler::RT_Info *, ACE_Less_Than<char const *>, ACE_SYNCH_MUTEX>; -template class ACE_RB_Tree_Reverse_Iterator<const char *, RtecScheduler::RT_Info *, ACE_Less_Than<const char *>, ACE_SYNCH_MUTEX>; -template class TAO_Reconfig_Scheduler<TAO_MUF_Reconfig_Sched_Strategy, ACE_SYNCH_MUTEX>; -template class TAO_RSE_Dependency_Visitor<TAO_MUF_Reconfig_Sched_Strategy, ACE_SYNCH_MUTEX>; -template class TAO_RSE_DFS_Visitor<TAO_MUF_Reconfig_Sched_Strategy, ACE_SYNCH_MUTEX>; -template class TAO_RSE_Priority_Visitor<TAO_MUF_Reconfig_Sched_Strategy>; -template class TAO_RSE_Propagation_Visitor<TAO_MUF_Reconfig_Sched_Strategy, ACE_SYNCH_MUTEX>; -template class TAO_RSE_SCC_Visitor<TAO_MUF_Reconfig_Sched_Strategy, ACE_SYNCH_MUTEX>; -template class TAO_RSE_Utilization_Visitor<TAO_MUF_Reconfig_Sched_Strategy>; -# endif /* __GNUC__ */ -#elif defined(ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA) -#if (! defined (__GNUC__)) || (__GNUC__ > 2) || \ -(__GNUC__ == 2 && defined (__GNUC_MINOR__) && __GNUC_MINOR__ >= 8) -#pragma instantiate auto_ptr<RtecScheduler::Config_Info> -#pragma instantiate auto_ptr<RtecScheduler::RT_Info> -#pragma instantiate auto_ptr<TAO_Reconfig_Scheduler_Entry> -#pragma instantiate ACE_Auto_Basic_Ptr<RtecScheduler::Config_Info> -#pragma instantiate ACE_Auto_Basic_Ptr<RtecScheduler::RT_Info> -#pragma instantiate ACE_Auto_Basic_Ptr<TAO_Reconfig_Scheduler_Entry> -#pragma instantiate ACE_Equal_To<int> -#pragma instantiate ACE_Hash_Map_Manager_Ex<int, RtecScheduler::Config_Info *, ACE_Hash<int>, ACE_Equal_To<int>, ACE_SYNCH_MUTEX> -#pragma instantiate ACE_Hash_Map_Manager_Ex<int, RtecScheduler::Dependency_Set *, ACE_Hash<int>, ACE_Equal_To<int>, ACE_SYNCH_MUTEX> -#pragma instantiate ACE_Hash_Map_Manager_Ex<int, RtecScheduler::RT_Info *, ACE_Hash<int>, ACE_Equal_To<int>, ACE_SYNCH_MUTEX> -#pragma instantiate ACE_Hash_Map_Iterator_Base_Ex<int, RtecScheduler::Config_Info *, ACE_Hash<int>, ACE_Equal_To<int>, ACE_SYNCH_MUTEX> -#pragma instantiate ACE_Hash_Map_Iterator_Base_Ex<int, RtecScheduler::Dependency_Set *, ACE_Hash<int>, ACE_Equal_To<int>, ACE_SYNCH_MUTEX> -#pragma instantiate ACE_Hash_Map_Iterator_Base_Ex<int, RtecScheduler::RT_Info *, ACE_Hash<int>, ACE_Equal_To<int>, ACE_SYNCH_MUTEX> -#pragma instantiate ACE_Hash_Map_Iterator_Ex<int,RtecScheduler::Config_Info*,ACE_Hash<int>,ACE_Equal_To<int>,ACE_Thread_Mutex> -#pragma instantiate ACE_Hash_Map_Iterator_Ex<int,RtecScheduler::Dependency_Set*,ACE_Hash<int>,ACE_Equal_To<int>,ACE_Thread_Mutex> -#pragma instantiate ACE_Hash_Map_Iterator_Ex<int,RtecScheduler::RT_Info*,ACE_Hash<int>,ACE_Equal_To<int>,ACE_Thread_Mutex> -#pragma instantiate ACE_Hash_Map_Reverse_Iterator_Ex<int,RtecScheduler::Config_Info*,ACE_Hash<int>,ACE_Equal_To<int>,ACE_Thread_Mutex> -#pragma instantiate ACE_Hash_Map_Reverse_Iterator_Ex<int,RtecScheduler::Dependency_Set*,ACE_Hash<int>,ACE_Equal_To<int>,ACE_Thread_Mutex> -#pragma instantiate ACE_Hash_Map_Reverse_Iterator_Ex<int,RtecScheduler::RT_Info*,ACE_Hash<int>,ACE_Equal_To<int>,ACE_Thread_Mutex> -#pragma instantiate ACE_Hash_Map_Entry<int, RtecScheduler::Config_Info *> -#pragma instantiate ACE_Hash_Map_Entry<int, RtecScheduler::Dependency_Set *> -#pragma instantiate ACE_Hash_Map_Entry<int, RtecScheduler::RT_Info *> -#pragma instantiate ACE_RB_Tree<const char *, RtecScheduler::RT_Info *, ACE_Less_Than<const char *>, ACE_SYNCH_MUTEX> -#pragma instantiate ACE_RB_Tree_Node<const char *, RtecScheduler::RT_Info *> -#pragma instantiate ACE_RB_Tree_Iterator<const char *, RtecScheduler::RT_Info *, ACE_Less_Than<const char *>, ACE_SYNCH_MUTEX> -#pragma instantiate ACE_RB_Tree_Iterator_Base<char const *, RtecScheduler::RT_Info *, ACE_Less_Than<char const *>, ACE_SYNCH_MUTEX> -#pragma instantiate ACE_RB_Tree_Reverse_Iterator<const char *, RtecScheduler::RT_Info *, ACE_Less_Than<const char *>, ACE_SYNCH_MUTEX> -#pragma instantiate TAO_Reconfig_Scheduler<TAO_MUF_Reconfig_Sched_Strategy, ACE_SYNCH_MUTEX> -#pragma instantiate TAO_RSE_Dependency_Visitor<TAO_MUF_Reconfig_Sched_Strategy, ACE_SYNCH_MUTEX> -#pragma instantiate TAO_RSE_DFS_Visitor<TAO_MUF_Reconfig_Sched_Strategy, ACE_SYNCH_MUTEX> -#pragma instantiate TAO_RSE_Priority_Visitor<TAO_MUF_Reconfig_Sched_Strategy> -#pragma instantiate TAO_RSE_Propagation_Visitor<TAO_MUF_Reconfig_Sched_Strategy, ACE_SYNCH_MUTEX> -#pragma instantiate TAO_RSE_SCC_Visitor<TAO_MUF_Reconfig_Sched_Strategy, ACE_SYNCH_MUTEX> -#pragma instantiate TAO_RSE_Utilization_Visitor<TAO_MUF_Reconfig_Sched_Strategy> -# endif /* __GNUC__ */ -#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */ |