LGTM
On Friday, December 16, 2016 at 4:11:30 PM UTC, Brian Foley wrote: > > commit 711fbc08fd895b826d63c1ffc7cb75f35dc4331e > Merge: 703e23e da3f300 > Author: Brian Foley <[email protected]> > Date: Fri Dec 16 16:01:48 2016 +0000 > > Merge branch 'stable-2.15' into stable-2.16 > > Merge forward patches from stable-2.15 > > * stable-2.15 > Fix gnt-instance console instance unpausing for xl toolstack > Disable pylint too-many-nested-blocks in _RunCmdPipe > Reduce nesting in import-export ProcessChildIO > Reduce nesting in LUOobCommand.Exec > Reduce nesting in LUInstanceCreate.RunOsScripts > Reduce nesting in RemoveNodeSshKeyBulk key calculation > Reduce nesting in RemoveNodeSshKeyBulk ssh logic > Reduce nesting in gnt-cluster VerifyDisks missing disk loop > Reduce nesting in _CheckVLANArguments > Reduce nesting in StartDaemon > Disable pylint bad-continuation warning > Disable pylint superfluous-parens warning > Disable pylint redefined-variable-type warning > Disable pylint too-many-branches warnings > Disable pylint broad-except warnings > Disable incorrect pylint assigning-non-slot warning > Quell pylint unbalanced-tuple-unpacking warning > Cleanup: Use new-style classes everywhere > Quell pylint socket.timeout warning > Quell the pylint wrong-import-order warnings > Quell cell-var-from-loop warning > Use default value lambda param to avoid cell-var-from-loop > Quell too-many-boolean-expressions > Remove pylint tests removed in pylint 2.0 > Quell trailing newline > Quell bad-whitespace warning > Quell consider-using-enumerate warning > Disable pylint unsubscriptable-object warning > Disable pylint bare-except warning > Disable unwanted pylint wrong-import-position warnings > Disable pylint unused-wildcard-import warning > Disable incorrect pylint not-callable warning > Disable pylint unpacking-non-sequence warning > Disable pylint misplaced-comparison-constant warning > Disable incorect pylint simplify-if-statement warning > Disable pylint eval-used warning > Disable pylint invalid-name warning > Disable pylint import-self warning > Disable some pylint unused-import warnings > Replace deprecated pylint >=0.27 pragma with new form > Delete old warning disables removed from pylint 1.6 > Fix pylint >1.4 pycurl no-member warnings > Cleanup: Remove unused/duplicate module/fn import > Cleanup: Fix unidiomatic-typecheck > Cleanup: Remove some unneeded pylint disables > Cleanup: Iterate dict rather than key list > Cleanup: Remove unused format key > Cleanup: StartInstance and RebootInstance return None > Cleanup: Fix for/else with no break in AddAuthorizedKeys > Cleanup: Replace map/filters with list comprehensions > Cleanup: del is a statement not a function > Cleanup: Use FOO not in BAR instead of not FOO in BAR > Cleanup: Simplify boolean assignment > Cleanup: Remove some unnecessary if (...) parens > Fix invalid variable error for file-based disks > FIX: Refactor DiagnoseOS to use a loop, not an inner fn > FIX: Set INSTANCE_NICn_NETWORK_NAME only if net is defined > Fix for incorrect parsing of DRBD versions > Change a few errors to report names, not UUIDs > Give atomicWriteFile temp filenames a more distinct pattern > LV check failure should print instance name > Disable logging CallRPCMethod timings in non-debug configs > 568 Update hv_kvm to handle output from qemu >= 1.6.0 > > Trivial merge conflicts: > lib/cli.py -- whitespace > lib/cmdlib/cluster/verify.py -- code previously removed from 2.16 > lib/hypervisor/hv_xen.py -- tuple vs list > lib/luxi.py -- whitespace > lib/server/masterd.py -- code cleaned up in 2.15 and > previously removed in 2.16 > lib/storage/filestorage.py -- whitespace & generator instead of > list > lib/tools/node_cleanup.py -- whitespace > > Signed-off-by: Brian Foley <[email protected]> > > diff --cc lib/client/gnt_cluster.py > index f834d2b,e23fb50..8b99c2c > --- a/lib/client/gnt_cluster.py > +++ b/lib/client/gnt_cluster.py > @@@ -299,19 -296,8 +301,16 @@@ def InitCluster(opts, args) > > default_ialloc_params = opts.default_iallocator_params > > - if opts.enabled_user_shutdown: > - enabled_user_shutdown = True > - else: > - enabled_user_shutdown = False > + enabled_user_shutdown = bool(opts.enabled_user_shutdown) > > + if opts.ssh_key_type: > + ssh_key_type = opts.ssh_key_type > + else: > + ssh_key_type = constants.SSH_DEFAULT_KEY_TYPE > + > + ssh_key_bits = ssh.DetermineKeyBits(ssh_key_type, opts.ssh_key_bits, > None, > + None) > + > bootstrap.InitCluster(cluster_name=args[0], > secondary_ip=opts.secondary_ip, > vg_name=vg_name, > diff --cc lib/jqueue/__init__.py > index 9384f55,d996461..d78625c > --- a/lib/jqueue/__init__.py > +++ b/lib/jqueue/__init__.py > @@@ -1141,9 -1168,118 +1141,9 @@@ class _JobProcessor(object) > return self.DEFER > finally: > assert job.writable, "Job became read-only while being processed" > - queue.release() > - > - > -def _EvaluateJobProcessorResult(depmgr, job, result): > - """Looks at a result from L{_JobProcessor} for a job. > - > - To be used in a L{_JobQueueWorker}. > - > - """ > - if result == _JobProcessor.FINISHED: > - # Notify waiting jobs > - depmgr.NotifyWaiters(job.id) > - > - elif result == _JobProcessor.DEFER: > - # Schedule again > - raise workerpool.DeferTask(priority=job.CalcPriority()) > - > - elif result == _JobProcessor.WAITDEP: > - # No-op, dependency manager will re-schedule > - pass > - > - else: > - raise errors.ProgrammerError("Job processor returned unknown status > %s" % > - (result, )) > - > - > -class _JobQueueWorker(workerpool.BaseWorker): > - """The actual job workers. > - > - """ > - def RunTask(self, job): # pylint: disable=W0221 > - """Job executor. > - > - @type job: L{_QueuedJob} > - @param job: the job to be processed > - > - """ > - assert job.writable, "Expected writable job" > - > - # Ensure only one worker is active on a single job. If a job > registers for > - # a dependency job, and the other job notifies before the first > worker is > - # done, the job can end up in the tasklist more than once. > - job.processor_lock.acquire() > - try: > - return self._RunTaskInner(job) > - finally: > - job.processor_lock.release() > - > - def _RunTaskInner(self, job): > - """Executes a job. > - > - Must be called with per-job lock acquired. > - > - """ > - queue = job.queue > - assert queue == self.pool.queue > - > - setname_fn = lambda op: self.SetTaskName(self._GetWorkerName(job, > op)) > - setname_fn(None) > - > - proc = mcpu.Processor(queue.context, job.id) > - > - # Create wrapper for setting thread name > - wrap_execop_fn = compat.partial(self._WrapExecOpCode, setname_fn, > - proc.ExecOpCode) > - > - _EvaluateJobProcessorResult(queue.depmgr, job, > - _JobProcessor(queue, wrap_execop_fn, > job)()) > - > - @staticmethod > - def _WrapExecOpCode(setname_fn, execop_fn, op, *args, **kwargs): > - """Updates the worker thread name to include a short summary of the > opcode. > - > - @param setname_fn: Callable setting worker thread name > - @param execop_fn: Callable for executing opcode (usually > - L{mcpu.Processor.ExecOpCode}) > - > - """ > - setname_fn(op) > - try: > - return execop_fn(op, *args, **kwargs) > - finally: > - setname_fn(None) > - > - @staticmethod > - def _GetWorkerName(job, op): > - """Sets the worker thread name. > - > - @type job: L{_QueuedJob} > - @type op: L{opcodes.OpCode} > - > - """ > - parts = ["Job%s" % job.id] > - > - if op: > - parts.append(op.TinySummary()) > - > - return "/".join(parts) > - > - > -class _JobQueueWorkerPool(workerpool.WorkerPool): > - """Simple class implementing a job-processing workerpool. > - > - """ > - def __init__(self, queue): > - super(_JobQueueWorkerPool, self).__init__("Jq", > - JOBQUEUE_THREADS, > - _JobQueueWorker) > - self.queue = queue > > > - class _JobDependencyManager: > + class _JobDependencyManager(object): > """Keeps track of job dependencies. > > """ >
