You are viewing a plain text version of this content. The canonical link for it is here.
Posted to gitbox@activemq.apache.org by "brusdev (via GitHub)" <gi...@apache.org> on 2023/12/15 12:42:51 UTC

[PR] ARTEMIS-4537 Fix merge of multiple address setting matches [activemq-artemis]

brusdev opened a new pull request, #4715:
URL: https://github.com/apache/activemq-artemis/pull/4715

   Merge multiple address setting matches on a new instance to be idempotent.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: gitbox-unsubscribe@activemq.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] ARTEMIS-4537 Fix merge of multiple address setting matches [activemq-artemis]

Posted by "brusdev (via GitHub)" <gi...@apache.org>.
brusdev commented on code in PR #4715:
URL: https://github.com/apache/activemq-artemis/pull/4715#discussion_r1431293305


##########
artemis-server/src/main/java/org/apache/activemq/artemis/core/settings/impl/AddressSettings.java:
##########
@@ -1284,238 +1287,19 @@ public AddressSettings setIDCacheSize(int idCacheSize) {
     * @param merged
     */
    @Override
-   public void merge(final AddressSettings merged) {
-      if (maxDeliveryAttempts == null) {
-         maxDeliveryAttempts = merged.maxDeliveryAttempts;
-      }
-      if (dropMessagesWhenFull == null) {
-         dropMessagesWhenFull = merged.dropMessagesWhenFull;
-      }
-      if (maxSizeBytes == null) {
-         maxSizeBytes = merged.maxSizeBytes;
-      }
-      if (maxSizeMessages == null) {
-         maxSizeMessages = merged.maxSizeMessages;
-      }
-      if (maxReadPageBytes == null) {
-         maxReadPageBytes = merged.maxReadPageBytes;
-      }
-      if (maxReadPageMessages == null) {
-         maxReadPageMessages = merged.maxReadPageMessages;
-      }
-      if (pageCacheMaxSize == null) {
-         pageCacheMaxSize = merged.pageCacheMaxSize;
-      }
-      if (pageSizeBytes == null) {
-         pageSizeBytes = merged.pageSizeBytes;
-      }
-      if (messageCounterHistoryDayLimit == null) {
-         messageCounterHistoryDayLimit = merged.messageCounterHistoryDayLimit;
-      }
-      if (redeliveryDelay == null) {
-         redeliveryDelay = merged.redeliveryDelay;
-      }
-      if (redeliveryMultiplier == null) {
-         redeliveryMultiplier = merged.redeliveryMultiplier;
-      }
-      if (redeliveryCollisionAvoidanceFactor == null) {
-         redeliveryCollisionAvoidanceFactor = merged.redeliveryCollisionAvoidanceFactor;
-      }
-      if (maxRedeliveryDelay == null) {
-         maxRedeliveryDelay = merged.maxRedeliveryDelay;
-      }
-      if (deadLetterAddress == null) {
-         deadLetterAddress = merged.deadLetterAddress;
-      }
-      if (expiryAddress == null) {
-         expiryAddress = merged.expiryAddress;
-      }
-      if (expiryDelay == null) {
-         expiryDelay = merged.expiryDelay;
-      }
-      if (minExpiryDelay == null) {
-         minExpiryDelay = merged.minExpiryDelay;
-      }
-      if (maxExpiryDelay == null) {
-         maxExpiryDelay = merged.maxExpiryDelay;
-      }
-      if (redistributionDelay == null) {
-         redistributionDelay = merged.redistributionDelay;
-      }
-      if (sendToDLAOnNoRoute == null) {
-         sendToDLAOnNoRoute = merged.sendToDLAOnNoRoute;
-      }
-      if (addressFullMessagePolicy == null) {
-         addressFullMessagePolicy = merged.addressFullMessagePolicy;
-      }
-      if (slowConsumerThreshold == null) {
-         slowConsumerThreshold = merged.slowConsumerThreshold;
-      }
-      if (slowConsumerThresholdMeasurementUnit == null) {
-         slowConsumerThresholdMeasurementUnit = merged.slowConsumerThresholdMeasurementUnit;
-      }
-      if (slowConsumerCheckPeriod == null) {
-         slowConsumerCheckPeriod = merged.slowConsumerCheckPeriod;
-      }
-      if (slowConsumerPolicy == null) {
-         slowConsumerPolicy = merged.slowConsumerPolicy;
-      }
-      if (autoCreateJmsQueues == null) {
-         autoCreateJmsQueues = merged.autoCreateJmsQueues;
-      }
-      if (autoDeleteJmsQueues == null) {
-         autoDeleteJmsQueues = merged.autoDeleteJmsQueues;
-      }
-      if (autoCreateJmsTopics == null) {
-         autoCreateJmsTopics = merged.autoCreateJmsTopics;
-      }
-      if (autoDeleteJmsTopics == null) {
-         autoDeleteJmsTopics = merged.autoDeleteJmsTopics;
-      }
-      if (autoCreateQueues == null) {
-         autoCreateQueues = merged.autoCreateQueues;
-      }
-      if (autoDeleteQueues == null) {
-         autoDeleteQueues = merged.autoDeleteQueues;
-      }
-      if (autoDeleteCreatedQueues == null) {
-         autoDeleteCreatedQueues = merged.autoDeleteCreatedQueues;
-      }
-      if (autoDeleteQueuesDelay == null) {
-         autoDeleteQueuesDelay = merged.autoDeleteQueuesDelay;
-      }
-      if (autoDeleteQueuesSkipUsageCheck == null) {
-         autoDeleteQueuesSkipUsageCheck = merged.autoDeleteQueuesSkipUsageCheck;
-      }
-      if (autoDeleteQueuesMessageCount == null) {
-         autoDeleteQueuesMessageCount = merged.autoDeleteQueuesMessageCount;
-      }
-      if (configDeleteQueues == null) {
-         configDeleteQueues = merged.configDeleteQueues;
-      }
-      if (autoCreateAddresses == null) {
-         autoCreateAddresses = merged.autoCreateAddresses;
-      }
-      if (autoDeleteAddresses == null) {
-         autoDeleteAddresses = merged.autoDeleteAddresses;
-      }
-      if (autoDeleteAddressesDelay == null) {
-         autoDeleteAddressesDelay = merged.autoDeleteAddressesDelay;
-      }
-      if (autoDeleteAddressesSkipUsageCheck == null) {
-         autoDeleteAddressesSkipUsageCheck = merged.autoDeleteAddressesSkipUsageCheck;
-      }
-      if (configDeleteAddresses == null) {
-         configDeleteAddresses = merged.configDeleteAddresses;
-      }
-      if (configDeleteDiverts == null) {
-         configDeleteDiverts = merged.configDeleteDiverts;
-      }
-      if (managementBrowsePageSize == null) {
-         managementBrowsePageSize = merged.managementBrowsePageSize;
-      }
-      if (managementMessageAttributeSizeLimit == null) {
-         managementMessageAttributeSizeLimit = merged.managementMessageAttributeSizeLimit;
-      }
-      if (queuePrefetch == null) {
-         queuePrefetch = merged.queuePrefetch;
-      }
-      if (maxSizeBytesRejectThreshold == null) {
-         maxSizeBytesRejectThreshold = merged.maxSizeBytesRejectThreshold;
-      }
-      if (defaultMaxConsumers == null) {
-         defaultMaxConsumers = merged.defaultMaxConsumers;
-      }
-      if (defaultPurgeOnNoConsumers == null) {
-         defaultPurgeOnNoConsumers = merged.defaultPurgeOnNoConsumers;
-      }
-      if (defaultQueueRoutingType == null) {
-         defaultQueueRoutingType = merged.defaultQueueRoutingType;
-      }
-      if (defaultAddressRoutingType == null) {
-         defaultAddressRoutingType = merged.defaultAddressRoutingType;
-      }
-      if (defaultExclusiveQueue == null) {
-         defaultExclusiveQueue = merged.defaultExclusiveQueue;
-      }
-      if (defaultConsumerWindowSize == null) {
-         defaultConsumerWindowSize = merged.defaultConsumerWindowSize;
-      }
-      if (defaultLastValueQueue == null) {
-         defaultLastValueQueue = merged.defaultLastValueQueue;
-      }
-      if (defaultLastValueKey == null) {
-         defaultLastValueKey = merged.defaultLastValueKey;
-      }
-      if (defaultNonDestructive == null) {
-         defaultNonDestructive = merged.defaultNonDestructive;
-      }
-      if (defaultConsumersBeforeDispatch == null) {
-         defaultConsumersBeforeDispatch = merged.defaultConsumersBeforeDispatch;
-      }
-      if (defaultDelayBeforeDispatch == null) {
-         defaultDelayBeforeDispatch = merged.defaultDelayBeforeDispatch;
-      }
-      if (defaultGroupRebalance == null) {
-         defaultGroupRebalance = merged.defaultGroupRebalance;
-      }
-      if (defaultGroupRebalancePauseDispatch == null) {
-         defaultGroupRebalancePauseDispatch = merged.defaultGroupRebalancePauseDispatch;
-      }
-      if (defaultGroupBuckets == null) {
-         defaultGroupBuckets = merged.defaultGroupBuckets;
-      }
-      if (defaultGroupFirstKey == null) {
-         defaultGroupFirstKey = merged.defaultGroupFirstKey;
-      }
-      if (defaultRingSize == null) {
-         defaultRingSize = merged.defaultRingSize;
-      }
-      if (retroactiveMessageCount == null) {
-         retroactiveMessageCount = merged.retroactiveMessageCount;
-      }
-      if (autoCreateDeadLetterResources == null) {
-         autoCreateDeadLetterResources = merged.autoCreateDeadLetterResources;
-      }
-      if (deadLetterQueuePrefix == null) {
-         deadLetterQueuePrefix = merged.deadLetterQueuePrefix;
-      }
-      if (deadLetterQueueSuffix == null) {
-         deadLetterQueueSuffix = merged.deadLetterQueueSuffix;
-      }
-      if (autoCreateExpiryResources == null) {
-         autoCreateExpiryResources = merged.autoCreateExpiryResources;
-      }
-      if (expiryQueuePrefix == null) {
-         expiryQueuePrefix = merged.expiryQueuePrefix;
-      }
-      if (expiryQueueSuffix == null) {
-         expiryQueueSuffix = merged.expiryQueueSuffix;
-      }
-      if (enableMetrics == null) {
-         enableMetrics = merged.enableMetrics;
-      }
-      if (enableIngressTimestamp == null) {
-         enableIngressTimestamp = merged.enableIngressTimestamp;
-      }
-      if (pageFullMessagePolicy == null) {
-         pageFullMessagePolicy = merged.pageFullMessagePolicy;
-      }
-      if (pageLimitBytes == null) {
-         pageLimitBytes = merged.pageLimitBytes;
-      }
-      if (pageLimitMessages == null) {
-         pageLimitMessages = merged.pageLimitMessages;
-      }
-      if (idCacheSize == null) {
-         idCacheSize = merged.idCacheSize;
-      }
-      if (prefetchPageMessages == null) {
-         prefetchPageMessages = merged.prefetchPageMessages;
-      }
-      if (prefetchPageBytes == null) {
-         prefetchPageBytes = merged.prefetchPageBytes;
-      }
+   public AddressSettings merge(final AddressSettings merged) {
+      AddressSettings target = new AddressSettings();
+
+      metaBean.forEach((type, name, setter, getter, gate) -> {
+         Object sourceValue = getter.apply(AddressSettings.this);
+         if (sourceValue != null) {
+            setter.accept(target, sourceValue);
+         } else {
+            setter.accept(target, getter.apply(merged));
+         }
+      });
+
+      return target;

Review Comment:
   I see your point, I reverted the previous merge signature and I added the mergeCopy override.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: gitbox-unsubscribe@activemq.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] ARTEMIS-4537 Fix merge of multiple address setting matches [activemq-artemis]

Posted by "jbertram (via GitHub)" <gi...@apache.org>.
jbertram merged PR #4715:
URL: https://github.com/apache/activemq-artemis/pull/4715


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: gitbox-unsubscribe@activemq.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] ARTEMIS-4537 Fix merge of multiple address setting matches [activemq-artemis]

Posted by "gemmellr (via GitHub)" <gi...@apache.org>.
gemmellr commented on code in PR #4715:
URL: https://github.com/apache/activemq-artemis/pull/4715#discussion_r1431209827


##########
tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/scheduling/DelayedMessageTest.java:
##########
@@ -57,7 +57,7 @@ protected void initServer() throws Exception {
 
       AddressSettings qs = server.getAddressSettingsRepository().getMatch("*");
       AddressSettings newSets = new AddressSettings().setRedeliveryDelay(DelayedMessageTest.DELAY);
-      newSets.merge(qs);
+      newSets = newSets.merge(qs);

Review Comment:
   ...e.g like it broke this unrelated test?



##########
artemis-server/src/main/java/org/apache/activemq/artemis/core/settings/impl/AddressSettings.java:
##########
@@ -1284,238 +1287,19 @@ public AddressSettings setIDCacheSize(int idCacheSize) {
     * @param merged
     */
    @Override
-   public void merge(final AddressSettings merged) {
-      if (maxDeliveryAttempts == null) {
-         maxDeliveryAttempts = merged.maxDeliveryAttempts;
-      }
-      if (dropMessagesWhenFull == null) {
-         dropMessagesWhenFull = merged.dropMessagesWhenFull;
-      }
-      if (maxSizeBytes == null) {
-         maxSizeBytes = merged.maxSizeBytes;
-      }
-      if (maxSizeMessages == null) {
-         maxSizeMessages = merged.maxSizeMessages;
-      }
-      if (maxReadPageBytes == null) {
-         maxReadPageBytes = merged.maxReadPageBytes;
-      }
-      if (maxReadPageMessages == null) {
-         maxReadPageMessages = merged.maxReadPageMessages;
-      }
-      if (pageCacheMaxSize == null) {
-         pageCacheMaxSize = merged.pageCacheMaxSize;
-      }
-      if (pageSizeBytes == null) {
-         pageSizeBytes = merged.pageSizeBytes;
-      }
-      if (messageCounterHistoryDayLimit == null) {
-         messageCounterHistoryDayLimit = merged.messageCounterHistoryDayLimit;
-      }
-      if (redeliveryDelay == null) {
-         redeliveryDelay = merged.redeliveryDelay;
-      }
-      if (redeliveryMultiplier == null) {
-         redeliveryMultiplier = merged.redeliveryMultiplier;
-      }
-      if (redeliveryCollisionAvoidanceFactor == null) {
-         redeliveryCollisionAvoidanceFactor = merged.redeliveryCollisionAvoidanceFactor;
-      }
-      if (maxRedeliveryDelay == null) {
-         maxRedeliveryDelay = merged.maxRedeliveryDelay;
-      }
-      if (deadLetterAddress == null) {
-         deadLetterAddress = merged.deadLetterAddress;
-      }
-      if (expiryAddress == null) {
-         expiryAddress = merged.expiryAddress;
-      }
-      if (expiryDelay == null) {
-         expiryDelay = merged.expiryDelay;
-      }
-      if (minExpiryDelay == null) {
-         minExpiryDelay = merged.minExpiryDelay;
-      }
-      if (maxExpiryDelay == null) {
-         maxExpiryDelay = merged.maxExpiryDelay;
-      }
-      if (redistributionDelay == null) {
-         redistributionDelay = merged.redistributionDelay;
-      }
-      if (sendToDLAOnNoRoute == null) {
-         sendToDLAOnNoRoute = merged.sendToDLAOnNoRoute;
-      }
-      if (addressFullMessagePolicy == null) {
-         addressFullMessagePolicy = merged.addressFullMessagePolicy;
-      }
-      if (slowConsumerThreshold == null) {
-         slowConsumerThreshold = merged.slowConsumerThreshold;
-      }
-      if (slowConsumerThresholdMeasurementUnit == null) {
-         slowConsumerThresholdMeasurementUnit = merged.slowConsumerThresholdMeasurementUnit;
-      }
-      if (slowConsumerCheckPeriod == null) {
-         slowConsumerCheckPeriod = merged.slowConsumerCheckPeriod;
-      }
-      if (slowConsumerPolicy == null) {
-         slowConsumerPolicy = merged.slowConsumerPolicy;
-      }
-      if (autoCreateJmsQueues == null) {
-         autoCreateJmsQueues = merged.autoCreateJmsQueues;
-      }
-      if (autoDeleteJmsQueues == null) {
-         autoDeleteJmsQueues = merged.autoDeleteJmsQueues;
-      }
-      if (autoCreateJmsTopics == null) {
-         autoCreateJmsTopics = merged.autoCreateJmsTopics;
-      }
-      if (autoDeleteJmsTopics == null) {
-         autoDeleteJmsTopics = merged.autoDeleteJmsTopics;
-      }
-      if (autoCreateQueues == null) {
-         autoCreateQueues = merged.autoCreateQueues;
-      }
-      if (autoDeleteQueues == null) {
-         autoDeleteQueues = merged.autoDeleteQueues;
-      }
-      if (autoDeleteCreatedQueues == null) {
-         autoDeleteCreatedQueues = merged.autoDeleteCreatedQueues;
-      }
-      if (autoDeleteQueuesDelay == null) {
-         autoDeleteQueuesDelay = merged.autoDeleteQueuesDelay;
-      }
-      if (autoDeleteQueuesSkipUsageCheck == null) {
-         autoDeleteQueuesSkipUsageCheck = merged.autoDeleteQueuesSkipUsageCheck;
-      }
-      if (autoDeleteQueuesMessageCount == null) {
-         autoDeleteQueuesMessageCount = merged.autoDeleteQueuesMessageCount;
-      }
-      if (configDeleteQueues == null) {
-         configDeleteQueues = merged.configDeleteQueues;
-      }
-      if (autoCreateAddresses == null) {
-         autoCreateAddresses = merged.autoCreateAddresses;
-      }
-      if (autoDeleteAddresses == null) {
-         autoDeleteAddresses = merged.autoDeleteAddresses;
-      }
-      if (autoDeleteAddressesDelay == null) {
-         autoDeleteAddressesDelay = merged.autoDeleteAddressesDelay;
-      }
-      if (autoDeleteAddressesSkipUsageCheck == null) {
-         autoDeleteAddressesSkipUsageCheck = merged.autoDeleteAddressesSkipUsageCheck;
-      }
-      if (configDeleteAddresses == null) {
-         configDeleteAddresses = merged.configDeleteAddresses;
-      }
-      if (configDeleteDiverts == null) {
-         configDeleteDiverts = merged.configDeleteDiverts;
-      }
-      if (managementBrowsePageSize == null) {
-         managementBrowsePageSize = merged.managementBrowsePageSize;
-      }
-      if (managementMessageAttributeSizeLimit == null) {
-         managementMessageAttributeSizeLimit = merged.managementMessageAttributeSizeLimit;
-      }
-      if (queuePrefetch == null) {
-         queuePrefetch = merged.queuePrefetch;
-      }
-      if (maxSizeBytesRejectThreshold == null) {
-         maxSizeBytesRejectThreshold = merged.maxSizeBytesRejectThreshold;
-      }
-      if (defaultMaxConsumers == null) {
-         defaultMaxConsumers = merged.defaultMaxConsumers;
-      }
-      if (defaultPurgeOnNoConsumers == null) {
-         defaultPurgeOnNoConsumers = merged.defaultPurgeOnNoConsumers;
-      }
-      if (defaultQueueRoutingType == null) {
-         defaultQueueRoutingType = merged.defaultQueueRoutingType;
-      }
-      if (defaultAddressRoutingType == null) {
-         defaultAddressRoutingType = merged.defaultAddressRoutingType;
-      }
-      if (defaultExclusiveQueue == null) {
-         defaultExclusiveQueue = merged.defaultExclusiveQueue;
-      }
-      if (defaultConsumerWindowSize == null) {
-         defaultConsumerWindowSize = merged.defaultConsumerWindowSize;
-      }
-      if (defaultLastValueQueue == null) {
-         defaultLastValueQueue = merged.defaultLastValueQueue;
-      }
-      if (defaultLastValueKey == null) {
-         defaultLastValueKey = merged.defaultLastValueKey;
-      }
-      if (defaultNonDestructive == null) {
-         defaultNonDestructive = merged.defaultNonDestructive;
-      }
-      if (defaultConsumersBeforeDispatch == null) {
-         defaultConsumersBeforeDispatch = merged.defaultConsumersBeforeDispatch;
-      }
-      if (defaultDelayBeforeDispatch == null) {
-         defaultDelayBeforeDispatch = merged.defaultDelayBeforeDispatch;
-      }
-      if (defaultGroupRebalance == null) {
-         defaultGroupRebalance = merged.defaultGroupRebalance;
-      }
-      if (defaultGroupRebalancePauseDispatch == null) {
-         defaultGroupRebalancePauseDispatch = merged.defaultGroupRebalancePauseDispatch;
-      }
-      if (defaultGroupBuckets == null) {
-         defaultGroupBuckets = merged.defaultGroupBuckets;
-      }
-      if (defaultGroupFirstKey == null) {
-         defaultGroupFirstKey = merged.defaultGroupFirstKey;
-      }
-      if (defaultRingSize == null) {
-         defaultRingSize = merged.defaultRingSize;
-      }
-      if (retroactiveMessageCount == null) {
-         retroactiveMessageCount = merged.retroactiveMessageCount;
-      }
-      if (autoCreateDeadLetterResources == null) {
-         autoCreateDeadLetterResources = merged.autoCreateDeadLetterResources;
-      }
-      if (deadLetterQueuePrefix == null) {
-         deadLetterQueuePrefix = merged.deadLetterQueuePrefix;
-      }
-      if (deadLetterQueueSuffix == null) {
-         deadLetterQueueSuffix = merged.deadLetterQueueSuffix;
-      }
-      if (autoCreateExpiryResources == null) {
-         autoCreateExpiryResources = merged.autoCreateExpiryResources;
-      }
-      if (expiryQueuePrefix == null) {
-         expiryQueuePrefix = merged.expiryQueuePrefix;
-      }
-      if (expiryQueueSuffix == null) {
-         expiryQueueSuffix = merged.expiryQueueSuffix;
-      }
-      if (enableMetrics == null) {
-         enableMetrics = merged.enableMetrics;
-      }
-      if (enableIngressTimestamp == null) {
-         enableIngressTimestamp = merged.enableIngressTimestamp;
-      }
-      if (pageFullMessagePolicy == null) {
-         pageFullMessagePolicy = merged.pageFullMessagePolicy;
-      }
-      if (pageLimitBytes == null) {
-         pageLimitBytes = merged.pageLimitBytes;
-      }
-      if (pageLimitMessages == null) {
-         pageLimitMessages = merged.pageLimitMessages;
-      }
-      if (idCacheSize == null) {
-         idCacheSize = merged.idCacheSize;
-      }
-      if (prefetchPageMessages == null) {
-         prefetchPageMessages = merged.prefetchPageMessages;
-      }
-      if (prefetchPageBytes == null) {
-         prefetchPageBytes = merged.prefetchPageBytes;
-      }
+   public AddressSettings merge(final AddressSettings merged) {
+      AddressSettings target = new AddressSettings();
+
+      metaBean.forEach((type, name, setter, getter, gate) -> {
+         Object sourceValue = getter.apply(AddressSettings.this);
+         if (sourceValue != null) {
+            setter.accept(target, sourceValue);
+         } else {
+            setter.accept(target, getter.apply(merged));
+         }
+      });
+
+      return target;

Review Comment:
   Changing from merging in the current instance, to returning a new instance and leaving the current untouched, seems a pretty big change, a breaking one, that may not be spotted because the method signature is still compatible. Do we know it isnt going to silently break users?



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: gitbox-unsubscribe@activemq.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org