docs: def _scheduleRestart(self,
                           when: Union[datetime, str],
                           failTimeout) -> None:
          """
          Schedules node restart to a newer version
  
          :param version: version to restart to
          :param when: restart time
          """
          logger.info("{}'s restarter processing restart"
                      .format(self))
          if isinstance(when, str):
              when = dateutil.parser.parse(when)
          now = datetime.utcnow().replace(tzinfo=dateutil.tz.tzutc())
  
          logger.info(
              "Restart of node '{}' has been scheduled on {}".format(
                  self.nodeName, when))
  
          ev_data = RestartLogData(when)
          self._actionLog.append_scheduled(ev_data)
  
          callAgent = partial(self._callRestartAgent, ev_data,
                              failTimeout)
          delay = 0
          if now < when:
              delay = (when - now).total_seconds()
          self.scheduledAction = ev_data
          self._schedule(callAgent, delay)