-
Notifications
You must be signed in to change notification settings - Fork 36
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Neo4j 4 compatibility? #49
Comments
It does seem that they have removed support for version 1 of the protocol, without publishing any details on the new versions. This requires someone to spend a little time going through the code for Neo4j and determining what they have changed in the new protocol versions, then implementing those changes in this project. Many of the new types are already available (as mentioned in #36). Assuming their change is not extensive, it should be a fairly straight-forward task, but it does require someone to do it. |
Right. Thanks for clarifying. |
For what it may be worth, they say in neo4j/neo4j#12361 (comment) that they do intend to get around to add protocol documentation at some point… |
@cleishm I might be willing to try to help with @johannessen if you can give some pointers We use the client now as part of our build/deploy process to run migration / index creation with cypher and that is currently broken since we upgraded to neo4j 4 |
Happy to give pointers - I just don't have so much time to do it myself. Could arrange a call if you like - send me an email. |
Just a follow-up -- @johannessen I had a call with Chris today and he walked me through several pointers. I need to study it a bit more. Looks like protocol v3 might be lower hanging fruit -- fewer changes. If it looks like adding support for protocol v3 won't be a herculean effort, I may take a stab at it. Let me know if you want to collaborate. |
Unfortunately I am not currently in a position to contribute to this project myself. |
@davisford (and others) - a quick question for you. I'm finishing off support for all the additional types that were added in neo4j's implementation of later protocol versions, which should be the hardest part of getting the new protocol versions working. A have a question of style/ease of use, and would like your thoughts on. Some of the new types require significantly more data to be carried with each value (e.g. the point type requires up to 3 doubles plus the srid). This is more than the 128 bits (16 bytes) that the So I either make the user provide additional storage when creating these more esoteric types, e.g.: libneo4j-client/lib/src/neo4j-client.h.in Lines 1302 to 1303 in 07c0876
libneo4j-client/lib/src/neo4j-client.h.in Lines 1312 to 1313 in 07c0876
Or, I expand the size of Thoughts? I've currently been implementing using the former approach, but I'm concerned that this managing of additional storage creates an overly troublesome burden on users of the API, vs not requiring it. However, this "management of additional storage" does already exist implicitly when creating a neo4j string value: libneo4j-client/lib/src/neo4j-client.h.in Lines 787 to 788 in 07c0876
So perhaps it's not unreasonable to extend that elsewhere. |
@cleishm sorry for the lag in response -- been swamped myself. from my perspective as a user -- it doesn't matter to me...lol, selfishly whatever would be easier for you. my usage of this client is in an init container in our kubernetes cluster. every time we deploy our new gRPC API on top of neo4j, we run a Not sure if that provides a great deal of insight for you. I'm going to try to take a deeper look at the code again this weekend. It's always a matter of time, though...which I also don't have a ton of, but I'd hate to see this project abandoned. It's a really great lib/tool. EDIT -- also wonder how seabolt lib is doing it? have you looked at their type defs? EDIT EDIT -- if you're already requiring client of the lib to manage their own memory with the string type, I'd stick with the same pattern for the new, larger types like point which won't fit in your |
Hey guys - I'm pretty interested in seeing this happen (@johannessen and I have a Perl wrapper for bolt based on this great library). I'm willing to help (tho' I don't have many tuits either) - let me know. |
Are there any news for this issue? We are trying to use the |
I see there’s protocol documentation at https://7687.org/ now. |
Is this issue still being followed? Thanks! |
Followed? Yes! Would love to see people interested in this put time into implementing it :) |
Interested? Yes! Just tried with version 3.5.23 + GDS 1.1.6 and it worked fine :-). The C/C++ driver is useful to many people I guess. I was intially expecting one on win/mingw, but no, then I swithed to Ubuntu, it showed protocol problem, and then i degraded to version 3 and finally! Unfortunately, i dont think i am already at a level to help in implementing :-( |
@cleishm I've started grokking the protocol and the code. I think it is doable and I will be taking a stab it on https://github.com/majensen/libneo4j-client/tree/feat-bolt-3.0. Can't guarantee any timeline, but I'm feeling fairly confident. |
Amazing. I'm also happy to get on a zoom call and walk through the code for a few hours together with anyone taking this on. Just let me know. |
@majensen Sounds great! Hey, I'm not sure if you know about Neo4j's new-ish Slack channel #community-driver-authors? Several key people from Neo4j Engineering are on that channel, ready to quickly answer any specific questions about Bolt etc. that implementors might have. @fbiville should be able to add you to that channel if you’d like. |
Progress report: Things are actually almost working for Bolt 3, which is the big leap (4 is a matter of a couple of details). The main functionality added there is the explicit transaction capabilities - begin, commit, run in transaction, and rollback. Along with updating the version negotiation and adding new messages and errors and such, I've added a transaction object and API functions for these tasks. A new test/check_transaction.c file adds some tests against Chris' mock server that all pass (with "make check"). Am now pointing it at a real server and fixing the details. There are slight changes in the structure (the "argv/argc") in 3+ for the metadata that accompany some of the messages. Taking care of these enables the server to successfully respond. The code is aware of the bolt version and branches appropriately so the client should remain backward compatible with Bolt 1/2. |
Ok, still some work to do, but I have merged it all into master on https://github.com/majensen/libneo4j-client. |
Guinea pigs are welcome to try out https://github.com/majensen/libneo4j-client on Neo4j v3. I have added :begin / :commit / :rollback commands that work to the shell. It won't work on Neo4j v4.0 yet. That is the next milestone. |
Nice work so far! I’ve been getting a lot of “Transaction timed out” errors when running majensen@9b5f358. My server doesn’t have such a timeout ( I think that when the user doesn’t specify a timeout, |
@johannessen great call. Could you make an issue in the fork and tag me in the body? |
@johannessen @foobargeez I believe we have liftoff for Bolt V4.0. Please try master branch on https://github.com/majensen/libneo4j-client. The expected features now are
|
This is great. I'll try to find some time to review the code also and give some feedback. Do you want to open a merge PR sometime? |
Will do - thanks! |
Many issues now cleared up at PR #57 thanks to @johannessen testing. I just pushed a new version of majensen/perlbolt that uses it; on CPAN as Neo4j:: Bolt v0.40. |
Have you doing progress guys? I need this ;-) as a sun! |
@m-pi try the fork at https://github.com/majensen/libneo4j-client - it should be working. It hasn't been pulled into the main repo yet - waiting for @cleishm to review. |
Trying to use libneo4j-client 2.2.0 with the first release candidate for Neo4j 4, which was published a week ago, only yields a -14 error (NEO4J_PROTOCOL_NEGOTIATION_FAILED). Looks like support for Bolt versions 1 and 2 was removed from Neo4j 4 with neo4j/neo4j@9ff0780.
Is there any information available about future compatibility of libneo4j-client with Neo4j 4?
The text was updated successfully, but these errors were encountered: