activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jbertram <...@git.apache.org>
Subject [GitHub] activemq-artemis pull request #2388: ARTEMIS-1856 support delays before dele...
Date Wed, 24 Oct 2018 00:26:43 GMT
Github user jbertram commented on a diff in the pull request:

    https://github.com/apache/activemq-artemis/pull/2388#discussion_r227609075
  
    --- Diff: artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeImpl.java
---
    @@ -1540,6 +1561,75 @@ public void run() {
           }
        }
     
    +   private final class AddressQueueReaper extends ActiveMQScheduledComponent {
    +
    +      AddressQueueReaper(ScheduledExecutorService scheduledExecutorService,
    +                         Executor executor,
    +                         long checkPeriod,
    +                         TimeUnit timeUnit,
    +                         boolean onDemand) {
    +         super(scheduledExecutorService, executor, checkPeriod, timeUnit, onDemand);
    +      }
    +
    +      @Override
    +      public void run() {
    +         Map<SimpleString, Binding> nameMap = addressManager.getBindings();
    +
    +         List<Queue> queues = new ArrayList<>();
    +
    +         for (Binding binding : nameMap.values()) {
    +            if (binding.getType() == BindingType.LOCAL_QUEUE) {
    +               Queue queue = (Queue) binding.getBindable();
    +
    +               queues.add(queue);
    +            }
    +         }
    +
    +         for (Queue queue : queues) {
    +            int consumerCount = queue.getConsumerCount();
    +            long messageCount = queue.getMessageCount();
    +            boolean autoCreated = queue.isAutoCreated();
    +            long consumerRemovedTimestamp =  queue.getConsumerRemovedTimestamp();
    +
    +            if (!queue.isInternalQueue() && autoCreated && messageCount
== 0 && consumerCount == 0 && consumerRemovedTimestamp != -1) {
    +               SimpleString queueName = queue.getName();
    +               AddressSettings settings = addressSettingsRepository.getMatch(queue.getAddress().toString());
    +               if (settings.isAutoDeleteQueues() && (System.currentTimeMillis()
- consumerRemovedTimestamp >= settings.getAutoDeleteQueuesDelay())) {
    +                  if (ActiveMQServerLogger.LOGGER.isDebugEnabled()) {
    +                     ActiveMQServerLogger.LOGGER.info("deleting auto-created queue \""
+ queueName + ".\" consumerCount = " + consumerCount + "; messageCount = " + messageCount
+ "; isAutoDeleteQueues = " + settings.isAutoDeleteQueues());
    +                  }
    +
    +                  try {
    +                     server.destroyQueue(queueName, null, true, false);
    --- End diff --
    
    @michaelandrepearce is right, but I think it's worth mitigating the risk within the bounds
of the current locking scheme. What I don't want to do is introduce additional locking or
synchronization.


---

Mime
View raw message