public long scaleDown() throws Exception { ScaleDownHandler scaleDownHandler = new ScaleDownHandler(activeMQServer.getPagingManager(), activeMQServer.getPostOffice(), activeMQServer.getNodeManager(), activeMQServer.getClusterManager().getClusterController(), activeMQServer.getStorageManager()); ConcurrentMap<SimpleString, DuplicateIDCache> duplicateIDCaches = ((PostOfficeImpl) activeMQServer.getPostOffice()).getDuplicateIDCaches(); Map<SimpleString, List<Pair<byte[], Long>>> duplicateIDMap = new HashMap<>(); for (SimpleString address : duplicateIDCaches.keySet()) { DuplicateIDCache duplicateIDCache = activeMQServer.getPostOffice().getDuplicateIDCache(address); duplicateIDMap.put(address, duplicateIDCache.getMap()); } return scaleDownHandler.scaleDown(scaleDownClientSessionFactory, activeMQServer.getResourceManager(), duplicateIDMap, activeMQServer.getManagementService().getManagementAddress(), null); } }
@Override public ConnectorService createConnectorService(String connectorName, Map<String, Object> configuration, StorageManager storageManager, PostOffice postOffice, ScheduledExecutorService scheduledExecutorService) { String clusterId = (String)configuration.get(CLUSTER); Map<String, Object> connectorConfig = new HashMap<>(); connectorConfig.put(TransportConstants.HOST_PROP_NAME, configuration.get(TransportConstants.HOST_PROP_NAME)); connectorConfig.put(TransportConstants.PORT_PROP_NAME, configuration.get(TransportConstants.PORT_PROP_NAME)); setOrDefault(configuration, connectorConfig, TransportConstants.SSL_ENABLED_PROP_NAME, true); setOrDefault(configuration, connectorConfig, TransportConstants.VERIFY_HOST_PROP_NAME, false); setOrDefault(configuration, connectorConfig, TransportConstants.NEED_CLIENT_AUTH_PROP_NAME, true); setOrDefault(configuration, connectorConfig, TransportConstants.KEYSTORE_PATH_PROP_NAME, System.getenv("KEYSTORE_PATH")); setOrDefault(configuration, connectorConfig, TransportConstants.KEYSTORE_PASSWORD_PROP_NAME, "enmasse"); setOrDefault(configuration, connectorConfig, TransportConstants.TRUSTSTORE_PATH_PROP_NAME, System.getenv("TRUSTSTORE_PATH")); setOrDefault(configuration, connectorConfig, TransportConstants.TRUSTSTORE_PASSWORD_PROP_NAME, "enmasse"); setOrDefault(configuration, connectorConfig, TransportConstants.NETTY_CONNECT_TIMEOUT, "10000"); setOrDefault(configuration, connectorConfig, TransportConstants.SSL_PROVIDER, "OPENSSL"); Optional<String> sourceAddress = Optional.ofNullable((String)configuration.get(SOURCE_ADDRESS)); Optional<String> clientAddress = Optional.ofNullable((String)configuration.get(CLIENT_ADDRESS)); Optional<String> container = Optional.ofNullable((String)configuration.get(CONTAINER)); Optional<SubscriberInfo> info = sourceAddress.flatMap(s -> clientAddress.flatMap(c -> container.map(o -> new SubscriberInfo(o, s, c)))); ActiveMQAMQPLogger.LOGGER.infof("Creating connector host %s port %s", configuration.get(TransportConstants.HOST_PROP_NAME), configuration.get(TransportConstants.PORT_PROP_NAME)); String containerId = clusterId; if (container.isPresent()) { containerId = container.get(); } return new AMQPConnectorService(connectorName, connectorConfig, containerId, clusterId, info, ((PostOfficeImpl)postOffice).getServer(), scheduledExecutorService); }
@Override public Bindings getBindingsForAddress(final SimpleString address) throws Exception { Bindings bindings = addressManager.getBindingsForRoutingAddress(address); if (bindings == null) { bindings = createBindings(address); } return bindings; }
setPagingStore(address, message); applyExpiryDelay(message, address); if (!checkDuplicateID(message, context, rejectDuplicates, startedTX)) { return RoutingStatus.DUPLICATED_ID; route(message, context.getTransaction(), false); result = RoutingStatus.NO_BINDINGS_DLA; result = RoutingStatus.OK; try { processRoute(message, context, direct); } catch (ActiveMQAddressFullException e) { if (startedTX.get()) {
routeQueueInfo(message, queue, false); message = createQueueInfoMessage(CoreNotificationType.BINDING_ADDED, queueName); message.putIntProperty(ManagementHelper.HDR_DISTANCE, info.getDistance()); routeQueueInfo(message, queue, true); message = createQueueInfoMessage(CoreNotificationType.CONSUMER_CREATED, queueName); message.putIntProperty(ManagementHelper.HDR_DISTANCE, info.getDistance()); routeQueueInfo(message, queue, true); message = createQueueInfoMessage(CoreNotificationType.CONSUMER_CREATED, queueName); message.putIntProperty(ManagementHelper.HDR_DISTANCE, info.getDistance()); routeQueueInfo(message, queue, true); routeQueueInfo(completeMessage, queue, false);
confirmLargeMessageSend(tx, message); schedulePageDelivery(tx, entry); continue; confirmLargeMessageSend(tx, message);
AddressInfo addressInfo = getAddressInfo(address); AddressSettings settings = addressSettingsRepository.getMatch(address.toString()); if (addressInfo != null && !isAddressBound(address) && addressInfo.getBindingRemovedTimestamp() != -1 && (System.currentTimeMillis() - addressInfo.getBindingRemovedTimestamp() >= settings.getAutoDeleteAddressesDelay())) {
pagingManager.deletePageStore(binding.getAddress()); deleteDuplicateCache(binding.getAddress()); AddressInfo addressInfo = getAddressInfo(binding.getAddress()); if (addressInfo != null) { addressInfo.setBindingRemovedTimestamp(System.currentTimeMillis());
postOffice = new PostOfficeImpl(this, storageManager, pagingManager, queueFactory, managementService, configuration.getMessageExpiryScanPeriod(), configuration.getAddressQueueScanPeriod(), configuration.getWildcardConfiguration(), configuration.getIDCacheSize(), configuration.isPersistIDCache(), addressSettingsRepository);
@Test public void testDuplicateIDCacheJournalRetentionForNonTemporaryQueues() throws Exception { testDuplicateIDCacheMemoryRetention(false); server.stop(); waitForServerToStop(server); server.start(); Assert.assertEquals(0, ((PostOfficeImpl) server.getPostOffice()).getDuplicateIDCaches().size()); }
String sfPrefix = ((PostOfficeImpl) postOffice).getServer().getInternalNamingPrefix() + "sf."; if (address.toString().startsWith(sfPrefix)) { messageCount += scaleDownSNF(address, queues, producer);
@Test public void testDuplicateIDCacheJournalRetentionForTemporaryQueues() throws Exception { testDuplicateIDCacheMemoryRetention(true); server.stop(); waitForServerToStop(server); server.start(); Assert.assertEquals(0, ((PostOfficeImpl) server.getPostOffice()).getDuplicateIDCaches().size()); }
Assert.assertEquals(0, ((PostOfficeImpl) server.getPostOffice()).getDuplicateIDCaches().size()); Assert.assertEquals(2, ((PostOfficeImpl) server.getPostOffice()).getDuplicateIDCaches().size()); session.deleteQueue(queueName); Assert.assertEquals(0, ((PostOfficeImpl) server.getPostOffice()).getDuplicateIDCaches().size()); Assert.assertEquals(0, ((PostOfficeImpl) server.getPostOffice()).getDuplicateIDCaches().size());
.configurationManaged((queueBindingInfo.isConfigurationManaged())); final Queue queue = queueFactory.createQueueWith(queueConfigBuilder.build()); queue.setConsumersRefCount(new QueueManagerImpl(((PostOfficeImpl)postOffice).getServer(), queueBindingInfo.getQueueName()));