[Notes] [Git][BuildStream/buildstream][bschubert/pipeline] Stop updating state in queue.status()



Title: GitLab

Benjamin Schubert pushed to branch bschubert/pipeline at BuildStream / buildstream

Commits:

4 changed files:

Changes:

  • buildstream/_scheduler/queues/buildqueue.py
    ... ... @@ -71,9 +71,6 @@ class BuildQueue(Queue):
    71 71
             return element._assemble()
    
    72 72
     
    
    73 73
         def status(self, element):
    
    74
    -        # state of dependencies may have changed, recalculate element state
    
    75
    -        element._update_state()
    
    76
    -
    
    77 74
             if not element._is_required():
    
    78 75
                 # Artifact is not currently required but it may be requested later.
    
    79 76
                 # Keep it in the queue.
    

  • buildstream/_scheduler/queues/fetchqueue.py
    ... ... @@ -44,9 +44,6 @@ class FetchQueue(Queue):
    44 44
             element._fetch()
    
    45 45
     
    
    46 46
         def status(self, element):
    
    47
    -        # state of dependencies may have changed, recalculate element state
    
    48
    -        element._update_state()
    
    49
    -
    
    50 47
             if not element._is_required():
    
    51 48
                 # Artifact is not currently required but it may be requested later.
    
    52 49
                 # Keep it in the queue.
    

  • buildstream/_scheduler/queues/pullqueue.py
    ... ... @@ -39,9 +39,6 @@ class PullQueue(Queue):
    39 39
                 raise SkipJob(self.action_name)
    
    40 40
     
    
    41 41
         def status(self, element):
    
    42
    -        # state of dependencies may have changed, recalculate element state
    
    43
    -        element._update_state()
    
    44
    -
    
    45 42
             if not element._is_required():
    
    46 43
                 # Artifact is not currently required but it may be requested later.
    
    47 44
                 # Keep it in the queue.
    

  • buildstream/element.py
    ... ... @@ -197,6 +197,7 @@ class Element(Plugin):
    197 197
     
    
    198 198
             self.__runtime_dependencies = []        # Direct runtime dependency Elements
    
    199 199
             self.__build_dependencies = []          # Direct build dependency Elements
    
    200
    +        self.__reverse_build_dependencies = []  # Direct reverse dependency Elements
    
    200 201
             self.__sources = []                     # List of Sources
    
    201 202
             self.__weak_cache_key = None            # Our cached weak cache key
    
    202 203
             self.__strict_cache_key = None          # Our cached cache key for strict builds
    
    ... ... @@ -439,6 +440,21 @@ class Element(Plugin):
    439 440
             if should_yield and (recurse or recursed) and scope != Scope.BUILD:
    
    440 441
                 yield self
    
    441 442
     
    
    443
    +    def reverse_build_dependencies(self):
    
    444
    +        """Get all reverse dependencies for the given element in a topological order.
    
    445
    +
    
    446
    +        Currently, dependencies might be returned multiple times.
    
    447
    +        """
    
    448
    +        # FIXME: we should return each entry only once in topological order
    
    449
    +        def recurse_rdeps(element):
    
    450
    +            yield element
    
    451
    +
    
    452
    +            for rdep in element.__reverse_build_dependencies:
    
    453
    +                yield from recurse_rdeps(rdep)
    
    454
    +
    
    455
    +        for rdep in self.__reverse_build_dependencies:
    
    456
    +            yield from recurse_rdeps(rdep)
    
    457
    +
    
    442 458
         def search(self, scope, name):
    
    443 459
             """Search for a dependency by name
    
    444 460
     
    
    ... ... @@ -930,6 +946,7 @@ class Element(Plugin):
    930 946
             for meta_dep in meta.build_dependencies:
    
    931 947
                 dependency = Element._new_from_meta(meta_dep)
    
    932 948
                 element.__build_dependencies.append(dependency)
    
    949
    +            dependency.__reverse_build_dependencies.append(element)
    
    933 950
     
    
    934 951
             return element
    
    935 952
     
    
    ... ... @@ -1306,6 +1323,9 @@ class Element(Plugin):
    1306 1323
     
    
    1307 1324
             self._update_state()
    
    1308 1325
     
    
    1326
    +        for reverse_dep in self.reverse_build_dependencies():
    
    1327
    +            reverse_dep._update_state()
    
    1328
    +
    
    1309 1329
         # _track():
    
    1310 1330
         #
    
    1311 1331
         # Calls track() on the Element sources
    
    ... ... @@ -1503,6 +1523,9 @@ class Element(Plugin):
    1503 1523
             self._update_state()
    
    1504 1524
     
    
    1505 1525
             if self._get_workspace() and self._cached_success():
    
    1526
    +            for rdep in self.reverse_build_dependencies():
    
    1527
    +                rdep._update_state()
    
    1528
    +
    
    1506 1529
                 assert utils._is_main_process(), \
    
    1507 1530
                     "Attempted to save workspace configuration from child process"
    
    1508 1531
                 #
    



  • [Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]