majensen / libneo4j-omni

Up-to-date C library and CLI for Neo4j based on libneo4j-client
Apache License 2.0
4 stars 2 forks source link

Failure to connect to Neo4j 5.9 (bolt_agent missing) #3

Open johannessen opened 1 year ago

johannessen commented 1 year ago

I can’t connect to a Neo4j 5.9.0 server using Neo4j::Client 0.52:

$ perl -MNeo4j::Bolt -e "Neo4j::Bolt->set_log_level('TRACE'); Neo4j::Bolt->connect(...)"
DEBUG [connection]: attempting connection to ::1 [7687]
INFO  [connection]: connection to ::1 [7687] failed: Connection refused
DEBUG [connection]: attempting connection to 127.0.0.1 [7687]
TRACE [connection]: opened socket to localhost [7687] (fd=5)
INFO  [connection]: connected (0x7fc562f5c3e0) to localhost:7687 (insecure)
DEBUG [connection]: connection 0x7fc562f5c3e0 using protocol version 5
TRACE [connection]: enqu INIT{user_agent: "libneo4j-client/2.3.0", scheme: basic, principal: "", credentials: ****}} (0x7fc558008000) in 0x7fc562f5c3e0
DEBUG [connection]: sent INIT (0x7fc558008000) in 0x7fc562f5c3e0
DEBUG [connection]: rcvd FAILURE in response to INIT (0x7fc558008000)
TRACE [connection]: FAILURE in 0x7fc562f5c3e0 (response to INIT): {code:"Neo.ClientError.Request.Invalid",message:"Illegal value for field \"bolt_agent\": Must be a map with string keys and string values."}
ERROR [connection]: Session initialization failed: Illegal value for field "bolt_agent": Must be a map with string keys and string values.
Segmentation fault: 11

Using perlbolt’s feat-v5.0 branch doesn’t fix this issue. The issue also occurs when using libneo4j-omni’s CLI.

Quick googling turns up the following commit. It suggests that Neo4j version numbers and Bolt version numbers no longer match up, which would mean the client’s protocol version support declaration is incorrect. However, I haven’t investigated further.

https://github.com/neo4j/neo4j-java-driver/commit/8b6932c00092e909458a32d39f422d28f9cffc38


The segmentation fault doesn’t always occur. When it does occur, it’s always reported to be in neo4j_map_kget(). When it does not occur, the connection fails anyway:

TRACE [connection]: Connection failed in request->receive() (receive_responses) on 0x7fc9b565f9d0
Failure code was: o;?
Message was: 
INFO  [connection]: disconnected 0x7fc9b565f9d0

Note the mangled failure code in this case. Sometimes it just says ok. I feel reminded of perlbolt#53.