Internet Connectivity
The Azure IoT Hub Connector depends on an Internet connection to the Azure IoT Hub and a related Azure Storage Container. If the connection to the Azure IoT Hub is lost for more than 30 seconds, the Azure Service Client library falls into an infinite loop. At this point, you must restart the Connector. If the connection to the Internet is lost for 30 seconds, the Connector can reconnect to Azure and continue. If an infinite loop occurs, the following error appears in the log:

08:22:36.990 [FileUploadNotificationProcessor] WARN c.t.p.a.i.FileUploadNotificationProcessor -
Error retrieving file-upload notification

java.io.IOException: Too many open files
at sun.nio.ch.IOUtil.makePipe(Native Method)
at sun.nio.ch.PipeImpl.<init>(PipeImpl.java:42)
at sun.nio.ch.SelectorProviderImpl.openPipe(SelectorProviderImpl.java:50)
at java.nio.channels.Pipe.open(Pipe.java:155)
at org.apache.qpid.proton.reactor.impl.IOImpl.pipe(IOImpl.java:34)
at org.apache.qpid.proton.reactor.impl.ReactorImpl.<init>(ReactorImpl.java:101)
at org.apache.qpid.proton.reactor.impl.ReactorImpl.<init>(ReactorImpl.java:108)
at org.apache.qpid.proton.reactor.Reactor$Factory.create(Reactor.java:53)
at org.apache.qpid.proton.Proton.reactor(Proton.java:104)
at com.microsoft.azure.sdk.iot.service.transport.amqps.AmqpFileUploadNotificationReceive.
receive(AmqpFileUploadNotificationReceive.java:112)
at com.microsoft.azure.sdk.iot.service.FileUploadNotificationReceiver.
receive(FileUploadNotificationReceiver.java:103)
at com.microsoft.azure.sdk.iot.service.FileUploadNotificationReceiver.
receive(FileUploadNotificationReceiver.java:85)
at com.thingworx.protocol.azure.iot.FileUploadNotificationProcessor.
run(FileUploadNotificationProcessor.java:77)
at java.lang.Thread.run(Thread.java:748)
If the disruption takes less than 30 seconds, several WARN messages appear, each with the content, The client could not finish the operation within specified maximum execution timeout. For example:

09:56:41.312 [[djc-hub|$Default|AzureIot-da3f7429-537a-4447-982d-4d01522961b8]-1-9]
WARN c.t.p.a.iot.AzureIotProtocolAdapter - EventProcessorHost raised exception;
hostname=AzureIot-da3f7429-537a-4447-982d-4d01522961b8, partition-id=3, action=Renewing Lease
com.microsoft.azure.storage.StorageException:
The client could not finish the operation within specified maximum execution timeout.
at com.microsoft.azure.storage.core.ExecutionEngine.executeWithRetry(ExecutionEngine.java:243)
at com.microsoft.azure.storage.blob.CloudBlob.renewLease(CloudBlob.java:2761)
at com.microsoft.azure.eventprocessorhost.AzureStorageCheckpointLeaseManager.
renewLeaseInternal(AzureStorageCheckpointLeaseManager.java:521)
at com.microsoft.azure.eventprocessorhost.AzureStorageCheckpointLeaseManager.
renewLease(AzureStorageCheckpointLeaseManager.java:504)
at com.microsoft.azure.eventprocessorhost.PartitionPump.
leaseRenewer(PartitionPump.java:418)
at com.microsoft.azure.eventprocessorhost.PartitionPump.
lambda$scheduleLeaseRenewer$11(PartitionPump.java:167)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.
access$201(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.
run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.util.concurrent.TimeoutException: The client could not finish the operation
within specified maximum execution timeout.

at com.microsoft.azure.storage.core.ExecutionEngine.
executeWithRetry(ExecutionEngine.java:242)
... 12 common frames omitted
Solution
If the infinite loop occurs, restart the Connector. When connectivity to the Internet is restored, retry the operation that could not finish.