• Yorick Peterse's avatar
    Refresh project authorizations using a Redis lease · 92b2c74c
    Yorick Peterse authored
    When I proposed using serializable transactions I was hoping we would be
    able to refresh data of individual users concurrently. Unfortunately
    upon closer inspection it was revealed this was not the case. This could
    result in a lot of queries failing due to serialization errors,
    overloading the database in the process (given enough workers trying to
    update the target table).
    
    To work around this we're now using a Redis lease that is cancelled upon
    completion. This ensures we can update the data of different users
    concurrently without overloading the database.
    
    The code will try to obtain the lease until it succeeds, waiting at
    least 1 second between retries. This is necessary as we may otherwise
    end up _not_ updating the data which is not an option.
    92b2c74c
authorized_projects_worker.rb 898 Bytes