docs: def start(self):
          """Start the process.
  
          This will block until the Crate cluster is ready to process requests.
          """
          log.info('Starting Crate process')
          self.process = proc = self.enter_context(subprocess.Popen(
              self.cmd,
              stdin=subprocess.DEVNULL,
              stdout=subprocess.PIPE,
              stderr=subprocess.STDOUT,
              env=self.env,
              universal_newlines=True
          ))
  
          msg = ('CrateDB launching:\n'
                 '    PID: %s\n'
                 '    Logs: %s\n'
                 '    Data: %s')
          if not self.keep_data:
              msg += ' (removed on stop)\n'
  
          logfile = os.path.join(self.logs_path, self.cluster_name + '.log')
          log.info(
              msg,
              proc.pid,
              logfile,
              self.data_path
          )
          self.addresses = DotDict({})
          self.monitor.consumers.append(AddrConsumer(self._set_addr))
          self.monitor.start(proc)
  
          log_lines = []
          self.monitor.consumers.append(log_lines.append)
          spinner = cycle(['/', '-', '\\', '|'])
  
          def show_spinner():
              if sys.stdout.isatty():
                  print(next(spinner), end='\r')
              return True
          try:
              wait_until(
                  lambda: show_spinner() and _ensure_running(proc) and self.http_host,
                  timeout=60
              )
              host = self.addresses.http.host
              port = self.addresses.http.port
              wait_until(
                  lambda: _ensure_running(proc) and _is_up(host, port),
                  timeout=30
              )
              if _has_ssl(host, port):
                  self.http_url = self.http_url.replace('http://', 'https://')
              wait_until(
                  lambda: show_spinner() and cluster_state_200(self.http_url),
                  timeout=30
              )
          except (SystemError, TimeoutError):
              if not log_lines:
                  _try_print_log(logfile)
              else:
                  for line in log_lines:
                      log.error(line)
              raise SystemExit("Exiting because CrateDB didn't start correctly")
          else:
              self.monitor.consumers.remove(log_lines.append)
          log.info('Cluster ready to process requests')