|
7 | 7 | import os |
8 | 8 | import sys |
9 | 9 | import uuid |
10 | | -import weakref |
11 | 10 | from datetime import datetime, timedelta |
12 | 11 | from functools import total_ordering |
13 | 12 | from random import randint |
@@ -438,6 +437,12 @@ def db_records_from_uuids(env, job_uuids): |
438 | 437 | record = model.search([("uuid", "in", tuple(job_uuids))]) |
439 | 438 | return record.with_env(env).sudo() |
440 | 439 |
|
| 440 | + @staticmethod |
| 441 | + def db_check_uuids_in_db(env, job_uuids): |
| 442 | + model = env["queue.job"].sudo() |
| 443 | + record_uuids = model.search_read([("uuid", "in", tuple(job_uuids))], ["uuid"]) |
| 444 | + return record_uuids |
| 445 | + |
441 | 446 | def __init__( |
442 | 447 | self, |
443 | 448 | func, |
@@ -518,7 +523,6 @@ def __init__( |
518 | 523 | self.__depends_on_uuids = set() |
519 | 524 | self.__reverse_depends_on_uuids = set() |
520 | 525 | self._depends_on = set() |
521 | | - self._reverse_depends_on = weakref.WeakSet() |
522 | 526 |
|
523 | 527 | self.priority = priority |
524 | 528 | if self.priority is None: |
@@ -560,10 +564,8 @@ def add_depends(self, jobs): |
560 | 564 | if self in jobs: |
561 | 565 | raise ValueError("job cannot depend on itself") |
562 | 566 | self.__depends_on_uuids |= {j.uuid for j in jobs} |
563 | | - self._depends_on.update(jobs) |
564 | 567 | for parent in jobs: |
565 | 568 | parent.__reverse_depends_on_uuids.add(self.uuid) |
566 | | - parent._reverse_depends_on.add(self) |
567 | 569 | if any(j.state != DONE for j in jobs): |
568 | 570 | self.state = WAIT_DEPENDENCIES |
569 | 571 |
|
@@ -689,9 +691,15 @@ def _store_values(self, create=False): |
689 | 691 | vals["identity_key"] = self.identity_key |
690 | 692 |
|
691 | 693 | dependencies = { |
692 | | - "depends_on": [parent.uuid for parent in self.depends_on], |
| 694 | + "depends_on": [ |
| 695 | + rec["uuid"] |
| 696 | + for rec in Job.db_check_uuids_in_db(self.env, self.__depends_on_uuids) |
| 697 | + ], |
693 | 698 | "reverse_depends_on": [ |
694 | | - children.uuid for children in self.reverse_depends_on |
| 699 | + rec["uuid"] |
| 700 | + for rec in Job.db_check_uuids_in_db( |
| 701 | + self.env, self.__reverse_depends_on_uuids |
| 702 | + ) |
695 | 703 | ], |
696 | 704 | } |
697 | 705 | vals["dependencies"] = dependencies |
@@ -796,14 +804,6 @@ def depends_on(self): |
796 | 804 | self._depends_on = Job.load_many(self.env, self.__depends_on_uuids) |
797 | 805 | return self._depends_on |
798 | 806 |
|
799 | | - @property |
800 | | - def reverse_depends_on(self): |
801 | | - if not self._reverse_depends_on: |
802 | | - self._reverse_depends_on = Job.load_many( |
803 | | - self.env, self.__reverse_depends_on_uuids |
804 | | - ) |
805 | | - return set(self._reverse_depends_on) |
806 | | - |
807 | 807 | @property |
808 | 808 | def description(self): |
809 | 809 | if self._description: |
|
0 commit comments