Fix ONOS-7958 - problems that were causing failures when onos-core restarts
Change-Id: I186107a386827d66f017182a573377a6a7bb7b00
diff --git a/core/net/src/main/java/org/onosproject/cfg/impl/ComponentConfigManager.java b/core/net/src/main/java/org/onosproject/cfg/impl/ComponentConfigManager.java
index 42af52e..2fa8abb 100644
--- a/core/net/src/main/java/org/onosproject/cfg/impl/ComponentConfigManager.java
+++ b/core/net/src/main/java/org/onosproject/cfg/impl/ComponentConfigManager.java
@@ -364,10 +364,16 @@
} else if (!Objects.equals(globalValue, localValue)) {
// If the local value is different from global value
// validate the global value and apply it locally.
+ String newValue;
+ if (globalValue != null) {
+ newValue = globalValue;
+ } else {
+ newValue = localValue;
+ }
log.debug("Setting {} property {} to {}",
- componentName, name, globalValue);
- checkValidity(componentName, name, globalValue);
- set(componentName, name, globalValue);
+ componentName, name, newValue);
+ checkValidity(componentName, name, newValue);
+ set(componentName, name, newValue);
} else {
// Otherwise, simply update the registered property
@@ -377,8 +383,8 @@
map.put(name, ConfigProperty.setProperty(p, globalValue));
}
} catch (IllegalArgumentException e) {
- log.warn("Value {} is not a valid {}; using default",
- globalValue, p.type());
+ log.warn("Value {} for property {} is not a valid {}; using default",
+ globalValue, name, p.type());
reset(componentName, name);
}
}
diff --git a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java
index 8ed8a57..e274ae8 100644
--- a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java
+++ b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java
@@ -1064,7 +1064,9 @@
private DeviceId extractDeviceId(NetworkConfigEvent event) {
DeviceId deviceId = null;
if (event.configClass().equals(PortAnnotationConfig.class)) {
- deviceId = ((ConnectPoint) event.subject()).deviceId();
+ if (event.subject().getClass() == ConnectPoint.class) {
+ deviceId = ((ConnectPoint) event.subject()).deviceId();
+ }
} else if (event.subject().getClass() == DeviceId.class) {
deviceId = (DeviceId) event.subject();
}
diff --git a/utils/misc/src/main/java/org/onlab/util/SharedScheduledExecutors.java b/utils/misc/src/main/java/org/onlab/util/SharedScheduledExecutors.java
index 1bb8fa5..a85c5ff 100644
--- a/utils/misc/src/main/java/org/onlab/util/SharedScheduledExecutors.java
+++ b/utils/misc/src/main/java/org/onlab/util/SharedScheduledExecutors.java
@@ -36,28 +36,37 @@
public static final int DEFAULT_POOL_SIZE = 30;
- private static SharedScheduledExecutorService singleThreadExecutor =
- new SharedScheduledExecutorService(
- newSingleThreadScheduledExecutor(
- groupedThreads("onos/shared/scheduled",
- "onos-single-executor")));
+ private static SharedScheduledExecutorService singleThreadExecutor = null;
- private static SharedScheduledExecutorService poolThreadExecutor =
- new SharedScheduledExecutorService(
- newScheduledThreadPool(DEFAULT_POOL_SIZE,
- groupedThreads("onos/shared/scheduled",
- "onos-pool-executor-%d")));
+ private static SharedScheduledExecutorService poolThreadExecutor = null;
// Ban public construction
private SharedScheduledExecutors() {
}
+ private static void setup() {
+ if (singleThreadExecutor == null) {
+ singleThreadExecutor =
+ new SharedScheduledExecutorService(
+ newSingleThreadScheduledExecutor(
+ groupedThreads("onos/shared/scheduled",
+ "onos-single-executor")));
+
+ poolThreadExecutor =
+ new SharedScheduledExecutorService(
+ newScheduledThreadPool(DEFAULT_POOL_SIZE,
+ groupedThreads("onos/shared/scheduled",
+ "onos-pool-executor-%d")));
+ }
+ }
+
/**
* Returns the shared scheduled single thread executor.
*
* @return shared scheduled single thread executor
*/
public static SharedScheduledExecutorService getSingleThreadExecutor() {
+ setup();
return singleThreadExecutor;
}
@@ -71,6 +80,7 @@
* and whose get() method will return null upon completion
*/
public static ScheduledFuture<?> newTimeout(Runnable task, long delay, TimeUnit unit) {
+ setup();
return SharedScheduledExecutors.getPoolThreadExecutor()
.schedule(task, delay, unit);
}
@@ -81,6 +91,7 @@
* @return shared scheduled executor pool
*/
public static SharedScheduledExecutorService getPoolThreadExecutor() {
+ setup();
return poolThreadExecutor;
}
@@ -90,6 +101,7 @@
* @param poolSize new pool size
*/
public static void setPoolSize(int poolSize) {
+ setup();
checkArgument(poolSize > 0, "Shared pool size size must be greater than 0");
poolThreadExecutor.setBackingExecutor(
newScheduledThreadPool(poolSize, groupedThreads("onos/shared/scheduled",
@@ -102,6 +114,8 @@
*/
public static void shutdown() {
singleThreadExecutor.backingExecutor().shutdown();
+ singleThreadExecutor = null;
poolThreadExecutor.backingExecutor().shutdown();
+ poolThreadExecutor = null;
}
}