PROTON-1956: [go] server does not close transport on unexpected disconnect
Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/2a84494c Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/2a84494c Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/2a84494c Branch: refs/heads/master Commit: 2a84494c4befb40c674116aeba7e563e68b9537d Parents: 84844a9 Author: Alan Conway <[email protected]> Authored: Tue Oct 9 16:30:05 2018 -0400 Committer: Alan Conway <[email protected]> Committed: Thu Oct 11 15:14:20 2018 -0400 ---------------------------------------------------------------------- go/src/qpid.apache.org/electron/electron_test.go | 7 ++++--- go/src/qpid.apache.org/electron/handler.go | 10 +++++++--- go/src/qpid.apache.org/proton/handlers.go | 7 +++++-- 3 files changed, 16 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/2a84494c/go/src/qpid.apache.org/electron/electron_test.go ---------------------------------------------------------------------- diff --git a/go/src/qpid.apache.org/electron/electron_test.go b/go/src/qpid.apache.org/electron/electron_test.go index cf881e6..a648a18 100644 --- a/go/src/qpid.apache.org/electron/electron_test.go +++ b/go/src/qpid.apache.org/electron/electron_test.go @@ -21,9 +21,10 @@ package electron import ( "fmt" - "qpid.apache.org/amqp" "testing" "time" + + "qpid.apache.org/amqp" ) // Send a message one way with a client sender and server receiver, verify ack. @@ -325,7 +326,7 @@ func TestHeartbeat(t *testing.T) { unfreeze <- true // Unfreeze the server <-p.server.Done() - if amqp.ResourceLimitExceeded != p.server.Error().(amqp.Error).Name { - t.Error("bad timeout error:", p.server.Error()) + if p.server.Error() == nil { + t.Error("expected server side time-out or connection abort error") } } http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/2a84494c/go/src/qpid.apache.org/electron/handler.go ---------------------------------------------------------------------- diff --git a/go/src/qpid.apache.org/electron/handler.go b/go/src/qpid.apache.org/electron/handler.go index af1efd6..899d6a9 100644 --- a/go/src/qpid.apache.org/electron/handler.go +++ b/go/src/qpid.apache.org/electron/handler.go @@ -126,9 +126,13 @@ func (h *handler) HandleMessagingEvent(t proton.MessagingEvent, e proton.Event) h.shutdown(proton.EndpointError(e.Connection())) case proton.MDisconnected: - err := e.Transport().Condition().Error() - if err == nil { - err = amqp.Errorf(amqp.IllegalState, "unexpected disconnect on %s", h.connection) + var err error + if err = e.Connection().RemoteCondition().Error(); err == nil { + if err = e.Connection().Condition().Error(); err == nil { + if err = e.Transport().Condition().Error(); err == nil { + err = amqp.Errorf(amqp.IllegalState, "unexpected disconnect on %s", h.connection) + } + } } h.shutdown(err) } http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/2a84494c/go/src/qpid.apache.org/proton/handlers.go ---------------------------------------------------------------------- diff --git a/go/src/qpid.apache.org/proton/handlers.go b/go/src/qpid.apache.org/proton/handlers.go index f101548..bbb5014 100644 --- a/go/src/qpid.apache.org/proton/handlers.go +++ b/go/src/qpid.apache.org/proton/handlers.go @@ -25,7 +25,6 @@ import "fmt" type EventHandler interface { // HandleEvent is called with an event. // Typically HandleEvent() is implemented as a switch on e.Type() - // Returning an error will stop the Engine. HandleEvent(e Event) } @@ -38,7 +37,6 @@ type EventHandler interface { type MessagingHandler interface { // HandleMessagingEvent is called with MessagingEvent. // Typically HandleEvent() is implemented as a switch on e.Type() - // Returning an error will stop the Engine. HandleMessagingEvent(MessagingEvent, Event) } @@ -351,6 +349,11 @@ func (d *MessagingAdapter) HandleEvent(e Event) { d.outgoing(e) } + case ETransportTailClosed: + if !e.Connection().State().RemoteClosed() { // Unexpected transport closed + e.Transport().CloseHead() // Complete transport close, no connection close expected + } + case ETransportClosed: d.mhandler.HandleMessagingEvent(MDisconnected, e) } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
