Committed by
Gerrit Code Review
Move MPLS label selection logic to MplsPathIntentCompiler
Change-Id: I2c64ca2a6ac363a0138e6940471893673ce3b83f
Showing
2 changed files
with
34 additions
and
28 deletions
... | @@ -47,6 +47,7 @@ import org.onosproject.net.intent.IntentCompiler; | ... | @@ -47,6 +47,7 @@ import org.onosproject.net.intent.IntentCompiler; |
47 | import org.onosproject.net.intent.IntentExtensionService; | 47 | import org.onosproject.net.intent.IntentExtensionService; |
48 | import org.onosproject.net.intent.MplsPathIntent; | 48 | import org.onosproject.net.intent.MplsPathIntent; |
49 | import org.onosproject.net.link.LinkStore; | 49 | import org.onosproject.net.link.LinkStore; |
50 | +import org.onosproject.net.resource.ResourceRequest; | ||
50 | import org.onosproject.net.resource.link.DefaultLinkResourceRequest; | 51 | import org.onosproject.net.resource.link.DefaultLinkResourceRequest; |
51 | import org.onosproject.net.resource.link.LinkResourceAllocations; | 52 | import org.onosproject.net.resource.link.LinkResourceAllocations; |
52 | import org.onosproject.net.resource.link.LinkResourceRequest; | 53 | import org.onosproject.net.resource.link.LinkResourceRequest; |
... | @@ -55,13 +56,18 @@ import org.onosproject.net.resource.link.MplsLabel; | ... | @@ -55,13 +56,18 @@ import org.onosproject.net.resource.link.MplsLabel; |
55 | import org.onosproject.net.resource.link.MplsLabelResourceAllocation; | 56 | import org.onosproject.net.resource.link.MplsLabelResourceAllocation; |
56 | import org.onosproject.net.resource.ResourceAllocation; | 57 | import org.onosproject.net.resource.ResourceAllocation; |
57 | import org.onosproject.net.resource.ResourceType; | 58 | import org.onosproject.net.resource.ResourceType; |
59 | +import org.onosproject.net.resource.link.MplsLabelResourceRequest; | ||
58 | import org.slf4j.Logger; | 60 | import org.slf4j.Logger; |
59 | 61 | ||
60 | import java.util.Collections; | 62 | import java.util.Collections; |
63 | +import java.util.HashMap; | ||
61 | import java.util.Iterator; | 64 | import java.util.Iterator; |
62 | import java.util.LinkedList; | 65 | import java.util.LinkedList; |
63 | import java.util.List; | 66 | import java.util.List; |
67 | +import java.util.Map; | ||
68 | +import java.util.Optional; | ||
64 | import java.util.Set; | 69 | import java.util.Set; |
70 | +import java.util.stream.StreamSupport; | ||
65 | 71 | ||
66 | import static com.google.common.base.Preconditions.checkNotNull; | 72 | import static com.google.common.base.Preconditions.checkNotNull; |
67 | import static org.slf4j.LoggerFactory.getLogger; | 73 | import static org.slf4j.LoggerFactory.getLogger; |
... | @@ -117,11 +123,34 @@ public class MplsPathIntentCompiler implements IntentCompiler<MplsPathIntent> { | ... | @@ -117,11 +123,34 @@ public class MplsPathIntentCompiler implements IntentCompiler<MplsPathIntent> { |
117 | linkRequest.add(linkStore.getLink(link.dst(), link.src())); | 123 | linkRequest.add(linkStore.getLink(link.dst(), link.src())); |
118 | } | 124 | } |
119 | 125 | ||
120 | - LinkResourceRequest.Builder request = DefaultLinkResourceRequest | 126 | + Map<Link, MplsLabel> labels = findMplsLabels(linkRequest); |
121 | - .builder(intent.id(), linkRequest).addMplsRequest(); | 127 | + |
122 | - LinkResourceAllocations reqMpls = resourceService | 128 | + LinkResourceRequest request = DefaultLinkResourceRequest |
123 | - .requestResources(request.build()); | 129 | + .builder(intent.id(), linkRequest) |
124 | - return reqMpls; | 130 | + .addMplsRequest(labels) |
131 | + .build(); | ||
132 | + return resourceService.requestResources(request); | ||
133 | + } | ||
134 | + | ||
135 | + private Map<Link, MplsLabel> findMplsLabels(Set<Link> links) { | ||
136 | + Map<Link, MplsLabel> labels = new HashMap<>(); | ||
137 | + for (Link link : links) { | ||
138 | + Optional<MplsLabel> label = findMplsLabel(link); | ||
139 | + if (label.isPresent()) { | ||
140 | + labels.put(link, label.get()); | ||
141 | + } | ||
142 | + } | ||
143 | + | ||
144 | + return labels; | ||
145 | + } | ||
146 | + | ||
147 | + private Optional<MplsLabel> findMplsLabel(Link link) { | ||
148 | + Iterable<ResourceRequest> freeLabels = resourceService.getAvailableResources(link); | ||
149 | + return StreamSupport.stream(freeLabels.spliterator(), false) | ||
150 | + .filter(x -> x instanceof MplsLabelResourceRequest) | ||
151 | + .map(x -> (MplsLabelResourceRequest) x) | ||
152 | + .map(MplsLabelResourceRequest::mplsLabel) | ||
153 | + .findFirst(); | ||
125 | } | 154 | } |
126 | 155 | ||
127 | private MplsLabel getMplsLabel(LinkResourceAllocations allocations, Link link) { | 156 | private MplsLabel getMplsLabel(LinkResourceAllocations allocations, Link link) { | ... | ... |
... | @@ -45,7 +45,6 @@ import org.onosproject.net.resource.link.MplsLabelResourceAllocation; | ... | @@ -45,7 +45,6 @@ import org.onosproject.net.resource.link.MplsLabelResourceAllocation; |
45 | import org.onosproject.net.resource.link.MplsLabelResourceRequest; | 45 | import org.onosproject.net.resource.link.MplsLabelResourceRequest; |
46 | import org.slf4j.Logger; | 46 | import org.slf4j.Logger; |
47 | 47 | ||
48 | -import java.util.Collections; | ||
49 | import java.util.HashMap; | 48 | import java.util.HashMap; |
50 | import java.util.HashSet; | 49 | import java.util.HashSet; |
51 | import java.util.Map; | 50 | import java.util.Map; |
... | @@ -84,28 +83,6 @@ public class LinkResourceManager | ... | @@ -84,28 +83,6 @@ public class LinkResourceManager |
84 | } | 83 | } |
85 | 84 | ||
86 | 85 | ||
87 | - /** | ||
88 | - * Returns available MPLS label on specified link. | ||
89 | - * | ||
90 | - * @param link the link | ||
91 | - * @return available MPLS labels on specified link | ||
92 | - */ | ||
93 | - private Iterable<MplsLabel> getAvailableMplsLabels(Link link) { | ||
94 | - Set<ResourceAllocation> resAllocs = store.getFreeResources(link); | ||
95 | - if (resAllocs == null) { | ||
96 | - return Collections.emptySet(); | ||
97 | - } | ||
98 | - Set<MplsLabel> mplsLabels = new HashSet<>(); | ||
99 | - for (ResourceAllocation res : resAllocs) { | ||
100 | - if (res.type() == ResourceType.MPLS_LABEL) { | ||
101 | - | ||
102 | - mplsLabels.add(((MplsLabelResourceAllocation) res).mplsLabel()); | ||
103 | - } | ||
104 | - } | ||
105 | - | ||
106 | - return mplsLabels; | ||
107 | - } | ||
108 | - | ||
109 | @Override | 86 | @Override |
110 | public LinkResourceAllocations requestResources(LinkResourceRequest req) { | 87 | public LinkResourceAllocations requestResources(LinkResourceRequest req) { |
111 | checkPermission(LINK_WRITE); | 88 | checkPermission(LINK_WRITE); | ... | ... |
-
Please register or login to post a comment