You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by co...@apache.org on 2024/10/16 01:31:36 UTC
(tinkerpop) branch TINKERPOP-3076 created (now fa54ef9fbb)
This is an automated email from the ASF dual-hosted git repository.
colegreer pushed a change to branch TINKERPOP-3076
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
at fa54ef9fbb [TINKERPOP-3076] Throw better error if request exceeds WriteBufferSize in Go GLV
This branch includes the following new commits:
new fa54ef9fbb [TINKERPOP-3076] Throw better error if request exceeds WriteBufferSize in Go GLV
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
(tinkerpop) 01/01: [TINKERPOP-3076] Throw better error if request exceeds WriteBufferSize in Go GLV
Posted by co...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
colegreer pushed a commit to branch TINKERPOP-3076
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit fa54ef9fbb513208d04b057c6da964c4651e3a89
Author: Cole-Greer <Co...@improving.com>
AuthorDate: Tue Oct 15 18:30:20 2024 -0700
[TINKERPOP-3076] Throw better error if request exceeds WriteBufferSize in Go GLV
---
CHANGELOG.asciidoc | 1 +
gremlin-go/driver/gorillaTransporter.go | 4 ++++
gremlin-go/driver/gorillaTransporter_test.go | 30 +++++++++++++++++++++++++++-
3 files changed, 34 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 94350f5f9a..cc733dc1c8 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -35,6 +35,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
* Bump Logback to 1.2.13
* Bump Ivy to 2.5.2
* Fixed a memory leak in the Javascript driver when there is a server error response.
+* Throw more descriptive error in `gremlin-go` when request size exceeds `WriteBufferSize`
[[release-3-6-7]]
=== TinkerPop 3.6.7 (April 8, 2024)
diff --git a/gremlin-go/driver/gorillaTransporter.go b/gremlin-go/driver/gorillaTransporter.go
index 341510f16a..5f6f02e547 100644
--- a/gremlin-go/driver/gorillaTransporter.go
+++ b/gremlin-go/driver/gorillaTransporter.go
@@ -20,6 +20,7 @@ under the License.
package gremlingo
import (
+ "errors"
"net/http"
"net/url"
"sync"
@@ -100,6 +101,9 @@ func (transporter *gorillaTransporter) Write(data []byte) error {
return err
}
}
+ if len(data) > transporter.connSettings.writeBufferSize {
+ return errors.New("request too large, consider increasing 'WriteBufferSize' configuration or split into smaller requests")
+ }
transporter.writeChannel <- data
return nil
}
diff --git a/gremlin-go/driver/gorillaTransporter_test.go b/gremlin-go/driver/gorillaTransporter_test.go
index 20c7fc9796..c0e2504ddd 100644
--- a/gremlin-go/driver/gorillaTransporter_test.go
+++ b/gremlin-go/driver/gorillaTransporter_test.go
@@ -67,13 +67,17 @@ func (conn *mockWebsocketConn) SetPongHandler(h func(appData string) error) {
}
func getNewGorillaTransporter() (gorillaTransporter, *mockWebsocketConn) {
+ return getNewGorillaTransporterWithSettings(newDefaultConnectionSettings())
+}
+
+func getNewGorillaTransporterWithSettings(connectionSettings *connectionSettings) (gorillaTransporter, *mockWebsocketConn) {
mockConn := new(mockWebsocketConn)
return gorillaTransporter{
url: "ws://mockHost:8182/gremlin",
logHandler: newLogHandler(&defaultLogger{}, Info, language.English),
connection: mockConn,
isClosed: false,
- connSettings: newDefaultConnectionSettings(),
+ connSettings: connectionSettings,
writeChannel: make(chan []byte, 100),
wg: &sync.WaitGroup{},
}, mockConn
@@ -132,4 +136,28 @@ func TestGorillaTransporter(t *testing.T) {
assert.True(t, isClosed)
})
})
+
+ t.Run("Should error if request size exceeds WriteBufferSize", func(t *testing.T) {
+ connSettings := newDefaultConnectionSettings()
+ connSettings.writeBufferSize = 30
+ transporter, mockConn := getNewGorillaTransporterWithSettings(connSettings)
+
+ t.Run("Small message should succeed", func(t *testing.T) {
+ mockConn.On("WriteMessage", 2, make([]byte, 10)).Return(nil)
+ err := transporter.Write(make([]byte, 10))
+ assert.Nil(t, err)
+ })
+
+ t.Run("Large message should error", func(t *testing.T) {
+ mockConn.On("WriteMessage", 2, make([]byte, 10)).Return(nil)
+ err := transporter.Write(make([]byte, 31))
+ assert.ErrorContains(t, err, "request too large")
+ })
+
+ t.Run("Exact size should succeed", func(t *testing.T) {
+ mockConn.On("WriteMessage", 2, make([]byte, 10)).Return(nil)
+ err := transporter.Write(make([]byte, 30))
+ assert.Nil(t, err)
+ })
+ })
}