Oban connection leak on (DBConnection.ConnectionError) ssl send: closed

Hi everyone,

I’m currently testing https://bit.io serverless postgres service, since its serverless connections are not expected to last long (as mentioned in their docs) and expect clients to use a connection pool to restart connections as needed.

So Ecto.Repo’s default pool seems to work fine, however when the connection is closed from the DBs server side:

Postgrex.Protocol (#PID<0.2701.0>) disconnected: ** (DBConnection.ConnectionError) ssl send: closed

Oban seems to create a new connection without killing the last connection process, increasing resources consumption.

In this example I have a Repo config with 10 for the default pool.

  config :my_app, MyApp.Repo,
    url: database_url,
    pool_size: String.to_integer(System.get_env("POOL_SIZE") || "10"),
    ssl: true,
    ssl_opts: [
      verify: :verify_peer,
      cacertfile: CAStore.file_path(),
      server_name_indication: to_charlist(database_host)
    ]

And as you can notice, there’s over 60 processes running now:

If I open any of those this is what I see:

Is there any Oban configuration I’m not aware of to fix this specific case that anyone would suggest?
Or is this an issue with Oban’s connections handling itself?

Thanks.

That’s from the Postgres notifier, i.e. pub/sub module. Those connections are meant to be long-lived, so it will reconnect when it encounters an error or a disconnection. If you’re running a single node or have a cluster, then I recommend using the PG Notifier instead.

1 Like

Thanks @sorentwo, that did the trick!
Still curious about why the process is never killed and the new connection just spawns a new one…