Committed by
Gerrit Code Review
[ONOS-4164] Failed path info store
Change-Id: I8e16493ce479d2489b16fc76b56f55455927cb56
Showing
6 changed files
with
732 additions
and
3 deletions
... | @@ -17,6 +17,8 @@ package org.onosproject.pce.pcestore; | ... | @@ -17,6 +17,8 @@ package org.onosproject.pce.pcestore; |
17 | 17 | ||
18 | import static com.google.common.base.Preconditions.checkNotNull; | 18 | import static com.google.common.base.Preconditions.checkNotNull; |
19 | 19 | ||
20 | +import com.google.common.collect.ImmutableSet; | ||
21 | + | ||
20 | import java.util.List; | 22 | import java.util.List; |
21 | import java.util.Map; | 23 | import java.util.Map; |
22 | import java.util.stream.Collectors; | 24 | import java.util.stream.Collectors; |
... | @@ -30,15 +32,19 @@ import org.apache.felix.scr.annotations.Service; | ... | @@ -30,15 +32,19 @@ import org.apache.felix.scr.annotations.Service; |
30 | 32 | ||
31 | import org.onlab.util.KryoNamespace; | 33 | import org.onlab.util.KryoNamespace; |
32 | import org.onosproject.incubator.net.tunnel.TunnelId; | 34 | import org.onosproject.incubator.net.tunnel.TunnelId; |
35 | +import org.onosproject.incubator.net.resource.label.LabelResource; | ||
33 | import org.onosproject.incubator.net.resource.label.LabelResourceId; | 36 | import org.onosproject.incubator.net.resource.label.LabelResourceId; |
34 | import org.onosproject.net.DeviceId; | 37 | import org.onosproject.net.DeviceId; |
38 | +import org.onosproject.net.intent.Constraint; | ||
35 | import org.onosproject.net.Link; | 39 | import org.onosproject.net.Link; |
36 | import org.onosproject.net.resource.ResourceConsumer; | 40 | import org.onosproject.net.resource.ResourceConsumer; |
37 | import org.onosproject.pce.pceservice.TunnelConsumerId; | 41 | import org.onosproject.pce.pceservice.TunnelConsumerId; |
42 | +import org.onosproject.pce.pceservice.LspType; | ||
38 | import org.onosproject.pce.pcestore.api.LspLocalLabelInfo; | 43 | import org.onosproject.pce.pcestore.api.LspLocalLabelInfo; |
39 | import org.onosproject.pce.pcestore.api.PceStore; | 44 | import org.onosproject.pce.pcestore.api.PceStore; |
40 | import org.onosproject.store.serializers.KryoNamespaces; | 45 | import org.onosproject.store.serializers.KryoNamespaces; |
41 | import org.onosproject.store.service.ConsistentMap; | 46 | import org.onosproject.store.service.ConsistentMap; |
47 | +import org.onosproject.store.service.DistributedSet; | ||
42 | import org.onosproject.store.service.Serializer; | 48 | import org.onosproject.store.service.Serializer; |
43 | import org.onosproject.store.service.StorageService; | 49 | import org.onosproject.store.service.StorageService; |
44 | 50 | ||
... | @@ -53,11 +59,15 @@ import org.slf4j.LoggerFactory; | ... | @@ -53,11 +59,15 @@ import org.slf4j.LoggerFactory; |
53 | public class DistributedPceStore implements PceStore { | 59 | public class DistributedPceStore implements PceStore { |
54 | 60 | ||
55 | private static final String DEVICE_ID_NULL = "Device ID cannot be null"; | 61 | private static final String DEVICE_ID_NULL = "Device ID cannot be null"; |
62 | + private static final String DEVICE_LABEL_STORE_INFO_NULL = "Device Label Store cannot be null"; | ||
63 | + private static final String LABEL_RESOURCE_ID_NULL = "Label Resource Id cannot be null"; | ||
64 | + private static final String LABEL_RESOURCE_LIST_NULL = "Label Resource List cannot be null"; | ||
65 | + private static final String LABEL_RESOURCE_NULL = "Label Resource cannot be null"; | ||
56 | private static final String LINK_NULL = "LINK cannot be null"; | 66 | private static final String LINK_NULL = "LINK cannot be null"; |
57 | - private static final String TUNNEL_ID_NULL = "Tunnel ID cannot be null"; | 67 | + private static final String LSP_LOCAL_LABEL_INFO_NULL = "LSP Local Label Info cannot be null"; |
58 | - private static final String LABEL_RESOURCE_ID_NULL = "Label Resource ID cannot be null"; | 68 | + private static final String PATH_INFO_NULL = "Path Info cannot be null"; |
59 | private static final String PCECC_TUNNEL_INFO_NULL = "PCECC Tunnel Info cannot be null"; | 69 | private static final String PCECC_TUNNEL_INFO_NULL = "PCECC Tunnel Info cannot be null"; |
60 | - private static final String LSP_LOCAL_LABEL_INFO_NULL = "LSP Local Label info cannot be null"; | 70 | + private static final String TUNNEL_ID_NULL = "Tunnel Id cannot be null"; |
61 | private static final String TUNNEL_CONSUMER_ID_NULL = "Tunnel consumer Id cannot be null"; | 71 | private static final String TUNNEL_CONSUMER_ID_NULL = "Tunnel consumer Id cannot be null"; |
62 | 72 | ||
63 | private final Logger log = LoggerFactory.getLogger(getClass()); | 73 | private final Logger log = LoggerFactory.getLogger(getClass()); |
... | @@ -74,6 +84,9 @@ public class DistributedPceStore implements PceStore { | ... | @@ -74,6 +84,9 @@ public class DistributedPceStore implements PceStore { |
74 | // Mapping tunnel with device local info with tunnel consumer id | 84 | // Mapping tunnel with device local info with tunnel consumer id |
75 | private ConsistentMap<TunnelId, PceccTunnelInfo> tunnelInfoMap; | 85 | private ConsistentMap<TunnelId, PceccTunnelInfo> tunnelInfoMap; |
76 | 86 | ||
87 | + // List of Failed path info | ||
88 | + private DistributedSet<PcePathInfo> failedPathSet; | ||
89 | + | ||
77 | @Activate | 90 | @Activate |
78 | protected void activate() { | 91 | protected void activate() { |
79 | globalNodeLabelMap = storageService.<DeviceId, LabelResourceId>consistentMapBuilder() | 92 | globalNodeLabelMap = storageService.<DeviceId, LabelResourceId>consistentMapBuilder() |
... | @@ -91,6 +104,7 @@ public class DistributedPceStore implements PceStore { | ... | @@ -91,6 +104,7 @@ public class DistributedPceStore implements PceStore { |
91 | new KryoNamespace.Builder() | 104 | new KryoNamespace.Builder() |
92 | .register(KryoNamespaces.API) | 105 | .register(KryoNamespaces.API) |
93 | .register(Link.class, | 106 | .register(Link.class, |
107 | + LabelResource.class, | ||
94 | LabelResourceId.class) | 108 | LabelResourceId.class) |
95 | .build())) | 109 | .build())) |
96 | .build(); | 110 | .build(); |
... | @@ -108,6 +122,22 @@ public class DistributedPceStore implements PceStore { | ... | @@ -108,6 +122,22 @@ public class DistributedPceStore implements PceStore { |
108 | .build())) | 122 | .build())) |
109 | .build(); | 123 | .build(); |
110 | 124 | ||
125 | + failedPathSet = storageService.<PcePathInfo>setBuilder() | ||
126 | + .withName("failed-path-info") | ||
127 | + .withSerializer(Serializer.using( | ||
128 | + new KryoNamespace.Builder() | ||
129 | + .register(KryoNamespaces.API) | ||
130 | + .register(PcePathInfo.class, | ||
131 | + //TODO: Instead of Constraint.class need to add actual implemented class | ||
132 | + //TODO: on this interface like CostConstraint.class and | ||
133 | + //TODO: BandwidthConstraint.class. Will be added once it is confirmed. | ||
134 | + Constraint.class, | ||
135 | + LspType.class) | ||
136 | + .build())) | ||
137 | + | ||
138 | + .build() | ||
139 | + .asDistributedSet(); | ||
140 | + | ||
111 | log.info("Started"); | 141 | log.info("Started"); |
112 | } | 142 | } |
113 | 143 | ||
... | @@ -135,6 +165,12 @@ public class DistributedPceStore implements PceStore { | ... | @@ -135,6 +165,12 @@ public class DistributedPceStore implements PceStore { |
135 | } | 165 | } |
136 | 166 | ||
137 | @Override | 167 | @Override |
168 | + public boolean existsFailedPathInfo(PcePathInfo failedPathInfo) { | ||
169 | + checkNotNull(failedPathInfo, PATH_INFO_NULL); | ||
170 | + return failedPathSet.contains(failedPathInfo); | ||
171 | + } | ||
172 | + | ||
173 | + @Override | ||
138 | public int getGlobalNodeLabelCount() { | 174 | public int getGlobalNodeLabelCount() { |
139 | return globalNodeLabelMap.size(); | 175 | return globalNodeLabelMap.size(); |
140 | } | 176 | } |
... | @@ -150,6 +186,11 @@ public class DistributedPceStore implements PceStore { | ... | @@ -150,6 +186,11 @@ public class DistributedPceStore implements PceStore { |
150 | } | 186 | } |
151 | 187 | ||
152 | @Override | 188 | @Override |
189 | + public int getFailedPathInfoCount() { | ||
190 | + return failedPathSet.size(); | ||
191 | + } | ||
192 | + | ||
193 | + @Override | ||
153 | public Map<DeviceId, LabelResourceId> getGlobalNodeLabels() { | 194 | public Map<DeviceId, LabelResourceId> getGlobalNodeLabels() { |
154 | return globalNodeLabelMap.entrySet().stream() | 195 | return globalNodeLabelMap.entrySet().stream() |
155 | .collect(Collectors.toMap(Map.Entry::getKey, e -> (LabelResourceId) e.getValue().value())); | 196 | .collect(Collectors.toMap(Map.Entry::getKey, e -> (LabelResourceId) e.getValue().value())); |
... | @@ -168,6 +209,11 @@ public class DistributedPceStore implements PceStore { | ... | @@ -168,6 +209,11 @@ public class DistributedPceStore implements PceStore { |
168 | } | 209 | } |
169 | 210 | ||
170 | @Override | 211 | @Override |
212 | + public Iterable<PcePathInfo> getFailedPathInfos() { | ||
213 | + return ImmutableSet.copyOf(failedPathSet); | ||
214 | + } | ||
215 | + | ||
216 | + @Override | ||
171 | public LabelResourceId getGlobalNodeLabel(DeviceId id) { | 217 | public LabelResourceId getGlobalNodeLabel(DeviceId id) { |
172 | checkNotNull(id, DEVICE_ID_NULL); | 218 | checkNotNull(id, DEVICE_ID_NULL); |
173 | return globalNodeLabelMap.get(id).value(); | 219 | return globalNodeLabelMap.get(id).value(); |
... | @@ -210,6 +256,12 @@ public class DistributedPceStore implements PceStore { | ... | @@ -210,6 +256,12 @@ public class DistributedPceStore implements PceStore { |
210 | } | 256 | } |
211 | 257 | ||
212 | @Override | 258 | @Override |
259 | + public void addFailedPathInfo(PcePathInfo failedPathInfo) { | ||
260 | + checkNotNull(failedPathInfo, PATH_INFO_NULL); | ||
261 | + failedPathSet.add(failedPathInfo); | ||
262 | + } | ||
263 | + | ||
264 | + @Override | ||
213 | public boolean updateTunnelInfo(TunnelId tunnelId, List<LspLocalLabelInfo> lspLocalLabelInfoList) { | 265 | public boolean updateTunnelInfo(TunnelId tunnelId, List<LspLocalLabelInfo> lspLocalLabelInfoList) { |
214 | checkNotNull(tunnelId, TUNNEL_ID_NULL); | 266 | checkNotNull(tunnelId, TUNNEL_ID_NULL); |
215 | checkNotNull(lspLocalLabelInfoList, LSP_LOCAL_LABEL_INFO_NULL); | 267 | checkNotNull(lspLocalLabelInfoList, LSP_LOCAL_LABEL_INFO_NULL); |
... | @@ -275,4 +327,15 @@ public class DistributedPceStore implements PceStore { | ... | @@ -275,4 +327,15 @@ public class DistributedPceStore implements PceStore { |
275 | } | 327 | } |
276 | return true; | 328 | return true; |
277 | } | 329 | } |
330 | + | ||
331 | + @Override | ||
332 | + public boolean removeFailedPathInfo(PcePathInfo failedPathInfo) { | ||
333 | + checkNotNull(failedPathInfo, PATH_INFO_NULL); | ||
334 | + | ||
335 | + if (!failedPathSet.remove(failedPathInfo)) { | ||
336 | + log.error("Failed path info {} deletion has failed.", failedPathInfo.toString()); | ||
337 | + return false; | ||
338 | + } | ||
339 | + return true; | ||
340 | + } | ||
278 | } | 341 | } | ... | ... |
1 | +/* | ||
2 | + * Copyright 2016-present Open Networking Laboratory | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | +package org.onosproject.pce.pcestore; | ||
17 | + | ||
18 | +import com.google.common.base.MoreObjects; | ||
19 | + | ||
20 | +import java.util.List; | ||
21 | +import java.util.Objects; | ||
22 | + | ||
23 | +import org.onosproject.net.DeviceId; | ||
24 | +import org.onosproject.net.intent.Constraint; | ||
25 | +import org.onosproject.pce.pceservice.LspType; | ||
26 | + | ||
27 | +/** | ||
28 | + * Input path information to compute CSPF path. | ||
29 | + * This path information will be stored in pce store and will be used later to recalculate the path. | ||
30 | + */ | ||
31 | +public final class PcePathInfo { | ||
32 | + | ||
33 | + private DeviceId src; // source path | ||
34 | + | ||
35 | + private DeviceId dst; // destination path | ||
36 | + | ||
37 | + private String name; // tunnel name | ||
38 | + | ||
39 | + private List<Constraint> constraints; // list of constraints (cost, bandwidth, etc.) | ||
40 | + | ||
41 | + private LspType lspType; // lsp type | ||
42 | + | ||
43 | + /** | ||
44 | + * Initialization of member variables. | ||
45 | + * | ||
46 | + * @param src source device id | ||
47 | + * @param dst destination device id | ||
48 | + * @param name tunnel name | ||
49 | + * @param constraints list of constraints | ||
50 | + * @param lspType lsp type | ||
51 | + */ | ||
52 | + public PcePathInfo(DeviceId src, | ||
53 | + DeviceId dst, | ||
54 | + String name, | ||
55 | + List<Constraint> constraints, | ||
56 | + LspType lspType) { | ||
57 | + this.src = src; | ||
58 | + this.dst = dst; | ||
59 | + this.name = name; | ||
60 | + this.constraints = constraints; | ||
61 | + this.lspType = lspType; | ||
62 | + } | ||
63 | + | ||
64 | + /** | ||
65 | + * Initialization for serialization. | ||
66 | + */ | ||
67 | + public PcePathInfo() { | ||
68 | + this.src = null; | ||
69 | + this.dst = null; | ||
70 | + this.name = null; | ||
71 | + this.constraints = null; | ||
72 | + this.lspType = null; | ||
73 | + } | ||
74 | + | ||
75 | + /** | ||
76 | + * Returns source device id. | ||
77 | + * | ||
78 | + * @return source device id | ||
79 | + */ | ||
80 | + public DeviceId src() { | ||
81 | + return src; | ||
82 | + } | ||
83 | + | ||
84 | + /** | ||
85 | + * Sets source device id. | ||
86 | + * | ||
87 | + * @param id source device id | ||
88 | + */ | ||
89 | + public void src(DeviceId id) { | ||
90 | + this.src = id; | ||
91 | + } | ||
92 | + | ||
93 | + /** | ||
94 | + * Returns destination device id. | ||
95 | + * | ||
96 | + * @return destination device id | ||
97 | + */ | ||
98 | + public DeviceId dst() { | ||
99 | + return dst; | ||
100 | + } | ||
101 | + | ||
102 | + /** | ||
103 | + * Sets destination device id. | ||
104 | + * | ||
105 | + * @param id destination device id | ||
106 | + */ | ||
107 | + public void dst(DeviceId id) { | ||
108 | + this.dst = id; | ||
109 | + } | ||
110 | + | ||
111 | + | ||
112 | + /** | ||
113 | + * Returns tunnel name. | ||
114 | + * | ||
115 | + * @return name | ||
116 | + */ | ||
117 | + public String name() { | ||
118 | + return name; | ||
119 | + } | ||
120 | + | ||
121 | + /** | ||
122 | + * Sets tunnel name. | ||
123 | + * | ||
124 | + * @param name tunnel name | ||
125 | + */ | ||
126 | + public void name(String name) { | ||
127 | + this.name = name; | ||
128 | + } | ||
129 | + | ||
130 | + /** | ||
131 | + * Returns list of constraints including cost, bandwidth, etc. | ||
132 | + * | ||
133 | + * @return list of constraints | ||
134 | + */ | ||
135 | + public List<Constraint> constraints() { | ||
136 | + return constraints; | ||
137 | + } | ||
138 | + | ||
139 | + /** | ||
140 | + * Sets list of constraints. | ||
141 | + * @param constraints list of constraints | ||
142 | + */ | ||
143 | + public void constraints(List<Constraint> constraints) { | ||
144 | + this.constraints = constraints; | ||
145 | + } | ||
146 | + | ||
147 | + /** | ||
148 | + * Returns lsp type. | ||
149 | + * | ||
150 | + * @return lsp type | ||
151 | + */ | ||
152 | + public LspType lspType() { | ||
153 | + return lspType; | ||
154 | + } | ||
155 | + | ||
156 | + /** | ||
157 | + * Sets lsp type. | ||
158 | + * | ||
159 | + * @param lspType lsp type | ||
160 | + */ | ||
161 | + public void lspType(LspType lspType) { | ||
162 | + this.lspType = lspType; | ||
163 | + } | ||
164 | + | ||
165 | + @Override | ||
166 | + public int hashCode() { | ||
167 | + return Objects.hash(src, dst, name, constraints, lspType); | ||
168 | + } | ||
169 | + | ||
170 | + @Override | ||
171 | + public boolean equals(Object obj) { | ||
172 | + if (this == obj) { | ||
173 | + return true; | ||
174 | + } | ||
175 | + if (obj instanceof PcePathInfo) { | ||
176 | + final PcePathInfo other = (PcePathInfo) obj; | ||
177 | + return Objects.equals(this.src, other.src) && | ||
178 | + Objects.equals(this.dst, other.dst) && | ||
179 | + Objects.equals(this.name, other.name) && | ||
180 | + Objects.equals(this.constraints, other.constraints) && | ||
181 | + Objects.equals(this.lspType, other.lspType); | ||
182 | + } | ||
183 | + return false; | ||
184 | + } | ||
185 | + | ||
186 | + @Override | ||
187 | + public String toString() { | ||
188 | + return MoreObjects.toStringHelper(getClass()) | ||
189 | + .omitNullValues() | ||
190 | + .add("Source", src.toString()) | ||
191 | + .add("Destination", dst.toString()) | ||
192 | + .add("Name", name.toString()) | ||
193 | + .add("Constraints", constraints.toString()) | ||
194 | + .add("LspType", lspType.toString()) | ||
195 | + .toString(); | ||
196 | + } | ||
197 | +} |
... | @@ -23,6 +23,7 @@ import org.onosproject.net.DeviceId; | ... | @@ -23,6 +23,7 @@ import org.onosproject.net.DeviceId; |
23 | import org.onosproject.net.Link; | 23 | import org.onosproject.net.Link; |
24 | import org.onosproject.net.resource.ResourceConsumer; | 24 | import org.onosproject.net.resource.ResourceConsumer; |
25 | import org.onosproject.pce.pcestore.PceccTunnelInfo; | 25 | import org.onosproject.pce.pcestore.PceccTunnelInfo; |
26 | +import org.onosproject.pce.pcestore.PcePathInfo; | ||
26 | 27 | ||
27 | import java.util.Map; | 28 | import java.util.Map; |
28 | 29 | ||
... | @@ -55,6 +56,14 @@ public interface PceStore { | ... | @@ -55,6 +56,14 @@ public interface PceStore { |
55 | boolean existsTunnelInfo(TunnelId tunnelId); | 56 | boolean existsTunnelInfo(TunnelId tunnelId); |
56 | 57 | ||
57 | /** | 58 | /** |
59 | + * Checks whether path info is present in failed path info list. | ||
60 | + * | ||
61 | + * @param failedPathInfo failed path information | ||
62 | + * @return success or failure | ||
63 | + */ | ||
64 | + boolean existsFailedPathInfo(PcePathInfo failedPathInfo); | ||
65 | + | ||
66 | + /** | ||
58 | * Retrieves the node label count. | 67 | * Retrieves the node label count. |
59 | * | 68 | * |
60 | * @return node label count | 69 | * @return node label count |
... | @@ -76,6 +85,13 @@ public interface PceStore { | ... | @@ -76,6 +85,13 @@ public interface PceStore { |
76 | int getTunnelInfoCount(); | 85 | int getTunnelInfoCount(); |
77 | 86 | ||
78 | /** | 87 | /** |
88 | + * Retrieves the failed path info count. | ||
89 | + * | ||
90 | + * @return failed path info count | ||
91 | + */ | ||
92 | + int getFailedPathInfoCount(); | ||
93 | + | ||
94 | + /** | ||
79 | * Retrieves device id and label pairs collection from global node label store. | 95 | * Retrieves device id and label pairs collection from global node label store. |
80 | * | 96 | * |
81 | * @return collection of device id and label pairs | 97 | * @return collection of device id and label pairs |
... | @@ -97,6 +113,13 @@ public interface PceStore { | ... | @@ -97,6 +113,13 @@ public interface PceStore { |
97 | Map<TunnelId, PceccTunnelInfo> getTunnelInfos(); | 113 | Map<TunnelId, PceccTunnelInfo> getTunnelInfos(); |
98 | 114 | ||
99 | /** | 115 | /** |
116 | + * Retrieves path info collection from failed path info store. | ||
117 | + * | ||
118 | + * @return collection of failed path info | ||
119 | + */ | ||
120 | + Iterable<PcePathInfo> getFailedPathInfos(); | ||
121 | + | ||
122 | + /** | ||
100 | * Retrieves node label for specified device id. | 123 | * Retrieves node label for specified device id. |
101 | * | 124 | * |
102 | * @param id device id | 125 | * @param id device id |
... | @@ -145,6 +168,13 @@ public interface PceStore { | ... | @@ -145,6 +168,13 @@ public interface PceStore { |
145 | void addTunnelInfo(TunnelId tunnelId, PceccTunnelInfo pceccTunnelInfo); | 168 | void addTunnelInfo(TunnelId tunnelId, PceccTunnelInfo pceccTunnelInfo); |
146 | 169 | ||
147 | /** | 170 | /** |
171 | + * Stores path information into failed path info store. | ||
172 | + * | ||
173 | + * @param failedPathInfo failed path information | ||
174 | + */ | ||
175 | + void addFailedPathInfo(PcePathInfo failedPathInfo); | ||
176 | + | ||
177 | + /** | ||
148 | * Updates local label info. The first entry is created with TunnelId and TunnelConsumerId. | 178 | * Updates local label info. The first entry is created with TunnelId and TunnelConsumerId. |
149 | * Later this entry may be updated to store label information if it is basic PCECC case. | 179 | * Later this entry may be updated to store label information if it is basic PCECC case. |
150 | * | 180 | * |
... | @@ -186,4 +216,12 @@ public interface PceStore { | ... | @@ -186,4 +216,12 @@ public interface PceStore { |
186 | * @return success or failure | 216 | * @return success or failure |
187 | */ | 217 | */ |
188 | boolean removeTunnelInfo(TunnelId tunnelId); | 218 | boolean removeTunnelInfo(TunnelId tunnelId); |
219 | + | ||
220 | + /** | ||
221 | + * Removes path info from failed path info store. | ||
222 | + * | ||
223 | + * @param failedPathInfo failed path information | ||
224 | + * @return success or failure | ||
225 | + */ | ||
226 | + boolean removeFailedPathInfo(PcePathInfo failedPathInfo); | ||
189 | } | 227 | } | ... | ... |
... | @@ -29,6 +29,7 @@ import org.junit.Before; | ... | @@ -29,6 +29,7 @@ import org.junit.Before; |
29 | import org.junit.BeforeClass; | 29 | import org.junit.BeforeClass; |
30 | import org.junit.Test; | 30 | import org.junit.Test; |
31 | 31 | ||
32 | +import org.onlab.util.DataRateUnit; | ||
32 | import org.onosproject.incubator.net.resource.label.DefaultLabelResource; | 33 | import org.onosproject.incubator.net.resource.label.DefaultLabelResource; |
33 | import org.onosproject.incubator.net.resource.label.LabelResource; | 34 | import org.onosproject.incubator.net.resource.label.LabelResource; |
34 | import org.onosproject.incubator.net.resource.label.LabelResourceId; | 35 | import org.onosproject.incubator.net.resource.label.LabelResourceId; |
... | @@ -38,9 +39,12 @@ import org.onosproject.net.DefaultAnnotations; | ... | @@ -38,9 +39,12 @@ import org.onosproject.net.DefaultAnnotations; |
38 | import org.onosproject.net.DefaultLink; | 39 | import org.onosproject.net.DefaultLink; |
39 | import org.onosproject.net.DeviceId; | 40 | import org.onosproject.net.DeviceId; |
40 | import org.onosproject.net.ElementId; | 41 | import org.onosproject.net.ElementId; |
42 | +import org.onosproject.net.intent.Constraint; | ||
43 | +import org.onosproject.net.intent.constraint.BandwidthConstraint; | ||
41 | import org.onosproject.net.Link; | 44 | import org.onosproject.net.Link; |
42 | import org.onosproject.net.PortNumber; | 45 | import org.onosproject.net.PortNumber; |
43 | import org.onosproject.net.resource.ResourceConsumer; | 46 | import org.onosproject.net.resource.ResourceConsumer; |
47 | +import org.onosproject.pce.pceservice.LspType; | ||
44 | import org.onosproject.pce.pceservice.TunnelConsumerId; | 48 | import org.onosproject.pce.pceservice.TunnelConsumerId; |
45 | import org.onosproject.pce.pcestore.api.LspLocalLabelInfo; | 49 | import org.onosproject.pce.pcestore.api.LspLocalLabelInfo; |
46 | import org.onosproject.net.provider.ProviderId; | 50 | import org.onosproject.net.provider.ProviderId; |
... | @@ -82,6 +86,10 @@ public class DistributedPceStoreTest { | ... | @@ -82,6 +86,10 @@ public class DistributedPceStoreTest { |
82 | private TunnelId tunnelId4 = TunnelId.valueOf("4"); | 86 | private TunnelId tunnelId4 = TunnelId.valueOf("4"); |
83 | private PceccTunnelInfo pceccTunnelInfo1; | 87 | private PceccTunnelInfo pceccTunnelInfo1; |
84 | private PceccTunnelInfo pceccTunnelInfo2; | 88 | private PceccTunnelInfo pceccTunnelInfo2; |
89 | + private PcePathInfo failedPathInfo1; | ||
90 | + private PcePathInfo failedPathInfo2; | ||
91 | + private PcePathInfo failedPathInfo3; | ||
92 | + private PcePathInfo failedPathInfo4; | ||
85 | 93 | ||
86 | @BeforeClass | 94 | @BeforeClass |
87 | public static void setUpBeforeClass() throws Exception { | 95 | public static void setUpBeforeClass() throws Exception { |
... | @@ -150,6 +158,50 @@ public class DistributedPceStoreTest { | ... | @@ -150,6 +158,50 @@ public class DistributedPceStoreTest { |
150 | lspLocalLabelInfoList2.add(lspLocalLabel2); | 158 | lspLocalLabelInfoList2.add(lspLocalLabel2); |
151 | 159 | ||
152 | pceccTunnelInfo2 = new PceccTunnelInfo(lspLocalLabelInfoList2, tunnelConsumerId2); | 160 | pceccTunnelInfo2 = new PceccTunnelInfo(lspLocalLabelInfoList2, tunnelConsumerId2); |
161 | + | ||
162 | + // Creates failedPathInfo1 | ||
163 | + DeviceId src1 = DeviceId.deviceId("foo1"); | ||
164 | + DeviceId dst1 = DeviceId.deviceId("goo1"); | ||
165 | + String name1 = "pcc1"; | ||
166 | + LspType lspType1 = LspType.SR_WITHOUT_SIGNALLING; | ||
167 | + List<Constraint> constraints1 = new LinkedList<>(); | ||
168 | + Constraint bandwidth1 = BandwidthConstraint.of(200, DataRateUnit.BPS); | ||
169 | + constraints1.add(bandwidth1); | ||
170 | + | ||
171 | + failedPathInfo1 = new PcePathInfo(src1, dst1, name1, constraints1, lspType1); | ||
172 | + | ||
173 | + // Creates failedPathInfo2 | ||
174 | + DeviceId src2 = DeviceId.deviceId("foo2"); | ||
175 | + DeviceId dst2 = DeviceId.deviceId("goo2"); | ||
176 | + String name2 = "pcc2"; | ||
177 | + LspType lspType2 = LspType.SR_WITHOUT_SIGNALLING; | ||
178 | + List<Constraint> constraints2 = new LinkedList<>(); | ||
179 | + Constraint bandwidth2 = BandwidthConstraint.of(400, DataRateUnit.BPS); | ||
180 | + constraints2.add(bandwidth2); | ||
181 | + | ||
182 | + failedPathInfo2 = new PcePathInfo(src2, dst2, name2, constraints2, lspType2); | ||
183 | + | ||
184 | + // Creates failedPathInfo3 | ||
185 | + DeviceId src3 = DeviceId.deviceId("foo3"); | ||
186 | + DeviceId dst3 = DeviceId.deviceId("goo3"); | ||
187 | + String name3 = "pcc3"; | ||
188 | + LspType lspType3 = LspType.SR_WITHOUT_SIGNALLING; | ||
189 | + List<Constraint> constraints3 = new LinkedList<>(); | ||
190 | + Constraint bandwidth3 = BandwidthConstraint.of(500, DataRateUnit.BPS); | ||
191 | + constraints3.add(bandwidth3); | ||
192 | + | ||
193 | + failedPathInfo3 = new PcePathInfo(src3, dst3, name3, constraints3, lspType3); | ||
194 | + | ||
195 | + // Creates failedPathInfo4 | ||
196 | + DeviceId src4 = DeviceId.deviceId("foo4"); | ||
197 | + DeviceId dst4 = DeviceId.deviceId("goo4"); | ||
198 | + String name4 = "pcc4"; | ||
199 | + LspType lspType4 = LspType.SR_WITHOUT_SIGNALLING; | ||
200 | + List<Constraint> constraints4 = new LinkedList<>(); | ||
201 | + Constraint bandwidth4 = BandwidthConstraint.of(600, DataRateUnit.BPS); | ||
202 | + constraints4.add(bandwidth4); | ||
203 | + | ||
204 | + failedPathInfo4 = new PcePathInfo(src4, dst4, name4, constraints4, lspType4); | ||
153 | } | 205 | } |
154 | 206 | ||
155 | @After | 207 | @After |
... | @@ -211,6 +263,22 @@ public class DistributedPceStoreTest { | ... | @@ -211,6 +263,22 @@ public class DistributedPceStoreTest { |
211 | } | 263 | } |
212 | 264 | ||
213 | /** | 265 | /** |
266 | + * Checks the operation of addFailedPathInfo() method. | ||
267 | + */ | ||
268 | + @Test | ||
269 | + public void testAddFailedPathInfo() { | ||
270 | + // initialization | ||
271 | + distrPceStore.storageService = new TestStorageService(); | ||
272 | + distrPceStore.activate(); | ||
273 | + | ||
274 | + // PcePathInfo with pce path input information | ||
275 | + distrPceStore.addFailedPathInfo(failedPathInfo1); | ||
276 | + assertThat(distrPceStore.existsFailedPathInfo(failedPathInfo1), is(true)); | ||
277 | + distrPceStore.addFailedPathInfo(failedPathInfo2); | ||
278 | + assertThat(distrPceStore.existsFailedPathInfo(failedPathInfo2), is(true)); | ||
279 | + } | ||
280 | + | ||
281 | + /** | ||
214 | * Checks the operation of existsGlobalNodeLabel() method. | 282 | * Checks the operation of existsGlobalNodeLabel() method. |
215 | */ | 283 | */ |
216 | @Test | 284 | @Test |
... | @@ -248,6 +316,19 @@ public class DistributedPceStoreTest { | ... | @@ -248,6 +316,19 @@ public class DistributedPceStoreTest { |
248 | } | 316 | } |
249 | 317 | ||
250 | /** | 318 | /** |
319 | + * Checks the operation of existsFailedPathInfo() method. | ||
320 | + */ | ||
321 | + @Test | ||
322 | + public void testExistsFailedPathInfo() { | ||
323 | + testAddFailedPathInfo(); | ||
324 | + | ||
325 | + assertThat(distrPceStore.existsFailedPathInfo(failedPathInfo1), is(true)); | ||
326 | + assertThat(distrPceStore.existsFailedPathInfo(failedPathInfo2), is(true)); | ||
327 | + assertThat(distrPceStore.existsFailedPathInfo(failedPathInfo3), is(false)); | ||
328 | + assertThat(distrPceStore.existsFailedPathInfo(failedPathInfo4), is(false)); | ||
329 | + } | ||
330 | + | ||
331 | + /** | ||
251 | * Checks the operation of getGlobalNodeLabelCount() method. | 332 | * Checks the operation of getGlobalNodeLabelCount() method. |
252 | */ | 333 | */ |
253 | @Test | 334 | @Test |
... | @@ -278,6 +359,16 @@ public class DistributedPceStoreTest { | ... | @@ -278,6 +359,16 @@ public class DistributedPceStoreTest { |
278 | } | 359 | } |
279 | 360 | ||
280 | /** | 361 | /** |
362 | + * Checks the operation of getFailedPathInfoCount() method. | ||
363 | + */ | ||
364 | + @Test | ||
365 | + public void testGetFailedPathInfoCount() { | ||
366 | + testAddFailedPathInfo(); | ||
367 | + | ||
368 | + assertThat(distrPceStore.getFailedPathInfoCount(), is(2)); | ||
369 | + } | ||
370 | + | ||
371 | + /** | ||
281 | * Checks the operation of getGlobalNodeLabels() method. | 372 | * Checks the operation of getGlobalNodeLabels() method. |
282 | */ | 373 | */ |
283 | @Test | 374 | @Test |
... | @@ -317,6 +408,18 @@ public class DistributedPceStoreTest { | ... | @@ -317,6 +408,18 @@ public class DistributedPceStoreTest { |
317 | } | 408 | } |
318 | 409 | ||
319 | /** | 410 | /** |
411 | + * Checks the operation of getFailedPathInfos() method. | ||
412 | + */ | ||
413 | + @Test | ||
414 | + public void testGetFailedPathInfos() { | ||
415 | + testAddFailedPathInfo(); | ||
416 | + | ||
417 | + Iterable<PcePathInfo> failedPathInfoSet = distrPceStore.getFailedPathInfos(); | ||
418 | + assertThat(failedPathInfoSet, is(notNullValue())); | ||
419 | + assertThat(failedPathInfoSet.iterator().hasNext(), is(true)); | ||
420 | + } | ||
421 | + | ||
422 | + /** | ||
320 | * Checks the operation of getGlobalNodeLabel() method. | 423 | * Checks the operation of getGlobalNodeLabel() method. |
321 | */ | 424 | */ |
322 | @Test | 425 | @Test |
... | @@ -451,4 +554,17 @@ public class DistributedPceStoreTest { | ... | @@ -451,4 +554,17 @@ public class DistributedPceStoreTest { |
451 | assertThat(distrPceStore.removeTunnelInfo(tunnelId1), is(true)); | 554 | assertThat(distrPceStore.removeTunnelInfo(tunnelId1), is(true)); |
452 | assertThat(distrPceStore.removeTunnelInfo(tunnelId2), is(true)); | 555 | assertThat(distrPceStore.removeTunnelInfo(tunnelId2), is(true)); |
453 | } | 556 | } |
557 | + | ||
558 | + /** | ||
559 | + * Checks the operation of removeFailedPathInfo() method. | ||
560 | + */ | ||
561 | + @Test | ||
562 | + public void testRemoveFailedPathInfo() { | ||
563 | + testAddFailedPathInfo(); | ||
564 | + | ||
565 | + assertThat(distrPceStore.removeFailedPathInfo(failedPathInfo1), is(true)); | ||
566 | + assertThat(distrPceStore.removeFailedPathInfo(failedPathInfo2), is(true)); | ||
567 | + assertThat(distrPceStore.removeFailedPathInfo(failedPathInfo3), is(false)); | ||
568 | + assertThat(distrPceStore.removeFailedPathInfo(failedPathInfo4), is(false)); | ||
569 | + } | ||
454 | } | 570 | } | ... | ... |
1 | +/* | ||
2 | + * Copyright 2016-present Open Networking Laboratory | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | +package org.onosproject.pce.pcestore; | ||
17 | + | ||
18 | +import static org.hamcrest.MatcherAssert.assertThat; | ||
19 | +import static org.hamcrest.Matchers.is; | ||
20 | + | ||
21 | +import com.google.common.testing.EqualsTester; | ||
22 | + | ||
23 | +import java.util.List; | ||
24 | +import java.util.LinkedList; | ||
25 | + | ||
26 | +import org.junit.Test; | ||
27 | +import org.onlab.util.DataRateUnit; | ||
28 | +import org.onosproject.net.DeviceId; | ||
29 | +import org.onosproject.net.intent.Constraint; | ||
30 | +import org.onosproject.net.intent.constraint.BandwidthConstraint; | ||
31 | +import org.onosproject.pce.pceservice.LspType; | ||
32 | + | ||
33 | +/** | ||
34 | + * Unit tests for PcePathInfo class. | ||
35 | + */ | ||
36 | +public class PcePathInfoTest { | ||
37 | + | ||
38 | + /** | ||
39 | + * Checks the operation of equals() methods. | ||
40 | + */ | ||
41 | + @Test | ||
42 | + public void testEquals() { | ||
43 | + // create same two objects. | ||
44 | + DeviceId src1 = DeviceId.deviceId("foo1"); | ||
45 | + DeviceId dst1 = DeviceId.deviceId("goo1"); | ||
46 | + String name1 = "pcc1"; | ||
47 | + LspType lspType1 = LspType.WITH_SIGNALLING; | ||
48 | + List<Constraint> constraints1 = new LinkedList<>(); | ||
49 | + Constraint bandwidth11 = BandwidthConstraint.of(100, DataRateUnit.BPS); | ||
50 | + constraints1.add(bandwidth11); | ||
51 | + Constraint bandwidth12 = BandwidthConstraint.of(200, DataRateUnit.BPS); | ||
52 | + constraints1.add(bandwidth12); | ||
53 | + Constraint bandwidth13 = BandwidthConstraint.of(300, DataRateUnit.BPS); | ||
54 | + constraints1.add(bandwidth13); | ||
55 | + | ||
56 | + PcePathInfo pathInfo1 = new PcePathInfo(src1, dst1, name1, constraints1, lspType1); | ||
57 | + | ||
58 | + // create same object as above object | ||
59 | + PcePathInfo samePathInfo1 = new PcePathInfo(src1, dst1, name1, constraints1, lspType1); | ||
60 | + | ||
61 | + // Create different object. | ||
62 | + DeviceId src2 = DeviceId.deviceId("foo2"); | ||
63 | + DeviceId dst2 = DeviceId.deviceId("goo2"); | ||
64 | + String name2 = "pcc2"; | ||
65 | + LspType lspType2 = LspType.SR_WITHOUT_SIGNALLING; | ||
66 | + List<Constraint> constraints2 = new LinkedList<>(); | ||
67 | + Constraint bandwidth21 = BandwidthConstraint.of(400, DataRateUnit.BPS); | ||
68 | + constraints2.add(bandwidth21); | ||
69 | + Constraint bandwidth22 = BandwidthConstraint.of(800, DataRateUnit.BPS); | ||
70 | + constraints2.add(bandwidth22); | ||
71 | + | ||
72 | + PcePathInfo pathInfo2 = new PcePathInfo(src2, dst2, name2, constraints2, lspType2); | ||
73 | + | ||
74 | + new EqualsTester().addEqualityGroup(pathInfo1, samePathInfo1) | ||
75 | + .addEqualityGroup(pathInfo2) | ||
76 | + .testEquals(); | ||
77 | + } | ||
78 | + | ||
79 | + /** | ||
80 | + * Checks the construction of a PcePathInfo object. | ||
81 | + */ | ||
82 | + @Test | ||
83 | + public void testConstruction() { | ||
84 | + DeviceId src = DeviceId.deviceId("foo2"); | ||
85 | + DeviceId dst = DeviceId.deviceId("goo2"); | ||
86 | + String name = "pcc2"; | ||
87 | + LspType lspType = LspType.SR_WITHOUT_SIGNALLING; | ||
88 | + List<Constraint> constraints = new LinkedList<>(); | ||
89 | + Constraint bandwidth1 = BandwidthConstraint.of(100, DataRateUnit.BPS); | ||
90 | + constraints.add(bandwidth1); | ||
91 | + Constraint bandwidth2 = BandwidthConstraint.of(200, DataRateUnit.BPS); | ||
92 | + constraints.add(bandwidth2); | ||
93 | + Constraint bandwidth3 = BandwidthConstraint.of(300, DataRateUnit.BPS); | ||
94 | + constraints.add(bandwidth3); | ||
95 | + | ||
96 | + PcePathInfo pathInfo = new PcePathInfo(src, dst, name, constraints, lspType); | ||
97 | + | ||
98 | + assertThat(src, is(pathInfo.src())); | ||
99 | + assertThat(dst, is(pathInfo.dst())); | ||
100 | + assertThat(name, is(pathInfo.name())); | ||
101 | + assertThat(constraints, is(pathInfo.constraints())); | ||
102 | + assertThat(lspType, is(pathInfo.lspType())); | ||
103 | + } | ||
104 | +} |
1 | +/* | ||
2 | + * Copyright 2016-present Open Networking Laboratory | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | +package org.onosproject.pce.util; | ||
17 | + | ||
18 | +import com.google.common.collect.ImmutableSet; | ||
19 | + | ||
20 | +import java.util.concurrent.ConcurrentHashMap; | ||
21 | +import java.util.concurrent.ConcurrentMap; | ||
22 | +import java.util.HashSet; | ||
23 | +import java.util.List; | ||
24 | +import java.util.Map; | ||
25 | +import java.util.Set; | ||
26 | +import java.util.stream.Collectors; | ||
27 | + | ||
28 | +import org.onosproject.incubator.net.resource.label.LabelResourceId; | ||
29 | +import org.onosproject.incubator.net.tunnel.TunnelId; | ||
30 | +import org.onosproject.net.DeviceId; | ||
31 | +import org.onosproject.net.Link; | ||
32 | +import org.onosproject.net.resource.ResourceConsumer; | ||
33 | +import org.onosproject.pce.pcestore.PceccTunnelInfo; | ||
34 | +import org.onosproject.pce.pcestore.PcePathInfo; | ||
35 | +import org.onosproject.pce.pcestore.api.LspLocalLabelInfo; | ||
36 | +import org.onosproject.pce.pcestore.api.PceStore; | ||
37 | + | ||
38 | +/** | ||
39 | + * Provides test implementation of PceStore. | ||
40 | + */ | ||
41 | +public class PceStoreAdapter implements PceStore { | ||
42 | + | ||
43 | + // Mapping device with global node label | ||
44 | + private ConcurrentMap<DeviceId, LabelResourceId> globalNodeLabelMap = new ConcurrentHashMap<>(); | ||
45 | + | ||
46 | + // Mapping link with adjacency label | ||
47 | + private ConcurrentMap<Link, LabelResourceId> adjLabelMap = new ConcurrentHashMap<>(); | ||
48 | + | ||
49 | + // Mapping tunnel with device local info with tunnel consumer id | ||
50 | + private ConcurrentMap<TunnelId, PceccTunnelInfo> tunnelInfoMap = new ConcurrentHashMap<>(); | ||
51 | + | ||
52 | + // Set of Path info | ||
53 | + private Set<PcePathInfo> failedPathInfoSet = new HashSet<>(); | ||
54 | + | ||
55 | + @Override | ||
56 | + public boolean existsGlobalNodeLabel(DeviceId id) { | ||
57 | + return globalNodeLabelMap.containsKey(id); | ||
58 | + } | ||
59 | + | ||
60 | + @Override | ||
61 | + public boolean existsAdjLabel(Link link) { | ||
62 | + return adjLabelMap.containsKey(link); | ||
63 | + } | ||
64 | + | ||
65 | + @Override | ||
66 | + public boolean existsTunnelInfo(TunnelId tunnelId) { | ||
67 | + return tunnelInfoMap.containsKey(tunnelId); | ||
68 | + } | ||
69 | + | ||
70 | + @Override | ||
71 | + public boolean existsFailedPathInfo(PcePathInfo pathInfo) { | ||
72 | + return failedPathInfoSet.contains(pathInfo); | ||
73 | + } | ||
74 | + | ||
75 | + @Override | ||
76 | + public int getGlobalNodeLabelCount() { | ||
77 | + return globalNodeLabelMap.size(); | ||
78 | + } | ||
79 | + | ||
80 | + @Override | ||
81 | + public int getAdjLabelCount() { | ||
82 | + return adjLabelMap.size(); | ||
83 | + } | ||
84 | + | ||
85 | + @Override | ||
86 | + public int getTunnelInfoCount() { | ||
87 | + return tunnelInfoMap.size(); | ||
88 | + } | ||
89 | + | ||
90 | + @Override | ||
91 | + public int getFailedPathInfoCount() { | ||
92 | + return failedPathInfoSet.size(); | ||
93 | + } | ||
94 | + | ||
95 | + @Override | ||
96 | + public Map<DeviceId, LabelResourceId> getGlobalNodeLabels() { | ||
97 | + return globalNodeLabelMap.entrySet().stream() | ||
98 | + .collect(Collectors.toMap(Map.Entry::getKey, e -> (LabelResourceId) e.getValue())); | ||
99 | + } | ||
100 | + | ||
101 | + @Override | ||
102 | + public Map<Link, LabelResourceId> getAdjLabels() { | ||
103 | + return adjLabelMap.entrySet().stream() | ||
104 | + .collect(Collectors.toMap(Map.Entry::getKey, e -> (LabelResourceId) e.getValue())); | ||
105 | + } | ||
106 | + | ||
107 | + @Override | ||
108 | + public Map<TunnelId, PceccTunnelInfo> getTunnelInfos() { | ||
109 | + return tunnelInfoMap.entrySet().stream() | ||
110 | + .collect(Collectors.toMap(Map.Entry::getKey, e -> (PceccTunnelInfo) e.getValue())); | ||
111 | + } | ||
112 | + | ||
113 | + @Override | ||
114 | + public Iterable<PcePathInfo> getFailedPathInfos() { | ||
115 | + return ImmutableSet.copyOf(failedPathInfoSet); | ||
116 | + } | ||
117 | + | ||
118 | + @Override | ||
119 | + public LabelResourceId getGlobalNodeLabel(DeviceId id) { | ||
120 | + return globalNodeLabelMap.get(id); | ||
121 | + } | ||
122 | + | ||
123 | + @Override | ||
124 | + public LabelResourceId getAdjLabel(Link link) { | ||
125 | + return adjLabelMap.get(link); | ||
126 | + } | ||
127 | + | ||
128 | + @Override | ||
129 | + public PceccTunnelInfo getTunnelInfo(TunnelId tunnelId) { | ||
130 | + return tunnelInfoMap.get(tunnelId); | ||
131 | + } | ||
132 | + | ||
133 | + @Override | ||
134 | + public void addGlobalNodeLabel(DeviceId deviceId, LabelResourceId labelId) { | ||
135 | + globalNodeLabelMap.put(deviceId, labelId); | ||
136 | + } | ||
137 | + | ||
138 | + @Override | ||
139 | + public void addAdjLabel(Link link, LabelResourceId labelId) { | ||
140 | + adjLabelMap.put(link, labelId); | ||
141 | + } | ||
142 | + | ||
143 | + @Override | ||
144 | + public void addTunnelInfo(TunnelId tunnelId, PceccTunnelInfo pceccTunnelInfo) { | ||
145 | + tunnelInfoMap.put(tunnelId, pceccTunnelInfo); | ||
146 | + } | ||
147 | + | ||
148 | + @Override | ||
149 | + public void addFailedPathInfo(PcePathInfo pathInfo) { | ||
150 | + failedPathInfoSet.add(pathInfo); | ||
151 | + } | ||
152 | + | ||
153 | + @Override | ||
154 | + public boolean updateTunnelInfo(TunnelId tunnelId, List<LspLocalLabelInfo> lspLocalLabelInfoList) { | ||
155 | + if (!tunnelInfoMap.containsKey((tunnelId))) { | ||
156 | + return false; | ||
157 | + } | ||
158 | + | ||
159 | + PceccTunnelInfo labelStoreInfo = tunnelInfoMap.get(tunnelId); | ||
160 | + labelStoreInfo.lspLocalLabelInfoList(lspLocalLabelInfoList); | ||
161 | + tunnelInfoMap.put(tunnelId, labelStoreInfo); | ||
162 | + return true; | ||
163 | + } | ||
164 | + | ||
165 | + @Override | ||
166 | + public boolean updateTunnelInfo(TunnelId tunnelId, ResourceConsumer tunnelConsumerId) { | ||
167 | + if (!tunnelInfoMap.containsKey((tunnelId))) { | ||
168 | + return false; | ||
169 | + } | ||
170 | + | ||
171 | + PceccTunnelInfo tunnelInfo = tunnelInfoMap.get(tunnelId); | ||
172 | + tunnelInfo.tunnelConsumerId(tunnelConsumerId); | ||
173 | + tunnelInfoMap.put(tunnelId, tunnelInfo); | ||
174 | + return true; | ||
175 | + } | ||
176 | + | ||
177 | + @Override | ||
178 | + public boolean removeGlobalNodeLabel(DeviceId id) { | ||
179 | + globalNodeLabelMap.remove(id); | ||
180 | + if (globalNodeLabelMap.containsKey(id)) { | ||
181 | + return false; | ||
182 | + } | ||
183 | + return true; | ||
184 | + } | ||
185 | + | ||
186 | + @Override | ||
187 | + public boolean removeAdjLabel(Link link) { | ||
188 | + adjLabelMap.remove(link); | ||
189 | + if (adjLabelMap.containsKey(link)) { | ||
190 | + return false; | ||
191 | + } | ||
192 | + return true; | ||
193 | + } | ||
194 | + | ||
195 | + @Override | ||
196 | + public boolean removeTunnelInfo(TunnelId tunnelId) { | ||
197 | + tunnelInfoMap.remove(tunnelId); | ||
198 | + if (tunnelInfoMap.containsKey(tunnelId)) { | ||
199 | + return false; | ||
200 | + } | ||
201 | + return true; | ||
202 | + } | ||
203 | + | ||
204 | + @Override | ||
205 | + public boolean removeFailedPathInfo(PcePathInfo pathInfo) { | ||
206 | + if (failedPathInfoSet.remove(pathInfo)) { | ||
207 | + return false; | ||
208 | + } | ||
209 | + return true; | ||
210 | + } | ||
211 | +} |
-
Please register or login to post a comment