graphprotocol / graphprotocol/graph-node
Avoid 'canceling statement due to conflict with recovery'
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Rust
- Sterne
- 3.2k
- Forks
- 1.1k
- Ø Merge
- 4 T. 1 Std.
- Gemergte PRs (30 T.)
- 1
Beschreibung
When graph-node uses a shard with read replicas, replication conflicts can lead to an error canceling statement due to conflict with recovery. With that error, it is generally ok to retry the query, possibly with some backoff. The retry logic should guard against queries though that take so long that they are virtually guaranteed to fail with that error. For example, a query that would take 2 minutes will almost certainly fail if the underlying deployment has a decent amount of updates.
One way to avoid this would be to retry the query not against the same replica, but against the main database, where this error cannot happen.
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Verfolge den Shard-Abfrage- und Retry-Pfad der Read-Replica von graph-node und untersuche anschließend, wie PostgreSQL-Fehler aufgrund von Recovery-Konflikten behandelt werden. Vergleiche das erneute Versuchen auf einer anderen Replica mit dem Weiterleiten der Abfrage an die Hauptdatenbank und berücksichtige dabei lang laufende Abfragen; als erledigt gilt die Aufgabe, wenn der Konflikt erneut versucht werden kann, ohne wiederholt ungeeignete Abfragen an eine Replica zu senden.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- postgresql, rust
- Bereich
- backend, databases
- Issue-Typ
- Feature
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100