You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ac...@apache.org on 2018/10/11 22:21:40 UTC

[08/12] qpid-proton git commit: PROTON-1956: [go] server does not close transport on unexpected disconnect

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 <ac...@redhat.com>
Authored: Tue Oct 9 16:30:05 2018 -0400
Committer: Alan Conway <ac...@redhat.com>
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: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org