docs: def _fire_master(self, data=None, tag=None, events=None, pretag=None, timeout=60, sync=True, timeout_handler=None):
          '''
          Fire an event on the master, or drop message if unable to send.
          '''
          load = {'id': self.opts['id'],
                  'cmd': '_minion_event',
                  'pretag': pretag,
                  'tok': self.tok}
          if events:
              load['events'] = events
          elif data and tag:
              load['data'] = data
              load['tag'] = tag
          elif not data and tag:
              load['data'] = {}
              load['tag'] = tag
          else:
              return
  
          if sync:
              try:
                  self._send_req_sync(load, timeout)
              except salt.exceptions.SaltReqTimeoutError:
                  log.info('fire_master failed: master could not be contacted. Request timed out.')
                  # very likely one of the masters is dead, status.master will flush it
                  self.functions['status.master'](self.opts['master'])
                  return False
              except Exception:
                  log.info('fire_master failed: %s', traceback.format_exc())
                  return False
          else:
              if timeout_handler is None:
                  def handle_timeout(*_):
                      log.info('fire_master failed: master could not be contacted. Request timed out.')
                      # very likely one of the masters is dead, status.master will flush it
                      self.functions['status.master'](self.opts['master'])
                      return True
                  timeout_handler = handle_timeout
  
              with tornado.stack_context.ExceptionStackContext(timeout_handler):
                  self._send_req_async(load, timeout, callback=lambda f: None)  # pylint: disable=unexpected-keyword-arg
          return True