You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gr...@apache.org on 2010/08/13 15:54:04 UTC

svn commit: r985199 - in /qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport: ConnectionDelegate.java Session.java SessionDelegate.java

Author: grkvlt
Date: Fri Aug 13 13:54:03 2010
New Revision: 985199

URL: http://svn.apache.org/viewvc?rev=985199&view=rev
Log:
QPID-2797: Change expiry to a boolean correctly representing intent to close

Modified:
    qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionDelegate.java
    qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Session.java
    qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionDelegate.java

Modified: qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionDelegate.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionDelegate.java?rev=985199&r1=985198&r2=985199&view=diff
==============================================================================
--- qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionDelegate.java (original)
+++ qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionDelegate.java Fri Aug 13 13:54:03 2010
@@ -85,8 +85,8 @@ public abstract class ConnectionDelegate
     @Override public void sessionDetach(Connection conn, SessionDetach dtc)
     {
         Session ssn = conn.getSession(dtc.getChannel());
-        conn.unmap(ssn);
         ssn.sessionDetached(dtc.getName(), SessionDetachCode.NORMAL);
+        conn.unmap(ssn);
         ssn.closed();
     }
 

Modified: qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Session.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Session.java?rev=985199&r1=985198&r2=985199&view=diff
==============================================================================
--- qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Session.java (original)
+++ qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Session.java Fri Aug 13 13:54:03 2010
@@ -85,6 +85,7 @@ public class Session extends SessionInvo
     private Connection connection;
     private Binary name;
     private long expiry;
+    private boolean closing;
     private int channel;
     private SessionDelegate delegate;
     private SessionListener listener = new DefaultSessionListener();
@@ -127,6 +128,7 @@ public class Session extends SessionInvo
         this.delegate = delegate;
         this.name = name;
         this.expiry = expiry;
+        this.closing = false;
         initReceiver();
     }
 
@@ -145,6 +147,11 @@ public class Session extends SessionInvo
         this.expiry = expiry;
     }
 
+    void setClose(boolean close)
+    {
+        this.closing = close;
+    }
+
     public int getChannel()
     {
         return channel;
@@ -599,7 +606,7 @@ public class Session extends SessionInvo
                             }
                             catch (SenderException e)
                             {
-                                if (expiry > 0)
+                                if (!closing)
                                 {
                                     // if expiry is > 0 then this will
                                     // happen again on resume
@@ -637,7 +644,7 @@ public class Session extends SessionInvo
                 {
                     sessionCommandPoint(0, 0);
                 }
-                if ((expiry > 0 && !m.isUnreliable()) || m.hasCompletionListener())
+                if ((!closing && !m.isUnreliable()) || m.hasCompletionListener())
                 {
                     commands[mod(next, commands.length)] = m;
                     commandBytes += m.getBodySize();
@@ -654,9 +661,9 @@ public class Session extends SessionInvo
                 }
                 catch (SenderException e)
                 {
-                    if (expiry > 0)
+                    if (!closing)
                     {
-                        // if expiry is > 0 then this will happen
+                        // if we are not closing then this will happen
                         // again on resume
                         log.error(e, "error sending command");
                     }
@@ -680,7 +687,7 @@ public class Session extends SessionInvo
                     }
                     catch (SenderException e)
                     {
-                        if (expiry > 0)
+                        if (!closing)
                         {
                             // if expiry is > 0 then this will happen
                             // again on resume
@@ -890,13 +897,10 @@ public class Session extends SessionInvo
         synchronized (commands)
         {
             state = CLOSING;
-            // XXX: we manually set the expiry to zero here to
-            // simulate full session recovery in brokers that don't
-            // support it, we should remove this line when there is
-            // broker support for full session resume:
-            expiry = 0;
+            setClose(true);
             sessionRequestTimeout(0);
             sessionDetach(name.getBytes());
+
             Waiter w = new Waiter(commands, timeout);
             while (w.hasTime() && state != CLOSED)
             {
@@ -907,9 +911,9 @@ public class Session extends SessionInvo
             {
                 throw new SessionException("close() timed out");
             }
+ 
+            connection.removeSession(this);
         }
-
-        connection.removeSession(this);
     }
 
     public void exception(Throwable t)
@@ -921,7 +925,7 @@ public class Session extends SessionInvo
     {
         synchronized (commands)
         {
-            if (expiry == 0 || getException() != null)
+            if (closing || getException() != null)
             {
                 state = CLOSED;
             }

Modified: qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionDelegate.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionDelegate.java?rev=985199&r1=985198&r2=985199&view=diff
==============================================================================
--- qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionDelegate.java (original)
+++ qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionDelegate.java Fri Aug 13 13:54:03 2010
@@ -59,7 +59,10 @@ public class SessionDelegate
 
     @Override public void sessionRequestTimeout(Session ssn, SessionRequestTimeout t)
     {
-        ssn.setExpiry(t.getTimeout());
+        if (t.getTimeout() == 0)
+        {
+            ssn.setClose(true);
+        }
         ssn.sessionTimeout(t.getTimeout());
     }
 



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org