How to execute gremlin query with mogwai

2019-09-04 18:49发布

问题:

Im trying to query a titan db 0.5.4 via mogwai, but when I run the following script i get the error: rexpro.exceptions.RexProScriptException: transaction is not open

and I found the same question here

P.S there is no tag for mogwai

script:

#!/usr/bin/env python3
from mogwai.connection import execute_query, setup


con = setup('127.0.0.1', graph_name="bio4j", username="re", password="re")

results = execute_query("2 * a",params={"a":2}, connection= con)
print(results)


results = execute_query("bio4j.E",params={}, connection= con)
print(results)

log:

$ ./bin/rexster.sh --start
0    [main] INFO  com.tinkerpop.rexster.Application  - .:Welcome to Rexster:.
93   [main] INFO  com.tinkerpop.rexster.server.RexsterProperties  - Using [/Users/Phoenix/Dropbox/Graph4Bio/Titan/rexhome/config/rexster.xml] as configuration source.
102  [main] INFO  com.tinkerpop.rexster.Application  - Rexster is watching [/Users/Phoenix/Dropbox/Graph4Bio/Titan/rexhome/config/rexster.xml] for change.
730  [main] INFO  com.thinkaurelius.titan.graphdb.configuration.GraphDatabaseConfiguration  - Generated unique-instance-id=0a69045d1736-AngryMac-local1
804  [main] INFO  com.thinkaurelius.titan.diskstorage.Backend  - Initiated backend operations thread pool of size 8
905  [main] INFO  com.thinkaurelius.titan.diskstorage.log.kcvs.KCVSLog  - Loaded unidentified ReadMarker start time Timepoint[1455128079919000 μs] into com.thinkaurelius.titan.diskstorage.log.kcvs.KCVSLog$MessagePuller@302c971f
908  [main] INFO  com.tinkerpop.rexster.RexsterApplicationGraph  - Graph [bio4j] - configured with allowable namespace [tp:gremlin]
932  [main] INFO  com.tinkerpop.rexster.config.GraphConfigurationContainer  - Graph bio4j - titangraph[berkeleyje:/Users/Phoenix/Dropbox/Graph4Bio/Bio4j/bio4j] loaded
939  [main] INFO  com.tinkerpop.rexster.server.metrics.HttpReporterConfig  - Configured HTTP Metric Reporter.
941  [main] INFO  com.tinkerpop.rexster.server.metrics.ConsoleReporterConfig  - Configured Console Metric Reporter.
2058 [main] INFO  com.tinkerpop.rexster.server.HttpRexsterServer  - HTTP/REST thread pool configuration: kernal[4 / 4] worker[8 / 8] 
2060 [main] INFO  com.tinkerpop.rexster.server.HttpRexsterServer  - Using org.glassfish.grizzly.strategies.LeaderFollowerNIOStrategy IOStrategy for HTTP/REST.
2160 [main] INFO  com.tinkerpop.rexster.server.HttpRexsterServer  - Rexster Server running on: [http://localhost:8182]
2160 [main] INFO  com.tinkerpop.rexster.server.RexProRexsterServer  - Using org.glassfish.grizzly.strategies.LeaderFollowerNIOStrategy IOStrategy for RexPro.
2160 [main] INFO  com.tinkerpop.rexster.server.RexProRexsterServer  - RexPro thread pool configuration: kernal[4 / 4] worker[8 / 8] 
2162 [main] INFO  com.tinkerpop.rexster.server.RexProRexsterServer  - Rexster configured with [DefaultSecurity].
2163 [main] INFO  com.tinkerpop.rexster.server.RexProRexsterServer  - RexPro Server bound to [0.0.0.0:8184]
2177 [main] INFO  com.tinkerpop.rexster.server.ShutdownManager  - Bound shutdown socket to /127.0.0.1:8183. Starting listener thread for shutdown requests.
152568 [Grizzly(2) SelectorRunner] INFO  com.tinkerpop.rexster.protocol.EngineController  - ScriptEngineManager has factory for: ECMAScript
152568 [Grizzly(2) SelectorRunner] INFO  com.tinkerpop.rexster.protocol.EngineController  - ScriptEngineManager has factory for: gremlin-groovy
152568 [Grizzly(2) SelectorRunner] INFO  com.tinkerpop.rexster.protocol.EngineController  - Registered ScriptEngine for: gremlin-groovy
152569 [Grizzly(2) SelectorRunner] INFO  com.tinkerpop.rexster.protocol.EngineHolder  - Initializing gremlin-groovy engine with additional imports.
153259 [Grizzly(2) SelectorRunner] INFO  com.tinkerpop.rexster.protocol.EngineHolder  - ScriptEngine initializing with a custom script
154074 [Grizzly(2) SelectorRunner] INFO  com.tinkerpop.rexster.protocol.EngineController  - ScriptEngineManager has factory for: Groovy
154076 [Grizzly(2) SelectorRunner] INFO  com.tinkerpop.rexster.protocol.session.RexProSessions  - RexPro Session created: a2b416ce-75ea-4ecb-9835-b287162c90cb
154354 [Grizzly(4)] INFO  com.tinkerpop.rexster.protocol.session.RexProSessions  - Try to destroy RexPro Session: a2b416ce-75ea-4ecb-9835-b287162c90cb
154355 [Grizzly(4)] INFO  com.tinkerpop.rexster.protocol.session.RexProSessions  - RexPro Session destroyed or doesn't otherwise exist: a2b416ce-75ea-4ecb-9835-b287162c90cb
154356 [Grizzly(5)] INFO  com.tinkerpop.rexster.protocol.session.RexProSessions  - RexPro Session created: 5b8a669f-615d-4f84-9d1e-2d10624347f0
154525 [Grizzly(7)] WARN  com.tinkerpop.rexster.protocol.server.ScriptServer  - Could not process script [bio4j.E] for language [groovy] on session [[B@6634722f] and request [[B@68f38099]
154527 [Grizzly(8)] INFO  com.tinkerpop.rexster.protocol.session.RexProSessions  - Try to destroy RexPro Session: 5b8a669f-615d-4f84-9d1e-2d10624347f0
154527 [Grizzly(8)] INFO  com.tinkerpop.rexster.protocol.session.RexProSessions  - RexPro Session destroyed or doesn't otherwise exist: 5b8a669f-615d-4f84-9d1e-2d10624347f0
154529 [Grizzly(1)] INFO  com.tinkerpop.rexster.protocol.session.RexProSessions  - Try to destroy RexPro Session: 00000000-0000-0000-0000-000000000000
154529 [Grizzly(1)] INFO  com.tinkerpop.rexster.protocol.session.RexProSessions  - RexPro Session destroyed or doesn't otherwise exist: 00000000-0000-0000-0000-000000000000

回答1:

Maintainer of mogwai here.

What version of mogwai are you using? in 0.7.7 there is no return value for setup method and the connection object should not be passed around. In fact when you call setup it creates a connection pool (a synchronous rexpro connection pool since there was no concurrency option specified). So in general, just call setup once for the life of your app and you can use execute query without any references.

Also this message in particular stands out:

154525 [Grizzly(7)] WARN  com.tinkerpop.rexster.protocol.server.ScriptServer  - Could not process script [bio4j.E] for language [groovy] on session [[B@6634722f] and request [[B@68f38099]

Is your graph configured with a graph name of "bio4j"? The default titan graph name is "graph" and the default graph object name mogwai uses is "g". If you have a graph name of "bio4j" you wouldn't reference this directly, you'd use the graph object name associated to the transaction. You can think of a graph-name as a database name in a SQL database, and the graph object being the transactional reference to said database. This is configured in the xml configuration file when starting titan. Particularly:

<graphs>
    <graph>
        <graph-name>graph</graph-name>
        ....
    </graph>
</graphs>

So assuming you changed that from "graph" to "bio4j" and left the default graph_obj_name in the setup function as "g", then your query should read "g.E".