Revision 0aeeb6e3

b/lib/jqueue.py
1137 1137
    queue = job.queue
1138 1138
    assert queue == self.pool.queue
1139 1139

  
1140
    self.SetTaskName("Job%s" % job.id)
1140
    setname_fn = lambda op: self.SetTaskName(self._GetWorkerName(job, op))
1141
    setname_fn(None)
1141 1142

  
1142 1143
    proc = mcpu.Processor(queue.context, job.id)
1143 1144

  
1144
    if not _JobProcessor(queue, proc.ExecOpCode, job)():
1145
    # Create wrapper for setting thread name
1146
    wrap_execop_fn = compat.partial(self._WrapExecOpCode, setname_fn,
1147
                                    proc.ExecOpCode)
1148

  
1149
    if not _JobProcessor(queue, wrap_execop_fn, job)():
1145 1150
      # Schedule again
1146 1151
      raise workerpool.DeferTask(priority=job.CalcPriority())
1147 1152

  
1153
  @staticmethod
1154
  def _WrapExecOpCode(setname_fn, execop_fn, op, *args, **kwargs):
1155
    """Updates the worker thread name to include a short summary of the opcode.
1156

  
1157
    @param setname_fn: Callable setting worker thread name
1158
    @param execop_fn: Callable for executing opcode (usually
1159
                      L{mcpu.Processor.ExecOpCode})
1160

  
1161
    """
1162
    setname_fn(op)
1163
    try:
1164
      return execop_fn(op, *args, **kwargs)
1165
    finally:
1166
      setname_fn(None)
1167

  
1168
  @staticmethod
1169
  def _GetWorkerName(job, op):
1170
    """Sets the worker thread name.
1171

  
1172
    @type job: L{_QueuedJob}
1173
    @type op: L{opcodes.OpCode}
1174

  
1175
    """
1176
    parts = ["Job%s" % job.id]
1177

  
1178
    if op:
1179
      parts.append(op.TinySummary())
1180

  
1181
    return "/".join(parts)
1182

  
1148 1183

  
1149 1184
class _JobQueueWorkerPool(workerpool.WorkerPool):
1150 1185
  """Simple class implementing a job-processing workerpool.
1151 1186

  
1152 1187
  """
1153 1188
  def __init__(self, queue):
1154
    super(_JobQueueWorkerPool, self).__init__("JobQueue",
1189
    super(_JobQueueWorkerPool, self).__init__("Jq",
1155 1190
                                              JOBQUEUE_THREADS,
1156 1191
                                              _JobQueueWorker)
1157 1192
    self.queue = queue

Also available in: Unified diff