JanusGraphJ
JanusGraphโ€ข2y agoโ€ข
32 replies
criminosis

Comma Separated Config Options Values Via Environment Variable?

Hey @Bo & @porunov I was trying out the retry logic added by my PR (https://github.com/JanusGraph/janusgraph/pull/4409) by setting environment variables in my docker compose like so:

janusgraph.index.some_index_name_here.elasticsearch.retry-error-codes=408,429


Much like was done in the unit test I wrote (https://github.com/JanusGraph/janusgraph/blob/487e10ca276678862fd8fb369d6d17188703ba67/janusgraph-es/src/test/java/org/janusgraph/diskstorage/es/rest/RestClientSetupTest.java#L240). But to my surprise it doesn't seem to be received well during startup:

janusgraph | Caused by: java.lang.NumberFormatException: For input string: "408,429"
janusgraph | at java.base/java.lang.NumberFormatException.forInputString(Unknown Source) ~[?:?]
.....
janusgraph | at org.janusgraph.diskstorage.es.rest.RestClientSetup.connect(RestClientSetup.java:83) ~[janusgraph-es-1.1.0-20240427-134121.4bddfb4.jar:?]

The surprise to me being it's using the same
String[]
parsing logic as other commands, which got me curious if others didn't work either. So I tried a more mundane one like
janusgraph.index.some_index_name_here.hostname=elasticsearch,elasticsearch


And it too doesn't seem to get parsed correctly:

janusgraph | Caused by: java.net.UnknownHostException: elasticsearch,elasticsearch
janusgraph | at java.base/java.net.InetAddress$CachedAddresses.get(Unknown Source) ~[?:?]
....
janusgraph | at org.elasticsearch.client.RestClient.performRequest(RestClient.java:288) ~[elasticsearch-rest-client-8.10.4.jar:8.10.4]
janusgraph | at org.janusgraph.diskstorage.es.rest.RestElasticSearchClient.clusterHealthRequest(RestElasticSearchClient.java:171) ~[janusgraph-es-1.1.0-20240427-134121.4bddfb4.jar:?]

So just wondered is there a special syntax that's intended here?
Solution
Okay, after quite a journey of vetting the parsing behavior from environment variable into property files, into the various Confirmation implementations into ConfigOptions, etc etc I've found where this has gone sideways....and like the worst of these types of situations looks like this one was self inflicted ๐Ÿคฆโ€โ™‚๏ธ .

A long long long time ago when I was starting on working with JanusGraph I was tired of JanusGraph deployments that silently failed and leaving my container up but dead inside the container, for reasons that weren't its fault (started up before Cassandra was ready timing out its storage wait time, etc).

Trying to find solutions for that I stumbled upon the Tinkerpop CheckGraphManager (https://github.com/apache/tinkerpop/blob/master/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/CheckedGraphManager.java) that would automatically terminate the process if the specified graphs did not successfully open.

So I switched to that graph manager like so:
ENV gremlinserver.graphManager=org.apache.tinkerpop.gremlin.server.util.CheckedGraphManager


But this has the unintended consequence of removing the configuration parsing handling that is afforded by
JanusGraphManager
(https://github.com/JanusGraph/janusgraph/blob/487e10ca276678862fd8fb369d6d17188703ba67/janusgraph-core/src/main/java/org/janusgraph/graphdb/management/JanusGraphManager.java#L73), like handling String arrays config options ๐Ÿคฆโ€โ™‚๏ธ .

Would there be appetite for like a
CheckJanusGraphManager
that would extend
JanusGraphManager
and overlay a duplication of logic that the Tinkerpop CheckGraphManager performs? I could attempt to put that up. It's been handled in my k8s environment so the container doesn't just hang around as a faster version of waiting for probes to fail.
GitHub
Apache TinkerPop - a graph computing framework. Contribute to apache/tinkerpop development by creating an account on GitHub.
tinkerpop/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin...
GitHub
JanusGraph: an open-source, distributed graph database - JanusGraph/janusgraph
janusgraph/janusgraph-core/src/main/java/org/janusgraph/graphdb/man...
Was this page helpful?