+ def _launch_lttng_relayd(self):
+ # type: () -> Optional[subprocess.Popen]
+ relayd_path = (
+ self._project_root / "src" / "bin" / "lttng-relayd" / "lttng-relayd"
+ )
+ if os.environ.get("LTTNG_TEST_NO_RELAYD", "0") == "1":
+ # Run without a relay daemon; the user may be running one
+ # under gdb, for example.
+ return None
+
+ relayd_env_vars = os.environ.get("LTTNG_RELAYD_ENV_VARS")
+ relayd_env = os.environ.copy()
+ if relayd_env_vars:
+ self._log("Additional lttng-relayd environment variables:")
+ for name, value in self._unpack_env_vars(relayd_env_vars):
+ self._log("{}={}".format(name, value))
+ relayd_env[name] = value
+
+ assert self._lttng_home is not None
+ relayd_env["LTTNG_HOME"] = str(self._lttng_home.path)
+ self._log(
+ "Launching relayd with LTTNG_HOME='${}'".format(str(self._lttng_home.path))
+ )
+ process = subprocess.Popen(
+ [
+ str(relayd_path),
+ "-C",
+ "tcp://0.0.0.0:{}".format(self.lttng_relayd_control_port),
+ "-D",
+ "tcp://0.0.0.0:{}".format(self.lttng_relayd_data_port),
+ "-L",
+ "tcp://localhost:{}".format(self.lttng_relayd_live_port),
+ ],
+ stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT,
+ env=relayd_env,
+ )
+
+ if self._logging_function:
+ self._relayd_output_consumer = ProcessOutputConsumer(
+ process, "lttng-relayd", self._logging_function
+ )
+ self._relayd_output_consumer.daemon = True
+ self._relayd_output_consumer.start()
+
+ return process
+