Race condition with SyncProjectPolicyWorker

Sentry Issue 1 : GITLABCOM-86BT

PG::QueryCanceled: ERROR:  canceling statement due to statement timeout (PG::QueryCanceled)
CONTEXT:  while deleting tuple (24340,12) in relation "approval_project_rules"

  lib/gitlab/database/load_balancing/connection_proxy.rb:127:in `public_send'
    connection.public_send(...)
  lib/gitlab/database/load_balancing/connection_proxy.rb:127:in `block in write_using_load_balancer'
    connection.public_send(...)
  lib/gitlab/database/load_balancing/load_balancer.rb:141:in `block in read_write'
    yield connection
  lib/gitlab/database/load_balancing/load_balancer.rb:235:in `retry_with_backoff'
    return yield attempt # Yield the current attempt count
  lib/gitlab/database/load_balancing/load_balancer.rb:130:in `read_write'
    retry_with_backoff(attempts: attempts) do |attempt|
...
(195 additional frame(s) were not displayed)

ActiveRecord::QueryCanceled: PG::QueryCanceled: ERROR:  canceling statement due to statement timeout (ActiveRecord::QueryCanceled)
CONTEXT:  while deleting tuple (24340,12) in relation "approval_project_rules"

Sentry Issue 2: GITLABCOM-8B7R

ActiveRecord::RecordInvalid: Validation failed: Rule idx has already been taken (ActiveRecord::RecordInvalid)
  lib/gitlab/database/load_balancing/connection_proxy.rb:127:in `public_send'
    connection.public_send(...)
  lib/gitlab/database/load_balancing/connection_proxy.rb:127:in `block in write_using_load_balancer'
    connection.public_send(...)
  lib/gitlab/database/load_balancing/load_balancer.rb:145:in `block in read_write'
    yield connection
  lib/gitlab/database/load_balancing/load_balancer.rb:239:in `retry_with_backoff'
    return yield attempt # Yield the current attempt count
  lib/gitlab/database/load_balancing/load_balancer.rb:135:in `read_write'
    retry_with_backoff(attempts: attempts) do |attempt|
...
(200 additional frame(s) were not displayed)

Logs: https://log.gprd.gitlab.net/app/r/s/K2qu3

Edited by Sashi Kumar Kumaresan