diff options
author | Robert Gemmell <robbie@apache.org> | 2011-10-30 18:42:37 +0000 |
---|---|---|
committer | Robert Gemmell <robbie@apache.org> | 2011-10-30 18:42:37 +0000 |
commit | 7e185ac8cc310718ac8f492df1d4c787cce95d3d (patch) | |
tree | 8f475af6e5cf266fccbb66d0bf138163e965d71f | |
parent | ef18e29768d66d87ae9895f97773d2dd98fa50fd (diff) | |
download | qpid-python-7e185ac8cc310718ac8f492df1d4c787cce95d3d.tar.gz |
QPID-3428: update to stop duplicate 0-10 session registrations into the management layer, fixes a leak of the session and its associated connection at session removal time.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1195212 13f79535-47bb-0310-9956-ffa450edef68
6 files changed, 18 insertions, 10 deletions
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQConnectionModel.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQConnectionModel.java index b51e6aff1a..bc0d4e3bcc 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQConnectionModel.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQConnectionModel.java @@ -72,5 +72,5 @@ public interface AMQConnectionModel extends StatisticsGatherer public String getUserName(); - public boolean isSessionNameUnique(String name); + public boolean isSessionNameUnique(byte[] name); } diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQProtocolEngine.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQProtocolEngine.java index bff0a79de1..b960ce8608 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQProtocolEngine.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQProtocolEngine.java @@ -1396,8 +1396,9 @@ public class AMQProtocolEngine implements ServerProtocolEngine, Managable, AMQPr } @Override - public boolean isSessionNameUnique(String name) + public boolean isSessionNameUnique(byte[] name) { + // 0-8/0-9/0-9-1 sessions don't have names return true; } diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnection.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnection.java index d83013afba..e428baeebe 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnection.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnection.java @@ -389,7 +389,7 @@ public class ServerConnection extends Connection implements AMQConnectionModel, } @Override - public boolean isSessionNameUnique(String name) + public boolean isSessionNameUnique(byte[] name) { return !super.hasSessionWithName(name); } diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnectionDelegate.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnectionDelegate.java index 2de8a0425e..1e149c4d76 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnectionDelegate.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnectionDelegate.java @@ -234,22 +234,22 @@ public class ServerConnectionDelegate extends ServerDelegate @Override public void sessionAttach(final Connection conn, final SessionAttach atc) { - final String clientId = new String(atc.getName()); - final Session ssn = getSession(conn, atc); + final Session ssn; - if(isSessionNameUnique(clientId,conn)) + if(isSessionNameUnique(atc.getName(), conn)) { + ssn = sessionAttachImpl(conn, atc); conn.registerSession(ssn); - super.sessionAttach(conn, atc); } else { + ssn = getSession(conn, atc); ssn.invoke(new SessionDetached(atc.getName(), SessionDetachCode.SESSION_BUSY)); ssn.closed(); } } - private boolean isSessionNameUnique(final String name, final Connection conn) + private boolean isSessionNameUnique(final byte[] name, final Connection conn) { final ServerConnection sconn = (ServerConnection) conn; final String userId = sconn.getUserName(); diff --git a/qpid/java/common/src/main/java/org/apache/qpid/transport/Connection.java b/qpid/java/common/src/main/java/org/apache/qpid/transport/Connection.java index 06c5c83031..b78433052c 100644 --- a/qpid/java/common/src/main/java/org/apache/qpid/transport/Connection.java +++ b/qpid/java/common/src/main/java/org/apache/qpid/transport/Connection.java @@ -697,9 +697,9 @@ public class Connection extends ConnectionInvoker return channels.values(); } - public boolean hasSessionWithName(final String name) + public boolean hasSessionWithName(final byte[] name) { - return sessions.containsKey(new Binary(name.getBytes())); + return sessions.containsKey(new Binary(name)); } public void notifyFailoverRequired() diff --git a/qpid/java/common/src/main/java/org/apache/qpid/transport/ServerDelegate.java b/qpid/java/common/src/main/java/org/apache/qpid/transport/ServerDelegate.java index 82fa6ca473..07d21c9904 100644 --- a/qpid/java/common/src/main/java/org/apache/qpid/transport/ServerDelegate.java +++ b/qpid/java/common/src/main/java/org/apache/qpid/transport/ServerDelegate.java @@ -195,10 +195,17 @@ public class ServerDelegate extends ConnectionDelegate @Override public void sessionAttach(Connection conn, SessionAttach atc) { + sessionAttachImpl(conn, atc); + } + + protected Session sessionAttachImpl(Connection conn, SessionAttach atc) + { Session ssn = getSession(conn, atc); conn.map(ssn, atc.getChannel()); ssn.sessionAttached(atc.getName()); ssn.setState(Session.State.OPEN); + + return ssn; } protected void setConnectionTuneOkChannelMax(final Connection conn, final int okChannelMax) |