Sho SHIMIZU
Committed by Gerrit Code Review

Remove deprecated interface, its implementation and CLIs

Change-Id: Id644a8cd07abd6e0ece6392790943d401a81d180
/*
* Copyright 2015 Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.cli.net;
import com.google.common.collect.Lists;
import org.apache.karaf.shell.commands.Argument;
import org.apache.karaf.shell.commands.Command;
import org.apache.karaf.shell.commands.Option;
import org.onosproject.cli.AbstractShellCommand;
import org.onosproject.net.DeviceId;
import org.onosproject.net.Link;
import org.onosproject.net.Path;
import org.onosproject.net.intent.IntentId;
import org.onosproject.net.resource.link.DefaultLinkResourceRequest;
import org.onosproject.net.resource.link.LinkResourceAllocations;
import org.onosproject.net.resource.link.LinkResourceRequest;
import org.onosproject.net.resource.link.LinkResourceService;
import org.onosproject.net.topology.PathService;
import java.util.List;
import java.util.Set;
/**
* Commands to test out LinkResourceManager directly.
*
* @deprecated in Emu release
*/
@Deprecated
@Command(scope = "onos", name = "resource-request",
description = "request or remove resources"
+ "[Using deprecated LinkResourceService]")
public class LinkResourceTestCommand extends AbstractShellCommand {
// default is bandwidth.
@Option(name = "-m", aliases = "--mpls", description = "MPLS resource",
required = false, multiValued = false)
private boolean isMpls = false;
@Option(name = "-o", aliases = "--optical", description = "Optical resource",
required = false, multiValued = false)
private boolean isOptical = false;
@Option(name = "-d", aliases = "--delete", description = "Delete resource by intent ID",
required = false, multiValued = false)
private boolean remove = false;
@Argument(index = 0, name = "srcString", description = "Link source",
required = true, multiValued = false)
String srcString = null;
@Argument(index = 1, name = "dstString", description = "Link destination",
required = true, multiValued = false)
String dstString = null;
@Argument(index = 2, name = "id", description = "Identifier",
required = true, multiValued = false)
int id;
private LinkResourceService resService;
private PathService pathService;
private static final int BANDWIDTH = 1_000_000;
@Override
protected void execute() {
resService = get(LinkResourceService.class);
pathService = get(PathService.class);
DeviceId src = DeviceId.deviceId(getDeviceId(srcString));
DeviceId dst = DeviceId.deviceId(getDeviceId(dstString));
IntentId intId = IntentId.valueOf(id);
Set<Path> paths = pathService.getPaths(src, dst);
if (paths == null || paths.isEmpty()) {
print("No path between %s and %s", srcString, dstString);
return;
}
if (remove) {
LinkResourceAllocations lra = resService.getAllocations(intId);
resService.releaseResources(lra);
return;
}
for (Path p : paths) {
List<Link> links = p.links();
LinkResourceRequest.Builder request = null;
if (isMpls) {
List<Link> nlinks = Lists.newArrayList();
try {
nlinks.addAll(links.subList(1, links.size() - 2));
request = DefaultLinkResourceRequest.builder(intId, nlinks)
.addMplsRequest();
} catch (IndexOutOfBoundsException e) {
log.warn("could not allocate MPLS path", e);
continue;
}
} else if (isOptical) {
request = DefaultLinkResourceRequest.builder(intId, links)
.addLambdaRequest();
} else {
request = DefaultLinkResourceRequest.builder(intId, links)
.addBandwidthRequest(BANDWIDTH);
}
if (request != null) {
LinkResourceRequest lrr = request.build();
LinkResourceAllocations lra = resService.requestResources(lrr);
if (lra != null) {
break;
}
print("Allocated:\n%s", lra);
} else {
log.info("nothing to request");
}
}
}
public String getDeviceId(String deviceString) {
int slash = deviceString.indexOf('/');
if (slash <= 0) {
return "";
}
return deviceString.substring(0, slash);
}
}
/*
* Copyright 2014 Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.cli.net;
import org.apache.karaf.shell.commands.Argument;
import org.apache.karaf.shell.commands.Command;
import org.onosproject.cli.AbstractShellCommand;
import org.onosproject.net.ConnectPoint;
import org.onosproject.net.Link;
import org.onosproject.net.link.LinkService;
import org.onosproject.net.resource.link.LinkResourceService;
/**
* Lists allocations by link. Lists all allocations if link is unspecified.
*
* @deprecated in Emu release
*/
@Deprecated
@Command(scope = "onos", name = "resource-allocations",
description = "Lists allocations by link. Lists all allocations if link is unspecified."
+ "[Using deprecated LinkResourceService]")
public class ResourceAllocationsCommand extends AbstractShellCommand {
private static final String FMT = "src=%s/%s, dst=%s/%s, type=%s%s";
private static final String COMPACT = "%s/%s-%s/%s";
@Argument(index = 0, name = "srcString", description = "Link source",
required = false, multiValued = false)
String srcString = null;
@Argument(index = 1, name = "dstString", description = "Link destination",
required = false, multiValued = false)
String dstString = null;
@Override
protected void execute() {
LinkResourceService resourceService = get(LinkResourceService.class);
LinkService linkService = get(LinkService.class);
if (srcString == null || dstString == null) {
print("----- Displaying all resource allocations -----");
resourceService.getAllocations().forEach(alloc -> print("%s", alloc));
return;
}
ConnectPoint src = ConnectPoint.deviceConnectPoint(srcString);
ConnectPoint dst = ConnectPoint.deviceConnectPoint(dstString);
Link link = linkService.getLink(src, dst);
if (link != null) {
resourceService.getAllocations(link).forEach(alloc -> print("%s", alloc));
} else {
print("No path found for endpoints: %s, %s", src, dst);
}
}
}
/*
* Copyright 2014 Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.cli.net;
import org.apache.karaf.shell.commands.Argument;
import org.apache.karaf.shell.commands.Command;
import org.onosproject.cli.AbstractShellCommand;
import org.onosproject.net.ConnectPoint;
import org.onosproject.net.Link;
import org.onosproject.net.link.LinkService;
import org.onosproject.net.resource.link.LinkResourceService;
import org.onosproject.net.resource.ResourceRequest;
/**
* Lists allocations by link.
*
* @deprecated in Emu release
*/
@Deprecated
@Command(scope = "onos", name = "resource-available",
description = "Lists available resources by link"
+ "[Using deprecated LinkResourceService]")
public class ResourceAvailableCommand extends AbstractShellCommand {
private static final String FMT = "src=%s/%s, dst=%s/%s, type=%s%s";
private static final String COMPACT = "%s/%s-%s/%s";
@Argument(index = 0, name = "srcString", description = "Link source",
required = false, multiValued = false)
String srcString = null;
@Argument(index = 1, name = "dstString", description = "Link destination",
required = false, multiValued = false)
String dstString = null;
@Override
protected void execute() {
LinkResourceService resourceService = get(LinkResourceService.class);
LinkService linkService = get(LinkService.class);
Iterable<ResourceRequest> itr = null;
try {
ConnectPoint src = ConnectPoint.deviceConnectPoint(srcString);
ConnectPoint dst = ConnectPoint.deviceConnectPoint(dstString);
Link link = linkService.getLink(src, dst);
itr = resourceService.getAvailableResources(link);
int lambdaCount = 0;
for (ResourceRequest req : itr) {
switch (req.type()) {
case LAMBDA:
lambdaCount++;
break;
case BANDWIDTH:
print("%s", req);
break;
default:
break;
}
}
if (lambdaCount > 0) {
print("Number of available lambdas: %d", lambdaCount);
}
} catch (Exception e) {
print("Invalid link %s", e.getMessage());
}
}
}
......@@ -368,29 +368,6 @@
</completers>
</command>
<!-- Should deprecate following 3 commands soon. -->
<command>
<action class="org.onosproject.cli.net.ResourceAllocationsCommand"/>
<completers>
<ref component-id="connectPointCompleter"/>
<ref component-id="connectPointCompleter"/>
</completers>
</command>
<command>
<action class="org.onosproject.cli.net.ResourceAvailableCommand"/>
<completers>
<ref component-id="connectPointCompleter"/>
<ref component-id="connectPointCompleter"/>
</completers>
</command>
<command>
<action class="org.onosproject.cli.net.LinkResourceTestCommand"/>
<completers>
<ref component-id="connectPointCompleter"/>
<ref component-id="connectPointCompleter"/>
<null/>
</completers>
</command>
<command>
<action class="org.onosproject.cli.net.ClustersListCommand"/>
</command>
......
/*
* Copyright 2014 Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.net.resource.link;
import org.onosproject.event.ListenerService;
import org.onosproject.net.Link;
import org.onosproject.net.intent.IntentId;
import org.onosproject.net.resource.ResourceRequest;
/**
* Service for providing link resource allocation.
*
* @deprecated in Emu Release
*/
@Deprecated
public interface LinkResourceService
extends ListenerService<LinkResourceEvent, LinkResourceListener> {
/**
* Requests resources.
*
* @param req resources to be allocated
* @return allocated resources
* @deprecated in Emu Release
*/
@Deprecated
LinkResourceAllocations requestResources(LinkResourceRequest req);
/**
* Releases resources.
*
* @param allocations resources to be released
* @deprecated in Emu Release
*/
@Deprecated
void releaseResources(LinkResourceAllocations allocations);
/**
* Updates previously made allocations with a new resource request.
*
* @param req updated resource request
* @param oldAllocations old resource allocations
* @return new resource allocations
* @deprecated in Emu Release
*/
@Deprecated
LinkResourceAllocations updateResources(LinkResourceRequest req,
LinkResourceAllocations oldAllocations);
/**
* Returns all allocated resources.
*
* @return allocated resources
* @deprecated in Emu Release
*/
@Deprecated
Iterable<LinkResourceAllocations> getAllocations();
/**
* Returns all allocated resources to given link.
*
* @param link a target link
* @return allocated resources
* @deprecated in Emu Release
*/
@Deprecated
Iterable<LinkResourceAllocations> getAllocations(Link link);
/**
* Returns the resources allocated for an Intent.
*
* @param intentId the target Intent's id
* @return allocated resources for Intent
* @deprecated in Emu Release
*/
@Deprecated
LinkResourceAllocations getAllocations(IntentId intentId);
/**
* Returns available resources for given link.
*
* @param link a target link
* @return available resources for the target link
* @deprecated in Emu Release
*/
@Deprecated
Iterable<ResourceRequest> getAvailableResources(Link link);
/**
* Returns available resources for given link.
*
* @param link a target link
* @param allocations allocations to be included as available
* @return available resources for the target link
* @deprecated in Emu Release
*/
@Deprecated
Iterable<ResourceRequest> getAvailableResources(Link link,
LinkResourceAllocations allocations);
}
/*
* Copyright 2014-2015 Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.net.resource.impl;
import com.google.common.collect.Sets;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.apache.felix.scr.annotations.Service;
import org.onosproject.event.AbstractListenerManager;
import org.onosproject.net.Link;
import org.onosproject.net.intent.IntentId;
import org.onosproject.net.resource.ResourceAllocation;
import org.onosproject.net.resource.ResourceRequest;
import org.onosproject.net.resource.ResourceType;
import org.onosproject.net.resource.link.BandwidthResourceAllocation;
import org.onosproject.net.resource.link.BandwidthResourceRequest;
import org.onosproject.net.resource.link.DefaultLinkResourceAllocations;
import org.onosproject.net.resource.link.LambdaResourceAllocation;
import org.onosproject.net.resource.link.LambdaResourceRequest;
import org.onosproject.net.resource.link.LinkResourceAllocations;
import org.onosproject.net.resource.link.LinkResourceEvent;
import org.onosproject.net.resource.link.LinkResourceListener;
import org.onosproject.net.resource.link.LinkResourceRequest;
import org.onosproject.net.resource.link.LinkResourceService;
import org.onosproject.net.resource.link.LinkResourceStore;
import org.onosproject.net.resource.link.LinkResourceStoreDelegate;
import org.onosproject.net.resource.link.MplsLabel;
import org.onosproject.net.resource.link.MplsLabelResourceAllocation;
import org.onosproject.net.resource.link.MplsLabelResourceRequest;
import org.slf4j.Logger;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import static org.onosproject.security.AppGuard.checkPermission;
import static org.slf4j.LoggerFactory.getLogger;
import static org.onosproject.security.AppPermission.Type.*;
/**
* Provides basic implementation of link resources allocation.
*/
@Component(immediate = true)
@Service
public class LinkResourceManager
extends AbstractListenerManager<LinkResourceEvent, LinkResourceListener>
implements LinkResourceService {
private final Logger log = getLogger(getClass());
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
private LinkResourceStore store;
@Activate
public void activate() {
eventDispatcher.addSink(LinkResourceEvent.class, listenerRegistry);
log.info("Started");
}
@Deactivate
public void deactivate() {
eventDispatcher.removeSink(LinkResourceEvent.class);
log.info("Stopped");
}
@Override
public LinkResourceAllocations requestResources(LinkResourceRequest req) {
checkPermission(LINK_WRITE);
// TODO Concatenate multiple bandwidth requests.
// TODO Support multiple lambda resource requests.
// TODO Throw appropriate exception.
Set<ResourceAllocation> allocs = new HashSet<>();
Map<Link, Set<ResourceAllocation>> allocsPerLink = new HashMap<>();
for (ResourceRequest r : req.resources()) {
switch (r.type()) {
case BANDWIDTH:
BandwidthResourceRequest br = (BandwidthResourceRequest) r;
allocs.add(new BandwidthResourceAllocation(br.bandwidth()));
break;
case LAMBDA:
LambdaResourceRequest lr = (LambdaResourceRequest) r;
allocs.add(new LambdaResourceAllocation(lr.lambda()));
break;
case MPLS_LABEL:
for (Link link : req.links()) {
if (allocsPerLink.get(link) == null) {
allocsPerLink.put(link, new HashSet<>());
}
Optional<MplsLabel> label = req.resources(link).stream()
.filter(x -> x.type() == ResourceType.MPLS_LABEL)
.map(x -> (MplsLabelResourceRequest) x)
.map(MplsLabelResourceRequest::mplsLabel)
.findFirst();
if (label.isPresent()) {
allocsPerLink.get(link).add(new MplsLabelResourceAllocation(label.get()));
} else {
log.info("Failed to allocate MPLS resource.");
break;
}
}
break;
default:
break;
}
}
Map<Link, Set<ResourceAllocation>> allocations = new HashMap<>();
for (Link link : req.links()) {
allocations.put(link, new HashSet<>(allocs));
Set<ResourceAllocation> linkAllocs = allocsPerLink.get(link);
if (linkAllocs != null) {
allocations.get(link).addAll(linkAllocs);
}
}
LinkResourceAllocations result =
new DefaultLinkResourceAllocations(req, allocations);
store.allocateResources(result);
return result;
}
@Override
public void releaseResources(LinkResourceAllocations allocations) {
checkPermission(LINK_WRITE);
final LinkResourceEvent event = store.releaseResources(allocations);
if (event != null) {
post(event);
}
}
@Override
public LinkResourceAllocations updateResources(LinkResourceRequest req,
LinkResourceAllocations oldAllocations) {
checkPermission(LINK_WRITE);
releaseResources(oldAllocations);
return requestResources(req);
}
@Override
public Iterable<LinkResourceAllocations> getAllocations() {
checkPermission(LINK_READ);
return store.getAllocations();
}
@Override
public Iterable<LinkResourceAllocations> getAllocations(Link link) {
checkPermission(LINK_READ);
return store.getAllocations(link);
}
@Override
public LinkResourceAllocations getAllocations(IntentId intentId) {
checkPermission(LINK_READ);
return store.getAllocations(intentId);
}
@Override
public Iterable<ResourceRequest> getAvailableResources(Link link) {
checkPermission(LINK_READ);
Set<ResourceAllocation> freeRes = store.getFreeResources(link);
Set<ResourceRequest> result = new HashSet<>();
for (ResourceAllocation alloc : freeRes) {
switch (alloc.type()) {
case BANDWIDTH:
result.add(new BandwidthResourceRequest(
((BandwidthResourceAllocation) alloc).bandwidth()));
break;
case LAMBDA:
result.add(new LambdaResourceRequest(
((LambdaResourceAllocation) alloc).lambda()));
break;
case MPLS_LABEL:
result.add(new MplsLabelResourceRequest(
((MplsLabelResourceAllocation) alloc).mplsLabel()));
break;
default:
break;
}
}
return result;
}
@Override
public Iterable<ResourceRequest> getAvailableResources(Link link,
LinkResourceAllocations allocations) {
checkPermission(LINK_READ);
Set<ResourceAllocation> allocatedRes = allocations.getResourceAllocation(link);
Set<ResourceRequest> result = Sets.newHashSet(getAvailableResources(link));
result.removeAll(allocatedRes);
return result;
}
/**
* Store delegate to re-post events emitted from the store.
*/
private class InternalStoreDelegate implements LinkResourceStoreDelegate {
@Override
public void notify(LinkResourceEvent event) {
post(event);
}
}
}
......@@ -541,4 +541,4 @@ public final class DefaultPolicyBuilder {
}
return permissions;
}
}
\ No newline at end of file
}
......