On Tue, Mar 4, 2014 at 10:26 AM, Thomas Thrainer <[email protected]> wrote:
> Interdiff:
>
> diff --git a/lib/cmdlib/base.py b/lib/cmdlib/base.py
> index f52264c..97cafbd 100644
> --- a/lib/cmdlib/base.py
> +++ b/lib/cmdlib/base.py
> @@ -294,8 +294,9 @@ class LogicalUnit(object):
>      @return: list of node UUIDs on which the post hook should run. The
> default
>        implementation returns the passed in C{post_hook_node_uuids}, but
>        custom implementations can choose to alter the list.
> +
>      """
> -    # For consistency wih HooksCallBack we ignore the could be a function
> +    # For consistency wih HooksCallBack we ignore the "could be a function"

s/wih/with.

Rest LGTM, no need to resend.

Thanks,
Michele

>      # warning
>      # pylint: disable=R0201
>      return post_hook_node_uuids
>
>
> On Tue, Mar 4, 2014 at 10:24 AM, Jose A. Lopes <[email protected]> wrote:
>>
>> On Mar 04 10:10, Michele Tartara wrote:
>> > On Tue, Mar 4, 2014 at 8:18 AM, Thomas Thrainer <[email protected]>
>> > wrote:
>> > > This method can be used to alter the list of node UUIDs on which post
>> > > hooks are executed. PreparePostHookNodes is called after Exec, so LUs
>> > > can use data only known after the execution of the LU.
>> > >
>> > > Signed-off-by: Thomas Thrainer <[email protected]>
>> > > ---
>> > >  lib/backend.py     |  2 +-
>> > >  lib/cmdlib/base.py | 26 ++++++++++++++++++++++++++
>> > >  lib/hooksmaster.py | 15 ++++++++++++---
>> > >  3 files changed, 39 insertions(+), 4 deletions(-)
>> > >
>> > > diff --git a/lib/backend.py b/lib/backend.py
>> > > index 558610b..6aac4e1 100644
>> > > --- a/lib/backend.py
>> > > +++ b/lib/backend.py
>> > > @@ -332,7 +332,7 @@ def RunLocalHooks(hook_opcode, hooks_path,
>> > > env_builder_fn):
>> > >        cfg = _GetConfig()
>> > >        hr = HooksRunner()
>> > >        hm = hooksmaster.HooksMaster(hook_opcode, hooks_path, nodes,
>> > > -                                   hr.RunLocalHooks, None, env_fn,
>> > > +                                   hr.RunLocalHooks, None, env_fn,
>> > > None,
>> > >                                     logging.warning,
>> > > cfg.GetClusterName(),
>> > >                                     cfg.GetMasterNode())
>> > >        hm.RunPhase(constants.HOOKS_PHASE_PRE)
>> > > diff --git a/lib/cmdlib/base.py b/lib/cmdlib/base.py
>> > > index 46f5a37..1738fa0 100644
>> > > --- a/lib/cmdlib/base.py
>> > > +++ b/lib/cmdlib/base.py
>> > > @@ -283,6 +283,26 @@ class LogicalUnit(object):
>> > >      """
>> > >      raise NotImplementedError
>> > >
>> > > +  def PreparePostHookNodes(self, post_hook_node_uuids):
>> > > +    """Extend list of nodes to run the post LU hook.
>> > > +
>> > > +    This method allows LUs to change the list of node UUIDs on which
>> > > the
>> > > +    post hook should run after the LU has been executed but before
>> > > the post
>> > > +    hook is run.
>> > > +
>> > > +    @type post_hook_node_uuids: list
>> > > +    @param post_hook_node_uuids: The initial list of node UUIDs to
>> > > run the
>> > > +      post hook on, as returned by L{BuildHooksNodes}.
>> > > +    @rtype: list
>> > > +    @return: list of node UUIDs on which the post hook should run.
>> > > The default
>> > > +      implementation returns the passed in C{post_hook_node_uuids},
>> > > but
>> > > +      custom implementations can choose to alter the list.
>> > > +    """
>> >
>> > Missing newline before """: the style police will shout at you :-)
>> >
>> >
>> > > +    # For consistency wih HooksCallBack we ignore the could be a
>> > > function
>> > > +    # warning
>>
>> This sentence needs revising.
>>
>> > > +    # pylint: disable=R0201
>> > > +    return post_hook_node_uuids
>> > > +
>> > >    def HooksCallBack(self, phase, hook_results, feedback_fn,
>> > > lu_result):
>> > >      """Notify the LU about the results of its hooks.
>> > >
>> > > @@ -401,6 +421,12 @@ class NoHooksLU(LogicalUnit): # pylint:
>> > > disable=W0223
>> > >      """
>> > >      raise AssertionError("BuildHooksNodes called for NoHooksLU")
>> > >
>> > > +  def PreparePostHookNodes(self, post_hook_node_uuids):
>> > > +    """Empty PreparePostHookNodes for NoHooksLU.
>> > > +
>> > > +    """
>> > > +    raise AssertionError("PreparePostHookNodes called for NoHooksLU")
>> > > +
>> > >
>> > >  class Tasklet:
>> > >    """Tasklet base class.
>> > > diff --git a/lib/hooksmaster.py b/lib/hooksmaster.py
>> > > index 515a2a8..1d4c351 100644
>> > > --- a/lib/hooksmaster.py
>> > > +++ b/lib/hooksmaster.py
>> > > @@ -46,8 +46,8 @@ def _RpcResultsToHooksResults(rpc_results):
>> > >
>> > >  class HooksMaster(object):
>> > >    def __init__(self, opcode, hooks_path, nodes, hooks_execution_fn,
>> > > -               hooks_results_adapt_fn, build_env_fn, log_fn,
>> > > htype=None,
>> > > -               cluster_name=None, master_name=None):
>> > > +               hooks_results_adapt_fn, build_env_fn,
>> > > prepare_post_nodes_fn,
>> > > +               log_fn, htype=None, cluster_name=None,
>> > > master_name=None):
>> > >      """Base class for hooks masters.
>> > >
>> > >      This class invokes the execution of hooks according to the
>> > > behaviour
>> > > @@ -70,6 +70,11 @@ class HooksMaster(object):
>> > >      @type build_env_fn: function that returns a dictionary having
>> > > strings as
>> > >        keys
>> > >      @param build_env_fn: function that builds the environment for the
>> > > hooks
>> > > +    @type prepare_post_nodes_fn: function that take a list of node
>> > > UUIDs and
>> > > +      returns a list of node UUIDs
>> > > +    @param prepare_post_nodes_fn: function that is invoked right
>> > > before
>> > > +      executing post hooks and can change the list of node UUIDs to
>> > > run the post
>> > > +      hooks on
>> > >      @type log_fn: function that accepts a string
>> > >      @param log_fn: logging function
>> > >      @type htype: string or None
>> > > @@ -86,6 +91,7 @@ class HooksMaster(object):
>> > >      self.hooks_execution_fn = hooks_execution_fn
>> > >      self.hooks_results_adapt_fn = hooks_results_adapt_fn
>> > >      self.build_env_fn = build_env_fn
>> > > +    self.prepare_post_nodes_fn = prepare_post_nodes_fn
>> > >      self.log_fn = log_fn
>> > >      self.htype = htype
>> > >      self.cluster_name = cluster_name
>> > > @@ -195,6 +201,8 @@ class HooksMaster(object):
>> > >      elif phase == constants.HOOKS_PHASE_POST:
>> > >        if node_names is None:
>> > >          node_names = self.post_nodes
>> > > +        if node_names is not None and self.prepare_post_nodes_fn is
>> > > not None:
>> > > +          node_names =
>> > > frozenset(self.prepare_post_nodes_fn(list(node_names)))
>> > >        env = self._BuildEnv(phase)
>> > >      else:
>> > >        raise AssertionError("Unknown phase '%s'" % phase)
>> > > @@ -277,4 +285,5 @@ class HooksMaster(object):
>> > >
>> > >      return HooksMaster(lu.op.OP_ID, lu.HPATH, nodes,
>> > > hooks_execution_fn,
>> > >                         _RpcResultsToHooksResults, lu.BuildHooksEnv,
>> > > -                       lu.LogWarning, lu.HTYPE, cluster_name,
>> > > master_name)
>> > > +                       lu.PreparePostHookNodes, lu.LogWarning,
>> > > lu.HTYPE,
>> > > +                       cluster_name, master_name)
>> > > --
>> > > 1.9.0.279.gdc9e3eb
>> > >
>> >
>> > Rest LGTM, thanks.
>> >
>> > Michele
>> >
>> > --
>> > Google Germany GmbH
>> > Dienerstr. 12
>> > 80331 München
>> >
>> > Registergericht und -nummer: Hamburg, HRB 86891
>> > Sitz der Gesellschaft: Hamburg
>> > Geschäftsführer: Graham Law, Christine Elizabeth Flores
>>
>> --
>> Jose Antonio Lopes
>> Ganeti Engineering
>> Google Germany GmbH
>> Dienerstr. 12, 80331, München
>>
>> Registergericht und -nummer: Hamburg, HRB 86891
>> Sitz der Gesellschaft: Hamburg
>> Geschäftsführer: Graham Law, Christine Elizabeth Flores
>> Steuernummer: 48/725/00206
>> Umsatzsteueridentifikationsnummer: DE813741370
>
>
>
>
> --
> Thomas Thrainer | Software Engineer | [email protected] |
>
>
> Google Germany GmbH
> Dienerstr. 12
> 80331 München
>
> Registergericht und -nummer: Hamburg, HRB 86891
> Sitz der Gesellschaft: Hamburg
> Geschäftsführer: Graham Law, Christine Elizabeth Flores



-- 
Google Germany GmbH
Dienerstr. 12
80331 München

Registergericht und -nummer: Hamburg, HRB 86891
Sitz der Gesellschaft: Hamburg
Geschäftsführer: Graham Law, Christine Elizabeth Flores

Reply via email to