Put configs back to pending state when the config factory is removed.
Addresses one of the causes of ONOS-4605 - not sure if there are others.
Change-Id: I2897e84a10b13ac00d5a03c31b7a08daae57d8cb
diff --git a/core/store/dist/src/main/java/org/onosproject/store/config/impl/DistributedNetworkConfigStore.java b/core/store/dist/src/main/java/org/onosproject/store/config/impl/DistributedNetworkConfigStore.java
index 4df3f21..855eefb 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/config/impl/DistributedNetworkConfigStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/config/impl/DistributedNetworkConfigStore.java
@@ -166,10 +166,22 @@
@Override
public void removeConfigFactory(ConfigFactory configFactory) {
factoriesByConfig.remove(configFactory.configClass().getName());
+ processExistingConfigs(configFactory);
notifyDelegate(new NetworkConfigEvent(CONFIG_UNREGISTERED, configFactory.configKey(),
configFactory.configClass()));
}
+ // Sweep through any configurations for the config factory, set back to pending state.
+ private void processExistingConfigs(ConfigFactory configFactory) {
+ ImmutableSet.copyOf(configs.keySet()).forEach(k -> {
+ if (Objects.equals(configFactory.configClass().getName(), k.configClass)) {
+ JsonNode json = configs.remove(k).value();
+ configs.put(key(k.subject, configFactory.configKey()), json);
+ log.debug("Set config pending: {}, {}", k.subject, k.configClass);
+ }
+ });
+ }
+
@Override
@SuppressWarnings("unchecked")
public <S, C extends Config<S>> ConfigFactory<S, C> getConfigFactory(Class<C> configClass) {