Assaf Schwartz <schw...@...>
toggle quoted message
Show quoted text
Thanks a lot Boxuan!
For some reason I missed being notified on your response.
The indexes were indeed the issue (as I began to suspect), switching them to being composite indexes (there was no real need for them being mixed) solved the issue :)
About the locking, what do you consider a JVM instance? An instance of the Gremlin server? JanusGraph iteslf? If I try and use Janus as a cluster (multiple dockers instead of one), will that translate to having more than 1 JVM?
On Thursday, December 17, 2020 at 12:39:48 PM UTC+2 li...@... wrote:
I am not familiar with GKE but I can try to answer some of your questions:
> how does a traversal behave when looking up based on an index key when the key is not yet indexed
Assuming the index has been enabled. If a particular key is still in the indexing process (e.g. you are in the middle of a committing process) in one thread, then another thread will not be able to find any data because it finds nothing in the index key lookup. Note that when you are using mixed index, the data is written to your primary backend (e.g. hbase) first, and then mixed index backend (e.g. Elasticsearch). If the data has already been written into hbase but not into Elasticsearch yet, the querying thread cannot find any data (if JanusGraph decides your query can be satisfied by a mixed index).
> org.janusgraph.diskstorage.locking.PermanentLockingException: Local lock contention at org.janusgraph.diskstorage.locking.AbstractLocker.writeLock(AbstractLocker.java:327)
This usually happens when you have multiple local threads (running on the same JVM instance) contending for the same lock. You might want to check your application logic.
On Dec 17, 2020, at 6:16 PM, Assaf Schwartz <sc...@...
Could this be related to delays in indexing? I don't know how to figure out of such exists, but assuming this happens -
how does a traversal behave when looking up based on an index key when the key is not yet indexed?
On Thursday, December 17, 2020 at 10:54:32 AM UTC+2 Assaf Schwartz wrote:
I'm experiencing an issues with running JanusGraph (on top of GKE) against BigTable.
This is the general setup description:
- We are using a single node BigTable cluster (for development / integration purposes) with the vanilla 0.5.2 docker.
- Indexing is configured to be done with ES (also running on GKE)
- JanusGraph is configured through environment variables:
- Interaction with JanusGraph are done only through a single gRPC server that is running gremlin-python, let's call it DB-SERVER.
- Last time we've done testing against BT was with version 0.4.1 of JanusGraph, precompiled to support HBase1.
- All of our components communicate via gRPC.
Description of the problem:
- The DB-SERVER creates a Vertex i, generate some XML to represent work to be done, and sends it to another service for processing, let's call in ORCHESTRATOR.
- The ORCHESTRATOR generates two properties, w and r (local identifiers) and sends them back to the DB-SERVER, so they will be set as properties on Vertex i. These two properties are also mixed String indexes.
- After setting the properties, DB-SERVER will ack ORCHESTRATOR, which will start processing. As part of the processing, ORCHESTRATOR will send updates back to the DB-SERVER using w and r.
- On getting these updates DB-SERVER, it will try looking up Vertex i based on w and r, like so:
g.V().has("r", <some_r>).has("w", <some_w>).next()
- At that point, a null / None is returned as the traversal fails to find Vertex i.
- Trying the same traversal in a separate console (python and gremlin) does fetch the vertex. Since it's a single instance cluster, I ruled out any eventual consistency issues.
I'm not sure if it's a regression introduced after 0.4.1.
I've also validated that db-caching is turned off.
Many thanks in advance,