tom

Changed the way ProviderId is made to include URI scheme portion.

Showing 27 changed files with 74 additions and 35 deletions
package org.onlab.onos.net.provider;
import com.google.common.collect.ImmutableSet;
import org.onlab.onos.net.DeviceId;
import java.util.HashMap;
import java.util.Map;
......@@ -20,6 +21,7 @@ public abstract class AbstractProviderRegistry<P extends Provider, S extends Pro
private final Map<ProviderId, P> providers = new HashMap<>();
private final Map<ProviderId, S> services = new HashMap<>();
private final Map<String, P> providersByScheme = new HashMap<>();
/**
* Creates a new provider service bound to the specified provider.
......@@ -65,4 +67,14 @@ public abstract class AbstractProviderRegistry<P extends Provider, S extends Pro
return providers.get(providerId);
}
/**
* Returns the provider for the specified device ID based on URI scheme.
*
* @param deviceId device identifier
* @return provider bound to the URI scheme
*/
protected synchronized P getProvider(DeviceId deviceId) {
return providersByScheme.get(deviceId.uri().getScheme());
}
}
......
......@@ -9,6 +9,7 @@ import static com.google.common.base.MoreObjects.toStringHelper;
*/
public class ProviderId {
private final String scheme;
private final String id;
/**
......@@ -16,15 +17,26 @@ public class ProviderId {
* The providers are expected to follow the reverse DNS convention, e.g.
* {@code org.onlab.onos.provider.of.device}
*
* @param id string identifier
* @param scheme device URI scheme to which this provider is bound, e.g. "of", "snmp"
* @param id string identifier
*/
public ProviderId(String id) {
public ProviderId(String scheme, String id) {
this.scheme = scheme;
this.id = id;
}
/**
* Returns the device URI scheme to which this provider is bound.
*
* @return device URI scheme
*/
public String scheme() {
return scheme;
}
@Override
public int hashCode() {
return Objects.hash(id);
return Objects.hash(scheme, id);
}
@Override
......@@ -36,12 +48,13 @@ public class ProviderId {
return false;
}
final ProviderId other = (ProviderId) obj;
return Objects.equals(this.id, other.id);
return Objects.equals(this.scheme, other.scheme) &&
Objects.equals(this.id, other.id);
}
@Override
public String toString() {
return toStringHelper(this).add("id", id).toString();
return toStringHelper(this).add("scheme", scheme).add("id", id).toString();
}
}
......
......@@ -13,7 +13,7 @@ import static org.onlab.onos.net.DeviceId.deviceId;
*/
public class DefaultDeviceTest {
private static final ProviderId PID = new ProviderId("foo");
private static final ProviderId PID = new ProviderId("of", "foo");
private static final DeviceId DID1 = deviceId("of:foo");
private static final DeviceId DID2 = deviceId("of:bar");
private static final String MFR = "whitebox";
......
......@@ -15,7 +15,7 @@ import static org.onlab.onos.net.PortNumber.portNumber;
*/
public class DefaultEdgeLinkTest {
private static final ProviderId PID = new ProviderId("foo");
private static final ProviderId PID = new ProviderId("of", "foo");
private static final DeviceId DID1 = deviceId("of:foo");
private static final HostId HID1 = hostId("nic:foobar");
private static final HostId HID2 = hostId("nic:barfoo");
......
......@@ -15,7 +15,7 @@ import static org.onlab.onos.net.PortNumber.portNumber;
*/
public class DefaultLinkTest {
private static final ProviderId PID = new ProviderId("foo");
private static final ProviderId PID = new ProviderId("of", "foo");
private static final DeviceId DID1 = deviceId("of:foo");
private static final DeviceId DID2 = deviceId("of:bar");
private static final PortNumber P1 = portNumber(1);
......
......@@ -14,7 +14,7 @@ import static org.onlab.onos.net.PortNumber.portNumber;
*/
public class DefaultPortTest {
private static final ProviderId PID = new ProviderId("foo");
private static final ProviderId PID = new ProviderId("of", "foo");
private static final DeviceId DID1 = deviceId("of:foo");
private static final DeviceId DID2 = deviceId("of:bar");
private static final PortNumber P1 = portNumber(1);
......
......@@ -17,7 +17,7 @@ import com.google.common.collect.Sets;
*/
public abstract class TestDeviceParams {
protected static final ProviderId PID = new ProviderId("foo");
protected static final ProviderId PID = new ProviderId("of", "foo");
protected static final DeviceId DID1 = deviceId("of:foo");
protected static final DeviceId DID2 = deviceId("of:bar");
protected static final MacAddress MAC1 = MacAddress.valueOf("00:11:00:00:00:01");
......
......@@ -18,7 +18,7 @@ import org.onlab.onos.net.provider.ProviderId;
public class DeviceEventTest extends AbstractEventTest {
private Device createDevice() {
return new DefaultDevice(new ProviderId("foo"), deviceId("of:foo"),
return new DefaultDevice(new ProviderId("of", "foo"), deviceId("of:foo"),
Device.Type.SWITCH, "box", "hw", "sw", "sn");
}
......
......@@ -34,7 +34,7 @@ public class HostEventTest extends AbstractEventTest {
HostId hid = HostId.hostId(mac, vlan);
return new DefaultHost(
new ProviderId("foo"), hid, mac, vlan, loc, ipset);
new ProviderId("of", "foo"), hid, mac, vlan, loc, ipset);
}
@Override
......
......@@ -16,7 +16,7 @@ import static org.onlab.onos.net.PortNumber.portNumber;
public class LinkEventTest extends AbstractEventTest {
private Link createLink() {
return new DefaultLink(new ProviderId("foo"),
return new DefaultLink(new ProviderId("of", "foo"),
new ConnectPoint(deviceId("of:foo"), portNumber(1)),
new ConnectPoint(deviceId("of:bar"), portNumber(2)),
Link.Type.INDIRECT);
......
......@@ -28,14 +28,14 @@ public class AbstractProviderRegistryTest {
TestProviderRegistry registry = new TestProviderRegistry();
assertEquals("incorrect provider count", 0, registry.getProviders().size());
ProviderId fooId = new ProviderId("foo");
ProviderId fooId = new ProviderId("of", "foo");
TestProvider pFoo = new TestProvider(fooId);
TestProviderService psFoo = registry.register(pFoo);
assertEquals("incorrect provider count", 1, registry.getProviders().size());
assertThat("provider not found", registry.getProviders().contains(fooId));
assertEquals("incorrect provider", psFoo.provider(), pFoo);
ProviderId barId = new ProviderId("bar");
ProviderId barId = new ProviderId("of", "bar");
TestProvider pBar = new TestProvider(barId);
TestProviderService psBar = registry.register(pBar);
assertEquals("incorrect provider count", 2, registry.getProviders().size());
......@@ -52,7 +52,7 @@ public class AbstractProviderRegistryTest {
@Test(expected = IllegalStateException.class)
public void duplicateRegistration() {
TestProviderRegistry registry = new TestProviderRegistry();
TestProvider pFoo = new TestProvider(new ProviderId("foo"));
TestProvider pFoo = new TestProvider(new ProviderId("of", "foo"));
registry.register(pFoo);
registry.register(pFoo);
}
......@@ -60,13 +60,13 @@ public class AbstractProviderRegistryTest {
@Test
public void voidUnregistration() {
TestProviderRegistry registry = new TestProviderRegistry();
registry.unregister(new TestProvider(new ProviderId("foo")));
registry.unregister(new TestProvider(new ProviderId("of", "foo")));
}
@Test(expected = IllegalStateException.class)
public void unregistration() {
TestProviderRegistry registry = new TestProviderRegistry();
TestProvider pFoo = new TestProvider(new ProviderId("foo"));
TestProvider pFoo = new TestProvider(new ProviderId("of", "foo"));
TestProviderService psFoo = registry.register(pFoo);
registry.unregister(pFoo);
psFoo.checkValidity();
......
......@@ -11,7 +11,7 @@ public class AbstractProviderTest {
@Test
public void basics() {
ProviderId id = new ProviderId("foo.bar");
ProviderId id = new ProviderId("of", "foo.bar");
TestProvider provider = new TestProvider(id);
assertEquals("incorrect id", id, provider.id());
}
......
......@@ -11,8 +11,9 @@ public class ProviderIdTest {
@Test
public void basics() {
new EqualsTester()
.addEqualityGroup(new ProviderId("foo"), new ProviderId("foo"))
.addEqualityGroup(new ProviderId("bar"))
.addEqualityGroup(new ProviderId("of", "foo"), new ProviderId("of", "foo"))
.addEqualityGroup(new ProviderId("snmp", "foo"), new ProviderId("snmp", "foo"))
.addEqualityGroup(new ProviderId("of", "bar"))
.testEquals();
}
......
......@@ -45,7 +45,7 @@ public class DefaultTopology extends AbstractModel implements Topology {
private static final TarjanGraphSearch<TopologyVertex, TopologyEdge> TARJAN =
new TarjanGraphSearch<>();
private static final ProviderId PID = new ProviderId("org.onlab.onos.net");
private static final ProviderId PID = new ProviderId("core", "org.onlab.onos.net");
private final long time;
private final TopologyGraph graph;
......
......@@ -74,7 +74,7 @@ public class DefaultTopologyProvider extends AbstractProvider
* Creates a provider with the supplier identifier.
*/
public DefaultTopologyProvider() {
super(new ProviderId("org.onlab.onos.provider.topology"));
super(new ProviderId("core", "org.onlab.onos.provider.topology"));
}
@Activate
......
......@@ -45,7 +45,7 @@ public class SimplePathManager implements PathService {
private static final String ELEMENT_ID_NULL = "Element ID cannot be null";
private static final ProviderId PID = new ProviderId("org.onlab.onos.core");
private static final ProviderId PID = new ProviderId("core", "org.onlab.onos.core");
private static final PortNumber P0 = PortNumber.portNumber(0);
private static final EdgeLink NOT_HOST = new NotHost();
......
......@@ -38,7 +38,7 @@ import static org.onlab.onos.net.device.DeviceEvent.Type.*;
*/
public class SimpleDeviceManagerTest {
private static final ProviderId PID = new ProviderId("foo");
private static final ProviderId PID = new ProviderId("of", "foo");
private static final DeviceId DID1 = deviceId("of:foo");
private static final DeviceId DID2 = deviceId("of:bar");
private static final String MFR = "whitebox";
......
......@@ -42,7 +42,7 @@ import static org.onlab.onos.net.host.HostEvent.Type.*;
*/
public class SimpleHostManagerTest {
private static final ProviderId PID = new ProviderId("foo");
private static final ProviderId PID = new ProviderId("of", "foo");
private static final VlanId VLAN1 = VlanId.vlanId((short) 1);
private static final VlanId VLAN2 = VlanId.vlanId((short) 2);
......
......@@ -40,7 +40,7 @@ import static org.onlab.onos.net.link.LinkEvent.Type.*;
*/
public class SimpleLinkManagerTest {
private static final ProviderId PID = new ProviderId("foo");
private static final ProviderId PID = new ProviderId("of", "foo");
private static final DeviceId DID1 = deviceId("of:foo");
private static final DeviceId DID2 = deviceId("of:bar");
private static final DeviceId DID3 = deviceId("of:goo");
......
......@@ -29,7 +29,7 @@ import static org.onlab.onos.net.trivial.topology.impl.SimpleTopologyManagerTest
*/
public class DefaultTopologyTest {
public static final ProviderId PID = new ProviderId("foo.bar");
public static final ProviderId PID = new ProviderId("of", "foo.bar");
public static final DeviceId D1 = deviceId("of:1");
public static final DeviceId D2 = deviceId("of:2");
......
......@@ -43,7 +43,7 @@ import static org.onlab.onos.net.topology.TopologyEvent.Type.TOPOLOGY_CHANGED;
*/
public class SimpleTopologyManagerTest {
private static final ProviderId PID = new ProviderId("foo");
private static final ProviderId PID = new ProviderId("of", "foo");
private SimpleTopologyManager mgr;
......
......@@ -60,7 +60,7 @@ public class OpenFlowDeviceProvider extends AbstractProvider implements DevicePr
* Creates an OpenFlow device provider.
*/
public OpenFlowDeviceProvider() {
super(new ProviderId("org.onlab.onos.provider.openflow"));
super(new ProviderId("of", "org.onlab.onos.provider.openflow"));
}
@Activate
......
......@@ -57,7 +57,7 @@ public class OpenFlowRuleProvider extends AbstractProvider implements FlowRulePr
* Creates an OpenFlow host provider.
*/
public OpenFlowRuleProvider() {
super(new ProviderId("org.onlab.onos.provider.openflow"));
super(new ProviderId("of", "org.onlab.onos.provider.openflow"));
}
@Activate
......
......@@ -61,7 +61,7 @@ public class OpenFlowHostProvider extends AbstractProvider implements HostProvid
* Creates an OpenFlow host provider.
*/
public OpenFlowHostProvider() {
super(new ProviderId("org.onlab.onos.provider.openflow"));
super(new ProviderId("of", "org.onlab.onos.provider.openflow"));
}
@Activate
......
......@@ -55,7 +55,7 @@ public class OpenFlowLinkProvider extends AbstractProvider implements LinkProvid
* Creates an OpenFlow link provider.
*/
public OpenFlowLinkProvider() {
super(new ProviderId("org.onlab.onos.provider.openflow"));
super(new ProviderId("of", "org.onlab.onos.provider.openflow"));
}
@Activate
......
......@@ -48,7 +48,7 @@ public class OpenFlowPacketProvider extends AbstractProvider implements PacketPr
* Creates an OpenFlow link provider.
*/
public OpenFlowPacketProvider() {
super(new ProviderId("org.onlab.onos.provider.openflow"));
super(new ProviderId("of", "org.onlab.onos.provider.openflow"));
}
@Activate
......
......@@ -32,18 +32,31 @@ cp -r $ONOS_ROOT/tools/package/wrapper/* $KARAF_DIST
mkdir -p $KARAF_DIST/system/org/onlab
cp -r $M2_REPO/org/onlab $KARAF_DIST/system/org/
# Wrapper & Cellar Patching ----------------------------------------------------
# Patch the Apache Karaf distribution file to add Cellar features repository
perl -pi.old -e "s|^(featuresRepositories=.*)|\1,mvn:org.apache.karaf.cellar/apache-karaf-cellar/3.0.0/xml/features|" \
$ONOS_STAGE/$KARAF_DIST/etc/org.apache.karaf.features.cfg
# Patch the Apache Karaf distribution file to load ONOS features
perl -pi.old -e 's|^(featuresBoot=.*)|\1,wrapper,cellar|' \
$ONOS_STAGE/$KARAF_DIST/etc/org.apache.karaf.features.cfg
# ONOS Patching ----------------------------------------------------------------
# Patch the Apache Karaf distribution file to add ONOS features repository
perl -pi.old -e "s|^(featuresRepositories=.*)|\1,mvn:org.onlab.onos/onos-features/$ONOS_VERSION/xml/features|" \
$ONOS_STAGE/$KARAF_DIST/etc/org.apache.karaf.features.cfg
# Patch the Apache Karaf distribution file to load ONOS features
perl -pi.old -e 's|^(featuresBoot=.*)|\1,wrapper,onos-api,onos-core,onos-cli,onos-rest,onos-gui,onos-openflow,onos-app-tvue|' \
perl -pi.old -e 's|^(featuresBoot=.*)|\1,onos-api,onos-core,onos-cli,onos-rest,onos-gui,onos-openflow,onos-app-tvue|' \
$ONOS_STAGE/$KARAF_DIST/etc/org.apache.karaf.features.cfg
# Patch the Apache Karaf distribution with ONOS branding bundle
cp $M2_REPO/org/onlab/onos/onos-branding/$ONOS_VERSION/onos-branding-*.jar \
$ONOS_STAGE/$KARAF_DIST/lib
# Now package up the ONOS tar file
cd $ONOS_STAGE_ROOT
COPYFILE_DISABLE=1 tar zcf $ONOS_TAR $ONOS_BITS
......