Changed trivial core behaviour to claim switch as a master by default and to apply role to the switch.
diff --git a/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManager.java b/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManager.java
index e522064..ac84e7b 100644
--- a/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManager.java
+++ b/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManager.java
@@ -27,8 +27,11 @@
import org.slf4j.Logger;
import java.util.List;
+import java.util.concurrent.ExecutorService;
import static com.google.common.base.Preconditions.checkNotNull;
+import static java.util.concurrent.Executors.newSingleThreadExecutor;
+import static org.onlab.util.Tools.namedThreads;
import static org.slf4j.LoggerFactory.getLogger;
/**
@@ -53,6 +56,9 @@
private final SimpleDeviceStore store = new SimpleDeviceStore();
+ private final ExecutorService executor =
+ newSingleThreadExecutor(namedThreads("onos-device-%d"));
+
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected EventDeliveryService eventDispatcher;
@@ -163,6 +169,11 @@
DeviceEvent event = store.createOrUpdateDevice(provider().id(),
deviceId, deviceDescription);
post(event);
+
+ // If there was a change of any kind, trigger role selection process.
+ if (event != null) {
+ triggerRoleSelection(event.subject(), provider());
+ }
}
@Override
@@ -199,6 +210,22 @@
}
}
+ /**
+ * Triggers asynchronous role selection.
+ *
+ * @param device device
+ * @param provider device provider
+ */
+ private void triggerRoleSelection(final Device device,
+ final DeviceProvider provider) {
+ executor.execute(new Runnable() {
+ @Override
+ public void run() {
+ provider.roleChanged(device, store.getRole(device.id()));
+ }
+ });
+ }
+
// Posts the specified event to the local event dispatcher.
private void post(DeviceEvent event) {
if (event != null && eventDispatcher != null) {