Sho SHIMIZU
Committed by Ray Milkey

Make timeout and max attempts configurable

- Resolve ONOS-472
- Define instance variables for timeout and max attemps
- Add a constructor that initializes the added instance variables

Change-Id: Ia70421122cd6042b01850eabec9f249e7cea5e88
...@@ -52,6 +52,7 @@ import org.onosproject.net.intent.BatchWrite; ...@@ -52,6 +52,7 @@ import org.onosproject.net.intent.BatchWrite;
52 import org.onosproject.net.intent.IntentStoreDelegate; 52 import org.onosproject.net.intent.IntentStoreDelegate;
53 import org.slf4j.Logger; 53 import org.slf4j.Logger;
54 54
55 +import java.time.Duration;
55 import java.util.ArrayList; 56 import java.util.ArrayList;
56 import java.util.Collections; 57 import java.util.Collections;
57 import java.util.EnumSet; 58 import java.util.EnumSet;
...@@ -743,13 +744,17 @@ public class IntentManager ...@@ -743,13 +744,17 @@ public class IntentManager
743 744
744 private class IntentInstallMonitor implements Runnable { 745 private class IntentInstallMonitor implements Runnable {
745 746
746 - // TODO make this configurable 747 + // TODO make this configurable through a configuration file using @Property mechanism
748 + // These fields needs to be moved to the enclosing class and configurable through a configuration file
747 private static final int TIMEOUT_PER_OP = 500; // ms 749 private static final int TIMEOUT_PER_OP = 500; // ms
748 private static final int MAX_ATTEMPTS = 3; 750 private static final int MAX_ATTEMPTS = 3;
749 751
750 private final IntentOperations ops; 752 private final IntentOperations ops;
751 private final List<IntentUpdate> intentUpdates = Lists.newArrayList(); 753 private final List<IntentUpdate> intentUpdates = Lists.newArrayList();
752 754
755 + private final Duration timeoutPerOperation;
756 + private final int maxAttempts;
757 +
753 // future holding current FlowRuleBatch installation result 758 // future holding current FlowRuleBatch installation result
754 private Future<CompletedBatchOperation> future; 759 private Future<CompletedBatchOperation> future;
755 private long startTime = System.currentTimeMillis(); 760 private long startTime = System.currentTimeMillis();
...@@ -757,14 +762,22 @@ public class IntentManager ...@@ -757,14 +762,22 @@ public class IntentManager
757 private int installAttempt; 762 private int installAttempt;
758 763
759 public IntentInstallMonitor(IntentOperations ops) { 764 public IntentInstallMonitor(IntentOperations ops) {
765 + this(ops, Duration.ofMillis(TIMEOUT_PER_OP), MAX_ATTEMPTS);
766 + }
767 +
768 + public IntentInstallMonitor(IntentOperations ops, Duration timeoutPerOperation, int maxAttempts) {
760 this.ops = checkNotNull(ops); 769 this.ops = checkNotNull(ops);
770 + this.timeoutPerOperation = checkNotNull(timeoutPerOperation);
771 + checkArgument(maxAttempts > 0, "maxAttempts must be larger than 0, but %s", maxAttempts);
772 + this.maxAttempts = maxAttempts;
773 +
761 resetTimeoutLimit(); 774 resetTimeoutLimit();
762 } 775 }
763 776
764 private void resetTimeoutLimit() { 777 private void resetTimeoutLimit() {
765 // FIXME compute reasonable timeouts 778 // FIXME compute reasonable timeouts
766 this.endTime = System.currentTimeMillis() 779 this.endTime = System.currentTimeMillis()
767 - + ops.operations().size() * TIMEOUT_PER_OP; 780 + + ops.operations().size() * timeoutPerOperation.toMillis();
768 } 781 }
769 782
770 private void buildIntentUpdates() { 783 private void buildIntentUpdates() {
...@@ -880,12 +893,12 @@ public class IntentManager ...@@ -880,12 +893,12 @@ public class IntentManager
880 // reset the timer 893 // reset the timer
881 resetTimeoutLimit(); 894 resetTimeoutLimit();
882 installAttempt++; 895 installAttempt++;
883 - if (installAttempt == MAX_ATTEMPTS) { 896 + if (installAttempt == maxAttempts) {
884 log.warn("Install request timed out: {}", ops); 897 log.warn("Install request timed out: {}", ops);
885 for (IntentUpdate update : intentUpdates) { 898 for (IntentUpdate update : intentUpdates) {
886 update.batchFailed(); 899 update.batchFailed();
887 } 900 }
888 - } else if (installAttempt > MAX_ATTEMPTS) { 901 + } else if (installAttempt > maxAttempts) {
889 abandonShip(); 902 abandonShip();
890 return; 903 return;
891 } // else just resubmit the work 904 } // else just resubmit the work
......