Revision bba69414 test/ganeti.workerpool_unittest.py
b/test/ganeti.workerpool_unittest.py | ||
---|---|---|
31 | 31 |
from ganeti import workerpool |
32 | 32 |
from ganeti import errors |
33 | 33 |
from ganeti import utils |
34 |
from ganeti import compat |
|
34 | 35 |
|
35 | 36 |
import testutils |
36 | 37 |
|
... | ... | |
114 | 115 |
self.lock = threading.Lock() |
115 | 116 |
self.prioresult = {} |
116 | 117 |
self.samepriodefer = {} |
118 |
self.num2ordertaskid = {} |
|
117 | 119 |
|
118 | 120 |
|
119 | 121 |
class DeferringWorker(workerpool.BaseWorker): |
120 | 122 |
def RunTask(self, ctx, num, targetprio): |
121 | 123 |
ctx.lock.acquire() |
122 | 124 |
try: |
125 |
otilst = ctx.num2ordertaskid.setdefault(num, []) |
|
126 |
otilst.append(self._GetCurrentOrderAndTaskId()) |
|
127 |
|
|
123 | 128 |
if num in ctx.samepriodefer: |
124 | 129 |
del ctx.samepriodefer[num] |
125 | 130 |
raise workerpool.DeferTask() |
... | ... | |
466 | 471 |
rnd = random.Random(14921) |
467 | 472 |
|
468 | 473 |
data = {} |
474 |
num2taskid = {} |
|
469 | 475 |
for i in range(1, 333): |
470 | 476 |
ctx.lock.acquire() |
471 | 477 |
try: |
... | ... | |
475 | 481 |
ctx.lock.release() |
476 | 482 |
|
477 | 483 |
prio = int(rnd.random() * 30) |
478 |
wp.AddTask((ctx, i, prio), priority=50) |
|
484 |
num2taskid[i] = 1000 * i |
|
485 |
wp.AddTask((ctx, i, prio), priority=50, |
|
486 |
task_id=num2taskid[i]) |
|
479 | 487 |
data.setdefault(prio, set()).add(i) |
480 | 488 |
|
481 | 489 |
# Cause some distortion |
... | ... | |
492 | 500 |
ctx.lock.acquire() |
493 | 501 |
try: |
494 | 502 |
self.assertEqual(data, ctx.prioresult) |
503 |
|
|
504 |
all_order_ids = [] |
|
505 |
|
|
506 |
for (num, numordertaskid) in ctx.num2ordertaskid.items(): |
|
507 |
order_ids = map(compat.fst, numordertaskid) |
|
508 |
self.assertFalse(utils.FindDuplicates(order_ids), |
|
509 |
msg="Order ID has been reused") |
|
510 |
all_order_ids.extend(order_ids) |
|
511 |
|
|
512 |
for task_id in map(compat.snd, numordertaskid): |
|
513 |
self.assertEqual(task_id, num2taskid[num], |
|
514 |
msg=("Task %s used different task IDs" % num)) |
|
515 |
|
|
516 |
self.assertFalse(utils.FindDuplicates(all_order_ids), |
|
517 |
msg="Order ID has been reused") |
|
495 | 518 |
finally: |
496 | 519 |
ctx.lock.release() |
497 | 520 |
|
Also available in: Unified diff