code: private <T> T getWithTimeout(ListenableFuture<T> listenableFuture, String methodName, FacadeOperation facadeOperation, int destinationCallTimeout) throws InterruptedException, ExecutionException, TimeoutException {
          // not reading from source/legacy means this is either proxy or kinda proxy phase
          // in that case, ignore timeout settings for Lightblue call
          if (!shouldSource(FacadeOperation.READ) || timeoutConfiguration.getTimeoutMS(methodName, facadeOperation) <= 0) {
              return listenableFuture.get();
          } else {
              return listenableFuture.get(destinationCallTimeout, TimeUnit.MILLISECONDS);
          }
      }
docs: Call destination (lightblue) using a timeout in dual read/write phases.
  Do not use facade timeout during lightblue proxy and kinda proxy phases (when
  reading from source is disabled).
  
  @param listenableFuture
  @param methodName method name is used to read method specific timeout
  configuration
  @param destinationCallTimeout Set future timeout to this amount
  @return
  @throws InterruptedException
  @throws ExecutionException
  @throws TimeoutException