[GEANT] Property netconfReplyTimeout added in Settings.
Change-Id: I60399c5cc9a00857f275fa8016520b2d909e9912
diff --git a/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfControllerImpl.java b/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfControllerImpl.java
index bd4f4b0..0e34a39 100644
--- a/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfControllerImpl.java
+++ b/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfControllerImpl.java
@@ -19,10 +19,13 @@
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Modified;
+import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.apache.felix.scr.annotations.Service;
import org.onlab.packet.IpAddress;
+import org.onosproject.cfg.ComponentConfigService;
import org.onosproject.net.Device;
import org.onosproject.net.DeviceId;
import org.onosproject.net.device.DeviceService;
@@ -42,17 +45,30 @@
import org.slf4j.LoggerFactory;
import java.util.Arrays;
+import java.util.Dictionary;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArraySet;
+import static com.google.common.base.Strings.isNullOrEmpty;
+import static org.onlab.util.Tools.get;
+
/**
* The implementation of NetconfController.
*/
@Component(immediate = true)
@Service
public class NetconfControllerImpl implements NetconfController {
+ private static final String PROP_NETCONF_REPLY_TIMEOUT = "netconfReplyTimeout";
+ private static final int DEFAULT_REPLY_TIMEOUT_SECONDS = 5;
+ @Property(name = PROP_NETCONF_REPLY_TIMEOUT, intValue = DEFAULT_REPLY_TIMEOUT_SECONDS,
+ label = "Time (in seconds) waiting for a NetConf reply")
+ protected static int netconfReplyTimeout = DEFAULT_REPLY_TIMEOUT_SECONDS;
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected ComponentConfigService cfgService;
+
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected DeviceService deviceService;
@@ -71,15 +87,42 @@
@Activate
public void activate(ComponentContext context) {
+ cfgService.registerProperties(getClass());
+ modified(context);
log.info("Started");
}
@Deactivate
public void deactivate() {
+ cfgService.unregisterProperties(getClass(), false);
netconfDeviceMap.clear();
log.info("Stopped");
}
+ @Modified
+ public void modified(ComponentContext context) {
+ if (context == null) {
+ netconfReplyTimeout = DEFAULT_REPLY_TIMEOUT_SECONDS;
+ log.info("No component configuration");
+ return;
+ }
+
+ Dictionary<?, ?> properties = context.getProperties();
+
+ int newNetconfReplyTimeout;
+ try {
+ String s = get(properties, PROP_NETCONF_REPLY_TIMEOUT);
+ newNetconfReplyTimeout = isNullOrEmpty(s) ?
+ netconfReplyTimeout : Integer.parseInt(s.trim());
+ } catch (NumberFormatException e) {
+ log.warn("Component configuration had invalid value", e);
+ return;
+ }
+
+ netconfReplyTimeout = newNetconfReplyTimeout;
+ log.info("Settings: {} = {}", PROP_NETCONF_REPLY_TIMEOUT, netconfReplyTimeout);
+ }
+
@Override
public void addDeviceListener(NetconfDeviceListener listener) {
if (!netconfDeviceListeners.contains(listener)) {
diff --git a/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfSessionImpl.java b/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfSessionImpl.java
index 9f4b47a..bf46b07 100644
--- a/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfSessionImpl.java
+++ b/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfSessionImpl.java
@@ -55,7 +55,6 @@
private static final String MESSAGE_ID_STRING = "message-id";
private static final String HELLO = "<hello";
private static final String NEW_LINE = "\n";
- private static final int FUTURE_REPLY_TIMEOUT = 5000;
private static final String ERROR = "ERROR ";
private static final String END_OF_RPC_OPEN_TAG = "\">";
private static final String EQUAL = "=";
@@ -196,9 +195,10 @@
request = formatXmlHeader(request);
CompletableFuture<String> futureReply = request(request);
messageIdInteger.incrementAndGet();
+ int replyTimeout = NetconfControllerImpl.netconfReplyTimeout;
String rp;
try {
- rp = futureReply.get(FUTURE_REPLY_TIMEOUT, TimeUnit.MILLISECONDS);
+ rp = futureReply.get(replyTimeout, TimeUnit.SECONDS);
} catch (InterruptedException | ExecutionException | TimeoutException e) {
throw new NetconfException("No matching reply for request " + request, e);
}