docs: @Override
    public void stop() {
      LOGGER.debug("Shutting down PooledExecutionService");
      running = false;
      scheduledExecutor.shutdownNow();
      for (Iterator<Entry<String, ThreadPoolExecutor>> it = pools.entrySet().iterator(); it.hasNext(); ) {
        Entry<String, ThreadPoolExecutor> e = it.next();
        try {
          destroyPool(e.getKey(), e.getValue());
        } finally {
          it.remove();
        }
      }
      try {
        while(!scheduledExecutor.awaitTermination(30, SECONDS)) {
          LOGGER.warn("Timeout while waiting on scheduler to finish, keep waiting");
        }
      } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
      }
    }