/** runs the block fixer periodically */
  public void run() {
    while (running) {
      try {
        checkAndFixBlocks();
        updateStatus();
      } catch (InterruptedException ignore) {
        LOG.info("interrupted");
      } catch (Exception e) {
        // log exceptions and keep running
        LOG.error(StringUtils.stringifyException(e));
      } catch (Error e) {
        LOG.error(StringUtils.stringifyException(e));
        throw e;
      }

      try {
        Thread.sleep(blockFixInterval);
      } catch (InterruptedException ignore) {
        LOG.info("interrupted");
      }
    }
  }