This is an automated email from the ASF dual-hosted git repository.

yuxuan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/thrift.git

commit fe3f8a1279660b2e3a47798fa2c8a7bd6800e4e9
Author: Yuxuan 'fishy' Wang <[email protected]>
AuthorDate: Tue Apr 27 19:56:58 2021 -0700

    THRIFT-5404: Allow other types of TTransportException to be timeouts
    
    Client: go
    
    Currently we only treat TTransportException with typeId == TIMED_OUT as
    timeout (return true in Timeout function). When opening a new socket, if
    we got a connect timeout from net.Dial, we wrap the error as
    TTransportException with typeId == NOT_OPEN, thus it's no longer treated
    as a timeout error.
    
    Change the error to be directly wrapping the original error (instead of
    recreate a new error with the same error message), and change
    tTransportException.Timeout to also return true if the wrapped error
    is a timeout error. This way we don't have to break anything (if code
    rely on TTransportException.TypeId being NOT_OPEN in this case, that's
    still true).
    
    While I'm here, also update CHANGES.md from #2359.
---
 CHANGES.md                           |  3 ++-
 lib/go/thrift/socket.go              |  6 +++++-
 lib/go/thrift/ssl_socket.go          | 12 ++++++++++--
 lib/go/thrift/transport_exception.go |  2 +-
 4 files changed, 18 insertions(+), 5 deletions(-)

diff --git a/CHANGES.md b/CHANGES.md
index 99123ba..5853312 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -11,7 +11,8 @@
 
 ### Go
 
-- [THRIFT-5369](https://issues.apache.org/jira/browse/THRIFT-5369) - No longer 
pre-allocating the whole container (map/set/list) in compiled go code to avoid 
huge allocations on malformed messages
+- [THRIFT-5369](https://issues.apache.org/jira/browse/THRIFT-5369) - 
TConfiguration.GetMaxMessageSize() now also applies to container sizes in 
TProtocol implementations provided
+- [THRIFT-5404](https://issues.apache.org/jira/browse/THRIFT-5404) - 
TTransportException.Timeout would correctly return true when it's connect 
timeout during TSocket.Open call
 
 
 ## 0.14.1
diff --git a/lib/go/thrift/socket.go b/lib/go/thrift/socket.go
index e911bf1..0cf59a0 100644
--- a/lib/go/thrift/socket.go
+++ b/lib/go/thrift/socket.go
@@ -166,7 +166,11 @@ func (p *TSocket) Open() error {
                p.addr.String(),
                p.cfg.GetConnectTimeout(),
        )); err != nil {
-               return NewTTransportException(NOT_OPEN, err.Error())
+               return &tTransportException{
+                       typeId: NOT_OPEN,
+                       err:    err,
+                       msg:    err.Error(),
+               }
        }
        return nil
 }
diff --git a/lib/go/thrift/ssl_socket.go b/lib/go/thrift/ssl_socket.go
index 6359a74..cd711ff 100644
--- a/lib/go/thrift/ssl_socket.go
+++ b/lib/go/thrift/ssl_socket.go
@@ -167,7 +167,11 @@ func (p *TSSLSocket) Open() error {
                        p.hostPort,
                        p.cfg.GetTLSConfig(),
                )); err != nil {
-                       return NewTTransportException(NOT_OPEN, err.Error())
+                       return &tTransportException{
+                               typeId: NOT_OPEN,
+                               err:    err,
+                               msg:    err.Error(),
+                       }
                }
        } else {
                if p.conn.isValid() {
@@ -190,7 +194,11 @@ func (p *TSSLSocket) Open() error {
                        p.addr.String(),
                        p.cfg.GetTLSConfig(),
                )); err != nil {
-                       return NewTTransportException(NOT_OPEN, err.Error())
+                       return &tTransportException{
+                               typeId: NOT_OPEN,
+                               err:    err,
+                               msg:    err.Error(),
+                       }
                }
        }
        return nil
diff --git a/lib/go/thrift/transport_exception.go 
b/lib/go/thrift/transport_exception.go
index 0a3f076..a51510e 100644
--- a/lib/go/thrift/transport_exception.go
+++ b/lib/go/thrift/transport_exception.go
@@ -72,7 +72,7 @@ func (p *tTransportException) Unwrap() error {
 }
 
 func (p *tTransportException) Timeout() bool {
-       return p.typeId == TIMED_OUT
+       return p.typeId == TIMED_OUT || isTimeoutError(p.err)
 }
 
 func NewTTransportException(t int, e string) TTransportException {

Reply via email to