Martin Häusler created TINKERPOP-2903: -----------------------------------------
Summary: Option to include detectable Traversal Timeout Key: TINKERPOP-2903 URL: https://issues.apache.org/jira/browse/TINKERPOP-2903 Project: TinkerPop Issue Type: New Feature Components: language Reporter: Martin Häusler At the moment, it is possible to achieve a timeout with the {{timeLimit}} step. This step will cause further elements to not be reported by the result iterator once the time limit has been reached. That's good and should stay that way, but I've got a different use case in mind. What I would like to accomplish is a deadline for the traversal, and if the deadline is reached, a dedicated exception (e.g. a subclass of {{{}TraversalInterruptedException{}}}) should be thrown, indicating that the query has timed out. This allows the caller to detect that the timeout has been reached and no valid complete result is to be expected from the traversal. To the best of my knowledge (please correct me if I'm wrong) there is currently no clean way to accomplish this in gremlin 3.6.x. One possibility I could envision is: {{graph.traversal().withDeadline(someUnixEpochTimestamp).V()...}} This should affect all traversers. If it doesn't impact performance too much, the deadline should be checked after every step. Should that prove to be too expensive, checking the timeout after every n-th step would also be an option. Another way to implement this would be by using the JDK-builtin timers, letting a timer run and setting a "timeout" boolean in the traversal context to true which is then checked by the traversers after every step (the cost to be paid is of course the construction of the scheduler thread, which should be reused). In theory, this could also be achieved on the database transaction level, such that the next access to the transaction would cause the timeout. However, if a gremlin query is busy processing elements it has already loaded (e.g. in a misconfigured {{repeat()}} which is running in cycles), doing the timeout on the transaction level will have no effect. Some vendors implement this for remote communication in vendor-specific extensions (e.g. AWS Neptune has the "evaluationTimeout"), but I think that this feature can (and should) be standardized. -- This message was sent by Atlassian Jira (v8.20.10#820010)