java-topology/defects/onos/patch/onos-0002-pipeline-hitchain-arraylist-quadratic.patch

51 lines
1.5 KiB
Diff

# UNDF: UNDF-2026-000000197
--- a/core/api/src/main/java/org/onosproject/net/PipelineTraceableHitChain.java
+++ b/core/api/src/main/java/org/onosproject/net/PipelineTraceableHitChain.java
@@ -17,8 +17,9 @@
package org.onosproject.net;
-import com.google.common.collect.Lists;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Set;
-import java.util.List;
import java.util.Objects;
@@ -28,14 +29,14 @@ import java.util.Objects;
public final class PipelineTraceableHitChain {
private ConnectPoint outputPort;
- private List<DataPlaneEntity> hitChain;
+ private Set<DataPlaneEntity> hitChain;
private PipelineTraceablePacket egressPacket;
// By default packets are dropped
private boolean dropped = true;
private PipelineTraceableHitChain() {
- hitChain = Lists.newArrayList();
+ hitChain = new LinkedHashSet<>();
}
/**
@@ -60,7 +61,10 @@ public final class PipelineTraceableHitChain {
* @return flows and groups that matched.
*/
public List<DataPlaneEntity> hitChain() {
- return hitChain;
+ return new ArrayList<>(hitChain);
}
/**
@@ -74,9 +78,8 @@ public final class PipelineTraceableHitChain {
*/
public void addDataPlaneEntity(DataPlaneEntity dataPlaneEntity) {
- if (!hitChain.contains(dataPlaneEntity)) {
- hitChain.add(dataPlaneEntity);
- }
+ // LinkedHashSet.add() is O(1) and silently ignores duplicates
+ hitChain.add(dataPlaneEntity);
}
/**