Valentyn Kahamlyk created TINKERPOP-3076:
--------------------------------------------

             Summary: Incorrect handling of large requests in Go GLV
                 Key: TINKERPOP-3076
                 URL: https://issues.apache.org/jira/browse/TINKERPOP-3076
             Project: TinkerPop
          Issue Type: Improvement
          Components: go
    Affects Versions: 3.7.2, 3.6.7
            Reporter: Valentyn Kahamlyk


When trying to send a request longer than about a megabyte, go GLV does not 
work correctly, possibly truncates data.

Simple reproducer 
{code:go}
func main() {
    driverRemoteConnection, err := 
gremlingo.NewDriverRemoteConnection("ws://localhost:8182/gremlin")
    if err != nil {
       fmt.Println(err)
       return
    }
    defer driverRemoteConnection.Close()
    g := gremlingo.Traversal_().WithRemote(driverRemoteConnection)

    const count = 1100
    var ids [count]string
    const idLength = 1000

    result := make([]byte, idLength)
    for i := 0; i < idLength; i++ {
       result[i] = 65
    }
    id := string(result)

    for i := 0; i < count; i++ {
       ids[i] = id
    }

    r, err := g.V(ids).Count().ToList()
    if err != nil {
       fmt.Println("err: ", err)
       return
    }
    fmt.Println("found: ", r[0].GetString()) 
}{code}
with `count = 1000` it works as expected.

Python GLV works as expected with same request.

Error logged in Gremlin Server 
{code:java}
io.netty.handler.codec.DecoderException: java.lang.IndexOutOfBoundsException: 
readerIndex(1048338) + length(1000) exceeds writerIndex(1048543): 
PooledUnsafeDirectByteBuf(ridx: 1048338, widx: 1048543, cap: 1048576){code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to