Author: kwall Date: Tue Sep 29 17:23:06 2015 New Revision: 1705898 URL: http://svn.apache.org/viewvc?rev=1705898&view=rev Log: QPID-6744/QPID-6759: [Java Client/Java Broker] 0-8..0-91 Correct handling of queue.delete and exchange.delete.
Address review comments from Lorenz Quack <[email protected]> Also after reviewing the product/version information sent by older Qpid Client might the checks more stringent. Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQPConnection_0_8.java Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java?rev=1705898&r1=1705897&r2=1705898&view=diff ============================================================================== --- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java (original) +++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java Tue Sep 29 17:23:06 2015 @@ -137,9 +137,9 @@ public interface Broker<X extends Broker @ManagedContextDefault(name = MESSAGE_COMPRESSION_THRESHOLD_SIZE) int DEFAULT_MESSAGE_COMPRESSION_THRESHOLD_SIZE = 102400; - String CONNECTION_QUEUE_DELETE_NOWAIT_VERSION_REGEXP = "connection.queueDeleteNoWaitVersionRegexp"; - @ManagedContextDefault(name = CONNECTION_QUEUE_DELETE_NOWAIT_VERSION_REGEXP) - String DEFAULT_CONNECTION_QUEUE_DELETE_NOWAIT_VERSION_REGEXP = "^0\\..*$"; + String SEND_QUEUE_DELETE_OK_REGARDLESS_CLIENT_VER_REGEXP = "connection.sendQueueDeleteOkRegardlessClientVerRegexp"; + @ManagedContextDefault(name = SEND_QUEUE_DELETE_OK_REGARDLESS_CLIENT_VER_REGEXP) + String DEFAULT_SEND_QUEUE_DELETE_OK_REGARDLESS_CLIENT_VER_REGEXP = "^0\\..*$"; String BROKER_DIRECT_BYTE_BUFFER_POOL_SIZE = "broker.directByteBufferPoolSize"; @ManagedContextDefault(name = BROKER_DIRECT_BYTE_BUFFER_POOL_SIZE) Modified: qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java?rev=1705898&r1=1705897&r2=1705898&view=diff ============================================================================== --- qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java (original) +++ qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java Tue Sep 29 17:23:06 2015 @@ -3104,10 +3104,10 @@ public class AMQChannel { exchange.delete(); - ExchangeDeleteOkBody responseBody = _connection.getMethodRegistry().createExchangeDeleteOkBody(); if (!nowait) { + ExchangeDeleteOkBody responseBody = _connection.getMethodRegistry().createExchangeDeleteOkBody(); _connection.writeFrame(responseBody.generateFrame(getChannelId())); } } Modified: qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQPConnection_0_8.java URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQPConnection_0_8.java?rev=1705898&r1=1705897&r2=1705898&view=diff ============================================================================== --- qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQPConnection_0_8.java (original) +++ qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQPConnection_0_8.java Tue Sep 29 17:23:06 2015 @@ -164,12 +164,12 @@ public class AMQPConnection_0_8 private int _messageCompressionThreshold; /** - * QPID-6744 - Older queue clients (<=0.32) incorrectly set the nowait flag false on the queue.delete method - * and then await regardless. If we detect an old Qpid client, we send the queue.delete-ok response - * regardless of the queue.delete flag request made by the client. + * QPID-6744 - Older queue clients (<=0.32) set the nowait flag false on the queue.delete method and then + * incorrectly await regardless. If we detect an old Qpid client, we send the queue.delete-ok response regardless + * of the queue.delete flag request made by the client. */ - private volatile boolean _sendQueueDeleteOkRegardless = true; - private final Pattern _connectionQueueDeleteNoWaitVerRegexp; + private volatile boolean _sendQueueDeleteOkRegardless; + private final Pattern _sendQueueDeleteOkRegardlessClientVerRegexp; private int _currentClassId; private int _currentMethodId; @@ -193,9 +193,9 @@ public class AMQPConnection_0_8 _binaryDataLimit = getBroker().getContextKeys(false).contains(BROKER_DEBUG_BINARY_DATA_LENGTH) ? getBroker().getContextValue(Integer.class, BROKER_DEBUG_BINARY_DATA_LENGTH) : DEFAULT_DEBUG_BINARY_DATA_LENGTH; - String queueDeleteNoWaitRegexp = getBroker().getContextKeys(false).contains(Broker.CONNECTION_QUEUE_DELETE_NOWAIT_VERSION_REGEXP) - ? getBroker().getContextValue(String.class, Broker.CONNECTION_QUEUE_DELETE_NOWAIT_VERSION_REGEXP): ""; - _connectionQueueDeleteNoWaitVerRegexp = Pattern.compile(queueDeleteNoWaitRegexp); + String sendQueueDeleteOkRegardlessRegexp = getBroker().getContextKeys(false).contains(Broker.SEND_QUEUE_DELETE_OK_REGARDLESS_CLIENT_VER_REGEXP) + ? getBroker().getContextValue(String.class, Broker.SEND_QUEUE_DELETE_OK_REGARDLESS_CLIENT_VER_REGEXP): ""; + _sendQueueDeleteOkRegardlessClientVerRegexp = Pattern.compile(sendQueueDeleteOkRegardlessRegexp); int maxMessageSize = port.getContextValue(Integer.class, AmqpPort.PORT_MAX_MESSAGE_SIZE); _maxMessageSize = (maxMessageSize > 0) ? (long) maxMessageSize : Long.MAX_VALUE; @@ -751,10 +751,10 @@ public class AMQPConnection_0_8 String clientProduct = clientProperties.getString(ConnectionStartProperties.PRODUCT); String remoteProcessPid = clientProperties.getString(ConnectionStartProperties.PID); - boolean mightBeQpidClient = clientProduct == null || - clientProduct.toLowerCase().contains("qpid") || - clientProduct.toLowerCase().equals("unknown"); - boolean sendQueueDeleteOkRegardless = mightBeQpidClient && (clientVersion == null || _connectionQueueDeleteNoWaitVerRegexp.matcher(clientVersion).matches()); + boolean mightBeQpidClient = clientProduct != null && + (clientProduct.toLowerCase().contains("qpid") || clientProduct.toLowerCase() .equals("unknown")); + boolean sendQueueDeleteOkRegardless = mightBeQpidClient &&(clientVersion == null || _sendQueueDeleteOkRegardlessClientVerRegexp + .matcher(clientVersion).matches()); setSendQueueDeleteOkRegardless(sendQueueDeleteOkRegardless); if (sendQueueDeleteOkRegardless) --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
