ARTEMIS-1082 Catch Create Queue race in OpenWire

This commit is contained in:
Martyn Taylor 2017-03-29 13:45:45 +01:00
parent 056a88dfca
commit 955af96fe9
1 changed files with 13 additions and 8 deletions

View File

@ -23,6 +23,7 @@ import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.activemq.artemis.api.core.ActiveMQQueueExistsException;
import org.apache.activemq.artemis.api.core.RoutingType;
import org.apache.activemq.artemis.api.core.SimpleString;
import org.apache.activemq.artemis.core.paging.PagingStore;
@ -176,16 +177,20 @@ public class AMQSession implements SessionCallback {
BindingQueryResult bindingQuery = server.bindingQuery(queueName);
QueueQueryResult queueBinding = server.queueQuery(queueName);
boolean isAutoCreate = bindingQuery.isExists() ? true : bindingQuery.isAutoCreateQueues();
if (!queueBinding.isExists()) {
if (isAutoCreate) {
server.createQueue(queueName, RoutingType.ANYCAST, queueName, null, true, isTemporary);
connection.addKnownDestination(queueName);
} else {
hasQueue = false;
try {
if (!queueBinding.isExists()) {
if (bindingQuery.isAutoCreateQueues()) {
server.createQueue(queueName, RoutingType.ANYCAST, queueName, null, true, isTemporary);
connection.addKnownDestination(queueName);
} else {
hasQueue = false;
}
}
} catch (ActiveMQQueueExistsException e) {
// In case another thread created the queue before us but after we did the binding query
hasQueue = true;
}
}
return hasQueue;
}