Revision 25e557a5

b/lib/workerpool.py
27 27
import logging
28 28
import threading
29 29

  
30
from ganeti import compat
31

  
30 32

  
31 33
class BaseWorker(threading.Thread, object):
32 34
  """Base worker class for worker pools.
......
211 213
    @param tasks: list of args passed to L{BaseWorker.RunTask}
212 214

  
213 215
    """
216
    assert compat.all(isinstance(task, (tuple, list)) for task in tasks), \
217
      "Each task must be a sequence"
218

  
214 219
    self._lock.acquire()
215 220
    try:
216 221
      self._WaitWhileQuiescingUnlocked()
b/test/ganeti.workerpool_unittest.py
169 169

  
170 170
    self.assertEquals(ctx.GetDoneTasks(), 22)
171 171

  
172
  def testManyTasksSequence(self):
173
    ctx = CountingContext()
174
    wp = workerpool.WorkerPool("Test", 3, CountingBaseWorker)
175
    try:
176
      self._CheckWorkerCount(wp, 3)
177
      self.assertRaises(AssertionError, wp.AddManyTasks,
178
                        ["Hello world %s" % i for i in range(10)])
179
      self.assertRaises(AssertionError, wp.AddManyTasks,
180
                        [i for i in range(10)])
181

  
182
      wp.AddManyTasks([(ctx, "Hello world %s" % i, ) for i in range(10)])
183
      wp.AddTask(ctx, "A separate hello")
184

  
185
      wp.Quiesce()
186

  
187
      self._CheckNoTasks(wp)
188
    finally:
189
      wp.TerminateWorkers()
190
      self._CheckWorkerCount(wp, 0)
191

  
192
    self.assertEquals(ctx.GetDoneTasks(), 11)
193

  
172 194
  def _CheckNoTasks(self, wp):
173 195
    wp._lock.acquire()
174 196
    try:

Also available in: Unified diff