Configuring a different replication slot in dev and test.
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 45/100
Direzione di ricerca
Inizia tracciando la configurazione della replica embedded di Phoenix.Sync e il modo in cui ricava o configura lo slot di replica electric_slot_default per i database tasks_dev e tasks_test. Riproduci il fallimento con database di sviluppo e di test separati, quindi conferma che la configurazione scelta consenta a ciascun database di usare uno slot valido distinto senza compromettere l'avvio esistente in modalità embedded.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
I have a Phoenix app with Phoenix.Sync configured in embedded mode.
config :phoenix_sync,
mode: :embedded,
repo: Tasks.Repo
The Repo is configured to connect to a local (system) Postgres. I.e.: I'm running the same Postgres database process for dev and test, configured to use the tasks_dev and tasks_test database name respectively.
As part of my development workflow, I've run the app manually in dev, e.g.:
➜ tasks git:(main) ✗ iex -S mix
Erlang/OTP 27 [erts-15.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [jit]
[info] Loading 158 CA(s) from :otp store
[info] Starting Electric replication stream using Elixir.Tasks.Repo configuration
[info] Setting electric instance_id: f5de52eb-536e-4d84-b760-7388d08c293a
[debug] The single StackSupervisor is initializing...
[info] Acquiring lock from postgres with name electric_slot_default
[info] Lock acquired from postgres with name electric_slot_default
[debug] Starting replication client for stack electric-embedded
Interactive Elixir (1.18.1) - press Ctrl+C to exit (type h() ENTER for help)
[debug] ReplicationClient step: pg_info_query
[info] Postgres server version = 170004, system identifier = 7465390237532881212, timeline_id = 1
[debug] ReplicationClient step: create_publication_query
[debug] ReplicationClient step: create_slot
[debug] Created new slot at lsn=0/18A95E78
[debug] ReplicationClient step: set_display_setting
[debug] ReplicationClient step: set_display_setting
[debug] ReplicationClient step: set_display_setting
[debug] ReplicationClient step: set_display_setting
[debug] ReplicationClient step: set_display_setting
[info] Connected to Postgres 7465390237532881212 and timeline 1
[info] Starting shape replication pipeline
[debug] Starting Elixir.Electric.Shapes.DynamicConsumerSupervisor
[debug] SchemaReconciler started
[info] Starting replication from postgres
[debug] ReplicationClient step: start_streaming
[debug] ReplicationClient step: start_replication_slot
[debug] Primary Keepalive: wal_end=413752952 (0/18A95E78) reply=0
[debug] Primary Keepalive: wal_end=413752952 (0/18A95E78) reply=0
I.e.: works fine, the tasks_dev database has a replication slot called electric_slot_default.
Now, when I then run the tests, I get this error logged:
22:59:52.561 [error] :gen_statem {:"Elixir.Electric.ProcessRegistry:electric-embedded", {Electric.Postgres.ReplicationClient, nil}} terminating
** (Postgrex.Error) ERROR 55000 (object_not_in_prerequisite_state) replication slot "electric_slot_default" was not created in this database
(stdlib 6.2) gen_statem.erl:3864: :gen_statem.loop_state_callback_result/11
(stdlib 6.2) proc_lib.erl:329: :proc_lib.init_p_do_apply/3
Process Label: {:replication_client, "electric-embedded"}
Queue: [info: :start_streaming]
Postponed: []
22:59:52.582 [error] Electric.DBConnection unknown error: %Postgrex.Error{message: nil, postgres: %{code: :object_not_in_prerequisite_state, line: "530", message: "replication slot \"electric_slot_default\" was not created in this database", file: "logical.c", unknown: "ERROR", severity: "ERROR", routine: "CreateDecodingContext", pg_code: "55000"}, connection_id: 86741, query: nil}
And this warning:
22:59:52.582 [warning] Database connection in replication mode failed: %Postgrex.Error{message: nil, postgres: %{code: :object_not_in_prerequisite_state, line: "530", message: "replication slot \"electric_slot_default\" was not created in this database", file: "logical.c", unknown: "ERROR", severity: "ERROR", routine: "CreateDecodingContext", pg_code: "55000"}, connection_id: 86741, query: nil} (PG code: 55000, PG routine: CreateDecodingContext)
Retrying...
22:59:52.582 [warning] Reconnecting in 2000ms
This is because the tasks_test database can't create a slot with the same name because it already exists in the tasks_dev database.
What's the best solution here? Do we want to use the mix env in the slot name? Or should the slot name be configured?
- Lingua principale
- Elixir
- Stelle
- 290
- Fork
- 17
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di electric-sql/phoenix_sync
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 52/100
electric-sql/phoenix_sync#128 ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 72/100
electric-sql/phoenix_sync#126 ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 25/100
electric-sql/phoenix_sync#119 ·
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
electric-sql/phoenix_sync#118 · 8 reazioni ·
-
0.6.0 -> 0.6.1: protocol Phoenix.Sync.Adapter.PlugApi not implemented for Electric.Shapes.Api Aperta
Difficoltà 3/5 1-2 giorni Idoneità per principianti 45/100
electric-sql/phoenix_sync#117 · 5 commenti ·
Tutte le issue di electric-sql/phoenix_sync
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
carverauto/serviceradar#4596 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
agentjido/jido_harness#80 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
sevenseacat/cinder#235 ·