summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
authorRajith Muditha Attapattu <rajith@apache.org>2011-02-09 22:52:14 +0000
committerRajith Muditha Attapattu <rajith@apache.org>2011-02-09 22:52:14 +0000
commit8ead4c97b75e508a877e8d446a5bef096e606d84 (patch)
tree11a88362d17b0c5c4faa006edfa84d5650ad9ea4 /java
parent00cb5c0ca8f8267e7c9d6ccbb959887c9a21ebb3 (diff)
downloadqpid-python-8ead4c97b75e508a877e8d446a5bef096e606d84.tar.gz
QPID-3043
Added the extra state 'RESUMING', to ensure that any new session creation is delayed until the connection is able to reattach all existing sessions. If a connection is reconnecting then it will first go to RESUMING state (instead of OPEN) in connection-open-ok. Once the 'resume' method in Connection.java is completed the state will be set to OPEN. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1069159 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java')
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/ClientDelegate.java10
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/Connection.java16
2 files changed, 23 insertions, 3 deletions
diff --git a/java/common/src/main/java/org/apache/qpid/transport/ClientDelegate.java b/java/common/src/main/java/org/apache/qpid/transport/ClientDelegate.java
index bce64075e5..0d9f8c0b28 100644
--- a/java/common/src/main/java/org/apache/qpid/transport/ClientDelegate.java
+++ b/java/common/src/main/java/org/apache/qpid/transport/ClientDelegate.java
@@ -28,6 +28,7 @@ import org.ietf.jgss.Oid;
import org.apache.qpid.security.UsernamePasswordCallbackHandler;
import static org.apache.qpid.transport.Connection.State.OPEN;
+import static org.apache.qpid.transport.Connection.State.RESUMING;
import org.apache.qpid.transport.util.Logger;
import javax.security.sasl.Sasl;
@@ -216,7 +217,14 @@ public class ClientDelegate extends ConnectionDelegate
}
}
- conn.setState(OPEN);
+ if (conn.isConnectionResuming())
+ {
+ conn.setState(RESUMING);
+ }
+ else
+ {
+ conn.setState(OPEN);
+ }
}
@Override
diff --git a/java/common/src/main/java/org/apache/qpid/transport/Connection.java b/java/common/src/main/java/org/apache/qpid/transport/Connection.java
index 0f9f1445c8..929e5a56b5 100644
--- a/java/common/src/main/java/org/apache/qpid/transport/Connection.java
+++ b/java/common/src/main/java/org/apache/qpid/transport/Connection.java
@@ -25,6 +25,7 @@ import static org.apache.qpid.transport.Connection.State.CLOSING;
import static org.apache.qpid.transport.Connection.State.NEW;
import static org.apache.qpid.transport.Connection.State.OPEN;
import static org.apache.qpid.transport.Connection.State.OPENING;
+import static org.apache.qpid.transport.Connection.State.RESUMING;
import java.util.ArrayList;
import java.util.Collections;
@@ -32,6 +33,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
+import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicLong;
import javax.security.sasl.SaslClient;
@@ -63,7 +65,7 @@ public class Connection extends ConnectionInvoker
public static final int MAX_CHANNEL_MAX = 0xFFFF;
public static final int MIN_USABLE_CHANNEL_NUM = 0;
- public enum State { NEW, CLOSED, OPENING, OPEN, CLOSING, CLOSE_RCVD }
+ public enum State { NEW, CLOSED, OPENING, OPEN, CLOSING, CLOSE_RCVD, RESUMING }
static class DefaultConnectionListener implements ConnectionListener
{
@@ -119,7 +121,8 @@ public class Connection extends ConnectionInvoker
private static final AtomicLong idGenerator = new AtomicLong(0);
private final long _connectionId = idGenerator.incrementAndGet();
-
+ private static final AtomicBoolean connectionLost = new AtomicBoolean(false);
+
public Connection() {}
public void setConnectionDelegate(ConnectionDelegate delegate)
@@ -270,6 +273,8 @@ public class Connection extends ConnectionInvoker
close();
throw new ConnectionException("connect() timed out");
case OPEN:
+ case RESUMING:
+ connectionLost.set(false);
break;
case CLOSED:
throw new ConnectionException("connect() aborted");
@@ -475,11 +480,13 @@ public class Connection extends ConnectionInvoker
ssn.resume();
}
}
+ setState(OPEN);
}
}
public void exception(ConnectionException e)
{
+ connectionLost.set(true);
synchronized (lock)
{
switch (state)
@@ -682,5 +689,10 @@ public class Connection extends ConnectionInvoker
{
return securityLayer;
}
+
+ public boolean isConnectionResuming()
+ {
+ return connectionLost.get();
+ }
}