ONOS-1992 Improving IntentCleanup configurability and adding enabled property
Change-Id: Id6daa33448a3ffee91e98a61e4bea24d1f8c06ca
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/IntentCleanup.java b/core/net/src/main/java/org/onosproject/net/intent/impl/IntentCleanup.java
index 7d5417c..e00e841 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/IntentCleanup.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/IntentCleanup.java
@@ -61,6 +61,10 @@
private static final int DEFAULT_PERIOD = 5; //seconds
private static final int DEFAULT_THRESHOLD = 5; //tries
+ @Property(name = "enabled", boolValue = true,
+ label = "Enables/disables the intent cleanup component")
+ private boolean enabled = true;
+
@Property(name = "period", intValue = DEFAULT_PERIOD,
label = "Frequency in ms between cleanup runs")
protected int period = DEFAULT_PERIOD;
@@ -108,40 +112,50 @@
Dictionary<?, ?> properties = context != null ? context.getProperties() : new Properties();
int newPeriod;
+ boolean newEnabled;
try {
String s = get(properties, "period");
newPeriod = isNullOrEmpty(s) ? period : Integer.parseInt(s.trim());
s = get(properties, "retryThreshold");
- retryThreshold = isNullOrEmpty(s) ? period : Integer.parseInt(s.trim());
+ retryThreshold = isNullOrEmpty(s) ? retryThreshold : Integer.parseInt(s.trim());
+
+ s = get(properties, "enabled");
+ newEnabled = isNullOrEmpty(s) ? enabled : Boolean.parseBoolean(s.trim());
} catch (NumberFormatException e) {
log.warn(e.getMessage());
newPeriod = period;
+ newEnabled = enabled;
}
// Any change in the following parameters implies hard restart
- if (newPeriod != period) {
+ if (newPeriod != period || enabled != newEnabled) {
period = newPeriod;
+ enabled = newEnabled;
adjustRate();
}
- log.info("Settings: period={}", period);
+ log.info("Settings: enabled={}, period={}, retryThreshold={}",
+ enabled, period, retryThreshold);
}
protected void adjustRate() {
if (timerTask != null) {
timerTask.cancel();
+ timerTask = null;
}
- timerTask = new TimerTask() {
- @Override
- public void run() {
- executor.submit(IntentCleanup.this);
- }
- };
+ if (enabled) {
+ timerTask = new TimerTask() {
+ @Override
+ public void run() {
+ executor.submit(IntentCleanup.this);
+ }
+ };
- periodMs = period * 1_000; //convert to ms
- timer.scheduleAtFixedRate(timerTask, periodMs, periodMs);
+ periodMs = period * 1_000; //convert to ms
+ timer.scheduleAtFixedRate(timerTask, periodMs, periodMs);
+ }
}
@@ -224,7 +238,7 @@
public void event(IntentEvent event) {
// this is the fast path for CORRUPT intents, retry on event notification.
//TODO we might consider using the timer to back off for subsequent retries
- if (event.type() == IntentEvent.Type.CORRUPT) {
+ if (enabled && event.type() == IntentEvent.Type.CORRUPT) {
Key key = event.subject().key();
if (store.isMaster(key)) {
IntentData data = store.getIntentData(event.subject().key());