[
https://issues.apache.org/jira/browse/TINKERPOP-2767?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17691847#comment-17691847
]
ASF GitHub Bot commented on TINKERPOP-2767:
-------------------------------------------
Cole-Greer opened a new pull request, #1976:
URL: https://github.com/apache/tinkerpop/pull/1976
Cherry picking previously approved changed to 3.6-dev to resolve conflicts.
Fixes TINKERPOP-2767.
The existing error handling in TraversalOpProcessor and SessionOpProcessor
during bytecode iteration was catching all exceptions sending an appropriate
error response to the client. The OpProcessor however was not catching a
StackOverflowError which could be induced by running a query which contains a
large repeat step. This Error was being caught by FutureTask.run() but
GremlinServer never wait's on this task or checks the results which caused this
Error to be lost. A similar issue was found to exist in
AbstractSession.process().
This commit adjusts the existing error handling code to catch any Throwable
during bytecode iteration so clients will receive error messages and codes for
server errors as well as exceptions. Any errors are re-thrown such that the
evalFuture FutureTask will continue to have an exception set correctly
(although GremlinServer currently does not use this for anything).
> Repeat Out Times traversal hangs indefinitely on first execution
> ----------------------------------------------------------------
>
> Key: TINKERPOP-2767
> URL: https://issues.apache.org/jira/browse/TINKERPOP-2767
> Project: TinkerPop
> Issue Type: Bug
> Components: server
> Affects Versions: 3.5.3
> Environment: Windows 10
> Reporter: Simon Zhao
> Priority: Major
> Fix For: 3.5.6
>
>
> Originally encountered when fixing TINKERPOP-2754
>
> The following traversal in JS seems to cause hanging the first time you run
> it on a newly launched gremlin-server (3.5.3) via docker
>
> {{await g.V('1').repeat(_.out()).times(1500).next();}}
>
> The same hanging occurs in gremlin-go.
>
> {code:java}
> _, err = g.With("evaluationTimeout",
> 1000).V("1").Repeat(gremlingo.T__.Out()).Times(int32(1500)).Next() {code}
>
> The timeout is optional, but indicates that something is going wrong since it
> is not returning. Interestingly enough, if the timeout is very low, then it
> won't hang because it will say the timeout was exceeded. This indicates that
> if the traversal is completed within the timeout, it's just not returning for
> some reason on the first call.
>
> If you were to write a script and invoke this snippet of code, it will hang.
> If you forcefully terminate the script and rerun it, then it doesn't hang.
>
> main.go
> {code:java}
> package main
> import (
> gremlingo "github.com/apache/tinkerpop/gremlin-go/v3/driver"
> "log"
> )
> func main() {
> driver, err :=
> gremlingo.NewDriverRemoteConnection("ws://localhost:45940/gremlin")
> if err != nil {
> log.Print("Err creating DRC")
> return
> }
> defer driver.Close()
> log.Println("Start")
> g := gremlingo.Traversal_().WithRemote(driver)
> LABEL := "test"
> _, err = g.V().HasLabel(LABEL).Drop().Next()
> _, err = g.AddV(LABEL).Property(gremlingo.T.Id, "1").Next()
> _, err = g.AddV(LABEL).Property(gremlingo.T.Id, "2").Next()
> _, err =
> g.AddE(LABEL).From(gremlingo.T__.V("1")).To(gremlingo.T__.V("2")).Property(gremlingo.T.Id,
> "e1").Next()
> _, err =
> g.AddE(LABEL).From(gremlingo.T__.V("2")).To(gremlingo.T__.V("1")).Property(gremlingo.T.Id,
> "e2").Next()
> if err != nil {
> log.Println("Error during setup")
> return
> }
> log.Println("Start the problematic traversal")
> _, err = g.With("evaluationTimeout",
> 1000).V("1").Repeat(gremlingo.T__.Out()).Times(int32(1500)).Next()
> if err != nil {
> log.Println("Error with the problematic traversal, but we didn't hang")
> return
> }
> log.Println("End")
> } {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)