Identify source of log message "Cannot get connection id for node" & debugging approach

In a project where none of the original developers are available, the central component is a Phoenix server named “reticulum” or “ret” for short. The old environment is a Kubernetes server, and I’m porting it to run using docker compose. There’s only one container running the Phoenix server. It’s currently running on elixir 1.16-otp-25 and erlang 25.3, and the dependencies are very old. (Yes, we plan to update both, but we have more acute problems currently.)

In the log, when the app is idle, I’m seeing this message all the time, with no apparent correlation with other log messages, which I don’t see in the log of the version running in Kubernetes:

[error] 

** Cannot get connection id for node :ret@reticulum

Grepping the source files for our code and the dependencies doesn’t find anything that can definitely be connected with the log message. JetBrains’ Junie LLM says

the message format `[error] ** Cannot get connection id for node :ret@reticulum` strongly
suggests it's coming from an Erlang process or an Elixir GenServer.

What should I be looking at to track down and deal with what’s happening here?

Hi! What was the exact command that you ran?

grep -ri “connection id” .

found

./deps/cowboy/src/cowboy_http2.erl: ‘Connection idle longer than configuration allows.’});
./deps/cowboy/src/cowboy_http.erl: ‘Connection idle longer than configuration allows.’}).
./deps/hackney/NEWS.md:- pool: cache connection IDs

grep -ri “Cannot get” .

found no occurrences

grep -ri “node” deps/peerage

found 50 matches, none of which reference “connection id”

grep -ri “Cannot” . | grep -i “connection id”

finds no occurrences

find . -name “*.ex" -o -name "*.erl” | xargs grep -i “connection id” | grep “node”

finds no occurrences

grep -ri “connection” deps | grep “node”

finds

deps/recon/src/recon.erl:%%%         and connections currently on the node.

… and a bunch of variations on that.

The error appears to come from libcluster.

https://github.com/search?q=repo%3Abitwalker%2Flibcluster+cannot+get+connection+id&type=issues

Unfortunately I can’t provide more guidance as I’ve never used this library. I hope this provides a lead for you though.

Edit: for some reason I had to escape the url because the generated link was not displaying the correct issue query. Apologies to the mods.

1 Like

Thanks, I’ll take a look!

I don’t know that I fully understand what’s going on, but when I changed from “Peerage.Via.Dns” to “Peerage.Via.Udp”, the warning went away. I then changed it back to “Peerage.Via.Dns” and renamed the service from “reticulum” to “ret”, and the warning also went away. :-S

The file in question is

import Config

import_config "prod.exs"

config :peerage, log_results: true, via: Peerage.Via.Dns, dns_name: "foo.bar", app_name: "foo"

config :ret, RetWeb.Router, secure?: false

config :sentry,
  environment_name: :turkey,
  json_library: Poison,
  included_environments: [:turkey],
  tags: %{
    env: "turkey"
  }

so it’s not clear to me where it’s getting the service name “ret” from.

Currently there’s only a single Phoenix node, but there may have been more than one in the original incarnation.

Thanks for your help!