docs: def _declareTimeoutExceeded(self, ev_data: UpgradeLogData):
          """
          This function is called when time for upgrade is up
          """
          logger.info("Timeout exceeded for {}:{}"
                      .format(ev_data.when, ev_data.version))
          last = self._actionLog.last_event
          # TODO test this
          if (last and last.ev_type == UpgradeLog.Events.failed and
                  last.data == ev_data):
              return None
  
          self._action_failed(ev_data, reason="exceeded upgrade timeout")
  
          self._unscheduleAction()
          self._actionFailedCallback()