Move MPLS label selection logic to MplsPathIntentCompiler

Change-Id: I2c64ca2a6ac363a0138e6940471893673ce3b83f
This commit is contained in:
Sho SHIMIZU 2015-10-28 18:38:45 -07:00 committed by Gerrit Code Review
parent 9f676b64af
commit cc0e65dbb0
2 changed files with 34 additions and 28 deletions

View File

@ -47,6 +47,7 @@ import org.onosproject.net.intent.IntentCompiler;
import org.onosproject.net.intent.IntentExtensionService; import org.onosproject.net.intent.IntentExtensionService;
import org.onosproject.net.intent.MplsPathIntent; import org.onosproject.net.intent.MplsPathIntent;
import org.onosproject.net.link.LinkStore; import org.onosproject.net.link.LinkStore;
import org.onosproject.net.resource.ResourceRequest;
import org.onosproject.net.resource.link.DefaultLinkResourceRequest; import org.onosproject.net.resource.link.DefaultLinkResourceRequest;
import org.onosproject.net.resource.link.LinkResourceAllocations; import org.onosproject.net.resource.link.LinkResourceAllocations;
import org.onosproject.net.resource.link.LinkResourceRequest; import org.onosproject.net.resource.link.LinkResourceRequest;
@ -55,13 +56,18 @@ import org.onosproject.net.resource.link.MplsLabel;
import org.onosproject.net.resource.link.MplsLabelResourceAllocation; import org.onosproject.net.resource.link.MplsLabelResourceAllocation;
import org.onosproject.net.resource.ResourceAllocation; import org.onosproject.net.resource.ResourceAllocation;
import org.onosproject.net.resource.ResourceType; import org.onosproject.net.resource.ResourceType;
import org.onosproject.net.resource.link.MplsLabelResourceRequest;
import org.slf4j.Logger; import org.slf4j.Logger;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set; import java.util.Set;
import java.util.stream.StreamSupport;
import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkNotNull;
import static org.slf4j.LoggerFactory.getLogger; import static org.slf4j.LoggerFactory.getLogger;
@ -117,11 +123,34 @@ public class MplsPathIntentCompiler implements IntentCompiler<MplsPathIntent> {
linkRequest.add(linkStore.getLink(link.dst(), link.src())); linkRequest.add(linkStore.getLink(link.dst(), link.src()));
} }
LinkResourceRequest.Builder request = DefaultLinkResourceRequest Map<Link, MplsLabel> labels = findMplsLabels(linkRequest);
.builder(intent.id(), linkRequest).addMplsRequest();
LinkResourceAllocations reqMpls = resourceService LinkResourceRequest request = DefaultLinkResourceRequest
.requestResources(request.build()); .builder(intent.id(), linkRequest)
return reqMpls; .addMplsRequest(labels)
.build();
return resourceService.requestResources(request);
}
private Map<Link, MplsLabel> findMplsLabels(Set<Link> links) {
Map<Link, MplsLabel> labels = new HashMap<>();
for (Link link : links) {
Optional<MplsLabel> label = findMplsLabel(link);
if (label.isPresent()) {
labels.put(link, label.get());
}
}
return labels;
}
private Optional<MplsLabel> findMplsLabel(Link link) {
Iterable<ResourceRequest> freeLabels = resourceService.getAvailableResources(link);
return StreamSupport.stream(freeLabels.spliterator(), false)
.filter(x -> x instanceof MplsLabelResourceRequest)
.map(x -> (MplsLabelResourceRequest) x)
.map(MplsLabelResourceRequest::mplsLabel)
.findFirst();
} }
private MplsLabel getMplsLabel(LinkResourceAllocations allocations, Link link) { private MplsLabel getMplsLabel(LinkResourceAllocations allocations, Link link) {

View File

@ -45,7 +45,6 @@ import org.onosproject.net.resource.link.MplsLabelResourceAllocation;
import org.onosproject.net.resource.link.MplsLabelResourceRequest; import org.onosproject.net.resource.link.MplsLabelResourceRequest;
import org.slf4j.Logger; import org.slf4j.Logger;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Map; import java.util.Map;
@ -84,28 +83,6 @@ public class LinkResourceManager
} }
/**
* Returns available MPLS label on specified link.
*
* @param link the link
* @return available MPLS labels on specified link
*/
private Iterable<MplsLabel> getAvailableMplsLabels(Link link) {
Set<ResourceAllocation> resAllocs = store.getFreeResources(link);
if (resAllocs == null) {
return Collections.emptySet();
}
Set<MplsLabel> mplsLabels = new HashSet<>();
for (ResourceAllocation res : resAllocs) {
if (res.type() == ResourceType.MPLS_LABEL) {
mplsLabels.add(((MplsLabelResourceAllocation) res).mplsLabel());
}
}
return mplsLabels;
}
@Override @Override
public LinkResourceAllocations requestResources(LinkResourceRequest req) { public LinkResourceAllocations requestResources(LinkResourceRequest req) {
checkPermission(LINK_WRITE); checkPermission(LINK_WRITE);