Configuring a different replication slot in dev and test.
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 45/100
Línea de trabajo
Empieza rastreando la configuración de replicación embebida de Phoenix.Sync y cómo deriva o configura el slot de replicación electric_slot_default para las bases de datos tasks_dev y tasks_test. Reproduce el fallo con bases de datos de desarrollo y de pruebas separadas y, después, confirma que la configuración elegida permite que cada base de datos use un slot válido distinto sin romper el inicio existente en modo embebido.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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?
- Lenguaje dominante
- Elixir
- Estrellas
- 290
- Forks
- 17
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de electric-sql/phoenix_sync
-
Dificultad 3/5 1-2 días Aptitud para principiantes 52/100
electric-sql/phoenix_sync#128 ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 72/100
electric-sql/phoenix_sync#126 ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 25/100
electric-sql/phoenix_sync#119 ·
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
electric-sql/phoenix_sync#118 · 8 reacciones ·
-
0.6.0 -> 0.6.1: protocol Phoenix.Sync.Adapter.PlugApi not implemented for Electric.Shapes.Api Abierto
Dificultad 3/5 1-2 días Aptitud para principiantes 45/100
electric-sql/phoenix_sync#117 · 5 comentarios ·
Todos los issues de electric-sql/phoenix_sync
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
beyond-all-reason/teiserver#1616 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
carverauto/serviceradar#4596 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
agentjido/jido_harness#80 ·