Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Configuring a different replication slot in dev and test.

Abierto
#28 7 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
45/100
Tipo de issue
Nueva funcionalidad
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
elixir, postgresql

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

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de electric-sql/phoenix_sync

Todos los issues de electric-sql/phoenix_sync

Issues similares

Más issues de Elixir

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.