Class SessionOpProcessor
- java.lang.Object
-
- org.apache.tinkerpop.gremlin.server.op.AbstractOpProcessor
-
- org.apache.tinkerpop.gremlin.server.op.AbstractEvalOpProcessor
-
- org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor
-
- All Implemented Interfaces:
AutoCloseable
,OpProcessor
public class SessionOpProcessor extends AbstractEvalOpProcessor
SimpleOpProcessor
implementation that handlesScriptEngine
script evaluation in the context of a session. Note that this processor will also take a "close" op to kill the session and rollback any incomplete transactions.- Author:
- Stephen Mallette (http://stephen.genoprime.com)
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.apache.tinkerpop.gremlin.server.op.AbstractEvalOpProcessor
AbstractEvalOpProcessor.BindingSupplier
-
-
Field Summary
Fields Modifier and Type Field Description static String
CONFIG_GLOBAL_FUNCTION_CACHE_ENABLED
Configuration setting that behaves as an override to the global script engine setting of the same name that is provided to theGroovyCompilerGremlinPlugin
.static String
CONFIG_PER_GRAPH_CLOSE_TIMEOUT
Configuration setting for how long to wait in milliseconds for each configured graph to close any open transactions when the session is killed.static String
CONFIG_SESSION_TIMEOUT
Configuration setting for how long a session will be available before it times out.static long
DEFAULT_PER_GRAPH_CLOSE_TIMEOUT
Default amount of time to wait in milliseconds for each configured graph to close any open transactions when the session is killed.static long
DEFAULT_SESSION_TIMEOUT
Default timeout for a session is eight hours.static String
OP_PROCESSOR_NAME
protected static ConcurrentHashMap<String,Session>
sessions
Script engines are evaluated in a per session context where imports/scripts are isolated per session.-
Fields inherited from class org.apache.tinkerpop.gremlin.server.op.AbstractEvalOpProcessor
CONFIG_MAX_PARAMETERS, DEFAULT_MAX_PARAMETERS, evalOpTimer, INVALID_BINDINGS_KEYS, maxParameters
-
Fields inherited from class org.apache.tinkerpop.gremlin.server.op.AbstractOpProcessor
manageTransactions
-
-
Constructor Summary
Constructors Constructor Description SessionOpProcessor()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
beforeProcessing(Graph graph, Context ctx)
void
close()
protected void
evalOp(Context context)
protected Function<Context,AbstractEvalOpProcessor.BindingSupplier>
getBindingMaker(Session session)
A useful method for those extending this class, where the means for binding construction can be supplied to this class.ThrowingConsumer<Context>
getEvalOp()
Provides an operation for evaluating a Gremlin script.String
getName()
The name of the processor which requests must refer to "processor" field on a request.protected static Session
getSession(Context context, RequestMessage msg)
Examines theRequestMessage
and extracts the session token.protected void
handleGraphOperation(Bytecode bytecode, Graph graph, Context context)
IfBytecode
is detected to contain a "graph operation" then it gets processed by this method.protected void
handleIterator(Context context, Iterator itty, Graph graph)
void
init(Settings settings)
Initialize theOpProcessor
with settings from the server.protected void
onError(Graph graph, Context ctx)
protected void
onTraversalSuccess(Graph graph, Context ctx)
Optional<ThrowingConsumer<Context>>
selectOther(Context ctx)
Older versions of session-based requests accepted a "close" operator in addition to "eval".protected Optional<ThrowingConsumer<Context>>
validateEvalMessage(RequestMessage message)
-
Methods inherited from class org.apache.tinkerpop.gremlin.server.op.AbstractEvalOpProcessor
evalOpInternal, select
-
Methods inherited from class org.apache.tinkerpop.gremlin.server.op.AbstractOpProcessor
attemptCommit, attemptRollback, determineIfTemporaryException, generateResultMetaData, generateStatusAttributes, handleIterator, isForceFlushed, iterateComplete, makeFrame
-
-
-
-
Field Detail
-
OP_PROCESSOR_NAME
public static final String OP_PROCESSOR_NAME
- See Also:
- Constant Field Values
-
sessions
protected static ConcurrentHashMap<String,Session> sessions
Script engines are evaluated in a per session context where imports/scripts are isolated per session.
-
CONFIG_SESSION_TIMEOUT
public static final String CONFIG_SESSION_TIMEOUT
Configuration setting for how long a session will be available before it times out.- See Also:
- Constant Field Values
-
CONFIG_PER_GRAPH_CLOSE_TIMEOUT
public static final String CONFIG_PER_GRAPH_CLOSE_TIMEOUT
Configuration setting for how long to wait in milliseconds for each configured graph to close any open transactions when the session is killed.- See Also:
- Constant Field Values
-
CONFIG_GLOBAL_FUNCTION_CACHE_ENABLED
public static final String CONFIG_GLOBAL_FUNCTION_CACHE_ENABLED
Configuration setting that behaves as an override to the global script engine setting of the same name that is provided to theGroovyCompilerGremlinPlugin
.- See Also:
- Constant Field Values
-
DEFAULT_SESSION_TIMEOUT
public static final long DEFAULT_SESSION_TIMEOUT
Default timeout for a session is eight hours.- See Also:
- Constant Field Values
-
DEFAULT_PER_GRAPH_CLOSE_TIMEOUT
public static final long DEFAULT_PER_GRAPH_CLOSE_TIMEOUT
Default amount of time to wait in milliseconds for each configured graph to close any open transactions when the session is killed.- See Also:
- Constant Field Values
-
-
Method Detail
-
getName
public String getName()
Description copied from interface:OpProcessor
The name of the processor which requests must refer to "processor" field on a request.
-
init
public void init(Settings settings)
Description copied from interface:OpProcessor
Initialize theOpProcessor
with settings from the server. This method should only be called once at server startup by a single thread.
-
selectOther
public Optional<ThrowingConsumer<Context>> selectOther(Context ctx) throws OpProcessorException
Older versions of session-based requests accepted a "close" operator in addition to "eval". This feature effectively acts as a do-nothing for 3.5.0 to allow older versions of the drivers to connect. At some point this may be removed completely. Note that closing the channel kills the session now.- Specified by:
selectOther
in classAbstractEvalOpProcessor
- Returns:
- Throws:
OpProcessorException
-
getEvalOp
public ThrowingConsumer<Context> getEvalOp()
Description copied from class:AbstractEvalOpProcessor
Provides an operation for evaluating a Gremlin script.- Specified by:
getEvalOp
in classAbstractEvalOpProcessor
- Returns:
-
validateEvalMessage
protected Optional<ThrowingConsumer<Context>> validateEvalMessage(RequestMessage message) throws OpProcessorException
- Overrides:
validateEvalMessage
in classAbstractEvalOpProcessor
- Throws:
OpProcessorException
-
evalOp
protected void evalOp(Context context) throws OpProcessorException
- Throws:
OpProcessorException
-
getSession
protected static Session getSession(Context context, RequestMessage msg)
Examines theRequestMessage
and extracts the session token. The session is then either found or a new one is created.
-
getBindingMaker
protected Function<Context,AbstractEvalOpProcessor.BindingSupplier> getBindingMaker(Session session)
A useful method for those extending this class, where the means for binding construction can be supplied to this class. This function is used inevalOp(Context)
to create the final argument toAbstractEvalOpProcessor.evalOpInternal(Context, Supplier, BindingSupplier)
. In this way an extending class can use the defaultAbstractEvalOpProcessor.BindingSupplier
which carries a lot of re-usable functionality or provide a new one to override the existing approach.
-
handleGraphOperation
protected void handleGraphOperation(Bytecode bytecode, Graph graph, Context context)
IfBytecode
is detected to contain a "graph operation" then it gets processed by this method.
-
handleIterator
protected void handleIterator(Context context, Iterator itty, Graph graph) throws InterruptedException
- Throws:
InterruptedException
-
-