Fix deadlocks caused by EctoOrdered
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Accessibilité débutants
- 25/100
Piste de recherche
Commencez par les stack frames de EctoOrdered, en particulier ecto_ordered.ex:242 et :172, puis suivez le flux de sync appelant à travers code_corps/github/sync/issue/task/task.ex et sync.ex. Reproduisez le scénario de synchronisation GitHub concurrente et déterminez comment l’achèvement doit être vérifié en éliminant les deadlocks PostgreSQL signalés.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Problem
Our new sync process revealed some issues caused in our use of EctoOrdered when there are a large number of writes. At the kind of scale we need for highly concurrent GitHub syncing, we are hitting deadlocks in the database.
Here's an example of the errors:
2017-11-02T23:39:42.632335Z [error] Task #PID<0.22638.6> started from #PID<0.3430.0> terminating
** (Postgrex.Error) ERROR 40P01 (deadlock_detected): deadlock detected
Process 14260 waits for ShareLock on transaction 1981764; blocked by process 14258.
Process 14258 waits for ShareLock on transaction 1981765; blocked by process 14260.
(ecto) lib/ecto/adapters/sql.ex:440: Ecto.Adapters.SQL.execute_or_reset/7
(ecto_ordered) lib/ecto_ordered.ex:242: EctoOrdered.increment_other_ranks/2
(ecto_ordered) lib/ecto_ordered.ex:172: EctoOrdered.ensure_unique_position/2
(ecto) lib/ecto/repo/schema.ex:456: anonymous fn/2 in Ecto.Repo.Schema.run_prepare/2
(elixir) lib/enum.ex:1811: Enum."-reduce/3-lists^foldl/2-0-"/3
(ecto) lib/ecto/repo/schema.ex:268: anonymous fn/14 in Ecto.Repo.Schema.do_update/4
(ecto) lib/ecto/repo/schema.ex:768: anonymous fn/3 in Ecto.Repo.Schema.wrap_in_transaction/6
(ecto) lib/ecto/adapters/sql.ex:576: anonymous fn/3 in Ecto.Adapters.SQL.do_transaction/3
(db_connection) lib/db_connection.ex:1275: DBConnection.transaction_run/4
(db_connection) lib/db_connection.ex:1199: DBConnection.run_begin/3
(db_connection) lib/db_connection.ex:790: DBConnection.transaction/3
(code_corps) lib/code_corps/github/sync/issue/task/task.ex:51: CodeCorps.GitHub.Sync.Issue.Task.find_or_create_task/2
(elixir) lib/enum.ex:1255: Enum."-map/2-lists^map/1-0-"/2
(elixir) lib/enum.ex:1255: Enum."-map/2-lists^map/1-0-"/2
(code_corps) lib/code_corps/github/sync/issue/task/task.ex:45: CodeCorps.GitHub.Sync.Issue.Task.sync_project_github_repo/1
(code_corps) lib/code_corps/github/sync/sync.ex:178: CodeCorps.GitHub.Sync.sync_project_github_repo/1
(elixir) lib/task/supervised.ex:85: Task.Supervised.do_apply/2
(stdlib) proc_lib.erl:247: :proc_lib.init_p_do_apply/3
Function: #Function<3.4867021/0 in CodeCorpsWeb.ProjectGithubRepoController.create/2>
Args: []
One approach to this is to rewrite our card syncing to use a single position column with floats and some ordering scheme like this one, with most of the operations happening on the server itself.
- Langage dominant
- Elixir
- Étoiles
- 234
- Forks
- 82
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de code-corps/code-corps-api
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 15/100
code-corps/code-corps-api#1385 ·
-
Cannot Create new GitHub AppOuverte
Difficulté 3/5 1-2 jours Accessibilité débutants 25/100
code-corps/code-corps-api#1384 ·
-
Track anon Users that registerOuverte
Difficulté 4/5 3-5 jours Accessibilité débutants 35/100
code-corps/code-corps-api#1383 · 2 commentaires ·
-
Difficulté 3/5 1-2 jours Accessibilité débutants 35/100
code-corps/code-corps-api#1382 · 2 commentaires ·
-
Difficulty: Medium Skill: Elixir Time: 4 hours
code-corps/code-corps-api#1372 · 3 commentaires · 1 personne assignée ·
Toutes les issues de code-corps/code-corps-api
Issues similaires
-
test(core_elx): flaky remote-desktop provider teardown test asserts before teardown completesOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
carverauto/serviceradar#5128 ·
Les mainteneurs répondent en général sous 1 jour
-
V2 JSON serializer crashes channel and CDC processesPeut-être pris @mandar1045 l’a pris il y a 1 jour. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
Les mainteneurs répondent en général sous 1 jour
-
Handle short ciphertext in AES-GCM Decrypt instead of panickingPeut-être pris @pamod-madubashana l’a pris il y a 2 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 92/100
semaphoreio/semaphore#1305 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
QuinnWilton/argus#5 · 1 commentaire ·
-
help-wanted L: docker L: elm L: github:actions L: helm L: ruby:bundler
Difficulté 2/5 1-3 heures Accessibilité débutants 85/100
dependabot/dependabot-core#16425 ·
Les mainteneurs répondent en général sous 2 jours