[ 
https://issues.apache.org/jira/browse/AMBARI-3924?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Andrew Onischuk updated AMBARI-3924:
------------------------------------

    Attachment: AMBARI-3924.patch

> Resource management framework: resources should be executed immediately
> -----------------------------------------------------------------------
>
>                 Key: AMBARI-3924
>                 URL: https://issues.apache.org/jira/browse/AMBARI-3924
>             Project: Ambari
>          Issue Type: Bug
>            Reporter: Andrew Onischuk
>            Assignee: Andrew Onischuk
>             Fix For: 1.5.0
>
>         Attachments: AMBARI-3924.patch
>
>
> Currently, RMF acts like puppet. All scripts are executed in 2 stages:
> 1) Interpretation: All variables, "if" and "switch" statements are resolved 
> and a list of resources is created
> 2) Execution: All resources are actually created/executed/modified in 
> asynchronous (puppet) or sequential (RMF) way
> This approach is great because a system will be never left half-configured 
> because of undefined variable: interpretation step will fail, and execution 
> will not start. 
> Also, such approach is great for unit testing (we may check resource 
> definitions, staged for execution, without actually executing them)
> But for our usage, such delayed execution produces few troubles:
> - Due to delayed execution, we can not check results of command execution at 
> our python logic. For example, we can not check if a file contains some text 
> after we run Exec() statement. Of course, we may add yet another Exec() 
> statement with shell code, but it's a hack. Solution may look like adding a 
> callback function to Exec() resource syntax, but that affects simplicity and 
> usability.
> - due to a previous reason, writing service status checks for services is 
> hard. Especially if "service <name> status" command does not return non zero 
> exit code when service is not running.
> - Using debugger for python scripts is not trivial as we don't see results of 
> command execution immediately and have to dive into env.run() essentials.
> h3. The proposal is:
> - Resources should execute immediately after definition. Any issues like 
> undefined variables will be cached during development/QA testing and should 
> not appear at production clusters.
> - env.run() call is not necessary now
> - To preserve unit testing advantages, Environment constructor should accept 
> optional parameter "test_mode" (that defaults to false). If this parameter is 
> set to true, than resources are not executed, but are still added to internal 
> list inside Environment
> - Other architecture details should remain as is (resources are defined and 
> executed within Environment context, list of defined resources is stored 
> inside Environment)
> h3. Expected impact:
> - Existing scripts for services probably will not require modifications (they 
> are ported from puppet that uses the same paradigm). In some cases, they may 
> be simplified.
> - Custom command implementations and status check methods will be simpler
> - RMF learning curve should become more flat



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Reply via email to