summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/Scheduling_Service/Scheduling_Service.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/Scheduling_Service/Scheduling_Service.cpp')
-rw-r--r--TAO/orbsvcs/Scheduling_Service/Scheduling_Service.cpp404
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 */