[jira] [Commented] (AMQ-7309) Add JMS 2.0 API support
[ https://issues.apache.org/jira/browse/AMQ-7309?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17551411#comment-17551411 ] Mats Andreassen commented on AMQ-7309: -- I didn't write it in my previous comment but my intention is to move from Java11 towards 17. As you probably are well aware, this means that the javax.jms package is evicted from the JDK. In other projects this has been more or less unproblematic but I use both the client library and the server library (in integration tests). Maybe I'm misunderstanding your suggestion because I don't see how the activemq-client code could run when the javax.jms package is missing. > Add JMS 2.0 API support > --- > > Key: AMQ-7309 > URL: https://issues.apache.org/jira/browse/AMQ-7309 > Project: ActiveMQ > Issue Type: New Feature > Components: Broker, JMS client >Reporter: Jean-Baptiste Onofré >Assignee: Jean-Baptiste Onofré >Priority: Major > Labels: #jms2 > Fix For: 5.18.0 > > Time Spent: 17h 20m > Remaining Estimate: 0h > > * API-only inclusion > * JMS 2.0 objects throw UnsupportedOperationException -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Created] (AMQCPP-718) Compilation failing for C++17 standard
Minhaajuddin Ahmad Khan created AMQCPP-718: -- Summary: Compilation failing for C++17 standard Key: AMQCPP-718 URL: https://issues.apache.org/jira/browse/AMQCPP-718 Project: ActiveMQ C++ Client Issue Type: Improvement Components: CMS Impl Affects Versions: 3.9.4 Environment: Fedora Reporter: Minhaajuddin Ahmad Khan Assignee: Timothy A. Bish Hello, CMS fails to compile for C++17 standard, error below : /home/minhaaj/bisrte-temp/build/vcpkg_installed/x64-linux/include/activemq/commands/ActiveMQMapMessage.h:70:34: error: ISO C++17 does not allow dynamic exception specifications 70 | virtual void clearBody() throw (cms::CMSException); | ^ Could you please make changes for the new standard. Regards Minhaaj -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Commented] (ARTEMIS-3848) High cpu usage on ReadWrite locks
[ https://issues.apache.org/jira/browse/ARTEMIS-3848?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17551367#comment-17551367 ] Clebert Suconic commented on ARTEMIS-3848: -- Some information on how to reproduce this issue if anyone intends to do it: Here is a way to reproduce this issue: clone my github sandbox project (I just created it). with the old version of the broker, create a broker: no need to auto-tune, the test will not send messages ./artemis create my-broker --no-autotune start the broker: cd my-broker/bin ./artemis run clone a project I just created for this: git clone https://github.com/clebertsuconic/sandbox cd sandbox/session-stress ./build.sh java -jar target/session-stress-0.2.SNAPSHOT-jar-with-dependencies.jar find the broker process with jps: jmap -dump:dump.hprof and inspect the generated hprof using Eclipse Memory Analyzer tool (MAT). Do the following OQL: select * from org.apache.activemq.artemis.utils.ActiveMQThreadFactory$1 and watch the retained HEAPs. for the large objects, inspect the threadLocal variable on each one of these threads. with the fix in place you should have just a handful of elements. > High cpu usage on ReadWrite locks > - > > Key: ARTEMIS-3848 > URL: https://issues.apache.org/jira/browse/ARTEMIS-3848 > Project: ActiveMQ Artemis > Issue Type: Bug >Affects Versions: 2.22.0 >Reporter: Clebert Suconic >Assignee: Clebert Suconic >Priority: Major > Fix For: 2.23.0 > > Time Spent: 2h > Remaining Estimate: 0h > > our HandlerBase is setting a boolean value if it's in handler. > I thought by setting it to null I was clearing the ThreadLocal variable, > however that's just creating a null entry. > What makes it worst is the fact that threadLocal was non static. as a result > we are getting a lot of entries on the ThreadLocal HashMap. as connections > come and go, that will generate a leak on the thread. > That will cause threads on the following stack trace to consume a lot of CPU: > at > java.lang.ThreadLocal$ThreadLocalMap.expungeStaleEntry(ThreadLocal.java:638) > at java.lang.ThreadLocal$ThreadLocalMap.remove(ThreadLocal.java:520) > at > java.lang.ThreadLocal$ThreadLocalMap.access$200(ThreadLocal.java:319) > at java.lang.ThreadLocal.remove(ThreadLocal.java:242) > at > java.util.concurrent.locks.ReentrantReadWriteLock$Sync.tryReleaseShared(ReentrantReadWriteLock.java:426) > at > java.util.concurrent.locks.AbstractQueuedSynchronizer.releaseShared(AbstractQueuedSynchronizer.java:1341) > at > java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock.unlock(ReentrantReadWriteLock.java:881) -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Work logged] (ARTEMIS-3850) Add Option to read messages into paging based on sizing and eliminate caching
[ https://issues.apache.org/jira/browse/ARTEMIS-3850?focusedWorklogId=779268&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-779268 ] ASF GitHub Bot logged work on ARTEMIS-3850: --- Author: ASF GitHub Bot Created on: 07/Jun/22 22:18 Start Date: 07/Jun/22 22:18 Worklog Time Spent: 10m Work Description: clebertsuconic commented on code in PR #4101: URL: https://github.com/apache/activemq-artemis/pull/4101#discussion_r891754596 ## artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java: ## @@ -1261,6 +1265,14 @@ protected Pair parseAddressSettings(final Node node) { long pageSizeLong = ByteUtil.convertTextBytes(getTrimmedTextContent(child)); Validators.POSITIVE_INT.validate(PAGE_SIZE_BYTES_NODE_NAME, pageSizeLong); addressSettings.setPageSizeBytes((int) pageSizeLong); + } else if (MAX_READ_PAGE_MESSAGES_NODE_NAME.equalsIgnoreCase(name)) { +long maxReadPageMessages = Long.parseLong(getTrimmedTextContent(child)); +Validators.POSITIVE_INT.validate(PAGE_SIZE_BYTES_NODE_NAME, maxReadPageMessages); +addressSettings.setMaxReadPageMessages((int)maxReadPageMessages); + } else if (MAX_READ_PAGE_BYTES_NODE_NAME.equalsIgnoreCase(name)) { +long maxReadPageBytes = ByteUtil.convertTextBytes(getTrimmedTextContent(child)); +Validators.POSITIVE_INT.validate(PAGE_SIZE_BYTES_NODE_NAME, maxReadPageBytes); Review Comment: wow... you're good man! thanks! Issue Time Tracking --- Worklog Id: (was: 779268) Time Spent: 3h 20m (was: 3h 10m) > Add Option to read messages into paging based on sizing and eliminate caching > - > > Key: ARTEMIS-3850 > URL: https://issues.apache.org/jira/browse/ARTEMIS-3850 > Project: ActiveMQ Artemis > Issue Type: New Feature >Affects Versions: 2.22.0 >Reporter: Clebert Suconic >Assignee: Clebert Suconic >Priority: Major > Fix For: 2.24.0 > > Time Spent: 3h 20m > Remaining Estimate: 0h > -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Work logged] (ARTEMIS-3850) Add Option to read messages into paging based on sizing and eliminate caching
[ https://issues.apache.org/jira/browse/ARTEMIS-3850?focusedWorklogId=779267&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-779267 ] ASF GitHub Bot logged work on ARTEMIS-3850: --- Author: ASF GitHub Bot Created on: 07/Jun/22 22:10 Start Date: 07/Jun/22 22:10 Worklog Time Spent: 10m Work Description: clebertsuconic commented on code in PR #4101: URL: https://github.com/apache/activemq-artemis/pull/4101#discussion_r891750604 ## artemis-server/src/main/java/org/apache/activemq/artemis/core/paging/impl/Page.java: ## @@ -17,57 +17,80 @@ package org.apache.activemq.artemis.core.paging.impl; import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Consumer; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.Unpooled; import org.apache.activemq.artemis.api.core.SimpleString; -import org.apache.activemq.artemis.core.buffers.impl.ChannelBufferWrapper; +import org.apache.activemq.artemis.core.io.IOCallback; import org.apache.activemq.artemis.core.io.SequentialFile; import org.apache.activemq.artemis.core.io.SequentialFileFactory; import org.apache.activemq.artemis.core.paging.PagedMessage; -import org.apache.activemq.artemis.core.paging.cursor.LivePageCache; import org.apache.activemq.artemis.core.paging.cursor.PageSubscriptionCounter; import org.apache.activemq.artemis.core.persistence.StorageManager; import org.apache.activemq.artemis.core.server.ActiveMQMessageBundle; import org.apache.activemq.artemis.core.server.ActiveMQServerLogger; import org.apache.activemq.artemis.core.server.LargeServerMessage; -import org.apache.activemq.artemis.utils.DataConstants; -import org.apache.activemq.artemis.utils.Env; +import org.apache.activemq.artemis.utils.ReferenceCounterUtil; import org.apache.activemq.artemis.utils.collections.ConcurrentHashSet; +import org.apache.activemq.artemis.utils.collections.EmptyList; +import org.apache.activemq.artemis.utils.collections.LinkedList; +import org.apache.activemq.artemis.utils.collections.LinkedListImpl; +import org.apache.activemq.artemis.utils.collections.LinkedListIterator; import org.jboss.logging.Logger; public final class Page implements Comparable { + private static final AtomicInteger factory = new AtomicInteger(0); + + private final int seqInt = factory.incrementAndGet(); + private static final Logger logger = Logger.getLogger(Page.class); - public static final int SIZE_RECORD = DataConstants.SIZE_BYTE + DataConstants.SIZE_INT + DataConstants.SIZE_BYTE; + private final ReferenceCounterUtil referenceCounter = new ReferenceCounterUtil(); - private static final byte START_BYTE = (byte) '{'; + public void usageReset() { + referenceCounter.reset(); + } - private static final byte END_BYTE = (byte) '}'; + public int usageUp() { + return referenceCounter.increment(); + } + + public int usageDown() { + return referenceCounter.decrement(); + } - private final int pageId; + /** This is an utility method to help you call usageDown while using a try (closeable) call. +* */ Review Comment: I am removing the method Issue Time Tracking --- Worklog Id: (was: 779267) Time Spent: 3h 10m (was: 3h) > Add Option to read messages into paging based on sizing and eliminate caching > - > > Key: ARTEMIS-3850 > URL: https://issues.apache.org/jira/browse/ARTEMIS-3850 > Project: ActiveMQ Artemis > Issue Type: New Feature >Affects Versions: 2.22.0 >Reporter: Clebert Suconic >Assignee: Clebert Suconic >Priority: Major > Fix For: 2.24.0 > > Time Spent: 3h 10m > Remaining Estimate: 0h > -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Work logged] (ARTEMIS-3850) Add Option to read messages into paging based on sizing and eliminate caching
[ https://issues.apache.org/jira/browse/ARTEMIS-3850?focusedWorklogId=779261&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-779261 ] ASF GitHub Bot logged work on ARTEMIS-3850: --- Author: ASF GitHub Bot Created on: 07/Jun/22 20:59 Start Date: 07/Jun/22 20:59 Worklog Time Spent: 10m Work Description: clebertsuconic commented on code in PR #4101: URL: https://github.com/apache/activemq-artemis/pull/4101#discussion_r891704311 ## artemis-server/src/main/java/org/apache/activemq/artemis/core/paging/cursor/impl/PageSubscriptionImpl.java: ## @@ -1444,20 +1276,39 @@ public List getRelatedMessageReferences() { private class CursorIterator implements PageIterator { - private PagePositionAndFileOffset position = null; + // The cursorLogger is declared as static on the class, just to avoid a getLogger() call every time + private final Logger logger = cursorLogger; Review Comment: I would get this compilation error if I declared it static final: ``` Static declarations in inner classes are not supported at language level '11' ``` I wanted to use a different logger for the inner class... but I will now just use the top logger, it's for tracing only anyways Issue Time Tracking --- Worklog Id: (was: 779261) Time Spent: 3h (was: 2h 50m) > Add Option to read messages into paging based on sizing and eliminate caching > - > > Key: ARTEMIS-3850 > URL: https://issues.apache.org/jira/browse/ARTEMIS-3850 > Project: ActiveMQ Artemis > Issue Type: New Feature >Affects Versions: 2.22.0 >Reporter: Clebert Suconic >Assignee: Clebert Suconic >Priority: Major > Fix For: 2.24.0 > > Time Spent: 3h > Remaining Estimate: 0h > -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Work logged] (ARTEMIS-3850) Add Option to read messages into paging based on sizing and eliminate caching
[ https://issues.apache.org/jira/browse/ARTEMIS-3850?focusedWorklogId=779259&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-779259 ] ASF GitHub Bot logged work on ARTEMIS-3850: --- Author: ASF GitHub Bot Created on: 07/Jun/22 20:58 Start Date: 07/Jun/22 20:58 Worklog Time Spent: 10m Work Description: clebertsuconic commented on code in PR #4101: URL: https://github.com/apache/activemq-artemis/pull/4101#discussion_r891704311 ## artemis-server/src/main/java/org/apache/activemq/artemis/core/paging/cursor/impl/PageSubscriptionImpl.java: ## @@ -1444,20 +1276,39 @@ public List getRelatedMessageReferences() { private class CursorIterator implements PageIterator { - private PagePositionAndFileOffset position = null; + // The cursorLogger is declared as static on the class, just to avoid a getLogger() call every time + private final Logger logger = cursorLogger; Review Comment: I would get this compilation error if I declared it static final: Static declarations in inner classes are not supported at language level '11' I wanted to use a different logger for the inner class... but I will now just use the top logger, it's for tracing only anyways Issue Time Tracking --- Worklog Id: (was: 779259) Time Spent: 2h 50m (was: 2h 40m) > Add Option to read messages into paging based on sizing and eliminate caching > - > > Key: ARTEMIS-3850 > URL: https://issues.apache.org/jira/browse/ARTEMIS-3850 > Project: ActiveMQ Artemis > Issue Type: New Feature >Affects Versions: 2.22.0 >Reporter: Clebert Suconic >Assignee: Clebert Suconic >Priority: Major > Fix For: 2.24.0 > > Time Spent: 2h 50m > Remaining Estimate: 0h > -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Work logged] (ARTEMIS-3850) Add Option to read messages into paging based on sizing and eliminate caching
[ https://issues.apache.org/jira/browse/ARTEMIS-3850?focusedWorklogId=779252&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-779252 ] ASF GitHub Bot logged work on ARTEMIS-3850: --- Author: ASF GitHub Bot Created on: 07/Jun/22 20:32 Start Date: 07/Jun/22 20:32 Worklog Time Spent: 10m Work Description: clebertsuconic commented on code in PR #4101: URL: https://github.com/apache/activemq-artemis/pull/4101#discussion_r891684103 ## artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/QueueImpl.java: ## @@ -207,8 +208,8 @@ private void checkIDSupplier(NodeStore nodeStore) { // The quantity of pagedReferences on messageReferences priority list private final AtomicInteger pagedReferences = new AtomicInteger(0); - // The estimate of memory being consumed by this queue. Used to calculate instances of messages to depage - final AtomicInteger queueMemorySize = new AtomicInteger(0); + + final SizeAwareMetric queueMemorySize = new SizeAwareMetric(); Review Comment: @gemmellr I preferred to use the SizeAwareMetric here instead of introducing a new counter. Issue Time Tracking --- Worklog Id: (was: 779252) Time Spent: 2h 40m (was: 2.5h) > Add Option to read messages into paging based on sizing and eliminate caching > - > > Key: ARTEMIS-3850 > URL: https://issues.apache.org/jira/browse/ARTEMIS-3850 > Project: ActiveMQ Artemis > Issue Type: New Feature >Affects Versions: 2.22.0 >Reporter: Clebert Suconic >Assignee: Clebert Suconic >Priority: Major > Fix For: 2.24.0 > > Time Spent: 2h 40m > Remaining Estimate: 0h > -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Work logged] (ARTEMIS-3850) Add Option to read messages into paging based on sizing and eliminate caching
[ https://issues.apache.org/jira/browse/ARTEMIS-3850?focusedWorklogId=779249&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-779249 ] ASF GitHub Bot logged work on ARTEMIS-3850: --- Author: ASF GitHub Bot Created on: 07/Jun/22 20:26 Start Date: 07/Jun/22 20:26 Worklog Time Spent: 10m Work Description: clebertsuconic commented on code in PR #4101: URL: https://github.com/apache/activemq-artemis/pull/4101#discussion_r891678995 ## docs/user-manual/en/paging.md: ## @@ -96,12 +96,20 @@ Property Name|Description|Default `max-size-messages`|The max number of messages the address could have before entering on page mode.| -1 (disabled) `page-size-bytes`|The size of each page file used on the paging system|10MB `address-full-policy`|This must be set to `PAGE` for paging to enable. If the value is `PAGE` then further messages will be paged to disk. If the value is `DROP` then further messages will be silently dropped. If the value is `FAIL` then the messages will be dropped and the client message producers will receive an exception. If the value is `BLOCK` then client message producers will block when they try and send further messages.|`PAGE` -`page-max-cache-size`|The system will keep up to `page-max-cache-size` page files in memory to optimize IO during paging navigation.|5 +`max-read-page-messages` | how many message can be read from paging into the Queue whenever more messages are needed. The system wtill stop reading if `max-read-page-bytes hits the limit first. +`max-read-page-bytes` | how much memory the messages read from paging can take on the Queue whenever more messages are needed. The system will stop reading if `max-read-page-messages` hits the limit first. +`page-max-cache-size`|Deprecated and not used: `max-read-page-messages` and `max-read-page-bytes` will replace this functionality. Review Comment: Not currently.. no... It's a good idea.. I will log a message. Issue Time Tracking --- Worklog Id: (was: 779249) Time Spent: 2.5h (was: 2h 20m) > Add Option to read messages into paging based on sizing and eliminate caching > - > > Key: ARTEMIS-3850 > URL: https://issues.apache.org/jira/browse/ARTEMIS-3850 > Project: ActiveMQ Artemis > Issue Type: New Feature >Affects Versions: 2.22.0 >Reporter: Clebert Suconic >Assignee: Clebert Suconic >Priority: Major > Fix For: 2.24.0 > > Time Spent: 2.5h > Remaining Estimate: 0h > -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Work logged] (ARTEMIS-3850) Add Option to read messages into paging based on sizing and eliminate caching
[ https://issues.apache.org/jira/browse/ARTEMIS-3850?focusedWorklogId=779248&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-779248 ] ASF GitHub Bot logged work on ARTEMIS-3850: --- Author: ASF GitHub Bot Created on: 07/Jun/22 20:25 Start Date: 07/Jun/22 20:25 Worklog Time Spent: 10m Work Description: clebertsuconic commented on code in PR #4101: URL: https://github.com/apache/activemq-artemis/pull/4101#discussion_r891678350 ## artemis-server/src/test/java/org/apache/activemq/artemis/core/paging/cursor/impl/PageCursorProviderAccessor.java: ## @@ -5,20 +5,23 @@ * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * + * + * http://www.apache.org/licenses/LICENSE-2.0 + * Review Comment: I'm not sure what weird setting on my IDE cause these changes... will fix it.. thanks Issue Time Tracking --- Worklog Id: (was: 779248) Time Spent: 2h 20m (was: 2h 10m) > Add Option to read messages into paging based on sizing and eliminate caching > - > > Key: ARTEMIS-3850 > URL: https://issues.apache.org/jira/browse/ARTEMIS-3850 > Project: ActiveMQ Artemis > Issue Type: New Feature >Affects Versions: 2.22.0 >Reporter: Clebert Suconic >Assignee: Clebert Suconic >Priority: Major > Fix For: 2.24.0 > > Time Spent: 2h 20m > Remaining Estimate: 0h > -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Work logged] (ARTEMIS-3850) Add Option to read messages into paging based on sizing and eliminate caching
[ https://issues.apache.org/jira/browse/ARTEMIS-3850?focusedWorklogId=779244&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-779244 ] ASF GitHub Bot logged work on ARTEMIS-3850: --- Author: ASF GitHub Bot Created on: 07/Jun/22 20:16 Start Date: 07/Jun/22 20:16 Worklog Time Spent: 10m Work Description: clebertsuconic commented on code in PR #4101: URL: https://github.com/apache/activemq-artemis/pull/4101#discussion_r891671137 ## artemis-server/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/wireformat/ReplicationPageEventMessage.java: ## @@ -54,7 +54,7 @@ public int expectedEncodeSize() { @Override public void encodeRest(final ActiveMQBuffer buffer) { buffer.writeSimpleString(storeName); - buffer.writeInt(pageNumber); + buffer.writeInt((int)pageNumber); Review Comment: sh***t I forgot about this... I will need some versioning work here. Thanks... Issue Time Tracking --- Worklog Id: (was: 779244) Time Spent: 2h 10m (was: 2h) > Add Option to read messages into paging based on sizing and eliminate caching > - > > Key: ARTEMIS-3850 > URL: https://issues.apache.org/jira/browse/ARTEMIS-3850 > Project: ActiveMQ Artemis > Issue Type: New Feature >Affects Versions: 2.22.0 >Reporter: Clebert Suconic >Assignee: Clebert Suconic >Priority: Major > Fix For: 2.24.0 > > Time Spent: 2h 10m > Remaining Estimate: 0h > -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Work logged] (ARTEMIS-3850) Add Option to read messages into paging based on sizing and eliminate caching
[ https://issues.apache.org/jira/browse/ARTEMIS-3850?focusedWorklogId=779243&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-779243 ] ASF GitHub Bot logged work on ARTEMIS-3850: --- Author: ASF GitHub Bot Created on: 07/Jun/22 20:15 Start Date: 07/Jun/22 20:15 Worklog Time Spent: 10m Work Description: clebertsuconic commented on code in PR #4101: URL: https://github.com/apache/activemq-artemis/pull/4101#discussion_r891670677 ## artemis-server/src/main/java/org/apache/activemq/artemis/core/paging/impl/Page.java: ## @@ -543,77 +283,110 @@ public boolean delete(final PagedMessage[] messages) throws Exception { logger.debugf("Deleting pageNr=%d on store %s", pageId, storeName); } - final List largeMessageIds; - if (messages != null && messages.length > 0) { - largeMessageIds = new ArrayList<>(); - for (PagedMessage msg : messages) { -if ((msg.getMessage()).isLargeMessage()) { - // this will trigger large message delete: no need to do it - // for non-large messages! - msg.getMessage().usageDown(); - largeMessageIds.add(msg.getMessage().getMessageID()); + if (messages != null) { + try (LinkedListIterator iter = messages.iterator()) { +while (iter.hasNext()) { + PagedMessage msg = iter.next(); + if ((msg.getMessage()).isLargeMessage()) { + ((LargeServerMessage)(msg.getMessage())).deleteFile(); + msg.getMessage().usageDown(); + } } } - } else { - largeMessageIds = Collections.emptyList(); } - try { - if (!storageManager.waitOnOperations(5000)) { - ActiveMQServerLogger.LOGGER.timedOutWaitingForLargeMessagesDeletion(largeMessageIds); + storageManager.afterCompleteOperations(new IOCallback() { + @Override + public void done() { +try { + if (suspiciousRecords) { + ActiveMQServerLogger.LOGGER.pageInvalid(file.getFileName(), file.getFileName()); + file.renameTo(file.getFileName() + ".invalidPage"); + } else { + file.delete(); + } + referenceCounter.reset(); +} catch (Exception e) { + ActiveMQServerLogger.LOGGER.pageDeleteError(e); +} } - if (suspiciousRecords) { -ActiveMQServerLogger.LOGGER.pageInvalid(file.getFileName(), file.getFileName()); -file.renameTo(file.getFileName() + ".invalidPage"); - } else { -file.delete(); + + @Override + public void onError(int errorCode, String errorMessage) { + } + }); - return true; - } catch (Exception e) { - ActiveMQServerLogger.LOGGER.pageDeleteError(e); - return false; + return true; + } + + public int readNumberOfMessages() throws Exception { + boolean wasOpen = isOpen(); + + if (!wasOpen) { + if (!open(false)) { +return 0; + } + } + + try { + int numberOfMessages = PageReadWriter.readFromSequentialFile(this.storageManager, + this.storeName, + this.fileFactory, + this.file, + this.pageId, + null, + PageReadWriter.SKIP_ALL, + null, + null); + if (logger.isDebugEnabled()) { +logger.debug(">>> Reading numberOfMessages page " + this.pageId + ", returning " + numberOfMessages); + } + return numberOfMessages; + } finally { + if (!wasOpen) { +close(false); + } } } public int getNumberOfMessages() { - return numberOfMessages.intValue(); + return numberOfMessages; } public int getSize() { - return size.intValue(); + return size; } - @Override - public String toString() { - return "Page::pageNr=" + this.pageId + ", file=" + this.file; + private void setSize(int size) { + this.size = size; } @Override - public int compareTo(Page otherPage) { - return otherPage.getPageId() - this.pageId; + public String toString() { + return "Page::seqCreation=" + seqInt + ", pageNr=" + this.pageId + ", file=" +
[jira] [Work logged] (ARTEMIS-3850) Add Option to read messages into paging based on sizing and eliminate caching
[ https://issues.apache.org/jira/browse/ARTEMIS-3850?focusedWorklogId=779241&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-779241 ] ASF GitHub Bot logged work on ARTEMIS-3850: --- Author: ASF GitHub Bot Created on: 07/Jun/22 20:14 Start Date: 07/Jun/22 20:14 Worklog Time Spent: 10m Work Description: clebertsuconic commented on code in PR #4101: URL: https://github.com/apache/activemq-artemis/pull/4101#discussion_r891670139 ## artemis-commons/src/main/java/org/apache/activemq/artemis/utils/SizeAwareMetric.java: ## @@ -59,6 +59,13 @@ public interface AddCallback { private Runnable underCallback; + /** To be used in a case where we just measure elements */ + public SizeAwareMetric() { + this.sizeEnabled = false; + this.elementsEnabled = false; + } Review Comment: I will keep the SizeAwareMetric here. Issue Time Tracking --- Worklog Id: (was: 779241) Time Spent: 1h 50m (was: 1h 40m) > Add Option to read messages into paging based on sizing and eliminate caching > - > > Key: ARTEMIS-3850 > URL: https://issues.apache.org/jira/browse/ARTEMIS-3850 > Project: ActiveMQ Artemis > Issue Type: New Feature >Affects Versions: 2.22.0 >Reporter: Clebert Suconic >Assignee: Clebert Suconic >Priority: Major > Fix For: 2.24.0 > > Time Spent: 1h 50m > Remaining Estimate: 0h > -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Work logged] (ARTEMIS-3850) Add Option to read messages into paging based on sizing and eliminate caching
[ https://issues.apache.org/jira/browse/ARTEMIS-3850?focusedWorklogId=779220&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-779220 ] ASF GitHub Bot logged work on ARTEMIS-3850: --- Author: ASF GitHub Bot Created on: 07/Jun/22 19:29 Start Date: 07/Jun/22 19:29 Worklog Time Spent: 10m Work Description: clebertsuconic commented on code in PR #4101: URL: https://github.com/apache/activemq-artemis/pull/4101#discussion_r891633938 ## artemis-server/src/main/java/org/apache/activemq/artemis/core/paging/impl/Page.java: ## @@ -543,77 +283,110 @@ public boolean delete(final PagedMessage[] messages) throws Exception { logger.debugf("Deleting pageNr=%d on store %s", pageId, storeName); } - final List largeMessageIds; - if (messages != null && messages.length > 0) { - largeMessageIds = new ArrayList<>(); - for (PagedMessage msg : messages) { -if ((msg.getMessage()).isLargeMessage()) { - // this will trigger large message delete: no need to do it - // for non-large messages! - msg.getMessage().usageDown(); - largeMessageIds.add(msg.getMessage().getMessageID()); + if (messages != null) { + try (LinkedListIterator iter = messages.iterator()) { +while (iter.hasNext()) { + PagedMessage msg = iter.next(); + if ((msg.getMessage()).isLargeMessage()) { + ((LargeServerMessage)(msg.getMessage())).deleteFile(); + msg.getMessage().usageDown(); + } } } - } else { - largeMessageIds = Collections.emptyList(); } - try { - if (!storageManager.waitOnOperations(5000)) { - ActiveMQServerLogger.LOGGER.timedOutWaitingForLargeMessagesDeletion(largeMessageIds); + storageManager.afterCompleteOperations(new IOCallback() { + @Override + public void done() { +try { + if (suspiciousRecords) { + ActiveMQServerLogger.LOGGER.pageInvalid(file.getFileName(), file.getFileName()); + file.renameTo(file.getFileName() + ".invalidPage"); + } else { + file.delete(); + } + referenceCounter.reset(); +} catch (Exception e) { + ActiveMQServerLogger.LOGGER.pageDeleteError(e); +} } - if (suspiciousRecords) { -ActiveMQServerLogger.LOGGER.pageInvalid(file.getFileName(), file.getFileName()); -file.renameTo(file.getFileName() + ".invalidPage"); - } else { -file.delete(); + + @Override + public void onError(int errorCode, String errorMessage) { + } + }); - return true; - } catch (Exception e) { - ActiveMQServerLogger.LOGGER.pageDeleteError(e); - return false; + return true; + } + + public int readNumberOfMessages() throws Exception { + boolean wasOpen = isOpen(); + + if (!wasOpen) { + if (!open(false)) { +return 0; + } + } + + try { + int numberOfMessages = PageReadWriter.readFromSequentialFile(this.storageManager, + this.storeName, + this.fileFactory, + this.file, + this.pageId, + null, + PageReadWriter.SKIP_ALL, + null, + null); + if (logger.isDebugEnabled()) { +logger.debug(">>> Reading numberOfMessages page " + this.pageId + ", returning " + numberOfMessages); + } + return numberOfMessages; + } finally { + if (!wasOpen) { +close(false); + } } } public int getNumberOfMessages() { - return numberOfMessages.intValue(); + return numberOfMessages; } public int getSize() { - return size.intValue(); + return size; } - @Override - public String toString() { - return "Page::pageNr=" + this.pageId + ", file=" + this.file; + private void setSize(int size) { + this.size = size; } @Override - public int compareTo(Page otherPage) { - return otherPage.getPageId() - this.pageId; + public String toString() { + return "Page::seqCreation=" + seqInt + ", pageNr=" + this.pageId + ", file=" +
[jira] [Work logged] (ARTEMIS-3851) MQTT subscription queues exist after restart despite CleanSession=1
[ https://issues.apache.org/jira/browse/ARTEMIS-3851?focusedWorklogId=779190&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-779190 ] ASF GitHub Bot logged work on ARTEMIS-3851: --- Author: ASF GitHub Bot Created on: 07/Jun/22 17:01 Start Date: 07/Jun/22 17:01 Worklog Time Spent: 10m Work Description: clebertsuconic commented on PR #4103: URL: https://github.com/apache/activemq-artemis/pull/4103#issuecomment-1148933232 @jbertram there's a test failure introduced by this PR: org.apache.activemq.artemis.tests.integration.mqtt.PahoMQTTQOS2SecurityTest.testSendAndReceiveMQTT Issue Time Tracking --- Worklog Id: (was: 779190) Time Spent: 20m (was: 10m) > MQTT subscription queues exist after restart despite CleanSession=1 > --- > > Key: ARTEMIS-3851 > URL: https://issues.apache.org/jira/browse/ARTEMIS-3851 > Project: ActiveMQ Artemis > Issue Type: Bug >Reporter: Justin Bertram >Assignee: Justin Bertram >Priority: Major > Time Spent: 20m > Remaining Estimate: 0h > > MQTT subscription queues are not cleaned up if the broker goes down while the > consumer is connected. > To reproduce the issue: > # Run AMQ broker with standard configuration (addresses and queues are > auto-created) > # Run a MQTT consumer connecting to the target topic with > {{CleanSession=true}}. At this point a subscription queue will be created on > the address for the MQTT topic. > # Run a MQTT producer sending messages into the target topic. > # Since the producer is running, the consumer is receiving the messages. > # Shutdown AMQ (it can be done gracefully or by killing -9 it). > # Stop the MQTT producer. > # Stop the MQTT consumer > # Start the broker. After it is restarted, the old queue associated to the > MQTT consumer is still there and it's not deleted. > # Run again the MQTT producer. The broker continues enqueuing messages into > the old subscription queue. > # Stop the MQTT producer. The queue stops growing but it's still there with > messages inside. > The MQTT 3.1.1 specification states in [section > 3.1.2.4|http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc398718030]: > bq. If CleanSession is set to 1, the Client and Server MUST discard any > previous Session and start a new one. This Session lasts as long as the > Network Connection. State data associated with this Session MUST NOT be > reused in any subsequent Session [MQTT-3.1.2-6]. > When the broker is stopped the network connection is terminated so the > session's state data (including any messages for any subscriptions) should be > removed. > To be clear, this works differently in MQTT 5 where {{CleanSession}} became > {{CleanStart}} and session expiry interval was added. -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Closed] (ARTEMIS-3853) Ping command for IPv6 is wrong on Windows
[ https://issues.apache.org/jira/browse/ARTEMIS-3853?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Clebert Suconic closed ARTEMIS-3853. Fix Version/s: 2.23.0 Resolution: Fixed > Ping command for IPv6 is wrong on Windows > - > > Key: ARTEMIS-3853 > URL: https://issues.apache.org/jira/browse/ARTEMIS-3853 > Project: ActiveMQ Artemis > Issue Type: Bug >Reporter: Domenico Francesco Bruscino >Assignee: Domenico Francesco Bruscino >Priority: Minor > Fix For: 2.23.0 > > Time Spent: 10m > Remaining Estimate: 0h > > The ping for IPv6 command used is not working properly on Windows, we should > be using 'ping -6 -n 1 -w %d %s'. -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Commented] (ARTEMIS-3853) Ping command for IPv6 is wrong on Windows
[ https://issues.apache.org/jira/browse/ARTEMIS-3853?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17551163#comment-17551163 ] ASF subversion and git services commented on ARTEMIS-3853: -- Commit 8d27f3e333a346c9dfacc48d40c9fc60f77c4df5 in activemq-artemis's branch refs/heads/main from Domenico Francesco Bruscino [ https://gitbox.apache.org/repos/asf?p=activemq-artemis.git;h=8d27f3e333 ] ARTEMIS-3853 Fix default ping command IPv6 for Windows > Ping command for IPv6 is wrong on Windows > - > > Key: ARTEMIS-3853 > URL: https://issues.apache.org/jira/browse/ARTEMIS-3853 > Project: ActiveMQ Artemis > Issue Type: Bug >Reporter: Domenico Francesco Bruscino >Assignee: Domenico Francesco Bruscino >Priority: Minor > Time Spent: 10m > Remaining Estimate: 0h > > The ping for IPv6 command used is not working properly on Windows, we should > be using 'ping -6 -n 1 -w %d %s'. -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Work logged] (ARTEMIS-3853) Ping command for IPv6 is wrong on Windows
[ https://issues.apache.org/jira/browse/ARTEMIS-3853?focusedWorklogId=779158&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-779158 ] ASF GitHub Bot logged work on ARTEMIS-3853: --- Author: ASF GitHub Bot Created on: 07/Jun/22 15:51 Start Date: 07/Jun/22 15:51 Worklog Time Spent: 10m Work Description: clebertsuconic merged PR #4106: URL: https://github.com/apache/activemq-artemis/pull/4106 Issue Time Tracking --- Worklog Id: (was: 779158) Remaining Estimate: 0h Time Spent: 10m > Ping command for IPv6 is wrong on Windows > - > > Key: ARTEMIS-3853 > URL: https://issues.apache.org/jira/browse/ARTEMIS-3853 > Project: ActiveMQ Artemis > Issue Type: Bug >Reporter: Domenico Francesco Bruscino >Assignee: Domenico Francesco Bruscino >Priority: Minor > Time Spent: 10m > Remaining Estimate: 0h > > The ping for IPv6 command used is not working properly on Windows, we should > be using 'ping -6 -n 1 -w %d %s'. -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Updated] (ARTEMIS-3700) Provide JakartaEE 10 artefacts and support
[ https://issues.apache.org/jira/browse/ARTEMIS-3700?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Clebert Suconic updated ARTEMIS-3700: - Issue Type: New Feature (was: Improvement) > Provide JakartaEE 10 artefacts and support > -- > > Key: ARTEMIS-3700 > URL: https://issues.apache.org/jira/browse/ARTEMIS-3700 > Project: ActiveMQ Artemis > Issue Type: New Feature > Components: API >Affects Versions: 2.20.0 >Reporter: Emmanuel Hugonnet >Priority: Major > Fix For: 2.23.0 > > Time Spent: 2h 10m > Remaining Estimate: 0h > > With Jakarta Messaging 3.1 to be released we should plan to provide support > of the new set of APIs. -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Closed] (ARTEMIS-3700) Provide JakartaEE 10 artefacts and support
[ https://issues.apache.org/jira/browse/ARTEMIS-3700?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Clebert Suconic closed ARTEMIS-3700. Resolution: Fixed > Provide JakartaEE 10 artefacts and support > -- > > Key: ARTEMIS-3700 > URL: https://issues.apache.org/jira/browse/ARTEMIS-3700 > Project: ActiveMQ Artemis > Issue Type: New Feature > Components: API >Affects Versions: 2.20.0 >Reporter: Emmanuel Hugonnet >Priority: Major > Fix For: 2.23.0 > > Time Spent: 2h 10m > Remaining Estimate: 0h > > With Jakarta Messaging 3.1 to be released we should plan to provide support > of the new set of APIs. -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Reopened] (ARTEMIS-3700) Provide JakartaEE 10 artefacts and support
[ https://issues.apache.org/jira/browse/ARTEMIS-3700?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Clebert Suconic reopened ARTEMIS-3700: -- > Provide JakartaEE 10 artefacts and support > -- > > Key: ARTEMIS-3700 > URL: https://issues.apache.org/jira/browse/ARTEMIS-3700 > Project: ActiveMQ Artemis > Issue Type: Improvement > Components: API >Affects Versions: 2.20.0 >Reporter: Emmanuel Hugonnet >Priority: Major > Fix For: 2.23.0 > > Time Spent: 2h 10m > Remaining Estimate: 0h > > With Jakarta Messaging 3.1 to be released we should plan to provide support > of the new set of APIs. -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Work logged] (ARTEMIS-3850) Add Option to read messages into paging based on sizing and eliminate caching
[ https://issues.apache.org/jira/browse/ARTEMIS-3850?focusedWorklogId=779139&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-779139 ] ASF GitHub Bot logged work on ARTEMIS-3850: --- Author: ASF GitHub Bot Created on: 07/Jun/22 14:52 Start Date: 07/Jun/22 14:52 Worklog Time Spent: 10m Work Description: gemmellr commented on code in PR #4101: URL: https://github.com/apache/activemq-artemis/pull/4101#discussion_r891298940 ## artemis-server/src/main/java/org/apache/activemq/artemis/core/paging/impl/Page.java: ## @@ -543,77 +283,110 @@ public boolean delete(final PagedMessage[] messages) throws Exception { logger.debugf("Deleting pageNr=%d on store %s", pageId, storeName); } - final List largeMessageIds; - if (messages != null && messages.length > 0) { - largeMessageIds = new ArrayList<>(); - for (PagedMessage msg : messages) { -if ((msg.getMessage()).isLargeMessage()) { - // this will trigger large message delete: no need to do it - // for non-large messages! - msg.getMessage().usageDown(); - largeMessageIds.add(msg.getMessage().getMessageID()); + if (messages != null) { + try (LinkedListIterator iter = messages.iterator()) { +while (iter.hasNext()) { + PagedMessage msg = iter.next(); + if ((msg.getMessage()).isLargeMessage()) { + ((LargeServerMessage)(msg.getMessage())).deleteFile(); + msg.getMessage().usageDown(); + } } } - } else { - largeMessageIds = Collections.emptyList(); } - try { - if (!storageManager.waitOnOperations(5000)) { - ActiveMQServerLogger.LOGGER.timedOutWaitingForLargeMessagesDeletion(largeMessageIds); + storageManager.afterCompleteOperations(new IOCallback() { + @Override + public void done() { +try { + if (suspiciousRecords) { + ActiveMQServerLogger.LOGGER.pageInvalid(file.getFileName(), file.getFileName()); + file.renameTo(file.getFileName() + ".invalidPage"); + } else { + file.delete(); + } + referenceCounter.reset(); +} catch (Exception e) { + ActiveMQServerLogger.LOGGER.pageDeleteError(e); +} } - if (suspiciousRecords) { -ActiveMQServerLogger.LOGGER.pageInvalid(file.getFileName(), file.getFileName()); -file.renameTo(file.getFileName() + ".invalidPage"); - } else { -file.delete(); + + @Override + public void onError(int errorCode, String errorMessage) { + } + }); - return true; - } catch (Exception e) { - ActiveMQServerLogger.LOGGER.pageDeleteError(e); - return false; + return true; + } + + public int readNumberOfMessages() throws Exception { + boolean wasOpen = isOpen(); + + if (!wasOpen) { + if (!open(false)) { +return 0; + } + } + + try { + int numberOfMessages = PageReadWriter.readFromSequentialFile(this.storageManager, + this.storeName, + this.fileFactory, + this.file, + this.pageId, + null, + PageReadWriter.SKIP_ALL, + null, + null); + if (logger.isDebugEnabled()) { +logger.debug(">>> Reading numberOfMessages page " + this.pageId + ", returning " + numberOfMessages); + } + return numberOfMessages; + } finally { + if (!wasOpen) { +close(false); + } } } public int getNumberOfMessages() { - return numberOfMessages.intValue(); + return numberOfMessages; } public int getSize() { - return size.intValue(); + return size; } - @Override - public String toString() { - return "Page::pageNr=" + this.pageId + ", file=" + this.file; + private void setSize(int size) { + this.size = size; } @Override - public int compareTo(Page otherPage) { - return otherPage.getPageId() - this.pageId; + public String toString() { + return "Page::seqCreation=" + seqInt + ", pageNr=" + this.pageId + ", file=" + this.
[jira] [Updated] (ARTEMIS-3850) Add Option to read messages into paging based on sizing and eliminate caching
[ https://issues.apache.org/jira/browse/ARTEMIS-3850?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Clebert Suconic updated ARTEMIS-3850: - Fix Version/s: 2.24.0 (was: 2.23.0) > Add Option to read messages into paging based on sizing and eliminate caching > - > > Key: ARTEMIS-3850 > URL: https://issues.apache.org/jira/browse/ARTEMIS-3850 > Project: ActiveMQ Artemis > Issue Type: New Feature >Affects Versions: 2.22.0 >Reporter: Clebert Suconic >Assignee: Clebert Suconic >Priority: Major > Fix For: 2.24.0 > > Time Spent: 1h 20m > Remaining Estimate: 0h > -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Updated] (ARTEMIS-2965) Allow mirror to stop capture events and delete inner queue
[ https://issues.apache.org/jira/browse/ARTEMIS-2965?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Clebert Suconic updated ARTEMIS-2965: - Fix Version/s: 2.24.0 (was: 2.23.0) > Allow mirror to stop capture events and delete inner queue > -- > > Key: ARTEMIS-2965 > URL: https://issues.apache.org/jira/browse/ARTEMIS-2965 > Project: ActiveMQ Artemis > Issue Type: Improvement >Affects Versions: 2.16.0 >Reporter: Clebert Suconic >Assignee: Clebert Suconic >Priority: Critical > Fix For: 2.24.0 > > > When a mirror starts, the current events will not be cleared when > brokerConnection.stop() is called. > > We should support removing the Mirror manager, and deleting the queue upon > brokerConnection.stop(). > (or another method TBD that would determine the semantic to remove the SnF > queue and future generation on mirror). > Related comments: > [https://github.com/apache/activemq-artemis/pull/3316#discussion_r513491335] -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Updated] (ARTEMIS-3707) ResourceAdapter improvements
[ https://issues.apache.org/jira/browse/ARTEMIS-3707?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Clebert Suconic updated ARTEMIS-3707: - Fix Version/s: 2.24.0 (was: 2.23.0) > ResourceAdapter improvements > > > Key: ARTEMIS-3707 > URL: https://issues.apache.org/jira/browse/ARTEMIS-3707 > Project: ActiveMQ Artemis > Issue Type: Improvement >Reporter: Waldi >Priority: Major > Fix For: 2.24.0 > > Time Spent: 8h 50m > Remaining Estimate: 0h > > Hi Everybody, > I've tried to install the resourceAdapter in openliberty/WLP by myself. I've > got in some troubles and fixed it by myself. Now, I would like to provide the > modifications and a small piece of documentation of the resourceAdapter, if > interested. > * Sample config / project for openliberty/WLP > * remove usage of the transactionManager in the resource adapter > * fix the jakarta ra.xml namespaces and classnames > * create a maven build for a rar archive with fewer dependencies and > therefore a smaller footprint. > I took notice of ARTEMIS-1487 and ARTEMIS-1614. In my opinion, with my > contributions, we can close these issues. Can you tell me your thoughts and > give me feedback? -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Updated] (ARTEMIS-2618) Improve Handling of Shutdown on critical I/O Error
[ https://issues.apache.org/jira/browse/ARTEMIS-2618?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Clebert Suconic updated ARTEMIS-2618: - Fix Version/s: 2.24.0 (was: 2.23.0) > Improve Handling of Shutdown on critical I/O Error > -- > > Key: ARTEMIS-2618 > URL: https://issues.apache.org/jira/browse/ARTEMIS-2618 > Project: ActiveMQ Artemis > Issue Type: Improvement >Affects Versions: 2.11.0 >Reporter: Rico Neubauer >Priority: Major > Fix For: 2.24.0 > > Attachments: Improve-Handling-of-Shutdown-on-critic.patch > > Time Spent: 40m > Remaining Estimate: 0h > > Would like to request an improvement in the handling of critical I/O errors > on opening journal files. > If {{org.apache.activemq.artemis.core.io.nio.NIOSequentialFile}} fails to > open a journal file, the whole server shuts down with {{@Message(id = 222010, > value = "Critical IO Error, shutting down the server. file=1, message=0"}}. > We have seen this in the wild, where a backup-software locked the file for a > short time while journal was about getting opened, resulting in the shutdown. > Proposed improvement would be to have a short-running retry for opening the > journal files and only fail fatally if error persists. > Will attach a proposal patch. Can also create a PR if you accept. -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Closed] (ARTEMIS-3838) Update Netty to 4.1.77.Final
[ https://issues.apache.org/jira/browse/ARTEMIS-3838?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Clebert Suconic closed ARTEMIS-3838. > Update Netty to 4.1.77.Final > > > Key: ARTEMIS-3838 > URL: https://issues.apache.org/jira/browse/ARTEMIS-3838 > Project: ActiveMQ Artemis > Issue Type: Dependency upgrade > Components: Broker >Reporter: Robbie Gemmell >Assignee: Robbie Gemmell >Priority: Major > Fix For: 2.23.0 > > Time Spent: 10m > Remaining Estimate: 0h > > Update Netty to 4.1.77.Final -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Closed] (ARTEMIS-3770) Refactor MQTT handling of client ID
[ https://issues.apache.org/jira/browse/ARTEMIS-3770?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Clebert Suconic closed ARTEMIS-3770. > Refactor MQTT handling of client ID > --- > > Key: ARTEMIS-3770 > URL: https://issues.apache.org/jira/browse/ARTEMIS-3770 > Project: ActiveMQ Artemis > Issue Type: Improvement >Reporter: Justin Bertram >Assignee: Justin Bertram >Priority: Major > Fix For: 2.23.0 > > Time Spent: 1.5h > Remaining Estimate: 0h > > It would be useful to allow security manager implementations to modify the > client ID value used by MQTT clients. Refactor the MQTT implementation's > handling of client ID to support this functionality. -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Closed] (ARTEMIS-3823) Connection router - consistent hash modulo needs to deal with negative hash values
[ https://issues.apache.org/jira/browse/ARTEMIS-3823?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Clebert Suconic closed ARTEMIS-3823. > Connection router - consistent hash modulo needs to deal with negative hash > values > -- > > Key: ARTEMIS-3823 > URL: https://issues.apache.org/jira/browse/ARTEMIS-3823 > Project: ActiveMQ Artemis > Issue Type: Bug > Components: balancer >Affects Versions: 2.22.0 >Reporter: Gary Tully >Assignee: Gary Tully >Priority: Major > Fix For: 2.23.0 > > Time Spent: 10m > Remaining Estimate: 0h > > The connection router consistent hash modulo key transformer does not work > well if the hash produced a negative value. > It makes matching more difficult to configure b/c both -1 and 1 need to be > matched for a broker ordinal 1. > > it would be better if the modulo was confined to positive numbers, rather > than the signed remainder. -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Closed] (ARTEMIS-3835) Deprecate addressesSettings configuration attribute with double plural in place of addressSettings
[ https://issues.apache.org/jira/browse/ARTEMIS-3835?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Clebert Suconic closed ARTEMIS-3835. > Deprecate addressesSettings configuration attribute with double plural in > place of addressSettings > -- > > Key: ARTEMIS-3835 > URL: https://issues.apache.org/jira/browse/ARTEMIS-3835 > Project: ActiveMQ Artemis > Issue Type: Improvement > Components: Configuration >Affects Versions: 2.22.0 >Reporter: Gary Tully >Assignee: Gary Tully >Priority: Major > Fix For: 2.23.0 > > Time Spent: 1h 10m > Remaining Estimate: 0h > > the double plural is hard on the eyes, it is a map of address Settings > with property configuration this is more visible. -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Closed] (ARTEMIS-3814) Update to ActiveMQ 5.17.1
[ https://issues.apache.org/jira/browse/ARTEMIS-3814?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Clebert Suconic closed ARTEMIS-3814. > Update to ActiveMQ 5.17.1 > - > > Key: ARTEMIS-3814 > URL: https://issues.apache.org/jira/browse/ARTEMIS-3814 > Project: ActiveMQ Artemis > Issue Type: Dependency upgrade > Components: OpenWire >Reporter: Robbie Gemmell >Assignee: Robbie Gemmell >Priority: Major > Fix For: 2.23.0 > > Time Spent: 10m > Remaining Estimate: 0h > > Update ActiveMQ 5 deps to 5.17.1 -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Closed] (ARTEMIS-3700) Provide JakartaEE 10 artefacts and support
[ https://issues.apache.org/jira/browse/ARTEMIS-3700?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Clebert Suconic closed ARTEMIS-3700. > Provide JakartaEE 10 artefacts and support > -- > > Key: ARTEMIS-3700 > URL: https://issues.apache.org/jira/browse/ARTEMIS-3700 > Project: ActiveMQ Artemis > Issue Type: Improvement > Components: API >Affects Versions: 2.20.0 >Reporter: Emmanuel Hugonnet >Priority: Major > Fix For: 2.23.0 > > Time Spent: 2h 10m > Remaining Estimate: 0h > > With Jakarta Messaging 3.1 to be released we should plan to provide support > of the new set of APIs. -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Closed] (ARTEMIS-3833) Distributed AMQP large messages lose JMSCorrelationID
[ https://issues.apache.org/jira/browse/ARTEMIS-3833?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Clebert Suconic closed ARTEMIS-3833. > Distributed AMQP large messages lose JMSCorrelationID > - > > Key: ARTEMIS-3833 > URL: https://issues.apache.org/jira/browse/ARTEMIS-3833 > Project: ActiveMQ Artemis > Issue Type: Bug >Reporter: Domenico Francesco Bruscino >Assignee: Domenico Francesco Bruscino >Priority: Major > Fix For: 2.23.0 > > Time Spent: 10m > Remaining Estimate: 0h > > AMQP large messages lose JMSCorrelationID after they are distributed. -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Closed] (ARTEMIS-3806) Upgrade logging dependencies
[ https://issues.apache.org/jira/browse/ARTEMIS-3806?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Clebert Suconic closed ARTEMIS-3806. > Upgrade logging dependencies > > > Key: ARTEMIS-3806 > URL: https://issues.apache.org/jira/browse/ARTEMIS-3806 > Project: ActiveMQ Artemis > Issue Type: Dependency upgrade >Reporter: Justin Bertram >Assignee: Justin Bertram >Priority: Major > Fix For: 2.23.0 > > Time Spent: 0.5h > Remaining Estimate: 0h > -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Closed] (ARTEMIS-3816) Connection router null pointer dereferences
[ https://issues.apache.org/jira/browse/ARTEMIS-3816?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Clebert Suconic closed ARTEMIS-3816. > Connection router null pointer dereferences > --- > > Key: ARTEMIS-3816 > URL: https://issues.apache.org/jira/browse/ARTEMIS-3816 > Project: ActiveMQ Artemis > Issue Type: Bug >Reporter: Domenico Francesco Bruscino >Assignee: Domenico Francesco Bruscino >Priority: Major > Fix For: 2.23.0 > > Time Spent: 10m > Remaining Estimate: 0h > > Please find the latest report on new defect(s) introduced to > ApacheActiveMQArtemis found with Coverity Scan. > {code:java} > *** CID 1514692: Null pointer dereferences (FORWARD_NULL) > /activemq-artemis/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/routing/ConnectionRouterManager.java: > 115 in > org.apache.activemq.artemis.core.server.routing.ConnectionRouterManager.deployConnectionRouter(org.apache.activemq.artemis.core.config.routing.ConnectionRouterConfiguration)() > *** CID 1514692: Null pointer dereferences (FORWARD_NULL) > /activemq-artemis/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/routing/ConnectionRouterManager.java: > 115 in > org.apache.activemq.artemis.core.server.routing.ConnectionRouterManager.deployConnectionRouter(org.apache.activemq.artemis.core.config.routing.ConnectionRouterConfiguration)() > ** CID 1514687: Null pointer dereferences (NULL_RETURNS) > /activemq-artemis/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/routing/caches/LocalCache.java: > 74 in > org.apache.activemq.artemis.core.server.routing.caches.LocalCache.start()() > {code} -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Closed] (ARTEMIS-3849) Upgrade Spring Framework to 5.3.20
[ https://issues.apache.org/jira/browse/ARTEMIS-3849?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Clebert Suconic closed ARTEMIS-3849. > Upgrade Spring Framework to 5.3.20 > -- > > Key: ARTEMIS-3849 > URL: https://issues.apache.org/jira/browse/ARTEMIS-3849 > Project: ActiveMQ Artemis > Issue Type: Dependency upgrade >Reporter: Robbie Gemmell >Assignee: Robbie Gemmell >Priority: Major > Fix For: 2.23.0 > > > Upgrade Spring Framework to 5.3.20 -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Work logged] (ARTEMIS-3850) Add Option to read messages into paging based on sizing and eliminate caching
[ https://issues.apache.org/jira/browse/ARTEMIS-3850?focusedWorklogId=779089&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-779089 ] ASF GitHub Bot logged work on ARTEMIS-3850: --- Author: ASF GitHub Bot Created on: 07/Jun/22 13:20 Start Date: 07/Jun/22 13:20 Worklog Time Spent: 10m Work Description: clebertsuconic commented on code in PR #4101: URL: https://github.com/apache/activemq-artemis/pull/4101#discussion_r891216710 ## artemis-server/src/main/java/org/apache/activemq/artemis/core/paging/cursor/PagedReferenceImpl.java: ## @@ -50,14 +47,24 @@ public class PagedReferenceImpl extends LinkedListImpl.Node private int messageEstimate = -1; + PagePosition position; + + @Override + public PagePosition getPosition() { + if (position == null) { + position = getPagedMessage().newPositionObject(); + } + return position; + } Review Comment: Instead of making getPosition() synchronized, I will just make positon volatile here. This is used on browsing. And this is just caching the value. Issue Time Tracking --- Worklog Id: (was: 779089) Time Spent: 1h 20m (was: 1h 10m) > Add Option to read messages into paging based on sizing and eliminate caching > - > > Key: ARTEMIS-3850 > URL: https://issues.apache.org/jira/browse/ARTEMIS-3850 > Project: ActiveMQ Artemis > Issue Type: New Feature >Affects Versions: 2.22.0 >Reporter: Clebert Suconic >Assignee: Clebert Suconic >Priority: Major > Fix For: 2.23.0 > > Time Spent: 1h 20m > Remaining Estimate: 0h > -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Work logged] (ARTEMIS-3850) Add Option to read messages into paging based on sizing and eliminate caching
[ https://issues.apache.org/jira/browse/ARTEMIS-3850?focusedWorklogId=779086&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-779086 ] ASF GitHub Bot logged work on ARTEMIS-3850: --- Author: ASF GitHub Bot Created on: 07/Jun/22 13:18 Start Date: 07/Jun/22 13:18 Worklog Time Spent: 10m Work Description: clebertsuconic commented on code in PR #4101: URL: https://github.com/apache/activemq-artemis/pull/4101#discussion_r891214441 ## artemis-commons/src/main/java/org/apache/activemq/artemis/utils/SizeAwareMetric.java: ## @@ -59,6 +59,13 @@ public interface AddCallback { private Runnable underCallback; + /** To be used in a case where we just measure elements */ + public SizeAwareMetric() { + this.sizeEnabled = false; + this.elementsEnabled = false; + } Review Comment: I would need to use two AtomicInteger on QueueImpl, one for the size in bytes, not for the size in messages. I use this to determine when to stop reading from paging. Besides I could eventually start using some of the callback methods. Issue Time Tracking --- Worklog Id: (was: 779086) Time Spent: 1h 10m (was: 1h) > Add Option to read messages into paging based on sizing and eliminate caching > - > > Key: ARTEMIS-3850 > URL: https://issues.apache.org/jira/browse/ARTEMIS-3850 > Project: ActiveMQ Artemis > Issue Type: New Feature >Affects Versions: 2.22.0 >Reporter: Clebert Suconic >Assignee: Clebert Suconic >Priority: Major > Fix For: 2.23.0 > > Time Spent: 1h 10m > Remaining Estimate: 0h > -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Work logged] (ARTEMIS-3850) Add Option to read messages into paging based on sizing and eliminate caching
[ https://issues.apache.org/jira/browse/ARTEMIS-3850?focusedWorklogId=779083&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-779083 ] ASF GitHub Bot logged work on ARTEMIS-3850: --- Author: ASF GitHub Bot Created on: 07/Jun/22 13:16 Start Date: 07/Jun/22 13:16 Worklog Time Spent: 10m Work Description: clebertsuconic commented on code in PR #4101: URL: https://github.com/apache/activemq-artemis/pull/4101#discussion_r891211486 ## artemis-server/src/main/java/org/apache/activemq/artemis/core/paging/cursor/impl/PageCursorProviderImpl.java: ## @@ -462,7 +285,12 @@ public void cleanup() { // Then we do some check on eventual pages that can be already removed but they are away from the streaming cleanupMiddleStream(depagedPages, depagedPagesSet, cursorList, minPage, firstPage); - if (pagingStore.getNumberOfPages() == 0 || pagingStore.getNumberOfPages() == 1 && pagingStore.getCurrentPage().getNumberOfMessages() == 0) { + if (pagingStore.getNumberOfPages() < 0) { + new Exception("WHAT???").printStackTrace(System.out); Review Comment: I'm adding assert pagingStore.getNumberOfPages() >= 0; here Issue Time Tracking --- Worklog Id: (was: 779083) Time Spent: 1h (was: 50m) > Add Option to read messages into paging based on sizing and eliminate caching > - > > Key: ARTEMIS-3850 > URL: https://issues.apache.org/jira/browse/ARTEMIS-3850 > Project: ActiveMQ Artemis > Issue Type: New Feature >Affects Versions: 2.22.0 >Reporter: Clebert Suconic >Assignee: Clebert Suconic >Priority: Major > Fix For: 2.23.0 > > Time Spent: 1h > Remaining Estimate: 0h > -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Work logged] (ARTEMIS-3850) Add Option to read messages into paging based on sizing and eliminate caching
[ https://issues.apache.org/jira/browse/ARTEMIS-3850?focusedWorklogId=779081&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-779081 ] ASF GitHub Bot logged work on ARTEMIS-3850: --- Author: ASF GitHub Bot Created on: 07/Jun/22 13:15 Start Date: 07/Jun/22 13:15 Worklog Time Spent: 10m Work Description: clebertsuconic commented on code in PR #4101: URL: https://github.com/apache/activemq-artemis/pull/4101#discussion_r891210116 ## artemis-server/src/main/java/org/apache/activemq/artemis/core/paging/cursor/impl/PageCursorProviderImpl.java: ## @@ -462,7 +285,12 @@ public void cleanup() { // Then we do some check on eventual pages that can be already removed but they are away from the streaming cleanupMiddleStream(depagedPages, depagedPagesSet, cursorList, minPage, firstPage); - if (pagingStore.getNumberOfPages() == 0 || pagingStore.getNumberOfPages() == 1 && pagingStore.getCurrentPage().getNumberOfMessages() == 0) { + if (pagingStore.getNumberOfPages() < 0) { + new Exception("WHAT???").printStackTrace(System.out); Review Comment: OOps... thanks... Debug message! Issue Time Tracking --- Worklog Id: (was: 779081) Time Spent: 50m (was: 40m) > Add Option to read messages into paging based on sizing and eliminate caching > - > > Key: ARTEMIS-3850 > URL: https://issues.apache.org/jira/browse/ARTEMIS-3850 > Project: ActiveMQ Artemis > Issue Type: New Feature >Affects Versions: 2.22.0 >Reporter: Clebert Suconic >Assignee: Clebert Suconic >Priority: Major > Fix For: 2.23.0 > > Time Spent: 50m > Remaining Estimate: 0h > -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Deleted] (AMQCPP-716) Facts about Cisco Certification exams
[ https://issues.apache.org/jira/browse/AMQCPP-716?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Timothy A. Bish deleted AMQCPP-716: --- > Facts about Cisco Certification exams > - > > Key: AMQCPP-716 > URL: https://issues.apache.org/jira/browse/AMQCPP-716 > Project: ActiveMQ C++ Client > Issue Type: Bug >Reporter: Thomas Wenz >Assignee: Timothy A. Bish >Priority: Major > > h2. Cisco Certification Overview > > Choosing the right [Cisco > certification|https://certificationstime.com/cisco-exam-dumps/] path for you > depends on your interest, experience level and career goals. If you’re > looking to break into Cisco technology, the two most popular certification > paths are network operations or network design. Cisco developed certification > paths to help IT professionals successfully deploy and manage Cisco > technology. > Many businesses choose Cisco for their networking needs, and most of them > will need Network Engineers, System Engineers, Security Analysts, and other > network management positions to keep their infrastructure running. As a > result, future CBKs will be highly sought after. > Cisco certifications are a powerful way to improve your job prospects and > skills, but they have expiration dates. The Cisco Certified Network Associate > (CCNA), the Cisco Certified Network Professional (CCNP), the Cisco Certified > Internetwork Expert (CCIE), and the Cisco Certified Design Expert (CCDE) are > just a few of the many types of certifications available from Cisco. > Cisco offers certifications at four levels: entry, associate, professional > and expert. Cisco once offered an architect level, but that was retired. In > addition to the core levels, a specialist level is available in several > areas. Most of the certifications fall into the category of either network > infrastructure or software development. > With IT and technical certifications in high demand, Cisco guides you during > every step of the process, from reviewing the exam topics to preparing and > practicing for each exam to scheduling an exam through third-party provider > Pearson VUE. > *The Cisco certification process is made up of four steps:* > * Preparation (learning about Cisco products) > * Practice Exam Questions > * Microsoft Certification Exam Dumps > * Assessment (taking exams) > * Validation (using Cisco skills on-the-job) > * Recertification (renewing credentials) > h2. Which Cisco Certification Path Is Best? > The most essential incentive to become certified in Cisco networking > technologies is for career development. The Cisco Certified Network Associate > (CCNA) or the Cisco Certified Network Professional (CCNP Enterprise) is some > of the most effective strategies to achieve your professional goals: > Cisco certification is a sign that you have the knowledge and experience to > perform the task. Network Engineers, Systems Administrators, and Information > Technology (IT) Directors are just a few of the jobs for which your CCNA may > be used. > To learn more about Cisco Certification and get best ways to prepared exams, > visit{*}:{*} [Cisco Exam > Dumps|https://certificationstime.com/cisco-exam-dumps/]. > h2. Cisco Certification Exams > Prepare for, practice, and pass your exams; earn your certifications; and > take another step toward the career you want. > The Cisco Certified Network Associate, or CCNA, is a top IT security > certification and is one of the most respected certifications in the world. > An associate-level certificate for IT networking, it helps candidates boost > their professional career with better jobs and higher pay. The CCNA > certification proves an individual’s capabilities to configure, operate, and > troubleshoot switched and routed networks. > As more companies turn to the cloud to run their businesses, they become > increasingly dependent on vendors like Cisco, which makes the underlying > networking hardware and software. If you’re pursuing a career as a network > professional, a Cisco certification can help you stand out at your company > and in the job market. > But with so many Cisco certifications Exams available > * 500-452 Practice Questions > * 700-703 Practice Questions > * 650-059 Practice Questions > * 500-240 Practice Questions > * 700-701 Practice Questions > * 648-238 Practice Questions > Check more Cisco Certification Exams. How do you choose the right path? > [CertificationsTime|https://certificationstime.com/] provide the best > Practice Questions, You should try to pass your exam in First Attempt. > h2. Why Do People Choose Cisco Certifications? > Cisco Systems, Inc. is a provider of networking and communication technology > products and services. The firm’s most well-known offerings are its business > routing and switching solu
[jira] [Deleted] (AMQCPP-715) Know All about Amazon Certification exams
[ https://issues.apache.org/jira/browse/AMQCPP-715?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Timothy A. Bish deleted AMQCPP-715: --- > Know All about Amazon Certification exams > - > > Key: AMQCPP-715 > URL: https://issues.apache.org/jira/browse/AMQCPP-715 > Project: ActiveMQ C++ Client > Issue Type: Bug >Reporter: Thomas Wenz >Assignee: Timothy A. Bish >Priority: Major > > h2. What is an Amazon Certification? > [*Amazon Certification*|https://certificationstime.com/amazon-exam-dumps/] ** > helps learners build credibility and confidence by validating their cloud > expertise with an industry-recognized credential and helps organizations > identify skilled professionals to lead cloud initiatives using AWS. > An Amazon Certification is a credential issued by AWS to individuals who show > they have specific knowledge, skills, and abilities. We work with AWS experts > to set the bar for required experience in common cloud job roles and > expertise in specific technical areas. You can show you meet that bar by > taking—and passing—one of our Amazon Certification exams. When you do, AWS > awards you an Amazon Certification. > h2. Choosing the right Amazon Certification: What’s the value? > Getting AWS certified shows that you have some of the most in-demand (and > profitable) skills as validated by one of the most recognizable entities in > cloud computing. In the enterprise, certification demonstrates a shared > understanding of a platform, a shared terminology, and a certain level of > cloud expertise that can speed up time to value for cloud projects. > In addition to validating your technical skills, Amazon Certification can > help you advance your expertise. Once AWS Certified, you’ll be eligible for > perks that help you show off your achievements and keep learning. > To learn more about Amazon Certification and get best ways to prepared exams, > visit: [*Amazon Exam > Dumps*|https://certificationstime.com/amazon-exam-dumps/]{*}.{*} > Getting AWS Certified can help you propel your career, whether you’re looking > to find a new role, showcase your skills to take on a new project, or become > your team’s go-to expert. Here are three reasons why: > *Prepare for your future* > 28% forecasted growth in jobs that require cloud skills in the next five > years. Preparing for an exam is a great way to build new skills. > *Show you can innovate* > 91% of organizations with AWS Certified staff say having that staff increases > innovation with AWS services. > *Build your credibility* > 90% of IT leaders that employ AWS Certified staff say productivity improved > after their staff earned Amazon Certifications, and 89% report faster > troubleshooting. > h2. Which certification is best in AWS? > Firstly, All Amazon Certifications important and are a great asset to have > from a professional standpoint. Deciding which one to take, or which one is > ‘best’ largely depends on your interests, your role, and where you would like > to take your career. > For example, If you enjoy working in the networking and architectural space, > then the following route would be a great fit: > * AWS Cloud Practitioner > * AWS Solutions Architect – Associate > * AWS Solutions Architect – Professional > * Networking Specialty > However, if you were a keen developer or were looking to move into > application development, then you might select a different route: > * AWS Cloud Practitioner > * AWS Developer – Associate > * AWS Developer – Professional > So it really depends on what you are trying to achieve as an individual, and > where you want to take your career. > Your career goals can help direct you down the right certification learning > path. Let’s take a look at the different Amazon certifications Exam Practice > Questions offered by > [*CertificationsTime*|https://certificationstime.com/]{*}.{*} > SCS-C01 Practice Questions > SAP-C01 Practice Questions > CLF-C01 Practice Questions > BDS-C00 Practice Questions > AWS-SysOps Practice Questions > DOP-C01 Practice Questions > Check more Amazon Certification Exams. > h2. What are Amazon Certifications and why are they important? > An Amazon Certification is an industry-recognized credential. It helps > learners build credibility by validating a level of Amazon Web Services cloud > expertise and it helps organizations identify skilled professionals to lead > cloud initiatives using AWS. A professional obtains an Amazon Certification > after passing one or more exams that AWS offers. Amazon Certifications are > valid for three years. To maintain an AWS Certified status, AWS requires you > to periodically demonstrate your continued expertise through a process called > recertification. > Even as enterprises adopt multi-cloud strategies, this doesn’t dimin
[jira] [Deleted] (AMQCPP-717) Details about CompTIA Certification exams
[ https://issues.apache.org/jira/browse/AMQCPP-717?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Timothy A. Bish deleted AMQCPP-717: --- > Details about CompTIA Certification exams > - > > Key: AMQCPP-717 > URL: https://issues.apache.org/jira/browse/AMQCPP-717 > Project: ActiveMQ C++ Client > Issue Type: Bug >Reporter: Thomas Wenz >Assignee: Timothy A. Bish >Priority: Major > > CompTIA stands for the Computing Technology Industry Association. CompTIA > (The Computing Technology Industry Association) is the leading provider of > vendor-neutral IT certifications in the world. With more than 2 million IT > certifications issued worldwide, CompTIA is dedicated to helping IT > professionals lead the charge in our digitally connected world. It is a > leading non-profit organization dedicated to providing vendor-neutral > certification in IT to anyone who wants to establish a strong foothold in the > IT industry. > [*CompTIA certification*|https://certificationstime.com/comptia-exam-dumps/] > exams are the starting point for an information technology (IT) career. The > exams cover maintenance of PCs, mobile devices, laptops, operating systems, > printers, networks and more. > CompTIA is a nonprofit organization offering dozens of widely-recognized IT > certifications. There are certs for fundamental computer skills, then cyber > security certifications, infrastructure certifications, for cloud computing, > penetration testing, server maintenance, and more. When faced with such an > overwhelming choice of certification training, it is only natural to be > confused. > The CompTIA certification is designed to help you land an entry-level > position in IT by ensuring you know the basics of working with hardware, > networks, and computer systems. > One of the most reliable ways of quickly climbing up the career ladder is > through getting certified in the right fields. If you are currently working > in the IT industry and focusing in areas such as computer security, systems > administration, or in the server environment, there are a lot of > certifications, particularly CompTIA courses, out there to help you better > showcase your expertise. > CompTIA Certifications are considered one of the most trusted credentials in > the IT industry as it accurately reflects employee success. CompTIA engages > international focus groups and IT leaders from around the world that define > various certification programs and helps you to create CompTIA certification > exams. > h2. 4 Steps to Certification > CompTIA certifications are industry-leading credentials to start and grow > your IT career. Whether you’re looking for an entry-level IT certification to > get your first IT job, or you want to boost your IT career with an advanced > IT certification — such as in cybersecurity — CompTIA can help. > Step 1: Choose Your IT Certification > Step 2: Get Familiar With Your IT Certification Exam > Step 3: Begin Learning and Training for Your Exam > Step 4: Register and Take Your Certification Exam > With your certification in hand, you’re joining a community of more than 2 > million IT professionals who are CompTIA certified. You’ve earned a powerful, > globally-recognized IT certification that will help you advance your IT > career. > To learn more about CompTIA Certification and get best ways to prepared > exams, visit{*}:{*} [*CompTIA Exam > Dumps*|https://certificationstime.com/comptia-exam-dumps/]. > h2. Certification Types > CompTIA certs are divided into four main categories based on the type of > skills they develop. > * Core Skills Certifications > * Infrastructure Certifications > * Cyber Security Certifications > * Additional Professional Certifications > No matter where you are in your IT career, it is essential to keep upgrading > your skills and technical knowledge. The tech industry is continually > evolving, and IT professionals cannot afford to lag behind. > h2. CompTIA Career Pathway > CompTIA certifications align with IT infrastructure and cybersecurity career > paths, with each added certification representing a deepening of your > expertise. Core certifications, like CompTIA A+, lay the groundwork for the > specialized pathway certifications, and additional professional > certifications cover necessary IT skills like project management. > h2. Benefits of CompTIA Certificate > Below are the main benefits of CompTIA certifications: > * CompTIA certifications offer a reward for IT career opportunities. > * CompTIA certifications help you to increased job security in your current > position. > * Helps professionals to gain respect and credibility in the IT workplace. > * CompTIA certifications can open the door to lucrative government and > military technology positions. > * Havi
[jira] [Work logged] (ARTEMIS-3850) Add Option to read messages into paging based on sizing and eliminate caching
[ https://issues.apache.org/jira/browse/ARTEMIS-3850?focusedWorklogId=779061&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-779061 ] ASF GitHub Bot logged work on ARTEMIS-3850: --- Author: ASF GitHub Bot Created on: 07/Jun/22 12:29 Start Date: 07/Jun/22 12:29 Worklog Time Spent: 10m Work Description: gemmellr commented on code in PR #4101: URL: https://github.com/apache/activemq-artemis/pull/4101#discussion_r891092466 ## artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/tools/xml/XmlDataExporter.java: ## @@ -398,46 +399,50 @@ private void printPagedMessagesAsXML() { ActiveMQServerLogger.LOGGER.debug("Reading page store " + store + " folder = " + folder); int pageId = (int) pageStore.getFirstPage(); - for (int i = 0; i < pageStore.getNumberOfPages(); i++) { + for (long i = 0; i < pageStore.getNumberOfPages(); i++) { ActiveMQServerLogger.LOGGER.debug("Reading page " + pageId); - Page page = pageStore.createPage(pageId); + Page page = pageStore.newPageObject(pageId); Review Comment: The pageId variable above should be changed to _long_ as well, it is currently being truncated to _int_ on declaration and then widened back to _long_ here. ## artemis-commons/src/main/java/org/apache/activemq/artemis/utils/collections/EmptyList.java: ## @@ -0,0 +1,109 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.activemq.artemis.utils.collections; + +import java.util.function.Consumer; + +public class EmptyList implements LinkedList { + + + private static final LinkedList emptyList = new EmptyList(); + + public static final LinkedList getEmptyList() { + return (LinkedList) emptyList; + } + + private EmptyList() { + } + + + + + @Override + public void addHead(E e) { + } Review Comment: Its usually nicer for unmodifiable lists to throw on attempts to change them, so that people who misuse them find it out pretty quickly, as opposed to having to investigate later where exactly things happened to unexpectedly get black-holed. (Same comment applies to all other manipulating methods) ## artemis-commons/src/main/java/org/apache/activemq/artemis/utils/SizeAwareMetric.java: ## @@ -59,6 +59,13 @@ public interface AddCallback { private Runnable underCallback; + /** To be used in a case where we just measure elements */ + public SizeAwareMetric() { + this.sizeEnabled = false; + this.elementsEnabled = false; + } Review Comment: So, a counter? Why use this rather than a basic/atomic numeric type? ## artemis-commons/src/main/java/org/apache/activemq/artemis/utils/collections/LinkedListImpl.java: ## @@ -102,6 +103,17 @@ public void addHead(E e) { size++; } + @Override + public E get(int position) { + Node current = head.next; + + for (int i = 0; i < position && current != null; i++) { + current = current.next; + } + + return current.val(); Review Comment: This assumes current exists but it may not (which the for handles). Should throw index out of bounds rather than NPE? ## artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java: ## @@ -1261,6 +1265,14 @@ protected Pair parseAddressSettings(final Node node) { long pageSizeLong = ByteUtil.convertTextBytes(getTrimmedTextContent(child)); Validators.POSITIVE_INT.validate(PAGE_SIZE_BYTES_NODE_NAME, pageSizeLong); addressSettings.setPageSizeBytes((int) pageSizeLong); + } else if (MAX_READ_PAGE_MESSAGES_NODE_NAME.equalsIgnoreCase(name)) { +long maxReadPageMessages = Long.parseLong(getTrimmedTextContent(child)); +Validators.POSITIVE_INT.validate(PAGE_SIZE_BYTES_NODE_NAME, maxReadPageMessages); +addressSettings.setMaxReadPageMessages((int)maxReadPageMessages); + } else if (MAX_READ_PAGE_BYTES_NODE_NAME.equals
[jira] [Updated] (ARTEMIS-3853) Ping command for IPv6 is wrong on Windows
[ https://issues.apache.org/jira/browse/ARTEMIS-3853?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Domenico Francesco Bruscino updated ARTEMIS-3853: - Priority: Minor (was: Major) > Ping command for IPv6 is wrong on Windows > - > > Key: ARTEMIS-3853 > URL: https://issues.apache.org/jira/browse/ARTEMIS-3853 > Project: ActiveMQ Artemis > Issue Type: Bug >Reporter: Domenico Francesco Bruscino >Assignee: Domenico Francesco Bruscino >Priority: Minor > > The ping for IPv6 command used is not working properly on Windows, we should > be using 'ping -6 -n 1 -w %d %s'. -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Created] (ARTEMIS-3853) Ping command for IPv6 is wrong on Windows
Domenico Francesco Bruscino created ARTEMIS-3853: Summary: Ping command for IPv6 is wrong on Windows Key: ARTEMIS-3853 URL: https://issues.apache.org/jira/browse/ARTEMIS-3853 Project: ActiveMQ Artemis Issue Type: Bug Reporter: Domenico Francesco Bruscino Assignee: Domenico Francesco Bruscino The ping for IPv6 command used is not working properly on Windows, we should be using 'ping -6 -n 1 -w %d %s'. -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Work started] (ARTEMIS-3853) Ping command for IPv6 is wrong on Windows
[ https://issues.apache.org/jira/browse/ARTEMIS-3853?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Work on ARTEMIS-3853 started by Domenico Francesco Bruscino. > Ping command for IPv6 is wrong on Windows > - > > Key: ARTEMIS-3853 > URL: https://issues.apache.org/jira/browse/ARTEMIS-3853 > Project: ActiveMQ Artemis > Issue Type: Bug >Reporter: Domenico Francesco Bruscino >Assignee: Domenico Francesco Bruscino >Priority: Major > > The ping for IPv6 command used is not working properly on Windows, we should > be using 'ping -6 -n 1 -w %d %s'. -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Created] (AMQCPP-717) Details about CompTIA Certification exams
Thomas Wenz created AMQCPP-717: -- Summary: Details about CompTIA Certification exams Key: AMQCPP-717 URL: https://issues.apache.org/jira/browse/AMQCPP-717 Project: ActiveMQ C++ Client Issue Type: Bug Reporter: Thomas Wenz Assignee: Timothy A. Bish CompTIA stands for the Computing Technology Industry Association. CompTIA (The Computing Technology Industry Association) is the leading provider of vendor-neutral IT certifications in the world. With more than 2 million IT certifications issued worldwide, CompTIA is dedicated to helping IT professionals lead the charge in our digitally connected world. It is a leading non-profit organization dedicated to providing vendor-neutral certification in IT to anyone who wants to establish a strong foothold in the IT industry. [*CompTIA certification*|https://certificationstime.com/comptia-exam-dumps/] exams are the starting point for an information technology (IT) career. The exams cover maintenance of PCs, mobile devices, laptops, operating systems, printers, networks and more. CompTIA is a nonprofit organization offering dozens of widely-recognized IT certifications. There are certs for fundamental computer skills, then cyber security certifications, infrastructure certifications, for cloud computing, penetration testing, server maintenance, and more. When faced with such an overwhelming choice of certification training, it is only natural to be confused. The CompTIA certification is designed to help you land an entry-level position in IT by ensuring you know the basics of working with hardware, networks, and computer systems. One of the most reliable ways of quickly climbing up the career ladder is through getting certified in the right fields. If you are currently working in the IT industry and focusing in areas such as computer security, systems administration, or in the server environment, there are a lot of certifications, particularly CompTIA courses, out there to help you better showcase your expertise. CompTIA Certifications are considered one of the most trusted credentials in the IT industry as it accurately reflects employee success. CompTIA engages international focus groups and IT leaders from around the world that define various certification programs and helps you to create CompTIA certification exams. h2. 4 Steps to Certification CompTIA certifications are industry-leading credentials to start and grow your IT career. Whether you’re looking for an entry-level IT certification to get your first IT job, or you want to boost your IT career with an advanced IT certification — such as in cybersecurity — CompTIA can help. Step 1: Choose Your IT Certification Step 2: Get Familiar With Your IT Certification Exam Step 3: Begin Learning and Training for Your Exam Step 4: Register and Take Your Certification Exam With your certification in hand, you’re joining a community of more than 2 million IT professionals who are CompTIA certified. You’ve earned a powerful, globally-recognized IT certification that will help you advance your IT career. To learn more about CompTIA Certification and get best ways to prepared exams, visit{*}:{*} [*CompTIA Exam Dumps*|https://certificationstime.com/comptia-exam-dumps/]. h2. Certification Types CompTIA certs are divided into four main categories based on the type of skills they develop. * Core Skills Certifications * Infrastructure Certifications * Cyber Security Certifications * Additional Professional Certifications No matter where you are in your IT career, it is essential to keep upgrading your skills and technical knowledge. The tech industry is continually evolving, and IT professionals cannot afford to lag behind. h2. CompTIA Career Pathway CompTIA certifications align with IT infrastructure and cybersecurity career paths, with each added certification representing a deepening of your expertise. Core certifications, like CompTIA A+, lay the groundwork for the specialized pathway certifications, and additional professional certifications cover necessary IT skills like project management. h2. Benefits of CompTIA Certificate Below are the main benefits of CompTIA certifications: * CompTIA certifications offer a reward for IT career opportunities. * CompTIA certifications help you to increased job security in your current position. * Helps professionals to gain respect and credibility in the IT workplace. * CompTIA certifications can open the door to lucrative government and military technology positions. * Having CompTIA certifications helps to hire managers that you want to advance your IT career. * Hiring CompTIA certified can leads to higher customer satisfaction. * Businesses can easily increase with CompTIA certified employees can increase productivity. h2. How to prepare for a CompTIA certification exam CompTIA's exams a
[jira] [Created] (AMQCPP-716) Facts about Cisco Certification exams
Thomas Wenz created AMQCPP-716: -- Summary: Facts about Cisco Certification exams Key: AMQCPP-716 URL: https://issues.apache.org/jira/browse/AMQCPP-716 Project: ActiveMQ C++ Client Issue Type: Bug Reporter: Thomas Wenz Assignee: Timothy A. Bish h2. Cisco Certification Overview Choosing the right [Cisco certification|https://certificationstime.com/cisco-exam-dumps/] path for you depends on your interest, experience level and career goals. If you’re looking to break into Cisco technology, the two most popular certification paths are network operations or network design. Cisco developed certification paths to help IT professionals successfully deploy and manage Cisco technology. Many businesses choose Cisco for their networking needs, and most of them will need Network Engineers, System Engineers, Security Analysts, and other network management positions to keep their infrastructure running. As a result, future CBKs will be highly sought after. Cisco certifications are a powerful way to improve your job prospects and skills, but they have expiration dates. The Cisco Certified Network Associate (CCNA), the Cisco Certified Network Professional (CCNP), the Cisco Certified Internetwork Expert (CCIE), and the Cisco Certified Design Expert (CCDE) are just a few of the many types of certifications available from Cisco. Cisco offers certifications at four levels: entry, associate, professional and expert. Cisco once offered an architect level, but that was retired. In addition to the core levels, a specialist level is available in several areas. Most of the certifications fall into the category of either network infrastructure or software development. With IT and technical certifications in high demand, Cisco guides you during every step of the process, from reviewing the exam topics to preparing and practicing for each exam to scheduling an exam through third-party provider Pearson VUE. *The Cisco certification process is made up of four steps:* * Preparation (learning about Cisco products) * Practice Exam Questions * Microsoft Certification Exam Dumps * Assessment (taking exams) * Validation (using Cisco skills on-the-job) * Recertification (renewing credentials) h2. Which Cisco Certification Path Is Best? The most essential incentive to become certified in Cisco networking technologies is for career development. The Cisco Certified Network Associate (CCNA) or the Cisco Certified Network Professional (CCNP Enterprise) is some of the most effective strategies to achieve your professional goals: Cisco certification is a sign that you have the knowledge and experience to perform the task. Network Engineers, Systems Administrators, and Information Technology (IT) Directors are just a few of the jobs for which your CCNA may be used. To learn more about Cisco Certification and get best ways to prepared exams, visit{*}:{*} [Cisco Exam Dumps|https://certificationstime.com/cisco-exam-dumps/]. h2. Cisco Certification Exams Prepare for, practice, and pass your exams; earn your certifications; and take another step toward the career you want. The Cisco Certified Network Associate, or CCNA, is a top IT security certification and is one of the most respected certifications in the world. An associate-level certificate for IT networking, it helps candidates boost their professional career with better jobs and higher pay. The CCNA certification proves an individual’s capabilities to configure, operate, and troubleshoot switched and routed networks. As more companies turn to the cloud to run their businesses, they become increasingly dependent on vendors like Cisco, which makes the underlying networking hardware and software. If you’re pursuing a career as a network professional, a Cisco certification can help you stand out at your company and in the job market. But with so many Cisco certifications Exams available * 500-452 Practice Questions * 700-703 Practice Questions * 650-059 Practice Questions * 500-240 Practice Questions * 700-701 Practice Questions * 648-238 Practice Questions Check more Cisco Certification Exams. How do you choose the right path? [CertificationsTime|https://certificationstime.com/] provide the best Practice Questions, You should try to pass your exam in First Attempt. h2. Why Do People Choose Cisco Certifications? Cisco Systems, Inc. is a provider of networking and communication technology products and services. The firm’s most well-known offerings are its business routing and switching solutions, which route data, voice, and video traffic across worldwide networks. Storage networking solutions, unified communications applications (WebEx), telepresence & collaboration (WebEx), as well as a variety of services is available from Cisco. The Cisco Career Certification program is comprehensive in order to guar
[jira] [Created] (AMQCPP-715) Know All about Amazon Certification exams
Thomas Wenz created AMQCPP-715: -- Summary: Know All about Amazon Certification exams Key: AMQCPP-715 URL: https://issues.apache.org/jira/browse/AMQCPP-715 Project: ActiveMQ C++ Client Issue Type: Bug Reporter: Thomas Wenz Assignee: Timothy A. Bish h2. What is an Amazon Certification? [*Amazon Certification*|https://certificationstime.com/amazon-exam-dumps/] ** helps learners build credibility and confidence by validating their cloud expertise with an industry-recognized credential and helps organizations identify skilled professionals to lead cloud initiatives using AWS. An Amazon Certification is a credential issued by AWS to individuals who show they have specific knowledge, skills, and abilities. We work with AWS experts to set the bar for required experience in common cloud job roles and expertise in specific technical areas. You can show you meet that bar by taking—and passing—one of our Amazon Certification exams. When you do, AWS awards you an Amazon Certification. h2. Choosing the right Amazon Certification: What’s the value? Getting AWS certified shows that you have some of the most in-demand (and profitable) skills as validated by one of the most recognizable entities in cloud computing. In the enterprise, certification demonstrates a shared understanding of a platform, a shared terminology, and a certain level of cloud expertise that can speed up time to value for cloud projects. In addition to validating your technical skills, Amazon Certification can help you advance your expertise. Once AWS Certified, you’ll be eligible for perks that help you show off your achievements and keep learning. To learn more about Amazon Certification and get best ways to prepared exams, visit: [*Amazon Exam Dumps*|https://certificationstime.com/amazon-exam-dumps/]{*}.{*} Getting AWS Certified can help you propel your career, whether you’re looking to find a new role, showcase your skills to take on a new project, or become your team’s go-to expert. Here are three reasons why: *Prepare for your future* 28% forecasted growth in jobs that require cloud skills in the next five years. Preparing for an exam is a great way to build new skills. *Show you can innovate* 91% of organizations with AWS Certified staff say having that staff increases innovation with AWS services. *Build your credibility* 90% of IT leaders that employ AWS Certified staff say productivity improved after their staff earned Amazon Certifications, and 89% report faster troubleshooting. h2. Which certification is best in AWS? Firstly, All Amazon Certifications important and are a great asset to have from a professional standpoint. Deciding which one to take, or which one is ‘best’ largely depends on your interests, your role, and where you would like to take your career. For example, If you enjoy working in the networking and architectural space, then the following route would be a great fit: * AWS Cloud Practitioner * AWS Solutions Architect – Associate * AWS Solutions Architect – Professional * Networking Specialty However, if you were a keen developer or were looking to move into application development, then you might select a different route: * AWS Cloud Practitioner * AWS Developer – Associate * AWS Developer – Professional So it really depends on what you are trying to achieve as an individual, and where you want to take your career. Your career goals can help direct you down the right certification learning path. Let’s take a look at the different Amazon certifications Exam Practice Questions offered by [*CertificationsTime*|https://certificationstime.com/]{*}.{*} SCS-C01 Practice Questions SAP-C01 Practice Questions CLF-C01 Practice Questions BDS-C00 Practice Questions AWS-SysOps Practice Questions DOP-C01 Practice Questions Check more Amazon Certification Exams. h2. What are Amazon Certifications and why are they important? An Amazon Certification is an industry-recognized credential. It helps learners build credibility by validating a level of Amazon Web Services cloud expertise and it helps organizations identify skilled professionals to lead cloud initiatives using AWS. A professional obtains an Amazon Certification after passing one or more exams that AWS offers. Amazon Certifications are valid for three years. To maintain an AWS Certified status, AWS requires you to periodically demonstrate your continued expertise through a process called recertification. Even as enterprises adopt multi-cloud strategies, this doesn’t diminish the importance of an Amazon Certification – quite the opposite. With more than one million customers, AWS is still the provider of choice for public cloud adoption, where 64% of enterprises and 68% of SMBs are running applications (according to the 2018 Right Scale State of the Cloud Report). Continued strong