25 lines
1.8 KiB
Diff
25 lines
1.8 KiB
Diff
# UNDF: UNDF-2026-000000732
|
|
--- a/activemq-broker/src/main/java/org/apache/activemq/network/DemandForwardingBridgeSupport.java
|
|
+++ b/activemq-broker/src/main/java/org/apache/activemq/network/DemandForwardingBridgeSupport.java
|
|
@@ -1558,7 +1558,8 @@ public abstract class DemandForwardingBridgeSupport implements NetworkBridge, Br
|
|
List<ConsumerId> candidateConsumers = consumerInfo.getNetworkConsumerIds();
|
|
+ Set<ConsumerId> candidateSet = new HashSet<>(candidateConsumers); /* O(1) lookup in matchFound; was O(C) ArrayList.contains */
|
|
Collection<Subscription> currentSubs = getRegionSubscriptions(consumerInfo.getDestination());
|
|
for (Subscription sub : currentSubs) {
|
|
- List<ConsumerId> networkConsumers = sub.getConsumerInfo().getNetworkConsumerIds();
|
|
+ List<ConsumerId> networkConsumers = sub.getConsumerInfo().getNetworkConsumerIds(); /* note: cached at call site in callers */
|
|
if (!networkConsumers.isEmpty()) {
|
|
- if (matchFound(candidateConsumers, networkConsumers)) {
|
|
+ if (matchFound(candidateSet, networkConsumers)) {
|
|
if (isInActiveDurableSub(sub)) {
|
|
|
|
@@ -1615,9 +1615,9 @@ public abstract class DemandForwardingBridgeSupport implements NetworkBridge, Br
|
|
- private boolean matchFound(List<ConsumerId> candidateConsumers, List<ConsumerId> networkConsumers) {
|
|
+ private boolean matchFound(Set<ConsumerId> candidateConsumers, List<ConsumerId> networkConsumers) {
|
|
boolean found = false;
|
|
for (ConsumerId aliasConsumer : networkConsumers) {
|
|
- if (candidateConsumers.contains(aliasConsumer)) { /* was O(C) ArrayList.contains per alias — defect */
|
|
+ if (candidateConsumers.contains(aliasConsumer)) { /* O(1) HashSet.contains */
|
|
found = true;
|
|
break;
|
|
}
|