summaryrefslogtreecommitdiff
path: root/CIAO/DAnCE/Plan_Launcher/Plan_Launcher.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'CIAO/DAnCE/Plan_Launcher/Plan_Launcher.cpp')
-rw-r--r--CIAO/DAnCE/Plan_Launcher/Plan_Launcher.cpp551
1 files changed, 14 insertions, 537 deletions
diff --git a/CIAO/DAnCE/Plan_Launcher/Plan_Launcher.cpp b/CIAO/DAnCE/Plan_Launcher/Plan_Launcher.cpp
index 4f2aefeb8e9..d784f689507 100644
--- a/CIAO/DAnCE/Plan_Launcher/Plan_Launcher.cpp
+++ b/CIAO/DAnCE/Plan_Launcher/Plan_Launcher.cpp
@@ -1,442 +1,11 @@
// $Id$
#include "ace/Dynamic_Service.h"
-#include "ace/Env_Value_T.h"
-#include "ace/Get_Opt.h"
#include "tao/ORB.h"
#include "tao/Object.h"
#include "DAnCE/Logger/Log_Macros.h"
#include "DAnCE/Logger/Logger_Service.h"
-#include "DAnCE/tools/Convert_Plan/Convert_Plan_Impl.h"
-
-#include "EM_Launcher.h"
-#include "NM_Launcher.h"
-
-//#include "Plan_Launcher_Impl.h"
-
-namespace
-{
- struct Options
- {
- enum MODE
- {
- LAUNCH,
- STARTLAUNCH,
- FINISHLAUNCH,
- START,
- TEARDOWN,
- INVALID
- };
-
- Options (void)
- : em_ior_ (0),
- nm_ior_ (0),
- xml_plan_ (0),
- cdr_plan_ (0),
- uuid_ (0),
- am_ior_ (0),
- app_ior_ (0),
- output_ (false),
- output_prefix_ (0),
- mode_ (LAUNCH)
- {}
-
- const ACE_TCHAR *em_ior_;
- const ACE_TCHAR *nm_ior_;
- const ACE_TCHAR *xml_plan_;
- const ACE_TCHAR *cdr_plan_;
- const ACE_TCHAR *uuid_;
- const ACE_TCHAR *am_ior_;
- const ACE_TCHAR *app_ior_;
- bool output_;
- const ACE_TCHAR *output_prefix_;
- MODE mode_;
- };
-}
-
-
-void
-usage(const ACE_TCHAR*)
-{
- ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Plan Launcher Options :\n")
-
- ACE_TEXT ("\t-k|--em-ior <EM IOR>\t\t")
- ACE_TEXT ("ExecutionManager IOR for EM based deployment.\n")
- ACE_TEXT ("\t-n|--nm-ior <NodeManager IOR>\t")
- ACE_TEXT ("NodeManager IOR for NM based deployment.\n")
- /*
- ACE_TEXT ("\nName Service Options\n")
- ACE_TEXT ("\t--domain-nc [NC]\t\tDomain Naming Context (default will rir NameService)\n")
- ACE_TEXT ("\t--instance-nc [NC]\t\tInstance Naming Context (default will rir NameService)\n")
- */
- ACE_TEXT ("\nPlan Identification Options:\n")
- ACE_TEXT ("\t-c|--cdr-plan <CDR Deployment Plan>\n")
- ACE_TEXT ("\t-x|--xml-plan <XML Deployment Plan>\n")
- ACE_TEXT ("\t-u|--plan-uuid <PLAN UUID>\tOnly supported for EM-based deployments\n")
- ACE_TEXT ("\t-a|--app-ior <APP IOR>\t\tIOR for ApplicationManager entity (Domain or Node)\n")
- ACE_TEXT ("\t-m|--am-ior <AM IOR>\t\tIOR For Application entity (Domain or Node)\n")
-
- ACE_TEXT ("\nPlan Control Options:\n")
- ACE_TEXT ("The default action is to fully launch a plan. The following options may be used\n")
- ACE_TEXT ("to arrive at a different state\n")
- ACE_TEXT ("\t-l|--launch-plan\t\tLaunch the plan (Requires CDR/XML plan)\n")
- ACE_TEXT ("\t-s|--stop-plan\t\t\tStop the plan (Requires Plan, UUID, or APP/AM references")
-
- ACE_TEXT ("\nOther Options\n")
- ACE_TEXT ("\t-o|--output[prefix]\t\tOutput IOR files that result from plan control action,")
- ACE_TEXT ("if any. Optional prefix to filename defaults to plan UUID if plan is provided."
- "Default is on for NM-based deployments.\n")
-
- ACE_TEXT ("\t-h|--help\t\t\tShow this usage information\n")
- ));
-}
-
-bool
-parse_args(int argc, ACE_TCHAR *argv[], Options &options)
-{
- DANCE_DEBUG (9, (LM_TRACE, DLINFO ACE_TEXT("PL options : \"")));
-
- for (int i = 0; i < argc; ++i)
- {
- DANCE_DEBUG (9, (LM_TRACE, "\t%s\n", argv[i]));
- }
-
- ACE_Get_Opt get_opt(argc, argv,
- ACE_TEXT ("k:n:c:x:u:m:a:lso::h"));
- get_opt.long_option(ACE_TEXT("em-ior"), 'k', ACE_Get_Opt::ARG_REQUIRED);
- get_opt.long_option(ACE_TEXT("nm-ior"), 'n', ACE_Get_Opt::ARG_REQUIRED);
- get_opt.long_option(ACE_TEXT("xml-plan"), 'x', ACE_Get_Opt::ARG_REQUIRED);
- get_opt.long_option(ACE_TEXT("cdr-plan"), 'c', ACE_Get_Opt::ARG_REQUIRED);
- get_opt.long_option(ACE_TEXT("plan-uuid"), 'u', ACE_Get_Opt::ARG_REQUIRED);
- get_opt.long_option(ACE_TEXT("am-ior"), 'm', ACE_Get_Opt::ARG_REQUIRED);
- get_opt.long_option(ACE_TEXT("app-ior"), 'a', ACE_Get_Opt::ARG_REQUIRED);
- get_opt.long_option(ACE_TEXT("launch-plan"), 'l', ACE_Get_Opt::NO_ARG);
- get_opt.long_option(ACE_TEXT("stop-plan"), 's', ACE_Get_Opt::NO_ARG);
- get_opt.long_option(ACE_TEXT("output"), 'o', ACE_Get_Opt::ARG_OPTIONAL);
- get_opt.long_option(ACE_TEXT("help"), 'h', ACE_Get_Opt::NO_ARG);
-
- int c;
- ACE_CString s;
- while ( (c = get_opt ()) != EOF)
- {
- switch (c)
- {
- case 'k':
- if (get_opt.opt_arg () == 0)
- {
- options.em_ior_ = "corbaname:rir:/NameService#ExecutionManager";
- DANCE_DEBUG (6, (LM_DEBUG, DLINFO ACE_TEXT ("Plan_Launcher::parse_args - Defaulting to ")
- ACE_TEXT ("NameService lookup of ExecutionManager\n")));
- }
- else
- {
- options.em_ior_ = get_opt.opt_arg ();
- DANCE_DEBUG (6, (LM_DEBUG, DLINFO ACE_TEXT ("Plan_Launcher::parse_args -")
- ACE_TEXT ("Using ExecutionManager IOR: %s\n"),
- options.em_ior_));
- }
- break;
-
- case 'n':
- options.nm_ior_ = get_opt.opt_arg ();
- options.output_ = true;
- DANCE_DEBUG (6, (LM_DEBUG, DLINFO ACE_TEXT ("Plan_Launcher::parse_args -")
- ACE_TEXT ("Using NodeManager IOR: %s\n"),
- options.nm_ior_));
- break;
-
- case 'x':
- options.xml_plan_ = get_opt.opt_arg ();
- DANCE_DEBUG (6, (LM_DEBUG, DLINFO ACE_TEXT ("Plan_Launcher::parse_args -")
- ACE_TEXT ("Using XML plan: %s\n"),
- options.xml_plan_));
- break;
-
- case 'c':
- options.cdr_plan_ = get_opt.opt_arg ();
- DANCE_DEBUG (6, (LM_DEBUG, DLINFO ACE_TEXT ("Plan_Launcher::parse_args -")
- ACE_TEXT ("Using CDR plan: %s\n"),
- options.cdr_plan_));
- break;
-
- case 'u':
- options.uuid_ = get_opt.opt_arg ();
- DANCE_DEBUG (6, (LM_DEBUG, DLINFO ACE_TEXT ("Plan_Launcher::parse_args -")
- ACE_TEXT ("Using UUID: %s\n"),
- options.uuid_));
- break;
-
- case 'm':
- options.am_ior_ = get_opt.opt_arg ();
- DANCE_DEBUG (6, (LM_DEBUG, DLINFO ACE_TEXT ("Plan_Launcher::parse_args -")
- ACE_TEXT ("Using ApplicationManager IOR %s\n"),
- options.am_ior_));
- break;
-
- case 'a':
- options.app_ior_ = get_opt.opt_arg ();
- DANCE_DEBUG (6, (LM_DEBUG, DLINFO ACE_TEXT ("Plan_Launcher::parse_args -")
- ACE_TEXT ("Application IOR: %s\n"),
- options.app_ior_));
- break;
-
- case 'l':
- options.mode_ = Options::LAUNCH;
- DANCE_DEBUG (6, (LM_DEBUG, DLINFO ACE_TEXT ("Plan_Launcher::parse_args -")
- ACE_TEXT ("Launching nominated plan\n")));
- break;
-
- case 's':
- options.mode_ = Options::TEARDOWN;
- DANCE_DEBUG (6, (LM_DEBUG, DLINFO ACE_TEXT ("Plan_Launcher::parse_args -")
- ACE_TEXT ("Tearing down nominated plan\n")));
- break;
-
- case 'o':
- options.output_ = true;
- DANCE_DEBUG (6, (LM_DEBUG, DLINFO ACE_TEXT ("Plan_Launcher::parse_args - ")
- ACE_TEXT ("IOR files will be output to the current working directory\n")));
-
- if (get_opt.opt_arg () != 0)
- {
- options.output_prefix_ = get_opt.opt_arg ();
- DANCE_DEBUG (6, (LM_DEBUG, DLINFO ACE_TEXT ("Plan_Launcher::parse_args - ")
- ACE_TEXT ("Storing user-provided output postfix <%s>\n"),
- options.output_prefix_));
- }
-
- break;
-
- case 'h':
- usage (argv[0]);
- return false;
- default:
- usage (argv[0]);
- return false;
- }
- }
-
- /// Sanity checking on the options.
-
- // In all cases, we need to have a EM/NM IOR specified, but only one.
- if ((!options.em_ior_ && !options.nm_ior_) ||
- (options.em_ior_ && options.nm_ior_))
- {
- ACE_ERROR ((LM_ERROR, DLINFO ACE_TEXT ("Plan_launcher::parse_args - ")
- ACE_TEXT ("Error: Must specify either EM IOR or NM IOR\n")));
- return false;
- }
-
- // Launching plans requires a plan (duh), and only one plan
- if ((options.mode_ == Options::LAUNCH) &&
- ((!options.xml_plan_ && !options.cdr_plan_) ||
- (options.xml_plan_ && options.cdr_plan_)))
- {
- ACE_ERROR ((LM_ERROR, DLINFO ACE_TEXT ("Plan_Launcher::parse_args - ")
- ACE_TEXT ("Error: Launching plans requires exactly one type of plan (CDR/XML) be ")
- ACE_TEXT ("specified.\n")));
- return false;
- }
-
- // tearing down plans requires a bit more complex set of options:
- if ((options.mode_ == Options::TEARDOWN)
- // Either way (EM/NM), we ca use a combination of a AM and a APP.
- && !(
- (options.am_ior_ && options.app_ior_) ||
- // If we are tearing down from EM, we have more options, namely:
- // A plan of some kind
- (options.em_ior_ &&
- (
- ((!options.xml_plan_ && !options.cdr_plan_) ||
- (options.xml_plan_ && options.cdr_plan_)) ||
- // A UUID
- (!options.uuid_)
- )
- )
- )
- )
- {
- ACE_ERROR ((LM_ERROR, DLINFO ACE_TEXT ("Plan_Launcher::parse_args - ")
- ACE_TEXT ("Invalid set of plan identification as required for teardown\n")));
- return false;
- }
-
-
- return true;
-}
-
-bool
-write_IOR (const ACE_TCHAR * ior_file_name, const char* ior)
-{
- FILE* ior_output_file_ = ACE_OS::fopen (ior_file_name, ACE_TEXT("w"));
-
- if (ior_output_file_)
- {
- ACE_OS::fprintf (ior_output_file_, "%s", ior);
- ACE_OS::fclose (ior_output_file_);
- return true;
- }
- return false;
-}
-
-int launch_plan (const Options &opts,
- DAnCE::Plan_Launcher_Base *pl_base,
- const ::Deployment::DeploymentPlan *plan,
- CORBA::ORB_ptr orb)
-{
- DANCE_TRACE ("Plan_Launcher::launch_plan");
-
- try
- {
- CORBA::Object_var app_mgr, app;
-
- ACE_CString uuid (pl_base->launch_plan (*plan, app_mgr.out () , app.out ()));
-
- DANCE_DEBUG (2, (LM_NOTICE, DLINFO ACE_TEXT ("Plan_Launcher::launch_plan - ")
- ACE_TEXT ("Successfully deployed plan with UUID: <%C>\n"),
- uuid.c_str ()));
-
- if (!opts.output_)
- return 0;
-
- ACE_TString am_output, app_output;
-
- if (opts.output_prefix_)
- am_output = app_output = opts.output_prefix_;
- else
- am_output = app_output = ACE_TEXT_CHAR_TO_TCHAR (uuid.c_str ());
-
- am_output += ACE_TEXT ("_AM.ior");
- app_output += ACE_TEXT ("_APP.ior");
-
- DANCE_DEBUG (6, (LM_DEBUG, DLINFO ACE_TEXT ("Plan_Launcher::launch_plan - ")
- ACE_TEXT ("Writing Application Manager IOR to <%s>\n"),
- am_output.c_str ()));
- write_IOR (am_output.c_str (),
- orb->object_to_string (app_mgr.in ()));
-
- DANCE_DEBUG (6, (LM_DEBUG, DLINFO ACE_TEXT ("Plan_Launcher::launch_plan - ")
- ACE_TEXT ("Writing Application IOR to <%s>\n"),
- am_output.c_str ()));
- write_IOR (app_output.c_str (),
- orb->object_to_string (app.in ()));
-
- }
- catch (const DAnCE::Deployment_Failure &ex)
- {
- ACE_ERROR ((LM_ERROR, DLINFO ACE_TEXT ("Plan_Launcher::launch_plan - ")
- ACE_TEXT ("Deployment failed, exception: %C\n"),
- ex.ex_.c_str ()));
- return -1;
- }
- catch (const CORBA::Exception &ex)
- {
- ACE_ERROR ((LM_ERROR, DLINFO ACE_TEXT ("Plan_Launcher::launch_plan - ")
- ACE_TEXT ("Deployment failed, caught CORBA exception %C\n"),
- ex._info ().c_str ()));
- return -1;
- }
- catch (...)
- {
- ACE_ERROR ((LM_ERROR, DLINFO ACE_TEXT ("Plan_Launcher::launch_plan - ")
- ACE_TEXT ("Deployment failed, caught unknown C++ exception\n")));
- return -1;
- }
-
- return 0;
-}
-
-int teardown_plan (const Options &opts,
- DAnCE::Plan_Launcher_Base *pl_base,
- const ::Deployment::DeploymentPlan *plan,
- CORBA::ORB_ptr orb)
-{
- DANCE_TRACE ("Plan_Launcher::teardown_plan");
-
- try
- {
- if (opts.am_ior_ && opts.app_ior_)
- {
- DANCE_DEBUG (3, (LM_DEBUG, DLINFO ACE_TEXT ("Plan_Launcher::teardown_plan - ")
- ACE_TEXT ("Tearing down plan with explicitly nominated App and AM IORs.\n")));
- CORBA::Object_var am (orb->string_to_object (opts.am_ior_));
- CORBA::Object_var app (orb->string_to_object (opts.app_ior_));
-
- pl_base->teardown_application (am, app);
- }
- else
- {
- // Need to perform lookup by uuid, either explicitly provided or in plan.
- ACE_CString uuid;
- if (plan)
- uuid = plan->UUID.in ();
- else
- uuid = opts.uuid_;
-
- DAnCE::EM_Launcher *em_launcher = dynamic_cast <DAnCE::EM_Launcher *> (pl_base);
-
- if (!em_launcher)
- {
- DANCE_ERROR (1, (LM_ERROR, DLINFO ACE_TEXT ("Plan_Launcher::teardown_plan - ")
- ACE_TEXT ("Error: Attempting UUID lookup on non-EM managed plan not supported\n")));
- return -1;
- }
-
- CORBA::Object_var am, app;
- if (em_launcher->lookup_by_uuid (uuid.c_str (),
- am.out (),
- app.out ()))
- {
- DANCE_DEBUG (3, (LM_DEBUG, DLINFO ACE_TEXT ("Plan_Launcher::teardown_plan - ")
- ACE_TEXT ("Tearing down plan with UUID %C\n"),
- uuid.c_str ()));
- pl_base->teardown_application (am, app);
- }
- else
- {
- DANCE_ERROR (1, (LM_ERROR, DLINFO ACE_TEXT ("Plan_Launcher::teardown_plan - ")
- ACE_TEXT ("Error: Lookup by UUID failed\n")));
- return -1;
- }
- }
- }
- catch (const DAnCE::Deployment_Failure &ex)
- {
- ACE_ERROR ((LM_ERROR, DLINFO ACE_TEXT ("Plan_Launcher::teardown_plan - ")
- ACE_TEXT ("Teardown failed, exception: %C\n"),
- ex.ex_.c_str ()));
- return -1;
- }
- catch (const CORBA::Exception &ex)
- {
- ACE_ERROR ((LM_ERROR, DLINFO ACE_TEXT ("Plan_Launcher::teardown_plan - ")
- ACE_TEXT ("Teardown failed, caught CORBA exception %C\n"),
- ex._info ().c_str ()));
- return -1;
- }
- catch (...)
- {
- ACE_ERROR ((LM_ERROR, DLINFO ACE_TEXT ("Plan_Launcher::teardown_plan - ")
- ACE_TEXT ("Teardown failed, caught unknown C++ exception\n")));
- return -1;
- }
-
- return 0;
-}
-
-struct ORB_Destroyer
-{
- ORB_Destroyer (CORBA::ORB_var &orb) :
- orb_ (orb)
- {
- }
-
- ~ORB_Destroyer (void)
- {
- orb_->destroy ();
- }
- CORBA::ORB_var &orb_;
-};
+#include "Plan_Launcher_Impl.h"
int
ACE_TMAIN (int argc, ACE_TCHAR *argv[])
@@ -456,126 +25,34 @@ ACE_TMAIN (int argc, ACE_TCHAR *argv[])
}
DANCE_DEBUG (6, (LM_TRACE, DLINFO
- ACE_TEXT("PlanLauncher - initializing ORB\n")));
+ ACE_TEXT("PlanLauncher - initializing ORB\n")));
CORBA::ORB_var orb = CORBA::ORB_init (argc, argv);
-
- ORB_Destroyer safe_orb (orb);
-
- Options options;
- if (!parse_args (argc, argv, options))
- {
- ACE_ERROR ((LM_ERROR, DLINFO ACE_TEXT ("Plan_Launcher - ")
- ACE_TEXT ("Failed to parse command line arguments, exiting.\n")));
- return -1;
- }
-
-
- auto_ptr<DAnCE::Plan_Launcher_Base> pl_base (0);
-
- if (options.em_ior_)
- {
- // Resolve ExecutionManager IOR for EM base deployment.
- DAnCE::EM_Launcher *em_pl (0);
-
- CORBA::Object_var obj = orb->string_to_object (options.em_ior_);
- Deployment::ExecutionManager_var tmp_em = Deployment::ExecutionManager::_narrow (obj);
-
- if (CORBA::is_nil (tmp_em.in ()))
- {
- ACE_ERROR ((LM_ERROR, DLINFO ACE_TEXT ("Plan_Launcher - ")
- ACE_TEXT ("Unable to resolve ExecutionManager reference <%s>\n"),
- options.em_ior_));
- return -1;
- }
-
- ACE_NEW_THROW_EX (em_pl,
- DAnCE::EM_Launcher (orb.in (),
- tmp_em.in ()),
- CORBA::NO_MEMORY ());
-
- pl_base.reset (em_pl);
- }
- else
- {
- // Resolve NM IOR for NM based deployment.
- DAnCE::NM_Launcher *nm_pl (0);
- CORBA::Object_var obj = orb->string_to_object (options.nm_ior_);
- Deployment::NodeManager_var tmp_em = Deployment::NodeManager::_narrow (obj);
-
- if (CORBA::is_nil (tmp_em.in ()))
- {
- ACE_ERROR ((LM_ERROR, DLINFO ACE_TEXT ("Plan_Launcher - ")
- ACE_TEXT ("Unable to resolve NodeManager reference <%s>\n"),
- options.em_ior_));
- return -1;
- }
-
- ACE_NEW_THROW_EX (nm_pl,
- DAnCE::NM_Launcher (orb.in (),
- tmp_em.in ()),
- CORBA::NO_MEMORY ());
-
- pl_base.reset (nm_pl);
- }
+ DANCE_DEBUG (6, (LM_TRACE, DLINFO
+ ACE_TEXT("PlanLauncher - initializing module instance\n")));
-
- Deployment::DeploymentPlan_var dp;
-
- DANCE_DEBUG (6, (LM_DEBUG, DLINFO ACE_TEXT ("Plan_Launcher - ")
- ACE_TEXT ("Parsing deployment plan\n")));
- if (options.cdr_plan_)
- {
- dp = DAnCE::Convert_Plan::read_cdr_plan (options.cdr_plan_);
- if (!dp.ptr ())
- {
- ACE_ERROR ((LM_ERROR, DLINFO ACE_TEXT ("PlanLauncher - Error: Unable to read in XML plan\n")));
- return -1;
- }
- }
- else if (options.xml_plan_)
- {
- dp = DAnCE::Convert_Plan::read_xml_plan (options.xml_plan_);
-
- if (!dp.ptr ())
- {
- ACE_ERROR ((LM_ERROR, DLINFO ACE_TEXT ("PlanLauncher - Error: Unable to read in CDR plan\n")));
- return -1;
- }
- }
-
- switch (options.mode_)
- {
- case Options::LAUNCH:
- retval = launch_plan (options, pl_base.get (), dp, orb.in ());
-
- break;
-
- case Options::TEARDOWN:
- retval = teardown_plan (options, pl_base.get (), dp, orb.in ());
- break;
+ Plan_Launcher_Impl pl (orb.in (), argc, argv);
+ pl.execute();
+
+ DANCE_DEBUG (6, (LM_TRACE, DLINFO
+ ACE_TEXT("PlanLauncher - destroying ORB\n")));
- default:
- ACE_ERROR ((LM_ERROR, DLINFO ACE_TEXT ("Plan_Launcher -")
- ACE_TEXT ("Mode not yet supported\n")));
- break;
-
- };
+ orb->destroy ();
}
- catch (const DAnCE::Deployment_Failure& e)
+ catch (const Plan_Launcher_Impl::Deployment_Failure& e)
{
- ACE_ERROR ((LM_ERROR, DLINFO "PlanLauncher - Error: %C.\n", e.ex_.c_str()));
+ DANCE_ERROR (1, (LM_ERROR, DLINFO "PlanLauncher - Error: %C.\n", e.error_.c_str()));
retval = -1;
}
catch (const CORBA::Exception& ex)
{
- ACE_ERROR ((LM_ERROR, DLINFO "PlanLauncher - Error: %C\n", ex._info ().c_str ()));
+ ex._tao_print_exception ("PlanLauncher");
retval = -1;
}
catch (...)
{
- ACE_ERROR ((LM_ERROR, "PlanLauncher - Error: Unknown exception.\n"));
+ DANCE_ERROR (1, (LM_ERROR, "PlanLauncher - Error: Unknown exception.\n"));
retval = -1;
}