[ https://issues.apache.org/jira/browse/ARTEMIS-4973?focusedWorklogId=929349&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-929349 ]
ASF GitHub Bot logged work on ARTEMIS-4973: ------------------------------------------- Author: ASF GitHub Bot Created on: 08/Aug/24 08:56 Start Date: 08/Aug/24 08:56 Worklog Time Spent: 10m Work Description: gemmellr commented on code in PR #5128: URL: https://github.com/apache/activemq-artemis/pull/5128#discussion_r1708994571 ########## artemis-server/src/main/java/org/apache/activemq/artemis/core/paging/impl/PagingStoreImpl.java: ########## @@ -228,11 +228,34 @@ private void configureSizeMetric() { size.setMax(maxSize, maxSize, maxMessages, maxMessages); } + private boolean validateNewSettings(final AddressSettings addressSettings) { + + Long newPageLimitBytes = addressSettings.getPageLimitBytes(); + + if (newPageLimitBytes != null && newPageLimitBytes.longValue() < 0) { + newPageLimitBytes = null; + } + int newPageSize = storageManager.getAllowedPageSize(addressSettings.getPageSizeBytes()); + if (newPageLimitBytes != null && newPageSize > 0) { + long newEstimatedMaxPages = newPageLimitBytes / newPageSize; + if (this.numberOfPages > newEstimatedMaxPages) { + ActiveMQServerLogger.LOGGER.pageSettingsFailedApply(storeName, addressSettings, "estimated max pages " + newEstimatedMaxPages + " is less than current number of pages " + this.numberOfPages); + return false; + } + } + return true; + } + /** * @param addressSettings */ @Override public void applySetting(final AddressSettings addressSettings) { + + if (!validateNewSettings(addressSettings)) { + return; + } Review Comment: Yep, the JDBC bit was based on a mis-read. Issue Time Tracking ------------------- Worklog Id: (was: 929349) Time Spent: 4h (was: 3h 50m) > pageSizeBytes/pageLimitBytes combination can cause Address full > --------------------------------------------------------------- > > Key: ARTEMIS-4973 > URL: https://issues.apache.org/jira/browse/ARTEMIS-4973 > Project: ActiveMQ Artemis > Issue Type: Bug > Components: Broker > Affects Versions: 2.36.0 > Reporter: Howard Gao > Assignee: Howard Gao > Priority: Major > Time Spent: 4h > Remaining Estimate: 0h > > There is an edge case where adjusting pageSizeBytes can cause "Address is > full" errors, even though the address is not full. > Do we need to enforce that pageSizeBytes <= pageLimitBytes? > Reproducer steps: > Step 1: configure pageSizeBytes == pageLimitBytes == 1mb: > $ cat my.broker.properties > addressSettings."FOO".pageSizeBytes=1048576 > addressSettings."FOO".pageLimitBytes=1048576 > addressSettings."FOO".maxSizeBytes=1048576 > addressSettings."FOO".pageFullMessagePolicy=FAIL > addressConfigurations."FOO".routingTypes=MULTICAST > addressConfigurations."FOO".queueConfigs."FOO".name=FOO > addressConfigurations."FOO".queueConfigs."FOO".address=FOO > addressConfigurations."FOO".queueConfigs."FOO".routingType=MULTICAST > Step 2: run broker > bin/artemis run --properties my.broker.properties > Step 3: produce 15 messages > $ bin/artemis producer --user admin --password admin --destination > topic://FOO --message-count 15 --message-size 100000 --protocol amqp > Step 4: observe paging started on the destination (but the page size is > 328kb, can hold more messages) > INFO [org.apache.activemq.artemis.core.server] AMQ222038: Starting paging on > address 'FOO'; size=1107003 bytes (11 messages); maxSize=1048576 bytes (-1 > messages); globalSize=1107003 bytes (11 messages); globalMaxSize=1073741824 > bytes (-1 messages); > Step 5: stop broker, increase page size > cat my.broker.properties > addressSettings."FOO".pageSizeBytes=4048576 > ... > Step 6: run broker, observe logs show paging warning > 2024-06-25 15:23:47,135 WARN [org.apache.activemq.artemis.core.server] > AMQ224123: Address FOO has more pages than allowed. System currently has 1 > pages, while the estimated max number of pages is 0 based on the > page-limit-bytes (1048576) / page-size (4048576) > Step 7: try to produce a message, address full > WARN [org.apache.activemq.artemis.protocol.amqp.broker.AMQPSessionCallback] > AMQ229102: Address "FOO" is full. -- This message was sent by Atlassian Jira (v8.20.10#820010) --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@activemq.apache.org For additional commands, e-mail: issues-h...@activemq.apache.org For further information, visit: https://activemq.apache.org/contact