LGTM, thanks

On Wed, Nov 25, 2015 at 11:58 AM, Oleg Ponomarev <[email protected]>
wrote:

> The interdiff again:
>
> --- a/lib/jqueue/post_hooks_exec.py
> +++ b/lib/jqueue/post_hooks_exec.py
> @@ -28,11 +28,11 @@
>  # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
>
>
> -"""Module implementing the executing of opcode post hooks in a separate
> process
> +"""Module implementing the execution of opcode post hooks in a separate
> process
>
>  This process receives the job_id from the master process and runs global
> post
> -hooks for the last opcode whose executon has started before the job
> process
> -disappear.
> +hooks for the last opcode whose execution started before the job process
> +disappeared.
>
>  """
>
> @@ -89,7 +89,7 @@ def main():
>        target_op = op
>
>      # We should run post hooks only if opcode execution has been started.
> -    # Note, that currently the opcodes inside a job execute sequentially.
> +    # Note that currently the opcodes inside a job execute sequentially.
>      if target_op is None:
>        sys.exit(0)
>
> @@ -108,7 +108,8 @@ def main():
>                                      cfg.GetMasterNode(), job_id,
>                                      constants.POST_HOOKS_STATUS_DISAPPEAR)
>    except Exception: # pylint: disable=W0703
> -    logging.exception("Exception when trying to run job post hooks %d",
> job_id)
> +    logging.exception("Exception when trying to run post hooks of job %d",
> +                      job_id)
>    finally:
>      logging.debug("Post hooks exec for disappeared job %d finalized",
> job_id)
>      logging.debug("Removing livelock file %s", livelock_name.GetPath())
>
>
> On 11/24/2015 08:35 PM, Hrvoje Ribicic wrote:
>
> LGTM with nits.
>
> Fix patch title - executing.
>
> On Fri, Nov 20, 2015 at 5:11 PM, 'Oleg Ponomarev' via ganeti-devel <
> <[email protected]>[email protected]> wrote:
>
>> Implement ppost_hooks_exec.py which has already been reffered to by
>>
>
> s/reffered/referred/
>
>
>> forkPostHooksProcess. This python process will be used in order to
>> run global POST hooks for opcodes whose processes have disappeared.
>>
>> Signed-off-by: Oleg Ponomarev < <[email protected]>
>> [email protected]>
>> ---
>>  Makefile.am                   |   3 +-
>>  lib/jqueue/post_hooks_exec.py | 120
>> ++++++++++++++++++++++++++++++++++++++++++
>>  2 files changed, 122 insertions(+), 1 deletion(-)
>>  create mode 100644 lib/jqueue/post_hooks_exec.py
>>
>> diff --git a/Makefile.am b/Makefile.am
>> index a721089..8ba84a5 100644
>> --- a/Makefile.am
>> +++ b/Makefile.am
>> @@ -546,7 +546,8 @@ hypervisor_hv_kvm_PYTHON = \
>>
>>  jqueue_PYTHON = \
>>         lib/jqueue/__init__.py \
>> -       lib/jqueue/exec.py
>> +       lib/jqueue/exec.py \
>> +       lib/jqueue/post_hooks_exec.py
>>
>>  storage_PYTHON = \
>>         lib/storage/__init__.py \
>> diff --git a/lib/jqueue/post_hooks_exec.py b/lib/jqueue/post_hooks_exec.py
>> new file mode 100644
>> index 0000000..97a236f
>> --- /dev/null
>> +++ b/lib/jqueue/post_hooks_exec.py
>> @@ -0,0 +1,120 @@
>> +#
>> +#
>> +
>> +# Copyright (C) 2015 Google Inc.
>> +# All rights reserved.
>> +#
>> +# Redistribution and use in source and binary forms, with or without
>> +# modification, are permitted provided that the following conditions are
>> +# met:
>> +#
>> +# 1. Redistributions of source code must retain the above copyright
>> notice,
>> +# this list of conditions and the following disclaimer.
>> +#
>> +# 2. Redistributions in binary form must reproduce the above copyright
>> +# notice, this list of conditions and the following disclaimer in the
>> +# documentation and/or other materials provided with the distribution.
>> +#
>> +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
>> +# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
>> +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
>> PARTICULAR
>> +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
>> +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
>> +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
>> +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
>> +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
>> +# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
>> +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
>> +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
>> +
>> +
>> +"""Module implementing the executing of opcode post hooks in a separate
>> process
>>
>
> s/executing/execution/
>
>
>> +
>> +This process receives the job_id from the master process and runs global
>> post
>> +hooks for the last opcode whose executon has started before the job
>> process
>> +disappear.
>>
>
> whose execution started before the job process disappeared.
>
>
>> +
>> +"""
>> +
>> +import contextlib
>> +import logging
>> +import os
>> +import sys
>> +
>> +from ganeti import constants
>> +from ganeti import hooksmaster
>> +from ganeti import pathutils
>> +from ganeti import utils
>> +from ganeti.jqueue import JobQueue
>> +from ganeti.rpc import transport
>> +from ganeti.server import masterd
>> +from ganeti.utils import livelock
>> +
>> +
>> +def _GetMasterInfo():
>> +  """Retrieve the job id from the master process
>> +
>> +  This also closes standard input/output
>> +
>> +  @rtype: int
>> +
>> +  """
>> +  logging.debug("Reading job id from the master process")
>> +  logging.debug("Opening transport over stdin/out")
>> +  with contextlib.closing(transport.FdTransport((0, 1))) as trans:
>> +    job_id = int(trans.Call(""))
>> +    logging.debug("Got job id %d", job_id)
>> +  return job_id
>> +
>> +
>> +def main():
>> +
>> +  debug = int(os.environ["GNT_DEBUG"])
>> +
>> +  logname = pathutils.GetLogFilename("jobs")
>> +  utils.SetupLogging(logname, "job-post-hooks-startup", debug=debug)
>> +  job_id = _GetMasterInfo()
>> +  utils.SetupLogging(logname, "job-%s-post-hooks" % (job_id,),
>> debug=debug)
>> +
>> +  try:
>> +    job = JobQueue.SafeLoadJobFromDisk(None, job_id, try_archived=False,
>> +                                       writable=False)
>> +    assert job.id == job_id, "The job id received %d differs " % job_id
>> + \
>> +      "from the serialized one %d" % job.id
>> +
>> +    target_op = None
>> +    for op in job.ops:
>> +      if op.start_timestamp is None:
>> +        break
>> +      target_op = op
>> +
>> +    # We should run post hooks only if opcode execution has been started.
>> +    # Note, that currently the opcodes inside a job execute sequentially.
>>
>
> s/,//
>
>
>> +    if target_op is None:
>> +      sys.exit(0)
>> +
>> +    livelock_name = livelock.LiveLockName("post-hooks-executor-%d" %
>> job_id)
>> +    context = masterd.GanetiContext(livelock_name)
>> +    cfg_tmp = context.GetConfig(job_id)
>> +    # Get static snapshot of the config and release it in order to
>> prevent
>> +    # further synchronizations.
>> +    cfg = cfg_tmp.GetDetachedConfig()
>> +    cfg_tmp.OutDate()
>> +
>> +    hooksmaster.ExecGlobalPostHooks(target_op.input.OP_ID,
>> +                                    cfg.GetMasterNodeName(),
>> +
>> context.GetRpc(cfg).call_hooks_runner,
>> +                                    logging.warning,
>> cfg.GetClusterName(),
>> +                                    cfg.GetMasterNode(), job_id,
>> +
>> constants.POST_HOOKS_STATUS_DISAPPEAR)
>> +  except Exception: # pylint: disable=W0703
>> +    logging.exception("Exception when trying to run job post hooks %d",
>> job_id)
>>
>
> s/job post hooks %d/post hooks of job %d/
>
>
>> +  finally:
>> +    logging.debug("Post hooks exec for disappeared job %d finalized",
>> job_id)
>> +    logging.debug("Removing livelock file %s", livelock_name.GetPath())
>> +    os.remove(livelock_name.GetPath())
>> +
>> +  sys.exit(0)
>> +
>> +if __name__ == '__main__':
>> +  main()
>> --
>> 2.6.0.rc2.230.g3dd15c0
>>
>>
> Hrvoje Ribicic
> Ganeti Engineering
> Google Germany GmbH
> Dienerstr. 12, 80331, München
>
> Geschäftsführer: Matthew Scott Sucherman, Paul Terence Manicle
> Registergericht und -nummer: Hamburg, HRB 86891
> Sitz der Gesellschaft: Hamburg
>
> Diese E-Mail ist vertraulich. Wenn Sie nicht der richtige Adressat sind,
> leiten Sie diese bitte nicht weiter, informieren Sie den Absender und
> löschen Sie die E-Mail und alle Anhänge. Vielen Dank.
>
> This e-mail is confidential. If you are not the right addressee please do
> not forward it, please inform the sender, and please erase this e-mail
> including any attachments. Thanks.
>
>
>
Hrvoje Ribicic
Ganeti Engineering
Google Germany GmbH
Dienerstr. 12, 80331, München

Geschäftsführer: Matthew Scott Sucherman, Paul Terence Manicle
Registergericht und -nummer: Hamburg, HRB 86891
Sitz der Gesellschaft: Hamburg

Diese E-Mail ist vertraulich. Wenn Sie nicht der richtige Adressat sind,
leiten Sie diese bitte nicht weiter, informieren Sie den Absender und
löschen Sie die E-Mail und alle Anhänge. Vielen Dank.

This e-mail is confidential. If you are not the right addressee please do
not forward it, please inform the sender, and please erase this e-mail
including any attachments. Thanks.

Reply via email to