summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Ritchie <ritchiem@apache.org>2007-02-19 14:48:44 +0000
committerMartin Ritchie <ritchiem@apache.org>2007-02-19 14:48:44 +0000
commite14993ebab6c2f2ed5984de30fe03ce320cf4c0c (patch)
treef3f700b337b81b6c8a4d2b0a7eafbe86c57c98d6
parentef65342bbda798f5ecdcc70ef1919d3b3d0300f5 (diff)
downloadqpid-python-e14993ebab6c2f2ed5984de30fe03ce320cf4c0c.tar.gz
Fully propogated timeouts during AMQConnection.close. Still needs timeouts to be reduced between the various session closures. QPID-380
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@509216 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--java/client/src/main/java/org/apache/qpid/client/AMQConnection.java13
-rw-r--r--java/client/src/main/java/org/apache/qpid/client/AMQSession.java3
-rw-r--r--java/client/src/test/java/org/apache/qpid/client/DispatcherTest.java2
-rw-r--r--java/client/src/test/java/org/apache/qpid/test/unit/client/channelclose/TestChannelCloseMethodHandlerNoCloseOk.java98
4 files changed, 12 insertions, 104 deletions
diff --git a/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java b/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java
index 1fb1c51890..03a70d7f39 100644
--- a/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java
+++ b/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java
@@ -725,7 +725,7 @@ public class AMQConnection extends Closeable implements Connection, QueueConnect
long startCloseTime = System.currentTimeMillis();
_taskPool.shutdown();
- closeAllSessions(null, timeout);
+ closeAllSessions(null, timeout, startCloseTime);
if (!_taskPool.isTerminated())
{
@@ -734,7 +734,7 @@ public class AMQConnection extends Closeable implements Connection, QueueConnect
//adjust timeout
long taskPoolTimeout = adjustTimeout(timeout, startCloseTime);
- _taskPool.awaitTermination(taskPoolTimeout , TimeUnit.MILLISECONDS);
+ _taskPool.awaitTermination(taskPoolTimeout, TimeUnit.MILLISECONDS);
}
catch (InterruptedException e)
{
@@ -791,7 +791,7 @@ public class AMQConnection extends Closeable implements Connection, QueueConnect
* @param cause if not null, the error that is causing this shutdown <p/> The caller must hold the failover mutex
* before calling this method.
*/
- private void closeAllSessions(Throwable cause, long timeout) throws JMSException
+ private void closeAllSessions(Throwable cause, long timeout, long starttime) throws JMSException
{
final LinkedList sessionCopy = new LinkedList(_sessions.values());
final Iterator it = sessionCopy.iterator();
@@ -807,6 +807,11 @@ public class AMQConnection extends Closeable implements Connection, QueueConnect
{
try
{
+ if (starttime != -1)
+ {
+ timeout = adjustTimeout(timeout, starttime);
+ }
+
session.close(timeout);
}
catch (JMSException e)
@@ -1065,7 +1070,7 @@ public class AMQConnection extends Closeable implements Connection, QueueConnect
_logger.info("Closing AMQConnection due to :" + cause.getMessage());
}
_closed.set(true);
- closeAllSessions(cause, -1); // FIXME: when doing this end up with RejectedExecutionException from executor.
+ closeAllSessions(cause, -1, -1); // FIXME: when doing this end up with RejectedExecutionException from executor.
}
catch (JMSException e)
{
diff --git a/java/client/src/main/java/org/apache/qpid/client/AMQSession.java b/java/client/src/main/java/org/apache/qpid/client/AMQSession.java
index fe77acfabc..6d4d6cbaad 100644
--- a/java/client/src/main/java/org/apache/qpid/client/AMQSession.java
+++ b/java/client/src/main/java/org/apache/qpid/client/AMQSession.java
@@ -521,7 +521,8 @@ public class AMQSession extends Closeable implements Session, QueueSession, Topi
0, // methodId
AMQConstant.REPLY_SUCCESS.getCode(), // replyCode
new AMQShortString("JMS client closing channel")); // replyText
- getProtocolHandler().syncWrite(frame, ChannelCloseOkBody.class);
+
+ getProtocolHandler().syncWrite(frame, ChannelCloseOkBody.class, timeout);
// When control resumes at this point, a reply will have been received that
// indicates the broker has closed the channel successfully
diff --git a/java/client/src/test/java/org/apache/qpid/client/DispatcherTest.java b/java/client/src/test/java/org/apache/qpid/client/DispatcherTest.java
index a29ba7acd7..cf26a54f1b 100644
--- a/java/client/src/test/java/org/apache/qpid/client/DispatcherTest.java
+++ b/java/client/src/test/java/org/apache/qpid/client/DispatcherTest.java
@@ -83,7 +83,7 @@ public class DispatcherTest extends TestCase
Hashtable<String, String> env = new Hashtable<String, String>();
env.put("connectionfactory.connection", "amqp://client:client@MLT_ID/test?brokerlist='vm://:1'");
- env.put("queue.queue", "direct://amq.direct//MessageListenerTest");
+ env.put("queue.queue", "MessageListenerTest");
_context = factory.getInitialContext(env);
diff --git a/java/client/src/test/java/org/apache/qpid/test/unit/client/channelclose/TestChannelCloseMethodHandlerNoCloseOk.java b/java/client/src/test/java/org/apache/qpid/test/unit/client/channelclose/TestChannelCloseMethodHandlerNoCloseOk.java
deleted file mode 100644
index 69cbdd6a09..0000000000
--- a/java/client/src/test/java/org/apache/qpid/test/unit/client/channelclose/TestChannelCloseMethodHandlerNoCloseOk.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- *
- */
-package org.apache.qpid.test.unit.client.channelclose;
-
-import org.apache.log4j.Logger;
-import org.apache.qpid.client.state.AMQStateManager;
-import org.apache.qpid.client.state.StateAwareMethodListener;
-import org.apache.qpid.client.protocol.AMQProtocolSession;
-import org.apache.qpid.client.AMQNoConsumersException;
-import org.apache.qpid.client.AMQNoRouteException;
-import org.apache.qpid.protocol.AMQMethodEvent;
-import org.apache.qpid.protocol.AMQConstant;
-import org.apache.qpid.AMQException;
-import org.apache.qpid.AMQInvalidSelectorException;
-import org.apache.qpid.AMQInvalidRoutingKeyException;
-import org.apache.qpid.AMQChannelClosedException;
-import org.apache.qpid.framing.ChannelCloseBody;
-import org.apache.qpid.framing.AMQShortString;
-import org.apache.qpid.framing.AMQFrame;
-import org.apache.qpid.framing.ChannelCloseOkBody;
-
-public class TestChannelCloseMethodHandlerNoCloseOk implements StateAwareMethodListener
-{
- private static final Logger _logger = Logger.getLogger(TestChannelCloseMethodHandlerNoCloseOk.class);
-
- private static TestChannelCloseMethodHandlerNoCloseOk _handler = new TestChannelCloseMethodHandlerNoCloseOk();
-
- public static TestChannelCloseMethodHandlerNoCloseOk getInstance()
- {
- return _handler;
- }
-
- public void methodReceived(AMQStateManager stateManager, AMQProtocolSession protocolSession, AMQMethodEvent evt) throws AMQException
- {
- _logger.debug("ChannelClose method received");
- ChannelCloseBody method = (ChannelCloseBody) evt.getMethod();
-
- AMQConstant errorCode = AMQConstant.getConstant(method.replyCode);
- AMQShortString reason = method.replyText;
- if (_logger.isDebugEnabled())
- {
- _logger.debug("Channel close reply code: " + errorCode + ", reason: " + reason);
- }
-
- // For this test Method Handler .. don't send Close-OK
-// // TODO: Be aware of possible changes to parameter order as versions change.
-// AMQFrame frame = ChannelCloseOkBody.createAMQFrame(evt.getChannelId(), method.getMajor(), method.getMinor());
-// protocolSession.writeFrame(frame);
- if (errorCode != AMQConstant.REPLY_SUCCESS)
- {
- _logger.error("Channel close received with errorCode " + errorCode + ", and reason " + reason);
- if (errorCode == AMQConstant.NO_CONSUMERS)
- {
- throw new AMQNoConsumersException("Error: " + reason, null);
- }
- else if (errorCode == AMQConstant.NO_ROUTE)
- {
- throw new AMQNoRouteException("Error: " + reason, null);
- }
- else if (errorCode == AMQConstant.INVALID_SELECTOR)
- {
- _logger.debug("Broker responded with Invalid Selector.");
-
- throw new AMQInvalidSelectorException(String.valueOf(reason));
- }
- else if (errorCode == AMQConstant.INVALID_ROUTING_KEY)
- {
- _logger.debug("Broker responded with Invalid Routing Key.");
-
- throw new AMQInvalidRoutingKeyException(String.valueOf(reason));
- }
- else
- {
- throw new AMQChannelClosedException(errorCode, "Error: " + reason);
- }
-
- }
- protocolSession.channelClosed(evt.getChannelId(), errorCode, String.valueOf(reason));
- }
-} \ No newline at end of file