diff --git a/CHANGES_NEXT_RELEASE b/CHANGES_NEXT_RELEASE index 8b1378917..062ec4b8f 100644 --- a/CHANGES_NEXT_RELEASE +++ b/CHANGES_NEXT_RELEASE @@ -1 +1,2 @@ - +- [cygnus-ngsi][arcgis] Check feature table is connected before use it (#2405) +- [cygnus-ngsi][arcgis] Set feature table to not connected after a connection error (#2405) diff --git a/cygnus-common/src/main/java/com/telefonica/iot/cygnus/backends/arcgis/restutils/ArcgisFeatureTable.java b/cygnus-common/src/main/java/com/telefonica/iot/cygnus/backends/arcgis/restutils/ArcgisFeatureTable.java index 239654631..f029a2268 100644 --- a/cygnus-common/src/main/java/com/telefonica/iot/cygnus/backends/arcgis/restutils/ArcgisFeatureTable.java +++ b/cygnus-common/src/main/java/com/telefonica/iot/cygnus/backends/arcgis/restutils/ArcgisFeatureTable.java @@ -24,6 +24,7 @@ import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; +import java.net.SocketException; import com.telefonica.iot.cygnus.backends.arcgis.exceptions.ArcgisException; import com.telefonica.iot.cygnus.backends.arcgis.model.Credential; @@ -593,6 +594,9 @@ private void setError(Exception e) { this.errorCode = agsEx.getCode(); } else { if (e != null && e.getCause() != null) { + if (e.getCause() instanceof SocketException) { + connected = false; + } LOGGER.error("Error Cause: " + e.getCause().getMessage()); } LOGGER.error("Error Message: " + e.getMessage()); diff --git a/cygnus-ngsi/src/main/java/com/telefonica/iot/cygnus/sinks/NGSIArcgisFeatureTableSink.java b/cygnus-ngsi/src/main/java/com/telefonica/iot/cygnus/sinks/NGSIArcgisFeatureTableSink.java index 2ea5013b2..dcca4c28d 100644 --- a/cygnus-ngsi/src/main/java/com/telefonica/iot/cygnus/sinks/NGSIArcgisFeatureTableSink.java +++ b/cygnus-ngsi/src/main/java/com/telefonica/iot/cygnus/sinks/NGSIArcgisFeatureTableSink.java @@ -166,10 +166,12 @@ protected int featuresBatched() { */ protected ArcgisFeatureTable getPersistenceBackend(String featureServiceUrl) throws CygnusRuntimeError { - if (arcgisPersistenceBackend.containsKey(featureServiceUrl)) { + if (arcgisPersistenceBackend.containsKey(featureServiceUrl) && + arcgisPersistenceBackend.get(featureServiceUrl).connected() ){ + LOGGER.info("Using persistenceBackend which contains key for Feature table: " + featureServiceUrl); return arcgisPersistenceBackend.get(featureServiceUrl); } else { - LOGGER.debug("Creating new persistenceBackend for Feature table: " + featureServiceUrl); + LOGGER.info("Creating new persistenceBackend for Feature table: " + featureServiceUrl); LOGGER.debug("Token url: " + getGetTokenUrl()); try { NGSIArcgisFeatureTable newTable = new NGSIArcgisFeatureTable(featureServiceUrl, getUsername(),