davebshow / goblin

A Python 3.5 rewrite of the TinkerPop 3 OGM Goblin
Other
93 stars 21 forks source link

The project appears idle, can I take over? #112

Open freemo opened 4 years ago

freemo commented 4 years ago

Hi. Been starting to use this project in my own but find it lacks some very important features (like transaction support or using up to date dependencies) and has been mostly idle for 1 - 2 years now.

I'd like to bring the project up to date and improve the feature set before I start using it in my own project. The features I need would also be pretty critical to me moving forward.

So I'd like to ask, any chance I could take over the project as a new project owner? I dont mind forking the project and renaming it, that would of course make things easier since I wouldnt have to maintain backwards compatibility. But I'd be happy to take over the project as-is and maintain BW so it benefits everyone if preferred.

davebshow commented 4 years ago

Hi Jeffrey,

I have been talking to some other developers interested in the project as well. Next week we will be looking for a path forward that would help these projects continue to develop to meet community needs. I will definitely add you to the discussion thread.

Best,

Dave

On Thu, Dec 19, 2019 at 5:41 AM Jeffrey Phillips Freeman < notifications@github.com> wrote:

Hi. Been starting to use this project in my own but find it lacks some very important features (like transaction support or using up to date dependencies) and has been mostly idle for 1 - 2 years now.

I'd like to bring the project up to date and improve the feature set before I start using it in my own project. The features I need would also be pretty critical to me moving forward.

So I'd like to ask, any chance I could take over the project as a new project owner? I dont mind forking the project and renaming it, that would of course make things easier since I wouldnt have to maintain backwards compatibility. But I'd be happy to take over the project as-is and maintain BW so it benefits everyone if preferred.

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/davebshow/goblin/issues/112?email_source=notifications&email_token=AA4PVWOTTGAUUDABAPW2B4LQZN2YPA5CNFSM4J5GRRX2YY3PNVWWK3TUL52HS4DFUVEXG43VMWVGG33NNVSW45C7NFSM4IBUUYRA, or unsubscribe https://github.com/notifications/unsubscribe-auth/AA4PVWNRKAHNC6JWAUGO2QTQZN2YPANCNFSM4J5GRRXQ .

-- David M. Brown R.A. CulturePlex Lab, Western University

freemo commented 4 years ago

Wonderful. In all honesty I'd much rather see another developer take it over than myself as I'd like to spend time on other things. With that said right now I'm using a fork of the code internally with my own added features. For the moment I am keeping it backwards compatible should you want me to merge it back in or should the project live on.

As a side note I am also the developer behind a much older Tinkerpop OGM that goes back to the 2.0 days on Java called Ferma. Frames in 2.0 was the first OGM for tinkerpop as I'm sure you know (it was the official one). But it was crippling slow so I built Ferma which was backwards compatible with Frames but tens to hundreds of times faster (we have benchmarks). When Tinkerpop 3.0 came out and we ported Ferma over to that since they dropped Frames we were technically the very first OGM for Tinkerpop 3.0 at the time as far as I know. Goblin behaves in a very similar fashion in some ways to Ferma, and I have need for the functionality in my Python apps too (not just Java apps). Thus why I am looking into goblin. I hope that background information is useful.

On Thu, Dec 19, 2019 at 5:14 PM David Michael Brown < notifications@github.com> wrote:

Hi Jeffrey,

I have been talking to some other developers interested in the project as well. Next week we will be looking for a path forward that would help these projects continue to develop to meet community needs. I will definitely add you to the discussion thread.

Best,

Dave

On Thu, Dec 19, 2019 at 5:41 AM Jeffrey Phillips Freeman < notifications@github.com> wrote:

Hi. Been starting to use this project in my own but find it lacks some very important features (like transaction support or using up to date dependencies) and has been mostly idle for 1 - 2 years now.

I'd like to bring the project up to date and improve the feature set before I start using it in my own project. The features I need would also be pretty critical to me moving forward.

So I'd like to ask, any chance I could take over the project as a new project owner? I dont mind forking the project and renaming it, that would of course make things easier since I wouldnt have to maintain backwards compatibility. But I'd be happy to take over the project as-is and maintain BW so it benefits everyone if preferred.

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub < https://github.com/davebshow/goblin/issues/112?email_source=notifications&email_token=AA4PVWOTTGAUUDABAPW2B4LQZN2YPA5CNFSM4J5GRRX2YY3PNVWWK3TUL52HS4DFUVEXG43VMWVGG33NNVSW45C7NFSM4IBUUYRA , or unsubscribe < https://github.com/notifications/unsubscribe-auth/AA4PVWNRKAHNC6JWAUGO2QTQZN2YPANCNFSM4J5GRRXQ

.

-- David M. Brown R.A. CulturePlex Lab, Western University

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/davebshow/goblin/issues/112?email_source=notifications&email_token=AAXESARK5E3FTHAW7NQCD6TQZOMX3A5CNFSM4J5GRRX2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEHKDRGQ#issuecomment-567556250, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAXESAT3JXHMUVSCGSSVY3TQZOMX3ANCNFSM4J5GRRXQ .

freemo commented 4 years ago

Side note (ill repost this on the relevant ticket as well). The fork I have going locally adds transaction support though likely not in the way the original ask intended, but I think the only elegant way possible given the underlying gremlin implementation.

Basically I took advantage of the fact that the only way to get a traversal is either 1) use the raw driver and pass text-based traversals through it (unless im mistaken this is impractical for an OGM, though maybe I'm missing something). 2) Treat each traversal itself as its own transaction and accept that you cant manually create transactions that spread across multiple invocations of traversals (this appears to be the official answer)

So I decided to exploit feature #2 and implement a sort of optimistic locking that works with one caveat, it is only useful when adding new edges and nodes it isnt useful for modifying them in place. This may seem like a big caveat, and it is, but it also is useful when along side another feature I implemented: per-element immutability. In that case if an element is set as immutable then it can be created, but never destroyed nor modified after its initial creation.When these two new features I added are used in tandem you basically get something that is basically optimistic locking that works on immutable graphs.

Let me explain further. Its very typical in immutable graphs that you still need to maintain integrity. This means that a single node or edge may be inconsistent on its own and only makes sense when connected in a valid pattern, a simple example being a graph that must be connected to be valid. As such you may want to create a set of edges and nodes but with the guarantee they either all get created or none of them. Thus the optimistic locking I mentioned.

How it works:

I created a new attribute on Element classes called __immutable__ which takes an enum that has one of three values: {OFF, SIMPLE, TRANSACTIONAL}. When the value is OFF it behaves classically, this is also the default value if nothing is set. SIMPLE only creates immutability but makes not transactional guarantees. TRANSACTIONAL gives the combined functionality of both I mentioned. When this mode is set then transactions occur automatically through the flush method. Whenever a flush occurs a randomly generated UUID is created as a transaction identifier. Then all element updates throw an exception and only allow element creation. When being created every element is given a property called "dirty" which contains the transaction ID. If all saved elements succeed to write to them database then a final traversal is called, written especially a single traversal, which will drop the property dirty from all elements where the ID is matched, this effectively makes the edges and nodes live. However if an exception occurs a rollback traversal is called which drops all the dirty elements.

Finally at startup the system can call a method which scans the DB for any dirty values that may be left over from a crash and removed them as well.

Using this mechanism I was able to get guaranteed DB integrity. So far its only used in single-application-single-database configuration. But I plan to adopt it for multiple application front ends. For that I'd need to do some integrity checking as part of the commit traversal.

I can pull out the code for this if you are interested, right now its just something i use locally.

dekoza commented 4 years ago

Anything changed over the past months? I'd love to see this lib alive again and updated to support gremlinpython 3.4

freemo commented 4 years ago

Indeed there has been. The repo moved to its new home and new website (you can find it now at https://goblin-ogm.com ) and we have had 4 new versions released since I took over. Though its been a few months since I made any updated, but if people are using it I'd be happy to update some dependencies for you.

On Thu, Aug 13, 2020 at 12:56 AM Dominik Kozaczko notifications@github.com wrote:

Anything changed over the past months? I'd love to see this lib alive again and updated to support gremlinpython 3.4

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/davebshow/goblin/issues/112#issuecomment-673255603, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAXESAU5ICTFTRQBJWSUTFTSANXAZANCNFSM4J5GRRXQ .

dekoza commented 4 years ago

@freemo I'm sorry but your GitLab instance is failing. Is there any chance for a github mirror?

Also, the documentation is very lacking and sourcecode has confusing docstrings. There are also issues with from_dict methods and default param for Property. I'd love to post a PR but... your GitLab instance is failing.

freemo commented 4 years ago

We already have one, but thanks for mentioning the gitlab is down that will be back up in a few minutes, I'm looking into it.

https://github.com/goblin-ogm/goblin

On Tue, Aug 25, 2020 at 3:47 PM Dominik Kozaczko notifications@github.com wrote:

@freemo https://github.com/freemo I'm sorry but your GitLab instance is failing. Is there any chance for a github mirror?

Also, the documentation is very lacking and sourcecode has confusing docstrings. There are also issues with from_dict methods and default param. I'd love to post a PR but... your GitLab instance is failing.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/davebshow/goblin/issues/112#issuecomment-680233845, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAXESARYQGYOFFKKSSDH6ITSCQILTANCNFSM4J5GRRXQ .

freemo commented 4 years ago

the gitlab instance is now completely back up, the github mirror however will continue to be synced should gitlab ever go down in the future. It was a bug in the automated upgrade process.

On Tue, Aug 25, 2020 at 3:51 PM Jeffrey Freeman freemo@gmail.com wrote:

We already have one, but thanks for mentioning the gitlab is down that will be back up in a few minutes, I'm looking into it.

https://github.com/goblin-ogm/goblin

On Tue, Aug 25, 2020 at 3:47 PM Dominik Kozaczko notifications@github.com wrote:

@freemo https://github.com/freemo I'm sorry but your GitLab instance is failing. Is there any chance for a github mirror?

Also, the documentation is very lacking and sourcecode has confusing docstrings. There are also issues with from_dict methods and default param. I'd love to post a PR but... your GitLab instance is failing.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/davebshow/goblin/issues/112#issuecomment-680233845, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAXESARYQGYOFFKKSSDH6ITSCQILTANCNFSM4J5GRRXQ .

dekoza commented 4 years ago

@freemo thank you! The last question is - should I send PRs to gitlab only or is github also OK?

freemo commented 4 years ago

@freemo thank you! The last question is - should I send PRs to gitlab only or is github also OK?

@dekoza Gitlab is technically the official spot since its where I have all the CI setup. I will accept PR on github but its extra work/steps for me so I do prefer if you do it on gitlab if your willing.