docs: def _scheduleUpgrade(self,
                           ev_data: UpgradeLogData,
                           failTimeout) -> None:
          """
          Schedules node upgrade to a newer version
  
          :param ev_data: upgrade event parameters
          """
          logger.info(
              "{}'s upgrader processing upgrade for version {}={}"
              .format(self, ev_data.pkg_name, ev_data.version))
          now = datetime.utcnow().replace(tzinfo=dateutil.tz.tzutc())
  
          self._notifier.sendMessageUponNodeUpgradeScheduled(
              "Upgrade of package {} on node '{}' to version {} "
              "has been scheduled on {}"
              .format(ev_data.pkg_name, self.nodeName,
                      ev_data.version, ev_data.when))
          self._actionLog.append_scheduled(ev_data)
  
          callAgent = partial(self._callUpgradeAgent, ev_data, failTimeout)
          delay = 0
          if now < ev_data.when:
              delay = (ev_data.when - now).total_seconds()
          self.scheduledAction = ev_data
          self._schedule(callAgent, delay)