[ https://issues.apache.org/jira/browse/TINKERPOP-2845?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17700389#comment-17700389 ]
Kemal Hadimli commented on TINKERPOP-2845: ------------------------------------------ The logging/i18n issue was something else and was fixed in TINKERPOP-2905 > Race conditions in Go GLV > ------------------------- > > Key: TINKERPOP-2845 > URL: https://issues.apache.org/jira/browse/TINKERPOP-2845 > Project: TinkerPop > Issue Type: Bug > Components: go > Affects Versions: 3.7.0 > Reporter: Cole Greer > Priority: Major > > While working on writing tests for the Go GLV using > [gremlin-socket-server|https://issues.apache.org/jira/browse/TINKERPOP-2819], > 2 possible race conditions were detected by go test -race. The provided test > code I will include is relying on configuration and docker setup which has > not yet been merged to tinkerpop and is being included for reference only. I > will update this ticket once the relevant supporting code is included in > Tinkerpop and these tests can be run. > > Race condition 1: > {code:java} > func TestClientAgainstSocketServer(t *testing.T) { > // Integration test variables. > testNoAuthEnable := getEnvOrDefaultBool("RUN_INTEGRATION_TESTS", true) > settings := > FromYaml(getEnvOrDefaultString("GREMLIN_SOCKET_SERVER_CONFIG_PATH", > "../../gremlin-tools/gremlin-socket-server/conf/test-ws-gremlin.yaml")) > testSocketServerUrl := getEnvOrDefaultString("GREMLIN_SOCKET_SERVER_URL", > "ws://localhost") > testSocketServerUrl = fmt.Sprintf("%s:%v/gremlin", testSocketServerUrl, > settings.PORT) > t.Run("Should try create new connection if closed by server", func(t > *testing.T) { > skipTestsIfNotEnabled(t, integrationTestSuiteName, testNoAuthEnable) > client, _ := NewClient(testSocketServerUrl) > //The server will immediately close the connection upon receiving this > request creating a 1005 error > resultSet, _ := client.Submit("1", map[string]interface{}{"requestId": > settings.CLOSE_CONNECTION_REQUEST_ID}) > resultSet.One() > client.Close() > }) > } {code} > {code:java} > === RUN TestClientAgainstSocketServer === CONT > TestClientAgainstSocketServer testing.go:1319: race detected during > execution of test --- FAIL: TestClientAgainstSocketServer (1.04s) === RUN > TestClientAgainstSocketServer/Should_try_create_new_connection_if_closed_by_server > 2022/12/16 10:43:37 Connecting. 2022/12/16 10:43:38 Read loop error > 'websocket: close 1005 (no status)', closing read loop. 2022/12/16 10:43:38 > Read loop error 'websocket: close 1005 (no status)', closing read loop. > ================== WARNING: DATA RACE Write at 0x00c000358040 by goroutine > 15: > github.com/apache/tinkerpop/gremlin-go/v3/driver.(*channelResultSet).setError() > /Users/coleg/tinkerpop/gremlin-go/driver/resultSet.go:79 +0x80 > github.com/apache/tinkerpop/gremlin-go/v3/driver.(*synchronizedMap).closeAll() > /Users/coleg/tinkerpop/gremlin-go/driver/connection.go:154 +0xfc > github.com/apache/tinkerpop/gremlin-go/v3/driver.readErrorHandler() > /Users/coleg/tinkerpop/gremlin-go/driver/protocol.go:93 +0xd8 > github.com/apache/tinkerpop/gremlin-go/v3/driver.(*gremlinServerWSProtocol).readLoop() > /Users/coleg/tinkerpop/gremlin-go/driver/protocol.go:70 +0x448 > github.com/apache/tinkerpop/gremlin-go/v3/driver.newGremlinServerWSProtocol.func1() > /Users/coleg/tinkerpop/gremlin-go/driver/protocol.go:200 +0x4cPrevious > read at 0x00c000358040 by goroutine 8: > github.com/apache/tinkerpop/gremlin-go/v3/driver.(*channelResultSet).One() > /Users/coleg/tinkerpop/gremlin-go/driver/resultSet.go:171 +0x34 > github.com/apache/tinkerpop/gremlin-go/v3/driver.TestClientAgainstSocketServer.func1() > /Users/coleg/tinkerpop/gremlin-go/driver/client_test.go:122 +0x1a4 > testing.tRunner() > /opt/homebrew/Cellar/go/1.19.1/libexec/src/testing/testing.go:1446 +0x188 > testing.(*T).Run.func1() > /opt/homebrew/Cellar/go/1.19.1/libexec/src/testing/testing.go:1493 > +0x40Goroutine 15 (running) created at: > github.com/apache/tinkerpop/gremlin-go/v3/driver.newGremlinServerWSProtocol() > /Users/coleg/tinkerpop/gremlin-go/driver/protocol.go:200 +0x398 > github.com/apache/tinkerpop/gremlin-go/v3/driver.createConnection() > /Users/coleg/tinkerpop/gremlin-go/driver/connection.go:110 +0x204 > github.com/apache/tinkerpop/gremlin-go/v3/driver.newLoadBalancingPool.func1() > /Users/coleg/tinkerpop/gremlin-go/driver/connectionPool.go:150 > +0xa8Goroutine 8 (running) created at: testing.(*T).Run() > /opt/homebrew/Cellar/go/1.19.1/libexec/src/testing/testing.go:1493 +0x55c > github.com/apache/tinkerpop/gremlin-go/v3/driver.TestClientAgainstSocketServer() > /Users/coleg/tinkerpop/gremlin-go/driver/client_test.go:115 +0x1cc > testing.tRunner() > /opt/homebrew/Cellar/go/1.19.1/libexec/src/testing/testing.go:1446 +0x188 > testing.(*T).Run.func1() > /opt/homebrew/Cellar/go/1.19.1/libexec/src/testing/testing.go:1493 +0x40 > ================== 2022/12/16 10:43:38 Connection error callback invoked, > closing protocol. 2022/12/16 10:43:38 Closing Client with url > 'ws://localhost:45943/gremlin' ================== WARNING: DATA RACE Read at > 0x00c00027dc10 by goroutine 8: > github.com/apache/tinkerpop/gremlin-go/v3/driver.(*connection).close() > /Users/coleg/tinkerpop/gremlin-go/driver/connection.go:68 +0x34 > github.com/apache/tinkerpop/gremlin-go/v3/driver.(*loadBalancingPool).close() > /Users/coleg/tinkerpop/gremlin-go/driver/connectionPool.go:57 +0x10c > github.com/apache/tinkerpop/gremlin-go/v3/driver.(*Client).Close() > /Users/coleg/tinkerpop/gremlin-go/driver/client.go:147 +0x2d0 > github.com/apache/tinkerpop/gremlin-go/v3/driver.TestClientAgainstSocketServer.func1() > /Users/coleg/tinkerpop/gremlin-go/driver/client_test.go:124 +0x1ac > testing.tRunner() > /opt/homebrew/Cellar/go/1.19.1/libexec/src/testing/testing.go:1446 +0x188 > testing.(*T).Run.func1() > /opt/homebrew/Cellar/go/1.19.1/libexec/src/testing/testing.go:1493 > +0x40Previous write at 0x00c00027dc10 by goroutine 15: > github.com/apache/tinkerpop/gremlin-go/v3/driver.(*connection).errorCallback() > /Users/coleg/tinkerpop/gremlin-go/driver/connection.go:58 +0x60 > github.com/apache/tinkerpop/gremlin-go/v3/driver.(*connection).errorCallback-fm() > <autogenerated>:1 +0x34 > github.com/apache/tinkerpop/gremlin-go/v3/driver.readErrorHandler() > /Users/coleg/tinkerpop/gremlin-go/driver/protocol.go:94 +0xe4 > github.com/apache/tinkerpop/gremlin-go/v3/driver.(*gremlinServerWSProtocol).readLoop() > /Users/coleg/tinkerpop/gremlin-go/driver/protocol.go:70 +0x448 > github.com/apache/tinkerpop/gremlin-go/v3/driver.newGremlinServerWSProtocol.func1() > /Users/coleg/tinkerpop/gremlin-go/driver/protocol.go:200 > +0x4cGoroutine 8 (running) created at: testing.(*T).Run() > /opt/homebrew/Cellar/go/1.19.1/libexec/src/testing/testing.go:1493 +0x55c > github.com/apache/tinkerpop/gremlin-go/v3/driver.TestClientAgainstSocketServer() > /Users/coleg/tinkerpop/gremlin-go/driver/client_test.go:115 +0x1cc > testing.tRunner() > /opt/homebrew/Cellar/go/1.19.1/libexec/src/testing/testing.go:1446 +0x188 > testing.(*T).Run.func1() > /opt/homebrew/Cellar/go/1.19.1/libexec/src/testing/testing.go:1493 > +0x40Goroutine 15 (finished) created at: > github.com/apache/tinkerpop/gremlin-go/v3/driver.newGremlinServerWSProtocol() > /Users/coleg/tinkerpop/gremlin-go/driver/protocol.go:200 +0x398 > github.com/apache/tinkerpop/gremlin-go/v3/driver.createConnection() > /Users/coleg/tinkerpop/gremlin-go/driver/connection.go:110 +0x204 > github.com/apache/tinkerpop/gremlin-go/v3/driver.newLoadBalancingPool.func1() > /Users/coleg/tinkerpop/gremlin-go/driver/connectionPool.go:150 +0xa8 > ================== 2022/12/16 10:43:38 Ignoring error closing connection: > E0101: cannot close connection that has already been closed or has not been > connected testing.go:1319: race detected during execution of test --- > FAIL: > TestClientAgainstSocketServer/Should_try_create_new_connection_if_closed_by_server > (1.03s) === CONT testing.go:1319: race detected during execution of > test FAILProcess finished with the exit code 1 > {code} > Race condition 2: > {code:java} > func TestClientAgainstSocketServer(t *testing.T) { > // Integration test variables. > testNoAuthEnable := getEnvOrDefaultBool("RUN_INTEGRATION_TESTS", true) > settings := > FromYaml(getEnvOrDefaultString("GREMLIN_SOCKET_SERVER_CONFIG_PATH", > "../../gremlin-tools/gremlin-socket-server/conf/test-ws-gremlin.yaml")) > testSocketServerUrl := getEnvOrDefaultString("GREMLIN_SOCKET_SERVER_URL", > "ws://localhost") > testSocketServerUrl = fmt.Sprintf("%s:%v/gremlin", testSocketServerUrl, > settings.PORT) > t.Run("Should try create new connection if closed by server", func(t > *testing.T) { > skipTestsIfNotEnabled(t, integrationTestSuiteName, testNoAuthEnable) > client, _ := NewClient(testSocketServerUrl) > > //The server will immediately close the connection upon receiving this > request creating a 1005 error > resultSet, _ := client.Submit("1", map[string]interface{}{"requestId": > settings.CLOSE_CONNECTION_REQUEST_ID}) > //Synchronization added to avoid race condition #1 > time.Sleep(5 * time.Second) > chResultSet := resultSet.(*channelResultSet) > chResultSet.channelMutex.Lock() > resultSet.One() > chResultSet.channelMutex.Unlock() > resultSet, _ = client.Submit("1", map[string]interface{}{"requestId": > settings.SINGLE_VERTEX_REQUEST_ID}) > resultSet.One() > client.Close() > }) > }{code} > {code:java} > === RUN TestClientAgainstSocketServer > === CONT TestClientAgainstSocketServer > testing.go:1319: race detected during execution of test > --- FAIL: TestClientAgainstSocketServer (5.10s) > === RUN > TestClientAgainstSocketServer/Should_try_create_new_connection_if_closed_by_server > 2022/12/16 10:36:03 Connecting. > 2022/12/16 10:36:04 Read loop error 'websocket: close 1005 (no status)', > closing read loop. > 2022/12/16 10:36:04 Read loop error 'websocket: close 1005 (no status)', > closing read loop. > 2022/12/16 10:36:04 Connection error callback invoked, closing protocol. > ================== > WARNING: DATA RACE > Read at 0x00c0002fdc10 by goroutine 8: > > github.com/apache/tinkerpop/gremlin-go/v3/driver.(*loadBalancingPool).getLeastUsedConnection() > /Users/coleg/tinkerpop/gremlin-go/driver/connectionPool.go:102 +0x154 > > github.com/apache/tinkerpop/gremlin-go/v3/driver.(*loadBalancingPool).write() > /Users/coleg/tinkerpop/gremlin-go/driver/connectionPool.go:74 +0x90 > github.com/apache/tinkerpop/gremlin-go/v3/driver.(*Client).Submit() > /Users/coleg/tinkerpop/gremlin-go/driver/client.go:154 +0x1d4 > > github.com/apache/tinkerpop/gremlin-go/v3/driver.TestClientAgainstSocketServer.func1() > /Users/coleg/tinkerpop/gremlin-go/driver/client_test.go:129 +0x29c > testing.tRunner() > /opt/homebrew/Cellar/go/1.19.1/libexec/src/testing/testing.go:1446 > +0x188 > testing.(*T).Run.func1() > /opt/homebrew/Cellar/go/1.19.1/libexec/src/testing/testing.go:1493 > +0x40Previous write at 0x00c0002fdc10 by goroutine 15: > > github.com/apache/tinkerpop/gremlin-go/v3/driver.(*connection).errorCallback() > /Users/coleg/tinkerpop/gremlin-go/driver/connection.go:58 +0x60 > > github.com/apache/tinkerpop/gremlin-go/v3/driver.(*connection).errorCallback-fm() > <autogenerated>:1 +0x34 > github.com/apache/tinkerpop/gremlin-go/v3/driver.readErrorHandler() > /Users/coleg/tinkerpop/gremlin-go/driver/protocol.go:94 +0xe4 > > github.com/apache/tinkerpop/gremlin-go/v3/driver.(*gremlinServerWSProtocol).readLoop() > /Users/coleg/tinkerpop/gremlin-go/driver/protocol.go:70 +0x448 > > github.com/apache/tinkerpop/gremlin-go/v3/driver.newGremlinServerWSProtocol.func1() > /Users/coleg/tinkerpop/gremlin-go/driver/protocol.go:200 +0x4cGoroutine > 8 (running) created at: > testing.(*T).Run() > /opt/homebrew/Cellar/go/1.19.1/libexec/src/testing/testing.go:1493 > +0x55c > > github.com/apache/tinkerpop/gremlin-go/v3/driver.TestClientAgainstSocketServer() > /Users/coleg/tinkerpop/gremlin-go/driver/client_test.go:116 +0x1cc > testing.tRunner() > /opt/homebrew/Cellar/go/1.19.1/libexec/src/testing/testing.go:1446 > +0x188 > testing.(*T).Run.func1() > /opt/homebrew/Cellar/go/1.19.1/libexec/src/testing/testing.go:1493 > +0x40Goroutine 15 (finished) created at: > > github.com/apache/tinkerpop/gremlin-go/v3/driver.newGremlinServerWSProtocol() > /Users/coleg/tinkerpop/gremlin-go/driver/protocol.go:200 +0x398 > github.com/apache/tinkerpop/gremlin-go/v3/driver.createConnection() > /Users/coleg/tinkerpop/gremlin-go/driver/connection.go:110 +0x204 > > github.com/apache/tinkerpop/gremlin-go/v3/driver.newLoadBalancingPool.func1() > /Users/coleg/tinkerpop/gremlin-go/driver/connectionPool.go:150 +0xa8 > ================== > 2022/12/16 10:36:08 Connecting. > 2022/12/16 10:36:08 Closing Client with url 'ws://localhost:45943/gremlin' > 2022/12/16 10:36:08 Closing the connection. > testing.go:1319: race detected during execution of test > --- FAIL: > TestClientAgainstSocketServer/Should_try_create_new_connection_if_closed_by_server > (5.09s) > === CONT > testing.go:1319: race detected during execution of test > FAILProcess finished with the exit code 1 {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)