<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 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()