Brian O'Connor

ONOS-1992 Improving IntentCleanup configurability and adding enabled property

Change-Id: Id6daa33448a3ffee91e98a61e4bea24d1f8c06ca
...@@ -61,6 +61,10 @@ public class IntentCleanup implements Runnable, IntentListener { ...@@ -61,6 +61,10 @@ public class IntentCleanup implements Runnable, IntentListener {
61 private static final int DEFAULT_PERIOD = 5; //seconds 61 private static final int DEFAULT_PERIOD = 5; //seconds
62 private static final int DEFAULT_THRESHOLD = 5; //tries 62 private static final int DEFAULT_THRESHOLD = 5; //tries
63 63
64 + @Property(name = "enabled", boolValue = true,
65 + label = "Enables/disables the intent cleanup component")
66 + private boolean enabled = true;
67 +
64 @Property(name = "period", intValue = DEFAULT_PERIOD, 68 @Property(name = "period", intValue = DEFAULT_PERIOD,
65 label = "Frequency in ms between cleanup runs") 69 label = "Frequency in ms between cleanup runs")
66 protected int period = DEFAULT_PERIOD; 70 protected int period = DEFAULT_PERIOD;
...@@ -108,31 +112,40 @@ public class IntentCleanup implements Runnable, IntentListener { ...@@ -108,31 +112,40 @@ public class IntentCleanup implements Runnable, IntentListener {
108 Dictionary<?, ?> properties = context != null ? context.getProperties() : new Properties(); 112 Dictionary<?, ?> properties = context != null ? context.getProperties() : new Properties();
109 113
110 int newPeriod; 114 int newPeriod;
115 + boolean newEnabled;
111 try { 116 try {
112 String s = get(properties, "period"); 117 String s = get(properties, "period");
113 newPeriod = isNullOrEmpty(s) ? period : Integer.parseInt(s.trim()); 118 newPeriod = isNullOrEmpty(s) ? period : Integer.parseInt(s.trim());
114 119
115 s = get(properties, "retryThreshold"); 120 s = get(properties, "retryThreshold");
116 - retryThreshold = isNullOrEmpty(s) ? period : Integer.parseInt(s.trim()); 121 + retryThreshold = isNullOrEmpty(s) ? retryThreshold : Integer.parseInt(s.trim());
122 +
123 + s = get(properties, "enabled");
124 + newEnabled = isNullOrEmpty(s) ? enabled : Boolean.parseBoolean(s.trim());
117 } catch (NumberFormatException e) { 125 } catch (NumberFormatException e) {
118 log.warn(e.getMessage()); 126 log.warn(e.getMessage());
119 newPeriod = period; 127 newPeriod = period;
128 + newEnabled = enabled;
120 } 129 }
121 130
122 // Any change in the following parameters implies hard restart 131 // Any change in the following parameters implies hard restart
123 - if (newPeriod != period) { 132 + if (newPeriod != period || enabled != newEnabled) {
124 period = newPeriod; 133 period = newPeriod;
134 + enabled = newEnabled;
125 adjustRate(); 135 adjustRate();
126 } 136 }
127 137
128 - log.info("Settings: period={}", period); 138 + log.info("Settings: enabled={}, period={}, retryThreshold={}",
139 + enabled, period, retryThreshold);
129 } 140 }
130 141
131 protected void adjustRate() { 142 protected void adjustRate() {
132 if (timerTask != null) { 143 if (timerTask != null) {
133 timerTask.cancel(); 144 timerTask.cancel();
145 + timerTask = null;
134 } 146 }
135 147
148 + if (enabled) {
136 timerTask = new TimerTask() { 149 timerTask = new TimerTask() {
137 @Override 150 @Override
138 public void run() { 151 public void run() {
...@@ -143,6 +156,7 @@ public class IntentCleanup implements Runnable, IntentListener { ...@@ -143,6 +156,7 @@ public class IntentCleanup implements Runnable, IntentListener {
143 periodMs = period * 1_000; //convert to ms 156 periodMs = period * 1_000; //convert to ms
144 timer.scheduleAtFixedRate(timerTask, periodMs, periodMs); 157 timer.scheduleAtFixedRate(timerTask, periodMs, periodMs);
145 } 158 }
159 + }
146 160
147 161
148 @Override 162 @Override
...@@ -224,7 +238,7 @@ public class IntentCleanup implements Runnable, IntentListener { ...@@ -224,7 +238,7 @@ public class IntentCleanup implements Runnable, IntentListener {
224 public void event(IntentEvent event) { 238 public void event(IntentEvent event) {
225 // this is the fast path for CORRUPT intents, retry on event notification. 239 // this is the fast path for CORRUPT intents, retry on event notification.
226 //TODO we might consider using the timer to back off for subsequent retries 240 //TODO we might consider using the timer to back off for subsequent retries
227 - if (event.type() == IntentEvent.Type.CORRUPT) { 241 + if (enabled && event.type() == IntentEvent.Type.CORRUPT) {
228 Key key = event.subject().key(); 242 Key key = event.subject().key();
229 if (store.isMaster(key)) { 243 if (store.isMaster(key)) {
230 IntentData data = store.getIntentData(event.subject().key()); 244 IntentData data = store.getIntentData(event.subject().key());
......