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]

Reply via email to