• Kamil Trzciński's avatar
    Implement AtomicProcessing service · 38e549b6
    Kamil Trzciński authored
    This implements atomic processing service
    that is able in bulk to update multiple builds,
    stages and pipelines.
    
    This uses in-memory structure to calculate statuses
    and uses an efficient fetch of DAG dependencies
    for efficient processing
    
    This still performs some redundant operations,
    but overall it should be significantly faster
    processing pipelines of 1000 builds, with
    multiple DAG dependencies, as it removes
    a number of N+1 problems present in previous
    implementation.
    
    This also is order-independent, so it is able
    to easily reschedule itself once needed.
    
    This code is also concurrent safe, as if needed
    the further processing will be re-scheduled
    that will resolve any conflicts.
    38e549b6
pipeline.rb 28.2 KB