summaryrefslogtreecommitdiff
path: root/TAO/CIAO/DAnCE/NodeManager/Node_Manager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/CIAO/DAnCE/NodeManager/Node_Manager.cpp')
-rw-r--r--TAO/CIAO/DAnCE/NodeManager/Node_Manager.cpp104
1 files changed, 76 insertions, 28 deletions
diff --git a/TAO/CIAO/DAnCE/NodeManager/Node_Manager.cpp b/TAO/CIAO/DAnCE/NodeManager/Node_Manager.cpp
index 78d63ebd770..d835d8b9ba6 100644
--- a/TAO/CIAO/DAnCE/NodeManager/Node_Manager.cpp
+++ b/TAO/CIAO/DAnCE/NodeManager/Node_Manager.cpp
@@ -17,6 +17,7 @@ char *default_svcconf_ = 0;
char *svcconf_config_ = 0;
char *nodeapp_location_ = 0;
char *nodeapp_options_ = 0;
+const char *pid_file_name_ = 0;
int write_to_ior_ = 0;
int register_with_ns_ = 0;
int nodeapp_loc_ = 0;
@@ -25,41 +26,49 @@ int spawn_delay = 1;
int
parse_args (int argc, char *argv[])
{
- ACE_Get_Arg_Opt<char> get_opts (argc, argv, "o:c:m:s:d:n");
+ ACE_Get_Arg_Opt<char> get_opts (argc, argv, "o:c:m:s:d:na:p:z:");
int c;
while ((c = get_opts ()) != -1)
switch (c)
{
+ case 'z':
+ nodeapp_options_ = "-ORBDebugLevel 10";
+ break;
+
case 'o': // get the file name to write to
- ior_file_name_ = get_opts.opt_arg ();
- write_to_ior_ = 1;
- break;
+ ior_file_name_ = get_opts.opt_arg ();
+ write_to_ior_ = 1;
+ break;
case 'c': // get the default svc.conf filename
default_svcconf_ = get_opts.opt_arg ();
- break;
+ break;
case 'm': // get the svc.conf map configuration filename
svcconf_config_ = get_opts.opt_arg ();
- break;
+ break;
case 's': //get the location to spawn the NodeApplication
nodeapp_location_ = get_opts.opt_arg ();
nodeapp_loc_ = 1;
- break;
-
+ break;
+
case 'a': // Nodeapplication arguments
nodeapp_options_ = get_opts.opt_arg ();
break;
-
+
case 'd': //get the spawn delay argument
spawn_delay = ACE_OS::atoi (get_opts.opt_arg ());
- break;
+ break;
case 'n':
register_with_ns_ = 1;
- break;
+ break;
+
+ case 'p':
+ pid_file_name_ = get_opts.opt_arg ();
+ break;
case '?': // display help for use of the server.
default:
@@ -69,7 +78,9 @@ parse_args (int argc, char *argv[])
"-c <svc.conf file>\n"
"-n <use naming service>\n"
"-s <NodeApplication executable path>\n"
+ "-a <arguments to NodeApplication>\n"
"-d <spawn delay for nodeapplication>\n"
+ "-p <pid file>\n"
"\n",
argv [0]),
-1);
@@ -95,10 +106,27 @@ write_IOR(const char* ior)
return 0;
}
+void
+write_pid (void)
+{
+ if (pid_file_name_ == 0)
+ return;
+
+ FILE* pid_file = ACE_OS::fopen (pid_file_name_, "w");
+
+ if (pid_file)
+ {
+ ACE_OS::fprintf (pid_file,
+ "%i",
+ ACE_OS::getpid ());
+ ACE_OS::fclose (pid_file);
+ }
+}
+
bool
register_with_ns (const char * name_context,
CORBA::ORB_ptr orb,
- CIAO::NodeManager_ptr obj
+ CIAO::NodeManagerDaemon_ptr obj
ACE_ENV_ARG_DECL)
{
// Naming Service related operations
@@ -115,8 +143,16 @@ register_with_ns (const char * name_context,
name.length (1);
name[0].id = name_context;
- // Register the servant with the Naming Service
- naming_context->bind (name, obj);
+ try
+ {
+ // Register the servant with the Naming Service
+ naming_context->bind (name, obj);
+ }
+ catch (CosNaming::NamingContext::AlreadyBound &)
+ {
+ ACE_DEBUG ((LM_DEBUG, "Node_Manager.cpp: Name already bound, rebinding....\n"));
+ naming_context->rebind (name, obj);
+ }
return true;
}
@@ -169,12 +205,11 @@ ACE_TMAIN (int argc, ACE_TCHAR *argv[])
ACE_TRY_CHECK;
if (CORBA::is_nil (adapter.in ()))
- ACE_ERROR_RETURN ((LM_ERROR, "Nil IORTable\n"), -1);
+ ACE_ERROR_RETURN ((LM_ERROR, "Nil IORTable\n"), -1);
-
- // Create and install the CIAO Daemon servant
- CIAO::NodeManager_Impl *daemon_servant = 0;
- ACE_NEW_RETURN (daemon_servant,
+ // Create and install the CIAO NodeManager servant
+ CIAO::NodeManager_Impl *node_manager_servant = 0;
+ ACE_NEW_RETURN (node_manager_servant,
CIAO::NodeManager_Impl("NodeManager",
orb.in (),
poa.in (),
@@ -182,16 +217,17 @@ ACE_TMAIN (int argc, ACE_TCHAR *argv[])
nodeapp_options_,
spawn_delay),
-1);
- PortableServer::ServantBase_var safe_daemon (daemon_servant);
-
- daemon_servant->init ();
-
+
+ PortableServer::ServantBase_var safe_daemon (node_manager_servant);
+
+ node_manager_servant->init ();
+
// Implicit activation
- CIAO::NodeManager_var daemon =
- daemon_servant->_this ();
+ CIAO::NodeManagerDaemon_var node_manager =
+ node_manager_servant->_this ();
CORBA::String_var str =
- orb->object_to_string (daemon.in ()
+ orb->object_to_string (node_manager.in ()
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
@@ -215,7 +251,7 @@ ACE_TMAIN (int argc, ACE_TCHAR *argv[])
// Register this name with the Naming Service
(void) register_with_ns (name,
orb.in (),
- daemon.in ()
+ node_manager.in ()
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
}
@@ -230,10 +266,22 @@ ACE_TMAIN (int argc, ACE_TCHAR *argv[])
mgr->activate (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
- // End Deployment part
+ // Here start the Monitor
+ /*
+ MonitorController* monitor_controller
+ = new MonitorController (orb);
+
+ ACE_DEBUG ((LM_DEBUG , "Before Activate"));
+ monitor_controller->activate ();
+ ACE_DEBUG ((LM_DEBUG , "After Activate"));
+ */
+
+ // Finishing Deployment part
ACE_DEBUG ((LM_DEBUG,
"CIAO_NodeManager is running...\n"));
+ write_pid ();
+
// Run the main event loop for the ORB.
orb->run (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;