From 229d33762a440c45cdbe2af0d0fe7fa5a15608d0 Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Tue, 12 Aug 2025 14:01:04 +0200 Subject: [PATCH 01/59] feat(ray): add task integrations and basic actors support --- .gitignore | 2 + ddtrace/_monkey.py | 1 + ddtrace/contrib/_ray.py | 25 ++ ddtrace/contrib/internal/ray/patch.py | 432 ++++++++++++++++++++++++++ ddtrace/ext/__init__.py | 1 + ddtrace/settings/_config.py | 1 + 6 files changed, 462 insertions(+) create mode 100644 ddtrace/contrib/_ray.py create mode 100644 ddtrace/contrib/internal/ray/patch.py diff --git a/.gitignore b/.gitignore index 6bec1ecfffd..d47d5ac6ab8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +.ray-tests + # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] diff --git a/ddtrace/_monkey.py b/ddtrace/_monkey.py index d1559df9cf7..4fb9d05ae68 100644 --- a/ddtrace/_monkey.py +++ b/ddtrace/_monkey.py @@ -118,6 +118,7 @@ "selenium": True, "valkey": True, "openai_agents": True, + "ray": True, "protobuf": config._data_streams_enabled, } diff --git a/ddtrace/contrib/_ray.py b/ddtrace/contrib/_ray.py new file mode 100644 index 00000000000..18eb6cbeb7f --- /dev/null +++ b/ddtrace/contrib/_ray.py @@ -0,0 +1,25 @@ +""" +Ray integration for Datadog APM. + +This integration traces Ray distributed computing operations including: +- Remote function execution +- Actor creation and method calls +- Object store operations (get, put, wait) +- Task scheduling and execution +- Cluster operations + +The integration provides visibility into: +- Task execution time and resource usage +- Actor lifecycle and method calls +- Object store operations +- Distributed task dependencies +- Cluster resource utilization + +Configuration: + The integration can be configured using the following environment variables: + - DD_RAY_ENABLED: Enable/disable the integration (default: true) + - DD_RAY_SERVICE: Service name for Ray traces (default: ray) + - DD_RAY_TRACE_TASKS: Enable task tracing (default: true) + - DD_RAY_TRACE_ACTORS: Enable actor tracing (default: true) + - DD_RAY_TRACE_OBJECTS: Enable object store tracing (default: true) +""" diff --git a/ddtrace/contrib/internal/ray/patch.py b/ddtrace/contrib/internal/ray/patch.py new file mode 100644 index 00000000000..c40f0284588 --- /dev/null +++ b/ddtrace/contrib/internal/ray/patch.py @@ -0,0 +1,432 @@ +from functools import wraps +import inspect +import json +import os +import time +from typing import Any +from typing import Callable +from typing import List +from typing import Optional + +from wrapt import wrap_function_wrapper as _w + +from ddtrace import config +from ddtrace import tracer +from ddtrace._trace.span import Span +from ddtrace.constants import _DJM_ENABLED_KEY +from ddtrace.constants import _FILTER_KEPT_KEY +from ddtrace.constants import _SAMPLING_PRIORITY_KEY +from ddtrace.constants import _SPAN_MEASURED_KEY +from ddtrace.ext import SpanTypes +from ddtrace.ext import SpanKind +from ddtrace.internal.schema import schematize_service_name +from ddtrace.internal.utils.wrappers import unwrap as _u +from ddtrace.propagation.http import _TraceContext +from ddtrace.vendor.packaging.version import parse as parse_version +import ray +from ray._private.inspect_util import is_class_method +from ray._private.inspect_util import is_function_or_method +from ray._private.inspect_util import is_static_method +import ray._private.worker +import ray.actor +import ray.dashboard.modules.job.common +import ray.dashboard.modules.job.job_manager +import ray.dashboard.modules.job.job_supervisor +import ray.util.tracing.tracing_helper +from ddtrace.constants import SPAN_KIND + + +class RayTraceProcessor: + def process_trace(self, trace: List[Span]) -> Optional[List[Span]]: + if not trace: + return trace + + processed_trace = [] + for span in trace: + if span.service != "ray.dashboard": + processed_trace.append(span) + if span.get_tag("component") == "ray": + span.set_metric(_DJM_ENABLED_KEY, 1) + span.set_metric(_FILTER_KEPT_KEY, 1) + span.set_metric(_SPAN_MEASURED_KEY, 1) + span.set_metric(_SAMPLING_PRIORITY_KEY, 2) + + return processed_trace + + +config._add("ray", dict(_default_service=schematize_service_name("ray"))) + + +def get_version() -> str: + return parse_version(getattr(ray, "__version__", "")) + + +def _inject_tracing_into_function(function): + """Inject trace context parameter into function signature""" + + def wrapped_function(*args, **kwargs): + return _wrap_task_execution(function, *args, **kwargs) + + return wrapped_function + + +def _inject_dd_tracing_into_runtime_env(serialized_runtime_env_info, current_span): + """ + Inject Datadog tracing information into the serialized runtime environment info. + """ + + def parse_json_string(json_string, default): + """Helper function to parse a JSON string or return a default value.""" + if json_string and json_string.strip() != "{}": + return json.loads(json_string) + return default + + try: + runtime_env_info = parse_json_string(serialized_runtime_env_info, {}) + serialized_runtime_env = runtime_env_info.get("serializedRuntimeEnv", "{}") + runtime_env = parse_json_string(serialized_runtime_env, {}) + env_vars = runtime_env.get("env_vars", {}) + + _TraceContext._inject(current_span.context, env_vars) + runtime_env["env_vars"] = env_vars + runtime_env_info["serializedRuntimeEnv"] = json.dumps(runtime_env, sort_keys=True) + + return json.dumps(runtime_env_info, sort_keys=True) + + except (json.JSONDecodeError, KeyError): + return serialized_runtime_env_info + + +def _wrap_task_execution(wrapped, *args, **kwargs): + """ + Wraps the actual execution of a Ray task to trace its performance. + """ + if not tracer: + return wrapped(*args, **kwargs) + + # Extract context from parent span + extracted_context = _TraceContext._extract( + { + "traceparent": os.environ.get("traceparent"), + "tracestate": os.environ.get("tracestate"), + } + ) + function_name = getattr(wrapped, "__name__", "unknown_function") + function_module = getattr(wrapped, "__module__", "unknown_module") + + tracer.context_provider.activate(extracted_context) + with tracer.trace( + "ray.task.execute", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.ML + ) as span: + span.set_tag_str("component", "ray") + span.set_tag_str(SPAN_KIND, SpanKind.CONSUMER) + span.resource = f"{function_module}.{function_name}" + try: + result = wrapped(*args, **kwargs) + span.set_tag_str("ray.task.status", "success") + return result + except Exception as e: + span.set_tag_str("ray.task.status", "error") + raise e + + +def traced_submit_task(wrapped, instance, args, kwargs): + if not tracer: + return wrapped(*args, **kwargs) + + # Extract context from parent span + extracted_context = _TraceContext._extract( + { + "traceparent": os.environ.get("traceparent"), + "tracestate": os.environ.get("tracestate"), + } + ) + if not extracted_context: + return wrapped(*args, **kwargs) + + # Inject function in the function that will be executed + with instance._inject_lock: + if not hasattr(instance, "_tracing_injected"): + instance._function = _inject_tracing_into_function(instance._function) + instance._tracing_injected = True + + tracer.context_provider.activate(extracted_context) + with tracer.trace( + "ray.task.submit", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.ML + ) as span: + span.set_tag_str("component", "ray") + span.set_tag_str(SPAN_KIND, SpanKind.PRODUCER) + try: + updated_serialized_runtime_env_info = _inject_dd_tracing_into_runtime_env( + kwargs.get("serialized_runtime_env_info", "{}"), span + ) + kwargs["serialized_runtime_env_info"] = updated_serialized_runtime_env_info + + resp = wrapped(*args, **kwargs) + + span.set_tag_str("ray.task.submit_status", "success") + return resp + except Exception as e: + span.set_tag_str("ray.task.submit_status", "error") + raise e + + +def traced_submit_job(wrapped, instance, args, kwargs): + if not tracer: + return wrapped(*args, **kwargs) + + with tracer.trace("ray.job.submit", service=kwargs["submission_id"], span_type=SpanTypes.ML) as span: + span.set_tag_str("component", "ray") + span.set_tag_str(SPAN_KIND, SpanKind.PRODUCER) + + try: + # Inject the context of the job + env_vars = kwargs.setdefault("runtime_env", {}).setdefault("env_vars", {}) + _TraceContext._inject(span.context, env_vars) + env_vars["_RAY_SUBMISSION_ID"] = kwargs.get("submission_id", "") + + resp = wrapped(*args, **kwargs) + span.set_tag_str("ray.job.submit_status", "success") + return resp + except Exception as e: + span.set_tag_str("ray.job.submit_status", "error") + raise e + + +# def traced_actor_remote_method(wrapped, instance, args, kwargs): +# if not tracer: +# return wrapped(*args, **kwargs) + +# function_descriptor = instance._actor._ray_actor_creation_function_descriptor +# module = function_descriptor.module_name +# class_name = function_descriptor.class_name +# method_name = instance._method_name + +# with open("trace_log.txt", "a") as log_file: +# log_file.write(f"ActorMethod method call, Module: {module}, Class: {class_name}, Method: {method_name}\n") + +# # For all other actor method calls, proceed normally +# return wrapped(*args, **kwargs) + + +def flush_worker_spans(wrapped, instance, args, kwargs): + # Ensure the tracer has the time to send spans before + # before the worker is killed + if not tracer: + return wrapped(*args, **kwargs) + + time.sleep(0.5) + return wrapped(*args, **kwargs) + + +def _create_span_wrapper(method: Callable[..., Any]) -> Any: + """Create a synchronous span wrapper for actor methods.""" + + def _traced_method( + self: Any, + *_args: Any, + **_kwargs: Any, + ) -> Any: + from ddtrace import tracer as dd_tracer + from ddtrace.ext import SpanTypes + from ddtrace.propagation.http import _TraceContext + + if not dd_tracer: + return method(self, *_args, **_kwargs) + + if os.environ.get("traceparent") is not None: + extracted_context = _TraceContext._extract( + { + "traceparent": os.environ.get("traceparent"), + "tracestate": os.environ.get("tracestate"), + } + ) + dd_tracer.context_provider.activate(extracted_context) + + method_name = f"{self.__class__.__name__}.{method.__name__}" + with dd_tracer.trace( + "ray.actor.method", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.ML + ) as span: + span.set_tag_str("component", "ray") + span.set_tag_str(SPAN_KIND, SpanKind.CONSUMER) + span.resource = method_name + + return method(self, *_args, **_kwargs) + + return _traced_method + + +def _create_async_span_wrapper(method: Callable[..., Any]) -> Any: + """Create an asynchronous span wrapper for actor methods.""" + + async def _traced_async_method( + self: Any, + *_args: Any, + **_kwargs: Any, + ) -> Any: + from ddtrace import tracer as dd_tracer + from ddtrace.ext import SpanTypes + from ddtrace.propagation.http import _TraceContext + + if not dd_tracer: + return await method(self, *_args, **_kwargs) + + if os.environ.get("traceparent") is not None: + extracted_context = _TraceContext._extract( + { + "traceparent": os.environ.get("traceparent"), + "tracestate": os.environ.get("tracestate"), + } + ) + dd_tracer.context_provider.activate(extracted_context) + + method_name = f"{self.__class__.__name__}.{method.__name__}" + with dd_tracer.trace( + "ray.actor.method", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.ML + ) as span: + span.set_tag_str("component", "ray") + span.set_tag_str(SPAN_KIND, SpanKind.CONSUMER) + span.resource = method_name + + return await method(self, *_args, **_kwargs) + + return _traced_async_method + + +def _handle_job_supervisor_tracing(cls): + methods_to_ignore = {"_polling", "ping"} + + def job_supervisor_run_wrapper(method: Callable[..., Any]) -> Any: + async def _traced_run_method(self: Any, *_args: Any, **_kwargs: Any) -> Any: + from ddtrace import tracer as dd_tracer + from ddtrace.ext import SpanTypes + from ddtrace.propagation.http import _TraceContext + + if not dd_tracer: + return await method(self, *_args, **_kwargs) + + if os.environ.get("traceparent") is not None: + extracted_context = _TraceContext._extract( + { + "traceparent": os.environ.get("traceparent"), + "tracestate": os.environ.get("tracestate"), + } + ) + dd_tracer.context_provider.activate(extracted_context) + + method_name = f"{self.__class__.__name__}.{method.__name__}" + with dd_tracer.trace( + "ray.job.run", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.ML + ) as span: + span.set_tag_str("component", "ray") + span.set_tag_str(SPAN_KIND, SpanKind.CONSUMER) + span.resource = method_name + + headers = {} + _TraceContext._inject(span.context, headers) + os.environ["traceparent"] = headers.get("traceparent", "") + os.environ["tracestate"] = headers.get("tracestate", "") + + return await method(self, *_args, **_kwargs) + + return _traced_run_method + + methods = inspect.getmembers(cls, is_function_or_method) + for name, method in methods: + # Skip methods we don't want to trace + if name in methods_to_ignore: + continue + + if ( + is_static_method(cls, name) + or is_class_method(method) + or inspect.isgeneratorfunction(method) + or inspect.isasyncgenfunction(method) + or name == "__del__" + ): + continue + + # Special handling for the run method + if name == "run" and inspect.iscoroutinefunction(method): + wrapped_method = wraps(method)(job_supervisor_run_wrapper(method)) + else: + # Regular tracing for all other methods using shared wrappers + if inspect.iscoroutinefunction(method): + wrapped_method = wraps(method)(_create_async_span_wrapper(method)) + else: + wrapped_method = wraps(method)(_create_span_wrapper(method)) + + setattr(cls, name, wrapped_method) + + return cls + + +def inject_tracing_into_actor_class(wrapped, instance, args, kwargs): + # Import tracer inside the function to avoid global reference issues + from ddtrace import tracer as dd_tracer + + if not dd_tracer: + return wrapped(*args, **kwargs) + + cls = wrapped(*args, **kwargs) + module_name = str(cls.__module__) + class_name = str(cls.__name__) + if module_name.startswith("ray.dag") or module_name.startswith("ray.experimental"): + return cls + + if f"{module_name}.{class_name}" == "ray.dashboard.modules.job.job_supervisor.JobSupervisor": + return _handle_job_supervisor_tracing(cls) + + methods = inspect.getmembers(cls, is_function_or_method) + for name, method in methods: + if ( + is_static_method(cls, name) + or is_class_method(method) + or inspect.isgeneratorfunction(method) + or inspect.isasyncgenfunction(method) + or name == "__del__" + ): + continue + + if inspect.iscoroutinefunction(method): + wrapped_method = wraps(method)(_create_async_span_wrapper(method)) + else: + wrapped_method = wraps(method)(_create_span_wrapper(method)) + + setattr(cls, name, wrapped_method) + + return cls + + +def patch(): + if getattr(ray, "_datadog_patch", False): + return + + ray._datadog_patch = True + + tracer._span_aggregator.user_processors.append(RayTraceProcessor()) + + _w(ray.remote_function, "RemoteFunction._remote", traced_submit_task) + _w(ray._private.worker, "disconnect", flush_worker_spans) + _w(ray.dashboard.modules.job.job_manager.JobManager, "submit_job", traced_submit_job) + _w(ray.actor, "_modify_class", inject_tracing_into_actor_class) + + def empty_inject_tracing_into_class(_cls): + return _cls + + ray.util.tracing.tracing_helper._inject_tracing_into_class = empty_inject_tracing_into_class + + +def unpatch(): + if not getattr(ray, "_datadog_patch", False): + return + + ray._datadog_patch = False + + tracer._span_aggregator.user_processors = [ + p for p in tracer._span_aggregator.user_processors if not isinstance(p, RayTraceProcessor) + ] + + _u(ray.remote_function, "RemoteFunction._remote", traced_submit_task) + _u(ray._private.worker, "disconnect", flush_worker_spans) + _u(ray.dashboard.modules.job.job_manager.JobManager, "submit_job", traced_submit_job) diff --git a/ddtrace/ext/__init__.py b/ddtrace/ext/__init__.py index baf7ccb2a8d..789cde9a33e 100644 --- a/ddtrace/ext/__init__.py +++ b/ddtrace/ext/__init__.py @@ -18,6 +18,7 @@ class SpanTypes(object): LLM = "llm" VALKEY = "valkey" WEBSOCKET = "websocket" + ML = "ml" class SpanKind(object): diff --git a/ddtrace/settings/_config.py b/ddtrace/settings/_config.py index 7cbd38fd530..c5dc3beba1f 100644 --- a/ddtrace/settings/_config.py +++ b/ddtrace/settings/_config.py @@ -197,6 +197,7 @@ "yaaredis", "openai_agents", "mcp", + "ray", } ) From 48731a9f28856eea3febf481ea112b745322693d Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Mon, 25 Aug 2025 18:54:15 +0200 Subject: [PATCH 02/59] chore(ray): remove actor support --- ddtrace/contrib/internal/ray/patch.py | 205 +------------------------- 1 file changed, 2 insertions(+), 203 deletions(-) diff --git a/ddtrace/contrib/internal/ray/patch.py b/ddtrace/contrib/internal/ray/patch.py index c40f0284588..dab5b7d16b1 100644 --- a/ddtrace/contrib/internal/ray/patch.py +++ b/ddtrace/contrib/internal/ray/patch.py @@ -156,7 +156,9 @@ def traced_submit_task(wrapped, instance, args, kwargs): ) as span: span.set_tag_str("component", "ray") span.set_tag_str(SPAN_KIND, SpanKind.PRODUCER) + try: + # Injecting context into serialized runtime env updated_serialized_runtime_env_info = _inject_dd_tracing_into_runtime_env( kwargs.get("serialized_runtime_env_info", "{}"), span ) @@ -193,22 +195,6 @@ def traced_submit_job(wrapped, instance, args, kwargs): raise e -# def traced_actor_remote_method(wrapped, instance, args, kwargs): -# if not tracer: -# return wrapped(*args, **kwargs) - -# function_descriptor = instance._actor._ray_actor_creation_function_descriptor -# module = function_descriptor.module_name -# class_name = function_descriptor.class_name -# method_name = instance._method_name - -# with open("trace_log.txt", "a") as log_file: -# log_file.write(f"ActorMethod method call, Module: {module}, Class: {class_name}, Method: {method_name}\n") - -# # For all other actor method calls, proceed normally -# return wrapped(*args, **kwargs) - - def flush_worker_spans(wrapped, instance, args, kwargs): # Ensure the tracer has the time to send spans before # before the worker is killed @@ -218,186 +204,6 @@ def flush_worker_spans(wrapped, instance, args, kwargs): time.sleep(0.5) return wrapped(*args, **kwargs) - -def _create_span_wrapper(method: Callable[..., Any]) -> Any: - """Create a synchronous span wrapper for actor methods.""" - - def _traced_method( - self: Any, - *_args: Any, - **_kwargs: Any, - ) -> Any: - from ddtrace import tracer as dd_tracer - from ddtrace.ext import SpanTypes - from ddtrace.propagation.http import _TraceContext - - if not dd_tracer: - return method(self, *_args, **_kwargs) - - if os.environ.get("traceparent") is not None: - extracted_context = _TraceContext._extract( - { - "traceparent": os.environ.get("traceparent"), - "tracestate": os.environ.get("tracestate"), - } - ) - dd_tracer.context_provider.activate(extracted_context) - - method_name = f"{self.__class__.__name__}.{method.__name__}" - with dd_tracer.trace( - "ray.actor.method", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.ML - ) as span: - span.set_tag_str("component", "ray") - span.set_tag_str(SPAN_KIND, SpanKind.CONSUMER) - span.resource = method_name - - return method(self, *_args, **_kwargs) - - return _traced_method - - -def _create_async_span_wrapper(method: Callable[..., Any]) -> Any: - """Create an asynchronous span wrapper for actor methods.""" - - async def _traced_async_method( - self: Any, - *_args: Any, - **_kwargs: Any, - ) -> Any: - from ddtrace import tracer as dd_tracer - from ddtrace.ext import SpanTypes - from ddtrace.propagation.http import _TraceContext - - if not dd_tracer: - return await method(self, *_args, **_kwargs) - - if os.environ.get("traceparent") is not None: - extracted_context = _TraceContext._extract( - { - "traceparent": os.environ.get("traceparent"), - "tracestate": os.environ.get("tracestate"), - } - ) - dd_tracer.context_provider.activate(extracted_context) - - method_name = f"{self.__class__.__name__}.{method.__name__}" - with dd_tracer.trace( - "ray.actor.method", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.ML - ) as span: - span.set_tag_str("component", "ray") - span.set_tag_str(SPAN_KIND, SpanKind.CONSUMER) - span.resource = method_name - - return await method(self, *_args, **_kwargs) - - return _traced_async_method - - -def _handle_job_supervisor_tracing(cls): - methods_to_ignore = {"_polling", "ping"} - - def job_supervisor_run_wrapper(method: Callable[..., Any]) -> Any: - async def _traced_run_method(self: Any, *_args: Any, **_kwargs: Any) -> Any: - from ddtrace import tracer as dd_tracer - from ddtrace.ext import SpanTypes - from ddtrace.propagation.http import _TraceContext - - if not dd_tracer: - return await method(self, *_args, **_kwargs) - - if os.environ.get("traceparent") is not None: - extracted_context = _TraceContext._extract( - { - "traceparent": os.environ.get("traceparent"), - "tracestate": os.environ.get("tracestate"), - } - ) - dd_tracer.context_provider.activate(extracted_context) - - method_name = f"{self.__class__.__name__}.{method.__name__}" - with dd_tracer.trace( - "ray.job.run", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.ML - ) as span: - span.set_tag_str("component", "ray") - span.set_tag_str(SPAN_KIND, SpanKind.CONSUMER) - span.resource = method_name - - headers = {} - _TraceContext._inject(span.context, headers) - os.environ["traceparent"] = headers.get("traceparent", "") - os.environ["tracestate"] = headers.get("tracestate", "") - - return await method(self, *_args, **_kwargs) - - return _traced_run_method - - methods = inspect.getmembers(cls, is_function_or_method) - for name, method in methods: - # Skip methods we don't want to trace - if name in methods_to_ignore: - continue - - if ( - is_static_method(cls, name) - or is_class_method(method) - or inspect.isgeneratorfunction(method) - or inspect.isasyncgenfunction(method) - or name == "__del__" - ): - continue - - # Special handling for the run method - if name == "run" and inspect.iscoroutinefunction(method): - wrapped_method = wraps(method)(job_supervisor_run_wrapper(method)) - else: - # Regular tracing for all other methods using shared wrappers - if inspect.iscoroutinefunction(method): - wrapped_method = wraps(method)(_create_async_span_wrapper(method)) - else: - wrapped_method = wraps(method)(_create_span_wrapper(method)) - - setattr(cls, name, wrapped_method) - - return cls - - -def inject_tracing_into_actor_class(wrapped, instance, args, kwargs): - # Import tracer inside the function to avoid global reference issues - from ddtrace import tracer as dd_tracer - - if not dd_tracer: - return wrapped(*args, **kwargs) - - cls = wrapped(*args, **kwargs) - module_name = str(cls.__module__) - class_name = str(cls.__name__) - if module_name.startswith("ray.dag") or module_name.startswith("ray.experimental"): - return cls - - if f"{module_name}.{class_name}" == "ray.dashboard.modules.job.job_supervisor.JobSupervisor": - return _handle_job_supervisor_tracing(cls) - - methods = inspect.getmembers(cls, is_function_or_method) - for name, method in methods: - if ( - is_static_method(cls, name) - or is_class_method(method) - or inspect.isgeneratorfunction(method) - or inspect.isasyncgenfunction(method) - or name == "__del__" - ): - continue - - if inspect.iscoroutinefunction(method): - wrapped_method = wraps(method)(_create_async_span_wrapper(method)) - else: - wrapped_method = wraps(method)(_create_span_wrapper(method)) - - setattr(cls, name, wrapped_method) - - return cls - - def patch(): if getattr(ray, "_datadog_patch", False): return @@ -409,13 +215,6 @@ def patch(): _w(ray.remote_function, "RemoteFunction._remote", traced_submit_task) _w(ray._private.worker, "disconnect", flush_worker_spans) _w(ray.dashboard.modules.job.job_manager.JobManager, "submit_job", traced_submit_job) - _w(ray.actor, "_modify_class", inject_tracing_into_actor_class) - - def empty_inject_tracing_into_class(_cls): - return _cls - - ray.util.tracing.tracing_helper._inject_tracing_into_class = empty_inject_tracing_into_class - def unpatch(): if not getattr(ray, "_datadog_patch", False): From f0225e07cc8b65af479bb2255bd5f6bb5277c0d9 Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Mon, 25 Aug 2025 18:59:03 +0200 Subject: [PATCH 03/59] chore(ray): formatting --- ddtrace/contrib/internal/ray/patch.py | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/ddtrace/contrib/internal/ray/patch.py b/ddtrace/contrib/internal/ray/patch.py index dab5b7d16b1..9b2f5a9ab22 100644 --- a/ddtrace/contrib/internal/ray/patch.py +++ b/ddtrace/contrib/internal/ray/patch.py @@ -17,8 +17,9 @@ from ddtrace.constants import _FILTER_KEPT_KEY from ddtrace.constants import _SAMPLING_PRIORITY_KEY from ddtrace.constants import _SPAN_MEASURED_KEY -from ddtrace.ext import SpanTypes +from ddtrace.constants import SPAN_KIND from ddtrace.ext import SpanKind +from ddtrace.ext import SpanTypes from ddtrace.internal.schema import schematize_service_name from ddtrace.internal.utils.wrappers import unwrap as _u from ddtrace.propagation.http import _TraceContext @@ -33,7 +34,6 @@ import ray.dashboard.modules.job.job_manager import ray.dashboard.modules.job.job_supervisor import ray.util.tracing.tracing_helper -from ddtrace.constants import SPAN_KIND class RayTraceProcessor: @@ -71,12 +71,7 @@ def wrapped_function(*args, **kwargs): def _inject_dd_tracing_into_runtime_env(serialized_runtime_env_info, current_span): - """ - Inject Datadog tracing information into the serialized runtime environment info. - """ - def parse_json_string(json_string, default): - """Helper function to parse a JSON string or return a default value.""" if json_string and json_string.strip() != "{}": return json.loads(json_string) return default @@ -115,9 +110,7 @@ def _wrap_task_execution(wrapped, *args, **kwargs): function_module = getattr(wrapped, "__module__", "unknown_module") tracer.context_provider.activate(extracted_context) - with tracer.trace( - "ray.task.execute", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.ML - ) as span: + with tracer.trace("ray.task.execute", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.ML) as span: span.set_tag_str("component", "ray") span.set_tag_str(SPAN_KIND, SpanKind.CONSUMER) span.resource = f"{function_module}.{function_name}" @@ -151,9 +144,7 @@ def traced_submit_task(wrapped, instance, args, kwargs): instance._tracing_injected = True tracer.context_provider.activate(extracted_context) - with tracer.trace( - "ray.task.submit", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.ML - ) as span: + with tracer.trace("ray.task.submit", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.ML) as span: span.set_tag_str("component", "ray") span.set_tag_str(SPAN_KIND, SpanKind.PRODUCER) @@ -204,6 +195,7 @@ def flush_worker_spans(wrapped, instance, args, kwargs): time.sleep(0.5) return wrapped(*args, **kwargs) + def patch(): if getattr(ray, "_datadog_patch", False): return @@ -216,6 +208,7 @@ def patch(): _w(ray._private.worker, "disconnect", flush_worker_spans) _w(ray.dashboard.modules.job.job_manager.JobManager, "submit_job", traced_submit_job) + def unpatch(): if not getattr(ray, "_datadog_patch", False): return From 3594ca7c0e0eb2b6d20b147f1daff26560eaeb4a Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Tue, 26 Aug 2025 10:07:07 +0200 Subject: [PATCH 04/59] Revert "chore(ray): remove actor support" This reverts commit 48731a9f28856eea3febf481ea112b745322693d. --- ddtrace/contrib/internal/ray/patch.py | 204 +++++++++++++++++++++++++- 1 file changed, 202 insertions(+), 2 deletions(-) diff --git a/ddtrace/contrib/internal/ray/patch.py b/ddtrace/contrib/internal/ray/patch.py index 9b2f5a9ab22..1ab067ffc21 100644 --- a/ddtrace/contrib/internal/ray/patch.py +++ b/ddtrace/contrib/internal/ray/patch.py @@ -147,9 +147,7 @@ def traced_submit_task(wrapped, instance, args, kwargs): with tracer.trace("ray.task.submit", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.ML) as span: span.set_tag_str("component", "ray") span.set_tag_str(SPAN_KIND, SpanKind.PRODUCER) - try: - # Injecting context into serialized runtime env updated_serialized_runtime_env_info = _inject_dd_tracing_into_runtime_env( kwargs.get("serialized_runtime_env_info", "{}"), span ) @@ -186,6 +184,22 @@ def traced_submit_job(wrapped, instance, args, kwargs): raise e +# def traced_actor_remote_method(wrapped, instance, args, kwargs): +# if not tracer: +# return wrapped(*args, **kwargs) + +# function_descriptor = instance._actor._ray_actor_creation_function_descriptor +# module = function_descriptor.module_name +# class_name = function_descriptor.class_name +# method_name = instance._method_name + +# with open("trace_log.txt", "a") as log_file: +# log_file.write(f"ActorMethod method call, Module: {module}, Class: {class_name}, Method: {method_name}\n") + +# # For all other actor method calls, proceed normally +# return wrapped(*args, **kwargs) + + def flush_worker_spans(wrapped, instance, args, kwargs): # Ensure the tracer has the time to send spans before # before the worker is killed @@ -196,6 +210,185 @@ def flush_worker_spans(wrapped, instance, args, kwargs): return wrapped(*args, **kwargs) +def _create_span_wrapper(method: Callable[..., Any]) -> Any: + """Create a synchronous span wrapper for actor methods.""" + + def _traced_method( + self: Any, + *_args: Any, + **_kwargs: Any, + ) -> Any: + from ddtrace import tracer as dd_tracer + from ddtrace.ext import SpanTypes + from ddtrace.propagation.http import _TraceContext + + if not dd_tracer: + return method(self, *_args, **_kwargs) + + if os.environ.get("traceparent") is not None: + extracted_context = _TraceContext._extract( + { + "traceparent": os.environ.get("traceparent"), + "tracestate": os.environ.get("tracestate"), + } + ) + dd_tracer.context_provider.activate(extracted_context) + + method_name = f"{self.__class__.__name__}.{method.__name__}" + with dd_tracer.trace( + "ray.actor.method", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.ML + ) as span: + span.set_tag_str("component", "ray") + span.set_tag_str(SPAN_KIND, SpanKind.CONSUMER) + span.resource = method_name + + return method(self, *_args, **_kwargs) + + return _traced_method + + +def _create_async_span_wrapper(method: Callable[..., Any]) -> Any: + """Create an asynchronous span wrapper for actor methods.""" + + async def _traced_async_method( + self: Any, + *_args: Any, + **_kwargs: Any, + ) -> Any: + from ddtrace import tracer as dd_tracer + from ddtrace.ext import SpanTypes + from ddtrace.propagation.http import _TraceContext + + if not dd_tracer: + return await method(self, *_args, **_kwargs) + + if os.environ.get("traceparent") is not None: + extracted_context = _TraceContext._extract( + { + "traceparent": os.environ.get("traceparent"), + "tracestate": os.environ.get("tracestate"), + } + ) + dd_tracer.context_provider.activate(extracted_context) + + method_name = f"{self.__class__.__name__}.{method.__name__}" + with dd_tracer.trace( + "ray.actor.method", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.ML + ) as span: + span.set_tag_str("component", "ray") + span.set_tag_str(SPAN_KIND, SpanKind.CONSUMER) + span.resource = method_name + + return await method(self, *_args, **_kwargs) + + return _traced_async_method + + +def _handle_job_supervisor_tracing(cls): + methods_to_ignore = {"_polling", "ping"} + + def job_supervisor_run_wrapper(method: Callable[..., Any]) -> Any: + async def _traced_run_method(self: Any, *_args: Any, **_kwargs: Any) -> Any: + from ddtrace import tracer as dd_tracer + from ddtrace.ext import SpanTypes + from ddtrace.propagation.http import _TraceContext + + if not dd_tracer: + return await method(self, *_args, **_kwargs) + + if os.environ.get("traceparent") is not None: + extracted_context = _TraceContext._extract( + { + "traceparent": os.environ.get("traceparent"), + "tracestate": os.environ.get("tracestate"), + } + ) + dd_tracer.context_provider.activate(extracted_context) + + method_name = f"{self.__class__.__name__}.{method.__name__}" + with dd_tracer.trace( + "ray.job.run", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.ML + ) as span: + span.set_tag_str("component", "ray") + span.set_tag_str(SPAN_KIND, SpanKind.CONSUMER) + span.resource = method_name + + headers = {} + _TraceContext._inject(span.context, headers) + os.environ["traceparent"] = headers.get("traceparent", "") + os.environ["tracestate"] = headers.get("tracestate", "") + + return await method(self, *_args, **_kwargs) + + return _traced_run_method + + methods = inspect.getmembers(cls, is_function_or_method) + for name, method in methods: + # Skip methods we don't want to trace + if name in methods_to_ignore: + continue + + if ( + is_static_method(cls, name) + or is_class_method(method) + or inspect.isgeneratorfunction(method) + or inspect.isasyncgenfunction(method) + or name == "__del__" + ): + continue + + # Special handling for the run method + if name == "run" and inspect.iscoroutinefunction(method): + wrapped_method = wraps(method)(job_supervisor_run_wrapper(method)) + else: + # Regular tracing for all other methods using shared wrappers + if inspect.iscoroutinefunction(method): + wrapped_method = wraps(method)(_create_async_span_wrapper(method)) + else: + wrapped_method = wraps(method)(_create_span_wrapper(method)) + + setattr(cls, name, wrapped_method) + + return cls + + +def inject_tracing_into_actor_class(wrapped, instance, args, kwargs): + # Import tracer inside the function to avoid global reference issues + from ddtrace import tracer as dd_tracer + + if not dd_tracer: + return wrapped(*args, **kwargs) + + cls = wrapped(*args, **kwargs) + module_name = str(cls.__module__) + class_name = str(cls.__name__) + if module_name.startswith("ray.dag") or module_name.startswith("ray.experimental"): + return cls + + if f"{module_name}.{class_name}" == "ray.dashboard.modules.job.job_supervisor.JobSupervisor": + return _handle_job_supervisor_tracing(cls) + + methods = inspect.getmembers(cls, is_function_or_method) + for name, method in methods: + if ( + is_static_method(cls, name) + or is_class_method(method) + or inspect.isgeneratorfunction(method) + or inspect.isasyncgenfunction(method) + or name == "__del__" + ): + continue + + if inspect.iscoroutinefunction(method): + wrapped_method = wraps(method)(_create_async_span_wrapper(method)) + else: + wrapped_method = wraps(method)(_create_span_wrapper(method)) + + setattr(cls, name, wrapped_method) + + return cls + + def patch(): if getattr(ray, "_datadog_patch", False): return @@ -207,6 +400,13 @@ def patch(): _w(ray.remote_function, "RemoteFunction._remote", traced_submit_task) _w(ray._private.worker, "disconnect", flush_worker_spans) _w(ray.dashboard.modules.job.job_manager.JobManager, "submit_job", traced_submit_job) + _w(ray.actor, "_modify_class", inject_tracing_into_actor_class) + + def empty_inject_tracing_into_class(_cls): + return _cls + + ray.util.tracing.tracing_helper._inject_tracing_into_class = empty_inject_tracing_into_class + def unpatch(): From 80e253bfddda98623d39e8f444cab2c097b695d7 Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Tue, 26 Aug 2025 14:32:32 +0200 Subject: [PATCH 05/59] feat(ray): add actor support --- ddtrace/contrib/internal/ray/patch.py | 102 ++++++++++++++++++++------ 1 file changed, 79 insertions(+), 23 deletions(-) diff --git a/ddtrace/contrib/internal/ray/patch.py b/ddtrace/contrib/internal/ray/patch.py index 1ab067ffc21..7e4d8ae26ae 100644 --- a/ddtrace/contrib/internal/ray/patch.py +++ b/ddtrace/contrib/internal/ray/patch.py @@ -7,6 +7,7 @@ from typing import Callable from typing import List from typing import Optional +from inspect import Parameter from wrapt import wrap_function_wrapper as _w @@ -56,6 +57,27 @@ def process_trace(self, trace: List[Span]) -> Optional[List[Span]]: config._add("ray", dict(_default_service=schematize_service_name("ray"))) +def _sort_params_list(params_list: List[Parameter]): + """Given a list of Parameters, if a kwargs Parameter exists, + move it to the end of the list.""" + for i, param in enumerate(params_list): + if param.kind == Parameter.VAR_KEYWORD: + params_list.append(params_list.pop(i)) + break + return params_list + + +def _add_param_to_signature(function: Callable, new_param: Parameter): + """Add additional Parameter to function signature.""" + old_sig = inspect.signature(function) + old_sig_list_repr = list(old_sig.parameters.values()) + # If new_param is already in signature, do not add it again. + if any(param.name == new_param.name for param in old_sig_list_repr): + return old_sig + new_params = _sort_params_list(old_sig_list_repr + [new_param]) + new_sig = old_sig.replace(parameters=new_params) + return new_sig + def get_version() -> str: return parse_version(getattr(ray, "__version__", "")) @@ -183,22 +205,39 @@ def traced_submit_job(wrapped, instance, args, kwargs): span.set_tag_str("ray.job.submit_status", "error") raise e +def traced_actor_method_call(wrapped, instance, args, kwargs): + if not tracer: + return wrapped(*args, **kwargs) + -# def traced_actor_remote_method(wrapped, instance, args, kwargs): -# if not tracer: -# return wrapped(*args, **kwargs) + method_name = args[0] + # if _dd_trace_ctx was not injected, we do not want to trace this function + if not any(p.name == "_dd_trace_ctx" for p in instance._ray_method_signatures[method_name]): + return wrapped(*args, **kwargs) -# function_descriptor = instance._actor._ray_actor_creation_function_descriptor -# module = function_descriptor.module_name -# class_name = function_descriptor.class_name -# method_name = instance._method_name + if os.environ.get("traceparent") is not None: + extracted_context = _TraceContext._extract( + { + "traceparent": os.environ.get("traceparent"), + "tracestate": os.environ.get("tracestate"), + } + ) + tracer.context_provider.activate(extracted_context) -# with open("trace_log.txt", "a") as log_file: -# log_file.write(f"ActorMethod method call, Module: {module}, Class: {class_name}, Method: {method_name}\n") + with tracer.trace("ray.actor.method.call", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.ML) as span: + span.set_tag_str("component", "ray") + span.set_tag_str(SPAN_KIND, SpanKind.PRODUCER) -# # For all other actor method calls, proceed normally -# return wrapped(*args, **kwargs) + try: + headers = {} + _TraceContext._inject(span.context, headers) + if "kwargs" not in kwargs or kwargs["kwargs"] is None: + kwargs["kwargs"] = {} + kwargs["kwargs"]["_dd_trace_ctx"] = headers + return wrapped(*args, **kwargs) + except Exception as e: + raise e def flush_worker_spans(wrapped, instance, args, kwargs): # Ensure the tracer has the time to send spans before @@ -216,6 +255,7 @@ def _create_span_wrapper(method: Callable[..., Any]) -> Any: def _traced_method( self: Any, *_args: Any, + _dd_trace_ctx = None, **_kwargs: Any, ) -> Any: from ddtrace import tracer as dd_tracer @@ -225,7 +265,10 @@ def _traced_method( if not dd_tracer: return method(self, *_args, **_kwargs) - if os.environ.get("traceparent") is not None: + if _dd_trace_ctx is not None: + extracted_context = _TraceContext._extract(_dd_trace_ctx) + dd_tracer.context_provider.activate(extracted_context) + elif os.environ.get("traceparent") is not None: extracted_context = _TraceContext._extract( { "traceparent": os.environ.get("traceparent"), @@ -253,6 +296,7 @@ def _create_async_span_wrapper(method: Callable[..., Any]) -> Any: async def _traced_async_method( self: Any, *_args: Any, + _dd_trace_ctx = None, **_kwargs: Any, ) -> Any: from ddtrace import tracer as dd_tracer @@ -262,7 +306,10 @@ async def _traced_async_method( if not dd_tracer: return await method(self, *_args, **_kwargs) - if os.environ.get("traceparent") is not None: + if _dd_trace_ctx is not None: + extracted_context = _TraceContext._extract(_dd_trace_ctx) + dd_tracer.context_provider.activate(extracted_context) + elif os.environ.get("traceparent") is not None: extracted_context = _TraceContext._extract( { "traceparent": os.environ.get("traceparent"), @@ -285,10 +332,10 @@ async def _traced_async_method( def _handle_job_supervisor_tracing(cls): - methods_to_ignore = {"_polling", "ping"} + methods_to_ignore = {"ping", "_polling"} def job_supervisor_run_wrapper(method: Callable[..., Any]) -> Any: - async def _traced_run_method(self: Any, *_args: Any, **_kwargs: Any) -> Any: + async def _traced_run_method(self: Any, *_args: Any, _dd_trace_ctx = None, **_kwargs: Any) -> Any: from ddtrace import tracer as dd_tracer from ddtrace.ext import SpanTypes from ddtrace.propagation.http import _TraceContext @@ -324,7 +371,6 @@ async def _traced_run_method(self: Any, *_args: Any, **_kwargs: Any) -> Any: methods = inspect.getmembers(cls, is_function_or_method) for name, method in methods: - # Skip methods we don't want to trace if name in methods_to_ignore: continue @@ -337,6 +383,13 @@ async def _traced_run_method(self: Any, *_args: Any, **_kwargs: Any) -> Any: ): continue + method.__signature__ = _add_param_to_signature( + method, + inspect.Parameter( + "_dd_trace_ctx", inspect.Parameter.KEYWORD_ONLY, default=None + ), + ) + # Special handling for the run method if name == "run" and inspect.iscoroutinefunction(method): wrapped_method = wraps(method)(job_supervisor_run_wrapper(method)) @@ -379,6 +432,13 @@ def inject_tracing_into_actor_class(wrapped, instance, args, kwargs): ): continue + method.__signature__ = _add_param_to_signature( + method, + inspect.Parameter( + "_dd_trace_ctx", inspect.Parameter.KEYWORD_ONLY, default=None + ), + ) + if inspect.iscoroutinefunction(method): wrapped_method = wraps(method)(_create_async_span_wrapper(method)) else: @@ -388,7 +448,6 @@ def inject_tracing_into_actor_class(wrapped, instance, args, kwargs): return cls - def patch(): if getattr(ray, "_datadog_patch", False): return @@ -401,12 +460,7 @@ def patch(): _w(ray._private.worker, "disconnect", flush_worker_spans) _w(ray.dashboard.modules.job.job_manager.JobManager, "submit_job", traced_submit_job) _w(ray.actor, "_modify_class", inject_tracing_into_actor_class) - - def empty_inject_tracing_into_class(_cls): - return _cls - - ray.util.tracing.tracing_helper._inject_tracing_into_class = empty_inject_tracing_into_class - + _w(ray.actor.ActorHandle, "_actor_method_call", traced_actor_method_call) def unpatch(): @@ -422,3 +476,5 @@ def unpatch(): _u(ray.remote_function, "RemoteFunction._remote", traced_submit_task) _u(ray._private.worker, "disconnect", flush_worker_spans) _u(ray.dashboard.modules.job.job_manager.JobManager, "submit_job", traced_submit_job) + _u(ray.actor, "_modify_class", inject_tracing_into_actor_class) + _u(ray.actor.ActorHandle, "_actor_method_call", traced_actor_method_call) From f05a0b2406ea7086dfab985d20ba8665b116568a Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Wed, 27 Aug 2025 18:05:41 +0200 Subject: [PATCH 06/59] feat(ray): refactoring and better support of context --- ddtrace/contrib/internal/ray/patch.py | 434 ++++++++++++-------------- ddtrace/contrib/internal/ray/utils.py | 44 +++ 2 files changed, 239 insertions(+), 239 deletions(-) create mode 100644 ddtrace/contrib/internal/ray/utils.py diff --git a/ddtrace/contrib/internal/ray/patch.py b/ddtrace/contrib/internal/ray/patch.py index 7e4d8ae26ae..a5d8fd270db 100644 --- a/ddtrace/contrib/internal/ray/patch.py +++ b/ddtrace/contrib/internal/ray/patch.py @@ -1,13 +1,13 @@ +from contextlib import contextmanager from functools import wraps import inspect -import json import os +import threading import time from typing import Any from typing import Callable from typing import List from typing import Optional -from inspect import Parameter from wrapt import wrap_function_wrapper as _w @@ -22,8 +22,10 @@ from ddtrace.ext import SpanKind from ddtrace.ext import SpanTypes from ddtrace.internal.schema import schematize_service_name +from ddtrace.internal.utils.formats import asbool from ddtrace.internal.utils.wrappers import unwrap as _u from ddtrace.propagation.http import _TraceContext +from ddtrace.settings._config import _get_config from ddtrace.vendor.packaging.version import parse as parse_version import ray from ray._private.inspect_util import is_class_method @@ -31,10 +33,37 @@ from ray._private.inspect_util import is_static_method import ray._private.worker import ray.actor -import ray.dashboard.modules.job.common import ray.dashboard.modules.job.job_manager import ray.dashboard.modules.job.job_supervisor -import ray.util.tracing.tracing_helper +import ray.exceptions + +from .utils import _extract_tracing_context_from_env +from .utils import _inject_context_in_env +from .utils import _inject_context_in_kwargs +from .utils import _inject_dd_trace_ctx_kwarg + + +class _JobSpanManager: + """Thread-safe manager for job spans that avoids closure serialization issues.""" + + def __init__(self): + self._spans = {} + self._lock = threading.Lock() + + def add_span(self, submission_id: str, span: Span): + with self._lock: + self._spans[submission_id] = span + + def remove_span(self, submission_id: str) -> Optional[Span]: + with self._lock: + return self._spans.pop(submission_id, None) + + def get_span(self, submission_id: str) -> Optional[Span]: + with self._lock: + return self._spans.get(submission_id) + + +_job_span_manager = _JobSpanManager() class RayTraceProcessor: @@ -43,40 +72,29 @@ def process_trace(self, trace: List[Span]) -> Optional[List[Span]]: return trace processed_trace = [] + ray_spans_only = config.ray.ray_spans_only for span in trace: - if span.service != "ray.dashboard": - processed_trace.append(span) if span.get_tag("component") == "ray": span.set_metric(_DJM_ENABLED_KEY, 1) span.set_metric(_FILTER_KEPT_KEY, 1) span.set_metric(_SPAN_MEASURED_KEY, 1) span.set_metric(_SAMPLING_PRIORITY_KEY, 2) + processed_trace.append(span) + elif not ray_spans_only: + with open("span_log.txt", "a") as log_file: + log_file.write(f"Span: {span}\n") + processed_trace.append(span) return processed_trace -config._add("ray", dict(_default_service=schematize_service_name("ray"))) - -def _sort_params_list(params_list: List[Parameter]): - """Given a list of Parameters, if a kwargs Parameter exists, - move it to the end of the list.""" - for i, param in enumerate(params_list): - if param.kind == Parameter.VAR_KEYWORD: - params_list.append(params_list.pop(i)) - break - return params_list - - -def _add_param_to_signature(function: Callable, new_param: Parameter): - """Add additional Parameter to function signature.""" - old_sig = inspect.signature(function) - old_sig_list_repr = list(old_sig.parameters.values()) - # If new_param is already in signature, do not add it again. - if any(param.name == new_param.name for param in old_sig_list_repr): - return old_sig - new_params = _sort_params_list(old_sig_list_repr + [new_param]) - new_sig = old_sig.replace(parameters=new_params) - return new_sig +config._add( + "ray", + dict( + _default_service=schematize_service_name("ray"), + ray_spans_only=asbool(_get_config("DD_TRACE_RAY_SPANS_ONLY", default=True)), + ), +) def get_version() -> str: @@ -92,42 +110,17 @@ def wrapped_function(*args, **kwargs): return wrapped_function -def _inject_dd_tracing_into_runtime_env(serialized_runtime_env_info, current_span): - def parse_json_string(json_string, default): - if json_string and json_string.strip() != "{}": - return json.loads(json_string) - return default - - try: - runtime_env_info = parse_json_string(serialized_runtime_env_info, {}) - serialized_runtime_env = runtime_env_info.get("serializedRuntimeEnv", "{}") - runtime_env = parse_json_string(serialized_runtime_env, {}) - env_vars = runtime_env.get("env_vars", {}) - - _TraceContext._inject(current_span.context, env_vars) - runtime_env["env_vars"] = env_vars - runtime_env_info["serializedRuntimeEnv"] = json.dumps(runtime_env, sort_keys=True) - - return json.dumps(runtime_env_info, sort_keys=True) - - except (json.JSONDecodeError, KeyError): - return serialized_runtime_env_info - - def _wrap_task_execution(wrapped, *args, **kwargs): """ Wraps the actual execution of a Ray task to trace its performance. """ - if not tracer: + if not tracer or "_dd_trace_ctx" not in kwargs: return wrapped(*args, **kwargs) # Extract context from parent span - extracted_context = _TraceContext._extract( - { - "traceparent": os.environ.get("traceparent"), - "tracestate": os.environ.get("tracestate"), - } - ) + extracted_context = _TraceContext._extract(kwargs["_dd_trace_ctx"]) + kwargs.pop("_dd_trace_ctx") + function_name = getattr(wrapped, "__name__", "unknown_function") function_module = getattr(wrapped, "__module__", "unknown_module") @@ -145,35 +138,32 @@ def _wrap_task_execution(wrapped, *args, **kwargs): raise e -def traced_submit_task(wrapped, instance, args, kwargs): +def traced_remote_init(wrapped, instance, args, kwargs): if not tracer: return wrapped(*args, **kwargs) - # Extract context from parent span - extracted_context = _TraceContext._extract( - { - "traceparent": os.environ.get("traceparent"), - "tracestate": os.environ.get("tracestate"), - } - ) - if not extracted_context: - return wrapped(*args, **kwargs) - - # Inject function in the function that will be executed + result = wrapped(*args, **kwargs) with instance._inject_lock: if not hasattr(instance, "_tracing_injected"): instance._function = _inject_tracing_into_function(instance._function) + instance._function.__signature__ = _inject_dd_trace_ctx_kwarg(instance._function) instance._tracing_injected = True - tracer.context_provider.activate(extracted_context) + return result + + +def traced_submit_task(wrapped, instance, args, kwargs): + if not tracer: + return wrapped(*args, **kwargs) + + if tracer.current_span() is None: + tracer.context_provider.activate(_extract_tracing_context_from_env()) + with tracer.trace("ray.task.submit", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.ML) as span: span.set_tag_str("component", "ray") span.set_tag_str(SPAN_KIND, SpanKind.PRODUCER) try: - updated_serialized_runtime_env_info = _inject_dd_tracing_into_runtime_env( - kwargs.get("serialized_runtime_env_info", "{}"), span - ) - kwargs["serialized_runtime_env_info"] = updated_serialized_runtime_env_info + _inject_context_in_kwargs(span.context, kwargs) resp = wrapped(*args, **kwargs) @@ -188,57 +178,66 @@ def traced_submit_job(wrapped, instance, args, kwargs): if not tracer: return wrapped(*args, **kwargs) - with tracer.trace("ray.job.submit", service=kwargs["submission_id"], span_type=SpanTypes.ML) as span: - span.set_tag_str("component", "ray") - span.set_tag_str(SPAN_KIND, SpanKind.PRODUCER) + submission_id = kwargs["submission_id"] + job_span = tracer.start_span("ray.job", service=submission_id, span_type=SpanTypes.ML) + job_span.set_tag_str("component", "ray") + _job_span_manager.add_span(submission_id, job_span) - try: - # Inject the context of the job + # Set global span + tracer.context_provider.activate(job_span) + try: + with tracer.trace("ray.job.submit", service=submission_id, span_type=SpanTypes.ML) as submit_span: + submit_span.set_tag_str("component", "ray") + submit_span.set_tag_str(SPAN_KIND, SpanKind.PRODUCER) + + # Inject the context of the job so that ray.job.run is its child env_vars = kwargs.setdefault("runtime_env", {}).setdefault("env_vars", {}) - _TraceContext._inject(span.context, env_vars) + _TraceContext._inject(job_span.context, env_vars) env_vars["_RAY_SUBMISSION_ID"] = kwargs.get("submission_id", "") - resp = wrapped(*args, **kwargs) - span.set_tag_str("ray.job.submit_status", "success") - return resp - except Exception as e: - span.set_tag_str("ray.job.submit_status", "error") - raise e + try: + resp = wrapped(*args, **kwargs) + submit_span.set_tag_str("ray.job.submit_status", "success") + return resp + except Exception: + submit_span.set_tag_str("ray.job.submit_status", "error") + raise + except Exception as e: + job_span.set_tag_str("ray.job.status", "error") + job_span.error = 1 + job_span.set_exc_info(type(e), e, e.__traceback__) + _job_span_manager.remove_span(job_span) + job_span.finish() + raise e + def traced_actor_method_call(wrapped, instance, args, kwargs): if not tracer: return wrapped(*args, **kwargs) - + actor_name = instance._ray_actor_creation_function_descriptor.class_name method_name = args[0] # if _dd_trace_ctx was not injected, we do not want to trace this function if not any(p.name == "_dd_trace_ctx" for p in instance._ray_method_signatures[method_name]): return wrapped(*args, **kwargs) - if os.environ.get("traceparent") is not None: - extracted_context = _TraceContext._extract( - { - "traceparent": os.environ.get("traceparent"), - "tracestate": os.environ.get("tracestate"), - } - ) - tracer.context_provider.activate(extracted_context) + if tracer.current_span() is None: + tracer.context_provider.activate(_extract_tracing_context_from_env()) - with tracer.trace("ray.actor.method.call", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.ML) as span: + with tracer.trace( + "ray.actor.method.call", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.ML + ) as span: span.set_tag_str("component", "ray") span.set_tag_str(SPAN_KIND, SpanKind.PRODUCER) + span.resource = f"{actor_name}.{method_name}.remote()" try: - headers = {} - _TraceContext._inject(span.context, headers) - if "kwargs" not in kwargs or kwargs["kwargs"] is None: - kwargs["kwargs"] = {} - kwargs["kwargs"]["_dd_trace_ctx"] = headers - + _inject_context_in_kwargs(span.context, kwargs) return wrapped(*args, **kwargs) except Exception as e: raise e + def flush_worker_spans(wrapped, instance, args, kwargs): # Ensure the tracer has the time to send spans before # before the worker is killed @@ -249,125 +248,96 @@ def flush_worker_spans(wrapped, instance, args, kwargs): return wrapped(*args, **kwargs) -def _create_span_wrapper(method: Callable[..., Any]) -> Any: - """Create a synchronous span wrapper for actor methods.""" - - def _traced_method( - self: Any, - *_args: Any, - _dd_trace_ctx = None, - **_kwargs: Any, - ) -> Any: +def job_supervisor_run_wrapper(method: Callable[..., Any]) -> Any: + async def _traced_run_method(self: Any, *_args: Any, _dd_trace_ctx=None, **_kwargs: Any) -> Any: from ddtrace import tracer as dd_tracer from ddtrace.ext import SpanTypes - from ddtrace.propagation.http import _TraceContext if not dd_tracer: - return method(self, *_args, **_kwargs) - - if _dd_trace_ctx is not None: - extracted_context = _TraceContext._extract(_dd_trace_ctx) - dd_tracer.context_provider.activate(extracted_context) - elif os.environ.get("traceparent") is not None: - extracted_context = _TraceContext._extract( - { - "traceparent": os.environ.get("traceparent"), - "tracestate": os.environ.get("tracestate"), - } - ) - dd_tracer.context_provider.activate(extracted_context) + return await method(self, *_args, **_kwargs) + + dd_tracer.context_provider.activate(_extract_tracing_context_from_env()) method_name = f"{self.__class__.__name__}.{method.__name__}" with dd_tracer.trace( - "ray.actor.method", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.ML + "ray.job.run", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.ML ) as span: span.set_tag_str("component", "ray") span.set_tag_str(SPAN_KIND, SpanKind.CONSUMER) span.resource = method_name - return method(self, *_args, **_kwargs) + _inject_context_in_env(span.context) - return _traced_method + try: + await method(self, *_args, **_kwargs) + except ray.exceptions.AsyncioActorExit: + pass # only if job failed ? + except Exception as e: + raise e + return _traced_run_method -def _create_async_span_wrapper(method: Callable[..., Any]) -> Any: - """Create an asynchronous span wrapper for actor methods.""" - - async def _traced_async_method( - self: Any, - *_args: Any, - _dd_trace_ctx = None, - **_kwargs: Any, - ) -> Any: - from ddtrace import tracer as dd_tracer - from ddtrace.ext import SpanTypes - from ddtrace.propagation.http import _TraceContext - if not dd_tracer: - return await method(self, *_args, **_kwargs) +@contextmanager +def _trace_scope(self: Any, method: Callable[..., Any], dd_trace_ctx): + if tracer.current_span() is None: + context = _TraceContext._extract(dd_trace_ctx) if dd_trace_ctx else _extract_tracing_context_from_env() + tracer.context_provider.activate(context) - if _dd_trace_ctx is not None: - extracted_context = _TraceContext._extract(_dd_trace_ctx) - dd_tracer.context_provider.activate(extracted_context) - elif os.environ.get("traceparent") is not None: - extracted_context = _TraceContext._extract( - { - "traceparent": os.environ.get("traceparent"), - "tracestate": os.environ.get("tracestate"), - } - ) - dd_tracer.context_provider.activate(extracted_context) + method_name = f"{self.__class__.__name__}.{method.__name__}" + with tracer.trace( + "ray.actor.method", + service=os.environ.get("_RAY_SUBMISSION_ID"), + span_type=SpanTypes.ML, + ) as span: + span.set_tag_str("component", "ray") + span.set_tag_str(SPAN_KIND, SpanKind.CONSUMER) + span.resource = method_name - method_name = f"{self.__class__.__name__}.{method.__name__}" - with dd_tracer.trace( - "ray.actor.method", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.ML - ) as span: - span.set_tag_str("component", "ray") - span.set_tag_str(SPAN_KIND, SpanKind.CONSUMER) - span.resource = method_name + yield span - return await method(self, *_args, **_kwargs) - return _traced_async_method +def _create_span_wrapper(method: Callable[..., Any]) -> Any: + def _traced_method(self: Any, *args: Any, _dd_trace_ctx=None, **kwargs: Any) -> Any: + from ddtrace import tracer + if not tracer: + return method(self, *args, **kwargs) -def _handle_job_supervisor_tracing(cls): - methods_to_ignore = {"ping", "_polling"} + with _trace_scope(self, method, _dd_trace_ctx, **kwargs): + return method(self, *args, **kwargs) - def job_supervisor_run_wrapper(method: Callable[..., Any]) -> Any: - async def _traced_run_method(self: Any, *_args: Any, _dd_trace_ctx = None, **_kwargs: Any) -> Any: - from ddtrace import tracer as dd_tracer - from ddtrace.ext import SpanTypes - from ddtrace.propagation.http import _TraceContext + return _traced_method - if not dd_tracer: - return await method(self, *_args, **_kwargs) - if os.environ.get("traceparent") is not None: - extracted_context = _TraceContext._extract( - { - "traceparent": os.environ.get("traceparent"), - "tracestate": os.environ.get("tracestate"), - } - ) - dd_tracer.context_provider.activate(extracted_context) +def _create_async_span_wrapper(method: Callable[..., Any]) -> Any: + async def _traced_async_method(self: Any, *args: Any, _dd_trace_ctx=None, **kwargs: Any) -> Any: + from ddtrace import tracer - method_name = f"{self.__class__.__name__}.{method.__name__}" - with dd_tracer.trace( - "ray.job.run", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.ML - ) as span: - span.set_tag_str("component", "ray") - span.set_tag_str(SPAN_KIND, SpanKind.CONSUMER) - span.resource = method_name + if not tracer: + return await method(self, *args, **kwargs) - headers = {} - _TraceContext._inject(span.context, headers) - os.environ["traceparent"] = headers.get("traceparent", "") - os.environ["tracestate"] = headers.get("tracestate", "") + with _trace_scope(self, method, _dd_trace_ctx, **kwargs): + return await method(self, *args, **kwargs) - return await method(self, *_args, **_kwargs) + return _traced_async_method - return _traced_run_method + +def inject_tracing_into_actor_class(wrapped, instance, args, kwargs): + if not tracer: + return wrapped(*args, **kwargs) + + cls = wrapped(*args, **kwargs) + module_name = str(cls.__module__) + class_name = str(cls.__name__) + + # Skip tracing for certain ray modules + if module_name.startswith("ray.dag") or module_name.startswith("ray.experimental"): + return cls + + # Determine if the class is a JobSupervisor + is_job_supervisor = f"{module_name}.{class_name}" == "ray.dashboard.modules.job.job_supervisor.JobSupervisor" + methods_to_ignore = {"ping", "_polling"} if is_job_supervisor else set() methods = inspect.getmembers(cls, is_function_or_method) for name, method in methods: @@ -383,18 +353,12 @@ async def _traced_run_method(self: Any, *_args: Any, _dd_trace_ctx = None, **_kw ): continue - method.__signature__ = _add_param_to_signature( - method, - inspect.Parameter( - "_dd_trace_ctx", inspect.Parameter.KEYWORD_ONLY, default=None - ), - ) + method.__signature__ = _inject_dd_trace_ctx_kwarg(method) - # Special handling for the run method - if name == "run" and inspect.iscoroutinefunction(method): + # Special handling for the run method in JobSupervisor + if is_job_supervisor and name == "run" and inspect.iscoroutinefunction(method): wrapped_method = wraps(method)(job_supervisor_run_wrapper(method)) else: - # Regular tracing for all other methods using shared wrappers if inspect.iscoroutinefunction(method): wrapped_method = wraps(method)(_create_async_span_wrapper(method)) else: @@ -405,48 +369,30 @@ async def _traced_run_method(self: Any, *_args: Any, _dd_trace_ctx = None, **_kw return cls -def inject_tracing_into_actor_class(wrapped, instance, args, kwargs): - # Import tracer inside the function to avoid global reference issues - from ddtrace import tracer as dd_tracer - - if not dd_tracer: - return wrapped(*args, **kwargs) - - cls = wrapped(*args, **kwargs) - module_name = str(cls.__module__) - class_name = str(cls.__name__) - if module_name.startswith("ray.dag") or module_name.startswith("ray.experimental"): - return cls +async def traced_end_job(wrapped, instance, args, kwargs): + if not tracer: + return await wrapped(*args, **kwargs) - if f"{module_name}.{class_name}" == "ray.dashboard.modules.job.job_supervisor.JobSupervisor": - return _handle_job_supervisor_tracing(cls) + result = await wrapped(*args, **kwargs) - methods = inspect.getmembers(cls, is_function_or_method) - for name, method in methods: - if ( - is_static_method(cls, name) - or is_class_method(method) - or inspect.isgeneratorfunction(method) - or inspect.isasyncgenfunction(method) - or name == "__del__" - ): - continue + # At this stage, the job is finished + job_id = args[0] + job_span = _job_span_manager.get_span(job_id) + if job_span is None: + return result - method.__signature__ = _add_param_to_signature( - method, - inspect.Parameter( - "_dd_trace_ctx", inspect.Parameter.KEYWORD_ONLY, default=None - ), - ) + job_info = await instance._job_info_client.get_info(job_id) + job_span.set_tag_str("ray.job.status", job_info.status) + job_span.set_tag_str("ray.job.message", job_info.message) - if inspect.iscoroutinefunction(method): - wrapped_method = wraps(method)(_create_async_span_wrapper(method)) - else: - wrapped_method = wraps(method)(_create_span_wrapper(method)) + # Set error tags if job failed + if str(job_info.status) == "FAILED": + job_span.error = 1 + job_span.set_tag_str("error.message", job_info.message) + job_span.finish() - setattr(cls, name, wrapped_method) + return result - return cls def patch(): if getattr(ray, "_datadog_patch", False): @@ -456,12 +402,17 @@ def patch(): tracer._span_aggregator.user_processors.append(RayTraceProcessor()) + _w(ray.remote_function, "RemoteFunction.__init__", traced_remote_init) _w(ray.remote_function, "RemoteFunction._remote", traced_submit_task) - _w(ray._private.worker, "disconnect", flush_worker_spans) + _w(ray.dashboard.modules.job.job_manager.JobManager, "submit_job", traced_submit_job) + _w(ray.dashboard.modules.job.job_manager.JobManager, "_monitor_job_internal", traced_end_job) + _w(ray.actor, "_modify_class", inject_tracing_into_actor_class) _w(ray.actor.ActorHandle, "_actor_method_call", traced_actor_method_call) + _w(ray._private.worker, "disconnect", flush_worker_spans) + def unpatch(): if not getattr(ray, "_datadog_patch", False): @@ -473,8 +424,13 @@ def unpatch(): p for p in tracer._span_aggregator.user_processors if not isinstance(p, RayTraceProcessor) ] + _u(ray.remote_function, "RemoteFunction.__init__", traced_remote_init) _u(ray.remote_function, "RemoteFunction._remote", traced_submit_task) - _u(ray._private.worker, "disconnect", flush_worker_spans) + _u(ray.dashboard.modules.job.job_manager.JobManager, "submit_job", traced_submit_job) + _u(ray.dashboard.modules.job.job_manager.JobManager, "_monitor_job_internal", traced_end_job) + _u(ray.actor, "_modify_class", inject_tracing_into_actor_class) _u(ray.actor.ActorHandle, "_actor_method_call", traced_actor_method_call) + + _u(ray._private.worker, "disconnect", flush_worker_spans) diff --git a/ddtrace/contrib/internal/ray/utils.py b/ddtrace/contrib/internal/ray/utils.py new file mode 100644 index 00000000000..d74cf0dedc1 --- /dev/null +++ b/ddtrace/contrib/internal/ray/utils.py @@ -0,0 +1,44 @@ +import inspect +from inspect import Parameter +from inspect import Signature +import os +from typing import Callable + +from ddtrace.propagation.http import _TraceContext + + +def _inject_dd_trace_ctx_kwarg(method: Callable) -> Signature: + old_sig = inspect.signature(method) + if "_dd_trace_ctx" in old_sig.parameters: + return old_sig + + new_param = Parameter("_dd_trace_ctx", Parameter.KEYWORD_ONLY, default=None) + params_list = list(old_sig.parameters.values()) + [new_param] + sorted_params = sorted(params_list, key=lambda p: p.kind == Parameter.VAR_KEYWORD) + return old_sig.replace(parameters=sorted_params) + + +def _inject_context_in_kwargs(context, kwargs): + headers = {} + _TraceContext._inject(context, headers) + if "kwargs" not in kwargs or kwargs["kwargs"] is None: + kwargs["kwargs"] = {} + kwargs["kwargs"]["_dd_trace_ctx"] = headers + + +def _inject_context_in_env(context): + headers = {} + _TraceContext._inject(context, headers) + os.environ["traceparent"] = headers.get("traceparent", "") + os.environ["tracestate"] = headers.get("tracestate", "") + + +def _extract_tracing_context_from_env(): + if os.environ.get("traceparent") is not None and os.environ.get("tracestate") is not None: + return _TraceContext._extract( + { + "traceparent": os.environ.get("traceparent"), + "tracestate": os.environ.get("tracestate"), + } + ) + return None From 285a48d72f127ff248aad647b64d91e6fe1ff410 Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Thu, 28 Aug 2025 12:41:19 +0200 Subject: [PATCH 07/59] fix(ray): empty submission ID --- ddtrace/contrib/internal/ray/patch.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ddtrace/contrib/internal/ray/patch.py b/ddtrace/contrib/internal/ray/patch.py index a5d8fd270db..83a79aef5ca 100644 --- a/ddtrace/contrib/internal/ray/patch.py +++ b/ddtrace/contrib/internal/ray/patch.py @@ -178,7 +178,7 @@ def traced_submit_job(wrapped, instance, args, kwargs): if not tracer: return wrapped(*args, **kwargs) - submission_id = kwargs["submission_id"] + submission_id = kwargs.get("submission_id", "ray") job_span = tracer.start_span("ray.job", service=submission_id, span_type=SpanTypes.ML) job_span.set_tag_str("component", "ray") _job_span_manager.add_span(submission_id, job_span) @@ -193,7 +193,7 @@ def traced_submit_job(wrapped, instance, args, kwargs): # Inject the context of the job so that ray.job.run is its child env_vars = kwargs.setdefault("runtime_env", {}).setdefault("env_vars", {}) _TraceContext._inject(job_span.context, env_vars) - env_vars["_RAY_SUBMISSION_ID"] = kwargs.get("submission_id", "") + env_vars["_RAY_SUBMISSION_ID"] = submission_id try: resp = wrapped(*args, **kwargs) From 730bddb3cb995e3aea9e41f8a1aa1c2c3647f69f Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Fri, 29 Aug 2025 15:11:50 +0200 Subject: [PATCH 08/59] chore(ray): add ray tags and small refactoring --- ddtrace/contrib/internal/ray/patch.py | 118 +++++++++++++++----------- ddtrace/contrib/internal/ray/utils.py | 25 ++++++ 2 files changed, 95 insertions(+), 48 deletions(-) diff --git a/ddtrace/contrib/internal/ray/patch.py b/ddtrace/contrib/internal/ray/patch.py index 83a79aef5ca..46822eb177c 100644 --- a/ddtrace/contrib/internal/ray/patch.py +++ b/ddtrace/contrib/internal/ray/patch.py @@ -34,6 +34,7 @@ import ray._private.worker import ray.actor import ray.dashboard.modules.job.job_manager +from ray.dashboard.modules.job.job_manager import generate_job_id import ray.dashboard.modules.job.job_supervisor import ray.exceptions @@ -41,11 +42,10 @@ from .utils import _inject_context_in_env from .utils import _inject_context_in_kwargs from .utils import _inject_dd_trace_ctx_kwarg +from .utils import _inject_ray_span_tags class _JobSpanManager: - """Thread-safe manager for job spans that avoids closure serialization issues.""" - def __init__(self): self._spans = {} self._lock = threading.Lock() @@ -81,8 +81,6 @@ def process_trace(self, trace: List[Span]) -> Optional[List[Span]]: span.set_metric(_SAMPLING_PRIORITY_KEY, 2) processed_trace.append(span) elif not ray_spans_only: - with open("span_log.txt", "a") as log_file: - log_file.write(f"Span: {span}\n") processed_trace.append(span) return processed_trace @@ -120,15 +118,17 @@ def _wrap_task_execution(wrapped, *args, **kwargs): # Extract context from parent span extracted_context = _TraceContext._extract(kwargs["_dd_trace_ctx"]) kwargs.pop("_dd_trace_ctx") + tracer.context_provider.activate(extracted_context) function_name = getattr(wrapped, "__name__", "unknown_function") function_module = getattr(wrapped, "__module__", "unknown_module") - tracer.context_provider.activate(extracted_context) - with tracer.trace("ray.task.execute", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.ML) as span: - span.set_tag_str("component", "ray") + with tracer.trace( + f"{function_module}.{function_name}", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.ML + ) as span: span.set_tag_str(SPAN_KIND, SpanKind.CONSUMER) - span.resource = f"{function_module}.{function_name}" + _inject_ray_span_tags(span) + try: result = wrapped(*args, **kwargs) span.set_tag_str("ray.task.status", "success") @@ -139,29 +139,36 @@ def _wrap_task_execution(wrapped, *args, **kwargs): def traced_remote_init(wrapped, instance, args, kwargs): + """Inject Tracing/Wrapped the function that will be executed + when calling func.remote() + """ if not tracer: return wrapped(*args, **kwargs) result = wrapped(*args, **kwargs) with instance._inject_lock: - if not hasattr(instance, "_tracing_injected"): + if instance._function_signature is None: instance._function = _inject_tracing_into_function(instance._function) instance._function.__signature__ = _inject_dd_trace_ctx_kwarg(instance._function) - instance._tracing_injected = True + instance._function_signature = ray._common.signature.extract_signature(instance._function) return result def traced_submit_task(wrapped, instance, args, kwargs): + """Trace task submission, i.e the func.remote() call""" if not tracer: return wrapped(*args, **kwargs) if tracer.current_span() is None: tracer.context_provider.activate(_extract_tracing_context_from_env()) - with tracer.trace("ray.task.submit", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.ML) as span: - span.set_tag_str("component", "ray") + with tracer.trace( + f"{instance._function_name}.remote()", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.ML + ) as span: span.set_tag_str(SPAN_KIND, SpanKind.PRODUCER) + _inject_ray_span_tags(span) + try: _inject_context_in_kwargs(span.context, kwargs) @@ -175,15 +182,26 @@ def traced_submit_task(wrapped, instance, args, kwargs): def traced_submit_job(wrapped, instance, args, kwargs): + """Trace job submission. This function is also responsible + of creating the root span. + It will also inject _RAY_SUBMISSION_ID + in the env variable as some spans will not have access to it + trough ray_ctx + """ + if not tracer: return wrapped(*args, **kwargs) - submission_id = kwargs.get("submission_id", "ray") + submission_id = kwargs.get("submission_id") or generate_job_id() + kwargs["submission_id"] = submission_id + + # Root span creation job_span = tracer.start_span("ray.job", service=submission_id, span_type=SpanTypes.ML) job_span.set_tag_str("component", "ray") + # This will allow to finish the span at the end of the job _job_span_manager.add_span(submission_id, job_span) - # Set global span + # Set global span as the root span tracer.context_provider.activate(job_span) try: with tracer.trace("ray.job.submit", service=submission_id, span_type=SpanTypes.ML) as submit_span: @@ -206,18 +224,22 @@ def traced_submit_job(wrapped, instance, args, kwargs): job_span.set_tag_str("ray.job.status", "error") job_span.error = 1 job_span.set_exc_info(type(e), e, e.__traceback__) - _job_span_manager.remove_span(job_span) + _job_span_manager.remove_span(submission_id) job_span.finish() raise e def traced_actor_method_call(wrapped, instance, args, kwargs): + """Trace actor method submission, i.e the Actor.func.remote() + call + """ if not tracer: return wrapped(*args, **kwargs) actor_name = instance._ray_actor_creation_function_descriptor.class_name method_name = args[0] - # if _dd_trace_ctx was not injected, we do not want to trace this function + # if _dd_trace_ctx was not injected in the param of the function, it means + # we do not want to trace this function, for example: JobSupervisor.ping if not any(p.name == "_dd_trace_ctx" for p in instance._ray_method_signatures[method_name]): return wrapped(*args, **kwargs) @@ -225,11 +247,10 @@ def traced_actor_method_call(wrapped, instance, args, kwargs): tracer.context_provider.activate(_extract_tracing_context_from_env()) with tracer.trace( - "ray.actor.method.call", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.ML + f"{actor_name}.{method_name}.remote()", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.ML ) as span: - span.set_tag_str("component", "ray") span.set_tag_str(SPAN_KIND, SpanKind.PRODUCER) - span.resource = f"{actor_name}.{method_name}.remote()" + _inject_ray_span_tags(span) try: _inject_context_in_kwargs(span.context, kwargs) @@ -249,29 +270,34 @@ def flush_worker_spans(wrapped, instance, args, kwargs): def job_supervisor_run_wrapper(method: Callable[..., Any]) -> Any: - async def _traced_run_method(self: Any, *_args: Any, _dd_trace_ctx=None, **_kwargs: Any) -> Any: + async def _traced_run_method(self: Any, *args: Any, _dd_trace_ctx=None, **kwargs: Any) -> Any: from ddtrace import tracer as dd_tracer from ddtrace.ext import SpanTypes - if not dd_tracer: - return await method(self, *_args, **_kwargs) + if not dd_tracer or _dd_trace_ctx is None: + return await method(self, *args, **kwargs) - dd_tracer.context_provider.activate(_extract_tracing_context_from_env()) + context = _TraceContext._extract(_dd_trace_ctx) + dd_tracer.context_provider.activate(context) + + job_submission_id = os.environ.get("_RAY_SUBMISSION_ID") - method_name = f"{self.__class__.__name__}.{method.__name__}" with dd_tracer.trace( - "ray.job.run", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.ML + f"{self.__class__.__name__}.{method.__name__}", service=job_submission_id, span_type=SpanTypes.ML ) as span: - span.set_tag_str("component", "ray") span.set_tag_str(SPAN_KIND, SpanKind.CONSUMER) - span.resource = method_name - - _inject_context_in_env(span.context) + _inject_ray_span_tags(span) try: - await method(self, *_args, **_kwargs) - except ray.exceptions.AsyncioActorExit: - pass # only if job failed ? + _inject_context_in_env(span.context) + + await method(self, *args, **kwargs) + except ray.exceptions.AsyncioActorExit as e: + # if the job succedded we removed from the span + # the error used to exit the actor + job_info = await self._job_info_client.get_info(job_submission_id) + if str(job_info.status) == "FAILED": + raise e except Exception as e: raise e @@ -281,18 +307,16 @@ async def _traced_run_method(self: Any, *_args: Any, _dd_trace_ctx=None, **_kwar @contextmanager def _trace_scope(self: Any, method: Callable[..., Any], dd_trace_ctx): if tracer.current_span() is None: - context = _TraceContext._extract(dd_trace_ctx) if dd_trace_ctx else _extract_tracing_context_from_env() + context = _TraceContext._extract(dd_trace_ctx) tracer.context_provider.activate(context) - method_name = f"{self.__class__.__name__}.{method.__name__}" with tracer.trace( - "ray.actor.method", + f"{self.__class__.__name__}.{method.__name__}", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.ML, ) as span: - span.set_tag_str("component", "ray") span.set_tag_str(SPAN_KIND, SpanKind.CONSUMER) - span.resource = method_name + _inject_ray_span_tags(span) yield span @@ -301,7 +325,7 @@ def _create_span_wrapper(method: Callable[..., Any]) -> Any: def _traced_method(self: Any, *args: Any, _dd_trace_ctx=None, **kwargs: Any) -> Any: from ddtrace import tracer - if not tracer: + if not tracer or (_dd_trace_ctx is None and tracer.current_span() is None): return method(self, *args, **kwargs) with _trace_scope(self, method, _dd_trace_ctx, **kwargs): @@ -314,7 +338,7 @@ def _create_async_span_wrapper(method: Callable[..., Any]) -> Any: async def _traced_async_method(self: Any, *args: Any, _dd_trace_ctx=None, **kwargs: Any) -> Any: from ddtrace import tracer - if not tracer: + if not tracer or (_dd_trace_ctx is None and tracer.current_span() is None): return await method(self, *args, **kwargs) with _trace_scope(self, method, _dd_trace_ctx, **kwargs): @@ -337,6 +361,7 @@ def inject_tracing_into_actor_class(wrapped, instance, args, kwargs): # Determine if the class is a JobSupervisor is_job_supervisor = f"{module_name}.{class_name}" == "ray.dashboard.modules.job.job_supervisor.JobSupervisor" + # We do not want to instrument ping and polling to remove noise methods_to_ignore = {"ping", "_polling"} if is_job_supervisor else set() methods = inspect.getmembers(cls, is_function_or_method) @@ -365,7 +390,6 @@ def inject_tracing_into_actor_class(wrapped, instance, args, kwargs): wrapped_method = wraps(method)(_create_span_wrapper(method)) setattr(cls, name, wrapped_method) - return cls @@ -424,13 +448,11 @@ def unpatch(): p for p in tracer._span_aggregator.user_processors if not isinstance(p, RayTraceProcessor) ] - _u(ray.remote_function, "RemoteFunction.__init__", traced_remote_init) - _u(ray.remote_function, "RemoteFunction._remote", traced_submit_task) - - _u(ray.dashboard.modules.job.job_manager.JobManager, "submit_job", traced_submit_job) - _u(ray.dashboard.modules.job.job_manager.JobManager, "_monitor_job_internal", traced_end_job) + _u(ray.remote_function, "RemoteFunction.__init__") + _u(ray.remote_function, "RemoteFunction._remote") - _u(ray.actor, "_modify_class", inject_tracing_into_actor_class) - _u(ray.actor.ActorHandle, "_actor_method_call", traced_actor_method_call) + _u(ray.dashboard.modules.job.job_manager.JobManager, "submit_job") + _u(ray.dashboard.modules.job.job_manager.JobManager, "_monitor_job_internal") - _u(ray._private.worker, "disconnect", flush_worker_spans) + _u(ray.actor, "_modify_class") + _u(ray.actor.ActorHandle, "_actor_method_call") diff --git a/ddtrace/contrib/internal/ray/utils.py b/ddtrace/contrib/internal/ray/utils.py index d74cf0dedc1..4e86be2abb4 100644 --- a/ddtrace/contrib/internal/ray/utils.py +++ b/ddtrace/contrib/internal/ray/utils.py @@ -5,6 +5,7 @@ from typing import Callable from ddtrace.propagation.http import _TraceContext +from ray.runtime_context import get_runtime_context def _inject_dd_trace_ctx_kwarg(method: Callable) -> Signature: @@ -42,3 +43,27 @@ def _extract_tracing_context_from_env(): } ) return None + + +def _inject_ray_span_tags(span): + runtime_context = get_runtime_context() + + span.set_tag_str("component", "ray") + span.set_tag_str("ray.job_id", runtime_context.get_job_id()) + span.set_tag_str("ray.node_id", runtime_context.get_node_id()) + + worker_id = runtime_context.get_worker_id() + if worker_id is not None: + span.set_tag_str("ray.worker_id", worker_id) + + task_id = runtime_context.get_task_id() + if task_id is not None: + span.set_tag_str("ray.task_id", task_id) + + actor_id = runtime_context.get_actor_id() + if actor_id is not None: + span.set_tag_str("ray.actor_id", actor_id) + + submission_id = os.environ.get("_RAY_SUBMISSION_ID") + if submission_id is not None: + span.set_tag_str("ray.submission_id", submission_id) From faa18d45c0cd3fd4b4b87672079053956dd9cea7 Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Mon, 1 Sep 2025 14:40:12 +0200 Subject: [PATCH 09/59] tests(ray): add tests --- .riot/requirements/11c76b3.txt | 68 ++ .riot/requirements/1cc492b.txt | 75 ++ .riot/requirements/4598a9a.txt | 75 ++ ddtrace/contrib/internal/ray/patch.py | 65 +- ddtrace/contrib/internal/ray/utils.py | 95 ++- ddtrace/internal/writer/writer.py | 1 + riotfile.py | 5 +- tests/contrib/ray/jobs/actor_and_task.py | 62 ++ tests/contrib/ray/jobs/actor_interactions.py | 49 ++ tests/contrib/ray/jobs/error_in_task.py | 19 + tests/contrib/ray/jobs/nested_tasks.py | 27 + tests/contrib/ray/jobs/simple_actor.py | 37 + tests/contrib/ray/jobs/simple_task.py | 20 + tests/contrib/ray/test_ray.py | 149 +++- tests/contrib/ray/test_ray_patch.py | 39 + tests/contrib/ray/test_ray_trace_filter.py | 39 + tests/contrib/suitespec.yml | 3 +- ...ts.contrib.ray.test_ray.error_in_task.json | 523 +++++++++++++ ...trib.ray.test_ray.test_actor_and_task.json | 724 ++++++++++++++++++ ....ray.test_ray.test_actor_interactions.json | 496 ++++++++++++ ...ontrib.ray.test_ray.test_nested_tasks.json | 483 ++++++++++++ ...ontrib.ray.test_ray.test_simple_actor.json | 368 +++++++++ ...contrib.ray.test_ray.test_simple_task.json | 507 ++++++++++++ 23 files changed, 3849 insertions(+), 80 deletions(-) create mode 100644 .riot/requirements/11c76b3.txt create mode 100644 .riot/requirements/1cc492b.txt create mode 100644 .riot/requirements/4598a9a.txt create mode 100644 tests/contrib/ray/jobs/actor_and_task.py create mode 100644 tests/contrib/ray/jobs/actor_interactions.py create mode 100644 tests/contrib/ray/jobs/error_in_task.py create mode 100644 tests/contrib/ray/jobs/nested_tasks.py create mode 100644 tests/contrib/ray/jobs/simple_actor.py create mode 100644 tests/contrib/ray/jobs/simple_task.py create mode 100644 tests/contrib/ray/test_ray_patch.py create mode 100644 tests/contrib/ray/test_ray_trace_filter.py create mode 100644 tests/snapshots/tests.contrib.ray.test_ray.error_in_task.json create mode 100644 tests/snapshots/tests.contrib.ray.test_ray.test_actor_and_task.json create mode 100644 tests/snapshots/tests.contrib.ray.test_ray.test_actor_interactions.json create mode 100644 tests/snapshots/tests.contrib.ray.test_ray.test_nested_tasks.json create mode 100644 tests/snapshots/tests.contrib.ray.test_ray.test_simple_actor.json create mode 100644 tests/snapshots/tests.contrib.ray.test_ray.test_simple_task.json diff --git a/.riot/requirements/11c76b3.txt b/.riot/requirements/11c76b3.txt new file mode 100644 index 00000000000..c3d8710c653 --- /dev/null +++ b/.riot/requirements/11c76b3.txt @@ -0,0 +1,68 @@ +# +# This file is autogenerated by pip-compile with Python 3.13 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/11c76b3.in +# +aiohappyeyeballs==2.6.1 +aiohttp==3.12.15 +aiohttp-cors==0.8.1 +aiosignal==1.4.0 +annotated-types==0.7.0 +attrs==25.3.0 +cachetools==5.5.2 +certifi==2025.8.3 +charset-normalizer==3.4.3 +click==8.2.1 +colorful==0.5.7 +coverage[toml]==7.10.6 +distlib==0.4.0 +filelock==3.19.1 +frozenlist==1.7.0 +google-api-core==2.25.1 +google-auth==2.40.3 +googleapis-common-protos==1.70.0 +grpcio==1.74.0 +hypothesis==6.45.0 +idna==3.10 +iniconfig==2.1.0 +jsonschema==4.25.1 +jsonschema-specifications==2025.4.1 +mock==5.2.0 +msgpack==1.1.1 +multidict==6.6.4 +opencensus==0.11.4 +opencensus-context==0.1.3 +opentracing==2.4.0 +packaging==25.0 +platformdirs==4.4.0 +pluggy==1.6.0 +prometheus-client==0.22.1 +propcache==0.3.2 +proto-plus==1.26.1 +protobuf==6.32.0 +py-spy==0.4.1 +pyasn1==0.6.1 +pyasn1-modules==0.4.2 +pydantic==2.11.7 +pydantic-core==2.33.2 +pygments==2.19.2 +pytest==8.4.1 +pytest-asyncio==1.1.0 +pytest-cov==6.2.1 +pytest-mock==3.14.1 +pyyaml==6.0.2 +ray[default]==2.46.0 +referencing==0.36.2 +requests==2.32.5 +rpds-py==0.27.1 +rsa==4.9.1 +six==1.17.0 +smart-open==7.3.0.post1 +sortedcontainers==2.4.0 +typing-extensions==4.15.0 +typing-inspection==0.4.1 +urllib3==2.5.0 +virtualenv==20.34.0 +wrapt==1.17.3 +yarl==1.20.1 diff --git a/.riot/requirements/1cc492b.txt b/.riot/requirements/1cc492b.txt new file mode 100644 index 00000000000..33b4bf91638 --- /dev/null +++ b/.riot/requirements/1cc492b.txt @@ -0,0 +1,75 @@ +# +# This file is autogenerated by pip-compile with Python 3.13 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1cc492b.in +# +aiohappyeyeballs==2.6.1 +aiohttp==3.12.15 +aiohttp-cors==0.8.1 +aiosignal==1.4.0 +annotated-types==0.7.0 +attrs==25.3.0 +cachetools==5.5.2 +certifi==2025.8.3 +charset-normalizer==3.4.3 +click==8.2.1 +colorful==0.5.7 +coverage[toml]==7.10.6 +distlib==0.4.0 +filelock==3.19.1 +frozenlist==1.7.0 +google-api-core==2.25.1 +google-auth==2.40.3 +googleapis-common-protos==1.70.0 +grpcio==1.74.0 +hypothesis==6.45.0 +idna==3.10 +importlib-metadata==8.7.0 +iniconfig==2.1.0 +jsonschema==4.25.1 +jsonschema-specifications==2025.4.1 +mock==5.2.0 +msgpack==1.1.1 +multidict==6.6.4 +opencensus==0.11.4 +opencensus-context==0.1.3 +opentelemetry-api==1.36.0 +opentelemetry-exporter-prometheus==0.57b0 +opentelemetry-proto==1.36.0 +opentelemetry-sdk==1.36.0 +opentelemetry-semantic-conventions==0.57b0 +opentracing==2.4.0 +packaging==25.0 +platformdirs==4.4.0 +pluggy==1.6.0 +prometheus-client==0.22.1 +propcache==0.3.2 +proto-plus==1.26.1 +protobuf==6.32.0 +py-spy==0.4.1 +pyasn1==0.6.1 +pyasn1-modules==0.4.2 +pydantic==2.11.7 +pydantic-core==2.33.2 +pygments==2.19.2 +pytest==8.4.1 +pytest-asyncio==1.1.0 +pytest-cov==6.2.1 +pytest-mock==3.14.1 +pyyaml==6.0.2 +ray[default]==2.49.0 +referencing==0.36.2 +requests==2.32.5 +rpds-py==0.27.1 +rsa==4.9.1 +six==1.17.0 +smart-open==7.3.0.post1 +sortedcontainers==2.4.0 +typing-extensions==4.15.0 +typing-inspection==0.4.1 +urllib3==2.5.0 +virtualenv==20.34.0 +wrapt==1.17.3 +yarl==1.20.1 +zipp==3.23.0 diff --git a/.riot/requirements/4598a9a.txt b/.riot/requirements/4598a9a.txt new file mode 100644 index 00000000000..2b56d2d78d9 --- /dev/null +++ b/.riot/requirements/4598a9a.txt @@ -0,0 +1,75 @@ +# +# This file is autogenerated by pip-compile with Python 3.13 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/4598a9a.in +# +aiohappyeyeballs==2.6.1 +aiohttp==3.12.15 +aiohttp-cors==0.8.1 +aiosignal==1.4.0 +annotated-types==0.7.0 +attrs==25.3.0 +cachetools==5.5.2 +certifi==2025.8.3 +charset-normalizer==3.4.3 +click==8.2.1 +colorful==0.5.7 +coverage[toml]==7.10.6 +distlib==0.4.0 +filelock==3.19.1 +frozenlist==1.7.0 +google-api-core==2.25.1 +google-auth==2.40.3 +googleapis-common-protos==1.70.0 +grpcio==1.74.0 +hypothesis==6.45.0 +idna==3.10 +importlib-metadata==8.7.0 +iniconfig==2.1.0 +jsonschema==4.25.1 +jsonschema-specifications==2025.4.1 +mock==5.2.0 +msgpack==1.1.1 +multidict==6.6.4 +opencensus==0.11.4 +opencensus-context==0.1.3 +opentelemetry-api==1.36.0 +opentelemetry-exporter-prometheus==0.57b0 +opentelemetry-proto==1.36.0 +opentelemetry-sdk==1.36.0 +opentelemetry-semantic-conventions==0.57b0 +opentracing==2.4.0 +packaging==25.0 +platformdirs==4.4.0 +pluggy==1.6.0 +prometheus-client==0.22.1 +propcache==0.3.2 +proto-plus==1.26.1 +protobuf==6.32.0 +py-spy==0.4.1 +pyasn1==0.6.1 +pyasn1-modules==0.4.2 +pydantic==2.11.7 +pydantic-core==2.33.2 +pygments==2.19.2 +pytest==8.4.1 +pytest-asyncio==1.1.0 +pytest-cov==6.2.1 +pytest-mock==3.14.1 +pyyaml==6.0.2 +ray[default]==2.48.0 +referencing==0.36.2 +requests==2.32.5 +rpds-py==0.27.1 +rsa==4.9.1 +six==1.17.0 +smart-open==7.3.0.post1 +sortedcontainers==2.4.0 +typing-extensions==4.15.0 +typing-inspection==0.4.1 +urllib3==2.5.0 +virtualenv==20.34.0 +wrapt==1.17.3 +yarl==1.20.1 +zipp==3.23.0 diff --git a/ddtrace/contrib/internal/ray/patch.py b/ddtrace/contrib/internal/ray/patch.py index 46822eb177c..20217dc5bca 100644 --- a/ddtrace/contrib/internal/ray/patch.py +++ b/ddtrace/contrib/internal/ray/patch.py @@ -8,6 +8,7 @@ from typing import Callable from typing import List from typing import Optional +from typing import Dict from wrapt import wrap_function_wrapper as _w @@ -26,7 +27,6 @@ from ddtrace.internal.utils.wrappers import unwrap as _u from ddtrace.propagation.http import _TraceContext from ddtrace.settings._config import _get_config -from ddtrace.vendor.packaging.version import parse as parse_version import ray from ray._private.inspect_util import is_class_method from ray._private.inspect_util import is_function_or_method @@ -43,8 +43,24 @@ from .utils import _inject_context_in_kwargs from .utils import _inject_dd_trace_ctx_kwarg from .utils import _inject_ray_span_tags +from .utils import extract_signature +config._add( + "ray", + dict( + _default_service=schematize_service_name("ray"), + ray_spans_only=asbool(_get_config("DD_TRACE_RAY_SPANS_ONLY", default=True)), + ), +) + +def _supported_versions() -> Dict[str, str]: + return {"ray": ">=2.46.0"} + + +def get_version() -> str: + return str(getattr(ray, "__version__", "")) + class _JobSpanManager: def __init__(self): self._spans = {} @@ -85,23 +101,10 @@ def process_trace(self, trace: List[Span]) -> Optional[List[Span]]: return processed_trace - -config._add( - "ray", - dict( - _default_service=schematize_service_name("ray"), - ray_spans_only=asbool(_get_config("DD_TRACE_RAY_SPANS_ONLY", default=True)), - ), -) - - -def get_version() -> str: - return parse_version(getattr(ray, "__version__", "")) - - -def _inject_tracing_into_function(function): +def _inject_tracing_into_remote_function(function): """Inject trace context parameter into function signature""" + @wraps(function) def wrapped_function(*args, **kwargs): return _wrap_task_execution(function, *args, **kwargs) @@ -138,7 +141,7 @@ def _wrap_task_execution(wrapped, *args, **kwargs): raise e -def traced_remote_init(wrapped, instance, args, kwargs): +def traced_remote_function_init(wrapped, instance, args, kwargs): """Inject Tracing/Wrapped the function that will be executed when calling func.remote() """ @@ -148,9 +151,9 @@ def traced_remote_init(wrapped, instance, args, kwargs): result = wrapped(*args, **kwargs) with instance._inject_lock: if instance._function_signature is None: - instance._function = _inject_tracing_into_function(instance._function) + instance._function = _inject_tracing_into_remote_function(instance._function) instance._function.__signature__ = _inject_dd_trace_ctx_kwarg(instance._function) - instance._function_signature = ray._common.signature.extract_signature(instance._function) + instance._function_signature = extract_signature(instance._function) return result @@ -305,7 +308,7 @@ async def _traced_run_method(self: Any, *args: Any, _dd_trace_ctx=None, **kwargs @contextmanager -def _trace_scope(self: Any, method: Callable[..., Any], dd_trace_ctx): +def _trace_actor_method(self: Any, method: Callable[..., Any], dd_trace_ctx): if tracer.current_span() is None: context = _TraceContext._extract(dd_trace_ctx) tracer.context_provider.activate(context) @@ -321,27 +324,27 @@ def _trace_scope(self: Any, method: Callable[..., Any], dd_trace_ctx): yield span -def _create_span_wrapper(method: Callable[..., Any]) -> Any: +def _inject_tracing_actor_method(method: Callable[..., Any]) -> Any: def _traced_method(self: Any, *args: Any, _dd_trace_ctx=None, **kwargs: Any) -> Any: from ddtrace import tracer if not tracer or (_dd_trace_ctx is None and tracer.current_span() is None): return method(self, *args, **kwargs) - with _trace_scope(self, method, _dd_trace_ctx, **kwargs): + with _trace_actor_method(self, method, _dd_trace_ctx, **kwargs): return method(self, *args, **kwargs) return _traced_method -def _create_async_span_wrapper(method: Callable[..., Any]) -> Any: +def _inject_tracing_async_actor_method(method: Callable[..., Any]) -> Any: async def _traced_async_method(self: Any, *args: Any, _dd_trace_ctx=None, **kwargs: Any) -> Any: from ddtrace import tracer if not tracer or (_dd_trace_ctx is None and tracer.current_span() is None): return await method(self, *args, **kwargs) - with _trace_scope(self, method, _dd_trace_ctx, **kwargs): + with _trace_actor_method(self, method, _dd_trace_ctx, **kwargs): return await method(self, *args, **kwargs) return _traced_async_method @@ -385,9 +388,9 @@ def inject_tracing_into_actor_class(wrapped, instance, args, kwargs): wrapped_method = wraps(method)(job_supervisor_run_wrapper(method)) else: if inspect.iscoroutinefunction(method): - wrapped_method = wraps(method)(_create_async_span_wrapper(method)) + wrapped_method = wraps(method)(_inject_tracing_async_actor_method(method)) else: - wrapped_method = wraps(method)(_create_span_wrapper(method)) + wrapped_method = wraps(method)(_inject_tracing_actor_method(method)) setattr(cls, name, wrapped_method) return cls @@ -426,8 +429,8 @@ def patch(): tracer._span_aggregator.user_processors.append(RayTraceProcessor()) - _w(ray.remote_function, "RemoteFunction.__init__", traced_remote_init) - _w(ray.remote_function, "RemoteFunction._remote", traced_submit_task) + _w(ray.remote_function.RemoteFunction, "__init__", traced_remote_function_init) + _w(ray.remote_function.RemoteFunction, "_remote", traced_submit_task) _w(ray.dashboard.modules.job.job_manager.JobManager, "submit_job", traced_submit_job) _w(ray.dashboard.modules.job.job_manager.JobManager, "_monitor_job_internal", traced_end_job) @@ -448,11 +451,13 @@ def unpatch(): p for p in tracer._span_aggregator.user_processors if not isinstance(p, RayTraceProcessor) ] - _u(ray.remote_function, "RemoteFunction.__init__") - _u(ray.remote_function, "RemoteFunction._remote") + _u(ray.remote_function.RemoteFunction, "__init__") + _u(ray.remote_function.RemoteFunction, "_remote") _u(ray.dashboard.modules.job.job_manager.JobManager, "submit_job") _u(ray.dashboard.modules.job.job_manager.JobManager, "_monitor_job_internal") _u(ray.actor, "_modify_class") _u(ray.actor.ActorHandle, "_actor_method_call") + + _u(ray._private.worker, "disconnect") diff --git a/ddtrace/contrib/internal/ray/utils.py b/ddtrace/contrib/internal/ray/utils.py index 4e86be2abb4..f03ce59011f 100644 --- a/ddtrace/contrib/internal/ray/utils.py +++ b/ddtrace/contrib/internal/ray/utils.py @@ -1,10 +1,10 @@ import inspect -from inspect import Parameter -from inspect import Signature import os -from typing import Callable +from typing import Callable, Any, List +from inspect import Parameter, Signature from ddtrace.propagation.http import _TraceContext +import ray from ray.runtime_context import get_runtime_context @@ -56,9 +56,10 @@ def _inject_ray_span_tags(span): if worker_id is not None: span.set_tag_str("ray.worker_id", worker_id) - task_id = runtime_context.get_task_id() - if task_id is not None: - span.set_tag_str("ray.task_id", task_id) + if runtime_context.worker.mode == ray._private.worker.WORKER_MODE: + task_id = runtime_context.get_task_id() + if task_id is not None: + span.set_tag_str("ray.task_id", task_id) actor_id = runtime_context.get_actor_id() if actor_id is not None: @@ -67,3 +68,85 @@ def _inject_ray_span_tags(span): submission_id = os.environ.get("_RAY_SUBMISSION_ID") if submission_id is not None: span.set_tag_str("ray.submission_id", submission_id) + +# ------------------------------------------------------------------------------------------- +# This is extracted from ray code +# it allows to ensure compatibility with older versions of ray still maintained (2.46.0) +# ------------------------------------------------------------------------------------------- +def get_signature(func: Any) -> inspect.Signature: + """Get signature parameters. + + Support Cython functions by grabbing relevant attributes from the Cython + function and attaching to a no-op function. This is somewhat brittle, since + inspect may change, but given that inspect is written to a PEP, we hope + it is relatively stable. Future versions of Python may allow overloading + the inspect 'isfunction' and 'ismethod' functions / create ABC for Python + functions. Until then, it appears that Cython won't do anything about + compatability with the inspect module. + + Args: + func: The function whose signature should be checked. + + Returns: + A function signature object, which includes the names of the keyword + arguments as well as their default values. + + Raises: + TypeError: A type error if the signature is not supported + """ + # The first condition for Cython functions, the latter for Cython instance + # methods + if is_cython(func): + attrs = ["__code__", "__annotations__", "__defaults__", "__kwdefaults__"] + + if all(hasattr(func, attr) for attr in attrs): + original_func = func + + def func(): + return + + for attr in attrs: + setattr(func, attr, getattr(original_func, attr)) + else: + raise TypeError(f"{func!r} is not a Python function we can process") + + return inspect.signature(func) + + +def extract_signature(func: Any, ignore_first: bool = False) -> List[Parameter]: + """Extract the function signature from the function. + + Args: + func: The function whose signature should be extracted. + ignore_first: True if the first argument should be ignored. This should + be used when func is a method of a class. + + Returns: + List of Parameter objects representing the function signature. + """ + signature_parameters = list(get_signature(func).parameters.values()) + + if ignore_first: + if len(signature_parameters) == 0: + raise ValueError( + "Methods must take a 'self' argument, but the " + f"method '{func.__name__}' does not have one." + ) + signature_parameters = signature_parameters[1:] + + return signature_parameters + +def is_cython(obj): + """Check if an object is a Cython function or method""" + + # TODO(suo): We could split these into two functions, one for Cython + # functions and another for Cython methods. + # TODO(suo): There doesn't appear to be a Cython function 'type' we can + # check against via isinstance. Please correct me if I'm wrong. + def check_cython(x): + return type(x).__name__ == "cython_function_or_method" + + # Check if function or method, respectively + return check_cython(obj) or ( + hasattr(obj, "__func__") and check_cython(obj.__func__) + ) \ No newline at end of file diff --git a/ddtrace/internal/writer/writer.py b/ddtrace/internal/writer/writer.py index 31691cb3683..09d888b1d66 100644 --- a/ddtrace/internal/writer/writer.py +++ b/ddtrace/internal/writer/writer.py @@ -1097,6 +1097,7 @@ def _use_sync_mode() -> bool: - Google Cloud Functions and Azure Functions have a mini-agent spun up by the tracer. Similarly to AWS Lambdas, sync mode should be used to avoid data loss. """ + return True return (in_aws_lambda() and has_aws_lambda_agent_extension()) or in_gcp_function() or in_azure_function() diff --git a/riotfile.py b/riotfile.py index 5a4e5a4fde2..f6960912363 100644 --- a/riotfile.py +++ b/riotfile.py @@ -3000,13 +3000,10 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT Venv( name="ray", command="pytest {cmdargs} tests/contrib/ray", - env={ - "DD_TRACE_OTEL_ENABLED": "true", - }, pys=select_pys(min_version="3.9"), pkgs={ "pytest-asyncio": latest, - "ray": ["~=2.48.0", latest], + "ray[default]": ["~=2.46.0", latest], }, ), Venv( diff --git a/tests/contrib/ray/jobs/actor_and_task.py b/tests/contrib/ray/jobs/actor_and_task.py new file mode 100644 index 00000000000..00758bbbfc7 --- /dev/null +++ b/tests/contrib/ray/jobs/actor_and_task.py @@ -0,0 +1,62 @@ +import ray + + +ray.init(logging_level=0) + + +@ray.remote +def compute_value(x): + return x + 1 + + +@ray.remote +def batch_compute(values): + futures = [compute_value.remote(val) for val in values] + return ray.get(futures) + + +@ray.remote +class ComputationManager: + def __init__(self): + self.computation_count = 0 + self.results = [] + + def increment_count(self): + self.computation_count += 1 + return self.computation_count + + def get_count(self): + return self.computation_count + + def add_result(self, result): + self.results.append(result) + return len(self.results) + + def get_results(self): + return self.results + + def compute_and_store(self, values): + self.increment_count() + + future = batch_compute.remote(values) + results = ray.get(future) + + for result in results: + self.add_result(result) + + return {"computation_count": self.get_count(), "results": set(results), "total_stored": len(self.get_results())} + + +def main(): + manager = ComputationManager.remote() + result = ray.get(manager.compute_and_store.remote([2, 3, 4])) + assert result == { + "computation_count": 1, + "results": {3, 4, 5}, + "total_stored": 3, + }, f"Unexpected results: {result['results']}" + + +if __name__ == "__main__": + main() + ray.shutdown() diff --git a/tests/contrib/ray/jobs/actor_interactions.py b/tests/contrib/ray/jobs/actor_interactions.py new file mode 100644 index 00000000000..ed40e8bfb1f --- /dev/null +++ b/tests/contrib/ray/jobs/actor_interactions.py @@ -0,0 +1,49 @@ +import ray + + +ray.init() + + +@ray.remote +class Sender: + def __init__(self): + self.sent_count = 0 + + def send_message(self, receiver, message): + self.sent_count += 1 + future = receiver.receive_message.remote(message) + return ray.get(future) + + def get_sent_count(self): + return self.sent_count + + +@ray.remote +class Receiver: + def __init__(self): + self.received_messages = [] + + def receive_message(self, message): + self.received_messages.append(message) + return f"received: {message}" + + def get_messages(self): + return self.received_messages + + +def main(): + sender = Sender.remote() + receiver = Receiver.remote() + + result = ray.get(sender.send_message.remote(receiver, "hello")) + sent_count = ray.get(sender.get_sent_count.remote()) + messages = ray.get(receiver.get_messages.remote()) + + assert result == "received: hello" + assert sent_count == 1 + assert messages == ["hello"] + + +if __name__ == "__main__": + main() + ray.shutdown() diff --git a/tests/contrib/ray/jobs/error_in_task.py b/tests/contrib/ray/jobs/error_in_task.py new file mode 100644 index 00000000000..37ec24303ee --- /dev/null +++ b/tests/contrib/ray/jobs/error_in_task.py @@ -0,0 +1,19 @@ +import ray + +ray.init() + +@ray.remote +def add_one(x): + raise ValueError("foo") + return x + 1 + + +def main(): + futures = [add_one.remote(i) for i in range(4)] + results = ray.get(futures) + assert results == [1, 2, 3, 4], f"Unexpected results: {results}" + + +if __name__ == "__main__": + main() + ray.shutdown() diff --git a/tests/contrib/ray/jobs/nested_tasks.py b/tests/contrib/ray/jobs/nested_tasks.py new file mode 100644 index 00000000000..df0fe7e2a30 --- /dev/null +++ b/tests/contrib/ray/jobs/nested_tasks.py @@ -0,0 +1,27 @@ +import ray + + +ray.init() + + +@ray.remote +def add_one(x): + return x + 1 + + +@ray.remote +def submit_addition_task(x): + futures = [add_one.remote(x + i) for i in range(3)] + return ray.get(futures) + + +def main(): + future = submit_addition_task.remote(2) + + results = ray.get(future) + assert results == [3, 4, 5], f"Unexpected results: {results}" + + +if __name__ == "__main__": + main() + ray.shutdown() diff --git a/tests/contrib/ray/jobs/simple_actor.py b/tests/contrib/ray/jobs/simple_actor.py new file mode 100644 index 00000000000..ce2491cc3eb --- /dev/null +++ b/tests/contrib/ray/jobs/simple_actor.py @@ -0,0 +1,37 @@ +import ray + + +ray.init() + + +@ray.remote +class Counter: + def __init__(self): + self.value = 0 + + def increment(self): + self.value += 1 + return self.value + + def get_value(self): + return self.value + + def increment_and_get(self): + self.increment() + return self.get_value() + + def increment_get_and_double(self): + value = self.increment_and_get() + return value * 2 + + +def main(): + counter_actor = Counter.remote() + current_value = ray.get(counter_actor.increment_get_and_double.remote()) + + assert current_value == 2, f"Unexpected result: {current_value}" + + +if __name__ == "__main__": + main() + ray.shutdown() diff --git a/tests/contrib/ray/jobs/simple_task.py b/tests/contrib/ray/jobs/simple_task.py new file mode 100644 index 00000000000..4d0bacf31ca --- /dev/null +++ b/tests/contrib/ray/jobs/simple_task.py @@ -0,0 +1,20 @@ +import ray + + +ray.init() + + +@ray.remote +def add_one(x): + return x + 1 + + +def main(): + futures = [add_one.remote(i) for i in range(4)] + results = ray.get(futures) + assert results == [1, 2, 3, 4], f"Unexpected results: {results}" + + +if __name__ == "__main__": + main() + ray.shutdown() diff --git a/tests/contrib/ray/test_ray.py b/tests/contrib/ray/test_ray.py index cca4a2e68b5..a381ecdf8b4 100644 --- a/tests/contrib/ray/test_ray.py +++ b/tests/contrib/ray/test_ray.py @@ -1,39 +1,110 @@ -from ddtrace._trace.span import Span -from ddtrace.constants import _DJM_ENABLED_KEY -from ddtrace.constants import _FILTER_KEPT_KEY -from ddtrace.constants import _SAMPLING_PRIORITY_KEY -from ddtrace.constants import _SPAN_MEASURED_KEY -from ddtrace.contrib.internal.ray.tracer import DEFAULT_SPAN_NAME -from ddtrace.contrib.internal.ray.tracer import RAY_JOB_ID_TAG_KEY -from ddtrace.contrib.internal.ray.tracer import RayTraceFilter - - -def test_trace_filter_detects_ray_spans(): - span = Span("span0") - span.set_tag(RAY_JOB_ID_TAG_KEY, "01000000") - trace = [span] - ray_trace_filter = RayTraceFilter() - filtered_trace = ray_trace_filter.process_trace(trace) - - assert len(filtered_trace) == 1 - assert filtered_trace[0].name == DEFAULT_SPAN_NAME - assert filtered_trace[0].span_type == "ray.span0" - assert filtered_trace[0].get_metric(_DJM_ENABLED_KEY) == 1 - assert filtered_trace[0].get_metric(_FILTER_KEPT_KEY) == 1 - assert filtered_trace[0].get_metric(_SPAN_MEASURED_KEY) == 1 - assert filtered_trace[0].get_metric(_SAMPLING_PRIORITY_KEY) == 2 - - -def test_trace_filter_skips_non_ray_spans(): - span = Span("span0") - trace = [span] - ray_trace_filter = RayTraceFilter() - filtered_trace = ray_trace_filter.process_trace(trace) - - assert len(filtered_trace) == 1 - assert filtered_trace[0].name == "span0" - assert filtered_trace[0].span_type is None - assert filtered_trace[0].get_metric(_DJM_ENABLED_KEY) is None - assert filtered_trace[0].get_metric(_FILTER_KEPT_KEY) is None - assert filtered_trace[0].get_metric(_SPAN_MEASURED_KEY) is None - assert filtered_trace[0].get_metric(_SAMPLING_PRIORITY_KEY) is None +import os +import subprocess + +import pytest + +from tests.utils import TracerTestCase + + +def submit_ray_job(script_name, timeout=60): + """ + Submit a Ray job + + Args: + script_name (str): Name of the script file (without path) + timeout (int): Timeout for job submission in seconds + Returns: + subprocess.CompletedProcess: Result of the job submission command + """ + script_path = os.path.join(os.path.dirname(__file__), script_name) + + if not os.path.exists(script_path): + raise FileNotFoundError(f"Script not found: {script_path}") + + cmd = ["ray", "job", "submit", "--", "python", script_path] + + print(f"\n{' '.join(cmd)}\n") + result = subprocess.run(cmd, capture_output=True, text=True, timeout=timeout) + print(result.stdout) + + if result.returncode != 0: + raise subprocess.CalledProcessError(result.returncode, cmd, result.stdout, result.stderr) + + return result + + +RAY_SNAPSHOT_IGNORES = [ + # Ray-specific dynamic values that change between runs + "meta.ray.job_id", + "meta.ray.node_id", + "meta.ray.worker_id", + "meta.ray.actor_id", + "meta.ray.task_id", + "meta.ray.submission_id", + "meta.tracestate", + "meta.traceparent", + "meta.error.message", + "meta.ray.job.message", + "meta.error.stack", + # Service names that include dynamic submission IDs + "service", +] + + +class TestRayIntegration(TracerTestCase): + """Test Ray integration with actual cluster setup and job submission""" + + @classmethod + def setUpClass(cls): + super(TestRayIntegration, cls).setUpClass() + + try: + subprocess.run(["ray", "stop", "--force"], capture_output=True, check=False) + except FileNotFoundError: + pytest.skip("Ray CLI not available") + + try: + # Start the ray cluster once for all tests + subprocess.run( + ["ddtrace-run", "ray", "start", "--head", "--dashboard-host=127.0.0.1", "--port=0"], + capture_output=True, + text=True, + check=True, + ) + except subprocess.CalledProcessError as e: + pytest.skip(f"Failed to start Ray cluster: {e.stderr}") + + @classmethod + def tearDownClass(cls): + try: + # Stop the ray cluster once after all tests + subprocess.run(["ray", "stop"], capture_output=True, check=False) + except FileNotFoundError: + pass + + super(TestRayIntegration, cls).tearDownClass() + + @pytest.mark.snapshot(token="tests.contrib.ray.test_ray.test_simple_task", ignores=RAY_SNAPSHOT_IGNORES) + def test_simple_task(self): + submit_ray_job("jobs/simple_task.py") + + @pytest.mark.snapshot(token="tests.contrib.ray.test_ray.test_nested_tasks", ignores=RAY_SNAPSHOT_IGNORES) + def test_nested_taskx(self): + submit_ray_job("jobs/nested_tasks.py") + + @pytest.mark.snapshot(token="tests.contrib.ray.test_ray.test_simple_actor", ignores=RAY_SNAPSHOT_IGNORES) + def test_simple_actor(self): + submit_ray_job("jobs/simple_actor.py") + + @pytest.mark.snapshot(token="tests.contrib.ray.test_ray.test_actor_and_task", ignores=RAY_SNAPSHOT_IGNORES) + def test_actor_and_task(self): + submit_ray_job("jobs/actor_and_task.py") + + @pytest.mark.snapshot(token="tests.contrib.ray.test_ray.test_actor_interactions", ignores=RAY_SNAPSHOT_IGNORES) + def test_actor_interactions(self): + submit_ray_job("jobs/actor_interactions.py") + + @pytest.mark.snapshot(token="tests.contrib.ray.test_ray.error_in_task", ignores=RAY_SNAPSHOT_IGNORES) + def test_error_in_task(self): + with pytest.raises(subprocess.CalledProcessError): + submit_ray_job("jobs/error_in_task.py") diff --git a/tests/contrib/ray/test_ray_patch.py b/tests/contrib/ray/test_ray_patch.py new file mode 100644 index 00000000000..ef11dd7726f --- /dev/null +++ b/tests/contrib/ray/test_ray_patch.py @@ -0,0 +1,39 @@ +from ddtrace.contrib.internal.ray.patch import get_version +from ddtrace.contrib.internal.ray.patch import patch +from ddtrace.contrib.internal.ray.patch import unpatch +from tests.contrib.patch import PatchTestCase + + +class TestRayPatch(PatchTestCase.Base): + __integration_name__ = "ray" + __module_name__ = "ray" + __patch_func__ = patch + __unpatch_func__ = unpatch + __get_version__ = get_version + + def assert_module_patched(self, ray): + self.assert_wrapped(ray.remote_function.RemoteFunction.__init__) + self.assert_wrapped(ray.remote_function.RemoteFunction._remote) + self.assert_wrapped(ray.dashboard.modules.job.job_manager.JobManager.submit_job) + self.assert_wrapped(ray.dashboard.modules.job.job_manager.JobManager._monitor_job_internal) + self.assert_wrapped(ray.actor._modify_class) + self.assert_wrapped(ray.actor.ActorHandle._actor_method_call) + self.assert_wrapped(ray._private.worker.disconnect) + + def assert_not_module_patched(self, ray): + self.assert_not_wrapped(ray.remote_function.RemoteFunction.__init__) + self.assert_not_wrapped(ray.remote_function.RemoteFunction._remote) + self.assert_not_wrapped(ray.dashboard.modules.job.job_manager.JobManager.submit_job) + self.assert_not_wrapped(ray.dashboard.modules.job.job_manager.JobManager._monitor_job_internal) + self.assert_not_wrapped(ray.actor._modify_class) + self.assert_not_wrapped(ray.actor.ActorHandle._actor_method_call) + self.assert_not_wrapped(ray._private.worker.disconnect) + + def assert_not_module_double_patched(self, ray): + self.assert_not_double_wrapped(ray.remote_function.RemoteFunction.__init__) + self.assert_not_double_wrapped(ray.remote_function.RemoteFunction._remote) + self.assert_not_double_wrapped(ray.dashboard.modules.job.job_manager.JobManager.submit_job) + self.assert_not_double_wrapped(ray.dashboard.modules.job.job_manager.JobManager._monitor_job_internal) + self.assert_not_double_wrapped(ray.actor._modify_class) + self.assert_not_double_wrapped(ray.actor.ActorHandle._actor_method_call) + self.assert_not_double_wrapped(ray._private.worker.disconnect) diff --git a/tests/contrib/ray/test_ray_trace_filter.py b/tests/contrib/ray/test_ray_trace_filter.py new file mode 100644 index 00000000000..cca4a2e68b5 --- /dev/null +++ b/tests/contrib/ray/test_ray_trace_filter.py @@ -0,0 +1,39 @@ +from ddtrace._trace.span import Span +from ddtrace.constants import _DJM_ENABLED_KEY +from ddtrace.constants import _FILTER_KEPT_KEY +from ddtrace.constants import _SAMPLING_PRIORITY_KEY +from ddtrace.constants import _SPAN_MEASURED_KEY +from ddtrace.contrib.internal.ray.tracer import DEFAULT_SPAN_NAME +from ddtrace.contrib.internal.ray.tracer import RAY_JOB_ID_TAG_KEY +from ddtrace.contrib.internal.ray.tracer import RayTraceFilter + + +def test_trace_filter_detects_ray_spans(): + span = Span("span0") + span.set_tag(RAY_JOB_ID_TAG_KEY, "01000000") + trace = [span] + ray_trace_filter = RayTraceFilter() + filtered_trace = ray_trace_filter.process_trace(trace) + + assert len(filtered_trace) == 1 + assert filtered_trace[0].name == DEFAULT_SPAN_NAME + assert filtered_trace[0].span_type == "ray.span0" + assert filtered_trace[0].get_metric(_DJM_ENABLED_KEY) == 1 + assert filtered_trace[0].get_metric(_FILTER_KEPT_KEY) == 1 + assert filtered_trace[0].get_metric(_SPAN_MEASURED_KEY) == 1 + assert filtered_trace[0].get_metric(_SAMPLING_PRIORITY_KEY) == 2 + + +def test_trace_filter_skips_non_ray_spans(): + span = Span("span0") + trace = [span] + ray_trace_filter = RayTraceFilter() + filtered_trace = ray_trace_filter.process_trace(trace) + + assert len(filtered_trace) == 1 + assert filtered_trace[0].name == "span0" + assert filtered_trace[0].span_type is None + assert filtered_trace[0].get_metric(_DJM_ENABLED_KEY) is None + assert filtered_trace[0].get_metric(_FILTER_KEPT_KEY) is None + assert filtered_trace[0].get_metric(_SPAN_MEASURED_KEY) is None + assert filtered_trace[0].get_metric(_SAMPLING_PRIORITY_KEY) is None diff --git a/tests/contrib/suitespec.yml b/tests/contrib/suitespec.yml index e71fe045648..b251180f151 100644 --- a/tests/contrib/suitespec.yml +++ b/tests/contrib/suitespec.yml @@ -1021,8 +1021,9 @@ suites: - '@tracing' - '@ray' - tests/contrib/ray/* + - tests/snapshots/tests.contrib.ray.* runner: riot - snapshot: false + snapshot: true redis: parallelism: 5 paths: diff --git a/tests/snapshots/tests.contrib.ray.test_ray.error_in_task.json b/tests/snapshots/tests.contrib.ray.test_ray.error_in_task.json new file mode 100644 index 00000000000..87e60cf36e4 --- /dev/null +++ b/tests/snapshots/tests.contrib.ray.test_ray.error_in_task.json @@ -0,0 +1,523 @@ +[[ + { + "name": "ray.job", + "service": "raysubmit_9fLPpGpphKh8suBJ", + "resource": "ray.job", + "trace_id": 0, + "span_id": 1, + "parent_id": 0, + "type": "ml", + "error": 1, + "meta": { + "_dd.base_service": "ray.dashboard", + "_dd.p.dm": "-0", + "_dd.p.tid": "68b5901500000000", + "component": "ray", + "error.message": "Job entrypoint command failed with exit code 1, last available logs (truncated to 20,000 chars):\nray.exceptions.RayTaskError(ValueError): \u001b[36mray::add_one()\u001b[39m (pid=4275, ip=192.168.65.3)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 107, in wrapped_function\n return _wrap_task_execution(function, *args, **kwargs)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 139, in _wrap_task_execution\n raise e\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 134, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 7, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", + "language": "python", + "ray.job.message": "Job entrypoint command failed with exit code 1, last available logs (truncated to 20,000 chars):\nray.exceptions.RayTaskError(ValueError): \u001b[36mray::add_one()\u001b[39m (pid=4275, ip=192.168.65.3)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 107, in wrapped_function\n return _wrap_task_execution(function, *args, **kwargs)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 139, in _wrap_task_execution\n raise e\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 134, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 7, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", + "ray.job.status": "FAILED", + "runtime-id": "1a8544fb366e40788efcfccb872f201c" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 3694 + }, + "duration": 9412134963, + "start": 1756729365190546459 + }, + { + "name": "ray.job.submit", + "service": "raysubmit_9fLPpGpphKh8suBJ", + "resource": "ray.job.submit", + "trace_id": 0, + "span_id": 2, + "parent_id": 1, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray.dashboard", + "component": "ray", + "ray.job.submit_status": "success", + "span.kind": "producer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 43541, + "start": 1756729365190588459 + }, + { + "name": "JobSupervisor.run.remote()", + "service": "raysubmit_9fLPpGpphKh8suBJ", + "resource": "JobSupervisor.run.remote()", + "trace_id": 0, + "span_id": 3, + "parent_id": 1, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray.dashboard", + "component": "ray", + "ray.job_id": "01000000", + "ray.node_id": "c10c05529ea00397b477531255944a5243dda98b057ab71d8e6cf2d1", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "span.kind": "producer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 261792, + "start": 1756729365214141459 + }, + { + "name": "JobSupervisor.run", + "service": "raysubmit_9fLPpGpphKh8suBJ", + "resource": "JobSupervisor.run", + "trace_id": 0, + "span_id": 4, + "parent_id": 3, + "type": "ml", + "error": 1, + "meta": { + "_dd.base_service": "ray._private.workers", + "_dd.p.tid": "68b5901500000000", + "_dd.parent_id": "562bf616b49c9f2d", + "component": "ray", + "error.message": "", + "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 301, in _traced_run_method\n raise e\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 295, in _traced_run_method\n await method(self, *args, **kwargs)\n File \"/home/bits/project/.riot/venv_py3135_mock_pytest_pytest-mock_coverage_pytest-cov_opentracing_hypothesis6451_pytest-asyncio_ray[default]~2480/lib/python3.13/site-packages/ray/dashboard/modules/job/job_supervisor.py\", line 473, in run\n ray.actor.exit_actor()\n ~~~~~~~~~~~~~~~~~~~~^^\n File \"/home/bits/project/.riot/venv_py3135_mock_pytest_pytest-mock_coverage_pytest-cov_opentracing_hypothesis6451_pytest-asyncio_ray[default]~2480/lib/python3.13/site-packages/ray/actor.py\", line 2369, in exit_actor\n raise AsyncioActorExit()\nray.exceptions.AsyncioActorExit\n", + "error.type": "ray.exceptions.AsyncioActorExit", + "language": "python", + "ray.actor_id": "7892bf72e048df749841f80901000000", + "ray.job_id": "01000000", + "ray.node_id": "c10c05529ea00397b477531255944a5243dda98b057ab71d8e6cf2d1", + "ray.submission_id": "raysubmit_9fLPpGpphKh8suBJ", + "ray.task_id": "16310a0f0a45af5c7892bf72e048df749841f80901000000", + "ray.worker_id": "a2ca2e0a27a841dbc7a7c5148b3e1eeab10fa1995c608b2dc5459f9c", + "runtime-id": "ba4433ae780442a4a7910230c27885fb", + "span.kind": "consumer", + "traceparent": "00-68b5901500000000ccf66aa80bdf2071-562bf616b49c9f2d-00", + "tracestate": "dd=p:562bf616b49c9f2d" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 4151 + }, + "duration": 7277508420, + "start": 1756729366543785126 + }, + { + "name": "JobSupervisor._get_driver_env_vars", + "service": "raysubmit_9fLPpGpphKh8suBJ", + "resource": "JobSupervisor._get_driver_env_vars", + "trace_id": 0, + "span_id": 5, + "parent_id": 4, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "component": "ray", + "ray.actor_id": "7892bf72e048df749841f80901000000", + "ray.job_id": "01000000", + "ray.node_id": "c10c05529ea00397b477531255944a5243dda98b057ab71d8e6cf2d1", + "ray.submission_id": "raysubmit_9fLPpGpphKh8suBJ", + "ray.task_id": "16310a0f0a45af5c7892bf72e048df749841f80901000000", + "ray.worker_id": "a2ca2e0a27a841dbc7a7c5148b3e1eeab10fa1995c608b2dc5459f9c", + "span.kind": "consumer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 2859292, + "start": 1756729366545075209 + }, + { + "name": "JobSupervisor._get_driver_runtime_env", + "service": "raysubmit_9fLPpGpphKh8suBJ", + "resource": "JobSupervisor._get_driver_runtime_env", + "trace_id": 0, + "span_id": 11, + "parent_id": 5, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "component": "ray", + "ray.actor_id": "7892bf72e048df749841f80901000000", + "ray.job_id": "01000000", + "ray.node_id": "c10c05529ea00397b477531255944a5243dda98b057ab71d8e6cf2d1", + "ray.submission_id": "raysubmit_9fLPpGpphKh8suBJ", + "ray.task_id": "16310a0f0a45af5c7892bf72e048df749841f80901000000", + "ray.worker_id": "a2ca2e0a27a841dbc7a7c5148b3e1eeab10fa1995c608b2dc5459f9c", + "span.kind": "consumer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 47708, + "start": 1756729366547866251 + }, + { + "name": "JobSupervisor._exec_entrypoint", + "service": "raysubmit_9fLPpGpphKh8suBJ", + "resource": "JobSupervisor._exec_entrypoint", + "trace_id": 0, + "span_id": 6, + "parent_id": 4, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "component": "ray", + "ray.actor_id": "7892bf72e048df749841f80901000000", + "ray.job_id": "01000000", + "ray.node_id": "c10c05529ea00397b477531255944a5243dda98b057ab71d8e6cf2d1", + "ray.submission_id": "raysubmit_9fLPpGpphKh8suBJ", + "ray.task_id": "16310a0f0a45af5c7892bf72e048df749841f80901000000", + "ray.worker_id": "a2ca2e0a27a841dbc7a7c5148b3e1eeab10fa1995c608b2dc5459f9c", + "span.kind": "consumer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 401583, + "start": 1756729366548085543 + }, + { + "name": "__main__.add_one.remote()", + "service": "raysubmit_9fLPpGpphKh8suBJ", + "resource": "__main__.add_one.remote()", + "trace_id": 0, + "span_id": 7, + "parent_id": 4, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "project", + "_dd.p.tid": "68b5901500000000", + "_dd.parent_id": "6820b176a261a94b", + "component": "ray", + "language": "python", + "ray.job_id": "02000000", + "ray.node_id": "c10c05529ea00397b477531255944a5243dda98b057ab71d8e6cf2d1", + "ray.submission_id": "raysubmit_9fLPpGpphKh8suBJ", + "ray.task.submit_status": "success", + "ray.worker_id": "02000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "ce1a3151095e498498106a4f0c8e501c", + "span.kind": "producer", + "traceparent": "00-68b5901500000000ccf66aa80bdf2071-6820b176a261a94b-00", + "tracestate": "dd=p:6820b176a261a94b;s:0" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 4223 + }, + "duration": 3214583, + "start": 1756729367237336793 + }, + { + "name": "__main__.add_one", + "service": "raysubmit_9fLPpGpphKh8suBJ", + "resource": "__main__.add_one", + "trace_id": 0, + "span_id": 12, + "parent_id": 7, + "type": "ml", + "error": 1, + "meta": { + "_dd.base_service": "ray._private.workers", + "_dd.p.tid": "68b5901500000000", + "_dd.parent_id": "dbb4b992a56fefc0", + "component": "ray", + "error.message": "foo", + "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 139, in _wrap_task_execution\n raise e\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 134, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 7, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", + "error.type": "builtins.ValueError", + "language": "python", + "ray.job_id": "02000000", + "ray.node_id": "c10c05529ea00397b477531255944a5243dda98b057ab71d8e6cf2d1", + "ray.submission_id": "raysubmit_9fLPpGpphKh8suBJ", + "ray.task.status": "error", + "ray.task_id": "67a2e8cfa5a06db3ffffffffffffffffffffffff02000000", + "ray.worker_id": "7a373795a49a97d5d58a35e0a17dc6b21996ae1ccf7da696c4689062", + "runtime-id": "237592a324b34fcf8be7e070818da1e1", + "span.kind": "consumer", + "traceparent": "00-68b5901500000000ccf66aa80bdf2071-dbb4b992a56fefc0-00", + "tracestate": "dd=p:dbb4b992a56fefc0;s:0" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 4272 + }, + "duration": 8540292, + "start": 1756729370321577086 + }, + { + "name": "__main__.add_one.remote()", + "service": "raysubmit_9fLPpGpphKh8suBJ", + "resource": "__main__.add_one.remote()", + "trace_id": 0, + "span_id": 8, + "parent_id": 4, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "project", + "_dd.p.tid": "68b5901500000000", + "_dd.parent_id": "6820b176a261a94b", + "component": "ray", + "language": "python", + "ray.job_id": "02000000", + "ray.node_id": "c10c05529ea00397b477531255944a5243dda98b057ab71d8e6cf2d1", + "ray.submission_id": "raysubmit_9fLPpGpphKh8suBJ", + "ray.task.submit_status": "success", + "ray.worker_id": "02000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "ce1a3151095e498498106a4f0c8e501c", + "span.kind": "producer", + "traceparent": "00-68b5901500000000ccf66aa80bdf2071-6820b176a261a94b-00", + "tracestate": "dd=p:6820b176a261a94b;s:0" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 4223 + }, + "duration": 185833, + "start": 1756729367243572835 + }, + { + "name": "__main__.add_one", + "service": "raysubmit_9fLPpGpphKh8suBJ", + "resource": "__main__.add_one", + "trace_id": 0, + "span_id": 13, + "parent_id": 8, + "type": "ml", + "error": 1, + "meta": { + "_dd.base_service": "ray._private.workers", + "_dd.p.tid": "68b5901500000000", + "_dd.parent_id": "e9a418aa1a98909c", + "component": "ray", + "error.message": "foo", + "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 139, in _wrap_task_execution\n raise e\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 134, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 7, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", + "error.type": "builtins.ValueError", + "language": "python", + "ray.job_id": "02000000", + "ray.node_id": "c10c05529ea00397b477531255944a5243dda98b057ab71d8e6cf2d1", + "ray.submission_id": "raysubmit_9fLPpGpphKh8suBJ", + "ray.task.status": "error", + "ray.task_id": "e082c90ab8422b00ffffffffffffffffffffffff02000000", + "ray.worker_id": "464deb49df366eea512107ace6fe5b68d94ae1b0b4cf4e32ba88f43e", + "runtime-id": "ca089f2a624042398fdf8207599bd5c5", + "span.kind": "consumer", + "traceparent": "00-68b5901500000000ccf66aa80bdf2071-e9a418aa1a98909c-00", + "tracestate": "dd=p:e9a418aa1a98909c;s:0" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 4275 + }, + "duration": 5636166, + "start": 1756729370323848545 + }, + { + "name": "__main__.add_one.remote()", + "service": "raysubmit_9fLPpGpphKh8suBJ", + "resource": "__main__.add_one.remote()", + "trace_id": 0, + "span_id": 9, + "parent_id": 4, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "project", + "_dd.p.tid": "68b5901500000000", + "_dd.parent_id": "6820b176a261a94b", + "component": "ray", + "language": "python", + "ray.job_id": "02000000", + "ray.node_id": "c10c05529ea00397b477531255944a5243dda98b057ab71d8e6cf2d1", + "ray.submission_id": "raysubmit_9fLPpGpphKh8suBJ", + "ray.task.submit_status": "success", + "ray.worker_id": "02000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "ce1a3151095e498498106a4f0c8e501c", + "span.kind": "producer", + "traceparent": "00-68b5901500000000ccf66aa80bdf2071-6820b176a261a94b-00", + "tracestate": "dd=p:6820b176a261a94b;s:0" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 4223 + }, + "duration": 160833, + "start": 1756729367245269960 + }, + { + "name": "__main__.add_one", + "service": "raysubmit_9fLPpGpphKh8suBJ", + "resource": "__main__.add_one", + "trace_id": 0, + "span_id": 14, + "parent_id": 9, + "type": "ml", + "error": 1, + "meta": { + "_dd.base_service": "ray._private.workers", + "_dd.p.tid": "68b5901500000000", + "_dd.parent_id": "eb6ecc39a54c4602", + "component": "ray", + "error.message": "foo", + "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 139, in _wrap_task_execution\n raise e\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 134, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 7, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", + "error.type": "builtins.ValueError", + "language": "python", + "ray.job_id": "02000000", + "ray.node_id": "c10c05529ea00397b477531255944a5243dda98b057ab71d8e6cf2d1", + "ray.submission_id": "raysubmit_9fLPpGpphKh8suBJ", + "ray.task.status": "error", + "ray.task_id": "e5cbd90b7f1fb776ffffffffffffffffffffffff02000000", + "ray.worker_id": "464deb49df366eea512107ace6fe5b68d94ae1b0b4cf4e32ba88f43e", + "runtime-id": "ca089f2a624042398fdf8207599bd5c5", + "span.kind": "consumer", + "traceparent": "00-68b5901500000000ccf66aa80bdf2071-eb6ecc39a54c4602-00", + "tracestate": "dd=p:eb6ecc39a54c4602;s:0" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 4275 + }, + "duration": 528083, + "start": 1756729370336110753 + }, + { + "name": "__main__.add_one.remote()", + "service": "raysubmit_9fLPpGpphKh8suBJ", + "resource": "__main__.add_one.remote()", + "trace_id": 0, + "span_id": 10, + "parent_id": 4, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "project", + "_dd.p.tid": "68b5901500000000", + "_dd.parent_id": "6820b176a261a94b", + "component": "ray", + "language": "python", + "ray.job_id": "02000000", + "ray.node_id": "c10c05529ea00397b477531255944a5243dda98b057ab71d8e6cf2d1", + "ray.submission_id": "raysubmit_9fLPpGpphKh8suBJ", + "ray.task.submit_status": "success", + "ray.worker_id": "02000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "ce1a3151095e498498106a4f0c8e501c", + "span.kind": "producer", + "traceparent": "00-68b5901500000000ccf66aa80bdf2071-6820b176a261a94b-00", + "tracestate": "dd=p:6820b176a261a94b;s:0" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 4223 + }, + "duration": 155625, + "start": 1756729367246169085 + }, + { + "name": "__main__.add_one", + "service": "raysubmit_9fLPpGpphKh8suBJ", + "resource": "__main__.add_one", + "trace_id": 0, + "span_id": 15, + "parent_id": 10, + "type": "ml", + "error": 1, + "meta": { + "_dd.base_service": "ray._private.workers", + "_dd.p.tid": "68b5901500000000", + "_dd.parent_id": "b60a3e943e41718c", + "component": "ray", + "error.message": "foo", + "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 139, in _wrap_task_execution\n raise e\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 134, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 7, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", + "error.type": "builtins.ValueError", + "language": "python", + "ray.job_id": "02000000", + "ray.node_id": "c10c05529ea00397b477531255944a5243dda98b057ab71d8e6cf2d1", + "ray.submission_id": "raysubmit_9fLPpGpphKh8suBJ", + "ray.task.status": "error", + "ray.task_id": "39088be3736e590affffffffffffffffffffffff02000000", + "ray.worker_id": "55ab593ea0c31f420d9bfdb1facec23a838729bdbce3a985cef7f470", + "runtime-id": "5ea204d639f74258ae42a7638ec5cc25", + "span.kind": "consumer", + "traceparent": "00-68b5901500000000ccf66aa80bdf2071-b60a3e943e41718c-00", + "tracestate": "dd=p:b60a3e943e41718c;s:0" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 4273 + }, + "duration": 3504917, + "start": 1756729370343279628 + }]] diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_actor_and_task.json b/tests/snapshots/tests.contrib.ray.test_ray.test_actor_and_task.json new file mode 100644 index 00000000000..d2d218e53d1 --- /dev/null +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_actor_and_task.json @@ -0,0 +1,724 @@ +[[ + { + "name": "ray.job", + "service": "raysubmit_feABH49FUBBv6b6Z", + "resource": "ray.job", + "trace_id": 0, + "span_id": 1, + "parent_id": 0, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray.dashboard", + "_dd.p.dm": "-0", + "_dd.p.tid": "68b58fc000000000", + "component": "ray", + "language": "python", + "ray.job.message": "Job finished successfully.", + "ray.job.status": "SUCCEEDED", + "runtime-id": "b71f15a89fe8488da7fa26c8ebc99b4e" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 1083 + }, + "duration": 9352217004, + "start": 1756729280415321170 + }, + { + "name": "ray.job.submit", + "service": "raysubmit_feABH49FUBBv6b6Z", + "resource": "ray.job.submit", + "trace_id": 0, + "span_id": 2, + "parent_id": 1, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray.dashboard", + "component": "ray", + "ray.job.submit_status": "success", + "span.kind": "producer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 54167, + "start": 1756729280415358878 + }, + { + "name": "JobSupervisor.run.remote()", + "service": "raysubmit_feABH49FUBBv6b6Z", + "resource": "JobSupervisor.run.remote()", + "trace_id": 0, + "span_id": 3, + "parent_id": 1, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray.dashboard", + "component": "ray", + "ray.job_id": "01000000", + "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "span.kind": "producer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 247333, + "start": 1756729280438788878 + }, + { + "name": "JobSupervisor.run", + "service": "raysubmit_feABH49FUBBv6b6Z", + "resource": "JobSupervisor.run", + "trace_id": 0, + "span_id": 4, + "parent_id": 3, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "_dd.p.tid": "68b58fc000000000", + "_dd.parent_id": "7680189ecd6b8e7f", + "component": "ray", + "language": "python", + "ray.actor_id": "d6454c463d1fe143a4f115b601000000", + "ray.job_id": "01000000", + "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", + "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", + "ray.task_id": "16310a0f0a45af5cd6454c463d1fe143a4f115b601000000", + "ray.worker_id": "0c01b74403204c89ed720044b62a517ce7eac0dadf2837bd4353b65b", + "runtime-id": "b23e2986ed844c95a52c8f0009a7bc25", + "span.kind": "consumer", + "traceparent": "00-68b58fc00000000056a1a5cacac15331-7680189ecd6b8e7f-00", + "tracestate": "dd=p:7680189ecd6b8e7f" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 1540 + }, + "duration": 7172894795, + "start": 1756729281721611629 + }, + { + "name": "JobSupervisor._get_driver_env_vars", + "service": "raysubmit_feABH49FUBBv6b6Z", + "resource": "JobSupervisor._get_driver_env_vars", + "trace_id": 0, + "span_id": 5, + "parent_id": 4, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "component": "ray", + "ray.actor_id": "d6454c463d1fe143a4f115b601000000", + "ray.job_id": "01000000", + "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", + "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", + "ray.task_id": "16310a0f0a45af5cd6454c463d1fe143a4f115b601000000", + "ray.worker_id": "0c01b74403204c89ed720044b62a517ce7eac0dadf2837bd4353b65b", + "span.kind": "consumer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 1352917, + "start": 1756729281722814295 + }, + { + "name": "JobSupervisor._get_driver_runtime_env", + "service": "raysubmit_feABH49FUBBv6b6Z", + "resource": "JobSupervisor._get_driver_runtime_env", + "trace_id": 0, + "span_id": 8, + "parent_id": 5, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "component": "ray", + "ray.actor_id": "d6454c463d1fe143a4f115b601000000", + "ray.job_id": "01000000", + "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", + "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", + "ray.task_id": "16310a0f0a45af5cd6454c463d1fe143a4f115b601000000", + "ray.worker_id": "0c01b74403204c89ed720044b62a517ce7eac0dadf2837bd4353b65b", + "span.kind": "consumer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 35041, + "start": 1756729281724113254 + }, + { + "name": "JobSupervisor._exec_entrypoint", + "service": "raysubmit_feABH49FUBBv6b6Z", + "resource": "JobSupervisor._exec_entrypoint", + "trace_id": 0, + "span_id": 6, + "parent_id": 4, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "component": "ray", + "ray.actor_id": "d6454c463d1fe143a4f115b601000000", + "ray.job_id": "01000000", + "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", + "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", + "ray.task_id": "16310a0f0a45af5cd6454c463d1fe143a4f115b601000000", + "ray.worker_id": "0c01b74403204c89ed720044b62a517ce7eac0dadf2837bd4353b65b", + "span.kind": "consumer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 413042, + "start": 1756729281724318795 + }, + { + "name": "ComputationManager.compute_and_store.remote()", + "service": "raysubmit_feABH49FUBBv6b6Z", + "resource": "ComputationManager.compute_and_store.remote()", + "trace_id": 0, + "span_id": 7, + "parent_id": 4, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "project", + "_dd.p.tid": "68b58fc000000000", + "_dd.parent_id": "df73f945b04e4758", + "component": "ray", + "language": "python", + "ray.job_id": "02000000", + "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", + "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", + "ray.worker_id": "02000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "f2fb50cbd971486a9eb8542f7107e107", + "span.kind": "producer", + "traceparent": "00-68b58fc00000000056a1a5cacac15331-df73f945b04e4758-00", + "tracestate": "dd=p:df73f945b04e4758;s:0" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 1611 + }, + "duration": 331958, + "start": 1756729282351810879 + }, + { + "name": "ComputationManager.compute_and_store", + "service": "raysubmit_feABH49FUBBv6b6Z", + "resource": "ComputationManager.compute_and_store", + "trace_id": 0, + "span_id": 9, + "parent_id": 7, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "_dd.p.tid": "68b58fc000000000", + "_dd.parent_id": "9b5c4fd68fd6641a", + "component": "ray", + "language": "python", + "ray.actor_id": "cc2d3e05660034df7741de9002000000", + "ray.job_id": "02000000", + "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", + "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", + "ray.task_id": "e082c90ab8422b00cc2d3e05660034df7741de9002000000", + "ray.worker_id": "57b030d1f12a0ff8b8d33fdc431da5eedc0f9563fccc82b18870e687", + "runtime-id": "127842fbf0c94f058aca14111f575597", + "span.kind": "consumer", + "traceparent": "00-68b58fc00000000056a1a5cacac15331-9b5c4fd68fd6641a-00", + "tracestate": "dd=p:9b5c4fd68fd6641a;s:0" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 1658 + }, + "duration": 3839484710, + "start": 1756729283666550296 + }, + { + "name": "ComputationManager.increment_count", + "service": "raysubmit_feABH49FUBBv6b6Z", + "resource": "ComputationManager.increment_count", + "trace_id": 0, + "span_id": 10, + "parent_id": 9, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "component": "ray", + "ray.actor_id": "cc2d3e05660034df7741de9002000000", + "ray.job_id": "02000000", + "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", + "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", + "ray.task_id": "e082c90ab8422b00cc2d3e05660034df7741de9002000000", + "ray.worker_id": "57b030d1f12a0ff8b8d33fdc431da5eedc0f9563fccc82b18870e687", + "span.kind": "consumer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 24917, + "start": 1756729283666623296 + }, + { + "name": "__main__.batch_compute.remote()", + "service": "raysubmit_feABH49FUBBv6b6Z", + "resource": "__main__.batch_compute.remote()", + "trace_id": 0, + "span_id": 11, + "parent_id": 9, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "component": "ray", + "ray.actor_id": "cc2d3e05660034df7741de9002000000", + "ray.job_id": "02000000", + "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", + "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", + "ray.task.submit_status": "success", + "ray.task_id": "e082c90ab8422b00cc2d3e05660034df7741de9002000000", + "ray.worker_id": "57b030d1f12a0ff8b8d33fdc431da5eedc0f9563fccc82b18870e687", + "span.kind": "producer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 1680167, + "start": 1756729283666671963 + }, + { + "name": "__main__.batch_compute", + "service": "raysubmit_feABH49FUBBv6b6Z", + "resource": "__main__.batch_compute", + "trace_id": 0, + "span_id": 17, + "parent_id": 11, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "_dd.p.tid": "68b58fc000000000", + "_dd.parent_id": "dc2c89df3c83a26c", + "component": "ray", + "language": "python", + "ray.job_id": "02000000", + "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", + "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", + "ray.task.status": "success", + "ray.task_id": "6bb09a1695859dc7ffffffffffffffffffffffff02000000", + "ray.worker_id": "a7088869a3b32dae41da13092f1871824b2e65ab91d3eb7816024945", + "runtime-id": "0684841db1e640729817d204d3784ede", + "span.kind": "consumer", + "traceparent": "00-68b58fc00000000056a1a5cacac15331-dc2c89df3c83a26c-00", + "tracestate": "dd=p:dc2c89df3c83a26c;s:0" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 1709 + }, + "duration": 2548473668, + "start": 1756729284953875255 + }, + { + "name": "__main__.compute_value.remote()", + "service": "raysubmit_feABH49FUBBv6b6Z", + "resource": "__main__.compute_value.remote()", + "trace_id": 0, + "span_id": 18, + "parent_id": 17, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "component": "ray", + "ray.job_id": "02000000", + "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", + "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", + "ray.task.submit_status": "success", + "ray.task_id": "6bb09a1695859dc7ffffffffffffffffffffffff02000000", + "ray.worker_id": "a7088869a3b32dae41da13092f1871824b2e65ab91d3eb7816024945", + "span.kind": "producer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 1274958, + "start": 1756729284953941922 + }, + { + "name": "__main__.compute_value", + "service": "raysubmit_feABH49FUBBv6b6Z", + "resource": "__main__.compute_value", + "trace_id": 0, + "span_id": 21, + "parent_id": 18, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "_dd.p.tid": "68b58fc000000000", + "_dd.parent_id": "e74ee6f8aa10d747", + "component": "ray", + "language": "python", + "ray.job_id": "02000000", + "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", + "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", + "ray.task.status": "success", + "ray.task_id": "da9af79d9aa90188ffffffffffffffffffffffff02000000", + "ray.worker_id": "cefd26c7434e9788292b3b658e2199922d62acc04c8b412a2f19401e", + "runtime-id": "23819cd2e39e49e3a849b1058bd82fb3", + "span.kind": "consumer", + "traceparent": "00-68b58fc00000000056a1a5cacac15331-e74ee6f8aa10d747-00", + "tracestate": "dd=p:e74ee6f8aa10d747;s:0" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 1759 + }, + "duration": 56708, + "start": 1756729287494920090 + }, + { + "name": "__main__.compute_value.remote()", + "service": "raysubmit_feABH49FUBBv6b6Z", + "resource": "__main__.compute_value.remote()", + "trace_id": 0, + "span_id": 19, + "parent_id": 17, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "component": "ray", + "ray.job_id": "02000000", + "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", + "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", + "ray.task.submit_status": "success", + "ray.task_id": "6bb09a1695859dc7ffffffffffffffffffffffff02000000", + "ray.worker_id": "a7088869a3b32dae41da13092f1871824b2e65ab91d3eb7816024945", + "span.kind": "producer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 125875, + "start": 1756729284955241213 + }, + { + "name": "__main__.compute_value", + "service": "raysubmit_feABH49FUBBv6b6Z", + "resource": "__main__.compute_value", + "trace_id": 0, + "span_id": 22, + "parent_id": 19, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "_dd.p.tid": "68b58fc000000000", + "_dd.parent_id": "288e418e749b70c7", + "component": "ray", + "language": "python", + "ray.job_id": "02000000", + "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", + "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", + "ray.task.status": "success", + "ray.task_id": "4e7319589af74821ffffffffffffffffffffffff02000000", + "ray.worker_id": "cefd26c7434e9788292b3b658e2199922d62acc04c8b412a2f19401e", + "runtime-id": "23819cd2e39e49e3a849b1058bd82fb3", + "span.kind": "consumer", + "traceparent": "00-68b58fc00000000056a1a5cacac15331-288e418e749b70c7-00", + "tracestate": "dd=p:288e418e749b70c7;s:0" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 1759 + }, + "duration": 39958, + "start": 1756729287498648090 + }, + { + "name": "__main__.compute_value.remote()", + "service": "raysubmit_feABH49FUBBv6b6Z", + "resource": "__main__.compute_value.remote()", + "trace_id": 0, + "span_id": 20, + "parent_id": 17, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "component": "ray", + "ray.job_id": "02000000", + "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", + "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", + "ray.task.submit_status": "success", + "ray.task_id": "6bb09a1695859dc7ffffffffffffffffffffffff02000000", + "ray.worker_id": "a7088869a3b32dae41da13092f1871824b2e65ab91d3eb7816024945", + "span.kind": "producer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 85625, + "start": 1756729284955382005 + }, + { + "name": "__main__.compute_value", + "service": "raysubmit_feABH49FUBBv6b6Z", + "resource": "__main__.compute_value", + "trace_id": 0, + "span_id": 23, + "parent_id": 20, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "_dd.p.tid": "68b58fc000000000", + "_dd.parent_id": "232ed275d1ca8528", + "component": "ray", + "language": "python", + "ray.job_id": "02000000", + "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", + "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", + "ray.task.status": "success", + "ray.task_id": "1b6acdb6e8336fbdffffffffffffffffffffffff02000000", + "ray.worker_id": "cefd26c7434e9788292b3b658e2199922d62acc04c8b412a2f19401e", + "runtime-id": "23819cd2e39e49e3a849b1058bd82fb3", + "span.kind": "consumer", + "traceparent": "00-68b58fc00000000056a1a5cacac15331-232ed275d1ca8528-00", + "tracestate": "dd=p:232ed275d1ca8528;s:0" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 1759 + }, + "duration": 35125, + "start": 1756729287500968048 + }, + { + "name": "ComputationManager.add_result", + "service": "raysubmit_feABH49FUBBv6b6Z", + "resource": "ComputationManager.add_result", + "trace_id": 0, + "span_id": 12, + "parent_id": 9, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "component": "ray", + "ray.actor_id": "cc2d3e05660034df7741de9002000000", + "ray.job_id": "02000000", + "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", + "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", + "ray.task_id": "e082c90ab8422b00cc2d3e05660034df7741de9002000000", + "ray.worker_id": "57b030d1f12a0ff8b8d33fdc431da5eedc0f9563fccc82b18870e687", + "span.kind": "consumer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 51833, + "start": 1756729287505889798 + }, + { + "name": "ComputationManager.add_result", + "service": "raysubmit_feABH49FUBBv6b6Z", + "resource": "ComputationManager.add_result", + "trace_id": 0, + "span_id": 13, + "parent_id": 9, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "component": "ray", + "ray.actor_id": "cc2d3e05660034df7741de9002000000", + "ray.job_id": "02000000", + "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", + "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", + "ray.task_id": "e082c90ab8422b00cc2d3e05660034df7741de9002000000", + "ray.worker_id": "57b030d1f12a0ff8b8d33fdc431da5eedc0f9563fccc82b18870e687", + "span.kind": "consumer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 14583, + "start": 1756729287505955173 + }, + { + "name": "ComputationManager.add_result", + "service": "raysubmit_feABH49FUBBv6b6Z", + "resource": "ComputationManager.add_result", + "trace_id": 0, + "span_id": 14, + "parent_id": 9, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "component": "ray", + "ray.actor_id": "cc2d3e05660034df7741de9002000000", + "ray.job_id": "02000000", + "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", + "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", + "ray.task_id": "e082c90ab8422b00cc2d3e05660034df7741de9002000000", + "ray.worker_id": "57b030d1f12a0ff8b8d33fdc431da5eedc0f9563fccc82b18870e687", + "span.kind": "consumer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 10209, + "start": 1756729287505977881 + }, + { + "name": "ComputationManager.get_count", + "service": "raysubmit_feABH49FUBBv6b6Z", + "resource": "ComputationManager.get_count", + "trace_id": 0, + "span_id": 15, + "parent_id": 9, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "component": "ray", + "ray.actor_id": "cc2d3e05660034df7741de9002000000", + "ray.job_id": "02000000", + "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", + "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", + "ray.task_id": "e082c90ab8422b00cc2d3e05660034df7741de9002000000", + "ray.worker_id": "57b030d1f12a0ff8b8d33fdc431da5eedc0f9563fccc82b18870e687", + "span.kind": "consumer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 9750, + "start": 1756729287505995131 + }, + { + "name": "ComputationManager.get_results", + "service": "raysubmit_feABH49FUBBv6b6Z", + "resource": "ComputationManager.get_results", + "trace_id": 0, + "span_id": 16, + "parent_id": 9, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "component": "ray", + "ray.actor_id": "cc2d3e05660034df7741de9002000000", + "ray.job_id": "02000000", + "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", + "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", + "ray.task_id": "e082c90ab8422b00cc2d3e05660034df7741de9002000000", + "ray.worker_id": "57b030d1f12a0ff8b8d33fdc431da5eedc0f9563fccc82b18870e687", + "span.kind": "consumer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 9166, + "start": 1756729287506011715 + }]] diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_actor_interactions.json b/tests/snapshots/tests.contrib.ray.test_ray.test_actor_interactions.json new file mode 100644 index 00000000000..e7ee022e730 --- /dev/null +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_actor_interactions.json @@ -0,0 +1,496 @@ +[[ + { + "name": "ray.job", + "service": "raysubmit_v8L3EqcW9erRzxGW", + "resource": "ray.job", + "trace_id": 0, + "span_id": 1, + "parent_id": 0, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray.dashboard", + "_dd.p.dm": "-0", + "_dd.p.tid": "68b58feb00000000", + "component": "ray", + "language": "python", + "ray.job.message": "Job finished successfully.", + "ray.job.status": "SUCCEEDED", + "runtime-id": "9998641a0ed34e48b4ebdddf67f79bfe" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 2468 + }, + "duration": 6253139670, + "start": 1756729323352897759 + }, + { + "name": "ray.job.submit", + "service": "raysubmit_v8L3EqcW9erRzxGW", + "resource": "ray.job.submit", + "trace_id": 0, + "span_id": 2, + "parent_id": 1, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray.dashboard", + "component": "ray", + "ray.job.submit_status": "success", + "span.kind": "producer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 45125, + "start": 1756729323352936217 + }, + { + "name": "JobSupervisor.run.remote()", + "service": "raysubmit_v8L3EqcW9erRzxGW", + "resource": "JobSupervisor.run.remote()", + "trace_id": 0, + "span_id": 3, + "parent_id": 1, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray.dashboard", + "component": "ray", + "ray.job_id": "01000000", + "ray.node_id": "7840b4b48c2d6b1537c2b0379c7348d09ec38817a84228ee8b2b30b0", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "span.kind": "producer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 268458, + "start": 1756729323376040176 + }, + { + "name": "JobSupervisor.run", + "service": "raysubmit_v8L3EqcW9erRzxGW", + "resource": "JobSupervisor.run", + "trace_id": 0, + "span_id": 4, + "parent_id": 3, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "_dd.p.tid": "68b58feb00000000", + "_dd.parent_id": "cc24e42614bc5dd9", + "component": "ray", + "language": "python", + "ray.actor_id": "b822e7052eba16263ac2fa7801000000", + "ray.job_id": "01000000", + "ray.node_id": "7840b4b48c2d6b1537c2b0379c7348d09ec38817a84228ee8b2b30b0", + "ray.submission_id": "raysubmit_v8L3EqcW9erRzxGW", + "ray.task_id": "16310a0f0a45af5cb822e7052eba16263ac2fa7801000000", + "ray.worker_id": "ebdde1e37544f22fc46c0c7c613d9bd82c05d9444ca22ef0c2d65643", + "runtime-id": "99809e602df64296bb2105e26034aff9", + "span.kind": "consumer", + "traceparent": "00-68b58feb0000000034f0f56e60474e29-cc24e42614bc5dd9-00", + "tracestate": "dd=p:cc24e42614bc5dd9" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 2924 + }, + "duration": 4148490294, + "start": 1756729324588411843 + }, + { + "name": "JobSupervisor._get_driver_env_vars", + "service": "raysubmit_v8L3EqcW9erRzxGW", + "resource": "JobSupervisor._get_driver_env_vars", + "trace_id": 0, + "span_id": 5, + "parent_id": 4, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "component": "ray", + "ray.actor_id": "b822e7052eba16263ac2fa7801000000", + "ray.job_id": "01000000", + "ray.node_id": "7840b4b48c2d6b1537c2b0379c7348d09ec38817a84228ee8b2b30b0", + "ray.submission_id": "raysubmit_v8L3EqcW9erRzxGW", + "ray.task_id": "16310a0f0a45af5cb822e7052eba16263ac2fa7801000000", + "ray.worker_id": "ebdde1e37544f22fc46c0c7c613d9bd82c05d9444ca22ef0c2d65643", + "span.kind": "consumer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 2224792, + "start": 1756729324589832926 + }, + { + "name": "JobSupervisor._get_driver_runtime_env", + "service": "raysubmit_v8L3EqcW9erRzxGW", + "resource": "JobSupervisor._get_driver_runtime_env", + "trace_id": 0, + "span_id": 10, + "parent_id": 5, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "component": "ray", + "ray.actor_id": "b822e7052eba16263ac2fa7801000000", + "ray.job_id": "01000000", + "ray.node_id": "7840b4b48c2d6b1537c2b0379c7348d09ec38817a84228ee8b2b30b0", + "ray.submission_id": "raysubmit_v8L3EqcW9erRzxGW", + "ray.task_id": "16310a0f0a45af5cb822e7052eba16263ac2fa7801000000", + "ray.worker_id": "ebdde1e37544f22fc46c0c7c613d9bd82c05d9444ca22ef0c2d65643", + "span.kind": "consumer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 44083, + "start": 1756729324591987718 + }, + { + "name": "JobSupervisor._exec_entrypoint", + "service": "raysubmit_v8L3EqcW9erRzxGW", + "resource": "JobSupervisor._exec_entrypoint", + "trace_id": 0, + "span_id": 6, + "parent_id": 4, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "component": "ray", + "ray.actor_id": "b822e7052eba16263ac2fa7801000000", + "ray.job_id": "01000000", + "ray.node_id": "7840b4b48c2d6b1537c2b0379c7348d09ec38817a84228ee8b2b30b0", + "ray.submission_id": "raysubmit_v8L3EqcW9erRzxGW", + "ray.task_id": "16310a0f0a45af5cb822e7052eba16263ac2fa7801000000", + "ray.worker_id": "ebdde1e37544f22fc46c0c7c613d9bd82c05d9444ca22ef0c2d65643", + "span.kind": "consumer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 426583, + "start": 1756729324592217260 + }, + { + "name": "Sender.send_message.remote()", + "service": "raysubmit_v8L3EqcW9erRzxGW", + "resource": "Sender.send_message.remote()", + "trace_id": 0, + "span_id": 7, + "parent_id": 4, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "project", + "_dd.p.tid": "68b58feb00000000", + "_dd.parent_id": "15c6b200c27c503b", + "component": "ray", + "language": "python", + "ray.job_id": "02000000", + "ray.node_id": "7840b4b48c2d6b1537c2b0379c7348d09ec38817a84228ee8b2b30b0", + "ray.submission_id": "raysubmit_v8L3EqcW9erRzxGW", + "ray.worker_id": "02000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "3e3da2f48c704bd4a54792614f5e25c9", + "span.kind": "producer", + "traceparent": "00-68b58feb0000000034f0f56e60474e29-15c6b200c27c503b-00", + "tracestate": "dd=p:15c6b200c27c503b;s:0" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 2996 + }, + "duration": 450583, + "start": 1756729325295333885 + }, + { + "name": "Sender.send_message", + "service": "raysubmit_v8L3EqcW9erRzxGW", + "resource": "Sender.send_message", + "trace_id": 0, + "span_id": 11, + "parent_id": 7, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "_dd.p.tid": "68b58feb00000000", + "_dd.parent_id": "d0b1b61768211276", + "component": "ray", + "language": "python", + "ray.actor_id": "aa840e6a94066bbaca0aa57d02000000", + "ray.job_id": "02000000", + "ray.node_id": "7840b4b48c2d6b1537c2b0379c7348d09ec38817a84228ee8b2b30b0", + "ray.submission_id": "raysubmit_v8L3EqcW9erRzxGW", + "ray.task_id": "e5cbd90b7f1fb776aa840e6a94066bbaca0aa57d02000000", + "ray.worker_id": "a557079064342ed78061798b93a3c12762d8c73833dbe031a013d9c7", + "runtime-id": "f217ae5b906a47fda507c5202a03604c", + "span.kind": "consumer", + "traceparent": "00-68b58feb0000000034f0f56e60474e29-d0b1b61768211276-00", + "tracestate": "dd=p:d0b1b61768211276;s:0" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 3043 + }, + "duration": 23978792, + "start": 1756729327514702219 + }, + { + "name": "Receiver.receive_message.remote()", + "service": "raysubmit_v8L3EqcW9erRzxGW", + "resource": "Receiver.receive_message.remote()", + "trace_id": 0, + "span_id": 14, + "parent_id": 11, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "component": "ray", + "ray.actor_id": "aa840e6a94066bbaca0aa57d02000000", + "ray.job_id": "02000000", + "ray.node_id": "7840b4b48c2d6b1537c2b0379c7348d09ec38817a84228ee8b2b30b0", + "ray.submission_id": "raysubmit_v8L3EqcW9erRzxGW", + "ray.task_id": "e5cbd90b7f1fb776aa840e6a94066bbaca0aa57d02000000", + "ray.worker_id": "a557079064342ed78061798b93a3c12762d8c73833dbe031a013d9c7", + "span.kind": "producer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 257083, + "start": 1756729327514785761 + }, + { + "name": "Receiver.receive_message", + "service": "raysubmit_v8L3EqcW9erRzxGW", + "resource": "Receiver.receive_message", + "trace_id": 0, + "span_id": 15, + "parent_id": 14, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "_dd.p.tid": "68b58feb00000000", + "_dd.parent_id": "0b9561d0123edecc", + "component": "ray", + "language": "python", + "ray.actor_id": "d0dcfa9150371f486ed90c7702000000", + "ray.job_id": "02000000", + "ray.node_id": "7840b4b48c2d6b1537c2b0379c7348d09ec38817a84228ee8b2b30b0", + "ray.submission_id": "raysubmit_v8L3EqcW9erRzxGW", + "ray.task_id": "e8f872f306d3354ed0dcfa9150371f486ed90c7702000000", + "ray.worker_id": "96ca717f98d1640af99a1696cd947cb0a8a8925da2f6787a2695a0cb", + "runtime-id": "d68896938a2249d2a38323276ebab19d", + "span.kind": "consumer", + "traceparent": "00-68b58feb0000000034f0f56e60474e29-0b9561d0123edecc-00", + "tracestate": "dd=p:0b9561d0123edecc;s:0" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 3044 + }, + "duration": 50667, + "start": 1756729327536149594 + }, + { + "name": "Sender.get_sent_count.remote()", + "service": "raysubmit_v8L3EqcW9erRzxGW", + "resource": "Sender.get_sent_count.remote()", + "trace_id": 0, + "span_id": 8, + "parent_id": 4, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "project", + "_dd.p.tid": "68b58feb00000000", + "_dd.parent_id": "15c6b200c27c503b", + "component": "ray", + "language": "python", + "ray.job_id": "02000000", + "ray.node_id": "7840b4b48c2d6b1537c2b0379c7348d09ec38817a84228ee8b2b30b0", + "ray.submission_id": "raysubmit_v8L3EqcW9erRzxGW", + "ray.worker_id": "02000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "3e3da2f48c704bd4a54792614f5e25c9", + "span.kind": "producer", + "traceparent": "00-68b58feb0000000034f0f56e60474e29-15c6b200c27c503b-00", + "tracestate": "dd=p:15c6b200c27c503b;s:0" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 2996 + }, + "duration": 166500, + "start": 1756729327541872636 + }, + { + "name": "Sender.get_sent_count", + "service": "raysubmit_v8L3EqcW9erRzxGW", + "resource": "Sender.get_sent_count", + "trace_id": 0, + "span_id": 12, + "parent_id": 8, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "_dd.p.tid": "68b58feb00000000", + "_dd.parent_id": "04f4f049ba5c3ba5", + "component": "ray", + "language": "python", + "ray.actor_id": "aa840e6a94066bbaca0aa57d02000000", + "ray.job_id": "02000000", + "ray.node_id": "7840b4b48c2d6b1537c2b0379c7348d09ec38817a84228ee8b2b30b0", + "ray.submission_id": "raysubmit_v8L3EqcW9erRzxGW", + "ray.task_id": "39088be3736e590aaa840e6a94066bbaca0aa57d02000000", + "ray.worker_id": "a557079064342ed78061798b93a3c12762d8c73833dbe031a013d9c7", + "runtime-id": "f217ae5b906a47fda507c5202a03604c", + "span.kind": "consumer", + "traceparent": "00-68b58feb0000000034f0f56e60474e29-04f4f049ba5c3ba5-00", + "tracestate": "dd=p:04f4f049ba5c3ba5;s:0" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 3043 + }, + "duration": 24834, + "start": 1756729327542377094 + }, + { + "name": "Receiver.get_messages.remote()", + "service": "raysubmit_v8L3EqcW9erRzxGW", + "resource": "Receiver.get_messages.remote()", + "trace_id": 0, + "span_id": 9, + "parent_id": 4, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "project", + "_dd.p.tid": "68b58feb00000000", + "_dd.parent_id": "15c6b200c27c503b", + "component": "ray", + "language": "python", + "ray.job_id": "02000000", + "ray.node_id": "7840b4b48c2d6b1537c2b0379c7348d09ec38817a84228ee8b2b30b0", + "ray.submission_id": "raysubmit_v8L3EqcW9erRzxGW", + "ray.worker_id": "02000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "3e3da2f48c704bd4a54792614f5e25c9", + "span.kind": "producer", + "traceparent": "00-68b58feb0000000034f0f56e60474e29-15c6b200c27c503b-00", + "tracestate": "dd=p:15c6b200c27c503b;s:0" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 2996 + }, + "duration": 165292, + "start": 1756729327543638969 + }, + { + "name": "Receiver.get_messages", + "service": "raysubmit_v8L3EqcW9erRzxGW", + "resource": "Receiver.get_messages", + "trace_id": 0, + "span_id": 13, + "parent_id": 9, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "_dd.p.tid": "68b58feb00000000", + "_dd.parent_id": "03e0348ae1c6ebe5", + "component": "ray", + "language": "python", + "ray.actor_id": "d0dcfa9150371f486ed90c7702000000", + "ray.job_id": "02000000", + "ray.node_id": "7840b4b48c2d6b1537c2b0379c7348d09ec38817a84228ee8b2b30b0", + "ray.submission_id": "raysubmit_v8L3EqcW9erRzxGW", + "ray.task_id": "ce868e48e2fa9a94d0dcfa9150371f486ed90c7702000000", + "ray.worker_id": "96ca717f98d1640af99a1696cd947cb0a8a8925da2f6787a2695a0cb", + "runtime-id": "d68896938a2249d2a38323276ebab19d", + "span.kind": "consumer", + "traceparent": "00-68b58feb0000000034f0f56e60474e29-03e0348ae1c6ebe5-00", + "tracestate": "dd=p:03e0348ae1c6ebe5;s:0" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 3044 + }, + "duration": 31583, + "start": 1756729327544977136 + }]] diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_nested_tasks.json b/tests/snapshots/tests.contrib.ray.test_ray.test_nested_tasks.json new file mode 100644 index 00000000000..e27f15187ac --- /dev/null +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_nested_tasks.json @@ -0,0 +1,483 @@ +[[ + { + "name": "ray.job", + "service": "raysubmit_vzEvzpvWGrv77TEF", + "resource": "ray.job", + "trace_id": 0, + "span_id": 1, + "parent_id": 0, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray.dashboard", + "_dd.p.dm": "-0", + "_dd.p.tid": "68b5908800000000", + "component": "ray", + "language": "python", + "ray.job.message": "Job finished successfully.", + "ray.job.status": "SUCCEEDED", + "runtime-id": "e7ff0c81dde4496a9040f3ae32ef1f31" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 1081 + }, + "duration": 7303723947, + "start": 1756729480279546846 + }, + { + "name": "ray.job.submit", + "service": "raysubmit_vzEvzpvWGrv77TEF", + "resource": "ray.job.submit", + "trace_id": 0, + "span_id": 2, + "parent_id": 1, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray.dashboard", + "component": "ray", + "ray.job.submit_status": "success", + "span.kind": "producer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 29750, + "start": 1756729480279572971 + }, + { + "name": "JobSupervisor.run.remote()", + "service": "raysubmit_vzEvzpvWGrv77TEF", + "resource": "JobSupervisor.run.remote()", + "trace_id": 0, + "span_id": 3, + "parent_id": 1, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray.dashboard", + "component": "ray", + "ray.job_id": "01000000", + "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "span.kind": "producer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 354750, + "start": 1756729480283293012 + }, + { + "name": "JobSupervisor.run", + "service": "raysubmit_vzEvzpvWGrv77TEF", + "resource": "JobSupervisor.run", + "trace_id": 0, + "span_id": 4, + "parent_id": 3, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "_dd.p.tid": "68b5908800000000", + "_dd.parent_id": "5d33aea2e05d3920", + "component": "ray", + "language": "python", + "ray.actor_id": "bd21f035aac9184f427cfc9201000000", + "ray.job_id": "01000000", + "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", + "ray.submission_id": "raysubmit_vzEvzpvWGrv77TEF", + "ray.task_id": "a631fe8d231813bfbd21f035aac9184f427cfc9201000000", + "ray.worker_id": "47b3883aeba6836eed27697981eb9d12a4b77415c4d44da20dea2044", + "runtime-id": "75bb7f4ab27f4714afc6c34845290527", + "span.kind": "consumer", + "traceparent": "00-68b590880000000006cd992d03686244-5d33aea2e05d3920-00", + "tracestate": "dd=p:5d33aea2e05d3920" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 2474 + }, + "duration": 5770128780, + "start": 1756729481556677513 + }, + { + "name": "JobSupervisor._get_driver_env_vars", + "service": "raysubmit_vzEvzpvWGrv77TEF", + "resource": "JobSupervisor._get_driver_env_vars", + "trace_id": 0, + "span_id": 5, + "parent_id": 4, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "component": "ray", + "ray.actor_id": "bd21f035aac9184f427cfc9201000000", + "ray.job_id": "01000000", + "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", + "ray.submission_id": "raysubmit_vzEvzpvWGrv77TEF", + "ray.task_id": "a631fe8d231813bfbd21f035aac9184f427cfc9201000000", + "ray.worker_id": "47b3883aeba6836eed27697981eb9d12a4b77415c4d44da20dea2044", + "span.kind": "consumer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 1377875, + "start": 1756729481557918846 + }, + { + "name": "JobSupervisor._get_driver_runtime_env", + "service": "raysubmit_vzEvzpvWGrv77TEF", + "resource": "JobSupervisor._get_driver_runtime_env", + "trace_id": 0, + "span_id": 8, + "parent_id": 5, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "component": "ray", + "ray.actor_id": "bd21f035aac9184f427cfc9201000000", + "ray.job_id": "01000000", + "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", + "ray.submission_id": "raysubmit_vzEvzpvWGrv77TEF", + "ray.task_id": "a631fe8d231813bfbd21f035aac9184f427cfc9201000000", + "ray.worker_id": "47b3883aeba6836eed27697981eb9d12a4b77415c4d44da20dea2044", + "span.kind": "consumer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 36791, + "start": 1756729481559240305 + }, + { + "name": "JobSupervisor._exec_entrypoint", + "service": "raysubmit_vzEvzpvWGrv77TEF", + "resource": "JobSupervisor._exec_entrypoint", + "trace_id": 0, + "span_id": 6, + "parent_id": 4, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "component": "ray", + "ray.actor_id": "bd21f035aac9184f427cfc9201000000", + "ray.job_id": "01000000", + "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", + "ray.submission_id": "raysubmit_vzEvzpvWGrv77TEF", + "ray.task_id": "a631fe8d231813bfbd21f035aac9184f427cfc9201000000", + "ray.worker_id": "47b3883aeba6836eed27697981eb9d12a4b77415c4d44da20dea2044", + "span.kind": "consumer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 408417, + "start": 1756729481559441013 + }, + { + "name": "__main__.submit_addition_task.remote()", + "service": "raysubmit_vzEvzpvWGrv77TEF", + "resource": "__main__.submit_addition_task.remote()", + "trace_id": 0, + "span_id": 7, + "parent_id": 4, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "project", + "_dd.p.tid": "68b5908800000000", + "_dd.parent_id": "a276f11e487e249b", + "component": "ray", + "language": "python", + "ray.job_id": "05000000", + "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", + "ray.submission_id": "raysubmit_vzEvzpvWGrv77TEF", + "ray.task.submit_status": "success", + "ray.worker_id": "05000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "6bda8eabd24d438aa3fbe259f8053ad7", + "span.kind": "producer", + "traceparent": "00-68b590880000000006cd992d03686244-a276f11e487e249b-00", + "tracestate": "dd=p:a276f11e487e249b;s:0" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 2525 + }, + "duration": 3496292, + "start": 1756729482161335388 + }, + { + "name": "__main__.submit_addition_task", + "service": "raysubmit_vzEvzpvWGrv77TEF", + "resource": "__main__.submit_addition_task", + "trace_id": 0, + "span_id": 9, + "parent_id": 7, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "_dd.p.tid": "68b5908800000000", + "_dd.parent_id": "18d43c014a18a4b1", + "component": "ray", + "language": "python", + "ray.job_id": "05000000", + "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", + "ray.submission_id": "raysubmit_vzEvzpvWGrv77TEF", + "ray.task.status": "success", + "ray.task_id": "3ca0590f168eaec5ffffffffffffffffffffffff05000000", + "ray.worker_id": "896fad88ba5ce695402f2b4bc3d1ee86a6abc913a80782b8e6ef1b29", + "runtime-id": "25e058a23d6b4624bdf7055ed9516ccc", + "span.kind": "consumer", + "traceparent": "00-68b590880000000006cd992d03686244-18d43c014a18a4b1-00", + "tracestate": "dd=p:18d43c014a18a4b1;s:0" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 2571 + }, + "duration": 2575534418, + "start": 1756729483391940125 + }, + { + "name": "__main__.add_one.remote()", + "service": "raysubmit_vzEvzpvWGrv77TEF", + "resource": "__main__.add_one.remote()", + "trace_id": 0, + "span_id": 10, + "parent_id": 9, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "component": "ray", + "ray.job_id": "05000000", + "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", + "ray.submission_id": "raysubmit_vzEvzpvWGrv77TEF", + "ray.task.submit_status": "success", + "ray.task_id": "3ca0590f168eaec5ffffffffffffffffffffffff05000000", + "ray.worker_id": "896fad88ba5ce695402f2b4bc3d1ee86a6abc913a80782b8e6ef1b29", + "span.kind": "producer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 1262167, + "start": 1756729483392009833 + }, + { + "name": "__main__.add_one", + "service": "raysubmit_vzEvzpvWGrv77TEF", + "resource": "__main__.add_one", + "trace_id": 0, + "span_id": 13, + "parent_id": 10, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "_dd.p.tid": "68b5908800000000", + "_dd.parent_id": "233a09ebbb815dd4", + "component": "ray", + "language": "python", + "ray.job_id": "05000000", + "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", + "ray.submission_id": "raysubmit_vzEvzpvWGrv77TEF", + "ray.task.status": "success", + "ray.task_id": "079c89e8658fa36bffffffffffffffffffffffff05000000", + "ray.worker_id": "c80a2c244685c5374a763a51bcb8d09feba92e07190df281cfc5a8d2", + "runtime-id": "1c5a3b7a77b04d6ea60968d78fd3f29d", + "span.kind": "consumer", + "traceparent": "00-68b590880000000006cd992d03686244-233a09ebbb815dd4-00", + "tracestate": "dd=p:233a09ebbb815dd4;s:0" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 2617 + }, + "duration": 54500, + "start": 1756729485953642209 + }, + { + "name": "__main__.add_one.remote()", + "service": "raysubmit_vzEvzpvWGrv77TEF", + "resource": "__main__.add_one.remote()", + "trace_id": 0, + "span_id": 11, + "parent_id": 9, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "component": "ray", + "ray.job_id": "05000000", + "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", + "ray.submission_id": "raysubmit_vzEvzpvWGrv77TEF", + "ray.task.submit_status": "success", + "ray.task_id": "3ca0590f168eaec5ffffffffffffffffffffffff05000000", + "ray.worker_id": "896fad88ba5ce695402f2b4bc3d1ee86a6abc913a80782b8e6ef1b29", + "span.kind": "producer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 120833, + "start": 1756729483393298125 + }, + { + "name": "__main__.add_one", + "service": "raysubmit_vzEvzpvWGrv77TEF", + "resource": "__main__.add_one", + "trace_id": 0, + "span_id": 14, + "parent_id": 11, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "_dd.p.tid": "68b5908800000000", + "_dd.parent_id": "ddb6344e2db75468", + "component": "ray", + "language": "python", + "ray.job_id": "05000000", + "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", + "ray.submission_id": "raysubmit_vzEvzpvWGrv77TEF", + "ray.task.status": "success", + "ray.task_id": "cc483212b2c8f53effffffffffffffffffffffff05000000", + "ray.worker_id": "c80a2c244685c5374a763a51bcb8d09feba92e07190df281cfc5a8d2", + "runtime-id": "1c5a3b7a77b04d6ea60968d78fd3f29d", + "span.kind": "consumer", + "traceparent": "00-68b590880000000006cd992d03686244-ddb6344e2db75468-00", + "tracestate": "dd=p:ddb6344e2db75468;s:0" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 2617 + }, + "duration": 51750, + "start": 1756729485961482043 + }, + { + "name": "__main__.add_one.remote()", + "service": "raysubmit_vzEvzpvWGrv77TEF", + "resource": "__main__.add_one.remote()", + "trace_id": 0, + "span_id": 12, + "parent_id": 9, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "component": "ray", + "ray.job_id": "05000000", + "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", + "ray.submission_id": "raysubmit_vzEvzpvWGrv77TEF", + "ray.task.submit_status": "success", + "ray.task_id": "3ca0590f168eaec5ffffffffffffffffffffffff05000000", + "ray.worker_id": "896fad88ba5ce695402f2b4bc3d1ee86a6abc913a80782b8e6ef1b29", + "span.kind": "producer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 82167, + "start": 1756729483393433583 + }, + { + "name": "__main__.add_one", + "service": "raysubmit_vzEvzpvWGrv77TEF", + "resource": "__main__.add_one", + "trace_id": 0, + "span_id": 15, + "parent_id": 12, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "_dd.p.tid": "68b5908800000000", + "_dd.parent_id": "7bb54fb02935e125", + "component": "ray", + "language": "python", + "ray.job_id": "05000000", + "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", + "ray.submission_id": "raysubmit_vzEvzpvWGrv77TEF", + "ray.task.status": "success", + "ray.task_id": "abe71a0435f88aceffffffffffffffffffffffff05000000", + "ray.worker_id": "c80a2c244685c5374a763a51bcb8d09feba92e07190df281cfc5a8d2", + "runtime-id": "1c5a3b7a77b04d6ea60968d78fd3f29d", + "span.kind": "consumer", + "traceparent": "00-68b590880000000006cd992d03686244-7bb54fb02935e125-00", + "tracestate": "dd=p:7bb54fb02935e125;s:0" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 2617 + }, + "duration": 30292, + "start": 1756729485965384084 + }]] diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_actor.json b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_actor.json new file mode 100644 index 00000000000..92a8e5c0dbc --- /dev/null +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_actor.json @@ -0,0 +1,368 @@ +[[ + { + "name": "ray.job", + "service": "raysubmit_SY5mq7sjKJMawisp", + "resource": "ray.job", + "trace_id": 0, + "span_id": 1, + "parent_id": 0, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray.dashboard", + "_dd.p.dm": "-0", + "_dd.p.tid": "68b5909300000000", + "component": "ray", + "language": "python", + "ray.job.message": "Job finished successfully.", + "ray.job.status": "SUCCEEDED", + "runtime-id": "e7ff0c81dde4496a9040f3ae32ef1f31" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 1081 + }, + "duration": 5256629711, + "start": 1756729491902125795 + }, + { + "name": "ray.job.submit", + "service": "raysubmit_SY5mq7sjKJMawisp", + "resource": "ray.job.submit", + "trace_id": 0, + "span_id": 2, + "parent_id": 1, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray.dashboard", + "component": "ray", + "ray.job.submit_status": "success", + "span.kind": "producer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 28375, + "start": 1756729491902152045 + }, + { + "name": "JobSupervisor.run.remote()", + "service": "raysubmit_SY5mq7sjKJMawisp", + "resource": "JobSupervisor.run.remote()", + "trace_id": 0, + "span_id": 3, + "parent_id": 1, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray.dashboard", + "component": "ray", + "ray.job_id": "01000000", + "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "span.kind": "producer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 227250, + "start": 1756729491905908420 + }, + { + "name": "JobSupervisor.run", + "service": "raysubmit_SY5mq7sjKJMawisp", + "resource": "JobSupervisor.run", + "trace_id": 0, + "span_id": 4, + "parent_id": 3, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "_dd.p.tid": "68b5909300000000", + "_dd.parent_id": "0cd7d604790df29b", + "component": "ray", + "language": "python", + "ray.actor_id": "383cf899677e6a26640ad27b01000000", + "ray.job_id": "01000000", + "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", + "ray.submission_id": "raysubmit_SY5mq7sjKJMawisp", + "ray.task_id": "6efb86ef2d286c40383cf899677e6a26640ad27b01000000", + "ray.worker_id": "f8a736515c165068c2eac74b22aa7cbdaad3814ed1cbf9bcaf2ab669", + "runtime-id": "14ec455bd7c142a2b9c2b6d03a7914e0", + "span.kind": "consumer", + "traceparent": "00-68b59093000000006b29c268bce8ba6f-0cd7d604790df29b-00", + "tracestate": "dd=p:0cd7d604790df29b" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 2784 + }, + "duration": 3147145960, + "start": 1756729493133549171 + }, + { + "name": "JobSupervisor._get_driver_env_vars", + "service": "raysubmit_SY5mq7sjKJMawisp", + "resource": "JobSupervisor._get_driver_env_vars", + "trace_id": 0, + "span_id": 5, + "parent_id": 4, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "component": "ray", + "ray.actor_id": "383cf899677e6a26640ad27b01000000", + "ray.job_id": "01000000", + "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", + "ray.submission_id": "raysubmit_SY5mq7sjKJMawisp", + "ray.task_id": "6efb86ef2d286c40383cf899677e6a26640ad27b01000000", + "ray.worker_id": "f8a736515c165068c2eac74b22aa7cbdaad3814ed1cbf9bcaf2ab669", + "span.kind": "consumer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 1449042, + "start": 1756729493134871296 + }, + { + "name": "JobSupervisor._get_driver_runtime_env", + "service": "raysubmit_SY5mq7sjKJMawisp", + "resource": "JobSupervisor._get_driver_runtime_env", + "trace_id": 0, + "span_id": 8, + "parent_id": 5, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "component": "ray", + "ray.actor_id": "383cf899677e6a26640ad27b01000000", + "ray.job_id": "01000000", + "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", + "ray.submission_id": "raysubmit_SY5mq7sjKJMawisp", + "ray.task_id": "6efb86ef2d286c40383cf899677e6a26640ad27b01000000", + "ray.worker_id": "f8a736515c165068c2eac74b22aa7cbdaad3814ed1cbf9bcaf2ab669", + "span.kind": "consumer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 37208, + "start": 1756729493136264838 + }, + { + "name": "JobSupervisor._exec_entrypoint", + "service": "raysubmit_SY5mq7sjKJMawisp", + "resource": "JobSupervisor._exec_entrypoint", + "trace_id": 0, + "span_id": 6, + "parent_id": 4, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "component": "ray", + "ray.actor_id": "383cf899677e6a26640ad27b01000000", + "ray.job_id": "01000000", + "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", + "ray.submission_id": "raysubmit_SY5mq7sjKJMawisp", + "ray.task_id": "6efb86ef2d286c40383cf899677e6a26640ad27b01000000", + "ray.worker_id": "f8a736515c165068c2eac74b22aa7cbdaad3814ed1cbf9bcaf2ab669", + "span.kind": "consumer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 391125, + "start": 1756729493136482046 + }, + { + "name": "Counter.increment_get_and_double.remote()", + "service": "raysubmit_SY5mq7sjKJMawisp", + "resource": "Counter.increment_get_and_double.remote()", + "trace_id": 0, + "span_id": 7, + "parent_id": 4, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "project", + "_dd.p.tid": "68b5909300000000", + "_dd.parent_id": "08940cf647b7c2a1", + "component": "ray", + "language": "python", + "ray.job_id": "06000000", + "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", + "ray.submission_id": "raysubmit_SY5mq7sjKJMawisp", + "ray.worker_id": "06000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "a04c1ab21e6343edacfcfa4c632a6d0e", + "span.kind": "producer", + "traceparent": "00-68b59093000000006b29c268bce8ba6f-08940cf647b7c2a1-00", + "tracestate": "dd=p:08940cf647b7c2a1;s:0" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 2836 + }, + "duration": 289083, + "start": 1756729493753551963 + }, + { + "name": "Counter.increment_get_and_double", + "service": "raysubmit_SY5mq7sjKJMawisp", + "resource": "Counter.increment_get_and_double", + "trace_id": 0, + "span_id": 9, + "parent_id": 7, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "_dd.p.tid": "68b5909300000000", + "_dd.parent_id": "5b3ca016139efd91", + "component": "ray", + "language": "python", + "ray.actor_id": "c6e6959cebc4f9531531a60c06000000", + "ray.job_id": "06000000", + "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", + "ray.submission_id": "raysubmit_SY5mq7sjKJMawisp", + "ray.task_id": "8a2dc005c3f797b8c6e6959cebc4f9531531a60c06000000", + "ray.worker_id": "fc2d64a367bca5d5240b9b5143e211dd6952ca1980b4571365bda316", + "runtime-id": "983b264c584d4868b6fbc2e9dd025b1c", + "span.kind": "consumer", + "traceparent": "00-68b59093000000006b29c268bce8ba6f-5b3ca016139efd91-00", + "tracestate": "dd=p:5b3ca016139efd91;s:0" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 2882 + }, + "duration": 182125, + "start": 1756729494974444963 + }, + { + "name": "Counter.increment_and_get", + "service": "raysubmit_SY5mq7sjKJMawisp", + "resource": "Counter.increment_and_get", + "trace_id": 0, + "span_id": 10, + "parent_id": 9, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "component": "ray", + "ray.actor_id": "c6e6959cebc4f9531531a60c06000000", + "ray.job_id": "06000000", + "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", + "ray.submission_id": "raysubmit_SY5mq7sjKJMawisp", + "ray.task_id": "8a2dc005c3f797b8c6e6959cebc4f9531531a60c06000000", + "ray.worker_id": "fc2d64a367bca5d5240b9b5143e211dd6952ca1980b4571365bda316", + "span.kind": "consumer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 82083, + "start": 1756729494974540630 + }, + { + "name": "Counter.increment", + "service": "raysubmit_SY5mq7sjKJMawisp", + "resource": "Counter.increment", + "trace_id": 0, + "span_id": 11, + "parent_id": 10, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "component": "ray", + "ray.actor_id": "c6e6959cebc4f9531531a60c06000000", + "ray.job_id": "06000000", + "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", + "ray.submission_id": "raysubmit_SY5mq7sjKJMawisp", + "ray.task_id": "8a2dc005c3f797b8c6e6959cebc4f9531531a60c06000000", + "ray.worker_id": "fc2d64a367bca5d5240b9b5143e211dd6952ca1980b4571365bda316", + "span.kind": "consumer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 14833, + "start": 1756729494974571380 + }, + { + "name": "Counter.get_value", + "service": "raysubmit_SY5mq7sjKJMawisp", + "resource": "Counter.get_value", + "trace_id": 0, + "span_id": 12, + "parent_id": 10, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "component": "ray", + "ray.actor_id": "c6e6959cebc4f9531531a60c06000000", + "ray.job_id": "06000000", + "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", + "ray.submission_id": "raysubmit_SY5mq7sjKJMawisp", + "ray.task_id": "8a2dc005c3f797b8c6e6959cebc4f9531531a60c06000000", + "ray.worker_id": "fc2d64a367bca5d5240b9b5143e211dd6952ca1980b4571365bda316", + "span.kind": "consumer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 11708, + "start": 1756729494974604130 + }]] diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_task.json b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_task.json new file mode 100644 index 00000000000..ebf7ce89c03 --- /dev/null +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_task.json @@ -0,0 +1,507 @@ +[[ + { + "name": "ray.job", + "service": "raysubmit_4rD8iKKmsQqFz782", + "resource": "ray.job", + "trace_id": 0, + "span_id": 1, + "parent_id": 0, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray.dashboard", + "_dd.p.dm": "-0", + "_dd.p.tid": "68b5909b00000000", + "component": "ray", + "language": "python", + "ray.job.message": "Job finished successfully.", + "ray.job.status": "SUCCEEDED", + "runtime-id": "e7ff0c81dde4496a9040f3ae32ef1f31" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 1081 + }, + "duration": 7685945712, + "start": 1756729499769824091 + }, + { + "name": "ray.job.submit", + "service": "raysubmit_4rD8iKKmsQqFz782", + "resource": "ray.job.submit", + "trace_id": 0, + "span_id": 2, + "parent_id": 1, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray.dashboard", + "component": "ray", + "ray.job.submit_status": "success", + "span.kind": "producer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 32291, + "start": 1756729499769855841 + }, + { + "name": "JobSupervisor.run.remote()", + "service": "raysubmit_4rD8iKKmsQqFz782", + "resource": "JobSupervisor.run.remote()", + "trace_id": 0, + "span_id": 3, + "parent_id": 1, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray.dashboard", + "component": "ray", + "ray.job_id": "01000000", + "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "span.kind": "producer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 364000, + "start": 1756729499773384549 + }, + { + "name": "JobSupervisor.run", + "service": "raysubmit_4rD8iKKmsQqFz782", + "resource": "JobSupervisor.run", + "trace_id": 0, + "span_id": 4, + "parent_id": 3, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "_dd.p.tid": "68b5909b00000000", + "_dd.parent_id": "154d754d3e20caf9", + "component": "ray", + "language": "python", + "ray.actor_id": "6b1a51793377f266297a6fe201000000", + "ray.job_id": "01000000", + "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", + "ray.submission_id": "raysubmit_4rD8iKKmsQqFz782", + "ray.task_id": "4f4ef6205ce35f906b1a51793377f266297a6fe201000000", + "ray.worker_id": "b8e9d3e47d1444092d5075b8d0ddab6151fdf164d729cad3ab5361f8", + "runtime-id": "8c8299bdbec047ac908652d63356275c", + "span.kind": "consumer", + "traceparent": "00-68b5909b00000000210ff787598ddcc3-154d754d3e20caf9-00", + "tracestate": "dd=p:154d754d3e20caf9" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 2953 + }, + "duration": 5067543294, + "start": 1756729501425235800 + }, + { + "name": "JobSupervisor._get_driver_env_vars", + "service": "raysubmit_4rD8iKKmsQqFz782", + "resource": "JobSupervisor._get_driver_env_vars", + "trace_id": 0, + "span_id": 5, + "parent_id": 4, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "component": "ray", + "ray.actor_id": "6b1a51793377f266297a6fe201000000", + "ray.job_id": "01000000", + "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", + "ray.submission_id": "raysubmit_4rD8iKKmsQqFz782", + "ray.task_id": "4f4ef6205ce35f906b1a51793377f266297a6fe201000000", + "ray.worker_id": "b8e9d3e47d1444092d5075b8d0ddab6151fdf164d729cad3ab5361f8", + "span.kind": "consumer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 1911584, + "start": 1756729501426967383 + }, + { + "name": "JobSupervisor._get_driver_runtime_env", + "service": "raysubmit_4rD8iKKmsQqFz782", + "resource": "JobSupervisor._get_driver_runtime_env", + "trace_id": 0, + "span_id": 11, + "parent_id": 5, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "component": "ray", + "ray.actor_id": "6b1a51793377f266297a6fe201000000", + "ray.job_id": "01000000", + "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", + "ray.submission_id": "raysubmit_4rD8iKKmsQqFz782", + "ray.task_id": "4f4ef6205ce35f906b1a51793377f266297a6fe201000000", + "ray.worker_id": "b8e9d3e47d1444092d5075b8d0ddab6151fdf164d729cad3ab5361f8", + "span.kind": "consumer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 72708, + "start": 1756729501428773592 + }, + { + "name": "JobSupervisor._exec_entrypoint", + "service": "raysubmit_4rD8iKKmsQqFz782", + "resource": "JobSupervisor._exec_entrypoint", + "trace_id": 0, + "span_id": 6, + "parent_id": 4, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "component": "ray", + "ray.actor_id": "6b1a51793377f266297a6fe201000000", + "ray.job_id": "01000000", + "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", + "ray.submission_id": "raysubmit_4rD8iKKmsQqFz782", + "ray.task_id": "4f4ef6205ce35f906b1a51793377f266297a6fe201000000", + "ray.worker_id": "b8e9d3e47d1444092d5075b8d0ddab6151fdf164d729cad3ab5361f8", + "span.kind": "consumer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 485625, + "start": 1756729501429132842 + }, + { + "name": "__main__.add_one.remote()", + "service": "raysubmit_4rD8iKKmsQqFz782", + "resource": "__main__.add_one.remote()", + "trace_id": 0, + "span_id": 7, + "parent_id": 4, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "project", + "_dd.p.tid": "68b5909b00000000", + "_dd.parent_id": "20b8a389cc96ae50", + "component": "ray", + "language": "python", + "ray.job_id": "07000000", + "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", + "ray.submission_id": "raysubmit_4rD8iKKmsQqFz782", + "ray.task.submit_status": "success", + "ray.worker_id": "07000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "f1a07fc627894917bbf5779d69a85ffc", + "span.kind": "producer", + "traceparent": "00-68b5909b00000000210ff787598ddcc3-20b8a389cc96ae50-00", + "tracestate": "dd=p:20b8a389cc96ae50;s:0" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 3004 + }, + "duration": 3530375, + "start": 1756729502076440175 + }, + { + "name": "__main__.add_one", + "service": "raysubmit_4rD8iKKmsQqFz782", + "resource": "__main__.add_one", + "trace_id": 0, + "span_id": 12, + "parent_id": 7, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "_dd.p.tid": "68b5909b00000000", + "_dd.parent_id": "6552cd7f00cecd5e", + "component": "ray", + "language": "python", + "ray.job_id": "07000000", + "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", + "ray.submission_id": "raysubmit_4rD8iKKmsQqFz782", + "ray.task.status": "success", + "ray.task_id": "d2b4e3e4a6f1ddc5ffffffffffffffffffffffff07000000", + "ray.worker_id": "88cb27b2841c23c01fadaa1ddbd0645e9a1bf65f3c974fa81301bbbf", + "runtime-id": "35f089c028684a38b4175bc1e1932786", + "span.kind": "consumer", + "traceparent": "00-68b5909b00000000210ff787598ddcc3-6552cd7f00cecd5e-00", + "tracestate": "dd=p:6552cd7f00cecd5e;s:0" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 3053 + }, + "duration": 65125, + "start": 1756729504978361552 + }, + { + "name": "__main__.add_one.remote()", + "service": "raysubmit_4rD8iKKmsQqFz782", + "resource": "__main__.add_one.remote()", + "trace_id": 0, + "span_id": 8, + "parent_id": 4, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "project", + "_dd.p.tid": "68b5909b00000000", + "_dd.parent_id": "20b8a389cc96ae50", + "component": "ray", + "language": "python", + "ray.job_id": "07000000", + "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", + "ray.submission_id": "raysubmit_4rD8iKKmsQqFz782", + "ray.task.submit_status": "success", + "ray.worker_id": "07000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "f1a07fc627894917bbf5779d69a85ffc", + "span.kind": "producer", + "traceparent": "00-68b5909b00000000210ff787598ddcc3-20b8a389cc96ae50-00", + "tracestate": "dd=p:20b8a389cc96ae50;s:0" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 3004 + }, + "duration": 285750, + "start": 1756729502083167925 + }, + { + "name": "__main__.add_one", + "service": "raysubmit_4rD8iKKmsQqFz782", + "resource": "__main__.add_one", + "trace_id": 0, + "span_id": 13, + "parent_id": 8, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "_dd.p.tid": "68b5909b00000000", + "_dd.parent_id": "be83fce37a376230", + "component": "ray", + "language": "python", + "ray.job_id": "07000000", + "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", + "ray.submission_id": "raysubmit_4rD8iKKmsQqFz782", + "ray.task.status": "success", + "ray.task_id": "11149dae5a34cd9affffffffffffffffffffffff07000000", + "ray.worker_id": "88cb27b2841c23c01fadaa1ddbd0645e9a1bf65f3c974fa81301bbbf", + "runtime-id": "35f089c028684a38b4175bc1e1932786", + "span.kind": "consumer", + "traceparent": "00-68b5909b00000000210ff787598ddcc3-be83fce37a376230-00", + "tracestate": "dd=p:be83fce37a376230;s:0" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 3053 + }, + "duration": 36291, + "start": 1756729504983968802 + }, + { + "name": "__main__.add_one.remote()", + "service": "raysubmit_4rD8iKKmsQqFz782", + "resource": "__main__.add_one.remote()", + "trace_id": 0, + "span_id": 9, + "parent_id": 4, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "project", + "_dd.p.tid": "68b5909b00000000", + "_dd.parent_id": "20b8a389cc96ae50", + "component": "ray", + "language": "python", + "ray.job_id": "07000000", + "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", + "ray.submission_id": "raysubmit_4rD8iKKmsQqFz782", + "ray.task.submit_status": "success", + "ray.worker_id": "07000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "f1a07fc627894917bbf5779d69a85ffc", + "span.kind": "producer", + "traceparent": "00-68b5909b00000000210ff787598ddcc3-20b8a389cc96ae50-00", + "tracestate": "dd=p:20b8a389cc96ae50;s:0" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 3004 + }, + "duration": 187000, + "start": 1756729502085262509 + }, + { + "name": "__main__.add_one", + "service": "raysubmit_4rD8iKKmsQqFz782", + "resource": "__main__.add_one", + "trace_id": 0, + "span_id": 14, + "parent_id": 9, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "_dd.p.tid": "68b5909b00000000", + "_dd.parent_id": "9bfd9ae425f6fb26", + "component": "ray", + "language": "python", + "ray.job_id": "07000000", + "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", + "ray.submission_id": "raysubmit_4rD8iKKmsQqFz782", + "ray.task.status": "success", + "ray.task_id": "a363a5a94a784cb3ffffffffffffffffffffffff07000000", + "ray.worker_id": "5c105ba59d3600193be56aaa1577002674189cfe8bd766017a96675e", + "runtime-id": "5b7239157bad4fc381a8b572043eea4a", + "span.kind": "consumer", + "traceparent": "00-68b5909b00000000210ff787598ddcc3-9bfd9ae425f6fb26-00", + "tracestate": "dd=p:9bfd9ae425f6fb26;s:0" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 3050 + }, + "duration": 61625, + "start": 1756729504989536802 + }, + { + "name": "__main__.add_one.remote()", + "service": "raysubmit_4rD8iKKmsQqFz782", + "resource": "__main__.add_one.remote()", + "trace_id": 0, + "span_id": 10, + "parent_id": 4, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "project", + "_dd.p.tid": "68b5909b00000000", + "_dd.parent_id": "20b8a389cc96ae50", + "component": "ray", + "language": "python", + "ray.job_id": "07000000", + "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", + "ray.submission_id": "raysubmit_4rD8iKKmsQqFz782", + "ray.task.submit_status": "success", + "ray.worker_id": "07000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "f1a07fc627894917bbf5779d69a85ffc", + "span.kind": "producer", + "traceparent": "00-68b5909b00000000210ff787598ddcc3-20b8a389cc96ae50-00", + "tracestate": "dd=p:20b8a389cc96ae50;s:0" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 3004 + }, + "duration": 213750, + "start": 1756729502087049467 + }, + { + "name": "__main__.add_one", + "service": "raysubmit_4rD8iKKmsQqFz782", + "resource": "__main__.add_one", + "trace_id": 0, + "span_id": 15, + "parent_id": 10, + "type": "ml", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "_dd.p.tid": "68b5909b00000000", + "_dd.parent_id": "e8c8298d21b7c696", + "component": "ray", + "language": "python", + "ray.job_id": "07000000", + "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", + "ray.submission_id": "raysubmit_4rD8iKKmsQqFz782", + "ray.task.status": "success", + "ray.task_id": "b6fe777c23eaf580ffffffffffffffffffffffff07000000", + "ray.worker_id": "88cb27b2841c23c01fadaa1ddbd0645e9a1bf65f3c974fa81301bbbf", + "runtime-id": "35f089c028684a38b4175bc1e1932786", + "span.kind": "consumer", + "traceparent": "00-68b5909b00000000210ff787598ddcc3-e8c8298d21b7c696-00", + "tracestate": "dd=p:e8c8298d21b7c696;s:0" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 3053 + }, + "duration": 22250, + "start": 1756729504986921968 + }]] From 09a908e434987c828b18617907a69bbc044c72f7 Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Wed, 3 Sep 2025 13:55:08 +0200 Subject: [PATCH 10/59] fix(ray): better handling of aiohttp and grpc filtering --- ddtrace/_monkey.py | 2 +- ddtrace/contrib/internal/ray/patch.py | 32 +++++++++++++++++++++------ 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/ddtrace/_monkey.py b/ddtrace/_monkey.py index 4fb9d05ae68..41fc6b29ded 100644 --- a/ddtrace/_monkey.py +++ b/ddtrace/_monkey.py @@ -118,7 +118,7 @@ "selenium": True, "valkey": True, "openai_agents": True, - "ray": True, + "ray": False, "protobuf": config._data_streams_enabled, } diff --git a/ddtrace/contrib/internal/ray/patch.py b/ddtrace/contrib/internal/ray/patch.py index 20217dc5bca..4980098f3bd 100644 --- a/ddtrace/contrib/internal/ray/patch.py +++ b/ddtrace/contrib/internal/ray/patch.py @@ -45,12 +45,12 @@ from .utils import _inject_ray_span_tags from .utils import extract_signature - config._add( "ray", dict( _default_service=schematize_service_name("ray"), ray_spans_only=asbool(_get_config("DD_TRACE_RAY_SPANS_ONLY", default=True)), + ray_reduce_noise=asbool(_get_config("DD_TRACE_RAY_REDUCE_NOISE", default=True)), ), ) @@ -87,19 +87,14 @@ def process_trace(self, trace: List[Span]) -> Optional[List[Span]]: if not trace: return trace - processed_trace = [] - ray_spans_only = config.ray.ray_spans_only for span in trace: if span.get_tag("component") == "ray": span.set_metric(_DJM_ENABLED_KEY, 1) span.set_metric(_FILTER_KEPT_KEY, 1) span.set_metric(_SPAN_MEASURED_KEY, 1) span.set_metric(_SAMPLING_PRIORITY_KEY, 2) - processed_trace.append(span) - elif not ray_spans_only: - processed_trace.append(span) - return processed_trace + return trace def _inject_tracing_into_remote_function(function): """Inject trace context parameter into function signature""" @@ -427,6 +422,29 @@ def patch(): ray._datadog_patch = True + # Ray cluster emits a high volume of grpc and aiohttp spans which are not + # actionnable. By default, we deactivate them so we have only the useful spans + if config.ray.ray_reduce_noise: + try: + import aiohttp + from ddtrace.contrib.internal.aiohttp.patch import unpatch as unpatch_aiohttp + if getattr(aiohttp, "_datadog_patch", True): + unpatch_aiohttp() + except ImportError: + pass + finally: + os.environ["DD_TRACE_AIOHTTP_ENABLED"] = "False" + + try: + import grpc + from ddtrace.contrib.internal.grpc.patch import unpatch as unpatch_grpc + if getattr(grpc, "_datadog_patch", True): + unpatch_grpc() + except ImportError: + pass + finally: + os.environ["DD_TRACE_GRPC_ENABLED"] = "False" + tracer._span_aggregator.user_processors.append(RayTraceProcessor()) _w(ray.remote_function.RemoteFunction, "__init__", traced_remote_function_init) From 74cddbaaf4255c1ebcd3ce18eb5bb9b74ae9790c Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Thu, 4 Sep 2025 14:08:10 +0200 Subject: [PATCH 11/59] feat(ray): enable ray with hook and fix missing spans --- ddtrace/_monkey.py | 2 +- ddtrace/contrib/internal/ray/hook.py | 7 ++++ ddtrace/contrib/internal/ray/patch.py | 54 +++++-------------------- ddtrace/contrib/internal/ray/utils.py | 25 ++++++++---- ddtrace/internal/writer/writer.py | 13 ++++-- tests/contrib/ray/jobs/error_in_task.py | 2 + tests/contrib/ray/test_ray.py | 12 +++++- tests/contrib/ray/test_ray_patch.py | 3 -- 8 files changed, 59 insertions(+), 59 deletions(-) create mode 100644 ddtrace/contrib/internal/ray/hook.py diff --git a/ddtrace/_monkey.py b/ddtrace/_monkey.py index 41fc6b29ded..4fb9d05ae68 100644 --- a/ddtrace/_monkey.py +++ b/ddtrace/_monkey.py @@ -118,7 +118,7 @@ "selenium": True, "valkey": True, "openai_agents": True, - "ray": False, + "ray": True, "protobuf": config._data_streams_enabled, } diff --git a/ddtrace/contrib/internal/ray/hook.py b/ddtrace/contrib/internal/ray/hook.py new file mode 100644 index 00000000000..1efbfdff037 --- /dev/null +++ b/ddtrace/contrib/internal/ray/hook.py @@ -0,0 +1,7 @@ +def setup_tracing(): + import ddtrace.auto # noqa:F401 + from ray.util.tracing import tracing_helper + from ray.util.tracing.tracing_helper import _is_tracing_enabled + + tracing_helper._global_is_tracing_enabled = False + assert not _is_tracing_enabled(), "OTEL Tracing should be disabled at setup." diff --git a/ddtrace/contrib/internal/ray/patch.py b/ddtrace/contrib/internal/ray/patch.py index 4980098f3bd..086d9065178 100644 --- a/ddtrace/contrib/internal/ray/patch.py +++ b/ddtrace/contrib/internal/ray/patch.py @@ -3,12 +3,11 @@ import inspect import os import threading -import time from typing import Any from typing import Callable +from typing import Dict from typing import List from typing import Optional -from typing import Dict from wrapt import wrap_function_wrapper as _w @@ -45,15 +44,16 @@ from .utils import _inject_ray_span_tags from .utils import extract_signature + config._add( "ray", dict( _default_service=schematize_service_name("ray"), ray_spans_only=asbool(_get_config("DD_TRACE_RAY_SPANS_ONLY", default=True)), - ray_reduce_noise=asbool(_get_config("DD_TRACE_RAY_REDUCE_NOISE", default=True)), ), ) + def _supported_versions() -> Dict[str, str]: return {"ray": ">=2.46.0"} @@ -61,6 +61,7 @@ def _supported_versions() -> Dict[str, str]: def get_version() -> str: return str(getattr(ray, "__version__", "")) + class _JobSpanManager: def __init__(self): self._spans = {} @@ -87,14 +88,18 @@ def process_trace(self, trace: List[Span]) -> Optional[List[Span]]: if not trace: return trace + filtered_spans = [] for span in trace: + if span.service == "ray.dashboard" and span.get_tag("component") != "ray": + continue if span.get_tag("component") == "ray": span.set_metric(_DJM_ENABLED_KEY, 1) span.set_metric(_FILTER_KEPT_KEY, 1) span.set_metric(_SPAN_MEASURED_KEY, 1) span.set_metric(_SAMPLING_PRIORITY_KEY, 2) + filtered_spans.append(span) + return filtered_spans - return trace def _inject_tracing_into_remote_function(function): """Inject trace context parameter into function signature""" @@ -257,16 +262,6 @@ def traced_actor_method_call(wrapped, instance, args, kwargs): raise e -def flush_worker_spans(wrapped, instance, args, kwargs): - # Ensure the tracer has the time to send spans before - # before the worker is killed - if not tracer: - return wrapped(*args, **kwargs) - - time.sleep(0.5) - return wrapped(*args, **kwargs) - - def job_supervisor_run_wrapper(method: Callable[..., Any]) -> Any: async def _traced_run_method(self: Any, *args: Any, _dd_trace_ctx=None, **kwargs: Any) -> Any: from ddtrace import tracer as dd_tracer @@ -326,7 +321,7 @@ def _traced_method(self: Any, *args: Any, _dd_trace_ctx=None, **kwargs: Any) -> if not tracer or (_dd_trace_ctx is None and tracer.current_span() is None): return method(self, *args, **kwargs) - with _trace_actor_method(self, method, _dd_trace_ctx, **kwargs): + with _trace_actor_method(self, method, _dd_trace_ctx): return method(self, *args, **kwargs) return _traced_method @@ -339,7 +334,7 @@ async def _traced_async_method(self: Any, *args: Any, _dd_trace_ctx=None, **kwar if not tracer or (_dd_trace_ctx is None and tracer.current_span() is None): return await method(self, *args, **kwargs) - with _trace_actor_method(self, method, _dd_trace_ctx, **kwargs): + with _trace_actor_method(self, method, _dd_trace_ctx): return await method(self, *args, **kwargs) return _traced_async_method @@ -422,29 +417,6 @@ def patch(): ray._datadog_patch = True - # Ray cluster emits a high volume of grpc and aiohttp spans which are not - # actionnable. By default, we deactivate them so we have only the useful spans - if config.ray.ray_reduce_noise: - try: - import aiohttp - from ddtrace.contrib.internal.aiohttp.patch import unpatch as unpatch_aiohttp - if getattr(aiohttp, "_datadog_patch", True): - unpatch_aiohttp() - except ImportError: - pass - finally: - os.environ["DD_TRACE_AIOHTTP_ENABLED"] = "False" - - try: - import grpc - from ddtrace.contrib.internal.grpc.patch import unpatch as unpatch_grpc - if getattr(grpc, "_datadog_patch", True): - unpatch_grpc() - except ImportError: - pass - finally: - os.environ["DD_TRACE_GRPC_ENABLED"] = "False" - tracer._span_aggregator.user_processors.append(RayTraceProcessor()) _w(ray.remote_function.RemoteFunction, "__init__", traced_remote_function_init) @@ -456,8 +428,6 @@ def patch(): _w(ray.actor, "_modify_class", inject_tracing_into_actor_class) _w(ray.actor.ActorHandle, "_actor_method_call", traced_actor_method_call) - _w(ray._private.worker, "disconnect", flush_worker_spans) - def unpatch(): if not getattr(ray, "_datadog_patch", False): @@ -477,5 +447,3 @@ def unpatch(): _u(ray.actor, "_modify_class") _u(ray.actor.ActorHandle, "_actor_method_call") - - _u(ray._private.worker, "disconnect") diff --git a/ddtrace/contrib/internal/ray/utils.py b/ddtrace/contrib/internal/ray/utils.py index f03ce59011f..22a9d94064c 100644 --- a/ddtrace/contrib/internal/ray/utils.py +++ b/ddtrace/contrib/internal/ray/utils.py @@ -1,13 +1,25 @@ import inspect +from inspect import Parameter +from inspect import Signature import os -from typing import Callable, Any, List +from typing import Any +from typing import Callable +from typing import List -from inspect import Parameter, Signature from ddtrace.propagation.http import _TraceContext import ray from ray.runtime_context import get_runtime_context +def in_ray_job(): + # type: () -> bool + """Returns whether we are in a ray environemt. + This is accomplished by checking if the _RAY_SUBMISSION_ID environment variable is defined + which means a job has been submitted and is traced + """ + return bool(os.environ.get("_RAY_SUBMISSION_ID", False)) + + def _inject_dd_trace_ctx_kwarg(method: Callable) -> Signature: old_sig = inspect.signature(method) if "_dd_trace_ctx" in old_sig.parameters: @@ -69,6 +81,7 @@ def _inject_ray_span_tags(span): if submission_id is not None: span.set_tag_str("ray.submission_id", submission_id) + # ------------------------------------------------------------------------------------------- # This is extracted from ray code # it allows to ensure compatibility with older versions of ray still maintained (2.46.0) @@ -129,13 +142,13 @@ def extract_signature(func: Any, ignore_first: bool = False) -> List[Parameter]: if ignore_first: if len(signature_parameters) == 0: raise ValueError( - "Methods must take a 'self' argument, but the " - f"method '{func.__name__}' does not have one." + "Methods must take a 'self' argument, but the " f"method '{func.__name__}' does not have one." ) signature_parameters = signature_parameters[1:] return signature_parameters + def is_cython(obj): """Check if an object is a Cython function or method""" @@ -147,6 +160,4 @@ def check_cython(x): return type(x).__name__ == "cython_function_or_method" # Check if function or method, respectively - return check_cython(obj) or ( - hasattr(obj, "__func__") and check_cython(obj.__func__) - ) \ No newline at end of file + return check_cython(obj) or (hasattr(obj, "__func__") and check_cython(obj.__func__)) diff --git a/ddtrace/internal/writer/writer.py b/ddtrace/internal/writer/writer.py index 39af9ea3c75..8bb49fafc9c 100644 --- a/ddtrace/internal/writer/writer.py +++ b/ddtrace/internal/writer/writer.py @@ -15,6 +15,7 @@ import ddtrace from ddtrace import config +from ddtrace.contrib.internal.ray.utils import in_ray_job import ddtrace.internal.native as native from ddtrace.internal.runtime import get_runtime_id import ddtrace.internal.utils.http @@ -1092,16 +1093,22 @@ def _use_sync_mode() -> bool: """Returns, if an `AgentWriter` is to be used, whether it should be run in synchronous mode by default. - There are only two cases in which this is desirable: + There are only three cases in which this is desirable: - AWS Lambdas can have the Datadog agent installed via an extension. When it's available traces must be sent synchronously to ensure all are received before the Lambda terminates. - Google Cloud Functions and Azure Functions have a mini-agent spun up by the tracer. Similarly to AWS Lambdas, sync mode should be used to avoid data loss. + - Ray Job run different processes that can be killed at any time. Traces must be sent + synchronously to ensure all are received before an actor/a worker is killed """ - return True - return (in_aws_lambda() and has_aws_lambda_agent_extension()) or in_gcp_function() or in_azure_function() + return ( + (in_aws_lambda() and has_aws_lambda_agent_extension()) + or in_gcp_function() + or in_azure_function() + or in_ray_job() + ) def create_trace_writer(response_callback: Optional[Callable[[AgentResponse], None]] = None) -> TraceWriter: diff --git a/tests/contrib/ray/jobs/error_in_task.py b/tests/contrib/ray/jobs/error_in_task.py index 37ec24303ee..1cef49bdb5e 100644 --- a/tests/contrib/ray/jobs/error_in_task.py +++ b/tests/contrib/ray/jobs/error_in_task.py @@ -1,7 +1,9 @@ import ray + ray.init() + @ray.remote def add_one(x): raise ValueError("foo") diff --git a/tests/contrib/ray/test_ray.py b/tests/contrib/ray/test_ray.py index a381ecdf8b4..14f5ebbc90a 100644 --- a/tests/contrib/ray/test_ray.py +++ b/tests/contrib/ray/test_ray.py @@ -46,6 +46,7 @@ def submit_ray_job(script_name, timeout=60): "meta.error.message", "meta.ray.job.message", "meta.error.stack", + "meta._dd.base_service", # Service names that include dynamic submission IDs "service", ] @@ -66,7 +67,14 @@ def setUpClass(cls): try: # Start the ray cluster once for all tests subprocess.run( - ["ddtrace-run", "ray", "start", "--head", "--dashboard-host=127.0.0.1", "--port=0"], + [ + "ray", + "start", + "--head", + "--dashboard-host=127.0.0.1", + "--port=0", + "--tracing-startup-hook=ddtrace.contrib.internal.ray.hook:setup_tracing", + ], capture_output=True, text=True, check=True, @@ -89,7 +97,7 @@ def test_simple_task(self): submit_ray_job("jobs/simple_task.py") @pytest.mark.snapshot(token="tests.contrib.ray.test_ray.test_nested_tasks", ignores=RAY_SNAPSHOT_IGNORES) - def test_nested_taskx(self): + def test_nested_tasks(self): submit_ray_job("jobs/nested_tasks.py") @pytest.mark.snapshot(token="tests.contrib.ray.test_ray.test_simple_actor", ignores=RAY_SNAPSHOT_IGNORES) diff --git a/tests/contrib/ray/test_ray_patch.py b/tests/contrib/ray/test_ray_patch.py index ef11dd7726f..39b5238974b 100644 --- a/tests/contrib/ray/test_ray_patch.py +++ b/tests/contrib/ray/test_ray_patch.py @@ -18,7 +18,6 @@ def assert_module_patched(self, ray): self.assert_wrapped(ray.dashboard.modules.job.job_manager.JobManager._monitor_job_internal) self.assert_wrapped(ray.actor._modify_class) self.assert_wrapped(ray.actor.ActorHandle._actor_method_call) - self.assert_wrapped(ray._private.worker.disconnect) def assert_not_module_patched(self, ray): self.assert_not_wrapped(ray.remote_function.RemoteFunction.__init__) @@ -27,7 +26,6 @@ def assert_not_module_patched(self, ray): self.assert_not_wrapped(ray.dashboard.modules.job.job_manager.JobManager._monitor_job_internal) self.assert_not_wrapped(ray.actor._modify_class) self.assert_not_wrapped(ray.actor.ActorHandle._actor_method_call) - self.assert_not_wrapped(ray._private.worker.disconnect) def assert_not_module_double_patched(self, ray): self.assert_not_double_wrapped(ray.remote_function.RemoteFunction.__init__) @@ -36,4 +34,3 @@ def assert_not_module_double_patched(self, ray): self.assert_not_double_wrapped(ray.dashboard.modules.job.job_manager.JobManager._monitor_job_internal) self.assert_not_double_wrapped(ray.actor._modify_class) self.assert_not_double_wrapped(ray.actor.ActorHandle._actor_method_call) - self.assert_not_double_wrapped(ray._private.worker.disconnect) From 78e1f6edf362eba8e5a1e870f18655708ff02545 Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Thu, 4 Sep 2025 14:45:19 +0200 Subject: [PATCH 12/59] fix: ci --- ddtrace/contrib/internal/ray/__init__.py | 9 +++++++++ ddtrace/contrib/internal/ray/utils.py | 10 ---------- ddtrace/internal/writer/writer.py | 2 +- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/ddtrace/contrib/internal/ray/__init__.py b/ddtrace/contrib/internal/ray/__init__.py index e69de29bb2d..2e7839012da 100644 --- a/ddtrace/contrib/internal/ray/__init__.py +++ b/ddtrace/contrib/internal/ray/__init__.py @@ -0,0 +1,9 @@ +import os + +def in_ray_job(): + # type: () -> bool + """Returns whether we are in a ray environemt. + This is accomplished by checking if the _RAY_SUBMISSION_ID environment variable is defined + which means a job has been submitted and is traced + """ + return bool(os.environ.get("_RAY_SUBMISSION_ID", False)) \ No newline at end of file diff --git a/ddtrace/contrib/internal/ray/utils.py b/ddtrace/contrib/internal/ray/utils.py index 22a9d94064c..02480e9a856 100644 --- a/ddtrace/contrib/internal/ray/utils.py +++ b/ddtrace/contrib/internal/ray/utils.py @@ -10,16 +10,6 @@ import ray from ray.runtime_context import get_runtime_context - -def in_ray_job(): - # type: () -> bool - """Returns whether we are in a ray environemt. - This is accomplished by checking if the _RAY_SUBMISSION_ID environment variable is defined - which means a job has been submitted and is traced - """ - return bool(os.environ.get("_RAY_SUBMISSION_ID", False)) - - def _inject_dd_trace_ctx_kwarg(method: Callable) -> Signature: old_sig = inspect.signature(method) if "_dd_trace_ctx" in old_sig.parameters: diff --git a/ddtrace/internal/writer/writer.py b/ddtrace/internal/writer/writer.py index 8bb49fafc9c..4ac6d852264 100644 --- a/ddtrace/internal/writer/writer.py +++ b/ddtrace/internal/writer/writer.py @@ -15,7 +15,7 @@ import ddtrace from ddtrace import config -from ddtrace.contrib.internal.ray.utils import in_ray_job +from ddtrace.contrib.internal.ray import in_ray_job import ddtrace.internal.native as native from ddtrace.internal.runtime import get_runtime_id import ddtrace.internal.utils.http From 0d9380e97966bd4f538c8c94e12095ee9a3330b0 Mon Sep 17 00:00:00 2001 From: Yakov Shapiro Date: Thu, 4 Sep 2025 15:45:25 -0400 Subject: [PATCH 13/59] chore(mlobs): set the span type for Ray spans to ray (#14432) Right now [the DJM intake expects Ray spans](https://github.com/DataDog/logs-backend/blob/79793e12095e033e3998ff6318416c5db0507907/domains/apm/apps/apm-processing/src/main/java/com/dd/logs/processing/processors/track/spans/JobSpansProcessor.java#L28) to have span type `producer` or `consumer`. It used to be `ray.producer` or `ray.consumer`, but after discussing last week we agreed to remove the `ray.` prefix to more closely match the spans produced by Ray's OpenTelemetry instrumentation. Our Ray integration [currently produces spans of three types](https://dd.datad0g.com/internal/events-ui/queries?group_by=type&index_name=djm-search&query_string=%40component%3Aray&query_type=aggregate&timerange=1755708134662-1756312934662l&track=trace): `serving`, `worker`, and `ml`. In this PR I am making it replace `serving` with `producer`, and `worker` and `ml` with `consumer` for now, just so the DJM intake recognizes that it needs to pick them up. For testing, I [opened this file in my local dd-source](https://github.com/DataDog/dd-source/blob/d67d0dd42507de7ab369761afa1b15e4652bed20/domains/data_science/apps/ray-cluster/image/aip-practice/aip-tracing/Dockerfile#L17) and replaced `dubloom/ray-integration` with `yakov.shapiro/MLOB-3768/update-span-type`, the name of this branch. I then followed [the steps from this comment on MLOB-3676](https://datadoghq.atlassian.net/browse/MLOB-3676?focusedCommentId=2568529). I verified that the type on the resulting spans [is now set to ray](https://dd.datad0g.com/internal/events-ui/queries?group_by=job_name&index_name=djm-search&query_string=%40component%3Aray&query_type=list&timerange=1756404208851-1756418608851&track=trace). ## Checklist - [x] PR author has checked that all the criteria below are met - The PR description includes an overview of the change - The PR description articulates the motivation for the change - The change includes tests OR the PR description describes a testing strategy - The PR description notes risks associated with the change, if any - Newly-added code is easy to change - The change follows the [library release note guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html) - The change includes or references documentation updates if necessary - Backport labels are set (if [applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)) ## Reviewer Checklist - [x] Reviewer has checked that all the criteria below are met - Title is accurate - All changes are related to the pull request's stated goal - Avoids breaking [API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces) changes - Testing strategy adequately addresses listed risks - Newly-added code is easy to change - Release note makes sense to a user of the library - If necessary, author has acknowledged and discussed the performance implications of this PR as reported in the benchmarks PR comment - Backport labels are set in a manner that is consistent with the [release branch maintenance policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting) --- .riot/requirements/101a8e4.txt | 36 --------- .riot/requirements/106610a.txt | 39 --------- .riot/requirements/14b9fa5.txt | 36 --------- .riot/requirements/14de711.txt | 39 --------- .riot/requirements/15ca875.txt | 68 ++++++++++++++++ .riot/requirements/1844b95.txt | 79 +++++++++++++++++++ .riot/requirements/1871782.txt | 39 --------- .../requirements/{4598a9a.txt => 18ae9e5.txt} | 8 +- .riot/requirements/1a1fcb0.txt | 75 ++++++++++++++++++ .riot/requirements/1ad0343.txt | 79 +++++++++++++++++++ .riot/requirements/1af2ad1.txt | 72 +++++++++++++++++ .riot/requirements/1d453cc.txt | 35 -------- .riot/requirements/1d63829.txt | 39 --------- .riot/requirements/1dc06a0.txt | 36 --------- .riot/requirements/1e480a4.txt | 35 -------- .riot/requirements/228fcd5.txt | 68 ++++++++++++++++ .riot/requirements/692becc.txt | 72 +++++++++++++++++ .riot/requirements/e062f94.txt | 36 --------- ddtrace/contrib/internal/ray/__init__.py | 3 +- ddtrace/contrib/internal/ray/hook.py | 6 +- ddtrace/contrib/internal/ray/patch.py | 34 ++++---- ddtrace/contrib/internal/ray/utils.py | 6 +- ddtrace/ext/__init__.py | 2 +- tests/contrib/ray/test_ray.py | 5 ++ ...ts.contrib.ray.test_ray.error_in_task.json | 30 +++---- ...trib.ray.test_ray.test_actor_and_task.json | 46 +++++------ ....ray.test_ray.test_actor_interactions.json | 30 +++---- ...ontrib.ray.test_ray.test_nested_tasks.json | 30 +++---- ...ontrib.ray.test_ray.test_simple_actor.json | 24 +++--- ...contrib.ray.test_ray.test_simple_task.json | 30 +++---- 30 files changed, 645 insertions(+), 492 deletions(-) delete mode 100644 .riot/requirements/101a8e4.txt delete mode 100644 .riot/requirements/106610a.txt delete mode 100644 .riot/requirements/14b9fa5.txt delete mode 100644 .riot/requirements/14de711.txt create mode 100644 .riot/requirements/15ca875.txt create mode 100644 .riot/requirements/1844b95.txt delete mode 100644 .riot/requirements/1871782.txt rename .riot/requirements/{4598a9a.txt => 18ae9e5.txt} (92%) create mode 100644 .riot/requirements/1a1fcb0.txt create mode 100644 .riot/requirements/1ad0343.txt create mode 100644 .riot/requirements/1af2ad1.txt delete mode 100644 .riot/requirements/1d453cc.txt delete mode 100644 .riot/requirements/1d63829.txt delete mode 100644 .riot/requirements/1dc06a0.txt delete mode 100644 .riot/requirements/1e480a4.txt create mode 100644 .riot/requirements/228fcd5.txt create mode 100644 .riot/requirements/692becc.txt delete mode 100644 .riot/requirements/e062f94.txt diff --git a/.riot/requirements/101a8e4.txt b/.riot/requirements/101a8e4.txt deleted file mode 100644 index 69783faf92a..00000000000 --- a/.riot/requirements/101a8e4.txt +++ /dev/null @@ -1,36 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.12 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/101a8e4.in -# -attrs==25.3.0 -certifi==2025.7.14 -charset-normalizer==3.4.2 -click==8.2.1 -coverage[toml]==7.10.1 -filelock==3.18.0 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -jsonschema==4.25.0 -jsonschema-specifications==2025.4.1 -mock==5.2.0 -msgpack==1.1.1 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.6.0 -protobuf==6.31.1 -pygments==2.19.2 -pytest==8.4.1 -pytest-asyncio==1.1.0 -pytest-cov==6.2.1 -pytest-mock==3.14.1 -pyyaml==6.0.2 -ray==2.48.0 -referencing==0.36.2 -requests==2.32.4 -rpds-py==0.26.0 -sortedcontainers==2.4.0 -typing-extensions==4.14.1 -urllib3==2.5.0 diff --git a/.riot/requirements/106610a.txt b/.riot/requirements/106610a.txt deleted file mode 100644 index 9e82d0a07df..00000000000 --- a/.riot/requirements/106610a.txt +++ /dev/null @@ -1,39 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/106610a.in -# -attrs==25.3.0 -backports-asyncio-runner==1.2.0 -certifi==2025.7.14 -charset-normalizer==3.4.2 -click==8.1.8 -coverage[toml]==7.10.1 -exceptiongroup==1.3.0 -filelock==3.18.0 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -jsonschema==4.25.0 -jsonschema-specifications==2025.4.1 -mock==5.2.0 -msgpack==1.1.1 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.6.0 -protobuf==6.31.1 -pygments==2.19.2 -pytest==8.4.1 -pytest-asyncio==1.1.0 -pytest-cov==6.2.1 -pytest-mock==3.14.1 -pyyaml==6.0.2 -ray==2.48.0 -referencing==0.36.2 -requests==2.32.4 -rpds-py==0.26.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.14.1 -urllib3==2.5.0 diff --git a/.riot/requirements/14b9fa5.txt b/.riot/requirements/14b9fa5.txt deleted file mode 100644 index 03d6a7c1830..00000000000 --- a/.riot/requirements/14b9fa5.txt +++ /dev/null @@ -1,36 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.12 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/14b9fa5.in -# -attrs==25.3.0 -certifi==2025.7.14 -charset-normalizer==3.4.2 -click==8.2.1 -coverage[toml]==7.10.1 -filelock==3.18.0 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -jsonschema==4.25.0 -jsonschema-specifications==2025.4.1 -mock==5.2.0 -msgpack==1.1.1 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.6.0 -protobuf==6.31.1 -pygments==2.19.2 -pytest==8.4.1 -pytest-asyncio==1.1.0 -pytest-cov==6.2.1 -pytest-mock==3.14.1 -pyyaml==6.0.2 -ray==2.48.0 -referencing==0.36.2 -requests==2.32.4 -rpds-py==0.26.0 -sortedcontainers==2.4.0 -typing-extensions==4.14.1 -urllib3==2.5.0 diff --git a/.riot/requirements/14de711.txt b/.riot/requirements/14de711.txt deleted file mode 100644 index ca6fabe47ae..00000000000 --- a/.riot/requirements/14de711.txt +++ /dev/null @@ -1,39 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.10 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/14de711.in -# -attrs==25.3.0 -backports-asyncio-runner==1.2.0 -certifi==2025.7.14 -charset-normalizer==3.4.2 -click==8.2.1 -coverage[toml]==7.10.1 -exceptiongroup==1.3.0 -filelock==3.18.0 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -jsonschema==4.25.0 -jsonschema-specifications==2025.4.1 -mock==5.2.0 -msgpack==1.1.1 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.6.0 -protobuf==6.31.1 -pygments==2.19.2 -pytest==8.4.1 -pytest-asyncio==1.1.0 -pytest-cov==6.2.1 -pytest-mock==3.14.1 -pyyaml==6.0.2 -ray==2.48.0 -referencing==0.36.2 -requests==2.32.4 -rpds-py==0.26.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.14.1 -urllib3==2.5.0 diff --git a/.riot/requirements/15ca875.txt b/.riot/requirements/15ca875.txt new file mode 100644 index 00000000000..5583bbc2822 --- /dev/null +++ b/.riot/requirements/15ca875.txt @@ -0,0 +1,68 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/15ca875.in +# +aiohappyeyeballs==2.6.1 +aiohttp==3.12.15 +aiohttp-cors==0.8.1 +aiosignal==1.4.0 +annotated-types==0.7.0 +attrs==25.3.0 +cachetools==5.5.2 +certifi==2025.8.3 +charset-normalizer==3.4.3 +click==8.2.1 +colorful==0.5.7 +coverage[toml]==7.10.6 +distlib==0.4.0 +filelock==3.19.1 +frozenlist==1.7.0 +google-api-core==2.25.1 +google-auth==2.40.3 +googleapis-common-protos==1.70.0 +grpcio==1.74.0 +hypothesis==6.45.0 +idna==3.10 +iniconfig==2.1.0 +jsonschema==4.25.1 +jsonschema-specifications==2025.4.1 +mock==5.2.0 +msgpack==1.1.1 +multidict==6.6.4 +opencensus==0.11.4 +opencensus-context==0.1.3 +opentracing==2.4.0 +packaging==25.0 +platformdirs==4.4.0 +pluggy==1.6.0 +prometheus-client==0.22.1 +propcache==0.3.2 +proto-plus==1.26.1 +protobuf==6.32.0 +py-spy==0.4.1 +pyasn1==0.6.1 +pyasn1-modules==0.4.2 +pydantic==2.11.7 +pydantic-core==2.33.2 +pygments==2.19.2 +pytest==8.4.2 +pytest-asyncio==1.1.0 +pytest-cov==6.2.1 +pytest-mock==3.14.1 +pyyaml==6.0.2 +ray[default]==2.46.0 +referencing==0.36.2 +requests==2.32.5 +rpds-py==0.27.1 +rsa==4.9.1 +six==1.17.0 +smart-open==7.3.0.post1 +sortedcontainers==2.4.0 +typing-extensions==4.15.0 +typing-inspection==0.4.1 +urllib3==2.5.0 +virtualenv==20.34.0 +wrapt==1.17.3 +yarl==1.20.1 diff --git a/.riot/requirements/1844b95.txt b/.riot/requirements/1844b95.txt new file mode 100644 index 00000000000..0122c459836 --- /dev/null +++ b/.riot/requirements/1844b95.txt @@ -0,0 +1,79 @@ +# +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1844b95.in +# +aiohappyeyeballs==2.6.1 +aiohttp==3.12.15 +aiohttp-cors==0.8.1 +aiosignal==1.4.0 +annotated-types==0.7.0 +async-timeout==5.0.1 +attrs==25.3.0 +backports-asyncio-runner==1.2.0 +cachetools==5.5.2 +certifi==2025.8.3 +charset-normalizer==3.4.3 +click==8.1.8 +colorful==0.5.7 +coverage[toml]==7.10.6 +distlib==0.4.0 +exceptiongroup==1.3.0 +filelock==3.19.1 +frozenlist==1.7.0 +google-api-core==2.25.1 +google-auth==2.40.3 +googleapis-common-protos==1.70.0 +grpcio==1.74.0 +hypothesis==6.45.0 +idna==3.10 +importlib-metadata==8.7.0 +iniconfig==2.1.0 +jsonschema==4.25.1 +jsonschema-specifications==2025.4.1 +mock==5.2.0 +msgpack==1.1.1 +multidict==6.6.4 +opencensus==0.11.4 +opencensus-context==0.1.3 +opentelemetry-api==1.36.0 +opentelemetry-exporter-prometheus==0.57b0 +opentelemetry-proto==1.36.0 +opentelemetry-sdk==1.36.0 +opentelemetry-semantic-conventions==0.57b0 +opentracing==2.4.0 +packaging==25.0 +platformdirs==4.4.0 +pluggy==1.6.0 +prometheus-client==0.22.1 +propcache==0.3.2 +proto-plus==1.26.1 +protobuf==6.32.0 +py-spy==0.4.1 +pyasn1==0.6.1 +pyasn1-modules==0.4.2 +pydantic==2.11.7 +pydantic-core==2.33.2 +pygments==2.19.2 +pytest==8.4.2 +pytest-asyncio==1.1.0 +pytest-cov==6.2.1 +pytest-mock==3.14.1 +pyyaml==6.0.2 +ray[default]==2.49.1 +referencing==0.36.2 +requests==2.32.5 +rpds-py==0.27.1 +rsa==4.9.1 +six==1.17.0 +smart-open==7.3.0.post1 +sortedcontainers==2.4.0 +tomli==2.2.1 +typing-extensions==4.15.0 +typing-inspection==0.4.1 +urllib3==2.5.0 +virtualenv==20.34.0 +wrapt==1.17.3 +yarl==1.20.1 +zipp==3.23.0 diff --git a/.riot/requirements/1871782.txt b/.riot/requirements/1871782.txt deleted file mode 100644 index 2d20724f331..00000000000 --- a/.riot/requirements/1871782.txt +++ /dev/null @@ -1,39 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1871782.in -# -attrs==25.3.0 -backports-asyncio-runner==1.2.0 -certifi==2025.7.14 -charset-normalizer==3.4.2 -click==8.1.8 -coverage[toml]==7.10.1 -exceptiongroup==1.3.0 -filelock==3.18.0 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -jsonschema==4.25.0 -jsonschema-specifications==2025.4.1 -mock==5.2.0 -msgpack==1.1.1 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.6.0 -protobuf==6.31.1 -pygments==2.19.2 -pytest==8.4.1 -pytest-asyncio==1.1.0 -pytest-cov==6.2.1 -pytest-mock==3.14.1 -pyyaml==6.0.2 -ray==2.48.0 -referencing==0.36.2 -requests==2.32.4 -rpds-py==0.26.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.14.1 -urllib3==2.5.0 diff --git a/.riot/requirements/4598a9a.txt b/.riot/requirements/18ae9e5.txt similarity index 92% rename from .riot/requirements/4598a9a.txt rename to .riot/requirements/18ae9e5.txt index 2b56d2d78d9..57d98c57349 100644 --- a/.riot/requirements/4598a9a.txt +++ b/.riot/requirements/18ae9e5.txt @@ -1,8 +1,8 @@ # -# This file is autogenerated by pip-compile with Python 3.13 +# This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --allow-unsafe --no-annotate .riot/requirements/4598a9a.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/18ae9e5.in # aiohappyeyeballs==2.6.1 aiohttp==3.12.15 @@ -53,12 +53,12 @@ pyasn1-modules==0.4.2 pydantic==2.11.7 pydantic-core==2.33.2 pygments==2.19.2 -pytest==8.4.1 +pytest==8.4.2 pytest-asyncio==1.1.0 pytest-cov==6.2.1 pytest-mock==3.14.1 pyyaml==6.0.2 -ray[default]==2.48.0 +ray[default]==2.49.1 referencing==0.36.2 requests==2.32.5 rpds-py==0.27.1 diff --git a/.riot/requirements/1a1fcb0.txt b/.riot/requirements/1a1fcb0.txt new file mode 100644 index 00000000000..b06228bf2a3 --- /dev/null +++ b/.riot/requirements/1a1fcb0.txt @@ -0,0 +1,75 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1a1fcb0.in +# +aiohappyeyeballs==2.6.1 +aiohttp==3.12.15 +aiohttp-cors==0.8.1 +aiosignal==1.4.0 +annotated-types==0.7.0 +attrs==25.3.0 +cachetools==5.5.2 +certifi==2025.8.3 +charset-normalizer==3.4.3 +click==8.2.1 +colorful==0.5.7 +coverage[toml]==7.10.6 +distlib==0.4.0 +filelock==3.19.1 +frozenlist==1.7.0 +google-api-core==2.25.1 +google-auth==2.40.3 +googleapis-common-protos==1.70.0 +grpcio==1.74.0 +hypothesis==6.45.0 +idna==3.10 +importlib-metadata==8.7.0 +iniconfig==2.1.0 +jsonschema==4.25.1 +jsonschema-specifications==2025.4.1 +mock==5.2.0 +msgpack==1.1.1 +multidict==6.6.4 +opencensus==0.11.4 +opencensus-context==0.1.3 +opentelemetry-api==1.36.0 +opentelemetry-exporter-prometheus==0.57b0 +opentelemetry-proto==1.36.0 +opentelemetry-sdk==1.36.0 +opentelemetry-semantic-conventions==0.57b0 +opentracing==2.4.0 +packaging==25.0 +platformdirs==4.4.0 +pluggy==1.6.0 +prometheus-client==0.22.1 +propcache==0.3.2 +proto-plus==1.26.1 +protobuf==6.32.0 +py-spy==0.4.1 +pyasn1==0.6.1 +pyasn1-modules==0.4.2 +pydantic==2.11.7 +pydantic-core==2.33.2 +pygments==2.19.2 +pytest==8.4.2 +pytest-asyncio==1.1.0 +pytest-cov==6.2.1 +pytest-mock==3.14.1 +pyyaml==6.0.2 +ray[default]==2.49.1 +referencing==0.36.2 +requests==2.32.5 +rpds-py==0.27.1 +rsa==4.9.1 +six==1.17.0 +smart-open==7.3.0.post1 +sortedcontainers==2.4.0 +typing-extensions==4.15.0 +typing-inspection==0.4.1 +urllib3==2.5.0 +virtualenv==20.34.0 +wrapt==1.17.3 +yarl==1.20.1 +zipp==3.23.0 diff --git a/.riot/requirements/1ad0343.txt b/.riot/requirements/1ad0343.txt new file mode 100644 index 00000000000..983f8e3e6be --- /dev/null +++ b/.riot/requirements/1ad0343.txt @@ -0,0 +1,79 @@ +# +# This file is autogenerated by pip-compile with Python 3.10 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1ad0343.in +# +aiohappyeyeballs==2.6.1 +aiohttp==3.12.15 +aiohttp-cors==0.8.1 +aiosignal==1.4.0 +annotated-types==0.7.0 +async-timeout==5.0.1 +attrs==25.3.0 +backports-asyncio-runner==1.2.0 +cachetools==5.5.2 +certifi==2025.8.3 +charset-normalizer==3.4.3 +click==8.2.1 +colorful==0.5.7 +coverage[toml]==7.10.6 +distlib==0.4.0 +exceptiongroup==1.3.0 +filelock==3.19.1 +frozenlist==1.7.0 +google-api-core==2.25.1 +google-auth==2.40.3 +googleapis-common-protos==1.70.0 +grpcio==1.74.0 +hypothesis==6.45.0 +idna==3.10 +importlib-metadata==8.7.0 +iniconfig==2.1.0 +jsonschema==4.25.1 +jsonschema-specifications==2025.4.1 +mock==5.2.0 +msgpack==1.1.1 +multidict==6.6.4 +opencensus==0.11.4 +opencensus-context==0.1.3 +opentelemetry-api==1.36.0 +opentelemetry-exporter-prometheus==0.57b0 +opentelemetry-proto==1.36.0 +opentelemetry-sdk==1.36.0 +opentelemetry-semantic-conventions==0.57b0 +opentracing==2.4.0 +packaging==25.0 +platformdirs==4.4.0 +pluggy==1.6.0 +prometheus-client==0.22.1 +propcache==0.3.2 +proto-plus==1.26.1 +protobuf==6.32.0 +py-spy==0.4.1 +pyasn1==0.6.1 +pyasn1-modules==0.4.2 +pydantic==2.11.7 +pydantic-core==2.33.2 +pygments==2.19.2 +pytest==8.4.2 +pytest-asyncio==1.1.0 +pytest-cov==6.2.1 +pytest-mock==3.14.1 +pyyaml==6.0.2 +ray[default]==2.49.1 +referencing==0.36.2 +requests==2.32.5 +rpds-py==0.27.1 +rsa==4.9.1 +six==1.17.0 +smart-open==7.3.0.post1 +sortedcontainers==2.4.0 +tomli==2.2.1 +typing-extensions==4.15.0 +typing-inspection==0.4.1 +urllib3==2.5.0 +virtualenv==20.34.0 +wrapt==1.17.3 +yarl==1.20.1 +zipp==3.23.0 diff --git a/.riot/requirements/1af2ad1.txt b/.riot/requirements/1af2ad1.txt new file mode 100644 index 00000000000..36a9e45b246 --- /dev/null +++ b/.riot/requirements/1af2ad1.txt @@ -0,0 +1,72 @@ +# +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1af2ad1.in +# +aiohappyeyeballs==2.6.1 +aiohttp==3.12.15 +aiohttp-cors==0.8.1 +aiosignal==1.4.0 +annotated-types==0.7.0 +async-timeout==5.0.1 +attrs==25.3.0 +backports-asyncio-runner==1.2.0 +cachetools==5.5.2 +certifi==2025.8.3 +charset-normalizer==3.4.3 +click==8.1.8 +colorful==0.5.7 +coverage[toml]==7.10.6 +distlib==0.4.0 +exceptiongroup==1.3.0 +filelock==3.19.1 +frozenlist==1.7.0 +google-api-core==2.25.1 +google-auth==2.40.3 +googleapis-common-protos==1.70.0 +grpcio==1.74.0 +hypothesis==6.45.0 +idna==3.10 +iniconfig==2.1.0 +jsonschema==4.25.1 +jsonschema-specifications==2025.4.1 +mock==5.2.0 +msgpack==1.1.1 +multidict==6.6.4 +opencensus==0.11.4 +opencensus-context==0.1.3 +opentracing==2.4.0 +packaging==25.0 +platformdirs==4.4.0 +pluggy==1.6.0 +prometheus-client==0.22.1 +propcache==0.3.2 +proto-plus==1.26.1 +protobuf==6.32.0 +py-spy==0.4.1 +pyasn1==0.6.1 +pyasn1-modules==0.4.2 +pydantic==2.11.7 +pydantic-core==2.33.2 +pygments==2.19.2 +pytest==8.4.2 +pytest-asyncio==1.1.0 +pytest-cov==6.2.1 +pytest-mock==3.14.1 +pyyaml==6.0.2 +ray[default]==2.46.0 +referencing==0.36.2 +requests==2.32.5 +rpds-py==0.27.1 +rsa==4.9.1 +six==1.17.0 +smart-open==7.3.0.post1 +sortedcontainers==2.4.0 +tomli==2.2.1 +typing-extensions==4.15.0 +typing-inspection==0.4.1 +urllib3==2.5.0 +virtualenv==20.34.0 +wrapt==1.17.3 +yarl==1.20.1 diff --git a/.riot/requirements/1d453cc.txt b/.riot/requirements/1d453cc.txt deleted file mode 100644 index d943e93cef2..00000000000 --- a/.riot/requirements/1d453cc.txt +++ /dev/null @@ -1,35 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.13 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1d453cc.in -# -attrs==25.3.0 -certifi==2025.7.14 -charset-normalizer==3.4.2 -click==8.2.1 -coverage[toml]==7.10.1 -filelock==3.18.0 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -jsonschema==4.25.0 -jsonschema-specifications==2025.4.1 -mock==5.2.0 -msgpack==1.1.1 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.6.0 -protobuf==6.31.1 -pygments==2.19.2 -pytest==8.4.1 -pytest-asyncio==1.1.0 -pytest-cov==6.2.1 -pytest-mock==3.14.1 -pyyaml==6.0.2 -ray==2.48.0 -referencing==0.36.2 -requests==2.32.4 -rpds-py==0.26.0 -sortedcontainers==2.4.0 -urllib3==2.5.0 diff --git a/.riot/requirements/1d63829.txt b/.riot/requirements/1d63829.txt deleted file mode 100644 index 4da5aaa0e46..00000000000 --- a/.riot/requirements/1d63829.txt +++ /dev/null @@ -1,39 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.10 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1d63829.in -# -attrs==25.3.0 -backports-asyncio-runner==1.2.0 -certifi==2025.7.14 -charset-normalizer==3.4.2 -click==8.2.1 -coverage[toml]==7.10.1 -exceptiongroup==1.3.0 -filelock==3.18.0 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -jsonschema==4.25.0 -jsonschema-specifications==2025.4.1 -mock==5.2.0 -msgpack==1.1.1 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.6.0 -protobuf==6.31.1 -pygments==2.19.2 -pytest==8.4.1 -pytest-asyncio==1.1.0 -pytest-cov==6.2.1 -pytest-mock==3.14.1 -pyyaml==6.0.2 -ray==2.48.0 -referencing==0.36.2 -requests==2.32.4 -rpds-py==0.26.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.14.1 -urllib3==2.5.0 diff --git a/.riot/requirements/1dc06a0.txt b/.riot/requirements/1dc06a0.txt deleted file mode 100644 index 17e05fe39c8..00000000000 --- a/.riot/requirements/1dc06a0.txt +++ /dev/null @@ -1,36 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1dc06a0.in -# -attrs==25.3.0 -certifi==2025.7.14 -charset-normalizer==3.4.2 -click==8.2.1 -coverage[toml]==7.10.1 -filelock==3.18.0 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -jsonschema==4.25.0 -jsonschema-specifications==2025.4.1 -mock==5.2.0 -msgpack==1.1.1 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.6.0 -protobuf==6.31.1 -pygments==2.19.2 -pytest==8.4.1 -pytest-asyncio==1.1.0 -pytest-cov==6.2.1 -pytest-mock==3.14.1 -pyyaml==6.0.2 -ray==2.48.0 -referencing==0.36.2 -requests==2.32.4 -rpds-py==0.26.0 -sortedcontainers==2.4.0 -typing-extensions==4.14.1 -urllib3==2.5.0 diff --git a/.riot/requirements/1e480a4.txt b/.riot/requirements/1e480a4.txt deleted file mode 100644 index f4f99e31460..00000000000 --- a/.riot/requirements/1e480a4.txt +++ /dev/null @@ -1,35 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.13 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1e480a4.in -# -attrs==25.3.0 -certifi==2025.7.14 -charset-normalizer==3.4.2 -click==8.2.1 -coverage[toml]==7.10.1 -filelock==3.18.0 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -jsonschema==4.25.0 -jsonschema-specifications==2025.4.1 -mock==5.2.0 -msgpack==1.1.1 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.6.0 -protobuf==6.31.1 -pygments==2.19.2 -pytest==8.4.1 -pytest-asyncio==1.1.0 -pytest-cov==6.2.1 -pytest-mock==3.14.1 -pyyaml==6.0.2 -ray==2.48.0 -referencing==0.36.2 -requests==2.32.4 -rpds-py==0.26.0 -sortedcontainers==2.4.0 -urllib3==2.5.0 diff --git a/.riot/requirements/228fcd5.txt b/.riot/requirements/228fcd5.txt new file mode 100644 index 00000000000..f167a8c4059 --- /dev/null +++ b/.riot/requirements/228fcd5.txt @@ -0,0 +1,68 @@ +# +# This file is autogenerated by pip-compile with Python 3.11 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/228fcd5.in +# +aiohappyeyeballs==2.6.1 +aiohttp==3.12.15 +aiohttp-cors==0.8.1 +aiosignal==1.4.0 +annotated-types==0.7.0 +attrs==25.3.0 +cachetools==5.5.2 +certifi==2025.8.3 +charset-normalizer==3.4.3 +click==8.2.1 +colorful==0.5.7 +coverage[toml]==7.10.6 +distlib==0.4.0 +filelock==3.19.1 +frozenlist==1.7.0 +google-api-core==2.25.1 +google-auth==2.40.3 +googleapis-common-protos==1.70.0 +grpcio==1.74.0 +hypothesis==6.45.0 +idna==3.10 +iniconfig==2.1.0 +jsonschema==4.25.1 +jsonschema-specifications==2025.4.1 +mock==5.2.0 +msgpack==1.1.1 +multidict==6.6.4 +opencensus==0.11.4 +opencensus-context==0.1.3 +opentracing==2.4.0 +packaging==25.0 +platformdirs==4.4.0 +pluggy==1.6.0 +prometheus-client==0.22.1 +propcache==0.3.2 +proto-plus==1.26.1 +protobuf==6.32.0 +py-spy==0.4.1 +pyasn1==0.6.1 +pyasn1-modules==0.4.2 +pydantic==2.11.7 +pydantic-core==2.33.2 +pygments==2.19.2 +pytest==8.4.2 +pytest-asyncio==1.1.0 +pytest-cov==6.2.1 +pytest-mock==3.14.1 +pyyaml==6.0.2 +ray[default]==2.46.0 +referencing==0.36.2 +requests==2.32.5 +rpds-py==0.27.1 +rsa==4.9.1 +six==1.17.0 +smart-open==7.3.0.post1 +sortedcontainers==2.4.0 +typing-extensions==4.15.0 +typing-inspection==0.4.1 +urllib3==2.5.0 +virtualenv==20.34.0 +wrapt==1.17.3 +yarl==1.20.1 diff --git a/.riot/requirements/692becc.txt b/.riot/requirements/692becc.txt new file mode 100644 index 00000000000..8055bca566d --- /dev/null +++ b/.riot/requirements/692becc.txt @@ -0,0 +1,72 @@ +# +# This file is autogenerated by pip-compile with Python 3.10 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/692becc.in +# +aiohappyeyeballs==2.6.1 +aiohttp==3.12.15 +aiohttp-cors==0.8.1 +aiosignal==1.4.0 +annotated-types==0.7.0 +async-timeout==5.0.1 +attrs==25.3.0 +backports-asyncio-runner==1.2.0 +cachetools==5.5.2 +certifi==2025.8.3 +charset-normalizer==3.4.3 +click==8.2.1 +colorful==0.5.7 +coverage[toml]==7.10.6 +distlib==0.4.0 +exceptiongroup==1.3.0 +filelock==3.19.1 +frozenlist==1.7.0 +google-api-core==2.25.1 +google-auth==2.40.3 +googleapis-common-protos==1.70.0 +grpcio==1.74.0 +hypothesis==6.45.0 +idna==3.10 +iniconfig==2.1.0 +jsonschema==4.25.1 +jsonschema-specifications==2025.4.1 +mock==5.2.0 +msgpack==1.1.1 +multidict==6.6.4 +opencensus==0.11.4 +opencensus-context==0.1.3 +opentracing==2.4.0 +packaging==25.0 +platformdirs==4.4.0 +pluggy==1.6.0 +prometheus-client==0.22.1 +propcache==0.3.2 +proto-plus==1.26.1 +protobuf==6.32.0 +py-spy==0.4.1 +pyasn1==0.6.1 +pyasn1-modules==0.4.2 +pydantic==2.11.7 +pydantic-core==2.33.2 +pygments==2.19.2 +pytest==8.4.2 +pytest-asyncio==1.1.0 +pytest-cov==6.2.1 +pytest-mock==3.14.1 +pyyaml==6.0.2 +ray[default]==2.46.0 +referencing==0.36.2 +requests==2.32.5 +rpds-py==0.27.1 +rsa==4.9.1 +six==1.17.0 +smart-open==7.3.0.post1 +sortedcontainers==2.4.0 +tomli==2.2.1 +typing-extensions==4.15.0 +typing-inspection==0.4.1 +urllib3==2.5.0 +virtualenv==20.34.0 +wrapt==1.17.3 +yarl==1.20.1 diff --git a/.riot/requirements/e062f94.txt b/.riot/requirements/e062f94.txt deleted file mode 100644 index b6ff6a4658a..00000000000 --- a/.riot/requirements/e062f94.txt +++ /dev/null @@ -1,36 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/e062f94.in -# -attrs==25.3.0 -certifi==2025.7.14 -charset-normalizer==3.4.2 -click==8.2.1 -coverage[toml]==7.10.1 -filelock==3.18.0 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -jsonschema==4.25.0 -jsonschema-specifications==2025.4.1 -mock==5.2.0 -msgpack==1.1.1 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.6.0 -protobuf==6.31.1 -pygments==2.19.2 -pytest==8.4.1 -pytest-asyncio==1.1.0 -pytest-cov==6.2.1 -pytest-mock==3.14.1 -pyyaml==6.0.2 -ray==2.48.0 -referencing==0.36.2 -requests==2.32.4 -rpds-py==0.26.0 -sortedcontainers==2.4.0 -typing-extensions==4.14.1 -urllib3==2.5.0 diff --git a/ddtrace/contrib/internal/ray/__init__.py b/ddtrace/contrib/internal/ray/__init__.py index 2e7839012da..8498456f720 100644 --- a/ddtrace/contrib/internal/ray/__init__.py +++ b/ddtrace/contrib/internal/ray/__init__.py @@ -1,9 +1,10 @@ import os + def in_ray_job(): # type: () -> bool """Returns whether we are in a ray environemt. This is accomplished by checking if the _RAY_SUBMISSION_ID environment variable is defined which means a job has been submitted and is traced """ - return bool(os.environ.get("_RAY_SUBMISSION_ID", False)) \ No newline at end of file + return bool(os.environ.get("_RAY_SUBMISSION_ID", False)) diff --git a/ddtrace/contrib/internal/ray/hook.py b/ddtrace/contrib/internal/ray/hook.py index 1efbfdff037..5576b961e62 100644 --- a/ddtrace/contrib/internal/ray/hook.py +++ b/ddtrace/contrib/internal/ray/hook.py @@ -1,7 +1,9 @@ def setup_tracing(): - import ddtrace.auto # noqa:F401 from ray.util.tracing import tracing_helper from ray.util.tracing.tracing_helper import _is_tracing_enabled + import ddtrace.auto # noqa:F401 + tracing_helper._global_is_tracing_enabled = False - assert not _is_tracing_enabled(), "OTEL Tracing should be disabled at setup." + if _is_tracing_enabled(): + raise AssertionError("OTEL Tracing should be disabled at setup.") diff --git a/ddtrace/contrib/internal/ray/patch.py b/ddtrace/contrib/internal/ray/patch.py index 086d9065178..6823c6f22cf 100644 --- a/ddtrace/contrib/internal/ray/patch.py +++ b/ddtrace/contrib/internal/ray/patch.py @@ -9,6 +9,16 @@ from typing import List from typing import Optional +import ray +from ray._private.inspect_util import is_class_method +from ray._private.inspect_util import is_function_or_method +from ray._private.inspect_util import is_static_method +import ray._private.worker +import ray.actor +import ray.dashboard.modules.job.job_manager +from ray.dashboard.modules.job.job_manager import generate_job_id +import ray.dashboard.modules.job.job_supervisor +import ray.exceptions from wrapt import wrap_function_wrapper as _w from ddtrace import config @@ -26,16 +36,6 @@ from ddtrace.internal.utils.wrappers import unwrap as _u from ddtrace.propagation.http import _TraceContext from ddtrace.settings._config import _get_config -import ray -from ray._private.inspect_util import is_class_method -from ray._private.inspect_util import is_function_or_method -from ray._private.inspect_util import is_static_method -import ray._private.worker -import ray.actor -import ray.dashboard.modules.job.job_manager -from ray.dashboard.modules.job.job_manager import generate_job_id -import ray.dashboard.modules.job.job_supervisor -import ray.exceptions from .utils import _extract_tracing_context_from_env from .utils import _inject_context_in_env @@ -127,7 +127,7 @@ def _wrap_task_execution(wrapped, *args, **kwargs): function_module = getattr(wrapped, "__module__", "unknown_module") with tracer.trace( - f"{function_module}.{function_name}", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.ML + f"{function_module}.{function_name}", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.RAY ) as span: span.set_tag_str(SPAN_KIND, SpanKind.CONSUMER) _inject_ray_span_tags(span) @@ -167,7 +167,7 @@ def traced_submit_task(wrapped, instance, args, kwargs): tracer.context_provider.activate(_extract_tracing_context_from_env()) with tracer.trace( - f"{instance._function_name}.remote()", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.ML + f"{instance._function_name}.remote()", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.RAY ) as span: span.set_tag_str(SPAN_KIND, SpanKind.PRODUCER) _inject_ray_span_tags(span) @@ -199,7 +199,7 @@ def traced_submit_job(wrapped, instance, args, kwargs): kwargs["submission_id"] = submission_id # Root span creation - job_span = tracer.start_span("ray.job", service=submission_id, span_type=SpanTypes.ML) + job_span = tracer.start_span("ray.job", service=submission_id, span_type=SpanTypes.RAY) job_span.set_tag_str("component", "ray") # This will allow to finish the span at the end of the job _job_span_manager.add_span(submission_id, job_span) @@ -207,7 +207,7 @@ def traced_submit_job(wrapped, instance, args, kwargs): # Set global span as the root span tracer.context_provider.activate(job_span) try: - with tracer.trace("ray.job.submit", service=submission_id, span_type=SpanTypes.ML) as submit_span: + with tracer.trace("ray.job.submit", service=submission_id, span_type=SpanTypes.RAY) as submit_span: submit_span.set_tag_str("component", "ray") submit_span.set_tag_str(SPAN_KIND, SpanKind.PRODUCER) @@ -250,7 +250,7 @@ def traced_actor_method_call(wrapped, instance, args, kwargs): tracer.context_provider.activate(_extract_tracing_context_from_env()) with tracer.trace( - f"{actor_name}.{method_name}.remote()", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.ML + f"{actor_name}.{method_name}.remote()", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.RAY ) as span: span.set_tag_str(SPAN_KIND, SpanKind.PRODUCER) _inject_ray_span_tags(span) @@ -276,7 +276,7 @@ async def _traced_run_method(self: Any, *args: Any, _dd_trace_ctx=None, **kwargs job_submission_id = os.environ.get("_RAY_SUBMISSION_ID") with dd_tracer.trace( - f"{self.__class__.__name__}.{method.__name__}", service=job_submission_id, span_type=SpanTypes.ML + f"{self.__class__.__name__}.{method.__name__}", service=job_submission_id, span_type=SpanTypes.RAY ) as span: span.set_tag_str(SPAN_KIND, SpanKind.CONSUMER) _inject_ray_span_tags(span) @@ -306,7 +306,7 @@ def _trace_actor_method(self: Any, method: Callable[..., Any], dd_trace_ctx): with tracer.trace( f"{self.__class__.__name__}.{method.__name__}", service=os.environ.get("_RAY_SUBMISSION_ID"), - span_type=SpanTypes.ML, + span_type=SpanTypes.RAY, ) as span: span.set_tag_str(SPAN_KIND, SpanKind.CONSUMER) _inject_ray_span_tags(span) diff --git a/ddtrace/contrib/internal/ray/utils.py b/ddtrace/contrib/internal/ray/utils.py index 02480e9a856..4d569b904f4 100644 --- a/ddtrace/contrib/internal/ray/utils.py +++ b/ddtrace/contrib/internal/ray/utils.py @@ -6,10 +6,12 @@ from typing import Callable from typing import List -from ddtrace.propagation.http import _TraceContext import ray from ray.runtime_context import get_runtime_context +from ddtrace.propagation.http import _TraceContext + + def _inject_dd_trace_ctx_kwarg(method: Callable) -> Signature: old_sig = inspect.signature(method) if "_dd_trace_ctx" in old_sig.parameters: @@ -132,7 +134,7 @@ def extract_signature(func: Any, ignore_first: bool = False) -> List[Parameter]: if ignore_first: if len(signature_parameters) == 0: raise ValueError( - "Methods must take a 'self' argument, but the " f"method '{func.__name__}' does not have one." + f"Methods must take a 'self' argument, but the method '{func.__name__}' does not have one." ) signature_parameters = signature_parameters[1:] diff --git a/ddtrace/ext/__init__.py b/ddtrace/ext/__init__.py index 789cde9a33e..1681018167c 100644 --- a/ddtrace/ext/__init__.py +++ b/ddtrace/ext/__init__.py @@ -18,7 +18,7 @@ class SpanTypes(object): LLM = "llm" VALKEY = "valkey" WEBSOCKET = "websocket" - ML = "ml" + RAY = "ray" class SpanKind(object): diff --git a/tests/contrib/ray/test_ray.py b/tests/contrib/ray/test_ray.py index 14f5ebbc90a..fc0d35c9086 100644 --- a/tests/contrib/ray/test_ray.py +++ b/tests/contrib/ray/test_ray.py @@ -1,3 +1,4 @@ +import logging import os import subprocess @@ -28,6 +29,7 @@ def submit_ray_job(script_name, timeout=60): print(result.stdout) if result.returncode != 0: + logging.error("Failed to submit Ray job. Error: %s", result.stderr) raise subprocess.CalledProcessError(result.returncode, cmd, result.stdout, result.stderr) return result @@ -49,6 +51,9 @@ def submit_ray_job(script_name, timeout=60): "meta._dd.base_service", # Service names that include dynamic submission IDs "service", + # Base service sometimes gets set to a different value in CI than in the local environment, + # ignore it to make the tests pass in both environments + "meta._dd.base_service", ] diff --git a/tests/snapshots/tests.contrib.ray.test_ray.error_in_task.json b/tests/snapshots/tests.contrib.ray.test_ray.error_in_task.json index 87e60cf36e4..ff95a0cf363 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.error_in_task.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.error_in_task.json @@ -6,7 +6,7 @@ "trace_id": 0, "span_id": 1, "parent_id": 0, - "type": "ml", + "type": "ray", "error": 1, "meta": { "_dd.base_service": "ray.dashboard", @@ -38,7 +38,7 @@ "trace_id": 0, "span_id": 2, "parent_id": 1, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray.dashboard", @@ -62,7 +62,7 @@ "trace_id": 0, "span_id": 3, "parent_id": 1, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray.dashboard", @@ -88,7 +88,7 @@ "trace_id": 0, "span_id": 4, "parent_id": 3, - "type": "ml", + "type": "ray", "error": 1, "meta": { "_dd.base_service": "ray._private.workers", @@ -129,7 +129,7 @@ "trace_id": 0, "span_id": 5, "parent_id": 4, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -158,7 +158,7 @@ "trace_id": 0, "span_id": 11, "parent_id": 5, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -187,7 +187,7 @@ "trace_id": 0, "span_id": 6, "parent_id": 4, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -216,7 +216,7 @@ "trace_id": 0, "span_id": 7, "parent_id": 4, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "project", @@ -253,7 +253,7 @@ "trace_id": 0, "span_id": 12, "parent_id": 7, - "type": "ml", + "type": "ray", "error": 1, "meta": { "_dd.base_service": "ray._private.workers", @@ -294,7 +294,7 @@ "trace_id": 0, "span_id": 8, "parent_id": 4, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "project", @@ -331,7 +331,7 @@ "trace_id": 0, "span_id": 13, "parent_id": 8, - "type": "ml", + "type": "ray", "error": 1, "meta": { "_dd.base_service": "ray._private.workers", @@ -372,7 +372,7 @@ "trace_id": 0, "span_id": 9, "parent_id": 4, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "project", @@ -409,7 +409,7 @@ "trace_id": 0, "span_id": 14, "parent_id": 9, - "type": "ml", + "type": "ray", "error": 1, "meta": { "_dd.base_service": "ray._private.workers", @@ -450,7 +450,7 @@ "trace_id": 0, "span_id": 10, "parent_id": 4, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "project", @@ -487,7 +487,7 @@ "trace_id": 0, "span_id": 15, "parent_id": 10, - "type": "ml", + "type": "ray", "error": 1, "meta": { "_dd.base_service": "ray._private.workers", diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_actor_and_task.json b/tests/snapshots/tests.contrib.ray.test_ray.test_actor_and_task.json index d2d218e53d1..c5c87c2459d 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_actor_and_task.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_actor_and_task.json @@ -6,7 +6,7 @@ "trace_id": 0, "span_id": 1, "parent_id": 0, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray.dashboard", @@ -37,7 +37,7 @@ "trace_id": 0, "span_id": 2, "parent_id": 1, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray.dashboard", @@ -61,7 +61,7 @@ "trace_id": 0, "span_id": 3, "parent_id": 1, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray.dashboard", @@ -87,7 +87,7 @@ "trace_id": 0, "span_id": 4, "parent_id": 3, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -125,7 +125,7 @@ "trace_id": 0, "span_id": 5, "parent_id": 4, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -154,7 +154,7 @@ "trace_id": 0, "span_id": 8, "parent_id": 5, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -183,7 +183,7 @@ "trace_id": 0, "span_id": 6, "parent_id": 4, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -212,7 +212,7 @@ "trace_id": 0, "span_id": 7, "parent_id": 4, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "project", @@ -248,7 +248,7 @@ "trace_id": 0, "span_id": 9, "parent_id": 7, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -286,7 +286,7 @@ "trace_id": 0, "span_id": 10, "parent_id": 9, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -315,7 +315,7 @@ "trace_id": 0, "span_id": 11, "parent_id": 9, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -345,7 +345,7 @@ "trace_id": 0, "span_id": 17, "parent_id": 11, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -383,7 +383,7 @@ "trace_id": 0, "span_id": 18, "parent_id": 17, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -412,7 +412,7 @@ "trace_id": 0, "span_id": 21, "parent_id": 18, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -450,7 +450,7 @@ "trace_id": 0, "span_id": 19, "parent_id": 17, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -479,7 +479,7 @@ "trace_id": 0, "span_id": 22, "parent_id": 19, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -517,7 +517,7 @@ "trace_id": 0, "span_id": 20, "parent_id": 17, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -546,7 +546,7 @@ "trace_id": 0, "span_id": 23, "parent_id": 20, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -584,7 +584,7 @@ "trace_id": 0, "span_id": 12, "parent_id": 9, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -613,7 +613,7 @@ "trace_id": 0, "span_id": 13, "parent_id": 9, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -642,7 +642,7 @@ "trace_id": 0, "span_id": 14, "parent_id": 9, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -671,7 +671,7 @@ "trace_id": 0, "span_id": 15, "parent_id": 9, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -700,7 +700,7 @@ "trace_id": 0, "span_id": 16, "parent_id": 9, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_actor_interactions.json b/tests/snapshots/tests.contrib.ray.test_ray.test_actor_interactions.json index e7ee022e730..8661f4f3ecf 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_actor_interactions.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_actor_interactions.json @@ -6,7 +6,7 @@ "trace_id": 0, "span_id": 1, "parent_id": 0, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray.dashboard", @@ -37,7 +37,7 @@ "trace_id": 0, "span_id": 2, "parent_id": 1, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray.dashboard", @@ -61,7 +61,7 @@ "trace_id": 0, "span_id": 3, "parent_id": 1, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray.dashboard", @@ -87,7 +87,7 @@ "trace_id": 0, "span_id": 4, "parent_id": 3, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -125,7 +125,7 @@ "trace_id": 0, "span_id": 5, "parent_id": 4, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -154,7 +154,7 @@ "trace_id": 0, "span_id": 10, "parent_id": 5, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -183,7 +183,7 @@ "trace_id": 0, "span_id": 6, "parent_id": 4, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -212,7 +212,7 @@ "trace_id": 0, "span_id": 7, "parent_id": 4, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "project", @@ -248,7 +248,7 @@ "trace_id": 0, "span_id": 11, "parent_id": 7, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -286,7 +286,7 @@ "trace_id": 0, "span_id": 14, "parent_id": 11, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -315,7 +315,7 @@ "trace_id": 0, "span_id": 15, "parent_id": 14, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -353,7 +353,7 @@ "trace_id": 0, "span_id": 8, "parent_id": 4, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "project", @@ -389,7 +389,7 @@ "trace_id": 0, "span_id": 12, "parent_id": 8, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -427,7 +427,7 @@ "trace_id": 0, "span_id": 9, "parent_id": 4, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "project", @@ -463,7 +463,7 @@ "trace_id": 0, "span_id": 13, "parent_id": 9, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_nested_tasks.json b/tests/snapshots/tests.contrib.ray.test_ray.test_nested_tasks.json index e27f15187ac..69327b1c90f 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_nested_tasks.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_nested_tasks.json @@ -6,7 +6,7 @@ "trace_id": 0, "span_id": 1, "parent_id": 0, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray.dashboard", @@ -37,7 +37,7 @@ "trace_id": 0, "span_id": 2, "parent_id": 1, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray.dashboard", @@ -61,7 +61,7 @@ "trace_id": 0, "span_id": 3, "parent_id": 1, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray.dashboard", @@ -87,7 +87,7 @@ "trace_id": 0, "span_id": 4, "parent_id": 3, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -125,7 +125,7 @@ "trace_id": 0, "span_id": 5, "parent_id": 4, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -154,7 +154,7 @@ "trace_id": 0, "span_id": 8, "parent_id": 5, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -183,7 +183,7 @@ "trace_id": 0, "span_id": 6, "parent_id": 4, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -212,7 +212,7 @@ "trace_id": 0, "span_id": 7, "parent_id": 4, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "project", @@ -249,7 +249,7 @@ "trace_id": 0, "span_id": 9, "parent_id": 7, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -287,7 +287,7 @@ "trace_id": 0, "span_id": 10, "parent_id": 9, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -316,7 +316,7 @@ "trace_id": 0, "span_id": 13, "parent_id": 10, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -354,7 +354,7 @@ "trace_id": 0, "span_id": 11, "parent_id": 9, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -383,7 +383,7 @@ "trace_id": 0, "span_id": 14, "parent_id": 11, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -421,7 +421,7 @@ "trace_id": 0, "span_id": 12, "parent_id": 9, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -450,7 +450,7 @@ "trace_id": 0, "span_id": 15, "parent_id": 12, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_actor.json b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_actor.json index 92a8e5c0dbc..cd921deb78f 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_actor.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_actor.json @@ -6,7 +6,7 @@ "trace_id": 0, "span_id": 1, "parent_id": 0, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray.dashboard", @@ -37,7 +37,7 @@ "trace_id": 0, "span_id": 2, "parent_id": 1, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray.dashboard", @@ -61,7 +61,7 @@ "trace_id": 0, "span_id": 3, "parent_id": 1, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray.dashboard", @@ -87,7 +87,7 @@ "trace_id": 0, "span_id": 4, "parent_id": 3, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -125,7 +125,7 @@ "trace_id": 0, "span_id": 5, "parent_id": 4, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -154,7 +154,7 @@ "trace_id": 0, "span_id": 8, "parent_id": 5, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -183,7 +183,7 @@ "trace_id": 0, "span_id": 6, "parent_id": 4, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -212,7 +212,7 @@ "trace_id": 0, "span_id": 7, "parent_id": 4, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "project", @@ -248,7 +248,7 @@ "trace_id": 0, "span_id": 9, "parent_id": 7, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -286,7 +286,7 @@ "trace_id": 0, "span_id": 10, "parent_id": 9, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -315,7 +315,7 @@ "trace_id": 0, "span_id": 11, "parent_id": 10, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -344,7 +344,7 @@ "trace_id": 0, "span_id": 12, "parent_id": 10, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_task.json b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_task.json index ebf7ce89c03..831f56b242b 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_task.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_task.json @@ -6,7 +6,7 @@ "trace_id": 0, "span_id": 1, "parent_id": 0, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray.dashboard", @@ -37,7 +37,7 @@ "trace_id": 0, "span_id": 2, "parent_id": 1, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray.dashboard", @@ -61,7 +61,7 @@ "trace_id": 0, "span_id": 3, "parent_id": 1, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray.dashboard", @@ -87,7 +87,7 @@ "trace_id": 0, "span_id": 4, "parent_id": 3, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -125,7 +125,7 @@ "trace_id": 0, "span_id": 5, "parent_id": 4, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -154,7 +154,7 @@ "trace_id": 0, "span_id": 11, "parent_id": 5, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -183,7 +183,7 @@ "trace_id": 0, "span_id": 6, "parent_id": 4, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -212,7 +212,7 @@ "trace_id": 0, "span_id": 7, "parent_id": 4, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "project", @@ -249,7 +249,7 @@ "trace_id": 0, "span_id": 12, "parent_id": 7, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -287,7 +287,7 @@ "trace_id": 0, "span_id": 8, "parent_id": 4, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "project", @@ -324,7 +324,7 @@ "trace_id": 0, "span_id": 13, "parent_id": 8, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -362,7 +362,7 @@ "trace_id": 0, "span_id": 9, "parent_id": 4, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "project", @@ -399,7 +399,7 @@ "trace_id": 0, "span_id": 14, "parent_id": 9, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", @@ -437,7 +437,7 @@ "trace_id": 0, "span_id": 10, "parent_id": 4, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "project", @@ -474,7 +474,7 @@ "trace_id": 0, "span_id": 15, "parent_id": 10, - "type": "ml", + "type": "ray", "error": 0, "meta": { "_dd.base_service": "ray._private.workers", From 931598f68047ca77763044965053e07f909dc911 Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Fri, 5 Sep 2025 14:06:42 +0200 Subject: [PATCH 14/59] fix(ray): inject tracing at task submission instead of init --- ddtrace/contrib/internal/ray/patch.py | 41 +++++++++++++++------------ ddtrace/contrib/internal/ray/utils.py | 2 -- 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/ddtrace/contrib/internal/ray/patch.py b/ddtrace/contrib/internal/ray/patch.py index 6823c6f22cf..233678fd3de 100644 --- a/ddtrace/contrib/internal/ray/patch.py +++ b/ddtrace/contrib/internal/ray/patch.py @@ -1,6 +1,7 @@ from contextlib import contextmanager from functools import wraps import inspect +import logging import os import threading from typing import Any @@ -36,6 +37,17 @@ from ddtrace.internal.utils.wrappers import unwrap as _u from ddtrace.propagation.http import _TraceContext from ddtrace.settings._config import _get_config +import ray +from ray._private.inspect_util import is_class_method +from ray._private.inspect_util import is_function_or_method +from ray._private.inspect_util import is_static_method +import ray._private.worker +import ray.actor +import ray.dashboard.modules.job.job_manager +from ray.dashboard.modules.job.job_manager import generate_job_id +import ray.dashboard.modules.job.job_supervisor +import ray.exceptions +import ray.train from .utils import _extract_tracing_context_from_env from .utils import _inject_context_in_env @@ -45,6 +57,9 @@ from .utils import extract_signature +logger = logging.getLogger(__name__) +logger.setLevel(logging.INFO) + config._add( "ray", dict( @@ -141,31 +156,22 @@ def _wrap_task_execution(wrapped, *args, **kwargs): raise e -def traced_remote_function_init(wrapped, instance, args, kwargs): - """Inject Tracing/Wrapped the function that will be executed - when calling func.remote() - """ +def traced_submit_task(wrapped, instance, args, kwargs): + """Trace task submission, i.e the func.remote() call""" + if not tracer: return wrapped(*args, **kwargs) - result = wrapped(*args, **kwargs) + if tracer.current_span() is None: + tracer.context_provider.activate(_extract_tracing_context_from_env()) + + # Inject dd_trace_ctx args in the function being executed by ray with instance._inject_lock: if instance._function_signature is None: instance._function = _inject_tracing_into_remote_function(instance._function) instance._function.__signature__ = _inject_dd_trace_ctx_kwarg(instance._function) instance._function_signature = extract_signature(instance._function) - return result - - -def traced_submit_task(wrapped, instance, args, kwargs): - """Trace task submission, i.e the func.remote() call""" - if not tracer: - return wrapped(*args, **kwargs) - - if tracer.current_span() is None: - tracer.context_provider.activate(_extract_tracing_context_from_env()) - with tracer.trace( f"{instance._function_name}.remote()", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.RAY ) as span: @@ -241,6 +247,7 @@ def traced_actor_method_call(wrapped, instance, args, kwargs): actor_name = instance._ray_actor_creation_function_descriptor.class_name method_name = args[0] + # if _dd_trace_ctx was not injected in the param of the function, it means # we do not want to trace this function, for example: JobSupervisor.ping if not any(p.name == "_dd_trace_ctx" for p in instance._ray_method_signatures[method_name]): @@ -419,7 +426,6 @@ def patch(): tracer._span_aggregator.user_processors.append(RayTraceProcessor()) - _w(ray.remote_function.RemoteFunction, "__init__", traced_remote_function_init) _w(ray.remote_function.RemoteFunction, "_remote", traced_submit_task) _w(ray.dashboard.modules.job.job_manager.JobManager, "submit_job", traced_submit_job) @@ -439,7 +445,6 @@ def unpatch(): p for p in tracer._span_aggregator.user_processors if not isinstance(p, RayTraceProcessor) ] - _u(ray.remote_function.RemoteFunction, "__init__") _u(ray.remote_function.RemoteFunction, "_remote") _u(ray.dashboard.modules.job.job_manager.JobManager, "submit_job") diff --git a/ddtrace/contrib/internal/ray/utils.py b/ddtrace/contrib/internal/ray/utils.py index 4d569b904f4..e32f29a81bb 100644 --- a/ddtrace/contrib/internal/ray/utils.py +++ b/ddtrace/contrib/internal/ray/utils.py @@ -9,8 +9,6 @@ import ray from ray.runtime_context import get_runtime_context -from ddtrace.propagation.http import _TraceContext - def _inject_dd_trace_ctx_kwarg(method: Callable) -> Signature: old_sig = inspect.signature(method) From 3fdc71c17bc4555a4fb52a035721bc206126482b Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Fri, 5 Sep 2025 14:41:01 +0200 Subject: [PATCH 15/59] prepare PR --- .riot/requirements/11c76b3.txt | 4 +- .riot/requirements/15ca875.txt | 68 ---------------- .riot/requirements/1844b95.txt | 79 ------------------- .riot/requirements/18ae9e5.txt | 75 ------------------ .riot/requirements/1a1fcb0.txt | 75 ------------------ .riot/requirements/1ad0343.txt | 79 ------------------- .riot/requirements/1af2ad1.txt | 72 ----------------- .riot/requirements/1cc492b.txt | 6 +- .riot/requirements/228fcd5.txt | 68 ---------------- .riot/requirements/692becc.txt | 72 ----------------- ddtrace/contrib/internal/ray/hook.py | 3 +- ddtrace/contrib/internal/ray/patch.py | 11 --- ddtrace/contrib/internal/ray/utils.py | 1 + ...ray-core-integration-91f88d121822166d.yaml | 9 +++ tests/contrib/ray/test_ray_patch.py | 3 - 15 files changed, 16 insertions(+), 609 deletions(-) delete mode 100644 .riot/requirements/15ca875.txt delete mode 100644 .riot/requirements/1844b95.txt delete mode 100644 .riot/requirements/18ae9e5.txt delete mode 100644 .riot/requirements/1a1fcb0.txt delete mode 100644 .riot/requirements/1ad0343.txt delete mode 100644 .riot/requirements/1af2ad1.txt delete mode 100644 .riot/requirements/228fcd5.txt delete mode 100644 .riot/requirements/692becc.txt create mode 100644 releasenotes/notes/ray-core-integration-91f88d121822166d.yaml diff --git a/.riot/requirements/11c76b3.txt b/.riot/requirements/11c76b3.txt index c3d8710c653..178475dd64d 100644 --- a/.riot/requirements/11c76b3.txt +++ b/.riot/requirements/11c76b3.txt @@ -47,10 +47,10 @@ pyasn1-modules==0.4.2 pydantic==2.11.7 pydantic-core==2.33.2 pygments==2.19.2 -pytest==8.4.1 +pytest==8.4.2 pytest-asyncio==1.1.0 pytest-cov==6.2.1 -pytest-mock==3.14.1 +pytest-mock==3.15.0 pyyaml==6.0.2 ray[default]==2.46.0 referencing==0.36.2 diff --git a/.riot/requirements/15ca875.txt b/.riot/requirements/15ca875.txt deleted file mode 100644 index 5583bbc2822..00000000000 --- a/.riot/requirements/15ca875.txt +++ /dev/null @@ -1,68 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.12 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/15ca875.in -# -aiohappyeyeballs==2.6.1 -aiohttp==3.12.15 -aiohttp-cors==0.8.1 -aiosignal==1.4.0 -annotated-types==0.7.0 -attrs==25.3.0 -cachetools==5.5.2 -certifi==2025.8.3 -charset-normalizer==3.4.3 -click==8.2.1 -colorful==0.5.7 -coverage[toml]==7.10.6 -distlib==0.4.0 -filelock==3.19.1 -frozenlist==1.7.0 -google-api-core==2.25.1 -google-auth==2.40.3 -googleapis-common-protos==1.70.0 -grpcio==1.74.0 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -jsonschema==4.25.1 -jsonschema-specifications==2025.4.1 -mock==5.2.0 -msgpack==1.1.1 -multidict==6.6.4 -opencensus==0.11.4 -opencensus-context==0.1.3 -opentracing==2.4.0 -packaging==25.0 -platformdirs==4.4.0 -pluggy==1.6.0 -prometheus-client==0.22.1 -propcache==0.3.2 -proto-plus==1.26.1 -protobuf==6.32.0 -py-spy==0.4.1 -pyasn1==0.6.1 -pyasn1-modules==0.4.2 -pydantic==2.11.7 -pydantic-core==2.33.2 -pygments==2.19.2 -pytest==8.4.2 -pytest-asyncio==1.1.0 -pytest-cov==6.2.1 -pytest-mock==3.14.1 -pyyaml==6.0.2 -ray[default]==2.46.0 -referencing==0.36.2 -requests==2.32.5 -rpds-py==0.27.1 -rsa==4.9.1 -six==1.17.0 -smart-open==7.3.0.post1 -sortedcontainers==2.4.0 -typing-extensions==4.15.0 -typing-inspection==0.4.1 -urllib3==2.5.0 -virtualenv==20.34.0 -wrapt==1.17.3 -yarl==1.20.1 diff --git a/.riot/requirements/1844b95.txt b/.riot/requirements/1844b95.txt deleted file mode 100644 index 0122c459836..00000000000 --- a/.riot/requirements/1844b95.txt +++ /dev/null @@ -1,79 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1844b95.in -# -aiohappyeyeballs==2.6.1 -aiohttp==3.12.15 -aiohttp-cors==0.8.1 -aiosignal==1.4.0 -annotated-types==0.7.0 -async-timeout==5.0.1 -attrs==25.3.0 -backports-asyncio-runner==1.2.0 -cachetools==5.5.2 -certifi==2025.8.3 -charset-normalizer==3.4.3 -click==8.1.8 -colorful==0.5.7 -coverage[toml]==7.10.6 -distlib==0.4.0 -exceptiongroup==1.3.0 -filelock==3.19.1 -frozenlist==1.7.0 -google-api-core==2.25.1 -google-auth==2.40.3 -googleapis-common-protos==1.70.0 -grpcio==1.74.0 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.7.0 -iniconfig==2.1.0 -jsonschema==4.25.1 -jsonschema-specifications==2025.4.1 -mock==5.2.0 -msgpack==1.1.1 -multidict==6.6.4 -opencensus==0.11.4 -opencensus-context==0.1.3 -opentelemetry-api==1.36.0 -opentelemetry-exporter-prometheus==0.57b0 -opentelemetry-proto==1.36.0 -opentelemetry-sdk==1.36.0 -opentelemetry-semantic-conventions==0.57b0 -opentracing==2.4.0 -packaging==25.0 -platformdirs==4.4.0 -pluggy==1.6.0 -prometheus-client==0.22.1 -propcache==0.3.2 -proto-plus==1.26.1 -protobuf==6.32.0 -py-spy==0.4.1 -pyasn1==0.6.1 -pyasn1-modules==0.4.2 -pydantic==2.11.7 -pydantic-core==2.33.2 -pygments==2.19.2 -pytest==8.4.2 -pytest-asyncio==1.1.0 -pytest-cov==6.2.1 -pytest-mock==3.14.1 -pyyaml==6.0.2 -ray[default]==2.49.1 -referencing==0.36.2 -requests==2.32.5 -rpds-py==0.27.1 -rsa==4.9.1 -six==1.17.0 -smart-open==7.3.0.post1 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.15.0 -typing-inspection==0.4.1 -urllib3==2.5.0 -virtualenv==20.34.0 -wrapt==1.17.3 -yarl==1.20.1 -zipp==3.23.0 diff --git a/.riot/requirements/18ae9e5.txt b/.riot/requirements/18ae9e5.txt deleted file mode 100644 index 57d98c57349..00000000000 --- a/.riot/requirements/18ae9e5.txt +++ /dev/null @@ -1,75 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/18ae9e5.in -# -aiohappyeyeballs==2.6.1 -aiohttp==3.12.15 -aiohttp-cors==0.8.1 -aiosignal==1.4.0 -annotated-types==0.7.0 -attrs==25.3.0 -cachetools==5.5.2 -certifi==2025.8.3 -charset-normalizer==3.4.3 -click==8.2.1 -colorful==0.5.7 -coverage[toml]==7.10.6 -distlib==0.4.0 -filelock==3.19.1 -frozenlist==1.7.0 -google-api-core==2.25.1 -google-auth==2.40.3 -googleapis-common-protos==1.70.0 -grpcio==1.74.0 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.7.0 -iniconfig==2.1.0 -jsonschema==4.25.1 -jsonschema-specifications==2025.4.1 -mock==5.2.0 -msgpack==1.1.1 -multidict==6.6.4 -opencensus==0.11.4 -opencensus-context==0.1.3 -opentelemetry-api==1.36.0 -opentelemetry-exporter-prometheus==0.57b0 -opentelemetry-proto==1.36.0 -opentelemetry-sdk==1.36.0 -opentelemetry-semantic-conventions==0.57b0 -opentracing==2.4.0 -packaging==25.0 -platformdirs==4.4.0 -pluggy==1.6.0 -prometheus-client==0.22.1 -propcache==0.3.2 -proto-plus==1.26.1 -protobuf==6.32.0 -py-spy==0.4.1 -pyasn1==0.6.1 -pyasn1-modules==0.4.2 -pydantic==2.11.7 -pydantic-core==2.33.2 -pygments==2.19.2 -pytest==8.4.2 -pytest-asyncio==1.1.0 -pytest-cov==6.2.1 -pytest-mock==3.14.1 -pyyaml==6.0.2 -ray[default]==2.49.1 -referencing==0.36.2 -requests==2.32.5 -rpds-py==0.27.1 -rsa==4.9.1 -six==1.17.0 -smart-open==7.3.0.post1 -sortedcontainers==2.4.0 -typing-extensions==4.15.0 -typing-inspection==0.4.1 -urllib3==2.5.0 -virtualenv==20.34.0 -wrapt==1.17.3 -yarl==1.20.1 -zipp==3.23.0 diff --git a/.riot/requirements/1a1fcb0.txt b/.riot/requirements/1a1fcb0.txt deleted file mode 100644 index b06228bf2a3..00000000000 --- a/.riot/requirements/1a1fcb0.txt +++ /dev/null @@ -1,75 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.12 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1a1fcb0.in -# -aiohappyeyeballs==2.6.1 -aiohttp==3.12.15 -aiohttp-cors==0.8.1 -aiosignal==1.4.0 -annotated-types==0.7.0 -attrs==25.3.0 -cachetools==5.5.2 -certifi==2025.8.3 -charset-normalizer==3.4.3 -click==8.2.1 -colorful==0.5.7 -coverage[toml]==7.10.6 -distlib==0.4.0 -filelock==3.19.1 -frozenlist==1.7.0 -google-api-core==2.25.1 -google-auth==2.40.3 -googleapis-common-protos==1.70.0 -grpcio==1.74.0 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.7.0 -iniconfig==2.1.0 -jsonschema==4.25.1 -jsonschema-specifications==2025.4.1 -mock==5.2.0 -msgpack==1.1.1 -multidict==6.6.4 -opencensus==0.11.4 -opencensus-context==0.1.3 -opentelemetry-api==1.36.0 -opentelemetry-exporter-prometheus==0.57b0 -opentelemetry-proto==1.36.0 -opentelemetry-sdk==1.36.0 -opentelemetry-semantic-conventions==0.57b0 -opentracing==2.4.0 -packaging==25.0 -platformdirs==4.4.0 -pluggy==1.6.0 -prometheus-client==0.22.1 -propcache==0.3.2 -proto-plus==1.26.1 -protobuf==6.32.0 -py-spy==0.4.1 -pyasn1==0.6.1 -pyasn1-modules==0.4.2 -pydantic==2.11.7 -pydantic-core==2.33.2 -pygments==2.19.2 -pytest==8.4.2 -pytest-asyncio==1.1.0 -pytest-cov==6.2.1 -pytest-mock==3.14.1 -pyyaml==6.0.2 -ray[default]==2.49.1 -referencing==0.36.2 -requests==2.32.5 -rpds-py==0.27.1 -rsa==4.9.1 -six==1.17.0 -smart-open==7.3.0.post1 -sortedcontainers==2.4.0 -typing-extensions==4.15.0 -typing-inspection==0.4.1 -urllib3==2.5.0 -virtualenv==20.34.0 -wrapt==1.17.3 -yarl==1.20.1 -zipp==3.23.0 diff --git a/.riot/requirements/1ad0343.txt b/.riot/requirements/1ad0343.txt deleted file mode 100644 index 983f8e3e6be..00000000000 --- a/.riot/requirements/1ad0343.txt +++ /dev/null @@ -1,79 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.10 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1ad0343.in -# -aiohappyeyeballs==2.6.1 -aiohttp==3.12.15 -aiohttp-cors==0.8.1 -aiosignal==1.4.0 -annotated-types==0.7.0 -async-timeout==5.0.1 -attrs==25.3.0 -backports-asyncio-runner==1.2.0 -cachetools==5.5.2 -certifi==2025.8.3 -charset-normalizer==3.4.3 -click==8.2.1 -colorful==0.5.7 -coverage[toml]==7.10.6 -distlib==0.4.0 -exceptiongroup==1.3.0 -filelock==3.19.1 -frozenlist==1.7.0 -google-api-core==2.25.1 -google-auth==2.40.3 -googleapis-common-protos==1.70.0 -grpcio==1.74.0 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.7.0 -iniconfig==2.1.0 -jsonschema==4.25.1 -jsonschema-specifications==2025.4.1 -mock==5.2.0 -msgpack==1.1.1 -multidict==6.6.4 -opencensus==0.11.4 -opencensus-context==0.1.3 -opentelemetry-api==1.36.0 -opentelemetry-exporter-prometheus==0.57b0 -opentelemetry-proto==1.36.0 -opentelemetry-sdk==1.36.0 -opentelemetry-semantic-conventions==0.57b0 -opentracing==2.4.0 -packaging==25.0 -platformdirs==4.4.0 -pluggy==1.6.0 -prometheus-client==0.22.1 -propcache==0.3.2 -proto-plus==1.26.1 -protobuf==6.32.0 -py-spy==0.4.1 -pyasn1==0.6.1 -pyasn1-modules==0.4.2 -pydantic==2.11.7 -pydantic-core==2.33.2 -pygments==2.19.2 -pytest==8.4.2 -pytest-asyncio==1.1.0 -pytest-cov==6.2.1 -pytest-mock==3.14.1 -pyyaml==6.0.2 -ray[default]==2.49.1 -referencing==0.36.2 -requests==2.32.5 -rpds-py==0.27.1 -rsa==4.9.1 -six==1.17.0 -smart-open==7.3.0.post1 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.15.0 -typing-inspection==0.4.1 -urllib3==2.5.0 -virtualenv==20.34.0 -wrapt==1.17.3 -yarl==1.20.1 -zipp==3.23.0 diff --git a/.riot/requirements/1af2ad1.txt b/.riot/requirements/1af2ad1.txt deleted file mode 100644 index 36a9e45b246..00000000000 --- a/.riot/requirements/1af2ad1.txt +++ /dev/null @@ -1,72 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1af2ad1.in -# -aiohappyeyeballs==2.6.1 -aiohttp==3.12.15 -aiohttp-cors==0.8.1 -aiosignal==1.4.0 -annotated-types==0.7.0 -async-timeout==5.0.1 -attrs==25.3.0 -backports-asyncio-runner==1.2.0 -cachetools==5.5.2 -certifi==2025.8.3 -charset-normalizer==3.4.3 -click==8.1.8 -colorful==0.5.7 -coverage[toml]==7.10.6 -distlib==0.4.0 -exceptiongroup==1.3.0 -filelock==3.19.1 -frozenlist==1.7.0 -google-api-core==2.25.1 -google-auth==2.40.3 -googleapis-common-protos==1.70.0 -grpcio==1.74.0 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -jsonschema==4.25.1 -jsonschema-specifications==2025.4.1 -mock==5.2.0 -msgpack==1.1.1 -multidict==6.6.4 -opencensus==0.11.4 -opencensus-context==0.1.3 -opentracing==2.4.0 -packaging==25.0 -platformdirs==4.4.0 -pluggy==1.6.0 -prometheus-client==0.22.1 -propcache==0.3.2 -proto-plus==1.26.1 -protobuf==6.32.0 -py-spy==0.4.1 -pyasn1==0.6.1 -pyasn1-modules==0.4.2 -pydantic==2.11.7 -pydantic-core==2.33.2 -pygments==2.19.2 -pytest==8.4.2 -pytest-asyncio==1.1.0 -pytest-cov==6.2.1 -pytest-mock==3.14.1 -pyyaml==6.0.2 -ray[default]==2.46.0 -referencing==0.36.2 -requests==2.32.5 -rpds-py==0.27.1 -rsa==4.9.1 -six==1.17.0 -smart-open==7.3.0.post1 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.15.0 -typing-inspection==0.4.1 -urllib3==2.5.0 -virtualenv==20.34.0 -wrapt==1.17.3 -yarl==1.20.1 diff --git a/.riot/requirements/1cc492b.txt b/.riot/requirements/1cc492b.txt index 33b4bf91638..7f3c369cc1b 100644 --- a/.riot/requirements/1cc492b.txt +++ b/.riot/requirements/1cc492b.txt @@ -53,12 +53,12 @@ pyasn1-modules==0.4.2 pydantic==2.11.7 pydantic-core==2.33.2 pygments==2.19.2 -pytest==8.4.1 +pytest==8.4.2 pytest-asyncio==1.1.0 pytest-cov==6.2.1 -pytest-mock==3.14.1 +pytest-mock==3.15.0 pyyaml==6.0.2 -ray[default]==2.49.0 +ray[default]==2.49.1 referencing==0.36.2 requests==2.32.5 rpds-py==0.27.1 diff --git a/.riot/requirements/228fcd5.txt b/.riot/requirements/228fcd5.txt deleted file mode 100644 index f167a8c4059..00000000000 --- a/.riot/requirements/228fcd5.txt +++ /dev/null @@ -1,68 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/228fcd5.in -# -aiohappyeyeballs==2.6.1 -aiohttp==3.12.15 -aiohttp-cors==0.8.1 -aiosignal==1.4.0 -annotated-types==0.7.0 -attrs==25.3.0 -cachetools==5.5.2 -certifi==2025.8.3 -charset-normalizer==3.4.3 -click==8.2.1 -colorful==0.5.7 -coverage[toml]==7.10.6 -distlib==0.4.0 -filelock==3.19.1 -frozenlist==1.7.0 -google-api-core==2.25.1 -google-auth==2.40.3 -googleapis-common-protos==1.70.0 -grpcio==1.74.0 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -jsonschema==4.25.1 -jsonschema-specifications==2025.4.1 -mock==5.2.0 -msgpack==1.1.1 -multidict==6.6.4 -opencensus==0.11.4 -opencensus-context==0.1.3 -opentracing==2.4.0 -packaging==25.0 -platformdirs==4.4.0 -pluggy==1.6.0 -prometheus-client==0.22.1 -propcache==0.3.2 -proto-plus==1.26.1 -protobuf==6.32.0 -py-spy==0.4.1 -pyasn1==0.6.1 -pyasn1-modules==0.4.2 -pydantic==2.11.7 -pydantic-core==2.33.2 -pygments==2.19.2 -pytest==8.4.2 -pytest-asyncio==1.1.0 -pytest-cov==6.2.1 -pytest-mock==3.14.1 -pyyaml==6.0.2 -ray[default]==2.46.0 -referencing==0.36.2 -requests==2.32.5 -rpds-py==0.27.1 -rsa==4.9.1 -six==1.17.0 -smart-open==7.3.0.post1 -sortedcontainers==2.4.0 -typing-extensions==4.15.0 -typing-inspection==0.4.1 -urllib3==2.5.0 -virtualenv==20.34.0 -wrapt==1.17.3 -yarl==1.20.1 diff --git a/.riot/requirements/692becc.txt b/.riot/requirements/692becc.txt deleted file mode 100644 index 8055bca566d..00000000000 --- a/.riot/requirements/692becc.txt +++ /dev/null @@ -1,72 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.10 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/692becc.in -# -aiohappyeyeballs==2.6.1 -aiohttp==3.12.15 -aiohttp-cors==0.8.1 -aiosignal==1.4.0 -annotated-types==0.7.0 -async-timeout==5.0.1 -attrs==25.3.0 -backports-asyncio-runner==1.2.0 -cachetools==5.5.2 -certifi==2025.8.3 -charset-normalizer==3.4.3 -click==8.2.1 -colorful==0.5.7 -coverage[toml]==7.10.6 -distlib==0.4.0 -exceptiongroup==1.3.0 -filelock==3.19.1 -frozenlist==1.7.0 -google-api-core==2.25.1 -google-auth==2.40.3 -googleapis-common-protos==1.70.0 -grpcio==1.74.0 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -jsonschema==4.25.1 -jsonschema-specifications==2025.4.1 -mock==5.2.0 -msgpack==1.1.1 -multidict==6.6.4 -opencensus==0.11.4 -opencensus-context==0.1.3 -opentracing==2.4.0 -packaging==25.0 -platformdirs==4.4.0 -pluggy==1.6.0 -prometheus-client==0.22.1 -propcache==0.3.2 -proto-plus==1.26.1 -protobuf==6.32.0 -py-spy==0.4.1 -pyasn1==0.6.1 -pyasn1-modules==0.4.2 -pydantic==2.11.7 -pydantic-core==2.33.2 -pygments==2.19.2 -pytest==8.4.2 -pytest-asyncio==1.1.0 -pytest-cov==6.2.1 -pytest-mock==3.14.1 -pyyaml==6.0.2 -ray[default]==2.46.0 -referencing==0.36.2 -requests==2.32.5 -rpds-py==0.27.1 -rsa==4.9.1 -six==1.17.0 -smart-open==7.3.0.post1 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.15.0 -typing-inspection==0.4.1 -urllib3==2.5.0 -virtualenv==20.34.0 -wrapt==1.17.3 -yarl==1.20.1 diff --git a/ddtrace/contrib/internal/ray/hook.py b/ddtrace/contrib/internal/ray/hook.py index 5576b961e62..97c980d5937 100644 --- a/ddtrace/contrib/internal/ray/hook.py +++ b/ddtrace/contrib/internal/ray/hook.py @@ -1,9 +1,8 @@ def setup_tracing(): + import ddtrace.auto # noqa:F401 from ray.util.tracing import tracing_helper from ray.util.tracing.tracing_helper import _is_tracing_enabled - import ddtrace.auto # noqa:F401 - tracing_helper._global_is_tracing_enabled = False if _is_tracing_enabled(): raise AssertionError("OTEL Tracing should be disabled at setup.") diff --git a/ddtrace/contrib/internal/ray/patch.py b/ddtrace/contrib/internal/ray/patch.py index 233678fd3de..979e24c87da 100644 --- a/ddtrace/contrib/internal/ray/patch.py +++ b/ddtrace/contrib/internal/ray/patch.py @@ -10,16 +10,6 @@ from typing import List from typing import Optional -import ray -from ray._private.inspect_util import is_class_method -from ray._private.inspect_util import is_function_or_method -from ray._private.inspect_util import is_static_method -import ray._private.worker -import ray.actor -import ray.dashboard.modules.job.job_manager -from ray.dashboard.modules.job.job_manager import generate_job_id -import ray.dashboard.modules.job.job_supervisor -import ray.exceptions from wrapt import wrap_function_wrapper as _w from ddtrace import config @@ -47,7 +37,6 @@ from ray.dashboard.modules.job.job_manager import generate_job_id import ray.dashboard.modules.job.job_supervisor import ray.exceptions -import ray.train from .utils import _extract_tracing_context_from_env from .utils import _inject_context_in_env diff --git a/ddtrace/contrib/internal/ray/utils.py b/ddtrace/contrib/internal/ray/utils.py index e32f29a81bb..ef0f794b83b 100644 --- a/ddtrace/contrib/internal/ray/utils.py +++ b/ddtrace/contrib/internal/ray/utils.py @@ -6,6 +6,7 @@ from typing import Callable from typing import List +from ddtrace.propagation.http import _TraceContext import ray from ray.runtime_context import get_runtime_context diff --git a/releasenotes/notes/ray-core-integration-91f88d121822166d.yaml b/releasenotes/notes/ray-core-integration-91f88d121822166d.yaml new file mode 100644 index 00000000000..987b08838a8 --- /dev/null +++ b/releasenotes/notes/ray-core-integration-91f88d121822166d.yaml @@ -0,0 +1,9 @@ +--- +features: + - | + ray: This introduces a Ray core integration that traces Ray jobs, remote + tasks, and actor method calls. Supported for Ray >= 2.46.0. + + To enable tracing, start the Ray head with + `--tracing-startup-hook=ddtrace.contrib.internal.ray.hook:setup_tracing`, + then submit jobs as usual. diff --git a/tests/contrib/ray/test_ray_patch.py b/tests/contrib/ray/test_ray_patch.py index 39b5238974b..52f2ddbfe20 100644 --- a/tests/contrib/ray/test_ray_patch.py +++ b/tests/contrib/ray/test_ray_patch.py @@ -12,7 +12,6 @@ class TestRayPatch(PatchTestCase.Base): __get_version__ = get_version def assert_module_patched(self, ray): - self.assert_wrapped(ray.remote_function.RemoteFunction.__init__) self.assert_wrapped(ray.remote_function.RemoteFunction._remote) self.assert_wrapped(ray.dashboard.modules.job.job_manager.JobManager.submit_job) self.assert_wrapped(ray.dashboard.modules.job.job_manager.JobManager._monitor_job_internal) @@ -20,7 +19,6 @@ def assert_module_patched(self, ray): self.assert_wrapped(ray.actor.ActorHandle._actor_method_call) def assert_not_module_patched(self, ray): - self.assert_not_wrapped(ray.remote_function.RemoteFunction.__init__) self.assert_not_wrapped(ray.remote_function.RemoteFunction._remote) self.assert_not_wrapped(ray.dashboard.modules.job.job_manager.JobManager.submit_job) self.assert_not_wrapped(ray.dashboard.modules.job.job_manager.JobManager._monitor_job_internal) @@ -28,7 +26,6 @@ def assert_not_module_patched(self, ray): self.assert_not_wrapped(ray.actor.ActorHandle._actor_method_call) def assert_not_module_double_patched(self, ray): - self.assert_not_double_wrapped(ray.remote_function.RemoteFunction.__init__) self.assert_not_double_wrapped(ray.remote_function.RemoteFunction._remote) self.assert_not_double_wrapped(ray.dashboard.modules.job.job_manager.JobManager.submit_job) self.assert_not_double_wrapped(ray.dashboard.modules.job.job_manager.JobManager._monitor_job_internal) From 0a9bfac9c3de6d15bc9e96db3cff863baa70b968 Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Fri, 5 Sep 2025 15:11:19 +0200 Subject: [PATCH 16/59] Prepare PR: 2 --- .gitignore | 2 - .riot/requirements/15ca875.txt | 68 ++++++++++++++++++++ .riot/requirements/1844b95.txt | 79 ++++++++++++++++++++++++ .riot/requirements/18ae9e5.txt | 75 ++++++++++++++++++++++ .riot/requirements/1a1fcb0.txt | 75 ++++++++++++++++++++++ .riot/requirements/1ad0343.txt | 79 ++++++++++++++++++++++++ .riot/requirements/1af2ad1.txt | 72 +++++++++++++++++++++ .riot/requirements/228fcd5.txt | 68 ++++++++++++++++++++ .riot/requirements/692becc.txt | 72 +++++++++++++++++++++ ddtrace/contrib/_ray.py | 25 -------- ddtrace/contrib/internal/ray/__init__.py | 39 ++++++++++++ ddtrace/contrib/internal/ray/hook.py | 3 +- ddtrace/contrib/internal/ray/patch.py | 20 +++--- ddtrace/contrib/internal/ray/utils.py | 3 +- 14 files changed, 641 insertions(+), 39 deletions(-) create mode 100644 .riot/requirements/15ca875.txt create mode 100644 .riot/requirements/1844b95.txt create mode 100644 .riot/requirements/18ae9e5.txt create mode 100644 .riot/requirements/1a1fcb0.txt create mode 100644 .riot/requirements/1ad0343.txt create mode 100644 .riot/requirements/1af2ad1.txt create mode 100644 .riot/requirements/228fcd5.txt create mode 100644 .riot/requirements/692becc.txt delete mode 100644 ddtrace/contrib/_ray.py diff --git a/.gitignore b/.gitignore index a9366b57731..56222903b81 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,3 @@ -.ray-tests - # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] diff --git a/.riot/requirements/15ca875.txt b/.riot/requirements/15ca875.txt new file mode 100644 index 00000000000..dae64a4ce77 --- /dev/null +++ b/.riot/requirements/15ca875.txt @@ -0,0 +1,68 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/15ca875.in +# +aiohappyeyeballs==2.6.1 +aiohttp==3.12.15 +aiohttp-cors==0.8.1 +aiosignal==1.4.0 +annotated-types==0.7.0 +attrs==25.3.0 +cachetools==5.5.2 +certifi==2025.8.3 +charset-normalizer==3.4.3 +click==8.2.1 +colorful==0.5.7 +coverage[toml]==7.10.6 +distlib==0.4.0 +filelock==3.19.1 +frozenlist==1.7.0 +google-api-core==2.25.1 +google-auth==2.40.3 +googleapis-common-protos==1.70.0 +grpcio==1.74.0 +hypothesis==6.45.0 +idna==3.10 +iniconfig==2.1.0 +jsonschema==4.25.1 +jsonschema-specifications==2025.4.1 +mock==5.2.0 +msgpack==1.1.1 +multidict==6.6.4 +opencensus==0.11.4 +opencensus-context==0.1.3 +opentracing==2.4.0 +packaging==25.0 +platformdirs==4.4.0 +pluggy==1.6.0 +prometheus-client==0.22.1 +propcache==0.3.2 +proto-plus==1.26.1 +protobuf==6.32.0 +py-spy==0.4.1 +pyasn1==0.6.1 +pyasn1-modules==0.4.2 +pydantic==2.11.7 +pydantic-core==2.33.2 +pygments==2.19.2 +pytest==8.4.2 +pytest-asyncio==1.1.0 +pytest-cov==6.2.1 +pytest-mock==3.15.0 +pyyaml==6.0.2 +ray[default]==2.46.0 +referencing==0.36.2 +requests==2.32.5 +rpds-py==0.27.1 +rsa==4.9.1 +six==1.17.0 +smart-open==7.3.0.post1 +sortedcontainers==2.4.0 +typing-extensions==4.15.0 +typing-inspection==0.4.1 +urllib3==2.5.0 +virtualenv==20.34.0 +wrapt==1.17.3 +yarl==1.20.1 diff --git a/.riot/requirements/1844b95.txt b/.riot/requirements/1844b95.txt new file mode 100644 index 00000000000..8dcb2dff28a --- /dev/null +++ b/.riot/requirements/1844b95.txt @@ -0,0 +1,79 @@ +# +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1844b95.in +# +aiohappyeyeballs==2.6.1 +aiohttp==3.12.15 +aiohttp-cors==0.8.1 +aiosignal==1.4.0 +annotated-types==0.7.0 +async-timeout==5.0.1 +attrs==25.3.0 +backports-asyncio-runner==1.2.0 +cachetools==5.5.2 +certifi==2025.8.3 +charset-normalizer==3.4.3 +click==8.1.8 +colorful==0.5.7 +coverage[toml]==7.10.6 +distlib==0.4.0 +exceptiongroup==1.3.0 +filelock==3.19.1 +frozenlist==1.7.0 +google-api-core==2.25.1 +google-auth==2.40.3 +googleapis-common-protos==1.70.0 +grpcio==1.74.0 +hypothesis==6.45.0 +idna==3.10 +importlib-metadata==8.7.0 +iniconfig==2.1.0 +jsonschema==4.25.1 +jsonschema-specifications==2025.4.1 +mock==5.2.0 +msgpack==1.1.1 +multidict==6.6.4 +opencensus==0.11.4 +opencensus-context==0.1.3 +opentelemetry-api==1.36.0 +opentelemetry-exporter-prometheus==0.57b0 +opentelemetry-proto==1.36.0 +opentelemetry-sdk==1.36.0 +opentelemetry-semantic-conventions==0.57b0 +opentracing==2.4.0 +packaging==25.0 +platformdirs==4.4.0 +pluggy==1.6.0 +prometheus-client==0.22.1 +propcache==0.3.2 +proto-plus==1.26.1 +protobuf==6.32.0 +py-spy==0.4.1 +pyasn1==0.6.1 +pyasn1-modules==0.4.2 +pydantic==2.11.7 +pydantic-core==2.33.2 +pygments==2.19.2 +pytest==8.4.2 +pytest-asyncio==1.1.0 +pytest-cov==6.2.1 +pytest-mock==3.15.0 +pyyaml==6.0.2 +ray[default]==2.49.1 +referencing==0.36.2 +requests==2.32.5 +rpds-py==0.27.1 +rsa==4.9.1 +six==1.17.0 +smart-open==7.3.0.post1 +sortedcontainers==2.4.0 +tomli==2.2.1 +typing-extensions==4.15.0 +typing-inspection==0.4.1 +urllib3==2.5.0 +virtualenv==20.34.0 +wrapt==1.17.3 +yarl==1.20.1 +zipp==3.23.0 diff --git a/.riot/requirements/18ae9e5.txt b/.riot/requirements/18ae9e5.txt new file mode 100644 index 00000000000..8a6b35482d5 --- /dev/null +++ b/.riot/requirements/18ae9e5.txt @@ -0,0 +1,75 @@ +# +# This file is autogenerated by pip-compile with Python 3.11 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/18ae9e5.in +# +aiohappyeyeballs==2.6.1 +aiohttp==3.12.15 +aiohttp-cors==0.8.1 +aiosignal==1.4.0 +annotated-types==0.7.0 +attrs==25.3.0 +cachetools==5.5.2 +certifi==2025.8.3 +charset-normalizer==3.4.3 +click==8.2.1 +colorful==0.5.7 +coverage[toml]==7.10.6 +distlib==0.4.0 +filelock==3.19.1 +frozenlist==1.7.0 +google-api-core==2.25.1 +google-auth==2.40.3 +googleapis-common-protos==1.70.0 +grpcio==1.74.0 +hypothesis==6.45.0 +idna==3.10 +importlib-metadata==8.7.0 +iniconfig==2.1.0 +jsonschema==4.25.1 +jsonschema-specifications==2025.4.1 +mock==5.2.0 +msgpack==1.1.1 +multidict==6.6.4 +opencensus==0.11.4 +opencensus-context==0.1.3 +opentelemetry-api==1.36.0 +opentelemetry-exporter-prometheus==0.57b0 +opentelemetry-proto==1.36.0 +opentelemetry-sdk==1.36.0 +opentelemetry-semantic-conventions==0.57b0 +opentracing==2.4.0 +packaging==25.0 +platformdirs==4.4.0 +pluggy==1.6.0 +prometheus-client==0.22.1 +propcache==0.3.2 +proto-plus==1.26.1 +protobuf==6.32.0 +py-spy==0.4.1 +pyasn1==0.6.1 +pyasn1-modules==0.4.2 +pydantic==2.11.7 +pydantic-core==2.33.2 +pygments==2.19.2 +pytest==8.4.2 +pytest-asyncio==1.1.0 +pytest-cov==6.2.1 +pytest-mock==3.15.0 +pyyaml==6.0.2 +ray[default]==2.49.1 +referencing==0.36.2 +requests==2.32.5 +rpds-py==0.27.1 +rsa==4.9.1 +six==1.17.0 +smart-open==7.3.0.post1 +sortedcontainers==2.4.0 +typing-extensions==4.15.0 +typing-inspection==0.4.1 +urllib3==2.5.0 +virtualenv==20.34.0 +wrapt==1.17.3 +yarl==1.20.1 +zipp==3.23.0 diff --git a/.riot/requirements/1a1fcb0.txt b/.riot/requirements/1a1fcb0.txt new file mode 100644 index 00000000000..b88efd1e9de --- /dev/null +++ b/.riot/requirements/1a1fcb0.txt @@ -0,0 +1,75 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1a1fcb0.in +# +aiohappyeyeballs==2.6.1 +aiohttp==3.12.15 +aiohttp-cors==0.8.1 +aiosignal==1.4.0 +annotated-types==0.7.0 +attrs==25.3.0 +cachetools==5.5.2 +certifi==2025.8.3 +charset-normalizer==3.4.3 +click==8.2.1 +colorful==0.5.7 +coverage[toml]==7.10.6 +distlib==0.4.0 +filelock==3.19.1 +frozenlist==1.7.0 +google-api-core==2.25.1 +google-auth==2.40.3 +googleapis-common-protos==1.70.0 +grpcio==1.74.0 +hypothesis==6.45.0 +idna==3.10 +importlib-metadata==8.7.0 +iniconfig==2.1.0 +jsonschema==4.25.1 +jsonschema-specifications==2025.4.1 +mock==5.2.0 +msgpack==1.1.1 +multidict==6.6.4 +opencensus==0.11.4 +opencensus-context==0.1.3 +opentelemetry-api==1.36.0 +opentelemetry-exporter-prometheus==0.57b0 +opentelemetry-proto==1.36.0 +opentelemetry-sdk==1.36.0 +opentelemetry-semantic-conventions==0.57b0 +opentracing==2.4.0 +packaging==25.0 +platformdirs==4.4.0 +pluggy==1.6.0 +prometheus-client==0.22.1 +propcache==0.3.2 +proto-plus==1.26.1 +protobuf==6.32.0 +py-spy==0.4.1 +pyasn1==0.6.1 +pyasn1-modules==0.4.2 +pydantic==2.11.7 +pydantic-core==2.33.2 +pygments==2.19.2 +pytest==8.4.2 +pytest-asyncio==1.1.0 +pytest-cov==6.2.1 +pytest-mock==3.15.0 +pyyaml==6.0.2 +ray[default]==2.49.1 +referencing==0.36.2 +requests==2.32.5 +rpds-py==0.27.1 +rsa==4.9.1 +six==1.17.0 +smart-open==7.3.0.post1 +sortedcontainers==2.4.0 +typing-extensions==4.15.0 +typing-inspection==0.4.1 +urllib3==2.5.0 +virtualenv==20.34.0 +wrapt==1.17.3 +yarl==1.20.1 +zipp==3.23.0 diff --git a/.riot/requirements/1ad0343.txt b/.riot/requirements/1ad0343.txt new file mode 100644 index 00000000000..836da0a3c0a --- /dev/null +++ b/.riot/requirements/1ad0343.txt @@ -0,0 +1,79 @@ +# +# This file is autogenerated by pip-compile with Python 3.10 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1ad0343.in +# +aiohappyeyeballs==2.6.1 +aiohttp==3.12.15 +aiohttp-cors==0.8.1 +aiosignal==1.4.0 +annotated-types==0.7.0 +async-timeout==5.0.1 +attrs==25.3.0 +backports-asyncio-runner==1.2.0 +cachetools==5.5.2 +certifi==2025.8.3 +charset-normalizer==3.4.3 +click==8.2.1 +colorful==0.5.7 +coverage[toml]==7.10.6 +distlib==0.4.0 +exceptiongroup==1.3.0 +filelock==3.19.1 +frozenlist==1.7.0 +google-api-core==2.25.1 +google-auth==2.40.3 +googleapis-common-protos==1.70.0 +grpcio==1.74.0 +hypothesis==6.45.0 +idna==3.10 +importlib-metadata==8.7.0 +iniconfig==2.1.0 +jsonschema==4.25.1 +jsonschema-specifications==2025.4.1 +mock==5.2.0 +msgpack==1.1.1 +multidict==6.6.4 +opencensus==0.11.4 +opencensus-context==0.1.3 +opentelemetry-api==1.36.0 +opentelemetry-exporter-prometheus==0.57b0 +opentelemetry-proto==1.36.0 +opentelemetry-sdk==1.36.0 +opentelemetry-semantic-conventions==0.57b0 +opentracing==2.4.0 +packaging==25.0 +platformdirs==4.4.0 +pluggy==1.6.0 +prometheus-client==0.22.1 +propcache==0.3.2 +proto-plus==1.26.1 +protobuf==6.32.0 +py-spy==0.4.1 +pyasn1==0.6.1 +pyasn1-modules==0.4.2 +pydantic==2.11.7 +pydantic-core==2.33.2 +pygments==2.19.2 +pytest==8.4.2 +pytest-asyncio==1.1.0 +pytest-cov==6.2.1 +pytest-mock==3.15.0 +pyyaml==6.0.2 +ray[default]==2.49.1 +referencing==0.36.2 +requests==2.32.5 +rpds-py==0.27.1 +rsa==4.9.1 +six==1.17.0 +smart-open==7.3.0.post1 +sortedcontainers==2.4.0 +tomli==2.2.1 +typing-extensions==4.15.0 +typing-inspection==0.4.1 +urllib3==2.5.0 +virtualenv==20.34.0 +wrapt==1.17.3 +yarl==1.20.1 +zipp==3.23.0 diff --git a/.riot/requirements/1af2ad1.txt b/.riot/requirements/1af2ad1.txt new file mode 100644 index 00000000000..359a498f762 --- /dev/null +++ b/.riot/requirements/1af2ad1.txt @@ -0,0 +1,72 @@ +# +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1af2ad1.in +# +aiohappyeyeballs==2.6.1 +aiohttp==3.12.15 +aiohttp-cors==0.8.1 +aiosignal==1.4.0 +annotated-types==0.7.0 +async-timeout==5.0.1 +attrs==25.3.0 +backports-asyncio-runner==1.2.0 +cachetools==5.5.2 +certifi==2025.8.3 +charset-normalizer==3.4.3 +click==8.1.8 +colorful==0.5.7 +coverage[toml]==7.10.6 +distlib==0.4.0 +exceptiongroup==1.3.0 +filelock==3.19.1 +frozenlist==1.7.0 +google-api-core==2.25.1 +google-auth==2.40.3 +googleapis-common-protos==1.70.0 +grpcio==1.74.0 +hypothesis==6.45.0 +idna==3.10 +iniconfig==2.1.0 +jsonschema==4.25.1 +jsonschema-specifications==2025.4.1 +mock==5.2.0 +msgpack==1.1.1 +multidict==6.6.4 +opencensus==0.11.4 +opencensus-context==0.1.3 +opentracing==2.4.0 +packaging==25.0 +platformdirs==4.4.0 +pluggy==1.6.0 +prometheus-client==0.22.1 +propcache==0.3.2 +proto-plus==1.26.1 +protobuf==6.32.0 +py-spy==0.4.1 +pyasn1==0.6.1 +pyasn1-modules==0.4.2 +pydantic==2.11.7 +pydantic-core==2.33.2 +pygments==2.19.2 +pytest==8.4.2 +pytest-asyncio==1.1.0 +pytest-cov==6.2.1 +pytest-mock==3.15.0 +pyyaml==6.0.2 +ray[default]==2.46.0 +referencing==0.36.2 +requests==2.32.5 +rpds-py==0.27.1 +rsa==4.9.1 +six==1.17.0 +smart-open==7.3.0.post1 +sortedcontainers==2.4.0 +tomli==2.2.1 +typing-extensions==4.15.0 +typing-inspection==0.4.1 +urllib3==2.5.0 +virtualenv==20.34.0 +wrapt==1.17.3 +yarl==1.20.1 diff --git a/.riot/requirements/228fcd5.txt b/.riot/requirements/228fcd5.txt new file mode 100644 index 00000000000..9411edb9cb6 --- /dev/null +++ b/.riot/requirements/228fcd5.txt @@ -0,0 +1,68 @@ +# +# This file is autogenerated by pip-compile with Python 3.11 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/228fcd5.in +# +aiohappyeyeballs==2.6.1 +aiohttp==3.12.15 +aiohttp-cors==0.8.1 +aiosignal==1.4.0 +annotated-types==0.7.0 +attrs==25.3.0 +cachetools==5.5.2 +certifi==2025.8.3 +charset-normalizer==3.4.3 +click==8.2.1 +colorful==0.5.7 +coverage[toml]==7.10.6 +distlib==0.4.0 +filelock==3.19.1 +frozenlist==1.7.0 +google-api-core==2.25.1 +google-auth==2.40.3 +googleapis-common-protos==1.70.0 +grpcio==1.74.0 +hypothesis==6.45.0 +idna==3.10 +iniconfig==2.1.0 +jsonschema==4.25.1 +jsonschema-specifications==2025.4.1 +mock==5.2.0 +msgpack==1.1.1 +multidict==6.6.4 +opencensus==0.11.4 +opencensus-context==0.1.3 +opentracing==2.4.0 +packaging==25.0 +platformdirs==4.4.0 +pluggy==1.6.0 +prometheus-client==0.22.1 +propcache==0.3.2 +proto-plus==1.26.1 +protobuf==6.32.0 +py-spy==0.4.1 +pyasn1==0.6.1 +pyasn1-modules==0.4.2 +pydantic==2.11.7 +pydantic-core==2.33.2 +pygments==2.19.2 +pytest==8.4.2 +pytest-asyncio==1.1.0 +pytest-cov==6.2.1 +pytest-mock==3.15.0 +pyyaml==6.0.2 +ray[default]==2.46.0 +referencing==0.36.2 +requests==2.32.5 +rpds-py==0.27.1 +rsa==4.9.1 +six==1.17.0 +smart-open==7.3.0.post1 +sortedcontainers==2.4.0 +typing-extensions==4.15.0 +typing-inspection==0.4.1 +urllib3==2.5.0 +virtualenv==20.34.0 +wrapt==1.17.3 +yarl==1.20.1 diff --git a/.riot/requirements/692becc.txt b/.riot/requirements/692becc.txt new file mode 100644 index 00000000000..b8fdcbeef98 --- /dev/null +++ b/.riot/requirements/692becc.txt @@ -0,0 +1,72 @@ +# +# This file is autogenerated by pip-compile with Python 3.10 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/692becc.in +# +aiohappyeyeballs==2.6.1 +aiohttp==3.12.15 +aiohttp-cors==0.8.1 +aiosignal==1.4.0 +annotated-types==0.7.0 +async-timeout==5.0.1 +attrs==25.3.0 +backports-asyncio-runner==1.2.0 +cachetools==5.5.2 +certifi==2025.8.3 +charset-normalizer==3.4.3 +click==8.2.1 +colorful==0.5.7 +coverage[toml]==7.10.6 +distlib==0.4.0 +exceptiongroup==1.3.0 +filelock==3.19.1 +frozenlist==1.7.0 +google-api-core==2.25.1 +google-auth==2.40.3 +googleapis-common-protos==1.70.0 +grpcio==1.74.0 +hypothesis==6.45.0 +idna==3.10 +iniconfig==2.1.0 +jsonschema==4.25.1 +jsonschema-specifications==2025.4.1 +mock==5.2.0 +msgpack==1.1.1 +multidict==6.6.4 +opencensus==0.11.4 +opencensus-context==0.1.3 +opentracing==2.4.0 +packaging==25.0 +platformdirs==4.4.0 +pluggy==1.6.0 +prometheus-client==0.22.1 +propcache==0.3.2 +proto-plus==1.26.1 +protobuf==6.32.0 +py-spy==0.4.1 +pyasn1==0.6.1 +pyasn1-modules==0.4.2 +pydantic==2.11.7 +pydantic-core==2.33.2 +pygments==2.19.2 +pytest==8.4.2 +pytest-asyncio==1.1.0 +pytest-cov==6.2.1 +pytest-mock==3.15.0 +pyyaml==6.0.2 +ray[default]==2.46.0 +referencing==0.36.2 +requests==2.32.5 +rpds-py==0.27.1 +rsa==4.9.1 +six==1.17.0 +smart-open==7.3.0.post1 +sortedcontainers==2.4.0 +tomli==2.2.1 +typing-extensions==4.15.0 +typing-inspection==0.4.1 +urllib3==2.5.0 +virtualenv==20.34.0 +wrapt==1.17.3 +yarl==1.20.1 diff --git a/ddtrace/contrib/_ray.py b/ddtrace/contrib/_ray.py deleted file mode 100644 index 18eb6cbeb7f..00000000000 --- a/ddtrace/contrib/_ray.py +++ /dev/null @@ -1,25 +0,0 @@ -""" -Ray integration for Datadog APM. - -This integration traces Ray distributed computing operations including: -- Remote function execution -- Actor creation and method calls -- Object store operations (get, put, wait) -- Task scheduling and execution -- Cluster operations - -The integration provides visibility into: -- Task execution time and resource usage -- Actor lifecycle and method calls -- Object store operations -- Distributed task dependencies -- Cluster resource utilization - -Configuration: - The integration can be configured using the following environment variables: - - DD_RAY_ENABLED: Enable/disable the integration (default: true) - - DD_RAY_SERVICE: Service name for Ray traces (default: ray) - - DD_RAY_TRACE_TASKS: Enable task tracing (default: true) - - DD_RAY_TRACE_ACTORS: Enable actor tracing (default: true) - - DD_RAY_TRACE_OBJECTS: Enable object store tracing (default: true) -""" diff --git a/ddtrace/contrib/internal/ray/__init__.py b/ddtrace/contrib/internal/ray/__init__.py index 8498456f720..f2219aaad16 100644 --- a/ddtrace/contrib/internal/ray/__init__.py +++ b/ddtrace/contrib/internal/ray/__init__.py @@ -1,3 +1,42 @@ +""" +The Ray integration traces Ray jobs, tasks (remote functions), and actor method executions. + +All traces submitted from the Ray integration are tagged by: + +- ``env``, ``version``: see the `Unified Service Tagging docs `_. + +The service for Ray spans is set to the Ray job submission id to group telemetry per job. + +Enabling +~~~~~~~~ + +The Ray integration is enabled automatically when you use +:ref:`ddtrace-run` or :ref:`import ddtrace.auto`. +Alternatively, use :func:`patch() ` to manually enable the Ray integration:: + + from ddtrace import patch + patch(ray=True) + + +Supported Versions +~~~~~~~~~~~~~~~~~~ + +Ray ``>=2.46.0`` + + +What is traced +~~~~~~~~~~~~~~ + +- Job submission and completion (``ray.job.submit``, ``ray.job``) +- Task submission and execution (``func.remote()``, the function body) +- Actor method submission and execution (``Actor.method.remote()``, the method body) + + +Notes +~~~~~ + +- The integration disables Ray's built-in OpenTelemetry tracing to avoid duplicate telemetry. +""" import os diff --git a/ddtrace/contrib/internal/ray/hook.py b/ddtrace/contrib/internal/ray/hook.py index 97c980d5937..5576b961e62 100644 --- a/ddtrace/contrib/internal/ray/hook.py +++ b/ddtrace/contrib/internal/ray/hook.py @@ -1,8 +1,9 @@ def setup_tracing(): - import ddtrace.auto # noqa:F401 from ray.util.tracing import tracing_helper from ray.util.tracing.tracing_helper import _is_tracing_enabled + import ddtrace.auto # noqa:F401 + tracing_helper._global_is_tracing_enabled = False if _is_tracing_enabled(): raise AssertionError("OTEL Tracing should be disabled at setup.") diff --git a/ddtrace/contrib/internal/ray/patch.py b/ddtrace/contrib/internal/ray/patch.py index 979e24c87da..ad4e7809d77 100644 --- a/ddtrace/contrib/internal/ray/patch.py +++ b/ddtrace/contrib/internal/ray/patch.py @@ -10,6 +10,16 @@ from typing import List from typing import Optional +import ray +from ray._private.inspect_util import is_class_method +from ray._private.inspect_util import is_function_or_method +from ray._private.inspect_util import is_static_method +import ray._private.worker +import ray.actor +import ray.dashboard.modules.job.job_manager +from ray.dashboard.modules.job.job_manager import generate_job_id +import ray.dashboard.modules.job.job_supervisor +import ray.exceptions from wrapt import wrap_function_wrapper as _w from ddtrace import config @@ -27,16 +37,6 @@ from ddtrace.internal.utils.wrappers import unwrap as _u from ddtrace.propagation.http import _TraceContext from ddtrace.settings._config import _get_config -import ray -from ray._private.inspect_util import is_class_method -from ray._private.inspect_util import is_function_or_method -from ray._private.inspect_util import is_static_method -import ray._private.worker -import ray.actor -import ray.dashboard.modules.job.job_manager -from ray.dashboard.modules.job.job_manager import generate_job_id -import ray.dashboard.modules.job.job_supervisor -import ray.exceptions from .utils import _extract_tracing_context_from_env from .utils import _inject_context_in_env diff --git a/ddtrace/contrib/internal/ray/utils.py b/ddtrace/contrib/internal/ray/utils.py index ef0f794b83b..4d569b904f4 100644 --- a/ddtrace/contrib/internal/ray/utils.py +++ b/ddtrace/contrib/internal/ray/utils.py @@ -6,10 +6,11 @@ from typing import Callable from typing import List -from ddtrace.propagation.http import _TraceContext import ray from ray.runtime_context import get_runtime_context +from ddtrace.propagation.http import _TraceContext + def _inject_dd_trace_ctx_kwarg(method: Callable) -> Signature: old_sig = inspect.signature(method) From 92838d649c2633f947ef09bab4c633a8bbb60d7d Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Mon, 8 Sep 2025 17:19:24 +0200 Subject: [PATCH 17/59] feat(ray): add submission id to root span --- ddtrace/contrib/internal/ray/patch.py | 1 + 1 file changed, 1 insertion(+) diff --git a/ddtrace/contrib/internal/ray/patch.py b/ddtrace/contrib/internal/ray/patch.py index ad4e7809d77..fe3e38868a8 100644 --- a/ddtrace/contrib/internal/ray/patch.py +++ b/ddtrace/contrib/internal/ray/patch.py @@ -196,6 +196,7 @@ def traced_submit_job(wrapped, instance, args, kwargs): # Root span creation job_span = tracer.start_span("ray.job", service=submission_id, span_type=SpanTypes.RAY) job_span.set_tag_str("component", "ray") + job_span.set_tag_str("ray.submission_id", submission_id) # This will allow to finish the span at the end of the job _job_span_manager.add_span(submission_id, job_span) From 08434a30e884ac598def09404dd7334618703793 Mon Sep 17 00:00:00 2001 From: savitagm Date: Tue, 9 Sep 2025 10:09:29 -0400 Subject: [PATCH 18/59] Add hostname tag to enable GPU monitoring (#14529) ## Overview The change allows to capture host name which in conjunction with process ID will provide GPU utilization information. ## Checklist - [ ] PR author has checked that all the criteria below are met - The PR description includes an overview of the change - The PR description articulates the motivation for the change - The change includes tests OR the PR description describes a testing strategy - The PR description notes risks associated with the change, if any - Newly-added code is easy to change - The change follows the [library release note guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html) - The change includes or references documentation updates if necessary - Backport labels are set (if [applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)) ## Reviewer Checklist - [ ] Reviewer has checked that all the criteria below are met - Title is accurate - All changes are related to the pull request's stated goal - Avoids breaking [API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces) changes - Testing strategy adequately addresses listed risks - Newly-added code is easy to change - Release note makes sense to a user of the library - If necessary, author has acknowledged and discussed the performance implications of this PR as reported in the benchmarks PR comment - Backport labels are set in a manner that is consistent with the [release branch maintenance policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting) --- ddtrace/contrib/internal/ray/tracer.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ddtrace/contrib/internal/ray/tracer.py b/ddtrace/contrib/internal/ray/tracer.py index b763bf58631..a13b47d5486 100644 --- a/ddtrace/contrib/internal/ray/tracer.py +++ b/ddtrace/contrib/internal/ray/tracer.py @@ -4,8 +4,10 @@ from ddtrace.constants import _FILTER_KEPT_KEY from ddtrace.constants import _SAMPLING_PRIORITY_KEY from ddtrace.constants import _SPAN_MEASURED_KEY +from ddtrace.constants import _HOSTNAME_KEY from ddtrace.trace import TraceFilter from ddtrace.trace import tracer +import socket RAY_JOB_ID_TAG_KEY = "ray.job_id" @@ -24,6 +26,9 @@ def process_trace(self, trace): span.set_metric(_FILTER_KEPT_KEY, 1) span.set_metric(_SPAN_MEASURED_KEY, 1) span.set_metric(_SAMPLING_PRIORITY_KEY, 2) + + # Add host name tag + span.set_tag_str(_HOSTNAME_KEY, socket.gethostname()) return trace From e207a544eba0062ac6bfb5796e19c5fd39226538 Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Wed, 10 Sep 2025 17:29:59 +0200 Subject: [PATCH 19/59] fix(ray): delete tracer.py and add hostname in the new TraceProcessor --- ddtrace/contrib/internal/ray/patch.py | 3 ++ ddtrace/contrib/internal/ray/tracer.py | 36 ---------------------- tests/contrib/ray/test_ray_trace_filter.py | 18 +++++------ 3 files changed, 10 insertions(+), 47 deletions(-) delete mode 100644 ddtrace/contrib/internal/ray/tracer.py diff --git a/ddtrace/contrib/internal/ray/patch.py b/ddtrace/contrib/internal/ray/patch.py index fe3e38868a8..947514bcf7c 100644 --- a/ddtrace/contrib/internal/ray/patch.py +++ b/ddtrace/contrib/internal/ray/patch.py @@ -4,6 +4,7 @@ import logging import os import threading +import socket from typing import Any from typing import Callable from typing import Dict @@ -30,6 +31,7 @@ from ddtrace.constants import _SAMPLING_PRIORITY_KEY from ddtrace.constants import _SPAN_MEASURED_KEY from ddtrace.constants import SPAN_KIND +from ddtrace.constants import _HOSTNAME_KEY from ddtrace.ext import SpanKind from ddtrace.ext import SpanTypes from ddtrace.internal.schema import schematize_service_name @@ -101,6 +103,7 @@ def process_trace(self, trace: List[Span]) -> Optional[List[Span]]: span.set_metric(_FILTER_KEPT_KEY, 1) span.set_metric(_SPAN_MEASURED_KEY, 1) span.set_metric(_SAMPLING_PRIORITY_KEY, 2) + span.set_tag_str(_HOSTNAME_KEY, socket.gethostname()) filtered_spans.append(span) return filtered_spans diff --git a/ddtrace/contrib/internal/ray/tracer.py b/ddtrace/contrib/internal/ray/tracer.py deleted file mode 100644 index a13b47d5486..00000000000 --- a/ddtrace/contrib/internal/ray/tracer.py +++ /dev/null @@ -1,36 +0,0 @@ -from ddtrace import config -import ddtrace.auto # noqa: F401 -from ddtrace.constants import _DJM_ENABLED_KEY -from ddtrace.constants import _FILTER_KEPT_KEY -from ddtrace.constants import _SAMPLING_PRIORITY_KEY -from ddtrace.constants import _SPAN_MEASURED_KEY -from ddtrace.constants import _HOSTNAME_KEY -from ddtrace.trace import TraceFilter -from ddtrace.trace import tracer -import socket - - -RAY_JOB_ID_TAG_KEY = "ray.job_id" -DEFAULT_SERVICE_NAME = "unspecified-ray-job" -DEFAULT_SPAN_NAME = "ray.job" - - -class RayTraceFilter(TraceFilter): - def process_trace(self, trace): - for span in trace: - if span.get_tag(RAY_JOB_ID_TAG_KEY) is not None: - span.span_type = f"ray.{span.name}" - span.name = DEFAULT_SPAN_NAME - span.service = config.service or DEFAULT_SERVICE_NAME - span.set_metric(_DJM_ENABLED_KEY, 1) - span.set_metric(_FILTER_KEPT_KEY, 1) - span.set_metric(_SPAN_MEASURED_KEY, 1) - span.set_metric(_SAMPLING_PRIORITY_KEY, 2) - - # Add host name tag - span.set_tag_str(_HOSTNAME_KEY, socket.gethostname()) - return trace - - -def setup_tracing() -> None: - tracer.configure(trace_processors=[RayTraceFilter()]) diff --git a/tests/contrib/ray/test_ray_trace_filter.py b/tests/contrib/ray/test_ray_trace_filter.py index cca4a2e68b5..f9ff3a9a054 100644 --- a/tests/contrib/ray/test_ray_trace_filter.py +++ b/tests/contrib/ray/test_ray_trace_filter.py @@ -3,21 +3,18 @@ from ddtrace.constants import _FILTER_KEPT_KEY from ddtrace.constants import _SAMPLING_PRIORITY_KEY from ddtrace.constants import _SPAN_MEASURED_KEY -from ddtrace.contrib.internal.ray.tracer import DEFAULT_SPAN_NAME -from ddtrace.contrib.internal.ray.tracer import RAY_JOB_ID_TAG_KEY -from ddtrace.contrib.internal.ray.tracer import RayTraceFilter +from ddtrace.contrib.internal.ray.patch import RayTraceProcessor def test_trace_filter_detects_ray_spans(): span = Span("span0") - span.set_tag(RAY_JOB_ID_TAG_KEY, "01000000") + span.set_tag("component", "ray") trace = [span] - ray_trace_filter = RayTraceFilter() - filtered_trace = ray_trace_filter.process_trace(trace) + ray_trace_processor = RayTraceProcessor() + filtered_trace = ray_trace_processor.process_trace(trace) + assert filtered_trace is not None assert len(filtered_trace) == 1 - assert filtered_trace[0].name == DEFAULT_SPAN_NAME - assert filtered_trace[0].span_type == "ray.span0" assert filtered_trace[0].get_metric(_DJM_ENABLED_KEY) == 1 assert filtered_trace[0].get_metric(_FILTER_KEPT_KEY) == 1 assert filtered_trace[0].get_metric(_SPAN_MEASURED_KEY) == 1 @@ -27,12 +24,11 @@ def test_trace_filter_detects_ray_spans(): def test_trace_filter_skips_non_ray_spans(): span = Span("span0") trace = [span] - ray_trace_filter = RayTraceFilter() + ray_trace_filter = RayTraceProcessor() filtered_trace = ray_trace_filter.process_trace(trace) + assert filtered_trace is not None assert len(filtered_trace) == 1 - assert filtered_trace[0].name == "span0" - assert filtered_trace[0].span_type is None assert filtered_trace[0].get_metric(_DJM_ENABLED_KEY) is None assert filtered_trace[0].get_metric(_FILTER_KEPT_KEY) is None assert filtered_trace[0].get_metric(_SPAN_MEASURED_KEY) is None From ef6db1e89fb892aa740c1e1c0e0dfe0fde86bc41 Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Tue, 9 Sep 2025 10:55:07 +0200 Subject: [PATCH 20/59] feat(ray): add support for long running job/task/actor_method --- ddtrace/contrib/internal/ray/hook.py | 3 +- ddtrace/contrib/internal/ray/patch.py | 136 +++++------- ddtrace/contrib/internal/ray/span_manager.py | 213 +++++++++++++++++++ ddtrace/contrib/internal/ray/utils.py | 3 +- 4 files changed, 267 insertions(+), 88 deletions(-) create mode 100644 ddtrace/contrib/internal/ray/span_manager.py diff --git a/ddtrace/contrib/internal/ray/hook.py b/ddtrace/contrib/internal/ray/hook.py index 5576b961e62..97c980d5937 100644 --- a/ddtrace/contrib/internal/ray/hook.py +++ b/ddtrace/contrib/internal/ray/hook.py @@ -1,9 +1,8 @@ def setup_tracing(): + import ddtrace.auto # noqa:F401 from ray.util.tracing import tracing_helper from ray.util.tracing.tracing_helper import _is_tracing_enabled - import ddtrace.auto # noqa:F401 - tracing_helper._global_is_tracing_enabled = False if _is_tracing_enabled(): raise AssertionError("OTEL Tracing should be disabled at setup.") diff --git a/ddtrace/contrib/internal/ray/patch.py b/ddtrace/contrib/internal/ray/patch.py index 947514bcf7c..1b9209cd6e0 100644 --- a/ddtrace/contrib/internal/ray/patch.py +++ b/ddtrace/contrib/internal/ray/patch.py @@ -3,7 +3,6 @@ import inspect import logging import os -import threading import socket from typing import Any from typing import Callable @@ -11,16 +10,6 @@ from typing import List from typing import Optional -import ray -from ray._private.inspect_util import is_class_method -from ray._private.inspect_util import is_function_or_method -from ray._private.inspect_util import is_static_method -import ray._private.worker -import ray.actor -import ray.dashboard.modules.job.job_manager -from ray.dashboard.modules.job.job_manager import generate_job_id -import ray.dashboard.modules.job.job_supervisor -import ray.exceptions from wrapt import wrap_function_wrapper as _w from ddtrace import config @@ -28,6 +17,7 @@ from ddtrace._trace.span import Span from ddtrace.constants import _DJM_ENABLED_KEY from ddtrace.constants import _FILTER_KEPT_KEY +from ddtrace.constants import _HOSTNAME_KEY from ddtrace.constants import _SAMPLING_PRIORITY_KEY from ddtrace.constants import _SPAN_MEASURED_KEY from ddtrace.constants import SPAN_KIND @@ -39,7 +29,20 @@ from ddtrace.internal.utils.wrappers import unwrap as _u from ddtrace.propagation.http import _TraceContext from ddtrace.settings._config import _get_config +import ray +from ray._private.inspect_util import is_class_method +from ray._private.inspect_util import is_function_or_method +from ray._private.inspect_util import is_static_method +import ray._private.worker +import ray.actor +import ray.dashboard.modules.job.job_manager +from ray.dashboard.modules.job.job_manager import generate_job_id +import ray.dashboard.modules.job.job_supervisor +import ray.exceptions +from .span_manager import start_long_running_job +from .span_manager import stop_long_running_job +from .span_manager import long_running_ray_span from .utils import _extract_tracing_context_from_env from .utils import _inject_context_in_env from .utils import _inject_context_in_kwargs @@ -56,6 +59,8 @@ dict( _default_service=schematize_service_name("ray"), ray_spans_only=asbool(_get_config("DD_TRACE_RAY_SPANS_ONLY", default=True)), + resubmit_interval=float(_get_config("DD_TRACE_RAY_RESUBMIT_LONG_RUNNING_INTERVAL", default=10.0)), + watch_delay=float(_get_config("DD_TRACE_RAY_WATCH_LONG_RUNNING_DELAY", default=10.0)), ), ) @@ -68,27 +73,6 @@ def get_version() -> str: return str(getattr(ray, "__version__", "")) -class _JobSpanManager: - def __init__(self): - self._spans = {} - self._lock = threading.Lock() - - def add_span(self, submission_id: str, span: Span): - with self._lock: - self._spans[submission_id] = span - - def remove_span(self, submission_id: str) -> Optional[Span]: - with self._lock: - return self._spans.pop(submission_id, None) - - def get_span(self, submission_id: str) -> Optional[Span]: - with self._lock: - return self._spans.get(submission_id) - - -_job_span_manager = _JobSpanManager() - - class RayTraceProcessor: def process_trace(self, trace: List[Span]) -> Optional[List[Span]]: if not trace: @@ -103,6 +87,8 @@ def process_trace(self, trace: List[Span]) -> Optional[List[Span]]: span.set_metric(_FILTER_KEPT_KEY, 1) span.set_metric(_SPAN_MEASURED_KEY, 1) span.set_metric(_SAMPLING_PRIORITY_KEY, 2) + + # add host name for GPU Monitoring correlation span.set_tag_str(_HOSTNAME_KEY, socket.gethostname()) filtered_spans.append(span) return filtered_spans @@ -128,24 +114,24 @@ def _wrap_task_execution(wrapped, *args, **kwargs): # Extract context from parent span extracted_context = _TraceContext._extract(kwargs["_dd_trace_ctx"]) kwargs.pop("_dd_trace_ctx") - tracer.context_provider.activate(extracted_context) function_name = getattr(wrapped, "__name__", "unknown_function") function_module = getattr(wrapped, "__module__", "unknown_module") - with tracer.trace( - f"{function_module}.{function_name}", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.RAY - ) as span: - span.set_tag_str(SPAN_KIND, SpanKind.CONSUMER) - _inject_ray_span_tags(span) - + with long_running_ray_span( + f"{function_module}.{function_name}", + service=os.environ.get("_RAY_SUBMISSION_ID"), + span_type=SpanTypes.RAY, + child_of=extracted_context, + activate=True + ) as task_execute_span: try: result = wrapped(*args, **kwargs) - span.set_tag_str("ray.task.status", "success") + task_execute_span.set_tag_str("ray.task.status", "success") return result except Exception as e: - span.set_tag_str("ray.task.status", "error") - raise e + task_execute_span.set_tag_str("ray.task.status", "error") + raise def traced_submit_task(wrapped, instance, args, kwargs): @@ -200,11 +186,9 @@ def traced_submit_job(wrapped, instance, args, kwargs): job_span = tracer.start_span("ray.job", service=submission_id, span_type=SpanTypes.RAY) job_span.set_tag_str("component", "ray") job_span.set_tag_str("ray.submission_id", submission_id) - # This will allow to finish the span at the end of the job - _job_span_manager.add_span(submission_id, job_span) - - # Set global span as the root span tracer.context_provider.activate(job_span) + start_long_running_job(job_span) + try: with tracer.trace("ray.job.submit", service=submission_id, span_type=SpanTypes.RAY) as submit_span: submit_span.set_tag_str("component", "ray") @@ -226,7 +210,6 @@ def traced_submit_job(wrapped, instance, args, kwargs): job_span.set_tag_str("ray.job.status", "error") job_span.error = 1 job_span.set_exc_info(type(e), e, e.__traceback__) - _job_span_manager.remove_span(submission_id) job_span.finish() raise e @@ -264,54 +247,51 @@ def traced_actor_method_call(wrapped, instance, args, kwargs): def job_supervisor_run_wrapper(method: Callable[..., Any]) -> Any: async def _traced_run_method(self: Any, *args: Any, _dd_trace_ctx=None, **kwargs: Any) -> Any: - from ddtrace import tracer as dd_tracer + from ddtrace import tracer from ddtrace.ext import SpanTypes - if not dd_tracer or _dd_trace_ctx is None: + if not tracer or _dd_trace_ctx is None: return await method(self, *args, **kwargs) context = _TraceContext._extract(_dd_trace_ctx) - dd_tracer.context_provider.activate(context) - - job_submission_id = os.environ.get("_RAY_SUBMISSION_ID") + submission_id = os.environ.get("_RAY_SUBMISSION_ID") - with dd_tracer.trace( - f"{self.__class__.__name__}.{method.__name__}", service=job_submission_id, span_type=SpanTypes.RAY - ) as span: - span.set_tag_str(SPAN_KIND, SpanKind.CONSUMER) - _inject_ray_span_tags(span) + with long_running_ray_span( + f"{self.__class__.__name__}.{method.__name__}", + service=submission_id, + span_type=SpanTypes.RAY, + child_of=context, + activate=True + ) as supervisor_run_span: + _inject_context_in_env(supervisor_run_span.context) try: - _inject_context_in_env(span.context) - await method(self, *args, **kwargs) except ray.exceptions.AsyncioActorExit as e: - # if the job succedded we removed from the span + # if the job succeeded we remove from the span # the error used to exit the actor - job_info = await self._job_info_client.get_info(job_submission_id) + job_info = await self._job_info_client.get_info(submission_id) + if str(job_info.status) == "FAILED": raise e - except Exception as e: - raise e return _traced_run_method @contextmanager def _trace_actor_method(self: Any, method: Callable[..., Any], dd_trace_ctx): - if tracer.current_span() is None: + context = tracer.context_provider.active() + if context is None: context = _TraceContext._extract(dd_trace_ctx) - tracer.context_provider.activate(context) - with tracer.trace( + with long_running_ray_span( f"{self.__class__.__name__}.{method.__name__}", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.RAY, - ) as span: - span.set_tag_str(SPAN_KIND, SpanKind.CONSUMER) - _inject_ray_span_tags(span) - - yield span + child_of=context, + activate=True, + ) as actor_execute_span: + yield actor_execute_span def _inject_tracing_actor_method(method: Callable[..., Any]) -> Any: @@ -392,21 +372,9 @@ async def traced_end_job(wrapped, instance, args, kwargs): result = await wrapped(*args, **kwargs) - # At this stage, the job is finished job_id = args[0] - job_span = _job_span_manager.get_span(job_id) - if job_span is None: - return result - job_info = await instance._job_info_client.get_info(job_id) - job_span.set_tag_str("ray.job.status", job_info.status) - job_span.set_tag_str("ray.job.message", job_info.message) - - # Set error tags if job failed - if str(job_info.status) == "FAILED": - job_span.error = 1 - job_span.set_tag_str("error.message", job_info.message) - job_span.finish() + stop_long_running_job(job_id, job_info) return result diff --git a/ddtrace/contrib/internal/ray/span_manager.py b/ddtrace/contrib/internal/ray/span_manager.py new file mode 100644 index 00000000000..eaada12d81a --- /dev/null +++ b/ddtrace/contrib/internal/ray/span_manager.py @@ -0,0 +1,213 @@ +import threading +import time + +from ddtrace import config +from ddtrace import tracer +from ddtrace._trace.span import Span +from contextlib import contextmanager +from ddtrace.constants import SPAN_KIND +from ddtrace.ext import SpanKind +from .utils import _inject_ray_span_tags + + +@contextmanager +def long_running_ray_span(span_name, service, span_type, child_of=None, activate=True): + """Context manager that handles Ray span creation and long-running span lifecycle""" + span = tracer.start_span( + name=span_name, + service=service, + span_type=span_type, + child_of=child_of, + activate=activate + ) + span.set_tag_str(SPAN_KIND, SpanKind.CONSUMER) + _inject_ray_span_tags(span) + start_long_running_span(span) + + try: + yield span + except Exception as e: + span.set_exc_info(type(e), e, e.__traceback__) + raise + finally: + stop_long_running_span(span) + + +class LongRunningJobManager: + def __init__(self): + self._timers = {} + # {submission_id: {(trace_id, span_id): Span}} + self._job_spans = {} + # {submission_id: Span} + self._root_spans = {} + self._lock = threading.Lock() + + def _get_submission_id(self, span): + submission_id = span.get_tag("ray.submission_id") + return submission_id if submission_id else None + + def _emit_partial_span(self, span): + partial_span = self._recreate_job_span(span) + partial_span.set_metric("_dd.partial_version", time.time_ns()) + partial_span.finish() + + # Sending spans which are waiting for long running spans to finish + aggregator = tracer._span_aggregator + finished_children = [] + with aggregator._lock: + if span.trace_id in aggregator._traces: + trace = aggregator._traces[span.trace_id] + # Find and remove finished children in one pass + finished_children = [] + remaining_spans = [] + for s in trace.spans: + if s.finished and s.span_id != span.span_id: + finished_children.append(s) + else: + remaining_spans.append(s) + trace.spans[:] = remaining_spans + # Update the finished count + trace.num_finished -= len(finished_children) + tracer._span_aggregator.writer.write([partial_span] + finished_children) + + def _create_resubmit_timer(self, submission_id): + timer = threading.Timer( + config.ray.resubmit_interval, self._resubmit_long_running_spans, args=[submission_id] + ) + timer.daemon = True + self._timers[submission_id] = timer + timer.start() + + def _recreate_job_span(self, job_span): + new_span = Span( + name=job_span.name, + service=job_span.service, + span_type=job_span.span_type, + trace_id=job_span.trace_id, + span_id=job_span.span_id, + parent_id=job_span.parent_id, + context=job_span.context, + ) + new_span.set_tag_str("component", "ray") + new_span.start_ns = job_span.start_ns + new_span._meta = job_span._meta.copy() + new_span._metrics = job_span._metrics.copy() + + return new_span + + def _resubmit_long_running_spans(self, submission_id): + with self._lock: + if submission_id not in self._job_spans: + return + + job_spans = self._job_spans[submission_id] + for span in job_spans.values(): + self._emit_partial_span(span) + + self._create_resubmit_timer(submission_id) + + def _start_long_running_span(self, span): + submission_id = self._get_submission_id(span) + if not submission_id: + return + + # Every spans are using the same timer + if submission_id not in self._timers: + self._create_resubmit_timer(submission_id) + + def _finish_span(self, span, job_info=None): + # was_long_running + if span.get_metric("_dd.partial_version") is not None: + span.set_metric("_dd.partial_version", -1) + span.set_metric("_dd.was_long_running", 1) + span.set_tag_str("ray.job.status", "FINISHED") + + if job_info: + span.set_metric("_dd.was_long_running", 1) + span.set_tag_str("ray.job.status", job_info.status) + span.set_tag_str("ray.job.message", job_info.message) + + if str(job_info.status) == "FAILED": + span.error = 1 + span.set_tag_str("error.message", job_info.message) + span.finish() + + def add_span(self, span): + submission_id = self._get_submission_id(span) + if not submission_id: + return + + with self._lock: + if submission_id not in self._job_spans: + self._job_spans[submission_id] = {} + self._job_spans[submission_id][(span.trace_id, span.span_id)] = span + + def watch_potential_long_running(self, span): + submission_id = self._get_submission_id(span) + if not submission_id: + return + + with self._lock: + if submission_id in self._job_spans: + if (span.trace_id, span.span_id) in self._job_spans[submission_id]: + # Mark the original span as long-running, but keep it open to preserve context + span.set_metric("_dd.partial_version", time.time_ns()) + span.set_tag_str("ray.job.status", "RUNNING") + self._emit_partial_span(span) + self._start_long_running_span(span) + + def stop_long_running_span(self, span_to_stop): + submission_id = self._get_submission_id(span_to_stop) + if not submission_id: + return + + with self._lock: + self._finish_span(span_to_stop) + + job_spans = self._job_spans.get(submission_id, {}) + span_key = (span_to_stop.trace_id, span_to_stop.span_id) + if span_key in job_spans: + del job_spans[span_key] + + def stop_long_running_job(self, submission_id, job_info): + with self._lock: + if submission_id not in self._root_spans: + return + + job_span = self._root_spans[submission_id] + + if submission_id in self._timers: + self._timers.pop(submission_id).cancel() + + self._finish_span(job_span, job_info=job_info) + + del self._job_spans[submission_id] + del self._root_spans[submission_id] + + +_job_manager = LongRunningJobManager() + + +def start_long_running_job(job_span): + submission_id = _job_manager._get_submission_id(job_span) + if not submission_id: + return + + _job_manager._root_spans[submission_id] = job_span + start_long_running_span(job_span) + + +def stop_long_running_job(submission_id, job_info): + _job_manager.stop_long_running_job(submission_id, job_info) + + +def start_long_running_span(span): + _job_manager.add_span(span) + + watch_timer = threading.Timer(config.ray.watch_delay, _job_manager.watch_potential_long_running, args=[span]) + watch_timer.daemon = True + watch_timer.start() + + +def stop_long_running_span(span): + _job_manager.stop_long_running_span(span) \ No newline at end of file diff --git a/ddtrace/contrib/internal/ray/utils.py b/ddtrace/contrib/internal/ray/utils.py index 4d569b904f4..ef0f794b83b 100644 --- a/ddtrace/contrib/internal/ray/utils.py +++ b/ddtrace/contrib/internal/ray/utils.py @@ -6,11 +6,10 @@ from typing import Callable from typing import List +from ddtrace.propagation.http import _TraceContext import ray from ray.runtime_context import get_runtime_context -from ddtrace.propagation.http import _TraceContext - def _inject_dd_trace_ctx_kwarg(method: Callable) -> Signature: old_sig = inspect.signature(method) From ea4e76102148bf3a90ab2e5afe1b6cded52a02ef Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Fri, 12 Sep 2025 17:47:23 +0200 Subject: [PATCH 21/59] chore(ray): lint --- ddtrace/contrib/internal/ray/patch.py | 13 ++++++------- ddtrace/contrib/internal/ray/span_manager.py | 18 +++++------------- riotfile.py | 2 +- 3 files changed, 12 insertions(+), 21 deletions(-) diff --git a/ddtrace/contrib/internal/ray/patch.py b/ddtrace/contrib/internal/ray/patch.py index 1b9209cd6e0..dea7d2ec14a 100644 --- a/ddtrace/contrib/internal/ray/patch.py +++ b/ddtrace/contrib/internal/ray/patch.py @@ -21,7 +21,6 @@ from ddtrace.constants import _SAMPLING_PRIORITY_KEY from ddtrace.constants import _SPAN_MEASURED_KEY from ddtrace.constants import SPAN_KIND -from ddtrace.constants import _HOSTNAME_KEY from ddtrace.ext import SpanKind from ddtrace.ext import SpanTypes from ddtrace.internal.schema import schematize_service_name @@ -33,16 +32,14 @@ from ray._private.inspect_util import is_class_method from ray._private.inspect_util import is_function_or_method from ray._private.inspect_util import is_static_method -import ray._private.worker import ray.actor import ray.dashboard.modules.job.job_manager from ray.dashboard.modules.job.job_manager import generate_job_id -import ray.dashboard.modules.job.job_supervisor import ray.exceptions +from .span_manager import long_running_ray_span from .span_manager import start_long_running_job from .span_manager import stop_long_running_job -from .span_manager import long_running_ray_span from .utils import _extract_tracing_context_from_env from .utils import _inject_context_in_env from .utils import _inject_context_in_kwargs @@ -90,6 +87,8 @@ def process_trace(self, trace: List[Span]) -> Optional[List[Span]]: # add host name for GPU Monitoring correlation span.set_tag_str(_HOSTNAME_KEY, socket.gethostname()) + with open("ray_spans.log", "a") as f: + f.write(f"Span: {span.name}, {span._metrics}\n") filtered_spans.append(span) return filtered_spans @@ -123,13 +122,13 @@ def _wrap_task_execution(wrapped, *args, **kwargs): service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.RAY, child_of=extracted_context, - activate=True + activate=True, ) as task_execute_span: try: result = wrapped(*args, **kwargs) task_execute_span.set_tag_str("ray.task.status", "success") return result - except Exception as e: + except Exception: task_execute_span.set_tag_str("ray.task.status", "error") raise @@ -261,7 +260,7 @@ async def _traced_run_method(self: Any, *args: Any, _dd_trace_ctx=None, **kwargs service=submission_id, span_type=SpanTypes.RAY, child_of=context, - activate=True + activate=True, ) as supervisor_run_span: _inject_context_in_env(supervisor_run_span.context) diff --git a/ddtrace/contrib/internal/ray/span_manager.py b/ddtrace/contrib/internal/ray/span_manager.py index eaada12d81a..3c8b268e52d 100644 --- a/ddtrace/contrib/internal/ray/span_manager.py +++ b/ddtrace/contrib/internal/ray/span_manager.py @@ -1,25 +1,20 @@ +from contextlib import contextmanager import threading import time from ddtrace import config from ddtrace import tracer from ddtrace._trace.span import Span -from contextlib import contextmanager from ddtrace.constants import SPAN_KIND from ddtrace.ext import SpanKind + from .utils import _inject_ray_span_tags @contextmanager def long_running_ray_span(span_name, service, span_type, child_of=None, activate=True): """Context manager that handles Ray span creation and long-running span lifecycle""" - span = tracer.start_span( - name=span_name, - service=service, - span_type=span_type, - child_of=child_of, - activate=activate - ) + span = tracer.start_span(name=span_name, service=service, span_type=span_type, child_of=child_of, activate=activate) span.set_tag_str(SPAN_KIND, SpanKind.CONSUMER) _inject_ray_span_tags(span) start_long_running_span(span) @@ -71,9 +66,7 @@ def _emit_partial_span(self, span): tracer._span_aggregator.writer.write([partial_span] + finished_children) def _create_resubmit_timer(self, submission_id): - timer = threading.Timer( - config.ray.resubmit_interval, self._resubmit_long_running_spans, args=[submission_id] - ) + timer = threading.Timer(config.ray.resubmit_interval, self._resubmit_long_running_spans, args=[submission_id]) timer.daemon = True self._timers[submission_id] = timer timer.start() @@ -123,7 +116,6 @@ def _finish_span(self, span, job_info=None): span.set_tag_str("ray.job.status", "FINISHED") if job_info: - span.set_metric("_dd.was_long_running", 1) span.set_tag_str("ray.job.status", job_info.status) span.set_tag_str("ray.job.message", job_info.message) @@ -210,4 +202,4 @@ def start_long_running_span(span): def stop_long_running_span(span): - _job_manager.stop_long_running_span(span) \ No newline at end of file + _job_manager.stop_long_running_span(span) diff --git a/riotfile.py b/riotfile.py index 6ccb6aa7588..076eaa4d901 100644 --- a/riotfile.py +++ b/riotfile.py @@ -3003,7 +3003,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT Venv( name="ray", command="pytest {cmdargs} tests/contrib/ray", - pys=select_pys(min_version="3.9"), + pys=select_pys(min_version="3.10"), pkgs={ "pytest-asyncio": latest, "ray[default]": ["~=2.46.0", latest], From 767ecf8218d7f8bf82404ce6a49dab1915fbd5ab Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Fri, 12 Sep 2025 17:52:48 +0200 Subject: [PATCH 22/59] chore: update riot-requirements --- .riot/requirements/1844b95.txt | 79 ---------------------------------- .riot/requirements/1af2ad1.txt | 72 ------------------------------- 2 files changed, 151 deletions(-) delete mode 100644 .riot/requirements/1844b95.txt delete mode 100644 .riot/requirements/1af2ad1.txt diff --git a/.riot/requirements/1844b95.txt b/.riot/requirements/1844b95.txt deleted file mode 100644 index 8dcb2dff28a..00000000000 --- a/.riot/requirements/1844b95.txt +++ /dev/null @@ -1,79 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1844b95.in -# -aiohappyeyeballs==2.6.1 -aiohttp==3.12.15 -aiohttp-cors==0.8.1 -aiosignal==1.4.0 -annotated-types==0.7.0 -async-timeout==5.0.1 -attrs==25.3.0 -backports-asyncio-runner==1.2.0 -cachetools==5.5.2 -certifi==2025.8.3 -charset-normalizer==3.4.3 -click==8.1.8 -colorful==0.5.7 -coverage[toml]==7.10.6 -distlib==0.4.0 -exceptiongroup==1.3.0 -filelock==3.19.1 -frozenlist==1.7.0 -google-api-core==2.25.1 -google-auth==2.40.3 -googleapis-common-protos==1.70.0 -grpcio==1.74.0 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.7.0 -iniconfig==2.1.0 -jsonschema==4.25.1 -jsonschema-specifications==2025.4.1 -mock==5.2.0 -msgpack==1.1.1 -multidict==6.6.4 -opencensus==0.11.4 -opencensus-context==0.1.3 -opentelemetry-api==1.36.0 -opentelemetry-exporter-prometheus==0.57b0 -opentelemetry-proto==1.36.0 -opentelemetry-sdk==1.36.0 -opentelemetry-semantic-conventions==0.57b0 -opentracing==2.4.0 -packaging==25.0 -platformdirs==4.4.0 -pluggy==1.6.0 -prometheus-client==0.22.1 -propcache==0.3.2 -proto-plus==1.26.1 -protobuf==6.32.0 -py-spy==0.4.1 -pyasn1==0.6.1 -pyasn1-modules==0.4.2 -pydantic==2.11.7 -pydantic-core==2.33.2 -pygments==2.19.2 -pytest==8.4.2 -pytest-asyncio==1.1.0 -pytest-cov==6.2.1 -pytest-mock==3.15.0 -pyyaml==6.0.2 -ray[default]==2.49.1 -referencing==0.36.2 -requests==2.32.5 -rpds-py==0.27.1 -rsa==4.9.1 -six==1.17.0 -smart-open==7.3.0.post1 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.15.0 -typing-inspection==0.4.1 -urllib3==2.5.0 -virtualenv==20.34.0 -wrapt==1.17.3 -yarl==1.20.1 -zipp==3.23.0 diff --git a/.riot/requirements/1af2ad1.txt b/.riot/requirements/1af2ad1.txt deleted file mode 100644 index 359a498f762..00000000000 --- a/.riot/requirements/1af2ad1.txt +++ /dev/null @@ -1,72 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1af2ad1.in -# -aiohappyeyeballs==2.6.1 -aiohttp==3.12.15 -aiohttp-cors==0.8.1 -aiosignal==1.4.0 -annotated-types==0.7.0 -async-timeout==5.0.1 -attrs==25.3.0 -backports-asyncio-runner==1.2.0 -cachetools==5.5.2 -certifi==2025.8.3 -charset-normalizer==3.4.3 -click==8.1.8 -colorful==0.5.7 -coverage[toml]==7.10.6 -distlib==0.4.0 -exceptiongroup==1.3.0 -filelock==3.19.1 -frozenlist==1.7.0 -google-api-core==2.25.1 -google-auth==2.40.3 -googleapis-common-protos==1.70.0 -grpcio==1.74.0 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -jsonschema==4.25.1 -jsonschema-specifications==2025.4.1 -mock==5.2.0 -msgpack==1.1.1 -multidict==6.6.4 -opencensus==0.11.4 -opencensus-context==0.1.3 -opentracing==2.4.0 -packaging==25.0 -platformdirs==4.4.0 -pluggy==1.6.0 -prometheus-client==0.22.1 -propcache==0.3.2 -proto-plus==1.26.1 -protobuf==6.32.0 -py-spy==0.4.1 -pyasn1==0.6.1 -pyasn1-modules==0.4.2 -pydantic==2.11.7 -pydantic-core==2.33.2 -pygments==2.19.2 -pytest==8.4.2 -pytest-asyncio==1.1.0 -pytest-cov==6.2.1 -pytest-mock==3.15.0 -pyyaml==6.0.2 -ray[default]==2.46.0 -referencing==0.36.2 -requests==2.32.5 -rpds-py==0.27.1 -rsa==4.9.1 -six==1.17.0 -smart-open==7.3.0.post1 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.15.0 -typing-inspection==0.4.1 -urllib3==2.5.0 -virtualenv==20.34.0 -wrapt==1.17.3 -yarl==1.20.1 From 68c3d418cf5e79353002067e84b9636bf6543744 Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Mon, 15 Sep 2025 10:54:05 +0200 Subject: [PATCH 23/59] feat(ray): improve tags and name --- ddtrace/contrib/internal/ray/patch.py | 53 +- tests/contrib/ray/test_ray.py | 3 + ...ts.contrib.ray.test_ray.error_in_task.json | 374 +++++++------- ...trib.ray.test_ray.test_actor_and_task.json | 476 ++++++++++-------- ....ray.test_ray.test_actor_interactions.json | 360 +++++++------ ...ontrib.ray.test_ray.test_nested_tasks.json | 298 ++++++----- ...ontrib.ray.test_ray.test_simple_actor.json | 233 +++++---- ...contrib.ray.test_ray.test_simple_task.json | 328 ++++++------ 8 files changed, 1204 insertions(+), 921 deletions(-) diff --git a/ddtrace/contrib/internal/ray/patch.py b/ddtrace/contrib/internal/ray/patch.py index dea7d2ec14a..ab4cdef3b10 100644 --- a/ddtrace/contrib/internal/ray/patch.py +++ b/ddtrace/contrib/internal/ray/patch.py @@ -87,8 +87,7 @@ def process_trace(self, trace: List[Span]) -> Optional[List[Span]]: # add host name for GPU Monitoring correlation span.set_tag_str(_HOSTNAME_KEY, socket.gethostname()) - with open("ray_spans.log", "a") as f: - f.write(f"Span: {span.name}, {span._metrics}\n") + filtered_spans.append(span) return filtered_spans @@ -125,7 +124,11 @@ def _wrap_task_execution(wrapped, *args, **kwargs): activate=True, ) as task_execute_span: try: + task_execute_span.set_tag("ray.task.args", args) + task_execute_span.set_tag("ray.task.kwargs", kwargs) + result = wrapped(*args, **kwargs) + task_execute_span.set_tag_str("ray.task.status", "success") return result except Exception: @@ -156,6 +159,9 @@ def traced_submit_task(wrapped, instance, args, kwargs): _inject_ray_span_tags(span) try: + span.set_tag("ray.task.args", kwargs["args"]) + span.set_tag("ray.task.kwargs", kwargs["kwargs"]) + _inject_context_in_kwargs(span.context, kwargs) resp = wrapped(*args, **kwargs) @@ -235,6 +241,8 @@ def traced_actor_method_call(wrapped, instance, args, kwargs): f"{actor_name}.{method_name}.remote()", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.RAY ) as span: span.set_tag_str(SPAN_KIND, SpanKind.PRODUCER) + span.set_tag("ray.actor_method.args", kwargs["args"]) + span.set_tag("ray.actor_method.kwargs", kwargs["kwargs"]) _inject_ray_span_tags(span) try: @@ -244,7 +252,7 @@ def traced_actor_method_call(wrapped, instance, args, kwargs): raise e -def job_supervisor_run_wrapper(method: Callable[..., Any]) -> Any: +def _job_supervisor_run_wrapper(method: Callable[..., Any]) -> Any: async def _traced_run_method(self: Any, *args: Any, _dd_trace_ctx=None, **kwargs: Any) -> Any: from ddtrace import tracer from ddtrace.ext import SpanTypes @@ -277,8 +285,33 @@ async def _traced_run_method(self: Any, *args: Any, _dd_trace_ctx=None, **kwargs return _traced_run_method +def _exec_entrypoint_wrapper(method: Callable[..., Any]) -> Any: + def _traced_run_method(self: Any, *args: Any, _dd_trace_ctx=None, **kwargs: Any) -> Any: + from ddtrace import tracer + from ddtrace.ext import SpanTypes + + if not tracer: + return method(self, *args) + + if tracer.current_span() is None: + tracer.context_provider.activate(_extract_tracing_context_from_env()) + + with tracer.trace( + f"exec {self._entrypoint}", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.RAY + ) as span: + span.set_tag_str(SPAN_KIND, SpanKind.CONSUMER) + _inject_ray_span_tags(span) + + try: + return method(self, *args) + except Exception as e: + raise e + + return _traced_run_method + + @contextmanager -def _trace_actor_method(self: Any, method: Callable[..., Any], dd_trace_ctx): +def _trace_actor_method(self: Any, method: Callable[..., Any], dd_trace_ctx, *args, **kwargs): context = tracer.context_provider.active() if context is None: context = _TraceContext._extract(dd_trace_ctx) @@ -290,6 +323,8 @@ def _trace_actor_method(self: Any, method: Callable[..., Any], dd_trace_ctx): child_of=context, activate=True, ) as actor_execute_span: + actor_execute_span.set_tag("ray.actor_method.args", args) + actor_execute_span.set_tag("ray.actor_method.kwargs", kwargs) yield actor_execute_span @@ -300,7 +335,7 @@ def _traced_method(self: Any, *args: Any, _dd_trace_ctx=None, **kwargs: Any) -> if not tracer or (_dd_trace_ctx is None and tracer.current_span() is None): return method(self, *args, **kwargs) - with _trace_actor_method(self, method, _dd_trace_ctx): + with _trace_actor_method(self, method, _dd_trace_ctx, *args, **kwargs): return method(self, *args, **kwargs) return _traced_method @@ -313,7 +348,7 @@ async def _traced_async_method(self: Any, *args: Any, _dd_trace_ctx=None, **kwar if not tracer or (_dd_trace_ctx is None and tracer.current_span() is None): return await method(self, *args, **kwargs) - with _trace_actor_method(self, method, _dd_trace_ctx): + with _trace_actor_method(self, method, _dd_trace_ctx, *args, **kwargs): return await method(self, *args, **kwargs) return _traced_async_method @@ -353,8 +388,10 @@ def inject_tracing_into_actor_class(wrapped, instance, args, kwargs): method.__signature__ = _inject_dd_trace_ctx_kwarg(method) # Special handling for the run method in JobSupervisor - if is_job_supervisor and name == "run" and inspect.iscoroutinefunction(method): - wrapped_method = wraps(method)(job_supervisor_run_wrapper(method)) + if is_job_supervisor and name == "run": + wrapped_method = wraps(method)(_job_supervisor_run_wrapper(method)) + elif is_job_supervisor and name == "_exec_entrypoint": + wrapped_method = wraps(method)(_exec_entrypoint_wrapper(method)) else: if inspect.iscoroutinefunction(method): wrapped_method = wraps(method)(_inject_tracing_async_actor_method(method)) diff --git a/tests/contrib/ray/test_ray.py b/tests/contrib/ray/test_ray.py index fc0d35c9086..cae77c5c473 100644 --- a/tests/contrib/ray/test_ray.py +++ b/tests/contrib/ray/test_ray.py @@ -49,11 +49,14 @@ def submit_ray_job(script_name, timeout=60): "meta.ray.job.message", "meta.error.stack", "meta._dd.base_service", + # Actor method empty arguments are encoded differently between ray versions + "meta.ray.actor_method.args", # Service names that include dynamic submission IDs "service", # Base service sometimes gets set to a different value in CI than in the local environment, # ignore it to make the tests pass in both environments "meta._dd.base_service", + "meta._dd.hostname", ] diff --git a/tests/snapshots/tests.contrib.ray.test_ray.error_in_task.json b/tests/snapshots/tests.contrib.ray.test_ray.error_in_task.json index ff95a0cf363..f5d0075924e 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.error_in_task.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.error_in_task.json @@ -1,7 +1,7 @@ [[ { "name": "ray.job", - "service": "raysubmit_9fLPpGpphKh8suBJ", + "service": "raysubmit_RYjaeg5Sx1tWAid5", "resource": "ray.job", "trace_id": 0, "span_id": 1, @@ -10,14 +10,16 @@ "error": 1, "meta": { "_dd.base_service": "ray.dashboard", + "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68b5901500000000", + "_dd.p.tid": "68c7d18a00000000", "component": "ray", - "error.message": "Job entrypoint command failed with exit code 1, last available logs (truncated to 20,000 chars):\nray.exceptions.RayTaskError(ValueError): \u001b[36mray::add_one()\u001b[39m (pid=4275, ip=192.168.65.3)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 107, in wrapped_function\n return _wrap_task_execution(function, *args, **kwargs)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 139, in _wrap_task_execution\n raise e\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 134, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 7, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", + "error.message": "Job entrypoint command failed with exit code 1, last available logs (truncated to 20,000 chars):\n File \"/home/bits/project/.riot/venv_py3135_mock_pytest_pytest-mock_coverage_pytest-cov_opentracing_hypothesis6451_pytest-asyncio_ray[default]~2460/lib/python3.13/site-packages/ray/_private/worker.py\", line 930, in get_objects\n raise value.as_instanceof_cause()\nray.exceptions.RayTaskError(ValueError): \u001b[36mray::add_one()\u001b[39m (pid=2165, ip=192.168.65.3)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 100, in wrapped_function\n return _wrap_task_execution(function, *args, **kwargs)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 130, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", "language": "python", - "ray.job.message": "Job entrypoint command failed with exit code 1, last available logs (truncated to 20,000 chars):\nray.exceptions.RayTaskError(ValueError): \u001b[36mray::add_one()\u001b[39m (pid=4275, ip=192.168.65.3)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 107, in wrapped_function\n return _wrap_task_execution(function, *args, **kwargs)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 139, in _wrap_task_execution\n raise e\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 134, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 7, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", + "ray.job.message": "Job entrypoint command failed with exit code 1, last available logs (truncated to 20,000 chars):\n File \"/home/bits/project/.riot/venv_py3135_mock_pytest_pytest-mock_coverage_pytest-cov_opentracing_hypothesis6451_pytest-asyncio_ray[default]~2460/lib/python3.13/site-packages/ray/_private/worker.py\", line 930, in get_objects\n raise value.as_instanceof_cause()\nray.exceptions.RayTaskError(ValueError): \u001b[36mray::add_one()\u001b[39m (pid=2165, ip=192.168.65.3)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 100, in wrapped_function\n return _wrap_task_execution(function, *args, **kwargs)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 130, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", "ray.job.status": "FAILED", - "runtime-id": "1a8544fb366e40788efcfccb872f201c" + "ray.submission_id": "raysubmit_RYjaeg5Sx1tWAid5", + "runtime-id": "bfdf74988ffd4419aabda8fe7dddaa45" }, "metrics": { "_dd.djm.enabled": 1, @@ -26,14 +28,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 3694 + "process_id": 1038 }, - "duration": 9412134963, - "start": 1756729365190546459 + "duration": 6875423128, + "start": 1757925770450148966 }, { "name": "ray.job.submit", - "service": "raysubmit_9fLPpGpphKh8suBJ", + "service": "raysubmit_RYjaeg5Sx1tWAid5", "resource": "ray.job.submit", "trace_id": 0, "span_id": 2, @@ -42,6 +44,7 @@ "error": 0, "meta": { "_dd.base_service": "ray.dashboard", + "_dd.hostname": "docker-desktop", "component": "ray", "ray.job.submit_status": "success", "span.kind": "producer" @@ -52,12 +55,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 43541, - "start": 1756729365190588459 + "duration": 33417, + "start": 1757925770450315341 }, { "name": "JobSupervisor.run.remote()", - "service": "raysubmit_9fLPpGpphKh8suBJ", + "service": "raysubmit_RYjaeg5Sx1tWAid5", "resource": "JobSupervisor.run.remote()", "trace_id": 0, "span_id": 3, @@ -66,9 +69,12 @@ "error": 0, "meta": { "_dd.base_service": "ray.dashboard", + "_dd.hostname": "docker-desktop", "component": "ray", + "ray.actor_method.args": "()", + "ray.actor_method.kwargs": "{'_start_signal_actor': None, 'resources_specified': False}", "ray.job_id": "01000000", - "ray.node_id": "c10c05529ea00397b477531255944a5243dda98b057ab71d8e6cf2d1", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "producer" }, @@ -78,12 +84,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 261792, - "start": 1756729365214141459 + "duration": 454292, + "start": 1757925770453630841 }, { "name": "JobSupervisor.run", - "service": "raysubmit_9fLPpGpphKh8suBJ", + "service": "raysubmit_RYjaeg5Sx1tWAid5", "resource": "JobSupervisor.run", "trace_id": 0, "span_id": 4, @@ -92,23 +98,24 @@ "error": 1, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68b5901500000000", - "_dd.parent_id": "562bf616b49c9f2d", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d18a00000000", + "_dd.parent_id": "0f76496e60a10b85", "component": "ray", "error.message": "", - "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 301, in _traced_run_method\n raise e\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 295, in _traced_run_method\n await method(self, *args, **kwargs)\n File \"/home/bits/project/.riot/venv_py3135_mock_pytest_pytest-mock_coverage_pytest-cov_opentracing_hypothesis6451_pytest-asyncio_ray[default]~2480/lib/python3.13/site-packages/ray/dashboard/modules/job/job_supervisor.py\", line 473, in run\n ray.actor.exit_actor()\n ~~~~~~~~~~~~~~~~~~~~^^\n File \"/home/bits/project/.riot/venv_py3135_mock_pytest_pytest-mock_coverage_pytest-cov_opentracing_hypothesis6451_pytest-asyncio_ray[default]~2480/lib/python3.13/site-packages/ray/actor.py\", line 2369, in exit_actor\n raise AsyncioActorExit()\nray.exceptions.AsyncioActorExit\n", + "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 23, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 283, in _traced_run_method\n raise e\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 276, in _traced_run_method\n await method(self, *args, **kwargs)\n File \"/home/bits/project/.riot/venv_py3135_mock_pytest_pytest-mock_coverage_pytest-cov_opentracing_hypothesis6451_pytest-asyncio_ray[default]~2460/lib/python3.13/site-packages/ray/dashboard/modules/job/job_supervisor.py\", line 474, in run\n ray.actor.exit_actor()\n ~~~~~~~~~~~~~~~~~~~~^^\n File \"/home/bits/project/.riot/venv_py3135_mock_pytest_pytest-mock_coverage_pytest-cov_opentracing_hypothesis6451_pytest-asyncio_ray[default]~2460/lib/python3.13/site-packages/ray/actor.py\", line 1806, in exit_actor\n raise AsyncioActorExit()\nray.exceptions.AsyncioActorExit\n", "error.type": "ray.exceptions.AsyncioActorExit", "language": "python", - "ray.actor_id": "7892bf72e048df749841f80901000000", + "ray.actor_id": "cede0f7dea42f9072a43471901000000", "ray.job_id": "01000000", - "ray.node_id": "c10c05529ea00397b477531255944a5243dda98b057ab71d8e6cf2d1", - "ray.submission_id": "raysubmit_9fLPpGpphKh8suBJ", - "ray.task_id": "16310a0f0a45af5c7892bf72e048df749841f80901000000", - "ray.worker_id": "a2ca2e0a27a841dbc7a7c5148b3e1eeab10fa1995c608b2dc5459f9c", - "runtime-id": "ba4433ae780442a4a7910230c27885fb", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_RYjaeg5Sx1tWAid5", + "ray.task_id": "71b133a11e1c461ccede0f7dea42f9072a43471901000000", + "ray.worker_id": "17f845583f03241dd5c5e1b786a001bdd42731937476626dacbaa174", + "runtime-id": "eff2d76c0b6f448e91ed04889e259fd8", "span.kind": "consumer", - "traceparent": "00-68b5901500000000ccf66aa80bdf2071-562bf616b49c9f2d-00", - "tracestate": "dd=p:562bf616b49c9f2d" + "traceparent": "00-68c7d18a00000000e6c9b446d2cfd595-0f76496e60a10b85-00", + "tracestate": "dd=p:0f76496e60a10b85" }, "metrics": { "_dd.djm.enabled": 1, @@ -117,14 +124,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 4151 + "process_id": 2070 }, - "duration": 7277508420, - "start": 1756729366543785126 + "duration": 5669977044, + "start": 1757925771290297675 }, { "name": "JobSupervisor._get_driver_env_vars", - "service": "raysubmit_9fLPpGpphKh8suBJ", + "service": "raysubmit_RYjaeg5Sx1tWAid5", "resource": "JobSupervisor._get_driver_env_vars", "trace_id": 0, "span_id": 5, @@ -133,13 +140,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "7892bf72e048df749841f80901000000", + "ray.actor_id": "cede0f7dea42f9072a43471901000000", + "ray.actor_method.args": "(False,)", + "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "c10c05529ea00397b477531255944a5243dda98b057ab71d8e6cf2d1", - "ray.submission_id": "raysubmit_9fLPpGpphKh8suBJ", - "ray.task_id": "16310a0f0a45af5c7892bf72e048df749841f80901000000", - "ray.worker_id": "a2ca2e0a27a841dbc7a7c5148b3e1eeab10fa1995c608b2dc5459f9c", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_RYjaeg5Sx1tWAid5", + "ray.task_id": "71b133a11e1c461ccede0f7dea42f9072a43471901000000", + "ray.worker_id": "17f845583f03241dd5c5e1b786a001bdd42731937476626dacbaa174", "span.kind": "consumer" }, "metrics": { @@ -148,12 +158,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 2859292, - "start": 1756729366545075209 + "duration": 1866459, + "start": 1757925771291794341 }, { "name": "JobSupervisor._get_driver_runtime_env", - "service": "raysubmit_9fLPpGpphKh8suBJ", + "service": "raysubmit_RYjaeg5Sx1tWAid5", "resource": "JobSupervisor._get_driver_runtime_env", "trace_id": 0, "span_id": 11, @@ -162,13 +172,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "7892bf72e048df749841f80901000000", + "ray.actor_id": "cede0f7dea42f9072a43471901000000", + "ray.actor_method.args": "(False,)", + "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "c10c05529ea00397b477531255944a5243dda98b057ab71d8e6cf2d1", - "ray.submission_id": "raysubmit_9fLPpGpphKh8suBJ", - "ray.task_id": "16310a0f0a45af5c7892bf72e048df749841f80901000000", - "ray.worker_id": "a2ca2e0a27a841dbc7a7c5148b3e1eeab10fa1995c608b2dc5459f9c", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_RYjaeg5Sx1tWAid5", + "ray.task_id": "71b133a11e1c461ccede0f7dea42f9072a43471901000000", + "ray.worker_id": "17f845583f03241dd5c5e1b786a001bdd42731937476626dacbaa174", "span.kind": "consumer" }, "metrics": { @@ -177,13 +190,13 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 47708, - "start": 1756729366547866251 + "duration": 170833, + "start": 1757925771293453383 }, { - "name": "JobSupervisor._exec_entrypoint", - "service": "raysubmit_9fLPpGpphKh8suBJ", - "resource": "JobSupervisor._exec_entrypoint", + "name": "exec python /home/bits/project/tests/contrib/ray/jobs/error_in_task.py", + "service": "raysubmit_RYjaeg5Sx1tWAid5", + "resource": "exec python /home/bits/project/tests/contrib/ray/jobs/error_in_task.py", "trace_id": 0, "span_id": 6, "parent_id": 4, @@ -191,13 +204,14 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "7892bf72e048df749841f80901000000", + "ray.actor_id": "cede0f7dea42f9072a43471901000000", "ray.job_id": "01000000", - "ray.node_id": "c10c05529ea00397b477531255944a5243dda98b057ab71d8e6cf2d1", - "ray.submission_id": "raysubmit_9fLPpGpphKh8suBJ", - "ray.task_id": "16310a0f0a45af5c7892bf72e048df749841f80901000000", - "ray.worker_id": "a2ca2e0a27a841dbc7a7c5148b3e1eeab10fa1995c608b2dc5459f9c", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_RYjaeg5Sx1tWAid5", + "ray.task_id": "71b133a11e1c461ccede0f7dea42f9072a43471901000000", + "ray.worker_id": "17f845583f03241dd5c5e1b786a001bdd42731937476626dacbaa174", "span.kind": "consumer" }, "metrics": { @@ -206,12 +220,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 401583, - "start": 1756729366548085543 + "duration": 482792, + "start": 1757925771293859966 }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_9fLPpGpphKh8suBJ", + "service": "raysubmit_RYjaeg5Sx1tWAid5", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 7, @@ -220,19 +234,22 @@ "error": 0, "meta": { "_dd.base_service": "project", - "_dd.p.tid": "68b5901500000000", - "_dd.parent_id": "6820b176a261a94b", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d18a00000000", + "_dd.parent_id": "87dbc5bbd2cf3b51", "component": "ray", "language": "python", - "ray.job_id": "02000000", - "ray.node_id": "c10c05529ea00397b477531255944a5243dda98b057ab71d8e6cf2d1", - "ray.submission_id": "raysubmit_9fLPpGpphKh8suBJ", + "ray.job_id": "04000000", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_RYjaeg5Sx1tWAid5", + "ray.task.args": "(0,)", + "ray.task.kwargs": "{}", "ray.task.submit_status": "success", - "ray.worker_id": "02000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "ce1a3151095e498498106a4f0c8e501c", + "ray.worker_id": "04000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "16fb93c1a270442f80cddd2aeb52e823", "span.kind": "producer", - "traceparent": "00-68b5901500000000ccf66aa80bdf2071-6820b176a261a94b-00", - "tracestate": "dd=p:6820b176a261a94b;s:0" + "traceparent": "00-68c7d18a00000000e6c9b446d2cfd595-87dbc5bbd2cf3b51-00", + "tracestate": "dd=p:87dbc5bbd2cf3b51;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -241,14 +258,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 4223 + "process_id": 2120 }, - "duration": 3214583, - "start": 1756729367237336793 + "duration": 3102125, + "start": 1757925771875365883 }, { "name": "__main__.add_one", - "service": "raysubmit_9fLPpGpphKh8suBJ", + "service": "raysubmit_RYjaeg5Sx1tWAid5", "resource": "__main__.add_one", "trace_id": 0, "span_id": 12, @@ -257,23 +274,26 @@ "error": 1, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68b5901500000000", - "_dd.parent_id": "dbb4b992a56fefc0", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d18a00000000", + "_dd.parent_id": "cf218b99a3c30477", "component": "ray", "error.message": "foo", - "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 139, in _wrap_task_execution\n raise e\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 134, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 7, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", + "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 23, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 130, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", "error.type": "builtins.ValueError", "language": "python", - "ray.job_id": "02000000", - "ray.node_id": "c10c05529ea00397b477531255944a5243dda98b057ab71d8e6cf2d1", - "ray.submission_id": "raysubmit_9fLPpGpphKh8suBJ", + "ray.job_id": "04000000", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_RYjaeg5Sx1tWAid5", + "ray.task.args": "(0,)", + "ray.task.kwargs": "{}", "ray.task.status": "error", - "ray.task_id": "67a2e8cfa5a06db3ffffffffffffffffffffffff02000000", - "ray.worker_id": "7a373795a49a97d5d58a35e0a17dc6b21996ae1ccf7da696c4689062", - "runtime-id": "237592a324b34fcf8be7e070818da1e1", + "ray.task_id": "ca80f3a8e8ba2e50ffffffffffffffffffffffff04000000", + "ray.worker_id": "252b08084730b0301292d7e06a73d30645614102fc155ec63cb8c10d", + "runtime-id": "b265e1d513594da49f7b2737da63ce3c", "span.kind": "consumer", - "traceparent": "00-68b5901500000000ccf66aa80bdf2071-dbb4b992a56fefc0-00", - "tracestate": "dd=p:dbb4b992a56fefc0;s:0" + "traceparent": "00-68c7d18a00000000e6c9b446d2cfd595-cf218b99a3c30477-00", + "tracestate": "dd=p:cf218b99a3c30477;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -282,14 +302,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 4272 + "process_id": 2165 }, - "duration": 8540292, - "start": 1756729370321577086 + "duration": 3235625, + "start": 1757925773689146718 }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_9fLPpGpphKh8suBJ", + "service": "raysubmit_RYjaeg5Sx1tWAid5", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 8, @@ -298,19 +318,22 @@ "error": 0, "meta": { "_dd.base_service": "project", - "_dd.p.tid": "68b5901500000000", - "_dd.parent_id": "6820b176a261a94b", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d18a00000000", + "_dd.parent_id": "87dbc5bbd2cf3b51", "component": "ray", "language": "python", - "ray.job_id": "02000000", - "ray.node_id": "c10c05529ea00397b477531255944a5243dda98b057ab71d8e6cf2d1", - "ray.submission_id": "raysubmit_9fLPpGpphKh8suBJ", + "ray.job_id": "04000000", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_RYjaeg5Sx1tWAid5", + "ray.task.args": "(1,)", + "ray.task.kwargs": "{}", "ray.task.submit_status": "success", - "ray.worker_id": "02000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "ce1a3151095e498498106a4f0c8e501c", + "ray.worker_id": "04000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "16fb93c1a270442f80cddd2aeb52e823", "span.kind": "producer", - "traceparent": "00-68b5901500000000ccf66aa80bdf2071-6820b176a261a94b-00", - "tracestate": "dd=p:6820b176a261a94b;s:0" + "traceparent": "00-68c7d18a00000000e6c9b446d2cfd595-87dbc5bbd2cf3b51-00", + "tracestate": "dd=p:87dbc5bbd2cf3b51;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -319,14 +342,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 4223 + "process_id": 2120 }, - "duration": 185833, - "start": 1756729367243572835 + "duration": 189833, + "start": 1757925771880668425 }, { "name": "__main__.add_one", - "service": "raysubmit_9fLPpGpphKh8suBJ", + "service": "raysubmit_RYjaeg5Sx1tWAid5", "resource": "__main__.add_one", "trace_id": 0, "span_id": 13, @@ -335,23 +358,26 @@ "error": 1, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68b5901500000000", - "_dd.parent_id": "e9a418aa1a98909c", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d18a00000000", + "_dd.parent_id": "4cd1715847285d15", "component": "ray", "error.message": "foo", - "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 139, in _wrap_task_execution\n raise e\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 134, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 7, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", + "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 23, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 130, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", "error.type": "builtins.ValueError", "language": "python", - "ray.job_id": "02000000", - "ray.node_id": "c10c05529ea00397b477531255944a5243dda98b057ab71d8e6cf2d1", - "ray.submission_id": "raysubmit_9fLPpGpphKh8suBJ", + "ray.job_id": "04000000", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_RYjaeg5Sx1tWAid5", + "ray.task.args": "(1,)", + "ray.task.kwargs": "{}", "ray.task.status": "error", - "ray.task_id": "e082c90ab8422b00ffffffffffffffffffffffff02000000", - "ray.worker_id": "464deb49df366eea512107ace6fe5b68d94ae1b0b4cf4e32ba88f43e", - "runtime-id": "ca089f2a624042398fdf8207599bd5c5", + "ray.task_id": "d8c1ad1586102897ffffffffffffffffffffffff04000000", + "ray.worker_id": "404f6a40d1957e8a7d0d4808c600a8f2c4f655c9fa1bb3f0bf515428", + "runtime-id": "a4231a7735ec411e93ca1a0d892aee52", "span.kind": "consumer", - "traceparent": "00-68b5901500000000ccf66aa80bdf2071-e9a418aa1a98909c-00", - "tracestate": "dd=p:e9a418aa1a98909c;s:0" + "traceparent": "00-68c7d18a00000000e6c9b446d2cfd595-4cd1715847285d15-00", + "tracestate": "dd=p:4cd1715847285d15;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -360,14 +386,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 4275 + "process_id": 2168 }, - "duration": 5636166, - "start": 1756729370323848545 + "duration": 2319916, + "start": 1757925773690969968 }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_9fLPpGpphKh8suBJ", + "service": "raysubmit_RYjaeg5Sx1tWAid5", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 9, @@ -376,19 +402,22 @@ "error": 0, "meta": { "_dd.base_service": "project", - "_dd.p.tid": "68b5901500000000", - "_dd.parent_id": "6820b176a261a94b", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d18a00000000", + "_dd.parent_id": "87dbc5bbd2cf3b51", "component": "ray", "language": "python", - "ray.job_id": "02000000", - "ray.node_id": "c10c05529ea00397b477531255944a5243dda98b057ab71d8e6cf2d1", - "ray.submission_id": "raysubmit_9fLPpGpphKh8suBJ", + "ray.job_id": "04000000", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_RYjaeg5Sx1tWAid5", + "ray.task.args": "(2,)", + "ray.task.kwargs": "{}", "ray.task.submit_status": "success", - "ray.worker_id": "02000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "ce1a3151095e498498106a4f0c8e501c", + "ray.worker_id": "04000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "16fb93c1a270442f80cddd2aeb52e823", "span.kind": "producer", - "traceparent": "00-68b5901500000000ccf66aa80bdf2071-6820b176a261a94b-00", - "tracestate": "dd=p:6820b176a261a94b;s:0" + "traceparent": "00-68c7d18a00000000e6c9b446d2cfd595-87dbc5bbd2cf3b51-00", + "tracestate": "dd=p:87dbc5bbd2cf3b51;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -397,14 +426,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 4223 + "process_id": 2120 }, - "duration": 160833, - "start": 1756729367245269960 + "duration": 183750, + "start": 1757925771882680258 }, { "name": "__main__.add_one", - "service": "raysubmit_9fLPpGpphKh8suBJ", + "service": "raysubmit_RYjaeg5Sx1tWAid5", "resource": "__main__.add_one", "trace_id": 0, "span_id": 14, @@ -413,23 +442,26 @@ "error": 1, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68b5901500000000", - "_dd.parent_id": "eb6ecc39a54c4602", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d18a00000000", + "_dd.parent_id": "1b91ca2651a95fd5", "component": "ray", "error.message": "foo", - "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 139, in _wrap_task_execution\n raise e\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 134, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 7, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", + "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 23, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 130, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", "error.type": "builtins.ValueError", "language": "python", - "ray.job_id": "02000000", - "ray.node_id": "c10c05529ea00397b477531255944a5243dda98b057ab71d8e6cf2d1", - "ray.submission_id": "raysubmit_9fLPpGpphKh8suBJ", + "ray.job_id": "04000000", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_RYjaeg5Sx1tWAid5", + "ray.task.args": "(2,)", + "ray.task.kwargs": "{}", "ray.task.status": "error", - "ray.task_id": "e5cbd90b7f1fb776ffffffffffffffffffffffff02000000", - "ray.worker_id": "464deb49df366eea512107ace6fe5b68d94ae1b0b4cf4e32ba88f43e", - "runtime-id": "ca089f2a624042398fdf8207599bd5c5", + "ray.task_id": "5da13aa9e2150759ffffffffffffffffffffffff04000000", + "ray.worker_id": "5a84507e46977c5717ad3050a61a73280fa88742f94b9b6f681599ab", + "runtime-id": "0080c088054d4495b0dd631679e29c0b", "span.kind": "consumer", - "traceparent": "00-68b5901500000000ccf66aa80bdf2071-eb6ecc39a54c4602-00", - "tracestate": "dd=p:eb6ecc39a54c4602;s:0" + "traceparent": "00-68c7d18a00000000e6c9b446d2cfd595-1b91ca2651a95fd5-00", + "tracestate": "dd=p:1b91ca2651a95fd5;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -438,14 +470,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 4275 + "process_id": 2167 }, - "duration": 528083, - "start": 1756729370336110753 + "duration": 2784792, + "start": 1757925773715809426 }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_9fLPpGpphKh8suBJ", + "service": "raysubmit_RYjaeg5Sx1tWAid5", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 10, @@ -454,19 +486,22 @@ "error": 0, "meta": { "_dd.base_service": "project", - "_dd.p.tid": "68b5901500000000", - "_dd.parent_id": "6820b176a261a94b", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d18a00000000", + "_dd.parent_id": "87dbc5bbd2cf3b51", "component": "ray", "language": "python", - "ray.job_id": "02000000", - "ray.node_id": "c10c05529ea00397b477531255944a5243dda98b057ab71d8e6cf2d1", - "ray.submission_id": "raysubmit_9fLPpGpphKh8suBJ", + "ray.job_id": "04000000", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_RYjaeg5Sx1tWAid5", + "ray.task.args": "(3,)", + "ray.task.kwargs": "{}", "ray.task.submit_status": "success", - "ray.worker_id": "02000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "ce1a3151095e498498106a4f0c8e501c", + "ray.worker_id": "04000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "16fb93c1a270442f80cddd2aeb52e823", "span.kind": "producer", - "traceparent": "00-68b5901500000000ccf66aa80bdf2071-6820b176a261a94b-00", - "tracestate": "dd=p:6820b176a261a94b;s:0" + "traceparent": "00-68c7d18a00000000e6c9b446d2cfd595-87dbc5bbd2cf3b51-00", + "tracestate": "dd=p:87dbc5bbd2cf3b51;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -475,14 +510,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 4223 + "process_id": 2120 }, - "duration": 155625, - "start": 1756729367246169085 + "duration": 190292, + "start": 1757925771884719175 }, { "name": "__main__.add_one", - "service": "raysubmit_9fLPpGpphKh8suBJ", + "service": "raysubmit_RYjaeg5Sx1tWAid5", "resource": "__main__.add_one", "trace_id": 0, "span_id": 15, @@ -491,23 +526,26 @@ "error": 1, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68b5901500000000", - "_dd.parent_id": "b60a3e943e41718c", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d18a00000000", + "_dd.parent_id": "67461fb78229a540", "component": "ray", "error.message": "foo", - "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 139, in _wrap_task_execution\n raise e\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 134, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 7, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", + "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 23, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 130, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", "error.type": "builtins.ValueError", "language": "python", - "ray.job_id": "02000000", - "ray.node_id": "c10c05529ea00397b477531255944a5243dda98b057ab71d8e6cf2d1", - "ray.submission_id": "raysubmit_9fLPpGpphKh8suBJ", + "ray.job_id": "04000000", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_RYjaeg5Sx1tWAid5", + "ray.task.args": "(3,)", + "ray.task.kwargs": "{}", "ray.task.status": "error", - "ray.task_id": "39088be3736e590affffffffffffffffffffffff02000000", - "ray.worker_id": "55ab593ea0c31f420d9bfdb1facec23a838729bdbce3a985cef7f470", - "runtime-id": "5ea204d639f74258ae42a7638ec5cc25", + "ray.task_id": "011ae9488efe4e25ffffffffffffffffffffffff04000000", + "ray.worker_id": "162534bb65935bc0b0b810762d7135dfd1cb82c2e0055b1a1133b088", + "runtime-id": "589746ab50364cec9c7ab3ab22dd8760", "span.kind": "consumer", - "traceparent": "00-68b5901500000000ccf66aa80bdf2071-b60a3e943e41718c-00", - "tracestate": "dd=p:b60a3e943e41718c;s:0" + "traceparent": "00-68c7d18a00000000e6c9b446d2cfd595-67461fb78229a540-00", + "tracestate": "dd=p:67461fb78229a540;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -516,8 +554,8 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 4273 + "process_id": 2166 }, - "duration": 3504917, - "start": 1756729370343279628 + "duration": 2600791, + "start": 1757925773714417343 }]] diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_actor_and_task.json b/tests/snapshots/tests.contrib.ray.test_ray.test_actor_and_task.json index c5c87c2459d..9ef9bd58618 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_actor_and_task.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_actor_and_task.json @@ -1,7 +1,7 @@ [[ { "name": "ray.job", - "service": "raysubmit_feABH49FUBBv6b6Z", + "service": "raysubmit_QGhgeswe7DKPUFh4", "resource": "ray.job", "trace_id": 0, "span_id": 1, @@ -10,13 +10,15 @@ "error": 0, "meta": { "_dd.base_service": "ray.dashboard", + "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68b58fc000000000", + "_dd.p.tid": "68c7d17a00000000", "component": "ray", "language": "python", "ray.job.message": "Job finished successfully.", "ray.job.status": "SUCCEEDED", - "runtime-id": "b71f15a89fe8488da7fa26c8ebc99b4e" + "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", + "runtime-id": "bfdf74988ffd4419aabda8fe7dddaa45" }, "metrics": { "_dd.djm.enabled": 1, @@ -25,14 +27,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1083 + "process_id": 1038 }, - "duration": 9352217004, - "start": 1756729280415321170 + "duration": 6101456461, + "start": 1757925754173199500 }, { "name": "ray.job.submit", - "service": "raysubmit_feABH49FUBBv6b6Z", + "service": "raysubmit_QGhgeswe7DKPUFh4", "resource": "ray.job.submit", "trace_id": 0, "span_id": 2, @@ -41,6 +43,7 @@ "error": 0, "meta": { "_dd.base_service": "ray.dashboard", + "_dd.hostname": "docker-desktop", "component": "ray", "ray.job.submit_status": "success", "span.kind": "producer" @@ -51,12 +54,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 54167, - "start": 1756729280415358878 + "duration": 47666, + "start": 1757925754173380042 }, { "name": "JobSupervisor.run.remote()", - "service": "raysubmit_feABH49FUBBv6b6Z", + "service": "raysubmit_QGhgeswe7DKPUFh4", "resource": "JobSupervisor.run.remote()", "trace_id": 0, "span_id": 3, @@ -65,9 +68,12 @@ "error": 0, "meta": { "_dd.base_service": "ray.dashboard", + "_dd.hostname": "docker-desktop", "component": "ray", + "ray.actor_method.args": "()", + "ray.actor_method.kwargs": "{'_start_signal_actor': None, 'resources_specified': False}", "ray.job_id": "01000000", - "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "producer" }, @@ -77,12 +83,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 247333, - "start": 1756729280438788878 + "duration": 278458, + "start": 1757925754213448000 }, { "name": "JobSupervisor.run", - "service": "raysubmit_feABH49FUBBv6b6Z", + "service": "raysubmit_QGhgeswe7DKPUFh4", "resource": "JobSupervisor.run", "trace_id": 0, "span_id": 4, @@ -91,20 +97,21 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68b58fc000000000", - "_dd.parent_id": "7680189ecd6b8e7f", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d17a00000000", + "_dd.parent_id": "68cf28a2fab3756f", "component": "ray", "language": "python", - "ray.actor_id": "d6454c463d1fe143a4f115b601000000", + "ray.actor_id": "36a93d54a0837248a59f1c8a01000000", "ray.job_id": "01000000", - "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", - "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", - "ray.task_id": "16310a0f0a45af5cd6454c463d1fe143a4f115b601000000", - "ray.worker_id": "0c01b74403204c89ed720044b62a517ce7eac0dadf2837bd4353b65b", - "runtime-id": "b23e2986ed844c95a52c8f0009a7bc25", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", + "ray.task_id": "16310a0f0a45af5c36a93d54a0837248a59f1c8a01000000", + "ray.worker_id": "1a0317429b3f8ebaf76db9d3ad8d63780a4c6b8daec711d08d0df3ab", + "runtime-id": "6eb7da2b3ee14cf8ad8246e318ff9436", "span.kind": "consumer", - "traceparent": "00-68b58fc00000000056a1a5cacac15331-7680189ecd6b8e7f-00", - "tracestate": "dd=p:7680189ecd6b8e7f" + "traceparent": "00-68c7d17a00000000457b3aa9298c617f-68cf28a2fab3756f-00", + "tracestate": "dd=p:68cf28a2fab3756f" }, "metrics": { "_dd.djm.enabled": 1, @@ -113,14 +120,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1540 + "process_id": 1466 }, - "duration": 7172894795, - "start": 1756729281721611629 + "duration": 4457057169, + "start": 1757925755252837917 }, { "name": "JobSupervisor._get_driver_env_vars", - "service": "raysubmit_feABH49FUBBv6b6Z", + "service": "raysubmit_QGhgeswe7DKPUFh4", "resource": "JobSupervisor._get_driver_env_vars", "trace_id": 0, "span_id": 5, @@ -129,13 +136,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "d6454c463d1fe143a4f115b601000000", + "ray.actor_id": "36a93d54a0837248a59f1c8a01000000", + "ray.actor_method.args": "(False,)", + "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", - "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", - "ray.task_id": "16310a0f0a45af5cd6454c463d1fe143a4f115b601000000", - "ray.worker_id": "0c01b74403204c89ed720044b62a517ce7eac0dadf2837bd4353b65b", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", + "ray.task_id": "16310a0f0a45af5c36a93d54a0837248a59f1c8a01000000", + "ray.worker_id": "1a0317429b3f8ebaf76db9d3ad8d63780a4c6b8daec711d08d0df3ab", "span.kind": "consumer" }, "metrics": { @@ -144,12 +154,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 1352917, - "start": 1756729281722814295 + "duration": 1721917, + "start": 1757925755254333042 }, { "name": "JobSupervisor._get_driver_runtime_env", - "service": "raysubmit_feABH49FUBBv6b6Z", + "service": "raysubmit_QGhgeswe7DKPUFh4", "resource": "JobSupervisor._get_driver_runtime_env", "trace_id": 0, "span_id": 8, @@ -158,13 +168,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "d6454c463d1fe143a4f115b601000000", + "ray.actor_id": "36a93d54a0837248a59f1c8a01000000", + "ray.actor_method.args": "(False,)", + "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", - "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", - "ray.task_id": "16310a0f0a45af5cd6454c463d1fe143a4f115b601000000", - "ray.worker_id": "0c01b74403204c89ed720044b62a517ce7eac0dadf2837bd4353b65b", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", + "ray.task_id": "16310a0f0a45af5c36a93d54a0837248a59f1c8a01000000", + "ray.worker_id": "1a0317429b3f8ebaf76db9d3ad8d63780a4c6b8daec711d08d0df3ab", "span.kind": "consumer" }, "metrics": { @@ -173,13 +186,13 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 35041, - "start": 1756729281724113254 + "duration": 175041, + "start": 1757925755255849959 }, { - "name": "JobSupervisor._exec_entrypoint", - "service": "raysubmit_feABH49FUBBv6b6Z", - "resource": "JobSupervisor._exec_entrypoint", + "name": "exec python /home/bits/project/tests/contrib/ray/jobs/actor_and_task.py", + "service": "raysubmit_QGhgeswe7DKPUFh4", + "resource": "exec python /home/bits/project/tests/contrib/ray/jobs/actor_and_task.py", "trace_id": 0, "span_id": 6, "parent_id": 4, @@ -187,13 +200,14 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "d6454c463d1fe143a4f115b601000000", + "ray.actor_id": "36a93d54a0837248a59f1c8a01000000", "ray.job_id": "01000000", - "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", - "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", - "ray.task_id": "16310a0f0a45af5cd6454c463d1fe143a4f115b601000000", - "ray.worker_id": "0c01b74403204c89ed720044b62a517ce7eac0dadf2837bd4353b65b", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", + "ray.task_id": "16310a0f0a45af5c36a93d54a0837248a59f1c8a01000000", + "ray.worker_id": "1a0317429b3f8ebaf76db9d3ad8d63780a4c6b8daec711d08d0df3ab", "span.kind": "consumer" }, "metrics": { @@ -202,12 +216,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 413042, - "start": 1756729281724318795 + "duration": 451042, + "start": 1757925755256199542 }, { "name": "ComputationManager.compute_and_store.remote()", - "service": "raysubmit_feABH49FUBBv6b6Z", + "service": "raysubmit_QGhgeswe7DKPUFh4", "resource": "ComputationManager.compute_and_store.remote()", "trace_id": 0, "span_id": 7, @@ -216,18 +230,21 @@ "error": 0, "meta": { "_dd.base_service": "project", - "_dd.p.tid": "68b58fc000000000", - "_dd.parent_id": "df73f945b04e4758", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d17a00000000", + "_dd.parent_id": "89ac784e9fb44887", "component": "ray", "language": "python", + "ray.actor_method.args": "([2, 3, 4],)", + "ray.actor_method.kwargs": "{}", "ray.job_id": "02000000", - "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", - "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", "ray.worker_id": "02000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "f2fb50cbd971486a9eb8542f7107e107", + "runtime-id": "ecb68b2c8da349eaa377e04a5c572c89", "span.kind": "producer", - "traceparent": "00-68b58fc00000000056a1a5cacac15331-df73f945b04e4758-00", - "tracestate": "dd=p:df73f945b04e4758;s:0" + "traceparent": "00-68c7d17a00000000457b3aa9298c617f-89ac784e9fb44887-00", + "tracestate": "dd=p:89ac784e9fb44887;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -236,14 +253,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1611 + "process_id": 1519 }, - "duration": 331958, - "start": 1756729282351810879 + "duration": 327959, + "start": 1757925755898379917 }, { "name": "ComputationManager.compute_and_store", - "service": "raysubmit_feABH49FUBBv6b6Z", + "service": "raysubmit_QGhgeswe7DKPUFh4", "resource": "ComputationManager.compute_and_store", "trace_id": 0, "span_id": 9, @@ -252,20 +269,23 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68b58fc000000000", - "_dd.parent_id": "9b5c4fd68fd6641a", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d17a00000000", + "_dd.parent_id": "76f884ac1427f0ac", "component": "ray", "language": "python", - "ray.actor_id": "cc2d3e05660034df7741de9002000000", + "ray.actor_id": "fe76678de8512d216e292b1b02000000", + "ray.actor_method.args": "([2, 3, 4],)", + "ray.actor_method.kwargs": "{}", "ray.job_id": "02000000", - "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", - "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", - "ray.task_id": "e082c90ab8422b00cc2d3e05660034df7741de9002000000", - "ray.worker_id": "57b030d1f12a0ff8b8d33fdc431da5eedc0f9563fccc82b18870e687", - "runtime-id": "127842fbf0c94f058aca14111f575597", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", + "ray.task_id": "e082c90ab8422b00fe76678de8512d216e292b1b02000000", + "ray.worker_id": "8559fbe1cdfdf0b5e4b1b2aa3c2399def907cd17df14d2ea07bda40b", + "runtime-id": "5501250998114309af5ba6c935a59f7e", "span.kind": "consumer", - "traceparent": "00-68b58fc00000000056a1a5cacac15331-9b5c4fd68fd6641a-00", - "tracestate": "dd=p:9b5c4fd68fd6641a;s:0" + "traceparent": "00-68c7d17a00000000457b3aa9298c617f-76f884ac1427f0ac-00", + "tracestate": "dd=p:76f884ac1427f0ac;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -274,14 +294,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1658 + "process_id": 1564 }, - "duration": 3839484710, - "start": 1756729283666550296 + "duration": 2736819043, + "start": 1757925756713713126 }, { "name": "ComputationManager.increment_count", - "service": "raysubmit_feABH49FUBBv6b6Z", + "service": "raysubmit_QGhgeswe7DKPUFh4", "resource": "ComputationManager.increment_count", "trace_id": 0, "span_id": 10, @@ -290,13 +310,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "cc2d3e05660034df7741de9002000000", + "ray.actor_id": "fe76678de8512d216e292b1b02000000", + "ray.actor_method.args": "()", + "ray.actor_method.kwargs": "{}", "ray.job_id": "02000000", - "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", - "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", - "ray.task_id": "e082c90ab8422b00cc2d3e05660034df7741de9002000000", - "ray.worker_id": "57b030d1f12a0ff8b8d33fdc431da5eedc0f9563fccc82b18870e687", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", + "ray.task_id": "e082c90ab8422b00fe76678de8512d216e292b1b02000000", + "ray.worker_id": "8559fbe1cdfdf0b5e4b1b2aa3c2399def907cd17df14d2ea07bda40b", "span.kind": "consumer" }, "metrics": { @@ -305,12 +328,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 24917, - "start": 1756729283666623296 + "duration": 129167, + "start": 1757925756713938251 }, { "name": "__main__.batch_compute.remote()", - "service": "raysubmit_feABH49FUBBv6b6Z", + "service": "raysubmit_QGhgeswe7DKPUFh4", "resource": "__main__.batch_compute.remote()", "trace_id": 0, "span_id": 11, @@ -319,14 +342,17 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "cc2d3e05660034df7741de9002000000", + "ray.actor_id": "fe76678de8512d216e292b1b02000000", "ray.job_id": "02000000", - "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", - "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", + "ray.task.args": "([2, 3, 4],)", + "ray.task.kwargs": "{}", "ray.task.submit_status": "success", - "ray.task_id": "e082c90ab8422b00cc2d3e05660034df7741de9002000000", - "ray.worker_id": "57b030d1f12a0ff8b8d33fdc431da5eedc0f9563fccc82b18870e687", + "ray.task_id": "e082c90ab8422b00fe76678de8512d216e292b1b02000000", + "ray.worker_id": "8559fbe1cdfdf0b5e4b1b2aa3c2399def907cd17df14d2ea07bda40b", "span.kind": "producer" }, "metrics": { @@ -335,12 +361,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 1680167, - "start": 1756729283666671963 + "duration": 1591083, + "start": 1757925756714128793 }, { "name": "__main__.batch_compute", - "service": "raysubmit_feABH49FUBBv6b6Z", + "service": "raysubmit_QGhgeswe7DKPUFh4", "resource": "__main__.batch_compute", "trace_id": 0, "span_id": 17, @@ -349,20 +375,23 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68b58fc000000000", - "_dd.parent_id": "dc2c89df3c83a26c", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d17a00000000", + "_dd.parent_id": "70e3bfa618d48a72", "component": "ray", "language": "python", "ray.job_id": "02000000", - "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", - "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", + "ray.task.args": "([2, 3, 4],)", + "ray.task.kwargs": "{}", "ray.task.status": "success", - "ray.task_id": "6bb09a1695859dc7ffffffffffffffffffffffff02000000", - "ray.worker_id": "a7088869a3b32dae41da13092f1871824b2e65ab91d3eb7816024945", - "runtime-id": "0684841db1e640729817d204d3784ede", + "ray.task_id": "d17195bf51ec17c4ffffffffffffffffffffffff02000000", + "ray.worker_id": "4993f6a4de32a4828616902cd116580a4dbd6d209668608d14bf20a0", + "runtime-id": "71833fff90904decb3a2527d28baab1d", "span.kind": "consumer", - "traceparent": "00-68b58fc00000000056a1a5cacac15331-dc2c89df3c83a26c-00", - "tracestate": "dd=p:dc2c89df3c83a26c;s:0" + "traceparent": "00-68c7d17a00000000457b3aa9298c617f-70e3bfa618d48a72-00", + "tracestate": "dd=p:70e3bfa618d48a72;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -371,14 +400,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1709 + "process_id": 1630 }, - "duration": 2548473668, - "start": 1756729284953875255 + "duration": 1847796500, + "start": 1757925757596021002 }, { "name": "__main__.compute_value.remote()", - "service": "raysubmit_feABH49FUBBv6b6Z", + "service": "raysubmit_QGhgeswe7DKPUFh4", "resource": "__main__.compute_value.remote()", "trace_id": 0, "span_id": 18, @@ -387,13 +416,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", "component": "ray", "ray.job_id": "02000000", - "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", - "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", + "ray.task.args": "(2,)", + "ray.task.kwargs": "{}", "ray.task.submit_status": "success", - "ray.task_id": "6bb09a1695859dc7ffffffffffffffffffffffff02000000", - "ray.worker_id": "a7088869a3b32dae41da13092f1871824b2e65ab91d3eb7816024945", + "ray.task_id": "d17195bf51ec17c4ffffffffffffffffffffffff02000000", + "ray.worker_id": "4993f6a4de32a4828616902cd116580a4dbd6d209668608d14bf20a0", "span.kind": "producer" }, "metrics": { @@ -402,12 +434,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 1274958, - "start": 1756729284953941922 + "duration": 1250041, + "start": 1757925757596305252 }, { "name": "__main__.compute_value", - "service": "raysubmit_feABH49FUBBv6b6Z", + "service": "raysubmit_QGhgeswe7DKPUFh4", "resource": "__main__.compute_value", "trace_id": 0, "span_id": 21, @@ -416,20 +448,23 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68b58fc000000000", - "_dd.parent_id": "e74ee6f8aa10d747", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d17a00000000", + "_dd.parent_id": "c1f293d43457c5ca", "component": "ray", "language": "python", "ray.job_id": "02000000", - "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", - "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", + "ray.task.args": "(2,)", + "ray.task.kwargs": "{}", "ray.task.status": "success", - "ray.task_id": "da9af79d9aa90188ffffffffffffffffffffffff02000000", - "ray.worker_id": "cefd26c7434e9788292b3b658e2199922d62acc04c8b412a2f19401e", - "runtime-id": "23819cd2e39e49e3a849b1058bd82fb3", + "ray.task_id": "bb11ac0225873335ffffffffffffffffffffffff02000000", + "ray.worker_id": "606db18c4702e1a1aa628cd276c79a3d6659c31a3f4a3479865eac47", + "runtime-id": "064d2406816041368ecfd9070820ed7c", "span.kind": "consumer", - "traceparent": "00-68b58fc00000000056a1a5cacac15331-e74ee6f8aa10d747-00", - "tracestate": "dd=p:e74ee6f8aa10d747;s:0" + "traceparent": "00-68c7d17a00000000457b3aa9298c617f-c1f293d43457c5ca-00", + "tracestate": "dd=p:c1f293d43457c5ca;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -438,14 +473,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1759 + "process_id": 1680 }, - "duration": 56708, - "start": 1756729287494920090 + "duration": 267542, + "start": 1757925759425316794 }, { "name": "__main__.compute_value.remote()", - "service": "raysubmit_feABH49FUBBv6b6Z", + "service": "raysubmit_QGhgeswe7DKPUFh4", "resource": "__main__.compute_value.remote()", "trace_id": 0, "span_id": 19, @@ -454,13 +489,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", "component": "ray", "ray.job_id": "02000000", - "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", - "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", + "ray.task.args": "(3,)", + "ray.task.kwargs": "{}", "ray.task.submit_status": "success", - "ray.task_id": "6bb09a1695859dc7ffffffffffffffffffffffff02000000", - "ray.worker_id": "a7088869a3b32dae41da13092f1871824b2e65ab91d3eb7816024945", + "ray.task_id": "d17195bf51ec17c4ffffffffffffffffffffffff02000000", + "ray.worker_id": "4993f6a4de32a4828616902cd116580a4dbd6d209668608d14bf20a0", "span.kind": "producer" }, "metrics": { @@ -469,12 +507,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 125875, - "start": 1756729284955241213 + "duration": 146666, + "start": 1757925757597583002 }, { "name": "__main__.compute_value", - "service": "raysubmit_feABH49FUBBv6b6Z", + "service": "raysubmit_QGhgeswe7DKPUFh4", "resource": "__main__.compute_value", "trace_id": 0, "span_id": 22, @@ -483,20 +521,23 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68b58fc000000000", - "_dd.parent_id": "288e418e749b70c7", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d17a00000000", + "_dd.parent_id": "de518146a00b4e88", "component": "ray", "language": "python", "ray.job_id": "02000000", - "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", - "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", + "ray.task.args": "(3,)", + "ray.task.kwargs": "{}", "ray.task.status": "success", - "ray.task_id": "4e7319589af74821ffffffffffffffffffffffff02000000", - "ray.worker_id": "cefd26c7434e9788292b3b658e2199922d62acc04c8b412a2f19401e", - "runtime-id": "23819cd2e39e49e3a849b1058bd82fb3", + "ray.task_id": "0800274d756913adffffffffffffffffffffffff02000000", + "ray.worker_id": "a4f47ab7e746969f197c44dc87e81a7fb8655ad64c6d08e2051a92b0", + "runtime-id": "4962323af8a34121988b1825c0a7f47f", "span.kind": "consumer", - "traceparent": "00-68b58fc00000000056a1a5cacac15331-288e418e749b70c7-00", - "tracestate": "dd=p:288e418e749b70c7;s:0" + "traceparent": "00-68c7d17a00000000457b3aa9298c617f-de518146a00b4e88-00", + "tracestate": "dd=p:de518146a00b4e88;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -505,14 +546,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1759 + "process_id": 1679 }, - "duration": 39958, - "start": 1756729287498648090 + "duration": 249500, + "start": 1757925759439870919 }, { "name": "__main__.compute_value.remote()", - "service": "raysubmit_feABH49FUBBv6b6Z", + "service": "raysubmit_QGhgeswe7DKPUFh4", "resource": "__main__.compute_value.remote()", "trace_id": 0, "span_id": 20, @@ -521,13 +562,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", "component": "ray", "ray.job_id": "02000000", - "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", - "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", + "ray.task.args": "(4,)", + "ray.task.kwargs": "{}", "ray.task.submit_status": "success", - "ray.task_id": "6bb09a1695859dc7ffffffffffffffffffffffff02000000", - "ray.worker_id": "a7088869a3b32dae41da13092f1871824b2e65ab91d3eb7816024945", + "ray.task_id": "d17195bf51ec17c4ffffffffffffffffffffffff02000000", + "ray.worker_id": "4993f6a4de32a4828616902cd116580a4dbd6d209668608d14bf20a0", "span.kind": "producer" }, "metrics": { @@ -536,12 +580,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 85625, - "start": 1756729284955382005 + "duration": 103041, + "start": 1757925757597749877 }, { "name": "__main__.compute_value", - "service": "raysubmit_feABH49FUBBv6b6Z", + "service": "raysubmit_QGhgeswe7DKPUFh4", "resource": "__main__.compute_value", "trace_id": 0, "span_id": 23, @@ -550,20 +594,23 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68b58fc000000000", - "_dd.parent_id": "232ed275d1ca8528", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d17a00000000", + "_dd.parent_id": "44f951508c140ff5", "component": "ray", "language": "python", "ray.job_id": "02000000", - "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", - "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", + "ray.task.args": "(4,)", + "ray.task.kwargs": "{}", "ray.task.status": "success", - "ray.task_id": "1b6acdb6e8336fbdffffffffffffffffffffffff02000000", - "ray.worker_id": "cefd26c7434e9788292b3b658e2199922d62acc04c8b412a2f19401e", - "runtime-id": "23819cd2e39e49e3a849b1058bd82fb3", + "ray.task_id": "0f8c5bc78e913ceeffffffffffffffffffffffff02000000", + "ray.worker_id": "cbbf9ffaf1a6a4a78ce7051f7cf4ce23aa2ed77ae8673a35c3462f88", + "runtime-id": "2eb2a0144dd443c98d5cb01e029b524f", "span.kind": "consumer", - "traceparent": "00-68b58fc00000000056a1a5cacac15331-232ed275d1ca8528-00", - "tracestate": "dd=p:232ed275d1ca8528;s:0" + "traceparent": "00-68c7d17a00000000457b3aa9298c617f-44f951508c140ff5-00", + "tracestate": "dd=p:44f951508c140ff5;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -572,14 +619,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1759 + "process_id": 1681 }, - "duration": 35125, - "start": 1756729287500968048 + "duration": 742250, + "start": 1757925759432212461 }, { "name": "ComputationManager.add_result", - "service": "raysubmit_feABH49FUBBv6b6Z", + "service": "raysubmit_QGhgeswe7DKPUFh4", "resource": "ComputationManager.add_result", "trace_id": 0, "span_id": 12, @@ -588,13 +635,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "cc2d3e05660034df7741de9002000000", + "ray.actor_id": "fe76678de8512d216e292b1b02000000", + "ray.actor_method.args": "(3,)", + "ray.actor_method.kwargs": "{}", "ray.job_id": "02000000", - "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", - "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", - "ray.task_id": "e082c90ab8422b00cc2d3e05660034df7741de9002000000", - "ray.worker_id": "57b030d1f12a0ff8b8d33fdc431da5eedc0f9563fccc82b18870e687", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", + "ray.task_id": "e082c90ab8422b00fe76678de8512d216e292b1b02000000", + "ray.worker_id": "8559fbe1cdfdf0b5e4b1b2aa3c2399def907cd17df14d2ea07bda40b", "span.kind": "consumer" }, "metrics": { @@ -603,12 +653,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 51833, - "start": 1756729287505889798 + "duration": 198834, + "start": 1757925759447682127 }, { "name": "ComputationManager.add_result", - "service": "raysubmit_feABH49FUBBv6b6Z", + "service": "raysubmit_QGhgeswe7DKPUFh4", "resource": "ComputationManager.add_result", "trace_id": 0, "span_id": 13, @@ -617,13 +667,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "cc2d3e05660034df7741de9002000000", + "ray.actor_id": "fe76678de8512d216e292b1b02000000", + "ray.actor_method.args": "(4,)", + "ray.actor_method.kwargs": "{}", "ray.job_id": "02000000", - "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", - "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", - "ray.task_id": "e082c90ab8422b00cc2d3e05660034df7741de9002000000", - "ray.worker_id": "57b030d1f12a0ff8b8d33fdc431da5eedc0f9563fccc82b18870e687", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", + "ray.task_id": "e082c90ab8422b00fe76678de8512d216e292b1b02000000", + "ray.worker_id": "8559fbe1cdfdf0b5e4b1b2aa3c2399def907cd17df14d2ea07bda40b", "span.kind": "consumer" }, "metrics": { @@ -632,12 +685,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 14583, - "start": 1756729287505955173 + "duration": 2173292, + "start": 1757925759447934502 }, { "name": "ComputationManager.add_result", - "service": "raysubmit_feABH49FUBBv6b6Z", + "service": "raysubmit_QGhgeswe7DKPUFh4", "resource": "ComputationManager.add_result", "trace_id": 0, "span_id": 14, @@ -646,13 +699,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "cc2d3e05660034df7741de9002000000", + "ray.actor_id": "fe76678de8512d216e292b1b02000000", + "ray.actor_method.args": "(5,)", + "ray.actor_method.kwargs": "{}", "ray.job_id": "02000000", - "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", - "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", - "ray.task_id": "e082c90ab8422b00cc2d3e05660034df7741de9002000000", - "ray.worker_id": "57b030d1f12a0ff8b8d33fdc431da5eedc0f9563fccc82b18870e687", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", + "ray.task_id": "e082c90ab8422b00fe76678de8512d216e292b1b02000000", + "ray.worker_id": "8559fbe1cdfdf0b5e4b1b2aa3c2399def907cd17df14d2ea07bda40b", "span.kind": "consumer" }, "metrics": { @@ -661,12 +717,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 10209, - "start": 1756729287505977881 + "duration": 123167, + "start": 1757925759450135419 }, { "name": "ComputationManager.get_count", - "service": "raysubmit_feABH49FUBBv6b6Z", + "service": "raysubmit_QGhgeswe7DKPUFh4", "resource": "ComputationManager.get_count", "trace_id": 0, "span_id": 15, @@ -675,13 +731,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "cc2d3e05660034df7741de9002000000", + "ray.actor_id": "fe76678de8512d216e292b1b02000000", + "ray.actor_method.args": "()", + "ray.actor_method.kwargs": "{}", "ray.job_id": "02000000", - "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", - "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", - "ray.task_id": "e082c90ab8422b00cc2d3e05660034df7741de9002000000", - "ray.worker_id": "57b030d1f12a0ff8b8d33fdc431da5eedc0f9563fccc82b18870e687", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", + "ray.task_id": "e082c90ab8422b00fe76678de8512d216e292b1b02000000", + "ray.worker_id": "8559fbe1cdfdf0b5e4b1b2aa3c2399def907cd17df14d2ea07bda40b", "span.kind": "consumer" }, "metrics": { @@ -690,12 +749,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 9750, - "start": 1756729287505995131 + "duration": 111917, + "start": 1757925759450279752 }, { "name": "ComputationManager.get_results", - "service": "raysubmit_feABH49FUBBv6b6Z", + "service": "raysubmit_QGhgeswe7DKPUFh4", "resource": "ComputationManager.get_results", "trace_id": 0, "span_id": 16, @@ -704,13 +763,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "cc2d3e05660034df7741de9002000000", + "ray.actor_id": "fe76678de8512d216e292b1b02000000", + "ray.actor_method.args": "()", + "ray.actor_method.kwargs": "{}", "ray.job_id": "02000000", - "ray.node_id": "749f164457fb1a68354b616ece56740b838a30e1134ad0a89c64786f", - "ray.submission_id": "raysubmit_feABH49FUBBv6b6Z", - "ray.task_id": "e082c90ab8422b00cc2d3e05660034df7741de9002000000", - "ray.worker_id": "57b030d1f12a0ff8b8d33fdc431da5eedc0f9563fccc82b18870e687", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", + "ray.task_id": "e082c90ab8422b00fe76678de8512d216e292b1b02000000", + "ray.worker_id": "8559fbe1cdfdf0b5e4b1b2aa3c2399def907cd17df14d2ea07bda40b", "span.kind": "consumer" }, "metrics": { @@ -719,6 +781,6 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 9166, - "start": 1756729287506011715 + "duration": 101458, + "start": 1757925759450407919 }]] diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_actor_interactions.json b/tests/snapshots/tests.contrib.ray.test_ray.test_actor_interactions.json index 8661f4f3ecf..72b77e8d3db 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_actor_interactions.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_actor_interactions.json @@ -1,7 +1,7 @@ [[ { "name": "ray.job", - "service": "raysubmit_v8L3EqcW9erRzxGW", + "service": "raysubmit_G8SgB5nsM5kvtVPb", "resource": "ray.job", "trace_id": 0, "span_id": 1, @@ -10,13 +10,15 @@ "error": 0, "meta": { "_dd.base_service": "ray.dashboard", + "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68b58feb00000000", + "_dd.p.tid": "68c7d18300000000", "component": "ray", "language": "python", "ray.job.message": "Job finished successfully.", "ray.job.status": "SUCCEEDED", - "runtime-id": "9998641a0ed34e48b4ebdddf67f79bfe" + "ray.submission_id": "raysubmit_G8SgB5nsM5kvtVPb", + "runtime-id": "bfdf74988ffd4419aabda8fe7dddaa45" }, "metrics": { "_dd.djm.enabled": 1, @@ -25,14 +27,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2468 + "process_id": 1038 }, - "duration": 6253139670, - "start": 1756729323352897759 + "duration": 3879695377, + "start": 1757925763848306921 }, { "name": "ray.job.submit", - "service": "raysubmit_v8L3EqcW9erRzxGW", + "service": "raysubmit_G8SgB5nsM5kvtVPb", "resource": "ray.job.submit", "trace_id": 0, "span_id": 2, @@ -41,6 +43,7 @@ "error": 0, "meta": { "_dd.base_service": "ray.dashboard", + "_dd.hostname": "docker-desktop", "component": "ray", "ray.job.submit_status": "success", "span.kind": "producer" @@ -51,12 +54,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 45125, - "start": 1756729323352936217 + "duration": 37125, + "start": 1757925763848483963 }, { "name": "JobSupervisor.run.remote()", - "service": "raysubmit_v8L3EqcW9erRzxGW", + "service": "raysubmit_G8SgB5nsM5kvtVPb", "resource": "JobSupervisor.run.remote()", "trace_id": 0, "span_id": 3, @@ -65,9 +68,12 @@ "error": 0, "meta": { "_dd.base_service": "ray.dashboard", + "_dd.hostname": "docker-desktop", "component": "ray", + "ray.actor_method.args": "()", + "ray.actor_method.kwargs": "{'_start_signal_actor': None, 'resources_specified': False}", "ray.job_id": "01000000", - "ray.node_id": "7840b4b48c2d6b1537c2b0379c7348d09ec38817a84228ee8b2b30b0", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "producer" }, @@ -77,12 +83,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 268458, - "start": 1756729323376040176 + "duration": 395958, + "start": 1757925763852679463 }, { "name": "JobSupervisor.run", - "service": "raysubmit_v8L3EqcW9erRzxGW", + "service": "raysubmit_G8SgB5nsM5kvtVPb", "resource": "JobSupervisor.run", "trace_id": 0, "span_id": 4, @@ -91,20 +97,21 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68b58feb00000000", - "_dd.parent_id": "cc24e42614bc5dd9", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d18300000000", + "_dd.parent_id": "c0f6556f1f6005a2", "component": "ray", "language": "python", - "ray.actor_id": "b822e7052eba16263ac2fa7801000000", + "ray.actor_id": "edae7db148d75fefb508b67d01000000", "ray.job_id": "01000000", - "ray.node_id": "7840b4b48c2d6b1537c2b0379c7348d09ec38817a84228ee8b2b30b0", - "ray.submission_id": "raysubmit_v8L3EqcW9erRzxGW", - "ray.task_id": "16310a0f0a45af5cb822e7052eba16263ac2fa7801000000", - "ray.worker_id": "ebdde1e37544f22fc46c0c7c613d9bd82c05d9444ca22ef0c2d65643", - "runtime-id": "99809e602df64296bb2105e26034aff9", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_G8SgB5nsM5kvtVPb", + "ray.task_id": "80e22aed7718a125edae7db148d75fefb508b67d01000000", + "ray.worker_id": "92844accef7055bb70dd0eb34fd5c8efcee5a9bb34d229197cc3e013", + "runtime-id": "f6fc2f70046c457db906a629383621cc", "span.kind": "consumer", - "traceparent": "00-68b58feb0000000034f0f56e60474e29-cc24e42614bc5dd9-00", - "tracestate": "dd=p:cc24e42614bc5dd9" + "traceparent": "00-68c7d183000000007f410f39e9267ca3-c0f6556f1f6005a2-00", + "tracestate": "dd=p:c0f6556f1f6005a2" }, "metrics": { "_dd.djm.enabled": 1, @@ -113,14 +120,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2924 + "process_id": 1850 }, - "duration": 4148490294, - "start": 1756729324588411843 + "duration": 2326554668, + "start": 1757925764704673005 }, { "name": "JobSupervisor._get_driver_env_vars", - "service": "raysubmit_v8L3EqcW9erRzxGW", + "service": "raysubmit_G8SgB5nsM5kvtVPb", "resource": "JobSupervisor._get_driver_env_vars", "trace_id": 0, "span_id": 5, @@ -129,13 +136,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "b822e7052eba16263ac2fa7801000000", + "ray.actor_id": "edae7db148d75fefb508b67d01000000", + "ray.actor_method.args": "(False,)", + "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "7840b4b48c2d6b1537c2b0379c7348d09ec38817a84228ee8b2b30b0", - "ray.submission_id": "raysubmit_v8L3EqcW9erRzxGW", - "ray.task_id": "16310a0f0a45af5cb822e7052eba16263ac2fa7801000000", - "ray.worker_id": "ebdde1e37544f22fc46c0c7c613d9bd82c05d9444ca22ef0c2d65643", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_G8SgB5nsM5kvtVPb", + "ray.task_id": "80e22aed7718a125edae7db148d75fefb508b67d01000000", + "ray.worker_id": "92844accef7055bb70dd0eb34fd5c8efcee5a9bb34d229197cc3e013", "span.kind": "consumer" }, "metrics": { @@ -144,12 +154,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 2224792, - "start": 1756729324589832926 + "duration": 1599791, + "start": 1757925764706164672 }, { "name": "JobSupervisor._get_driver_runtime_env", - "service": "raysubmit_v8L3EqcW9erRzxGW", + "service": "raysubmit_G8SgB5nsM5kvtVPb", "resource": "JobSupervisor._get_driver_runtime_env", "trace_id": 0, "span_id": 10, @@ -158,13 +168,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "b822e7052eba16263ac2fa7801000000", + "ray.actor_id": "edae7db148d75fefb508b67d01000000", + "ray.actor_method.args": "(False,)", + "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "7840b4b48c2d6b1537c2b0379c7348d09ec38817a84228ee8b2b30b0", - "ray.submission_id": "raysubmit_v8L3EqcW9erRzxGW", - "ray.task_id": "16310a0f0a45af5cb822e7052eba16263ac2fa7801000000", - "ray.worker_id": "ebdde1e37544f22fc46c0c7c613d9bd82c05d9444ca22ef0c2d65643", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_G8SgB5nsM5kvtVPb", + "ray.task_id": "80e22aed7718a125edae7db148d75fefb508b67d01000000", + "ray.worker_id": "92844accef7055bb70dd0eb34fd5c8efcee5a9bb34d229197cc3e013", "span.kind": "consumer" }, "metrics": { @@ -173,13 +186,13 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 44083, - "start": 1756729324591987718 + "duration": 145250, + "start": 1757925764707593963 }, { - "name": "JobSupervisor._exec_entrypoint", - "service": "raysubmit_v8L3EqcW9erRzxGW", - "resource": "JobSupervisor._exec_entrypoint", + "name": "exec python /home/bits/project/tests/contrib/ray/jobs/actor_interactions.py", + "service": "raysubmit_G8SgB5nsM5kvtVPb", + "resource": "exec python /home/bits/project/tests/contrib/ray/jobs/actor_interactions.py", "trace_id": 0, "span_id": 6, "parent_id": 4, @@ -187,13 +200,14 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "b822e7052eba16263ac2fa7801000000", + "ray.actor_id": "edae7db148d75fefb508b67d01000000", "ray.job_id": "01000000", - "ray.node_id": "7840b4b48c2d6b1537c2b0379c7348d09ec38817a84228ee8b2b30b0", - "ray.submission_id": "raysubmit_v8L3EqcW9erRzxGW", - "ray.task_id": "16310a0f0a45af5cb822e7052eba16263ac2fa7801000000", - "ray.worker_id": "ebdde1e37544f22fc46c0c7c613d9bd82c05d9444ca22ef0c2d65643", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_G8SgB5nsM5kvtVPb", + "ray.task_id": "80e22aed7718a125edae7db148d75fefb508b67d01000000", + "ray.worker_id": "92844accef7055bb70dd0eb34fd5c8efcee5a9bb34d229197cc3e013", "span.kind": "consumer" }, "metrics": { @@ -202,12 +216,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 426583, - "start": 1756729324592217260 + "duration": 424333, + "start": 1757925764707900797 }, { "name": "Sender.send_message.remote()", - "service": "raysubmit_v8L3EqcW9erRzxGW", + "service": "raysubmit_G8SgB5nsM5kvtVPb", "resource": "Sender.send_message.remote()", "trace_id": 0, "span_id": 7, @@ -216,18 +230,21 @@ "error": 0, "meta": { "_dd.base_service": "project", - "_dd.p.tid": "68b58feb00000000", - "_dd.parent_id": "15c6b200c27c503b", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d18300000000", + "_dd.parent_id": "bf4482ad9c7b7424", "component": "ray", "language": "python", - "ray.job_id": "02000000", - "ray.node_id": "7840b4b48c2d6b1537c2b0379c7348d09ec38817a84228ee8b2b30b0", - "ray.submission_id": "raysubmit_v8L3EqcW9erRzxGW", - "ray.worker_id": "02000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "3e3da2f48c704bd4a54792614f5e25c9", + "ray.actor_method.args": "(Actor(Receiver, ac598b8c5ef676c5612598df03000000), 'hello')", + "ray.actor_method.kwargs": "{}", + "ray.job_id": "03000000", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_G8SgB5nsM5kvtVPb", + "ray.worker_id": "03000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "e38e3ecd37644b10af14c8e138f752a0", "span.kind": "producer", - "traceparent": "00-68b58feb0000000034f0f56e60474e29-15c6b200c27c503b-00", - "tracestate": "dd=p:15c6b200c27c503b;s:0" + "traceparent": "00-68c7d183000000007f410f39e9267ca3-bf4482ad9c7b7424-00", + "tracestate": "dd=p:bf4482ad9c7b7424;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -236,14 +253,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2996 + "process_id": 1900 }, - "duration": 450583, - "start": 1756729325295333885 + "duration": 405875, + "start": 1757925765311990755 }, { "name": "Sender.send_message", - "service": "raysubmit_v8L3EqcW9erRzxGW", + "service": "raysubmit_G8SgB5nsM5kvtVPb", "resource": "Sender.send_message", "trace_id": 0, "span_id": 11, @@ -252,20 +269,23 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68b58feb00000000", - "_dd.parent_id": "d0b1b61768211276", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d18300000000", + "_dd.parent_id": "685fe34838871d87", "component": "ray", "language": "python", - "ray.actor_id": "aa840e6a94066bbaca0aa57d02000000", - "ray.job_id": "02000000", - "ray.node_id": "7840b4b48c2d6b1537c2b0379c7348d09ec38817a84228ee8b2b30b0", - "ray.submission_id": "raysubmit_v8L3EqcW9erRzxGW", - "ray.task_id": "e5cbd90b7f1fb776aa840e6a94066bbaca0aa57d02000000", - "ray.worker_id": "a557079064342ed78061798b93a3c12762d8c73833dbe031a013d9c7", - "runtime-id": "f217ae5b906a47fda507c5202a03604c", + "ray.actor_id": "f9dccd8ec9134b9a974438be03000000", + "ray.actor_method.args": "(Actor(Receiver, ac598b8c5ef676c5612598df03000000), 'hello')", + "ray.actor_method.kwargs": "{}", + "ray.job_id": "03000000", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_G8SgB5nsM5kvtVPb", + "ray.task_id": "0ab01f2d6283d719f9dccd8ec9134b9a974438be03000000", + "ray.worker_id": "91cafd1ff1e61e962a84f67b38afd89ef92099489180d62c60c1d98a", + "runtime-id": "60049efd3c4645b9b80d38b4e5eca72c", "span.kind": "consumer", - "traceparent": "00-68b58feb0000000034f0f56e60474e29-d0b1b61768211276-00", - "tracestate": "dd=p:d0b1b61768211276;s:0" + "traceparent": "00-68c7d183000000007f410f39e9267ca3-685fe34838871d87-00", + "tracestate": "dd=p:685fe34838871d87;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -274,14 +294,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 3043 + "process_id": 1945 }, - "duration": 23978792, - "start": 1756729327514702219 + "duration": 16682292, + "start": 1757925766647474339 }, { "name": "Receiver.receive_message.remote()", - "service": "raysubmit_v8L3EqcW9erRzxGW", + "service": "raysubmit_G8SgB5nsM5kvtVPb", "resource": "Receiver.receive_message.remote()", "trace_id": 0, "span_id": 14, @@ -290,13 +310,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "aa840e6a94066bbaca0aa57d02000000", - "ray.job_id": "02000000", - "ray.node_id": "7840b4b48c2d6b1537c2b0379c7348d09ec38817a84228ee8b2b30b0", - "ray.submission_id": "raysubmit_v8L3EqcW9erRzxGW", - "ray.task_id": "e5cbd90b7f1fb776aa840e6a94066bbaca0aa57d02000000", - "ray.worker_id": "a557079064342ed78061798b93a3c12762d8c73833dbe031a013d9c7", + "ray.actor_id": "f9dccd8ec9134b9a974438be03000000", + "ray.actor_method.args": "('hello',)", + "ray.actor_method.kwargs": "{}", + "ray.job_id": "03000000", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_G8SgB5nsM5kvtVPb", + "ray.task_id": "0ab01f2d6283d719f9dccd8ec9134b9a974438be03000000", + "ray.worker_id": "91cafd1ff1e61e962a84f67b38afd89ef92099489180d62c60c1d98a", "span.kind": "producer" }, "metrics": { @@ -305,12 +328,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 257083, - "start": 1756729327514785761 + "duration": 337083, + "start": 1757925766649505298 }, { "name": "Receiver.receive_message", - "service": "raysubmit_v8L3EqcW9erRzxGW", + "service": "raysubmit_G8SgB5nsM5kvtVPb", "resource": "Receiver.receive_message", "trace_id": 0, "span_id": 15, @@ -319,20 +342,23 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68b58feb00000000", - "_dd.parent_id": "0b9561d0123edecc", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d18300000000", + "_dd.parent_id": "f2acf5bc8b79ee7f", "component": "ray", "language": "python", - "ray.actor_id": "d0dcfa9150371f486ed90c7702000000", - "ray.job_id": "02000000", - "ray.node_id": "7840b4b48c2d6b1537c2b0379c7348d09ec38817a84228ee8b2b30b0", - "ray.submission_id": "raysubmit_v8L3EqcW9erRzxGW", - "ray.task_id": "e8f872f306d3354ed0dcfa9150371f486ed90c7702000000", - "ray.worker_id": "96ca717f98d1640af99a1696cd947cb0a8a8925da2f6787a2695a0cb", - "runtime-id": "d68896938a2249d2a38323276ebab19d", + "ray.actor_id": "ac598b8c5ef676c5612598df03000000", + "ray.actor_method.args": "('hello',)", + "ray.actor_method.kwargs": "{}", + "ray.job_id": "03000000", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_G8SgB5nsM5kvtVPb", + "ray.task_id": "9e65b0e7be4dd70fac598b8c5ef676c5612598df03000000", + "ray.worker_id": "48244d88ac2322ae313268f78aba8ee2d9a5c628406594359312adc7", + "runtime-id": "6ded3e19b9a04d8ea2b7fb60303c70e9", "span.kind": "consumer", - "traceparent": "00-68b58feb0000000034f0f56e60474e29-0b9561d0123edecc-00", - "tracestate": "dd=p:0b9561d0123edecc;s:0" + "traceparent": "00-68c7d183000000007f410f39e9267ca3-f2acf5bc8b79ee7f-00", + "tracestate": "dd=p:f2acf5bc8b79ee7f;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -341,14 +367,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 3044 + "process_id": 1944 }, - "duration": 50667, - "start": 1756729327536149594 + "duration": 225542, + "start": 1757925766661115131 }, { "name": "Sender.get_sent_count.remote()", - "service": "raysubmit_v8L3EqcW9erRzxGW", + "service": "raysubmit_G8SgB5nsM5kvtVPb", "resource": "Sender.get_sent_count.remote()", "trace_id": 0, "span_id": 8, @@ -357,18 +383,21 @@ "error": 0, "meta": { "_dd.base_service": "project", - "_dd.p.tid": "68b58feb00000000", - "_dd.parent_id": "15c6b200c27c503b", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d18300000000", + "_dd.parent_id": "bf4482ad9c7b7424", "component": "ray", "language": "python", - "ray.job_id": "02000000", - "ray.node_id": "7840b4b48c2d6b1537c2b0379c7348d09ec38817a84228ee8b2b30b0", - "ray.submission_id": "raysubmit_v8L3EqcW9erRzxGW", - "ray.worker_id": "02000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "3e3da2f48c704bd4a54792614f5e25c9", + "ray.actor_method.args": "()", + "ray.actor_method.kwargs": "{}", + "ray.job_id": "03000000", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_G8SgB5nsM5kvtVPb", + "ray.worker_id": "03000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "e38e3ecd37644b10af14c8e138f752a0", "span.kind": "producer", - "traceparent": "00-68b58feb0000000034f0f56e60474e29-15c6b200c27c503b-00", - "tracestate": "dd=p:15c6b200c27c503b;s:0" + "traceparent": "00-68c7d183000000007f410f39e9267ca3-bf4482ad9c7b7424-00", + "tracestate": "dd=p:bf4482ad9c7b7424;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -377,14 +406,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2996 + "process_id": 1900 }, - "duration": 166500, - "start": 1756729327541872636 + "duration": 201459, + "start": 1757925766667167339 }, { "name": "Sender.get_sent_count", - "service": "raysubmit_v8L3EqcW9erRzxGW", + "service": "raysubmit_G8SgB5nsM5kvtVPb", "resource": "Sender.get_sent_count", "trace_id": 0, "span_id": 12, @@ -393,20 +422,23 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68b58feb00000000", - "_dd.parent_id": "04f4f049ba5c3ba5", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d18300000000", + "_dd.parent_id": "b7867ee3b74ed879", "component": "ray", "language": "python", - "ray.actor_id": "aa840e6a94066bbaca0aa57d02000000", - "ray.job_id": "02000000", - "ray.node_id": "7840b4b48c2d6b1537c2b0379c7348d09ec38817a84228ee8b2b30b0", - "ray.submission_id": "raysubmit_v8L3EqcW9erRzxGW", - "ray.task_id": "39088be3736e590aaa840e6a94066bbaca0aa57d02000000", - "ray.worker_id": "a557079064342ed78061798b93a3c12762d8c73833dbe031a013d9c7", - "runtime-id": "f217ae5b906a47fda507c5202a03604c", + "ray.actor_id": "f9dccd8ec9134b9a974438be03000000", + "ray.actor_method.args": "()", + "ray.actor_method.kwargs": "{}", + "ray.job_id": "03000000", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_G8SgB5nsM5kvtVPb", + "ray.task_id": "62ffec03f52574bdf9dccd8ec9134b9a974438be03000000", + "ray.worker_id": "91cafd1ff1e61e962a84f67b38afd89ef92099489180d62c60c1d98a", + "runtime-id": "60049efd3c4645b9b80d38b4e5eca72c", "span.kind": "consumer", - "traceparent": "00-68b58feb0000000034f0f56e60474e29-04f4f049ba5c3ba5-00", - "tracestate": "dd=p:04f4f049ba5c3ba5;s:0" + "traceparent": "00-68c7d183000000007f410f39e9267ca3-b7867ee3b74ed879-00", + "tracestate": "dd=p:b7867ee3b74ed879;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -415,14 +447,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 3043 + "process_id": 1945 }, - "duration": 24834, - "start": 1756729327542377094 + "duration": 176209, + "start": 1757925766667730214 }, { "name": "Receiver.get_messages.remote()", - "service": "raysubmit_v8L3EqcW9erRzxGW", + "service": "raysubmit_G8SgB5nsM5kvtVPb", "resource": "Receiver.get_messages.remote()", "trace_id": 0, "span_id": 9, @@ -431,18 +463,21 @@ "error": 0, "meta": { "_dd.base_service": "project", - "_dd.p.tid": "68b58feb00000000", - "_dd.parent_id": "15c6b200c27c503b", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d18300000000", + "_dd.parent_id": "bf4482ad9c7b7424", "component": "ray", "language": "python", - "ray.job_id": "02000000", - "ray.node_id": "7840b4b48c2d6b1537c2b0379c7348d09ec38817a84228ee8b2b30b0", - "ray.submission_id": "raysubmit_v8L3EqcW9erRzxGW", - "ray.worker_id": "02000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "3e3da2f48c704bd4a54792614f5e25c9", + "ray.actor_method.args": "()", + "ray.actor_method.kwargs": "{}", + "ray.job_id": "03000000", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_G8SgB5nsM5kvtVPb", + "ray.worker_id": "03000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "e38e3ecd37644b10af14c8e138f752a0", "span.kind": "producer", - "traceparent": "00-68b58feb0000000034f0f56e60474e29-15c6b200c27c503b-00", - "tracestate": "dd=p:15c6b200c27c503b;s:0" + "traceparent": "00-68c7d183000000007f410f39e9267ca3-bf4482ad9c7b7424-00", + "tracestate": "dd=p:bf4482ad9c7b7424;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -451,14 +486,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2996 + "process_id": 1900 }, - "duration": 165292, - "start": 1756729327543638969 + "duration": 179709, + "start": 1757925766669989839 }, { "name": "Receiver.get_messages", - "service": "raysubmit_v8L3EqcW9erRzxGW", + "service": "raysubmit_G8SgB5nsM5kvtVPb", "resource": "Receiver.get_messages", "trace_id": 0, "span_id": 13, @@ -467,20 +502,23 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68b58feb00000000", - "_dd.parent_id": "03e0348ae1c6ebe5", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d18300000000", + "_dd.parent_id": "67fb32b978bf02b9", "component": "ray", "language": "python", - "ray.actor_id": "d0dcfa9150371f486ed90c7702000000", - "ray.job_id": "02000000", - "ray.node_id": "7840b4b48c2d6b1537c2b0379c7348d09ec38817a84228ee8b2b30b0", - "ray.submission_id": "raysubmit_v8L3EqcW9erRzxGW", - "ray.task_id": "ce868e48e2fa9a94d0dcfa9150371f486ed90c7702000000", - "ray.worker_id": "96ca717f98d1640af99a1696cd947cb0a8a8925da2f6787a2695a0cb", - "runtime-id": "d68896938a2249d2a38323276ebab19d", + "ray.actor_id": "ac598b8c5ef676c5612598df03000000", + "ray.actor_method.args": "()", + "ray.actor_method.kwargs": "{}", + "ray.job_id": "03000000", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_G8SgB5nsM5kvtVPb", + "ray.task_id": "882ffa20ac4b2e6eac598b8c5ef676c5612598df03000000", + "ray.worker_id": "48244d88ac2322ae313268f78aba8ee2d9a5c628406594359312adc7", + "runtime-id": "6ded3e19b9a04d8ea2b7fb60303c70e9", "span.kind": "consumer", - "traceparent": "00-68b58feb0000000034f0f56e60474e29-03e0348ae1c6ebe5-00", - "tracestate": "dd=p:03e0348ae1c6ebe5;s:0" + "traceparent": "00-68c7d183000000007f410f39e9267ca3-67fb32b978bf02b9-00", + "tracestate": "dd=p:67fb32b978bf02b9;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -489,8 +527,8 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 3044 + "process_id": 1944 }, - "duration": 31583, - "start": 1756729327544977136 + "duration": 166958, + "start": 1757925766671289298 }]] diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_nested_tasks.json b/tests/snapshots/tests.contrib.ray.test_ray.test_nested_tasks.json index 69327b1c90f..37fc45aadcf 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_nested_tasks.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_nested_tasks.json @@ -1,7 +1,7 @@ [[ { "name": "ray.job", - "service": "raysubmit_vzEvzpvWGrv77TEF", + "service": "raysubmit_MExwtCmQNkSD7ftk", "resource": "ray.job", "trace_id": 0, "span_id": 1, @@ -10,13 +10,15 @@ "error": 0, "meta": { "_dd.base_service": "ray.dashboard", + "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68b5908800000000", + "_dd.p.tid": "68c7d19400000000", "component": "ray", "language": "python", "ray.job.message": "Job finished successfully.", "ray.job.status": "SUCCEEDED", - "runtime-id": "e7ff0c81dde4496a9040f3ae32ef1f31" + "ray.submission_id": "raysubmit_MExwtCmQNkSD7ftk", + "runtime-id": "bfdf74988ffd4419aabda8fe7dddaa45" }, "metrics": { "_dd.djm.enabled": 1, @@ -25,14 +27,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1081 + "process_id": 1038 }, - "duration": 7303723947, - "start": 1756729480279546846 + "duration": 4894202571, + "start": 1757925780082797721 }, { "name": "ray.job.submit", - "service": "raysubmit_vzEvzpvWGrv77TEF", + "service": "raysubmit_MExwtCmQNkSD7ftk", "resource": "ray.job.submit", "trace_id": 0, "span_id": 2, @@ -41,6 +43,7 @@ "error": 0, "meta": { "_dd.base_service": "ray.dashboard", + "_dd.hostname": "docker-desktop", "component": "ray", "ray.job.submit_status": "success", "span.kind": "producer" @@ -51,12 +54,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 29750, - "start": 1756729480279572971 + "duration": 38333, + "start": 1757925780082951471 }, { "name": "JobSupervisor.run.remote()", - "service": "raysubmit_vzEvzpvWGrv77TEF", + "service": "raysubmit_MExwtCmQNkSD7ftk", "resource": "JobSupervisor.run.remote()", "trace_id": 0, "span_id": 3, @@ -65,9 +68,12 @@ "error": 0, "meta": { "_dd.base_service": "ray.dashboard", + "_dd.hostname": "docker-desktop", "component": "ray", + "ray.actor_method.args": "()", + "ray.actor_method.kwargs": "{'_start_signal_actor': None, 'resources_specified': False}", "ray.job_id": "01000000", - "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "producer" }, @@ -77,12 +83,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 354750, - "start": 1756729480283293012 + "duration": 318708, + "start": 1757925780086431429 }, { "name": "JobSupervisor.run", - "service": "raysubmit_vzEvzpvWGrv77TEF", + "service": "raysubmit_MExwtCmQNkSD7ftk", "resource": "JobSupervisor.run", "trace_id": 0, "span_id": 4, @@ -91,20 +97,21 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68b5908800000000", - "_dd.parent_id": "5d33aea2e05d3920", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d19400000000", + "_dd.parent_id": "91c7a02d864d3e8e", "component": "ray", "language": "python", - "ray.actor_id": "bd21f035aac9184f427cfc9201000000", + "ray.actor_id": "425ed26dda165b68a3679dd601000000", "ray.job_id": "01000000", - "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", - "ray.submission_id": "raysubmit_vzEvzpvWGrv77TEF", - "ray.task_id": "a631fe8d231813bfbd21f035aac9184f427cfc9201000000", - "ray.worker_id": "47b3883aeba6836eed27697981eb9d12a4b77415c4d44da20dea2044", - "runtime-id": "75bb7f4ab27f4714afc6c34845290527", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_MExwtCmQNkSD7ftk", + "ray.task_id": "3d3e27c54ed1f5cf425ed26dda165b68a3679dd601000000", + "ray.worker_id": "16dd23bea43a9aaa027d1798df4f510814e58a3cbdd63d0554ea8f60", + "runtime-id": "b426ee0c90c14ba4be33d2ba10202335", "span.kind": "consumer", - "traceparent": "00-68b590880000000006cd992d03686244-5d33aea2e05d3920-00", - "tracestate": "dd=p:5d33aea2e05d3920" + "traceparent": "00-68c7d1940000000040324db9cc400dcd-91c7a02d864d3e8e-00", + "tracestate": "dd=p:91c7a02d864d3e8e" }, "metrics": { "_dd.djm.enabled": 1, @@ -113,14 +120,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2474 + "process_id": 2365 }, - "duration": 5770128780, - "start": 1756729481556677513 + "duration": 3639853946, + "start": 1757925780944698929 }, { "name": "JobSupervisor._get_driver_env_vars", - "service": "raysubmit_vzEvzpvWGrv77TEF", + "service": "raysubmit_MExwtCmQNkSD7ftk", "resource": "JobSupervisor._get_driver_env_vars", "trace_id": 0, "span_id": 5, @@ -129,13 +136,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "bd21f035aac9184f427cfc9201000000", + "ray.actor_id": "425ed26dda165b68a3679dd601000000", + "ray.actor_method.args": "(False,)", + "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", - "ray.submission_id": "raysubmit_vzEvzpvWGrv77TEF", - "ray.task_id": "a631fe8d231813bfbd21f035aac9184f427cfc9201000000", - "ray.worker_id": "47b3883aeba6836eed27697981eb9d12a4b77415c4d44da20dea2044", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_MExwtCmQNkSD7ftk", + "ray.task_id": "3d3e27c54ed1f5cf425ed26dda165b68a3679dd601000000", + "ray.worker_id": "16dd23bea43a9aaa027d1798df4f510814e58a3cbdd63d0554ea8f60", "span.kind": "consumer" }, "metrics": { @@ -144,12 +154,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 1377875, - "start": 1756729481557918846 + "duration": 1828583, + "start": 1757925780946285971 }, { "name": "JobSupervisor._get_driver_runtime_env", - "service": "raysubmit_vzEvzpvWGrv77TEF", + "service": "raysubmit_MExwtCmQNkSD7ftk", "resource": "JobSupervisor._get_driver_runtime_env", "trace_id": 0, "span_id": 8, @@ -158,13 +168,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "bd21f035aac9184f427cfc9201000000", + "ray.actor_id": "425ed26dda165b68a3679dd601000000", + "ray.actor_method.args": "(False,)", + "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", - "ray.submission_id": "raysubmit_vzEvzpvWGrv77TEF", - "ray.task_id": "a631fe8d231813bfbd21f035aac9184f427cfc9201000000", - "ray.worker_id": "47b3883aeba6836eed27697981eb9d12a4b77415c4d44da20dea2044", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_MExwtCmQNkSD7ftk", + "ray.task_id": "3d3e27c54ed1f5cf425ed26dda165b68a3679dd601000000", + "ray.worker_id": "16dd23bea43a9aaa027d1798df4f510814e58a3cbdd63d0554ea8f60", "span.kind": "consumer" }, "metrics": { @@ -173,13 +186,13 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 36791, - "start": 1756729481559240305 + "duration": 151750, + "start": 1757925780947937263 }, { - "name": "JobSupervisor._exec_entrypoint", - "service": "raysubmit_vzEvzpvWGrv77TEF", - "resource": "JobSupervisor._exec_entrypoint", + "name": "exec python /home/bits/project/tests/contrib/ray/jobs/nested_tasks.py", + "service": "raysubmit_MExwtCmQNkSD7ftk", + "resource": "exec python /home/bits/project/tests/contrib/ray/jobs/nested_tasks.py", "trace_id": 0, "span_id": 6, "parent_id": 4, @@ -187,13 +200,14 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "bd21f035aac9184f427cfc9201000000", + "ray.actor_id": "425ed26dda165b68a3679dd601000000", "ray.job_id": "01000000", - "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", - "ray.submission_id": "raysubmit_vzEvzpvWGrv77TEF", - "ray.task_id": "a631fe8d231813bfbd21f035aac9184f427cfc9201000000", - "ray.worker_id": "47b3883aeba6836eed27697981eb9d12a4b77415c4d44da20dea2044", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_MExwtCmQNkSD7ftk", + "ray.task_id": "3d3e27c54ed1f5cf425ed26dda165b68a3679dd601000000", + "ray.worker_id": "16dd23bea43a9aaa027d1798df4f510814e58a3cbdd63d0554ea8f60", "span.kind": "consumer" }, "metrics": { @@ -202,12 +216,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 408417, - "start": 1756729481559441013 + "duration": 425417, + "start": 1757925780948245554 }, { "name": "__main__.submit_addition_task.remote()", - "service": "raysubmit_vzEvzpvWGrv77TEF", + "service": "raysubmit_MExwtCmQNkSD7ftk", "resource": "__main__.submit_addition_task.remote()", "trace_id": 0, "span_id": 7, @@ -216,19 +230,22 @@ "error": 0, "meta": { "_dd.base_service": "project", - "_dd.p.tid": "68b5908800000000", - "_dd.parent_id": "a276f11e487e249b", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d19400000000", + "_dd.parent_id": "32334ad0becd8c88", "component": "ray", "language": "python", "ray.job_id": "05000000", - "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", - "ray.submission_id": "raysubmit_vzEvzpvWGrv77TEF", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_MExwtCmQNkSD7ftk", + "ray.task.args": "(2,)", + "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.worker_id": "05000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "6bda8eabd24d438aa3fbe259f8053ad7", + "runtime-id": "4669dcf9952f4e0f9a3861e568bc895d", "span.kind": "producer", - "traceparent": "00-68b590880000000006cd992d03686244-a276f11e487e249b-00", - "tracestate": "dd=p:a276f11e487e249b;s:0" + "traceparent": "00-68c7d1940000000040324db9cc400dcd-32334ad0becd8c88-00", + "tracestate": "dd=p:32334ad0becd8c88;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -237,14 +254,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2525 + "process_id": 2415 }, - "duration": 3496292, - "start": 1756729482161335388 + "duration": 3408625, + "start": 1757925781525916263 }, { "name": "__main__.submit_addition_task", - "service": "raysubmit_vzEvzpvWGrv77TEF", + "service": "raysubmit_MExwtCmQNkSD7ftk", "resource": "__main__.submit_addition_task", "trace_id": 0, "span_id": 9, @@ -253,20 +270,23 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68b5908800000000", - "_dd.parent_id": "18d43c014a18a4b1", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d19400000000", + "_dd.parent_id": "d2430a5353c100c1", "component": "ray", "language": "python", "ray.job_id": "05000000", - "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", - "ray.submission_id": "raysubmit_vzEvzpvWGrv77TEF", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_MExwtCmQNkSD7ftk", + "ray.task.args": "(2,)", + "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.task_id": "3ca0590f168eaec5ffffffffffffffffffffffff05000000", - "ray.worker_id": "896fad88ba5ce695402f2b4bc3d1ee86a6abc913a80782b8e6ef1b29", - "runtime-id": "25e058a23d6b4624bdf7055ed9516ccc", + "ray.worker_id": "7f6c7ebf1da788ac83e250f77a3904f63a3c2d7edbd95552f61f95af", + "runtime-id": "7e5d8a92d2b84b2abb71a601ae92c592", "span.kind": "consumer", - "traceparent": "00-68b590880000000006cd992d03686244-18d43c014a18a4b1-00", - "tracestate": "dd=p:18d43c014a18a4b1;s:0" + "traceparent": "00-68c7d1940000000040324db9cc400dcd-d2430a5353c100c1-00", + "tracestate": "dd=p:d2430a5353c100c1;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -275,14 +295,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2571 + "process_id": 2462 }, - "duration": 2575534418, - "start": 1756729483391940125 + "duration": 1785241320, + "start": 1757925782329103180 }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_vzEvzpvWGrv77TEF", + "service": "raysubmit_MExwtCmQNkSD7ftk", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 10, @@ -291,13 +311,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", "component": "ray", "ray.job_id": "05000000", - "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", - "ray.submission_id": "raysubmit_vzEvzpvWGrv77TEF", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_MExwtCmQNkSD7ftk", + "ray.task.args": "(2,)", + "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.task_id": "3ca0590f168eaec5ffffffffffffffffffffffff05000000", - "ray.worker_id": "896fad88ba5ce695402f2b4bc3d1ee86a6abc913a80782b8e6ef1b29", + "ray.worker_id": "7f6c7ebf1da788ac83e250f77a3904f63a3c2d7edbd95552f61f95af", "span.kind": "producer" }, "metrics": { @@ -306,12 +329,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 1262167, - "start": 1756729483392009833 + "duration": 1179542, + "start": 1757925782329422555 }, { "name": "__main__.add_one", - "service": "raysubmit_vzEvzpvWGrv77TEF", + "service": "raysubmit_MExwtCmQNkSD7ftk", "resource": "__main__.add_one", "trace_id": 0, "span_id": 13, @@ -320,20 +343,23 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68b5908800000000", - "_dd.parent_id": "233a09ebbb815dd4", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d19400000000", + "_dd.parent_id": "220c647d7038e589", "component": "ray", "language": "python", "ray.job_id": "05000000", - "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", - "ray.submission_id": "raysubmit_vzEvzpvWGrv77TEF", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_MExwtCmQNkSD7ftk", + "ray.task.args": "(2,)", + "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.task_id": "079c89e8658fa36bffffffffffffffffffffffff05000000", - "ray.worker_id": "c80a2c244685c5374a763a51bcb8d09feba92e07190df281cfc5a8d2", - "runtime-id": "1c5a3b7a77b04d6ea60968d78fd3f29d", + "ray.worker_id": "df5213311da2153c8cad1cfa58138c1040409cfc4df7bc8094f2268a", + "runtime-id": "ff7987bd19454ce199fec7a81973d58a", "span.kind": "consumer", - "traceparent": "00-68b590880000000006cd992d03686244-233a09ebbb815dd4-00", - "tracestate": "dd=p:233a09ebbb815dd4;s:0" + "traceparent": "00-68c7d1940000000040324db9cc400dcd-220c647d7038e589-00", + "tracestate": "dd=p:220c647d7038e589;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -342,14 +368,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2617 + "process_id": 2506 }, - "duration": 54500, - "start": 1756729485953642209 + "duration": 274125, + "start": 1757925784110700375 }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_vzEvzpvWGrv77TEF", + "service": "raysubmit_MExwtCmQNkSD7ftk", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 11, @@ -358,13 +384,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", "component": "ray", "ray.job_id": "05000000", - "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", - "ray.submission_id": "raysubmit_vzEvzpvWGrv77TEF", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_MExwtCmQNkSD7ftk", + "ray.task.args": "(3,)", + "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.task_id": "3ca0590f168eaec5ffffffffffffffffffffffff05000000", - "ray.worker_id": "896fad88ba5ce695402f2b4bc3d1ee86a6abc913a80782b8e6ef1b29", + "ray.worker_id": "7f6c7ebf1da788ac83e250f77a3904f63a3c2d7edbd95552f61f95af", "span.kind": "producer" }, "metrics": { @@ -373,12 +402,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 120833, - "start": 1756729483393298125 + "duration": 126625, + "start": 1757925782330633305 }, { "name": "__main__.add_one", - "service": "raysubmit_vzEvzpvWGrv77TEF", + "service": "raysubmit_MExwtCmQNkSD7ftk", "resource": "__main__.add_one", "trace_id": 0, "span_id": 14, @@ -387,20 +416,23 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68b5908800000000", - "_dd.parent_id": "ddb6344e2db75468", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d19400000000", + "_dd.parent_id": "d4ae3353582a076d", "component": "ray", "language": "python", "ray.job_id": "05000000", - "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", - "ray.submission_id": "raysubmit_vzEvzpvWGrv77TEF", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_MExwtCmQNkSD7ftk", + "ray.task.args": "(3,)", + "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.task_id": "cc483212b2c8f53effffffffffffffffffffffff05000000", - "ray.worker_id": "c80a2c244685c5374a763a51bcb8d09feba92e07190df281cfc5a8d2", - "runtime-id": "1c5a3b7a77b04d6ea60968d78fd3f29d", + "ray.worker_id": "6ffe5f77523d8847dda0995bd5f32570030c605fa7542c8dae514ec8", + "runtime-id": "d4a07c33750749d6b0469de22cd77112", "span.kind": "consumer", - "traceparent": "00-68b590880000000006cd992d03686244-ddb6344e2db75468-00", - "tracestate": "dd=p:ddb6344e2db75468;s:0" + "traceparent": "00-68c7d1940000000040324db9cc400dcd-d4ae3353582a076d-00", + "tracestate": "dd=p:d4ae3353582a076d;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -409,14 +441,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2617 + "process_id": 2505 }, - "duration": 51750, - "start": 1756729485961482043 + "duration": 238875, + "start": 1757925784074312500 }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_vzEvzpvWGrv77TEF", + "service": "raysubmit_MExwtCmQNkSD7ftk", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 12, @@ -425,13 +457,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", "component": "ray", "ray.job_id": "05000000", - "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", - "ray.submission_id": "raysubmit_vzEvzpvWGrv77TEF", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_MExwtCmQNkSD7ftk", + "ray.task.args": "(4,)", + "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.task_id": "3ca0590f168eaec5ffffffffffffffffffffffff05000000", - "ray.worker_id": "896fad88ba5ce695402f2b4bc3d1ee86a6abc913a80782b8e6ef1b29", + "ray.worker_id": "7f6c7ebf1da788ac83e250f77a3904f63a3c2d7edbd95552f61f95af", "span.kind": "producer" }, "metrics": { @@ -440,12 +475,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 82167, - "start": 1756729483393433583 + "duration": 96833, + "start": 1757925782330783805 }, { "name": "__main__.add_one", - "service": "raysubmit_vzEvzpvWGrv77TEF", + "service": "raysubmit_MExwtCmQNkSD7ftk", "resource": "__main__.add_one", "trace_id": 0, "span_id": 15, @@ -454,20 +489,23 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68b5908800000000", - "_dd.parent_id": "7bb54fb02935e125", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d19400000000", + "_dd.parent_id": "e41700435f7ffbac", "component": "ray", "language": "python", "ray.job_id": "05000000", - "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", - "ray.submission_id": "raysubmit_vzEvzpvWGrv77TEF", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_MExwtCmQNkSD7ftk", + "ray.task.args": "(4,)", + "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.task_id": "abe71a0435f88aceffffffffffffffffffffffff05000000", - "ray.worker_id": "c80a2c244685c5374a763a51bcb8d09feba92e07190df281cfc5a8d2", - "runtime-id": "1c5a3b7a77b04d6ea60968d78fd3f29d", + "ray.worker_id": "0b6dc9811f16d3cf1c30eeb9f4914d373f5f0fde371195c0f5502cde", + "runtime-id": "5a328918dffe458fa45fa06c18f105ac", "span.kind": "consumer", - "traceparent": "00-68b590880000000006cd992d03686244-7bb54fb02935e125-00", - "tracestate": "dd=p:7bb54fb02935e125;s:0" + "traceparent": "00-68c7d1940000000040324db9cc400dcd-e41700435f7ffbac-00", + "tracestate": "dd=p:e41700435f7ffbac;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -476,8 +514,8 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2617 + "process_id": 2504 }, - "duration": 30292, - "start": 1756729485965384084 + "duration": 262667, + "start": 1757925784094592458 }]] diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_actor.json b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_actor.json index cd921deb78f..60472cf3639 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_actor.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_actor.json @@ -1,7 +1,7 @@ [[ { "name": "ray.job", - "service": "raysubmit_SY5mq7sjKJMawisp", + "service": "raysubmit_tU3LHQyRQuAxm1v7", "resource": "ray.job", "trace_id": 0, "span_id": 1, @@ -10,13 +10,15 @@ "error": 0, "meta": { "_dd.base_service": "ray.dashboard", + "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68b5909300000000", + "_dd.p.tid": "68c7d19c00000000", "component": "ray", "language": "python", "ray.job.message": "Job finished successfully.", "ray.job.status": "SUCCEEDED", - "runtime-id": "e7ff0c81dde4496a9040f3ae32ef1f31" + "ray.submission_id": "raysubmit_tU3LHQyRQuAxm1v7", + "runtime-id": "bfdf74988ffd4419aabda8fe7dddaa45" }, "metrics": { "_dd.djm.enabled": 1, @@ -25,14 +27,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1081 + "process_id": 1038 }, - "duration": 5256629711, - "start": 1756729491902125795 + "duration": 3831369502, + "start": 1757925788637845585 }, { "name": "ray.job.submit", - "service": "raysubmit_SY5mq7sjKJMawisp", + "service": "raysubmit_tU3LHQyRQuAxm1v7", "resource": "ray.job.submit", "trace_id": 0, "span_id": 2, @@ -41,6 +43,7 @@ "error": 0, "meta": { "_dd.base_service": "ray.dashboard", + "_dd.hostname": "docker-desktop", "component": "ray", "ray.job.submit_status": "success", "span.kind": "producer" @@ -51,12 +54,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 28375, - "start": 1756729491902152045 + "duration": 41833, + "start": 1757925788638118127 }, { "name": "JobSupervisor.run.remote()", - "service": "raysubmit_SY5mq7sjKJMawisp", + "service": "raysubmit_tU3LHQyRQuAxm1v7", "resource": "JobSupervisor.run.remote()", "trace_id": 0, "span_id": 3, @@ -65,9 +68,12 @@ "error": 0, "meta": { "_dd.base_service": "ray.dashboard", + "_dd.hostname": "docker-desktop", "component": "ray", + "ray.actor_method.args": "()", + "ray.actor_method.kwargs": "{'_start_signal_actor': None, 'resources_specified': False}", "ray.job_id": "01000000", - "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "producer" }, @@ -77,12 +83,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 227250, - "start": 1756729491905908420 + "duration": 329250, + "start": 1757925788641650419 }, { "name": "JobSupervisor.run", - "service": "raysubmit_SY5mq7sjKJMawisp", + "service": "raysubmit_tU3LHQyRQuAxm1v7", "resource": "JobSupervisor.run", "trace_id": 0, "span_id": 4, @@ -91,20 +97,21 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68b5909300000000", - "_dd.parent_id": "0cd7d604790df29b", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d19c00000000", + "_dd.parent_id": "489296dd4b5a8086", "component": "ray", "language": "python", - "ray.actor_id": "383cf899677e6a26640ad27b01000000", + "ray.actor_id": "7b24ddd0623173d54e199a8401000000", "ray.job_id": "01000000", - "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", - "ray.submission_id": "raysubmit_SY5mq7sjKJMawisp", - "ray.task_id": "6efb86ef2d286c40383cf899677e6a26640ad27b01000000", - "ray.worker_id": "f8a736515c165068c2eac74b22aa7cbdaad3814ed1cbf9bcaf2ab669", - "runtime-id": "14ec455bd7c142a2b9c2b6d03a7914e0", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_tU3LHQyRQuAxm1v7", + "ray.task_id": "79cc316456d392017b24ddd0623173d54e199a8401000000", + "ray.worker_id": "b676ca10ac0baecf958bee8850932278177ab6ad0654a6be33f0c0cd", + "runtime-id": "63c4d29b9b8a4ccaba134c2c33a80e06", "span.kind": "consumer", - "traceparent": "00-68b59093000000006b29c268bce8ba6f-0cd7d604790df29b-00", - "tracestate": "dd=p:0cd7d604790df29b" + "traceparent": "00-68c7d19c00000000693be41439bf32fd-489296dd4b5a8086-00", + "tracestate": "dd=p:489296dd4b5a8086" }, "metrics": { "_dd.djm.enabled": 1, @@ -113,14 +120,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2784 + "process_id": 2658 }, - "duration": 3147145960, - "start": 1756729493133549171 + "duration": 2026158376, + "start": 1757925789450763794 }, { "name": "JobSupervisor._get_driver_env_vars", - "service": "raysubmit_SY5mq7sjKJMawisp", + "service": "raysubmit_tU3LHQyRQuAxm1v7", "resource": "JobSupervisor._get_driver_env_vars", "trace_id": 0, "span_id": 5, @@ -129,13 +136,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "383cf899677e6a26640ad27b01000000", + "ray.actor_id": "7b24ddd0623173d54e199a8401000000", + "ray.actor_method.args": "(False,)", + "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", - "ray.submission_id": "raysubmit_SY5mq7sjKJMawisp", - "ray.task_id": "6efb86ef2d286c40383cf899677e6a26640ad27b01000000", - "ray.worker_id": "f8a736515c165068c2eac74b22aa7cbdaad3814ed1cbf9bcaf2ab669", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_tU3LHQyRQuAxm1v7", + "ray.task_id": "79cc316456d392017b24ddd0623173d54e199a8401000000", + "ray.worker_id": "b676ca10ac0baecf958bee8850932278177ab6ad0654a6be33f0c0cd", "span.kind": "consumer" }, "metrics": { @@ -144,12 +154,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 1449042, - "start": 1756729493134871296 + "duration": 1718250, + "start": 1757925789452206127 }, { "name": "JobSupervisor._get_driver_runtime_env", - "service": "raysubmit_SY5mq7sjKJMawisp", + "service": "raysubmit_tU3LHQyRQuAxm1v7", "resource": "JobSupervisor._get_driver_runtime_env", "trace_id": 0, "span_id": 8, @@ -158,13 +168,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "383cf899677e6a26640ad27b01000000", + "ray.actor_id": "7b24ddd0623173d54e199a8401000000", + "ray.actor_method.args": "(False,)", + "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", - "ray.submission_id": "raysubmit_SY5mq7sjKJMawisp", - "ray.task_id": "6efb86ef2d286c40383cf899677e6a26640ad27b01000000", - "ray.worker_id": "f8a736515c165068c2eac74b22aa7cbdaad3814ed1cbf9bcaf2ab669", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_tU3LHQyRQuAxm1v7", + "ray.task_id": "79cc316456d392017b24ddd0623173d54e199a8401000000", + "ray.worker_id": "b676ca10ac0baecf958bee8850932278177ab6ad0654a6be33f0c0cd", "span.kind": "consumer" }, "metrics": { @@ -173,13 +186,13 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 37208, - "start": 1756729493136264838 + "duration": 146209, + "start": 1757925789453735252 }, { - "name": "JobSupervisor._exec_entrypoint", - "service": "raysubmit_SY5mq7sjKJMawisp", - "resource": "JobSupervisor._exec_entrypoint", + "name": "exec python /home/bits/project/tests/contrib/ray/jobs/simple_actor.py", + "service": "raysubmit_tU3LHQyRQuAxm1v7", + "resource": "exec python /home/bits/project/tests/contrib/ray/jobs/simple_actor.py", "trace_id": 0, "span_id": 6, "parent_id": 4, @@ -187,13 +200,14 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "383cf899677e6a26640ad27b01000000", + "ray.actor_id": "7b24ddd0623173d54e199a8401000000", "ray.job_id": "01000000", - "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", - "ray.submission_id": "raysubmit_SY5mq7sjKJMawisp", - "ray.task_id": "6efb86ef2d286c40383cf899677e6a26640ad27b01000000", - "ray.worker_id": "f8a736515c165068c2eac74b22aa7cbdaad3814ed1cbf9bcaf2ab669", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_tU3LHQyRQuAxm1v7", + "ray.task_id": "79cc316456d392017b24ddd0623173d54e199a8401000000", + "ray.worker_id": "b676ca10ac0baecf958bee8850932278177ab6ad0654a6be33f0c0cd", "span.kind": "consumer" }, "metrics": { @@ -202,12 +216,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 391125, - "start": 1756729493136482046 + "duration": 419583, + "start": 1757925789454057461 }, { "name": "Counter.increment_get_and_double.remote()", - "service": "raysubmit_SY5mq7sjKJMawisp", + "service": "raysubmit_tU3LHQyRQuAxm1v7", "resource": "Counter.increment_get_and_double.remote()", "trace_id": 0, "span_id": 7, @@ -216,18 +230,21 @@ "error": 0, "meta": { "_dd.base_service": "project", - "_dd.p.tid": "68b5909300000000", - "_dd.parent_id": "08940cf647b7c2a1", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d19c00000000", + "_dd.parent_id": "1b0b70476d572081", "component": "ray", "language": "python", + "ray.actor_method.args": "()", + "ray.actor_method.kwargs": "{}", "ray.job_id": "06000000", - "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", - "ray.submission_id": "raysubmit_SY5mq7sjKJMawisp", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_tU3LHQyRQuAxm1v7", "ray.worker_id": "06000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "a04c1ab21e6343edacfcfa4c632a6d0e", + "runtime-id": "93151eb1c121481a8308c88237d0c008", "span.kind": "producer", - "traceparent": "00-68b59093000000006b29c268bce8ba6f-08940cf647b7c2a1-00", - "tracestate": "dd=p:08940cf647b7c2a1;s:0" + "traceparent": "00-68c7d19c00000000693be41439bf32fd-1b0b70476d572081-00", + "tracestate": "dd=p:1b0b70476d572081;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -236,14 +253,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2836 + "process_id": 2708 }, - "duration": 289083, - "start": 1756729493753551963 + "duration": 301292, + "start": 1757925790037564086 }, { "name": "Counter.increment_get_and_double", - "service": "raysubmit_SY5mq7sjKJMawisp", + "service": "raysubmit_tU3LHQyRQuAxm1v7", "resource": "Counter.increment_get_and_double", "trace_id": 0, "span_id": 9, @@ -252,20 +269,23 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68b5909300000000", - "_dd.parent_id": "5b3ca016139efd91", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d19c00000000", + "_dd.parent_id": "f8406e30d809d3dc", "component": "ray", "language": "python", - "ray.actor_id": "c6e6959cebc4f9531531a60c06000000", + "ray.actor_id": "b0a0b6f2cdba2066bd96b03d06000000", + "ray.actor_method.args": "()", + "ray.actor_method.kwargs": "{}", "ray.job_id": "06000000", - "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", - "ray.submission_id": "raysubmit_SY5mq7sjKJMawisp", - "ray.task_id": "8a2dc005c3f797b8c6e6959cebc4f9531531a60c06000000", - "ray.worker_id": "fc2d64a367bca5d5240b9b5143e211dd6952ca1980b4571365bda316", - "runtime-id": "983b264c584d4868b6fbc2e9dd025b1c", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_tU3LHQyRQuAxm1v7", + "ray.task_id": "8a2dc005c3f797b8b0a0b6f2cdba2066bd96b03d06000000", + "ray.worker_id": "54427af37275bfb686bd8fe7272f0c1f5f35a94be86bfb1daccf1dfe", + "runtime-id": "f0b3912a665a465c9995ea06d7f238e6", "span.kind": "consumer", - "traceparent": "00-68b59093000000006b29c268bce8ba6f-5b3ca016139efd91-00", - "tracestate": "dd=p:5b3ca016139efd91;s:0" + "traceparent": "00-68c7d19c00000000693be41439bf32fd-f8406e30d809d3dc-00", + "tracestate": "dd=p:f8406e30d809d3dc;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -274,14 +294,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2882 + "process_id": 2752 }, - "duration": 182125, - "start": 1756729494974444963 + "duration": 700916, + "start": 1757925790941847170 }, { "name": "Counter.increment_and_get", - "service": "raysubmit_SY5mq7sjKJMawisp", + "service": "raysubmit_tU3LHQyRQuAxm1v7", "resource": "Counter.increment_and_get", "trace_id": 0, "span_id": 10, @@ -290,13 +310,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "c6e6959cebc4f9531531a60c06000000", + "ray.actor_id": "b0a0b6f2cdba2066bd96b03d06000000", + "ray.actor_method.args": "()", + "ray.actor_method.kwargs": "{}", "ray.job_id": "06000000", - "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", - "ray.submission_id": "raysubmit_SY5mq7sjKJMawisp", - "ray.task_id": "8a2dc005c3f797b8c6e6959cebc4f9531531a60c06000000", - "ray.worker_id": "fc2d64a367bca5d5240b9b5143e211dd6952ca1980b4571365bda316", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_tU3LHQyRQuAxm1v7", + "ray.task_id": "8a2dc005c3f797b8b0a0b6f2cdba2066bd96b03d06000000", + "ray.worker_id": "54427af37275bfb686bd8fe7272f0c1f5f35a94be86bfb1daccf1dfe", "span.kind": "consumer" }, "metrics": { @@ -305,12 +328,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 82083, - "start": 1756729494974540630 + "duration": 447583, + "start": 1757925790942093045 }, { "name": "Counter.increment", - "service": "raysubmit_SY5mq7sjKJMawisp", + "service": "raysubmit_tU3LHQyRQuAxm1v7", "resource": "Counter.increment", "trace_id": 0, "span_id": 11, @@ -319,13 +342,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "c6e6959cebc4f9531531a60c06000000", + "ray.actor_id": "b0a0b6f2cdba2066bd96b03d06000000", + "ray.actor_method.args": "()", + "ray.actor_method.kwargs": "{}", "ray.job_id": "06000000", - "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", - "ray.submission_id": "raysubmit_SY5mq7sjKJMawisp", - "ray.task_id": "8a2dc005c3f797b8c6e6959cebc4f9531531a60c06000000", - "ray.worker_id": "fc2d64a367bca5d5240b9b5143e211dd6952ca1980b4571365bda316", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_tU3LHQyRQuAxm1v7", + "ray.task_id": "8a2dc005c3f797b8b0a0b6f2cdba2066bd96b03d06000000", + "ray.worker_id": "54427af37275bfb686bd8fe7272f0c1f5f35a94be86bfb1daccf1dfe", "span.kind": "consumer" }, "metrics": { @@ -334,12 +360,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 14833, - "start": 1756729494974571380 + "duration": 146625, + "start": 1757925790942239253 }, { "name": "Counter.get_value", - "service": "raysubmit_SY5mq7sjKJMawisp", + "service": "raysubmit_tU3LHQyRQuAxm1v7", "resource": "Counter.get_value", "trace_id": 0, "span_id": 12, @@ -348,13 +374,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "c6e6959cebc4f9531531a60c06000000", + "ray.actor_id": "b0a0b6f2cdba2066bd96b03d06000000", + "ray.actor_method.args": "()", + "ray.actor_method.kwargs": "{}", "ray.job_id": "06000000", - "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", - "ray.submission_id": "raysubmit_SY5mq7sjKJMawisp", - "ray.task_id": "8a2dc005c3f797b8c6e6959cebc4f9531531a60c06000000", - "ray.worker_id": "fc2d64a367bca5d5240b9b5143e211dd6952ca1980b4571365bda316", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_tU3LHQyRQuAxm1v7", + "ray.task_id": "8a2dc005c3f797b8b0a0b6f2cdba2066bd96b03d06000000", + "ray.worker_id": "54427af37275bfb686bd8fe7272f0c1f5f35a94be86bfb1daccf1dfe", "span.kind": "consumer" }, "metrics": { @@ -363,6 +392,6 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 11708, - "start": 1756729494974604130 + "duration": 109833, + "start": 1757925790942414920 }]] diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_task.json b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_task.json index 831f56b242b..e6119e2ae78 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_task.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_task.json @@ -1,7 +1,7 @@ [[ { "name": "ray.job", - "service": "raysubmit_4rD8iKKmsQqFz782", + "service": "raysubmit_2EFzNjdmnchZcKtB", "resource": "ray.job", "trace_id": 0, "span_id": 1, @@ -10,13 +10,15 @@ "error": 0, "meta": { "_dd.base_service": "ray.dashboard", + "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68b5909b00000000", + "_dd.p.tid": "68c7d1a300000000", "component": "ray", "language": "python", "ray.job.message": "Job finished successfully.", "ray.job.status": "SUCCEEDED", - "runtime-id": "e7ff0c81dde4496a9040f3ae32ef1f31" + "ray.submission_id": "raysubmit_2EFzNjdmnchZcKtB", + "runtime-id": "bfdf74988ffd4419aabda8fe7dddaa45" }, "metrics": { "_dd.djm.enabled": 1, @@ -25,14 +27,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1081 + "process_id": 1038 }, - "duration": 7685945712, - "start": 1756729499769824091 + "duration": 4878863627, + "start": 1757925795210341547 }, { "name": "ray.job.submit", - "service": "raysubmit_4rD8iKKmsQqFz782", + "service": "raysubmit_2EFzNjdmnchZcKtB", "resource": "ray.job.submit", "trace_id": 0, "span_id": 2, @@ -41,6 +43,7 @@ "error": 0, "meta": { "_dd.base_service": "ray.dashboard", + "_dd.hostname": "docker-desktop", "component": "ray", "ray.job.submit_status": "success", "span.kind": "producer" @@ -51,12 +54,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 32291, - "start": 1756729499769855841 + "duration": 36000, + "start": 1757925795210473964 }, { "name": "JobSupervisor.run.remote()", - "service": "raysubmit_4rD8iKKmsQqFz782", + "service": "raysubmit_2EFzNjdmnchZcKtB", "resource": "JobSupervisor.run.remote()", "trace_id": 0, "span_id": 3, @@ -65,9 +68,12 @@ "error": 0, "meta": { "_dd.base_service": "ray.dashboard", + "_dd.hostname": "docker-desktop", "component": "ray", + "ray.actor_method.args": "()", + "ray.actor_method.kwargs": "{'_start_signal_actor': None, 'resources_specified': False}", "ray.job_id": "01000000", - "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "producer" }, @@ -77,12 +83,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 364000, - "start": 1756729499773384549 + "duration": 562042, + "start": 1757925795214408797 }, { "name": "JobSupervisor.run", - "service": "raysubmit_4rD8iKKmsQqFz782", + "service": "raysubmit_2EFzNjdmnchZcKtB", "resource": "JobSupervisor.run", "trace_id": 0, "span_id": 4, @@ -91,20 +97,21 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68b5909b00000000", - "_dd.parent_id": "154d754d3e20caf9", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d1a300000000", + "_dd.parent_id": "5a5f49f30c55a288", "component": "ray", "language": "python", - "ray.actor_id": "6b1a51793377f266297a6fe201000000", + "ray.actor_id": "0e3fe262cb79750272d088e301000000", "ray.job_id": "01000000", - "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", - "ray.submission_id": "raysubmit_4rD8iKKmsQqFz782", - "ray.task_id": "4f4ef6205ce35f906b1a51793377f266297a6fe201000000", - "ray.worker_id": "b8e9d3e47d1444092d5075b8d0ddab6151fdf164d729cad3ab5361f8", - "runtime-id": "8c8299bdbec047ac908652d63356275c", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_2EFzNjdmnchZcKtB", + "ray.task_id": "a6d6d592397561440e3fe262cb79750272d088e301000000", + "ray.worker_id": "05f2e1906768688fec9a3e13d5b643590d504efc1bc22cbd64a560c0", + "runtime-id": "ce1a4a6150ca4f5fa65a0628725e4eaf", "span.kind": "consumer", - "traceparent": "00-68b5909b00000000210ff787598ddcc3-154d754d3e20caf9-00", - "tracestate": "dd=p:154d754d3e20caf9" + "traceparent": "00-68c7d1a300000000752205f9970eeb29-5a5f49f30c55a288-00", + "tracestate": "dd=p:5a5f49f30c55a288" }, "metrics": { "_dd.djm.enabled": 1, @@ -113,14 +120,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2953 + "process_id": 2823 }, - "duration": 5067543294, - "start": 1756729501425235800 + "duration": 3042477127, + "start": 1757925796060774047 }, { "name": "JobSupervisor._get_driver_env_vars", - "service": "raysubmit_4rD8iKKmsQqFz782", + "service": "raysubmit_2EFzNjdmnchZcKtB", "resource": "JobSupervisor._get_driver_env_vars", "trace_id": 0, "span_id": 5, @@ -129,13 +136,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "6b1a51793377f266297a6fe201000000", + "ray.actor_id": "0e3fe262cb79750272d088e301000000", + "ray.actor_method.args": "(False,)", + "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", - "ray.submission_id": "raysubmit_4rD8iKKmsQqFz782", - "ray.task_id": "4f4ef6205ce35f906b1a51793377f266297a6fe201000000", - "ray.worker_id": "b8e9d3e47d1444092d5075b8d0ddab6151fdf164d729cad3ab5361f8", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_2EFzNjdmnchZcKtB", + "ray.task_id": "a6d6d592397561440e3fe262cb79750272d088e301000000", + "ray.worker_id": "05f2e1906768688fec9a3e13d5b643590d504efc1bc22cbd64a560c0", "span.kind": "consumer" }, "metrics": { @@ -144,12 +154,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 1911584, - "start": 1756729501426967383 + "duration": 1757334, + "start": 1757925796062251672 }, { "name": "JobSupervisor._get_driver_runtime_env", - "service": "raysubmit_4rD8iKKmsQqFz782", + "service": "raysubmit_2EFzNjdmnchZcKtB", "resource": "JobSupervisor._get_driver_runtime_env", "trace_id": 0, "span_id": 11, @@ -158,13 +168,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "6b1a51793377f266297a6fe201000000", + "ray.actor_id": "0e3fe262cb79750272d088e301000000", + "ray.actor_method.args": "(False,)", + "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", - "ray.submission_id": "raysubmit_4rD8iKKmsQqFz782", - "ray.task_id": "4f4ef6205ce35f906b1a51793377f266297a6fe201000000", - "ray.worker_id": "b8e9d3e47d1444092d5075b8d0ddab6151fdf164d729cad3ab5361f8", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_2EFzNjdmnchZcKtB", + "ray.task_id": "a6d6d592397561440e3fe262cb79750272d088e301000000", + "ray.worker_id": "05f2e1906768688fec9a3e13d5b643590d504efc1bc22cbd64a560c0", "span.kind": "consumer" }, "metrics": { @@ -173,13 +186,13 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 72708, - "start": 1756729501428773592 + "duration": 144291, + "start": 1757925796063836631 }, { - "name": "JobSupervisor._exec_entrypoint", - "service": "raysubmit_4rD8iKKmsQqFz782", - "resource": "JobSupervisor._exec_entrypoint", + "name": "exec python /home/bits/project/tests/contrib/ray/jobs/simple_task.py", + "service": "raysubmit_2EFzNjdmnchZcKtB", + "resource": "exec python /home/bits/project/tests/contrib/ray/jobs/simple_task.py", "trace_id": 0, "span_id": 6, "parent_id": 4, @@ -187,13 +200,14 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "6b1a51793377f266297a6fe201000000", + "ray.actor_id": "0e3fe262cb79750272d088e301000000", "ray.job_id": "01000000", - "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", - "ray.submission_id": "raysubmit_4rD8iKKmsQqFz782", - "ray.task_id": "4f4ef6205ce35f906b1a51793377f266297a6fe201000000", - "ray.worker_id": "b8e9d3e47d1444092d5075b8d0ddab6151fdf164d729cad3ab5361f8", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_2EFzNjdmnchZcKtB", + "ray.task_id": "a6d6d592397561440e3fe262cb79750272d088e301000000", + "ray.worker_id": "05f2e1906768688fec9a3e13d5b643590d504efc1bc22cbd64a560c0", "span.kind": "consumer" }, "metrics": { @@ -202,12 +216,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 485625, - "start": 1756729501429132842 + "duration": 422958, + "start": 1757925796064120381 }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_4rD8iKKmsQqFz782", + "service": "raysubmit_2EFzNjdmnchZcKtB", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 7, @@ -216,19 +230,22 @@ "error": 0, "meta": { "_dd.base_service": "project", - "_dd.p.tid": "68b5909b00000000", - "_dd.parent_id": "20b8a389cc96ae50", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d1a300000000", + "_dd.parent_id": "c504ab4f33d9b0b7", "component": "ray", "language": "python", "ray.job_id": "07000000", - "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", - "ray.submission_id": "raysubmit_4rD8iKKmsQqFz782", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_2EFzNjdmnchZcKtB", + "ray.task.args": "(0,)", + "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.worker_id": "07000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "f1a07fc627894917bbf5779d69a85ffc", + "runtime-id": "1dd30719f3454bab9fe0e39e8d3303ed", "span.kind": "producer", - "traceparent": "00-68b5909b00000000210ff787598ddcc3-20b8a389cc96ae50-00", - "tracestate": "dd=p:20b8a389cc96ae50;s:0" + "traceparent": "00-68c7d1a300000000752205f9970eeb29-c504ab4f33d9b0b7-00", + "tracestate": "dd=p:c504ab4f33d9b0b7;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -237,14 +254,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 3004 + "process_id": 2873 }, - "duration": 3530375, - "start": 1756729502076440175 + "duration": 3006667, + "start": 1757925796650876756 }, { "name": "__main__.add_one", - "service": "raysubmit_4rD8iKKmsQqFz782", + "service": "raysubmit_2EFzNjdmnchZcKtB", "resource": "__main__.add_one", "trace_id": 0, "span_id": 12, @@ -253,20 +270,23 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68b5909b00000000", - "_dd.parent_id": "6552cd7f00cecd5e", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d1a300000000", + "_dd.parent_id": "5aa34d936d664814", "component": "ray", "language": "python", "ray.job_id": "07000000", - "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", - "ray.submission_id": "raysubmit_4rD8iKKmsQqFz782", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_2EFzNjdmnchZcKtB", + "ray.task.args": "(0,)", + "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.task_id": "d2b4e3e4a6f1ddc5ffffffffffffffffffffffff07000000", - "ray.worker_id": "88cb27b2841c23c01fadaa1ddbd0645e9a1bf65f3c974fa81301bbbf", - "runtime-id": "35f089c028684a38b4175bc1e1932786", + "ray.worker_id": "ae5852335fbae99a9d17439805e24914602654e040984625efa07322", + "runtime-id": "a0f06eced0634ecf86e9bfdc0ec40bd5", "span.kind": "consumer", - "traceparent": "00-68b5909b00000000210ff787598ddcc3-6552cd7f00cecd5e-00", - "tracestate": "dd=p:6552cd7f00cecd5e;s:0" + "traceparent": "00-68c7d1a300000000752205f9970eeb29-5aa34d936d664814-00", + "tracestate": "dd=p:5aa34d936d664814;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -275,14 +295,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 3053 + "process_id": 2918 }, - "duration": 65125, - "start": 1756729504978361552 + "duration": 231250, + "start": 1757925798462217090 }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_4rD8iKKmsQqFz782", + "service": "raysubmit_2EFzNjdmnchZcKtB", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 8, @@ -291,19 +311,22 @@ "error": 0, "meta": { "_dd.base_service": "project", - "_dd.p.tid": "68b5909b00000000", - "_dd.parent_id": "20b8a389cc96ae50", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d1a300000000", + "_dd.parent_id": "c504ab4f33d9b0b7", "component": "ray", "language": "python", "ray.job_id": "07000000", - "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", - "ray.submission_id": "raysubmit_4rD8iKKmsQqFz782", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_2EFzNjdmnchZcKtB", + "ray.task.args": "(1,)", + "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.worker_id": "07000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "f1a07fc627894917bbf5779d69a85ffc", + "runtime-id": "1dd30719f3454bab9fe0e39e8d3303ed", "span.kind": "producer", - "traceparent": "00-68b5909b00000000210ff787598ddcc3-20b8a389cc96ae50-00", - "tracestate": "dd=p:20b8a389cc96ae50;s:0" + "traceparent": "00-68c7d1a300000000752205f9970eeb29-c504ab4f33d9b0b7-00", + "tracestate": "dd=p:c504ab4f33d9b0b7;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -312,14 +335,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 3004 + "process_id": 2873 }, - "duration": 285750, - "start": 1756729502083167925 + "duration": 197791, + "start": 1757925796657161423 }, { "name": "__main__.add_one", - "service": "raysubmit_4rD8iKKmsQqFz782", + "service": "raysubmit_2EFzNjdmnchZcKtB", "resource": "__main__.add_one", "trace_id": 0, "span_id": 13, @@ -328,20 +351,23 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68b5909b00000000", - "_dd.parent_id": "be83fce37a376230", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d1a300000000", + "_dd.parent_id": "d900467389e32d5b", "component": "ray", "language": "python", "ray.job_id": "07000000", - "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", - "ray.submission_id": "raysubmit_4rD8iKKmsQqFz782", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_2EFzNjdmnchZcKtB", + "ray.task.args": "(1,)", + "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.task_id": "11149dae5a34cd9affffffffffffffffffffffff07000000", - "ray.worker_id": "88cb27b2841c23c01fadaa1ddbd0645e9a1bf65f3c974fa81301bbbf", - "runtime-id": "35f089c028684a38b4175bc1e1932786", + "ray.worker_id": "80c1e21b40cf31b4f118072361da79dd797523075d6caf64581863d3", + "runtime-id": "d09852c5501846b5aace46ed0e016143", "span.kind": "consumer", - "traceparent": "00-68b5909b00000000210ff787598ddcc3-be83fce37a376230-00", - "tracestate": "dd=p:be83fce37a376230;s:0" + "traceparent": "00-68c7d1a300000000752205f9970eeb29-d900467389e32d5b-00", + "tracestate": "dd=p:d900467389e32d5b;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -350,14 +376,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 3053 + "process_id": 2920 }, - "duration": 36291, - "start": 1756729504983968802 + "duration": 232417, + "start": 1757925798478876423 }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_4rD8iKKmsQqFz782", + "service": "raysubmit_2EFzNjdmnchZcKtB", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 9, @@ -366,19 +392,22 @@ "error": 0, "meta": { "_dd.base_service": "project", - "_dd.p.tid": "68b5909b00000000", - "_dd.parent_id": "20b8a389cc96ae50", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d1a300000000", + "_dd.parent_id": "c504ab4f33d9b0b7", "component": "ray", "language": "python", "ray.job_id": "07000000", - "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", - "ray.submission_id": "raysubmit_4rD8iKKmsQqFz782", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_2EFzNjdmnchZcKtB", + "ray.task.args": "(2,)", + "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.worker_id": "07000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "f1a07fc627894917bbf5779d69a85ffc", + "runtime-id": "1dd30719f3454bab9fe0e39e8d3303ed", "span.kind": "producer", - "traceparent": "00-68b5909b00000000210ff787598ddcc3-20b8a389cc96ae50-00", - "tracestate": "dd=p:20b8a389cc96ae50;s:0" + "traceparent": "00-68c7d1a300000000752205f9970eeb29-c504ab4f33d9b0b7-00", + "tracestate": "dd=p:c504ab4f33d9b0b7;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -387,14 +416,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 3004 + "process_id": 2873 }, - "duration": 187000, - "start": 1756729502085262509 + "duration": 180083, + "start": 1757925796658789131 }, { "name": "__main__.add_one", - "service": "raysubmit_4rD8iKKmsQqFz782", + "service": "raysubmit_2EFzNjdmnchZcKtB", "resource": "__main__.add_one", "trace_id": 0, "span_id": 14, @@ -403,20 +432,23 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68b5909b00000000", - "_dd.parent_id": "9bfd9ae425f6fb26", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d1a300000000", + "_dd.parent_id": "bc506d9d78bd43aa", "component": "ray", "language": "python", "ray.job_id": "07000000", - "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", - "ray.submission_id": "raysubmit_4rD8iKKmsQqFz782", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_2EFzNjdmnchZcKtB", + "ray.task.args": "(2,)", + "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.task_id": "a363a5a94a784cb3ffffffffffffffffffffffff07000000", - "ray.worker_id": "5c105ba59d3600193be56aaa1577002674189cfe8bd766017a96675e", - "runtime-id": "5b7239157bad4fc381a8b572043eea4a", + "ray.worker_id": "7cf5fd69413da8fb39ecee63c05a12efcece67c2163b8b5e4e0cda1a", + "runtime-id": "b7fc397e7399424281d31dcf5d7b2990", "span.kind": "consumer", - "traceparent": "00-68b5909b00000000210ff787598ddcc3-9bfd9ae425f6fb26-00", - "tracestate": "dd=p:9bfd9ae425f6fb26;s:0" + "traceparent": "00-68c7d1a300000000752205f9970eeb29-bc506d9d78bd43aa-00", + "tracestate": "dd=p:bc506d9d78bd43aa;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -425,14 +457,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 3050 + "process_id": 2919 }, - "duration": 61625, - "start": 1756729504989536802 + "duration": 208917, + "start": 1757925798476711340 }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_4rD8iKKmsQqFz782", + "service": "raysubmit_2EFzNjdmnchZcKtB", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 10, @@ -441,19 +473,22 @@ "error": 0, "meta": { "_dd.base_service": "project", - "_dd.p.tid": "68b5909b00000000", - "_dd.parent_id": "20b8a389cc96ae50", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d1a300000000", + "_dd.parent_id": "c504ab4f33d9b0b7", "component": "ray", "language": "python", "ray.job_id": "07000000", - "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", - "ray.submission_id": "raysubmit_4rD8iKKmsQqFz782", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_2EFzNjdmnchZcKtB", + "ray.task.args": "(3,)", + "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.worker_id": "07000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "f1a07fc627894917bbf5779d69a85ffc", + "runtime-id": "1dd30719f3454bab9fe0e39e8d3303ed", "span.kind": "producer", - "traceparent": "00-68b5909b00000000210ff787598ddcc3-20b8a389cc96ae50-00", - "tracestate": "dd=p:20b8a389cc96ae50;s:0" + "traceparent": "00-68c7d1a300000000752205f9970eeb29-c504ab4f33d9b0b7-00", + "tracestate": "dd=p:c504ab4f33d9b0b7;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -462,14 +497,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 3004 + "process_id": 2873 }, - "duration": 213750, - "start": 1756729502087049467 + "duration": 223000, + "start": 1757925796661264089 }, { "name": "__main__.add_one", - "service": "raysubmit_4rD8iKKmsQqFz782", + "service": "raysubmit_2EFzNjdmnchZcKtB", "resource": "__main__.add_one", "trace_id": 0, "span_id": 15, @@ -478,20 +513,23 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68b5909b00000000", - "_dd.parent_id": "e8c8298d21b7c696", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c7d1a300000000", + "_dd.parent_id": "870775b0b52f7071", "component": "ray", "language": "python", "ray.job_id": "07000000", - "ray.node_id": "6becb96e735dcf2ba000d3e36bb286965d25d5a089227457ece3adcd", - "ray.submission_id": "raysubmit_4rD8iKKmsQqFz782", + "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.submission_id": "raysubmit_2EFzNjdmnchZcKtB", + "ray.task.args": "(3,)", + "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.task_id": "b6fe777c23eaf580ffffffffffffffffffffffff07000000", - "ray.worker_id": "88cb27b2841c23c01fadaa1ddbd0645e9a1bf65f3c974fa81301bbbf", - "runtime-id": "35f089c028684a38b4175bc1e1932786", + "ray.worker_id": "ea5b521f7a6cd90eaf3d7e5b29f517b9d762b3f76184cec920b97cb0", + "runtime-id": "c4b2311241ac4ed98586f0dd0da2fd3c", "span.kind": "consumer", - "traceparent": "00-68b5909b00000000210ff787598ddcc3-e8c8298d21b7c696-00", - "tracestate": "dd=p:e8c8298d21b7c696;s:0" + "traceparent": "00-68c7d1a300000000752205f9970eeb29-870775b0b52f7071-00", + "tracestate": "dd=p:870775b0b52f7071;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -500,8 +538,8 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 3053 + "process_id": 2921 }, - "duration": 22250, - "start": 1756729504986921968 + "duration": 208833, + "start": 1757925798476907132 }]] From 8288ac6d302b8c636622903afca48e738af6db0c Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Mon, 15 Sep 2025 15:49:39 +0200 Subject: [PATCH 24/59] finalize PR --- ddtrace/contrib/internal/ray/__init__.py | 36 +++++++++++--------- ddtrace/contrib/internal/ray/hook.py | 3 +- ddtrace/contrib/internal/ray/patch.py | 24 +++++++------ ddtrace/contrib/internal/ray/span_manager.py | 21 ++++++++++-- ddtrace/contrib/internal/ray/utils.py | 3 +- docs/integrations.rst | 7 ++++ tests/contrib/ray/test_ray.py | 1 + 7 files changed, 62 insertions(+), 33 deletions(-) diff --git a/ddtrace/contrib/internal/ray/__init__.py b/ddtrace/contrib/internal/ray/__init__.py index f2219aaad16..2588e031913 100644 --- a/ddtrace/contrib/internal/ray/__init__.py +++ b/ddtrace/contrib/internal/ray/__init__.py @@ -1,42 +1,44 @@ """ -The Ray integration traces Ray jobs, tasks (remote functions), and actor method executions. - -All traces submitted from the Ray integration are tagged by: - -- ``env``, ``version``: see the `Unified Service Tagging docs `_. - -The service for Ray spans is set to the Ray job submission id to group telemetry per job. +The ray integration traces: + - Job lifetime (job submit, job run) + - Task submission and execution + - Actor method submission and execution Enabling ~~~~~~~~ The Ray integration is enabled automatically when you use :ref:`ddtrace-run` or :ref:`import ddtrace.auto`. -Alternatively, use :func:`patch() ` to manually enable the Ray integration:: + +Or use :func:`patch() ` to manually enable the Ray integration:: from ddtrace import patch patch(ray=True) +The recommended way to instrument ray, is to instrument the ray cluster. +You can do it by starting the Ray head with a tracing startup hook:: -Supported Versions -~~~~~~~~~~~~~~~~~~ - -Ray ``>=2.46.0`` + ray start --head --tracing-startup-hook=ddtrace.contrib.internal.ray.hook:setup_tracing -What is traced -~~~~~~~~~~~~~~ +Configuration +~~~~~~~~~~~~~ -- Job submission and completion (``ray.job.submit``, ``ray.job``) -- Task submission and execution (``func.remote()``, the function body) -- Actor method submission and execution (``Actor.method.remote()``, the method body) +The Ray integration can be configured using environment variables: +- ``DD_TRACE_RAY_RESUBMIT_LONG_RUNNING_INTERVAL``: Interval for resubmitting long-running + spans (default: ``10.0`` seconds) +- ``DD_TRACE_RAY_WATCH_LONG_RUNNING_DELAY``: Maxime delay before a long-running span + is sent (default: ``10.0`` seconds) Notes ~~~~~ - The integration disables Ray's built-in OpenTelemetry tracing to avoid duplicate telemetry. +- The integration filters out non-Ray dashboard spans to reduce noise. +- Actor methods like ``ping`` and ``_polling`` are excluded from tracing to reduce noise. """ + import os diff --git a/ddtrace/contrib/internal/ray/hook.py b/ddtrace/contrib/internal/ray/hook.py index 97c980d5937..5576b961e62 100644 --- a/ddtrace/contrib/internal/ray/hook.py +++ b/ddtrace/contrib/internal/ray/hook.py @@ -1,8 +1,9 @@ def setup_tracing(): - import ddtrace.auto # noqa:F401 from ray.util.tracing import tracing_helper from ray.util.tracing.tracing_helper import _is_tracing_enabled + import ddtrace.auto # noqa:F401 + tracing_helper._global_is_tracing_enabled = False if _is_tracing_enabled(): raise AssertionError("OTEL Tracing should be disabled at setup.") diff --git a/ddtrace/contrib/internal/ray/patch.py b/ddtrace/contrib/internal/ray/patch.py index ab4cdef3b10..f18f5b14701 100644 --- a/ddtrace/contrib/internal/ray/patch.py +++ b/ddtrace/contrib/internal/ray/patch.py @@ -10,6 +10,14 @@ from typing import List from typing import Optional +import ray +from ray._private.inspect_util import is_class_method +from ray._private.inspect_util import is_function_or_method +from ray._private.inspect_util import is_static_method +import ray.actor +import ray.dashboard.modules.job.job_manager +from ray.dashboard.modules.job.job_manager import generate_job_id +import ray.exceptions from wrapt import wrap_function_wrapper as _w from ddtrace import config @@ -24,18 +32,9 @@ from ddtrace.ext import SpanKind from ddtrace.ext import SpanTypes from ddtrace.internal.schema import schematize_service_name -from ddtrace.internal.utils.formats import asbool from ddtrace.internal.utils.wrappers import unwrap as _u from ddtrace.propagation.http import _TraceContext from ddtrace.settings._config import _get_config -import ray -from ray._private.inspect_util import is_class_method -from ray._private.inspect_util import is_function_or_method -from ray._private.inspect_util import is_static_method -import ray.actor -import ray.dashboard.modules.job.job_manager -from ray.dashboard.modules.job.job_manager import generate_job_id -import ray.exceptions from .span_manager import long_running_ray_span from .span_manager import start_long_running_job @@ -55,8 +54,7 @@ "ray", dict( _default_service=schematize_service_name("ray"), - ray_spans_only=asbool(_get_config("DD_TRACE_RAY_SPANS_ONLY", default=True)), - resubmit_interval=float(_get_config("DD_TRACE_RAY_RESUBMIT_LONG_RUNNING_INTERVAL", default=10.0)), + resubmit_interval=float(_get_config("DD_TRACE_RAY_RESUBMIT_LONG_RUNNING_INTERVAL", default=120.0)), watch_delay=float(_get_config("DD_TRACE_RAY_WATCH_LONG_RUNNING_DELAY", default=10.0)), ), ) @@ -79,6 +77,10 @@ def process_trace(self, trace: List[Span]) -> Optional[List[Span]]: for span in trace: if span.service == "ray.dashboard" and span.get_tag("component") != "ray": continue + + with open("ray_spans.log", "a") as f: + f.write(f"{span}\n") + if span.get_tag("component") == "ray": span.set_metric(_DJM_ENABLED_KEY, 1) span.set_metric(_FILTER_KEPT_KEY, 1) diff --git a/ddtrace/contrib/internal/ray/span_manager.py b/ddtrace/contrib/internal/ray/span_manager.py index 3c8b268e52d..42942b166ac 100644 --- a/ddtrace/contrib/internal/ray/span_manager.py +++ b/ddtrace/contrib/internal/ray/span_manager.py @@ -1,4 +1,5 @@ from contextlib import contextmanager +from itertools import chain import threading import time @@ -52,18 +53,32 @@ def _emit_partial_span(self, span): with aggregator._lock: if span.trace_id in aggregator._traces: trace = aggregator._traces[span.trace_id] - # Find and remove finished children in one pass finished_children = [] remaining_spans = [] + for s in trace.spans: if s.finished and s.span_id != span.span_id: finished_children.append(s) else: remaining_spans.append(s) trace.spans[:] = remaining_spans - # Update the finished count trace.num_finished -= len(finished_children) - tracer._span_aggregator.writer.write([partial_span] + finished_children) + + spans_to_write = [partial_span] + finished_children + + try: + spans = spans_to_write + for tp in chain( + aggregator.dd_processors, + aggregator.user_processors, + [aggregator.sampling_processor, aggregator.tags_processor, aggregator.service_name_processor], + ): + spans = tp.process_trace(spans) or [] + if not spans: + return + except Exception: + spans = spans_to_write + aggregator.writer.write(spans) def _create_resubmit_timer(self, submission_id): timer = threading.Timer(config.ray.resubmit_interval, self._resubmit_long_running_spans, args=[submission_id]) diff --git a/ddtrace/contrib/internal/ray/utils.py b/ddtrace/contrib/internal/ray/utils.py index ef0f794b83b..4d569b904f4 100644 --- a/ddtrace/contrib/internal/ray/utils.py +++ b/ddtrace/contrib/internal/ray/utils.py @@ -6,10 +6,11 @@ from typing import Callable from typing import List -from ddtrace.propagation.http import _TraceContext import ray from ray.runtime_context import get_runtime_context +from ddtrace.propagation.http import _TraceContext + def _inject_dd_trace_ctx_kwarg(method: Callable) -> Signature: old_sig = inspect.signature(method) diff --git a/docs/integrations.rst b/docs/integrations.rst index 6ec454907dc..d01f3542904 100644 --- a/docs/integrations.rst +++ b/docs/integrations.rst @@ -485,6 +485,13 @@ psycopg .. automodule:: ddtrace.contrib.internal.psycopg +.. _ray: + +Ray +^^^ +.. automodule:: ddtrace.contrib.internal.ray + + .. _redis: redis diff --git a/tests/contrib/ray/test_ray.py b/tests/contrib/ray/test_ray.py index cae77c5c473..e6217e2b644 100644 --- a/tests/contrib/ray/test_ray.py +++ b/tests/contrib/ray/test_ray.py @@ -57,6 +57,7 @@ def submit_ray_job(script_name, timeout=60): # ignore it to make the tests pass in both environments "meta._dd.base_service", "meta._dd.hostname", + "metrics._dd.partial_version", ] From 6b942e13a5202fbf748978aa5f01d4ee4d30249f Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Mon, 15 Sep 2025 16:45:40 +0200 Subject: [PATCH 25/59] fix(ray): fix tests --- ddtrace/contrib/internal/ray/patch.py | 8 +- tests/contrib/ray/test_ray.py | 5 +- ...ts.contrib.ray.test_ray.error_in_task.json | 304 ++++++------- ...trib.ray.test_ray.test_actor_and_task.json | 406 +++++++++--------- ....ray.test_ray.test_actor_interactions.json | 304 ++++++------- ...ontrib.ray.test_ray.test_nested_tasks.json | 254 +++++------ ...ontrib.ray.test_ray.test_simple_actor.json | 204 ++++----- ...contrib.ray.test_ray.test_simple_task.json | 290 ++++++------- 8 files changed, 892 insertions(+), 883 deletions(-) diff --git a/ddtrace/contrib/internal/ray/patch.py b/ddtrace/contrib/internal/ray/patch.py index f18f5b14701..40200fbde51 100644 --- a/ddtrace/contrib/internal/ray/patch.py +++ b/ddtrace/contrib/internal/ray/patch.py @@ -298,8 +298,14 @@ def _traced_run_method(self: Any, *args: Any, _dd_trace_ctx=None, **kwargs: Any) if tracer.current_span() is None: tracer.context_provider.activate(_extract_tracing_context_from_env()) + # Without this the name of the span will contain a path which will break tests + if os.environ.get("_DD_TRACE_RAY_TESTING"): + entrypoint_name = os.path.basename(self._entrypoint) + else: + entrypoint_name = self._entrypoint + with tracer.trace( - f"exec {self._entrypoint}", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.RAY + f"exec {entrypoint_name}", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.RAY ) as span: span.set_tag_str(SPAN_KIND, SpanKind.CONSUMER) _inject_ray_span_tags(span) diff --git a/tests/contrib/ray/test_ray.py b/tests/contrib/ray/test_ray.py index e6217e2b644..4d3b6031a71 100644 --- a/tests/contrib/ray/test_ray.py +++ b/tests/contrib/ray/test_ray.py @@ -7,7 +7,7 @@ from tests.utils import TracerTestCase -def submit_ray_job(script_name, timeout=60): +def submit_ray_job(script_name, timeout=120): """ Submit a Ray job @@ -68,6 +68,9 @@ class TestRayIntegration(TracerTestCase): def setUpClass(cls): super(TestRayIntegration, cls).setUpClass() + os.environ["_DD_TRACE_RAY_TESTING"] = "true" + os.environ["DD_TRACE_RAY_WATCH_LONG_RUNNING_DELAY"] = "30" + try: subprocess.run(["ray", "stop", "--force"], capture_output=True, check=False) except FileNotFoundError: diff --git a/tests/snapshots/tests.contrib.ray.test_ray.error_in_task.json b/tests/snapshots/tests.contrib.ray.test_ray.error_in_task.json index f5d0075924e..847b2729d85 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.error_in_task.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.error_in_task.json @@ -1,7 +1,7 @@ [[ { "name": "ray.job", - "service": "raysubmit_RYjaeg5Sx1tWAid5", + "service": "raysubmit_69nz2GVtHwkU9cZ4", "resource": "ray.job", "trace_id": 0, "span_id": 1, @@ -12,14 +12,14 @@ "_dd.base_service": "ray.dashboard", "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68c7d18a00000000", + "_dd.p.tid": "68c825ce00000000", "component": "ray", - "error.message": "Job entrypoint command failed with exit code 1, last available logs (truncated to 20,000 chars):\n File \"/home/bits/project/.riot/venv_py3135_mock_pytest_pytest-mock_coverage_pytest-cov_opentracing_hypothesis6451_pytest-asyncio_ray[default]~2460/lib/python3.13/site-packages/ray/_private/worker.py\", line 930, in get_objects\n raise value.as_instanceof_cause()\nray.exceptions.RayTaskError(ValueError): \u001b[36mray::add_one()\u001b[39m (pid=2165, ip=192.168.65.3)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 100, in wrapped_function\n return _wrap_task_execution(function, *args, **kwargs)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 130, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", + "error.message": "Job entrypoint command failed with exit code 1, last available logs (truncated to 20,000 chars):\n File \"/home/bits/project/.riot/venv_py3135_mock_pytest_pytest-mock_coverage_pytest-cov_opentracing_hypothesis6451_pytest-asyncio_ray[default]~2460/lib/python3.13/site-packages/ray/_private/worker.py\", line 930, in get_objects\n raise value.as_instanceof_cause()\nray.exceptions.RayTaskError(ValueError): \u001b[36mray::add_one()\u001b[39m (pid=2167, ip=192.168.65.3)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 102, in wrapped_function\n return _wrap_task_execution(function, *args, **kwargs)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 132, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", "language": "python", - "ray.job.message": "Job entrypoint command failed with exit code 1, last available logs (truncated to 20,000 chars):\n File \"/home/bits/project/.riot/venv_py3135_mock_pytest_pytest-mock_coverage_pytest-cov_opentracing_hypothesis6451_pytest-asyncio_ray[default]~2460/lib/python3.13/site-packages/ray/_private/worker.py\", line 930, in get_objects\n raise value.as_instanceof_cause()\nray.exceptions.RayTaskError(ValueError): \u001b[36mray::add_one()\u001b[39m (pid=2165, ip=192.168.65.3)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 100, in wrapped_function\n return _wrap_task_execution(function, *args, **kwargs)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 130, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", + "ray.job.message": "Job entrypoint command failed with exit code 1, last available logs (truncated to 20,000 chars):\n File \"/home/bits/project/.riot/venv_py3135_mock_pytest_pytest-mock_coverage_pytest-cov_opentracing_hypothesis6451_pytest-asyncio_ray[default]~2460/lib/python3.13/site-packages/ray/_private/worker.py\", line 930, in get_objects\n raise value.as_instanceof_cause()\nray.exceptions.RayTaskError(ValueError): \u001b[36mray::add_one()\u001b[39m (pid=2167, ip=192.168.65.3)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 102, in wrapped_function\n return _wrap_task_execution(function, *args, **kwargs)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 132, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", "ray.job.status": "FAILED", - "ray.submission_id": "raysubmit_RYjaeg5Sx1tWAid5", - "runtime-id": "bfdf74988ffd4419aabda8fe7dddaa45" + "ray.submission_id": "raysubmit_69nz2GVtHwkU9cZ4", + "runtime-id": "5ce8e7e7cd4b4680ba2a0c60c2b62ea4" }, "metrics": { "_dd.djm.enabled": 1, @@ -30,12 +30,12 @@ "_sampling_priority_v1": 2, "process_id": 1038 }, - "duration": 6875423128, - "start": 1757925770450148966 + "duration": 6890185920, + "start": 1757947342631845129 }, { "name": "ray.job.submit", - "service": "raysubmit_RYjaeg5Sx1tWAid5", + "service": "raysubmit_69nz2GVtHwkU9cZ4", "resource": "ray.job.submit", "trace_id": 0, "span_id": 2, @@ -55,12 +55,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 33417, - "start": 1757925770450315341 + "duration": 31916, + "start": 1757947342631995338 }, { "name": "JobSupervisor.run.remote()", - "service": "raysubmit_RYjaeg5Sx1tWAid5", + "service": "raysubmit_69nz2GVtHwkU9cZ4", "resource": "JobSupervisor.run.remote()", "trace_id": 0, "span_id": 3, @@ -74,7 +74,7 @@ "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{'_start_signal_actor': None, 'resources_specified': False}", "ray.job_id": "01000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "producer" }, @@ -84,12 +84,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 454292, - "start": 1757925770453630841 + "duration": 285875, + "start": 1757947342635148963 }, { "name": "JobSupervisor.run", - "service": "raysubmit_RYjaeg5Sx1tWAid5", + "service": "raysubmit_69nz2GVtHwkU9cZ4", "resource": "JobSupervisor.run", "trace_id": 0, "span_id": 4, @@ -99,23 +99,23 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d18a00000000", - "_dd.parent_id": "0f76496e60a10b85", + "_dd.p.tid": "68c825ce00000000", + "_dd.parent_id": "ce138840a7e0a516", "component": "ray", "error.message": "", - "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 23, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 283, in _traced_run_method\n raise e\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 276, in _traced_run_method\n await method(self, *args, **kwargs)\n File \"/home/bits/project/.riot/venv_py3135_mock_pytest_pytest-mock_coverage_pytest-cov_opentracing_hypothesis6451_pytest-asyncio_ray[default]~2460/lib/python3.13/site-packages/ray/dashboard/modules/job/job_supervisor.py\", line 474, in run\n ray.actor.exit_actor()\n ~~~~~~~~~~~~~~~~~~~~^^\n File \"/home/bits/project/.riot/venv_py3135_mock_pytest_pytest-mock_coverage_pytest-cov_opentracing_hypothesis6451_pytest-asyncio_ray[default]~2460/lib/python3.13/site-packages/ray/actor.py\", line 1806, in exit_actor\n raise AsyncioActorExit()\nray.exceptions.AsyncioActorExit\n", + "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 24, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 285, in _traced_run_method\n raise e\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 278, in _traced_run_method\n await method(self, *args, **kwargs)\n File \"/home/bits/project/.riot/venv_py3135_mock_pytest_pytest-mock_coverage_pytest-cov_opentracing_hypothesis6451_pytest-asyncio_ray[default]~2460/lib/python3.13/site-packages/ray/dashboard/modules/job/job_supervisor.py\", line 474, in run\n ray.actor.exit_actor()\n ~~~~~~~~~~~~~~~~~~~~^^\n File \"/home/bits/project/.riot/venv_py3135_mock_pytest_pytest-mock_coverage_pytest-cov_opentracing_hypothesis6451_pytest-asyncio_ray[default]~2460/lib/python3.13/site-packages/ray/actor.py\", line 1806, in exit_actor\n raise AsyncioActorExit()\nray.exceptions.AsyncioActorExit\n", "error.type": "ray.exceptions.AsyncioActorExit", "language": "python", - "ray.actor_id": "cede0f7dea42f9072a43471901000000", + "ray.actor_id": "a20d2caefba6f04d600dc4a201000000", "ray.job_id": "01000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_RYjaeg5Sx1tWAid5", - "ray.task_id": "71b133a11e1c461ccede0f7dea42f9072a43471901000000", - "ray.worker_id": "17f845583f03241dd5c5e1b786a001bdd42731937476626dacbaa174", - "runtime-id": "eff2d76c0b6f448e91ed04889e259fd8", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_69nz2GVtHwkU9cZ4", + "ray.task_id": "5d4b8d1788f12d2da20d2caefba6f04d600dc4a201000000", + "ray.worker_id": "a7874bc1a89eba761af1ea6c7de70ce4f624b5777c522de9bedf6c8c", + "runtime-id": "8c6d959231bd492daac0f9652be0084e", "span.kind": "consumer", - "traceparent": "00-68c7d18a00000000e6c9b446d2cfd595-0f76496e60a10b85-00", - "tracestate": "dd=p:0f76496e60a10b85" + "traceparent": "00-68c825ce000000009e7d164345e570f8-ce138840a7e0a516-00", + "tracestate": "dd=p:ce138840a7e0a516" }, "metrics": { "_dd.djm.enabled": 1, @@ -124,14 +124,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2070 + "process_id": 2072 }, - "duration": 5669977044, - "start": 1757925771290297675 + "duration": 5362781252, + "start": 1757947343485091380 }, { "name": "JobSupervisor._get_driver_env_vars", - "service": "raysubmit_RYjaeg5Sx1tWAid5", + "service": "raysubmit_69nz2GVtHwkU9cZ4", "resource": "JobSupervisor._get_driver_env_vars", "trace_id": 0, "span_id": 5, @@ -142,14 +142,14 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "cede0f7dea42f9072a43471901000000", + "ray.actor_id": "a20d2caefba6f04d600dc4a201000000", "ray.actor_method.args": "(False,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_RYjaeg5Sx1tWAid5", - "ray.task_id": "71b133a11e1c461ccede0f7dea42f9072a43471901000000", - "ray.worker_id": "17f845583f03241dd5c5e1b786a001bdd42731937476626dacbaa174", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_69nz2GVtHwkU9cZ4", + "ray.task_id": "5d4b8d1788f12d2da20d2caefba6f04d600dc4a201000000", + "ray.worker_id": "a7874bc1a89eba761af1ea6c7de70ce4f624b5777c522de9bedf6c8c", "span.kind": "consumer" }, "metrics": { @@ -158,12 +158,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 1866459, - "start": 1757925771291794341 + "duration": 1661292, + "start": 1757947343486684713 }, { "name": "JobSupervisor._get_driver_runtime_env", - "service": "raysubmit_RYjaeg5Sx1tWAid5", + "service": "raysubmit_69nz2GVtHwkU9cZ4", "resource": "JobSupervisor._get_driver_runtime_env", "trace_id": 0, "span_id": 11, @@ -174,14 +174,14 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "cede0f7dea42f9072a43471901000000", + "ray.actor_id": "a20d2caefba6f04d600dc4a201000000", "ray.actor_method.args": "(False,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_RYjaeg5Sx1tWAid5", - "ray.task_id": "71b133a11e1c461ccede0f7dea42f9072a43471901000000", - "ray.worker_id": "17f845583f03241dd5c5e1b786a001bdd42731937476626dacbaa174", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_69nz2GVtHwkU9cZ4", + "ray.task_id": "5d4b8d1788f12d2da20d2caefba6f04d600dc4a201000000", + "ray.worker_id": "a7874bc1a89eba761af1ea6c7de70ce4f624b5777c522de9bedf6c8c", "span.kind": "consumer" }, "metrics": { @@ -190,13 +190,13 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 170833, - "start": 1757925771293453383 + "duration": 152292, + "start": 1757947343488169296 }, { - "name": "exec python /home/bits/project/tests/contrib/ray/jobs/error_in_task.py", - "service": "raysubmit_RYjaeg5Sx1tWAid5", - "resource": "exec python /home/bits/project/tests/contrib/ray/jobs/error_in_task.py", + "name": "exec error_in_task.py", + "service": "raysubmit_69nz2GVtHwkU9cZ4", + "resource": "exec error_in_task.py", "trace_id": 0, "span_id": 6, "parent_id": 4, @@ -206,12 +206,12 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "cede0f7dea42f9072a43471901000000", + "ray.actor_id": "a20d2caefba6f04d600dc4a201000000", "ray.job_id": "01000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_RYjaeg5Sx1tWAid5", - "ray.task_id": "71b133a11e1c461ccede0f7dea42f9072a43471901000000", - "ray.worker_id": "17f845583f03241dd5c5e1b786a001bdd42731937476626dacbaa174", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_69nz2GVtHwkU9cZ4", + "ray.task_id": "5d4b8d1788f12d2da20d2caefba6f04d600dc4a201000000", + "ray.worker_id": "a7874bc1a89eba761af1ea6c7de70ce4f624b5777c522de9bedf6c8c", "span.kind": "consumer" }, "metrics": { @@ -220,12 +220,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 482792, - "start": 1757925771293859966 + "duration": 415833, + "start": 1757947343488477088 }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_RYjaeg5Sx1tWAid5", + "service": "raysubmit_69nz2GVtHwkU9cZ4", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 7, @@ -235,21 +235,21 @@ "meta": { "_dd.base_service": "project", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d18a00000000", - "_dd.parent_id": "87dbc5bbd2cf3b51", + "_dd.p.tid": "68c825ce00000000", + "_dd.parent_id": "e7b9af51bc58b314", "component": "ray", "language": "python", "ray.job_id": "04000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_RYjaeg5Sx1tWAid5", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_69nz2GVtHwkU9cZ4", "ray.task.args": "(0,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.worker_id": "04000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "16fb93c1a270442f80cddd2aeb52e823", + "runtime-id": "dc3b52b4541c4d14a19a56e24883616b", "span.kind": "producer", - "traceparent": "00-68c7d18a00000000e6c9b446d2cfd595-87dbc5bbd2cf3b51-00", - "tracestate": "dd=p:87dbc5bbd2cf3b51;s:0" + "traceparent": "00-68c825ce000000009e7d164345e570f8-e7b9af51bc58b314-00", + "tracestate": "dd=p:e7b9af51bc58b314;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -258,14 +258,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2120 + "process_id": 2122 }, - "duration": 3102125, - "start": 1757925771875365883 + "duration": 3072750, + "start": 1757947344098265880 }, { "name": "__main__.add_one", - "service": "raysubmit_RYjaeg5Sx1tWAid5", + "service": "raysubmit_69nz2GVtHwkU9cZ4", "resource": "__main__.add_one", "trace_id": 0, "span_id": 12, @@ -275,25 +275,25 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d18a00000000", - "_dd.parent_id": "cf218b99a3c30477", + "_dd.p.tid": "68c825ce00000000", + "_dd.parent_id": "6f511b5d20278032", "component": "ray", "error.message": "foo", - "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 23, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 130, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", + "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 24, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 132, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", "error.type": "builtins.ValueError", "language": "python", "ray.job_id": "04000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_RYjaeg5Sx1tWAid5", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_69nz2GVtHwkU9cZ4", "ray.task.args": "(0,)", "ray.task.kwargs": "{}", "ray.task.status": "error", "ray.task_id": "ca80f3a8e8ba2e50ffffffffffffffffffffffff04000000", - "ray.worker_id": "252b08084730b0301292d7e06a73d30645614102fc155ec63cb8c10d", - "runtime-id": "b265e1d513594da49f7b2737da63ce3c", + "ray.worker_id": "0bae3064224a59e20421b25723b380ab3ac5ac083e8b201bd23f18d5", + "runtime-id": "ae10f2d960314a588c352e2adf462f19", "span.kind": "consumer", - "traceparent": "00-68c7d18a00000000e6c9b446d2cfd595-cf218b99a3c30477-00", - "tracestate": "dd=p:cf218b99a3c30477;s:0" + "traceparent": "00-68c825ce000000009e7d164345e570f8-6f511b5d20278032-00", + "tracestate": "dd=p:6f511b5d20278032;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -302,14 +302,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2165 + "process_id": 2167 }, - "duration": 3235625, - "start": 1757925773689146718 + "duration": 3739583, + "start": 1757947345846102673 }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_RYjaeg5Sx1tWAid5", + "service": "raysubmit_69nz2GVtHwkU9cZ4", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 8, @@ -319,21 +319,21 @@ "meta": { "_dd.base_service": "project", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d18a00000000", - "_dd.parent_id": "87dbc5bbd2cf3b51", + "_dd.p.tid": "68c825ce00000000", + "_dd.parent_id": "e7b9af51bc58b314", "component": "ray", "language": "python", "ray.job_id": "04000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_RYjaeg5Sx1tWAid5", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_69nz2GVtHwkU9cZ4", "ray.task.args": "(1,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.worker_id": "04000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "16fb93c1a270442f80cddd2aeb52e823", + "runtime-id": "dc3b52b4541c4d14a19a56e24883616b", "span.kind": "producer", - "traceparent": "00-68c7d18a00000000e6c9b446d2cfd595-87dbc5bbd2cf3b51-00", - "tracestate": "dd=p:87dbc5bbd2cf3b51;s:0" + "traceparent": "00-68c825ce000000009e7d164345e570f8-e7b9af51bc58b314-00", + "tracestate": "dd=p:e7b9af51bc58b314;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -342,14 +342,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2120 + "process_id": 2122 }, - "duration": 189833, - "start": 1757925771880668425 + "duration": 228917, + "start": 1757947344104082213 }, { "name": "__main__.add_one", - "service": "raysubmit_RYjaeg5Sx1tWAid5", + "service": "raysubmit_69nz2GVtHwkU9cZ4", "resource": "__main__.add_one", "trace_id": 0, "span_id": 13, @@ -359,25 +359,25 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d18a00000000", - "_dd.parent_id": "4cd1715847285d15", + "_dd.p.tid": "68c825ce00000000", + "_dd.parent_id": "4c29b261689f2f09", "component": "ray", "error.message": "foo", - "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 23, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 130, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", + "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 24, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 132, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", "error.type": "builtins.ValueError", "language": "python", "ray.job_id": "04000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_RYjaeg5Sx1tWAid5", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_69nz2GVtHwkU9cZ4", "ray.task.args": "(1,)", "ray.task.kwargs": "{}", "ray.task.status": "error", "ray.task_id": "d8c1ad1586102897ffffffffffffffffffffffff04000000", - "ray.worker_id": "404f6a40d1957e8a7d0d4808c600a8f2c4f655c9fa1bb3f0bf515428", - "runtime-id": "a4231a7735ec411e93ca1a0d892aee52", + "ray.worker_id": "ea835ee925f30897aff62407d5ee493c16becddd3b6a175e1a26c2b8", + "runtime-id": "e3355e8c56c34407afbead9deb054f9d", "span.kind": "consumer", - "traceparent": "00-68c7d18a00000000e6c9b446d2cfd595-4cd1715847285d15-00", - "tracestate": "dd=p:4cd1715847285d15;s:0" + "traceparent": "00-68c825ce000000009e7d164345e570f8-4c29b261689f2f09-00", + "tracestate": "dd=p:4c29b261689f2f09;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -386,14 +386,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2168 + "process_id": 2170 }, - "duration": 2319916, - "start": 1757925773690969968 + "duration": 3043250, + "start": 1757947345904988964 }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_RYjaeg5Sx1tWAid5", + "service": "raysubmit_69nz2GVtHwkU9cZ4", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 9, @@ -403,21 +403,21 @@ "meta": { "_dd.base_service": "project", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d18a00000000", - "_dd.parent_id": "87dbc5bbd2cf3b51", + "_dd.p.tid": "68c825ce00000000", + "_dd.parent_id": "e7b9af51bc58b314", "component": "ray", "language": "python", "ray.job_id": "04000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_RYjaeg5Sx1tWAid5", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_69nz2GVtHwkU9cZ4", "ray.task.args": "(2,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.worker_id": "04000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "16fb93c1a270442f80cddd2aeb52e823", + "runtime-id": "dc3b52b4541c4d14a19a56e24883616b", "span.kind": "producer", - "traceparent": "00-68c7d18a00000000e6c9b446d2cfd595-87dbc5bbd2cf3b51-00", - "tracestate": "dd=p:87dbc5bbd2cf3b51;s:0" + "traceparent": "00-68c825ce000000009e7d164345e570f8-e7b9af51bc58b314-00", + "tracestate": "dd=p:e7b9af51bc58b314;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -426,14 +426,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2120 + "process_id": 2122 }, - "duration": 183750, - "start": 1757925771882680258 + "duration": 153042, + "start": 1757947344106502713 }, { "name": "__main__.add_one", - "service": "raysubmit_RYjaeg5Sx1tWAid5", + "service": "raysubmit_69nz2GVtHwkU9cZ4", "resource": "__main__.add_one", "trace_id": 0, "span_id": 14, @@ -443,25 +443,25 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d18a00000000", - "_dd.parent_id": "1b91ca2651a95fd5", + "_dd.p.tid": "68c825ce00000000", + "_dd.parent_id": "29146727f854042f", "component": "ray", "error.message": "foo", - "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 23, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 130, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", + "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 24, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 132, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", "error.type": "builtins.ValueError", "language": "python", "ray.job_id": "04000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_RYjaeg5Sx1tWAid5", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_69nz2GVtHwkU9cZ4", "ray.task.args": "(2,)", "ray.task.kwargs": "{}", "ray.task.status": "error", "ray.task_id": "5da13aa9e2150759ffffffffffffffffffffffff04000000", - "ray.worker_id": "5a84507e46977c5717ad3050a61a73280fa88742f94b9b6f681599ab", - "runtime-id": "0080c088054d4495b0dd631679e29c0b", + "ray.worker_id": "a332f48310c4c2a3876dc55d8be1b2a7da0b2a5823aff2be96650da5", + "runtime-id": "2ccf5771551242418902aaf50b7ad262", "span.kind": "consumer", - "traceparent": "00-68c7d18a00000000e6c9b446d2cfd595-1b91ca2651a95fd5-00", - "tracestate": "dd=p:1b91ca2651a95fd5;s:0" + "traceparent": "00-68c825ce000000009e7d164345e570f8-29146727f854042f-00", + "tracestate": "dd=p:29146727f854042f;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -470,14 +470,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2167 + "process_id": 2169 }, - "duration": 2784792, - "start": 1757925773715809426 + "duration": 4276834, + "start": 1757947345901689964 }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_RYjaeg5Sx1tWAid5", + "service": "raysubmit_69nz2GVtHwkU9cZ4", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 10, @@ -487,21 +487,21 @@ "meta": { "_dd.base_service": "project", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d18a00000000", - "_dd.parent_id": "87dbc5bbd2cf3b51", + "_dd.p.tid": "68c825ce00000000", + "_dd.parent_id": "e7b9af51bc58b314", "component": "ray", "language": "python", "ray.job_id": "04000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_RYjaeg5Sx1tWAid5", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_69nz2GVtHwkU9cZ4", "ray.task.args": "(3,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.worker_id": "04000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "16fb93c1a270442f80cddd2aeb52e823", + "runtime-id": "dc3b52b4541c4d14a19a56e24883616b", "span.kind": "producer", - "traceparent": "00-68c7d18a00000000e6c9b446d2cfd595-87dbc5bbd2cf3b51-00", - "tracestate": "dd=p:87dbc5bbd2cf3b51;s:0" + "traceparent": "00-68c825ce000000009e7d164345e570f8-e7b9af51bc58b314-00", + "tracestate": "dd=p:e7b9af51bc58b314;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -510,14 +510,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2120 + "process_id": 2122 }, - "duration": 190292, - "start": 1757925771884719175 + "duration": 188375, + "start": 1757947344108044713 }, { "name": "__main__.add_one", - "service": "raysubmit_RYjaeg5Sx1tWAid5", + "service": "raysubmit_69nz2GVtHwkU9cZ4", "resource": "__main__.add_one", "trace_id": 0, "span_id": 15, @@ -527,25 +527,25 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d18a00000000", - "_dd.parent_id": "67461fb78229a540", + "_dd.p.tid": "68c825ce00000000", + "_dd.parent_id": "63786a36a411a665", "component": "ray", "error.message": "foo", - "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 23, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 130, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", + "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 24, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 132, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", "error.type": "builtins.ValueError", "language": "python", "ray.job_id": "04000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_RYjaeg5Sx1tWAid5", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_69nz2GVtHwkU9cZ4", "ray.task.args": "(3,)", "ray.task.kwargs": "{}", "ray.task.status": "error", "ray.task_id": "011ae9488efe4e25ffffffffffffffffffffffff04000000", - "ray.worker_id": "162534bb65935bc0b0b810762d7135dfd1cb82c2e0055b1a1133b088", - "runtime-id": "589746ab50364cec9c7ab3ab22dd8760", + "ray.worker_id": "79af11420a51becae2df2569d19bbed115a4cff8487c78f0f50c7a39", + "runtime-id": "f98fdd4d2f3c413baadb6816245e3857", "span.kind": "consumer", - "traceparent": "00-68c7d18a00000000e6c9b446d2cfd595-67461fb78229a540-00", - "tracestate": "dd=p:67461fb78229a540;s:0" + "traceparent": "00-68c825ce000000009e7d164345e570f8-63786a36a411a665-00", + "tracestate": "dd=p:63786a36a411a665;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -554,8 +554,8 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2166 + "process_id": 2168 }, - "duration": 2600791, - "start": 1757925773714417343 + "duration": 3705250, + "start": 1757947345894277964 }]] diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_actor_and_task.json b/tests/snapshots/tests.contrib.ray.test_ray.test_actor_and_task.json index 9ef9bd58618..94736581a81 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_actor_and_task.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_actor_and_task.json @@ -1,7 +1,7 @@ [[ { "name": "ray.job", - "service": "raysubmit_QGhgeswe7DKPUFh4", + "service": "raysubmit_DUD4srJTp9e5MFFw", "resource": "ray.job", "trace_id": 0, "span_id": 1, @@ -12,13 +12,13 @@ "_dd.base_service": "ray.dashboard", "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68c7d17a00000000", + "_dd.p.tid": "68c825be00000000", "component": "ray", "language": "python", "ray.job.message": "Job finished successfully.", "ray.job.status": "SUCCEEDED", - "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", - "runtime-id": "bfdf74988ffd4419aabda8fe7dddaa45" + "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", + "runtime-id": "5ce8e7e7cd4b4680ba2a0c60c2b62ea4" }, "metrics": { "_dd.djm.enabled": 1, @@ -29,12 +29,12 @@ "_sampling_priority_v1": 2, "process_id": 1038 }, - "duration": 6101456461, - "start": 1757925754173199500 + "duration": 7114693697, + "start": 1757947326355395011 }, { "name": "ray.job.submit", - "service": "raysubmit_QGhgeswe7DKPUFh4", + "service": "raysubmit_DUD4srJTp9e5MFFw", "resource": "ray.job.submit", "trace_id": 0, "span_id": 2, @@ -54,12 +54,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 47666, - "start": 1757925754173380042 + "duration": 54334, + "start": 1757947326355630719 }, { "name": "JobSupervisor.run.remote()", - "service": "raysubmit_QGhgeswe7DKPUFh4", + "service": "raysubmit_DUD4srJTp9e5MFFw", "resource": "JobSupervisor.run.remote()", "trace_id": 0, "span_id": 3, @@ -73,7 +73,7 @@ "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{'_start_signal_actor': None, 'resources_specified': False}", "ray.job_id": "01000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "producer" }, @@ -83,12 +83,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 278458, - "start": 1757925754213448000 + "duration": 414042, + "start": 1757947326411225969 }, { "name": "JobSupervisor.run", - "service": "raysubmit_QGhgeswe7DKPUFh4", + "service": "raysubmit_DUD4srJTp9e5MFFw", "resource": "JobSupervisor.run", "trace_id": 0, "span_id": 4, @@ -98,20 +98,20 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d17a00000000", - "_dd.parent_id": "68cf28a2fab3756f", + "_dd.p.tid": "68c825be00000000", + "_dd.parent_id": "8d429e830bed2653", "component": "ray", "language": "python", - "ray.actor_id": "36a93d54a0837248a59f1c8a01000000", + "ray.actor_id": "fb0700a53d35e3c884c88f8a01000000", "ray.job_id": "01000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", - "ray.task_id": "16310a0f0a45af5c36a93d54a0837248a59f1c8a01000000", - "ray.worker_id": "1a0317429b3f8ebaf76db9d3ad8d63780a4c6b8daec711d08d0df3ab", - "runtime-id": "6eb7da2b3ee14cf8ad8246e318ff9436", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", + "ray.task_id": "16310a0f0a45af5cfb0700a53d35e3c884c88f8a01000000", + "ray.worker_id": "d98abbb8235ab090553b5a7e8ce5e6855350537f26b86c260510c24e", + "runtime-id": "9d4ce545908942c794e0ac244c67cc12", "span.kind": "consumer", - "traceparent": "00-68c7d17a00000000457b3aa9298c617f-68cf28a2fab3756f-00", - "tracestate": "dd=p:68cf28a2fab3756f" + "traceparent": "00-68c825be00000000c97e302fbc8d6554-8d429e830bed2653-00", + "tracestate": "dd=p:8d429e830bed2653" }, "metrics": { "_dd.djm.enabled": 1, @@ -122,12 +122,12 @@ "_sampling_priority_v1": 2, "process_id": 1466 }, - "duration": 4457057169, - "start": 1757925755252837917 + "duration": 5058596780, + "start": 1757947327428065470 }, { "name": "JobSupervisor._get_driver_env_vars", - "service": "raysubmit_QGhgeswe7DKPUFh4", + "service": "raysubmit_DUD4srJTp9e5MFFw", "resource": "JobSupervisor._get_driver_env_vars", "trace_id": 0, "span_id": 5, @@ -138,14 +138,14 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "36a93d54a0837248a59f1c8a01000000", + "ray.actor_id": "fb0700a53d35e3c884c88f8a01000000", "ray.actor_method.args": "(False,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", - "ray.task_id": "16310a0f0a45af5c36a93d54a0837248a59f1c8a01000000", - "ray.worker_id": "1a0317429b3f8ebaf76db9d3ad8d63780a4c6b8daec711d08d0df3ab", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", + "ray.task_id": "16310a0f0a45af5cfb0700a53d35e3c884c88f8a01000000", + "ray.worker_id": "d98abbb8235ab090553b5a7e8ce5e6855350537f26b86c260510c24e", "span.kind": "consumer" }, "metrics": { @@ -154,12 +154,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 1721917, - "start": 1757925755254333042 + "duration": 1899958, + "start": 1757947327429467428 }, { "name": "JobSupervisor._get_driver_runtime_env", - "service": "raysubmit_QGhgeswe7DKPUFh4", + "service": "raysubmit_DUD4srJTp9e5MFFw", "resource": "JobSupervisor._get_driver_runtime_env", "trace_id": 0, "span_id": 8, @@ -170,14 +170,14 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "36a93d54a0837248a59f1c8a01000000", + "ray.actor_id": "fb0700a53d35e3c884c88f8a01000000", "ray.actor_method.args": "(False,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", - "ray.task_id": "16310a0f0a45af5c36a93d54a0837248a59f1c8a01000000", - "ray.worker_id": "1a0317429b3f8ebaf76db9d3ad8d63780a4c6b8daec711d08d0df3ab", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", + "ray.task_id": "16310a0f0a45af5cfb0700a53d35e3c884c88f8a01000000", + "ray.worker_id": "d98abbb8235ab090553b5a7e8ce5e6855350537f26b86c260510c24e", "span.kind": "consumer" }, "metrics": { @@ -186,13 +186,13 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 175041, - "start": 1757925755255849959 + "duration": 174833, + "start": 1757947327431031970 }, { - "name": "exec python /home/bits/project/tests/contrib/ray/jobs/actor_and_task.py", - "service": "raysubmit_QGhgeswe7DKPUFh4", - "resource": "exec python /home/bits/project/tests/contrib/ray/jobs/actor_and_task.py", + "name": "exec actor_and_task.py", + "service": "raysubmit_DUD4srJTp9e5MFFw", + "resource": "exec actor_and_task.py", "trace_id": 0, "span_id": 6, "parent_id": 4, @@ -202,12 +202,12 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "36a93d54a0837248a59f1c8a01000000", + "ray.actor_id": "fb0700a53d35e3c884c88f8a01000000", "ray.job_id": "01000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", - "ray.task_id": "16310a0f0a45af5c36a93d54a0837248a59f1c8a01000000", - "ray.worker_id": "1a0317429b3f8ebaf76db9d3ad8d63780a4c6b8daec711d08d0df3ab", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", + "ray.task_id": "16310a0f0a45af5cfb0700a53d35e3c884c88f8a01000000", + "ray.worker_id": "d98abbb8235ab090553b5a7e8ce5e6855350537f26b86c260510c24e", "span.kind": "consumer" }, "metrics": { @@ -216,12 +216,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 451042, - "start": 1757925755256199542 + "duration": 539541, + "start": 1757947327431626845 }, { "name": "ComputationManager.compute_and_store.remote()", - "service": "raysubmit_QGhgeswe7DKPUFh4", + "service": "raysubmit_DUD4srJTp9e5MFFw", "resource": "ComputationManager.compute_and_store.remote()", "trace_id": 0, "span_id": 7, @@ -231,20 +231,20 @@ "meta": { "_dd.base_service": "project", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d17a00000000", - "_dd.parent_id": "89ac784e9fb44887", + "_dd.p.tid": "68c825be00000000", + "_dd.parent_id": "4bc0885803b566d1", "component": "ray", "language": "python", "ray.actor_method.args": "([2, 3, 4],)", "ray.actor_method.kwargs": "{}", "ray.job_id": "02000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", "ray.worker_id": "02000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "ecb68b2c8da349eaa377e04a5c572c89", + "runtime-id": "ba3214c397604acfa142f56868160ce6", "span.kind": "producer", - "traceparent": "00-68c7d17a00000000457b3aa9298c617f-89ac784e9fb44887-00", - "tracestate": "dd=p:89ac784e9fb44887;s:0" + "traceparent": "00-68c825be00000000c97e302fbc8d6554-4bc0885803b566d1-00", + "tracestate": "dd=p:4bc0885803b566d1;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -253,14 +253,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1519 + "process_id": 1518 }, - "duration": 327959, - "start": 1757925755898379917 + "duration": 519292, + "start": 1757947328092758553 }, { "name": "ComputationManager.compute_and_store", - "service": "raysubmit_QGhgeswe7DKPUFh4", + "service": "raysubmit_DUD4srJTp9e5MFFw", "resource": "ComputationManager.compute_and_store", "trace_id": 0, "span_id": 9, @@ -270,22 +270,22 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d17a00000000", - "_dd.parent_id": "76f884ac1427f0ac", + "_dd.p.tid": "68c825be00000000", + "_dd.parent_id": "52c1e112f1dd8e7b", "component": "ray", "language": "python", - "ray.actor_id": "fe76678de8512d216e292b1b02000000", + "ray.actor_id": "5479a858f3bc9f0a430120a502000000", "ray.actor_method.args": "([2, 3, 4],)", "ray.actor_method.kwargs": "{}", "ray.job_id": "02000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", - "ray.task_id": "e082c90ab8422b00fe76678de8512d216e292b1b02000000", - "ray.worker_id": "8559fbe1cdfdf0b5e4b1b2aa3c2399def907cd17df14d2ea07bda40b", - "runtime-id": "5501250998114309af5ba6c935a59f7e", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", + "ray.task_id": "e082c90ab8422b005479a858f3bc9f0a430120a502000000", + "ray.worker_id": "fc417a9b8c988b0612369fd814a055e3fc6d57354d9370bc85af1a17", + "runtime-id": "b69887e96af0434a96e67ddece5ecaf1", "span.kind": "consumer", - "traceparent": "00-68c7d17a00000000457b3aa9298c617f-76f884ac1427f0ac-00", - "tracestate": "dd=p:76f884ac1427f0ac;s:0" + "traceparent": "00-68c825be00000000c97e302fbc8d6554-52c1e112f1dd8e7b-00", + "tracestate": "dd=p:52c1e112f1dd8e7b;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -296,12 +296,12 @@ "_sampling_priority_v1": 2, "process_id": 1564 }, - "duration": 2736819043, - "start": 1757925756713713126 + "duration": 2902640085, + "start": 1757947329045475554 }, { "name": "ComputationManager.increment_count", - "service": "raysubmit_QGhgeswe7DKPUFh4", + "service": "raysubmit_DUD4srJTp9e5MFFw", "resource": "ComputationManager.increment_count", "trace_id": 0, "span_id": 10, @@ -312,14 +312,14 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "fe76678de8512d216e292b1b02000000", + "ray.actor_id": "5479a858f3bc9f0a430120a502000000", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", "ray.job_id": "02000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", - "ray.task_id": "e082c90ab8422b00fe76678de8512d216e292b1b02000000", - "ray.worker_id": "8559fbe1cdfdf0b5e4b1b2aa3c2399def907cd17df14d2ea07bda40b", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", + "ray.task_id": "e082c90ab8422b005479a858f3bc9f0a430120a502000000", + "ray.worker_id": "fc417a9b8c988b0612369fd814a055e3fc6d57354d9370bc85af1a17", "span.kind": "consumer" }, "metrics": { @@ -328,12 +328,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 129167, - "start": 1757925756713938251 + "duration": 122375, + "start": 1757947329045675262 }, { "name": "__main__.batch_compute.remote()", - "service": "raysubmit_QGhgeswe7DKPUFh4", + "service": "raysubmit_DUD4srJTp9e5MFFw", "resource": "__main__.batch_compute.remote()", "trace_id": 0, "span_id": 11, @@ -344,15 +344,15 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "fe76678de8512d216e292b1b02000000", + "ray.actor_id": "5479a858f3bc9f0a430120a502000000", "ray.job_id": "02000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", "ray.task.args": "([2, 3, 4],)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", - "ray.task_id": "e082c90ab8422b00fe76678de8512d216e292b1b02000000", - "ray.worker_id": "8559fbe1cdfdf0b5e4b1b2aa3c2399def907cd17df14d2ea07bda40b", + "ray.task_id": "e082c90ab8422b005479a858f3bc9f0a430120a502000000", + "ray.worker_id": "fc417a9b8c988b0612369fd814a055e3fc6d57354d9370bc85af1a17", "span.kind": "producer" }, "metrics": { @@ -361,12 +361,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 1591083, - "start": 1757925756714128793 + "duration": 1639000, + "start": 1757947329045857637 }, { "name": "__main__.batch_compute", - "service": "raysubmit_QGhgeswe7DKPUFh4", + "service": "raysubmit_DUD4srJTp9e5MFFw", "resource": "__main__.batch_compute", "trace_id": 0, "span_id": 17, @@ -376,22 +376,22 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d17a00000000", - "_dd.parent_id": "70e3bfa618d48a72", + "_dd.p.tid": "68c825be00000000", + "_dd.parent_id": "d50629645c99b2bb", "component": "ray", "language": "python", "ray.job_id": "02000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", "ray.task.args": "([2, 3, 4],)", "ray.task.kwargs": "{}", "ray.task.status": "success", - "ray.task_id": "d17195bf51ec17c4ffffffffffffffffffffffff02000000", - "ray.worker_id": "4993f6a4de32a4828616902cd116580a4dbd6d209668608d14bf20a0", - "runtime-id": "71833fff90904decb3a2527d28baab1d", + "ray.task_id": "cf9678e695079bccffffffffffffffffffffffff02000000", + "ray.worker_id": "9db8f9790664f454d9f5c59fae9d70d66a57d11c10eab737f06b4f4a", + "runtime-id": "aedbc23f3fdd4ce7acd1ec3093e9e935", "span.kind": "consumer", - "traceparent": "00-68c7d17a00000000457b3aa9298c617f-70e3bfa618d48a72-00", - "tracestate": "dd=p:70e3bfa618d48a72;s:0" + "traceparent": "00-68c825be00000000c97e302fbc8d6554-d50629645c99b2bb-00", + "tracestate": "dd=p:d50629645c99b2bb;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -402,12 +402,12 @@ "_sampling_priority_v1": 2, "process_id": 1630 }, - "duration": 1847796500, - "start": 1757925757596021002 + "duration": 1910410668, + "start": 1757947330032243679 }, { "name": "__main__.compute_value.remote()", - "service": "raysubmit_QGhgeswe7DKPUFh4", + "service": "raysubmit_DUD4srJTp9e5MFFw", "resource": "__main__.compute_value.remote()", "trace_id": 0, "span_id": 18, @@ -419,13 +419,13 @@ "_dd.hostname": "docker-desktop", "component": "ray", "ray.job_id": "02000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", "ray.task.args": "(2,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", - "ray.task_id": "d17195bf51ec17c4ffffffffffffffffffffffff02000000", - "ray.worker_id": "4993f6a4de32a4828616902cd116580a4dbd6d209668608d14bf20a0", + "ray.task_id": "cf9678e695079bccffffffffffffffffffffffff02000000", + "ray.worker_id": "9db8f9790664f454d9f5c59fae9d70d66a57d11c10eab737f06b4f4a", "span.kind": "producer" }, "metrics": { @@ -434,12 +434,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 1250041, - "start": 1757925757596305252 + "duration": 1336125, + "start": 1757947330032565263 }, { "name": "__main__.compute_value", - "service": "raysubmit_QGhgeswe7DKPUFh4", + "service": "raysubmit_DUD4srJTp9e5MFFw", "resource": "__main__.compute_value", "trace_id": 0, "span_id": 21, @@ -449,22 +449,22 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d17a00000000", - "_dd.parent_id": "c1f293d43457c5ca", + "_dd.p.tid": "68c825be00000000", + "_dd.parent_id": "130cc0c8f2fa5b3e", "component": "ray", "language": "python", "ray.job_id": "02000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", "ray.task.args": "(2,)", "ray.task.kwargs": "{}", "ray.task.status": "success", - "ray.task_id": "bb11ac0225873335ffffffffffffffffffffffff02000000", - "ray.worker_id": "606db18c4702e1a1aa628cd276c79a3d6659c31a3f4a3479865eac47", - "runtime-id": "064d2406816041368ecfd9070820ed7c", + "ray.task_id": "5c2e56e945921c44ffffffffffffffffffffffff02000000", + "ray.worker_id": "e4216c02a69fa57483b30a21a279bb41e905333f7919ec09facda6ac", + "runtime-id": "475b901ae28d4120be31b3912e778b8b", "span.kind": "consumer", - "traceparent": "00-68c7d17a00000000457b3aa9298c617f-c1f293d43457c5ca-00", - "tracestate": "dd=p:c1f293d43457c5ca;s:0" + "traceparent": "00-68c825be00000000c97e302fbc8d6554-130cc0c8f2fa5b3e-00", + "tracestate": "dd=p:130cc0c8f2fa5b3e;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -473,14 +473,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1680 + "process_id": 1678 }, - "duration": 267542, - "start": 1757925759425316794 + "duration": 278292, + "start": 1757947331784398430 }, { "name": "__main__.compute_value.remote()", - "service": "raysubmit_QGhgeswe7DKPUFh4", + "service": "raysubmit_DUD4srJTp9e5MFFw", "resource": "__main__.compute_value.remote()", "trace_id": 0, "span_id": 19, @@ -492,13 +492,13 @@ "_dd.hostname": "docker-desktop", "component": "ray", "ray.job_id": "02000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", "ray.task.args": "(3,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", - "ray.task_id": "d17195bf51ec17c4ffffffffffffffffffffffff02000000", - "ray.worker_id": "4993f6a4de32a4828616902cd116580a4dbd6d209668608d14bf20a0", + "ray.task_id": "cf9678e695079bccffffffffffffffffffffffff02000000", + "ray.worker_id": "9db8f9790664f454d9f5c59fae9d70d66a57d11c10eab737f06b4f4a", "span.kind": "producer" }, "metrics": { @@ -507,12 +507,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 146666, - "start": 1757925757597583002 + "duration": 148666, + "start": 1757947330033934513 }, { "name": "__main__.compute_value", - "service": "raysubmit_QGhgeswe7DKPUFh4", + "service": "raysubmit_DUD4srJTp9e5MFFw", "resource": "__main__.compute_value", "trace_id": 0, "span_id": 22, @@ -522,22 +522,22 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d17a00000000", - "_dd.parent_id": "de518146a00b4e88", + "_dd.p.tid": "68c825be00000000", + "_dd.parent_id": "cf75863fc49e4de3", "component": "ray", "language": "python", "ray.job_id": "02000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", "ray.task.args": "(3,)", "ray.task.kwargs": "{}", "ray.task.status": "success", - "ray.task_id": "0800274d756913adffffffffffffffffffffffff02000000", - "ray.worker_id": "a4f47ab7e746969f197c44dc87e81a7fb8655ad64c6d08e2051a92b0", - "runtime-id": "4962323af8a34121988b1825c0a7f47f", + "ray.task_id": "a2febe36a32008e2ffffffffffffffffffffffff02000000", + "ray.worker_id": "96e3e82917f910c13162ce5256d88af7cda9795ad21d734ddc7f976b", + "runtime-id": "76fea7e43a3749bb8eefbcba1534b80d", "span.kind": "consumer", - "traceparent": "00-68c7d17a00000000457b3aa9298c617f-de518146a00b4e88-00", - "tracestate": "dd=p:de518146a00b4e88;s:0" + "traceparent": "00-68c825be00000000c97e302fbc8d6554-cf75863fc49e4de3-00", + "tracestate": "dd=p:cf75863fc49e4de3;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -548,12 +548,12 @@ "_sampling_priority_v1": 2, "process_id": 1679 }, - "duration": 249500, - "start": 1757925759439870919 + "duration": 258583, + "start": 1757947331925850389 }, { "name": "__main__.compute_value.remote()", - "service": "raysubmit_QGhgeswe7DKPUFh4", + "service": "raysubmit_DUD4srJTp9e5MFFw", "resource": "__main__.compute_value.remote()", "trace_id": 0, "span_id": 20, @@ -565,13 +565,13 @@ "_dd.hostname": "docker-desktop", "component": "ray", "ray.job_id": "02000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", "ray.task.args": "(4,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", - "ray.task_id": "d17195bf51ec17c4ffffffffffffffffffffffff02000000", - "ray.worker_id": "4993f6a4de32a4828616902cd116580a4dbd6d209668608d14bf20a0", + "ray.task_id": "cf9678e695079bccffffffffffffffffffffffff02000000", + "ray.worker_id": "9db8f9790664f454d9f5c59fae9d70d66a57d11c10eab737f06b4f4a", "span.kind": "producer" }, "metrics": { @@ -580,12 +580,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 103041, - "start": 1757925757597749877 + "duration": 102167, + "start": 1757947330034099929 }, { "name": "__main__.compute_value", - "service": "raysubmit_QGhgeswe7DKPUFh4", + "service": "raysubmit_DUD4srJTp9e5MFFw", "resource": "__main__.compute_value", "trace_id": 0, "span_id": 23, @@ -595,22 +595,22 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d17a00000000", - "_dd.parent_id": "44f951508c140ff5", + "_dd.p.tid": "68c825be00000000", + "_dd.parent_id": "f29c5f3105ed5579", "component": "ray", "language": "python", "ray.job_id": "02000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", "ray.task.args": "(4,)", "ray.task.kwargs": "{}", "ray.task.status": "success", - "ray.task_id": "0f8c5bc78e913ceeffffffffffffffffffffffff02000000", - "ray.worker_id": "cbbf9ffaf1a6a4a78ce7051f7cf4ce23aa2ed77ae8673a35c3462f88", - "runtime-id": "2eb2a0144dd443c98d5cb01e029b524f", + "ray.task_id": "e186f4231875fdacffffffffffffffffffffffff02000000", + "ray.worker_id": "a7d1c753daec2d02636657ab1a38ee7ba38653ad7286621cde9f99d3", + "runtime-id": "acc876b7f50247a085f4aa6256b13e69", "span.kind": "consumer", - "traceparent": "00-68c7d17a00000000457b3aa9298c617f-44f951508c140ff5-00", - "tracestate": "dd=p:44f951508c140ff5;s:0" + "traceparent": "00-68c825be00000000c97e302fbc8d6554-f29c5f3105ed5579-00", + "tracestate": "dd=p:f29c5f3105ed5579;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -619,14 +619,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1681 + "process_id": 1680 }, - "duration": 742250, - "start": 1757925759432212461 + "duration": 227709, + "start": 1757947331939046680 }, { "name": "ComputationManager.add_result", - "service": "raysubmit_QGhgeswe7DKPUFh4", + "service": "raysubmit_DUD4srJTp9e5MFFw", "resource": "ComputationManager.add_result", "trace_id": 0, "span_id": 12, @@ -637,14 +637,14 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "fe76678de8512d216e292b1b02000000", + "ray.actor_id": "5479a858f3bc9f0a430120a502000000", "ray.actor_method.args": "(3,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "02000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", - "ray.task_id": "e082c90ab8422b00fe76678de8512d216e292b1b02000000", - "ray.worker_id": "8559fbe1cdfdf0b5e4b1b2aa3c2399def907cd17df14d2ea07bda40b", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", + "ray.task_id": "e082c90ab8422b005479a858f3bc9f0a430120a502000000", + "ray.worker_id": "fc417a9b8c988b0612369fd814a055e3fc6d57354d9370bc85af1a17", "span.kind": "consumer" }, "metrics": { @@ -653,12 +653,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 198834, - "start": 1757925759447682127 + "duration": 177417, + "start": 1757947331945538305 }, { "name": "ComputationManager.add_result", - "service": "raysubmit_QGhgeswe7DKPUFh4", + "service": "raysubmit_DUD4srJTp9e5MFFw", "resource": "ComputationManager.add_result", "trace_id": 0, "span_id": 13, @@ -669,14 +669,14 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "fe76678de8512d216e292b1b02000000", + "ray.actor_id": "5479a858f3bc9f0a430120a502000000", "ray.actor_method.args": "(4,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "02000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", - "ray.task_id": "e082c90ab8422b00fe76678de8512d216e292b1b02000000", - "ray.worker_id": "8559fbe1cdfdf0b5e4b1b2aa3c2399def907cd17df14d2ea07bda40b", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", + "ray.task_id": "e082c90ab8422b005479a858f3bc9f0a430120a502000000", + "ray.worker_id": "fc417a9b8c988b0612369fd814a055e3fc6d57354d9370bc85af1a17", "span.kind": "consumer" }, "metrics": { @@ -685,12 +685,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 2173292, - "start": 1757925759447934502 + "duration": 2062833, + "start": 1757947331945735722 }, { "name": "ComputationManager.add_result", - "service": "raysubmit_QGhgeswe7DKPUFh4", + "service": "raysubmit_DUD4srJTp9e5MFFw", "resource": "ComputationManager.add_result", "trace_id": 0, "span_id": 14, @@ -701,14 +701,14 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "fe76678de8512d216e292b1b02000000", + "ray.actor_id": "5479a858f3bc9f0a430120a502000000", "ray.actor_method.args": "(5,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "02000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", - "ray.task_id": "e082c90ab8422b00fe76678de8512d216e292b1b02000000", - "ray.worker_id": "8559fbe1cdfdf0b5e4b1b2aa3c2399def907cd17df14d2ea07bda40b", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", + "ray.task_id": "e082c90ab8422b005479a858f3bc9f0a430120a502000000", + "ray.worker_id": "fc417a9b8c988b0612369fd814a055e3fc6d57354d9370bc85af1a17", "span.kind": "consumer" }, "metrics": { @@ -717,12 +717,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 123167, - "start": 1757925759450135419 + "duration": 114458, + "start": 1757947331947819847 }, { "name": "ComputationManager.get_count", - "service": "raysubmit_QGhgeswe7DKPUFh4", + "service": "raysubmit_DUD4srJTp9e5MFFw", "resource": "ComputationManager.get_count", "trace_id": 0, "span_id": 15, @@ -733,14 +733,14 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "fe76678de8512d216e292b1b02000000", + "ray.actor_id": "5479a858f3bc9f0a430120a502000000", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", "ray.job_id": "02000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", - "ray.task_id": "e082c90ab8422b00fe76678de8512d216e292b1b02000000", - "ray.worker_id": "8559fbe1cdfdf0b5e4b1b2aa3c2399def907cd17df14d2ea07bda40b", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", + "ray.task_id": "e082c90ab8422b005479a858f3bc9f0a430120a502000000", + "ray.worker_id": "fc417a9b8c988b0612369fd814a055e3fc6d57354d9370bc85af1a17", "span.kind": "consumer" }, "metrics": { @@ -749,12 +749,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 111917, - "start": 1757925759450279752 + "duration": 67625, + "start": 1757947331947948139 }, { "name": "ComputationManager.get_results", - "service": "raysubmit_QGhgeswe7DKPUFh4", + "service": "raysubmit_DUD4srJTp9e5MFFw", "resource": "ComputationManager.get_results", "trace_id": 0, "span_id": 16, @@ -765,14 +765,14 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "fe76678de8512d216e292b1b02000000", + "ray.actor_id": "5479a858f3bc9f0a430120a502000000", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", "ray.job_id": "02000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_QGhgeswe7DKPUFh4", - "ray.task_id": "e082c90ab8422b00fe76678de8512d216e292b1b02000000", - "ray.worker_id": "8559fbe1cdfdf0b5e4b1b2aa3c2399def907cd17df14d2ea07bda40b", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", + "ray.task_id": "e082c90ab8422b005479a858f3bc9f0a430120a502000000", + "ray.worker_id": "fc417a9b8c988b0612369fd814a055e3fc6d57354d9370bc85af1a17", "span.kind": "consumer" }, "metrics": { @@ -781,6 +781,6 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 101458, - "start": 1757925759450407919 + "duration": 69666, + "start": 1757947331948028514 }]] diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_actor_interactions.json b/tests/snapshots/tests.contrib.ray.test_ray.test_actor_interactions.json index 72b77e8d3db..4be84b0ea30 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_actor_interactions.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_actor_interactions.json @@ -1,7 +1,7 @@ [[ { "name": "ray.job", - "service": "raysubmit_G8SgB5nsM5kvtVPb", + "service": "raysubmit_kDQ5DhXbAwfp9GTv", "resource": "ray.job", "trace_id": 0, "span_id": 1, @@ -12,13 +12,13 @@ "_dd.base_service": "ray.dashboard", "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68c7d18300000000", + "_dd.p.tid": "68c825c800000000", "component": "ray", "language": "python", "ray.job.message": "Job finished successfully.", "ray.job.status": "SUCCEEDED", - "ray.submission_id": "raysubmit_G8SgB5nsM5kvtVPb", - "runtime-id": "bfdf74988ffd4419aabda8fe7dddaa45" + "ray.submission_id": "raysubmit_kDQ5DhXbAwfp9GTv", + "runtime-id": "5ce8e7e7cd4b4680ba2a0c60c2b62ea4" }, "metrics": { "_dd.djm.enabled": 1, @@ -29,12 +29,12 @@ "_sampling_priority_v1": 2, "process_id": 1038 }, - "duration": 3879695377, - "start": 1757925763848306921 + "duration": 3930566085, + "start": 1757947336069148043 }, { "name": "ray.job.submit", - "service": "raysubmit_G8SgB5nsM5kvtVPb", + "service": "raysubmit_kDQ5DhXbAwfp9GTv", "resource": "ray.job.submit", "trace_id": 0, "span_id": 2, @@ -54,12 +54,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 37125, - "start": 1757925763848483963 + "duration": 34875, + "start": 1757947336069318918 }, { "name": "JobSupervisor.run.remote()", - "service": "raysubmit_G8SgB5nsM5kvtVPb", + "service": "raysubmit_kDQ5DhXbAwfp9GTv", "resource": "JobSupervisor.run.remote()", "trace_id": 0, "span_id": 3, @@ -73,7 +73,7 @@ "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{'_start_signal_actor': None, 'resources_specified': False}", "ray.job_id": "01000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "producer" }, @@ -83,12 +83,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 395958, - "start": 1757925763852679463 + "duration": 257166, + "start": 1757947336072874710 }, { "name": "JobSupervisor.run", - "service": "raysubmit_G8SgB5nsM5kvtVPb", + "service": "raysubmit_kDQ5DhXbAwfp9GTv", "resource": "JobSupervisor.run", "trace_id": 0, "span_id": 4, @@ -98,20 +98,20 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d18300000000", - "_dd.parent_id": "c0f6556f1f6005a2", + "_dd.p.tid": "68c825c800000000", + "_dd.parent_id": "83114592f6129384", "component": "ray", "language": "python", - "ray.actor_id": "edae7db148d75fefb508b67d01000000", + "ray.actor_id": "225afb49fe1f726e56a4ca9801000000", "ray.job_id": "01000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_G8SgB5nsM5kvtVPb", - "ray.task_id": "80e22aed7718a125edae7db148d75fefb508b67d01000000", - "ray.worker_id": "92844accef7055bb70dd0eb34fd5c8efcee5a9bb34d229197cc3e013", - "runtime-id": "f6fc2f70046c457db906a629383621cc", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_kDQ5DhXbAwfp9GTv", + "ray.task_id": "359ec6ce30d3ca2d225afb49fe1f726e56a4ca9801000000", + "ray.worker_id": "d8e09801e9a2563b0b41cef560400a2b75d3a9ced8e073b85739201a", + "runtime-id": "ca56e2adcf6e4252a5a775a8f1f7c9a1", "span.kind": "consumer", - "traceparent": "00-68c7d183000000007f410f39e9267ca3-c0f6556f1f6005a2-00", - "tracestate": "dd=p:c0f6556f1f6005a2" + "traceparent": "00-68c825c800000000f974540d4212dabb-83114592f6129384-00", + "tracestate": "dd=p:83114592f6129384" }, "metrics": { "_dd.djm.enabled": 1, @@ -120,14 +120,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1850 + "process_id": 1851 }, - "duration": 2326554668, - "start": 1757925764704673005 + "duration": 2833485918, + "start": 1757947336986501418 }, { "name": "JobSupervisor._get_driver_env_vars", - "service": "raysubmit_G8SgB5nsM5kvtVPb", + "service": "raysubmit_kDQ5DhXbAwfp9GTv", "resource": "JobSupervisor._get_driver_env_vars", "trace_id": 0, "span_id": 5, @@ -138,14 +138,14 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "edae7db148d75fefb508b67d01000000", + "ray.actor_id": "225afb49fe1f726e56a4ca9801000000", "ray.actor_method.args": "(False,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_G8SgB5nsM5kvtVPb", - "ray.task_id": "80e22aed7718a125edae7db148d75fefb508b67d01000000", - "ray.worker_id": "92844accef7055bb70dd0eb34fd5c8efcee5a9bb34d229197cc3e013", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_kDQ5DhXbAwfp9GTv", + "ray.task_id": "359ec6ce30d3ca2d225afb49fe1f726e56a4ca9801000000", + "ray.worker_id": "d8e09801e9a2563b0b41cef560400a2b75d3a9ced8e073b85739201a", "span.kind": "consumer" }, "metrics": { @@ -154,12 +154,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 1599791, - "start": 1757925764706164672 + "duration": 1732833, + "start": 1757947336988022210 }, { "name": "JobSupervisor._get_driver_runtime_env", - "service": "raysubmit_G8SgB5nsM5kvtVPb", + "service": "raysubmit_kDQ5DhXbAwfp9GTv", "resource": "JobSupervisor._get_driver_runtime_env", "trace_id": 0, "span_id": 10, @@ -170,14 +170,14 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "edae7db148d75fefb508b67d01000000", + "ray.actor_id": "225afb49fe1f726e56a4ca9801000000", "ray.actor_method.args": "(False,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_G8SgB5nsM5kvtVPb", - "ray.task_id": "80e22aed7718a125edae7db148d75fefb508b67d01000000", - "ray.worker_id": "92844accef7055bb70dd0eb34fd5c8efcee5a9bb34d229197cc3e013", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_kDQ5DhXbAwfp9GTv", + "ray.task_id": "359ec6ce30d3ca2d225afb49fe1f726e56a4ca9801000000", + "ray.worker_id": "d8e09801e9a2563b0b41cef560400a2b75d3a9ced8e073b85739201a", "span.kind": "consumer" }, "metrics": { @@ -186,13 +186,13 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 145250, - "start": 1757925764707593963 + "duration": 181792, + "start": 1757947336989540793 }, { - "name": "exec python /home/bits/project/tests/contrib/ray/jobs/actor_interactions.py", - "service": "raysubmit_G8SgB5nsM5kvtVPb", - "resource": "exec python /home/bits/project/tests/contrib/ray/jobs/actor_interactions.py", + "name": "exec actor_interactions.py", + "service": "raysubmit_kDQ5DhXbAwfp9GTv", + "resource": "exec actor_interactions.py", "trace_id": 0, "span_id": 6, "parent_id": 4, @@ -202,12 +202,12 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "edae7db148d75fefb508b67d01000000", + "ray.actor_id": "225afb49fe1f726e56a4ca9801000000", "ray.job_id": "01000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_G8SgB5nsM5kvtVPb", - "ray.task_id": "80e22aed7718a125edae7db148d75fefb508b67d01000000", - "ray.worker_id": "92844accef7055bb70dd0eb34fd5c8efcee5a9bb34d229197cc3e013", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_kDQ5DhXbAwfp9GTv", + "ray.task_id": "359ec6ce30d3ca2d225afb49fe1f726e56a4ca9801000000", + "ray.worker_id": "d8e09801e9a2563b0b41cef560400a2b75d3a9ced8e073b85739201a", "span.kind": "consumer" }, "metrics": { @@ -216,12 +216,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 424333, - "start": 1757925764707900797 + "duration": 445708, + "start": 1757947336989917585 }, { "name": "Sender.send_message.remote()", - "service": "raysubmit_G8SgB5nsM5kvtVPb", + "service": "raysubmit_kDQ5DhXbAwfp9GTv", "resource": "Sender.send_message.remote()", "trace_id": 0, "span_id": 7, @@ -231,20 +231,20 @@ "meta": { "_dd.base_service": "project", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d18300000000", - "_dd.parent_id": "bf4482ad9c7b7424", + "_dd.p.tid": "68c825c800000000", + "_dd.parent_id": "1250f747af79deb6", "component": "ray", "language": "python", - "ray.actor_method.args": "(Actor(Receiver, ac598b8c5ef676c5612598df03000000), 'hello')", + "ray.actor_method.args": "(Actor(Receiver, 0c36eba47569709e56e7739c03000000), 'hello')", "ray.actor_method.kwargs": "{}", "ray.job_id": "03000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_G8SgB5nsM5kvtVPb", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_kDQ5DhXbAwfp9GTv", "ray.worker_id": "03000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "e38e3ecd37644b10af14c8e138f752a0", + "runtime-id": "5792f5e8206644d6821a6393ade6a7cc", "span.kind": "producer", - "traceparent": "00-68c7d183000000007f410f39e9267ca3-bf4482ad9c7b7424-00", - "tracestate": "dd=p:bf4482ad9c7b7424;s:0" + "traceparent": "00-68c825c800000000f974540d4212dabb-1250f747af79deb6-00", + "tracestate": "dd=p:1250f747af79deb6;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -253,14 +253,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1900 + "process_id": 1901 }, - "duration": 405875, - "start": 1757925765311990755 + "duration": 473125, + "start": 1757947337645459377 }, { "name": "Sender.send_message", - "service": "raysubmit_G8SgB5nsM5kvtVPb", + "service": "raysubmit_kDQ5DhXbAwfp9GTv", "resource": "Sender.send_message", "trace_id": 0, "span_id": 11, @@ -270,22 +270,22 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d18300000000", - "_dd.parent_id": "685fe34838871d87", + "_dd.p.tid": "68c825c800000000", + "_dd.parent_id": "506ff91f6719c879", "component": "ray", "language": "python", - "ray.actor_id": "f9dccd8ec9134b9a974438be03000000", - "ray.actor_method.args": "(Actor(Receiver, ac598b8c5ef676c5612598df03000000), 'hello')", + "ray.actor_id": "b5252489675322dfd971decf03000000", + "ray.actor_method.args": "(Actor(Receiver, 0c36eba47569709e56e7739c03000000), 'hello')", "ray.actor_method.kwargs": "{}", "ray.job_id": "03000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_G8SgB5nsM5kvtVPb", - "ray.task_id": "0ab01f2d6283d719f9dccd8ec9134b9a974438be03000000", - "ray.worker_id": "91cafd1ff1e61e962a84f67b38afd89ef92099489180d62c60c1d98a", - "runtime-id": "60049efd3c4645b9b80d38b4e5eca72c", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_kDQ5DhXbAwfp9GTv", + "ray.task_id": "0ab01f2d6283d719b5252489675322dfd971decf03000000", + "ray.worker_id": "9d03403cd7008ef7859803c4d40dd1ac3754ebf3a8d923349362ef06", + "runtime-id": "d4dc8621f06e4651a58876b11e67efb8", "span.kind": "consumer", - "traceparent": "00-68c7d183000000007f410f39e9267ca3-685fe34838871d87-00", - "tracestate": "dd=p:685fe34838871d87;s:0" + "traceparent": "00-68c825c800000000f974540d4212dabb-506ff91f6719c879-00", + "tracestate": "dd=p:506ff91f6719c879;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -294,14 +294,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1945 + "process_id": 1946 }, - "duration": 16682292, - "start": 1757925766647474339 + "duration": 73111000, + "start": 1757947339099224003 }, { "name": "Receiver.receive_message.remote()", - "service": "raysubmit_G8SgB5nsM5kvtVPb", + "service": "raysubmit_kDQ5DhXbAwfp9GTv", "resource": "Receiver.receive_message.remote()", "trace_id": 0, "span_id": 14, @@ -312,14 +312,14 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "f9dccd8ec9134b9a974438be03000000", + "ray.actor_id": "b5252489675322dfd971decf03000000", "ray.actor_method.args": "('hello',)", "ray.actor_method.kwargs": "{}", "ray.job_id": "03000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_G8SgB5nsM5kvtVPb", - "ray.task_id": "0ab01f2d6283d719f9dccd8ec9134b9a974438be03000000", - "ray.worker_id": "91cafd1ff1e61e962a84f67b38afd89ef92099489180d62c60c1d98a", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_kDQ5DhXbAwfp9GTv", + "ray.task_id": "0ab01f2d6283d719b5252489675322dfd971decf03000000", + "ray.worker_id": "9d03403cd7008ef7859803c4d40dd1ac3754ebf3a8d923349362ef06", "span.kind": "producer" }, "metrics": { @@ -328,12 +328,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 337083, - "start": 1757925766649505298 + "duration": 353666, + "start": 1757947339101376753 }, { "name": "Receiver.receive_message", - "service": "raysubmit_G8SgB5nsM5kvtVPb", + "service": "raysubmit_kDQ5DhXbAwfp9GTv", "resource": "Receiver.receive_message", "trace_id": 0, "span_id": 15, @@ -343,22 +343,22 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d18300000000", - "_dd.parent_id": "f2acf5bc8b79ee7f", + "_dd.p.tid": "68c825c800000000", + "_dd.parent_id": "df5b77a1d2c8e31e", "component": "ray", "language": "python", - "ray.actor_id": "ac598b8c5ef676c5612598df03000000", + "ray.actor_id": "0c36eba47569709e56e7739c03000000", "ray.actor_method.args": "('hello',)", "ray.actor_method.kwargs": "{}", "ray.job_id": "03000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_G8SgB5nsM5kvtVPb", - "ray.task_id": "9e65b0e7be4dd70fac598b8c5ef676c5612598df03000000", - "ray.worker_id": "48244d88ac2322ae313268f78aba8ee2d9a5c628406594359312adc7", - "runtime-id": "6ded3e19b9a04d8ea2b7fb60303c70e9", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_kDQ5DhXbAwfp9GTv", + "ray.task_id": "0ca53a8a06efd38b0c36eba47569709e56e7739c03000000", + "ray.worker_id": "375cae4ba7192a8c419d40e88b2b7ce4c1f6d12c849e02f40c88b9e8", + "runtime-id": "528f29e364a44739a0cd96584de29b35", "span.kind": "consumer", - "traceparent": "00-68c7d183000000007f410f39e9267ca3-f2acf5bc8b79ee7f-00", - "tracestate": "dd=p:f2acf5bc8b79ee7f;s:0" + "traceparent": "00-68c825c800000000f974540d4212dabb-df5b77a1d2c8e31e-00", + "tracestate": "dd=p:df5b77a1d2c8e31e;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -367,14 +367,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1944 + "process_id": 1945 }, - "duration": 225542, - "start": 1757925766661115131 + "duration": 230833, + "start": 1757947339169369961 }, { "name": "Sender.get_sent_count.remote()", - "service": "raysubmit_G8SgB5nsM5kvtVPb", + "service": "raysubmit_kDQ5DhXbAwfp9GTv", "resource": "Sender.get_sent_count.remote()", "trace_id": 0, "span_id": 8, @@ -384,20 +384,20 @@ "meta": { "_dd.base_service": "project", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d18300000000", - "_dd.parent_id": "bf4482ad9c7b7424", + "_dd.p.tid": "68c825c800000000", + "_dd.parent_id": "1250f747af79deb6", "component": "ray", "language": "python", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", "ray.job_id": "03000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_G8SgB5nsM5kvtVPb", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_kDQ5DhXbAwfp9GTv", "ray.worker_id": "03000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "e38e3ecd37644b10af14c8e138f752a0", + "runtime-id": "5792f5e8206644d6821a6393ade6a7cc", "span.kind": "producer", - "traceparent": "00-68c7d183000000007f410f39e9267ca3-bf4482ad9c7b7424-00", - "tracestate": "dd=p:bf4482ad9c7b7424;s:0" + "traceparent": "00-68c825c800000000f974540d4212dabb-1250f747af79deb6-00", + "tracestate": "dd=p:1250f747af79deb6;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -406,14 +406,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1900 + "process_id": 1901 }, - "duration": 201459, - "start": 1757925766667167339 + "duration": 191958, + "start": 1757947339175287003 }, { "name": "Sender.get_sent_count", - "service": "raysubmit_G8SgB5nsM5kvtVPb", + "service": "raysubmit_kDQ5DhXbAwfp9GTv", "resource": "Sender.get_sent_count", "trace_id": 0, "span_id": 12, @@ -423,22 +423,22 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d18300000000", - "_dd.parent_id": "b7867ee3b74ed879", + "_dd.p.tid": "68c825c800000000", + "_dd.parent_id": "f37a16d5a1c007cb", "component": "ray", "language": "python", - "ray.actor_id": "f9dccd8ec9134b9a974438be03000000", + "ray.actor_id": "b5252489675322dfd971decf03000000", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", "ray.job_id": "03000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_G8SgB5nsM5kvtVPb", - "ray.task_id": "62ffec03f52574bdf9dccd8ec9134b9a974438be03000000", - "ray.worker_id": "91cafd1ff1e61e962a84f67b38afd89ef92099489180d62c60c1d98a", - "runtime-id": "60049efd3c4645b9b80d38b4e5eca72c", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_kDQ5DhXbAwfp9GTv", + "ray.task_id": "62ffec03f52574bdb5252489675322dfd971decf03000000", + "ray.worker_id": "9d03403cd7008ef7859803c4d40dd1ac3754ebf3a8d923349362ef06", + "runtime-id": "d4dc8621f06e4651a58876b11e67efb8", "span.kind": "consumer", - "traceparent": "00-68c7d183000000007f410f39e9267ca3-b7867ee3b74ed879-00", - "tracestate": "dd=p:b7867ee3b74ed879;s:0" + "traceparent": "00-68c825c800000000f974540d4212dabb-f37a16d5a1c007cb-00", + "tracestate": "dd=p:f37a16d5a1c007cb;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -447,14 +447,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1945 + "process_id": 1946 }, - "duration": 176209, - "start": 1757925766667730214 + "duration": 258125, + "start": 1757947339175883628 }, { "name": "Receiver.get_messages.remote()", - "service": "raysubmit_G8SgB5nsM5kvtVPb", + "service": "raysubmit_kDQ5DhXbAwfp9GTv", "resource": "Receiver.get_messages.remote()", "trace_id": 0, "span_id": 9, @@ -464,20 +464,20 @@ "meta": { "_dd.base_service": "project", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d18300000000", - "_dd.parent_id": "bf4482ad9c7b7424", + "_dd.p.tid": "68c825c800000000", + "_dd.parent_id": "1250f747af79deb6", "component": "ray", "language": "python", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", "ray.job_id": "03000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_G8SgB5nsM5kvtVPb", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_kDQ5DhXbAwfp9GTv", "ray.worker_id": "03000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "e38e3ecd37644b10af14c8e138f752a0", + "runtime-id": "5792f5e8206644d6821a6393ade6a7cc", "span.kind": "producer", - "traceparent": "00-68c7d183000000007f410f39e9267ca3-bf4482ad9c7b7424-00", - "tracestate": "dd=p:bf4482ad9c7b7424;s:0" + "traceparent": "00-68c825c800000000f974540d4212dabb-1250f747af79deb6-00", + "tracestate": "dd=p:1250f747af79deb6;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -486,14 +486,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1900 + "process_id": 1901 }, - "duration": 179709, - "start": 1757925766669989839 + "duration": 197042, + "start": 1757947339178169044 }, { "name": "Receiver.get_messages", - "service": "raysubmit_G8SgB5nsM5kvtVPb", + "service": "raysubmit_kDQ5DhXbAwfp9GTv", "resource": "Receiver.get_messages", "trace_id": 0, "span_id": 13, @@ -503,22 +503,22 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d18300000000", - "_dd.parent_id": "67fb32b978bf02b9", + "_dd.p.tid": "68c825c800000000", + "_dd.parent_id": "0ee33a87ce0ab5cf", "component": "ray", "language": "python", - "ray.actor_id": "ac598b8c5ef676c5612598df03000000", + "ray.actor_id": "0c36eba47569709e56e7739c03000000", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", "ray.job_id": "03000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_G8SgB5nsM5kvtVPb", - "ray.task_id": "882ffa20ac4b2e6eac598b8c5ef676c5612598df03000000", - "ray.worker_id": "48244d88ac2322ae313268f78aba8ee2d9a5c628406594359312adc7", - "runtime-id": "6ded3e19b9a04d8ea2b7fb60303c70e9", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_kDQ5DhXbAwfp9GTv", + "ray.task_id": "882ffa20ac4b2e6e0c36eba47569709e56e7739c03000000", + "ray.worker_id": "375cae4ba7192a8c419d40e88b2b7ce4c1f6d12c849e02f40c88b9e8", + "runtime-id": "528f29e364a44739a0cd96584de29b35", "span.kind": "consumer", - "traceparent": "00-68c7d183000000007f410f39e9267ca3-67fb32b978bf02b9-00", - "tracestate": "dd=p:67fb32b978bf02b9;s:0" + "traceparent": "00-68c825c800000000f974540d4212dabb-0ee33a87ce0ab5cf-00", + "tracestate": "dd=p:0ee33a87ce0ab5cf;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -527,8 +527,8 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1944 + "process_id": 1945 }, - "duration": 166958, - "start": 1757925766671289298 + "duration": 147833, + "start": 1757947339179325003 }]] diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_nested_tasks.json b/tests/snapshots/tests.contrib.ray.test_ray.test_nested_tasks.json index 37fc45aadcf..e86df356416 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_nested_tasks.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_nested_tasks.json @@ -1,7 +1,7 @@ [[ { "name": "ray.job", - "service": "raysubmit_MExwtCmQNkSD7ftk", + "service": "raysubmit_1x6JQ9zJ1bqwRPv7", "resource": "ray.job", "trace_id": 0, "span_id": 1, @@ -12,13 +12,13 @@ "_dd.base_service": "ray.dashboard", "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68c7d19400000000", + "_dd.p.tid": "68c825d800000000", "component": "ray", "language": "python", "ray.job.message": "Job finished successfully.", "ray.job.status": "SUCCEEDED", - "ray.submission_id": "raysubmit_MExwtCmQNkSD7ftk", - "runtime-id": "bfdf74988ffd4419aabda8fe7dddaa45" + "ray.submission_id": "raysubmit_1x6JQ9zJ1bqwRPv7", + "runtime-id": "5ce8e7e7cd4b4680ba2a0c60c2b62ea4" }, "metrics": { "_dd.djm.enabled": 1, @@ -29,12 +29,12 @@ "_sampling_priority_v1": 2, "process_id": 1038 }, - "duration": 4894202571, - "start": 1757925780082797721 + "duration": 4964694586, + "start": 1757947352264109509 }, { "name": "ray.job.submit", - "service": "raysubmit_MExwtCmQNkSD7ftk", + "service": "raysubmit_1x6JQ9zJ1bqwRPv7", "resource": "ray.job.submit", "trace_id": 0, "span_id": 2, @@ -54,12 +54,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 38333, - "start": 1757925780082951471 + "duration": 39084, + "start": 1757947352264276842 }, { "name": "JobSupervisor.run.remote()", - "service": "raysubmit_MExwtCmQNkSD7ftk", + "service": "raysubmit_1x6JQ9zJ1bqwRPv7", "resource": "JobSupervisor.run.remote()", "trace_id": 0, "span_id": 3, @@ -73,7 +73,7 @@ "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{'_start_signal_actor': None, 'resources_specified': False}", "ray.job_id": "01000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "producer" }, @@ -83,12 +83,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 318708, - "start": 1757925780086431429 + "duration": 322250, + "start": 1757947352267943801 }, { "name": "JobSupervisor.run", - "service": "raysubmit_MExwtCmQNkSD7ftk", + "service": "raysubmit_1x6JQ9zJ1bqwRPv7", "resource": "JobSupervisor.run", "trace_id": 0, "span_id": 4, @@ -98,20 +98,20 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d19400000000", - "_dd.parent_id": "91c7a02d864d3e8e", + "_dd.p.tid": "68c825d800000000", + "_dd.parent_id": "4cf74728911a774d", "component": "ray", "language": "python", - "ray.actor_id": "425ed26dda165b68a3679dd601000000", + "ray.actor_id": "d0e77625bea063b2ce3c440901000000", "ray.job_id": "01000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_MExwtCmQNkSD7ftk", - "ray.task_id": "3d3e27c54ed1f5cf425ed26dda165b68a3679dd601000000", - "ray.worker_id": "16dd23bea43a9aaa027d1798df4f510814e58a3cbdd63d0554ea8f60", - "runtime-id": "b426ee0c90c14ba4be33d2ba10202335", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_1x6JQ9zJ1bqwRPv7", + "ray.task_id": "cae5e964086715a4d0e77625bea063b2ce3c440901000000", + "ray.worker_id": "11670db24e9f44b91944e7367296255001210d9c34a60bfd26057241", + "runtime-id": "44bbfd421c464f379f9b8b600b6f6b5c", "span.kind": "consumer", - "traceparent": "00-68c7d1940000000040324db9cc400dcd-91c7a02d864d3e8e-00", - "tracestate": "dd=p:91c7a02d864d3e8e" + "traceparent": "00-68c825d800000000383145da4c66128d-4cf74728911a774d-00", + "tracestate": "dd=p:4cf74728911a774d" }, "metrics": { "_dd.djm.enabled": 1, @@ -120,14 +120,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2365 + "process_id": 2366 }, - "duration": 3639853946, - "start": 1757925780944698929 + "duration": 3644798293, + "start": 1757947353195199843 }, { "name": "JobSupervisor._get_driver_env_vars", - "service": "raysubmit_MExwtCmQNkSD7ftk", + "service": "raysubmit_1x6JQ9zJ1bqwRPv7", "resource": "JobSupervisor._get_driver_env_vars", "trace_id": 0, "span_id": 5, @@ -138,14 +138,14 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "425ed26dda165b68a3679dd601000000", + "ray.actor_id": "d0e77625bea063b2ce3c440901000000", "ray.actor_method.args": "(False,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_MExwtCmQNkSD7ftk", - "ray.task_id": "3d3e27c54ed1f5cf425ed26dda165b68a3679dd601000000", - "ray.worker_id": "16dd23bea43a9aaa027d1798df4f510814e58a3cbdd63d0554ea8f60", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_1x6JQ9zJ1bqwRPv7", + "ray.task_id": "cae5e964086715a4d0e77625bea063b2ce3c440901000000", + "ray.worker_id": "11670db24e9f44b91944e7367296255001210d9c34a60bfd26057241", "span.kind": "consumer" }, "metrics": { @@ -154,12 +154,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 1828583, - "start": 1757925780946285971 + "duration": 2092834, + "start": 1757947353196913884 }, { "name": "JobSupervisor._get_driver_runtime_env", - "service": "raysubmit_MExwtCmQNkSD7ftk", + "service": "raysubmit_1x6JQ9zJ1bqwRPv7", "resource": "JobSupervisor._get_driver_runtime_env", "trace_id": 0, "span_id": 8, @@ -170,14 +170,14 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "425ed26dda165b68a3679dd601000000", + "ray.actor_id": "d0e77625bea063b2ce3c440901000000", "ray.actor_method.args": "(False,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_MExwtCmQNkSD7ftk", - "ray.task_id": "3d3e27c54ed1f5cf425ed26dda165b68a3679dd601000000", - "ray.worker_id": "16dd23bea43a9aaa027d1798df4f510814e58a3cbdd63d0554ea8f60", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_1x6JQ9zJ1bqwRPv7", + "ray.task_id": "cae5e964086715a4d0e77625bea063b2ce3c440901000000", + "ray.worker_id": "11670db24e9f44b91944e7367296255001210d9c34a60bfd26057241", "span.kind": "consumer" }, "metrics": { @@ -186,13 +186,13 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 151750, - "start": 1757925780947937263 + "duration": 212792, + "start": 1757947353198754259 }, { - "name": "exec python /home/bits/project/tests/contrib/ray/jobs/nested_tasks.py", - "service": "raysubmit_MExwtCmQNkSD7ftk", - "resource": "exec python /home/bits/project/tests/contrib/ray/jobs/nested_tasks.py", + "name": "exec nested_tasks.py", + "service": "raysubmit_1x6JQ9zJ1bqwRPv7", + "resource": "exec nested_tasks.py", "trace_id": 0, "span_id": 6, "parent_id": 4, @@ -202,12 +202,12 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "425ed26dda165b68a3679dd601000000", + "ray.actor_id": "d0e77625bea063b2ce3c440901000000", "ray.job_id": "01000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_MExwtCmQNkSD7ftk", - "ray.task_id": "3d3e27c54ed1f5cf425ed26dda165b68a3679dd601000000", - "ray.worker_id": "16dd23bea43a9aaa027d1798df4f510814e58a3cbdd63d0554ea8f60", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_1x6JQ9zJ1bqwRPv7", + "ray.task_id": "cae5e964086715a4d0e77625bea063b2ce3c440901000000", + "ray.worker_id": "11670db24e9f44b91944e7367296255001210d9c34a60bfd26057241", "span.kind": "consumer" }, "metrics": { @@ -216,12 +216,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 425417, - "start": 1757925780948245554 + "duration": 479250, + "start": 1757947353199189259 }, { "name": "__main__.submit_addition_task.remote()", - "service": "raysubmit_MExwtCmQNkSD7ftk", + "service": "raysubmit_1x6JQ9zJ1bqwRPv7", "resource": "__main__.submit_addition_task.remote()", "trace_id": 0, "span_id": 7, @@ -231,21 +231,21 @@ "meta": { "_dd.base_service": "project", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d19400000000", - "_dd.parent_id": "32334ad0becd8c88", + "_dd.p.tid": "68c825d800000000", + "_dd.parent_id": "759bd172c3bdb6da", "component": "ray", "language": "python", "ray.job_id": "05000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_MExwtCmQNkSD7ftk", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_1x6JQ9zJ1bqwRPv7", "ray.task.args": "(2,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.worker_id": "05000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "4669dcf9952f4e0f9a3861e568bc895d", + "runtime-id": "9001d714fc2c49d3bea53977bf52317b", "span.kind": "producer", - "traceparent": "00-68c7d1940000000040324db9cc400dcd-32334ad0becd8c88-00", - "tracestate": "dd=p:32334ad0becd8c88;s:0" + "traceparent": "00-68c825d800000000383145da4c66128d-759bd172c3bdb6da-00", + "tracestate": "dd=p:759bd172c3bdb6da;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -254,14 +254,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2415 + "process_id": 2416 }, - "duration": 3408625, - "start": 1757925781525916263 + "duration": 4196708, + "start": 1757947353896487843 }, { "name": "__main__.submit_addition_task", - "service": "raysubmit_MExwtCmQNkSD7ftk", + "service": "raysubmit_1x6JQ9zJ1bqwRPv7", "resource": "__main__.submit_addition_task", "trace_id": 0, "span_id": 9, @@ -271,22 +271,22 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d19400000000", - "_dd.parent_id": "d2430a5353c100c1", + "_dd.p.tid": "68c825d800000000", + "_dd.parent_id": "0f866e4e9148dd99", "component": "ray", "language": "python", "ray.job_id": "05000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_MExwtCmQNkSD7ftk", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_1x6JQ9zJ1bqwRPv7", "ray.task.args": "(2,)", "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.task_id": "3ca0590f168eaec5ffffffffffffffffffffffff05000000", - "ray.worker_id": "7f6c7ebf1da788ac83e250f77a3904f63a3c2d7edbd95552f61f95af", - "runtime-id": "7e5d8a92d2b84b2abb71a601ae92c592", + "ray.worker_id": "600dd798cc582a1aa5b319cda52a67b4b1f85e31c79facdd76e837d5", + "runtime-id": "ac085108cbbc487591034e660da93394", "span.kind": "consumer", - "traceparent": "00-68c7d1940000000040324db9cc400dcd-d2430a5353c100c1-00", - "tracestate": "dd=p:d2430a5353c100c1;s:0" + "traceparent": "00-68c825d800000000383145da4c66128d-0f866e4e9148dd99-00", + "tracestate": "dd=p:0f866e4e9148dd99;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -297,12 +297,12 @@ "_sampling_priority_v1": 2, "process_id": 2462 }, - "duration": 1785241320, - "start": 1757925782329103180 + "duration": 1800593667, + "start": 1757947354821369552 }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_MExwtCmQNkSD7ftk", + "service": "raysubmit_1x6JQ9zJ1bqwRPv7", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 10, @@ -314,13 +314,13 @@ "_dd.hostname": "docker-desktop", "component": "ray", "ray.job_id": "05000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_MExwtCmQNkSD7ftk", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_1x6JQ9zJ1bqwRPv7", "ray.task.args": "(2,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.task_id": "3ca0590f168eaec5ffffffffffffffffffffffff05000000", - "ray.worker_id": "7f6c7ebf1da788ac83e250f77a3904f63a3c2d7edbd95552f61f95af", + "ray.worker_id": "600dd798cc582a1aa5b319cda52a67b4b1f85e31c79facdd76e837d5", "span.kind": "producer" }, "metrics": { @@ -329,12 +329,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 1179542, - "start": 1757925782329422555 + "duration": 1377292, + "start": 1757947354821709135 }, { "name": "__main__.add_one", - "service": "raysubmit_MExwtCmQNkSD7ftk", + "service": "raysubmit_1x6JQ9zJ1bqwRPv7", "resource": "__main__.add_one", "trace_id": 0, "span_id": 13, @@ -344,22 +344,22 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d19400000000", - "_dd.parent_id": "220c647d7038e589", + "_dd.p.tid": "68c825d800000000", + "_dd.parent_id": "0c62c3c6bf3b2d6a", "component": "ray", "language": "python", "ray.job_id": "05000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_MExwtCmQNkSD7ftk", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_1x6JQ9zJ1bqwRPv7", "ray.task.args": "(2,)", "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.task_id": "079c89e8658fa36bffffffffffffffffffffffff05000000", - "ray.worker_id": "df5213311da2153c8cad1cfa58138c1040409cfc4df7bc8094f2268a", - "runtime-id": "ff7987bd19454ce199fec7a81973d58a", + "ray.worker_id": "36b38569242b4948edfb69f0fb4170e40882ebf787d41a82f166b869", + "runtime-id": "b98b6c3fcccb42b9be851131c90e24fa", "span.kind": "consumer", - "traceparent": "00-68c7d1940000000040324db9cc400dcd-220c647d7038e589-00", - "tracestate": "dd=p:220c647d7038e589;s:0" + "traceparent": "00-68c825d800000000383145da4c66128d-0c62c3c6bf3b2d6a-00", + "tracestate": "dd=p:0c62c3c6bf3b2d6a;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -370,12 +370,12 @@ "_sampling_priority_v1": 2, "process_id": 2506 }, - "duration": 274125, - "start": 1757925784110700375 + "duration": 303292, + "start": 1757947356596852844 }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_MExwtCmQNkSD7ftk", + "service": "raysubmit_1x6JQ9zJ1bqwRPv7", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 11, @@ -387,13 +387,13 @@ "_dd.hostname": "docker-desktop", "component": "ray", "ray.job_id": "05000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_MExwtCmQNkSD7ftk", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_1x6JQ9zJ1bqwRPv7", "ray.task.args": "(3,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.task_id": "3ca0590f168eaec5ffffffffffffffffffffffff05000000", - "ray.worker_id": "7f6c7ebf1da788ac83e250f77a3904f63a3c2d7edbd95552f61f95af", + "ray.worker_id": "600dd798cc582a1aa5b319cda52a67b4b1f85e31c79facdd76e837d5", "span.kind": "producer" }, "metrics": { @@ -402,12 +402,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 126625, - "start": 1757925782330633305 + "duration": 153542, + "start": 1757947354823115135 }, { "name": "__main__.add_one", - "service": "raysubmit_MExwtCmQNkSD7ftk", + "service": "raysubmit_1x6JQ9zJ1bqwRPv7", "resource": "__main__.add_one", "trace_id": 0, "span_id": 14, @@ -417,22 +417,22 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d19400000000", - "_dd.parent_id": "d4ae3353582a076d", + "_dd.p.tid": "68c825d800000000", + "_dd.parent_id": "0be5f81826cce4ff", "component": "ray", "language": "python", "ray.job_id": "05000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_MExwtCmQNkSD7ftk", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_1x6JQ9zJ1bqwRPv7", "ray.task.args": "(3,)", "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.task_id": "cc483212b2c8f53effffffffffffffffffffffff05000000", - "ray.worker_id": "6ffe5f77523d8847dda0995bd5f32570030c605fa7542c8dae514ec8", - "runtime-id": "d4a07c33750749d6b0469de22cd77112", + "ray.worker_id": "57e15431ac9e7a96712d7e412fb1813b7b537fca35cbe3456398a2dc", + "runtime-id": "a0d030acdbe64102b74aa0fc9ad9ee09", "span.kind": "consumer", - "traceparent": "00-68c7d1940000000040324db9cc400dcd-d4ae3353582a076d-00", - "tracestate": "dd=p:d4ae3353582a076d;s:0" + "traceparent": "00-68c825d800000000383145da4c66128d-0be5f81826cce4ff-00", + "tracestate": "dd=p:0be5f81826cce4ff;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -443,12 +443,12 @@ "_sampling_priority_v1": 2, "process_id": 2505 }, - "duration": 238875, - "start": 1757925784074312500 + "duration": 326459, + "start": 1757947356617304344 }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_MExwtCmQNkSD7ftk", + "service": "raysubmit_1x6JQ9zJ1bqwRPv7", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 12, @@ -460,13 +460,13 @@ "_dd.hostname": "docker-desktop", "component": "ray", "ray.job_id": "05000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_MExwtCmQNkSD7ftk", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_1x6JQ9zJ1bqwRPv7", "ray.task.args": "(4,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.task_id": "3ca0590f168eaec5ffffffffffffffffffffffff05000000", - "ray.worker_id": "7f6c7ebf1da788ac83e250f77a3904f63a3c2d7edbd95552f61f95af", + "ray.worker_id": "600dd798cc582a1aa5b319cda52a67b4b1f85e31c79facdd76e837d5", "span.kind": "producer" }, "metrics": { @@ -475,12 +475,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 96833, - "start": 1757925782330783805 + "duration": 102542, + "start": 1757947354823287135 }, { "name": "__main__.add_one", - "service": "raysubmit_MExwtCmQNkSD7ftk", + "service": "raysubmit_1x6JQ9zJ1bqwRPv7", "resource": "__main__.add_one", "trace_id": 0, "span_id": 15, @@ -490,22 +490,22 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d19400000000", - "_dd.parent_id": "e41700435f7ffbac", + "_dd.p.tid": "68c825d800000000", + "_dd.parent_id": "849f49c219a8d79e", "component": "ray", "language": "python", "ray.job_id": "05000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_MExwtCmQNkSD7ftk", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_1x6JQ9zJ1bqwRPv7", "ray.task.args": "(4,)", "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.task_id": "abe71a0435f88aceffffffffffffffffffffffff05000000", - "ray.worker_id": "0b6dc9811f16d3cf1c30eeb9f4914d373f5f0fde371195c0f5502cde", - "runtime-id": "5a328918dffe458fa45fa06c18f105ac", + "ray.worker_id": "2af01c2f64d891cf45f81f635ebd9289a455f2a373bb5297c2b9377d", + "runtime-id": "7c4b6bbfdcf24c55a3a9a3b5ce576836", "span.kind": "consumer", - "traceparent": "00-68c7d1940000000040324db9cc400dcd-e41700435f7ffbac-00", - "tracestate": "dd=p:e41700435f7ffbac;s:0" + "traceparent": "00-68c825d800000000383145da4c66128d-849f49c219a8d79e-00", + "tracestate": "dd=p:849f49c219a8d79e;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -514,8 +514,8 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2504 + "process_id": 2507 }, - "duration": 262667, - "start": 1757925784094592458 + "duration": 251583, + "start": 1757947356580426136 }]] diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_actor.json b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_actor.json index 60472cf3639..be98fca73a2 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_actor.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_actor.json @@ -1,7 +1,7 @@ [[ { "name": "ray.job", - "service": "raysubmit_tU3LHQyRQuAxm1v7", + "service": "raysubmit_RrLXMhFua4mQiAGb", "resource": "ray.job", "trace_id": 0, "span_id": 1, @@ -12,13 +12,13 @@ "_dd.base_service": "ray.dashboard", "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68c7d19c00000000", + "_dd.p.tid": "68c825e000000000", "component": "ray", "language": "python", "ray.job.message": "Job finished successfully.", "ray.job.status": "SUCCEEDED", - "ray.submission_id": "raysubmit_tU3LHQyRQuAxm1v7", - "runtime-id": "bfdf74988ffd4419aabda8fe7dddaa45" + "ray.submission_id": "raysubmit_RrLXMhFua4mQiAGb", + "runtime-id": "5ce8e7e7cd4b4680ba2a0c60c2b62ea4" }, "metrics": { "_dd.djm.enabled": 1, @@ -29,12 +29,12 @@ "_sampling_priority_v1": 2, "process_id": 1038 }, - "duration": 3831369502, - "start": 1757925788637845585 + "duration": 3919365530, + "start": 1757947360915040346 }, { "name": "ray.job.submit", - "service": "raysubmit_tU3LHQyRQuAxm1v7", + "service": "raysubmit_RrLXMhFua4mQiAGb", "resource": "ray.job.submit", "trace_id": 0, "span_id": 2, @@ -54,12 +54,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 41833, - "start": 1757925788638118127 + "duration": 36417, + "start": 1757947360915175846 }, { "name": "JobSupervisor.run.remote()", - "service": "raysubmit_tU3LHQyRQuAxm1v7", + "service": "raysubmit_RrLXMhFua4mQiAGb", "resource": "JobSupervisor.run.remote()", "trace_id": 0, "span_id": 3, @@ -73,7 +73,7 @@ "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{'_start_signal_actor': None, 'resources_specified': False}", "ray.job_id": "01000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "producer" }, @@ -83,12 +83,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 329250, - "start": 1757925788641650419 + "duration": 358791, + "start": 1757947360918245555 }, { "name": "JobSupervisor.run", - "service": "raysubmit_tU3LHQyRQuAxm1v7", + "service": "raysubmit_RrLXMhFua4mQiAGb", "resource": "JobSupervisor.run", "trace_id": 0, "span_id": 4, @@ -98,20 +98,20 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d19c00000000", - "_dd.parent_id": "489296dd4b5a8086", + "_dd.p.tid": "68c825e000000000", + "_dd.parent_id": "73dc356e80ebb7ad", "component": "ray", "language": "python", - "ray.actor_id": "7b24ddd0623173d54e199a8401000000", + "ray.actor_id": "ee46ce495dcc5feb75fe0c8501000000", "ray.job_id": "01000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_tU3LHQyRQuAxm1v7", - "ray.task_id": "79cc316456d392017b24ddd0623173d54e199a8401000000", - "ray.worker_id": "b676ca10ac0baecf958bee8850932278177ab6ad0654a6be33f0c0cd", - "runtime-id": "63c4d29b9b8a4ccaba134c2c33a80e06", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_RrLXMhFua4mQiAGb", + "ray.task_id": "c1464dc5b2308f10ee46ce495dcc5feb75fe0c8501000000", + "ray.worker_id": "50035c0f7f0d9e2f5510c9b389f3dc636871a3ac18c63714529768f5", + "runtime-id": "f7c042d88f5c4c36a31d3d3d6d13065c", "span.kind": "consumer", - "traceparent": "00-68c7d19c00000000693be41439bf32fd-489296dd4b5a8086-00", - "tracestate": "dd=p:489296dd4b5a8086" + "traceparent": "00-68c825e00000000005f74355cba49bbd-73dc356e80ebb7ad-00", + "tracestate": "dd=p:73dc356e80ebb7ad" }, "metrics": { "_dd.djm.enabled": 1, @@ -120,14 +120,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2658 + "process_id": 2659 }, - "duration": 2026158376, - "start": 1757925789450763794 + "duration": 2127595320, + "start": 1757947361813897847 }, { "name": "JobSupervisor._get_driver_env_vars", - "service": "raysubmit_tU3LHQyRQuAxm1v7", + "service": "raysubmit_RrLXMhFua4mQiAGb", "resource": "JobSupervisor._get_driver_env_vars", "trace_id": 0, "span_id": 5, @@ -138,14 +138,14 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "7b24ddd0623173d54e199a8401000000", + "ray.actor_id": "ee46ce495dcc5feb75fe0c8501000000", "ray.actor_method.args": "(False,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_tU3LHQyRQuAxm1v7", - "ray.task_id": "79cc316456d392017b24ddd0623173d54e199a8401000000", - "ray.worker_id": "b676ca10ac0baecf958bee8850932278177ab6ad0654a6be33f0c0cd", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_RrLXMhFua4mQiAGb", + "ray.task_id": "c1464dc5b2308f10ee46ce495dcc5feb75fe0c8501000000", + "ray.worker_id": "50035c0f7f0d9e2f5510c9b389f3dc636871a3ac18c63714529768f5", "span.kind": "consumer" }, "metrics": { @@ -154,12 +154,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 1718250, - "start": 1757925789452206127 + "duration": 2034625, + "start": 1757947361815621139 }, { "name": "JobSupervisor._get_driver_runtime_env", - "service": "raysubmit_tU3LHQyRQuAxm1v7", + "service": "raysubmit_RrLXMhFua4mQiAGb", "resource": "JobSupervisor._get_driver_runtime_env", "trace_id": 0, "span_id": 8, @@ -170,14 +170,14 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "7b24ddd0623173d54e199a8401000000", + "ray.actor_id": "ee46ce495dcc5feb75fe0c8501000000", "ray.actor_method.args": "(False,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_tU3LHQyRQuAxm1v7", - "ray.task_id": "79cc316456d392017b24ddd0623173d54e199a8401000000", - "ray.worker_id": "b676ca10ac0baecf958bee8850932278177ab6ad0654a6be33f0c0cd", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_RrLXMhFua4mQiAGb", + "ray.task_id": "c1464dc5b2308f10ee46ce495dcc5feb75fe0c8501000000", + "ray.worker_id": "50035c0f7f0d9e2f5510c9b389f3dc636871a3ac18c63714529768f5", "span.kind": "consumer" }, "metrics": { @@ -186,13 +186,13 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 146209, - "start": 1757925789453735252 + "duration": 191375, + "start": 1757947361817427222 }, { - "name": "exec python /home/bits/project/tests/contrib/ray/jobs/simple_actor.py", - "service": "raysubmit_tU3LHQyRQuAxm1v7", - "resource": "exec python /home/bits/project/tests/contrib/ray/jobs/simple_actor.py", + "name": "exec simple_actor.py", + "service": "raysubmit_RrLXMhFua4mQiAGb", + "resource": "exec simple_actor.py", "trace_id": 0, "span_id": 6, "parent_id": 4, @@ -202,12 +202,12 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "7b24ddd0623173d54e199a8401000000", + "ray.actor_id": "ee46ce495dcc5feb75fe0c8501000000", "ray.job_id": "01000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_tU3LHQyRQuAxm1v7", - "ray.task_id": "79cc316456d392017b24ddd0623173d54e199a8401000000", - "ray.worker_id": "b676ca10ac0baecf958bee8850932278177ab6ad0654a6be33f0c0cd", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_RrLXMhFua4mQiAGb", + "ray.task_id": "c1464dc5b2308f10ee46ce495dcc5feb75fe0c8501000000", + "ray.worker_id": "50035c0f7f0d9e2f5510c9b389f3dc636871a3ac18c63714529768f5", "span.kind": "consumer" }, "metrics": { @@ -216,12 +216,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 419583, - "start": 1757925789454057461 + "duration": 544667, + "start": 1757947361817800222 }, { "name": "Counter.increment_get_and_double.remote()", - "service": "raysubmit_tU3LHQyRQuAxm1v7", + "service": "raysubmit_RrLXMhFua4mQiAGb", "resource": "Counter.increment_get_and_double.remote()", "trace_id": 0, "span_id": 7, @@ -231,20 +231,20 @@ "meta": { "_dd.base_service": "project", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d19c00000000", - "_dd.parent_id": "1b0b70476d572081", + "_dd.p.tid": "68c825e000000000", + "_dd.parent_id": "e5a53ae949b0a090", "component": "ray", "language": "python", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", "ray.job_id": "06000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_tU3LHQyRQuAxm1v7", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_RrLXMhFua4mQiAGb", "ray.worker_id": "06000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "93151eb1c121481a8308c88237d0c008", + "runtime-id": "c80eb31328c34cda890d4626ab735552", "span.kind": "producer", - "traceparent": "00-68c7d19c00000000693be41439bf32fd-1b0b70476d572081-00", - "tracestate": "dd=p:1b0b70476d572081;s:0" + "traceparent": "00-68c825e00000000005f74355cba49bbd-e5a53ae949b0a090-00", + "tracestate": "dd=p:e5a53ae949b0a090;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -253,14 +253,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2708 + "process_id": 2709 }, - "duration": 301292, - "start": 1757925790037564086 + "duration": 397250, + "start": 1757947362483774000 }, { "name": "Counter.increment_get_and_double", - "service": "raysubmit_tU3LHQyRQuAxm1v7", + "service": "raysubmit_RrLXMhFua4mQiAGb", "resource": "Counter.increment_get_and_double", "trace_id": 0, "span_id": 9, @@ -270,22 +270,22 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d19c00000000", - "_dd.parent_id": "f8406e30d809d3dc", + "_dd.p.tid": "68c825e000000000", + "_dd.parent_id": "86bd33110ea0e93c", "component": "ray", "language": "python", - "ray.actor_id": "b0a0b6f2cdba2066bd96b03d06000000", + "ray.actor_id": "efa23e8174585931a38c975206000000", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", "ray.job_id": "06000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_tU3LHQyRQuAxm1v7", - "ray.task_id": "8a2dc005c3f797b8b0a0b6f2cdba2066bd96b03d06000000", - "ray.worker_id": "54427af37275bfb686bd8fe7272f0c1f5f35a94be86bfb1daccf1dfe", - "runtime-id": "f0b3912a665a465c9995ea06d7f238e6", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_RrLXMhFua4mQiAGb", + "ray.task_id": "8a2dc005c3f797b8efa23e8174585931a38c975206000000", + "ray.worker_id": "f1696c009bc3c10b81a617b3b526d57e960165cc58b473046c71fb9a", + "runtime-id": "d5ffe27456114aaaa7b515d8bc7315f6", "span.kind": "consumer", - "traceparent": "00-68c7d19c00000000693be41439bf32fd-f8406e30d809d3dc-00", - "tracestate": "dd=p:f8406e30d809d3dc;s:0" + "traceparent": "00-68c825e00000000005f74355cba49bbd-86bd33110ea0e93c-00", + "tracestate": "dd=p:86bd33110ea0e93c;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -294,14 +294,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2752 + "process_id": 2753 }, - "duration": 700916, - "start": 1757925790941847170 + "duration": 686666, + "start": 1757947363364674542 }, { "name": "Counter.increment_and_get", - "service": "raysubmit_tU3LHQyRQuAxm1v7", + "service": "raysubmit_RrLXMhFua4mQiAGb", "resource": "Counter.increment_and_get", "trace_id": 0, "span_id": 10, @@ -312,14 +312,14 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "b0a0b6f2cdba2066bd96b03d06000000", + "ray.actor_id": "efa23e8174585931a38c975206000000", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", "ray.job_id": "06000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_tU3LHQyRQuAxm1v7", - "ray.task_id": "8a2dc005c3f797b8b0a0b6f2cdba2066bd96b03d06000000", - "ray.worker_id": "54427af37275bfb686bd8fe7272f0c1f5f35a94be86bfb1daccf1dfe", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_RrLXMhFua4mQiAGb", + "ray.task_id": "8a2dc005c3f797b8efa23e8174585931a38c975206000000", + "ray.worker_id": "f1696c009bc3c10b81a617b3b526d57e960165cc58b473046c71fb9a", "span.kind": "consumer" }, "metrics": { @@ -328,12 +328,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 447583, - "start": 1757925790942093045 + "duration": 443125, + "start": 1757947363364912833 }, { "name": "Counter.increment", - "service": "raysubmit_tU3LHQyRQuAxm1v7", + "service": "raysubmit_RrLXMhFua4mQiAGb", "resource": "Counter.increment", "trace_id": 0, "span_id": 11, @@ -344,14 +344,14 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "b0a0b6f2cdba2066bd96b03d06000000", + "ray.actor_id": "efa23e8174585931a38c975206000000", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", "ray.job_id": "06000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_tU3LHQyRQuAxm1v7", - "ray.task_id": "8a2dc005c3f797b8b0a0b6f2cdba2066bd96b03d06000000", - "ray.worker_id": "54427af37275bfb686bd8fe7272f0c1f5f35a94be86bfb1daccf1dfe", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_RrLXMhFua4mQiAGb", + "ray.task_id": "8a2dc005c3f797b8efa23e8174585931a38c975206000000", + "ray.worker_id": "f1696c009bc3c10b81a617b3b526d57e960165cc58b473046c71fb9a", "span.kind": "consumer" }, "metrics": { @@ -360,12 +360,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 146625, - "start": 1757925790942239253 + "duration": 133500, + "start": 1757947363365068167 }, { "name": "Counter.get_value", - "service": "raysubmit_tU3LHQyRQuAxm1v7", + "service": "raysubmit_RrLXMhFua4mQiAGb", "resource": "Counter.get_value", "trace_id": 0, "span_id": 12, @@ -376,14 +376,14 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "b0a0b6f2cdba2066bd96b03d06000000", + "ray.actor_id": "efa23e8174585931a38c975206000000", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", "ray.job_id": "06000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_tU3LHQyRQuAxm1v7", - "ray.task_id": "8a2dc005c3f797b8b0a0b6f2cdba2066bd96b03d06000000", - "ray.worker_id": "54427af37275bfb686bd8fe7272f0c1f5f35a94be86bfb1daccf1dfe", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_RrLXMhFua4mQiAGb", + "ray.task_id": "8a2dc005c3f797b8efa23e8174585931a38c975206000000", + "ray.worker_id": "f1696c009bc3c10b81a617b3b526d57e960165cc58b473046c71fb9a", "span.kind": "consumer" }, "metrics": { @@ -392,6 +392,6 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 109833, - "start": 1757925790942414920 + "duration": 113041, + "start": 1757947363365230167 }]] diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_task.json b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_task.json index e6119e2ae78..22360340a7d 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_task.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_task.json @@ -1,7 +1,7 @@ [[ { "name": "ray.job", - "service": "raysubmit_2EFzNjdmnchZcKtB", + "service": "raysubmit_GyvvwhNvv7PGHJJV", "resource": "ray.job", "trace_id": 0, "span_id": 1, @@ -12,13 +12,13 @@ "_dd.base_service": "ray.dashboard", "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68c7d1a300000000", + "_dd.p.tid": "68c825e700000000", "component": "ray", "language": "python", "ray.job.message": "Job finished successfully.", "ray.job.status": "SUCCEEDED", - "ray.submission_id": "raysubmit_2EFzNjdmnchZcKtB", - "runtime-id": "bfdf74988ffd4419aabda8fe7dddaa45" + "ray.submission_id": "raysubmit_GyvvwhNvv7PGHJJV", + "runtime-id": "5ce8e7e7cd4b4680ba2a0c60c2b62ea4" }, "metrics": { "_dd.djm.enabled": 1, @@ -29,12 +29,12 @@ "_sampling_priority_v1": 2, "process_id": 1038 }, - "duration": 4878863627, - "start": 1757925795210341547 + "duration": 3967473085, + "start": 1757947367595112002 }, { "name": "ray.job.submit", - "service": "raysubmit_2EFzNjdmnchZcKtB", + "service": "raysubmit_GyvvwhNvv7PGHJJV", "resource": "ray.job.submit", "trace_id": 0, "span_id": 2, @@ -54,12 +54,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 36000, - "start": 1757925795210473964 + "duration": 34416, + "start": 1757947367595266419 }, { "name": "JobSupervisor.run.remote()", - "service": "raysubmit_2EFzNjdmnchZcKtB", + "service": "raysubmit_GyvvwhNvv7PGHJJV", "resource": "JobSupervisor.run.remote()", "trace_id": 0, "span_id": 3, @@ -73,7 +73,7 @@ "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{'_start_signal_actor': None, 'resources_specified': False}", "ray.job_id": "01000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "producer" }, @@ -83,12 +83,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 562042, - "start": 1757925795214408797 + "duration": 353583, + "start": 1757947367599507294 }, { "name": "JobSupervisor.run", - "service": "raysubmit_2EFzNjdmnchZcKtB", + "service": "raysubmit_GyvvwhNvv7PGHJJV", "resource": "JobSupervisor.run", "trace_id": 0, "span_id": 4, @@ -98,20 +98,20 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d1a300000000", - "_dd.parent_id": "5a5f49f30c55a288", + "_dd.p.tid": "68c825e700000000", + "_dd.parent_id": "717a7e76bfdcc922", "component": "ray", "language": "python", - "ray.actor_id": "0e3fe262cb79750272d088e301000000", + "ray.actor_id": "0de168b5e9d23c5bb0a7fd4701000000", "ray.job_id": "01000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_2EFzNjdmnchZcKtB", - "ray.task_id": "a6d6d592397561440e3fe262cb79750272d088e301000000", - "ray.worker_id": "05f2e1906768688fec9a3e13d5b643590d504efc1bc22cbd64a560c0", - "runtime-id": "ce1a4a6150ca4f5fa65a0628725e4eaf", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_GyvvwhNvv7PGHJJV", + "ray.task_id": "c7528efcb2fd36ed0de168b5e9d23c5bb0a7fd4701000000", + "ray.worker_id": "74c4f24870e75da803503925eb140732bcbc2e8327d631d8e34f5be2", + "runtime-id": "24449167c4894d5aaf0fb56d5a4067fe", "span.kind": "consumer", - "traceparent": "00-68c7d1a300000000752205f9970eeb29-5a5f49f30c55a288-00", - "tracestate": "dd=p:5a5f49f30c55a288" + "traceparent": "00-68c825e7000000004d8819849b3336d0-717a7e76bfdcc922-00", + "tracestate": "dd=p:717a7e76bfdcc922" }, "metrics": { "_dd.djm.enabled": 1, @@ -120,14 +120,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2823 + "process_id": 2824 }, - "duration": 3042477127, - "start": 1757925796060774047 + "duration": 2934253293, + "start": 1757947368544251461 }, { "name": "JobSupervisor._get_driver_env_vars", - "service": "raysubmit_2EFzNjdmnchZcKtB", + "service": "raysubmit_GyvvwhNvv7PGHJJV", "resource": "JobSupervisor._get_driver_env_vars", "trace_id": 0, "span_id": 5, @@ -138,14 +138,14 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "0e3fe262cb79750272d088e301000000", + "ray.actor_id": "0de168b5e9d23c5bb0a7fd4701000000", "ray.actor_method.args": "(False,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_2EFzNjdmnchZcKtB", - "ray.task_id": "a6d6d592397561440e3fe262cb79750272d088e301000000", - "ray.worker_id": "05f2e1906768688fec9a3e13d5b643590d504efc1bc22cbd64a560c0", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_GyvvwhNvv7PGHJJV", + "ray.task_id": "c7528efcb2fd36ed0de168b5e9d23c5bb0a7fd4701000000", + "ray.worker_id": "74c4f24870e75da803503925eb140732bcbc2e8327d631d8e34f5be2", "span.kind": "consumer" }, "metrics": { @@ -154,12 +154,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 1757334, - "start": 1757925796062251672 + "duration": 2155458, + "start": 1757947368545803544 }, { "name": "JobSupervisor._get_driver_runtime_env", - "service": "raysubmit_2EFzNjdmnchZcKtB", + "service": "raysubmit_GyvvwhNvv7PGHJJV", "resource": "JobSupervisor._get_driver_runtime_env", "trace_id": 0, "span_id": 11, @@ -170,14 +170,14 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "0e3fe262cb79750272d088e301000000", + "ray.actor_id": "0de168b5e9d23c5bb0a7fd4701000000", "ray.actor_method.args": "(False,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_2EFzNjdmnchZcKtB", - "ray.task_id": "a6d6d592397561440e3fe262cb79750272d088e301000000", - "ray.worker_id": "05f2e1906768688fec9a3e13d5b643590d504efc1bc22cbd64a560c0", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_GyvvwhNvv7PGHJJV", + "ray.task_id": "c7528efcb2fd36ed0de168b5e9d23c5bb0a7fd4701000000", + "ray.worker_id": "74c4f24870e75da803503925eb140732bcbc2e8327d631d8e34f5be2", "span.kind": "consumer" }, "metrics": { @@ -186,13 +186,13 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 144291, - "start": 1757925796063836631 + "duration": 203750, + "start": 1757947368547721252 }, { - "name": "exec python /home/bits/project/tests/contrib/ray/jobs/simple_task.py", - "service": "raysubmit_2EFzNjdmnchZcKtB", - "resource": "exec python /home/bits/project/tests/contrib/ray/jobs/simple_task.py", + "name": "exec simple_task.py", + "service": "raysubmit_GyvvwhNvv7PGHJJV", + "resource": "exec simple_task.py", "trace_id": 0, "span_id": 6, "parent_id": 4, @@ -202,12 +202,12 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "0e3fe262cb79750272d088e301000000", + "ray.actor_id": "0de168b5e9d23c5bb0a7fd4701000000", "ray.job_id": "01000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_2EFzNjdmnchZcKtB", - "ray.task_id": "a6d6d592397561440e3fe262cb79750272d088e301000000", - "ray.worker_id": "05f2e1906768688fec9a3e13d5b643590d504efc1bc22cbd64a560c0", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_GyvvwhNvv7PGHJJV", + "ray.task_id": "c7528efcb2fd36ed0de168b5e9d23c5bb0a7fd4701000000", + "ray.worker_id": "74c4f24870e75da803503925eb140732bcbc2e8327d631d8e34f5be2", "span.kind": "consumer" }, "metrics": { @@ -216,12 +216,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 422958, - "start": 1757925796064120381 + "duration": 436125, + "start": 1757947368548111086 }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_2EFzNjdmnchZcKtB", + "service": "raysubmit_GyvvwhNvv7PGHJJV", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 7, @@ -231,21 +231,21 @@ "meta": { "_dd.base_service": "project", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d1a300000000", - "_dd.parent_id": "c504ab4f33d9b0b7", + "_dd.p.tid": "68c825e700000000", + "_dd.parent_id": "6db174315f55b665", "component": "ray", "language": "python", "ray.job_id": "07000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_2EFzNjdmnchZcKtB", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_GyvvwhNvv7PGHJJV", "ray.task.args": "(0,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.worker_id": "07000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "1dd30719f3454bab9fe0e39e8d3303ed", + "runtime-id": "0ce9f9910d504bda87b0d1854f772d8a", "span.kind": "producer", - "traceparent": "00-68c7d1a300000000752205f9970eeb29-c504ab4f33d9b0b7-00", - "tracestate": "dd=p:c504ab4f33d9b0b7;s:0" + "traceparent": "00-68c825e7000000004d8819849b3336d0-6db174315f55b665-00", + "tracestate": "dd=p:6db174315f55b665;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -254,14 +254,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2873 + "process_id": 2874 }, - "duration": 3006667, - "start": 1757925796650876756 + "duration": 3704833, + "start": 1757947369250687753 }, { "name": "__main__.add_one", - "service": "raysubmit_2EFzNjdmnchZcKtB", + "service": "raysubmit_GyvvwhNvv7PGHJJV", "resource": "__main__.add_one", "trace_id": 0, "span_id": 12, @@ -271,22 +271,22 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d1a300000000", - "_dd.parent_id": "5aa34d936d664814", + "_dd.p.tid": "68c825e700000000", + "_dd.parent_id": "36ce3d7e98706fc4", "component": "ray", "language": "python", "ray.job_id": "07000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_2EFzNjdmnchZcKtB", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_GyvvwhNvv7PGHJJV", "ray.task.args": "(0,)", "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.task_id": "d2b4e3e4a6f1ddc5ffffffffffffffffffffffff07000000", - "ray.worker_id": "ae5852335fbae99a9d17439805e24914602654e040984625efa07322", - "runtime-id": "a0f06eced0634ecf86e9bfdc0ec40bd5", + "ray.worker_id": "351fdc9c6602f2e501d46ab0b8082ee995ce14eda8fc4ae5cda75f27", + "runtime-id": "d2ff91357dfb425dbf35d6399bba7ab6", "span.kind": "consumer", - "traceparent": "00-68c7d1a300000000752205f9970eeb29-5aa34d936d664814-00", - "tracestate": "dd=p:5aa34d936d664814;s:0" + "traceparent": "00-68c825e7000000004d8819849b3336d0-36ce3d7e98706fc4-00", + "tracestate": "dd=p:36ce3d7e98706fc4;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -295,14 +295,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2918 + "process_id": 2922 }, - "duration": 231250, - "start": 1757925798462217090 + "duration": 239375, + "start": 1757947371283203837 }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_2EFzNjdmnchZcKtB", + "service": "raysubmit_GyvvwhNvv7PGHJJV", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 8, @@ -312,21 +312,21 @@ "meta": { "_dd.base_service": "project", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d1a300000000", - "_dd.parent_id": "c504ab4f33d9b0b7", + "_dd.p.tid": "68c825e700000000", + "_dd.parent_id": "6db174315f55b665", "component": "ray", "language": "python", "ray.job_id": "07000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_2EFzNjdmnchZcKtB", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_GyvvwhNvv7PGHJJV", "ray.task.args": "(1,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.worker_id": "07000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "1dd30719f3454bab9fe0e39e8d3303ed", + "runtime-id": "0ce9f9910d504bda87b0d1854f772d8a", "span.kind": "producer", - "traceparent": "00-68c7d1a300000000752205f9970eeb29-c504ab4f33d9b0b7-00", - "tracestate": "dd=p:c504ab4f33d9b0b7;s:0" + "traceparent": "00-68c825e7000000004d8819849b3336d0-6db174315f55b665-00", + "tracestate": "dd=p:6db174315f55b665;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -335,14 +335,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2873 + "process_id": 2874 }, - "duration": 197791, - "start": 1757925796657161423 + "duration": 313416, + "start": 1757947369257939003 }, { "name": "__main__.add_one", - "service": "raysubmit_2EFzNjdmnchZcKtB", + "service": "raysubmit_GyvvwhNvv7PGHJJV", "resource": "__main__.add_one", "trace_id": 0, "span_id": 13, @@ -352,22 +352,22 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d1a300000000", - "_dd.parent_id": "d900467389e32d5b", + "_dd.p.tid": "68c825e700000000", + "_dd.parent_id": "a495445e12d442c8", "component": "ray", "language": "python", "ray.job_id": "07000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_2EFzNjdmnchZcKtB", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_GyvvwhNvv7PGHJJV", "ray.task.args": "(1,)", "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.task_id": "11149dae5a34cd9affffffffffffffffffffffff07000000", - "ray.worker_id": "80c1e21b40cf31b4f118072361da79dd797523075d6caf64581863d3", - "runtime-id": "d09852c5501846b5aace46ed0e016143", + "ray.worker_id": "6b5a910f481756b3a38c22f852678d9e02c676a1245ed52c86047d46", + "runtime-id": "be46484f2fe14e58b1f040354b2709fd", "span.kind": "consumer", - "traceparent": "00-68c7d1a300000000752205f9970eeb29-d900467389e32d5b-00", - "tracestate": "dd=p:d900467389e32d5b;s:0" + "traceparent": "00-68c825e7000000004d8819849b3336d0-a495445e12d442c8-00", + "tracestate": "dd=p:a495445e12d442c8;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -376,14 +376,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2920 + "process_id": 2919 }, - "duration": 232417, - "start": 1757925798478876423 + "duration": 250750, + "start": 1757947371249526587 }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_2EFzNjdmnchZcKtB", + "service": "raysubmit_GyvvwhNvv7PGHJJV", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 9, @@ -393,21 +393,21 @@ "meta": { "_dd.base_service": "project", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d1a300000000", - "_dd.parent_id": "c504ab4f33d9b0b7", + "_dd.p.tid": "68c825e700000000", + "_dd.parent_id": "6db174315f55b665", "component": "ray", "language": "python", "ray.job_id": "07000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_2EFzNjdmnchZcKtB", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_GyvvwhNvv7PGHJJV", "ray.task.args": "(2,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.worker_id": "07000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "1dd30719f3454bab9fe0e39e8d3303ed", + "runtime-id": "0ce9f9910d504bda87b0d1854f772d8a", "span.kind": "producer", - "traceparent": "00-68c7d1a300000000752205f9970eeb29-c504ab4f33d9b0b7-00", - "tracestate": "dd=p:c504ab4f33d9b0b7;s:0" + "traceparent": "00-68c825e7000000004d8819849b3336d0-6db174315f55b665-00", + "tracestate": "dd=p:6db174315f55b665;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -416,14 +416,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2873 + "process_id": 2874 }, - "duration": 180083, - "start": 1757925796658789131 + "duration": 188458, + "start": 1757947369260721628 }, { "name": "__main__.add_one", - "service": "raysubmit_2EFzNjdmnchZcKtB", + "service": "raysubmit_GyvvwhNvv7PGHJJV", "resource": "__main__.add_one", "trace_id": 0, "span_id": 14, @@ -433,22 +433,22 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d1a300000000", - "_dd.parent_id": "bc506d9d78bd43aa", + "_dd.p.tid": "68c825e700000000", + "_dd.parent_id": "4d38a3317d0175cd", "component": "ray", "language": "python", "ray.job_id": "07000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_2EFzNjdmnchZcKtB", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_GyvvwhNvv7PGHJJV", "ray.task.args": "(2,)", "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.task_id": "a363a5a94a784cb3ffffffffffffffffffffffff07000000", - "ray.worker_id": "7cf5fd69413da8fb39ecee63c05a12efcece67c2163b8b5e4e0cda1a", - "runtime-id": "b7fc397e7399424281d31dcf5d7b2990", + "ray.worker_id": "b4befc1e8430a845503a18210591158276a03224034c161b3992a689", + "runtime-id": "e501a87370eb41c89f4903bd2de2e358", "span.kind": "consumer", - "traceparent": "00-68c7d1a300000000752205f9970eeb29-bc506d9d78bd43aa-00", - "tracestate": "dd=p:bc506d9d78bd43aa;s:0" + "traceparent": "00-68c825e7000000004d8819849b3336d0-4d38a3317d0175cd-00", + "tracestate": "dd=p:4d38a3317d0175cd;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -457,14 +457,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2919 + "process_id": 2921 }, - "duration": 208917, - "start": 1757925798476711340 + "duration": 267167, + "start": 1757947371292267962 }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_2EFzNjdmnchZcKtB", + "service": "raysubmit_GyvvwhNvv7PGHJJV", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 10, @@ -474,21 +474,21 @@ "meta": { "_dd.base_service": "project", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d1a300000000", - "_dd.parent_id": "c504ab4f33d9b0b7", + "_dd.p.tid": "68c825e700000000", + "_dd.parent_id": "6db174315f55b665", "component": "ray", "language": "python", "ray.job_id": "07000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_2EFzNjdmnchZcKtB", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_GyvvwhNvv7PGHJJV", "ray.task.args": "(3,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.worker_id": "07000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "1dd30719f3454bab9fe0e39e8d3303ed", + "runtime-id": "0ce9f9910d504bda87b0d1854f772d8a", "span.kind": "producer", - "traceparent": "00-68c7d1a300000000752205f9970eeb29-c504ab4f33d9b0b7-00", - "tracestate": "dd=p:c504ab4f33d9b0b7;s:0" + "traceparent": "00-68c825e7000000004d8819849b3336d0-6db174315f55b665-00", + "tracestate": "dd=p:6db174315f55b665;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -497,14 +497,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2873 + "process_id": 2874 }, - "duration": 223000, - "start": 1757925796661264089 + "duration": 219458, + "start": 1757947369262587128 }, { "name": "__main__.add_one", - "service": "raysubmit_2EFzNjdmnchZcKtB", + "service": "raysubmit_GyvvwhNvv7PGHJJV", "resource": "__main__.add_one", "trace_id": 0, "span_id": 15, @@ -514,22 +514,22 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c7d1a300000000", - "_dd.parent_id": "870775b0b52f7071", + "_dd.p.tid": "68c825e700000000", + "_dd.parent_id": "6f9529356db36de2", "component": "ray", "language": "python", "ray.job_id": "07000000", - "ray.node_id": "24ed3a9545501dcbe512b99e82f05a5f10220d36690f4b0a123254f3", - "ray.submission_id": "raysubmit_2EFzNjdmnchZcKtB", + "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.submission_id": "raysubmit_GyvvwhNvv7PGHJJV", "ray.task.args": "(3,)", "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.task_id": "b6fe777c23eaf580ffffffffffffffffffffffff07000000", - "ray.worker_id": "ea5b521f7a6cd90eaf3d7e5b29f517b9d762b3f76184cec920b97cb0", - "runtime-id": "c4b2311241ac4ed98586f0dd0da2fd3c", + "ray.worker_id": "43e0038c152ca10baaba00a550e5ddcdd039fa8ecea9a985262f4959", + "runtime-id": "7433ad440d344c7793ff2687ccf8aa03", "span.kind": "consumer", - "traceparent": "00-68c7d1a300000000752205f9970eeb29-870775b0b52f7071-00", - "tracestate": "dd=p:870775b0b52f7071;s:0" + "traceparent": "00-68c825e7000000004d8819849b3336d0-6f9529356db36de2-00", + "tracestate": "dd=p:6f9529356db36de2;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -538,8 +538,8 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2921 + "process_id": 2920 }, - "duration": 208833, - "start": 1757925798476907132 + "duration": 244750, + "start": 1757947371308263712 }]] From b9f81c70045f958103c496e7c3e77595c4f41aec Mon Sep 17 00:00:00 2001 From: Yakov Shapiro Date: Tue, 16 Sep 2025 11:19:37 -0400 Subject: [PATCH 26/59] chore(mlobs): instrument ray.wait in our Ray integration (#14587) ## Checklist This is similar to https://github.com/DataDog/dd-trace-py/pull/14559, except that I am instrumenting `ray.wait` instead of `ray.put` and adding an integration test. For capturing arguments to `ray.wait`, I am saving the values of `timeout`, `num_returns` and `fetch_local`, but no longer trying to tag exactly what is being awaited, because I cannot think of an easy way to tag an array of async subroutines onto a span. The test plan is also the same as for https://github.com/DataDog/dd-trace-py/pull/14559. I used the script below for testing and [verified that ray.wait spans show up in the UI](https://dd.datad0g.com/apm/trace/68c86541000000000044e1720b1bfda7?graphType=flamegraph&shouldShowLegend=true&spanID=8057331046573702417&traceQuery=). [ray_wait.py](https://github.com/user-attachments/files/22350290/ray_wait.py) - [x] PR author has checked that all the criteria below are met - The PR description includes an overview of the change - The PR description articulates the motivation for the change - The change includes tests OR the PR description describes a testing strategy - The PR description notes risks associated with the change, if any - Newly-added code is easy to change - The change follows the [library release note guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html) - The change includes or references documentation updates if necessary - Backport labels are set (if [applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)) ## Reviewer Checklist - [ ] Reviewer has checked that all the criteria below are met - Title is accurate - All changes are related to the pull request's stated goal - Avoids breaking [API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces) changes - Testing strategy adequately addresses listed risks - Newly-added code is easy to change - Release note makes sense to a user of the library - If necessary, author has acknowledged and discussed the performance implications of this PR as reported in the benchmarks PR comment - Backport labels are set in a manner that is consistent with the [release branch maintenance policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting) --- ddtrace/contrib/internal/ray/patch.py | 33 ++ tests/contrib/ray/jobs/simple_wait.py | 20 + tests/contrib/ray/test_ray.py | 4 + tests/contrib/ray/test_ray_patch.py | 3 + ...contrib.ray.test_ray.test_simple_wait.json | 341 ++++++++++++++++++ 5 files changed, 401 insertions(+) create mode 100644 tests/contrib/ray/jobs/simple_wait.py create mode 100644 tests/snapshots/tests.contrib.ray.test_ray.test_simple_wait.json diff --git a/ddtrace/contrib/internal/ray/patch.py b/ddtrace/contrib/internal/ray/patch.py index 40200fbde51..7e85960fd42 100644 --- a/ddtrace/contrib/internal/ray/patch.py +++ b/ddtrace/contrib/internal/ray/patch.py @@ -254,6 +254,37 @@ def traced_actor_method_call(wrapped, instance, args, kwargs): raise e +def traced_wait(wrapped, instance, args, kwargs): + """ + Trace the calls of ray.wait + """ + if not tracer: + return wrapped(*args, **kwargs) + + if tracer.current_span() is None: + tracer.context_provider.activate(_extract_tracing_context_from_env()) + + with long_running_ray_span( + "ray.wait", + service=os.environ.get("_RAY_SUBMISSION_ID"), + span_type=SpanTypes.RAY, + child_of=tracer.context_provider.active(), + activate=True, + ) as span: + span.set_tag_str(SPAN_KIND, SpanKind.PRODUCER) + timeout = kwargs.get("timeout") + num_returns = kwargs.get("num_returns") + fetch_local = kwargs.get("fetch_local") + if timeout is not None: + span.set_tag_str("ray.wait.timeout_s", str(timeout)) + if num_returns is not None: + span.set_tag_str("ray.wait.num_returns", str(num_returns)) + if fetch_local is not None: + span.set_tag_str("ray.wait.fetch_local", str(fetch_local)) + _inject_ray_span_tags(span) + return wrapped(*args, **kwargs) + + def _job_supervisor_run_wrapper(method: Callable[..., Any]) -> Any: async def _traced_run_method(self: Any, *args: Any, _dd_trace_ctx=None, **kwargs: Any) -> Any: from ddtrace import tracer @@ -438,6 +469,7 @@ def patch(): _w(ray.actor, "_modify_class", inject_tracing_into_actor_class) _w(ray.actor.ActorHandle, "_actor_method_call", traced_actor_method_call) + _w(ray, "wait", traced_wait) def unpatch(): @@ -457,3 +489,4 @@ def unpatch(): _u(ray.actor, "_modify_class") _u(ray.actor.ActorHandle, "_actor_method_call") + _u(ray, "wait") diff --git a/tests/contrib/ray/jobs/simple_wait.py b/tests/contrib/ray/jobs/simple_wait.py new file mode 100644 index 00000000000..f3b5673a697 --- /dev/null +++ b/tests/contrib/ray/jobs/simple_wait.py @@ -0,0 +1,20 @@ +import ray + + +ray.init() + + +@ray.remote +def add_one(x): + return x + 1 + + +def main(): + done, running = ray.wait([add_one.remote(42)], num_returns=1, timeout=60) + assert running == [], f"Expected no running tasks, got {len(running)}" + assert ray.get(done) == [43], f"Expected done to be [43], got {done}" + + +if __name__ == "__main__": + main() + ray.shutdown() diff --git a/tests/contrib/ray/test_ray.py b/tests/contrib/ray/test_ray.py index 4d3b6031a71..c5ad741a22e 100644 --- a/tests/contrib/ray/test_ray.py +++ b/tests/contrib/ray/test_ray.py @@ -128,3 +128,7 @@ def test_actor_interactions(self): def test_error_in_task(self): with pytest.raises(subprocess.CalledProcessError): submit_ray_job("jobs/error_in_task.py") + + @pytest.mark.snapshot(token="tests.contrib.ray.test_ray.test_simple_wait", ignores=RAY_SNAPSHOT_IGNORES) + def test_simple_wait(self): + submit_ray_job("jobs/simple_wait.py") diff --git a/tests/contrib/ray/test_ray_patch.py b/tests/contrib/ray/test_ray_patch.py index 52f2ddbfe20..0241bc25eb2 100644 --- a/tests/contrib/ray/test_ray_patch.py +++ b/tests/contrib/ray/test_ray_patch.py @@ -17,6 +17,7 @@ def assert_module_patched(self, ray): self.assert_wrapped(ray.dashboard.modules.job.job_manager.JobManager._monitor_job_internal) self.assert_wrapped(ray.actor._modify_class) self.assert_wrapped(ray.actor.ActorHandle._actor_method_call) + self.assert_wrapped(ray.wait) def assert_not_module_patched(self, ray): self.assert_not_wrapped(ray.remote_function.RemoteFunction._remote) @@ -24,6 +25,7 @@ def assert_not_module_patched(self, ray): self.assert_not_wrapped(ray.dashboard.modules.job.job_manager.JobManager._monitor_job_internal) self.assert_not_wrapped(ray.actor._modify_class) self.assert_not_wrapped(ray.actor.ActorHandle._actor_method_call) + self.assert_not_wrapped(ray.wait) def assert_not_module_double_patched(self, ray): self.assert_not_double_wrapped(ray.remote_function.RemoteFunction._remote) @@ -31,3 +33,4 @@ def assert_not_module_double_patched(self, ray): self.assert_not_double_wrapped(ray.dashboard.modules.job.job_manager.JobManager._monitor_job_internal) self.assert_not_double_wrapped(ray.actor._modify_class) self.assert_not_double_wrapped(ray.actor.ActorHandle._actor_method_call) + self.assert_not_double_wrapped(ray.wait) diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_wait.json b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_wait.json new file mode 100644 index 00000000000..73f418b897e --- /dev/null +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_wait.json @@ -0,0 +1,341 @@ +[[ + { + "name": "ray.job", + "service": "raysubmit_adr9j9h8CKhLtJtU", + "resource": "ray.job", + "trace_id": 0, + "span_id": 1, + "parent_id": 0, + "type": "ray", + "error": 0, + "meta": { + "_dd.base_service": "ray.dashboard", + "_dd.hostname": "docker-desktop", + "_dd.p.dm": "-0", + "_dd.p.tid": "68c867ae00000000", + "component": "ray", + "language": "python", + "ray.job.message": "Job finished successfully.", + "ray.job.status": "SUCCEEDED", + "ray.submission_id": "raysubmit_adr9j9h8CKhLtJtU", + "runtime-id": "328d005437be4deb970109dba573c215" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 16466 + }, + "duration": 4442299252, + "start": 1757964206501230344 + }, + { + "name": "ray.job.submit", + "service": "raysubmit_adr9j9h8CKhLtJtU", + "resource": "ray.job.submit", + "trace_id": 0, + "span_id": 2, + "parent_id": 1, + "type": "ray", + "error": 0, + "meta": { + "_dd.base_service": "ray.dashboard", + "_dd.hostname": "docker-desktop", + "component": "ray", + "ray.job.submit_status": "success", + "span.kind": "producer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 74750, + "start": 1757964206501529511 + }, + { + "name": "JobSupervisor.run.remote()", + "service": "raysubmit_adr9j9h8CKhLtJtU", + "resource": "JobSupervisor.run.remote()", + "trace_id": 0, + "span_id": 3, + "parent_id": 1, + "type": "ray", + "error": 0, + "meta": { + "_dd.base_service": "ray.dashboard", + "_dd.hostname": "docker-desktop", + "component": "ray", + "ray.actor_method.args": "()", + "ray.actor_method.kwargs": "{'_start_signal_actor': None, 'resources_specified': False}", + "ray.job_id": "01000000", + "ray.node_id": "b29ad664db2c014f0f46d24ba3b6fc9dac0d19927d8cb38a0159bdb3", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "span.kind": "producer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 624625, + "start": 1757964206541496386 + }, + { + "name": "JobSupervisor.run", + "service": "raysubmit_adr9j9h8CKhLtJtU", + "resource": "JobSupervisor.run", + "trace_id": 0, + "span_id": 4, + "parent_id": 3, + "type": "ray", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c867ae00000000", + "_dd.parent_id": "719ee915edd04442", + "component": "ray", + "language": "python", + "ray.actor_id": "825747a54e996b6d697d01b501000000", + "ray.job_id": "01000000", + "ray.node_id": "b29ad664db2c014f0f46d24ba3b6fc9dac0d19927d8cb38a0159bdb3", + "ray.submission_id": "raysubmit_adr9j9h8CKhLtJtU", + "ray.task_id": "16310a0f0a45af5c825747a54e996b6d697d01b501000000", + "ray.worker_id": "7acf16a50c99c146f9ce1f9a8b966382e85208b482eeda8022f1507f", + "runtime-id": "d91e2443ad6e45e9bc740c1374a9b8a7", + "span.kind": "consumer", + "traceparent": "00-68c867ae000000004a30d8817e877e24-719ee915edd04442-00", + "tracestate": "dd=p:719ee915edd04442" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 17002 + }, + "duration": 2907878709, + "start": 1757964207917623845 + }, + { + "name": "JobSupervisor._get_driver_env_vars", + "service": "raysubmit_adr9j9h8CKhLtJtU", + "resource": "JobSupervisor._get_driver_env_vars", + "trace_id": 0, + "span_id": 5, + "parent_id": 4, + "type": "ray", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", + "component": "ray", + "ray.actor_id": "825747a54e996b6d697d01b501000000", + "ray.actor_method.args": "(False,)", + "ray.actor_method.kwargs": "{}", + "ray.job_id": "01000000", + "ray.node_id": "b29ad664db2c014f0f46d24ba3b6fc9dac0d19927d8cb38a0159bdb3", + "ray.submission_id": "raysubmit_adr9j9h8CKhLtJtU", + "ray.task_id": "16310a0f0a45af5c825747a54e996b6d697d01b501000000", + "ray.worker_id": "7acf16a50c99c146f9ce1f9a8b966382e85208b482eeda8022f1507f", + "span.kind": "consumer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 2430125, + "start": 1757964207919520136 + }, + { + "name": "JobSupervisor._get_driver_runtime_env", + "service": "raysubmit_adr9j9h8CKhLtJtU", + "resource": "JobSupervisor._get_driver_runtime_env", + "trace_id": 0, + "span_id": 9, + "parent_id": 5, + "type": "ray", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", + "component": "ray", + "ray.actor_id": "825747a54e996b6d697d01b501000000", + "ray.actor_method.args": "(False,)", + "ray.actor_method.kwargs": "{}", + "ray.job_id": "01000000", + "ray.node_id": "b29ad664db2c014f0f46d24ba3b6fc9dac0d19927d8cb38a0159bdb3", + "ray.submission_id": "raysubmit_adr9j9h8CKhLtJtU", + "ray.task_id": "16310a0f0a45af5c825747a54e996b6d697d01b501000000", + "ray.worker_id": "7acf16a50c99c146f9ce1f9a8b966382e85208b482eeda8022f1507f", + "span.kind": "consumer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 260750, + "start": 1757964207921648928 + }, + { + "name": "exec simple_wait.py", + "service": "raysubmit_adr9j9h8CKhLtJtU", + "resource": "exec simple_wait.py", + "trace_id": 0, + "span_id": 6, + "parent_id": 4, + "type": "ray", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", + "component": "ray", + "ray.actor_id": "825747a54e996b6d697d01b501000000", + "ray.job_id": "01000000", + "ray.node_id": "b29ad664db2c014f0f46d24ba3b6fc9dac0d19927d8cb38a0159bdb3", + "ray.submission_id": "raysubmit_adr9j9h8CKhLtJtU", + "ray.task_id": "16310a0f0a45af5c825747a54e996b6d697d01b501000000", + "ray.worker_id": "7acf16a50c99c146f9ce1f9a8b966382e85208b482eeda8022f1507f", + "span.kind": "consumer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 800959, + "start": 1757964207922096761 + }, + { + "name": "__main__.add_one.remote()", + "service": "raysubmit_adr9j9h8CKhLtJtU", + "resource": "__main__.add_one.remote()", + "trace_id": 0, + "span_id": 7, + "parent_id": 4, + "type": "ray", + "error": 0, + "meta": { + "_dd.base_service": "project", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c867ae00000000", + "_dd.parent_id": "017ece9d9af38606", + "component": "ray", + "language": "python", + "ray.job_id": "02000000", + "ray.node_id": "b29ad664db2c014f0f46d24ba3b6fc9dac0d19927d8cb38a0159bdb3", + "ray.submission_id": "raysubmit_adr9j9h8CKhLtJtU", + "ray.task.args": "(42,)", + "ray.task.kwargs": "{}", + "ray.task.submit_status": "success", + "ray.worker_id": "02000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "c27f07b358824aeb915d3e69021dc59b", + "span.kind": "producer", + "traceparent": "00-68c867ae000000004a30d8817e877e24-017ece9d9af38606-00", + "tracestate": "dd=p:017ece9d9af38606;s:0" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 17065 + }, + "duration": 4914083, + "start": 1757964208740173387 + }, + { + "name": "__main__.add_one", + "service": "raysubmit_adr9j9h8CKhLtJtU", + "resource": "__main__.add_one", + "trace_id": 0, + "span_id": 10, + "parent_id": 7, + "type": "ray", + "error": 0, + "meta": { + "_dd.base_service": "ray._private.workers", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c867ae00000000", + "_dd.parent_id": "9c1c52ed4504ff10", + "component": "ray", + "language": "python", + "ray.job_id": "02000000", + "ray.node_id": "b29ad664db2c014f0f46d24ba3b6fc9dac0d19927d8cb38a0159bdb3", + "ray.submission_id": "raysubmit_adr9j9h8CKhLtJtU", + "ray.task.args": "(42,)", + "ray.task.kwargs": "{}", + "ray.task.status": "success", + "ray.task_id": "67a2e8cfa5a06db3ffffffffffffffffffffffff02000000", + "ray.worker_id": "e20820d9c6e65da2d9d433334e7725b380799b8e860d21e7db380d2e", + "runtime-id": "61148636275b434496edb547fa14f1f4", + "span.kind": "consumer", + "traceparent": "00-68c867ae000000004a30d8817e877e24-9c1c52ed4504ff10-00", + "tracestate": "dd=p:9c1c52ed4504ff10;s:0" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 17113 + }, + "duration": 315875, + "start": 1757964209842346554 + }, + { + "name": "ray.wait", + "service": "raysubmit_adr9j9h8CKhLtJtU", + "resource": "ray.wait", + "trace_id": 0, + "span_id": 8, + "parent_id": 4, + "type": "ray", + "error": 0, + "meta": { + "_dd.base_service": "project", + "_dd.hostname": "docker-desktop", + "_dd.p.tid": "68c867ae00000000", + "_dd.parent_id": "017ece9d9af38606", + "component": "ray", + "language": "python", + "ray.job_id": "02000000", + "ray.node_id": "b29ad664db2c014f0f46d24ba3b6fc9dac0d19927d8cb38a0159bdb3", + "ray.submission_id": "raysubmit_adr9j9h8CKhLtJtU", + "ray.wait.num_returns": "1", + "ray.wait.timeout_s": "60", + "ray.worker_id": "02000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "c27f07b358824aeb915d3e69021dc59b", + "span.kind": "producer", + "traceparent": "00-68c867ae000000004a30d8817e877e24-017ece9d9af38606-00", + "tracestate": "dd=p:017ece9d9af38606;s:0" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 17065 + }, + "duration": 1094989793, + "start": 1757964208751222553 + }]] From 27f689f65eb888fa5542b79d74db5639905cd8c1 Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Tue, 16 Sep 2025 15:01:32 +0200 Subject: [PATCH 27/59] chore(ray): consistency fixes and add tests for long running span --- ddtrace/contrib/internal/ray/patch.py | 44 +- ddtrace/contrib/internal/ray/utils.py | 16 + tests/contrib/ray/test_long_running_span.py | 178 +++++++ tests/contrib/ray/test_ray.py | 1 + ...ts.contrib.ray.test_ray.error_in_task.json | 317 +++++++------ ...trib.ray.test_ray.test_actor_and_task.json | 435 +++++++++--------- ....ray.test_ray.test_actor_interactions.json | 321 ++++++------- ...ontrib.ray.test_ray.test_nested_tasks.json | 273 +++++------ ...ontrib.ray.test_ray.test_simple_actor.json | 216 ++++----- ...contrib.ray.test_ray.test_simple_task.json | 303 ++++++------ 10 files changed, 1189 insertions(+), 915 deletions(-) create mode 100644 tests/contrib/ray/test_long_running_span.py diff --git a/ddtrace/contrib/internal/ray/patch.py b/ddtrace/contrib/internal/ray/patch.py index 7e85960fd42..efbb177eaca 100644 --- a/ddtrace/contrib/internal/ray/patch.py +++ b/ddtrace/contrib/internal/ray/patch.py @@ -1,7 +1,6 @@ from contextlib import contextmanager from functools import wraps import inspect -import logging import os import socket from typing import Any @@ -45,10 +44,10 @@ from .utils import _inject_dd_trace_ctx_kwarg from .utils import _inject_ray_span_tags from .utils import extract_signature +from .utils import set_maybe_big_tag -logger = logging.getLogger(__name__) -logger.setLevel(logging.INFO) +RAY_SUBMISSION_ID = "_RAY_SUBMISSION_ID" config._add( "ray", @@ -78,9 +77,6 @@ def process_trace(self, trace: List[Span]) -> Optional[List[Span]]: if span.service == "ray.dashboard" and span.get_tag("component") != "ray": continue - with open("ray_spans.log", "a") as f: - f.write(f"{span}\n") - if span.get_tag("component") == "ray": span.set_metric(_DJM_ENABLED_KEY, 1) span.set_metric(_FILTER_KEPT_KEY, 1) @@ -94,7 +90,7 @@ def process_trace(self, trace: List[Span]) -> Optional[List[Span]]: return filtered_spans -def _inject_tracing_into_remote_function(function): +def _wrap_remote_function_execution(function): """Inject trace context parameter into function signature""" @wraps(function) @@ -120,14 +116,14 @@ def _wrap_task_execution(wrapped, *args, **kwargs): with long_running_ray_span( f"{function_module}.{function_name}", - service=os.environ.get("_RAY_SUBMISSION_ID"), + service=os.environ.get(RAY_SUBMISSION_ID), span_type=SpanTypes.RAY, child_of=extracted_context, activate=True, ) as task_execute_span: try: - task_execute_span.set_tag("ray.task.args", args) - task_execute_span.set_tag("ray.task.kwargs", kwargs) + set_maybe_big_tag(task_execute_span, "ray.task.args", args) + set_maybe_big_tag(task_execute_span, "ray.task.kwargs", kwargs) result = wrapped(*args, **kwargs) @@ -150,20 +146,19 @@ def traced_submit_task(wrapped, instance, args, kwargs): # Inject dd_trace_ctx args in the function being executed by ray with instance._inject_lock: if instance._function_signature is None: - instance._function = _inject_tracing_into_remote_function(instance._function) + instance._function = _wrap_remote_function_execution(instance._function) instance._function.__signature__ = _inject_dd_trace_ctx_kwarg(instance._function) instance._function_signature = extract_signature(instance._function) with tracer.trace( - f"{instance._function_name}.remote()", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.RAY + f"{instance._function_name}.remote()", service=os.environ.get(RAY_SUBMISSION_ID), span_type=SpanTypes.RAY ) as span: span.set_tag_str(SPAN_KIND, SpanKind.PRODUCER) _inject_ray_span_tags(span) try: - span.set_tag("ray.task.args", kwargs["args"]) - span.set_tag("ray.task.kwargs", kwargs["kwargs"]) - + set_maybe_big_tag(span, "ray.task.args", kwargs.get("args", {})) + set_maybe_big_tag(span, "ray.task.kwargs", kwargs.get("kwargs", {})) _inject_context_in_kwargs(span.context, kwargs) resp = wrapped(*args, **kwargs) @@ -204,7 +199,7 @@ def traced_submit_job(wrapped, instance, args, kwargs): # Inject the context of the job so that ray.job.run is its child env_vars = kwargs.setdefault("runtime_env", {}).setdefault("env_vars", {}) _TraceContext._inject(job_span.context, env_vars) - env_vars["_RAY_SUBMISSION_ID"] = submission_id + env_vars[RAY_SUBMISSION_ID] = submission_id try: resp = wrapped(*args, **kwargs) @@ -240,11 +235,11 @@ def traced_actor_method_call(wrapped, instance, args, kwargs): tracer.context_provider.activate(_extract_tracing_context_from_env()) with tracer.trace( - f"{actor_name}.{method_name}.remote()", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.RAY + f"{actor_name}.{method_name}.remote()", service=os.environ.get(RAY_SUBMISSION_ID), span_type=SpanTypes.RAY ) as span: span.set_tag_str(SPAN_KIND, SpanKind.PRODUCER) - span.set_tag("ray.actor_method.args", kwargs["args"]) - span.set_tag("ray.actor_method.kwargs", kwargs["kwargs"]) + set_maybe_big_tag(span, "ray.actor_method.args", kwargs.get("args", {})) + set_maybe_big_tag(span, "ray.actor_method.kwargs", kwargs.get("kwargs", {})) _inject_ray_span_tags(span) try: @@ -294,7 +289,7 @@ async def _traced_run_method(self: Any, *args: Any, _dd_trace_ctx=None, **kwargs return await method(self, *args, **kwargs) context = _TraceContext._extract(_dd_trace_ctx) - submission_id = os.environ.get("_RAY_SUBMISSION_ID") + submission_id = os.environ.get(RAY_SUBMISSION_ID) with long_running_ray_span( f"{self.__class__.__name__}.{method.__name__}", @@ -336,7 +331,7 @@ def _traced_run_method(self: Any, *args: Any, _dd_trace_ctx=None, **kwargs: Any) entrypoint_name = self._entrypoint with tracer.trace( - f"exec {entrypoint_name}", service=os.environ.get("_RAY_SUBMISSION_ID"), span_type=SpanTypes.RAY + f"exec {entrypoint_name}", service=os.environ.get(RAY_SUBMISSION_ID), span_type=SpanTypes.RAY ) as span: span.set_tag_str(SPAN_KIND, SpanKind.CONSUMER) _inject_ray_span_tags(span) @@ -357,13 +352,14 @@ def _trace_actor_method(self: Any, method: Callable[..., Any], dd_trace_ctx, *ar with long_running_ray_span( f"{self.__class__.__name__}.{method.__name__}", - service=os.environ.get("_RAY_SUBMISSION_ID"), + service=os.environ.get(RAY_SUBMISSION_ID), span_type=SpanTypes.RAY, child_of=context, activate=True, ) as actor_execute_span: - actor_execute_span.set_tag("ray.actor_method.args", args) - actor_execute_span.set_tag("ray.actor_method.kwargs", kwargs) + set_maybe_big_tag(actor_execute_span, "ray.actor_method.args", args) + set_maybe_big_tag(actor_execute_span, "ray.actor_method.kwargs", kwargs) + yield actor_execute_span diff --git a/ddtrace/contrib/internal/ray/utils.py b/ddtrace/contrib/internal/ray/utils.py index 4d569b904f4..dfc03b0f788 100644 --- a/ddtrace/contrib/internal/ray/utils.py +++ b/ddtrace/contrib/internal/ray/utils.py @@ -2,6 +2,7 @@ from inspect import Parameter from inspect import Signature import os +import sys from typing import Any from typing import Callable from typing import List @@ -12,6 +13,9 @@ from ddtrace.propagation.http import _TraceContext +MAX_TAG_VALUES_SIZE_BYTES = 25000 + + def _inject_dd_trace_ctx_kwarg(method: Callable) -> Signature: old_sig = inspect.signature(method) if "_dd_trace_ctx" in old_sig.parameters: @@ -55,6 +59,7 @@ def _inject_ray_span_tags(span): span.set_tag_str("component", "ray") span.set_tag_str("ray.job_id", runtime_context.get_job_id()) span.set_tag_str("ray.node_id", runtime_context.get_node_id()) + span.set_tag_str("ray.pid", str(os.getpid())) worker_id = runtime_context.get_worker_id() if worker_id is not None: @@ -74,6 +79,17 @@ def _inject_ray_span_tags(span): span.set_tag_str("ray.submission_id", submission_id) +def set_maybe_big_tag(span, tag_name, tag_value): + """We want to add args/kwargs values as tag when we execute a task/actor method. + However they might be big. To avoid CPU cost for serializing a big object, we do it only + if the values are small enough to not be truncated + """ + if sys.getsizeof(tag_value) > MAX_TAG_VALUES_SIZE_BYTES: + span.set_tag(tag_name, "") + else: + span.set_tag(tag_name, tag_value) + + # ------------------------------------------------------------------------------------------- # This is extracted from ray code # it allows to ensure compatibility with older versions of ray still maintained (2.46.0) diff --git a/tests/contrib/ray/test_long_running_span.py b/tests/contrib/ray/test_long_running_span.py new file mode 100644 index 00000000000..b82f870049b --- /dev/null +++ b/tests/contrib/ray/test_long_running_span.py @@ -0,0 +1,178 @@ +import time + +from ddtrace import config +from ddtrace.contrib.internal.ray.span_manager import _job_manager +from ddtrace.contrib.internal.ray.span_manager import start_long_running_span +from ddtrace.contrib.internal.ray.span_manager import stop_long_running_span +from tests.utils import TracerTestCase + + +class TestLongRunningSpan(TracerTestCase): + """Test long running span functionality without Ray dependencies""" + + def setUp(self): + super().setUp() + # Override timing values to make tests run quickly + self.original_resubmit_interval = getattr(config.ray, "resubmit_interval", 120.0) + self.original_watch_delay = getattr(config.ray, "watch_delay", 10.0) + + # Set fast timing for testing + config.ray.resubmit_interval = 2 # 2s instead of 120s + config.ray.watch_delay = 1 # 1s instead of 10s + + # Clear any existing spans from the job manager + with _job_manager._lock: + _job_manager._job_spans.clear() + _job_manager._root_spans.clear() + _job_manager._timers.clear() + + def tearDown(self): + # Restore original values + config.ray.resubmit_interval = self.original_resubmit_interval + config.ray.watch_delay = self.original_watch_delay + + # Clean up any remaining timers + with _job_manager._lock: + for timer in _job_manager._timers.values(): + timer.cancel() + _job_manager._job_spans.clear() + _job_manager._root_spans.clear() + _job_manager._timers.clear() + super().tearDown() + + def test_long_running_span_basic_lifecycle(self): + """Test basic lifecycle of a long running span""" + + span = self.tracer.start_span("test.long.running", service="test-service") + span.set_tag_str("ray.submission_id", "test-submission-123") + + start_long_running_span(span) + + submission_id = "test-submission-123" + with _job_manager._lock: + self.assertIn(submission_id, _job_manager._job_spans) + self.assertIn((span.trace_id, span.span_id), _job_manager._job_spans[submission_id]) + + time.sleep(1.5) + + self.assertGreater(span.get_metric("_dd.partial_version"), 0) + self.assertEqual(span.get_tag("ray.job.status"), "RUNNING") + + stop_long_running_span(span) + + with _job_manager._lock: + job_spans = _job_manager._job_spans.get(submission_id, {}) + self.assertNotIn((span.trace_id, span.span_id), job_spans) + + self.assertEqual(span.get_metric("_dd.partial_version"), -1) + self.assertEqual(span.get_metric("_dd.was_long_running"), 1) + self.assertTrue(span.finished) + + def test_not_long_running_span(self): + """Test when a potential long running span lasts less then watch_delay""" + span = self.tracer.start_span("test.not.long.running", service="test-service") + span.set_tag_str("ray.submission_id", "test-submission-123") + + start_long_running_span(span) + + submission_id = "test-submission-123" + with _job_manager._lock: + self.assertIn(submission_id, _job_manager._job_spans) + self.assertIn((span.trace_id, span.span_id), _job_manager._job_spans[submission_id]) + + self.assertIsNone(span.get_metric("_dd.partial_version")) + self.assertIsNone(span.get_tag("ray.job.status")) + + stop_long_running_span(span) + + with _job_manager._lock: + job_spans = _job_manager._job_spans.get(submission_id, {}) + self.assertNotIn((span.trace_id, span.span_id), job_spans) + + self.assertIsNone(span.get_metric("_dd.partial_version")) + self.assertIsNone(span.get_metric("_dd.was_long_running")) + self.assertTrue(span.finished) + + def test_multiple_long_running_spans_same_submission(self): + """Test multiple spans with the same submission_id""" + submission_id = "test-multi-submission-999" + + span1 = self.tracer.start_span("test.span1", service="test-service") + span1.set_tag_str("ray.submission_id", submission_id) + + span2 = self.tracer.start_span("test.span2", service="test-service") + span2.set_tag_str("ray.submission_id", submission_id) + + start_long_running_span(span1) + start_long_running_span(span2) + + with _job_manager._lock: + job_spans = _job_manager._job_spans[submission_id] + self.assertIn((span1.trace_id, span1.span_id), job_spans) + self.assertIn((span2.trace_id, span2.span_id), job_spans) + + time.sleep(1.5) + + self.assertGreater(span1.get_metric("_dd.partial_version"), 0) + self.assertEqual(span1.get_tag("ray.job.status"), "RUNNING") + + self.assertGreater(span2.get_metric("_dd.partial_version"), 0) + self.assertEqual(span2.get_tag("ray.job.status"), "RUNNING") + + stop_long_running_span(span1) + stop_long_running_span(span2) + + self.assertTrue(span1.finished) + self.assertTrue(span2.finished) + self.assertEqual(span1.get_metric("_dd.was_long_running"), 1) + self.assertEqual(span2.get_metric("_dd.was_long_running"), 1) + + def test_long_running_span_hierarchies_and_context(self): + """Test parent/child relationships with mixed long-running and non-long-running spans.""" + submission_id = "test-parent-child-hierarchy-456" + parent_span = self.tracer.start_span(name="test.long.parent", service="test-service") + parent_span.set_tag_str("ray.submission_id", submission_id) + start_long_running_span(parent_span) + + child1 = self.tracer.start_span(name="test.child1.long", service="test-service", child_of=parent_span) + child1.set_tag_str("ray.submission_id", submission_id) + start_long_running_span(child1) + + time.sleep(3) + stop_long_running_span(child1) + self.assertTrue(child1.finished) + self.assertEqual(child1.get_metric("_dd.was_long_running"), 1) + + child2 = self.tracer.start_span(name="test.child2.short", service="test-service", child_of=parent_span) + child2.finish() + self.assertTrue(child2.finished) + self.assertIsNone(child2.get_metric("_dd.partial_version")) + + child3 = self.tracer.start_span(name="test.child3.long", service="test-service", child_of=parent_span) + child3.set_tag_str("ray.submission_id", submission_id) + start_long_running_span(child3) + + with _job_manager._lock: + job_spans = _job_manager._job_spans[submission_id] + self.assertIn((parent_span.trace_id, parent_span.span_id), job_spans) + self.assertIn((child3.trace_id, child3.span_id), job_spans) + self.assertNotIn((child1.trace_id, child1.span_id), job_spans) + self.assertNotIn((child2.trace_id, child2.span_id), job_spans) + + time.sleep(1.5) + + self.assertGreater(parent_span.get_metric("_dd.partial_version"), 0) + self.assertEqual(parent_span.get_tag("ray.job.status"), "RUNNING") + self.assertGreater(child3.get_metric("_dd.partial_version"), 0) + self.assertEqual(child3.get_tag("ray.job.status"), "RUNNING") + + stop_long_running_span(child3) + stop_long_running_span(parent_span) + + self.assertTrue(parent_span.finished) + self.assertTrue(child3.finished) + self.assertEqual(parent_span.get_metric("_dd.was_long_running"), 1) + self.assertEqual(child3.get_metric("_dd.was_long_running"), 1) + self.assertEqual(child1.parent_id, parent_span.span_id) + self.assertEqual(child2.parent_id, parent_span.span_id) + self.assertEqual(child3.parent_id, parent_span.span_id) diff --git a/tests/contrib/ray/test_ray.py b/tests/contrib/ray/test_ray.py index c5ad741a22e..07f6243ab38 100644 --- a/tests/contrib/ray/test_ray.py +++ b/tests/contrib/ray/test_ray.py @@ -43,6 +43,7 @@ def submit_ray_job(script_name, timeout=120): "meta.ray.actor_id", "meta.ray.task_id", "meta.ray.submission_id", + "meta.ray.pid", "meta.tracestate", "meta.traceparent", "meta.error.message", diff --git a/tests/snapshots/tests.contrib.ray.test_ray.error_in_task.json b/tests/snapshots/tests.contrib.ray.test_ray.error_in_task.json index 847b2729d85..f034285749d 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.error_in_task.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.error_in_task.json @@ -1,7 +1,7 @@ [[ { "name": "ray.job", - "service": "raysubmit_69nz2GVtHwkU9cZ4", + "service": "raysubmit_p4qyzGF2UjAseg8C", "resource": "ray.job", "trace_id": 0, "span_id": 1, @@ -12,14 +12,14 @@ "_dd.base_service": "ray.dashboard", "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68c825ce00000000", + "_dd.p.tid": "68ca810200000000", "component": "ray", - "error.message": "Job entrypoint command failed with exit code 1, last available logs (truncated to 20,000 chars):\n File \"/home/bits/project/.riot/venv_py3135_mock_pytest_pytest-mock_coverage_pytest-cov_opentracing_hypothesis6451_pytest-asyncio_ray[default]~2460/lib/python3.13/site-packages/ray/_private/worker.py\", line 930, in get_objects\n raise value.as_instanceof_cause()\nray.exceptions.RayTaskError(ValueError): \u001b[36mray::add_one()\u001b[39m (pid=2167, ip=192.168.65.3)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 102, in wrapped_function\n return _wrap_task_execution(function, *args, **kwargs)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 132, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", + "error.message": "Job entrypoint command failed with exit code 1, last available logs (truncated to 20,000 chars):\n File \"/home/bits/project/.riot/venv_py3135_mock_pytest_pytest-mock_coverage_pytest-cov_opentracing_hypothesis6451_pytest-asyncio_ray[default]/lib/python3.13/site-packages/ray/_private/worker.py\", line 968, in get_objects\n raise value.as_instanceof_cause()\nray.exceptions.RayTaskError(ValueError): \u001b[36mray::add_one()\u001b[39m (pid=2230, ip=192.168.65.3)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 98, in wrapped_function\n return _wrap_task_execution(function, *args, **kwargs)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 128, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", "language": "python", - "ray.job.message": "Job entrypoint command failed with exit code 1, last available logs (truncated to 20,000 chars):\n File \"/home/bits/project/.riot/venv_py3135_mock_pytest_pytest-mock_coverage_pytest-cov_opentracing_hypothesis6451_pytest-asyncio_ray[default]~2460/lib/python3.13/site-packages/ray/_private/worker.py\", line 930, in get_objects\n raise value.as_instanceof_cause()\nray.exceptions.RayTaskError(ValueError): \u001b[36mray::add_one()\u001b[39m (pid=2167, ip=192.168.65.3)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 102, in wrapped_function\n return _wrap_task_execution(function, *args, **kwargs)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 132, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", + "ray.job.message": "Job entrypoint command failed with exit code 1, last available logs (truncated to 20,000 chars):\n File \"/home/bits/project/.riot/venv_py3135_mock_pytest_pytest-mock_coverage_pytest-cov_opentracing_hypothesis6451_pytest-asyncio_ray[default]/lib/python3.13/site-packages/ray/_private/worker.py\", line 968, in get_objects\n raise value.as_instanceof_cause()\nray.exceptions.RayTaskError(ValueError): \u001b[36mray::add_one()\u001b[39m (pid=2230, ip=192.168.65.3)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 98, in wrapped_function\n return _wrap_task_execution(function, *args, **kwargs)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 128, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", "ray.job.status": "FAILED", - "ray.submission_id": "raysubmit_69nz2GVtHwkU9cZ4", - "runtime-id": "5ce8e7e7cd4b4680ba2a0c60c2b62ea4" + "ray.submission_id": "raysubmit_p4qyzGF2UjAseg8C", + "runtime-id": "6cec296b9ec54202916b51bc4ab5e15c" }, "metrics": { "_dd.djm.enabled": 1, @@ -28,14 +28,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1038 + "process_id": 1047 }, - "duration": 6890185920, - "start": 1757947342631845129 + "duration": 6890081920, + "start": 1758101762243241961 }, { "name": "ray.job.submit", - "service": "raysubmit_69nz2GVtHwkU9cZ4", + "service": "raysubmit_p4qyzGF2UjAseg8C", "resource": "ray.job.submit", "trace_id": 0, "span_id": 2, @@ -55,12 +55,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 31916, - "start": 1757947342631995338 + "duration": 33292, + "start": 1758101762243401169 }, { "name": "JobSupervisor.run.remote()", - "service": "raysubmit_69nz2GVtHwkU9cZ4", + "service": "raysubmit_p4qyzGF2UjAseg8C", "resource": "JobSupervisor.run.remote()", "trace_id": 0, "span_id": 3, @@ -71,10 +71,11 @@ "_dd.base_service": "ray.dashboard", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_method.args": "()", + "ray.actor_method.args": "[]", "ray.actor_method.kwargs": "{'_start_signal_actor': None, 'resources_specified': False}", "ray.job_id": "01000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "1047", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "producer" }, @@ -84,12 +85,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 285875, - "start": 1757947342635148963 + "duration": 305291, + "start": 1758101762246970503 }, { "name": "JobSupervisor.run", - "service": "raysubmit_69nz2GVtHwkU9cZ4", + "service": "raysubmit_p4qyzGF2UjAseg8C", "resource": "JobSupervisor.run", "trace_id": 0, "span_id": 4, @@ -99,23 +100,24 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825ce00000000", - "_dd.parent_id": "ce138840a7e0a516", + "_dd.p.tid": "68ca810200000000", + "_dd.parent_id": "338fc2f6e8490cbd", "component": "ray", "error.message": "", - "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 24, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 285, in _traced_run_method\n raise e\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 278, in _traced_run_method\n await method(self, *args, **kwargs)\n File \"/home/bits/project/.riot/venv_py3135_mock_pytest_pytest-mock_coverage_pytest-cov_opentracing_hypothesis6451_pytest-asyncio_ray[default]~2460/lib/python3.13/site-packages/ray/dashboard/modules/job/job_supervisor.py\", line 474, in run\n ray.actor.exit_actor()\n ~~~~~~~~~~~~~~~~~~~~^^\n File \"/home/bits/project/.riot/venv_py3135_mock_pytest_pytest-mock_coverage_pytest-cov_opentracing_hypothesis6451_pytest-asyncio_ray[default]~2460/lib/python3.13/site-packages/ray/actor.py\", line 1806, in exit_actor\n raise AsyncioActorExit()\nray.exceptions.AsyncioActorExit\n", + "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 24, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 280, in _traced_run_method\n raise e\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 273, in _traced_run_method\n await method(self, *args, **kwargs)\n File \"/home/bits/project/.riot/venv_py3135_mock_pytest_pytest-mock_coverage_pytest-cov_opentracing_hypothesis6451_pytest-asyncio_ray[default]/lib/python3.13/site-packages/ray/dashboard/modules/job/job_supervisor.py\", line 472, in run\n ray.actor.exit_actor()\n ~~~~~~~~~~~~~~~~~~~~^^\n File \"/home/bits/project/.riot/venv_py3135_mock_pytest_pytest-mock_coverage_pytest-cov_opentracing_hypothesis6451_pytest-asyncio_ray[default]/lib/python3.13/site-packages/ray/actor.py\", line 2387, in exit_actor\n raise AsyncioActorExit()\nray.exceptions.AsyncioActorExit\n", "error.type": "ray.exceptions.AsyncioActorExit", "language": "python", - "ray.actor_id": "a20d2caefba6f04d600dc4a201000000", + "ray.actor_id": "4f582dd54b2540c3ead02aeb01000000", "ray.job_id": "01000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_69nz2GVtHwkU9cZ4", - "ray.task_id": "5d4b8d1788f12d2da20d2caefba6f04d600dc4a201000000", - "ray.worker_id": "a7874bc1a89eba761af1ea6c7de70ce4f624b5777c522de9bedf6c8c", - "runtime-id": "8c6d959231bd492daac0f9652be0084e", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2129", + "ray.submission_id": "raysubmit_p4qyzGF2UjAseg8C", + "ray.task_id": "71b133a11e1c461c4f582dd54b2540c3ead02aeb01000000", + "ray.worker_id": "c6203c4de04bad390427905e4ab6126b9796240e7e6798d4b5023328", + "runtime-id": "28282dde5c504a99b4d9494026e78afe", "span.kind": "consumer", - "traceparent": "00-68c825ce000000009e7d164345e570f8-ce138840a7e0a516-00", - "tracestate": "dd=p:ce138840a7e0a516" + "traceparent": "00-68ca810200000000f72ecf263f3772c4-338fc2f6e8490cbd-00", + "tracestate": "dd=p:338fc2f6e8490cbd" }, "metrics": { "_dd.djm.enabled": 1, @@ -124,14 +126,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2072 + "process_id": 2129 }, - "duration": 5362781252, - "start": 1757947343485091380 + "duration": 5764122836, + "start": 1758101763093580003 }, { "name": "JobSupervisor._get_driver_env_vars", - "service": "raysubmit_69nz2GVtHwkU9cZ4", + "service": "raysubmit_p4qyzGF2UjAseg8C", "resource": "JobSupervisor._get_driver_env_vars", "trace_id": 0, "span_id": 5, @@ -142,14 +144,15 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "a20d2caefba6f04d600dc4a201000000", + "ray.actor_id": "4f582dd54b2540c3ead02aeb01000000", "ray.actor_method.args": "(False,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_69nz2GVtHwkU9cZ4", - "ray.task_id": "5d4b8d1788f12d2da20d2caefba6f04d600dc4a201000000", - "ray.worker_id": "a7874bc1a89eba761af1ea6c7de70ce4f624b5777c522de9bedf6c8c", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2129", + "ray.submission_id": "raysubmit_p4qyzGF2UjAseg8C", + "ray.task_id": "71b133a11e1c461c4f582dd54b2540c3ead02aeb01000000", + "ray.worker_id": "c6203c4de04bad390427905e4ab6126b9796240e7e6798d4b5023328", "span.kind": "consumer" }, "metrics": { @@ -158,12 +161,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 1661292, - "start": 1757947343486684713 + "duration": 1602000, + "start": 1758101763095024420 }, { "name": "JobSupervisor._get_driver_runtime_env", - "service": "raysubmit_69nz2GVtHwkU9cZ4", + "service": "raysubmit_p4qyzGF2UjAseg8C", "resource": "JobSupervisor._get_driver_runtime_env", "trace_id": 0, "span_id": 11, @@ -174,14 +177,15 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "a20d2caefba6f04d600dc4a201000000", + "ray.actor_id": "4f582dd54b2540c3ead02aeb01000000", "ray.actor_method.args": "(False,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_69nz2GVtHwkU9cZ4", - "ray.task_id": "5d4b8d1788f12d2da20d2caefba6f04d600dc4a201000000", - "ray.worker_id": "a7874bc1a89eba761af1ea6c7de70ce4f624b5777c522de9bedf6c8c", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2129", + "ray.submission_id": "raysubmit_p4qyzGF2UjAseg8C", + "ray.task_id": "71b133a11e1c461c4f582dd54b2540c3ead02aeb01000000", + "ray.worker_id": "c6203c4de04bad390427905e4ab6126b9796240e7e6798d4b5023328", "span.kind": "consumer" }, "metrics": { @@ -190,12 +194,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 152292, - "start": 1757947343488169296 + "duration": 157250, + "start": 1758101763096440128 }, { "name": "exec error_in_task.py", - "service": "raysubmit_69nz2GVtHwkU9cZ4", + "service": "raysubmit_p4qyzGF2UjAseg8C", "resource": "exec error_in_task.py", "trace_id": 0, "span_id": 6, @@ -206,12 +210,13 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "a20d2caefba6f04d600dc4a201000000", + "ray.actor_id": "4f582dd54b2540c3ead02aeb01000000", "ray.job_id": "01000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_69nz2GVtHwkU9cZ4", - "ray.task_id": "5d4b8d1788f12d2da20d2caefba6f04d600dc4a201000000", - "ray.worker_id": "a7874bc1a89eba761af1ea6c7de70ce4f624b5777c522de9bedf6c8c", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2129", + "ray.submission_id": "raysubmit_p4qyzGF2UjAseg8C", + "ray.task_id": "71b133a11e1c461c4f582dd54b2540c3ead02aeb01000000", + "ray.worker_id": "c6203c4de04bad390427905e4ab6126b9796240e7e6798d4b5023328", "span.kind": "consumer" }, "metrics": { @@ -220,12 +225,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 415833, - "start": 1757947343488477088 + "duration": 447042, + "start": 1758101763096784878 }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_69nz2GVtHwkU9cZ4", + "service": "raysubmit_p4qyzGF2UjAseg8C", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 7, @@ -235,21 +240,22 @@ "meta": { "_dd.base_service": "project", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825ce00000000", - "_dd.parent_id": "e7b9af51bc58b314", + "_dd.p.tid": "68ca810200000000", + "_dd.parent_id": "600a65d12323e96a", "component": "ray", "language": "python", "ray.job_id": "04000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_69nz2GVtHwkU9cZ4", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2182", + "ray.submission_id": "raysubmit_p4qyzGF2UjAseg8C", "ray.task.args": "(0,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.worker_id": "04000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "dc3b52b4541c4d14a19a56e24883616b", + "runtime-id": "d52659917d584cf39596aed7890d981c", "span.kind": "producer", - "traceparent": "00-68c825ce000000009e7d164345e570f8-e7b9af51bc58b314-00", - "tracestate": "dd=p:e7b9af51bc58b314;s:0" + "traceparent": "00-68ca810200000000f72ecf263f3772c4-600a65d12323e96a-00", + "tracestate": "dd=p:600a65d12323e96a;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -258,14 +264,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2122 + "process_id": 2182 }, - "duration": 3072750, - "start": 1757947344098265880 + "duration": 3168167, + "start": 1758101763687217378 }, { "name": "__main__.add_one", - "service": "raysubmit_69nz2GVtHwkU9cZ4", + "service": "raysubmit_p4qyzGF2UjAseg8C", "resource": "__main__.add_one", "trace_id": 0, "span_id": 12, @@ -275,25 +281,26 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825ce00000000", - "_dd.parent_id": "6f511b5d20278032", + "_dd.p.tid": "68ca810200000000", + "_dd.parent_id": "7f6cb90c2c8ffa23", "component": "ray", "error.message": "foo", - "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 24, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 132, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", + "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 24, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 128, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", "error.type": "builtins.ValueError", "language": "python", "ray.job_id": "04000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_69nz2GVtHwkU9cZ4", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2230", + "ray.submission_id": "raysubmit_p4qyzGF2UjAseg8C", "ray.task.args": "(0,)", "ray.task.kwargs": "{}", "ray.task.status": "error", "ray.task_id": "ca80f3a8e8ba2e50ffffffffffffffffffffffff04000000", - "ray.worker_id": "0bae3064224a59e20421b25723b380ab3ac5ac083e8b201bd23f18d5", - "runtime-id": "ae10f2d960314a588c352e2adf462f19", + "ray.worker_id": "4782a548f0a4f9fbb7182a3116f7d481735b6d0a783ca816d46adf24", + "runtime-id": "4b124518e8ef4ed4bf34fcfc40a87642", "span.kind": "consumer", - "traceparent": "00-68c825ce000000009e7d164345e570f8-6f511b5d20278032-00", - "tracestate": "dd=p:6f511b5d20278032;s:0" + "traceparent": "00-68ca810200000000f72ecf263f3772c4-7f6cb90c2c8ffa23-00", + "tracestate": "dd=p:7f6cb90c2c8ffa23;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -302,14 +309,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2167 + "process_id": 2230 }, - "duration": 3739583, - "start": 1757947345846102673 + "duration": 2611209, + "start": 1758101765610376629 }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_69nz2GVtHwkU9cZ4", + "service": "raysubmit_p4qyzGF2UjAseg8C", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 8, @@ -319,21 +326,22 @@ "meta": { "_dd.base_service": "project", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825ce00000000", - "_dd.parent_id": "e7b9af51bc58b314", + "_dd.p.tid": "68ca810200000000", + "_dd.parent_id": "600a65d12323e96a", "component": "ray", "language": "python", "ray.job_id": "04000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_69nz2GVtHwkU9cZ4", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2182", + "ray.submission_id": "raysubmit_p4qyzGF2UjAseg8C", "ray.task.args": "(1,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.worker_id": "04000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "dc3b52b4541c4d14a19a56e24883616b", + "runtime-id": "d52659917d584cf39596aed7890d981c", "span.kind": "producer", - "traceparent": "00-68c825ce000000009e7d164345e570f8-e7b9af51bc58b314-00", - "tracestate": "dd=p:e7b9af51bc58b314;s:0" + "traceparent": "00-68ca810200000000f72ecf263f3772c4-600a65d12323e96a-00", + "tracestate": "dd=p:600a65d12323e96a;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -342,14 +350,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2122 + "process_id": 2182 }, - "duration": 228917, - "start": 1757947344104082213 + "duration": 235958, + "start": 1758101763692579420 }, { "name": "__main__.add_one", - "service": "raysubmit_69nz2GVtHwkU9cZ4", + "service": "raysubmit_p4qyzGF2UjAseg8C", "resource": "__main__.add_one", "trace_id": 0, "span_id": 13, @@ -359,25 +367,26 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825ce00000000", - "_dd.parent_id": "4c29b261689f2f09", + "_dd.p.tid": "68ca810200000000", + "_dd.parent_id": "0a3ebb4252291aef", "component": "ray", "error.message": "foo", - "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 24, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 132, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", + "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 24, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 128, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", "error.type": "builtins.ValueError", "language": "python", "ray.job_id": "04000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_69nz2GVtHwkU9cZ4", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2228", + "ray.submission_id": "raysubmit_p4qyzGF2UjAseg8C", "ray.task.args": "(1,)", "ray.task.kwargs": "{}", "ray.task.status": "error", "ray.task_id": "d8c1ad1586102897ffffffffffffffffffffffff04000000", - "ray.worker_id": "ea835ee925f30897aff62407d5ee493c16becddd3b6a175e1a26c2b8", - "runtime-id": "e3355e8c56c34407afbead9deb054f9d", + "ray.worker_id": "14b50e1bf78424ce9f8a060619e42c35ac48dfee6e20d9ba7ec672a2", + "runtime-id": "e700c71e63c4406bbe5a1bce5c0cca56", "span.kind": "consumer", - "traceparent": "00-68c825ce000000009e7d164345e570f8-4c29b261689f2f09-00", - "tracestate": "dd=p:4c29b261689f2f09;s:0" + "traceparent": "00-68ca810200000000f72ecf263f3772c4-0a3ebb4252291aef-00", + "tracestate": "dd=p:0a3ebb4252291aef;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -386,14 +395,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2170 + "process_id": 2228 }, - "duration": 3043250, - "start": 1757947345904988964 + "duration": 3366583, + "start": 1758101765635094796 }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_69nz2GVtHwkU9cZ4", + "service": "raysubmit_p4qyzGF2UjAseg8C", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 9, @@ -403,21 +412,22 @@ "meta": { "_dd.base_service": "project", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825ce00000000", - "_dd.parent_id": "e7b9af51bc58b314", + "_dd.p.tid": "68ca810200000000", + "_dd.parent_id": "600a65d12323e96a", "component": "ray", "language": "python", "ray.job_id": "04000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_69nz2GVtHwkU9cZ4", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2182", + "ray.submission_id": "raysubmit_p4qyzGF2UjAseg8C", "ray.task.args": "(2,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.worker_id": "04000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "dc3b52b4541c4d14a19a56e24883616b", + "runtime-id": "d52659917d584cf39596aed7890d981c", "span.kind": "producer", - "traceparent": "00-68c825ce000000009e7d164345e570f8-e7b9af51bc58b314-00", - "tracestate": "dd=p:e7b9af51bc58b314;s:0" + "traceparent": "00-68ca810200000000f72ecf263f3772c4-600a65d12323e96a-00", + "tracestate": "dd=p:600a65d12323e96a;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -426,14 +436,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2122 + "process_id": 2182 }, - "duration": 153042, - "start": 1757947344106502713 + "duration": 184708, + "start": 1758101763694833837 }, { "name": "__main__.add_one", - "service": "raysubmit_69nz2GVtHwkU9cZ4", + "service": "raysubmit_p4qyzGF2UjAseg8C", "resource": "__main__.add_one", "trace_id": 0, "span_id": 14, @@ -443,25 +453,26 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825ce00000000", - "_dd.parent_id": "29146727f854042f", + "_dd.p.tid": "68ca810200000000", + "_dd.parent_id": "6689321ea6482242", "component": "ray", "error.message": "foo", - "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 24, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 132, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", + "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 24, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 128, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", "error.type": "builtins.ValueError", "language": "python", "ray.job_id": "04000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_69nz2GVtHwkU9cZ4", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2231", + "ray.submission_id": "raysubmit_p4qyzGF2UjAseg8C", "ray.task.args": "(2,)", "ray.task.kwargs": "{}", "ray.task.status": "error", "ray.task_id": "5da13aa9e2150759ffffffffffffffffffffffff04000000", - "ray.worker_id": "a332f48310c4c2a3876dc55d8be1b2a7da0b2a5823aff2be96650da5", - "runtime-id": "2ccf5771551242418902aaf50b7ad262", + "ray.worker_id": "08949b27735a13ccd92863c537888d7a7e78017efb171a388239f972", + "runtime-id": "4aea6dfb6c7f478c832b5f7966921f47", "span.kind": "consumer", - "traceparent": "00-68c825ce000000009e7d164345e570f8-29146727f854042f-00", - "tracestate": "dd=p:29146727f854042f;s:0" + "traceparent": "00-68ca810200000000f72ecf263f3772c4-6689321ea6482242-00", + "tracestate": "dd=p:6689321ea6482242;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -470,14 +481,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2169 + "process_id": 2231 }, - "duration": 4276834, - "start": 1757947345901689964 + "duration": 3489709, + "start": 1758101765633770004 }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_69nz2GVtHwkU9cZ4", + "service": "raysubmit_p4qyzGF2UjAseg8C", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 10, @@ -487,21 +498,22 @@ "meta": { "_dd.base_service": "project", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825ce00000000", - "_dd.parent_id": "e7b9af51bc58b314", + "_dd.p.tid": "68ca810200000000", + "_dd.parent_id": "600a65d12323e96a", "component": "ray", "language": "python", "ray.job_id": "04000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_69nz2GVtHwkU9cZ4", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2182", + "ray.submission_id": "raysubmit_p4qyzGF2UjAseg8C", "ray.task.args": "(3,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.worker_id": "04000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "dc3b52b4541c4d14a19a56e24883616b", + "runtime-id": "d52659917d584cf39596aed7890d981c", "span.kind": "producer", - "traceparent": "00-68c825ce000000009e7d164345e570f8-e7b9af51bc58b314-00", - "tracestate": "dd=p:e7b9af51bc58b314;s:0" + "traceparent": "00-68ca810200000000f72ecf263f3772c4-600a65d12323e96a-00", + "tracestate": "dd=p:600a65d12323e96a;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -510,14 +522,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2122 + "process_id": 2182 }, - "duration": 188375, - "start": 1757947344108044713 + "duration": 238750, + "start": 1758101763696649378 }, { "name": "__main__.add_one", - "service": "raysubmit_69nz2GVtHwkU9cZ4", + "service": "raysubmit_p4qyzGF2UjAseg8C", "resource": "__main__.add_one", "trace_id": 0, "span_id": 15, @@ -527,25 +539,26 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825ce00000000", - "_dd.parent_id": "63786a36a411a665", + "_dd.p.tid": "68ca810200000000", + "_dd.parent_id": "22d7cac664932f1a", "component": "ray", "error.message": "foo", - "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 24, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 132, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", + "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 24, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 128, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", "error.type": "builtins.ValueError", "language": "python", "ray.job_id": "04000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_69nz2GVtHwkU9cZ4", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2229", + "ray.submission_id": "raysubmit_p4qyzGF2UjAseg8C", "ray.task.args": "(3,)", "ray.task.kwargs": "{}", "ray.task.status": "error", "ray.task_id": "011ae9488efe4e25ffffffffffffffffffffffff04000000", - "ray.worker_id": "79af11420a51becae2df2569d19bbed115a4cff8487c78f0f50c7a39", - "runtime-id": "f98fdd4d2f3c413baadb6816245e3857", + "ray.worker_id": "1f953cf06721e7bbb34429df1a06ce03818fb0120f80c828893c1db9", + "runtime-id": "a76469ce81144325aba73b9c85c580c6", "span.kind": "consumer", - "traceparent": "00-68c825ce000000009e7d164345e570f8-63786a36a411a665-00", - "tracestate": "dd=p:63786a36a411a665;s:0" + "traceparent": "00-68ca810200000000f72ecf263f3772c4-22d7cac664932f1a-00", + "tracestate": "dd=p:22d7cac664932f1a;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -554,8 +567,8 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2168 + "process_id": 2229 }, - "duration": 3705250, - "start": 1757947345894277964 + "duration": 3064042, + "start": 1758101765648753879 }]] diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_actor_and_task.json b/tests/snapshots/tests.contrib.ray.test_ray.test_actor_and_task.json index 94736581a81..f4434a03d53 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_actor_and_task.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_actor_and_task.json @@ -1,7 +1,7 @@ [[ { "name": "ray.job", - "service": "raysubmit_DUD4srJTp9e5MFFw", + "service": "raysubmit_QtgsTNMg7sPPFJg4", "resource": "ray.job", "trace_id": 0, "span_id": 1, @@ -12,13 +12,13 @@ "_dd.base_service": "ray.dashboard", "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68c825be00000000", + "_dd.p.tid": "68ca80f200000000", "component": "ray", "language": "python", "ray.job.message": "Job finished successfully.", "ray.job.status": "SUCCEEDED", - "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", - "runtime-id": "5ce8e7e7cd4b4680ba2a0c60c2b62ea4" + "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", + "runtime-id": "6cec296b9ec54202916b51bc4ab5e15c" }, "metrics": { "_dd.djm.enabled": 1, @@ -27,14 +27,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1038 + "process_id": 1047 }, - "duration": 7114693697, - "start": 1757947326355395011 + "duration": 6091223127, + "start": 1758101746012804218 }, { "name": "ray.job.submit", - "service": "raysubmit_DUD4srJTp9e5MFFw", + "service": "raysubmit_QtgsTNMg7sPPFJg4", "resource": "ray.job.submit", "trace_id": 0, "span_id": 2, @@ -54,12 +54,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 54334, - "start": 1757947326355630719 + "duration": 82583, + "start": 1758101746013020343 }, { "name": "JobSupervisor.run.remote()", - "service": "raysubmit_DUD4srJTp9e5MFFw", + "service": "raysubmit_QtgsTNMg7sPPFJg4", "resource": "JobSupervisor.run.remote()", "trace_id": 0, "span_id": 3, @@ -70,10 +70,11 @@ "_dd.base_service": "ray.dashboard", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_method.args": "()", + "ray.actor_method.args": "[]", "ray.actor_method.kwargs": "{'_start_signal_actor': None, 'resources_specified': False}", "ray.job_id": "01000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "1047", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "producer" }, @@ -83,12 +84,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 414042, - "start": 1757947326411225969 + "duration": 378125, + "start": 1758101746044179259 }, { "name": "JobSupervisor.run", - "service": "raysubmit_DUD4srJTp9e5MFFw", + "service": "raysubmit_QtgsTNMg7sPPFJg4", "resource": "JobSupervisor.run", "trace_id": 0, "span_id": 4, @@ -98,20 +99,21 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825be00000000", - "_dd.parent_id": "8d429e830bed2653", + "_dd.p.tid": "68ca80f200000000", + "_dd.parent_id": "4e7e1b6c6d49af43", "component": "ray", "language": "python", - "ray.actor_id": "fb0700a53d35e3c884c88f8a01000000", + "ray.actor_id": "185ea73025776ab98a860a4901000000", "ray.job_id": "01000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", - "ray.task_id": "16310a0f0a45af5cfb0700a53d35e3c884c88f8a01000000", - "ray.worker_id": "d98abbb8235ab090553b5a7e8ce5e6855350537f26b86c260510c24e", - "runtime-id": "9d4ce545908942c794e0ac244c67cc12", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "1505", + "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", + "ray.task_id": "16310a0f0a45af5c185ea73025776ab98a860a4901000000", + "ray.worker_id": "69aaaafe4969dd1bd941920573a27be1112cd467fb2b4c34398594e8", + "runtime-id": "100f8ef0b2f04092bdaeb66186385aa8", "span.kind": "consumer", - "traceparent": "00-68c825be00000000c97e302fbc8d6554-8d429e830bed2653-00", - "tracestate": "dd=p:8d429e830bed2653" + "traceparent": "00-68ca80f200000000d5e0f7439c961116-4e7e1b6c6d49af43-00", + "tracestate": "dd=p:4e7e1b6c6d49af43" }, "metrics": { "_dd.djm.enabled": 1, @@ -120,14 +122,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1466 + "process_id": 1505 }, - "duration": 5058596780, - "start": 1757947327428065470 + "duration": 4348434419, + "start": 1758101747085556593 }, { "name": "JobSupervisor._get_driver_env_vars", - "service": "raysubmit_DUD4srJTp9e5MFFw", + "service": "raysubmit_QtgsTNMg7sPPFJg4", "resource": "JobSupervisor._get_driver_env_vars", "trace_id": 0, "span_id": 5, @@ -138,14 +140,15 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "fb0700a53d35e3c884c88f8a01000000", + "ray.actor_id": "185ea73025776ab98a860a4901000000", "ray.actor_method.args": "(False,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", - "ray.task_id": "16310a0f0a45af5cfb0700a53d35e3c884c88f8a01000000", - "ray.worker_id": "d98abbb8235ab090553b5a7e8ce5e6855350537f26b86c260510c24e", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "1505", + "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", + "ray.task_id": "16310a0f0a45af5c185ea73025776ab98a860a4901000000", + "ray.worker_id": "69aaaafe4969dd1bd941920573a27be1112cd467fb2b4c34398594e8", "span.kind": "consumer" }, "metrics": { @@ -154,12 +157,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 1899958, - "start": 1757947327429467428 + "duration": 1607125, + "start": 1758101747086940051 }, { "name": "JobSupervisor._get_driver_runtime_env", - "service": "raysubmit_DUD4srJTp9e5MFFw", + "service": "raysubmit_QtgsTNMg7sPPFJg4", "resource": "JobSupervisor._get_driver_runtime_env", "trace_id": 0, "span_id": 8, @@ -170,14 +173,15 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "fb0700a53d35e3c884c88f8a01000000", + "ray.actor_id": "185ea73025776ab98a860a4901000000", "ray.actor_method.args": "(False,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", - "ray.task_id": "16310a0f0a45af5cfb0700a53d35e3c884c88f8a01000000", - "ray.worker_id": "d98abbb8235ab090553b5a7e8ce5e6855350537f26b86c260510c24e", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "1505", + "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", + "ray.task_id": "16310a0f0a45af5c185ea73025776ab98a860a4901000000", + "ray.worker_id": "69aaaafe4969dd1bd941920573a27be1112cd467fb2b4c34398594e8", "span.kind": "consumer" }, "metrics": { @@ -186,12 +190,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 174833, - "start": 1757947327431031970 + "duration": 161709, + "start": 1758101747088362426 }, { "name": "exec actor_and_task.py", - "service": "raysubmit_DUD4srJTp9e5MFFw", + "service": "raysubmit_QtgsTNMg7sPPFJg4", "resource": "exec actor_and_task.py", "trace_id": 0, "span_id": 6, @@ -202,12 +206,13 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "fb0700a53d35e3c884c88f8a01000000", + "ray.actor_id": "185ea73025776ab98a860a4901000000", "ray.job_id": "01000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", - "ray.task_id": "16310a0f0a45af5cfb0700a53d35e3c884c88f8a01000000", - "ray.worker_id": "d98abbb8235ab090553b5a7e8ce5e6855350537f26b86c260510c24e", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "1505", + "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", + "ray.task_id": "16310a0f0a45af5c185ea73025776ab98a860a4901000000", + "ray.worker_id": "69aaaafe4969dd1bd941920573a27be1112cd467fb2b4c34398594e8", "span.kind": "consumer" }, "metrics": { @@ -216,12 +221,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 539541, - "start": 1757947327431626845 + "duration": 400833, + "start": 1758101747088710343 }, { "name": "ComputationManager.compute_and_store.remote()", - "service": "raysubmit_DUD4srJTp9e5MFFw", + "service": "raysubmit_QtgsTNMg7sPPFJg4", "resource": "ComputationManager.compute_and_store.remote()", "trace_id": 0, "span_id": 7, @@ -231,20 +236,21 @@ "meta": { "_dd.base_service": "project", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825be00000000", - "_dd.parent_id": "4bc0885803b566d1", + "_dd.p.tid": "68ca80f200000000", + "_dd.parent_id": "0ad1a2febd0de4b0", "component": "ray", "language": "python", "ray.actor_method.args": "([2, 3, 4],)", "ray.actor_method.kwargs": "{}", "ray.job_id": "02000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "1560", + "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", "ray.worker_id": "02000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "ba3214c397604acfa142f56868160ce6", + "runtime-id": "54f01591d4ef4805940a7d9b1a9add71", "span.kind": "producer", - "traceparent": "00-68c825be00000000c97e302fbc8d6554-4bc0885803b566d1-00", - "tracestate": "dd=p:4bc0885803b566d1;s:0" + "traceparent": "00-68ca80f200000000d5e0f7439c961116-0ad1a2febd0de4b0-00", + "tracestate": "dd=p:0ad1a2febd0de4b0;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -253,14 +259,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1518 + "process_id": 1560 }, - "duration": 519292, - "start": 1757947328092758553 + "duration": 396250, + "start": 1758101747708380218 }, { "name": "ComputationManager.compute_and_store", - "service": "raysubmit_DUD4srJTp9e5MFFw", + "service": "raysubmit_QtgsTNMg7sPPFJg4", "resource": "ComputationManager.compute_and_store", "trace_id": 0, "span_id": 9, @@ -270,22 +276,23 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825be00000000", - "_dd.parent_id": "52c1e112f1dd8e7b", + "_dd.p.tid": "68ca80f200000000", + "_dd.parent_id": "0d68996943a3da41", "component": "ray", "language": "python", - "ray.actor_id": "5479a858f3bc9f0a430120a502000000", + "ray.actor_id": "53db2ce6d7e8196521d0de4502000000", "ray.actor_method.args": "([2, 3, 4],)", "ray.actor_method.kwargs": "{}", "ray.job_id": "02000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", - "ray.task_id": "e082c90ab8422b005479a858f3bc9f0a430120a502000000", - "ray.worker_id": "fc417a9b8c988b0612369fd814a055e3fc6d57354d9370bc85af1a17", - "runtime-id": "b69887e96af0434a96e67ddece5ecaf1", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "1616", + "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", + "ray.task_id": "e082c90ab8422b0053db2ce6d7e8196521d0de4502000000", + "ray.worker_id": "c52496c8b004b4cd1ae038a384378d4ba234598030b280a85f608836", + "runtime-id": "5384824c5a8348b9a924842b0bd9db39", "span.kind": "consumer", - "traceparent": "00-68c825be00000000c97e302fbc8d6554-52c1e112f1dd8e7b-00", - "tracestate": "dd=p:52c1e112f1dd8e7b;s:0" + "traceparent": "00-68ca80f200000000d5e0f7439c961116-0d68996943a3da41-00", + "tracestate": "dd=p:0d68996943a3da41;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -294,14 +301,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1564 + "process_id": 1616 }, - "duration": 2902640085, - "start": 1757947329045475554 + "duration": 2600556584, + "start": 1758101748518810594 }, { "name": "ComputationManager.increment_count", - "service": "raysubmit_DUD4srJTp9e5MFFw", + "service": "raysubmit_QtgsTNMg7sPPFJg4", "resource": "ComputationManager.increment_count", "trace_id": 0, "span_id": 10, @@ -312,14 +319,15 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "5479a858f3bc9f0a430120a502000000", + "ray.actor_id": "53db2ce6d7e8196521d0de4502000000", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", "ray.job_id": "02000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", - "ray.task_id": "e082c90ab8422b005479a858f3bc9f0a430120a502000000", - "ray.worker_id": "fc417a9b8c988b0612369fd814a055e3fc6d57354d9370bc85af1a17", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "1616", + "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", + "ray.task_id": "e082c90ab8422b0053db2ce6d7e8196521d0de4502000000", + "ray.worker_id": "c52496c8b004b4cd1ae038a384378d4ba234598030b280a85f608836", "span.kind": "consumer" }, "metrics": { @@ -328,12 +336,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 122375, - "start": 1757947329045675262 + "duration": 110417, + "start": 1758101748519034385 }, { "name": "__main__.batch_compute.remote()", - "service": "raysubmit_DUD4srJTp9e5MFFw", + "service": "raysubmit_QtgsTNMg7sPPFJg4", "resource": "__main__.batch_compute.remote()", "trace_id": 0, "span_id": 11, @@ -344,15 +352,16 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "5479a858f3bc9f0a430120a502000000", + "ray.actor_id": "53db2ce6d7e8196521d0de4502000000", "ray.job_id": "02000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "1616", + "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", "ray.task.args": "([2, 3, 4],)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", - "ray.task_id": "e082c90ab8422b005479a858f3bc9f0a430120a502000000", - "ray.worker_id": "fc417a9b8c988b0612369fd814a055e3fc6d57354d9370bc85af1a17", + "ray.task_id": "e082c90ab8422b0053db2ce6d7e8196521d0de4502000000", + "ray.worker_id": "c52496c8b004b4cd1ae038a384378d4ba234598030b280a85f608836", "span.kind": "producer" }, "metrics": { @@ -361,12 +370,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 1639000, - "start": 1757947329045857637 + "duration": 1618708, + "start": 1758101748519218802 }, { "name": "__main__.batch_compute", - "service": "raysubmit_DUD4srJTp9e5MFFw", + "service": "raysubmit_QtgsTNMg7sPPFJg4", "resource": "__main__.batch_compute", "trace_id": 0, "span_id": 17, @@ -376,22 +385,23 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825be00000000", - "_dd.parent_id": "d50629645c99b2bb", + "_dd.p.tid": "68ca80f200000000", + "_dd.parent_id": "993adff4a186de90", "component": "ray", "language": "python", "ray.job_id": "02000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "1676", + "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", "ray.task.args": "([2, 3, 4],)", "ray.task.kwargs": "{}", "ray.task.status": "success", - "ray.task_id": "cf9678e695079bccffffffffffffffffffffffff02000000", - "ray.worker_id": "9db8f9790664f454d9f5c59fae9d70d66a57d11c10eab737f06b4f4a", - "runtime-id": "aedbc23f3fdd4ce7acd1ec3093e9e935", + "ray.task_id": "a21870e98717e19bffffffffffffffffffffffff02000000", + "ray.worker_id": "a1c7915a4a294885a7fcdc430dfd04a81c472c8c826bf48d46ea758c", + "runtime-id": "f7fb49937cc24110a4ee87decfd77509", "span.kind": "consumer", - "traceparent": "00-68c825be00000000c97e302fbc8d6554-d50629645c99b2bb-00", - "tracestate": "dd=p:d50629645c99b2bb;s:0" + "traceparent": "00-68ca80f200000000d5e0f7439c961116-993adff4a186de90-00", + "tracestate": "dd=p:993adff4a186de90;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -400,14 +410,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1630 + "process_id": 1676 }, - "duration": 1910410668, - "start": 1757947330032243679 + "duration": 1749371542, + "start": 1758101749366667886 }, { "name": "__main__.compute_value.remote()", - "service": "raysubmit_DUD4srJTp9e5MFFw", + "service": "raysubmit_QtgsTNMg7sPPFJg4", "resource": "__main__.compute_value.remote()", "trace_id": 0, "span_id": 18, @@ -419,13 +429,14 @@ "_dd.hostname": "docker-desktop", "component": "ray", "ray.job_id": "02000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "1676", + "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", "ray.task.args": "(2,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", - "ray.task_id": "cf9678e695079bccffffffffffffffffffffffff02000000", - "ray.worker_id": "9db8f9790664f454d9f5c59fae9d70d66a57d11c10eab737f06b4f4a", + "ray.task_id": "a21870e98717e19bffffffffffffffffffffffff02000000", + "ray.worker_id": "a1c7915a4a294885a7fcdc430dfd04a81c472c8c826bf48d46ea758c", "span.kind": "producer" }, "metrics": { @@ -434,12 +445,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 1336125, - "start": 1757947330032565263 + "duration": 1185209, + "start": 1758101749366953177 }, { "name": "__main__.compute_value", - "service": "raysubmit_DUD4srJTp9e5MFFw", + "service": "raysubmit_QtgsTNMg7sPPFJg4", "resource": "__main__.compute_value", "trace_id": 0, "span_id": 21, @@ -449,22 +460,23 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825be00000000", - "_dd.parent_id": "130cc0c8f2fa5b3e", + "_dd.p.tid": "68ca80f200000000", + "_dd.parent_id": "d3c7c1e22a66479e", "component": "ray", "language": "python", "ray.job_id": "02000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "1726", + "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", "ray.task.args": "(2,)", "ray.task.kwargs": "{}", "ray.task.status": "success", - "ray.task_id": "5c2e56e945921c44ffffffffffffffffffffffff02000000", - "ray.worker_id": "e4216c02a69fa57483b30a21a279bb41e905333f7919ec09facda6ac", - "runtime-id": "475b901ae28d4120be31b3912e778b8b", + "ray.task_id": "6facd2a027aea4aeffffffffffffffffffffffff02000000", + "ray.worker_id": "88ac98cd102df8ba02c93e15611e30e73b9e7b2a6b600866483ff0e4", + "runtime-id": "0611cc5d550b44bb91b893af08690446", "span.kind": "consumer", - "traceparent": "00-68c825be00000000c97e302fbc8d6554-130cc0c8f2fa5b3e-00", - "tracestate": "dd=p:130cc0c8f2fa5b3e;s:0" + "traceparent": "00-68ca80f200000000d5e0f7439c961116-d3c7c1e22a66479e-00", + "tracestate": "dd=p:d3c7c1e22a66479e;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -473,14 +485,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1678 + "process_id": 1726 }, - "duration": 278292, - "start": 1757947331784398430 + "duration": 476125, + "start": 1758101751076124012 }, { "name": "__main__.compute_value.remote()", - "service": "raysubmit_DUD4srJTp9e5MFFw", + "service": "raysubmit_QtgsTNMg7sPPFJg4", "resource": "__main__.compute_value.remote()", "trace_id": 0, "span_id": 19, @@ -492,13 +504,14 @@ "_dd.hostname": "docker-desktop", "component": "ray", "ray.job_id": "02000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "1676", + "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", "ray.task.args": "(3,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", - "ray.task_id": "cf9678e695079bccffffffffffffffffffffffff02000000", - "ray.worker_id": "9db8f9790664f454d9f5c59fae9d70d66a57d11c10eab737f06b4f4a", + "ray.task_id": "a21870e98717e19bffffffffffffffffffffffff02000000", + "ray.worker_id": "a1c7915a4a294885a7fcdc430dfd04a81c472c8c826bf48d46ea758c", "span.kind": "producer" }, "metrics": { @@ -507,12 +520,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 148666, - "start": 1757947330033934513 + "duration": 118459, + "start": 1758101749368167677 }, { "name": "__main__.compute_value", - "service": "raysubmit_DUD4srJTp9e5MFFw", + "service": "raysubmit_QtgsTNMg7sPPFJg4", "resource": "__main__.compute_value", "trace_id": 0, "span_id": 22, @@ -522,22 +535,23 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825be00000000", - "_dd.parent_id": "cf75863fc49e4de3", + "_dd.p.tid": "68ca80f200000000", + "_dd.parent_id": "dbd834581ecddd74", "component": "ray", "language": "python", "ray.job_id": "02000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "1724", + "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", "ray.task.args": "(3,)", "ray.task.kwargs": "{}", "ray.task.status": "success", - "ray.task_id": "a2febe36a32008e2ffffffffffffffffffffffff02000000", - "ray.worker_id": "96e3e82917f910c13162ce5256d88af7cda9795ad21d734ddc7f976b", - "runtime-id": "76fea7e43a3749bb8eefbcba1534b80d", + "ray.task_id": "ba48ab699c81b4f3ffffffffffffffffffffffff02000000", + "ray.worker_id": "7703d24f9197f363426bc6081719528d22bce0d9e6987329b1de9864", + "runtime-id": "4d73be6e782543188a797d1a9b3f0696", "span.kind": "consumer", - "traceparent": "00-68c825be00000000c97e302fbc8d6554-cf75863fc49e4de3-00", - "tracestate": "dd=p:cf75863fc49e4de3;s:0" + "traceparent": "00-68ca80f200000000d5e0f7439c961116-dbd834581ecddd74-00", + "tracestate": "dd=p:dbd834581ecddd74;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -546,14 +560,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1679 + "process_id": 1724 }, - "duration": 258583, - "start": 1757947331925850389 + "duration": 284208, + "start": 1758101751111992262 }, { "name": "__main__.compute_value.remote()", - "service": "raysubmit_DUD4srJTp9e5MFFw", + "service": "raysubmit_QtgsTNMg7sPPFJg4", "resource": "__main__.compute_value.remote()", "trace_id": 0, "span_id": 20, @@ -565,13 +579,14 @@ "_dd.hostname": "docker-desktop", "component": "ray", "ray.job_id": "02000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "1676", + "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", "ray.task.args": "(4,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", - "ray.task_id": "cf9678e695079bccffffffffffffffffffffffff02000000", - "ray.worker_id": "9db8f9790664f454d9f5c59fae9d70d66a57d11c10eab737f06b4f4a", + "ray.task_id": "a21870e98717e19bffffffffffffffffffffffff02000000", + "ray.worker_id": "a1c7915a4a294885a7fcdc430dfd04a81c472c8c826bf48d46ea758c", "span.kind": "producer" }, "metrics": { @@ -580,12 +595,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 102167, - "start": 1757947330034099929 + "duration": 95375, + "start": 1758101749368304761 }, { "name": "__main__.compute_value", - "service": "raysubmit_DUD4srJTp9e5MFFw", + "service": "raysubmit_QtgsTNMg7sPPFJg4", "resource": "__main__.compute_value", "trace_id": 0, "span_id": 23, @@ -595,22 +610,23 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825be00000000", - "_dd.parent_id": "f29c5f3105ed5579", + "_dd.p.tid": "68ca80f200000000", + "_dd.parent_id": "e66a0cc6d06f466b", "component": "ray", "language": "python", "ray.job_id": "02000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "1725", + "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", "ray.task.args": "(4,)", "ray.task.kwargs": "{}", "ray.task.status": "success", - "ray.task_id": "e186f4231875fdacffffffffffffffffffffffff02000000", - "ray.worker_id": "a7d1c753daec2d02636657ab1a38ee7ba38653ad7286621cde9f99d3", - "runtime-id": "acc876b7f50247a085f4aa6256b13e69", + "ray.task_id": "b471366345076203ffffffffffffffffffffffff02000000", + "ray.worker_id": "8c00d483a12f27b3cf3cad087a68ae43d52cd09a24e1e850cc3a0b3d", + "runtime-id": "bfb2b2761c3545d79e2f55604530882c", "span.kind": "consumer", - "traceparent": "00-68c825be00000000c97e302fbc8d6554-f29c5f3105ed5579-00", - "tracestate": "dd=p:f29c5f3105ed5579;s:0" + "traceparent": "00-68ca80f200000000d5e0f7439c961116-e66a0cc6d06f466b-00", + "tracestate": "dd=p:e66a0cc6d06f466b;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -619,14 +635,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1680 + "process_id": 1725 }, - "duration": 227709, - "start": 1757947331939046680 + "duration": 287666, + "start": 1758101751104082887 }, { "name": "ComputationManager.add_result", - "service": "raysubmit_DUD4srJTp9e5MFFw", + "service": "raysubmit_QtgsTNMg7sPPFJg4", "resource": "ComputationManager.add_result", "trace_id": 0, "span_id": 12, @@ -637,14 +653,15 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "5479a858f3bc9f0a430120a502000000", + "ray.actor_id": "53db2ce6d7e8196521d0de4502000000", "ray.actor_method.args": "(3,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "02000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", - "ray.task_id": "e082c90ab8422b005479a858f3bc9f0a430120a502000000", - "ray.worker_id": "fc417a9b8c988b0612369fd814a055e3fc6d57354d9370bc85af1a17", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "1616", + "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", + "ray.task_id": "e082c90ab8422b0053db2ce6d7e8196521d0de4502000000", + "ray.worker_id": "c52496c8b004b4cd1ae038a384378d4ba234598030b280a85f608836", "span.kind": "consumer" }, "metrics": { @@ -653,12 +670,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 177417, - "start": 1757947331945538305 + "duration": 221083, + "start": 1758101751118654137 }, { "name": "ComputationManager.add_result", - "service": "raysubmit_DUD4srJTp9e5MFFw", + "service": "raysubmit_QtgsTNMg7sPPFJg4", "resource": "ComputationManager.add_result", "trace_id": 0, "span_id": 13, @@ -669,14 +686,15 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "5479a858f3bc9f0a430120a502000000", + "ray.actor_id": "53db2ce6d7e8196521d0de4502000000", "ray.actor_method.args": "(4,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "02000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", - "ray.task_id": "e082c90ab8422b005479a858f3bc9f0a430120a502000000", - "ray.worker_id": "fc417a9b8c988b0612369fd814a055e3fc6d57354d9370bc85af1a17", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "1616", + "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", + "ray.task_id": "e082c90ab8422b0053db2ce6d7e8196521d0de4502000000", + "ray.worker_id": "c52496c8b004b4cd1ae038a384378d4ba234598030b280a85f608836", "span.kind": "consumer" }, "metrics": { @@ -685,12 +703,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 2062833, - "start": 1757947331945735722 + "duration": 106500, + "start": 1758101751118895137 }, { "name": "ComputationManager.add_result", - "service": "raysubmit_DUD4srJTp9e5MFFw", + "service": "raysubmit_QtgsTNMg7sPPFJg4", "resource": "ComputationManager.add_result", "trace_id": 0, "span_id": 14, @@ -701,14 +719,15 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "5479a858f3bc9f0a430120a502000000", + "ray.actor_id": "53db2ce6d7e8196521d0de4502000000", "ray.actor_method.args": "(5,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "02000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", - "ray.task_id": "e082c90ab8422b005479a858f3bc9f0a430120a502000000", - "ray.worker_id": "fc417a9b8c988b0612369fd814a055e3fc6d57354d9370bc85af1a17", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "1616", + "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", + "ray.task_id": "e082c90ab8422b0053db2ce6d7e8196521d0de4502000000", + "ray.worker_id": "c52496c8b004b4cd1ae038a384378d4ba234598030b280a85f608836", "span.kind": "consumer" }, "metrics": { @@ -717,12 +736,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 114458, - "start": 1757947331947819847 + "duration": 105375, + "start": 1758101751119019720 }, { "name": "ComputationManager.get_count", - "service": "raysubmit_DUD4srJTp9e5MFFw", + "service": "raysubmit_QtgsTNMg7sPPFJg4", "resource": "ComputationManager.get_count", "trace_id": 0, "span_id": 15, @@ -733,14 +752,15 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "5479a858f3bc9f0a430120a502000000", + "ray.actor_id": "53db2ce6d7e8196521d0de4502000000", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", "ray.job_id": "02000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", - "ray.task_id": "e082c90ab8422b005479a858f3bc9f0a430120a502000000", - "ray.worker_id": "fc417a9b8c988b0612369fd814a055e3fc6d57354d9370bc85af1a17", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "1616", + "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", + "ray.task_id": "e082c90ab8422b0053db2ce6d7e8196521d0de4502000000", + "ray.worker_id": "c52496c8b004b4cd1ae038a384378d4ba234598030b280a85f608836", "span.kind": "consumer" }, "metrics": { @@ -749,12 +769,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 67625, - "start": 1757947331947948139 + "duration": 97125, + "start": 1758101751119138720 }, { "name": "ComputationManager.get_results", - "service": "raysubmit_DUD4srJTp9e5MFFw", + "service": "raysubmit_QtgsTNMg7sPPFJg4", "resource": "ComputationManager.get_results", "trace_id": 0, "span_id": 16, @@ -765,14 +785,15 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "5479a858f3bc9f0a430120a502000000", + "ray.actor_id": "53db2ce6d7e8196521d0de4502000000", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", "ray.job_id": "02000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_DUD4srJTp9e5MFFw", - "ray.task_id": "e082c90ab8422b005479a858f3bc9f0a430120a502000000", - "ray.worker_id": "fc417a9b8c988b0612369fd814a055e3fc6d57354d9370bc85af1a17", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "1616", + "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", + "ray.task_id": "e082c90ab8422b0053db2ce6d7e8196521d0de4502000000", + "ray.worker_id": "c52496c8b004b4cd1ae038a384378d4ba234598030b280a85f608836", "span.kind": "consumer" }, "metrics": { @@ -781,6 +802,6 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 69666, - "start": 1757947331948028514 + "duration": 96167, + "start": 1758101751119252303 }]] diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_actor_interactions.json b/tests/snapshots/tests.contrib.ray.test_ray.test_actor_interactions.json index 4be84b0ea30..dd8a67d8dcc 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_actor_interactions.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_actor_interactions.json @@ -1,7 +1,7 @@ [[ { "name": "ray.job", - "service": "raysubmit_kDQ5DhXbAwfp9GTv", + "service": "raysubmit_DViFN6C258zqpTa8", "resource": "ray.job", "trace_id": 0, "span_id": 1, @@ -12,13 +12,13 @@ "_dd.base_service": "ray.dashboard", "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68c825c800000000", + "_dd.p.tid": "68ca80fb00000000", "component": "ray", "language": "python", "ray.job.message": "Job finished successfully.", "ray.job.status": "SUCCEEDED", - "ray.submission_id": "raysubmit_kDQ5DhXbAwfp9GTv", - "runtime-id": "5ce8e7e7cd4b4680ba2a0c60c2b62ea4" + "ray.submission_id": "raysubmit_DViFN6C258zqpTa8", + "runtime-id": "6cec296b9ec54202916b51bc4ab5e15c" }, "metrics": { "_dd.djm.enabled": 1, @@ -27,14 +27,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1038 + "process_id": 1047 }, - "duration": 3930566085, - "start": 1757947336069148043 + "duration": 3944445987, + "start": 1758101755675254139 }, { "name": "ray.job.submit", - "service": "raysubmit_kDQ5DhXbAwfp9GTv", + "service": "raysubmit_DViFN6C258zqpTa8", "resource": "ray.job.submit", "trace_id": 0, "span_id": 2, @@ -54,12 +54,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 34875, - "start": 1757947336069318918 + "duration": 38833, + "start": 1758101755675453014 }, { "name": "JobSupervisor.run.remote()", - "service": "raysubmit_kDQ5DhXbAwfp9GTv", + "service": "raysubmit_DViFN6C258zqpTa8", "resource": "JobSupervisor.run.remote()", "trace_id": 0, "span_id": 3, @@ -70,10 +70,11 @@ "_dd.base_service": "ray.dashboard", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_method.args": "()", + "ray.actor_method.args": "[]", "ray.actor_method.kwargs": "{'_start_signal_actor': None, 'resources_specified': False}", "ray.job_id": "01000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "1047", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "producer" }, @@ -83,12 +84,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 257166, - "start": 1757947336072874710 + "duration": 339958, + "start": 1758101755678775264 }, { "name": "JobSupervisor.run", - "service": "raysubmit_kDQ5DhXbAwfp9GTv", + "service": "raysubmit_DViFN6C258zqpTa8", "resource": "JobSupervisor.run", "trace_id": 0, "span_id": 4, @@ -98,20 +99,21 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825c800000000", - "_dd.parent_id": "83114592f6129384", + "_dd.p.tid": "68ca80fb00000000", + "_dd.parent_id": "6ed7628bf3351859", "component": "ray", "language": "python", - "ray.actor_id": "225afb49fe1f726e56a4ca9801000000", + "ray.actor_id": "3489da007773e40d07bd771201000000", "ray.job_id": "01000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_kDQ5DhXbAwfp9GTv", - "ray.task_id": "359ec6ce30d3ca2d225afb49fe1f726e56a4ca9801000000", - "ray.worker_id": "d8e09801e9a2563b0b41cef560400a2b75d3a9ced8e073b85739201a", - "runtime-id": "ca56e2adcf6e4252a5a775a8f1f7c9a1", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "1901", + "ray.submission_id": "raysubmit_DViFN6C258zqpTa8", + "ray.task_id": "80e22aed7718a1253489da007773e40d07bd771201000000", + "ray.worker_id": "e34ed43553e5f5c331665eccd396705aaa6efcf5362b22198c7cc775", + "runtime-id": "72824364ff3948c8b73454d2f186dc37", "span.kind": "consumer", - "traceparent": "00-68c825c800000000f974540d4212dabb-83114592f6129384-00", - "tracestate": "dd=p:83114592f6129384" + "traceparent": "00-68ca80fb0000000005c84ea427251193-6ed7628bf3351859-00", + "tracestate": "dd=p:6ed7628bf3351859" }, "metrics": { "_dd.djm.enabled": 1, @@ -120,14 +122,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1851 + "process_id": 1901 }, - "duration": 2833485918, - "start": 1757947336986501418 + "duration": 2530345709, + "start": 1758101756598734042 }, { "name": "JobSupervisor._get_driver_env_vars", - "service": "raysubmit_kDQ5DhXbAwfp9GTv", + "service": "raysubmit_DViFN6C258zqpTa8", "resource": "JobSupervisor._get_driver_env_vars", "trace_id": 0, "span_id": 5, @@ -138,14 +140,15 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "225afb49fe1f726e56a4ca9801000000", + "ray.actor_id": "3489da007773e40d07bd771201000000", "ray.actor_method.args": "(False,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_kDQ5DhXbAwfp9GTv", - "ray.task_id": "359ec6ce30d3ca2d225afb49fe1f726e56a4ca9801000000", - "ray.worker_id": "d8e09801e9a2563b0b41cef560400a2b75d3a9ced8e073b85739201a", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "1901", + "ray.submission_id": "raysubmit_DViFN6C258zqpTa8", + "ray.task_id": "80e22aed7718a1253489da007773e40d07bd771201000000", + "ray.worker_id": "e34ed43553e5f5c331665eccd396705aaa6efcf5362b22198c7cc775", "span.kind": "consumer" }, "metrics": { @@ -154,12 +157,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 1732833, - "start": 1757947336988022210 + "duration": 1596208, + "start": 1758101756600175375 }, { "name": "JobSupervisor._get_driver_runtime_env", - "service": "raysubmit_kDQ5DhXbAwfp9GTv", + "service": "raysubmit_DViFN6C258zqpTa8", "resource": "JobSupervisor._get_driver_runtime_env", "trace_id": 0, "span_id": 10, @@ -170,14 +173,15 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "225afb49fe1f726e56a4ca9801000000", + "ray.actor_id": "3489da007773e40d07bd771201000000", "ray.actor_method.args": "(False,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_kDQ5DhXbAwfp9GTv", - "ray.task_id": "359ec6ce30d3ca2d225afb49fe1f726e56a4ca9801000000", - "ray.worker_id": "d8e09801e9a2563b0b41cef560400a2b75d3a9ced8e073b85739201a", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "1901", + "ray.submission_id": "raysubmit_DViFN6C258zqpTa8", + "ray.task_id": "80e22aed7718a1253489da007773e40d07bd771201000000", + "ray.worker_id": "e34ed43553e5f5c331665eccd396705aaa6efcf5362b22198c7cc775", "span.kind": "consumer" }, "metrics": { @@ -186,12 +190,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 181792, - "start": 1757947336989540793 + "duration": 153959, + "start": 1758101756601591208 }, { "name": "exec actor_interactions.py", - "service": "raysubmit_kDQ5DhXbAwfp9GTv", + "service": "raysubmit_DViFN6C258zqpTa8", "resource": "exec actor_interactions.py", "trace_id": 0, "span_id": 6, @@ -202,12 +206,13 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "225afb49fe1f726e56a4ca9801000000", + "ray.actor_id": "3489da007773e40d07bd771201000000", "ray.job_id": "01000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_kDQ5DhXbAwfp9GTv", - "ray.task_id": "359ec6ce30d3ca2d225afb49fe1f726e56a4ca9801000000", - "ray.worker_id": "d8e09801e9a2563b0b41cef560400a2b75d3a9ced8e073b85739201a", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "1901", + "ray.submission_id": "raysubmit_DViFN6C258zqpTa8", + "ray.task_id": "80e22aed7718a1253489da007773e40d07bd771201000000", + "ray.worker_id": "e34ed43553e5f5c331665eccd396705aaa6efcf5362b22198c7cc775", "span.kind": "consumer" }, "metrics": { @@ -216,12 +221,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 445708, - "start": 1757947336989917585 + "duration": 434916, + "start": 1758101756601955667 }, { "name": "Sender.send_message.remote()", - "service": "raysubmit_kDQ5DhXbAwfp9GTv", + "service": "raysubmit_DViFN6C258zqpTa8", "resource": "Sender.send_message.remote()", "trace_id": 0, "span_id": 7, @@ -231,20 +236,21 @@ "meta": { "_dd.base_service": "project", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825c800000000", - "_dd.parent_id": "1250f747af79deb6", + "_dd.p.tid": "68ca80fb00000000", + "_dd.parent_id": "9cc5163b2c7eb5b3", "component": "ray", "language": "python", - "ray.actor_method.args": "(Actor(Receiver, 0c36eba47569709e56e7739c03000000), 'hello')", + "ray.actor_method.args": "(Actor(Receiver, dfe2e660e89e80f15314d52f03000000), 'hello')", "ray.actor_method.kwargs": "{}", "ray.job_id": "03000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_kDQ5DhXbAwfp9GTv", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "1953", + "ray.submission_id": "raysubmit_DViFN6C258zqpTa8", "ray.worker_id": "03000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "5792f5e8206644d6821a6393ade6a7cc", + "runtime-id": "893b54b7095a41d89efde593bee65b3e", "span.kind": "producer", - "traceparent": "00-68c825c800000000f974540d4212dabb-1250f747af79deb6-00", - "tracestate": "dd=p:1250f747af79deb6;s:0" + "traceparent": "00-68ca80fb0000000005c84ea427251193-9cc5163b2c7eb5b3-00", + "tracestate": "dd=p:9cc5163b2c7eb5b3;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -253,14 +259,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1901 + "process_id": 1953 }, - "duration": 473125, - "start": 1757947337645459377 + "duration": 484959, + "start": 1758101757294278375 }, { "name": "Sender.send_message", - "service": "raysubmit_kDQ5DhXbAwfp9GTv", + "service": "raysubmit_DViFN6C258zqpTa8", "resource": "Sender.send_message", "trace_id": 0, "span_id": 11, @@ -270,22 +276,23 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825c800000000", - "_dd.parent_id": "506ff91f6719c879", + "_dd.p.tid": "68ca80fb00000000", + "_dd.parent_id": "7fab7b3517eed31b", "component": "ray", "language": "python", - "ray.actor_id": "b5252489675322dfd971decf03000000", - "ray.actor_method.args": "(Actor(Receiver, 0c36eba47569709e56e7739c03000000), 'hello')", + "ray.actor_id": "8cd3c0133180cd602277acfa03000000", + "ray.actor_method.args": "(Actor(Receiver, dfe2e660e89e80f15314d52f03000000), 'hello')", "ray.actor_method.kwargs": "{}", "ray.job_id": "03000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_kDQ5DhXbAwfp9GTv", - "ray.task_id": "0ab01f2d6283d719b5252489675322dfd971decf03000000", - "ray.worker_id": "9d03403cd7008ef7859803c4d40dd1ac3754ebf3a8d923349362ef06", - "runtime-id": "d4dc8621f06e4651a58876b11e67efb8", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2000", + "ray.submission_id": "raysubmit_DViFN6C258zqpTa8", + "ray.task_id": "0ab01f2d6283d7198cd3c0133180cd602277acfa03000000", + "ray.worker_id": "52e32a1c4ce484d352a4cfe1fd6a13f5df080ce00d019394d3122e4e", + "runtime-id": "869a2656e3d1456fb86912341f975312", "span.kind": "consumer", - "traceparent": "00-68c825c800000000f974540d4212dabb-506ff91f6719c879-00", - "tracestate": "dd=p:506ff91f6719c879;s:0" + "traceparent": "00-68ca80fb0000000005c84ea427251193-7fab7b3517eed31b-00", + "tracestate": "dd=p:7fab7b3517eed31b;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -294,14 +301,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1946 + "process_id": 2000 }, - "duration": 73111000, - "start": 1757947339099224003 + "duration": 7215417, + "start": 1758101758771810626 }, { "name": "Receiver.receive_message.remote()", - "service": "raysubmit_kDQ5DhXbAwfp9GTv", + "service": "raysubmit_DViFN6C258zqpTa8", "resource": "Receiver.receive_message.remote()", "trace_id": 0, "span_id": 14, @@ -312,14 +319,15 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "b5252489675322dfd971decf03000000", + "ray.actor_id": "8cd3c0133180cd602277acfa03000000", "ray.actor_method.args": "('hello',)", "ray.actor_method.kwargs": "{}", "ray.job_id": "03000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_kDQ5DhXbAwfp9GTv", - "ray.task_id": "0ab01f2d6283d719b5252489675322dfd971decf03000000", - "ray.worker_id": "9d03403cd7008ef7859803c4d40dd1ac3754ebf3a8d923349362ef06", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2000", + "ray.submission_id": "raysubmit_DViFN6C258zqpTa8", + "ray.task_id": "0ab01f2d6283d7198cd3c0133180cd602277acfa03000000", + "ray.worker_id": "52e32a1c4ce484d352a4cfe1fd6a13f5df080ce00d019394d3122e4e", "span.kind": "producer" }, "metrics": { @@ -328,12 +336,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 353666, - "start": 1757947339101376753 + "duration": 267792, + "start": 1758101758772075584 }, { "name": "Receiver.receive_message", - "service": "raysubmit_kDQ5DhXbAwfp9GTv", + "service": "raysubmit_DViFN6C258zqpTa8", "resource": "Receiver.receive_message", "trace_id": 0, "span_id": 15, @@ -343,22 +351,23 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825c800000000", - "_dd.parent_id": "df5b77a1d2c8e31e", + "_dd.p.tid": "68ca80fb00000000", + "_dd.parent_id": "f4d1809fd76fbd99", "component": "ray", "language": "python", - "ray.actor_id": "0c36eba47569709e56e7739c03000000", + "ray.actor_id": "dfe2e660e89e80f15314d52f03000000", "ray.actor_method.args": "('hello',)", "ray.actor_method.kwargs": "{}", "ray.job_id": "03000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_kDQ5DhXbAwfp9GTv", - "ray.task_id": "0ca53a8a06efd38b0c36eba47569709e56e7739c03000000", - "ray.worker_id": "375cae4ba7192a8c419d40e88b2b7ce4c1f6d12c849e02f40c88b9e8", - "runtime-id": "528f29e364a44739a0cd96584de29b35", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "1999", + "ray.submission_id": "raysubmit_DViFN6C258zqpTa8", + "ray.task_id": "230da68af864f77adfe2e660e89e80f15314d52f03000000", + "ray.worker_id": "f7c8c8aecbb9be9278035d4a192b495b4dae9754fe8af442409402bf", + "runtime-id": "ac712603f8d045408449c5229fc01074", "span.kind": "consumer", - "traceparent": "00-68c825c800000000f974540d4212dabb-df5b77a1d2c8e31e-00", - "tracestate": "dd=p:df5b77a1d2c8e31e;s:0" + "traceparent": "00-68ca80fb0000000005c84ea427251193-f4d1809fd76fbd99-00", + "tracestate": "dd=p:f4d1809fd76fbd99;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -367,14 +376,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1945 + "process_id": 1999 }, - "duration": 230833, - "start": 1757947339169369961 + "duration": 236750, + "start": 1758101758775735668 }, { "name": "Sender.get_sent_count.remote()", - "service": "raysubmit_kDQ5DhXbAwfp9GTv", + "service": "raysubmit_DViFN6C258zqpTa8", "resource": "Sender.get_sent_count.remote()", "trace_id": 0, "span_id": 8, @@ -384,20 +393,21 @@ "meta": { "_dd.base_service": "project", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825c800000000", - "_dd.parent_id": "1250f747af79deb6", + "_dd.p.tid": "68ca80fb00000000", + "_dd.parent_id": "9cc5163b2c7eb5b3", "component": "ray", "language": "python", - "ray.actor_method.args": "()", + "ray.actor_method.args": "[]", "ray.actor_method.kwargs": "{}", "ray.job_id": "03000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_kDQ5DhXbAwfp9GTv", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "1953", + "ray.submission_id": "raysubmit_DViFN6C258zqpTa8", "ray.worker_id": "03000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "5792f5e8206644d6821a6393ade6a7cc", + "runtime-id": "893b54b7095a41d89efde593bee65b3e", "span.kind": "producer", - "traceparent": "00-68c825c800000000f974540d4212dabb-1250f747af79deb6-00", - "tracestate": "dd=p:1250f747af79deb6;s:0" + "traceparent": "00-68ca80fb0000000005c84ea427251193-9cc5163b2c7eb5b3-00", + "tracestate": "dd=p:9cc5163b2c7eb5b3;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -406,14 +416,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1901 + "process_id": 1953 }, - "duration": 191958, - "start": 1757947339175287003 + "duration": 180208, + "start": 1758101758782083543 }, { "name": "Sender.get_sent_count", - "service": "raysubmit_kDQ5DhXbAwfp9GTv", + "service": "raysubmit_DViFN6C258zqpTa8", "resource": "Sender.get_sent_count", "trace_id": 0, "span_id": 12, @@ -423,22 +433,23 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825c800000000", - "_dd.parent_id": "f37a16d5a1c007cb", + "_dd.p.tid": "68ca80fb00000000", + "_dd.parent_id": "67f6208327e75cbb", "component": "ray", "language": "python", - "ray.actor_id": "b5252489675322dfd971decf03000000", + "ray.actor_id": "8cd3c0133180cd602277acfa03000000", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", "ray.job_id": "03000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_kDQ5DhXbAwfp9GTv", - "ray.task_id": "62ffec03f52574bdb5252489675322dfd971decf03000000", - "ray.worker_id": "9d03403cd7008ef7859803c4d40dd1ac3754ebf3a8d923349362ef06", - "runtime-id": "d4dc8621f06e4651a58876b11e67efb8", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2000", + "ray.submission_id": "raysubmit_DViFN6C258zqpTa8", + "ray.task_id": "62ffec03f52574bd8cd3c0133180cd602277acfa03000000", + "ray.worker_id": "52e32a1c4ce484d352a4cfe1fd6a13f5df080ce00d019394d3122e4e", + "runtime-id": "869a2656e3d1456fb86912341f975312", "span.kind": "consumer", - "traceparent": "00-68c825c800000000f974540d4212dabb-f37a16d5a1c007cb-00", - "tracestate": "dd=p:f37a16d5a1c007cb;s:0" + "traceparent": "00-68ca80fb0000000005c84ea427251193-67f6208327e75cbb-00", + "tracestate": "dd=p:67f6208327e75cbb;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -447,14 +458,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1946 + "process_id": 2000 }, - "duration": 258125, - "start": 1757947339175883628 + "duration": 166042, + "start": 1758101758782670834 }, { "name": "Receiver.get_messages.remote()", - "service": "raysubmit_kDQ5DhXbAwfp9GTv", + "service": "raysubmit_DViFN6C258zqpTa8", "resource": "Receiver.get_messages.remote()", "trace_id": 0, "span_id": 9, @@ -464,20 +475,21 @@ "meta": { "_dd.base_service": "project", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825c800000000", - "_dd.parent_id": "1250f747af79deb6", + "_dd.p.tid": "68ca80fb00000000", + "_dd.parent_id": "9cc5163b2c7eb5b3", "component": "ray", "language": "python", - "ray.actor_method.args": "()", + "ray.actor_method.args": "[]", "ray.actor_method.kwargs": "{}", "ray.job_id": "03000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_kDQ5DhXbAwfp9GTv", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "1953", + "ray.submission_id": "raysubmit_DViFN6C258zqpTa8", "ray.worker_id": "03000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "5792f5e8206644d6821a6393ade6a7cc", + "runtime-id": "893b54b7095a41d89efde593bee65b3e", "span.kind": "producer", - "traceparent": "00-68c825c800000000f974540d4212dabb-1250f747af79deb6-00", - "tracestate": "dd=p:1250f747af79deb6;s:0" + "traceparent": "00-68ca80fb0000000005c84ea427251193-9cc5163b2c7eb5b3-00", + "tracestate": "dd=p:9cc5163b2c7eb5b3;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -486,14 +498,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1901 + "process_id": 1953 }, - "duration": 197042, - "start": 1757947339178169044 + "duration": 174292, + "start": 1758101758784914834 }, { "name": "Receiver.get_messages", - "service": "raysubmit_kDQ5DhXbAwfp9GTv", + "service": "raysubmit_DViFN6C258zqpTa8", "resource": "Receiver.get_messages", "trace_id": 0, "span_id": 13, @@ -503,22 +515,23 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825c800000000", - "_dd.parent_id": "0ee33a87ce0ab5cf", + "_dd.p.tid": "68ca80fb00000000", + "_dd.parent_id": "112628203686b4ff", "component": "ray", "language": "python", - "ray.actor_id": "0c36eba47569709e56e7739c03000000", + "ray.actor_id": "dfe2e660e89e80f15314d52f03000000", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", "ray.job_id": "03000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_kDQ5DhXbAwfp9GTv", - "ray.task_id": "882ffa20ac4b2e6e0c36eba47569709e56e7739c03000000", - "ray.worker_id": "375cae4ba7192a8c419d40e88b2b7ce4c1f6d12c849e02f40c88b9e8", - "runtime-id": "528f29e364a44739a0cd96584de29b35", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "1999", + "ray.submission_id": "raysubmit_DViFN6C258zqpTa8", + "ray.task_id": "882ffa20ac4b2e6edfe2e660e89e80f15314d52f03000000", + "ray.worker_id": "f7c8c8aecbb9be9278035d4a192b495b4dae9754fe8af442409402bf", + "runtime-id": "ac712603f8d045408449c5229fc01074", "span.kind": "consumer", - "traceparent": "00-68c825c800000000f974540d4212dabb-0ee33a87ce0ab5cf-00", - "tracestate": "dd=p:0ee33a87ce0ab5cf;s:0" + "traceparent": "00-68ca80fb0000000005c84ea427251193-112628203686b4ff-00", + "tracestate": "dd=p:112628203686b4ff;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -527,8 +540,8 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1945 + "process_id": 1999 }, - "duration": 147833, - "start": 1757947339179325003 + "duration": 192417, + "start": 1758101758786277584 }]] diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_nested_tasks.json b/tests/snapshots/tests.contrib.ray.test_ray.test_nested_tasks.json index e86df356416..a042e881142 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_nested_tasks.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_nested_tasks.json @@ -1,7 +1,7 @@ [[ { "name": "ray.job", - "service": "raysubmit_1x6JQ9zJ1bqwRPv7", + "service": "raysubmit_m5LKvhywLHpUncAU", "resource": "ray.job", "trace_id": 0, "span_id": 1, @@ -12,13 +12,13 @@ "_dd.base_service": "ray.dashboard", "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68c825d800000000", + "_dd.p.tid": "68ca810b00000000", "component": "ray", "language": "python", "ray.job.message": "Job finished successfully.", "ray.job.status": "SUCCEEDED", - "ray.submission_id": "raysubmit_1x6JQ9zJ1bqwRPv7", - "runtime-id": "5ce8e7e7cd4b4680ba2a0c60c2b62ea4" + "ray.submission_id": "raysubmit_m5LKvhywLHpUncAU", + "runtime-id": "6cec296b9ec54202916b51bc4ab5e15c" }, "metrics": { "_dd.djm.enabled": 1, @@ -27,14 +27,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1038 + "process_id": 1047 }, - "duration": 4964694586, - "start": 1757947352264109509 + "duration": 4866222794, + "start": 1758101771848729924 }, { "name": "ray.job.submit", - "service": "raysubmit_1x6JQ9zJ1bqwRPv7", + "service": "raysubmit_m5LKvhywLHpUncAU", "resource": "ray.job.submit", "trace_id": 0, "span_id": 2, @@ -54,12 +54,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 39084, - "start": 1757947352264276842 + "duration": 32834, + "start": 1758101771848885507 }, { "name": "JobSupervisor.run.remote()", - "service": "raysubmit_1x6JQ9zJ1bqwRPv7", + "service": "raysubmit_m5LKvhywLHpUncAU", "resource": "JobSupervisor.run.remote()", "trace_id": 0, "span_id": 3, @@ -70,10 +70,11 @@ "_dd.base_service": "ray.dashboard", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_method.args": "()", + "ray.actor_method.args": "[]", "ray.actor_method.kwargs": "{'_start_signal_actor': None, 'resources_specified': False}", "ray.job_id": "01000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "1047", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "producer" }, @@ -83,12 +84,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 322250, - "start": 1757947352267943801 + "duration": 271333, + "start": 1758101771852205841 }, { "name": "JobSupervisor.run", - "service": "raysubmit_1x6JQ9zJ1bqwRPv7", + "service": "raysubmit_m5LKvhywLHpUncAU", "resource": "JobSupervisor.run", "trace_id": 0, "span_id": 4, @@ -98,20 +99,21 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825d800000000", - "_dd.parent_id": "4cf74728911a774d", + "_dd.p.tid": "68ca810b00000000", + "_dd.parent_id": "253f6b4b1910aaed", "component": "ray", "language": "python", - "ray.actor_id": "d0e77625bea063b2ce3c440901000000", + "ray.actor_id": "16f7f8933f39dc2e29ba982e01000000", "ray.job_id": "01000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_1x6JQ9zJ1bqwRPv7", - "ray.task_id": "cae5e964086715a4d0e77625bea063b2ce3c440901000000", - "ray.worker_id": "11670db24e9f44b91944e7367296255001210d9c34a60bfd26057241", - "runtime-id": "44bbfd421c464f379f9b8b600b6f6b5c", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2435", + "ray.submission_id": "raysubmit_m5LKvhywLHpUncAU", + "ray.task_id": "3d3e27c54ed1f5cf16f7f8933f39dc2e29ba982e01000000", + "ray.worker_id": "51d264fc205789361ddca9db9080d0ed0d636005f5855099cf3d35d2", + "runtime-id": "6447f2e926904907bbd5a2bde8e51f9b", "span.kind": "consumer", - "traceparent": "00-68c825d800000000383145da4c66128d-4cf74728911a774d-00", - "tracestate": "dd=p:4cf74728911a774d" + "traceparent": "00-68ca810b0000000089038dddd433fa36-253f6b4b1910aaed-00", + "tracestate": "dd=p:253f6b4b1910aaed" }, "metrics": { "_dd.djm.enabled": 1, @@ -120,14 +122,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2366 + "process_id": 2435 }, - "duration": 3644798293, - "start": 1757947353195199843 + "duration": 3442056127, + "start": 1758101772685011466 }, { "name": "JobSupervisor._get_driver_env_vars", - "service": "raysubmit_1x6JQ9zJ1bqwRPv7", + "service": "raysubmit_m5LKvhywLHpUncAU", "resource": "JobSupervisor._get_driver_env_vars", "trace_id": 0, "span_id": 5, @@ -138,14 +140,15 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "d0e77625bea063b2ce3c440901000000", + "ray.actor_id": "16f7f8933f39dc2e29ba982e01000000", "ray.actor_method.args": "(False,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_1x6JQ9zJ1bqwRPv7", - "ray.task_id": "cae5e964086715a4d0e77625bea063b2ce3c440901000000", - "ray.worker_id": "11670db24e9f44b91944e7367296255001210d9c34a60bfd26057241", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2435", + "ray.submission_id": "raysubmit_m5LKvhywLHpUncAU", + "ray.task_id": "3d3e27c54ed1f5cf16f7f8933f39dc2e29ba982e01000000", + "ray.worker_id": "51d264fc205789361ddca9db9080d0ed0d636005f5855099cf3d35d2", "span.kind": "consumer" }, "metrics": { @@ -154,12 +157,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 2092834, - "start": 1757947353196913884 + "duration": 1700750, + "start": 1758101772686504674 }, { "name": "JobSupervisor._get_driver_runtime_env", - "service": "raysubmit_1x6JQ9zJ1bqwRPv7", + "service": "raysubmit_m5LKvhywLHpUncAU", "resource": "JobSupervisor._get_driver_runtime_env", "trace_id": 0, "span_id": 8, @@ -170,14 +173,15 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "d0e77625bea063b2ce3c440901000000", + "ray.actor_id": "16f7f8933f39dc2e29ba982e01000000", "ray.actor_method.args": "(False,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_1x6JQ9zJ1bqwRPv7", - "ray.task_id": "cae5e964086715a4d0e77625bea063b2ce3c440901000000", - "ray.worker_id": "11670db24e9f44b91944e7367296255001210d9c34a60bfd26057241", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2435", + "ray.submission_id": "raysubmit_m5LKvhywLHpUncAU", + "ray.task_id": "3d3e27c54ed1f5cf16f7f8933f39dc2e29ba982e01000000", + "ray.worker_id": "51d264fc205789361ddca9db9080d0ed0d636005f5855099cf3d35d2", "span.kind": "consumer" }, "metrics": { @@ -186,12 +190,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 212792, - "start": 1757947353198754259 + "duration": 170583, + "start": 1758101772688010008 }, { "name": "exec nested_tasks.py", - "service": "raysubmit_1x6JQ9zJ1bqwRPv7", + "service": "raysubmit_m5LKvhywLHpUncAU", "resource": "exec nested_tasks.py", "trace_id": 0, "span_id": 6, @@ -202,12 +206,13 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "d0e77625bea063b2ce3c440901000000", + "ray.actor_id": "16f7f8933f39dc2e29ba982e01000000", "ray.job_id": "01000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_1x6JQ9zJ1bqwRPv7", - "ray.task_id": "cae5e964086715a4d0e77625bea063b2ce3c440901000000", - "ray.worker_id": "11670db24e9f44b91944e7367296255001210d9c34a60bfd26057241", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2435", + "ray.submission_id": "raysubmit_m5LKvhywLHpUncAU", + "ray.task_id": "3d3e27c54ed1f5cf16f7f8933f39dc2e29ba982e01000000", + "ray.worker_id": "51d264fc205789361ddca9db9080d0ed0d636005f5855099cf3d35d2", "span.kind": "consumer" }, "metrics": { @@ -216,12 +221,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 479250, - "start": 1757947353199189259 + "duration": 406791, + "start": 1758101772688363133 }, { "name": "__main__.submit_addition_task.remote()", - "service": "raysubmit_1x6JQ9zJ1bqwRPv7", + "service": "raysubmit_m5LKvhywLHpUncAU", "resource": "__main__.submit_addition_task.remote()", "trace_id": 0, "span_id": 7, @@ -231,21 +236,22 @@ "meta": { "_dd.base_service": "project", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825d800000000", - "_dd.parent_id": "759bd172c3bdb6da", + "_dd.p.tid": "68ca810b00000000", + "_dd.parent_id": "5029c8c0f2e77838", "component": "ray", "language": "python", "ray.job_id": "05000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_1x6JQ9zJ1bqwRPv7", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2487", + "ray.submission_id": "raysubmit_m5LKvhywLHpUncAU", "ray.task.args": "(2,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.worker_id": "05000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "9001d714fc2c49d3bea53977bf52317b", + "runtime-id": "0eadd41094174d9eb94d6f7d716efddc", "span.kind": "producer", - "traceparent": "00-68c825d800000000383145da4c66128d-759bd172c3bdb6da-00", - "tracestate": "dd=p:759bd172c3bdb6da;s:0" + "traceparent": "00-68ca810b0000000089038dddd433fa36-5029c8c0f2e77838-00", + "tracestate": "dd=p:5029c8c0f2e77838;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -254,14 +260,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2416 + "process_id": 2487 }, - "duration": 4196708, - "start": 1757947353896487843 + "duration": 3448250, + "start": 1758101773286245258 }, { "name": "__main__.submit_addition_task", - "service": "raysubmit_1x6JQ9zJ1bqwRPv7", + "service": "raysubmit_m5LKvhywLHpUncAU", "resource": "__main__.submit_addition_task", "trace_id": 0, "span_id": 9, @@ -271,22 +277,23 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825d800000000", - "_dd.parent_id": "0f866e4e9148dd99", + "_dd.p.tid": "68ca810b00000000", + "_dd.parent_id": "a22d77bdf3b00237", "component": "ray", "language": "python", "ray.job_id": "05000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_1x6JQ9zJ1bqwRPv7", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2534", + "ray.submission_id": "raysubmit_m5LKvhywLHpUncAU", "ray.task.args": "(2,)", "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.task_id": "3ca0590f168eaec5ffffffffffffffffffffffff05000000", - "ray.worker_id": "600dd798cc582a1aa5b319cda52a67b4b1f85e31c79facdd76e837d5", - "runtime-id": "ac085108cbbc487591034e660da93394", + "ray.worker_id": "08d711d968b8fc8284a763b4df25fd38f08d9472582d3571afacf634", + "runtime-id": "3de007e640864b999a1d000d8b000439", "span.kind": "consumer", - "traceparent": "00-68c825d800000000383145da4c66128d-0f866e4e9148dd99-00", - "tracestate": "dd=p:0f866e4e9148dd99;s:0" + "traceparent": "00-68ca810b0000000089038dddd433fa36-a22d77bdf3b00237-00", + "tracestate": "dd=p:a22d77bdf3b00237;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -295,14 +302,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2462 + "process_id": 2534 }, - "duration": 1800593667, - "start": 1757947354821369552 + "duration": 1668333500, + "start": 1758101774123770717 }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_1x6JQ9zJ1bqwRPv7", + "service": "raysubmit_m5LKvhywLHpUncAU", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 10, @@ -314,13 +321,14 @@ "_dd.hostname": "docker-desktop", "component": "ray", "ray.job_id": "05000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_1x6JQ9zJ1bqwRPv7", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2534", + "ray.submission_id": "raysubmit_m5LKvhywLHpUncAU", "ray.task.args": "(2,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.task_id": "3ca0590f168eaec5ffffffffffffffffffffffff05000000", - "ray.worker_id": "600dd798cc582a1aa5b319cda52a67b4b1f85e31c79facdd76e837d5", + "ray.worker_id": "08d711d968b8fc8284a763b4df25fd38f08d9472582d3571afacf634", "span.kind": "producer" }, "metrics": { @@ -329,12 +337,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 1377292, - "start": 1757947354821709135 + "duration": 1227208, + "start": 1758101774124064050 }, { "name": "__main__.add_one", - "service": "raysubmit_1x6JQ9zJ1bqwRPv7", + "service": "raysubmit_m5LKvhywLHpUncAU", "resource": "__main__.add_one", "trace_id": 0, "span_id": 13, @@ -344,22 +352,23 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825d800000000", - "_dd.parent_id": "0c62c3c6bf3b2d6a", + "_dd.p.tid": "68ca810b00000000", + "_dd.parent_id": "b131f64ad25b1805", "component": "ray", "language": "python", "ray.job_id": "05000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_1x6JQ9zJ1bqwRPv7", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2579", + "ray.submission_id": "raysubmit_m5LKvhywLHpUncAU", "ray.task.args": "(2,)", "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.task_id": "079c89e8658fa36bffffffffffffffffffffffff05000000", - "ray.worker_id": "36b38569242b4948edfb69f0fb4170e40882ebf787d41a82f166b869", - "runtime-id": "b98b6c3fcccb42b9be851131c90e24fa", + "ray.worker_id": "d8eb7f95da840c7636809435702e5b4c31575c65d21511a1f46da3b1", + "runtime-id": "053735cec4e440fa8c90c27b577ea53d", "span.kind": "consumer", - "traceparent": "00-68c825d800000000383145da4c66128d-0c62c3c6bf3b2d6a-00", - "tracestate": "dd=p:0c62c3c6bf3b2d6a;s:0" + "traceparent": "00-68ca810b0000000089038dddd433fa36-b131f64ad25b1805-00", + "tracestate": "dd=p:b131f64ad25b1805;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -368,14 +377,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2506 + "process_id": 2579 }, - "duration": 303292, - "start": 1757947356596852844 + "duration": 244500, + "start": 1758101775777518717 }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_1x6JQ9zJ1bqwRPv7", + "service": "raysubmit_m5LKvhywLHpUncAU", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 11, @@ -387,13 +396,14 @@ "_dd.hostname": "docker-desktop", "component": "ray", "ray.job_id": "05000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_1x6JQ9zJ1bqwRPv7", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2534", + "ray.submission_id": "raysubmit_m5LKvhywLHpUncAU", "ray.task.args": "(3,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.task_id": "3ca0590f168eaec5ffffffffffffffffffffffff05000000", - "ray.worker_id": "600dd798cc582a1aa5b319cda52a67b4b1f85e31c79facdd76e837d5", + "ray.worker_id": "08d711d968b8fc8284a763b4df25fd38f08d9472582d3571afacf634", "span.kind": "producer" }, "metrics": { @@ -402,12 +412,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 153542, - "start": 1757947354823115135 + "duration": 116959, + "start": 1758101774125317633 }, { "name": "__main__.add_one", - "service": "raysubmit_1x6JQ9zJ1bqwRPv7", + "service": "raysubmit_m5LKvhywLHpUncAU", "resource": "__main__.add_one", "trace_id": 0, "span_id": 14, @@ -417,22 +427,23 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825d800000000", - "_dd.parent_id": "0be5f81826cce4ff", + "_dd.p.tid": "68ca810b00000000", + "_dd.parent_id": "fed4e6c02dda2adb", "component": "ray", "language": "python", "ray.job_id": "05000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_1x6JQ9zJ1bqwRPv7", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2580", + "ray.submission_id": "raysubmit_m5LKvhywLHpUncAU", "ray.task.args": "(3,)", "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.task_id": "cc483212b2c8f53effffffffffffffffffffffff05000000", - "ray.worker_id": "57e15431ac9e7a96712d7e412fb1813b7b537fca35cbe3456398a2dc", - "runtime-id": "a0d030acdbe64102b74aa0fc9ad9ee09", + "ray.worker_id": "c626af63b4aa3988f5f0f98774d07f2585ee3492e686e877b6a37696", + "runtime-id": "6ee42f0ac47e4fb5acb86d3581331fd1", "span.kind": "consumer", - "traceparent": "00-68c825d800000000383145da4c66128d-0be5f81826cce4ff-00", - "tracestate": "dd=p:0be5f81826cce4ff;s:0" + "traceparent": "00-68ca810b0000000089038dddd433fa36-fed4e6c02dda2adb-00", + "tracestate": "dd=p:fed4e6c02dda2adb;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -441,14 +452,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2505 + "process_id": 2580 }, - "duration": 326459, - "start": 1757947356617304344 + "duration": 240250, + "start": 1758101775788897051 }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_1x6JQ9zJ1bqwRPv7", + "service": "raysubmit_m5LKvhywLHpUncAU", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 12, @@ -460,13 +471,14 @@ "_dd.hostname": "docker-desktop", "component": "ray", "ray.job_id": "05000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_1x6JQ9zJ1bqwRPv7", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2534", + "ray.submission_id": "raysubmit_m5LKvhywLHpUncAU", "ray.task.args": "(4,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.task_id": "3ca0590f168eaec5ffffffffffffffffffffffff05000000", - "ray.worker_id": "600dd798cc582a1aa5b319cda52a67b4b1f85e31c79facdd76e837d5", + "ray.worker_id": "08d711d968b8fc8284a763b4df25fd38f08d9472582d3571afacf634", "span.kind": "producer" }, "metrics": { @@ -475,12 +487,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 102542, - "start": 1757947354823287135 + "duration": 107250, + "start": 1758101774125453717 }, { "name": "__main__.add_one", - "service": "raysubmit_1x6JQ9zJ1bqwRPv7", + "service": "raysubmit_m5LKvhywLHpUncAU", "resource": "__main__.add_one", "trace_id": 0, "span_id": 15, @@ -490,22 +502,23 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825d800000000", - "_dd.parent_id": "849f49c219a8d79e", + "_dd.p.tid": "68ca810b00000000", + "_dd.parent_id": "753b9c1653ce93c7", "component": "ray", "language": "python", "ray.job_id": "05000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_1x6JQ9zJ1bqwRPv7", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2578", + "ray.submission_id": "raysubmit_m5LKvhywLHpUncAU", "ray.task.args": "(4,)", "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.task_id": "abe71a0435f88aceffffffffffffffffffffffff05000000", - "ray.worker_id": "2af01c2f64d891cf45f81f635ebd9289a455f2a373bb5297c2b9377d", - "runtime-id": "7c4b6bbfdcf24c55a3a9a3b5ce576836", + "ray.worker_id": "c7c2feda958f7ec645fa486a8ead2aafb8462af4b9fd6dc1da678925", + "runtime-id": "f6799fd220f04ae5ba49b7ad2ee0cd47", "span.kind": "consumer", - "traceparent": "00-68c825d800000000383145da4c66128d-849f49c219a8d79e-00", - "tracestate": "dd=p:849f49c219a8d79e;s:0" + "traceparent": "00-68ca810b0000000089038dddd433fa36-753b9c1653ce93c7-00", + "tracestate": "dd=p:753b9c1653ce93c7;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -514,8 +527,8 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2507 + "process_id": 2578 }, - "duration": 251583, - "start": 1757947356580426136 + "duration": 254667, + "start": 1758101775779806342 }]] diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_actor.json b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_actor.json index be98fca73a2..122f666c684 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_actor.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_actor.json @@ -1,7 +1,7 @@ [[ { "name": "ray.job", - "service": "raysubmit_RrLXMhFua4mQiAGb", + "service": "raysubmit_gBAZLY4iRuFJiY4b", "resource": "ray.job", "trace_id": 0, "span_id": 1, @@ -12,13 +12,13 @@ "_dd.base_service": "ray.dashboard", "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68c825e000000000", + "_dd.p.tid": "68ca811400000000", "component": "ray", "language": "python", "ray.job.message": "Job finished successfully.", "ray.job.status": "SUCCEEDED", - "ray.submission_id": "raysubmit_RrLXMhFua4mQiAGb", - "runtime-id": "5ce8e7e7cd4b4680ba2a0c60c2b62ea4" + "ray.submission_id": "raysubmit_gBAZLY4iRuFJiY4b", + "runtime-id": "6cec296b9ec54202916b51bc4ab5e15c" }, "metrics": { "_dd.djm.enabled": 1, @@ -27,14 +27,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1038 + "process_id": 1047 }, - "duration": 3919365530, - "start": 1757947360915040346 + "duration": 2850963543, + "start": 1758101780441330720 }, { "name": "ray.job.submit", - "service": "raysubmit_RrLXMhFua4mQiAGb", + "service": "raysubmit_gBAZLY4iRuFJiY4b", "resource": "ray.job.submit", "trace_id": 0, "span_id": 2, @@ -54,12 +54,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 36417, - "start": 1757947360915175846 + "duration": 37375, + "start": 1758101780441462511 }, { "name": "JobSupervisor.run.remote()", - "service": "raysubmit_RrLXMhFua4mQiAGb", + "service": "raysubmit_gBAZLY4iRuFJiY4b", "resource": "JobSupervisor.run.remote()", "trace_id": 0, "span_id": 3, @@ -70,10 +70,11 @@ "_dd.base_service": "ray.dashboard", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_method.args": "()", + "ray.actor_method.args": "[]", "ray.actor_method.kwargs": "{'_start_signal_actor': None, 'resources_specified': False}", "ray.job_id": "01000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "1047", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "producer" }, @@ -83,12 +84,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 358791, - "start": 1757947360918245555 + "duration": 349125, + "start": 1758101780445011345 }, { "name": "JobSupervisor.run", - "service": "raysubmit_RrLXMhFua4mQiAGb", + "service": "raysubmit_gBAZLY4iRuFJiY4b", "resource": "JobSupervisor.run", "trace_id": 0, "span_id": 4, @@ -98,20 +99,21 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825e000000000", - "_dd.parent_id": "73dc356e80ebb7ad", + "_dd.p.tid": "68ca811400000000", + "_dd.parent_id": "f4920d99ac531ab2", "component": "ray", "language": "python", - "ray.actor_id": "ee46ce495dcc5feb75fe0c8501000000", + "ray.actor_id": "def867962d35f6849c2bf05d01000000", "ray.job_id": "01000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_RrLXMhFua4mQiAGb", - "ray.task_id": "c1464dc5b2308f10ee46ce495dcc5feb75fe0c8501000000", - "ray.worker_id": "50035c0f7f0d9e2f5510c9b389f3dc636871a3ac18c63714529768f5", - "runtime-id": "f7c042d88f5c4c36a31d3d3d6d13065c", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2738", + "ray.submission_id": "raysubmit_gBAZLY4iRuFJiY4b", + "ray.task_id": "79cc316456d39201def867962d35f6849c2bf05d01000000", + "ray.worker_id": "5ae2a0382860cfe1ecd1c8d594dbd4d5cb753f48459f288f42f9597b", + "runtime-id": "6758722b5b7d4e6b8028ab3cb04c0394", "span.kind": "consumer", - "traceparent": "00-68c825e00000000005f74355cba49bbd-73dc356e80ebb7ad-00", - "tracestate": "dd=p:73dc356e80ebb7ad" + "traceparent": "00-68ca8114000000007840aeb2b1cce4d1-f4920d99ac531ab2-00", + "tracestate": "dd=p:f4920d99ac531ab2" }, "metrics": { "_dd.djm.enabled": 1, @@ -120,14 +122,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2659 + "process_id": 2738 }, - "duration": 2127595320, - "start": 1757947361813897847 + "duration": 1725773042, + "start": 1758101781276897262 }, { "name": "JobSupervisor._get_driver_env_vars", - "service": "raysubmit_RrLXMhFua4mQiAGb", + "service": "raysubmit_gBAZLY4iRuFJiY4b", "resource": "JobSupervisor._get_driver_env_vars", "trace_id": 0, "span_id": 5, @@ -138,14 +140,15 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "ee46ce495dcc5feb75fe0c8501000000", + "ray.actor_id": "def867962d35f6849c2bf05d01000000", "ray.actor_method.args": "(False,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_RrLXMhFua4mQiAGb", - "ray.task_id": "c1464dc5b2308f10ee46ce495dcc5feb75fe0c8501000000", - "ray.worker_id": "50035c0f7f0d9e2f5510c9b389f3dc636871a3ac18c63714529768f5", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2738", + "ray.submission_id": "raysubmit_gBAZLY4iRuFJiY4b", + "ray.task_id": "79cc316456d39201def867962d35f6849c2bf05d01000000", + "ray.worker_id": "5ae2a0382860cfe1ecd1c8d594dbd4d5cb753f48459f288f42f9597b", "span.kind": "consumer" }, "metrics": { @@ -154,12 +157,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 2034625, - "start": 1757947361815621139 + "duration": 1671750, + "start": 1758101781278300887 }, { "name": "JobSupervisor._get_driver_runtime_env", - "service": "raysubmit_RrLXMhFua4mQiAGb", + "service": "raysubmit_gBAZLY4iRuFJiY4b", "resource": "JobSupervisor._get_driver_runtime_env", "trace_id": 0, "span_id": 8, @@ -170,14 +173,15 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "ee46ce495dcc5feb75fe0c8501000000", + "ray.actor_id": "def867962d35f6849c2bf05d01000000", "ray.actor_method.args": "(False,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_RrLXMhFua4mQiAGb", - "ray.task_id": "c1464dc5b2308f10ee46ce495dcc5feb75fe0c8501000000", - "ray.worker_id": "50035c0f7f0d9e2f5510c9b389f3dc636871a3ac18c63714529768f5", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2738", + "ray.submission_id": "raysubmit_gBAZLY4iRuFJiY4b", + "ray.task_id": "79cc316456d39201def867962d35f6849c2bf05d01000000", + "ray.worker_id": "5ae2a0382860cfe1ecd1c8d594dbd4d5cb753f48459f288f42f9597b", "span.kind": "consumer" }, "metrics": { @@ -186,12 +190,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 191375, - "start": 1757947361817427222 + "duration": 145375, + "start": 1758101781279802762 }, { "name": "exec simple_actor.py", - "service": "raysubmit_RrLXMhFua4mQiAGb", + "service": "raysubmit_gBAZLY4iRuFJiY4b", "resource": "exec simple_actor.py", "trace_id": 0, "span_id": 6, @@ -202,12 +206,13 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "ee46ce495dcc5feb75fe0c8501000000", + "ray.actor_id": "def867962d35f6849c2bf05d01000000", "ray.job_id": "01000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_RrLXMhFua4mQiAGb", - "ray.task_id": "c1464dc5b2308f10ee46ce495dcc5feb75fe0c8501000000", - "ray.worker_id": "50035c0f7f0d9e2f5510c9b389f3dc636871a3ac18c63714529768f5", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2738", + "ray.submission_id": "raysubmit_gBAZLY4iRuFJiY4b", + "ray.task_id": "79cc316456d39201def867962d35f6849c2bf05d01000000", + "ray.worker_id": "5ae2a0382860cfe1ecd1c8d594dbd4d5cb753f48459f288f42f9597b", "span.kind": "consumer" }, "metrics": { @@ -216,12 +221,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 544667, - "start": 1757947361817800222 + "duration": 426417, + "start": 1758101781280142303 }, { "name": "Counter.increment_get_and_double.remote()", - "service": "raysubmit_RrLXMhFua4mQiAGb", + "service": "raysubmit_gBAZLY4iRuFJiY4b", "resource": "Counter.increment_get_and_double.remote()", "trace_id": 0, "span_id": 7, @@ -231,20 +236,21 @@ "meta": { "_dd.base_service": "project", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825e000000000", - "_dd.parent_id": "e5a53ae949b0a090", + "_dd.p.tid": "68ca811400000000", + "_dd.parent_id": "a76d70bcb72f2617", "component": "ray", "language": "python", - "ray.actor_method.args": "()", + "ray.actor_method.args": "[]", "ray.actor_method.kwargs": "{}", "ray.job_id": "06000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_RrLXMhFua4mQiAGb", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2790", + "ray.submission_id": "raysubmit_gBAZLY4iRuFJiY4b", "ray.worker_id": "06000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "c80eb31328c34cda890d4626ab735552", + "runtime-id": "adbe0c3484e3462b9c91bfaf29d116d2", "span.kind": "producer", - "traceparent": "00-68c825e00000000005f74355cba49bbd-e5a53ae949b0a090-00", - "tracestate": "dd=p:e5a53ae949b0a090;s:0" + "traceparent": "00-68ca8114000000007840aeb2b1cce4d1-a76d70bcb72f2617-00", + "tracestate": "dd=p:a76d70bcb72f2617;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -253,14 +259,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2709 + "process_id": 2790 }, - "duration": 397250, - "start": 1757947362483774000 + "duration": 339917, + "start": 1758101781882572595 }, { "name": "Counter.increment_get_and_double", - "service": "raysubmit_RrLXMhFua4mQiAGb", + "service": "raysubmit_gBAZLY4iRuFJiY4b", "resource": "Counter.increment_get_and_double", "trace_id": 0, "span_id": 9, @@ -270,22 +276,23 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825e000000000", - "_dd.parent_id": "86bd33110ea0e93c", + "_dd.p.tid": "68ca811400000000", + "_dd.parent_id": "e9f474663c18e6fc", "component": "ray", "language": "python", - "ray.actor_id": "efa23e8174585931a38c975206000000", + "ray.actor_id": "e58ff9e6d482e7f8387e1c8906000000", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", "ray.job_id": "06000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_RrLXMhFua4mQiAGb", - "ray.task_id": "8a2dc005c3f797b8efa23e8174585931a38c975206000000", - "ray.worker_id": "f1696c009bc3c10b81a617b3b526d57e960165cc58b473046c71fb9a", - "runtime-id": "d5ffe27456114aaaa7b515d8bc7315f6", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2836", + "ray.submission_id": "raysubmit_gBAZLY4iRuFJiY4b", + "ray.task_id": "8a2dc005c3f797b8e58ff9e6d482e7f8387e1c8906000000", + "ray.worker_id": "8b4db7803c6e7f47224d527fe5cd838bcd3bf7027cafb8e1399de346", + "runtime-id": "009c1dd525f149e5969c42ab1886ce46", "span.kind": "consumer", - "traceparent": "00-68c825e00000000005f74355cba49bbd-86bd33110ea0e93c-00", - "tracestate": "dd=p:86bd33110ea0e93c;s:0" + "traceparent": "00-68ca8114000000007840aeb2b1cce4d1-e9f474663c18e6fc-00", + "tracestate": "dd=p:e9f474663c18e6fc;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -294,14 +301,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2753 + "process_id": 2836 }, - "duration": 686666, - "start": 1757947363364674542 + "duration": 816334, + "start": 1758101782711930262 }, { "name": "Counter.increment_and_get", - "service": "raysubmit_RrLXMhFua4mQiAGb", + "service": "raysubmit_gBAZLY4iRuFJiY4b", "resource": "Counter.increment_and_get", "trace_id": 0, "span_id": 10, @@ -312,14 +319,15 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "efa23e8174585931a38c975206000000", + "ray.actor_id": "e58ff9e6d482e7f8387e1c8906000000", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", "ray.job_id": "06000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_RrLXMhFua4mQiAGb", - "ray.task_id": "8a2dc005c3f797b8efa23e8174585931a38c975206000000", - "ray.worker_id": "f1696c009bc3c10b81a617b3b526d57e960165cc58b473046c71fb9a", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2836", + "ray.submission_id": "raysubmit_gBAZLY4iRuFJiY4b", + "ray.task_id": "8a2dc005c3f797b8e58ff9e6d482e7f8387e1c8906000000", + "ray.worker_id": "8b4db7803c6e7f47224d527fe5cd838bcd3bf7027cafb8e1399de346", "span.kind": "consumer" }, "metrics": { @@ -328,12 +336,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 443125, - "start": 1757947363364912833 + "duration": 490458, + "start": 1758101782712249346 }, { "name": "Counter.increment", - "service": "raysubmit_RrLXMhFua4mQiAGb", + "service": "raysubmit_gBAZLY4iRuFJiY4b", "resource": "Counter.increment", "trace_id": 0, "span_id": 11, @@ -344,14 +352,15 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "efa23e8174585931a38c975206000000", + "ray.actor_id": "e58ff9e6d482e7f8387e1c8906000000", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", "ray.job_id": "06000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_RrLXMhFua4mQiAGb", - "ray.task_id": "8a2dc005c3f797b8efa23e8174585931a38c975206000000", - "ray.worker_id": "f1696c009bc3c10b81a617b3b526d57e960165cc58b473046c71fb9a", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2836", + "ray.submission_id": "raysubmit_gBAZLY4iRuFJiY4b", + "ray.task_id": "8a2dc005c3f797b8e58ff9e6d482e7f8387e1c8906000000", + "ray.worker_id": "8b4db7803c6e7f47224d527fe5cd838bcd3bf7027cafb8e1399de346", "span.kind": "consumer" }, "metrics": { @@ -360,12 +369,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 133500, - "start": 1757947363365068167 + "duration": 156125, + "start": 1758101782712426429 }, { "name": "Counter.get_value", - "service": "raysubmit_RrLXMhFua4mQiAGb", + "service": "raysubmit_gBAZLY4iRuFJiY4b", "resource": "Counter.get_value", "trace_id": 0, "span_id": 12, @@ -376,14 +385,15 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "efa23e8174585931a38c975206000000", + "ray.actor_id": "e58ff9e6d482e7f8387e1c8906000000", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", "ray.job_id": "06000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_RrLXMhFua4mQiAGb", - "ray.task_id": "8a2dc005c3f797b8efa23e8174585931a38c975206000000", - "ray.worker_id": "f1696c009bc3c10b81a617b3b526d57e960165cc58b473046c71fb9a", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2836", + "ray.submission_id": "raysubmit_gBAZLY4iRuFJiY4b", + "ray.task_id": "8a2dc005c3f797b8e58ff9e6d482e7f8387e1c8906000000", + "ray.worker_id": "8b4db7803c6e7f47224d527fe5cd838bcd3bf7027cafb8e1399de346", "span.kind": "consumer" }, "metrics": { @@ -392,6 +402,6 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 113041, - "start": 1757947363365230167 + "duration": 118667, + "start": 1758101782712606679 }]] diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_task.json b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_task.json index 22360340a7d..7cd60841568 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_task.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_task.json @@ -1,7 +1,7 @@ [[ { "name": "ray.job", - "service": "raysubmit_GyvvwhNvv7PGHJJV", + "service": "raysubmit_QxnykHHjqCxNLyVB", "resource": "ray.job", "trace_id": 0, "span_id": 1, @@ -12,13 +12,13 @@ "_dd.base_service": "ray.dashboard", "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68c825e700000000", + "_dd.p.tid": "68ca811b00000000", "component": "ray", "language": "python", "ray.job.message": "Job finished successfully.", "ray.job.status": "SUCCEEDED", - "ray.submission_id": "raysubmit_GyvvwhNvv7PGHJJV", - "runtime-id": "5ce8e7e7cd4b4680ba2a0c60c2b62ea4" + "ray.submission_id": "raysubmit_QxnykHHjqCxNLyVB", + "runtime-id": "6cec296b9ec54202916b51bc4ab5e15c" }, "metrics": { "_dd.djm.enabled": 1, @@ -27,14 +27,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1038 + "process_id": 1047 }, - "duration": 3967473085, - "start": 1757947367595112002 + "duration": 3870065502, + "start": 1758101787045664875 }, { "name": "ray.job.submit", - "service": "raysubmit_GyvvwhNvv7PGHJJV", + "service": "raysubmit_QxnykHHjqCxNLyVB", "resource": "ray.job.submit", "trace_id": 0, "span_id": 2, @@ -54,12 +54,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 34416, - "start": 1757947367595266419 + "duration": 36875, + "start": 1758101787045814500 }, { "name": "JobSupervisor.run.remote()", - "service": "raysubmit_GyvvwhNvv7PGHJJV", + "service": "raysubmit_QxnykHHjqCxNLyVB", "resource": "JobSupervisor.run.remote()", "trace_id": 0, "span_id": 3, @@ -70,10 +70,11 @@ "_dd.base_service": "ray.dashboard", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_method.args": "()", + "ray.actor_method.args": "[]", "ray.actor_method.kwargs": "{'_start_signal_actor': None, 'resources_specified': False}", "ray.job_id": "01000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "1047", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "producer" }, @@ -83,12 +84,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 353583, - "start": 1757947367599507294 + "duration": 337875, + "start": 1758101787049894750 }, { "name": "JobSupervisor.run", - "service": "raysubmit_GyvvwhNvv7PGHJJV", + "service": "raysubmit_QxnykHHjqCxNLyVB", "resource": "JobSupervisor.run", "trace_id": 0, "span_id": 4, @@ -98,20 +99,21 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825e700000000", - "_dd.parent_id": "717a7e76bfdcc922", + "_dd.p.tid": "68ca811b00000000", + "_dd.parent_id": "8c93587a30479d1a", "component": "ray", "language": "python", - "ray.actor_id": "0de168b5e9d23c5bb0a7fd4701000000", + "ray.actor_id": "48fcb011b8e05e59922d3f5a01000000", "ray.job_id": "01000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_GyvvwhNvv7PGHJJV", - "ray.task_id": "c7528efcb2fd36ed0de168b5e9d23c5bb0a7fd4701000000", - "ray.worker_id": "74c4f24870e75da803503925eb140732bcbc2e8327d631d8e34f5be2", - "runtime-id": "24449167c4894d5aaf0fb56d5a4067fe", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2908", + "ray.submission_id": "raysubmit_QxnykHHjqCxNLyVB", + "ray.task_id": "aa3d5d11e415fe8848fcb011b8e05e59922d3f5a01000000", + "ray.worker_id": "05fb358bb0df0975f75843d8619436257f5a7d3637526b49ac41b7dd", + "runtime-id": "044b3ddecced497c9baeaaa7aa5f131e", "span.kind": "consumer", - "traceparent": "00-68c825e7000000004d8819849b3336d0-717a7e76bfdcc922-00", - "tracestate": "dd=p:717a7e76bfdcc922" + "traceparent": "00-68ca811b00000000469221fae7e061af-8c93587a30479d1a-00", + "tracestate": "dd=p:8c93587a30479d1a" }, "metrics": { "_dd.djm.enabled": 1, @@ -120,14 +122,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2824 + "process_id": 2908 }, - "duration": 2934253293, - "start": 1757947368544251461 + "duration": 2936854668, + "start": 1758101787903118084 }, { "name": "JobSupervisor._get_driver_env_vars", - "service": "raysubmit_GyvvwhNvv7PGHJJV", + "service": "raysubmit_QxnykHHjqCxNLyVB", "resource": "JobSupervisor._get_driver_env_vars", "trace_id": 0, "span_id": 5, @@ -138,14 +140,15 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "0de168b5e9d23c5bb0a7fd4701000000", + "ray.actor_id": "48fcb011b8e05e59922d3f5a01000000", "ray.actor_method.args": "(False,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_GyvvwhNvv7PGHJJV", - "ray.task_id": "c7528efcb2fd36ed0de168b5e9d23c5bb0a7fd4701000000", - "ray.worker_id": "74c4f24870e75da803503925eb140732bcbc2e8327d631d8e34f5be2", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2908", + "ray.submission_id": "raysubmit_QxnykHHjqCxNLyVB", + "ray.task_id": "aa3d5d11e415fe8848fcb011b8e05e59922d3f5a01000000", + "ray.worker_id": "05fb358bb0df0975f75843d8619436257f5a7d3637526b49ac41b7dd", "span.kind": "consumer" }, "metrics": { @@ -154,12 +157,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 2155458, - "start": 1757947368545803544 + "duration": 2270750, + "start": 1758101787904858584 }, { "name": "JobSupervisor._get_driver_runtime_env", - "service": "raysubmit_GyvvwhNvv7PGHJJV", + "service": "raysubmit_QxnykHHjqCxNLyVB", "resource": "JobSupervisor._get_driver_runtime_env", "trace_id": 0, "span_id": 11, @@ -170,14 +173,15 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "0de168b5e9d23c5bb0a7fd4701000000", + "ray.actor_id": "48fcb011b8e05e59922d3f5a01000000", "ray.actor_method.args": "(False,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_GyvvwhNvv7PGHJJV", - "ray.task_id": "c7528efcb2fd36ed0de168b5e9d23c5bb0a7fd4701000000", - "ray.worker_id": "74c4f24870e75da803503925eb140732bcbc2e8327d631d8e34f5be2", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2908", + "ray.submission_id": "raysubmit_QxnykHHjqCxNLyVB", + "ray.task_id": "aa3d5d11e415fe8848fcb011b8e05e59922d3f5a01000000", + "ray.worker_id": "05fb358bb0df0975f75843d8619436257f5a7d3637526b49ac41b7dd", "span.kind": "consumer" }, "metrics": { @@ -186,12 +190,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 203750, - "start": 1757947368547721252 + "duration": 276958, + "start": 1758101787906798876 }, { "name": "exec simple_task.py", - "service": "raysubmit_GyvvwhNvv7PGHJJV", + "service": "raysubmit_QxnykHHjqCxNLyVB", "resource": "exec simple_task.py", "trace_id": 0, "span_id": 6, @@ -202,12 +206,13 @@ "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "0de168b5e9d23c5bb0a7fd4701000000", + "ray.actor_id": "48fcb011b8e05e59922d3f5a01000000", "ray.job_id": "01000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_GyvvwhNvv7PGHJJV", - "ray.task_id": "c7528efcb2fd36ed0de168b5e9d23c5bb0a7fd4701000000", - "ray.worker_id": "74c4f24870e75da803503925eb140732bcbc2e8327d631d8e34f5be2", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2908", + "ray.submission_id": "raysubmit_QxnykHHjqCxNLyVB", + "ray.task_id": "aa3d5d11e415fe8848fcb011b8e05e59922d3f5a01000000", + "ray.worker_id": "05fb358bb0df0975f75843d8619436257f5a7d3637526b49ac41b7dd", "span.kind": "consumer" }, "metrics": { @@ -216,12 +221,12 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 436125, - "start": 1757947368548111086 + "duration": 453125, + "start": 1758101787907362792 }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_GyvvwhNvv7PGHJJV", + "service": "raysubmit_QxnykHHjqCxNLyVB", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 7, @@ -231,21 +236,22 @@ "meta": { "_dd.base_service": "project", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825e700000000", - "_dd.parent_id": "6db174315f55b665", + "_dd.p.tid": "68ca811b00000000", + "_dd.parent_id": "fb6e4faa1c5b6042", "component": "ray", "language": "python", "ray.job_id": "07000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_GyvvwhNvv7PGHJJV", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2960", + "ray.submission_id": "raysubmit_QxnykHHjqCxNLyVB", "ray.task.args": "(0,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.worker_id": "07000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "0ce9f9910d504bda87b0d1854f772d8a", + "runtime-id": "255a8c2d0dcd4e63a95f265c35c46945", "span.kind": "producer", - "traceparent": "00-68c825e7000000004d8819849b3336d0-6db174315f55b665-00", - "tracestate": "dd=p:6db174315f55b665;s:0" + "traceparent": "00-68ca811b00000000469221fae7e061af-fb6e4faa1c5b6042-00", + "tracestate": "dd=p:fb6e4faa1c5b6042;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -254,14 +260,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2874 + "process_id": 2960 }, - "duration": 3704833, - "start": 1757947369250687753 + "duration": 3222750, + "start": 1758101788605434876 }, { "name": "__main__.add_one", - "service": "raysubmit_GyvvwhNvv7PGHJJV", + "service": "raysubmit_QxnykHHjqCxNLyVB", "resource": "__main__.add_one", "trace_id": 0, "span_id": 12, @@ -271,22 +277,23 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825e700000000", - "_dd.parent_id": "36ce3d7e98706fc4", + "_dd.p.tid": "68ca811b00000000", + "_dd.parent_id": "0a0fe8184d6a3ae6", "component": "ray", "language": "python", "ray.job_id": "07000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_GyvvwhNvv7PGHJJV", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "3009", + "ray.submission_id": "raysubmit_QxnykHHjqCxNLyVB", "ray.task.args": "(0,)", "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.task_id": "d2b4e3e4a6f1ddc5ffffffffffffffffffffffff07000000", - "ray.worker_id": "351fdc9c6602f2e501d46ab0b8082ee995ce14eda8fc4ae5cda75f27", - "runtime-id": "d2ff91357dfb425dbf35d6399bba7ab6", + "ray.worker_id": "60b8e1428ea4a8c455ba2d83faa063ee5924260cdb6942edb885756c", + "runtime-id": "cc9d1f54be054360ae7097c79efd07d7", "span.kind": "consumer", - "traceparent": "00-68c825e7000000004d8819849b3336d0-36ce3d7e98706fc4-00", - "tracestate": "dd=p:36ce3d7e98706fc4;s:0" + "traceparent": "00-68ca811b00000000469221fae7e061af-0a0fe8184d6a3ae6-00", + "tracestate": "dd=p:0a0fe8184d6a3ae6;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -295,14 +302,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2922 + "process_id": 3009 }, - "duration": 239375, - "start": 1757947371283203837 + "duration": 266000, + "start": 1758101790372952960 }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_GyvvwhNvv7PGHJJV", + "service": "raysubmit_QxnykHHjqCxNLyVB", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 8, @@ -312,21 +319,22 @@ "meta": { "_dd.base_service": "project", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825e700000000", - "_dd.parent_id": "6db174315f55b665", + "_dd.p.tid": "68ca811b00000000", + "_dd.parent_id": "fb6e4faa1c5b6042", "component": "ray", "language": "python", "ray.job_id": "07000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_GyvvwhNvv7PGHJJV", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2960", + "ray.submission_id": "raysubmit_QxnykHHjqCxNLyVB", "ray.task.args": "(1,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.worker_id": "07000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "0ce9f9910d504bda87b0d1854f772d8a", + "runtime-id": "255a8c2d0dcd4e63a95f265c35c46945", "span.kind": "producer", - "traceparent": "00-68c825e7000000004d8819849b3336d0-6db174315f55b665-00", - "tracestate": "dd=p:6db174315f55b665;s:0" + "traceparent": "00-68ca811b00000000469221fae7e061af-fb6e4faa1c5b6042-00", + "tracestate": "dd=p:fb6e4faa1c5b6042;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -335,14 +343,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2874 + "process_id": 2960 }, - "duration": 313416, - "start": 1757947369257939003 + "duration": 233791, + "start": 1758101788610806668 }, { "name": "__main__.add_one", - "service": "raysubmit_GyvvwhNvv7PGHJJV", + "service": "raysubmit_QxnykHHjqCxNLyVB", "resource": "__main__.add_one", "trace_id": 0, "span_id": 13, @@ -352,22 +360,23 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825e700000000", - "_dd.parent_id": "a495445e12d442c8", + "_dd.p.tid": "68ca811b00000000", + "_dd.parent_id": "4ac7dc8a9053aa38", "component": "ray", "language": "python", "ray.job_id": "07000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_GyvvwhNvv7PGHJJV", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "3007", + "ray.submission_id": "raysubmit_QxnykHHjqCxNLyVB", "ray.task.args": "(1,)", "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.task_id": "11149dae5a34cd9affffffffffffffffffffffff07000000", - "ray.worker_id": "6b5a910f481756b3a38c22f852678d9e02c676a1245ed52c86047d46", - "runtime-id": "be46484f2fe14e58b1f040354b2709fd", + "ray.worker_id": "e37bb2b38206a7762d26117e5215846323f7b5c01136abd2985bb7bb", + "runtime-id": "20f82749dd8944a9baa068b2a32f4769", "span.kind": "consumer", - "traceparent": "00-68c825e7000000004d8819849b3336d0-a495445e12d442c8-00", - "tracestate": "dd=p:a495445e12d442c8;s:0" + "traceparent": "00-68ca811b00000000469221fae7e061af-4ac7dc8a9053aa38-00", + "tracestate": "dd=p:4ac7dc8a9053aa38;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -376,14 +385,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2919 + "process_id": 3007 }, - "duration": 250750, - "start": 1757947371249526587 + "duration": 239208, + "start": 1758101790410238627 }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_GyvvwhNvv7PGHJJV", + "service": "raysubmit_QxnykHHjqCxNLyVB", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 9, @@ -393,21 +402,22 @@ "meta": { "_dd.base_service": "project", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825e700000000", - "_dd.parent_id": "6db174315f55b665", + "_dd.p.tid": "68ca811b00000000", + "_dd.parent_id": "fb6e4faa1c5b6042", "component": "ray", "language": "python", "ray.job_id": "07000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_GyvvwhNvv7PGHJJV", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2960", + "ray.submission_id": "raysubmit_QxnykHHjqCxNLyVB", "ray.task.args": "(2,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.worker_id": "07000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "0ce9f9910d504bda87b0d1854f772d8a", + "runtime-id": "255a8c2d0dcd4e63a95f265c35c46945", "span.kind": "producer", - "traceparent": "00-68c825e7000000004d8819849b3336d0-6db174315f55b665-00", - "tracestate": "dd=p:6db174315f55b665;s:0" + "traceparent": "00-68ca811b00000000469221fae7e061af-fb6e4faa1c5b6042-00", + "tracestate": "dd=p:fb6e4faa1c5b6042;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -416,14 +426,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2874 + "process_id": 2960 }, - "duration": 188458, - "start": 1757947369260721628 + "duration": 213125, + "start": 1758101788613216543 }, { "name": "__main__.add_one", - "service": "raysubmit_GyvvwhNvv7PGHJJV", + "service": "raysubmit_QxnykHHjqCxNLyVB", "resource": "__main__.add_one", "trace_id": 0, "span_id": 14, @@ -433,22 +443,23 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825e700000000", - "_dd.parent_id": "4d38a3317d0175cd", + "_dd.p.tid": "68ca811b00000000", + "_dd.parent_id": "ffd2ec468bf9aa2d", "component": "ray", "language": "python", "ray.job_id": "07000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_GyvvwhNvv7PGHJJV", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "3010", + "ray.submission_id": "raysubmit_QxnykHHjqCxNLyVB", "ray.task.args": "(2,)", "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.task_id": "a363a5a94a784cb3ffffffffffffffffffffffff07000000", - "ray.worker_id": "b4befc1e8430a845503a18210591158276a03224034c161b3992a689", - "runtime-id": "e501a87370eb41c89f4903bd2de2e358", + "ray.worker_id": "22b5b763f4c2396c1f5a7a43d79483918baa923b2047e3db4d731557", + "runtime-id": "80e622ef56a44c1db4e7a5b20529d768", "span.kind": "consumer", - "traceparent": "00-68c825e7000000004d8819849b3336d0-4d38a3317d0175cd-00", - "tracestate": "dd=p:4d38a3317d0175cd;s:0" + "traceparent": "00-68ca811b00000000469221fae7e061af-ffd2ec468bf9aa2d-00", + "tracestate": "dd=p:ffd2ec468bf9aa2d;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -457,14 +468,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2921 + "process_id": 3010 }, - "duration": 267167, - "start": 1757947371292267962 + "duration": 271459, + "start": 1758101790402524293 }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_GyvvwhNvv7PGHJJV", + "service": "raysubmit_QxnykHHjqCxNLyVB", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 10, @@ -474,21 +485,22 @@ "meta": { "_dd.base_service": "project", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825e700000000", - "_dd.parent_id": "6db174315f55b665", + "_dd.p.tid": "68ca811b00000000", + "_dd.parent_id": "fb6e4faa1c5b6042", "component": "ray", "language": "python", "ray.job_id": "07000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_GyvvwhNvv7PGHJJV", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "2960", + "ray.submission_id": "raysubmit_QxnykHHjqCxNLyVB", "ray.task.args": "(3,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.worker_id": "07000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "0ce9f9910d504bda87b0d1854f772d8a", + "runtime-id": "255a8c2d0dcd4e63a95f265c35c46945", "span.kind": "producer", - "traceparent": "00-68c825e7000000004d8819849b3336d0-6db174315f55b665-00", - "tracestate": "dd=p:6db174315f55b665;s:0" + "traceparent": "00-68ca811b00000000469221fae7e061af-fb6e4faa1c5b6042-00", + "tracestate": "dd=p:fb6e4faa1c5b6042;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -497,14 +509,14 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2874 + "process_id": 2960 }, - "duration": 219458, - "start": 1757947369262587128 + "duration": 165625, + "start": 1758101788614802376 }, { "name": "__main__.add_one", - "service": "raysubmit_GyvvwhNvv7PGHJJV", + "service": "raysubmit_QxnykHHjqCxNLyVB", "resource": "__main__.add_one", "trace_id": 0, "span_id": 15, @@ -514,22 +526,23 @@ "meta": { "_dd.base_service": "ray._private.workers", "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c825e700000000", - "_dd.parent_id": "6f9529356db36de2", + "_dd.p.tid": "68ca811b00000000", + "_dd.parent_id": "2052ed665e804741", "component": "ray", "language": "python", "ray.job_id": "07000000", - "ray.node_id": "9afeb75f2f23f5535191d113047e279c120b567932007d28dd8f40af", - "ray.submission_id": "raysubmit_GyvvwhNvv7PGHJJV", + "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", + "ray.pid": "3008", + "ray.submission_id": "raysubmit_QxnykHHjqCxNLyVB", "ray.task.args": "(3,)", "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.task_id": "b6fe777c23eaf580ffffffffffffffffffffffff07000000", - "ray.worker_id": "43e0038c152ca10baaba00a550e5ddcdd039fa8ecea9a985262f4959", - "runtime-id": "7433ad440d344c7793ff2687ccf8aa03", + "ray.worker_id": "d7f25c6ba339fbc38c238a05c1b12f77a5d0258f0f60367bfc8e28f0", + "runtime-id": "a2962b8413b6426a82e0fb3cc62e052f", "span.kind": "consumer", - "traceparent": "00-68c825e7000000004d8819849b3336d0-6f9529356db36de2-00", - "tracestate": "dd=p:6f9529356db36de2;s:0" + "traceparent": "00-68ca811b00000000469221fae7e061af-2052ed665e804741-00", + "tracestate": "dd=p:2052ed665e804741;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -538,8 +551,8 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2920 + "process_id": 3008 }, - "duration": 244750, - "start": 1757947371308263712 + "duration": 265208, + "start": 1758101790425958585 }]] From a2274f28673c79c24fb31f2f6c1b5bf78e0eb6da Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Wed, 17 Sep 2025 14:04:55 +0200 Subject: [PATCH 28/59] first round of addressing reviews --- ddtrace/contrib/internal/ray/__init__.py | 10 +-- ddtrace/contrib/internal/ray/constants.py | 10 +++ ddtrace/contrib/internal/ray/hook.py | 9 --- ddtrace/contrib/internal/ray/patch.py | 78 +++++-------------- ddtrace/contrib/internal/ray/span_manager.py | 16 ++-- ddtrace/contrib/internal/ray/utils.py | 40 ++++++---- ddtrace/contrib/ray.py | 20 +++++ ...ray-core-integration-91f88d121822166d.yaml | 2 +- tests/contrib/ray/test_long_running_span.py | 8 +- tests/contrib/ray/test_ray.py | 4 +- 10 files changed, 95 insertions(+), 102 deletions(-) create mode 100644 ddtrace/contrib/internal/ray/constants.py delete mode 100644 ddtrace/contrib/internal/ray/hook.py create mode 100644 ddtrace/contrib/ray.py diff --git a/ddtrace/contrib/internal/ray/__init__.py b/ddtrace/contrib/internal/ray/__init__.py index 2588e031913..e38b981c079 100644 --- a/ddtrace/contrib/internal/ray/__init__.py +++ b/ddtrace/contrib/internal/ray/__init__.py @@ -15,10 +15,10 @@ from ddtrace import patch patch(ray=True) -The recommended way to instrument ray, is to instrument the ray cluster. +The recommended way to instrument Ray, is to instrument the Ray cluster. You can do it by starting the Ray head with a tracing startup hook:: - ray start --head --tracing-startup-hook=ddtrace.contrib.internal.ray.hook:setup_tracing + ray start --head --tracing-startup-hook=ddtrace.contrib.ray:setup_tracing Configuration @@ -27,9 +27,9 @@ The Ray integration can be configured using environment variables: - ``DD_TRACE_RAY_RESUBMIT_LONG_RUNNING_INTERVAL``: Interval for resubmitting long-running - spans (default: ``10.0`` seconds) -- ``DD_TRACE_RAY_WATCH_LONG_RUNNING_DELAY``: Maxime delay before a long-running span - is sent (default: ``10.0`` seconds) + spans (default: ``120.0`` seconds) +- ``DD_TRACE_RAY_REGISTER_LONG_RUNNING_THRESHOLD``: Maximum span duration before it is considered + long-runnning (default: ``10.0``seconds) Notes ~~~~~ diff --git a/ddtrace/contrib/internal/ray/constants.py b/ddtrace/contrib/internal/ray/constants.py new file mode 100644 index 00000000000..db45e70236f --- /dev/null +++ b/ddtrace/contrib/internal/ray/constants.py @@ -0,0 +1,10 @@ +DD_TRACE_CTX = "_dd_trace_ctx" + +RAY_SUBMISSION_ID = "_RAY_SUBMISSION_ID" +RAY_JOB_ID = "ray.job_id" +RAY_NODE_ID = "ray.node_id" +RAY_PID = "ray.pid" +RAY_WORKER_ID = "ray.worker_id" +RAY_TASK_ID = "ray.task_id" +RAY_ACTOR_ID = "ray.actor_id" +RAY_SUBMISSION_ID_TAG = "ray.submission_id" diff --git a/ddtrace/contrib/internal/ray/hook.py b/ddtrace/contrib/internal/ray/hook.py deleted file mode 100644 index 5576b961e62..00000000000 --- a/ddtrace/contrib/internal/ray/hook.py +++ /dev/null @@ -1,9 +0,0 @@ -def setup_tracing(): - from ray.util.tracing import tracing_helper - from ray.util.tracing.tracing_helper import _is_tracing_enabled - - import ddtrace.auto # noqa:F401 - - tracing_helper._global_is_tracing_enabled = False - if _is_tracing_enabled(): - raise AssertionError("OTEL Tracing should be disabled at setup.") diff --git a/ddtrace/contrib/internal/ray/patch.py b/ddtrace/contrib/internal/ray/patch.py index efbb177eaca..918c2dfd1d8 100644 --- a/ddtrace/contrib/internal/ray/patch.py +++ b/ddtrace/contrib/internal/ray/patch.py @@ -2,7 +2,6 @@ from functools import wraps import inspect import os -import socket from typing import Any from typing import Callable from typing import Dict @@ -24,7 +23,6 @@ from ddtrace._trace.span import Span from ddtrace.constants import _DJM_ENABLED_KEY from ddtrace.constants import _FILTER_KEPT_KEY -from ddtrace.constants import _HOSTNAME_KEY from ddtrace.constants import _SAMPLING_PRIORITY_KEY from ddtrace.constants import _SPAN_MEASURED_KEY from ddtrace.constants import SPAN_KIND @@ -35,6 +33,9 @@ from ddtrace.propagation.http import _TraceContext from ddtrace.settings._config import _get_config +from .constants import DD_TRACE_CTX +from .constants import RAY_SUBMISSION_ID +from .constants import RAY_SUBMISSION_ID_TAG from .span_manager import long_running_ray_span from .span_manager import start_long_running_job from .span_manager import stop_long_running_job @@ -47,14 +48,12 @@ from .utils import set_maybe_big_tag -RAY_SUBMISSION_ID = "_RAY_SUBMISSION_ID" - config._add( "ray", dict( _default_service=schematize_service_name("ray"), - resubmit_interval=float(_get_config("DD_TRACE_RAY_RESUBMIT_LONG_RUNNING_INTERVAL", default=120.0)), - watch_delay=float(_get_config("DD_TRACE_RAY_WATCH_LONG_RUNNING_DELAY", default=10.0)), + resubmit_interval=_get_config("DD_TRACE_RAY_RESUBMIT_LONG_RUNNING_INTERVAL", default=10.0, modifier=float), + register_treshold=_get_config("DD_TRACE_RAY_REGISTER_LONG_RUNNING_THRESHOLD", default=10.0, modifier=float), ), ) @@ -83,9 +82,6 @@ def process_trace(self, trace: List[Span]) -> Optional[List[Span]]: span.set_metric(_SPAN_MEASURED_KEY, 1) span.set_metric(_SAMPLING_PRIORITY_KEY, 2) - # add host name for GPU Monitoring correlation - span.set_tag_str(_HOSTNAME_KEY, socket.gethostname()) - filtered_spans.append(span) return filtered_spans @@ -104,12 +100,12 @@ def _wrap_task_execution(wrapped, *args, **kwargs): """ Wraps the actual execution of a Ray task to trace its performance. """ - if not tracer or "_dd_trace_ctx" not in kwargs: + if DD_TRACE_CTX not in kwargs: return wrapped(*args, **kwargs) # Extract context from parent span - extracted_context = _TraceContext._extract(kwargs["_dd_trace_ctx"]) - kwargs.pop("_dd_trace_ctx") + extracted_context = _TraceContext._extract(kwargs[DD_TRACE_CTX]) + kwargs.pop(DD_TRACE_CTX) function_name = getattr(wrapped, "__name__", "unknown_function") function_module = getattr(wrapped, "__module__", "unknown_module") @@ -129,17 +125,13 @@ def _wrap_task_execution(wrapped, *args, **kwargs): task_execute_span.set_tag_str("ray.task.status", "success") return result - except Exception: + except BaseException: task_execute_span.set_tag_str("ray.task.status", "error") raise def traced_submit_task(wrapped, instance, args, kwargs): """Trace task submission, i.e the func.remote() call""" - - if not tracer: - return wrapped(*args, **kwargs) - if tracer.current_span() is None: tracer.context_provider.activate(_extract_tracing_context_from_env()) @@ -165,7 +157,7 @@ def traced_submit_task(wrapped, instance, args, kwargs): span.set_tag_str("ray.task.submit_status", "success") return resp - except Exception as e: + except BaseException as e: span.set_tag_str("ray.task.submit_status", "error") raise e @@ -178,16 +170,13 @@ def traced_submit_job(wrapped, instance, args, kwargs): trough ray_ctx """ - if not tracer: - return wrapped(*args, **kwargs) - submission_id = kwargs.get("submission_id") or generate_job_id() kwargs["submission_id"] = submission_id # Root span creation job_span = tracer.start_span("ray.job", service=submission_id, span_type=SpanTypes.RAY) job_span.set_tag_str("component", "ray") - job_span.set_tag_str("ray.submission_id", submission_id) + job_span.set_tag_str(RAY_SUBMISSION_ID_TAG, submission_id) tracer.context_provider.activate(job_span) start_long_running_job(job_span) @@ -205,10 +194,10 @@ def traced_submit_job(wrapped, instance, args, kwargs): resp = wrapped(*args, **kwargs) submit_span.set_tag_str("ray.job.submit_status", "success") return resp - except Exception: + except BaseException: submit_span.set_tag_str("ray.job.submit_status", "error") raise - except Exception as e: + except BaseException as e: job_span.set_tag_str("ray.job.status", "error") job_span.error = 1 job_span.set_exc_info(type(e), e, e.__traceback__) @@ -220,15 +209,12 @@ def traced_actor_method_call(wrapped, instance, args, kwargs): """Trace actor method submission, i.e the Actor.func.remote() call """ - if not tracer: - return wrapped(*args, **kwargs) - actor_name = instance._ray_actor_creation_function_descriptor.class_name method_name = args[0] # if _dd_trace_ctx was not injected in the param of the function, it means # we do not want to trace this function, for example: JobSupervisor.ping - if not any(p.name == "_dd_trace_ctx" for p in instance._ray_method_signatures[method_name]): + if not any(p.name == DD_TRACE_CTX for p in instance._ray_method_signatures[method_name]): return wrapped(*args, **kwargs) if tracer.current_span() is None: @@ -242,26 +228,20 @@ def traced_actor_method_call(wrapped, instance, args, kwargs): set_maybe_big_tag(span, "ray.actor_method.kwargs", kwargs.get("kwargs", {})) _inject_ray_span_tags(span) - try: - _inject_context_in_kwargs(span.context, kwargs) - return wrapped(*args, **kwargs) - except Exception as e: - raise e + _inject_context_in_kwargs(span.context, kwargs) + return wrapped(*args, **kwargs) def traced_wait(wrapped, instance, args, kwargs): """ Trace the calls of ray.wait """ - if not tracer: - return wrapped(*args, **kwargs) - if tracer.current_span() is None: tracer.context_provider.activate(_extract_tracing_context_from_env()) with long_running_ray_span( "ray.wait", - service=os.environ.get("_RAY_SUBMISSION_ID"), + service=os.environ.get(RAY_SUBMISSION_ID), span_type=SpanTypes.RAY, child_of=tracer.context_provider.active(), activate=True, @@ -281,13 +261,9 @@ def traced_wait(wrapped, instance, args, kwargs): def _job_supervisor_run_wrapper(method: Callable[..., Any]) -> Any: - async def _traced_run_method(self: Any, *args: Any, _dd_trace_ctx=None, **kwargs: Any) -> Any: - from ddtrace import tracer + async def _traced_run_method(self: Any, *args: Any, _dd_trace_ctx, **kwargs: Any) -> Any: from ddtrace.ext import SpanTypes - if not tracer or _dd_trace_ctx is None: - return await method(self, *args, **kwargs) - context = _TraceContext._extract(_dd_trace_ctx) submission_id = os.environ.get(RAY_SUBMISSION_ID) @@ -318,9 +294,6 @@ def _traced_run_method(self: Any, *args: Any, _dd_trace_ctx=None, **kwargs: Any) from ddtrace import tracer from ddtrace.ext import SpanTypes - if not tracer: - return method(self, *args) - if tracer.current_span() is None: tracer.context_provider.activate(_extract_tracing_context_from_env()) @@ -336,10 +309,7 @@ def _traced_run_method(self: Any, *args: Any, _dd_trace_ctx=None, **kwargs: Any) span.set_tag_str(SPAN_KIND, SpanKind.CONSUMER) _inject_ray_span_tags(span) - try: - return method(self, *args) - except Exception as e: - raise e + return method(self, *args) return _traced_run_method @@ -367,7 +337,7 @@ def _inject_tracing_actor_method(method: Callable[..., Any]) -> Any: def _traced_method(self: Any, *args: Any, _dd_trace_ctx=None, **kwargs: Any) -> Any: from ddtrace import tracer - if not tracer or (_dd_trace_ctx is None and tracer.current_span() is None): + if _dd_trace_ctx is None and tracer.current_span() is None: return method(self, *args, **kwargs) with _trace_actor_method(self, method, _dd_trace_ctx, *args, **kwargs): @@ -380,7 +350,7 @@ def _inject_tracing_async_actor_method(method: Callable[..., Any]) -> Any: async def _traced_async_method(self: Any, *args: Any, _dd_trace_ctx=None, **kwargs: Any) -> Any: from ddtrace import tracer - if not tracer or (_dd_trace_ctx is None and tracer.current_span() is None): + if _dd_trace_ctx is None and tracer.current_span() is None: return await method(self, *args, **kwargs) with _trace_actor_method(self, method, _dd_trace_ctx, *args, **kwargs): @@ -390,9 +360,6 @@ async def _traced_async_method(self: Any, *args: Any, _dd_trace_ctx=None, **kwar def inject_tracing_into_actor_class(wrapped, instance, args, kwargs): - if not tracer: - return wrapped(*args, **kwargs) - cls = wrapped(*args, **kwargs) module_name = str(cls.__module__) class_name = str(cls.__name__) @@ -438,9 +405,6 @@ def inject_tracing_into_actor_class(wrapped, instance, args, kwargs): async def traced_end_job(wrapped, instance, args, kwargs): - if not tracer: - return await wrapped(*args, **kwargs) - result = await wrapped(*args, **kwargs) job_id = args[0] diff --git a/ddtrace/contrib/internal/ray/span_manager.py b/ddtrace/contrib/internal/ray/span_manager.py index 42942b166ac..245fbe4da2c 100644 --- a/ddtrace/contrib/internal/ray/span_manager.py +++ b/ddtrace/contrib/internal/ray/span_manager.py @@ -22,7 +22,7 @@ def long_running_ray_span(span_name, service, span_type, child_of=None, activate try: yield span - except Exception as e: + except BaseException as e: span.set_exc_info(type(e), e, e.__traceback__) raise finally: @@ -49,22 +49,22 @@ def _emit_partial_span(self, span): # Sending spans which are waiting for long running spans to finish aggregator = tracer._span_aggregator - finished_children = [] + finished_spans = [] with aggregator._lock: if span.trace_id in aggregator._traces: trace = aggregator._traces[span.trace_id] - finished_children = [] + finished_spans = [] remaining_spans = [] for s in trace.spans: if s.finished and s.span_id != span.span_id: - finished_children.append(s) + finished_spans.append(s) else: remaining_spans.append(s) trace.spans[:] = remaining_spans - trace.num_finished -= len(finished_children) + trace.num_finished -= len(finished_spans) - spans_to_write = [partial_span] + finished_children + spans_to_write = [partial_span] + finished_spans try: spans = spans_to_write @@ -149,7 +149,7 @@ def add_span(self, span): self._job_spans[submission_id] = {} self._job_spans[submission_id][(span.trace_id, span.span_id)] = span - def watch_potential_long_running(self, span): + def register_long_running(self, span): submission_id = self._get_submission_id(span) if not submission_id: return @@ -211,7 +211,7 @@ def stop_long_running_job(submission_id, job_info): def start_long_running_span(span): _job_manager.add_span(span) - watch_timer = threading.Timer(config.ray.watch_delay, _job_manager.watch_potential_long_running, args=[span]) + watch_timer = threading.Timer(config.ray.register_treshold, _job_manager.register_long_running, args=[span]) watch_timer.daemon = True watch_timer.start() diff --git a/ddtrace/contrib/internal/ray/utils.py b/ddtrace/contrib/internal/ray/utils.py index dfc03b0f788..39dfb22523a 100644 --- a/ddtrace/contrib/internal/ray/utils.py +++ b/ddtrace/contrib/internal/ray/utils.py @@ -10,18 +10,26 @@ import ray from ray.runtime_context import get_runtime_context +from ddtrace._trace._limits import MAX_SPAN_META_VALUE_LEN from ddtrace.propagation.http import _TraceContext - -MAX_TAG_VALUES_SIZE_BYTES = 25000 +from .constants import DD_TRACE_CTX +from .constants import RAY_ACTOR_ID +from .constants import RAY_JOB_ID +from .constants import RAY_NODE_ID +from .constants import RAY_PID +from .constants import RAY_SUBMISSION_ID +from .constants import RAY_SUBMISSION_ID_TAG +from .constants import RAY_TASK_ID +from .constants import RAY_WORKER_ID def _inject_dd_trace_ctx_kwarg(method: Callable) -> Signature: old_sig = inspect.signature(method) - if "_dd_trace_ctx" in old_sig.parameters: + if DD_TRACE_CTX in old_sig.parameters: return old_sig - new_param = Parameter("_dd_trace_ctx", Parameter.KEYWORD_ONLY, default=None) + new_param = Parameter(DD_TRACE_CTX, Parameter.KEYWORD_ONLY, default=None) params_list = list(old_sig.parameters.values()) + [new_param] sorted_params = sorted(params_list, key=lambda p: p.kind == Parameter.VAR_KEYWORD) return old_sig.replace(parameters=sorted_params) @@ -32,7 +40,7 @@ def _inject_context_in_kwargs(context, kwargs): _TraceContext._inject(context, headers) if "kwargs" not in kwargs or kwargs["kwargs"] is None: kwargs["kwargs"] = {} - kwargs["kwargs"]["_dd_trace_ctx"] = headers + kwargs["kwargs"][DD_TRACE_CTX] = headers def _inject_context_in_env(context): @@ -57,34 +65,34 @@ def _inject_ray_span_tags(span): runtime_context = get_runtime_context() span.set_tag_str("component", "ray") - span.set_tag_str("ray.job_id", runtime_context.get_job_id()) - span.set_tag_str("ray.node_id", runtime_context.get_node_id()) - span.set_tag_str("ray.pid", str(os.getpid())) + span.set_tag_str(RAY_JOB_ID, runtime_context.get_job_id()) + span.set_tag_str(RAY_NODE_ID, runtime_context.get_node_id()) + span.set_tag_str(RAY_PID, str(os.getpid())) worker_id = runtime_context.get_worker_id() if worker_id is not None: - span.set_tag_str("ray.worker_id", worker_id) + span.set_tag_str(RAY_WORKER_ID, worker_id) if runtime_context.worker.mode == ray._private.worker.WORKER_MODE: task_id = runtime_context.get_task_id() if task_id is not None: - span.set_tag_str("ray.task_id", task_id) + span.set_tag_str(RAY_TASK_ID, task_id) actor_id = runtime_context.get_actor_id() if actor_id is not None: - span.set_tag_str("ray.actor_id", actor_id) + span.set_tag_str(RAY_ACTOR_ID, actor_id) - submission_id = os.environ.get("_RAY_SUBMISSION_ID") + submission_id = os.environ.get(RAY_SUBMISSION_ID) if submission_id is not None: - span.set_tag_str("ray.submission_id", submission_id) + span.set_tag_str(RAY_SUBMISSION_ID_TAG, submission_id) def set_maybe_big_tag(span, tag_name, tag_value): """We want to add args/kwargs values as tag when we execute a task/actor method. - However they might be big. To avoid CPU cost for serializing a big object, we do it only - if the values are small enough to not be truncated + However they might be really big. In that case we dont way to serialize them AT ALL + and we do not want to rely on _encoding.pyx. """ - if sys.getsizeof(tag_value) > MAX_TAG_VALUES_SIZE_BYTES: + if sys.getsizeof(tag_value) > MAX_SPAN_META_VALUE_LEN: span.set_tag(tag_name, "") else: span.set_tag(tag_name, tag_value) diff --git a/ddtrace/contrib/ray.py b/ddtrace/contrib/ray.py new file mode 100644 index 00000000000..3ba07d09f05 --- /dev/null +++ b/ddtrace/contrib/ray.py @@ -0,0 +1,20 @@ +import logging +import os + +from ray.util.tracing import tracing_helper +from ray.util.tracing.tracing_helper import _is_tracing_enabled + +from ddtrace import patch +import ddtrace.auto # noqa:F401 + + +log = logging.getLogger(__name__) + + +def setup_tracing(): + os.environ["DD_TRACE_REPORT_HOSTNAME"] = "True" + patch(ray=True) + + if _is_tracing_enabled(): + log.warning("Deactivating OpenTelemetry tracing in favor of Datadog tracing as both are not compatible.") + tracing_helper._global_is_tracing_enabled = False diff --git a/releasenotes/notes/ray-core-integration-91f88d121822166d.yaml b/releasenotes/notes/ray-core-integration-91f88d121822166d.yaml index 987b08838a8..97f3dfa88dd 100644 --- a/releasenotes/notes/ray-core-integration-91f88d121822166d.yaml +++ b/releasenotes/notes/ray-core-integration-91f88d121822166d.yaml @@ -5,5 +5,5 @@ features: tasks, and actor method calls. Supported for Ray >= 2.46.0. To enable tracing, start the Ray head with - `--tracing-startup-hook=ddtrace.contrib.internal.ray.hook:setup_tracing`, + `--tracing-startup-hook=ddtrace.contrib.ray:setup_tracing`, then submit jobs as usual. diff --git a/tests/contrib/ray/test_long_running_span.py b/tests/contrib/ray/test_long_running_span.py index b82f870049b..abfee9945d1 100644 --- a/tests/contrib/ray/test_long_running_span.py +++ b/tests/contrib/ray/test_long_running_span.py @@ -14,11 +14,11 @@ def setUp(self): super().setUp() # Override timing values to make tests run quickly self.original_resubmit_interval = getattr(config.ray, "resubmit_interval", 120.0) - self.original_watch_delay = getattr(config.ray, "watch_delay", 10.0) + self.original_register_treshold = getattr(config.ray, "register_treshold", 10.0) # Set fast timing for testing config.ray.resubmit_interval = 2 # 2s instead of 120s - config.ray.watch_delay = 1 # 1s instead of 10s + config.ray.register_treshold = 1 # 1s instead of 10s # Clear any existing spans from the job manager with _job_manager._lock: @@ -29,7 +29,7 @@ def setUp(self): def tearDown(self): # Restore original values config.ray.resubmit_interval = self.original_resubmit_interval - config.ray.watch_delay = self.original_watch_delay + config.ray.register_treshold = self.original_register_treshold # Clean up any remaining timers with _job_manager._lock: @@ -69,7 +69,7 @@ def test_long_running_span_basic_lifecycle(self): self.assertTrue(span.finished) def test_not_long_running_span(self): - """Test when a potential long running span lasts less then watch_delay""" + """Test when a potential long running span lasts less then register_treshold""" span = self.tracer.start_span("test.not.long.running", service="test-service") span.set_tag_str("ray.submission_id", "test-submission-123") diff --git a/tests/contrib/ray/test_ray.py b/tests/contrib/ray/test_ray.py index 07f6243ab38..7fb98fa3da2 100644 --- a/tests/contrib/ray/test_ray.py +++ b/tests/contrib/ray/test_ray.py @@ -70,7 +70,7 @@ def setUpClass(cls): super(TestRayIntegration, cls).setUpClass() os.environ["_DD_TRACE_RAY_TESTING"] = "true" - os.environ["DD_TRACE_RAY_WATCH_LONG_RUNNING_DELAY"] = "30" + os.environ["DD_TRACE_RAY_REGISTER_LONG_RUNNING_THRESHOLD"] = "30" try: subprocess.run(["ray", "stop", "--force"], capture_output=True, check=False) @@ -86,7 +86,7 @@ def setUpClass(cls): "--head", "--dashboard-host=127.0.0.1", "--port=0", - "--tracing-startup-hook=ddtrace.contrib.internal.ray.hook:setup_tracing", + "--tracing-startup-hook=ddtrace.contrib.ray:setup_tracing", ], capture_output=True, text=True, From 7be76826c5a1555ef08fb271747257c281ee94c8 Mon Sep 17 00:00:00 2001 From: Yakov Shapiro Date: Mon, 22 Sep 2025 18:24:15 -0400 Subject: [PATCH 29/59] chore(mlobs): infer the name of the job from the submission ID (#14540) In the new observability UI that we are building, we want to group together different runs of one and the same job that train one and the same model on different days and/or with different training data. Right now we are using the `span.service` field to convey the name of the model; we do not want this field to be unique per trace, as Ray submission IDs usually are. We want to group together similar submission IDs in the UI. Ray will, by default, assign submission IDs that look like `raysubmit_VFFkXZzz5CGiiJqx`, and in our own Ray staging environment we use submission IDs that look like `yakov.shapiro-235da2fc-6645-4c6a-94a3-3804a286f019`. Because of this, I am implementing the following heuristic: take the first part of the submission ID that contains only alphanumeric characters or dots (.), and use that as the service name on the spans. This is not perfect, but in the short term it accomplishes the goal of stripping away meaningless suffixes from job names. For testing, [I followed these instructions](https://github.com/DataDog/dd-trace-py/blob/main/docs/contributing-testing.rst) to launch a Docker container to run tests in my repository, and then ran the new tests with this command: ``` DD_AGENT_PORT=9126 riot -v run --pass-env -s -p 3.10 ray -- -s -vv -k test_get_dd_job_name ``` I verified that this shows that one test passed and 30 others were deselected. For an end-to-end test, I installed Ray and ddtrace with the following commands: ``` pyenv install 3.12.1 pyenv virtualenv 3.12.1 final-test pyenv activate final-test # Or instead pyenv local 3.12.1 to test with no venv pip install -U "ray[train]" torch torchvision cd ~/dd/dd-trace-py/ pip install -e . ``` The last command symlinks the library installation to the repo, so that you do not need to reinstall after every code change. Then I started Ray by running ``` ray start --head --dashboard-host=127.0.0.1 --tracing-startup-hook=ddtrace.contrib.internal.ray.hook:setup_tracing ``` and ran a sample job as follows: ``` ray job submit --submission-id="yakovs.test.job-19" --metadata-json='{"job_name": "sinecure"}' -- python louis.py ``` using the attached script: [louis.py](https://github.com/user-attachments/files/22241106/louis.py) I verified that `span.service` on the resulting spans (the ones that are sent to the Datadog backend by the Datadog agent running on my laptop) [is now set to sinecure](https://dd.datad0g.com/apm/traces?query=%40component%3Aray&agg_m=count&agg_m_source=base&agg_t=count&cols=core_service%2Ccore_resource_name%2Clog_duration%2Clog_http.method%2Clog_http.status_code&fromUser=false&graphType=waterfall&historicalData=false&messageDisplay=inline&query_translation_version=v0&shouldShowLegend=true&sort=desc&spanID=1424234771809937959&spanType=all&storage=hot&timeHint=1757538408662&trace=68c1e8660000000017a5e8e301e9de654613811726793783476&traceID=68c1e8660000000017a5e8e301e9de65&traceQuery=&view=spans&start=1757538522190&end=1757539422190&paused=false) and not `yakovs.test.job-19`, so that now one and the same job can be run with multiple submission IDs without having to restart the cluster in between. I also tested the alternate way of setting the job name through the submission id as follows: ``` ray job submit --submission-id="job:frobulation_model,run:39" -- python louis.py ``` I confirmed that [this has the effect of setting the service names on the spans](https://dd.datad0g.com/apm/traces?query=%40component%3Aray&agg_m=count&agg_m_source=base&agg_t=count&cols=core_service%2Ccore_resource_name%2Clog_duration%2Clog_http.method%2Clog_http.status_code&fromUser=false&graphType=waterfall&historicalData=true&messageDisplay=inline&query_translation_version=v0&shouldShowLegend=true&sort=desc&spanID=10979538231523902534&spanType=all&storage=hot&timeHint=1757539433112&trace=AwAAAZk1g3qY-i2HKwAAABhBWmsxZzRJQkFBQnJiWGs1QkswWEhWVk4AAAAkZjE5OTM1ODMtY2MzYi00MWY3LThkYTYtODk5NDY3YjQxNWIzAAAASg&traceID=68c1ec65000000004d556ad) to `frobulation_model`. We also have some ideas for how users should be able to propagate the job name via the job metadata and/or how we can infer it based on the job's entry point. I will possibly add these other mechanisms in a future PR. ## Checklist - [x] PR author has checked that all the criteria below are met - The PR description includes an overview of the change - The PR description articulates the motivation for the change - The change includes tests OR the PR description describes a testing strategy - The PR description notes risks associated with the change, if any - Newly-added code is easy to change - The change follows the [library release note guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html) - The change includes or references documentation updates if necessary - Backport labels are set (if [applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)) ## Reviewer Checklist - [x] Reviewer has checked that all the criteria below are met - Title is accurate - All changes are related to the pull request's stated goal - Avoids breaking [API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces) changes - Testing strategy adequately addresses listed risks - Newly-added code is easy to change - Release note makes sense to a user of the library - If necessary, author has acknowledged and discussed the performance implications of this PR as reported in the benchmarks PR comment - Backport labels are set in a manner that is consistent with the [release branch maintenance policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting) --- ddtrace/contrib/internal/ray/constants.py | 7 +++ ddtrace/contrib/internal/ray/patch.py | 41 ++++++++++++----- ddtrace/contrib/internal/ray/utils.py | 32 +++++++++++++ tests/contrib/ray/test_ray.py | 3 +- tests/contrib/ray/test_ray_utils.py | 22 +++++++++ ...ts.contrib.ray.test_ray.error_in_task.json | 30 ++++++------ ...trib.ray.test_ray.test_actor_and_task.json | 46 +++++++++---------- ....ray.test_ray.test_actor_interactions.json | 30 ++++++------ ...ontrib.ray.test_ray.test_nested_tasks.json | 30 ++++++------ ...ontrib.ray.test_ray.test_simple_actor.json | 24 +++++----- ...contrib.ray.test_ray.test_simple_task.json | 30 ++++++------ ...contrib.ray.test_ray.test_simple_wait.json | 20 ++++---- 12 files changed, 197 insertions(+), 118 deletions(-) create mode 100644 tests/contrib/ray/test_ray_utils.py diff --git a/ddtrace/contrib/internal/ray/constants.py b/ddtrace/contrib/internal/ray/constants.py index db45e70236f..ea79f7b6b26 100644 --- a/ddtrace/contrib/internal/ray/constants.py +++ b/ddtrace/contrib/internal/ray/constants.py @@ -1,6 +1,10 @@ DD_TRACE_CTX = "_dd_trace_ctx" +# Environment variables RAY_SUBMISSION_ID = "_RAY_SUBMISSION_ID" +RAY_JOB_NAME = "_RAY_JOB_NAME" + +# Span tags pertaining to Ray RAY_JOB_ID = "ray.job_id" RAY_NODE_ID = "ray.node_id" RAY_PID = "ray.pid" @@ -8,3 +12,6 @@ RAY_TASK_ID = "ray.task_id" RAY_ACTOR_ID = "ray.actor_id" RAY_SUBMISSION_ID_TAG = "ray.submission_id" + +# Default job name if not set by the user +DEFAULT_JOB_NAME = "unnamed.ray.job" diff --git a/ddtrace/contrib/internal/ray/patch.py b/ddtrace/contrib/internal/ray/patch.py index 918c2dfd1d8..e78d169108c 100644 --- a/ddtrace/contrib/internal/ray/patch.py +++ b/ddtrace/contrib/internal/ray/patch.py @@ -34,6 +34,8 @@ from ddtrace.settings._config import _get_config from .constants import DD_TRACE_CTX +from .constants import DEFAULT_JOB_NAME +from .constants import RAY_JOB_NAME from .constants import RAY_SUBMISSION_ID from .constants import RAY_SUBMISSION_ID_TAG from .span_manager import long_running_ray_span @@ -45,6 +47,8 @@ from .utils import _inject_dd_trace_ctx_kwarg from .utils import _inject_ray_span_tags from .utils import extract_signature +from .utils import get_dd_job_name_from_entrypoint +from .utils import get_dd_job_name_from_submission_id from .utils import set_maybe_big_tag @@ -112,7 +116,7 @@ def _wrap_task_execution(wrapped, *args, **kwargs): with long_running_ray_span( f"{function_module}.{function_name}", - service=os.environ.get(RAY_SUBMISSION_ID), + service=os.environ.get(RAY_JOB_NAME), span_type=SpanTypes.RAY, child_of=extracted_context, activate=True, @@ -143,7 +147,7 @@ def traced_submit_task(wrapped, instance, args, kwargs): instance._function_signature = extract_signature(instance._function) with tracer.trace( - f"{instance._function_name}.remote()", service=os.environ.get(RAY_SUBMISSION_ID), span_type=SpanTypes.RAY + f"{instance._function_name}.remote()", service=os.environ.get(RAY_JOB_NAME), span_type=SpanTypes.RAY ) as span: span.set_tag_str(SPAN_KIND, SpanKind.PRODUCER) _inject_ray_span_tags(span) @@ -165,30 +169,45 @@ def traced_submit_task(wrapped, instance, args, kwargs): def traced_submit_job(wrapped, instance, args, kwargs): """Trace job submission. This function is also responsible of creating the root span. - It will also inject _RAY_SUBMISSION_ID - in the env variable as some spans will not have access to it + It will also inject _RAY_SUBMISSION_ID and _RAY_JOB_NAME + in the env variable as some spans will not have access to them trough ray_ctx """ + # Three ways of specifying the job name, in order of precedence: + # 1. Metadata JSON: ray job submit --metadata_json '{"job_name": "train.cool.model"}' train.py + # 2. Special submission ID format: ray job submit --submission_id "job:train.cool.model,run:38" train.py + # 3. Ray entrypoint: ray job submit train_cool_model.py submission_id = kwargs.get("submission_id") or generate_job_id() kwargs["submission_id"] = submission_id + entrypoint = kwargs.get("entrypoint", "") + job_name = ( + kwargs.get("metadata", {}).get("job_name", "") + or get_dd_job_name_from_submission_id(submission_id) + or get_dd_job_name_from_entrypoint(entrypoint) + ) # Root span creation - job_span = tracer.start_span("ray.job", service=submission_id, span_type=SpanTypes.RAY) + job_span = tracer.start_span("ray.job", service=job_name or DEFAULT_JOB_NAME, span_type=SpanTypes.RAY) job_span.set_tag_str("component", "ray") job_span.set_tag_str(RAY_SUBMISSION_ID_TAG, submission_id) tracer.context_provider.activate(job_span) start_long_running_job(job_span) try: - with tracer.trace("ray.job.submit", service=submission_id, span_type=SpanTypes.RAY) as submit_span: + with tracer.trace( + "ray.job.submit", service=job_name or DEFAULT_JOB_NAME, span_type=SpanTypes.RAY + ) as submit_span: submit_span.set_tag_str("component", "ray") submit_span.set_tag_str(SPAN_KIND, SpanKind.PRODUCER) + submit_span.set_tag_str("ray.submission_id", submission_id) # Inject the context of the job so that ray.job.run is its child env_vars = kwargs.setdefault("runtime_env", {}).setdefault("env_vars", {}) _TraceContext._inject(job_span.context, env_vars) env_vars[RAY_SUBMISSION_ID] = submission_id + if job_name: + env_vars[RAY_JOB_NAME] = job_name try: resp = wrapped(*args, **kwargs) @@ -221,7 +240,7 @@ def traced_actor_method_call(wrapped, instance, args, kwargs): tracer.context_provider.activate(_extract_tracing_context_from_env()) with tracer.trace( - f"{actor_name}.{method_name}.remote()", service=os.environ.get(RAY_SUBMISSION_ID), span_type=SpanTypes.RAY + f"{actor_name}.{method_name}.remote()", service=os.environ.get(RAY_JOB_NAME), span_type=SpanTypes.RAY ) as span: span.set_tag_str(SPAN_KIND, SpanKind.PRODUCER) set_maybe_big_tag(span, "ray.actor_method.args", kwargs.get("args", {})) @@ -241,7 +260,7 @@ def traced_wait(wrapped, instance, args, kwargs): with long_running_ray_span( "ray.wait", - service=os.environ.get(RAY_SUBMISSION_ID), + service=os.environ.get(RAY_JOB_NAME), span_type=SpanTypes.RAY, child_of=tracer.context_provider.active(), activate=True, @@ -269,7 +288,7 @@ async def _traced_run_method(self: Any, *args: Any, _dd_trace_ctx, **kwargs: Any with long_running_ray_span( f"{self.__class__.__name__}.{method.__name__}", - service=submission_id, + service=os.environ.get(RAY_JOB_NAME), span_type=SpanTypes.RAY, child_of=context, activate=True, @@ -304,7 +323,7 @@ def _traced_run_method(self: Any, *args: Any, _dd_trace_ctx=None, **kwargs: Any) entrypoint_name = self._entrypoint with tracer.trace( - f"exec {entrypoint_name}", service=os.environ.get(RAY_SUBMISSION_ID), span_type=SpanTypes.RAY + f"exec {entrypoint_name}", service=os.environ.get(RAY_JOB_NAME), span_type=SpanTypes.RAY ) as span: span.set_tag_str(SPAN_KIND, SpanKind.CONSUMER) _inject_ray_span_tags(span) @@ -322,7 +341,7 @@ def _trace_actor_method(self: Any, method: Callable[..., Any], dd_trace_ctx, *ar with long_running_ray_span( f"{self.__class__.__name__}.{method.__name__}", - service=os.environ.get(RAY_SUBMISSION_ID), + service=os.environ.get(RAY_JOB_NAME), span_type=SpanTypes.RAY, child_of=context, activate=True, diff --git a/ddtrace/contrib/internal/ray/utils.py b/ddtrace/contrib/internal/ray/utils.py index 39dfb22523a..95ec10fa95a 100644 --- a/ddtrace/contrib/internal/ray/utils.py +++ b/ddtrace/contrib/internal/ray/utils.py @@ -2,6 +2,7 @@ from inspect import Parameter from inspect import Signature import os +import re import sys from typing import Any from typing import Callable @@ -24,6 +25,15 @@ from .constants import RAY_WORKER_ID +# The job name regex serves to convert a submission ID in the format job:train_my_model,run:1758573287 +# to the job name train_my_model +JOB_NAME_REGEX = re.compile(r"^job\:([A-Za-z0-9_\.\-]+),run:([A-Za-z0-9_\.\-]+)$") +# The entry point regex is intended to extract the name of the Python script from a Ray entrypoint, +# for example, if the entrypoint is python3 woof.py --breed mutt +# then the job name will be woof +ENTRY_POINT_REGEX = re.compile(r"([^\s\/\\]+)\.py") + + def _inject_dd_trace_ctx_kwarg(method: Callable) -> Signature: old_sig = inspect.signature(method) if DD_TRACE_CTX in old_sig.parameters: @@ -177,3 +187,25 @@ def check_cython(x): # Check if function or method, respectively return check_cython(obj) or (hasattr(obj, "__func__") and check_cython(obj.__func__)) + + +def get_dd_job_name_from_submission_id(submission_id: str): + """ + Get the job name from the submission id. + If the submission id is set but not in a job:test,run:3 format, return the default job name. + If the submission id is not set, return None. + """ + match = JOB_NAME_REGEX.match(submission_id) + if match: + return match.group(1) + return None + + +def get_dd_job_name_from_entrypoint(entrypoint: str): + """ + Get the job name from the entrypoint. + """ + match = ENTRY_POINT_REGEX.search(entrypoint) + if match: + return match.group(1) + return None diff --git a/tests/contrib/ray/test_ray.py b/tests/contrib/ray/test_ray.py index 7fb98fa3da2..e5aa0b9e738 100644 --- a/tests/contrib/ray/test_ray.py +++ b/tests/contrib/ray/test_ray.py @@ -50,10 +50,9 @@ def submit_ray_job(script_name, timeout=120): "meta.ray.job.message", "meta.error.stack", "meta._dd.base_service", + "meta._dd.hostname", # Actor method empty arguments are encoded differently between ray versions "meta.ray.actor_method.args", - # Service names that include dynamic submission IDs - "service", # Base service sometimes gets set to a different value in CI than in the local environment, # ignore it to make the tests pass in both environments "meta._dd.base_service", diff --git a/tests/contrib/ray/test_ray_utils.py b/tests/contrib/ray/test_ray_utils.py new file mode 100644 index 00000000000..432c2ef5c1e --- /dev/null +++ b/tests/contrib/ray/test_ray_utils.py @@ -0,0 +1,22 @@ +from ddtrace.contrib.internal.ray.utils import get_dd_job_name_from_entrypoint +from ddtrace.contrib.internal.ray.utils import get_dd_job_name_from_submission_id + + +def test_get_dd_job_name_from_submission_id(): + assert ( + get_dd_job_name_from_submission_id("job:frobnitzigate_idiosyncrasies,run:38") == "frobnitzigate_idiosyncrasies" + ) + assert ( + get_dd_job_name_from_submission_id("joe.schmoe-cf32445c3b2842958956ba6b6225ad") + == "joe.schmoe-cf32445c3b2842958956ba6b6225ad" + ) + assert get_dd_job_name_from_submission_id("mortar.clustering.pipeline") == "mortar.clustering.pipeline" + assert get_dd_job_name_from_submission_id("") is None + + +def test_get_dd_job_name_from_entrypoint(): + assert get_dd_job_name_from_entrypoint("python hello.py") == "hello" + assert get_dd_job_name_from_entrypoint("python3 hello.py") == "hello" + assert get_dd_job_name_from_entrypoint("/Users/bits/.pyenv/shims/python3 woof.py") == "woof" + assert get_dd_job_name_from_entrypoint("python3 woof.py --breed mutt") == "woof" + assert get_dd_job_name_from_entrypoint("perl meow.pl") is None diff --git a/tests/snapshots/tests.contrib.ray.test_ray.error_in_task.json b/tests/snapshots/tests.contrib.ray.test_ray.error_in_task.json index f034285749d..1ef4721ad25 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.error_in_task.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.error_in_task.json @@ -1,7 +1,7 @@ [[ { "name": "ray.job", - "service": "raysubmit_p4qyzGF2UjAseg8C", + "service": "error_in_task", "resource": "ray.job", "trace_id": 0, "span_id": 1, @@ -35,7 +35,7 @@ }, { "name": "ray.job.submit", - "service": "raysubmit_p4qyzGF2UjAseg8C", + "service": "error_in_task", "resource": "ray.job.submit", "trace_id": 0, "span_id": 2, @@ -60,7 +60,7 @@ }, { "name": "JobSupervisor.run.remote()", - "service": "raysubmit_p4qyzGF2UjAseg8C", + "service": "error_in_task", "resource": "JobSupervisor.run.remote()", "trace_id": 0, "span_id": 3, @@ -90,7 +90,7 @@ }, { "name": "JobSupervisor.run", - "service": "raysubmit_p4qyzGF2UjAseg8C", + "service": "error_in_task", "resource": "JobSupervisor.run", "trace_id": 0, "span_id": 4, @@ -133,7 +133,7 @@ }, { "name": "JobSupervisor._get_driver_env_vars", - "service": "raysubmit_p4qyzGF2UjAseg8C", + "service": "error_in_task", "resource": "JobSupervisor._get_driver_env_vars", "trace_id": 0, "span_id": 5, @@ -166,7 +166,7 @@ }, { "name": "JobSupervisor._get_driver_runtime_env", - "service": "raysubmit_p4qyzGF2UjAseg8C", + "service": "error_in_task", "resource": "JobSupervisor._get_driver_runtime_env", "trace_id": 0, "span_id": 11, @@ -199,7 +199,7 @@ }, { "name": "exec error_in_task.py", - "service": "raysubmit_p4qyzGF2UjAseg8C", + "service": "error_in_task", "resource": "exec error_in_task.py", "trace_id": 0, "span_id": 6, @@ -230,7 +230,7 @@ }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_p4qyzGF2UjAseg8C", + "service": "error_in_task", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 7, @@ -271,7 +271,7 @@ }, { "name": "__main__.add_one", - "service": "raysubmit_p4qyzGF2UjAseg8C", + "service": "error_in_task", "resource": "__main__.add_one", "trace_id": 0, "span_id": 12, @@ -316,7 +316,7 @@ }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_p4qyzGF2UjAseg8C", + "service": "error_in_task", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 8, @@ -357,7 +357,7 @@ }, { "name": "__main__.add_one", - "service": "raysubmit_p4qyzGF2UjAseg8C", + "service": "error_in_task", "resource": "__main__.add_one", "trace_id": 0, "span_id": 13, @@ -402,7 +402,7 @@ }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_p4qyzGF2UjAseg8C", + "service": "error_in_task", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 9, @@ -443,7 +443,7 @@ }, { "name": "__main__.add_one", - "service": "raysubmit_p4qyzGF2UjAseg8C", + "service": "error_in_task", "resource": "__main__.add_one", "trace_id": 0, "span_id": 14, @@ -488,7 +488,7 @@ }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_p4qyzGF2UjAseg8C", + "service": "error_in_task", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 10, @@ -529,7 +529,7 @@ }, { "name": "__main__.add_one", - "service": "raysubmit_p4qyzGF2UjAseg8C", + "service": "error_in_task", "resource": "__main__.add_one", "trace_id": 0, "span_id": 15, diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_actor_and_task.json b/tests/snapshots/tests.contrib.ray.test_ray.test_actor_and_task.json index f4434a03d53..ff495368f20 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_actor_and_task.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_actor_and_task.json @@ -1,7 +1,7 @@ [[ { "name": "ray.job", - "service": "raysubmit_QtgsTNMg7sPPFJg4", + "service": "actor_and_task", "resource": "ray.job", "trace_id": 0, "span_id": 1, @@ -34,7 +34,7 @@ }, { "name": "ray.job.submit", - "service": "raysubmit_QtgsTNMg7sPPFJg4", + "service": "actor_and_task", "resource": "ray.job.submit", "trace_id": 0, "span_id": 2, @@ -59,7 +59,7 @@ }, { "name": "JobSupervisor.run.remote()", - "service": "raysubmit_QtgsTNMg7sPPFJg4", + "service": "actor_and_task", "resource": "JobSupervisor.run.remote()", "trace_id": 0, "span_id": 3, @@ -89,7 +89,7 @@ }, { "name": "JobSupervisor.run", - "service": "raysubmit_QtgsTNMg7sPPFJg4", + "service": "actor_and_task", "resource": "JobSupervisor.run", "trace_id": 0, "span_id": 4, @@ -129,7 +129,7 @@ }, { "name": "JobSupervisor._get_driver_env_vars", - "service": "raysubmit_QtgsTNMg7sPPFJg4", + "service": "actor_and_task", "resource": "JobSupervisor._get_driver_env_vars", "trace_id": 0, "span_id": 5, @@ -162,7 +162,7 @@ }, { "name": "JobSupervisor._get_driver_runtime_env", - "service": "raysubmit_QtgsTNMg7sPPFJg4", + "service": "actor_and_task", "resource": "JobSupervisor._get_driver_runtime_env", "trace_id": 0, "span_id": 8, @@ -195,7 +195,7 @@ }, { "name": "exec actor_and_task.py", - "service": "raysubmit_QtgsTNMg7sPPFJg4", + "service": "actor_and_task", "resource": "exec actor_and_task.py", "trace_id": 0, "span_id": 6, @@ -226,7 +226,7 @@ }, { "name": "ComputationManager.compute_and_store.remote()", - "service": "raysubmit_QtgsTNMg7sPPFJg4", + "service": "actor_and_task", "resource": "ComputationManager.compute_and_store.remote()", "trace_id": 0, "span_id": 7, @@ -266,7 +266,7 @@ }, { "name": "ComputationManager.compute_and_store", - "service": "raysubmit_QtgsTNMg7sPPFJg4", + "service": "actor_and_task", "resource": "ComputationManager.compute_and_store", "trace_id": 0, "span_id": 9, @@ -308,7 +308,7 @@ }, { "name": "ComputationManager.increment_count", - "service": "raysubmit_QtgsTNMg7sPPFJg4", + "service": "actor_and_task", "resource": "ComputationManager.increment_count", "trace_id": 0, "span_id": 10, @@ -341,7 +341,7 @@ }, { "name": "__main__.batch_compute.remote()", - "service": "raysubmit_QtgsTNMg7sPPFJg4", + "service": "actor_and_task", "resource": "__main__.batch_compute.remote()", "trace_id": 0, "span_id": 11, @@ -375,7 +375,7 @@ }, { "name": "__main__.batch_compute", - "service": "raysubmit_QtgsTNMg7sPPFJg4", + "service": "actor_and_task", "resource": "__main__.batch_compute", "trace_id": 0, "span_id": 17, @@ -417,7 +417,7 @@ }, { "name": "__main__.compute_value.remote()", - "service": "raysubmit_QtgsTNMg7sPPFJg4", + "service": "actor_and_task", "resource": "__main__.compute_value.remote()", "trace_id": 0, "span_id": 18, @@ -450,7 +450,7 @@ }, { "name": "__main__.compute_value", - "service": "raysubmit_QtgsTNMg7sPPFJg4", + "service": "actor_and_task", "resource": "__main__.compute_value", "trace_id": 0, "span_id": 21, @@ -492,7 +492,7 @@ }, { "name": "__main__.compute_value.remote()", - "service": "raysubmit_QtgsTNMg7sPPFJg4", + "service": "actor_and_task", "resource": "__main__.compute_value.remote()", "trace_id": 0, "span_id": 19, @@ -525,7 +525,7 @@ }, { "name": "__main__.compute_value", - "service": "raysubmit_QtgsTNMg7sPPFJg4", + "service": "actor_and_task", "resource": "__main__.compute_value", "trace_id": 0, "span_id": 22, @@ -567,7 +567,7 @@ }, { "name": "__main__.compute_value.remote()", - "service": "raysubmit_QtgsTNMg7sPPFJg4", + "service": "actor_and_task", "resource": "__main__.compute_value.remote()", "trace_id": 0, "span_id": 20, @@ -600,7 +600,7 @@ }, { "name": "__main__.compute_value", - "service": "raysubmit_QtgsTNMg7sPPFJg4", + "service": "actor_and_task", "resource": "__main__.compute_value", "trace_id": 0, "span_id": 23, @@ -642,7 +642,7 @@ }, { "name": "ComputationManager.add_result", - "service": "raysubmit_QtgsTNMg7sPPFJg4", + "service": "actor_and_task", "resource": "ComputationManager.add_result", "trace_id": 0, "span_id": 12, @@ -675,7 +675,7 @@ }, { "name": "ComputationManager.add_result", - "service": "raysubmit_QtgsTNMg7sPPFJg4", + "service": "actor_and_task", "resource": "ComputationManager.add_result", "trace_id": 0, "span_id": 13, @@ -708,7 +708,7 @@ }, { "name": "ComputationManager.add_result", - "service": "raysubmit_QtgsTNMg7sPPFJg4", + "service": "actor_and_task", "resource": "ComputationManager.add_result", "trace_id": 0, "span_id": 14, @@ -741,7 +741,7 @@ }, { "name": "ComputationManager.get_count", - "service": "raysubmit_QtgsTNMg7sPPFJg4", + "service": "actor_and_task", "resource": "ComputationManager.get_count", "trace_id": 0, "span_id": 15, @@ -774,7 +774,7 @@ }, { "name": "ComputationManager.get_results", - "service": "raysubmit_QtgsTNMg7sPPFJg4", + "service": "actor_and_task", "resource": "ComputationManager.get_results", "trace_id": 0, "span_id": 16, diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_actor_interactions.json b/tests/snapshots/tests.contrib.ray.test_ray.test_actor_interactions.json index dd8a67d8dcc..fc14ca0678d 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_actor_interactions.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_actor_interactions.json @@ -1,7 +1,7 @@ [[ { "name": "ray.job", - "service": "raysubmit_DViFN6C258zqpTa8", + "service": "actor_interactions", "resource": "ray.job", "trace_id": 0, "span_id": 1, @@ -34,7 +34,7 @@ }, { "name": "ray.job.submit", - "service": "raysubmit_DViFN6C258zqpTa8", + "service": "actor_interactions", "resource": "ray.job.submit", "trace_id": 0, "span_id": 2, @@ -59,7 +59,7 @@ }, { "name": "JobSupervisor.run.remote()", - "service": "raysubmit_DViFN6C258zqpTa8", + "service": "actor_interactions", "resource": "JobSupervisor.run.remote()", "trace_id": 0, "span_id": 3, @@ -89,7 +89,7 @@ }, { "name": "JobSupervisor.run", - "service": "raysubmit_DViFN6C258zqpTa8", + "service": "actor_interactions", "resource": "JobSupervisor.run", "trace_id": 0, "span_id": 4, @@ -129,7 +129,7 @@ }, { "name": "JobSupervisor._get_driver_env_vars", - "service": "raysubmit_DViFN6C258zqpTa8", + "service": "actor_interactions", "resource": "JobSupervisor._get_driver_env_vars", "trace_id": 0, "span_id": 5, @@ -162,7 +162,7 @@ }, { "name": "JobSupervisor._get_driver_runtime_env", - "service": "raysubmit_DViFN6C258zqpTa8", + "service": "actor_interactions", "resource": "JobSupervisor._get_driver_runtime_env", "trace_id": 0, "span_id": 10, @@ -195,7 +195,7 @@ }, { "name": "exec actor_interactions.py", - "service": "raysubmit_DViFN6C258zqpTa8", + "service": "actor_interactions", "resource": "exec actor_interactions.py", "trace_id": 0, "span_id": 6, @@ -226,7 +226,7 @@ }, { "name": "Sender.send_message.remote()", - "service": "raysubmit_DViFN6C258zqpTa8", + "service": "actor_interactions", "resource": "Sender.send_message.remote()", "trace_id": 0, "span_id": 7, @@ -266,7 +266,7 @@ }, { "name": "Sender.send_message", - "service": "raysubmit_DViFN6C258zqpTa8", + "service": "actor_interactions", "resource": "Sender.send_message", "trace_id": 0, "span_id": 11, @@ -308,7 +308,7 @@ }, { "name": "Receiver.receive_message.remote()", - "service": "raysubmit_DViFN6C258zqpTa8", + "service": "actor_interactions", "resource": "Receiver.receive_message.remote()", "trace_id": 0, "span_id": 14, @@ -341,7 +341,7 @@ }, { "name": "Receiver.receive_message", - "service": "raysubmit_DViFN6C258zqpTa8", + "service": "actor_interactions", "resource": "Receiver.receive_message", "trace_id": 0, "span_id": 15, @@ -383,7 +383,7 @@ }, { "name": "Sender.get_sent_count.remote()", - "service": "raysubmit_DViFN6C258zqpTa8", + "service": "actor_interactions", "resource": "Sender.get_sent_count.remote()", "trace_id": 0, "span_id": 8, @@ -423,7 +423,7 @@ }, { "name": "Sender.get_sent_count", - "service": "raysubmit_DViFN6C258zqpTa8", + "service": "actor_interactions", "resource": "Sender.get_sent_count", "trace_id": 0, "span_id": 12, @@ -465,7 +465,7 @@ }, { "name": "Receiver.get_messages.remote()", - "service": "raysubmit_DViFN6C258zqpTa8", + "service": "actor_interactions", "resource": "Receiver.get_messages.remote()", "trace_id": 0, "span_id": 9, @@ -505,7 +505,7 @@ }, { "name": "Receiver.get_messages", - "service": "raysubmit_DViFN6C258zqpTa8", + "service": "actor_interactions", "resource": "Receiver.get_messages", "trace_id": 0, "span_id": 13, diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_nested_tasks.json b/tests/snapshots/tests.contrib.ray.test_ray.test_nested_tasks.json index a042e881142..8eeb5e3c1cc 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_nested_tasks.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_nested_tasks.json @@ -1,7 +1,7 @@ [[ { "name": "ray.job", - "service": "raysubmit_m5LKvhywLHpUncAU", + "service": "nested_tasks", "resource": "ray.job", "trace_id": 0, "span_id": 1, @@ -34,7 +34,7 @@ }, { "name": "ray.job.submit", - "service": "raysubmit_m5LKvhywLHpUncAU", + "service": "nested_tasks", "resource": "ray.job.submit", "trace_id": 0, "span_id": 2, @@ -59,7 +59,7 @@ }, { "name": "JobSupervisor.run.remote()", - "service": "raysubmit_m5LKvhywLHpUncAU", + "service": "nested_tasks", "resource": "JobSupervisor.run.remote()", "trace_id": 0, "span_id": 3, @@ -89,7 +89,7 @@ }, { "name": "JobSupervisor.run", - "service": "raysubmit_m5LKvhywLHpUncAU", + "service": "nested_tasks", "resource": "JobSupervisor.run", "trace_id": 0, "span_id": 4, @@ -129,7 +129,7 @@ }, { "name": "JobSupervisor._get_driver_env_vars", - "service": "raysubmit_m5LKvhywLHpUncAU", + "service": "nested_tasks", "resource": "JobSupervisor._get_driver_env_vars", "trace_id": 0, "span_id": 5, @@ -162,7 +162,7 @@ }, { "name": "JobSupervisor._get_driver_runtime_env", - "service": "raysubmit_m5LKvhywLHpUncAU", + "service": "nested_tasks", "resource": "JobSupervisor._get_driver_runtime_env", "trace_id": 0, "span_id": 8, @@ -195,7 +195,7 @@ }, { "name": "exec nested_tasks.py", - "service": "raysubmit_m5LKvhywLHpUncAU", + "service": "nested_tasks", "resource": "exec nested_tasks.py", "trace_id": 0, "span_id": 6, @@ -226,7 +226,7 @@ }, { "name": "__main__.submit_addition_task.remote()", - "service": "raysubmit_m5LKvhywLHpUncAU", + "service": "nested_tasks", "resource": "__main__.submit_addition_task.remote()", "trace_id": 0, "span_id": 7, @@ -267,7 +267,7 @@ }, { "name": "__main__.submit_addition_task", - "service": "raysubmit_m5LKvhywLHpUncAU", + "service": "nested_tasks", "resource": "__main__.submit_addition_task", "trace_id": 0, "span_id": 9, @@ -309,7 +309,7 @@ }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_m5LKvhywLHpUncAU", + "service": "nested_tasks", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 10, @@ -342,7 +342,7 @@ }, { "name": "__main__.add_one", - "service": "raysubmit_m5LKvhywLHpUncAU", + "service": "nested_tasks", "resource": "__main__.add_one", "trace_id": 0, "span_id": 13, @@ -384,7 +384,7 @@ }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_m5LKvhywLHpUncAU", + "service": "nested_tasks", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 11, @@ -417,7 +417,7 @@ }, { "name": "__main__.add_one", - "service": "raysubmit_m5LKvhywLHpUncAU", + "service": "nested_tasks", "resource": "__main__.add_one", "trace_id": 0, "span_id": 14, @@ -459,7 +459,7 @@ }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_m5LKvhywLHpUncAU", + "service": "nested_tasks", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 12, @@ -492,7 +492,7 @@ }, { "name": "__main__.add_one", - "service": "raysubmit_m5LKvhywLHpUncAU", + "service": "nested_tasks", "resource": "__main__.add_one", "trace_id": 0, "span_id": 15, diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_actor.json b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_actor.json index 122f666c684..1d81e9fd33c 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_actor.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_actor.json @@ -1,7 +1,7 @@ [[ { "name": "ray.job", - "service": "raysubmit_gBAZLY4iRuFJiY4b", + "service": "simple_actor", "resource": "ray.job", "trace_id": 0, "span_id": 1, @@ -34,7 +34,7 @@ }, { "name": "ray.job.submit", - "service": "raysubmit_gBAZLY4iRuFJiY4b", + "service": "simple_actor", "resource": "ray.job.submit", "trace_id": 0, "span_id": 2, @@ -59,7 +59,7 @@ }, { "name": "JobSupervisor.run.remote()", - "service": "raysubmit_gBAZLY4iRuFJiY4b", + "service": "simple_actor", "resource": "JobSupervisor.run.remote()", "trace_id": 0, "span_id": 3, @@ -89,7 +89,7 @@ }, { "name": "JobSupervisor.run", - "service": "raysubmit_gBAZLY4iRuFJiY4b", + "service": "simple_actor", "resource": "JobSupervisor.run", "trace_id": 0, "span_id": 4, @@ -129,7 +129,7 @@ }, { "name": "JobSupervisor._get_driver_env_vars", - "service": "raysubmit_gBAZLY4iRuFJiY4b", + "service": "simple_actor", "resource": "JobSupervisor._get_driver_env_vars", "trace_id": 0, "span_id": 5, @@ -162,7 +162,7 @@ }, { "name": "JobSupervisor._get_driver_runtime_env", - "service": "raysubmit_gBAZLY4iRuFJiY4b", + "service": "simple_actor", "resource": "JobSupervisor._get_driver_runtime_env", "trace_id": 0, "span_id": 8, @@ -195,7 +195,7 @@ }, { "name": "exec simple_actor.py", - "service": "raysubmit_gBAZLY4iRuFJiY4b", + "service": "simple_actor", "resource": "exec simple_actor.py", "trace_id": 0, "span_id": 6, @@ -226,7 +226,7 @@ }, { "name": "Counter.increment_get_and_double.remote()", - "service": "raysubmit_gBAZLY4iRuFJiY4b", + "service": "simple_actor", "resource": "Counter.increment_get_and_double.remote()", "trace_id": 0, "span_id": 7, @@ -266,7 +266,7 @@ }, { "name": "Counter.increment_get_and_double", - "service": "raysubmit_gBAZLY4iRuFJiY4b", + "service": "simple_actor", "resource": "Counter.increment_get_and_double", "trace_id": 0, "span_id": 9, @@ -308,7 +308,7 @@ }, { "name": "Counter.increment_and_get", - "service": "raysubmit_gBAZLY4iRuFJiY4b", + "service": "simple_actor", "resource": "Counter.increment_and_get", "trace_id": 0, "span_id": 10, @@ -341,7 +341,7 @@ }, { "name": "Counter.increment", - "service": "raysubmit_gBAZLY4iRuFJiY4b", + "service": "simple_actor", "resource": "Counter.increment", "trace_id": 0, "span_id": 11, @@ -374,7 +374,7 @@ }, { "name": "Counter.get_value", - "service": "raysubmit_gBAZLY4iRuFJiY4b", + "service": "simple_actor", "resource": "Counter.get_value", "trace_id": 0, "span_id": 12, diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_task.json b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_task.json index 7cd60841568..7cae2c03b51 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_task.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_task.json @@ -1,7 +1,7 @@ [[ { "name": "ray.job", - "service": "raysubmit_QxnykHHjqCxNLyVB", + "service": "simple_task", "resource": "ray.job", "trace_id": 0, "span_id": 1, @@ -34,7 +34,7 @@ }, { "name": "ray.job.submit", - "service": "raysubmit_QxnykHHjqCxNLyVB", + "service": "simple_task", "resource": "ray.job.submit", "trace_id": 0, "span_id": 2, @@ -59,7 +59,7 @@ }, { "name": "JobSupervisor.run.remote()", - "service": "raysubmit_QxnykHHjqCxNLyVB", + "service": "simple_task", "resource": "JobSupervisor.run.remote()", "trace_id": 0, "span_id": 3, @@ -89,7 +89,7 @@ }, { "name": "JobSupervisor.run", - "service": "raysubmit_QxnykHHjqCxNLyVB", + "service": "simple_task", "resource": "JobSupervisor.run", "trace_id": 0, "span_id": 4, @@ -129,7 +129,7 @@ }, { "name": "JobSupervisor._get_driver_env_vars", - "service": "raysubmit_QxnykHHjqCxNLyVB", + "service": "simple_task", "resource": "JobSupervisor._get_driver_env_vars", "trace_id": 0, "span_id": 5, @@ -162,7 +162,7 @@ }, { "name": "JobSupervisor._get_driver_runtime_env", - "service": "raysubmit_QxnykHHjqCxNLyVB", + "service": "simple_task", "resource": "JobSupervisor._get_driver_runtime_env", "trace_id": 0, "span_id": 11, @@ -195,7 +195,7 @@ }, { "name": "exec simple_task.py", - "service": "raysubmit_QxnykHHjqCxNLyVB", + "service": "simple_task", "resource": "exec simple_task.py", "trace_id": 0, "span_id": 6, @@ -226,7 +226,7 @@ }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_QxnykHHjqCxNLyVB", + "service": "simple_task", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 7, @@ -267,7 +267,7 @@ }, { "name": "__main__.add_one", - "service": "raysubmit_QxnykHHjqCxNLyVB", + "service": "simple_task", "resource": "__main__.add_one", "trace_id": 0, "span_id": 12, @@ -309,7 +309,7 @@ }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_QxnykHHjqCxNLyVB", + "service": "simple_task", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 8, @@ -350,7 +350,7 @@ }, { "name": "__main__.add_one", - "service": "raysubmit_QxnykHHjqCxNLyVB", + "service": "simple_task", "resource": "__main__.add_one", "trace_id": 0, "span_id": 13, @@ -392,7 +392,7 @@ }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_QxnykHHjqCxNLyVB", + "service": "simple_task", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 9, @@ -433,7 +433,7 @@ }, { "name": "__main__.add_one", - "service": "raysubmit_QxnykHHjqCxNLyVB", + "service": "simple_task", "resource": "__main__.add_one", "trace_id": 0, "span_id": 14, @@ -475,7 +475,7 @@ }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_QxnykHHjqCxNLyVB", + "service": "simple_task", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 10, @@ -516,7 +516,7 @@ }, { "name": "__main__.add_one", - "service": "raysubmit_QxnykHHjqCxNLyVB", + "service": "simple_task", "resource": "__main__.add_one", "trace_id": 0, "span_id": 15, diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_wait.json b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_wait.json index 73f418b897e..9bd629b9874 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_wait.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_wait.json @@ -1,7 +1,7 @@ [[ { "name": "ray.job", - "service": "raysubmit_adr9j9h8CKhLtJtU", + "service": "simple_wait", "resource": "ray.job", "trace_id": 0, "span_id": 1, @@ -34,7 +34,7 @@ }, { "name": "ray.job.submit", - "service": "raysubmit_adr9j9h8CKhLtJtU", + "service": "simple_wait", "resource": "ray.job.submit", "trace_id": 0, "span_id": 2, @@ -59,7 +59,7 @@ }, { "name": "JobSupervisor.run.remote()", - "service": "raysubmit_adr9j9h8CKhLtJtU", + "service": "simple_wait", "resource": "JobSupervisor.run.remote()", "trace_id": 0, "span_id": 3, @@ -88,7 +88,7 @@ }, { "name": "JobSupervisor.run", - "service": "raysubmit_adr9j9h8CKhLtJtU", + "service": "simple_wait", "resource": "JobSupervisor.run", "trace_id": 0, "span_id": 4, @@ -127,7 +127,7 @@ }, { "name": "JobSupervisor._get_driver_env_vars", - "service": "raysubmit_adr9j9h8CKhLtJtU", + "service": "simple_wait", "resource": "JobSupervisor._get_driver_env_vars", "trace_id": 0, "span_id": 5, @@ -159,7 +159,7 @@ }, { "name": "JobSupervisor._get_driver_runtime_env", - "service": "raysubmit_adr9j9h8CKhLtJtU", + "service": "simple_wait", "resource": "JobSupervisor._get_driver_runtime_env", "trace_id": 0, "span_id": 9, @@ -191,7 +191,7 @@ }, { "name": "exec simple_wait.py", - "service": "raysubmit_adr9j9h8CKhLtJtU", + "service": "simple_wait", "resource": "exec simple_wait.py", "trace_id": 0, "span_id": 6, @@ -221,7 +221,7 @@ }, { "name": "__main__.add_one.remote()", - "service": "raysubmit_adr9j9h8CKhLtJtU", + "service": "simple_wait", "resource": "__main__.add_one.remote()", "trace_id": 0, "span_id": 7, @@ -261,7 +261,7 @@ }, { "name": "__main__.add_one", - "service": "raysubmit_adr9j9h8CKhLtJtU", + "service": "simple_wait", "resource": "__main__.add_one", "trace_id": 0, "span_id": 10, @@ -302,7 +302,7 @@ }, { "name": "ray.wait", - "service": "raysubmit_adr9j9h8CKhLtJtU", + "service": "simple_wait", "resource": "ray.wait", "trace_id": 0, "span_id": 8, From f7a1efe3f032fe629a658b9fdf85ba83715928e6 Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Mon, 22 Sep 2025 12:48:09 +0200 Subject: [PATCH 30/59] second round of addressing reviews --- ddtrace/contrib/internal/ray/__init__.py | 26 +- ddtrace/contrib/internal/ray/patch.py | 82 +--- ddtrace/contrib/internal/ray/span_manager.py | 158 ++++--- ddtrace/contrib/internal/ray/utils.py | 48 +- ddtrace/internal/dist_computing/utils.py | 10 + ddtrace/internal/writer/writer.py | 2 +- riotfile.py | 1 + tests/contrib/ray/test_long_running_span.py | 8 +- tests/contrib/ray/test_ray.py | 1 - tests/contrib/ray/test_ray_trace_filter.py | 35 -- tests/contrib/ray/test_ray_utils.py | 6 +- ...ts.contrib.ray.test_ray.error_in_task.json | 321 +++++++------ ...trib.ray.test_ray.test_actor_and_task.json | 439 +++++++++--------- ....ray.test_ray.test_actor_interactions.json | 321 +++++++------ ...ontrib.ray.test_ray.test_nested_tasks.json | 277 ++++++----- ...ontrib.ray.test_ray.test_simple_actor.json | 218 +++++---- ...contrib.ray.test_ray.test_simple_task.json | 307 ++++++------ ...contrib.ray.test_ray.test_simple_wait.json | 192 ++++---- 18 files changed, 1194 insertions(+), 1258 deletions(-) create mode 100644 ddtrace/internal/dist_computing/utils.py delete mode 100644 tests/contrib/ray/test_ray_trace_filter.py diff --git a/ddtrace/contrib/internal/ray/__init__.py b/ddtrace/contrib/internal/ray/__init__.py index e38b981c079..4988d2f7b7b 100644 --- a/ddtrace/contrib/internal/ray/__init__.py +++ b/ddtrace/contrib/internal/ray/__init__.py @@ -28,8 +28,19 @@ - ``DD_TRACE_RAY_RESUBMIT_LONG_RUNNING_INTERVAL``: Interval for resubmitting long-running spans (default: ``120.0`` seconds) -- ``DD_TRACE_RAY_REGISTER_LONG_RUNNING_THRESHOLD``: Maximum span duration before it is considered - long-runnning (default: ``10.0``seconds) + +Ray service name can be configured by: +- specifiying in submission-id using job:your-job-name during job submission + For instance: + `ray job submit --submission-id="job:my_model,run:39" -- python entrypoint.py` + +- specifying in metadata during job sumission + For instance: + `ray job submit --metadata-json='{"job_name": "my_model"}' -- python entrypoint.py` + +- specifying DD_SERVICE when initializing your ray cluster. + +By default, the service name will be the name of your entrypoint Notes ~~~~~ @@ -38,14 +49,3 @@ - The integration filters out non-Ray dashboard spans to reduce noise. - Actor methods like ``ping`` and ``_polling`` are excluded from tracing to reduce noise. """ - -import os - - -def in_ray_job(): - # type: () -> bool - """Returns whether we are in a ray environemt. - This is accomplished by checking if the _RAY_SUBMISSION_ID environment variable is defined - which means a job has been submitted and is traced - """ - return bool(os.environ.get("_RAY_SUBMISSION_ID", False)) diff --git a/ddtrace/contrib/internal/ray/patch.py b/ddtrace/contrib/internal/ray/patch.py index e78d169108c..c21197161f7 100644 --- a/ddtrace/contrib/internal/ray/patch.py +++ b/ddtrace/contrib/internal/ray/patch.py @@ -5,8 +5,6 @@ from typing import Any from typing import Callable from typing import Dict -from typing import List -from typing import Optional import ray from ray._private.inspect_util import is_class_method @@ -20,16 +18,12 @@ from ddtrace import config from ddtrace import tracer -from ddtrace._trace.span import Span -from ddtrace.constants import _DJM_ENABLED_KEY -from ddtrace.constants import _FILTER_KEPT_KEY -from ddtrace.constants import _SAMPLING_PRIORITY_KEY -from ddtrace.constants import _SPAN_MEASURED_KEY from ddtrace.constants import SPAN_KIND +from ddtrace.contrib.internal.trace_utils import unwrap as _u from ddtrace.ext import SpanKind from ddtrace.ext import SpanTypes from ddtrace.internal.schema import schematize_service_name -from ddtrace.internal.utils.wrappers import unwrap as _u +from ddtrace.internal.utils import get_argument_value from ddtrace.propagation.http import _TraceContext from ddtrace.settings._config import _get_config @@ -41,11 +35,12 @@ from .span_manager import long_running_ray_span from .span_manager import start_long_running_job from .span_manager import stop_long_running_job +from .utils import ENTRY_POINT_REGEX from .utils import _extract_tracing_context_from_env from .utils import _inject_context_in_env from .utils import _inject_context_in_kwargs from .utils import _inject_dd_trace_ctx_kwarg -from .utils import _inject_ray_span_tags +from .utils import _inject_ray_span_tags_and_metrics from .utils import extract_signature from .utils import get_dd_job_name_from_entrypoint from .utils import get_dd_job_name_from_submission_id @@ -56,8 +51,8 @@ "ray", dict( _default_service=schematize_service_name("ray"), - resubmit_interval=_get_config("DD_TRACE_RAY_RESUBMIT_LONG_RUNNING_INTERVAL", default=10.0, modifier=float), - register_treshold=_get_config("DD_TRACE_RAY_REGISTER_LONG_RUNNING_THRESHOLD", default=10.0, modifier=float), + resubmit_interval=_get_config("DD_TRACE_RAY_RESUBMIT_LONG_RUNNING_INTERVAL", default=120.0, modifier=float), + initial_submit_threshold=_get_config("_DD_TRACE_RAY_INITIAL_SUBMIT_THRESHOLD", default=10.0, modifier=float), ), ) @@ -70,26 +65,6 @@ def get_version() -> str: return str(getattr(ray, "__version__", "")) -class RayTraceProcessor: - def process_trace(self, trace: List[Span]) -> Optional[List[Span]]: - if not trace: - return trace - - filtered_spans = [] - for span in trace: - if span.service == "ray.dashboard" and span.get_tag("component") != "ray": - continue - - if span.get_tag("component") == "ray": - span.set_metric(_DJM_ENABLED_KEY, 1) - span.set_metric(_FILTER_KEPT_KEY, 1) - span.set_metric(_SPAN_MEASURED_KEY, 1) - span.set_metric(_SAMPLING_PRIORITY_KEY, 2) - - filtered_spans.append(span) - return filtered_spans - - def _wrap_remote_function_execution(function): """Inject trace context parameter into function signature""" @@ -111,11 +86,8 @@ def _wrap_task_execution(wrapped, *args, **kwargs): extracted_context = _TraceContext._extract(kwargs[DD_TRACE_CTX]) kwargs.pop(DD_TRACE_CTX) - function_name = getattr(wrapped, "__name__", "unknown_function") - function_module = getattr(wrapped, "__module__", "unknown_module") - with long_running_ray_span( - f"{function_module}.{function_name}", + f"{wrapped.__module__}.{wrapped.__qualname__}", service=os.environ.get(RAY_JOB_NAME), span_type=SpanTypes.RAY, child_of=extracted_context, @@ -150,7 +122,7 @@ def traced_submit_task(wrapped, instance, args, kwargs): f"{instance._function_name}.remote()", service=os.environ.get(RAY_JOB_NAME), span_type=SpanTypes.RAY ) as span: span.set_tag_str(SPAN_KIND, SpanKind.PRODUCER) - _inject_ray_span_tags(span) + _inject_ray_span_tags_and_metrics(span) try: set_maybe_big_tag(span, "ray.task.args", kwargs.get("args", {})) @@ -182,14 +154,15 @@ def traced_submit_job(wrapped, instance, args, kwargs): kwargs["submission_id"] = submission_id entrypoint = kwargs.get("entrypoint", "") job_name = ( - kwargs.get("metadata", {}).get("job_name", "") + os.environ.get("DD_SERVICE") + or kwargs.get("metadata", {}).get("job_name", "") or get_dd_job_name_from_submission_id(submission_id) or get_dd_job_name_from_entrypoint(entrypoint) ) # Root span creation job_span = tracer.start_span("ray.job", service=job_name or DEFAULT_JOB_NAME, span_type=SpanTypes.RAY) - job_span.set_tag_str("component", "ray") + _inject_ray_span_tags_and_metrics(job_span) job_span.set_tag_str(RAY_SUBMISSION_ID_TAG, submission_id) tracer.context_provider.activate(job_span) start_long_running_job(job_span) @@ -198,7 +171,7 @@ def traced_submit_job(wrapped, instance, args, kwargs): with tracer.trace( "ray.job.submit", service=job_name or DEFAULT_JOB_NAME, span_type=SpanTypes.RAY ) as submit_span: - submit_span.set_tag_str("component", "ray") + _inject_ray_span_tags_and_metrics(submit_span) submit_span.set_tag_str(SPAN_KIND, SpanKind.PRODUCER) submit_span.set_tag_str("ray.submission_id", submission_id) @@ -243,9 +216,9 @@ def traced_actor_method_call(wrapped, instance, args, kwargs): f"{actor_name}.{method_name}.remote()", service=os.environ.get(RAY_JOB_NAME), span_type=SpanTypes.RAY ) as span: span.set_tag_str(SPAN_KIND, SpanKind.PRODUCER) - set_maybe_big_tag(span, "ray.actor_method.args", kwargs.get("args", {})) - set_maybe_big_tag(span, "ray.actor_method.kwargs", kwargs.get("kwargs", {})) - _inject_ray_span_tags(span) + set_maybe_big_tag(span, "ray.actor_method.args", get_argument_value(args, kwargs, 0, "args")) + set_maybe_big_tag(span, "ray.actor_method.kwargs", get_argument_value(args, kwargs, 1, "kwargs")) + _inject_ray_span_tags_and_metrics(span) _inject_context_in_kwargs(span.context, kwargs) return wrapped(*args, **kwargs) @@ -266,6 +239,8 @@ def traced_wait(wrapped, instance, args, kwargs): activate=True, ) as span: span.set_tag_str(SPAN_KIND, SpanKind.PRODUCER) + _inject_ray_span_tags_and_metrics(span) + timeout = kwargs.get("timeout") num_returns = kwargs.get("num_returns") fetch_local = kwargs.get("fetch_local") @@ -275,7 +250,6 @@ def traced_wait(wrapped, instance, args, kwargs): span.set_tag_str("ray.wait.num_returns", str(num_returns)) if fetch_local is not None: span.set_tag_str("ray.wait.fetch_local", str(fetch_local)) - _inject_ray_span_tags(span) return wrapped(*args, **kwargs) @@ -309,28 +283,28 @@ async def _traced_run_method(self: Any, *args: Any, _dd_trace_ctx, **kwargs: Any def _exec_entrypoint_wrapper(method: Callable[..., Any]) -> Any: - def _traced_run_method(self: Any, *args: Any, _dd_trace_ctx=None, **kwargs: Any) -> Any: + def _traced_exec_entrypoint_method(self: Any, *args: Any, _dd_trace_ctx=None, **kwargs: Any) -> Any: from ddtrace import tracer from ddtrace.ext import SpanTypes if tracer.current_span() is None: tracer.context_provider.activate(_extract_tracing_context_from_env()) - # Without this the name of the span will contain a path which will break tests - if os.environ.get("_DD_TRACE_RAY_TESTING"): - entrypoint_name = os.path.basename(self._entrypoint) + script_name_match = ENTRY_POINT_REGEX.search(self._entrypoint) + if script_name_match: + entrypoint_name = f"{script_name_match.group(1)}.py" else: - entrypoint_name = self._entrypoint + entrypoint_name = os.path.basename(self._entrypoint) with tracer.trace( f"exec {entrypoint_name}", service=os.environ.get(RAY_JOB_NAME), span_type=SpanTypes.RAY ) as span: span.set_tag_str(SPAN_KIND, SpanKind.CONSUMER) - _inject_ray_span_tags(span) + _inject_ray_span_tags_and_metrics(span) - return method(self, *args) + return method(self, *args, **kwargs) - return _traced_run_method + return _traced_exec_entrypoint_method @contextmanager @@ -439,8 +413,6 @@ def patch(): ray._datadog_patch = True - tracer._span_aggregator.user_processors.append(RayTraceProcessor()) - _w(ray.remote_function.RemoteFunction, "_remote", traced_submit_task) _w(ray.dashboard.modules.job.job_manager.JobManager, "submit_job", traced_submit_job) @@ -457,10 +429,6 @@ def unpatch(): ray._datadog_patch = False - tracer._span_aggregator.user_processors = [ - p for p in tracer._span_aggregator.user_processors if not isinstance(p, RayTraceProcessor) - ] - _u(ray.remote_function.RemoteFunction, "_remote") _u(ray.dashboard.modules.job.job_manager.JobManager, "submit_job") diff --git a/ddtrace/contrib/internal/ray/span_manager.py b/ddtrace/contrib/internal/ray/span_manager.py index 245fbe4da2c..1744475496e 100644 --- a/ddtrace/contrib/internal/ray/span_manager.py +++ b/ddtrace/contrib/internal/ray/span_manager.py @@ -1,3 +1,4 @@ +import atexit from contextlib import contextmanager from itertools import chain import threading @@ -9,24 +10,26 @@ from ddtrace.constants import SPAN_KIND from ddtrace.ext import SpanKind -from .utils import _inject_ray_span_tags +from .utils import _inject_ray_span_tags_and_metrics @contextmanager def long_running_ray_span(span_name, service, span_type, child_of=None, activate=True): """Context manager that handles Ray span creation and long-running span lifecycle""" - span = tracer.start_span(name=span_name, service=service, span_type=span_type, child_of=child_of, activate=activate) - span.set_tag_str(SPAN_KIND, SpanKind.CONSUMER) - _inject_ray_span_tags(span) - start_long_running_span(span) + with tracer.start_span( + name=span_name, service=service, span_type=span_type, child_of=child_of, activate=activate + ) as span: + span.set_tag_str(SPAN_KIND, SpanKind.CONSUMER) + _inject_ray_span_tags_and_metrics(span) + start_long_running_span(span) - try: - yield span - except BaseException as e: - span.set_exc_info(type(e), e, e.__traceback__) - raise - finally: - stop_long_running_span(span) + try: + yield span + except BaseException as e: + span.set_exc_info(type(e), e, e.__traceback__) + raise + finally: + stop_long_running_span(span) class LongRunningJobManager: @@ -34,17 +37,50 @@ def __init__(self): self._timers = {} # {submission_id: {(trace_id, span_id): Span}} self._job_spans = {} - # {submission_id: Span} + # {submission_id: (Span)} self._root_spans = {} self._lock = threading.Lock() + self._is_shutting_down = False + + # Register cleanup on process exit + atexit.register(self.cleanup_on_exit) def _get_submission_id(self, span): submission_id = span.get_tag("ray.submission_id") return submission_id if submission_id else None + def cleanup_on_exit(self): + """Clean up all resources when the process exits.""" + with self._lock: + self._is_shutting_down = True + + for _, timer in list(self._timers.items()): + timer.cancel() + + # Check if we have any spans to flush before exiting + spans_to_close = [] + try: + for spans_dict in self._job_spans.values(): + spans_to_close.extend(list(spans_dict.values())) + except Exception: + spans_to_close = [] + + self._timers.clear() + self._job_spans.clear() + self._root_spans.clear() + + for span in spans_to_close: + self._finish_span(span) + def _emit_partial_span(self, span): + partial_version = time.time_ns() + if span.get_metric("_dd.partial_version") is None: + span.set_metric("_dd.partial_version", partial_version) + span.set_tag_str("ray.job.status", "RUNNING") + partial_span = self._recreate_job_span(span) - partial_span.set_metric("_dd.partial_version", time.time_ns()) + partial_span.set_tag_str("ray.job.status", "RUNNING") + partial_span.set_metric("_dd.partial_version", partial_version) partial_span.finish() # Sending spans which are waiting for long running spans to finish @@ -65,7 +101,6 @@ def _emit_partial_span(self, span): trace.num_finished -= len(finished_spans) spans_to_write = [partial_span] + finished_spans - try: spans = spans_to_write for tp in chain( @@ -80,11 +115,18 @@ def _emit_partial_span(self, span): spans = spans_to_write aggregator.writer.write(spans) - def _create_resubmit_timer(self, submission_id): - timer = threading.Timer(config.ray.resubmit_interval, self._resubmit_long_running_spans, args=[submission_id]) - timer.daemon = True - self._timers[submission_id] = timer - timer.start() + def _create_resubmit_timer(self, submission_id, time): + """This function should be called under a lock""" + if self._is_shutting_down: + return + + try: + timer = threading.Timer(time, self._resubmit_long_running_spans, args=[submission_id]) + timer.daemon = True + self._timers[submission_id] = timer + timer.start() + except Exception: + self._timers.pop(submission_id, None) def _recreate_job_span(self, job_span): new_span = Span( @@ -104,29 +146,24 @@ def _recreate_job_span(self, job_span): return new_span def _resubmit_long_running_spans(self, submission_id): + if self._is_shutting_down: + return + with self._lock: + self._create_resubmit_timer(submission_id, float(config.ray.resubmit_interval)) if submission_id not in self._job_spans: return - job_spans = self._job_spans[submission_id] - for span in job_spans.values(): - self._emit_partial_span(span) - - self._create_resubmit_timer(submission_id) - - def _start_long_running_span(self, span): - submission_id = self._get_submission_id(span) - if not submission_id: - return + job_spans = list(self._job_spans[submission_id].values()) - # Every spans are using the same timer - if submission_id not in self._timers: - self._create_resubmit_timer(submission_id) + for span in job_spans: + self._emit_partial_span(span) def _finish_span(self, span, job_info=None): - # was_long_running + # only if span was long running if span.get_metric("_dd.partial_version") is not None: - span.set_metric("_dd.partial_version", -1) + del span._metrics["_dd.partial_version"] + span.set_metric("_dd.was_long_running", 1) span.set_tag_str("ray.job.status", "FINISHED") @@ -141,66 +178,47 @@ def _finish_span(self, span, job_info=None): def add_span(self, span): submission_id = self._get_submission_id(span) - if not submission_id: - return with self._lock: if submission_id not in self._job_spans: self._job_spans[submission_id] = {} + # the first timer will be only 10 seconds to have a well formed trace + self._create_resubmit_timer(submission_id, float(config.ray.initial_submit_threshold)) self._job_spans[submission_id][(span.trace_id, span.span_id)] = span - def register_long_running(self, span): - submission_id = self._get_submission_id(span) - if not submission_id: - return - - with self._lock: - if submission_id in self._job_spans: - if (span.trace_id, span.span_id) in self._job_spans[submission_id]: - # Mark the original span as long-running, but keep it open to preserve context - span.set_metric("_dd.partial_version", time.time_ns()) - span.set_tag_str("ray.job.status", "RUNNING") - self._emit_partial_span(span) - self._start_long_running_span(span) - def stop_long_running_span(self, span_to_stop): submission_id = self._get_submission_id(span_to_stop) - if not submission_id: - return + span_key = (span_to_stop.trace_id, span_to_stop.span_id) with self._lock: - self._finish_span(span_to_stop) - job_spans = self._job_spans.get(submission_id, {}) - span_key = (span_to_stop.trace_id, span_to_stop.span_id) - if span_key in job_spans: - del job_spans[span_key] + job_spans.pop(span_key, None) + + self._finish_span(span_to_stop) def stop_long_running_job(self, submission_id, job_info): with self._lock: - if submission_id not in self._root_spans: - return - job_span = self._root_spans[submission_id] - if submission_id in self._timers: - self._timers.pop(submission_id).cancel() - - self._finish_span(job_span, job_info=job_info) + timer = self._timers.pop(submission_id, None) + if timer: + timer.cancel() del self._job_spans[submission_id] del self._root_spans[submission_id] + self._finish_span(job_span, job_info=job_info) + _job_manager = LongRunningJobManager() def start_long_running_job(job_span): submission_id = _job_manager._get_submission_id(job_span) - if not submission_id: - return - _job_manager._root_spans[submission_id] = job_span + with _job_manager._lock: + _job_manager._root_spans[submission_id] = job_span + start_long_running_span(job_span) @@ -211,10 +229,6 @@ def stop_long_running_job(submission_id, job_info): def start_long_running_span(span): _job_manager.add_span(span) - watch_timer = threading.Timer(config.ray.register_treshold, _job_manager.register_long_running, args=[span]) - watch_timer.daemon = True - watch_timer.start() - def stop_long_running_span(span): _job_manager.stop_long_running_span(span) diff --git a/ddtrace/contrib/internal/ray/utils.py b/ddtrace/contrib/internal/ray/utils.py index 95ec10fa95a..6fab2231f4b 100644 --- a/ddtrace/contrib/internal/ray/utils.py +++ b/ddtrace/contrib/internal/ray/utils.py @@ -12,6 +12,10 @@ from ray.runtime_context import get_runtime_context from ddtrace._trace._limits import MAX_SPAN_META_VALUE_LEN +from ddtrace.constants import _DJM_ENABLED_KEY +from ddtrace.constants import _FILTER_KEPT_KEY +from ddtrace.constants import _SAMPLING_PRIORITY_KEY +from ddtrace.constants import _SPAN_MEASURED_KEY from ddtrace.propagation.http import _TraceContext from .constants import DD_TRACE_CTX @@ -71,31 +75,37 @@ def _extract_tracing_context_from_env(): return None -def _inject_ray_span_tags(span): - runtime_context = get_runtime_context() - +def _inject_ray_span_tags_and_metrics(span): span.set_tag_str("component", "ray") - span.set_tag_str(RAY_JOB_ID, runtime_context.get_job_id()) - span.set_tag_str(RAY_NODE_ID, runtime_context.get_node_id()) - span.set_tag_str(RAY_PID, str(os.getpid())) - - worker_id = runtime_context.get_worker_id() - if worker_id is not None: - span.set_tag_str(RAY_WORKER_ID, worker_id) - - if runtime_context.worker.mode == ray._private.worker.WORKER_MODE: - task_id = runtime_context.get_task_id() - if task_id is not None: - span.set_tag_str(RAY_TASK_ID, task_id) - - actor_id = runtime_context.get_actor_id() - if actor_id is not None: - span.set_tag_str(RAY_ACTOR_ID, actor_id) + span.set_metric(_DJM_ENABLED_KEY, 1) + span.set_metric(_FILTER_KEPT_KEY, 1) + span.set_metric(_SPAN_MEASURED_KEY, 1) + span.set_metric(_SAMPLING_PRIORITY_KEY, 2) submission_id = os.environ.get(RAY_SUBMISSION_ID) if submission_id is not None: span.set_tag_str(RAY_SUBMISSION_ID_TAG, submission_id) + if ray.is_initialized(): + runtime_context = get_runtime_context() + + span.set_tag_str(RAY_JOB_ID, runtime_context.get_job_id()) + span.set_tag_str(RAY_NODE_ID, runtime_context.get_node_id()) + span.set_tag_str(RAY_PID, str(os.getpid())) + + worker_id = runtime_context.get_worker_id() + if worker_id is not None: + span.set_tag_str(RAY_WORKER_ID, worker_id) + + if runtime_context.worker.mode == ray._private.worker.WORKER_MODE: + task_id = runtime_context.get_task_id() + if task_id is not None: + span.set_tag_str(RAY_TASK_ID, task_id) + + actor_id = runtime_context.get_actor_id() + if actor_id is not None: + span.set_tag_str(RAY_ACTOR_ID, actor_id) + def set_maybe_big_tag(span, tag_name, tag_value): """We want to add args/kwargs values as tag when we execute a task/actor method. diff --git a/ddtrace/internal/dist_computing/utils.py b/ddtrace/internal/dist_computing/utils.py new file mode 100644 index 00000000000..8498456f720 --- /dev/null +++ b/ddtrace/internal/dist_computing/utils.py @@ -0,0 +1,10 @@ +import os + + +def in_ray_job(): + # type: () -> bool + """Returns whether we are in a ray environemt. + This is accomplished by checking if the _RAY_SUBMISSION_ID environment variable is defined + which means a job has been submitted and is traced + """ + return bool(os.environ.get("_RAY_SUBMISSION_ID", False)) diff --git a/ddtrace/internal/writer/writer.py b/ddtrace/internal/writer/writer.py index 4ac6d852264..9b72496738e 100644 --- a/ddtrace/internal/writer/writer.py +++ b/ddtrace/internal/writer/writer.py @@ -15,7 +15,7 @@ import ddtrace from ddtrace import config -from ddtrace.contrib.internal.ray import in_ray_job +from ddtrace.internal.dist_computing.utils import in_ray_job import ddtrace.internal.native as native from ddtrace.internal.runtime import get_runtime_id import ddtrace.internal.utils.http diff --git a/riotfile.py b/riotfile.py index b39ad8300d8..071221cd844 100644 --- a/riotfile.py +++ b/riotfile.py @@ -3008,6 +3008,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT "pytest-asyncio": latest, "ray[default]": ["~=2.46.0", latest], }, + env={"DD_TRACE_AIOHTTP_ENABLED": "false", "DD_TRACE_REPORT_HOSTNAME": "true"}, ), Venv( name="logbook", diff --git a/tests/contrib/ray/test_long_running_span.py b/tests/contrib/ray/test_long_running_span.py index abfee9945d1..e7239cd8c67 100644 --- a/tests/contrib/ray/test_long_running_span.py +++ b/tests/contrib/ray/test_long_running_span.py @@ -14,11 +14,11 @@ def setUp(self): super().setUp() # Override timing values to make tests run quickly self.original_resubmit_interval = getattr(config.ray, "resubmit_interval", 120.0) - self.original_register_treshold = getattr(config.ray, "register_treshold", 10.0) + self.original_initial_submit_threshold = getattr(config.ray, "initial_submit_threshold", 10.0) # Set fast timing for testing config.ray.resubmit_interval = 2 # 2s instead of 120s - config.ray.register_treshold = 1 # 1s instead of 10s + config.ray.initial_submit_threshold = 1 # 1s instead of 10s # Clear any existing spans from the job manager with _job_manager._lock: @@ -29,7 +29,7 @@ def setUp(self): def tearDown(self): # Restore original values config.ray.resubmit_interval = self.original_resubmit_interval - config.ray.register_treshold = self.original_register_treshold + config.ray.initial_submit_threshold = self.original_initial_submit_threshold # Clean up any remaining timers with _job_manager._lock: @@ -64,7 +64,7 @@ def test_long_running_span_basic_lifecycle(self): job_spans = _job_manager._job_spans.get(submission_id, {}) self.assertNotIn((span.trace_id, span.span_id), job_spans) - self.assertEqual(span.get_metric("_dd.partial_version"), -1) + self.assertIsNone(span.get_metric("_dd.partial_version")) self.assertEqual(span.get_metric("_dd.was_long_running"), 1) self.assertTrue(span.finished) diff --git a/tests/contrib/ray/test_ray.py b/tests/contrib/ray/test_ray.py index e5aa0b9e738..e71c40c4026 100644 --- a/tests/contrib/ray/test_ray.py +++ b/tests/contrib/ray/test_ray.py @@ -68,7 +68,6 @@ class TestRayIntegration(TracerTestCase): def setUpClass(cls): super(TestRayIntegration, cls).setUpClass() - os.environ["_DD_TRACE_RAY_TESTING"] = "true" os.environ["DD_TRACE_RAY_REGISTER_LONG_RUNNING_THRESHOLD"] = "30" try: diff --git a/tests/contrib/ray/test_ray_trace_filter.py b/tests/contrib/ray/test_ray_trace_filter.py deleted file mode 100644 index f9ff3a9a054..00000000000 --- a/tests/contrib/ray/test_ray_trace_filter.py +++ /dev/null @@ -1,35 +0,0 @@ -from ddtrace._trace.span import Span -from ddtrace.constants import _DJM_ENABLED_KEY -from ddtrace.constants import _FILTER_KEPT_KEY -from ddtrace.constants import _SAMPLING_PRIORITY_KEY -from ddtrace.constants import _SPAN_MEASURED_KEY -from ddtrace.contrib.internal.ray.patch import RayTraceProcessor - - -def test_trace_filter_detects_ray_spans(): - span = Span("span0") - span.set_tag("component", "ray") - trace = [span] - ray_trace_processor = RayTraceProcessor() - filtered_trace = ray_trace_processor.process_trace(trace) - - assert filtered_trace is not None - assert len(filtered_trace) == 1 - assert filtered_trace[0].get_metric(_DJM_ENABLED_KEY) == 1 - assert filtered_trace[0].get_metric(_FILTER_KEPT_KEY) == 1 - assert filtered_trace[0].get_metric(_SPAN_MEASURED_KEY) == 1 - assert filtered_trace[0].get_metric(_SAMPLING_PRIORITY_KEY) == 2 - - -def test_trace_filter_skips_non_ray_spans(): - span = Span("span0") - trace = [span] - ray_trace_filter = RayTraceProcessor() - filtered_trace = ray_trace_filter.process_trace(trace) - - assert filtered_trace is not None - assert len(filtered_trace) == 1 - assert filtered_trace[0].get_metric(_DJM_ENABLED_KEY) is None - assert filtered_trace[0].get_metric(_FILTER_KEPT_KEY) is None - assert filtered_trace[0].get_metric(_SPAN_MEASURED_KEY) is None - assert filtered_trace[0].get_metric(_SAMPLING_PRIORITY_KEY) is None diff --git a/tests/contrib/ray/test_ray_utils.py b/tests/contrib/ray/test_ray_utils.py index 432c2ef5c1e..1dc2c30de88 100644 --- a/tests/contrib/ray/test_ray_utils.py +++ b/tests/contrib/ray/test_ray_utils.py @@ -6,11 +6,7 @@ def test_get_dd_job_name_from_submission_id(): assert ( get_dd_job_name_from_submission_id("job:frobnitzigate_idiosyncrasies,run:38") == "frobnitzigate_idiosyncrasies" ) - assert ( - get_dd_job_name_from_submission_id("joe.schmoe-cf32445c3b2842958956ba6b6225ad") - == "joe.schmoe-cf32445c3b2842958956ba6b6225ad" - ) - assert get_dd_job_name_from_submission_id("mortar.clustering.pipeline") == "mortar.clustering.pipeline" + assert get_dd_job_name_from_submission_id("joe.schmoe-cf32445c3b2842958956ba6b6225ad") is None assert get_dd_job_name_from_submission_id("") is None diff --git a/tests/snapshots/tests.contrib.ray.test_ray.error_in_task.json b/tests/snapshots/tests.contrib.ray.test_ray.error_in_task.json index 1ef4721ad25..050c8dd6323 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.error_in_task.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.error_in_task.json @@ -12,14 +12,18 @@ "_dd.base_service": "ray.dashboard", "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68ca810200000000", + "_dd.p.tid": "68d25d3800000000", "component": "ray", - "error.message": "Job entrypoint command failed with exit code 1, last available logs (truncated to 20,000 chars):\n File \"/home/bits/project/.riot/venv_py3135_mock_pytest_pytest-mock_coverage_pytest-cov_opentracing_hypothesis6451_pytest-asyncio_ray[default]/lib/python3.13/site-packages/ray/_private/worker.py\", line 968, in get_objects\n raise value.as_instanceof_cause()\nray.exceptions.RayTaskError(ValueError): \u001b[36mray::add_one()\u001b[39m (pid=2230, ip=192.168.65.3)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 98, in wrapped_function\n return _wrap_task_execution(function, *args, **kwargs)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 128, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", + "error.message": "Job entrypoint command failed with exit code 1, last available logs (truncated to 20,000 chars):\n raise value.as_instanceof_cause()\nray.exceptions.RayTaskError(ValueError): \u001b[36mray::add_one()\u001b[39m (pid=2216, ip=192.168.65.3)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 72, in wrapped_function\n return _wrap_task_execution(function, *args, **kwargs)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 99, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n\u001b[36m(pid=2214)\u001b[0m 2025-09-23 08:41:31,417 WARNING [ddtrace.contrib.ray] [ray.py:19] [dd.service=ray._private.workers dd.env= dd.version= dd.trace_id=0 dd.span_id=0] - Deactivating OpenTelemetry tracing in favor of Datadog tracing as both are not compatible.\u001b[32m [repeated 3x across cluster] (Ray deduplicates logs by default. Set RAY_DEDUP_LOGS=0 to disable log deduplication, or see https://docs.ray.io/en/master/ray-observability/user-guides/configure-logging.html#log-deduplication for more options.)\u001b[0m\n", "language": "python", - "ray.job.message": "Job entrypoint command failed with exit code 1, last available logs (truncated to 20,000 chars):\n File \"/home/bits/project/.riot/venv_py3135_mock_pytest_pytest-mock_coverage_pytest-cov_opentracing_hypothesis6451_pytest-asyncio_ray[default]/lib/python3.13/site-packages/ray/_private/worker.py\", line 968, in get_objects\n raise value.as_instanceof_cause()\nray.exceptions.RayTaskError(ValueError): \u001b[36mray::add_one()\u001b[39m (pid=2230, ip=192.168.65.3)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 98, in wrapped_function\n return _wrap_task_execution(function, *args, **kwargs)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 128, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", + "ray.job.message": "Job entrypoint command failed with exit code 1, last available logs (truncated to 20,000 chars):\n raise value.as_instanceof_cause()\nray.exceptions.RayTaskError(ValueError): \u001b[36mray::add_one()\u001b[39m (pid=2216, ip=192.168.65.3)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 72, in wrapped_function\n return _wrap_task_execution(function, *args, **kwargs)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 99, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n\u001b[36m(pid=2214)\u001b[0m 2025-09-23 08:41:31,417 WARNING [ddtrace.contrib.ray] [ray.py:19] [dd.service=ray._private.workers dd.env= dd.version= dd.trace_id=0 dd.span_id=0] - Deactivating OpenTelemetry tracing in favor of Datadog tracing as both are not compatible.\u001b[32m [repeated 3x across cluster] (Ray deduplicates logs by default. Set RAY_DEDUP_LOGS=0 to disable log deduplication, or see https://docs.ray.io/en/master/ray-observability/user-guides/configure-logging.html#log-deduplication for more options.)\u001b[0m\n", "ray.job.status": "FAILED", - "ray.submission_id": "raysubmit_p4qyzGF2UjAseg8C", - "runtime-id": "6cec296b9ec54202916b51bc4ab5e15c" + "ray.job_id": "01000000", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1045", + "ray.submission_id": "raysubmit_WzEjRd5Y5fihD5cg", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "11b30a8c1d714183b0fea7bbd9410a29" }, "metrics": { "_dd.djm.enabled": 1, @@ -28,10 +32,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1047 + "process_id": 1045 }, - "duration": 6890081920, - "start": 1758101762243241961 + "duration": 5830202044, + "start": 1758616888198178626 }, { "name": "ray.job.submit", @@ -44,9 +48,13 @@ "error": 0, "meta": { "_dd.base_service": "ray.dashboard", - "_dd.hostname": "docker-desktop", "component": "ray", "ray.job.submit_status": "success", + "ray.job_id": "01000000", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1045", + "ray.submission_id": "raysubmit_WzEjRd5Y5fihD5cg", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "producer" }, "metrics": { @@ -55,8 +63,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 33292, - "start": 1758101762243401169 + "duration": 58125, + "start": 1758616888198378876 }, { "name": "JobSupervisor.run.remote()", @@ -69,13 +77,12 @@ "error": 0, "meta": { "_dd.base_service": "ray.dashboard", - "_dd.hostname": "docker-desktop", "component": "ray", "ray.actor_method.args": "[]", "ray.actor_method.kwargs": "{'_start_signal_actor': None, 'resources_specified': False}", "ray.job_id": "01000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "1047", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1045", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "producer" }, @@ -85,8 +92,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 305291, - "start": 1758101762246970503 + "duration": 325333, + "start": 1758616888201782293 }, { "name": "JobSupervisor.run", @@ -99,25 +106,24 @@ "error": 1, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca810200000000", - "_dd.parent_id": "338fc2f6e8490cbd", + "_dd.p.tid": "68d25d3800000000", + "_dd.parent_id": "fd334ee406d185dc", "component": "ray", "error.message": "", - "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 24, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 280, in _traced_run_method\n raise e\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 273, in _traced_run_method\n await method(self, *args, **kwargs)\n File \"/home/bits/project/.riot/venv_py3135_mock_pytest_pytest-mock_coverage_pytest-cov_opentracing_hypothesis6451_pytest-asyncio_ray[default]/lib/python3.13/site-packages/ray/dashboard/modules/job/job_supervisor.py\", line 472, in run\n ray.actor.exit_actor()\n ~~~~~~~~~~~~~~~~~~~~^^\n File \"/home/bits/project/.riot/venv_py3135_mock_pytest_pytest-mock_coverage_pytest-cov_opentracing_hypothesis6451_pytest-asyncio_ray[default]/lib/python3.13/site-packages/ray/actor.py\", line 2387, in exit_actor\n raise AsyncioActorExit()\nray.exceptions.AsyncioActorExit\n", + "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 27, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 278, in _traced_run_method\n raise e\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 271, in _traced_run_method\n await method(self, *args, **kwargs)\n File \"/home/bits/project/.riot/venv_py3135_mock_pytest_pytest-mock_coverage_pytest-cov_opentracing_hypothesis6451_pytest-asyncio_ray[default]/lib/python3.13/site-packages/ray/dashboard/modules/job/job_supervisor.py\", line 472, in run\n ray.actor.exit_actor()\n ~~~~~~~~~~~~~~~~~~~~^^\n File \"/home/bits/project/.riot/venv_py3135_mock_pytest_pytest-mock_coverage_pytest-cov_opentracing_hypothesis6451_pytest-asyncio_ray[default]/lib/python3.13/site-packages/ray/actor.py\", line 2387, in exit_actor\n raise AsyncioActorExit()\nray.exceptions.AsyncioActorExit\n", "error.type": "ray.exceptions.AsyncioActorExit", "language": "python", - "ray.actor_id": "4f582dd54b2540c3ead02aeb01000000", + "ray.actor_id": "c17b20a6f84fda58a3ec32fc01000000", "ray.job_id": "01000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2129", - "ray.submission_id": "raysubmit_p4qyzGF2UjAseg8C", - "ray.task_id": "71b133a11e1c461c4f582dd54b2540c3ead02aeb01000000", - "ray.worker_id": "c6203c4de04bad390427905e4ab6126b9796240e7e6798d4b5023328", - "runtime-id": "28282dde5c504a99b4d9494026e78afe", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2117", + "ray.submission_id": "raysubmit_WzEjRd5Y5fihD5cg", + "ray.task_id": "71b133a11e1c461cc17b20a6f84fda58a3ec32fc01000000", + "ray.worker_id": "95a0f303023beb205352ad11ad8293be5a5ff35be0a3baab7dd7abc3", + "runtime-id": "eb1825d368b0403ab11e42af2d19f535", "span.kind": "consumer", - "traceparent": "00-68ca810200000000f72ecf263f3772c4-338fc2f6e8490cbd-00", - "tracestate": "dd=p:338fc2f6e8490cbd" + "traceparent": "00-68d25d3800000000c383f64df2ec0a0a-fd334ee406d185dc-00", + "tracestate": "dd=p:fd334ee406d185dc" }, "metrics": { "_dd.djm.enabled": 1, @@ -126,10 +132,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2129 + "process_id": 2117 }, - "duration": 5764122836, - "start": 1758101763093580003 + "duration": 4351127127, + "start": 1758616888999397418 }, { "name": "JobSupervisor._get_driver_env_vars", @@ -142,17 +148,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "4f582dd54b2540c3ead02aeb01000000", + "ray.actor_id": "c17b20a6f84fda58a3ec32fc01000000", "ray.actor_method.args": "(False,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2129", - "ray.submission_id": "raysubmit_p4qyzGF2UjAseg8C", - "ray.task_id": "71b133a11e1c461c4f582dd54b2540c3ead02aeb01000000", - "ray.worker_id": "c6203c4de04bad390427905e4ab6126b9796240e7e6798d4b5023328", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2117", + "ray.submission_id": "raysubmit_WzEjRd5Y5fihD5cg", + "ray.task_id": "71b133a11e1c461cc17b20a6f84fda58a3ec32fc01000000", + "ray.worker_id": "95a0f303023beb205352ad11ad8293be5a5ff35be0a3baab7dd7abc3", "span.kind": "consumer" }, "metrics": { @@ -161,8 +166,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 1602000, - "start": 1758101763095024420 + "duration": 1396125, + "start": 1758616889000761376 }, { "name": "JobSupervisor._get_driver_runtime_env", @@ -175,17 +180,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "4f582dd54b2540c3ead02aeb01000000", + "ray.actor_id": "c17b20a6f84fda58a3ec32fc01000000", "ray.actor_method.args": "(False,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2129", - "ray.submission_id": "raysubmit_p4qyzGF2UjAseg8C", - "ray.task_id": "71b133a11e1c461c4f582dd54b2540c3ead02aeb01000000", - "ray.worker_id": "c6203c4de04bad390427905e4ab6126b9796240e7e6798d4b5023328", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2117", + "ray.submission_id": "raysubmit_WzEjRd5Y5fihD5cg", + "ray.task_id": "71b133a11e1c461cc17b20a6f84fda58a3ec32fc01000000", + "ray.worker_id": "95a0f303023beb205352ad11ad8293be5a5ff35be0a3baab7dd7abc3", "span.kind": "consumer" }, "metrics": { @@ -194,8 +198,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 157250, - "start": 1758101763096440128 + "duration": 44000, + "start": 1758616889002091918 }, { "name": "exec error_in_task.py", @@ -208,15 +212,14 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "4f582dd54b2540c3ead02aeb01000000", + "ray.actor_id": "c17b20a6f84fda58a3ec32fc01000000", "ray.job_id": "01000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2129", - "ray.submission_id": "raysubmit_p4qyzGF2UjAseg8C", - "ray.task_id": "71b133a11e1c461c4f582dd54b2540c3ead02aeb01000000", - "ray.worker_id": "c6203c4de04bad390427905e4ab6126b9796240e7e6798d4b5023328", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2117", + "ray.submission_id": "raysubmit_WzEjRd5Y5fihD5cg", + "ray.task_id": "71b133a11e1c461cc17b20a6f84fda58a3ec32fc01000000", + "ray.worker_id": "95a0f303023beb205352ad11ad8293be5a5ff35be0a3baab7dd7abc3", "span.kind": "consumer" }, "metrics": { @@ -225,8 +228,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 447042, - "start": 1758101763096784878 + "duration": 412667, + "start": 1758616889002286668 }, { "name": "__main__.add_one.remote()", @@ -239,23 +242,22 @@ "error": 0, "meta": { "_dd.base_service": "project", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca810200000000", - "_dd.parent_id": "600a65d12323e96a", + "_dd.p.tid": "68d25d3800000000", + "_dd.parent_id": "de1cfb385417ddf2", "component": "ray", "language": "python", "ray.job_id": "04000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2182", - "ray.submission_id": "raysubmit_p4qyzGF2UjAseg8C", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2167", + "ray.submission_id": "raysubmit_WzEjRd5Y5fihD5cg", "ray.task.args": "(0,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.worker_id": "04000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "d52659917d584cf39596aed7890d981c", + "runtime-id": "0c5ee90f2a9c4edc8d64aa9d96b698f8", "span.kind": "producer", - "traceparent": "00-68ca810200000000f72ecf263f3772c4-600a65d12323e96a-00", - "tracestate": "dd=p:600a65d12323e96a;s:0" + "traceparent": "00-68d25d3800000000c383f64df2ec0a0a-de1cfb385417ddf2-00", + "tracestate": "dd=p:de1cfb385417ddf2;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -264,10 +266,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2182 + "process_id": 2167 }, - "duration": 3168167, - "start": 1758101763687217378 + "duration": 3078916, + "start": 1758616889576958002 }, { "name": "__main__.add_one", @@ -280,27 +282,26 @@ "error": 1, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca810200000000", - "_dd.parent_id": "7f6cb90c2c8ffa23", + "_dd.p.tid": "68d25d3800000000", + "_dd.parent_id": "d3757f5c621cfd13", "component": "ray", "error.message": "foo", - "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 24, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 128, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", + "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 27, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 99, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", "error.type": "builtins.ValueError", "language": "python", "ray.job_id": "04000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2230", - "ray.submission_id": "raysubmit_p4qyzGF2UjAseg8C", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2216", + "ray.submission_id": "raysubmit_WzEjRd5Y5fihD5cg", "ray.task.args": "(0,)", "ray.task.kwargs": "{}", "ray.task.status": "error", "ray.task_id": "ca80f3a8e8ba2e50ffffffffffffffffffffffff04000000", - "ray.worker_id": "4782a548f0a4f9fbb7182a3116f7d481735b6d0a783ca816d46adf24", - "runtime-id": "4b124518e8ef4ed4bf34fcfc40a87642", + "ray.worker_id": "1ec53017c11e7e340ebeab025800d33f253b51523a636a6be79f6569", + "runtime-id": "a2895761336944d4bad192587fef0fcf", "span.kind": "consumer", - "traceparent": "00-68ca810200000000f72ecf263f3772c4-7f6cb90c2c8ffa23-00", - "tracestate": "dd=p:7f6cb90c2c8ffa23;s:0" + "traceparent": "00-68d25d3800000000c383f64df2ec0a0a-d3757f5c621cfd13-00", + "tracestate": "dd=p:d3757f5c621cfd13;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -309,10 +310,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2230 + "process_id": 2216 }, - "duration": 2611209, - "start": 1758101765610376629 + "duration": 4341166, + "start": 1758616891355338211 }, { "name": "__main__.add_one.remote()", @@ -325,23 +326,22 @@ "error": 0, "meta": { "_dd.base_service": "project", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca810200000000", - "_dd.parent_id": "600a65d12323e96a", + "_dd.p.tid": "68d25d3800000000", + "_dd.parent_id": "de1cfb385417ddf2", "component": "ray", "language": "python", "ray.job_id": "04000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2182", - "ray.submission_id": "raysubmit_p4qyzGF2UjAseg8C", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2167", + "ray.submission_id": "raysubmit_WzEjRd5Y5fihD5cg", "ray.task.args": "(1,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.worker_id": "04000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "d52659917d584cf39596aed7890d981c", + "runtime-id": "0c5ee90f2a9c4edc8d64aa9d96b698f8", "span.kind": "producer", - "traceparent": "00-68ca810200000000f72ecf263f3772c4-600a65d12323e96a-00", - "tracestate": "dd=p:600a65d12323e96a;s:0" + "traceparent": "00-68d25d3800000000c383f64df2ec0a0a-de1cfb385417ddf2-00", + "tracestate": "dd=p:de1cfb385417ddf2;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -350,10 +350,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2182 + "process_id": 2167 }, - "duration": 235958, - "start": 1758101763692579420 + "duration": 200208, + "start": 1758616889582462127 }, { "name": "__main__.add_one", @@ -366,27 +366,26 @@ "error": 1, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca810200000000", - "_dd.parent_id": "0a3ebb4252291aef", + "_dd.p.tid": "68d25d3800000000", + "_dd.parent_id": "2b1f8b1e098d4629", "component": "ray", "error.message": "foo", - "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 24, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 128, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", + "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 27, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 99, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", "error.type": "builtins.ValueError", "language": "python", "ray.job_id": "04000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2228", - "ray.submission_id": "raysubmit_p4qyzGF2UjAseg8C", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2215", + "ray.submission_id": "raysubmit_WzEjRd5Y5fihD5cg", "ray.task.args": "(1,)", "ray.task.kwargs": "{}", "ray.task.status": "error", "ray.task_id": "d8c1ad1586102897ffffffffffffffffffffffff04000000", - "ray.worker_id": "14b50e1bf78424ce9f8a060619e42c35ac48dfee6e20d9ba7ec672a2", - "runtime-id": "e700c71e63c4406bbe5a1bce5c0cca56", + "ray.worker_id": "0d7f37927134d1cc57e6ad71c33478b5d6af8b74d722c622512d2e37", + "runtime-id": "be42bf3885894b5396a0a62bcc8f346e", "span.kind": "consumer", - "traceparent": "00-68ca810200000000f72ecf263f3772c4-0a3ebb4252291aef-00", - "tracestate": "dd=p:0a3ebb4252291aef;s:0" + "traceparent": "00-68d25d3800000000c383f64df2ec0a0a-2b1f8b1e098d4629-00", + "tracestate": "dd=p:2b1f8b1e098d4629;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -395,10 +394,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2228 + "process_id": 2215 }, - "duration": 3366583, - "start": 1758101765635094796 + "duration": 2692666, + "start": 1758616891367640836 }, { "name": "__main__.add_one.remote()", @@ -411,23 +410,22 @@ "error": 0, "meta": { "_dd.base_service": "project", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca810200000000", - "_dd.parent_id": "600a65d12323e96a", + "_dd.p.tid": "68d25d3800000000", + "_dd.parent_id": "de1cfb385417ddf2", "component": "ray", "language": "python", "ray.job_id": "04000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2182", - "ray.submission_id": "raysubmit_p4qyzGF2UjAseg8C", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2167", + "ray.submission_id": "raysubmit_WzEjRd5Y5fihD5cg", "ray.task.args": "(2,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.worker_id": "04000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "d52659917d584cf39596aed7890d981c", + "runtime-id": "0c5ee90f2a9c4edc8d64aa9d96b698f8", "span.kind": "producer", - "traceparent": "00-68ca810200000000f72ecf263f3772c4-600a65d12323e96a-00", - "tracestate": "dd=p:600a65d12323e96a;s:0" + "traceparent": "00-68d25d3800000000c383f64df2ec0a0a-de1cfb385417ddf2-00", + "tracestate": "dd=p:de1cfb385417ddf2;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -436,10 +434,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2182 + "process_id": 2167 }, - "duration": 184708, - "start": 1758101763694833837 + "duration": 205000, + "start": 1758616889584552377 }, { "name": "__main__.add_one", @@ -452,27 +450,26 @@ "error": 1, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca810200000000", - "_dd.parent_id": "6689321ea6482242", + "_dd.p.tid": "68d25d3800000000", + "_dd.parent_id": "30e1689d00ba0109", "component": "ray", "error.message": "foo", - "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 24, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 128, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", + "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 27, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 99, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", "error.type": "builtins.ValueError", "language": "python", "ray.job_id": "04000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2231", - "ray.submission_id": "raysubmit_p4qyzGF2UjAseg8C", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2214", + "ray.submission_id": "raysubmit_WzEjRd5Y5fihD5cg", "ray.task.args": "(2,)", "ray.task.kwargs": "{}", "ray.task.status": "error", "ray.task_id": "5da13aa9e2150759ffffffffffffffffffffffff04000000", - "ray.worker_id": "08949b27735a13ccd92863c537888d7a7e78017efb171a388239f972", - "runtime-id": "4aea6dfb6c7f478c832b5f7966921f47", + "ray.worker_id": "fc9ed8aa718ce5abc6eb375a9ea953af54b5f8be6d61e5dbbead65df", + "runtime-id": "5e11504350e6467d967db89cb45210fc", "span.kind": "consumer", - "traceparent": "00-68ca810200000000f72ecf263f3772c4-6689321ea6482242-00", - "tracestate": "dd=p:6689321ea6482242;s:0" + "traceparent": "00-68d25d3800000000c383f64df2ec0a0a-30e1689d00ba0109-00", + "tracestate": "dd=p:30e1689d00ba0109;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -481,10 +478,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2231 + "process_id": 2214 }, - "duration": 3489709, - "start": 1758101765633770004 + "duration": 2382125, + "start": 1758616891421098586 }, { "name": "__main__.add_one.remote()", @@ -497,23 +494,22 @@ "error": 0, "meta": { "_dd.base_service": "project", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca810200000000", - "_dd.parent_id": "600a65d12323e96a", + "_dd.p.tid": "68d25d3800000000", + "_dd.parent_id": "de1cfb385417ddf2", "component": "ray", "language": "python", "ray.job_id": "04000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2182", - "ray.submission_id": "raysubmit_p4qyzGF2UjAseg8C", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2167", + "ray.submission_id": "raysubmit_WzEjRd5Y5fihD5cg", "ray.task.args": "(3,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.worker_id": "04000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "d52659917d584cf39596aed7890d981c", + "runtime-id": "0c5ee90f2a9c4edc8d64aa9d96b698f8", "span.kind": "producer", - "traceparent": "00-68ca810200000000f72ecf263f3772c4-600a65d12323e96a-00", - "tracestate": "dd=p:600a65d12323e96a;s:0" + "traceparent": "00-68d25d3800000000c383f64df2ec0a0a-de1cfb385417ddf2-00", + "tracestate": "dd=p:de1cfb385417ddf2;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -522,10 +518,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2182 + "process_id": 2167 }, - "duration": 238750, - "start": 1758101763696649378 + "duration": 1176625, + "start": 1758616889586701043 }, { "name": "__main__.add_one", @@ -538,27 +534,26 @@ "error": 1, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca810200000000", - "_dd.parent_id": "22d7cac664932f1a", + "_dd.p.tid": "68d25d3800000000", + "_dd.parent_id": "f2f63692e6c3d03f", "component": "ray", "error.message": "foo", - "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 24, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 128, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", + "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 27, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 99, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", "error.type": "builtins.ValueError", "language": "python", "ray.job_id": "04000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2229", - "ray.submission_id": "raysubmit_p4qyzGF2UjAseg8C", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2213", + "ray.submission_id": "raysubmit_WzEjRd5Y5fihD5cg", "ray.task.args": "(3,)", "ray.task.kwargs": "{}", "ray.task.status": "error", "ray.task_id": "011ae9488efe4e25ffffffffffffffffffffffff04000000", - "ray.worker_id": "1f953cf06721e7bbb34429df1a06ce03818fb0120f80c828893c1db9", - "runtime-id": "a76469ce81144325aba73b9c85c580c6", + "ray.worker_id": "f3690eefe56ee4dad29d7bded81c917156500c9deee1bb7c0814baf9", + "runtime-id": "b1a75c80db004e74b7c0cb4f7809fa50", "span.kind": "consumer", - "traceparent": "00-68ca810200000000f72ecf263f3772c4-22d7cac664932f1a-00", - "tracestate": "dd=p:22d7cac664932f1a;s:0" + "traceparent": "00-68d25d3800000000c383f64df2ec0a0a-f2f63692e6c3d03f-00", + "tracestate": "dd=p:f2f63692e6c3d03f;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -567,8 +562,8 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2229 + "process_id": 2213 }, - "duration": 3064042, - "start": 1758101765648753879 + "duration": 3925500, + "start": 1758616891395474502 }]] diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_actor_and_task.json b/tests/snapshots/tests.contrib.ray.test_ray.test_actor_and_task.json index ff495368f20..7b02b86949f 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_actor_and_task.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_actor_and_task.json @@ -12,13 +12,17 @@ "_dd.base_service": "ray.dashboard", "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68ca80f200000000", + "_dd.p.tid": "68d25d2600000000", "component": "ray", "language": "python", "ray.job.message": "Job finished successfully.", "ray.job.status": "SUCCEEDED", - "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", - "runtime-id": "6cec296b9ec54202916b51bc4ab5e15c" + "ray.job_id": "01000000", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1045", + "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "11b30a8c1d714183b0fea7bbd9410a29" }, "metrics": { "_dd.djm.enabled": 1, @@ -27,10 +31,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1047 + "process_id": 1045 }, - "duration": 6091223127, - "start": 1758101746012804218 + "duration": 6045313628, + "start": 1758616870016830715 }, { "name": "ray.job.submit", @@ -43,9 +47,13 @@ "error": 0, "meta": { "_dd.base_service": "ray.dashboard", - "_dd.hostname": "docker-desktop", "component": "ray", "ray.job.submit_status": "success", + "ray.job_id": "01000000", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1045", + "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "producer" }, "metrics": { @@ -54,8 +62,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 82583, - "start": 1758101746013020343 + "duration": 59750, + "start": 1758616870017036465 }, { "name": "JobSupervisor.run.remote()", @@ -68,13 +76,12 @@ "error": 0, "meta": { "_dd.base_service": "ray.dashboard", - "_dd.hostname": "docker-desktop", "component": "ray", "ray.actor_method.args": "[]", "ray.actor_method.kwargs": "{'_start_signal_actor': None, 'resources_specified': False}", "ray.job_id": "01000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "1047", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1045", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "producer" }, @@ -84,8 +91,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 378125, - "start": 1758101746044179259 + "duration": 294375, + "start": 1758616870064965965 }, { "name": "JobSupervisor.run", @@ -98,22 +105,21 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca80f200000000", - "_dd.parent_id": "4e7e1b6c6d49af43", + "_dd.p.tid": "68d25d2600000000", + "_dd.parent_id": "fbf05e994224bd49", "component": "ray", "language": "python", - "ray.actor_id": "185ea73025776ab98a860a4901000000", + "ray.actor_id": "9b0034a6d26c0dca667bcd5b01000000", "ray.job_id": "01000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "1505", - "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", - "ray.task_id": "16310a0f0a45af5c185ea73025776ab98a860a4901000000", - "ray.worker_id": "69aaaafe4969dd1bd941920573a27be1112cd467fb2b4c34398594e8", - "runtime-id": "100f8ef0b2f04092bdaeb66186385aa8", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1503", + "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", + "ray.task_id": "16310a0f0a45af5c9b0034a6d26c0dca667bcd5b01000000", + "ray.worker_id": "465c53eda91915417adf04ce9589e33dbe1127935755a3a0afd375bb", + "runtime-id": "a313737c70164843bc9bde57e018d6d1", "span.kind": "consumer", - "traceparent": "00-68ca80f200000000d5e0f7439c961116-4e7e1b6c6d49af43-00", - "tracestate": "dd=p:4e7e1b6c6d49af43" + "traceparent": "00-68d25d26000000000183b1c728d696b1-fbf05e994224bd49-00", + "tracestate": "dd=p:fbf05e994224bd49" }, "metrics": { "_dd.djm.enabled": 1, @@ -122,10 +128,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1505 + "process_id": 1503 }, - "duration": 4348434419, - "start": 1758101747085556593 + "duration": 4555104003, + "start": 1758616871031170590 }, { "name": "JobSupervisor._get_driver_env_vars", @@ -138,17 +144,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "185ea73025776ab98a860a4901000000", + "ray.actor_id": "9b0034a6d26c0dca667bcd5b01000000", "ray.actor_method.args": "(False,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "1505", - "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", - "ray.task_id": "16310a0f0a45af5c185ea73025776ab98a860a4901000000", - "ray.worker_id": "69aaaafe4969dd1bd941920573a27be1112cd467fb2b4c34398594e8", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1503", + "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", + "ray.task_id": "16310a0f0a45af5c9b0034a6d26c0dca667bcd5b01000000", + "ray.worker_id": "465c53eda91915417adf04ce9589e33dbe1127935755a3a0afd375bb", "span.kind": "consumer" }, "metrics": { @@ -157,8 +162,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 1607125, - "start": 1758101747086940051 + "duration": 1378417, + "start": 1758616871032564882 }, { "name": "JobSupervisor._get_driver_runtime_env", @@ -171,17 +176,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "185ea73025776ab98a860a4901000000", + "ray.actor_id": "9b0034a6d26c0dca667bcd5b01000000", "ray.actor_method.args": "(False,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "1505", - "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", - "ray.task_id": "16310a0f0a45af5c185ea73025776ab98a860a4901000000", - "ray.worker_id": "69aaaafe4969dd1bd941920573a27be1112cd467fb2b4c34398594e8", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1503", + "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", + "ray.task_id": "16310a0f0a45af5c9b0034a6d26c0dca667bcd5b01000000", + "ray.worker_id": "465c53eda91915417adf04ce9589e33dbe1127935755a3a0afd375bb", "span.kind": "consumer" }, "metrics": { @@ -190,8 +194,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 161709, - "start": 1758101747088362426 + "duration": 44541, + "start": 1758616871033875299 }, { "name": "exec actor_and_task.py", @@ -204,15 +208,14 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "185ea73025776ab98a860a4901000000", + "ray.actor_id": "9b0034a6d26c0dca667bcd5b01000000", "ray.job_id": "01000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "1505", - "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", - "ray.task_id": "16310a0f0a45af5c185ea73025776ab98a860a4901000000", - "ray.worker_id": "69aaaafe4969dd1bd941920573a27be1112cd467fb2b4c34398594e8", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1503", + "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", + "ray.task_id": "16310a0f0a45af5c9b0034a6d26c0dca667bcd5b01000000", + "ray.worker_id": "465c53eda91915417adf04ce9589e33dbe1127935755a3a0afd375bb", "span.kind": "consumer" }, "metrics": { @@ -221,8 +224,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 400833, - "start": 1758101747088710343 + "duration": 428458, + "start": 1758616871034082507 }, { "name": "ComputationManager.compute_and_store.remote()", @@ -235,22 +238,21 @@ "error": 0, "meta": { "_dd.base_service": "project", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca80f200000000", - "_dd.parent_id": "0ad1a2febd0de4b0", + "_dd.p.tid": "68d25d2600000000", + "_dd.parent_id": "d13ef6b70032cde6", "component": "ray", "language": "python", "ray.actor_method.args": "([2, 3, 4],)", "ray.actor_method.kwargs": "{}", "ray.job_id": "02000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "1560", - "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1556", + "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", "ray.worker_id": "02000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "54f01591d4ef4805940a7d9b1a9add71", + "runtime-id": "c8239aff43dd461d9e36933abd1a1f6b", "span.kind": "producer", - "traceparent": "00-68ca80f200000000d5e0f7439c961116-0ad1a2febd0de4b0-00", - "tracestate": "dd=p:0ad1a2febd0de4b0;s:0" + "traceparent": "00-68d25d26000000000183b1c728d696b1-d13ef6b70032cde6-00", + "tracestate": "dd=p:d13ef6b70032cde6;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -259,10 +261,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1560 + "process_id": 1556 }, - "duration": 396250, - "start": 1758101747708380218 + "duration": 446125, + "start": 1758616871644129257 }, { "name": "ComputationManager.compute_and_store", @@ -275,24 +277,23 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca80f200000000", - "_dd.parent_id": "0d68996943a3da41", + "_dd.p.tid": "68d25d2600000000", + "_dd.parent_id": "ccdedad97b388ff3", "component": "ray", "language": "python", - "ray.actor_id": "53db2ce6d7e8196521d0de4502000000", + "ray.actor_id": "263e2c9685bbf8ae33316a5402000000", "ray.actor_method.args": "([2, 3, 4],)", "ray.actor_method.kwargs": "{}", "ray.job_id": "02000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "1616", - "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", - "ray.task_id": "e082c90ab8422b0053db2ce6d7e8196521d0de4502000000", - "ray.worker_id": "c52496c8b004b4cd1ae038a384378d4ba234598030b280a85f608836", - "runtime-id": "5384824c5a8348b9a924842b0bd9db39", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1612", + "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", + "ray.task_id": "e082c90ab8422b00263e2c9685bbf8ae33316a5402000000", + "ray.worker_id": "9c3c649c06114fab8769d3ac4421ca89f0e82dcefe98a99505072161", + "runtime-id": "df35de0201dc4686a42b072a887cf1a0", "span.kind": "consumer", - "traceparent": "00-68ca80f200000000d5e0f7439c961116-0d68996943a3da41-00", - "tracestate": "dd=p:0d68996943a3da41;s:0" + "traceparent": "00-68d25d26000000000183b1c728d696b1-ccdedad97b388ff3-00", + "tracestate": "dd=p:ccdedad97b388ff3;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -301,10 +302,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1616 + "process_id": 1612 }, - "duration": 2600556584, - "start": 1758101748518810594 + "duration": 2814218502, + "start": 1758616872476718549 }, { "name": "ComputationManager.increment_count", @@ -317,17 +318,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "53db2ce6d7e8196521d0de4502000000", + "ray.actor_id": "263e2c9685bbf8ae33316a5402000000", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", "ray.job_id": "02000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "1616", - "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", - "ray.task_id": "e082c90ab8422b0053db2ce6d7e8196521d0de4502000000", - "ray.worker_id": "c52496c8b004b4cd1ae038a384378d4ba234598030b280a85f608836", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1612", + "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", + "ray.task_id": "e082c90ab8422b00263e2c9685bbf8ae33316a5402000000", + "ray.worker_id": "9c3c649c06114fab8769d3ac4421ca89f0e82dcefe98a99505072161", "span.kind": "consumer" }, "metrics": { @@ -336,8 +336,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 110417, - "start": 1758101748519034385 + "duration": 41875, + "start": 1758616872476938133 }, { "name": "__main__.batch_compute.remote()", @@ -350,18 +350,17 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "53db2ce6d7e8196521d0de4502000000", + "ray.actor_id": "263e2c9685bbf8ae33316a5402000000", "ray.job_id": "02000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "1616", - "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1612", + "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", "ray.task.args": "([2, 3, 4],)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", - "ray.task_id": "e082c90ab8422b0053db2ce6d7e8196521d0de4502000000", - "ray.worker_id": "c52496c8b004b4cd1ae038a384378d4ba234598030b280a85f608836", + "ray.task_id": "e082c90ab8422b00263e2c9685bbf8ae33316a5402000000", + "ray.worker_id": "9c3c649c06114fab8769d3ac4421ca89f0e82dcefe98a99505072161", "span.kind": "producer" }, "metrics": { @@ -370,8 +369,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 1618708, - "start": 1758101748519218802 + "duration": 1712459, + "start": 1758616872477036674 }, { "name": "__main__.batch_compute", @@ -384,24 +383,23 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca80f200000000", - "_dd.parent_id": "993adff4a186de90", + "_dd.p.tid": "68d25d2600000000", + "_dd.parent_id": "2517805700d01464", "component": "ray", "language": "python", "ray.job_id": "02000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "1676", - "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1671", + "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", "ray.task.args": "([2, 3, 4],)", "ray.task.kwargs": "{}", "ray.task.status": "success", - "ray.task_id": "a21870e98717e19bffffffffffffffffffffffff02000000", - "ray.worker_id": "a1c7915a4a294885a7fcdc430dfd04a81c472c8c826bf48d46ea758c", - "runtime-id": "f7fb49937cc24110a4ee87decfd77509", + "ray.task_id": "1b23a186758c54dbffffffffffffffffffffffff02000000", + "ray.worker_id": "1ce745070c826fbfe5269a6671198d651507a4c57927c65a5e3c2e18", + "runtime-id": "f95e4dab988d4d1d8107f7bf535f20af", "span.kind": "consumer", - "traceparent": "00-68ca80f200000000d5e0f7439c961116-993adff4a186de90-00", - "tracestate": "dd=p:993adff4a186de90;s:0" + "traceparent": "00-68d25d26000000000183b1c728d696b1-2517805700d01464-00", + "tracestate": "dd=p:2517805700d01464;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -410,10 +408,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1676 + "process_id": 1671 }, - "duration": 1749371542, - "start": 1758101749366667886 + "duration": 1838300167, + "start": 1758616873449646675 }, { "name": "__main__.compute_value.remote()", @@ -426,17 +424,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", "component": "ray", "ray.job_id": "02000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "1676", - "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1671", + "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", "ray.task.args": "(2,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", - "ray.task_id": "a21870e98717e19bffffffffffffffffffffffff02000000", - "ray.worker_id": "a1c7915a4a294885a7fcdc430dfd04a81c472c8c826bf48d46ea758c", + "ray.task_id": "1b23a186758c54dbffffffffffffffffffffffff02000000", + "ray.worker_id": "1ce745070c826fbfe5269a6671198d651507a4c57927c65a5e3c2e18", "span.kind": "producer" }, "metrics": { @@ -445,8 +442,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 1185209, - "start": 1758101749366953177 + "duration": 1481750, + "start": 1758616873449978800 }, { "name": "__main__.compute_value", @@ -459,24 +456,23 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca80f200000000", - "_dd.parent_id": "d3c7c1e22a66479e", + "_dd.p.tid": "68d25d2600000000", + "_dd.parent_id": "c594dffe2c81a94d", "component": "ray", "language": "python", "ray.job_id": "02000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "1726", - "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1719", + "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", "ray.task.args": "(2,)", "ray.task.kwargs": "{}", "ray.task.status": "success", - "ray.task_id": "6facd2a027aea4aeffffffffffffffffffffffff02000000", - "ray.worker_id": "88ac98cd102df8ba02c93e15611e30e73b9e7b2a6b600866483ff0e4", - "runtime-id": "0611cc5d550b44bb91b893af08690446", + "ray.task_id": "6be3145425b13a18ffffffffffffffffffffffff02000000", + "ray.worker_id": "3b83afdd6b613c41005c3feaf9dd33d7988fc781470fb1a78e2b0047", + "runtime-id": "ebb55e268d53468cba5c333c725bb259", "span.kind": "consumer", - "traceparent": "00-68ca80f200000000d5e0f7439c961116-d3c7c1e22a66479e-00", - "tracestate": "dd=p:d3c7c1e22a66479e;s:0" + "traceparent": "00-68d25d26000000000183b1c728d696b1-c594dffe2c81a94d-00", + "tracestate": "dd=p:c594dffe2c81a94d;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -485,10 +481,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1726 + "process_id": 1719 }, - "duration": 476125, - "start": 1758101751076124012 + "duration": 270167, + "start": 1758616875217898009 }, { "name": "__main__.compute_value.remote()", @@ -501,17 +497,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", "component": "ray", "ray.job_id": "02000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "1676", - "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1671", + "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", "ray.task.args": "(3,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", - "ray.task_id": "a21870e98717e19bffffffffffffffffffffffff02000000", - "ray.worker_id": "a1c7915a4a294885a7fcdc430dfd04a81c472c8c826bf48d46ea758c", + "ray.task_id": "1b23a186758c54dbffffffffffffffffffffffff02000000", + "ray.worker_id": "1ce745070c826fbfe5269a6671198d651507a4c57927c65a5e3c2e18", "span.kind": "producer" }, "metrics": { @@ -520,8 +515,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 118459, - "start": 1758101749368167677 + "duration": 156417, + "start": 1758616873451499050 }, { "name": "__main__.compute_value", @@ -534,24 +529,23 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca80f200000000", - "_dd.parent_id": "dbd834581ecddd74", + "_dd.p.tid": "68d25d2600000000", + "_dd.parent_id": "f789d01c97680150", "component": "ray", "language": "python", "ray.job_id": "02000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "1724", - "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1721", + "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", "ray.task.args": "(3,)", "ray.task.kwargs": "{}", "ray.task.status": "success", - "ray.task_id": "ba48ab699c81b4f3ffffffffffffffffffffffff02000000", - "ray.worker_id": "7703d24f9197f363426bc6081719528d22bce0d9e6987329b1de9864", - "runtime-id": "4d73be6e782543188a797d1a9b3f0696", + "ray.task_id": "231d59d35b446866ffffffffffffffffffffffff02000000", + "ray.worker_id": "494d1ee406d216048787b9f57cb0937c5801e0e1cbe8692ea4ea72b8", + "runtime-id": "64d472abdbe34f3e8418ce48fc418315", "span.kind": "consumer", - "traceparent": "00-68ca80f200000000d5e0f7439c961116-dbd834581ecddd74-00", - "tracestate": "dd=p:dbd834581ecddd74;s:0" + "traceparent": "00-68d25d26000000000183b1c728d696b1-f789d01c97680150-00", + "tracestate": "dd=p:f789d01c97680150;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -560,10 +554,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1724 + "process_id": 1721 }, - "duration": 284208, - "start": 1758101751111992262 + "duration": 322459, + "start": 1758616875269754967 }, { "name": "__main__.compute_value.remote()", @@ -576,17 +570,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", "component": "ray", "ray.job_id": "02000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "1676", - "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1671", + "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", "ray.task.args": "(4,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", - "ray.task_id": "a21870e98717e19bffffffffffffffffffffffff02000000", - "ray.worker_id": "a1c7915a4a294885a7fcdc430dfd04a81c472c8c826bf48d46ea758c", + "ray.task_id": "1b23a186758c54dbffffffffffffffffffffffff02000000", + "ray.worker_id": "1ce745070c826fbfe5269a6671198d651507a4c57927c65a5e3c2e18", "span.kind": "producer" }, "metrics": { @@ -595,8 +588,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 95375, - "start": 1758101749368304761 + "duration": 100958, + "start": 1758616873451671175 }, { "name": "__main__.compute_value", @@ -609,24 +602,23 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca80f200000000", - "_dd.parent_id": "e66a0cc6d06f466b", + "_dd.p.tid": "68d25d2600000000", + "_dd.parent_id": "880075f682c746c2", "component": "ray", "language": "python", "ray.job_id": "02000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "1725", - "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1720", + "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", "ray.task.args": "(4,)", "ray.task.kwargs": "{}", "ray.task.status": "success", - "ray.task_id": "b471366345076203ffffffffffffffffffffffff02000000", - "ray.worker_id": "8c00d483a12f27b3cf3cad087a68ae43d52cd09a24e1e850cc3a0b3d", - "runtime-id": "bfb2b2761c3545d79e2f55604530882c", + "ray.task_id": "6681848b8a02c430ffffffffffffffffffffffff02000000", + "ray.worker_id": "843331d64055335dd53ce99b7736dae4aa1da7b8d1681794a86a3065", + "runtime-id": "d62a798a9cb649fa8b6265fba7e786fe", "span.kind": "consumer", - "traceparent": "00-68ca80f200000000d5e0f7439c961116-e66a0cc6d06f466b-00", - "tracestate": "dd=p:e66a0cc6d06f466b;s:0" + "traceparent": "00-68d25d26000000000183b1c728d696b1-880075f682c746c2-00", + "tracestate": "dd=p:880075f682c746c2;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -635,10 +627,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1725 + "process_id": 1720 }, - "duration": 287666, - "start": 1758101751104082887 + "duration": 293875, + "start": 1758616875284144092 }, { "name": "ComputationManager.add_result", @@ -651,17 +643,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "53db2ce6d7e8196521d0de4502000000", + "ray.actor_id": "263e2c9685bbf8ae33316a5402000000", "ray.actor_method.args": "(3,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "02000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "1616", - "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", - "ray.task_id": "e082c90ab8422b0053db2ce6d7e8196521d0de4502000000", - "ray.worker_id": "c52496c8b004b4cd1ae038a384378d4ba234598030b280a85f608836", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1612", + "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", + "ray.task_id": "e082c90ab8422b00263e2c9685bbf8ae33316a5402000000", + "ray.worker_id": "9c3c649c06114fab8769d3ac4421ca89f0e82dcefe98a99505072161", "span.kind": "consumer" }, "metrics": { @@ -670,8 +661,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 221083, - "start": 1758101751118654137 + "duration": 73166, + "start": 1758616875290739051 }, { "name": "ComputationManager.add_result", @@ -684,17 +675,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "53db2ce6d7e8196521d0de4502000000", + "ray.actor_id": "263e2c9685bbf8ae33316a5402000000", "ray.actor_method.args": "(4,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "02000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "1616", - "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", - "ray.task_id": "e082c90ab8422b0053db2ce6d7e8196521d0de4502000000", - "ray.worker_id": "c52496c8b004b4cd1ae038a384378d4ba234598030b280a85f608836", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1612", + "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", + "ray.task_id": "e082c90ab8422b00263e2c9685bbf8ae33316a5402000000", + "ray.worker_id": "9c3c649c06114fab8769d3ac4421ca89f0e82dcefe98a99505072161", "span.kind": "consumer" }, "metrics": { @@ -703,8 +693,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 106500, - "start": 1758101751118895137 + "duration": 21666, + "start": 1758616875290828051 }, { "name": "ComputationManager.add_result", @@ -717,17 +707,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "53db2ce6d7e8196521d0de4502000000", + "ray.actor_id": "263e2c9685bbf8ae33316a5402000000", "ray.actor_method.args": "(5,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "02000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "1616", - "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", - "ray.task_id": "e082c90ab8422b0053db2ce6d7e8196521d0de4502000000", - "ray.worker_id": "c52496c8b004b4cd1ae038a384378d4ba234598030b280a85f608836", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1612", + "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", + "ray.task_id": "e082c90ab8422b00263e2c9685bbf8ae33316a5402000000", + "ray.worker_id": "9c3c649c06114fab8769d3ac4421ca89f0e82dcefe98a99505072161", "span.kind": "consumer" }, "metrics": { @@ -736,8 +725,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 105375, - "start": 1758101751119019720 + "duration": 15917, + "start": 1758616875290859509 }, { "name": "ComputationManager.get_count", @@ -750,17 +739,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "53db2ce6d7e8196521d0de4502000000", + "ray.actor_id": "263e2c9685bbf8ae33316a5402000000", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", "ray.job_id": "02000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "1616", - "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", - "ray.task_id": "e082c90ab8422b0053db2ce6d7e8196521d0de4502000000", - "ray.worker_id": "c52496c8b004b4cd1ae038a384378d4ba234598030b280a85f608836", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1612", + "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", + "ray.task_id": "e082c90ab8422b00263e2c9685bbf8ae33316a5402000000", + "ray.worker_id": "9c3c649c06114fab8769d3ac4421ca89f0e82dcefe98a99505072161", "span.kind": "consumer" }, "metrics": { @@ -769,8 +757,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 97125, - "start": 1758101751119138720 + "duration": 15458, + "start": 1758616875290884176 }, { "name": "ComputationManager.get_results", @@ -783,17 +771,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "53db2ce6d7e8196521d0de4502000000", + "ray.actor_id": "263e2c9685bbf8ae33316a5402000000", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", "ray.job_id": "02000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "1616", - "ray.submission_id": "raysubmit_QtgsTNMg7sPPFJg4", - "ray.task_id": "e082c90ab8422b0053db2ce6d7e8196521d0de4502000000", - "ray.worker_id": "c52496c8b004b4cd1ae038a384378d4ba234598030b280a85f608836", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1612", + "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", + "ray.task_id": "e082c90ab8422b00263e2c9685bbf8ae33316a5402000000", + "ray.worker_id": "9c3c649c06114fab8769d3ac4421ca89f0e82dcefe98a99505072161", "span.kind": "consumer" }, "metrics": { @@ -802,6 +789,6 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 96167, - "start": 1758101751119252303 + "duration": 14375, + "start": 1758616875290910426 }]] diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_actor_interactions.json b/tests/snapshots/tests.contrib.ray.test_ray.test_actor_interactions.json index fc14ca0678d..a981b8fc708 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_actor_interactions.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_actor_interactions.json @@ -12,13 +12,17 @@ "_dd.base_service": "ray.dashboard", "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68ca80fb00000000", + "_dd.p.tid": "68d25d3000000000", "component": "ray", "language": "python", "ray.job.message": "Job finished successfully.", "ray.job.status": "SUCCEEDED", - "ray.submission_id": "raysubmit_DViFN6C258zqpTa8", - "runtime-id": "6cec296b9ec54202916b51bc4ab5e15c" + "ray.job_id": "01000000", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1045", + "ray.submission_id": "raysubmit_EPVKeC9jBZstjBA2", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "11b30a8c1d714183b0fea7bbd9410a29" }, "metrics": { "_dd.djm.enabled": 1, @@ -27,10 +31,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1047 + "process_id": 1045 }, - "duration": 3944445987, - "start": 1758101755675254139 + "duration": 3915848752, + "start": 1758616880643923845 }, { "name": "ray.job.submit", @@ -43,9 +47,13 @@ "error": 0, "meta": { "_dd.base_service": "ray.dashboard", - "_dd.hostname": "docker-desktop", "component": "ray", "ray.job.submit_status": "success", + "ray.job_id": "01000000", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1045", + "ray.submission_id": "raysubmit_EPVKeC9jBZstjBA2", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "producer" }, "metrics": { @@ -54,8 +62,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 38833, - "start": 1758101755675453014 + "duration": 58000, + "start": 1758616880644186178 }, { "name": "JobSupervisor.run.remote()", @@ -68,13 +76,12 @@ "error": 0, "meta": { "_dd.base_service": "ray.dashboard", - "_dd.hostname": "docker-desktop", "component": "ray", "ray.actor_method.args": "[]", "ray.actor_method.kwargs": "{'_start_signal_actor': None, 'resources_specified': False}", "ray.job_id": "01000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "1047", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1045", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "producer" }, @@ -84,8 +91,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 339958, - "start": 1758101755678775264 + "duration": 228833, + "start": 1758616880647443720 }, { "name": "JobSupervisor.run", @@ -98,22 +105,21 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca80fb00000000", - "_dd.parent_id": "6ed7628bf3351859", + "_dd.p.tid": "68d25d3000000000", + "_dd.parent_id": "98ea914405ceb3dd", "component": "ray", "language": "python", - "ray.actor_id": "3489da007773e40d07bd771201000000", + "ray.actor_id": "c30b3a79f0ee7eba860b4d6501000000", "ray.job_id": "01000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "1901", - "ray.submission_id": "raysubmit_DViFN6C258zqpTa8", - "ray.task_id": "80e22aed7718a1253489da007773e40d07bd771201000000", - "ray.worker_id": "e34ed43553e5f5c331665eccd396705aaa6efcf5362b22198c7cc775", - "runtime-id": "72824364ff3948c8b73454d2f186dc37", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1891", + "ray.submission_id": "raysubmit_EPVKeC9jBZstjBA2", + "ray.task_id": "80e22aed7718a125c30b3a79f0ee7eba860b4d6501000000", + "ray.worker_id": "4581b229526821223792f99bac81b3431059ee22d8e8587fe98306d3", + "runtime-id": "271ce6017d40416ea2b691b15b924d76", "span.kind": "consumer", - "traceparent": "00-68ca80fb0000000005c84ea427251193-6ed7628bf3351859-00", - "tracestate": "dd=p:6ed7628bf3351859" + "traceparent": "00-68d25d3000000000930af5f82e2eab20-98ea914405ceb3dd-00", + "tracestate": "dd=p:98ea914405ceb3dd" }, "metrics": { "_dd.djm.enabled": 1, @@ -122,10 +128,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1901 + "process_id": 1891 }, - "duration": 2530345709, - "start": 1758101756598734042 + "duration": 2334378793, + "start": 1758616881539491512 }, { "name": "JobSupervisor._get_driver_env_vars", @@ -138,17 +144,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "3489da007773e40d07bd771201000000", + "ray.actor_id": "c30b3a79f0ee7eba860b4d6501000000", "ray.actor_method.args": "(False,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "1901", - "ray.submission_id": "raysubmit_DViFN6C258zqpTa8", - "ray.task_id": "80e22aed7718a1253489da007773e40d07bd771201000000", - "ray.worker_id": "e34ed43553e5f5c331665eccd396705aaa6efcf5362b22198c7cc775", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1891", + "ray.submission_id": "raysubmit_EPVKeC9jBZstjBA2", + "ray.task_id": "80e22aed7718a125c30b3a79f0ee7eba860b4d6501000000", + "ray.worker_id": "4581b229526821223792f99bac81b3431059ee22d8e8587fe98306d3", "span.kind": "consumer" }, "metrics": { @@ -157,8 +162,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 1596208, - "start": 1758101756600175375 + "duration": 1509708, + "start": 1758616881541459429 }, { "name": "JobSupervisor._get_driver_runtime_env", @@ -171,17 +176,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "3489da007773e40d07bd771201000000", + "ray.actor_id": "c30b3a79f0ee7eba860b4d6501000000", "ray.actor_method.args": "(False,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "1901", - "ray.submission_id": "raysubmit_DViFN6C258zqpTa8", - "ray.task_id": "80e22aed7718a1253489da007773e40d07bd771201000000", - "ray.worker_id": "e34ed43553e5f5c331665eccd396705aaa6efcf5362b22198c7cc775", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1891", + "ray.submission_id": "raysubmit_EPVKeC9jBZstjBA2", + "ray.task_id": "80e22aed7718a125c30b3a79f0ee7eba860b4d6501000000", + "ray.worker_id": "4581b229526821223792f99bac81b3431059ee22d8e8587fe98306d3", "span.kind": "consumer" }, "metrics": { @@ -190,8 +194,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 153959, - "start": 1758101756601591208 + "duration": 71416, + "start": 1758616881542874554 }, { "name": "exec actor_interactions.py", @@ -204,15 +208,14 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "3489da007773e40d07bd771201000000", + "ray.actor_id": "c30b3a79f0ee7eba860b4d6501000000", "ray.job_id": "01000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "1901", - "ray.submission_id": "raysubmit_DViFN6C258zqpTa8", - "ray.task_id": "80e22aed7718a1253489da007773e40d07bd771201000000", - "ray.worker_id": "e34ed43553e5f5c331665eccd396705aaa6efcf5362b22198c7cc775", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1891", + "ray.submission_id": "raysubmit_EPVKeC9jBZstjBA2", + "ray.task_id": "80e22aed7718a125c30b3a79f0ee7eba860b4d6501000000", + "ray.worker_id": "4581b229526821223792f99bac81b3431059ee22d8e8587fe98306d3", "span.kind": "consumer" }, "metrics": { @@ -221,8 +224,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 434916, - "start": 1758101756601955667 + "duration": 691333, + "start": 1758616881543157929 }, { "name": "Sender.send_message.remote()", @@ -235,22 +238,21 @@ "error": 0, "meta": { "_dd.base_service": "project", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca80fb00000000", - "_dd.parent_id": "9cc5163b2c7eb5b3", + "_dd.p.tid": "68d25d3000000000", + "_dd.parent_id": "887bf681cf27e3f0", "component": "ray", "language": "python", - "ray.actor_method.args": "(Actor(Receiver, dfe2e660e89e80f15314d52f03000000), 'hello')", + "ray.actor_method.args": "(Actor(Receiver, 9471ff9650ea7fc659e5637803000000), 'hello')", "ray.actor_method.kwargs": "{}", "ray.job_id": "03000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "1953", - "ray.submission_id": "raysubmit_DViFN6C258zqpTa8", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1941", + "ray.submission_id": "raysubmit_EPVKeC9jBZstjBA2", "ray.worker_id": "03000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "893b54b7095a41d89efde593bee65b3e", + "runtime-id": "3b9c04248fff4bd280f84b6ddbb2aa3d", "span.kind": "producer", - "traceparent": "00-68ca80fb0000000005c84ea427251193-9cc5163b2c7eb5b3-00", - "tracestate": "dd=p:9cc5163b2c7eb5b3;s:0" + "traceparent": "00-68d25d3000000000930af5f82e2eab20-887bf681cf27e3f0-00", + "tracestate": "dd=p:887bf681cf27e3f0;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -259,10 +261,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1953 + "process_id": 1941 }, - "duration": 484959, - "start": 1758101757294278375 + "duration": 343583, + "start": 1758616882161838721 }, { "name": "Sender.send_message", @@ -275,24 +277,23 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca80fb00000000", - "_dd.parent_id": "7fab7b3517eed31b", + "_dd.p.tid": "68d25d3000000000", + "_dd.parent_id": "d16434929a8ed012", "component": "ray", "language": "python", - "ray.actor_id": "8cd3c0133180cd602277acfa03000000", - "ray.actor_method.args": "(Actor(Receiver, dfe2e660e89e80f15314d52f03000000), 'hello')", + "ray.actor_id": "1eb88f4ded2e27d8c2440d7103000000", + "ray.actor_method.args": "(Actor(Receiver, 9471ff9650ea7fc659e5637803000000), 'hello')", "ray.actor_method.kwargs": "{}", "ray.job_id": "03000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2000", - "ray.submission_id": "raysubmit_DViFN6C258zqpTa8", - "ray.task_id": "0ab01f2d6283d7198cd3c0133180cd602277acfa03000000", - "ray.worker_id": "52e32a1c4ce484d352a4cfe1fd6a13f5df080ce00d019394d3122e4e", - "runtime-id": "869a2656e3d1456fb86912341f975312", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2002", + "ray.submission_id": "raysubmit_EPVKeC9jBZstjBA2", + "ray.task_id": "0ab01f2d6283d7191eb88f4ded2e27d8c2440d7103000000", + "ray.worker_id": "292f3ffa0fdd954b6e25bb0e5d3681a2f705a48f101e40a4c9b2569f", + "runtime-id": "6f8f5f7448434df18e7a4314b4bc45c5", "span.kind": "consumer", - "traceparent": "00-68ca80fb0000000005c84ea427251193-7fab7b3517eed31b-00", - "tracestate": "dd=p:7fab7b3517eed31b;s:0" + "traceparent": "00-68d25d3000000000930af5f82e2eab20-d16434929a8ed012-00", + "tracestate": "dd=p:d16434929a8ed012;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -301,10 +302,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2000 + "process_id": 2002 }, - "duration": 7215417, - "start": 1758101758771810626 + "duration": 22947916, + "start": 1758616883555134930 }, { "name": "Receiver.receive_message.remote()", @@ -317,17 +318,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "8cd3c0133180cd602277acfa03000000", + "ray.actor_id": "1eb88f4ded2e27d8c2440d7103000000", "ray.actor_method.args": "('hello',)", "ray.actor_method.kwargs": "{}", "ray.job_id": "03000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2000", - "ray.submission_id": "raysubmit_DViFN6C258zqpTa8", - "ray.task_id": "0ab01f2d6283d7198cd3c0133180cd602277acfa03000000", - "ray.worker_id": "52e32a1c4ce484d352a4cfe1fd6a13f5df080ce00d019394d3122e4e", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2002", + "ray.submission_id": "raysubmit_EPVKeC9jBZstjBA2", + "ray.task_id": "0ab01f2d6283d7191eb88f4ded2e27d8c2440d7103000000", + "ray.worker_id": "292f3ffa0fdd954b6e25bb0e5d3681a2f705a48f101e40a4c9b2569f", "span.kind": "producer" }, "metrics": { @@ -336,8 +336,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 267792, - "start": 1758101758772075584 + "duration": 519667, + "start": 1758616883555481346 }, { "name": "Receiver.receive_message", @@ -350,24 +350,23 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca80fb00000000", - "_dd.parent_id": "f4d1809fd76fbd99", + "_dd.p.tid": "68d25d3000000000", + "_dd.parent_id": "6563ba858308c263", "component": "ray", "language": "python", - "ray.actor_id": "dfe2e660e89e80f15314d52f03000000", + "ray.actor_id": "9471ff9650ea7fc659e5637803000000", "ray.actor_method.args": "('hello',)", "ray.actor_method.kwargs": "{}", "ray.job_id": "03000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "1999", - "ray.submission_id": "raysubmit_DViFN6C258zqpTa8", - "ray.task_id": "230da68af864f77adfe2e660e89e80f15314d52f03000000", - "ray.worker_id": "f7c8c8aecbb9be9278035d4a192b495b4dae9754fe8af442409402bf", - "runtime-id": "ac712603f8d045408449c5229fc01074", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2003", + "ray.submission_id": "raysubmit_EPVKeC9jBZstjBA2", + "ray.task_id": "5295a29d66e8431d9471ff9650ea7fc659e5637803000000", + "ray.worker_id": "e0b4832cda57b22c352c691d86402d15d3b7bd4f0ea873951fa6950c", + "runtime-id": "60033d357429440fb994494688f11141", "span.kind": "consumer", - "traceparent": "00-68ca80fb0000000005c84ea427251193-f4d1809fd76fbd99-00", - "tracestate": "dd=p:f4d1809fd76fbd99;s:0" + "traceparent": "00-68d25d3000000000930af5f82e2eab20-6563ba858308c263-00", + "tracestate": "dd=p:6563ba858308c263;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -376,10 +375,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1999 + "process_id": 2003 }, - "duration": 236750, - "start": 1758101758775735668 + "duration": 319583, + "start": 1758616883574090680 }, { "name": "Sender.get_sent_count.remote()", @@ -392,22 +391,21 @@ "error": 0, "meta": { "_dd.base_service": "project", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca80fb00000000", - "_dd.parent_id": "9cc5163b2c7eb5b3", + "_dd.p.tid": "68d25d3000000000", + "_dd.parent_id": "887bf681cf27e3f0", "component": "ray", "language": "python", "ray.actor_method.args": "[]", "ray.actor_method.kwargs": "{}", "ray.job_id": "03000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "1953", - "ray.submission_id": "raysubmit_DViFN6C258zqpTa8", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1941", + "ray.submission_id": "raysubmit_EPVKeC9jBZstjBA2", "ray.worker_id": "03000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "893b54b7095a41d89efde593bee65b3e", + "runtime-id": "3b9c04248fff4bd280f84b6ddbb2aa3d", "span.kind": "producer", - "traceparent": "00-68ca80fb0000000005c84ea427251193-9cc5163b2c7eb5b3-00", - "tracestate": "dd=p:9cc5163b2c7eb5b3;s:0" + "traceparent": "00-68d25d3000000000930af5f82e2eab20-887bf681cf27e3f0-00", + "tracestate": "dd=p:887bf681cf27e3f0;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -416,10 +414,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1953 + "process_id": 1941 }, - "duration": 180208, - "start": 1758101758782083543 + "duration": 205125, + "start": 1758616883580916930 }, { "name": "Sender.get_sent_count", @@ -432,24 +430,23 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca80fb00000000", - "_dd.parent_id": "67f6208327e75cbb", + "_dd.p.tid": "68d25d3000000000", + "_dd.parent_id": "f89dc5c1a02f70d4", "component": "ray", "language": "python", - "ray.actor_id": "8cd3c0133180cd602277acfa03000000", + "ray.actor_id": "1eb88f4ded2e27d8c2440d7103000000", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", "ray.job_id": "03000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2000", - "ray.submission_id": "raysubmit_DViFN6C258zqpTa8", - "ray.task_id": "62ffec03f52574bd8cd3c0133180cd602277acfa03000000", - "ray.worker_id": "52e32a1c4ce484d352a4cfe1fd6a13f5df080ce00d019394d3122e4e", - "runtime-id": "869a2656e3d1456fb86912341f975312", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2002", + "ray.submission_id": "raysubmit_EPVKeC9jBZstjBA2", + "ray.task_id": "62ffec03f52574bd1eb88f4ded2e27d8c2440d7103000000", + "ray.worker_id": "292f3ffa0fdd954b6e25bb0e5d3681a2f705a48f101e40a4c9b2569f", + "runtime-id": "6f8f5f7448434df18e7a4314b4bc45c5", "span.kind": "consumer", - "traceparent": "00-68ca80fb0000000005c84ea427251193-67f6208327e75cbb-00", - "tracestate": "dd=p:67f6208327e75cbb;s:0" + "traceparent": "00-68d25d3000000000930af5f82e2eab20-f89dc5c1a02f70d4-00", + "tracestate": "dd=p:f89dc5c1a02f70d4;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -458,10 +455,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2000 + "process_id": 2002 }, - "duration": 166042, - "start": 1758101758782670834 + "duration": 53500, + "start": 1758616883581614055 }, { "name": "Receiver.get_messages.remote()", @@ -474,22 +471,21 @@ "error": 0, "meta": { "_dd.base_service": "project", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca80fb00000000", - "_dd.parent_id": "9cc5163b2c7eb5b3", + "_dd.p.tid": "68d25d3000000000", + "_dd.parent_id": "887bf681cf27e3f0", "component": "ray", "language": "python", "ray.actor_method.args": "[]", "ray.actor_method.kwargs": "{}", "ray.job_id": "03000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "1953", - "ray.submission_id": "raysubmit_DViFN6C258zqpTa8", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1941", + "ray.submission_id": "raysubmit_EPVKeC9jBZstjBA2", "ray.worker_id": "03000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "893b54b7095a41d89efde593bee65b3e", + "runtime-id": "3b9c04248fff4bd280f84b6ddbb2aa3d", "span.kind": "producer", - "traceparent": "00-68ca80fb0000000005c84ea427251193-9cc5163b2c7eb5b3-00", - "tracestate": "dd=p:9cc5163b2c7eb5b3;s:0" + "traceparent": "00-68d25d3000000000930af5f82e2eab20-887bf681cf27e3f0-00", + "tracestate": "dd=p:887bf681cf27e3f0;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -498,10 +494,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1953 + "process_id": 1941 }, - "duration": 174292, - "start": 1758101758784914834 + "duration": 245666, + "start": 1758616883583678055 }, { "name": "Receiver.get_messages", @@ -514,24 +510,23 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca80fb00000000", - "_dd.parent_id": "112628203686b4ff", + "_dd.p.tid": "68d25d3000000000", + "_dd.parent_id": "5cf66ac8efdc2392", "component": "ray", "language": "python", - "ray.actor_id": "dfe2e660e89e80f15314d52f03000000", + "ray.actor_id": "9471ff9650ea7fc659e5637803000000", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", "ray.job_id": "03000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "1999", - "ray.submission_id": "raysubmit_DViFN6C258zqpTa8", - "ray.task_id": "882ffa20ac4b2e6edfe2e660e89e80f15314d52f03000000", - "ray.worker_id": "f7c8c8aecbb9be9278035d4a192b495b4dae9754fe8af442409402bf", - "runtime-id": "ac712603f8d045408449c5229fc01074", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2003", + "ray.submission_id": "raysubmit_EPVKeC9jBZstjBA2", + "ray.task_id": "882ffa20ac4b2e6e9471ff9650ea7fc659e5637803000000", + "ray.worker_id": "e0b4832cda57b22c352c691d86402d15d3b7bd4f0ea873951fa6950c", + "runtime-id": "60033d357429440fb994494688f11141", "span.kind": "consumer", - "traceparent": "00-68ca80fb0000000005c84ea427251193-112628203686b4ff-00", - "tracestate": "dd=p:112628203686b4ff;s:0" + "traceparent": "00-68d25d3000000000930af5f82e2eab20-5cf66ac8efdc2392-00", + "tracestate": "dd=p:5cf66ac8efdc2392;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -540,8 +535,8 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1999 + "process_id": 2003 }, - "duration": 192417, - "start": 1758101758786277584 + "duration": 62500, + "start": 1758616883585287013 }]] diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_nested_tasks.json b/tests/snapshots/tests.contrib.ray.test_ray.test_nested_tasks.json index 8eeb5e3c1cc..667505d7483 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_nested_tasks.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_nested_tasks.json @@ -12,13 +12,17 @@ "_dd.base_service": "ray.dashboard", "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68ca810b00000000", + "_dd.p.tid": "68d25d4100000000", "component": "ray", "language": "python", "ray.job.message": "Job finished successfully.", "ray.job.status": "SUCCEEDED", - "ray.submission_id": "raysubmit_m5LKvhywLHpUncAU", - "runtime-id": "6cec296b9ec54202916b51bc4ab5e15c" + "ray.job_id": "01000000", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1045", + "ray.submission_id": "raysubmit_MRrmPyZ1mnPbDUGD", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "11b30a8c1d714183b0fea7bbd9410a29" }, "metrics": { "_dd.djm.enabled": 1, @@ -27,10 +31,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1047 + "process_id": 1045 }, - "duration": 4866222794, - "start": 1758101771848729924 + "duration": 4849452877, + "start": 1758616897799174506 }, { "name": "ray.job.submit", @@ -43,9 +47,13 @@ "error": 0, "meta": { "_dd.base_service": "ray.dashboard", - "_dd.hostname": "docker-desktop", "component": "ray", "ray.job.submit_status": "success", + "ray.job_id": "01000000", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1045", + "ray.submission_id": "raysubmit_MRrmPyZ1mnPbDUGD", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "producer" }, "metrics": { @@ -54,8 +62,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 32834, - "start": 1758101771848885507 + "duration": 51208, + "start": 1758616897799386464 }, { "name": "JobSupervisor.run.remote()", @@ -68,13 +76,12 @@ "error": 0, "meta": { "_dd.base_service": "ray.dashboard", - "_dd.hostname": "docker-desktop", "component": "ray", "ray.actor_method.args": "[]", "ray.actor_method.kwargs": "{'_start_signal_actor': None, 'resources_specified': False}", "ray.job_id": "01000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "1047", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1045", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "producer" }, @@ -84,8 +91,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 271333, - "start": 1758101771852205841 + "duration": 257125, + "start": 1758616897802757506 }, { "name": "JobSupervisor.run", @@ -98,22 +105,21 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca810b00000000", - "_dd.parent_id": "253f6b4b1910aaed", + "_dd.p.tid": "68d25d4100000000", + "_dd.parent_id": "2c6a4e2584f95180", "component": "ray", "language": "python", - "ray.actor_id": "16f7f8933f39dc2e29ba982e01000000", + "ray.actor_id": "6c827795c460cbaa12a86c2f01000000", "ray.job_id": "01000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2435", - "ray.submission_id": "raysubmit_m5LKvhywLHpUncAU", - "ray.task_id": "3d3e27c54ed1f5cf16f7f8933f39dc2e29ba982e01000000", - "ray.worker_id": "51d264fc205789361ddca9db9080d0ed0d636005f5855099cf3d35d2", - "runtime-id": "6447f2e926904907bbd5a2bde8e51f9b", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2420", + "ray.submission_id": "raysubmit_MRrmPyZ1mnPbDUGD", + "ray.task_id": "465c0fb8d6cb3cdc6c827795c460cbaa12a86c2f01000000", + "ray.worker_id": "2818f8c1b2078fb9a5cac2c35a1cb23c19ec945180e3d4adcf86d262", + "runtime-id": "57f419e734d84c6a9ce3d8f33c5b6152", "span.kind": "consumer", - "traceparent": "00-68ca810b0000000089038dddd433fa36-253f6b4b1910aaed-00", - "tracestate": "dd=p:253f6b4b1910aaed" + "traceparent": "00-68d25d4100000000e398499a0c4c8df6-2c6a4e2584f95180-00", + "tracestate": "dd=p:2c6a4e2584f95180" }, "metrics": { "_dd.djm.enabled": 1, @@ -122,10 +128,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2435 + "process_id": 2420 }, - "duration": 3442056127, - "start": 1758101772685011466 + "duration": 3642647710, + "start": 1758616898633265464 }, { "name": "JobSupervisor._get_driver_env_vars", @@ -138,17 +144,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "16f7f8933f39dc2e29ba982e01000000", + "ray.actor_id": "6c827795c460cbaa12a86c2f01000000", "ray.actor_method.args": "(False,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2435", - "ray.submission_id": "raysubmit_m5LKvhywLHpUncAU", - "ray.task_id": "3d3e27c54ed1f5cf16f7f8933f39dc2e29ba982e01000000", - "ray.worker_id": "51d264fc205789361ddca9db9080d0ed0d636005f5855099cf3d35d2", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2420", + "ray.submission_id": "raysubmit_MRrmPyZ1mnPbDUGD", + "ray.task_id": "465c0fb8d6cb3cdc6c827795c460cbaa12a86c2f01000000", + "ray.worker_id": "2818f8c1b2078fb9a5cac2c35a1cb23c19ec945180e3d4adcf86d262", "span.kind": "consumer" }, "metrics": { @@ -157,8 +162,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 1700750, - "start": 1758101772686504674 + "duration": 1427916, + "start": 1758616898634636673 }, { "name": "JobSupervisor._get_driver_runtime_env", @@ -171,17 +176,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "16f7f8933f39dc2e29ba982e01000000", + "ray.actor_id": "6c827795c460cbaa12a86c2f01000000", "ray.actor_method.args": "(False,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2435", - "ray.submission_id": "raysubmit_m5LKvhywLHpUncAU", - "ray.task_id": "3d3e27c54ed1f5cf16f7f8933f39dc2e29ba982e01000000", - "ray.worker_id": "51d264fc205789361ddca9db9080d0ed0d636005f5855099cf3d35d2", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2420", + "ray.submission_id": "raysubmit_MRrmPyZ1mnPbDUGD", + "ray.task_id": "465c0fb8d6cb3cdc6c827795c460cbaa12a86c2f01000000", + "ray.worker_id": "2818f8c1b2078fb9a5cac2c35a1cb23c19ec945180e3d4adcf86d262", "span.kind": "consumer" }, "metrics": { @@ -190,8 +194,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 170583, - "start": 1758101772688010008 + "duration": 53625, + "start": 1758616898635985714 }, { "name": "exec nested_tasks.py", @@ -204,15 +208,14 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "16f7f8933f39dc2e29ba982e01000000", + "ray.actor_id": "6c827795c460cbaa12a86c2f01000000", "ray.job_id": "01000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2435", - "ray.submission_id": "raysubmit_m5LKvhywLHpUncAU", - "ray.task_id": "3d3e27c54ed1f5cf16f7f8933f39dc2e29ba982e01000000", - "ray.worker_id": "51d264fc205789361ddca9db9080d0ed0d636005f5855099cf3d35d2", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2420", + "ray.submission_id": "raysubmit_MRrmPyZ1mnPbDUGD", + "ray.task_id": "465c0fb8d6cb3cdc6c827795c460cbaa12a86c2f01000000", + "ray.worker_id": "2818f8c1b2078fb9a5cac2c35a1cb23c19ec945180e3d4adcf86d262", "span.kind": "consumer" }, "metrics": { @@ -221,8 +224,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 406791, - "start": 1758101772688363133 + "duration": 438625, + "start": 1758616898636192339 }, { "name": "__main__.submit_addition_task.remote()", @@ -235,23 +238,22 @@ "error": 0, "meta": { "_dd.base_service": "project", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca810b00000000", - "_dd.parent_id": "5029c8c0f2e77838", + "_dd.p.tid": "68d25d4100000000", + "_dd.parent_id": "861b61e291a26896", "component": "ray", "language": "python", "ray.job_id": "05000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2487", - "ray.submission_id": "raysubmit_m5LKvhywLHpUncAU", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2470", + "ray.submission_id": "raysubmit_MRrmPyZ1mnPbDUGD", "ray.task.args": "(2,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.worker_id": "05000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "0eadd41094174d9eb94d6f7d716efddc", + "runtime-id": "3bb0feb04fe3474582572fbd4dfb1f31", "span.kind": "producer", - "traceparent": "00-68ca810b0000000089038dddd433fa36-5029c8c0f2e77838-00", - "tracestate": "dd=p:5029c8c0f2e77838;s:0" + "traceparent": "00-68d25d4100000000e398499a0c4c8df6-861b61e291a26896-00", + "tracestate": "dd=p:861b61e291a26896;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -260,10 +262,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2487 + "process_id": 2470 }, - "duration": 3448250, - "start": 1758101773286245258 + "duration": 3544833, + "start": 1758616899198718923 }, { "name": "__main__.submit_addition_task", @@ -276,24 +278,23 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca810b00000000", - "_dd.parent_id": "a22d77bdf3b00237", + "_dd.p.tid": "68d25d4100000000", + "_dd.parent_id": "f54228293ccaed10", "component": "ray", "language": "python", "ray.job_id": "05000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2534", - "ray.submission_id": "raysubmit_m5LKvhywLHpUncAU", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2516", + "ray.submission_id": "raysubmit_MRrmPyZ1mnPbDUGD", "ray.task.args": "(2,)", "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.task_id": "3ca0590f168eaec5ffffffffffffffffffffffff05000000", - "ray.worker_id": "08d711d968b8fc8284a763b4df25fd38f08d9472582d3571afacf634", - "runtime-id": "3de007e640864b999a1d000d8b000439", + "ray.worker_id": "3408ad6c39a4e7ed64c8a37788cec34c10c3050af1029beeb850a5fa", + "runtime-id": "6ae8d73f510d4887bf8fdc17a394be11", "span.kind": "consumer", - "traceparent": "00-68ca810b0000000089038dddd433fa36-a22d77bdf3b00237-00", - "tracestate": "dd=p:a22d77bdf3b00237;s:0" + "traceparent": "00-68d25d4100000000e398499a0c4c8df6-f54228293ccaed10-00", + "tracestate": "dd=p:f54228293ccaed10;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -302,10 +303,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2534 + "process_id": 2516 }, - "duration": 1668333500, - "start": 1758101774123770717 + "duration": 1643431417, + "start": 1758616899985191090 }, { "name": "__main__.add_one.remote()", @@ -318,17 +319,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", "component": "ray", "ray.job_id": "05000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2534", - "ray.submission_id": "raysubmit_m5LKvhywLHpUncAU", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2516", + "ray.submission_id": "raysubmit_MRrmPyZ1mnPbDUGD", "ray.task.args": "(2,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.task_id": "3ca0590f168eaec5ffffffffffffffffffffffff05000000", - "ray.worker_id": "08d711d968b8fc8284a763b4df25fd38f08d9472582d3571afacf634", + "ray.worker_id": "3408ad6c39a4e7ed64c8a37788cec34c10c3050af1029beeb850a5fa", "span.kind": "producer" }, "metrics": { @@ -337,8 +337,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 1227208, - "start": 1758101774124064050 + "duration": 1172250, + "start": 1758616899985438632 }, { "name": "__main__.add_one", @@ -351,24 +351,23 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca810b00000000", - "_dd.parent_id": "b131f64ad25b1805", + "_dd.p.tid": "68d25d4100000000", + "_dd.parent_id": "d9783c789dcecc36", "component": "ray", "language": "python", "ray.job_id": "05000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2579", - "ray.submission_id": "raysubmit_m5LKvhywLHpUncAU", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2562", + "ray.submission_id": "raysubmit_MRrmPyZ1mnPbDUGD", "ray.task.args": "(2,)", "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.task_id": "079c89e8658fa36bffffffffffffffffffffffff05000000", - "ray.worker_id": "d8eb7f95da840c7636809435702e5b4c31575c65d21511a1f46da3b1", - "runtime-id": "053735cec4e440fa8c90c27b577ea53d", + "ray.worker_id": "785d71cef3d760e029ab6cc94197379e20b4fcfe9bc85c69d0e355a5", + "runtime-id": "0990e5d24fd54878a88df0bfa300ff85", "span.kind": "consumer", - "traceparent": "00-68ca810b0000000089038dddd433fa36-b131f64ad25b1805-00", - "tracestate": "dd=p:b131f64ad25b1805;s:0" + "traceparent": "00-68d25d4100000000e398499a0c4c8df6-d9783c789dcecc36-00", + "tracestate": "dd=p:d9783c789dcecc36;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -377,10 +376,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2579 + "process_id": 2562 }, - "duration": 244500, - "start": 1758101775777518717 + "duration": 230000, + "start": 1758616901618875174 }, { "name": "__main__.add_one.remote()", @@ -393,17 +392,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", "component": "ray", "ray.job_id": "05000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2534", - "ray.submission_id": "raysubmit_m5LKvhywLHpUncAU", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2516", + "ray.submission_id": "raysubmit_MRrmPyZ1mnPbDUGD", "ray.task.args": "(3,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.task_id": "3ca0590f168eaec5ffffffffffffffffffffffff05000000", - "ray.worker_id": "08d711d968b8fc8284a763b4df25fd38f08d9472582d3571afacf634", + "ray.worker_id": "3408ad6c39a4e7ed64c8a37788cec34c10c3050af1029beeb850a5fa", "span.kind": "producer" }, "metrics": { @@ -412,8 +410,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 116959, - "start": 1758101774125317633 + "duration": 134500, + "start": 1758616899986635757 }, { "name": "__main__.add_one", @@ -426,24 +424,23 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca810b00000000", - "_dd.parent_id": "fed4e6c02dda2adb", + "_dd.p.tid": "68d25d4100000000", + "_dd.parent_id": "02a38fb8868d9500", "component": "ray", "language": "python", "ray.job_id": "05000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2580", - "ray.submission_id": "raysubmit_m5LKvhywLHpUncAU", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2560", + "ray.submission_id": "raysubmit_MRrmPyZ1mnPbDUGD", "ray.task.args": "(3,)", "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.task_id": "cc483212b2c8f53effffffffffffffffffffffff05000000", - "ray.worker_id": "c626af63b4aa3988f5f0f98774d07f2585ee3492e686e877b6a37696", - "runtime-id": "6ee42f0ac47e4fb5acb86d3581331fd1", + "ray.worker_id": "ed12a9b3d9d77398dd7cee5be0e3909408513e92c01621f857f8f537", + "runtime-id": "01dbfdd3c31440df9aca517151cb80a2", "span.kind": "consumer", - "traceparent": "00-68ca810b0000000089038dddd433fa36-fed4e6c02dda2adb-00", - "tracestate": "dd=p:fed4e6c02dda2adb;s:0" + "traceparent": "00-68d25d4100000000e398499a0c4c8df6-02a38fb8868d9500-00", + "tracestate": "dd=p:02a38fb8868d9500;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -452,10 +449,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2580 + "process_id": 2560 }, - "duration": 240250, - "start": 1758101775788897051 + "duration": 232500, + "start": 1758616901614971591 }, { "name": "__main__.add_one.remote()", @@ -468,17 +465,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", "component": "ray", "ray.job_id": "05000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2534", - "ray.submission_id": "raysubmit_m5LKvhywLHpUncAU", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2516", + "ray.submission_id": "raysubmit_MRrmPyZ1mnPbDUGD", "ray.task.args": "(4,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.task_id": "3ca0590f168eaec5ffffffffffffffffffffffff05000000", - "ray.worker_id": "08d711d968b8fc8284a763b4df25fd38f08d9472582d3571afacf634", + "ray.worker_id": "3408ad6c39a4e7ed64c8a37788cec34c10c3050af1029beeb850a5fa", "span.kind": "producer" }, "metrics": { @@ -487,8 +483,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 107250, - "start": 1758101774125453717 + "duration": 98250, + "start": 1758616899986784840 }, { "name": "__main__.add_one", @@ -501,24 +497,23 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca810b00000000", - "_dd.parent_id": "753b9c1653ce93c7", + "_dd.p.tid": "68d25d4100000000", + "_dd.parent_id": "53196658050078d1", "component": "ray", "language": "python", "ray.job_id": "05000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2578", - "ray.submission_id": "raysubmit_m5LKvhywLHpUncAU", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2561", + "ray.submission_id": "raysubmit_MRrmPyZ1mnPbDUGD", "ray.task.args": "(4,)", "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.task_id": "abe71a0435f88aceffffffffffffffffffffffff05000000", - "ray.worker_id": "c7c2feda958f7ec645fa486a8ead2aafb8462af4b9fd6dc1da678925", - "runtime-id": "f6799fd220f04ae5ba49b7ad2ee0cd47", + "ray.worker_id": "da0308fe4056dcaa94dcea82585a5dcc3ed60594e99c1482b0b3f379", + "runtime-id": "6322beb2e15948f9a401a604f9cc8fab", "span.kind": "consumer", - "traceparent": "00-68ca810b0000000089038dddd433fa36-753b9c1653ce93c7-00", - "tracestate": "dd=p:753b9c1653ce93c7;s:0" + "traceparent": "00-68d25d4100000000e398499a0c4c8df6-53196658050078d1-00", + "tracestate": "dd=p:53196658050078d1;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -527,8 +522,8 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2578 + "process_id": 2561 }, - "duration": 254667, - "start": 1758101775779806342 + "duration": 209917, + "start": 1758616901626046799 }]] diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_actor.json b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_actor.json index 1d81e9fd33c..0a8b888d611 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_actor.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_actor.json @@ -12,13 +12,17 @@ "_dd.base_service": "ray.dashboard", "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68ca811400000000", + "_dd.p.tid": "68d25d4a00000000", "component": "ray", "language": "python", "ray.job.message": "Job finished successfully.", "ray.job.status": "SUCCEEDED", - "ray.submission_id": "raysubmit_gBAZLY4iRuFJiY4b", - "runtime-id": "6cec296b9ec54202916b51bc4ab5e15c" + "ray.job_id": "01000000", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1045", + "ray.submission_id": "raysubmit_S6naDDSVGHHCnQQb", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "11b30a8c1d714183b0fea7bbd9410a29" }, "metrics": { "_dd.djm.enabled": 1, @@ -27,10 +31,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1047 + "process_id": 1045 }, - "duration": 2850963543, - "start": 1758101780441330720 + "duration": 2827540126, + "start": 1758616906363631260 }, { "name": "ray.job.submit", @@ -43,9 +47,13 @@ "error": 0, "meta": { "_dd.base_service": "ray.dashboard", - "_dd.hostname": "docker-desktop", "component": "ray", "ray.job.submit_status": "success", + "ray.job_id": "01000000", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1045", + "ray.submission_id": "raysubmit_S6naDDSVGHHCnQQb", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "producer" }, "metrics": { @@ -54,8 +62,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 37375, - "start": 1758101780441462511 + "duration": 54375, + "start": 1758616906363849343 }, { "name": "JobSupervisor.run.remote()", @@ -68,13 +76,12 @@ "error": 0, "meta": { "_dd.base_service": "ray.dashboard", - "_dd.hostname": "docker-desktop", "component": "ray", "ray.actor_method.args": "[]", "ray.actor_method.kwargs": "{'_start_signal_actor': None, 'resources_specified': False}", "ray.job_id": "01000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "1047", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1045", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "producer" }, @@ -84,8 +91,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 349125, - "start": 1758101780445011345 + "duration": 537583, + "start": 1758616906367202010 }, { "name": "JobSupervisor.run", @@ -98,22 +105,21 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca811400000000", - "_dd.parent_id": "f4920d99ac531ab2", + "_dd.p.tid": "68d25d4a00000000", + "_dd.parent_id": "22d2ac415cb168cb", "component": "ray", "language": "python", - "ray.actor_id": "def867962d35f6849c2bf05d01000000", + "ray.actor_id": "47e5b80c6113d6759acab56d01000000", "ray.job_id": "01000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2738", - "ray.submission_id": "raysubmit_gBAZLY4iRuFJiY4b", - "ray.task_id": "79cc316456d39201def867962d35f6849c2bf05d01000000", - "ray.worker_id": "5ae2a0382860cfe1ecd1c8d594dbd4d5cb753f48459f288f42f9597b", - "runtime-id": "6758722b5b7d4e6b8028ab3cb04c0394", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2720", + "ray.submission_id": "raysubmit_S6naDDSVGHHCnQQb", + "ray.task_id": "a631fe8d231813bf47e5b80c6113d6759acab56d01000000", + "ray.worker_id": "9a5bcd80c26b89d8c3a4932eebd3471d5a6a3f5439cf23ecef51ab7f", + "runtime-id": "74bac778488e473baeced804667e1ebe", "span.kind": "consumer", - "traceparent": "00-68ca8114000000007840aeb2b1cce4d1-f4920d99ac531ab2-00", - "tracestate": "dd=p:f4920d99ac531ab2" + "traceparent": "00-68d25d4a00000000993c2ff767e418ea-22d2ac415cb168cb-00", + "tracestate": "dd=p:22d2ac415cb168cb" }, "metrics": { "_dd.djm.enabled": 1, @@ -122,10 +128,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2738 + "process_id": 2720 }, - "duration": 1725773042, - "start": 1758101781276897262 + "duration": 1921546085, + "start": 1758616907179738218 }, { "name": "JobSupervisor._get_driver_env_vars", @@ -138,17 +144,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "def867962d35f6849c2bf05d01000000", + "ray.actor_id": "47e5b80c6113d6759acab56d01000000", "ray.actor_method.args": "(False,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2738", - "ray.submission_id": "raysubmit_gBAZLY4iRuFJiY4b", - "ray.task_id": "79cc316456d39201def867962d35f6849c2bf05d01000000", - "ray.worker_id": "5ae2a0382860cfe1ecd1c8d594dbd4d5cb753f48459f288f42f9597b", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2720", + "ray.submission_id": "raysubmit_S6naDDSVGHHCnQQb", + "ray.task_id": "a631fe8d231813bf47e5b80c6113d6759acab56d01000000", + "ray.worker_id": "9a5bcd80c26b89d8c3a4932eebd3471d5a6a3f5439cf23ecef51ab7f", "span.kind": "consumer" }, "metrics": { @@ -157,8 +162,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 1671750, - "start": 1758101781278300887 + "duration": 1540250, + "start": 1758616907181211343 }, { "name": "JobSupervisor._get_driver_runtime_env", @@ -171,17 +176,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "def867962d35f6849c2bf05d01000000", + "ray.actor_id": "47e5b80c6113d6759acab56d01000000", "ray.actor_method.args": "(False,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2738", - "ray.submission_id": "raysubmit_gBAZLY4iRuFJiY4b", - "ray.task_id": "79cc316456d39201def867962d35f6849c2bf05d01000000", - "ray.worker_id": "5ae2a0382860cfe1ecd1c8d594dbd4d5cb753f48459f288f42f9597b", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2720", + "ray.submission_id": "raysubmit_S6naDDSVGHHCnQQb", + "ray.task_id": "a631fe8d231813bf47e5b80c6113d6759acab56d01000000", + "ray.worker_id": "9a5bcd80c26b89d8c3a4932eebd3471d5a6a3f5439cf23ecef51ab7f", "span.kind": "consumer" }, "metrics": { @@ -190,8 +194,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 145375, - "start": 1758101781279802762 + "duration": 58375, + "start": 1758616907182667552 }, { "name": "exec simple_actor.py", @@ -204,15 +208,14 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "def867962d35f6849c2bf05d01000000", + "ray.actor_id": "47e5b80c6113d6759acab56d01000000", "ray.job_id": "01000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2738", - "ray.submission_id": "raysubmit_gBAZLY4iRuFJiY4b", - "ray.task_id": "79cc316456d39201def867962d35f6849c2bf05d01000000", - "ray.worker_id": "5ae2a0382860cfe1ecd1c8d594dbd4d5cb753f48459f288f42f9597b", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2720", + "ray.submission_id": "raysubmit_S6naDDSVGHHCnQQb", + "ray.task_id": "a631fe8d231813bf47e5b80c6113d6759acab56d01000000", + "ray.worker_id": "9a5bcd80c26b89d8c3a4932eebd3471d5a6a3f5439cf23ecef51ab7f", "span.kind": "consumer" }, "metrics": { @@ -221,8 +224,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 426417, - "start": 1758101781280142303 + "duration": 451916, + "start": 1758616907182887802 }, { "name": "Counter.increment_get_and_double.remote()", @@ -235,22 +238,21 @@ "error": 0, "meta": { "_dd.base_service": "project", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca811400000000", - "_dd.parent_id": "a76d70bcb72f2617", + "_dd.p.tid": "68d25d4a00000000", + "_dd.parent_id": "812bf9752759c7e7", "component": "ray", "language": "python", "ray.actor_method.args": "[]", "ray.actor_method.kwargs": "{}", "ray.job_id": "06000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2790", - "ray.submission_id": "raysubmit_gBAZLY4iRuFJiY4b", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2771", + "ray.submission_id": "raysubmit_S6naDDSVGHHCnQQb", "ray.worker_id": "06000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "adbe0c3484e3462b9c91bfaf29d116d2", + "runtime-id": "40fbe965ed2047e1bcf267c1ad2e6ba3", "span.kind": "producer", - "traceparent": "00-68ca8114000000007840aeb2b1cce4d1-a76d70bcb72f2617-00", - "tracestate": "dd=p:a76d70bcb72f2617;s:0" + "traceparent": "00-68d25d4a00000000993c2ff767e418ea-812bf9752759c7e7-00", + "tracestate": "dd=p:812bf9752759c7e7;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -259,10 +261,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2790 + "process_id": 2771 }, - "duration": 339917, - "start": 1758101781882572595 + "duration": 342000, + "start": 1758616907756525677 }, { "name": "Counter.increment_get_and_double", @@ -275,24 +277,23 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca811400000000", - "_dd.parent_id": "e9f474663c18e6fc", + "_dd.p.tid": "68d25d4a00000000", + "_dd.parent_id": "ea5583e677d99184", "component": "ray", "language": "python", - "ray.actor_id": "e58ff9e6d482e7f8387e1c8906000000", + "ray.actor_id": "3d2d38c94b835bb9fea6375b06000000", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", "ray.job_id": "06000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2836", - "ray.submission_id": "raysubmit_gBAZLY4iRuFJiY4b", - "ray.task_id": "8a2dc005c3f797b8e58ff9e6d482e7f8387e1c8906000000", - "ray.worker_id": "8b4db7803c6e7f47224d527fe5cd838bcd3bf7027cafb8e1399de346", - "runtime-id": "009c1dd525f149e5969c42ab1886ce46", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2817", + "ray.submission_id": "raysubmit_S6naDDSVGHHCnQQb", + "ray.task_id": "8a2dc005c3f797b83d2d38c94b835bb9fea6375b06000000", + "ray.worker_id": "237d5ab1ecc26355b2056ea5deab23ba4aa40fbb041d34ccc1a8196c", + "runtime-id": "4ef9496db036425394e16fc4fae6a6a3", "span.kind": "consumer", - "traceparent": "00-68ca8114000000007840aeb2b1cce4d1-e9f474663c18e6fc-00", - "tracestate": "dd=p:e9f474663c18e6fc;s:0" + "traceparent": "00-68d25d4a00000000993c2ff767e418ea-ea5583e677d99184-00", + "tracestate": "dd=p:ea5583e677d99184;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -301,10 +302,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2836 + "process_id": 2817 }, - "duration": 816334, - "start": 1758101782711930262 + "duration": 330458, + "start": 1758616908543658511 }, { "name": "Counter.increment_and_get", @@ -317,17 +318,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "e58ff9e6d482e7f8387e1c8906000000", + "ray.actor_id": "3d2d38c94b835bb9fea6375b06000000", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", "ray.job_id": "06000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2836", - "ray.submission_id": "raysubmit_gBAZLY4iRuFJiY4b", - "ray.task_id": "8a2dc005c3f797b8e58ff9e6d482e7f8387e1c8906000000", - "ray.worker_id": "8b4db7803c6e7f47224d527fe5cd838bcd3bf7027cafb8e1399de346", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2817", + "ray.submission_id": "raysubmit_S6naDDSVGHHCnQQb", + "ray.task_id": "8a2dc005c3f797b83d2d38c94b835bb9fea6375b06000000", + "ray.worker_id": "237d5ab1ecc26355b2056ea5deab23ba4aa40fbb041d34ccc1a8196c", "span.kind": "consumer" }, "metrics": { @@ -336,8 +336,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 490458, - "start": 1758101782712249346 + "duration": 100542, + "start": 1758616908543883719 }, { "name": "Counter.increment", @@ -350,17 +350,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "e58ff9e6d482e7f8387e1c8906000000", + "ray.actor_id": "3d2d38c94b835bb9fea6375b06000000", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", "ray.job_id": "06000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2836", - "ray.submission_id": "raysubmit_gBAZLY4iRuFJiY4b", - "ray.task_id": "8a2dc005c3f797b8e58ff9e6d482e7f8387e1c8906000000", - "ray.worker_id": "8b4db7803c6e7f47224d527fe5cd838bcd3bf7027cafb8e1399de346", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2817", + "ray.submission_id": "raysubmit_S6naDDSVGHHCnQQb", + "ray.task_id": "8a2dc005c3f797b83d2d38c94b835bb9fea6375b06000000", + "ray.worker_id": "237d5ab1ecc26355b2056ea5deab23ba4aa40fbb041d34ccc1a8196c", "span.kind": "consumer" }, "metrics": { @@ -369,8 +368,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 156125, - "start": 1758101782712426429 + "duration": 20333, + "start": 1758616908543924844 }, { "name": "Counter.get_value", @@ -383,17 +382,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "e58ff9e6d482e7f8387e1c8906000000", + "ray.actor_id": "3d2d38c94b835bb9fea6375b06000000", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", "ray.job_id": "06000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2836", - "ray.submission_id": "raysubmit_gBAZLY4iRuFJiY4b", - "ray.task_id": "8a2dc005c3f797b8e58ff9e6d482e7f8387e1c8906000000", - "ray.worker_id": "8b4db7803c6e7f47224d527fe5cd838bcd3bf7027cafb8e1399de346", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2817", + "ray.submission_id": "raysubmit_S6naDDSVGHHCnQQb", + "ray.task_id": "8a2dc005c3f797b83d2d38c94b835bb9fea6375b06000000", + "ray.worker_id": "237d5ab1ecc26355b2056ea5deab23ba4aa40fbb041d34ccc1a8196c", "span.kind": "consumer" }, "metrics": { @@ -402,6 +400,6 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 118667, - "start": 1758101782712606679 + "duration": 15542, + "start": 1758616908543961094 }]] diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_task.json b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_task.json index 7cae2c03b51..f0c233e78a0 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_task.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_task.json @@ -12,13 +12,17 @@ "_dd.base_service": "ray.dashboard", "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68ca811b00000000", + "_dd.p.tid": "68d25d5000000000", "component": "ray", "language": "python", "ray.job.message": "Job finished successfully.", "ray.job.status": "SUCCEEDED", - "ray.submission_id": "raysubmit_QxnykHHjqCxNLyVB", - "runtime-id": "6cec296b9ec54202916b51bc4ab5e15c" + "ray.job_id": "01000000", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1045", + "ray.submission_id": "raysubmit_Fe3SwFNH8BaAmtAb", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "11b30a8c1d714183b0fea7bbd9410a29" }, "metrics": { "_dd.djm.enabled": 1, @@ -27,10 +31,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1047 + "process_id": 1045 }, - "duration": 3870065502, - "start": 1758101787045664875 + "duration": 3812865071, + "start": 1758616912937938513 }, { "name": "ray.job.submit", @@ -43,9 +47,13 @@ "error": 0, "meta": { "_dd.base_service": "ray.dashboard", - "_dd.hostname": "docker-desktop", "component": "ray", "ray.job.submit_status": "success", + "ray.job_id": "01000000", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1045", + "ray.submission_id": "raysubmit_Fe3SwFNH8BaAmtAb", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "producer" }, "metrics": { @@ -54,8 +62,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 36875, - "start": 1758101787045814500 + "duration": 59042, + "start": 1758616912938167804 }, { "name": "JobSupervisor.run.remote()", @@ -68,13 +76,12 @@ "error": 0, "meta": { "_dd.base_service": "ray.dashboard", - "_dd.hostname": "docker-desktop", "component": "ray", "ray.actor_method.args": "[]", "ray.actor_method.kwargs": "{'_start_signal_actor': None, 'resources_specified': False}", "ray.job_id": "01000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "1047", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1045", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "producer" }, @@ -84,8 +91,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 337875, - "start": 1758101787049894750 + "duration": 275417, + "start": 1758616912941640804 }, { "name": "JobSupervisor.run", @@ -98,22 +105,21 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca811b00000000", - "_dd.parent_id": "8c93587a30479d1a", + "_dd.p.tid": "68d25d5000000000", + "_dd.parent_id": "807f62fbe472f77f", "component": "ray", "language": "python", - "ray.actor_id": "48fcb011b8e05e59922d3f5a01000000", + "ray.actor_id": "bb8d8d62cb5e3722e217eaa101000000", "ray.job_id": "01000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2908", - "ray.submission_id": "raysubmit_QxnykHHjqCxNLyVB", - "ray.task_id": "aa3d5d11e415fe8848fcb011b8e05e59922d3f5a01000000", - "ray.worker_id": "05fb358bb0df0975f75843d8619436257f5a7d3637526b49ac41b7dd", - "runtime-id": "044b3ddecced497c9baeaaa7aa5f131e", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2886", + "ray.submission_id": "raysubmit_Fe3SwFNH8BaAmtAb", + "ray.task_id": "ae46b8beecd25f3abb8d8d62cb5e3722e217eaa101000000", + "ray.worker_id": "76e2549aa91fb784cb5236f605b3f843b0b6a3b1257e92b5b1ac0dac", + "runtime-id": "59c839a7262f4e819e56a6aecf7939de", "span.kind": "consumer", - "traceparent": "00-68ca811b00000000469221fae7e061af-8c93587a30479d1a-00", - "tracestate": "dd=p:8c93587a30479d1a" + "traceparent": "00-68d25d5000000000dae5e0c882cbe424-807f62fbe472f77f-00", + "tracestate": "dd=p:807f62fbe472f77f" }, "metrics": { "_dd.djm.enabled": 1, @@ -122,10 +128,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2908 + "process_id": 2886 }, - "duration": 2936854668, - "start": 1758101787903118084 + "duration": 2839360904, + "start": 1758616913733301638 }, { "name": "JobSupervisor._get_driver_env_vars", @@ -138,17 +144,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "48fcb011b8e05e59922d3f5a01000000", + "ray.actor_id": "bb8d8d62cb5e3722e217eaa101000000", "ray.actor_method.args": "(False,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2908", - "ray.submission_id": "raysubmit_QxnykHHjqCxNLyVB", - "ray.task_id": "aa3d5d11e415fe8848fcb011b8e05e59922d3f5a01000000", - "ray.worker_id": "05fb358bb0df0975f75843d8619436257f5a7d3637526b49ac41b7dd", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2886", + "ray.submission_id": "raysubmit_Fe3SwFNH8BaAmtAb", + "ray.task_id": "ae46b8beecd25f3abb8d8d62cb5e3722e217eaa101000000", + "ray.worker_id": "76e2549aa91fb784cb5236f605b3f843b0b6a3b1257e92b5b1ac0dac", "span.kind": "consumer" }, "metrics": { @@ -157,8 +162,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 2270750, - "start": 1758101787904858584 + "duration": 1506875, + "start": 1758616913734749888 }, { "name": "JobSupervisor._get_driver_runtime_env", @@ -171,17 +176,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "48fcb011b8e05e59922d3f5a01000000", + "ray.actor_id": "bb8d8d62cb5e3722e217eaa101000000", "ray.actor_method.args": "(False,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2908", - "ray.submission_id": "raysubmit_QxnykHHjqCxNLyVB", - "ray.task_id": "aa3d5d11e415fe8848fcb011b8e05e59922d3f5a01000000", - "ray.worker_id": "05fb358bb0df0975f75843d8619436257f5a7d3637526b49ac41b7dd", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2886", + "ray.submission_id": "raysubmit_Fe3SwFNH8BaAmtAb", + "ray.task_id": "ae46b8beecd25f3abb8d8d62cb5e3722e217eaa101000000", + "ray.worker_id": "76e2549aa91fb784cb5236f605b3f843b0b6a3b1257e92b5b1ac0dac", "span.kind": "consumer" }, "metrics": { @@ -190,8 +194,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 276958, - "start": 1758101787906798876 + "duration": 46292, + "start": 1758616913736187763 }, { "name": "exec simple_task.py", @@ -204,15 +208,14 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "48fcb011b8e05e59922d3f5a01000000", + "ray.actor_id": "bb8d8d62cb5e3722e217eaa101000000", "ray.job_id": "01000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2908", - "ray.submission_id": "raysubmit_QxnykHHjqCxNLyVB", - "ray.task_id": "aa3d5d11e415fe8848fcb011b8e05e59922d3f5a01000000", - "ray.worker_id": "05fb358bb0df0975f75843d8619436257f5a7d3637526b49ac41b7dd", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2886", + "ray.submission_id": "raysubmit_Fe3SwFNH8BaAmtAb", + "ray.task_id": "ae46b8beecd25f3abb8d8d62cb5e3722e217eaa101000000", + "ray.worker_id": "76e2549aa91fb784cb5236f605b3f843b0b6a3b1257e92b5b1ac0dac", "span.kind": "consumer" }, "metrics": { @@ -221,8 +224,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 453125, - "start": 1758101787907362792 + "duration": 414417, + "start": 1758616913736378846 }, { "name": "__main__.add_one.remote()", @@ -235,23 +238,22 @@ "error": 0, "meta": { "_dd.base_service": "project", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca811b00000000", - "_dd.parent_id": "fb6e4faa1c5b6042", + "_dd.p.tid": "68d25d5000000000", + "_dd.parent_id": "c1c03cb05fc2cad7", "component": "ray", "language": "python", "ray.job_id": "07000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2960", - "ray.submission_id": "raysubmit_QxnykHHjqCxNLyVB", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2936", + "ray.submission_id": "raysubmit_Fe3SwFNH8BaAmtAb", "ray.task.args": "(0,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.worker_id": "07000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "255a8c2d0dcd4e63a95f265c35c46945", + "runtime-id": "2c92310d1ab54db8872e8a64a34db191", "span.kind": "producer", - "traceparent": "00-68ca811b00000000469221fae7e061af-fb6e4faa1c5b6042-00", - "tracestate": "dd=p:fb6e4faa1c5b6042;s:0" + "traceparent": "00-68d25d5000000000dae5e0c882cbe424-c1c03cb05fc2cad7-00", + "tracestate": "dd=p:c1c03cb05fc2cad7;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -260,10 +262,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2960 + "process_id": 2936 }, - "duration": 3222750, - "start": 1758101788605434876 + "duration": 3155791, + "start": 1758616914362524722 }, { "name": "__main__.add_one", @@ -276,24 +278,23 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca811b00000000", - "_dd.parent_id": "0a0fe8184d6a3ae6", + "_dd.p.tid": "68d25d5000000000", + "_dd.parent_id": "1d72100e6ad40205", "component": "ray", "language": "python", "ray.job_id": "07000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "3009", - "ray.submission_id": "raysubmit_QxnykHHjqCxNLyVB", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2982", + "ray.submission_id": "raysubmit_Fe3SwFNH8BaAmtAb", "ray.task.args": "(0,)", "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.task_id": "d2b4e3e4a6f1ddc5ffffffffffffffffffffffff07000000", - "ray.worker_id": "60b8e1428ea4a8c455ba2d83faa063ee5924260cdb6942edb885756c", - "runtime-id": "cc9d1f54be054360ae7097c79efd07d7", + "ray.worker_id": "f987678ddc6424d17588e585b225d4eb899fda1af80ba88ee936c842", + "runtime-id": "bfb9ed05fc074085a064924427db77e3", "span.kind": "consumer", - "traceparent": "00-68ca811b00000000469221fae7e061af-0a0fe8184d6a3ae6-00", - "tracestate": "dd=p:0a0fe8184d6a3ae6;s:0" + "traceparent": "00-68d25d5000000000dae5e0c882cbe424-1d72100e6ad40205-00", + "tracestate": "dd=p:1d72100e6ad40205;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -302,10 +303,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 3009 + "process_id": 2982 }, - "duration": 266000, - "start": 1758101790372952960 + "duration": 227125, + "start": 1758616916112301458 }, { "name": "__main__.add_one.remote()", @@ -318,23 +319,22 @@ "error": 0, "meta": { "_dd.base_service": "project", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca811b00000000", - "_dd.parent_id": "fb6e4faa1c5b6042", + "_dd.p.tid": "68d25d5000000000", + "_dd.parent_id": "c1c03cb05fc2cad7", "component": "ray", "language": "python", "ray.job_id": "07000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2960", - "ray.submission_id": "raysubmit_QxnykHHjqCxNLyVB", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2936", + "ray.submission_id": "raysubmit_Fe3SwFNH8BaAmtAb", "ray.task.args": "(1,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.worker_id": "07000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "255a8c2d0dcd4e63a95f265c35c46945", + "runtime-id": "2c92310d1ab54db8872e8a64a34db191", "span.kind": "producer", - "traceparent": "00-68ca811b00000000469221fae7e061af-fb6e4faa1c5b6042-00", - "tracestate": "dd=p:fb6e4faa1c5b6042;s:0" + "traceparent": "00-68d25d5000000000dae5e0c882cbe424-c1c03cb05fc2cad7-00", + "tracestate": "dd=p:c1c03cb05fc2cad7;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -343,10 +343,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2960 + "process_id": 2936 }, - "duration": 233791, - "start": 1758101788610806668 + "duration": 230625, + "start": 1758616914369015722 }, { "name": "__main__.add_one", @@ -359,24 +359,23 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca811b00000000", - "_dd.parent_id": "4ac7dc8a9053aa38", + "_dd.p.tid": "68d25d5000000000", + "_dd.parent_id": "7e50f3c7c005aa31", "component": "ray", "language": "python", "ray.job_id": "07000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "3007", - "ray.submission_id": "raysubmit_QxnykHHjqCxNLyVB", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2984", + "ray.submission_id": "raysubmit_Fe3SwFNH8BaAmtAb", "ray.task.args": "(1,)", "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.task_id": "11149dae5a34cd9affffffffffffffffffffffff07000000", - "ray.worker_id": "e37bb2b38206a7762d26117e5215846323f7b5c01136abd2985bb7bb", - "runtime-id": "20f82749dd8944a9baa068b2a32f4769", + "ray.worker_id": "cee4d7f8e89bcdb15ea8c5ad723a821d585301183a4de31f9454e2c7", + "runtime-id": "a2adddee1b7a46f6b59a78848bbeeb01", "span.kind": "consumer", - "traceparent": "00-68ca811b00000000469221fae7e061af-4ac7dc8a9053aa38-00", - "tracestate": "dd=p:4ac7dc8a9053aa38;s:0" + "traceparent": "00-68d25d5000000000dae5e0c882cbe424-7e50f3c7c005aa31-00", + "tracestate": "dd=p:7e50f3c7c005aa31;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -385,10 +384,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 3007 + "process_id": 2984 }, - "duration": 239208, - "start": 1758101790410238627 + "duration": 254083, + "start": 1758616916080776042 }, { "name": "__main__.add_one.remote()", @@ -401,23 +400,22 @@ "error": 0, "meta": { "_dd.base_service": "project", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca811b00000000", - "_dd.parent_id": "fb6e4faa1c5b6042", + "_dd.p.tid": "68d25d5000000000", + "_dd.parent_id": "c1c03cb05fc2cad7", "component": "ray", "language": "python", "ray.job_id": "07000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2960", - "ray.submission_id": "raysubmit_QxnykHHjqCxNLyVB", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2936", + "ray.submission_id": "raysubmit_Fe3SwFNH8BaAmtAb", "ray.task.args": "(2,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.worker_id": "07000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "255a8c2d0dcd4e63a95f265c35c46945", + "runtime-id": "2c92310d1ab54db8872e8a64a34db191", "span.kind": "producer", - "traceparent": "00-68ca811b00000000469221fae7e061af-fb6e4faa1c5b6042-00", - "tracestate": "dd=p:fb6e4faa1c5b6042;s:0" + "traceparent": "00-68d25d5000000000dae5e0c882cbe424-c1c03cb05fc2cad7-00", + "tracestate": "dd=p:c1c03cb05fc2cad7;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -426,10 +424,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2960 + "process_id": 2936 }, - "duration": 213125, - "start": 1758101788613216543 + "duration": 211750, + "start": 1758616914370494138 }, { "name": "__main__.add_one", @@ -442,24 +440,23 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca811b00000000", - "_dd.parent_id": "ffd2ec468bf9aa2d", + "_dd.p.tid": "68d25d5000000000", + "_dd.parent_id": "590330612e6f246c", "component": "ray", "language": "python", "ray.job_id": "07000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "3010", - "ray.submission_id": "raysubmit_QxnykHHjqCxNLyVB", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2983", + "ray.submission_id": "raysubmit_Fe3SwFNH8BaAmtAb", "ray.task.args": "(2,)", "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.task_id": "a363a5a94a784cb3ffffffffffffffffffffffff07000000", - "ray.worker_id": "22b5b763f4c2396c1f5a7a43d79483918baa923b2047e3db4d731557", - "runtime-id": "80e622ef56a44c1db4e7a5b20529d768", + "ray.worker_id": "cdc10b57145bbb27cb3826e7caeb1e37f0b341a19453e7df660bc4c1", + "runtime-id": "e8b72643a5544b83a3015aea5690093b", "span.kind": "consumer", - "traceparent": "00-68ca811b00000000469221fae7e061af-ffd2ec468bf9aa2d-00", - "tracestate": "dd=p:ffd2ec468bf9aa2d;s:0" + "traceparent": "00-68d25d5000000000dae5e0c882cbe424-590330612e6f246c-00", + "tracestate": "dd=p:590330612e6f246c;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -468,10 +465,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 3010 + "process_id": 2983 }, - "duration": 271459, - "start": 1758101790402524293 + "duration": 212792, + "start": 1758616916103834625 }, { "name": "__main__.add_one.remote()", @@ -484,23 +481,22 @@ "error": 0, "meta": { "_dd.base_service": "project", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca811b00000000", - "_dd.parent_id": "fb6e4faa1c5b6042", + "_dd.p.tid": "68d25d5000000000", + "_dd.parent_id": "c1c03cb05fc2cad7", "component": "ray", "language": "python", "ray.job_id": "07000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "2960", - "ray.submission_id": "raysubmit_QxnykHHjqCxNLyVB", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2936", + "ray.submission_id": "raysubmit_Fe3SwFNH8BaAmtAb", "ray.task.args": "(3,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.worker_id": "07000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "255a8c2d0dcd4e63a95f265c35c46945", + "runtime-id": "2c92310d1ab54db8872e8a64a34db191", "span.kind": "producer", - "traceparent": "00-68ca811b00000000469221fae7e061af-fb6e4faa1c5b6042-00", - "tracestate": "dd=p:fb6e4faa1c5b6042;s:0" + "traceparent": "00-68d25d5000000000dae5e0c882cbe424-c1c03cb05fc2cad7-00", + "tracestate": "dd=p:c1c03cb05fc2cad7;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -509,10 +505,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2960 + "process_id": 2936 }, - "duration": 165625, - "start": 1758101788614802376 + "duration": 197208, + "start": 1758616914372608847 }, { "name": "__main__.add_one", @@ -525,24 +521,23 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68ca811b00000000", - "_dd.parent_id": "2052ed665e804741", + "_dd.p.tid": "68d25d5000000000", + "_dd.parent_id": "69e914f59f74e0bb", "component": "ray", "language": "python", "ray.job_id": "07000000", - "ray.node_id": "78562b632e9e7fa2546f26171a5a0859929e0344100de9d84ff4dbb1", - "ray.pid": "3008", - "ray.submission_id": "raysubmit_QxnykHHjqCxNLyVB", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "2985", + "ray.submission_id": "raysubmit_Fe3SwFNH8BaAmtAb", "ray.task.args": "(3,)", "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.task_id": "b6fe777c23eaf580ffffffffffffffffffffffff07000000", - "ray.worker_id": "d7f25c6ba339fbc38c238a05c1b12f77a5d0258f0f60367bfc8e28f0", - "runtime-id": "a2962b8413b6426a82e0fb3cc62e052f", + "ray.worker_id": "0cbc2e92c88cc3409b31e719d687a95cba4f7ad745d13af985599d25", + "runtime-id": "f28792e41ccd44e0842819e1bbe0f8ef", "span.kind": "consumer", - "traceparent": "00-68ca811b00000000469221fae7e061af-2052ed665e804741-00", - "tracestate": "dd=p:2052ed665e804741;s:0" + "traceparent": "00-68d25d5000000000dae5e0c882cbe424-69e914f59f74e0bb-00", + "tracestate": "dd=p:69e914f59f74e0bb;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -551,8 +546,8 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 3008 + "process_id": 2985 }, - "duration": 265208, - "start": 1758101790425958585 + "duration": 229500, + "start": 1758616916086801458 }]] diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_wait.json b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_wait.json index 9bd629b9874..f916bab5acf 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_wait.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_wait.json @@ -12,13 +12,17 @@ "_dd.base_service": "ray.dashboard", "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68c867ae00000000", + "_dd.p.tid": "68d25d5700000000", "component": "ray", "language": "python", "ray.job.message": "Job finished successfully.", "ray.job.status": "SUCCEEDED", - "ray.submission_id": "raysubmit_adr9j9h8CKhLtJtU", - "runtime-id": "328d005437be4deb970109dba573c215" + "ray.job_id": "01000000", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1045", + "ray.submission_id": "raysubmit_rB8WFwngAc3Tyr6V", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "11b30a8c1d714183b0fea7bbd9410a29" }, "metrics": { "_dd.djm.enabled": 1, @@ -27,10 +31,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 16466 + "process_id": 1045 }, - "duration": 4442299252, - "start": 1757964206501230344 + "duration": 2832729334, + "start": 1758616919492580377 }, { "name": "ray.job.submit", @@ -43,9 +47,13 @@ "error": 0, "meta": { "_dd.base_service": "ray.dashboard", - "_dd.hostname": "docker-desktop", "component": "ray", "ray.job.submit_status": "success", + "ray.job_id": "01000000", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1045", + "ray.submission_id": "raysubmit_rB8WFwngAc3Tyr6V", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "producer" }, "metrics": { @@ -54,8 +62,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 74750, - "start": 1757964206501529511 + "duration": 57875, + "start": 1758616919492786668 }, { "name": "JobSupervisor.run.remote()", @@ -68,12 +76,12 @@ "error": 0, "meta": { "_dd.base_service": "ray.dashboard", - "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_method.args": "()", + "ray.actor_method.args": "[]", "ray.actor_method.kwargs": "{'_start_signal_actor': None, 'resources_specified': False}", "ray.job_id": "01000000", - "ray.node_id": "b29ad664db2c014f0f46d24ba3b6fc9dac0d19927d8cb38a0159bdb3", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "1045", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "producer" }, @@ -83,8 +91,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 624625, - "start": 1757964206541496386 + "duration": 292917, + "start": 1758616919496148668 }, { "name": "JobSupervisor.run", @@ -97,21 +105,21 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c867ae00000000", - "_dd.parent_id": "719ee915edd04442", + "_dd.p.tid": "68d25d5700000000", + "_dd.parent_id": "41e8078b254177d3", "component": "ray", "language": "python", - "ray.actor_id": "825747a54e996b6d697d01b501000000", + "ray.actor_id": "ea97038d6080355b2ed7418c01000000", "ray.job_id": "01000000", - "ray.node_id": "b29ad664db2c014f0f46d24ba3b6fc9dac0d19927d8cb38a0159bdb3", - "ray.submission_id": "raysubmit_adr9j9h8CKhLtJtU", - "ray.task_id": "16310a0f0a45af5c825747a54e996b6d697d01b501000000", - "ray.worker_id": "7acf16a50c99c146f9ce1f9a8b966382e85208b482eeda8022f1507f", - "runtime-id": "d91e2443ad6e45e9bc740c1374a9b8a7", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "3185", + "ray.submission_id": "raysubmit_rB8WFwngAc3Tyr6V", + "ray.task_id": "5168ff79929289e3ea97038d6080355b2ed7418c01000000", + "ray.worker_id": "5ddc998e2fb873a86718b2196144dba80763e6cadaecec51bab462c4", + "runtime-id": "556f77e54ee04dc7bfd61ff9338a79b9", "span.kind": "consumer", - "traceparent": "00-68c867ae000000004a30d8817e877e24-719ee915edd04442-00", - "tracestate": "dd=p:719ee915edd04442" + "traceparent": "00-68d25d570000000019a64e97fb8e1cdf-41e8078b254177d3-00", + "tracestate": "dd=p:41e8078b254177d3" }, "metrics": { "_dd.djm.enabled": 1, @@ -120,10 +128,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 17002 + "process_id": 3185 }, - "duration": 2907878709, - "start": 1757964207917623845 + "duration": 1924346085, + "start": 1758616920310308085 }, { "name": "JobSupervisor._get_driver_env_vars", @@ -136,16 +144,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "825747a54e996b6d697d01b501000000", + "ray.actor_id": "ea97038d6080355b2ed7418c01000000", "ray.actor_method.args": "(False,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "b29ad664db2c014f0f46d24ba3b6fc9dac0d19927d8cb38a0159bdb3", - "ray.submission_id": "raysubmit_adr9j9h8CKhLtJtU", - "ray.task_id": "16310a0f0a45af5c825747a54e996b6d697d01b501000000", - "ray.worker_id": "7acf16a50c99c146f9ce1f9a8b966382e85208b482eeda8022f1507f", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "3185", + "ray.submission_id": "raysubmit_rB8WFwngAc3Tyr6V", + "ray.task_id": "5168ff79929289e3ea97038d6080355b2ed7418c01000000", + "ray.worker_id": "5ddc998e2fb873a86718b2196144dba80763e6cadaecec51bab462c4", "span.kind": "consumer" }, "metrics": { @@ -154,8 +162,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 2430125, - "start": 1757964207919520136 + "duration": 1547709, + "start": 1758616920311501460 }, { "name": "JobSupervisor._get_driver_runtime_env", @@ -168,16 +176,16 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "825747a54e996b6d697d01b501000000", + "ray.actor_id": "ea97038d6080355b2ed7418c01000000", "ray.actor_method.args": "(False,)", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "b29ad664db2c014f0f46d24ba3b6fc9dac0d19927d8cb38a0159bdb3", - "ray.submission_id": "raysubmit_adr9j9h8CKhLtJtU", - "ray.task_id": "16310a0f0a45af5c825747a54e996b6d697d01b501000000", - "ray.worker_id": "7acf16a50c99c146f9ce1f9a8b966382e85208b482eeda8022f1507f", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "3185", + "ray.submission_id": "raysubmit_rB8WFwngAc3Tyr6V", + "ray.task_id": "5168ff79929289e3ea97038d6080355b2ed7418c01000000", + "ray.worker_id": "5ddc998e2fb873a86718b2196144dba80763e6cadaecec51bab462c4", "span.kind": "consumer" }, "metrics": { @@ -186,8 +194,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 260750, - "start": 1757964207921648928 + "duration": 44083, + "start": 1758616920312982919 }, { "name": "exec simple_wait.py", @@ -200,14 +208,14 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", "component": "ray", - "ray.actor_id": "825747a54e996b6d697d01b501000000", + "ray.actor_id": "ea97038d6080355b2ed7418c01000000", "ray.job_id": "01000000", - "ray.node_id": "b29ad664db2c014f0f46d24ba3b6fc9dac0d19927d8cb38a0159bdb3", - "ray.submission_id": "raysubmit_adr9j9h8CKhLtJtU", - "ray.task_id": "16310a0f0a45af5c825747a54e996b6d697d01b501000000", - "ray.worker_id": "7acf16a50c99c146f9ce1f9a8b966382e85208b482eeda8022f1507f", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "3185", + "ray.submission_id": "raysubmit_rB8WFwngAc3Tyr6V", + "ray.task_id": "5168ff79929289e3ea97038d6080355b2ed7418c01000000", + "ray.worker_id": "5ddc998e2fb873a86718b2196144dba80763e6cadaecec51bab462c4", "span.kind": "consumer" }, "metrics": { @@ -216,8 +224,8 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 800959, - "start": 1757964207922096761 + "duration": 430375, + "start": 1758616920313192085 }, { "name": "__main__.add_one.remote()", @@ -230,22 +238,22 @@ "error": 0, "meta": { "_dd.base_service": "project", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c867ae00000000", - "_dd.parent_id": "017ece9d9af38606", + "_dd.p.tid": "68d25d5700000000", + "_dd.parent_id": "7688553baccb85ef", "component": "ray", "language": "python", - "ray.job_id": "02000000", - "ray.node_id": "b29ad664db2c014f0f46d24ba3b6fc9dac0d19927d8cb38a0159bdb3", - "ray.submission_id": "raysubmit_adr9j9h8CKhLtJtU", + "ray.job_id": "08000000", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "3235", + "ray.submission_id": "raysubmit_rB8WFwngAc3Tyr6V", "ray.task.args": "(42,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", - "ray.worker_id": "02000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "c27f07b358824aeb915d3e69021dc59b", + "ray.worker_id": "08000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "43e237ebadfb41deaa49fad2747ef35f", "span.kind": "producer", - "traceparent": "00-68c867ae000000004a30d8817e877e24-017ece9d9af38606-00", - "tracestate": "dd=p:017ece9d9af38606;s:0" + "traceparent": "00-68d25d570000000019a64e97fb8e1cdf-7688553baccb85ef-00", + "tracestate": "dd=p:7688553baccb85ef;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -254,10 +262,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 17065 + "process_id": 3235 }, - "duration": 4914083, - "start": 1757964208740173387 + "duration": 2941167, + "start": 1758616920888936169 }, { "name": "__main__.add_one", @@ -270,23 +278,23 @@ "error": 0, "meta": { "_dd.base_service": "ray._private.workers", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c867ae00000000", - "_dd.parent_id": "9c1c52ed4504ff10", + "_dd.p.tid": "68d25d5700000000", + "_dd.parent_id": "ee90aa7b6bc8cafe", "component": "ray", "language": "python", - "ray.job_id": "02000000", - "ray.node_id": "b29ad664db2c014f0f46d24ba3b6fc9dac0d19927d8cb38a0159bdb3", - "ray.submission_id": "raysubmit_adr9j9h8CKhLtJtU", + "ray.job_id": "08000000", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "3281", + "ray.submission_id": "raysubmit_rB8WFwngAc3Tyr6V", "ray.task.args": "(42,)", "ray.task.kwargs": "{}", "ray.task.status": "success", - "ray.task_id": "67a2e8cfa5a06db3ffffffffffffffffffffffff02000000", - "ray.worker_id": "e20820d9c6e65da2d9d433334e7725b380799b8e860d21e7db380d2e", - "runtime-id": "61148636275b434496edb547fa14f1f4", + "ray.task_id": "f242b76f1d3ceb58ffffffffffffffffffffffff08000000", + "ray.worker_id": "08b558867f1a6f5ca9226025e10517186e9b69fa99e0cada13246182", + "runtime-id": "b499404dac8f49b8b85f446d2d94f3b3", "span.kind": "consumer", - "traceparent": "00-68c867ae000000004a30d8817e877e24-9c1c52ed4504ff10-00", - "tracestate": "dd=p:9c1c52ed4504ff10;s:0" + "traceparent": "00-68d25d570000000019a64e97fb8e1cdf-ee90aa7b6bc8cafe-00", + "tracestate": "dd=p:ee90aa7b6bc8cafe;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -295,10 +303,10 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 17113 + "process_id": 3281 }, - "duration": 315875, - "start": 1757964209842346554 + "duration": 317500, + "start": 1758616921669996253 }, { "name": "ray.wait", @@ -311,21 +319,21 @@ "error": 0, "meta": { "_dd.base_service": "project", - "_dd.hostname": "docker-desktop", - "_dd.p.tid": "68c867ae00000000", - "_dd.parent_id": "017ece9d9af38606", + "_dd.p.tid": "68d25d5700000000", + "_dd.parent_id": "7688553baccb85ef", "component": "ray", "language": "python", - "ray.job_id": "02000000", - "ray.node_id": "b29ad664db2c014f0f46d24ba3b6fc9dac0d19927d8cb38a0159bdb3", - "ray.submission_id": "raysubmit_adr9j9h8CKhLtJtU", + "ray.job_id": "08000000", + "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", + "ray.pid": "3235", + "ray.submission_id": "raysubmit_rB8WFwngAc3Tyr6V", "ray.wait.num_returns": "1", "ray.wait.timeout_s": "60", - "ray.worker_id": "02000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "c27f07b358824aeb915d3e69021dc59b", + "ray.worker_id": "08000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "43e237ebadfb41deaa49fad2747ef35f", "span.kind": "producer", - "traceparent": "00-68c867ae000000004a30d8817e877e24-017ece9d9af38606-00", - "tracestate": "dd=p:017ece9d9af38606;s:0" + "traceparent": "00-68d25d570000000019a64e97fb8e1cdf-7688553baccb85ef-00", + "tracestate": "dd=p:7688553baccb85ef;s:0" }, "metrics": { "_dd.djm.enabled": 1, @@ -334,8 +342,8 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 17065 + "process_id": 3235 }, - "duration": 1094989793, - "start": 1757964208751222553 + "duration": 779761792, + "start": 1758616920893889794 }]] From ca184f5b2566aaec21087bd056f1ef7df1c4fef2 Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Tue, 23 Sep 2025 17:08:20 +0200 Subject: [PATCH 31/59] remove warning log --- ddtrace/contrib/ray.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ddtrace/contrib/ray.py b/ddtrace/contrib/ray.py index 3ba07d09f05..05b5cc98023 100644 --- a/ddtrace/contrib/ray.py +++ b/ddtrace/contrib/ray.py @@ -16,5 +16,7 @@ def setup_tracing(): patch(ray=True) if _is_tracing_enabled(): - log.warning("Deactivating OpenTelemetry tracing in favor of Datadog tracing as both are not compatible.") + # Specifying a hook will activate opentelemetry instrumentation automatically. + # We silently deactivate it as users might be confused as they + # probably do not activate otel on purpose tracing_helper._global_is_tracing_enabled = False From 8f79fb04e9083bc81dbab65edec0b3306f9de988 Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Wed, 24 Sep 2025 09:21:34 +0200 Subject: [PATCH 32/59] yakov review --- ddtrace/_monkey.py | 2 +- ddtrace/contrib/internal/ray/__init__.py | 16 ++++----- ddtrace/contrib/internal/ray/constants.py | 1 - ddtrace/contrib/internal/ray/span_manager.py | 36 +++++++++++--------- ddtrace/contrib/internal/ray/utils.py | 2 -- 5 files changed, 28 insertions(+), 29 deletions(-) diff --git a/ddtrace/_monkey.py b/ddtrace/_monkey.py index 4fb9d05ae68..41fc6b29ded 100644 --- a/ddtrace/_monkey.py +++ b/ddtrace/_monkey.py @@ -118,7 +118,7 @@ "selenium": True, "valkey": True, "openai_agents": True, - "ray": True, + "ray": False, "protobuf": config._data_streams_enabled, } diff --git a/ddtrace/contrib/internal/ray/__init__.py b/ddtrace/contrib/internal/ray/__init__.py index 4988d2f7b7b..6a6de76d741 100644 --- a/ddtrace/contrib/internal/ray/__init__.py +++ b/ddtrace/contrib/internal/ray/__init__.py @@ -30,15 +30,16 @@ spans (default: ``120.0`` seconds) Ray service name can be configured by: -- specifiying in submission-id using job:your-job-name during job submission - For instance: - `ray job submit --submission-id="job:my_model,run:39" -- python entrypoint.py` -- specifying in metadata during job sumission - For instance: - `ray job submit --metadata-json='{"job_name": "my_model"}' -- python entrypoint.py` +- specifying in submission ID using ``job:your-job-name`` during job submission:: -- specifying DD_SERVICE when initializing your ray cluster. + ray job submit --submission-id="job:my_model,run:39" -- python entrypoint.py + +- specifying in metadata during job submission:: + + ray job submit --metadata-json='{"job_name": "my_model"}' -- python entrypoint.py + +- specifying ``DD_SERVICE`` when initializing your Ray cluster. By default, the service name will be the name of your entrypoint @@ -46,6 +47,5 @@ ~~~~~ - The integration disables Ray's built-in OpenTelemetry tracing to avoid duplicate telemetry. -- The integration filters out non-Ray dashboard spans to reduce noise. - Actor methods like ``ping`` and ``_polling`` are excluded from tracing to reduce noise. """ diff --git a/ddtrace/contrib/internal/ray/constants.py b/ddtrace/contrib/internal/ray/constants.py index ea79f7b6b26..1cbd6ce2e4e 100644 --- a/ddtrace/contrib/internal/ray/constants.py +++ b/ddtrace/contrib/internal/ray/constants.py @@ -7,7 +7,6 @@ # Span tags pertaining to Ray RAY_JOB_ID = "ray.job_id" RAY_NODE_ID = "ray.node_id" -RAY_PID = "ray.pid" RAY_WORKER_ID = "ray.worker_id" RAY_TASK_ID = "ray.task_id" RAY_ACTOR_ID = "ray.actor_id" diff --git a/ddtrace/contrib/internal/ray/span_manager.py b/ddtrace/contrib/internal/ray/span_manager.py index 1744475496e..216ec4cb40b 100644 --- a/ddtrace/contrib/internal/ray/span_manager.py +++ b/ddtrace/contrib/internal/ray/span_manager.py @@ -32,7 +32,7 @@ def long_running_ray_span(span_name, service, span_type, child_of=None, activate stop_long_running_span(span) -class LongRunningJobManager: +class RaySpanManager: def __init__(self): self._timers = {} # {submission_id: {(trace_id, span_id): Span}} @@ -59,11 +59,8 @@ def cleanup_on_exit(self): # Check if we have any spans to flush before exiting spans_to_close = [] - try: - for spans_dict in self._job_spans.values(): - spans_to_close.extend(list(spans_dict.values())) - except Exception: - spans_to_close = [] + for spans_dict in self._job_spans.values(): + spans_to_close.extend(list(spans_dict.values())) self._timers.clear() self._job_spans.clear() @@ -150,10 +147,9 @@ def _resubmit_long_running_spans(self, submission_id): return with self._lock: - self._create_resubmit_timer(submission_id, float(config.ray.resubmit_interval)) if submission_id not in self._job_spans: return - + self._create_resubmit_timer(submission_id, float(config.ray.resubmit_interval)) job_spans = list(self._job_spans[submission_id].values()) for span in job_spans: @@ -191,8 +187,14 @@ def stop_long_running_span(self, span_to_stop): span_key = (span_to_stop.trace_id, span_to_stop.span_id) with self._lock: - job_spans = self._job_spans.get(submission_id, {}) - job_spans.pop(span_key, None) + job_spans = self._job_spans.get(submission_id) + if not job_spans or job_spans.pop(span_key, None): + return + + timer = self._timers.pop(submission_id, None) + if timer: + timer.cancel() + self._job_spans.pop(submission_id, None) self._finish_span(span_to_stop) @@ -210,25 +212,25 @@ def stop_long_running_job(self, submission_id, job_info): self._finish_span(job_span, job_info=job_info) -_job_manager = LongRunningJobManager() +_ray_span_manager = RaySpanManager() def start_long_running_job(job_span): - submission_id = _job_manager._get_submission_id(job_span) + submission_id = _ray_span_manager._get_submission_id(job_span) - with _job_manager._lock: - _job_manager._root_spans[submission_id] = job_span + with _ray_span_manager._lock: + _ray_span_manager._root_spans[submission_id] = job_span start_long_running_span(job_span) def stop_long_running_job(submission_id, job_info): - _job_manager.stop_long_running_job(submission_id, job_info) + _ray_span_manager.stop_long_running_job(submission_id, job_info) def start_long_running_span(span): - _job_manager.add_span(span) + _ray_span_manager.add_span(span) def stop_long_running_span(span): - _job_manager.stop_long_running_span(span) + _ray_span_manager.stop_long_running_span(span) diff --git a/ddtrace/contrib/internal/ray/utils.py b/ddtrace/contrib/internal/ray/utils.py index 6fab2231f4b..935a9f6460a 100644 --- a/ddtrace/contrib/internal/ray/utils.py +++ b/ddtrace/contrib/internal/ray/utils.py @@ -22,7 +22,6 @@ from .constants import RAY_ACTOR_ID from .constants import RAY_JOB_ID from .constants import RAY_NODE_ID -from .constants import RAY_PID from .constants import RAY_SUBMISSION_ID from .constants import RAY_SUBMISSION_ID_TAG from .constants import RAY_TASK_ID @@ -91,7 +90,6 @@ def _inject_ray_span_tags_and_metrics(span): span.set_tag_str(RAY_JOB_ID, runtime_context.get_job_id()) span.set_tag_str(RAY_NODE_ID, runtime_context.get_node_id()) - span.set_tag_str(RAY_PID, str(os.getpid())) worker_id = runtime_context.get_worker_id() if worker_id is not None: From a3982db6d7d2ddc959dce47a5e8ec5468595b95f Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Wed, 24 Sep 2025 09:57:59 +0200 Subject: [PATCH 33/59] fix tests --- .../requirements/{1cc492b.txt => 1395a35.txt} | 35 +++++------ .../requirements/{15ca875.txt => 157ef2b.txt} | 23 ++++--- .../requirements/{228fcd5.txt => 16d8026.txt} | 23 ++++--- .../requirements/{692becc.txt => 1711b0d.txt} | 24 ++++--- .../requirements/{1ad0343.txt => 17721fd.txt} | 36 +++++------ .../requirements/{11c76b3.txt => 4dc83b1.txt} | 23 ++++--- .../requirements/{1a1fcb0.txt => 92459a5.txt} | 35 +++++------ .../requirements/{18ae9e5.txt => c2e69f8.txt} | 35 +++++------ ddtrace/contrib/internal/ray/span_manager.py | 11 +++- riotfile.py | 1 - tests/contrib/ray/test_long_running_span.py | 48 +++++++------- tests/contrib/ray/test_ray.py | 62 +++++++++++++++---- tests/internal/test_module.py | 1 + 13 files changed, 195 insertions(+), 162 deletions(-) rename .riot/requirements/{1cc492b.txt => 1395a35.txt} (66%) rename .riot/requirements/{15ca875.txt => 157ef2b.txt} (81%) rename .riot/requirements/{228fcd5.txt => 16d8026.txt} (74%) rename .riot/requirements/{692becc.txt => 1711b0d.txt} (75%) rename .riot/requirements/{1ad0343.txt => 17721fd.txt} (67%) rename .riot/requirements/{11c76b3.txt => 4dc83b1.txt} (74%) rename .riot/requirements/{1a1fcb0.txt => 92459a5.txt} (72%) rename .riot/requirements/{18ae9e5.txt => c2e69f8.txt} (66%) diff --git a/.riot/requirements/1cc492b.txt b/.riot/requirements/1395a35.txt similarity index 66% rename from .riot/requirements/1cc492b.txt rename to .riot/requirements/1395a35.txt index 7f3c369cc1b..1649524f47f 100644 --- a/.riot/requirements/1cc492b.txt +++ b/.riot/requirements/1395a35.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile with Python 3.13 # by the following command: # -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1cc492b.in +# pip-compile --allow-unsafe --cert=None --client-cert=None --index-url=None --no-annotate --pip-args=None .riot/requirements/1395a35.in # aiohappyeyeballs==2.6.1 aiohttp==3.12.15 @@ -13,58 +13,57 @@ attrs==25.3.0 cachetools==5.5.2 certifi==2025.8.3 charset-normalizer==3.4.3 -click==8.2.1 +click==8.3.0 colorful==0.5.7 -coverage[toml]==7.10.6 +coverage[toml]==7.10.7 distlib==0.4.0 filelock==3.19.1 frozenlist==1.7.0 google-api-core==2.25.1 google-auth==2.40.3 googleapis-common-protos==1.70.0 -grpcio==1.74.0 +grpcio==1.75.0 hypothesis==6.45.0 idna==3.10 importlib-metadata==8.7.0 iniconfig==2.1.0 jsonschema==4.25.1 -jsonschema-specifications==2025.4.1 +jsonschema-specifications==2025.9.1 mock==5.2.0 msgpack==1.1.1 multidict==6.6.4 opencensus==0.11.4 opencensus-context==0.1.3 -opentelemetry-api==1.36.0 -opentelemetry-exporter-prometheus==0.57b0 -opentelemetry-proto==1.36.0 -opentelemetry-sdk==1.36.0 -opentelemetry-semantic-conventions==0.57b0 +opentelemetry-api==1.37.0 +opentelemetry-exporter-prometheus==0.58b0 +opentelemetry-proto==1.37.0 +opentelemetry-sdk==1.37.0 +opentelemetry-semantic-conventions==0.58b0 opentracing==2.4.0 packaging==25.0 platformdirs==4.4.0 pluggy==1.6.0 -prometheus-client==0.22.1 +prometheus-client==0.23.1 propcache==0.3.2 proto-plus==1.26.1 -protobuf==6.32.0 +protobuf==6.32.1 py-spy==0.4.1 pyasn1==0.6.1 pyasn1-modules==0.4.2 -pydantic==2.11.7 +pydantic==2.11.9 pydantic-core==2.33.2 pygments==2.19.2 pytest==8.4.2 -pytest-asyncio==1.1.0 -pytest-cov==6.2.1 -pytest-mock==3.15.0 +pytest-cov==7.0.0 +pytest-mock==3.15.1 pyyaml==6.0.2 -ray[default]==2.49.1 +ray[default]==2.49.2 referencing==0.36.2 requests==2.32.5 rpds-py==0.27.1 rsa==4.9.1 six==1.17.0 -smart-open==7.3.0.post1 +smart-open==7.3.1 sortedcontainers==2.4.0 typing-extensions==4.15.0 typing-inspection==0.4.1 diff --git a/.riot/requirements/15ca875.txt b/.riot/requirements/157ef2b.txt similarity index 81% rename from .riot/requirements/15ca875.txt rename to .riot/requirements/157ef2b.txt index dae64a4ce77..03aea41eb2a 100644 --- a/.riot/requirements/15ca875.txt +++ b/.riot/requirements/157ef2b.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile with Python 3.12 # by the following command: # -# pip-compile --allow-unsafe --no-annotate .riot/requirements/15ca875.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/157ef2b.in # aiohappyeyeballs==2.6.1 aiohttp==3.12.15 @@ -13,21 +13,21 @@ attrs==25.3.0 cachetools==5.5.2 certifi==2025.8.3 charset-normalizer==3.4.3 -click==8.2.1 +click==8.3.0 colorful==0.5.7 -coverage[toml]==7.10.6 +coverage[toml]==7.10.7 distlib==0.4.0 filelock==3.19.1 frozenlist==1.7.0 google-api-core==2.25.1 google-auth==2.40.3 googleapis-common-protos==1.70.0 -grpcio==1.74.0 +grpcio==1.75.0 hypothesis==6.45.0 idna==3.10 iniconfig==2.1.0 jsonschema==4.25.1 -jsonschema-specifications==2025.4.1 +jsonschema-specifications==2025.9.1 mock==5.2.0 msgpack==1.1.1 multidict==6.6.4 @@ -37,20 +37,19 @@ opentracing==2.4.0 packaging==25.0 platformdirs==4.4.0 pluggy==1.6.0 -prometheus-client==0.22.1 +prometheus-client==0.23.1 propcache==0.3.2 proto-plus==1.26.1 -protobuf==6.32.0 +protobuf==6.32.1 py-spy==0.4.1 pyasn1==0.6.1 pyasn1-modules==0.4.2 -pydantic==2.11.7 +pydantic==2.11.9 pydantic-core==2.33.2 pygments==2.19.2 pytest==8.4.2 -pytest-asyncio==1.1.0 -pytest-cov==6.2.1 -pytest-mock==3.15.0 +pytest-cov==7.0.0 +pytest-mock==3.15.1 pyyaml==6.0.2 ray[default]==2.46.0 referencing==0.36.2 @@ -58,7 +57,7 @@ requests==2.32.5 rpds-py==0.27.1 rsa==4.9.1 six==1.17.0 -smart-open==7.3.0.post1 +smart-open==7.3.1 sortedcontainers==2.4.0 typing-extensions==4.15.0 typing-inspection==0.4.1 diff --git a/.riot/requirements/228fcd5.txt b/.riot/requirements/16d8026.txt similarity index 74% rename from .riot/requirements/228fcd5.txt rename to .riot/requirements/16d8026.txt index 9411edb9cb6..143563a8084 100644 --- a/.riot/requirements/228fcd5.txt +++ b/.riot/requirements/16d8026.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --allow-unsafe --no-annotate .riot/requirements/228fcd5.in +# pip-compile --allow-unsafe --cert=None --client-cert=None --index-url=None --no-annotate --pip-args=None .riot/requirements/16d8026.in # aiohappyeyeballs==2.6.1 aiohttp==3.12.15 @@ -13,21 +13,21 @@ attrs==25.3.0 cachetools==5.5.2 certifi==2025.8.3 charset-normalizer==3.4.3 -click==8.2.1 +click==8.3.0 colorful==0.5.7 -coverage[toml]==7.10.6 +coverage[toml]==7.10.7 distlib==0.4.0 filelock==3.19.1 frozenlist==1.7.0 google-api-core==2.25.1 google-auth==2.40.3 googleapis-common-protos==1.70.0 -grpcio==1.74.0 +grpcio==1.75.0 hypothesis==6.45.0 idna==3.10 iniconfig==2.1.0 jsonschema==4.25.1 -jsonschema-specifications==2025.4.1 +jsonschema-specifications==2025.9.1 mock==5.2.0 msgpack==1.1.1 multidict==6.6.4 @@ -37,20 +37,19 @@ opentracing==2.4.0 packaging==25.0 platformdirs==4.4.0 pluggy==1.6.0 -prometheus-client==0.22.1 +prometheus-client==0.23.1 propcache==0.3.2 proto-plus==1.26.1 -protobuf==6.32.0 +protobuf==6.32.1 py-spy==0.4.1 pyasn1==0.6.1 pyasn1-modules==0.4.2 -pydantic==2.11.7 +pydantic==2.11.9 pydantic-core==2.33.2 pygments==2.19.2 pytest==8.4.2 -pytest-asyncio==1.1.0 -pytest-cov==6.2.1 -pytest-mock==3.15.0 +pytest-cov==7.0.0 +pytest-mock==3.15.1 pyyaml==6.0.2 ray[default]==2.46.0 referencing==0.36.2 @@ -58,7 +57,7 @@ requests==2.32.5 rpds-py==0.27.1 rsa==4.9.1 six==1.17.0 -smart-open==7.3.0.post1 +smart-open==7.3.1 sortedcontainers==2.4.0 typing-extensions==4.15.0 typing-inspection==0.4.1 diff --git a/.riot/requirements/692becc.txt b/.riot/requirements/1711b0d.txt similarity index 75% rename from .riot/requirements/692becc.txt rename to .riot/requirements/1711b0d.txt index b8fdcbeef98..d4117fe8b33 100644 --- a/.riot/requirements/692becc.txt +++ b/.riot/requirements/1711b0d.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --allow-unsafe --no-annotate .riot/requirements/692becc.in +# pip-compile --allow-unsafe --cert=None --client-cert=None --index-url=None --no-annotate --pip-args=None .riot/requirements/1711b0d.in # aiohappyeyeballs==2.6.1 aiohttp==3.12.15 @@ -11,13 +11,12 @@ aiosignal==1.4.0 annotated-types==0.7.0 async-timeout==5.0.1 attrs==25.3.0 -backports-asyncio-runner==1.2.0 cachetools==5.5.2 certifi==2025.8.3 charset-normalizer==3.4.3 -click==8.2.1 +click==8.3.0 colorful==0.5.7 -coverage[toml]==7.10.6 +coverage[toml]==7.10.7 distlib==0.4.0 exceptiongroup==1.3.0 filelock==3.19.1 @@ -25,12 +24,12 @@ frozenlist==1.7.0 google-api-core==2.25.1 google-auth==2.40.3 googleapis-common-protos==1.70.0 -grpcio==1.74.0 +grpcio==1.75.0 hypothesis==6.45.0 idna==3.10 iniconfig==2.1.0 jsonschema==4.25.1 -jsonschema-specifications==2025.4.1 +jsonschema-specifications==2025.9.1 mock==5.2.0 msgpack==1.1.1 multidict==6.6.4 @@ -40,20 +39,19 @@ opentracing==2.4.0 packaging==25.0 platformdirs==4.4.0 pluggy==1.6.0 -prometheus-client==0.22.1 +prometheus-client==0.23.1 propcache==0.3.2 proto-plus==1.26.1 -protobuf==6.32.0 +protobuf==6.32.1 py-spy==0.4.1 pyasn1==0.6.1 pyasn1-modules==0.4.2 -pydantic==2.11.7 +pydantic==2.11.9 pydantic-core==2.33.2 pygments==2.19.2 pytest==8.4.2 -pytest-asyncio==1.1.0 -pytest-cov==6.2.1 -pytest-mock==3.15.0 +pytest-cov==7.0.0 +pytest-mock==3.15.1 pyyaml==6.0.2 ray[default]==2.46.0 referencing==0.36.2 @@ -61,7 +59,7 @@ requests==2.32.5 rpds-py==0.27.1 rsa==4.9.1 six==1.17.0 -smart-open==7.3.0.post1 +smart-open==7.3.1 sortedcontainers==2.4.0 tomli==2.2.1 typing-extensions==4.15.0 diff --git a/.riot/requirements/1ad0343.txt b/.riot/requirements/17721fd.txt similarity index 67% rename from .riot/requirements/1ad0343.txt rename to .riot/requirements/17721fd.txt index 836da0a3c0a..a22e9c64aea 100644 --- a/.riot/requirements/1ad0343.txt +++ b/.riot/requirements/17721fd.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1ad0343.in +# pip-compile --allow-unsafe --cert=None --client-cert=None --index-url=None --no-annotate --pip-args=None .riot/requirements/17721fd.in # aiohappyeyeballs==2.6.1 aiohttp==3.12.15 @@ -11,13 +11,12 @@ aiosignal==1.4.0 annotated-types==0.7.0 async-timeout==5.0.1 attrs==25.3.0 -backports-asyncio-runner==1.2.0 cachetools==5.5.2 certifi==2025.8.3 charset-normalizer==3.4.3 -click==8.2.1 +click==8.3.0 colorful==0.5.7 -coverage[toml]==7.10.6 +coverage[toml]==7.10.7 distlib==0.4.0 exceptiongroup==1.3.0 filelock==3.19.1 @@ -25,49 +24,48 @@ frozenlist==1.7.0 google-api-core==2.25.1 google-auth==2.40.3 googleapis-common-protos==1.70.0 -grpcio==1.74.0 +grpcio==1.75.0 hypothesis==6.45.0 idna==3.10 importlib-metadata==8.7.0 iniconfig==2.1.0 jsonschema==4.25.1 -jsonschema-specifications==2025.4.1 +jsonschema-specifications==2025.9.1 mock==5.2.0 msgpack==1.1.1 multidict==6.6.4 opencensus==0.11.4 opencensus-context==0.1.3 -opentelemetry-api==1.36.0 -opentelemetry-exporter-prometheus==0.57b0 -opentelemetry-proto==1.36.0 -opentelemetry-sdk==1.36.0 -opentelemetry-semantic-conventions==0.57b0 +opentelemetry-api==1.37.0 +opentelemetry-exporter-prometheus==0.58b0 +opentelemetry-proto==1.37.0 +opentelemetry-sdk==1.37.0 +opentelemetry-semantic-conventions==0.58b0 opentracing==2.4.0 packaging==25.0 platformdirs==4.4.0 pluggy==1.6.0 -prometheus-client==0.22.1 +prometheus-client==0.23.1 propcache==0.3.2 proto-plus==1.26.1 -protobuf==6.32.0 +protobuf==6.32.1 py-spy==0.4.1 pyasn1==0.6.1 pyasn1-modules==0.4.2 -pydantic==2.11.7 +pydantic==2.11.9 pydantic-core==2.33.2 pygments==2.19.2 pytest==8.4.2 -pytest-asyncio==1.1.0 -pytest-cov==6.2.1 -pytest-mock==3.15.0 +pytest-cov==7.0.0 +pytest-mock==3.15.1 pyyaml==6.0.2 -ray[default]==2.49.1 +ray[default]==2.49.2 referencing==0.36.2 requests==2.32.5 rpds-py==0.27.1 rsa==4.9.1 six==1.17.0 -smart-open==7.3.0.post1 +smart-open==7.3.1 sortedcontainers==2.4.0 tomli==2.2.1 typing-extensions==4.15.0 diff --git a/.riot/requirements/11c76b3.txt b/.riot/requirements/4dc83b1.txt similarity index 74% rename from .riot/requirements/11c76b3.txt rename to .riot/requirements/4dc83b1.txt index 178475dd64d..55836492e92 100644 --- a/.riot/requirements/11c76b3.txt +++ b/.riot/requirements/4dc83b1.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile with Python 3.13 # by the following command: # -# pip-compile --allow-unsafe --no-annotate .riot/requirements/11c76b3.in +# pip-compile --allow-unsafe --cert=None --client-cert=None --index-url=None --no-annotate --pip-args=None .riot/requirements/4dc83b1.in # aiohappyeyeballs==2.6.1 aiohttp==3.12.15 @@ -13,21 +13,21 @@ attrs==25.3.0 cachetools==5.5.2 certifi==2025.8.3 charset-normalizer==3.4.3 -click==8.2.1 +click==8.3.0 colorful==0.5.7 -coverage[toml]==7.10.6 +coverage[toml]==7.10.7 distlib==0.4.0 filelock==3.19.1 frozenlist==1.7.0 google-api-core==2.25.1 google-auth==2.40.3 googleapis-common-protos==1.70.0 -grpcio==1.74.0 +grpcio==1.75.0 hypothesis==6.45.0 idna==3.10 iniconfig==2.1.0 jsonschema==4.25.1 -jsonschema-specifications==2025.4.1 +jsonschema-specifications==2025.9.1 mock==5.2.0 msgpack==1.1.1 multidict==6.6.4 @@ -37,20 +37,19 @@ opentracing==2.4.0 packaging==25.0 platformdirs==4.4.0 pluggy==1.6.0 -prometheus-client==0.22.1 +prometheus-client==0.23.1 propcache==0.3.2 proto-plus==1.26.1 -protobuf==6.32.0 +protobuf==6.32.1 py-spy==0.4.1 pyasn1==0.6.1 pyasn1-modules==0.4.2 -pydantic==2.11.7 +pydantic==2.11.9 pydantic-core==2.33.2 pygments==2.19.2 pytest==8.4.2 -pytest-asyncio==1.1.0 -pytest-cov==6.2.1 -pytest-mock==3.15.0 +pytest-cov==7.0.0 +pytest-mock==3.15.1 pyyaml==6.0.2 ray[default]==2.46.0 referencing==0.36.2 @@ -58,7 +57,7 @@ requests==2.32.5 rpds-py==0.27.1 rsa==4.9.1 six==1.17.0 -smart-open==7.3.0.post1 +smart-open==7.3.1 sortedcontainers==2.4.0 typing-extensions==4.15.0 typing-inspection==0.4.1 diff --git a/.riot/requirements/1a1fcb0.txt b/.riot/requirements/92459a5.txt similarity index 72% rename from .riot/requirements/1a1fcb0.txt rename to .riot/requirements/92459a5.txt index b88efd1e9de..a31163581dc 100644 --- a/.riot/requirements/1a1fcb0.txt +++ b/.riot/requirements/92459a5.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile with Python 3.12 # by the following command: # -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1a1fcb0.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/92459a5.in # aiohappyeyeballs==2.6.1 aiohttp==3.12.15 @@ -13,58 +13,57 @@ attrs==25.3.0 cachetools==5.5.2 certifi==2025.8.3 charset-normalizer==3.4.3 -click==8.2.1 +click==8.3.0 colorful==0.5.7 -coverage[toml]==7.10.6 +coverage[toml]==7.10.7 distlib==0.4.0 filelock==3.19.1 frozenlist==1.7.0 google-api-core==2.25.1 google-auth==2.40.3 googleapis-common-protos==1.70.0 -grpcio==1.74.0 +grpcio==1.75.0 hypothesis==6.45.0 idna==3.10 importlib-metadata==8.7.0 iniconfig==2.1.0 jsonschema==4.25.1 -jsonschema-specifications==2025.4.1 +jsonschema-specifications==2025.9.1 mock==5.2.0 msgpack==1.1.1 multidict==6.6.4 opencensus==0.11.4 opencensus-context==0.1.3 -opentelemetry-api==1.36.0 -opentelemetry-exporter-prometheus==0.57b0 -opentelemetry-proto==1.36.0 -opentelemetry-sdk==1.36.0 -opentelemetry-semantic-conventions==0.57b0 +opentelemetry-api==1.37.0 +opentelemetry-exporter-prometheus==0.58b0 +opentelemetry-proto==1.37.0 +opentelemetry-sdk==1.37.0 +opentelemetry-semantic-conventions==0.58b0 opentracing==2.4.0 packaging==25.0 platformdirs==4.4.0 pluggy==1.6.0 -prometheus-client==0.22.1 +prometheus-client==0.23.1 propcache==0.3.2 proto-plus==1.26.1 -protobuf==6.32.0 +protobuf==6.32.1 py-spy==0.4.1 pyasn1==0.6.1 pyasn1-modules==0.4.2 -pydantic==2.11.7 +pydantic==2.11.9 pydantic-core==2.33.2 pygments==2.19.2 pytest==8.4.2 -pytest-asyncio==1.1.0 -pytest-cov==6.2.1 -pytest-mock==3.15.0 +pytest-cov==7.0.0 +pytest-mock==3.15.1 pyyaml==6.0.2 -ray[default]==2.49.1 +ray[default]==2.49.2 referencing==0.36.2 requests==2.32.5 rpds-py==0.27.1 rsa==4.9.1 six==1.17.0 -smart-open==7.3.0.post1 +smart-open==7.3.1 sortedcontainers==2.4.0 typing-extensions==4.15.0 typing-inspection==0.4.1 diff --git a/.riot/requirements/18ae9e5.txt b/.riot/requirements/c2e69f8.txt similarity index 66% rename from .riot/requirements/18ae9e5.txt rename to .riot/requirements/c2e69f8.txt index 8a6b35482d5..4d7fc23ce02 100644 --- a/.riot/requirements/18ae9e5.txt +++ b/.riot/requirements/c2e69f8.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --allow-unsafe --no-annotate .riot/requirements/18ae9e5.in +# pip-compile --allow-unsafe --cert=None --client-cert=None --index-url=None --no-annotate --pip-args=None .riot/requirements/c2e69f8.in # aiohappyeyeballs==2.6.1 aiohttp==3.12.15 @@ -13,58 +13,57 @@ attrs==25.3.0 cachetools==5.5.2 certifi==2025.8.3 charset-normalizer==3.4.3 -click==8.2.1 +click==8.3.0 colorful==0.5.7 -coverage[toml]==7.10.6 +coverage[toml]==7.10.7 distlib==0.4.0 filelock==3.19.1 frozenlist==1.7.0 google-api-core==2.25.1 google-auth==2.40.3 googleapis-common-protos==1.70.0 -grpcio==1.74.0 +grpcio==1.75.0 hypothesis==6.45.0 idna==3.10 importlib-metadata==8.7.0 iniconfig==2.1.0 jsonschema==4.25.1 -jsonschema-specifications==2025.4.1 +jsonschema-specifications==2025.9.1 mock==5.2.0 msgpack==1.1.1 multidict==6.6.4 opencensus==0.11.4 opencensus-context==0.1.3 -opentelemetry-api==1.36.0 -opentelemetry-exporter-prometheus==0.57b0 -opentelemetry-proto==1.36.0 -opentelemetry-sdk==1.36.0 -opentelemetry-semantic-conventions==0.57b0 +opentelemetry-api==1.37.0 +opentelemetry-exporter-prometheus==0.58b0 +opentelemetry-proto==1.37.0 +opentelemetry-sdk==1.37.0 +opentelemetry-semantic-conventions==0.58b0 opentracing==2.4.0 packaging==25.0 platformdirs==4.4.0 pluggy==1.6.0 -prometheus-client==0.22.1 +prometheus-client==0.23.1 propcache==0.3.2 proto-plus==1.26.1 -protobuf==6.32.0 +protobuf==6.32.1 py-spy==0.4.1 pyasn1==0.6.1 pyasn1-modules==0.4.2 -pydantic==2.11.7 +pydantic==2.11.9 pydantic-core==2.33.2 pygments==2.19.2 pytest==8.4.2 -pytest-asyncio==1.1.0 -pytest-cov==6.2.1 -pytest-mock==3.15.0 +pytest-cov==7.0.0 +pytest-mock==3.15.1 pyyaml==6.0.2 -ray[default]==2.49.1 +ray[default]==2.49.2 referencing==0.36.2 requests==2.32.5 rpds-py==0.27.1 rsa==4.9.1 six==1.17.0 -smart-open==7.3.0.post1 +smart-open==7.3.1 sortedcontainers==2.4.0 typing-extensions==4.15.0 typing-inspection==0.4.1 diff --git a/ddtrace/contrib/internal/ray/span_manager.py b/ddtrace/contrib/internal/ray/span_manager.py index 216ec4cb40b..ddd09791368 100644 --- a/ddtrace/contrib/internal/ray/span_manager.py +++ b/ddtrace/contrib/internal/ray/span_manager.py @@ -183,21 +183,26 @@ def add_span(self, span): self._job_spans[submission_id][(span.trace_id, span.span_id)] = span def stop_long_running_span(self, span_to_stop): + self._finish_span(span_to_stop) + submission_id = self._get_submission_id(span_to_stop) span_key = (span_to_stop.trace_id, span_to_stop.span_id) with self._lock: job_spans = self._job_spans.get(submission_id) - if not job_spans or job_spans.pop(span_key, None): + if not job_spans: + return + + job_spans.pop(span_key, None) + if job_spans: return + # this code will be executed if job_spans[submission_id] is empty timer = self._timers.pop(submission_id, None) if timer: timer.cancel() self._job_spans.pop(submission_id, None) - self._finish_span(span_to_stop) - def stop_long_running_job(self, submission_id, job_info): with self._lock: job_span = self._root_spans[submission_id] diff --git a/riotfile.py b/riotfile.py index e7339aa1c9f..cb6868e0575 100644 --- a/riotfile.py +++ b/riotfile.py @@ -3034,7 +3034,6 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT command="pytest {cmdargs} tests/contrib/ray", pys=select_pys(min_version="3.10"), pkgs={ - "pytest-asyncio": latest, "ray[default]": ["~=2.46.0", latest], }, env={"DD_TRACE_AIOHTTP_ENABLED": "false", "DD_TRACE_REPORT_HOSTNAME": "true"}, diff --git a/tests/contrib/ray/test_long_running_span.py b/tests/contrib/ray/test_long_running_span.py index e7239cd8c67..fe1ffa88158 100644 --- a/tests/contrib/ray/test_long_running_span.py +++ b/tests/contrib/ray/test_long_running_span.py @@ -1,7 +1,7 @@ import time from ddtrace import config -from ddtrace.contrib.internal.ray.span_manager import _job_manager +from ddtrace.contrib.internal.ray.span_manager import _ray_span_manager from ddtrace.contrib.internal.ray.span_manager import start_long_running_span from ddtrace.contrib.internal.ray.span_manager import stop_long_running_span from tests.utils import TracerTestCase @@ -21,10 +21,10 @@ def setUp(self): config.ray.initial_submit_threshold = 1 # 1s instead of 10s # Clear any existing spans from the job manager - with _job_manager._lock: - _job_manager._job_spans.clear() - _job_manager._root_spans.clear() - _job_manager._timers.clear() + with _ray_span_manager._lock: + _ray_span_manager._job_spans.clear() + _ray_span_manager._root_spans.clear() + _ray_span_manager._timers.clear() def tearDown(self): # Restore original values @@ -32,12 +32,12 @@ def tearDown(self): config.ray.initial_submit_threshold = self.original_initial_submit_threshold # Clean up any remaining timers - with _job_manager._lock: - for timer in _job_manager._timers.values(): + with _ray_span_manager._lock: + for timer in _ray_span_manager._timers.values(): timer.cancel() - _job_manager._job_spans.clear() - _job_manager._root_spans.clear() - _job_manager._timers.clear() + _ray_span_manager._job_spans.clear() + _ray_span_manager._root_spans.clear() + _ray_span_manager._timers.clear() super().tearDown() def test_long_running_span_basic_lifecycle(self): @@ -49,9 +49,9 @@ def test_long_running_span_basic_lifecycle(self): start_long_running_span(span) submission_id = "test-submission-123" - with _job_manager._lock: - self.assertIn(submission_id, _job_manager._job_spans) - self.assertIn((span.trace_id, span.span_id), _job_manager._job_spans[submission_id]) + with _ray_span_manager._lock: + self.assertIn(submission_id, _ray_span_manager._job_spans) + self.assertIn((span.trace_id, span.span_id), _ray_span_manager._job_spans[submission_id]) time.sleep(1.5) @@ -60,8 +60,8 @@ def test_long_running_span_basic_lifecycle(self): stop_long_running_span(span) - with _job_manager._lock: - job_spans = _job_manager._job_spans.get(submission_id, {}) + with _ray_span_manager._lock: + job_spans = _ray_span_manager._job_spans.get(submission_id, {}) self.assertNotIn((span.trace_id, span.span_id), job_spans) self.assertIsNone(span.get_metric("_dd.partial_version")) @@ -76,17 +76,17 @@ def test_not_long_running_span(self): start_long_running_span(span) submission_id = "test-submission-123" - with _job_manager._lock: - self.assertIn(submission_id, _job_manager._job_spans) - self.assertIn((span.trace_id, span.span_id), _job_manager._job_spans[submission_id]) + with _ray_span_manager._lock: + self.assertIn(submission_id, _ray_span_manager._job_spans) + self.assertIn((span.trace_id, span.span_id), _ray_span_manager._job_spans[submission_id]) self.assertIsNone(span.get_metric("_dd.partial_version")) self.assertIsNone(span.get_tag("ray.job.status")) stop_long_running_span(span) - with _job_manager._lock: - job_spans = _job_manager._job_spans.get(submission_id, {}) + with _ray_span_manager._lock: + job_spans = _ray_span_manager._job_spans.get(submission_id, {}) self.assertNotIn((span.trace_id, span.span_id), job_spans) self.assertIsNone(span.get_metric("_dd.partial_version")) @@ -106,8 +106,8 @@ def test_multiple_long_running_spans_same_submission(self): start_long_running_span(span1) start_long_running_span(span2) - with _job_manager._lock: - job_spans = _job_manager._job_spans[submission_id] + with _ray_span_manager._lock: + job_spans = _ray_span_manager._job_spans[submission_id] self.assertIn((span1.trace_id, span1.span_id), job_spans) self.assertIn((span2.trace_id, span2.span_id), job_spans) @@ -152,8 +152,8 @@ def test_long_running_span_hierarchies_and_context(self): child3.set_tag_str("ray.submission_id", submission_id) start_long_running_span(child3) - with _job_manager._lock: - job_spans = _job_manager._job_spans[submission_id] + with _ray_span_manager._lock: + job_spans = _ray_span_manager._job_spans[submission_id] self.assertIn((parent_span.trace_id, parent_span.span_id), job_spans) self.assertIn((child3.trace_id, child3.span_id), job_spans) self.assertNotIn((child1.trace_id, child1.span_id), job_spans) diff --git a/tests/contrib/ray/test_ray.py b/tests/contrib/ray/test_ray.py index e71c40c4026..8242662e43e 100644 --- a/tests/contrib/ray/test_ray.py +++ b/tests/contrib/ray/test_ray.py @@ -1,13 +1,15 @@ import logging import os +import re import subprocess +import time import pytest from tests.utils import TracerTestCase -def submit_ray_job(script_name, timeout=120): +def submit_ray_job(script_name, timeout=180): """ Submit a Ray job @@ -22,7 +24,21 @@ def submit_ray_job(script_name, timeout=120): if not os.path.exists(script_path): raise FileNotFoundError(f"Script not found: {script_path}") - cmd = ["ray", "job", "submit", "--", "python", script_path] + # Use a minimal working directory to avoid packaging the entire repository when submitting jobs. + # Packaging the repo can be extremely slow and cause timeouts in CI. + jobs_dir = os.path.dirname(script_path) + cmd = [ + "ray", + "job", + "submit", + "--address=http://127.0.0.1:8265", + "--working-dir", + jobs_dir, + "--no-wait", + "--", + "python", + os.path.basename(script_path), + ] print(f"\n{' '.join(cmd)}\n") result = subprocess.run(cmd, capture_output=True, text=True, timeout=timeout) @@ -32,7 +48,34 @@ def submit_ray_job(script_name, timeout=120): logging.error("Failed to submit Ray job. Error: %s", result.stderr) raise subprocess.CalledProcessError(result.returncode, cmd, result.stdout, result.stderr) - return result + # Parse submission id from output, e.g., "Job 'raysubmit_XXXX' submitted successfully" + submission_id = None + m = re.search(r"Job '([A-Za-z0-9_]+)' submitted successfully", result.stdout) + if m: + submission_id = m.group(1) + else: + m = re.search(r"(raysubmit_[A-Za-z0-9]+)", result.stdout) + if m: + submission_id = m.group(1) + + if not submission_id: + raise RuntimeError(f"Could not parse Ray submission id from output: {result.stdout}\n{result.stderr}") + + # Poll for completion within the provided timeout + deadline = time.time() + timeout + status_cmd = ["ray", "job", "status", "--address=http://127.0.0.1:8265", submission_id] + while time.time() < deadline: + status_res = subprocess.run(status_cmd, capture_output=True, text=True, timeout=30) + status_text = (status_res.stdout or "").upper() + if "SUCCEEDED" in status_text: + time.sleep(1) + return result + if "FAILED" in status_text or "STOPPED" in status_text: + raise subprocess.CalledProcessError(1, status_cmd, status_res.stdout, status_res.stderr) + time.sleep(1) + + # Timed out waiting for job completion + raise subprocess.TimeoutExpired(status_cmd, timeout) RAY_SNAPSHOT_IGNORES = [ @@ -58,6 +101,7 @@ def submit_ray_job(script_name, timeout=120): "meta._dd.base_service", "meta._dd.hostname", "metrics._dd.partial_version", + "metrics._dd.was_long_running", ] @@ -67,14 +111,6 @@ class TestRayIntegration(TracerTestCase): @classmethod def setUpClass(cls): super(TestRayIntegration, cls).setUpClass() - - os.environ["DD_TRACE_RAY_REGISTER_LONG_RUNNING_THRESHOLD"] = "30" - - try: - subprocess.run(["ray", "stop", "--force"], capture_output=True, check=False) - except FileNotFoundError: - pytest.skip("Ray CLI not available") - try: # Start the ray cluster once for all tests subprocess.run( @@ -92,12 +128,14 @@ def setUpClass(cls): ) except subprocess.CalledProcessError as e: pytest.skip(f"Failed to start Ray cluster: {e.stderr}") + except Exception as e: + pytest.skip(f"Failed to wait for Ray cluster readiness: {e}") @classmethod def tearDownClass(cls): try: # Stop the ray cluster once after all tests - subprocess.run(["ray", "stop"], capture_output=True, check=False) + subprocess.run(["ray", "stop", "--force"], capture_output=True, check=False) except FileNotFoundError: pass diff --git a/tests/internal/test_module.py b/tests/internal/test_module.py index 4330cf96b51..6a6215666ce 100644 --- a/tests/internal/test_module.py +++ b/tests/internal/test_module.py @@ -585,6 +585,7 @@ def test_public_modules_in_ddtrace_contrib(): "ddtrace.contrib.cherrypy", "ddtrace.contrib.requests", "ddtrace.contrib.pyramid", + "ddtrace.contrib.ray", } From bc4e09f35488899bc85d136b994dc1688fa3f57a Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Wed, 24 Sep 2025 14:53:58 +0200 Subject: [PATCH 34/59] new fix attempt: 1 --- tests/contrib/ray/test_ray.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/contrib/ray/test_ray.py b/tests/contrib/ray/test_ray.py index 8242662e43e..a462dd3a460 100644 --- a/tests/contrib/ray/test_ray.py +++ b/tests/contrib/ray/test_ray.py @@ -31,7 +31,6 @@ def submit_ray_job(script_name, timeout=180): "ray", "job", "submit", - "--address=http://127.0.0.1:8265", "--working-dir", jobs_dir, "--no-wait", @@ -63,14 +62,15 @@ def submit_ray_job(script_name, timeout=180): # Poll for completion within the provided timeout deadline = time.time() + timeout - status_cmd = ["ray", "job", "status", "--address=http://127.0.0.1:8265", submission_id] + status_cmd = ["ray", "job", "status", submission_id] while time.time() < deadline: status_res = subprocess.run(status_cmd, capture_output=True, text=True, timeout=30) status_text = (status_res.stdout or "").upper() if "SUCCEEDED" in status_text: - time.sleep(1) + time.sleep(2) return result if "FAILED" in status_text or "STOPPED" in status_text: + time.sleep(2) raise subprocess.CalledProcessError(1, status_cmd, status_res.stdout, status_res.stderr) time.sleep(1) From 5d9ed216fe8eed8a08ef22f257db5dddd6d93f8c Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Wed, 24 Sep 2025 14:53:58 +0200 Subject: [PATCH 35/59] fix tests --- riotfile.py | 2 +- tests/contrib/ray/test_ray.py | 281 +++--- ...ts.contrib.ray.test_ray.error_in_task.json | 569 ----------- ...trib.ray.test_ray.test_actor_and_task.json | 908 +++++------------- ....ray.test_ray.test_actor_interactions.json | 614 ++++-------- ...ontrib.ray.test_ray.test_nested_tasks.json | 514 ++-------- ...ontrib.ray.test_ray.test_simple_actor.json | 373 ++----- ...contrib.ray.test_ray.test_simple_task.json | 581 ++--------- ...contrib.ray.test_ray.test_simple_wait.json | 373 ++----- 9 files changed, 855 insertions(+), 3360 deletions(-) delete mode 100644 tests/snapshots/tests.contrib.ray.test_ray.error_in_task.json diff --git a/riotfile.py b/riotfile.py index cb6868e0575..07c02265610 100644 --- a/riotfile.py +++ b/riotfile.py @@ -3032,7 +3032,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT Venv( name="ray", command="pytest {cmdargs} tests/contrib/ray", - pys=select_pys(min_version="3.10"), + pys=select_pys(min_version="3.11"), pkgs={ "ray[default]": ["~=2.46.0", latest], }, diff --git a/tests/contrib/ray/test_ray.py b/tests/contrib/ray/test_ray.py index a462dd3a460..97c872ec2ac 100644 --- a/tests/contrib/ray/test_ray.py +++ b/tests/contrib/ray/test_ray.py @@ -1,83 +1,10 @@ -import logging -import os -import re -import subprocess -import time - import pytest +import ray +from ray.util.tracing import tracing_helper from tests.utils import TracerTestCase -def submit_ray_job(script_name, timeout=180): - """ - Submit a Ray job - - Args: - script_name (str): Name of the script file (without path) - timeout (int): Timeout for job submission in seconds - Returns: - subprocess.CompletedProcess: Result of the job submission command - """ - script_path = os.path.join(os.path.dirname(__file__), script_name) - - if not os.path.exists(script_path): - raise FileNotFoundError(f"Script not found: {script_path}") - - # Use a minimal working directory to avoid packaging the entire repository when submitting jobs. - # Packaging the repo can be extremely slow and cause timeouts in CI. - jobs_dir = os.path.dirname(script_path) - cmd = [ - "ray", - "job", - "submit", - "--working-dir", - jobs_dir, - "--no-wait", - "--", - "python", - os.path.basename(script_path), - ] - - print(f"\n{' '.join(cmd)}\n") - result = subprocess.run(cmd, capture_output=True, text=True, timeout=timeout) - print(result.stdout) - - if result.returncode != 0: - logging.error("Failed to submit Ray job. Error: %s", result.stderr) - raise subprocess.CalledProcessError(result.returncode, cmd, result.stdout, result.stderr) - - # Parse submission id from output, e.g., "Job 'raysubmit_XXXX' submitted successfully" - submission_id = None - m = re.search(r"Job '([A-Za-z0-9_]+)' submitted successfully", result.stdout) - if m: - submission_id = m.group(1) - else: - m = re.search(r"(raysubmit_[A-Za-z0-9]+)", result.stdout) - if m: - submission_id = m.group(1) - - if not submission_id: - raise RuntimeError(f"Could not parse Ray submission id from output: {result.stdout}\n{result.stderr}") - - # Poll for completion within the provided timeout - deadline = time.time() + timeout - status_cmd = ["ray", "job", "status", submission_id] - while time.time() < deadline: - status_res = subprocess.run(status_cmd, capture_output=True, text=True, timeout=30) - status_text = (status_res.stdout or "").upper() - if "SUCCEEDED" in status_text: - time.sleep(2) - return result - if "FAILED" in status_text or "STOPPED" in status_text: - time.sleep(2) - raise subprocess.CalledProcessError(1, status_cmd, status_res.stdout, status_res.stderr) - time.sleep(1) - - # Timed out waiting for job completion - raise subprocess.TimeoutExpired(status_cmd, timeout) - - RAY_SNAPSHOT_IGNORES = [ # Ray-specific dynamic values that change between runs "meta.ray.job_id", @@ -108,64 +35,180 @@ def submit_ray_job(script_name, timeout=180): class TestRayIntegration(TracerTestCase): """Test Ray integration with actual cluster setup and job submission""" - @classmethod - def setUpClass(cls): - super(TestRayIntegration, cls).setUpClass() - try: - # Start the ray cluster once for all tests - subprocess.run( - [ - "ray", - "start", - "--head", - "--dashboard-host=127.0.0.1", - "--port=0", - "--tracing-startup-hook=ddtrace.contrib.ray:setup_tracing", - ], - capture_output=True, - text=True, - check=True, - ) - except subprocess.CalledProcessError as e: - pytest.skip(f"Failed to start Ray cluster: {e.stderr}") - except Exception as e: - pytest.skip(f"Failed to wait for Ray cluster readiness: {e}") - - @classmethod - def tearDownClass(cls): - try: - # Stop the ray cluster once after all tests - subprocess.run(["ray", "stop", "--force"], capture_output=True, check=False) - except FileNotFoundError: - pass - - super(TestRayIntegration, cls).tearDownClass() + @pytest.fixture(autouse=True, scope="class") + def ray_cluster(self): + # Configure Ray with minimal resource usage for CI + ray.init( + _tracing_startup_hook="ddtrace.contrib.ray:setup_tracing", + local_mode=True, + # Limit resources to reduce CI load + num_cpus=1, + num_gpus=0, + object_store_memory=78643200, # 50MB + # Disable dashboard to save memory + include_dashboard=False, + # Set log level to reduce I/O + log_to_driver=False, + ) + tracing_helper._global_is_tracing_enabled = False + yield + ray.shutdown() @pytest.mark.snapshot(token="tests.contrib.ray.test_ray.test_simple_task", ignores=RAY_SNAPSHOT_IGNORES) def test_simple_task(self): - submit_ray_job("jobs/simple_task.py") + @ray.remote + def add_one(x): + return x + 1 - @pytest.mark.snapshot(token="tests.contrib.ray.test_ray.test_nested_tasks", ignores=RAY_SNAPSHOT_IGNORES) - def test_nested_tasks(self): - submit_ray_job("jobs/nested_tasks.py") + futures = [add_one.remote(i) for i in range(2)] # Reduced from 4 to 2 tasks + results = ray.get(futures) + assert results == [1, 2], f"Unexpected results: {results}" @pytest.mark.snapshot(token="tests.contrib.ray.test_ray.test_simple_actor", ignores=RAY_SNAPSHOT_IGNORES) def test_simple_actor(self): - submit_ray_job("jobs/simple_actor.py") + @ray.remote + class Counter: + def __init__(self, **kwargs): + self.value = 0 + + def increment(self): + self.value += 1 + return self.value + + def get_value(self): + return self.value + + def increment_and_get(self): + self.increment() + return self.get_value() + + def increment_get_and_double(self): + value = self.increment_and_get() + return value * 2 + + counter_actor = Counter.remote() + current_value = ray.get(counter_actor.increment_get_and_double.remote()) + + assert current_value == 2, f"Unexpected result: {current_value}" + + @pytest.mark.snapshot(token="tests.contrib.ray.test_ray.test_nested_tasks", ignores=RAY_SNAPSHOT_IGNORES) + def test_nested_tasks(self): + @ray.remote + def add_one(x): + return x + 1 + + @ray.remote + def submit_addition_task(x): + futures = add_one.remote(x + 1) + return ray.get(futures) + + future = submit_addition_task.remote(2) + results = ray.get(future) + assert results == 4, f"Unexpected results: {results}" @pytest.mark.snapshot(token="tests.contrib.ray.test_ray.test_actor_and_task", ignores=RAY_SNAPSHOT_IGNORES) def test_actor_and_task(self): - submit_ray_job("jobs/actor_and_task.py") + @ray.remote + def compute_value(x): + return x + 1 + + @ray.remote + def batch_compute(values): + futures = [compute_value.remote(val) for val in values] + return ray.get(futures) + + @ray.remote + class ComputationManager: + def __init__(self, **kwargs): + self.computation_count = 0 + self.results = [] + + def increment_count(self): + self.computation_count += 1 + return self.computation_count + + def get_count(self): + return self.computation_count + + def add_result(self, result): + self.results.append(result) + return len(self.results) + + def get_results(self): + return self.results + + def compute_and_store(self, values): + self.increment_count() + + future = batch_compute.remote(values) + results = ray.get(future) + + for result in results: + self.add_result(result) + + return { + "computation_count": self.get_count(), + "results": set(results), + "total_stored": len(self.get_results()), + } + + manager = ComputationManager.remote() + result = ray.get(manager.compute_and_store.remote([2, 3, 4])) + assert result == { + "computation_count": 1, + "results": {3, 4, 5}, + "total_stored": 3, + }, f"Unexpected results: {result['results']}" @pytest.mark.snapshot(token="tests.contrib.ray.test_ray.test_actor_interactions", ignores=RAY_SNAPSHOT_IGNORES) def test_actor_interactions(self): - submit_ray_job("jobs/actor_interactions.py") + @ray.remote + class Sender: + def __init__(self, **kwargs): + self.sent_count = 0 + + def send_message(self, receiver, message): + self.sent_count += 1 + future = receiver.receive_message.remote(message) + return ray.get(future) + + def get_sent_count(self): + return self.sent_count + + @ray.remote + class Receiver: + def __init__(self, **kwargs): + self.received_messages = [] - @pytest.mark.snapshot(token="tests.contrib.ray.test_ray.error_in_task", ignores=RAY_SNAPSHOT_IGNORES) - def test_error_in_task(self): - with pytest.raises(subprocess.CalledProcessError): - submit_ray_job("jobs/error_in_task.py") + def receive_message(self, message): + self.received_messages.append(message) + return f"received: {message}" + + def get_messages(self): + return self.received_messages + + @ray.remote + def run_test(): + sender = Sender.remote() + receiver = Receiver.remote() + + result = ray.get(sender.send_message.remote(receiver, "hello")) + sent_count = ray.get(sender.get_sent_count.remote()) + messages = ray.get(receiver.get_messages.remote()) + return result, sent_count, messages + + result, sent_count, messages = ray.get(run_test.remote()) + + assert result == "received: hello" + assert sent_count == 1 + assert messages == ["hello"] @pytest.mark.snapshot(token="tests.contrib.ray.test_ray.test_simple_wait", ignores=RAY_SNAPSHOT_IGNORES) def test_simple_wait(self): - submit_ray_job("jobs/simple_wait.py") + @ray.remote + def add_one(x): + return x + 1 + + done, running = ray.wait([add_one.remote(42)], num_returns=1, timeout=60) # Reduced timeout from 60s to 10s + assert running == [], f"Expected no running tasks, got {len(running)}" + assert ray.get(done) == [43], f"Expected done to be [43], got {done}" diff --git a/tests/snapshots/tests.contrib.ray.test_ray.error_in_task.json b/tests/snapshots/tests.contrib.ray.test_ray.error_in_task.json deleted file mode 100644 index 050c8dd6323..00000000000 --- a/tests/snapshots/tests.contrib.ray.test_ray.error_in_task.json +++ /dev/null @@ -1,569 +0,0 @@ -[[ - { - "name": "ray.job", - "service": "error_in_task", - "resource": "ray.job", - "trace_id": 0, - "span_id": 1, - "parent_id": 0, - "type": "ray", - "error": 1, - "meta": { - "_dd.base_service": "ray.dashboard", - "_dd.hostname": "docker-desktop", - "_dd.p.dm": "-0", - "_dd.p.tid": "68d25d3800000000", - "component": "ray", - "error.message": "Job entrypoint command failed with exit code 1, last available logs (truncated to 20,000 chars):\n raise value.as_instanceof_cause()\nray.exceptions.RayTaskError(ValueError): \u001b[36mray::add_one()\u001b[39m (pid=2216, ip=192.168.65.3)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 72, in wrapped_function\n return _wrap_task_execution(function, *args, **kwargs)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 99, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n\u001b[36m(pid=2214)\u001b[0m 2025-09-23 08:41:31,417 WARNING [ddtrace.contrib.ray] [ray.py:19] [dd.service=ray._private.workers dd.env= dd.version= dd.trace_id=0 dd.span_id=0] - Deactivating OpenTelemetry tracing in favor of Datadog tracing as both are not compatible.\u001b[32m [repeated 3x across cluster] (Ray deduplicates logs by default. Set RAY_DEDUP_LOGS=0 to disable log deduplication, or see https://docs.ray.io/en/master/ray-observability/user-guides/configure-logging.html#log-deduplication for more options.)\u001b[0m\n", - "language": "python", - "ray.job.message": "Job entrypoint command failed with exit code 1, last available logs (truncated to 20,000 chars):\n raise value.as_instanceof_cause()\nray.exceptions.RayTaskError(ValueError): \u001b[36mray::add_one()\u001b[39m (pid=2216, ip=192.168.65.3)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 72, in wrapped_function\n return _wrap_task_execution(function, *args, **kwargs)\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 99, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n\u001b[36m(pid=2214)\u001b[0m 2025-09-23 08:41:31,417 WARNING [ddtrace.contrib.ray] [ray.py:19] [dd.service=ray._private.workers dd.env= dd.version= dd.trace_id=0 dd.span_id=0] - Deactivating OpenTelemetry tracing in favor of Datadog tracing as both are not compatible.\u001b[32m [repeated 3x across cluster] (Ray deduplicates logs by default. Set RAY_DEDUP_LOGS=0 to disable log deduplication, or see https://docs.ray.io/en/master/ray-observability/user-guides/configure-logging.html#log-deduplication for more options.)\u001b[0m\n", - "ray.job.status": "FAILED", - "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1045", - "ray.submission_id": "raysubmit_WzEjRd5Y5fihD5cg", - "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "11b30a8c1d714183b0fea7bbd9410a29" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 1045 - }, - "duration": 5830202044, - "start": 1758616888198178626 - }, - { - "name": "ray.job.submit", - "service": "error_in_task", - "resource": "ray.job.submit", - "trace_id": 0, - "span_id": 2, - "parent_id": 1, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray.dashboard", - "component": "ray", - "ray.job.submit_status": "success", - "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1045", - "ray.submission_id": "raysubmit_WzEjRd5Y5fihD5cg", - "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "span.kind": "producer" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_sampling_priority_v1": 2 - }, - "duration": 58125, - "start": 1758616888198378876 - }, - { - "name": "JobSupervisor.run.remote()", - "service": "error_in_task", - "resource": "JobSupervisor.run.remote()", - "trace_id": 0, - "span_id": 3, - "parent_id": 1, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray.dashboard", - "component": "ray", - "ray.actor_method.args": "[]", - "ray.actor_method.kwargs": "{'_start_signal_actor': None, 'resources_specified': False}", - "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1045", - "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "span.kind": "producer" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_sampling_priority_v1": 2 - }, - "duration": 325333, - "start": 1758616888201782293 - }, - { - "name": "JobSupervisor.run", - "service": "error_in_task", - "resource": "JobSupervisor.run", - "trace_id": 0, - "span_id": 4, - "parent_id": 3, - "type": "ray", - "error": 1, - "meta": { - "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68d25d3800000000", - "_dd.parent_id": "fd334ee406d185dc", - "component": "ray", - "error.message": "", - "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 27, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 278, in _traced_run_method\n raise e\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 271, in _traced_run_method\n await method(self, *args, **kwargs)\n File \"/home/bits/project/.riot/venv_py3135_mock_pytest_pytest-mock_coverage_pytest-cov_opentracing_hypothesis6451_pytest-asyncio_ray[default]/lib/python3.13/site-packages/ray/dashboard/modules/job/job_supervisor.py\", line 472, in run\n ray.actor.exit_actor()\n ~~~~~~~~~~~~~~~~~~~~^^\n File \"/home/bits/project/.riot/venv_py3135_mock_pytest_pytest-mock_coverage_pytest-cov_opentracing_hypothesis6451_pytest-asyncio_ray[default]/lib/python3.13/site-packages/ray/actor.py\", line 2387, in exit_actor\n raise AsyncioActorExit()\nray.exceptions.AsyncioActorExit\n", - "error.type": "ray.exceptions.AsyncioActorExit", - "language": "python", - "ray.actor_id": "c17b20a6f84fda58a3ec32fc01000000", - "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2117", - "ray.submission_id": "raysubmit_WzEjRd5Y5fihD5cg", - "ray.task_id": "71b133a11e1c461cc17b20a6f84fda58a3ec32fc01000000", - "ray.worker_id": "95a0f303023beb205352ad11ad8293be5a5ff35be0a3baab7dd7abc3", - "runtime-id": "eb1825d368b0403ab11e42af2d19f535", - "span.kind": "consumer", - "traceparent": "00-68d25d3800000000c383f64df2ec0a0a-fd334ee406d185dc-00", - "tracestate": "dd=p:fd334ee406d185dc" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 2117 - }, - "duration": 4351127127, - "start": 1758616888999397418 - }, - { - "name": "JobSupervisor._get_driver_env_vars", - "service": "error_in_task", - "resource": "JobSupervisor._get_driver_env_vars", - "trace_id": 0, - "span_id": 5, - "parent_id": 4, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "component": "ray", - "ray.actor_id": "c17b20a6f84fda58a3ec32fc01000000", - "ray.actor_method.args": "(False,)", - "ray.actor_method.kwargs": "{}", - "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2117", - "ray.submission_id": "raysubmit_WzEjRd5Y5fihD5cg", - "ray.task_id": "71b133a11e1c461cc17b20a6f84fda58a3ec32fc01000000", - "ray.worker_id": "95a0f303023beb205352ad11ad8293be5a5ff35be0a3baab7dd7abc3", - "span.kind": "consumer" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_sampling_priority_v1": 2 - }, - "duration": 1396125, - "start": 1758616889000761376 - }, - { - "name": "JobSupervisor._get_driver_runtime_env", - "service": "error_in_task", - "resource": "JobSupervisor._get_driver_runtime_env", - "trace_id": 0, - "span_id": 11, - "parent_id": 5, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "component": "ray", - "ray.actor_id": "c17b20a6f84fda58a3ec32fc01000000", - "ray.actor_method.args": "(False,)", - "ray.actor_method.kwargs": "{}", - "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2117", - "ray.submission_id": "raysubmit_WzEjRd5Y5fihD5cg", - "ray.task_id": "71b133a11e1c461cc17b20a6f84fda58a3ec32fc01000000", - "ray.worker_id": "95a0f303023beb205352ad11ad8293be5a5ff35be0a3baab7dd7abc3", - "span.kind": "consumer" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_sampling_priority_v1": 2 - }, - "duration": 44000, - "start": 1758616889002091918 - }, - { - "name": "exec error_in_task.py", - "service": "error_in_task", - "resource": "exec error_in_task.py", - "trace_id": 0, - "span_id": 6, - "parent_id": 4, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "component": "ray", - "ray.actor_id": "c17b20a6f84fda58a3ec32fc01000000", - "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2117", - "ray.submission_id": "raysubmit_WzEjRd5Y5fihD5cg", - "ray.task_id": "71b133a11e1c461cc17b20a6f84fda58a3ec32fc01000000", - "ray.worker_id": "95a0f303023beb205352ad11ad8293be5a5ff35be0a3baab7dd7abc3", - "span.kind": "consumer" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_sampling_priority_v1": 2 - }, - "duration": 412667, - "start": 1758616889002286668 - }, - { - "name": "__main__.add_one.remote()", - "service": "error_in_task", - "resource": "__main__.add_one.remote()", - "trace_id": 0, - "span_id": 7, - "parent_id": 4, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "project", - "_dd.p.tid": "68d25d3800000000", - "_dd.parent_id": "de1cfb385417ddf2", - "component": "ray", - "language": "python", - "ray.job_id": "04000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2167", - "ray.submission_id": "raysubmit_WzEjRd5Y5fihD5cg", - "ray.task.args": "(0,)", - "ray.task.kwargs": "{}", - "ray.task.submit_status": "success", - "ray.worker_id": "04000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "0c5ee90f2a9c4edc8d64aa9d96b698f8", - "span.kind": "producer", - "traceparent": "00-68d25d3800000000c383f64df2ec0a0a-de1cfb385417ddf2-00", - "tracestate": "dd=p:de1cfb385417ddf2;s:0" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 2167 - }, - "duration": 3078916, - "start": 1758616889576958002 - }, - { - "name": "__main__.add_one", - "service": "error_in_task", - "resource": "__main__.add_one", - "trace_id": 0, - "span_id": 12, - "parent_id": 7, - "type": "ray", - "error": 1, - "meta": { - "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68d25d3800000000", - "_dd.parent_id": "d3757f5c621cfd13", - "component": "ray", - "error.message": "foo", - "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 27, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 99, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", - "error.type": "builtins.ValueError", - "language": "python", - "ray.job_id": "04000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2216", - "ray.submission_id": "raysubmit_WzEjRd5Y5fihD5cg", - "ray.task.args": "(0,)", - "ray.task.kwargs": "{}", - "ray.task.status": "error", - "ray.task_id": "ca80f3a8e8ba2e50ffffffffffffffffffffffff04000000", - "ray.worker_id": "1ec53017c11e7e340ebeab025800d33f253b51523a636a6be79f6569", - "runtime-id": "a2895761336944d4bad192587fef0fcf", - "span.kind": "consumer", - "traceparent": "00-68d25d3800000000c383f64df2ec0a0a-d3757f5c621cfd13-00", - "tracestate": "dd=p:d3757f5c621cfd13;s:0" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 2216 - }, - "duration": 4341166, - "start": 1758616891355338211 - }, - { - "name": "__main__.add_one.remote()", - "service": "error_in_task", - "resource": "__main__.add_one.remote()", - "trace_id": 0, - "span_id": 8, - "parent_id": 4, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "project", - "_dd.p.tid": "68d25d3800000000", - "_dd.parent_id": "de1cfb385417ddf2", - "component": "ray", - "language": "python", - "ray.job_id": "04000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2167", - "ray.submission_id": "raysubmit_WzEjRd5Y5fihD5cg", - "ray.task.args": "(1,)", - "ray.task.kwargs": "{}", - "ray.task.submit_status": "success", - "ray.worker_id": "04000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "0c5ee90f2a9c4edc8d64aa9d96b698f8", - "span.kind": "producer", - "traceparent": "00-68d25d3800000000c383f64df2ec0a0a-de1cfb385417ddf2-00", - "tracestate": "dd=p:de1cfb385417ddf2;s:0" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 2167 - }, - "duration": 200208, - "start": 1758616889582462127 - }, - { - "name": "__main__.add_one", - "service": "error_in_task", - "resource": "__main__.add_one", - "trace_id": 0, - "span_id": 13, - "parent_id": 8, - "type": "ray", - "error": 1, - "meta": { - "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68d25d3800000000", - "_dd.parent_id": "2b1f8b1e098d4629", - "component": "ray", - "error.message": "foo", - "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 27, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 99, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", - "error.type": "builtins.ValueError", - "language": "python", - "ray.job_id": "04000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2215", - "ray.submission_id": "raysubmit_WzEjRd5Y5fihD5cg", - "ray.task.args": "(1,)", - "ray.task.kwargs": "{}", - "ray.task.status": "error", - "ray.task_id": "d8c1ad1586102897ffffffffffffffffffffffff04000000", - "ray.worker_id": "0d7f37927134d1cc57e6ad71c33478b5d6af8b74d722c622512d2e37", - "runtime-id": "be42bf3885894b5396a0a62bcc8f346e", - "span.kind": "consumer", - "traceparent": "00-68d25d3800000000c383f64df2ec0a0a-2b1f8b1e098d4629-00", - "tracestate": "dd=p:2b1f8b1e098d4629;s:0" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 2215 - }, - "duration": 2692666, - "start": 1758616891367640836 - }, - { - "name": "__main__.add_one.remote()", - "service": "error_in_task", - "resource": "__main__.add_one.remote()", - "trace_id": 0, - "span_id": 9, - "parent_id": 4, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "project", - "_dd.p.tid": "68d25d3800000000", - "_dd.parent_id": "de1cfb385417ddf2", - "component": "ray", - "language": "python", - "ray.job_id": "04000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2167", - "ray.submission_id": "raysubmit_WzEjRd5Y5fihD5cg", - "ray.task.args": "(2,)", - "ray.task.kwargs": "{}", - "ray.task.submit_status": "success", - "ray.worker_id": "04000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "0c5ee90f2a9c4edc8d64aa9d96b698f8", - "span.kind": "producer", - "traceparent": "00-68d25d3800000000c383f64df2ec0a0a-de1cfb385417ddf2-00", - "tracestate": "dd=p:de1cfb385417ddf2;s:0" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 2167 - }, - "duration": 205000, - "start": 1758616889584552377 - }, - { - "name": "__main__.add_one", - "service": "error_in_task", - "resource": "__main__.add_one", - "trace_id": 0, - "span_id": 14, - "parent_id": 9, - "type": "ray", - "error": 1, - "meta": { - "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68d25d3800000000", - "_dd.parent_id": "30e1689d00ba0109", - "component": "ray", - "error.message": "foo", - "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 27, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 99, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", - "error.type": "builtins.ValueError", - "language": "python", - "ray.job_id": "04000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2214", - "ray.submission_id": "raysubmit_WzEjRd5Y5fihD5cg", - "ray.task.args": "(2,)", - "ray.task.kwargs": "{}", - "ray.task.status": "error", - "ray.task_id": "5da13aa9e2150759ffffffffffffffffffffffff04000000", - "ray.worker_id": "fc9ed8aa718ce5abc6eb375a9ea953af54b5f8be6d61e5dbbead65df", - "runtime-id": "5e11504350e6467d967db89cb45210fc", - "span.kind": "consumer", - "traceparent": "00-68d25d3800000000c383f64df2ec0a0a-30e1689d00ba0109-00", - "tracestate": "dd=p:30e1689d00ba0109;s:0" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 2214 - }, - "duration": 2382125, - "start": 1758616891421098586 - }, - { - "name": "__main__.add_one.remote()", - "service": "error_in_task", - "resource": "__main__.add_one.remote()", - "trace_id": 0, - "span_id": 10, - "parent_id": 4, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "project", - "_dd.p.tid": "68d25d3800000000", - "_dd.parent_id": "de1cfb385417ddf2", - "component": "ray", - "language": "python", - "ray.job_id": "04000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2167", - "ray.submission_id": "raysubmit_WzEjRd5Y5fihD5cg", - "ray.task.args": "(3,)", - "ray.task.kwargs": "{}", - "ray.task.submit_status": "success", - "ray.worker_id": "04000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "0c5ee90f2a9c4edc8d64aa9d96b698f8", - "span.kind": "producer", - "traceparent": "00-68d25d3800000000c383f64df2ec0a0a-de1cfb385417ddf2-00", - "tracestate": "dd=p:de1cfb385417ddf2;s:0" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 2167 - }, - "duration": 1176625, - "start": 1758616889586701043 - }, - { - "name": "__main__.add_one", - "service": "error_in_task", - "resource": "__main__.add_one", - "trace_id": 0, - "span_id": 15, - "parent_id": 10, - "type": "ray", - "error": 1, - "meta": { - "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68d25d3800000000", - "_dd.parent_id": "f2f63692e6c3d03f", - "component": "ray", - "error.message": "foo", - "error.stack": "Traceback (most recent call last):\n File \"/home/bits/project/ddtrace/contrib/internal/ray/span_manager.py\", line 27, in long_running_ray_span\n yield span\n File \"/home/bits/project/ddtrace/contrib/internal/ray/patch.py\", line 99, in _wrap_task_execution\n result = wrapped(*args, **kwargs)\n File \"/home/bits/project/tests/contrib/ray/jobs/error_in_task.py\", line 9, in add_one\n raise ValueError(\"foo\")\nValueError: foo\n", - "error.type": "builtins.ValueError", - "language": "python", - "ray.job_id": "04000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2213", - "ray.submission_id": "raysubmit_WzEjRd5Y5fihD5cg", - "ray.task.args": "(3,)", - "ray.task.kwargs": "{}", - "ray.task.status": "error", - "ray.task_id": "011ae9488efe4e25ffffffffffffffffffffffff04000000", - "ray.worker_id": "f3690eefe56ee4dad29d7bded81c917156500c9deee1bb7c0814baf9", - "runtime-id": "b1a75c80db004e74b7c0cb4f7809fa50", - "span.kind": "consumer", - "traceparent": "00-68d25d3800000000c383f64df2ec0a0a-f2f63692e6c3d03f-00", - "tracestate": "dd=p:f2f63692e6c3d03f;s:0" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 2213 - }, - "duration": 3925500, - "start": 1758616891395474502 - }]] diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_actor_and_task.json b/tests/snapshots/tests.contrib.ray.test_ray.test_actor_and_task.json index 7b02b86949f..6f807b85bd9 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_actor_and_task.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_actor_and_task.json @@ -1,28 +1,27 @@ [[ { - "name": "ray.job", - "service": "actor_and_task", - "resource": "ray.job", + "name": "tests.contrib.ray.test_ray.compute_value.remote()", + "service": "tests.contrib.ray", + "resource": "tests.contrib.ray.test_ray.compute_value.remote()", "trace_id": 0, "span_id": 1, "parent_id": 0, "type": "ray", "error": 0, "meta": { - "_dd.base_service": "ray.dashboard", "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68d25d2600000000", + "_dd.p.tid": "68d562a500000000", "component": "ray", "language": "python", - "ray.job.message": "Job finished successfully.", - "ray.job.status": "SUCCEEDED", "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1045", - "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", + "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.task.args": "(3,)", + "ray.task.kwargs": "{}", + "ray.task.submit_status": "success", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "11b30a8c1d714183b0fea7bbd9410a29" + "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", + "span.kind": "producer" }, "metrics": { "_dd.djm.enabled": 1, @@ -31,59 +30,163 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1045 + "process_id": 543 }, - "duration": 6045313628, - "start": 1758616870016830715 + "duration": 438583, + "start": 1758814885198426050 }, { - "name": "ray.job.submit", - "service": "actor_and_task", - "resource": "ray.job.submit", + "name": "tests.contrib.ray.test_ray.TestRayIntegration.test_actor_and_task..compute_value", + "service": "tests.contrib.ray", + "resource": "tests.contrib.ray.test_ray.TestRayIntegration.test_actor_and_task..compute_value", "trace_id": 0, "span_id": 2, "parent_id": 1, "type": "ray", "error": 0, "meta": { - "_dd.base_service": "ray.dashboard", "component": "ray", - "ray.job.submit_status": "success", "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1045", - "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", + "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.task.args": "(3,)", + "ray.task.kwargs": "{}", + "ray.task.status": "success", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "span.kind": "producer" + "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", + "span.kind": "consumer" }, "metrics": { "_dd.djm.enabled": 1, "_dd.filter.kept": 1, "_dd.measured": 1, - "_sampling_priority_v1": 2 + "_dd.top_level": 1, + "_sampling_priority_v1": 2, + "process_id": 543 }, - "duration": 59750, - "start": 1758616870017036465 - }, + "duration": 51458, + "start": 1758814885198751050 + }], +[ + { + "name": "tests.contrib.ray.test_ray.compute_value.remote()", + "service": "tests.contrib.ray", + "resource": "tests.contrib.ray.test_ray.compute_value.remote()", + "trace_id": 1, + "span_id": 1, + "parent_id": 0, + "type": "ray", + "error": 0, + "meta": { + "_dd.hostname": "docker-desktop", + "_dd.p.dm": "-0", + "_dd.p.tid": "68d562a500000000", + "component": "ray", + "language": "python", + "ray.job_id": "01000000", + "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.task.args": "(4,)", + "ray.task.kwargs": "{}", + "ray.task.submit_status": "success", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", + "span.kind": "producer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 543 + }, + "duration": 388333, + "start": 1758814885199183592 + }, { - "name": "JobSupervisor.run.remote()", - "service": "actor_and_task", - "resource": "JobSupervisor.run.remote()", - "trace_id": 0, - "span_id": 3, + "name": "tests.contrib.ray.test_ray.TestRayIntegration.test_actor_and_task..compute_value", + "service": "tests.contrib.ray", + "resource": "tests.contrib.ray.test_ray.TestRayIntegration.test_actor_and_task..compute_value", + "trace_id": 1, + "span_id": 2, + "parent_id": 1, + "type": "ray", + "error": 0, + "meta": { + "component": "ray", + "ray.job_id": "01000000", + "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.task.args": "(4,)", + "ray.task.kwargs": "{}", + "ray.task.status": "success", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", + "span.kind": "consumer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_sampling_priority_v1": 2, + "process_id": 543 + }, + "duration": 49459, + "start": 1758814885199462758 + }], +[ + { + "name": "TestRayIntegration.test_actor_and_task..ComputationManager.compute_and_store.remote()", + "service": "tests.contrib.ray", + "resource": "TestRayIntegration.test_actor_and_task..ComputationManager.compute_and_store.remote()", + "trace_id": 2, + "span_id": 1, + "parent_id": 0, + "type": "ray", + "error": 0, + "meta": { + "_dd.hostname": "docker-desktop", + "_dd.p.dm": "-0", + "_dd.p.tid": "68d562a500000000", + "component": "ray", + "language": "python", + "ray.actor_method.args": "([2, 3, 4],)", + "ray.actor_method.kwargs": "{}", + "ray.job_id": "01000000", + "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", + "span.kind": "producer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 543 + }, + "duration": 7708750, + "start": 1758814885192457050 + }, + { + "name": "ComputationManager.compute_and_store", + "service": "tests.contrib.ray", + "resource": "ComputationManager.compute_and_store", + "trace_id": 2, + "span_id": 2, "parent_id": 1, "type": "ray", "error": 0, "meta": { - "_dd.base_service": "ray.dashboard", "component": "ray", - "ray.actor_method.args": "[]", - "ray.actor_method.kwargs": "{'_start_signal_actor': None, 'resources_specified': False}", + "ray.actor_method.args": "([2, 3, 4],)", + "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1045", + "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "span.kind": "producer" + "span.kind": "consumer" }, "metrics": { "_dd.djm.enabled": 1, @@ -91,102 +194,113 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 294375, - "start": 1758616870064965965 + "duration": 6421958, + "start": 1758814885193516092 }, { - "name": "JobSupervisor.run", - "service": "actor_and_task", - "resource": "JobSupervisor.run", - "trace_id": 0, + "name": "ComputationManager.increment_count", + "service": "tests.contrib.ray", + "resource": "ComputationManager.increment_count", + "trace_id": 2, + "span_id": 3, + "parent_id": 2, + "type": "ray", + "error": 0, + "meta": { + "component": "ray", + "ray.actor_method.args": "()", + "ray.actor_method.kwargs": "{}", + "ray.job_id": "01000000", + "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "span.kind": "consumer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 101917, + "start": 1758814885193933425 + }, + { + "name": "tests.contrib.ray.test_ray.batch_compute.remote()", + "service": "tests.contrib.ray", + "resource": "tests.contrib.ray.test_ray.batch_compute.remote()", + "trace_id": 2, "span_id": 4, - "parent_id": 3, + "parent_id": 2, "type": "ray", "error": 0, "meta": { - "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68d25d2600000000", - "_dd.parent_id": "fbf05e994224bd49", "component": "ray", - "language": "python", - "ray.actor_id": "9b0034a6d26c0dca667bcd5b01000000", "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1503", - "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", - "ray.task_id": "16310a0f0a45af5c9b0034a6d26c0dca667bcd5b01000000", - "ray.worker_id": "465c53eda91915417adf04ce9589e33dbe1127935755a3a0afd375bb", - "runtime-id": "a313737c70164843bc9bde57e018d6d1", - "span.kind": "consumer", - "traceparent": "00-68d25d26000000000183b1c728d696b1-fbf05e994224bd49-00", - "tracestate": "dd=p:fbf05e994224bd49" + "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.task.args": "([2, 3, 4],)", + "ray.task.kwargs": "{}", + "ray.task.submit_status": "success", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "span.kind": "producer" }, "metrics": { "_dd.djm.enabled": 1, "_dd.filter.kept": 1, "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 1503 + "_sampling_priority_v1": 2 }, - "duration": 4555104003, - "start": 1758616871031170590 + "duration": 5651666, + "start": 1758814885194200842 }, { - "name": "JobSupervisor._get_driver_env_vars", - "service": "actor_and_task", - "resource": "JobSupervisor._get_driver_env_vars", - "trace_id": 0, + "name": "tests.contrib.ray.test_ray.TestRayIntegration.test_actor_and_task..batch_compute", + "service": "tests.contrib.ray", + "resource": "tests.contrib.ray.test_ray.TestRayIntegration.test_actor_and_task..batch_compute", + "trace_id": 2, "span_id": 5, "parent_id": 4, "type": "ray", "error": 0, "meta": { - "_dd.base_service": "ray._private.workers", "component": "ray", - "ray.actor_id": "9b0034a6d26c0dca667bcd5b01000000", - "ray.actor_method.args": "(False,)", - "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1503", - "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", - "ray.task_id": "16310a0f0a45af5c9b0034a6d26c0dca667bcd5b01000000", - "ray.worker_id": "465c53eda91915417adf04ce9589e33dbe1127935755a3a0afd375bb", + "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.task.args": "([2, 3, 4],)", + "ray.task.kwargs": "{}", + "ray.task.status": "success", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", "span.kind": "consumer" }, "metrics": { "_dd.djm.enabled": 1, "_dd.filter.kept": 1, "_dd.measured": 1, - "_sampling_priority_v1": 2 + "_dd.top_level": 1, + "_sampling_priority_v1": 2, + "process_id": 543 }, - "duration": 1378417, - "start": 1758616871032564882 + "duration": 3361333, + "start": 1758814885196434092 }, { - "name": "JobSupervisor._get_driver_runtime_env", - "service": "actor_and_task", - "resource": "JobSupervisor._get_driver_runtime_env", - "trace_id": 0, - "span_id": 8, + "name": "tests.contrib.ray.test_ray.compute_value.remote()", + "service": "tests.contrib.ray", + "resource": "tests.contrib.ray.test_ray.compute_value.remote()", + "trace_id": 2, + "span_id": 6, "parent_id": 5, "type": "ray", "error": 0, "meta": { - "_dd.base_service": "ray._private.workers", "component": "ray", - "ray.actor_id": "9b0034a6d26c0dca667bcd5b01000000", - "ray.actor_method.args": "(False,)", - "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1503", - "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", - "ray.task_id": "16310a0f0a45af5c9b0034a6d26c0dca667bcd5b01000000", - "ray.worker_id": "465c53eda91915417adf04ce9589e33dbe1127935755a3a0afd375bb", - "span.kind": "consumer" + "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.task.args": "(2,)", + "ray.task.kwargs": "{}", + "ray.task.submit_status": "success", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "span.kind": "producer" }, "metrics": { "_dd.djm.enabled": 1, @@ -194,601 +308,37 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 44541, - "start": 1758616871033875299 - }, - { - "name": "exec actor_and_task.py", - "service": "actor_and_task", - "resource": "exec actor_and_task.py", - "trace_id": 0, - "span_id": 6, - "parent_id": 4, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "component": "ray", - "ray.actor_id": "9b0034a6d26c0dca667bcd5b01000000", - "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1503", - "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", - "ray.task_id": "16310a0f0a45af5c9b0034a6d26c0dca667bcd5b01000000", - "ray.worker_id": "465c53eda91915417adf04ce9589e33dbe1127935755a3a0afd375bb", - "span.kind": "consumer" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_sampling_priority_v1": 2 - }, - "duration": 428458, - "start": 1758616871034082507 - }, - { - "name": "ComputationManager.compute_and_store.remote()", - "service": "actor_and_task", - "resource": "ComputationManager.compute_and_store.remote()", - "trace_id": 0, - "span_id": 7, - "parent_id": 4, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "project", - "_dd.p.tid": "68d25d2600000000", - "_dd.parent_id": "d13ef6b70032cde6", - "component": "ray", - "language": "python", - "ray.actor_method.args": "([2, 3, 4],)", - "ray.actor_method.kwargs": "{}", - "ray.job_id": "02000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1556", - "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", - "ray.worker_id": "02000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "c8239aff43dd461d9e36933abd1a1f6b", - "span.kind": "producer", - "traceparent": "00-68d25d26000000000183b1c728d696b1-d13ef6b70032cde6-00", - "tracestate": "dd=p:d13ef6b70032cde6;s:0" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 1556 - }, - "duration": 446125, - "start": 1758616871644129257 - }, - { - "name": "ComputationManager.compute_and_store", - "service": "actor_and_task", - "resource": "ComputationManager.compute_and_store", - "trace_id": 0, - "span_id": 9, - "parent_id": 7, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68d25d2600000000", - "_dd.parent_id": "ccdedad97b388ff3", - "component": "ray", - "language": "python", - "ray.actor_id": "263e2c9685bbf8ae33316a5402000000", - "ray.actor_method.args": "([2, 3, 4],)", - "ray.actor_method.kwargs": "{}", - "ray.job_id": "02000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1612", - "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", - "ray.task_id": "e082c90ab8422b00263e2c9685bbf8ae33316a5402000000", - "ray.worker_id": "9c3c649c06114fab8769d3ac4421ca89f0e82dcefe98a99505072161", - "runtime-id": "df35de0201dc4686a42b072a887cf1a0", - "span.kind": "consumer", - "traceparent": "00-68d25d26000000000183b1c728d696b1-ccdedad97b388ff3-00", - "tracestate": "dd=p:ccdedad97b388ff3;s:0" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 1612 - }, - "duration": 2814218502, - "start": 1758616872476718549 + "duration": 1821333, + "start": 1758814885196572925 }, { - "name": "ComputationManager.increment_count", - "service": "actor_and_task", - "resource": "ComputationManager.increment_count", - "trace_id": 0, - "span_id": 10, - "parent_id": 9, + "name": "tests.contrib.ray.test_ray.TestRayIntegration.test_actor_and_task..compute_value", + "service": "tests.contrib.ray", + "resource": "tests.contrib.ray.test_ray.TestRayIntegration.test_actor_and_task..compute_value", + "trace_id": 2, + "span_id": 7, + "parent_id": 6, "type": "ray", "error": 0, "meta": { - "_dd.base_service": "ray._private.workers", "component": "ray", - "ray.actor_id": "263e2c9685bbf8ae33316a5402000000", - "ray.actor_method.args": "()", - "ray.actor_method.kwargs": "{}", - "ray.job_id": "02000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1612", - "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", - "ray.task_id": "e082c90ab8422b00263e2c9685bbf8ae33316a5402000000", - "ray.worker_id": "9c3c649c06114fab8769d3ac4421ca89f0e82dcefe98a99505072161", - "span.kind": "consumer" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_sampling_priority_v1": 2 - }, - "duration": 41875, - "start": 1758616872476938133 - }, - { - "name": "__main__.batch_compute.remote()", - "service": "actor_and_task", - "resource": "__main__.batch_compute.remote()", - "trace_id": 0, - "span_id": 11, - "parent_id": 9, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "component": "ray", - "ray.actor_id": "263e2c9685bbf8ae33316a5402000000", - "ray.job_id": "02000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1612", - "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", - "ray.task.args": "([2, 3, 4],)", + "ray.job_id": "01000000", + "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.task.args": "(2,)", "ray.task.kwargs": "{}", - "ray.task.submit_status": "success", - "ray.task_id": "e082c90ab8422b00263e2c9685bbf8ae33316a5402000000", - "ray.worker_id": "9c3c649c06114fab8769d3ac4421ca89f0e82dcefe98a99505072161", - "span.kind": "producer" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_sampling_priority_v1": 2 - }, - "duration": 1712459, - "start": 1758616872477036674 - }, - { - "name": "__main__.batch_compute", - "service": "actor_and_task", - "resource": "__main__.batch_compute", - "trace_id": 0, - "span_id": 17, - "parent_id": 11, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68d25d2600000000", - "_dd.parent_id": "2517805700d01464", - "component": "ray", - "language": "python", - "ray.job_id": "02000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1671", - "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", - "ray.task.args": "([2, 3, 4],)", - "ray.task.kwargs": "{}", - "ray.task.status": "success", - "ray.task_id": "1b23a186758c54dbffffffffffffffffffffffff02000000", - "ray.worker_id": "1ce745070c826fbfe5269a6671198d651507a4c57927c65a5e3c2e18", - "runtime-id": "f95e4dab988d4d1d8107f7bf535f20af", - "span.kind": "consumer", - "traceparent": "00-68d25d26000000000183b1c728d696b1-2517805700d01464-00", - "tracestate": "dd=p:2517805700d01464;s:0" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 1671 - }, - "duration": 1838300167, - "start": 1758616873449646675 - }, - { - "name": "__main__.compute_value.remote()", - "service": "actor_and_task", - "resource": "__main__.compute_value.remote()", - "trace_id": 0, - "span_id": 18, - "parent_id": 17, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "component": "ray", - "ray.job_id": "02000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1671", - "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", - "ray.task.args": "(2,)", - "ray.task.kwargs": "{}", - "ray.task.submit_status": "success", - "ray.task_id": "1b23a186758c54dbffffffffffffffffffffffff02000000", - "ray.worker_id": "1ce745070c826fbfe5269a6671198d651507a4c57927c65a5e3c2e18", - "span.kind": "producer" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_sampling_priority_v1": 2 - }, - "duration": 1481750, - "start": 1758616873449978800 - }, - { - "name": "__main__.compute_value", - "service": "actor_and_task", - "resource": "__main__.compute_value", - "trace_id": 0, - "span_id": 21, - "parent_id": 18, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68d25d2600000000", - "_dd.parent_id": "c594dffe2c81a94d", - "component": "ray", - "language": "python", - "ray.job_id": "02000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1719", - "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", - "ray.task.args": "(2,)", - "ray.task.kwargs": "{}", - "ray.task.status": "success", - "ray.task_id": "6be3145425b13a18ffffffffffffffffffffffff02000000", - "ray.worker_id": "3b83afdd6b613c41005c3feaf9dd33d7988fc781470fb1a78e2b0047", - "runtime-id": "ebb55e268d53468cba5c333c725bb259", - "span.kind": "consumer", - "traceparent": "00-68d25d26000000000183b1c728d696b1-c594dffe2c81a94d-00", - "tracestate": "dd=p:c594dffe2c81a94d;s:0" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 1719 - }, - "duration": 270167, - "start": 1758616875217898009 - }, - { - "name": "__main__.compute_value.remote()", - "service": "actor_and_task", - "resource": "__main__.compute_value.remote()", - "trace_id": 0, - "span_id": 19, - "parent_id": 17, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "component": "ray", - "ray.job_id": "02000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1671", - "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", - "ray.task.args": "(3,)", - "ray.task.kwargs": "{}", - "ray.task.submit_status": "success", - "ray.task_id": "1b23a186758c54dbffffffffffffffffffffffff02000000", - "ray.worker_id": "1ce745070c826fbfe5269a6671198d651507a4c57927c65a5e3c2e18", - "span.kind": "producer" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_sampling_priority_v1": 2 - }, - "duration": 156417, - "start": 1758616873451499050 - }, - { - "name": "__main__.compute_value", - "service": "actor_and_task", - "resource": "__main__.compute_value", - "trace_id": 0, - "span_id": 22, - "parent_id": 19, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68d25d2600000000", - "_dd.parent_id": "f789d01c97680150", - "component": "ray", - "language": "python", - "ray.job_id": "02000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1721", - "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", - "ray.task.args": "(3,)", - "ray.task.kwargs": "{}", - "ray.task.status": "success", - "ray.task_id": "231d59d35b446866ffffffffffffffffffffffff02000000", - "ray.worker_id": "494d1ee406d216048787b9f57cb0937c5801e0e1cbe8692ea4ea72b8", - "runtime-id": "64d472abdbe34f3e8418ce48fc418315", - "span.kind": "consumer", - "traceparent": "00-68d25d26000000000183b1c728d696b1-f789d01c97680150-00", - "tracestate": "dd=p:f789d01c97680150;s:0" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 1721 - }, - "duration": 322459, - "start": 1758616875269754967 - }, - { - "name": "__main__.compute_value.remote()", - "service": "actor_and_task", - "resource": "__main__.compute_value.remote()", - "trace_id": 0, - "span_id": 20, - "parent_id": 17, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "component": "ray", - "ray.job_id": "02000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1671", - "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", - "ray.task.args": "(4,)", - "ray.task.kwargs": "{}", - "ray.task.submit_status": "success", - "ray.task_id": "1b23a186758c54dbffffffffffffffffffffffff02000000", - "ray.worker_id": "1ce745070c826fbfe5269a6671198d651507a4c57927c65a5e3c2e18", - "span.kind": "producer" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_sampling_priority_v1": 2 - }, - "duration": 100958, - "start": 1758616873451671175 - }, - { - "name": "__main__.compute_value", - "service": "actor_and_task", - "resource": "__main__.compute_value", - "trace_id": 0, - "span_id": 23, - "parent_id": 20, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68d25d2600000000", - "_dd.parent_id": "880075f682c746c2", - "component": "ray", - "language": "python", - "ray.job_id": "02000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1720", - "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", - "ray.task.args": "(4,)", - "ray.task.kwargs": "{}", - "ray.task.status": "success", - "ray.task_id": "6681848b8a02c430ffffffffffffffffffffffff02000000", - "ray.worker_id": "843331d64055335dd53ce99b7736dae4aa1da7b8d1681794a86a3065", - "runtime-id": "d62a798a9cb649fa8b6265fba7e786fe", - "span.kind": "consumer", - "traceparent": "00-68d25d26000000000183b1c728d696b1-880075f682c746c2-00", - "tracestate": "dd=p:880075f682c746c2;s:0" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 1720 - }, - "duration": 293875, - "start": 1758616875284144092 - }, - { - "name": "ComputationManager.add_result", - "service": "actor_and_task", - "resource": "ComputationManager.add_result", - "trace_id": 0, - "span_id": 12, - "parent_id": 9, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "component": "ray", - "ray.actor_id": "263e2c9685bbf8ae33316a5402000000", - "ray.actor_method.args": "(3,)", - "ray.actor_method.kwargs": "{}", - "ray.job_id": "02000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1612", - "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", - "ray.task_id": "e082c90ab8422b00263e2c9685bbf8ae33316a5402000000", - "ray.worker_id": "9c3c649c06114fab8769d3ac4421ca89f0e82dcefe98a99505072161", - "span.kind": "consumer" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_sampling_priority_v1": 2 - }, - "duration": 73166, - "start": 1758616875290739051 - }, - { - "name": "ComputationManager.add_result", - "service": "actor_and_task", - "resource": "ComputationManager.add_result", - "trace_id": 0, - "span_id": 13, - "parent_id": 9, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "component": "ray", - "ray.actor_id": "263e2c9685bbf8ae33316a5402000000", - "ray.actor_method.args": "(4,)", - "ray.actor_method.kwargs": "{}", - "ray.job_id": "02000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1612", - "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", - "ray.task_id": "e082c90ab8422b00263e2c9685bbf8ae33316a5402000000", - "ray.worker_id": "9c3c649c06114fab8769d3ac4421ca89f0e82dcefe98a99505072161", - "span.kind": "consumer" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_sampling_priority_v1": 2 - }, - "duration": 21666, - "start": 1758616875290828051 - }, - { - "name": "ComputationManager.add_result", - "service": "actor_and_task", - "resource": "ComputationManager.add_result", - "trace_id": 0, - "span_id": 14, - "parent_id": 9, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "component": "ray", - "ray.actor_id": "263e2c9685bbf8ae33316a5402000000", - "ray.actor_method.args": "(5,)", - "ray.actor_method.kwargs": "{}", - "ray.job_id": "02000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1612", - "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", - "ray.task_id": "e082c90ab8422b00263e2c9685bbf8ae33316a5402000000", - "ray.worker_id": "9c3c649c06114fab8769d3ac4421ca89f0e82dcefe98a99505072161", - "span.kind": "consumer" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_sampling_priority_v1": 2 - }, - "duration": 15917, - "start": 1758616875290859509 - }, - { - "name": "ComputationManager.get_count", - "service": "actor_and_task", - "resource": "ComputationManager.get_count", - "trace_id": 0, - "span_id": 15, - "parent_id": 9, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "component": "ray", - "ray.actor_id": "263e2c9685bbf8ae33316a5402000000", - "ray.actor_method.args": "()", - "ray.actor_method.kwargs": "{}", - "ray.job_id": "02000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1612", - "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", - "ray.task_id": "e082c90ab8422b00263e2c9685bbf8ae33316a5402000000", - "ray.worker_id": "9c3c649c06114fab8769d3ac4421ca89f0e82dcefe98a99505072161", - "span.kind": "consumer" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_sampling_priority_v1": 2 - }, - "duration": 15458, - "start": 1758616875290884176 - }, - { - "name": "ComputationManager.get_results", - "service": "actor_and_task", - "resource": "ComputationManager.get_results", - "trace_id": 0, - "span_id": 16, - "parent_id": 9, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "component": "ray", - "ray.actor_id": "263e2c9685bbf8ae33316a5402000000", - "ray.actor_method.args": "()", - "ray.actor_method.kwargs": "{}", - "ray.job_id": "02000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1612", - "ray.submission_id": "raysubmit_TtyygVHKhqkjV71K", - "ray.task_id": "e082c90ab8422b00263e2c9685bbf8ae33316a5402000000", - "ray.worker_id": "9c3c649c06114fab8769d3ac4421ca89f0e82dcefe98a99505072161", + "ray.task.status": "success", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", "span.kind": "consumer" }, "metrics": { "_dd.djm.enabled": 1, "_dd.filter.kept": 1, "_dd.measured": 1, - "_sampling_priority_v1": 2 + "_dd.top_level": 1, + "_sampling_priority_v1": 2, + "process_id": 543 }, - "duration": 14375, - "start": 1758616875290910426 + "duration": 59083, + "start": 1758814885198242675 }]] diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_actor_interactions.json b/tests/snapshots/tests.contrib.ray.test_ray.test_actor_interactions.json index a981b8fc708..4db5c8f0b4d 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_actor_interactions.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_actor_interactions.json @@ -1,28 +1,27 @@ [[ { - "name": "ray.job", - "service": "actor_interactions", - "resource": "ray.job", + "name": "tests.contrib.ray.test_ray.run_test.remote()", + "service": "tests.contrib.ray", + "resource": "tests.contrib.ray.test_ray.run_test.remote()", "trace_id": 0, "span_id": 1, "parent_id": 0, "type": "ray", "error": 0, "meta": { - "_dd.base_service": "ray.dashboard", "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68d25d3000000000", + "_dd.p.tid": "68d562a500000000", "component": "ray", "language": "python", - "ray.job.message": "Job finished successfully.", - "ray.job.status": "SUCCEEDED", "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1045", - "ray.submission_id": "raysubmit_EPVKeC9jBZstjBA2", + "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.task.args": "()", + "ray.task.kwargs": "{}", + "ray.task.submit_status": "success", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "11b30a8c1d714183b0fea7bbd9410a29" + "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", + "span.kind": "producer" }, "metrics": { "_dd.djm.enabled": 1, @@ -31,129 +30,139 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1045 + "process_id": 543 }, - "duration": 3915848752, - "start": 1758616880643923845 + "duration": 31463166, + "start": 1758814885216240217 }, { - "name": "ray.job.submit", - "service": "actor_interactions", - "resource": "ray.job.submit", + "name": "tests.contrib.ray.test_ray.TestRayIntegration.test_actor_interactions..run_test", + "service": "tests.contrib.ray", + "resource": "tests.contrib.ray.test_ray.TestRayIntegration.test_actor_interactions..run_test", "trace_id": 0, "span_id": 2, "parent_id": 1, "type": "ray", "error": 0, "meta": { - "_dd.base_service": "ray.dashboard", "component": "ray", - "ray.job.submit_status": "success", "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1045", - "ray.submission_id": "raysubmit_EPVKeC9jBZstjBA2", + "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.task.args": "()", + "ray.task.kwargs": "{}", + "ray.task.status": "success", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "span.kind": "producer" + "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", + "span.kind": "consumer" }, "metrics": { "_dd.djm.enabled": 1, "_dd.filter.kept": 1, "_dd.measured": 1, - "_sampling_priority_v1": 2 + "_dd.top_level": 1, + "_sampling_priority_v1": 2, + "process_id": 543 }, - "duration": 58000, - "start": 1758616880644186178 - }, - { - "name": "JobSupervisor.run.remote()", - "service": "actor_interactions", - "resource": "JobSupervisor.run.remote()", - "trace_id": 0, - "span_id": 3, - "parent_id": 1, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray.dashboard", - "component": "ray", - "ray.actor_method.args": "[]", - "ray.actor_method.kwargs": "{'_start_signal_actor': None, 'resources_specified': False}", - "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1045", - "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "span.kind": "producer" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_sampling_priority_v1": 2 - }, - "duration": 228833, - "start": 1758616880647443720 + "duration": 24725375, + "start": 1758814885222684258 }, { - "name": "JobSupervisor.run", - "service": "actor_interactions", - "resource": "JobSupervisor.run", + "name": "Sender.__init__", + "service": "tests.contrib.ray", + "resource": "Sender.__init__", + "trace_id": 0, + "span_id": 3, + "parent_id": 2, + "type": "ray", + "error": 0, + "meta": { + "component": "ray", + "ray.actor_method.args": "()", + "ray.actor_method.kwargs": "{}", + "ray.job_id": "01000000", + "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "span.kind": "consumer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 113542, + "start": 1758814885233803800 + }, + { + "name": "Receiver.__init__", + "service": "tests.contrib.ray", + "resource": "Receiver.__init__", "trace_id": 0, "span_id": 4, - "parent_id": 3, + "parent_id": 2, "type": "ray", "error": 0, "meta": { - "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68d25d3000000000", - "_dd.parent_id": "98ea914405ceb3dd", "component": "ray", - "language": "python", - "ray.actor_id": "c30b3a79f0ee7eba860b4d6501000000", + "ray.actor_method.args": "()", + "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1891", - "ray.submission_id": "raysubmit_EPVKeC9jBZstjBA2", - "ray.task_id": "80e22aed7718a125c30b3a79f0ee7eba860b4d6501000000", - "ray.worker_id": "4581b229526821223792f99bac81b3431059ee22d8e8587fe98306d3", - "runtime-id": "271ce6017d40416ea2b691b15b924d76", - "span.kind": "consumer", - "traceparent": "00-68d25d3000000000930af5f82e2eab20-98ea914405ceb3dd-00", - "tracestate": "dd=p:98ea914405ceb3dd" + "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "span.kind": "consumer" }, "metrics": { "_dd.djm.enabled": 1, "_dd.filter.kept": 1, "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 1891 + "_sampling_priority_v1": 2 }, - "duration": 2334378793, - "start": 1758616881539491512 + "duration": 126292, + "start": 1758814885244768050 + }, + { + "name": "TestRayIntegration.test_actor_interactions..Sender.send_message.remote()", + "service": "tests.contrib.ray", + "resource": "TestRayIntegration.test_actor_interactions..Sender.send_message.remote()", + "trace_id": 0, + "span_id": 5, + "parent_id": 2, + "type": "ray", + "error": 0, + "meta": { + "component": "ray", + "ray.actor_method.args": "(Actor(TestRayIntegration.test_actor_interactions..Receiver, d66274d67076036932b9e04901000000), 'hello')", + "ray.actor_method.kwargs": "{}", + "ray.job_id": "01000000", + "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "span.kind": "producer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 1344750, + "start": 1758814885245024508 }, { - "name": "JobSupervisor._get_driver_env_vars", - "service": "actor_interactions", - "resource": "JobSupervisor._get_driver_env_vars", + "name": "Sender.send_message", + "service": "tests.contrib.ray", + "resource": "Sender.send_message", "trace_id": 0, - "span_id": 5, - "parent_id": 4, + "span_id": 8, + "parent_id": 5, "type": "ray", "error": 0, "meta": { - "_dd.base_service": "ray._private.workers", "component": "ray", - "ray.actor_id": "c30b3a79f0ee7eba860b4d6501000000", - "ray.actor_method.args": "(False,)", + "ray.actor_method.args": "(Actor(TestRayIntegration.test_actor_interactions..Receiver, d66274d67076036932b9e04901000000), 'hello')", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1891", - "ray.submission_id": "raysubmit_EPVKeC9jBZstjBA2", - "ray.task_id": "80e22aed7718a125c30b3a79f0ee7eba860b4d6501000000", - "ray.worker_id": "4581b229526821223792f99bac81b3431059ee22d8e8587fe98306d3", + "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "consumer" }, "metrics": { @@ -162,31 +171,26 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 1509708, - "start": 1758616881541459429 + "duration": 642083, + "start": 1758814885245649467 }, { - "name": "JobSupervisor._get_driver_runtime_env", - "service": "actor_interactions", - "resource": "JobSupervisor._get_driver_runtime_env", + "name": "TestRayIntegration.test_actor_interactions..Receiver.receive_message.remote()", + "service": "tests.contrib.ray", + "resource": "TestRayIntegration.test_actor_interactions..Receiver.receive_message.remote()", "trace_id": 0, - "span_id": 10, - "parent_id": 5, + "span_id": 11, + "parent_id": 8, "type": "ray", "error": 0, "meta": { - "_dd.base_service": "ray._private.workers", "component": "ray", - "ray.actor_id": "c30b3a79f0ee7eba860b4d6501000000", - "ray.actor_method.args": "(False,)", + "ray.actor_method.args": "('hello',)", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1891", - "ray.submission_id": "raysubmit_EPVKeC9jBZstjBA2", - "ray.task_id": "80e22aed7718a125c30b3a79f0ee7eba860b4d6501000000", - "ray.worker_id": "4581b229526821223792f99bac81b3431059ee22d8e8587fe98306d3", - "span.kind": "consumer" + "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "span.kind": "producer" }, "metrics": { "_dd.djm.enabled": 1, @@ -194,141 +198,26 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 71416, - "start": 1758616881542874554 - }, - { - "name": "exec actor_interactions.py", - "service": "actor_interactions", - "resource": "exec actor_interactions.py", - "trace_id": 0, - "span_id": 6, - "parent_id": 4, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "component": "ray", - "ray.actor_id": "c30b3a79f0ee7eba860b4d6501000000", - "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1891", - "ray.submission_id": "raysubmit_EPVKeC9jBZstjBA2", - "ray.task_id": "80e22aed7718a125c30b3a79f0ee7eba860b4d6501000000", - "ray.worker_id": "4581b229526821223792f99bac81b3431059ee22d8e8587fe98306d3", - "span.kind": "consumer" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_sampling_priority_v1": 2 - }, - "duration": 691333, - "start": 1758616881543157929 - }, - { - "name": "Sender.send_message.remote()", - "service": "actor_interactions", - "resource": "Sender.send_message.remote()", - "trace_id": 0, - "span_id": 7, - "parent_id": 4, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "project", - "_dd.p.tid": "68d25d3000000000", - "_dd.parent_id": "887bf681cf27e3f0", - "component": "ray", - "language": "python", - "ray.actor_method.args": "(Actor(Receiver, 9471ff9650ea7fc659e5637803000000), 'hello')", - "ray.actor_method.kwargs": "{}", - "ray.job_id": "03000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1941", - "ray.submission_id": "raysubmit_EPVKeC9jBZstjBA2", - "ray.worker_id": "03000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "3b9c04248fff4bd280f84b6ddbb2aa3d", - "span.kind": "producer", - "traceparent": "00-68d25d3000000000930af5f82e2eab20-887bf681cf27e3f0-00", - "tracestate": "dd=p:887bf681cf27e3f0;s:0" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 1941 - }, - "duration": 343583, - "start": 1758616882161838721 - }, - { - "name": "Sender.send_message", - "service": "actor_interactions", - "resource": "Sender.send_message", - "trace_id": 0, - "span_id": 11, - "parent_id": 7, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68d25d3000000000", - "_dd.parent_id": "d16434929a8ed012", - "component": "ray", - "language": "python", - "ray.actor_id": "1eb88f4ded2e27d8c2440d7103000000", - "ray.actor_method.args": "(Actor(Receiver, 9471ff9650ea7fc659e5637803000000), 'hello')", - "ray.actor_method.kwargs": "{}", - "ray.job_id": "03000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2002", - "ray.submission_id": "raysubmit_EPVKeC9jBZstjBA2", - "ray.task_id": "0ab01f2d6283d7191eb88f4ded2e27d8c2440d7103000000", - "ray.worker_id": "292f3ffa0fdd954b6e25bb0e5d3681a2f705a48f101e40a4c9b2569f", - "runtime-id": "6f8f5f7448434df18e7a4314b4bc45c5", - "span.kind": "consumer", - "traceparent": "00-68d25d3000000000930af5f82e2eab20-d16434929a8ed012-00", - "tracestate": "dd=p:d16434929a8ed012;s:0" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 2002 - }, - "duration": 22947916, - "start": 1758616883555134930 + "duration": 469500, + "start": 1758814885245739592 }, { - "name": "Receiver.receive_message.remote()", - "service": "actor_interactions", - "resource": "Receiver.receive_message.remote()", + "name": "Receiver.receive_message", + "service": "tests.contrib.ray", + "resource": "Receiver.receive_message", "trace_id": 0, - "span_id": 14, + "span_id": 12, "parent_id": 11, "type": "ray", "error": 0, "meta": { - "_dd.base_service": "ray._private.workers", "component": "ray", - "ray.actor_id": "1eb88f4ded2e27d8c2440d7103000000", "ray.actor_method.args": "('hello',)", "ray.actor_method.kwargs": "{}", - "ray.job_id": "03000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2002", - "ray.submission_id": "raysubmit_EPVKeC9jBZstjBA2", - "ray.task_id": "0ab01f2d6283d7191eb88f4ded2e27d8c2440d7103000000", - "ray.worker_id": "292f3ffa0fdd954b6e25bb0e5d3681a2f705a48f101e40a4c9b2569f", - "span.kind": "producer" + "ray.job_id": "01000000", + "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "span.kind": "consumer" }, "metrics": { "_dd.djm.enabled": 1, @@ -336,207 +225,114 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 519667, - "start": 1758616883555481346 + "duration": 67709, + "start": 1758814885246069133 }, - { - "name": "Receiver.receive_message", - "service": "actor_interactions", - "resource": "Receiver.receive_message", - "trace_id": 0, - "span_id": 15, - "parent_id": 14, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68d25d3000000000", - "_dd.parent_id": "6563ba858308c263", - "component": "ray", - "language": "python", - "ray.actor_id": "9471ff9650ea7fc659e5637803000000", - "ray.actor_method.args": "('hello',)", - "ray.actor_method.kwargs": "{}", - "ray.job_id": "03000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2003", - "ray.submission_id": "raysubmit_EPVKeC9jBZstjBA2", - "ray.task_id": "5295a29d66e8431d9471ff9650ea7fc659e5637803000000", - "ray.worker_id": "e0b4832cda57b22c352c691d86402d15d3b7bd4f0ea873951fa6950c", - "runtime-id": "60033d357429440fb994494688f11141", - "span.kind": "consumer", - "traceparent": "00-68d25d3000000000930af5f82e2eab20-6563ba858308c263-00", - "tracestate": "dd=p:6563ba858308c263;s:0" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 2003 - }, - "duration": 319583, - "start": 1758616883574090680 - }, + { + "name": "TestRayIntegration.test_actor_interactions..Sender.get_sent_count.remote()", + "service": "tests.contrib.ray", + "resource": "TestRayIntegration.test_actor_interactions..Sender.get_sent_count.remote()", + "trace_id": 0, + "span_id": 6, + "parent_id": 2, + "type": "ray", + "error": 0, + "meta": { + "component": "ray", + "ray.actor_method.args": "()", + "ray.actor_method.kwargs": "{}", + "ray.job_id": "01000000", + "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "span.kind": "producer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 380417, + "start": 1758814885246449883 + }, { - "name": "Sender.get_sent_count.remote()", - "service": "actor_interactions", - "resource": "Sender.get_sent_count.remote()", + "name": "Sender.get_sent_count", + "service": "tests.contrib.ray", + "resource": "Sender.get_sent_count", "trace_id": 0, - "span_id": 8, - "parent_id": 4, + "span_id": 9, + "parent_id": 6, "type": "ray", "error": 0, "meta": { - "_dd.base_service": "project", - "_dd.p.tid": "68d25d3000000000", - "_dd.parent_id": "887bf681cf27e3f0", "component": "ray", - "language": "python", - "ray.actor_method.args": "[]", + "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", - "ray.job_id": "03000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1941", - "ray.submission_id": "raysubmit_EPVKeC9jBZstjBA2", - "ray.worker_id": "03000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "3b9c04248fff4bd280f84b6ddbb2aa3d", - "span.kind": "producer", - "traceparent": "00-68d25d3000000000930af5f82e2eab20-887bf681cf27e3f0-00", - "tracestate": "dd=p:887bf681cf27e3f0;s:0" + "ray.job_id": "01000000", + "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "span.kind": "consumer" }, "metrics": { "_dd.djm.enabled": 1, "_dd.filter.kept": 1, "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 1941 + "_sampling_priority_v1": 2 }, - "duration": 205125, - "start": 1758616883580916930 + "duration": 69417, + "start": 1758814885246695258 }, - { - "name": "Sender.get_sent_count", - "service": "actor_interactions", - "resource": "Sender.get_sent_count", - "trace_id": 0, - "span_id": 12, - "parent_id": 8, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68d25d3000000000", - "_dd.parent_id": "f89dc5c1a02f70d4", - "component": "ray", - "language": "python", - "ray.actor_id": "1eb88f4ded2e27d8c2440d7103000000", - "ray.actor_method.args": "()", - "ray.actor_method.kwargs": "{}", - "ray.job_id": "03000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2002", - "ray.submission_id": "raysubmit_EPVKeC9jBZstjBA2", - "ray.task_id": "62ffec03f52574bd1eb88f4ded2e27d8c2440d7103000000", - "ray.worker_id": "292f3ffa0fdd954b6e25bb0e5d3681a2f705a48f101e40a4c9b2569f", - "runtime-id": "6f8f5f7448434df18e7a4314b4bc45c5", - "span.kind": "consumer", - "traceparent": "00-68d25d3000000000930af5f82e2eab20-f89dc5c1a02f70d4-00", - "tracestate": "dd=p:f89dc5c1a02f70d4;s:0" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 2002 - }, - "duration": 53500, - "start": 1758616883581614055 - }, + { + "name": "TestRayIntegration.test_actor_interactions..Receiver.get_messages.remote()", + "service": "tests.contrib.ray", + "resource": "TestRayIntegration.test_actor_interactions..Receiver.get_messages.remote()", + "trace_id": 0, + "span_id": 7, + "parent_id": 2, + "type": "ray", + "error": 0, + "meta": { + "component": "ray", + "ray.actor_method.args": "()", + "ray.actor_method.kwargs": "{}", + "ray.job_id": "01000000", + "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "span.kind": "producer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_sampling_priority_v1": 2 + }, + "duration": 339625, + "start": 1758814885246903967 + }, { - "name": "Receiver.get_messages.remote()", - "service": "actor_interactions", - "resource": "Receiver.get_messages.remote()", + "name": "Receiver.get_messages", + "service": "tests.contrib.ray", + "resource": "Receiver.get_messages", "trace_id": 0, - "span_id": 9, - "parent_id": 4, + "span_id": 10, + "parent_id": 7, "type": "ray", "error": 0, "meta": { - "_dd.base_service": "project", - "_dd.p.tid": "68d25d3000000000", - "_dd.parent_id": "887bf681cf27e3f0", "component": "ray", - "language": "python", - "ray.actor_method.args": "[]", + "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", - "ray.job_id": "03000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1941", - "ray.submission_id": "raysubmit_EPVKeC9jBZstjBA2", - "ray.worker_id": "03000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "3b9c04248fff4bd280f84b6ddbb2aa3d", - "span.kind": "producer", - "traceparent": "00-68d25d3000000000930af5f82e2eab20-887bf681cf27e3f0-00", - "tracestate": "dd=p:887bf681cf27e3f0;s:0" + "ray.job_id": "01000000", + "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "span.kind": "consumer" }, "metrics": { "_dd.djm.enabled": 1, "_dd.filter.kept": 1, "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 1941 + "_sampling_priority_v1": 2 }, - "duration": 245666, - "start": 1758616883583678055 - }, - { - "name": "Receiver.get_messages", - "service": "actor_interactions", - "resource": "Receiver.get_messages", - "trace_id": 0, - "span_id": 13, - "parent_id": 9, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68d25d3000000000", - "_dd.parent_id": "5cf66ac8efdc2392", - "component": "ray", - "language": "python", - "ray.actor_id": "9471ff9650ea7fc659e5637803000000", - "ray.actor_method.args": "()", - "ray.actor_method.kwargs": "{}", - "ray.job_id": "03000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2003", - "ray.submission_id": "raysubmit_EPVKeC9jBZstjBA2", - "ray.task_id": "882ffa20ac4b2e6e9471ff9650ea7fc659e5637803000000", - "ray.worker_id": "e0b4832cda57b22c352c691d86402d15d3b7bd4f0ea873951fa6950c", - "runtime-id": "60033d357429440fb994494688f11141", - "span.kind": "consumer", - "traceparent": "00-68d25d3000000000930af5f82e2eab20-5cf66ac8efdc2392-00", - "tracestate": "dd=p:5cf66ac8efdc2392;s:0" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 2003 - }, - "duration": 62500, - "start": 1758616883585287013 - }]] + "duration": 60000, + "start": 1758814885247123092 + }]] diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_nested_tasks.json b/tests/snapshots/tests.contrib.ray.test_ray.test_nested_tasks.json index 667505d7483..73f9521f57f 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_nested_tasks.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_nested_tasks.json @@ -1,28 +1,27 @@ [[ { - "name": "ray.job", - "service": "nested_tasks", - "resource": "ray.job", + "name": "tests.contrib.ray.test_ray.submit_addition_task.remote()", + "service": "tests.contrib.ray", + "resource": "tests.contrib.ray.test_ray.submit_addition_task.remote()", "trace_id": 0, "span_id": 1, "parent_id": 0, "type": "ray", "error": 0, "meta": { - "_dd.base_service": "ray.dashboard", "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68d25d4100000000", + "_dd.p.tid": "68d562a500000000", "component": "ray", "language": "python", - "ray.job.message": "Job finished successfully.", - "ray.job.status": "SUCCEEDED", "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1045", - "ray.submission_id": "raysubmit_MRrmPyZ1mnPbDUGD", + "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.task.args": "(2,)", + "ray.task.kwargs": "{}", + "ray.task.submit_status": "success", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "11b30a8c1d714183b0fea7bbd9410a29" + "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", + "span.kind": "producer" }, "metrics": { "_dd.djm.enabled": 1, @@ -31,499 +30,98 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1045 + "process_id": 543 }, - "duration": 4849452877, - "start": 1758616897799174506 + "duration": 6561500, + "start": 1758814885257526592 }, { - "name": "ray.job.submit", - "service": "nested_tasks", - "resource": "ray.job.submit", + "name": "tests.contrib.ray.test_ray.TestRayIntegration.test_nested_tasks..submit_addition_task", + "service": "tests.contrib.ray", + "resource": "tests.contrib.ray.test_ray.TestRayIntegration.test_nested_tasks..submit_addition_task", "trace_id": 0, "span_id": 2, "parent_id": 1, "type": "ray", "error": 0, "meta": { - "_dd.base_service": "ray.dashboard", "component": "ray", - "ray.job.submit_status": "success", "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1045", - "ray.submission_id": "raysubmit_MRrmPyZ1mnPbDUGD", + "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.task.args": "(2,)", + "ray.task.kwargs": "{}", + "ray.task.status": "success", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "span.kind": "producer" + "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", + "span.kind": "consumer" }, "metrics": { "_dd.djm.enabled": 1, "_dd.filter.kept": 1, "_dd.measured": 1, - "_sampling_priority_v1": 2 + "_dd.top_level": 1, + "_sampling_priority_v1": 2, + "process_id": 543 }, - "duration": 51208, - "start": 1758616897799386464 - }, - { - "name": "JobSupervisor.run.remote()", - "service": "nested_tasks", - "resource": "JobSupervisor.run.remote()", - "trace_id": 0, - "span_id": 3, - "parent_id": 1, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray.dashboard", - "component": "ray", - "ray.actor_method.args": "[]", - "ray.actor_method.kwargs": "{'_start_signal_actor': None, 'resources_specified': False}", - "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1045", - "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "span.kind": "producer" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_sampling_priority_v1": 2 - }, - "duration": 257125, - "start": 1758616897802757506 + "duration": 3267583, + "start": 1758814885260542175 }, { - "name": "JobSupervisor.run", - "service": "nested_tasks", - "resource": "JobSupervisor.run", + "name": "tests.contrib.ray.test_ray.add_one.remote()", + "service": "tests.contrib.ray", + "resource": "tests.contrib.ray.test_ray.add_one.remote()", "trace_id": 0, - "span_id": 4, - "parent_id": 3, + "span_id": 3, + "parent_id": 2, "type": "ray", "error": 0, "meta": { - "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68d25d4100000000", - "_dd.parent_id": "2c6a4e2584f95180", "component": "ray", - "language": "python", - "ray.actor_id": "6c827795c460cbaa12a86c2f01000000", "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2420", - "ray.submission_id": "raysubmit_MRrmPyZ1mnPbDUGD", - "ray.task_id": "465c0fb8d6cb3cdc6c827795c460cbaa12a86c2f01000000", - "ray.worker_id": "2818f8c1b2078fb9a5cac2c35a1cb23c19ec945180e3d4adcf86d262", - "runtime-id": "57f419e734d84c6a9ce3d8f33c5b6152", - "span.kind": "consumer", - "traceparent": "00-68d25d4100000000e398499a0c4c8df6-2c6a4e2584f95180-00", - "tracestate": "dd=p:2c6a4e2584f95180" + "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.task.args": "(3,)", + "ray.task.kwargs": "{}", + "ray.task.submit_status": "success", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "span.kind": "producer" }, "metrics": { "_dd.djm.enabled": 1, "_dd.filter.kept": 1, "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 2420 + "_sampling_priority_v1": 2 }, - "duration": 3642647710, - "start": 1758616898633265464 + "duration": 2700459, + "start": 1758814885260879258 }, { - "name": "JobSupervisor._get_driver_env_vars", - "service": "nested_tasks", - "resource": "JobSupervisor._get_driver_env_vars", - "trace_id": 0, - "span_id": 5, - "parent_id": 4, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "component": "ray", - "ray.actor_id": "6c827795c460cbaa12a86c2f01000000", - "ray.actor_method.args": "(False,)", - "ray.actor_method.kwargs": "{}", - "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2420", - "ray.submission_id": "raysubmit_MRrmPyZ1mnPbDUGD", - "ray.task_id": "465c0fb8d6cb3cdc6c827795c460cbaa12a86c2f01000000", - "ray.worker_id": "2818f8c1b2078fb9a5cac2c35a1cb23c19ec945180e3d4adcf86d262", - "span.kind": "consumer" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_sampling_priority_v1": 2 - }, - "duration": 1427916, - "start": 1758616898634636673 - }, - { - "name": "JobSupervisor._get_driver_runtime_env", - "service": "nested_tasks", - "resource": "JobSupervisor._get_driver_runtime_env", - "trace_id": 0, - "span_id": 8, - "parent_id": 5, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "component": "ray", - "ray.actor_id": "6c827795c460cbaa12a86c2f01000000", - "ray.actor_method.args": "(False,)", - "ray.actor_method.kwargs": "{}", - "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2420", - "ray.submission_id": "raysubmit_MRrmPyZ1mnPbDUGD", - "ray.task_id": "465c0fb8d6cb3cdc6c827795c460cbaa12a86c2f01000000", - "ray.worker_id": "2818f8c1b2078fb9a5cac2c35a1cb23c19ec945180e3d4adcf86d262", - "span.kind": "consumer" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_sampling_priority_v1": 2 - }, - "duration": 53625, - "start": 1758616898635985714 - }, - { - "name": "exec nested_tasks.py", - "service": "nested_tasks", - "resource": "exec nested_tasks.py", + "name": "tests.contrib.ray.test_ray.TestRayIntegration.test_nested_tasks..add_one", + "service": "tests.contrib.ray", + "resource": "tests.contrib.ray.test_ray.TestRayIntegration.test_nested_tasks..add_one", "trace_id": 0, - "span_id": 6, - "parent_id": 4, + "span_id": 4, + "parent_id": 3, "type": "ray", "error": 0, "meta": { - "_dd.base_service": "ray._private.workers", "component": "ray", - "ray.actor_id": "6c827795c460cbaa12a86c2f01000000", "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2420", - "ray.submission_id": "raysubmit_MRrmPyZ1mnPbDUGD", - "ray.task_id": "465c0fb8d6cb3cdc6c827795c460cbaa12a86c2f01000000", - "ray.worker_id": "2818f8c1b2078fb9a5cac2c35a1cb23c19ec945180e3d4adcf86d262", - "span.kind": "consumer" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_sampling_priority_v1": 2 - }, - "duration": 438625, - "start": 1758616898636192339 - }, - { - "name": "__main__.submit_addition_task.remote()", - "service": "nested_tasks", - "resource": "__main__.submit_addition_task.remote()", - "trace_id": 0, - "span_id": 7, - "parent_id": 4, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "project", - "_dd.p.tid": "68d25d4100000000", - "_dd.parent_id": "861b61e291a26896", - "component": "ray", - "language": "python", - "ray.job_id": "05000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2470", - "ray.submission_id": "raysubmit_MRrmPyZ1mnPbDUGD", - "ray.task.args": "(2,)", + "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.task.args": "(3,)", "ray.task.kwargs": "{}", - "ray.task.submit_status": "success", - "ray.worker_id": "05000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "3bb0feb04fe3474582572fbd4dfb1f31", - "span.kind": "producer", - "traceparent": "00-68d25d4100000000e398499a0c4c8df6-861b61e291a26896-00", - "tracestate": "dd=p:861b61e291a26896;s:0" + "ray.task.status": "success", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", + "span.kind": "consumer" }, "metrics": { "_dd.djm.enabled": 1, "_dd.filter.kept": 1, "_dd.measured": 1, "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 2470 + "process_id": 543 }, - "duration": 3544833, - "start": 1758616899198718923 - }, - { - "name": "__main__.submit_addition_task", - "service": "nested_tasks", - "resource": "__main__.submit_addition_task", - "trace_id": 0, - "span_id": 9, - "parent_id": 7, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68d25d4100000000", - "_dd.parent_id": "f54228293ccaed10", - "component": "ray", - "language": "python", - "ray.job_id": "05000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2516", - "ray.submission_id": "raysubmit_MRrmPyZ1mnPbDUGD", - "ray.task.args": "(2,)", - "ray.task.kwargs": "{}", - "ray.task.status": "success", - "ray.task_id": "3ca0590f168eaec5ffffffffffffffffffffffff05000000", - "ray.worker_id": "3408ad6c39a4e7ed64c8a37788cec34c10c3050af1029beeb850a5fa", - "runtime-id": "6ae8d73f510d4887bf8fdc17a394be11", - "span.kind": "consumer", - "traceparent": "00-68d25d4100000000e398499a0c4c8df6-f54228293ccaed10-00", - "tracestate": "dd=p:f54228293ccaed10;s:0" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 2516 - }, - "duration": 1643431417, - "start": 1758616899985191090 - }, - { - "name": "__main__.add_one.remote()", - "service": "nested_tasks", - "resource": "__main__.add_one.remote()", - "trace_id": 0, - "span_id": 10, - "parent_id": 9, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "component": "ray", - "ray.job_id": "05000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2516", - "ray.submission_id": "raysubmit_MRrmPyZ1mnPbDUGD", - "ray.task.args": "(2,)", - "ray.task.kwargs": "{}", - "ray.task.submit_status": "success", - "ray.task_id": "3ca0590f168eaec5ffffffffffffffffffffffff05000000", - "ray.worker_id": "3408ad6c39a4e7ed64c8a37788cec34c10c3050af1029beeb850a5fa", - "span.kind": "producer" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_sampling_priority_v1": 2 - }, - "duration": 1172250, - "start": 1758616899985438632 - }, - { - "name": "__main__.add_one", - "service": "nested_tasks", - "resource": "__main__.add_one", - "trace_id": 0, - "span_id": 13, - "parent_id": 10, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68d25d4100000000", - "_dd.parent_id": "d9783c789dcecc36", - "component": "ray", - "language": "python", - "ray.job_id": "05000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2562", - "ray.submission_id": "raysubmit_MRrmPyZ1mnPbDUGD", - "ray.task.args": "(2,)", - "ray.task.kwargs": "{}", - "ray.task.status": "success", - "ray.task_id": "079c89e8658fa36bffffffffffffffffffffffff05000000", - "ray.worker_id": "785d71cef3d760e029ab6cc94197379e20b4fcfe9bc85c69d0e355a5", - "runtime-id": "0990e5d24fd54878a88df0bfa300ff85", - "span.kind": "consumer", - "traceparent": "00-68d25d4100000000e398499a0c4c8df6-d9783c789dcecc36-00", - "tracestate": "dd=p:d9783c789dcecc36;s:0" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 2562 - }, - "duration": 230000, - "start": 1758616901618875174 - }, - { - "name": "__main__.add_one.remote()", - "service": "nested_tasks", - "resource": "__main__.add_one.remote()", - "trace_id": 0, - "span_id": 11, - "parent_id": 9, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "component": "ray", - "ray.job_id": "05000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2516", - "ray.submission_id": "raysubmit_MRrmPyZ1mnPbDUGD", - "ray.task.args": "(3,)", - "ray.task.kwargs": "{}", - "ray.task.submit_status": "success", - "ray.task_id": "3ca0590f168eaec5ffffffffffffffffffffffff05000000", - "ray.worker_id": "3408ad6c39a4e7ed64c8a37788cec34c10c3050af1029beeb850a5fa", - "span.kind": "producer" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_sampling_priority_v1": 2 - }, - "duration": 134500, - "start": 1758616899986635757 - }, - { - "name": "__main__.add_one", - "service": "nested_tasks", - "resource": "__main__.add_one", - "trace_id": 0, - "span_id": 14, - "parent_id": 11, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68d25d4100000000", - "_dd.parent_id": "02a38fb8868d9500", - "component": "ray", - "language": "python", - "ray.job_id": "05000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2560", - "ray.submission_id": "raysubmit_MRrmPyZ1mnPbDUGD", - "ray.task.args": "(3,)", - "ray.task.kwargs": "{}", - "ray.task.status": "success", - "ray.task_id": "cc483212b2c8f53effffffffffffffffffffffff05000000", - "ray.worker_id": "ed12a9b3d9d77398dd7cee5be0e3909408513e92c01621f857f8f537", - "runtime-id": "01dbfdd3c31440df9aca517151cb80a2", - "span.kind": "consumer", - "traceparent": "00-68d25d4100000000e398499a0c4c8df6-02a38fb8868d9500-00", - "tracestate": "dd=p:02a38fb8868d9500;s:0" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 2560 - }, - "duration": 232500, - "start": 1758616901614971591 - }, - { - "name": "__main__.add_one.remote()", - "service": "nested_tasks", - "resource": "__main__.add_one.remote()", - "trace_id": 0, - "span_id": 12, - "parent_id": 9, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "component": "ray", - "ray.job_id": "05000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2516", - "ray.submission_id": "raysubmit_MRrmPyZ1mnPbDUGD", - "ray.task.args": "(4,)", - "ray.task.kwargs": "{}", - "ray.task.submit_status": "success", - "ray.task_id": "3ca0590f168eaec5ffffffffffffffffffffffff05000000", - "ray.worker_id": "3408ad6c39a4e7ed64c8a37788cec34c10c3050af1029beeb850a5fa", - "span.kind": "producer" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_sampling_priority_v1": 2 - }, - "duration": 98250, - "start": 1758616899986784840 - }, - { - "name": "__main__.add_one", - "service": "nested_tasks", - "resource": "__main__.add_one", - "trace_id": 0, - "span_id": 15, - "parent_id": 12, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68d25d4100000000", - "_dd.parent_id": "53196658050078d1", - "component": "ray", - "language": "python", - "ray.job_id": "05000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2561", - "ray.submission_id": "raysubmit_MRrmPyZ1mnPbDUGD", - "ray.task.args": "(4,)", - "ray.task.kwargs": "{}", - "ray.task.status": "success", - "ray.task_id": "abe71a0435f88aceffffffffffffffffffffffff05000000", - "ray.worker_id": "da0308fe4056dcaa94dcea82585a5dcc3ed60594e99c1482b0b3f379", - "runtime-id": "6322beb2e15948f9a401a604f9cc8fab", - "span.kind": "consumer", - "traceparent": "00-68d25d4100000000e398499a0c4c8df6-53196658050078d1-00", - "tracestate": "dd=p:53196658050078d1;s:0" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 2561 - }, - "duration": 209917, - "start": 1758616901626046799 - }]] + "duration": 81500, + "start": 1758814885263345883 + }]] diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_actor.json b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_actor.json index 0a8b888d611..b7861da970c 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_actor.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_actor.json @@ -1,28 +1,26 @@ [[ { - "name": "ray.job", - "service": "simple_actor", - "resource": "ray.job", + "name": "TestRayIntegration.test_simple_actor..Counter.increment_get_and_double.remote()", + "service": "tests.contrib.ray", + "resource": "TestRayIntegration.test_simple_actor..Counter.increment_get_and_double.remote()", "trace_id": 0, "span_id": 1, "parent_id": 0, "type": "ray", "error": 0, "meta": { - "_dd.base_service": "ray.dashboard", "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68d25d4a00000000", + "_dd.p.tid": "68d562a500000000", "component": "ray", "language": "python", - "ray.job.message": "Job finished successfully.", - "ray.job.status": "SUCCEEDED", + "ray.actor_method.args": "()", + "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1045", - "ray.submission_id": "raysubmit_S6naDDSVGHHCnQQb", + "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "11b30a8c1d714183b0fea7bbd9410a29" + "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", + "span.kind": "producer" }, "metrics": { "_dd.djm.enabled": 1, @@ -31,30 +29,28 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1045 + "process_id": 543 }, - "duration": 2827540126, - "start": 1758616906363631260 + "duration": 1185625, + "start": 1758814885290737383 }, { - "name": "ray.job.submit", - "service": "simple_actor", - "resource": "ray.job.submit", + "name": "Counter.increment_get_and_double", + "service": "tests.contrib.ray", + "resource": "Counter.increment_get_and_double", "trace_id": 0, "span_id": 2, "parent_id": 1, "type": "ray", "error": 0, "meta": { - "_dd.base_service": "ray.dashboard", "component": "ray", - "ray.job.submit_status": "success", + "ray.actor_method.args": "()", + "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1045", - "ray.submission_id": "raysubmit_S6naDDSVGHHCnQQb", + "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "span.kind": "producer" + "span.kind": "consumer" }, "metrics": { "_dd.djm.enabled": 1, @@ -62,98 +58,52 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 54375, - "start": 1758616906363849343 - }, - { - "name": "JobSupervisor.run.remote()", - "service": "simple_actor", - "resource": "JobSupervisor.run.remote()", - "trace_id": 0, - "span_id": 3, - "parent_id": 1, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray.dashboard", - "component": "ray", - "ray.actor_method.args": "[]", - "ray.actor_method.kwargs": "{'_start_signal_actor': None, 'resources_specified': False}", - "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1045", - "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "span.kind": "producer" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_sampling_priority_v1": 2 - }, - "duration": 537583, - "start": 1758616906367202010 + "duration": 572167, + "start": 1758814885291250425 }, { - "name": "JobSupervisor.run", - "service": "simple_actor", - "resource": "JobSupervisor.run", + "name": "Counter.increment_and_get", + "service": "tests.contrib.ray", + "resource": "Counter.increment_and_get", "trace_id": 0, - "span_id": 4, - "parent_id": 3, + "span_id": 3, + "parent_id": 2, "type": "ray", "error": 0, "meta": { - "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68d25d4a00000000", - "_dd.parent_id": "22d2ac415cb168cb", "component": "ray", - "language": "python", - "ray.actor_id": "47e5b80c6113d6759acab56d01000000", + "ray.actor_method.args": "()", + "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2720", - "ray.submission_id": "raysubmit_S6naDDSVGHHCnQQb", - "ray.task_id": "a631fe8d231813bf47e5b80c6113d6759acab56d01000000", - "ray.worker_id": "9a5bcd80c26b89d8c3a4932eebd3471d5a6a3f5439cf23ecef51ab7f", - "runtime-id": "74bac778488e473baeced804667e1ebe", - "span.kind": "consumer", - "traceparent": "00-68d25d4a00000000993c2ff767e418ea-22d2ac415cb168cb-00", - "tracestate": "dd=p:22d2ac415cb168cb" + "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "span.kind": "consumer" }, "metrics": { "_dd.djm.enabled": 1, "_dd.filter.kept": 1, "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 2720 + "_sampling_priority_v1": 2 }, - "duration": 1921546085, - "start": 1758616907179738218 + "duration": 271166, + "start": 1758814885291533092 }, { - "name": "JobSupervisor._get_driver_env_vars", - "service": "simple_actor", - "resource": "JobSupervisor._get_driver_env_vars", + "name": "Counter.increment", + "service": "tests.contrib.ray", + "resource": "Counter.increment", "trace_id": 0, - "span_id": 5, - "parent_id": 4, + "span_id": 4, + "parent_id": 3, "type": "ray", "error": 0, "meta": { - "_dd.base_service": "ray._private.workers", "component": "ray", - "ray.actor_id": "47e5b80c6113d6759acab56d01000000", - "ray.actor_method.args": "(False,)", + "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2720", - "ray.submission_id": "raysubmit_S6naDDSVGHHCnQQb", - "ray.task_id": "a631fe8d231813bf47e5b80c6113d6759acab56d01000000", - "ray.worker_id": "9a5bcd80c26b89d8c3a4932eebd3471d5a6a3f5439cf23ecef51ab7f", + "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "consumer" }, "metrics": { @@ -162,60 +112,25 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 1540250, - "start": 1758616907181211343 + "duration": 68500, + "start": 1758814885291619508 }, - { - "name": "JobSupervisor._get_driver_runtime_env", - "service": "simple_actor", - "resource": "JobSupervisor._get_driver_runtime_env", - "trace_id": 0, - "span_id": 8, - "parent_id": 5, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "component": "ray", - "ray.actor_id": "47e5b80c6113d6759acab56d01000000", - "ray.actor_method.args": "(False,)", - "ray.actor_method.kwargs": "{}", - "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2720", - "ray.submission_id": "raysubmit_S6naDDSVGHHCnQQb", - "ray.task_id": "a631fe8d231813bf47e5b80c6113d6759acab56d01000000", - "ray.worker_id": "9a5bcd80c26b89d8c3a4932eebd3471d5a6a3f5439cf23ecef51ab7f", - "span.kind": "consumer" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_sampling_priority_v1": 2 - }, - "duration": 58375, - "start": 1758616907182667552 - }, { - "name": "exec simple_actor.py", - "service": "simple_actor", - "resource": "exec simple_actor.py", + "name": "Counter.get_value", + "service": "tests.contrib.ray", + "resource": "Counter.get_value", "trace_id": 0, - "span_id": 6, - "parent_id": 4, + "span_id": 5, + "parent_id": 3, "type": "ray", "error": 0, "meta": { - "_dd.base_service": "ray._private.workers", "component": "ray", - "ray.actor_id": "47e5b80c6113d6759acab56d01000000", + "ray.actor_method.args": "()", + "ray.actor_method.kwargs": "{}", "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2720", - "ray.submission_id": "raysubmit_S6naDDSVGHHCnQQb", - "ray.task_id": "a631fe8d231813bf47e5b80c6113d6759acab56d01000000", - "ray.worker_id": "9a5bcd80c26b89d8c3a4932eebd3471d5a6a3f5439cf23ecef51ab7f", + "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "consumer" }, "metrics": { @@ -224,182 +139,6 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 451916, - "start": 1758616907182887802 - }, - { - "name": "Counter.increment_get_and_double.remote()", - "service": "simple_actor", - "resource": "Counter.increment_get_and_double.remote()", - "trace_id": 0, - "span_id": 7, - "parent_id": 4, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "project", - "_dd.p.tid": "68d25d4a00000000", - "_dd.parent_id": "812bf9752759c7e7", - "component": "ray", - "language": "python", - "ray.actor_method.args": "[]", - "ray.actor_method.kwargs": "{}", - "ray.job_id": "06000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2771", - "ray.submission_id": "raysubmit_S6naDDSVGHHCnQQb", - "ray.worker_id": "06000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "40fbe965ed2047e1bcf267c1ad2e6ba3", - "span.kind": "producer", - "traceparent": "00-68d25d4a00000000993c2ff767e418ea-812bf9752759c7e7-00", - "tracestate": "dd=p:812bf9752759c7e7;s:0" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 2771 - }, - "duration": 342000, - "start": 1758616907756525677 - }, - { - "name": "Counter.increment_get_and_double", - "service": "simple_actor", - "resource": "Counter.increment_get_and_double", - "trace_id": 0, - "span_id": 9, - "parent_id": 7, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68d25d4a00000000", - "_dd.parent_id": "ea5583e677d99184", - "component": "ray", - "language": "python", - "ray.actor_id": "3d2d38c94b835bb9fea6375b06000000", - "ray.actor_method.args": "()", - "ray.actor_method.kwargs": "{}", - "ray.job_id": "06000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2817", - "ray.submission_id": "raysubmit_S6naDDSVGHHCnQQb", - "ray.task_id": "8a2dc005c3f797b83d2d38c94b835bb9fea6375b06000000", - "ray.worker_id": "237d5ab1ecc26355b2056ea5deab23ba4aa40fbb041d34ccc1a8196c", - "runtime-id": "4ef9496db036425394e16fc4fae6a6a3", - "span.kind": "consumer", - "traceparent": "00-68d25d4a00000000993c2ff767e418ea-ea5583e677d99184-00", - "tracestate": "dd=p:ea5583e677d99184;s:0" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 2817 - }, - "duration": 330458, - "start": 1758616908543658511 - }, - { - "name": "Counter.increment_and_get", - "service": "simple_actor", - "resource": "Counter.increment_and_get", - "trace_id": 0, - "span_id": 10, - "parent_id": 9, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "component": "ray", - "ray.actor_id": "3d2d38c94b835bb9fea6375b06000000", - "ray.actor_method.args": "()", - "ray.actor_method.kwargs": "{}", - "ray.job_id": "06000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2817", - "ray.submission_id": "raysubmit_S6naDDSVGHHCnQQb", - "ray.task_id": "8a2dc005c3f797b83d2d38c94b835bb9fea6375b06000000", - "ray.worker_id": "237d5ab1ecc26355b2056ea5deab23ba4aa40fbb041d34ccc1a8196c", - "span.kind": "consumer" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_sampling_priority_v1": 2 - }, - "duration": 100542, - "start": 1758616908543883719 - }, - { - "name": "Counter.increment", - "service": "simple_actor", - "resource": "Counter.increment", - "trace_id": 0, - "span_id": 11, - "parent_id": 10, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "component": "ray", - "ray.actor_id": "3d2d38c94b835bb9fea6375b06000000", - "ray.actor_method.args": "()", - "ray.actor_method.kwargs": "{}", - "ray.job_id": "06000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2817", - "ray.submission_id": "raysubmit_S6naDDSVGHHCnQQb", - "ray.task_id": "8a2dc005c3f797b83d2d38c94b835bb9fea6375b06000000", - "ray.worker_id": "237d5ab1ecc26355b2056ea5deab23ba4aa40fbb041d34ccc1a8196c", - "span.kind": "consumer" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_sampling_priority_v1": 2 - }, - "duration": 20333, - "start": 1758616908543924844 - }, - { - "name": "Counter.get_value", - "service": "simple_actor", - "resource": "Counter.get_value", - "trace_id": 0, - "span_id": 12, - "parent_id": 10, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "component": "ray", - "ray.actor_id": "3d2d38c94b835bb9fea6375b06000000", - "ray.actor_method.args": "()", - "ray.actor_method.kwargs": "{}", - "ray.job_id": "06000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2817", - "ray.submission_id": "raysubmit_S6naDDSVGHHCnQQb", - "ray.task_id": "8a2dc005c3f797b83d2d38c94b835bb9fea6375b06000000", - "ray.worker_id": "237d5ab1ecc26355b2056ea5deab23ba4aa40fbb041d34ccc1a8196c", - "span.kind": "consumer" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_sampling_priority_v1": 2 - }, - "duration": 15542, - "start": 1758616908543961094 - }]] + "duration": 47917, + "start": 1758814885291733800 + }]] diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_task.json b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_task.json index f0c233e78a0..a2a08bcf98d 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_task.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_task.json @@ -1,28 +1,27 @@ [[ { - "name": "ray.job", - "service": "simple_task", - "resource": "ray.job", + "name": "tests.contrib.ray.test_ray.add_one.remote()", + "service": "tests.contrib.ray", + "resource": "tests.contrib.ray.test_ray.add_one.remote()", "trace_id": 0, "span_id": 1, "parent_id": 0, "type": "ray", "error": 0, "meta": { - "_dd.base_service": "ray.dashboard", "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68d25d5000000000", + "_dd.p.tid": "68d562a500000000", "component": "ray", "language": "python", - "ray.job.message": "Job finished successfully.", - "ray.job.status": "SUCCEEDED", "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1045", - "ray.submission_id": "raysubmit_Fe3SwFNH8BaAmtAb", + "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.task.args": "(0,)", + "ray.task.kwargs": "{}", + "ray.task.submit_status": "success", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "11b30a8c1d714183b0fea7bbd9410a29" + "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", + "span.kind": "producer" }, "metrics": { "_dd.djm.enabled": 1, @@ -31,523 +30,107 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1045 + "process_id": 543 }, - "duration": 3812865071, - "start": 1758616912937938513 + "duration": 2364917, + "start": 1758814885305291383 }, { - "name": "ray.job.submit", - "service": "simple_task", - "resource": "ray.job.submit", + "name": "tests.contrib.ray.test_ray.TestRayIntegration.test_simple_task..add_one", + "service": "tests.contrib.ray", + "resource": "tests.contrib.ray.test_ray.TestRayIntegration.test_simple_task..add_one", "trace_id": 0, "span_id": 2, "parent_id": 1, "type": "ray", "error": 0, "meta": { - "_dd.base_service": "ray.dashboard", "component": "ray", - "ray.job.submit_status": "success", "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1045", - "ray.submission_id": "raysubmit_Fe3SwFNH8BaAmtAb", + "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.task.args": "(0,)", + "ray.task.kwargs": "{}", + "ray.task.status": "success", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "span.kind": "producer" + "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", + "span.kind": "consumer" }, "metrics": { "_dd.djm.enabled": 1, "_dd.filter.kept": 1, "_dd.measured": 1, - "_sampling_priority_v1": 2 + "_dd.top_level": 1, + "_sampling_priority_v1": 2, + "process_id": 543 }, - "duration": 59042, - "start": 1758616912938167804 - }, + "duration": 215625, + "start": 1758814885307286842 + }], +[ + { + "name": "tests.contrib.ray.test_ray.add_one.remote()", + "service": "tests.contrib.ray", + "resource": "tests.contrib.ray.test_ray.add_one.remote()", + "trace_id": 1, + "span_id": 1, + "parent_id": 0, + "type": "ray", + "error": 0, + "meta": { + "_dd.hostname": "docker-desktop", + "_dd.p.dm": "-0", + "_dd.p.tid": "68d562a500000000", + "component": "ray", + "language": "python", + "ray.job_id": "01000000", + "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.task.args": "(1,)", + "ray.task.kwargs": "{}", + "ray.task.submit_status": "success", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", + "span.kind": "producer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 543 + }, + "duration": 652917, + "start": 1758814885307780508 + }, { - "name": "JobSupervisor.run.remote()", - "service": "simple_task", - "resource": "JobSupervisor.run.remote()", - "trace_id": 0, - "span_id": 3, + "name": "tests.contrib.ray.test_ray.TestRayIntegration.test_simple_task..add_one", + "service": "tests.contrib.ray", + "resource": "tests.contrib.ray.test_ray.TestRayIntegration.test_simple_task..add_one", + "trace_id": 1, + "span_id": 2, "parent_id": 1, "type": "ray", "error": 0, "meta": { - "_dd.base_service": "ray.dashboard", "component": "ray", - "ray.actor_method.args": "[]", - "ray.actor_method.kwargs": "{'_start_signal_actor': None, 'resources_specified': False}", "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1045", + "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.task.args": "(1,)", + "ray.task.kwargs": "{}", + "ray.task.status": "success", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "span.kind": "producer" + "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", + "span.kind": "consumer" }, "metrics": { "_dd.djm.enabled": 1, "_dd.filter.kept": 1, "_dd.measured": 1, - "_sampling_priority_v1": 2 + "_dd.top_level": 1, + "_sampling_priority_v1": 2, + "process_id": 543 }, - "duration": 275417, - "start": 1758616912941640804 - }, - { - "name": "JobSupervisor.run", - "service": "simple_task", - "resource": "JobSupervisor.run", - "trace_id": 0, - "span_id": 4, - "parent_id": 3, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68d25d5000000000", - "_dd.parent_id": "807f62fbe472f77f", - "component": "ray", - "language": "python", - "ray.actor_id": "bb8d8d62cb5e3722e217eaa101000000", - "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2886", - "ray.submission_id": "raysubmit_Fe3SwFNH8BaAmtAb", - "ray.task_id": "ae46b8beecd25f3abb8d8d62cb5e3722e217eaa101000000", - "ray.worker_id": "76e2549aa91fb784cb5236f605b3f843b0b6a3b1257e92b5b1ac0dac", - "runtime-id": "59c839a7262f4e819e56a6aecf7939de", - "span.kind": "consumer", - "traceparent": "00-68d25d5000000000dae5e0c882cbe424-807f62fbe472f77f-00", - "tracestate": "dd=p:807f62fbe472f77f" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 2886 - }, - "duration": 2839360904, - "start": 1758616913733301638 - }, - { - "name": "JobSupervisor._get_driver_env_vars", - "service": "simple_task", - "resource": "JobSupervisor._get_driver_env_vars", - "trace_id": 0, - "span_id": 5, - "parent_id": 4, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "component": "ray", - "ray.actor_id": "bb8d8d62cb5e3722e217eaa101000000", - "ray.actor_method.args": "(False,)", - "ray.actor_method.kwargs": "{}", - "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2886", - "ray.submission_id": "raysubmit_Fe3SwFNH8BaAmtAb", - "ray.task_id": "ae46b8beecd25f3abb8d8d62cb5e3722e217eaa101000000", - "ray.worker_id": "76e2549aa91fb784cb5236f605b3f843b0b6a3b1257e92b5b1ac0dac", - "span.kind": "consumer" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_sampling_priority_v1": 2 - }, - "duration": 1506875, - "start": 1758616913734749888 - }, - { - "name": "JobSupervisor._get_driver_runtime_env", - "service": "simple_task", - "resource": "JobSupervisor._get_driver_runtime_env", - "trace_id": 0, - "span_id": 11, - "parent_id": 5, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "component": "ray", - "ray.actor_id": "bb8d8d62cb5e3722e217eaa101000000", - "ray.actor_method.args": "(False,)", - "ray.actor_method.kwargs": "{}", - "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2886", - "ray.submission_id": "raysubmit_Fe3SwFNH8BaAmtAb", - "ray.task_id": "ae46b8beecd25f3abb8d8d62cb5e3722e217eaa101000000", - "ray.worker_id": "76e2549aa91fb784cb5236f605b3f843b0b6a3b1257e92b5b1ac0dac", - "span.kind": "consumer" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_sampling_priority_v1": 2 - }, - "duration": 46292, - "start": 1758616913736187763 - }, - { - "name": "exec simple_task.py", - "service": "simple_task", - "resource": "exec simple_task.py", - "trace_id": 0, - "span_id": 6, - "parent_id": 4, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "component": "ray", - "ray.actor_id": "bb8d8d62cb5e3722e217eaa101000000", - "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2886", - "ray.submission_id": "raysubmit_Fe3SwFNH8BaAmtAb", - "ray.task_id": "ae46b8beecd25f3abb8d8d62cb5e3722e217eaa101000000", - "ray.worker_id": "76e2549aa91fb784cb5236f605b3f843b0b6a3b1257e92b5b1ac0dac", - "span.kind": "consumer" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_sampling_priority_v1": 2 - }, - "duration": 414417, - "start": 1758616913736378846 - }, - { - "name": "__main__.add_one.remote()", - "service": "simple_task", - "resource": "__main__.add_one.remote()", - "trace_id": 0, - "span_id": 7, - "parent_id": 4, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "project", - "_dd.p.tid": "68d25d5000000000", - "_dd.parent_id": "c1c03cb05fc2cad7", - "component": "ray", - "language": "python", - "ray.job_id": "07000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2936", - "ray.submission_id": "raysubmit_Fe3SwFNH8BaAmtAb", - "ray.task.args": "(0,)", - "ray.task.kwargs": "{}", - "ray.task.submit_status": "success", - "ray.worker_id": "07000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "2c92310d1ab54db8872e8a64a34db191", - "span.kind": "producer", - "traceparent": "00-68d25d5000000000dae5e0c882cbe424-c1c03cb05fc2cad7-00", - "tracestate": "dd=p:c1c03cb05fc2cad7;s:0" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 2936 - }, - "duration": 3155791, - "start": 1758616914362524722 - }, - { - "name": "__main__.add_one", - "service": "simple_task", - "resource": "__main__.add_one", - "trace_id": 0, - "span_id": 12, - "parent_id": 7, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68d25d5000000000", - "_dd.parent_id": "1d72100e6ad40205", - "component": "ray", - "language": "python", - "ray.job_id": "07000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2982", - "ray.submission_id": "raysubmit_Fe3SwFNH8BaAmtAb", - "ray.task.args": "(0,)", - "ray.task.kwargs": "{}", - "ray.task.status": "success", - "ray.task_id": "d2b4e3e4a6f1ddc5ffffffffffffffffffffffff07000000", - "ray.worker_id": "f987678ddc6424d17588e585b225d4eb899fda1af80ba88ee936c842", - "runtime-id": "bfb9ed05fc074085a064924427db77e3", - "span.kind": "consumer", - "traceparent": "00-68d25d5000000000dae5e0c882cbe424-1d72100e6ad40205-00", - "tracestate": "dd=p:1d72100e6ad40205;s:0" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 2982 - }, - "duration": 227125, - "start": 1758616916112301458 - }, - { - "name": "__main__.add_one.remote()", - "service": "simple_task", - "resource": "__main__.add_one.remote()", - "trace_id": 0, - "span_id": 8, - "parent_id": 4, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "project", - "_dd.p.tid": "68d25d5000000000", - "_dd.parent_id": "c1c03cb05fc2cad7", - "component": "ray", - "language": "python", - "ray.job_id": "07000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2936", - "ray.submission_id": "raysubmit_Fe3SwFNH8BaAmtAb", - "ray.task.args": "(1,)", - "ray.task.kwargs": "{}", - "ray.task.submit_status": "success", - "ray.worker_id": "07000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "2c92310d1ab54db8872e8a64a34db191", - "span.kind": "producer", - "traceparent": "00-68d25d5000000000dae5e0c882cbe424-c1c03cb05fc2cad7-00", - "tracestate": "dd=p:c1c03cb05fc2cad7;s:0" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 2936 - }, - "duration": 230625, - "start": 1758616914369015722 - }, - { - "name": "__main__.add_one", - "service": "simple_task", - "resource": "__main__.add_one", - "trace_id": 0, - "span_id": 13, - "parent_id": 8, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68d25d5000000000", - "_dd.parent_id": "7e50f3c7c005aa31", - "component": "ray", - "language": "python", - "ray.job_id": "07000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2984", - "ray.submission_id": "raysubmit_Fe3SwFNH8BaAmtAb", - "ray.task.args": "(1,)", - "ray.task.kwargs": "{}", - "ray.task.status": "success", - "ray.task_id": "11149dae5a34cd9affffffffffffffffffffffff07000000", - "ray.worker_id": "cee4d7f8e89bcdb15ea8c5ad723a821d585301183a4de31f9454e2c7", - "runtime-id": "a2adddee1b7a46f6b59a78848bbeeb01", - "span.kind": "consumer", - "traceparent": "00-68d25d5000000000dae5e0c882cbe424-7e50f3c7c005aa31-00", - "tracestate": "dd=p:7e50f3c7c005aa31;s:0" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 2984 - }, - "duration": 254083, - "start": 1758616916080776042 - }, - { - "name": "__main__.add_one.remote()", - "service": "simple_task", - "resource": "__main__.add_one.remote()", - "trace_id": 0, - "span_id": 9, - "parent_id": 4, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "project", - "_dd.p.tid": "68d25d5000000000", - "_dd.parent_id": "c1c03cb05fc2cad7", - "component": "ray", - "language": "python", - "ray.job_id": "07000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2936", - "ray.submission_id": "raysubmit_Fe3SwFNH8BaAmtAb", - "ray.task.args": "(2,)", - "ray.task.kwargs": "{}", - "ray.task.submit_status": "success", - "ray.worker_id": "07000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "2c92310d1ab54db8872e8a64a34db191", - "span.kind": "producer", - "traceparent": "00-68d25d5000000000dae5e0c882cbe424-c1c03cb05fc2cad7-00", - "tracestate": "dd=p:c1c03cb05fc2cad7;s:0" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 2936 - }, - "duration": 211750, - "start": 1758616914370494138 - }, - { - "name": "__main__.add_one", - "service": "simple_task", - "resource": "__main__.add_one", - "trace_id": 0, - "span_id": 14, - "parent_id": 9, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68d25d5000000000", - "_dd.parent_id": "590330612e6f246c", - "component": "ray", - "language": "python", - "ray.job_id": "07000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2983", - "ray.submission_id": "raysubmit_Fe3SwFNH8BaAmtAb", - "ray.task.args": "(2,)", - "ray.task.kwargs": "{}", - "ray.task.status": "success", - "ray.task_id": "a363a5a94a784cb3ffffffffffffffffffffffff07000000", - "ray.worker_id": "cdc10b57145bbb27cb3826e7caeb1e37f0b341a19453e7df660bc4c1", - "runtime-id": "e8b72643a5544b83a3015aea5690093b", - "span.kind": "consumer", - "traceparent": "00-68d25d5000000000dae5e0c882cbe424-590330612e6f246c-00", - "tracestate": "dd=p:590330612e6f246c;s:0" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 2983 - }, - "duration": 212792, - "start": 1758616916103834625 - }, - { - "name": "__main__.add_one.remote()", - "service": "simple_task", - "resource": "__main__.add_one.remote()", - "trace_id": 0, - "span_id": 10, - "parent_id": 4, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "project", - "_dd.p.tid": "68d25d5000000000", - "_dd.parent_id": "c1c03cb05fc2cad7", - "component": "ray", - "language": "python", - "ray.job_id": "07000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2936", - "ray.submission_id": "raysubmit_Fe3SwFNH8BaAmtAb", - "ray.task.args": "(3,)", - "ray.task.kwargs": "{}", - "ray.task.submit_status": "success", - "ray.worker_id": "07000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "2c92310d1ab54db8872e8a64a34db191", - "span.kind": "producer", - "traceparent": "00-68d25d5000000000dae5e0c882cbe424-c1c03cb05fc2cad7-00", - "tracestate": "dd=p:c1c03cb05fc2cad7;s:0" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 2936 - }, - "duration": 197208, - "start": 1758616914372608847 - }, - { - "name": "__main__.add_one", - "service": "simple_task", - "resource": "__main__.add_one", - "trace_id": 0, - "span_id": 15, - "parent_id": 10, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68d25d5000000000", - "_dd.parent_id": "69e914f59f74e0bb", - "component": "ray", - "language": "python", - "ray.job_id": "07000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "2985", - "ray.submission_id": "raysubmit_Fe3SwFNH8BaAmtAb", - "ray.task.args": "(3,)", - "ray.task.kwargs": "{}", - "ray.task.status": "success", - "ray.task_id": "b6fe777c23eaf580ffffffffffffffffffffffff07000000", - "ray.worker_id": "0cbc2e92c88cc3409b31e719d687a95cba4f7ad745d13af985599d25", - "runtime-id": "f28792e41ccd44e0842819e1bbe0f8ef", - "span.kind": "consumer", - "traceparent": "00-68d25d5000000000dae5e0c882cbe424-69e914f59f74e0bb-00", - "tracestate": "dd=p:69e914f59f74e0bb;s:0" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 2985 - }, - "duration": 229500, - "start": 1758616916086801458 - }]] + "duration": 182708, + "start": 1758814885308115175 + }]] diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_wait.json b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_wait.json index f916bab5acf..3e373e5d5c7 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_wait.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_wait.json @@ -1,28 +1,27 @@ [[ { - "name": "ray.job", - "service": "simple_wait", - "resource": "ray.job", + "name": "tests.contrib.ray.test_ray.add_one.remote()", + "service": "tests.contrib.ray", + "resource": "tests.contrib.ray.test_ray.add_one.remote()", "trace_id": 0, "span_id": 1, "parent_id": 0, "type": "ray", "error": 0, "meta": { - "_dd.base_service": "ray.dashboard", "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68d25d5700000000", + "_dd.p.tid": "68d562a500000000", "component": "ray", "language": "python", - "ray.job.message": "Job finished successfully.", - "ray.job.status": "SUCCEEDED", "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1045", - "ray.submission_id": "raysubmit_rB8WFwngAc3Tyr6V", + "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.task.args": "(42,)", + "ray.task.kwargs": "{}", + "ray.task.submit_status": "success", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "11b30a8c1d714183b0fea7bbd9410a29" + "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", + "span.kind": "producer" }, "metrics": { "_dd.djm.enabled": 1, @@ -31,319 +30,75 @@ "_dd.top_level": 1, "_dd.tracer_kr": 1.0, "_sampling_priority_v1": 2, - "process_id": 1045 + "process_id": 543 }, - "duration": 2832729334, - "start": 1758616919492580377 + "duration": 2655500, + "start": 1758814885319518217 }, { - "name": "ray.job.submit", - "service": "simple_wait", - "resource": "ray.job.submit", + "name": "tests.contrib.ray.test_ray.TestRayIntegration.test_simple_wait..add_one", + "service": "tests.contrib.ray", + "resource": "tests.contrib.ray.test_ray.TestRayIntegration.test_simple_wait..add_one", "trace_id": 0, "span_id": 2, "parent_id": 1, "type": "ray", "error": 0, "meta": { - "_dd.base_service": "ray.dashboard", "component": "ray", - "ray.job.submit_status": "success", "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1045", - "ray.submission_id": "raysubmit_rB8WFwngAc3Tyr6V", + "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.task.args": "(42,)", + "ray.task.kwargs": "{}", + "ray.task.status": "success", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "span.kind": "producer" + "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", + "span.kind": "consumer" }, "metrics": { "_dd.djm.enabled": 1, "_dd.filter.kept": 1, "_dd.measured": 1, - "_sampling_priority_v1": 2 + "_dd.top_level": 1, + "_sampling_priority_v1": 2, + "process_id": 543 }, - "duration": 57875, - "start": 1758616919492786668 - }, - { - "name": "JobSupervisor.run.remote()", - "service": "simple_wait", - "resource": "JobSupervisor.run.remote()", - "trace_id": 0, - "span_id": 3, - "parent_id": 1, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray.dashboard", - "component": "ray", - "ray.actor_method.args": "[]", - "ray.actor_method.kwargs": "{'_start_signal_actor': None, 'resources_specified': False}", - "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "1045", - "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "span.kind": "producer" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_sampling_priority_v1": 2 - }, - "duration": 292917, - "start": 1758616919496148668 - }, - { - "name": "JobSupervisor.run", - "service": "simple_wait", - "resource": "JobSupervisor.run", - "trace_id": 0, - "span_id": 4, - "parent_id": 3, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68d25d5700000000", - "_dd.parent_id": "41e8078b254177d3", - "component": "ray", - "language": "python", - "ray.actor_id": "ea97038d6080355b2ed7418c01000000", - "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "3185", - "ray.submission_id": "raysubmit_rB8WFwngAc3Tyr6V", - "ray.task_id": "5168ff79929289e3ea97038d6080355b2ed7418c01000000", - "ray.worker_id": "5ddc998e2fb873a86718b2196144dba80763e6cadaecec51bab462c4", - "runtime-id": "556f77e54ee04dc7bfd61ff9338a79b9", - "span.kind": "consumer", - "traceparent": "00-68d25d570000000019a64e97fb8e1cdf-41e8078b254177d3-00", - "tracestate": "dd=p:41e8078b254177d3" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 3185 - }, - "duration": 1924346085, - "start": 1758616920310308085 - }, - { - "name": "JobSupervisor._get_driver_env_vars", - "service": "simple_wait", - "resource": "JobSupervisor._get_driver_env_vars", - "trace_id": 0, - "span_id": 5, - "parent_id": 4, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "component": "ray", - "ray.actor_id": "ea97038d6080355b2ed7418c01000000", - "ray.actor_method.args": "(False,)", - "ray.actor_method.kwargs": "{}", - "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "3185", - "ray.submission_id": "raysubmit_rB8WFwngAc3Tyr6V", - "ray.task_id": "5168ff79929289e3ea97038d6080355b2ed7418c01000000", - "ray.worker_id": "5ddc998e2fb873a86718b2196144dba80763e6cadaecec51bab462c4", - "span.kind": "consumer" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_sampling_priority_v1": 2 - }, - "duration": 1547709, - "start": 1758616920311501460 - }, - { - "name": "JobSupervisor._get_driver_runtime_env", - "service": "simple_wait", - "resource": "JobSupervisor._get_driver_runtime_env", - "trace_id": 0, - "span_id": 9, - "parent_id": 5, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "component": "ray", - "ray.actor_id": "ea97038d6080355b2ed7418c01000000", - "ray.actor_method.args": "(False,)", - "ray.actor_method.kwargs": "{}", - "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "3185", - "ray.submission_id": "raysubmit_rB8WFwngAc3Tyr6V", - "ray.task_id": "5168ff79929289e3ea97038d6080355b2ed7418c01000000", - "ray.worker_id": "5ddc998e2fb873a86718b2196144dba80763e6cadaecec51bab462c4", - "span.kind": "consumer" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_sampling_priority_v1": 2 - }, - "duration": 44083, - "start": 1758616920312982919 - }, - { - "name": "exec simple_wait.py", - "service": "simple_wait", - "resource": "exec simple_wait.py", - "trace_id": 0, - "span_id": 6, - "parent_id": 4, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "component": "ray", - "ray.actor_id": "ea97038d6080355b2ed7418c01000000", - "ray.job_id": "01000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "3185", - "ray.submission_id": "raysubmit_rB8WFwngAc3Tyr6V", - "ray.task_id": "5168ff79929289e3ea97038d6080355b2ed7418c01000000", - "ray.worker_id": "5ddc998e2fb873a86718b2196144dba80763e6cadaecec51bab462c4", - "span.kind": "consumer" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_sampling_priority_v1": 2 - }, - "duration": 430375, - "start": 1758616920313192085 - }, - { - "name": "__main__.add_one.remote()", - "service": "simple_wait", - "resource": "__main__.add_one.remote()", - "trace_id": 0, - "span_id": 7, - "parent_id": 4, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "project", - "_dd.p.tid": "68d25d5700000000", - "_dd.parent_id": "7688553baccb85ef", - "component": "ray", - "language": "python", - "ray.job_id": "08000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "3235", - "ray.submission_id": "raysubmit_rB8WFwngAc3Tyr6V", - "ray.task.args": "(42,)", - "ray.task.kwargs": "{}", - "ray.task.submit_status": "success", - "ray.worker_id": "08000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "43e237ebadfb41deaa49fad2747ef35f", - "span.kind": "producer", - "traceparent": "00-68d25d570000000019a64e97fb8e1cdf-7688553baccb85ef-00", - "tracestate": "dd=p:7688553baccb85ef;s:0" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 3235 - }, - "duration": 2941167, - "start": 1758616920888936169 - }, - { - "name": "__main__.add_one", - "service": "simple_wait", - "resource": "__main__.add_one", - "trace_id": 0, - "span_id": 10, - "parent_id": 7, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "ray._private.workers", - "_dd.p.tid": "68d25d5700000000", - "_dd.parent_id": "ee90aa7b6bc8cafe", - "component": "ray", - "language": "python", - "ray.job_id": "08000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "3281", - "ray.submission_id": "raysubmit_rB8WFwngAc3Tyr6V", - "ray.task.args": "(42,)", - "ray.task.kwargs": "{}", - "ray.task.status": "success", - "ray.task_id": "f242b76f1d3ceb58ffffffffffffffffffffffff08000000", - "ray.worker_id": "08b558867f1a6f5ca9226025e10517186e9b69fa99e0cada13246182", - "runtime-id": "b499404dac8f49b8b85f446d2d94f3b3", - "span.kind": "consumer", - "traceparent": "00-68d25d570000000019a64e97fb8e1cdf-ee90aa7b6bc8cafe-00", - "tracestate": "dd=p:ee90aa7b6bc8cafe;s:0" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 3281 - }, - "duration": 317500, - "start": 1758616921669996253 - }, - { - "name": "ray.wait", - "service": "simple_wait", - "resource": "ray.wait", - "trace_id": 0, - "span_id": 8, - "parent_id": 4, - "type": "ray", - "error": 0, - "meta": { - "_dd.base_service": "project", - "_dd.p.tid": "68d25d5700000000", - "_dd.parent_id": "7688553baccb85ef", - "component": "ray", - "language": "python", - "ray.job_id": "08000000", - "ray.node_id": "c19f42ae10550565c5bd56e882dc80acbacef2be965d4ae7994b21cb", - "ray.pid": "3235", - "ray.submission_id": "raysubmit_rB8WFwngAc3Tyr6V", - "ray.wait.num_returns": "1", - "ray.wait.timeout_s": "60", - "ray.worker_id": "08000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "43e237ebadfb41deaa49fad2747ef35f", - "span.kind": "producer", - "traceparent": "00-68d25d570000000019a64e97fb8e1cdf-7688553baccb85ef-00", - "tracestate": "dd=p:7688553baccb85ef;s:0" - }, - "metrics": { - "_dd.djm.enabled": 1, - "_dd.filter.kept": 1, - "_dd.measured": 1, - "_dd.top_level": 1, - "_dd.tracer_kr": 1.0, - "_sampling_priority_v1": 2, - "process_id": 3235 - }, - "duration": 779761792, - "start": 1758616920893889794 - }]] + "duration": 241042, + "start": 1758814885321713758 + }], +[ + { + "name": "ray.wait", + "service": "tests.contrib.ray", + "resource": "ray.wait", + "trace_id": 1, + "span_id": 1, + "parent_id": 0, + "type": "ray", + "error": 0, + "meta": { + "_dd.hostname": "docker-desktop", + "_dd.p.dm": "-0", + "_dd.p.tid": "68d562a500000000", + "component": "ray", + "language": "python", + "ray.job_id": "01000000", + "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.wait.num_returns": "1", + "ray.wait.timeout_s": "60", + "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", + "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", + "span.kind": "producer" + }, + "metrics": { + "_dd.djm.enabled": 1, + "_dd.filter.kept": 1, + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 2, + "process_id": 543 + }, + "duration": 317041, + "start": 1758814885322329217 + }]] From 936e2f8879995831232f579c7b92f200c53d0e01 Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Thu, 25 Sep 2025 19:24:17 +0200 Subject: [PATCH 36/59] addressing reviews --- ddtrace/contrib/internal/ray/__init__.py | 16 +- ddtrace/contrib/internal/ray/constants.py | 37 ++++- ddtrace/contrib/internal/ray/patch.py | 154 ++++++++++++------ ddtrace/contrib/internal/ray/span_manager.py | 50 +++--- ddtrace/contrib/internal/ray/utils.py | 63 +++---- ddtrace/contrib/ray.py | 8 +- ddtrace/settings/_config.py | 6 + tests/contrib/ray/test_long_running_span.py | 8 +- tests/contrib/ray/test_ray.py | 1 + ...trib.ray.test_ray.test_actor_and_task.json | 129 ++++++++------- ....ray.test_ray.test_actor_interactions.json | 128 ++++++++------- ...ontrib.ray.test_ray.test_nested_tasks.json | 48 +++--- ...ontrib.ray.test_ray.test_simple_actor.json | 51 +++--- ...contrib.ray.test_ray.test_simple_task.json | 52 +++--- ...contrib.ray.test_ray.test_simple_wait.json | 37 +++-- 15 files changed, 466 insertions(+), 322 deletions(-) diff --git a/ddtrace/contrib/internal/ray/__init__.py b/ddtrace/contrib/internal/ray/__init__.py index 6a6de76d741..a6a249ecc4c 100644 --- a/ddtrace/contrib/internal/ray/__init__.py +++ b/ddtrace/contrib/internal/ray/__init__.py @@ -7,26 +7,24 @@ Enabling ~~~~~~~~ -The Ray integration is enabled automatically when you use -:ref:`ddtrace-run` or :ref:`import ddtrace.auto`. - -Or use :func:`patch() ` to manually enable the Ray integration:: - - from ddtrace import patch - patch(ray=True) - The recommended way to instrument Ray, is to instrument the Ray cluster. You can do it by starting the Ray head with a tracing startup hook:: ray start --head --tracing-startup-hook=ddtrace.contrib.ray:setup_tracing +Otherwise, you can specify the tracing hook in `ray.init()` using:: + + ray.init(_tracing_startup_hook="ddtrace.contrib.ray:setup_tracing") + +Note that this method does not provide full tracing capabilities. + Configuration ~~~~~~~~~~~~~ The Ray integration can be configured using environment variables: -- ``DD_TRACE_RAY_RESUBMIT_LONG_RUNNING_INTERVAL``: Interval for resubmitting long-running +- ``DD_TRACE_LONG_RUNNING_SPAN_SUBMISSION_INTERVAL``: Interval for resubmitting long-running spans (default: ``120.0`` seconds) Ray service name can be configured by: diff --git a/ddtrace/contrib/internal/ray/constants.py b/ddtrace/contrib/internal/ray/constants.py index 1cbd6ce2e4e..22ffa35755a 100644 --- a/ddtrace/contrib/internal/ray/constants.py +++ b/ddtrace/contrib/internal/ray/constants.py @@ -1,4 +1,4 @@ -DD_TRACE_CTX = "_dd_trace_ctx" +DD_RAY_TRACE_CTX = "_dd_ray_trace_ctx" # Environment variables RAY_SUBMISSION_ID = "_RAY_SUBMISSION_ID" @@ -11,6 +11,41 @@ RAY_TASK_ID = "ray.task_id" RAY_ACTOR_ID = "ray.actor_id" RAY_SUBMISSION_ID_TAG = "ray.submission_id" +RAY_HOSTNAME = "ray.hostname" # Default job name if not set by the user DEFAULT_JOB_NAME = "unnamed.ray.job" + +# Component tag +RAY_COMPONENT = "ray" + +# Task and job status values +RAY_STATUS_SUCCESS = "success" +RAY_STATUS_ERROR = "error" +RAY_STATUS_RUNNING = "RUNNING" +RAY_STATUS_FINISHED = "FINISHED" +RAY_STATUS_FAILED = "FAILED" + +# Ray span tag names +RAY_TASK_ARGS = "ray.task.args" +RAY_TASK_KWARGS = "ray.task.kwargs" +RAY_TASK_STATUS = "ray.task.status" +RAY_TASK_SUBMIT_STATUS = "ray.task.submit_status" +RAY_ACTOR_METHOD_ARGS = "ray.actor_method.args" +RAY_ACTOR_METHOD_KWARGS = "ray.actor_method.kwargs" +RAY_JOB_STATUS = "ray.job.status" +RAY_JOB_SUBMIT_STATUS = "ray.job.submit_status" +RAY_JOB_MESSAGE = "ray.job.message" +RAY_WAIT_TIMEOUT = "ray.wait.timeout_s" +RAY_WAIT_NUM_RETURNS = "ray.wait.num_returns" +RAY_WAIT_FETCH_LOCAL = "ray.wait.fetch_local" + +# Error tag names +ERROR_MESSAGE = "error.message" + +# Long-running span metric names +DD_PARTIAL_VERSION = "_dd.partial_version" +DD_WAS_LONG_RUNNING = "_dd.was_long_running" + +# Special values +REDACTED_VALUE = "" diff --git a/ddtrace/contrib/internal/ray/patch.py b/ddtrace/contrib/internal/ray/patch.py index c21197161f7..11aff7484aa 100644 --- a/ddtrace/contrib/internal/ray/patch.py +++ b/ddtrace/contrib/internal/ray/patch.py @@ -22,16 +22,31 @@ from ddtrace.contrib.internal.trace_utils import unwrap as _u from ddtrace.ext import SpanKind from ddtrace.ext import SpanTypes +from ddtrace.internal.logger import get_logger from ddtrace.internal.schema import schematize_service_name from ddtrace.internal.utils import get_argument_value from ddtrace.propagation.http import _TraceContext from ddtrace.settings._config import _get_config -from .constants import DD_TRACE_CTX +from .constants import DD_RAY_TRACE_CTX from .constants import DEFAULT_JOB_NAME +from .constants import RAY_ACTOR_METHOD_ARGS +from .constants import RAY_ACTOR_METHOD_KWARGS from .constants import RAY_JOB_NAME +from .constants import RAY_JOB_STATUS +from .constants import RAY_JOB_SUBMIT_STATUS +from .constants import RAY_STATUS_ERROR +from .constants import RAY_STATUS_FAILED +from .constants import RAY_STATUS_SUCCESS from .constants import RAY_SUBMISSION_ID from .constants import RAY_SUBMISSION_ID_TAG +from .constants import RAY_TASK_ARGS +from .constants import RAY_TASK_KWARGS +from .constants import RAY_TASK_STATUS +from .constants import RAY_TASK_SUBMIT_STATUS +from .constants import RAY_WAIT_FETCH_LOCAL +from .constants import RAY_WAIT_NUM_RETURNS +from .constants import RAY_WAIT_TIMEOUT from .span_manager import long_running_ray_span from .span_manager import start_long_running_job from .span_manager import stop_long_running_job @@ -44,14 +59,23 @@ from .utils import extract_signature from .utils import get_dd_job_name_from_entrypoint from .utils import get_dd_job_name_from_submission_id -from .utils import set_maybe_big_tag +from .utils import set_tag_or_truncate + + +log = get_logger(__name__) + + +# Ray modules that should be excluded from tracing +RAY_MODULE_DENYLIST = { + "ray.dag", + "ray.experimental", +} config._add( "ray", dict( _default_service=schematize_service_name("ray"), - resubmit_interval=_get_config("DD_TRACE_RAY_RESUBMIT_LONG_RUNNING_INTERVAL", default=120.0, modifier=float), initial_submit_threshold=_get_config("_DD_TRACE_RAY_INITIAL_SUBMIT_THRESHOLD", default=10.0, modifier=float), ), ) @@ -79,39 +103,48 @@ def _wrap_task_execution(wrapped, *args, **kwargs): """ Wraps the actual execution of a Ray task to trace its performance. """ - if DD_TRACE_CTX not in kwargs: + if DD_RAY_TRACE_CTX not in kwargs: return wrapped(*args, **kwargs) # Extract context from parent span - extracted_context = _TraceContext._extract(kwargs[DD_TRACE_CTX]) - kwargs.pop(DD_TRACE_CTX) + extracted_context = _TraceContext._extract(kwargs[DD_RAY_TRACE_CTX]) + kwargs.pop(DD_RAY_TRACE_CTX) with long_running_ray_span( - f"{wrapped.__module__}.{wrapped.__qualname__}", + "task.execute", + resource=f"{wrapped.__module__}.{wrapped.__qualname__}", service=os.environ.get(RAY_JOB_NAME), span_type=SpanTypes.RAY, child_of=extracted_context, activate=True, ) as task_execute_span: try: - set_maybe_big_tag(task_execute_span, "ray.task.args", args) - set_maybe_big_tag(task_execute_span, "ray.task.kwargs", kwargs) + set_tag_or_truncate(task_execute_span, RAY_TASK_ARGS, args) + set_tag_or_truncate(task_execute_span, RAY_TASK_KWARGS, kwargs) result = wrapped(*args, **kwargs) - task_execute_span.set_tag_str("ray.task.status", "success") + task_execute_span.set_tag_str(RAY_TASK_STATUS, RAY_STATUS_SUCCESS) return result - except BaseException: - task_execute_span.set_tag_str("ray.task.status", "error") + except BaseException as e: + log.debug( + "Ray task %s execution failed: %s", f"{wrapped.__module__}.{wrapped.__qualname__}", e, exc_info=True + ) + task_execute_span.set_tag_str(RAY_TASK_STATUS, RAY_STATUS_ERROR) raise def traced_submit_task(wrapped, instance, args, kwargs): """Trace task submission, i.e the func.remote() call""" if tracer.current_span() is None: + log.debug( + "No active span found in %s.remote(), activating trace context from environment", instance._function_name + ) tracer.context_provider.activate(_extract_tracing_context_from_env()) # Inject dd_trace_ctx args in the function being executed by ray + # This is done under a lock as multiple task could be submit at the same time + # and thus try to modify the signature as the same time with instance._inject_lock: if instance._function_signature is None: instance._function = _wrap_remote_function_execution(instance._function) @@ -119,22 +152,26 @@ def traced_submit_task(wrapped, instance, args, kwargs): instance._function_signature = extract_signature(instance._function) with tracer.trace( - f"{instance._function_name}.remote()", service=os.environ.get(RAY_JOB_NAME), span_type=SpanTypes.RAY + "task.submit", + resource=f"{instance._function_name}.remote", + service=os.environ.get(RAY_JOB_NAME), + span_type=SpanTypes.RAY, ) as span: span.set_tag_str(SPAN_KIND, SpanKind.PRODUCER) _inject_ray_span_tags_and_metrics(span) try: - set_maybe_big_tag(span, "ray.task.args", kwargs.get("args", {})) - set_maybe_big_tag(span, "ray.task.kwargs", kwargs.get("kwargs", {})) + set_tag_or_truncate(span, RAY_TASK_ARGS, kwargs.get("args", {})) + set_tag_or_truncate(span, RAY_TASK_KWARGS, kwargs.get("kwargs", {})) _inject_context_in_kwargs(span.context, kwargs) resp = wrapped(*args, **kwargs) - span.set_tag_str("ray.task.submit_status", "success") + span.set_tag_str(RAY_TASK_SUBMIT_STATUS, RAY_STATUS_SUCCESS) return resp except BaseException as e: - span.set_tag_str("ray.task.submit_status", "error") + log.debug("Failed to submit Ray task %s : %s", f"{instance._function_name}.remote()", e, exc_info=True) + span.set_tag_str(RAY_TASK_SUBMIT_STATUS, RAY_STATUS_ERROR) raise e @@ -154,7 +191,7 @@ def traced_submit_job(wrapped, instance, args, kwargs): kwargs["submission_id"] = submission_id entrypoint = kwargs.get("entrypoint", "") job_name = ( - os.environ.get("DD_SERVICE") + config.service or kwargs.get("metadata", {}).get("job_name", "") or get_dd_job_name_from_submission_id(submission_id) or get_dd_job_name_from_entrypoint(entrypoint) @@ -173,7 +210,7 @@ def traced_submit_job(wrapped, instance, args, kwargs): ) as submit_span: _inject_ray_span_tags_and_metrics(submit_span) submit_span.set_tag_str(SPAN_KIND, SpanKind.PRODUCER) - submit_span.set_tag_str("ray.submission_id", submission_id) + submit_span.set_tag_str(RAY_SUBMISSION_ID_TAG, submission_id) # Inject the context of the job so that ray.job.run is its child env_vars = kwargs.setdefault("runtime_env", {}).setdefault("env_vars", {}) @@ -184,13 +221,14 @@ def traced_submit_job(wrapped, instance, args, kwargs): try: resp = wrapped(*args, **kwargs) - submit_span.set_tag_str("ray.job.submit_status", "success") + submit_span.set_tag_str(RAY_JOB_SUBMIT_STATUS, RAY_STATUS_SUCCESS) return resp - except BaseException: - submit_span.set_tag_str("ray.job.submit_status", "error") + except BaseException as e: + log.debug("Failed to submit Ray Job %s : %s", job_name, e, exc_info=True) + submit_span.set_tag_str(RAY_JOB_SUBMIT_STATUS, RAY_STATUS_ERROR) raise except BaseException as e: - job_span.set_tag_str("ray.job.status", "error") + job_span.set_tag_str(RAY_JOB_STATUS, RAY_STATUS_ERROR) job_span.error = 1 job_span.set_exc_info(type(e), e, e.__traceback__) job_span.finish() @@ -202,22 +240,28 @@ def traced_actor_method_call(wrapped, instance, args, kwargs): call """ actor_name = instance._ray_actor_creation_function_descriptor.class_name - method_name = args[0] + method_name = get_argument_value(args, kwargs, 0, "method_name") # if _dd_trace_ctx was not injected in the param of the function, it means # we do not want to trace this function, for example: JobSupervisor.ping - if not any(p.name == DD_TRACE_CTX for p in instance._ray_method_signatures[method_name]): + if not any(p.name == DD_RAY_TRACE_CTX for p in instance._ray_method_signatures[method_name]): return wrapped(*args, **kwargs) if tracer.current_span() is None: + log.debug( + "No active span found in %s.%s.remote(), activating trace context from environment", actor_name, method_name + ) tracer.context_provider.activate(_extract_tracing_context_from_env()) with tracer.trace( - f"{actor_name}.{method_name}.remote()", service=os.environ.get(RAY_JOB_NAME), span_type=SpanTypes.RAY + "actor_method.submit", + service=os.environ.get(RAY_JOB_NAME), + span_type=SpanTypes.RAY, + resource=f"{actor_name}.{method_name}.remote", ) as span: span.set_tag_str(SPAN_KIND, SpanKind.PRODUCER) - set_maybe_big_tag(span, "ray.actor_method.args", get_argument_value(args, kwargs, 0, "args")) - set_maybe_big_tag(span, "ray.actor_method.kwargs", get_argument_value(args, kwargs, 1, "kwargs")) + set_tag_or_truncate(span, RAY_ACTOR_METHOD_ARGS, get_argument_value(args, kwargs, 0, "args")) + set_tag_or_truncate(span, RAY_ACTOR_METHOD_KWARGS, get_argument_value(args, kwargs, 1, "kwargs")) _inject_ray_span_tags_and_metrics(span) _inject_context_in_kwargs(span.context, kwargs) @@ -229,6 +273,7 @@ def traced_wait(wrapped, instance, args, kwargs): Trace the calls of ray.wait """ if tracer.current_span() is None: + log.debug("No active span found in ray.wait(), activating trace context from environment") tracer.context_provider.activate(_extract_tracing_context_from_env()) with long_running_ray_span( @@ -245,23 +290,24 @@ def traced_wait(wrapped, instance, args, kwargs): num_returns = kwargs.get("num_returns") fetch_local = kwargs.get("fetch_local") if timeout is not None: - span.set_tag_str("ray.wait.timeout_s", str(timeout)) + span.set_tag_str(RAY_WAIT_TIMEOUT, str(timeout)) if num_returns is not None: - span.set_tag_str("ray.wait.num_returns", str(num_returns)) + span.set_tag_str(RAY_WAIT_NUM_RETURNS, str(num_returns)) if fetch_local is not None: - span.set_tag_str("ray.wait.fetch_local", str(fetch_local)) + span.set_tag_str(RAY_WAIT_FETCH_LOCAL, str(fetch_local)) return wrapped(*args, **kwargs) def _job_supervisor_run_wrapper(method: Callable[..., Any]) -> Any: - async def _traced_run_method(self: Any, *args: Any, _dd_trace_ctx, **kwargs: Any) -> Any: + async def _traced_run_method(self: Any, *args: Any, _dd_ray_trace_ctx, **kwargs: Any) -> Any: from ddtrace.ext import SpanTypes - context = _TraceContext._extract(_dd_trace_ctx) + context = _TraceContext._extract(_dd_ray_trace_ctx) submission_id = os.environ.get(RAY_SUBMISSION_ID) with long_running_ray_span( - f"{self.__class__.__name__}.{method.__name__}", + "actor_method.execute", + resource=f"{self.__class__.__name__}.{method.__name__}", service=os.environ.get(RAY_JOB_NAME), span_type=SpanTypes.RAY, child_of=context, @@ -276,28 +322,32 @@ async def _traced_run_method(self: Any, *args: Any, _dd_trace_ctx, **kwargs: Any # the error used to exit the actor job_info = await self._job_info_client.get_info(submission_id) - if str(job_info.status) == "FAILED": + if str(job_info.status) == RAY_STATUS_FAILED: raise e return _traced_run_method def _exec_entrypoint_wrapper(method: Callable[..., Any]) -> Any: - def _traced_exec_entrypoint_method(self: Any, *args: Any, _dd_trace_ctx=None, **kwargs: Any) -> Any: + def _traced_exec_entrypoint_method(self: Any, *args: Any, _dd_ray_trace_ctx=None, **kwargs: Any) -> Any: from ddtrace import tracer from ddtrace.ext import SpanTypes - if tracer.current_span() is None: - tracer.context_provider.activate(_extract_tracing_context_from_env()) - script_name_match = ENTRY_POINT_REGEX.search(self._entrypoint) if script_name_match: entrypoint_name = f"{script_name_match.group(1)}.py" else: entrypoint_name = os.path.basename(self._entrypoint) + if tracer.current_span() is None: + log.debug("No active span found in exec %s, activating trace context from environment", entrypoint_name) + tracer.context_provider.activate(_extract_tracing_context_from_env()) + with tracer.trace( - f"exec {entrypoint_name}", service=os.environ.get(RAY_JOB_NAME), span_type=SpanTypes.RAY + "exec entrypoint", + resource=f"exec {entrypoint_name}", + service=os.environ.get(RAY_JOB_NAME), + span_type=SpanTypes.RAY, ) as span: span.set_tag_str(SPAN_KIND, SpanKind.CONSUMER) _inject_ray_span_tags_and_metrics(span) @@ -314,39 +364,40 @@ def _trace_actor_method(self: Any, method: Callable[..., Any], dd_trace_ctx, *ar context = _TraceContext._extract(dd_trace_ctx) with long_running_ray_span( - f"{self.__class__.__name__}.{method.__name__}", + "actor_method.execute", + resource=f"{self.__class__.__name__}.{method.__name__}", service=os.environ.get(RAY_JOB_NAME), span_type=SpanTypes.RAY, child_of=context, activate=True, ) as actor_execute_span: - set_maybe_big_tag(actor_execute_span, "ray.actor_method.args", args) - set_maybe_big_tag(actor_execute_span, "ray.actor_method.kwargs", kwargs) + set_tag_or_truncate(actor_execute_span, RAY_ACTOR_METHOD_ARGS, args) + set_tag_or_truncate(actor_execute_span, RAY_ACTOR_METHOD_KWARGS, kwargs) yield actor_execute_span def _inject_tracing_actor_method(method: Callable[..., Any]) -> Any: - def _traced_method(self: Any, *args: Any, _dd_trace_ctx=None, **kwargs: Any) -> Any: + def _traced_method(self: Any, *args: Any, _dd_ray_trace_ctx=None, **kwargs: Any) -> Any: from ddtrace import tracer - if _dd_trace_ctx is None and tracer.current_span() is None: + if _dd_ray_trace_ctx is None and tracer.current_span() is None: return method(self, *args, **kwargs) - with _trace_actor_method(self, method, _dd_trace_ctx, *args, **kwargs): + with _trace_actor_method(self, method, _dd_ray_trace_ctx, *args, **kwargs): return method(self, *args, **kwargs) return _traced_method def _inject_tracing_async_actor_method(method: Callable[..., Any]) -> Any: - async def _traced_async_method(self: Any, *args: Any, _dd_trace_ctx=None, **kwargs: Any) -> Any: + async def _traced_async_method(self: Any, *args: Any, _dd_ray_trace_ctx=None, **kwargs: Any) -> Any: from ddtrace import tracer - if _dd_trace_ctx is None and tracer.current_span() is None: + if _dd_ray_trace_ctx is None and tracer.current_span() is None: return await method(self, *args, **kwargs) - with _trace_actor_method(self, method, _dd_trace_ctx, *args, **kwargs): + with _trace_actor_method(self, method, _dd_ray_trace_ctx, *args, **kwargs): return await method(self, *args, **kwargs) return _traced_async_method @@ -358,7 +409,7 @@ def inject_tracing_into_actor_class(wrapped, instance, args, kwargs): class_name = str(cls.__name__) # Skip tracing for certain ray modules - if module_name.startswith("ray.dag") or module_name.startswith("ray.experimental"): + if any(module_name.startswith(denied_module) for denied_module in RAY_MODULE_DENYLIST): return cls # Determine if the class is a JobSupervisor @@ -378,6 +429,7 @@ def inject_tracing_into_actor_class(wrapped, instance, args, kwargs): or inspect.isasyncgenfunction(method) or name == "__del__" ): + log.debug("Skipping method %s.%s (unsupported method type)", class_name, name) continue method.__signature__ = _inject_dd_trace_ctx_kwarg(method) @@ -400,7 +452,7 @@ def inject_tracing_into_actor_class(wrapped, instance, args, kwargs): async def traced_end_job(wrapped, instance, args, kwargs): result = await wrapped(*args, **kwargs) - job_id = args[0] + job_id = get_argument_value(args, kwargs, 0, "job_id") job_info = await instance._job_info_client.get_info(job_id) stop_long_running_job(job_id, job_info) diff --git a/ddtrace/contrib/internal/ray/span_manager.py b/ddtrace/contrib/internal/ray/span_manager.py index ddd09791368..446354e43a3 100644 --- a/ddtrace/contrib/internal/ray/span_manager.py +++ b/ddtrace/contrib/internal/ray/span_manager.py @@ -10,14 +10,24 @@ from ddtrace.constants import SPAN_KIND from ddtrace.ext import SpanKind +from .constants import DD_PARTIAL_VERSION +from .constants import DD_WAS_LONG_RUNNING +from .constants import ERROR_MESSAGE +from .constants import RAY_COMPONENT +from .constants import RAY_JOB_MESSAGE +from .constants import RAY_JOB_STATUS +from .constants import RAY_STATUS_FAILED +from .constants import RAY_STATUS_FINISHED +from .constants import RAY_STATUS_RUNNING +from .constants import RAY_SUBMISSION_ID_TAG from .utils import _inject_ray_span_tags_and_metrics @contextmanager -def long_running_ray_span(span_name, service, span_type, child_of=None, activate=True): +def long_running_ray_span(span_name, service, span_type, resource=None, child_of=None, activate=True): """Context manager that handles Ray span creation and long-running span lifecycle""" with tracer.start_span( - name=span_name, service=service, span_type=span_type, child_of=child_of, activate=activate + name=span_name, service=service, resource=resource, span_type=span_type, child_of=child_of, activate=activate ) as span: span.set_tag_str(SPAN_KIND, SpanKind.CONSUMER) _inject_ray_span_tags_and_metrics(span) @@ -26,8 +36,7 @@ def long_running_ray_span(span_name, service, span_type, child_of=None, activate try: yield span except BaseException as e: - span.set_exc_info(type(e), e, e.__traceback__) - raise + raise e finally: stop_long_running_span(span) @@ -46,8 +55,7 @@ def __init__(self): atexit.register(self.cleanup_on_exit) def _get_submission_id(self, span): - submission_id = span.get_tag("ray.submission_id") - return submission_id if submission_id else None + return span.get_tag(RAY_SUBMISSION_ID_TAG) def cleanup_on_exit(self): """Clean up all resources when the process exits.""" @@ -71,13 +79,13 @@ def cleanup_on_exit(self): def _emit_partial_span(self, span): partial_version = time.time_ns() - if span.get_metric("_dd.partial_version") is None: - span.set_metric("_dd.partial_version", partial_version) - span.set_tag_str("ray.job.status", "RUNNING") + if span.get_metric(DD_PARTIAL_VERSION) is None: + span.set_metric(DD_PARTIAL_VERSION, partial_version) + span.set_tag_str(RAY_JOB_STATUS, RAY_STATUS_RUNNING) partial_span = self._recreate_job_span(span) - partial_span.set_tag_str("ray.job.status", "RUNNING") - partial_span.set_metric("_dd.partial_version", partial_version) + partial_span.set_tag_str(RAY_JOB_STATUS, RAY_STATUS_RUNNING) + partial_span.set_metric(DD_PARTIAL_VERSION, partial_version) partial_span.finish() # Sending spans which are waiting for long running spans to finish @@ -135,7 +143,7 @@ def _recreate_job_span(self, job_span): parent_id=job_span.parent_id, context=job_span.context, ) - new_span.set_tag_str("component", "ray") + new_span.set_tag_str("component", RAY_COMPONENT) new_span.start_ns = job_span.start_ns new_span._meta = job_span._meta.copy() new_span._metrics = job_span._metrics.copy() @@ -149,7 +157,7 @@ def _resubmit_long_running_spans(self, submission_id): with self._lock: if submission_id not in self._job_spans: return - self._create_resubmit_timer(submission_id, float(config.ray.resubmit_interval)) + self._create_resubmit_timer(submission_id, float(config._long_running_span_submission_interval)) job_spans = list(self._job_spans[submission_id].values()) for span in job_spans: @@ -157,19 +165,19 @@ def _resubmit_long_running_spans(self, submission_id): def _finish_span(self, span, job_info=None): # only if span was long running - if span.get_metric("_dd.partial_version") is not None: - del span._metrics["_dd.partial_version"] + if span.get_metric(DD_PARTIAL_VERSION) is not None: + del span._metrics[DD_PARTIAL_VERSION] - span.set_metric("_dd.was_long_running", 1) - span.set_tag_str("ray.job.status", "FINISHED") + span.set_metric(DD_WAS_LONG_RUNNING, 1) + span.set_tag_str(RAY_JOB_STATUS, RAY_STATUS_FINISHED) if job_info: - span.set_tag_str("ray.job.status", job_info.status) - span.set_tag_str("ray.job.message", job_info.message) + span.set_tag_str(RAY_JOB_STATUS, job_info.status) + span.set_tag_str(RAY_JOB_MESSAGE, job_info.message) - if str(job_info.status) == "FAILED": + if str(job_info.status) == RAY_STATUS_FAILED: span.error = 1 - span.set_tag_str("error.message", job_info.message) + span.set_tag_str(ERROR_MESSAGE, job_info.message) span.finish() def add_span(self, span): diff --git a/ddtrace/contrib/internal/ray/utils.py b/ddtrace/contrib/internal/ray/utils.py index 935a9f6460a..3958d8acec0 100644 --- a/ddtrace/contrib/internal/ray/utils.py +++ b/ddtrace/contrib/internal/ray/utils.py @@ -3,6 +3,7 @@ from inspect import Signature import os import re +import socket import sys from typing import Any from typing import Callable @@ -18,14 +19,17 @@ from ddtrace.constants import _SPAN_MEASURED_KEY from ddtrace.propagation.http import _TraceContext -from .constants import DD_TRACE_CTX +from .constants import DD_RAY_TRACE_CTX from .constants import RAY_ACTOR_ID +from .constants import RAY_COMPONENT +from .constants import RAY_HOSTNAME from .constants import RAY_JOB_ID from .constants import RAY_NODE_ID from .constants import RAY_SUBMISSION_ID from .constants import RAY_SUBMISSION_ID_TAG from .constants import RAY_TASK_ID from .constants import RAY_WORKER_ID +from .constants import REDACTED_VALUE # The job name regex serves to convert a submission ID in the format job:train_my_model,run:1758573287 @@ -39,10 +43,10 @@ def _inject_dd_trace_ctx_kwarg(method: Callable) -> Signature: old_sig = inspect.signature(method) - if DD_TRACE_CTX in old_sig.parameters: + if DD_RAY_TRACE_CTX in old_sig.parameters: return old_sig - new_param = Parameter(DD_TRACE_CTX, Parameter.KEYWORD_ONLY, default=None) + new_param = Parameter(DD_RAY_TRACE_CTX, Parameter.KEYWORD_ONLY, default=None) params_list = list(old_sig.parameters.values()) + [new_param] sorted_params = sorted(params_list, key=lambda p: p.kind == Parameter.VAR_KEYWORD) return old_sig.replace(parameters=sorted_params) @@ -53,7 +57,7 @@ def _inject_context_in_kwargs(context, kwargs): _TraceContext._inject(context, headers) if "kwargs" not in kwargs or kwargs["kwargs"] is None: kwargs["kwargs"] = {} - kwargs["kwargs"][DD_TRACE_CTX] = headers + kwargs["kwargs"][DD_RAY_TRACE_CTX] = headers def _inject_context_in_env(context): @@ -75,7 +79,8 @@ def _extract_tracing_context_from_env(): def _inject_ray_span_tags_and_metrics(span): - span.set_tag_str("component", "ray") + span.set_tag_str("component", RAY_COMPONENT) + span.set_tag_str(RAY_HOSTNAME, socket.gethostname()) span.set_metric(_DJM_ENABLED_KEY, 1) span.set_metric(_FILTER_KEPT_KEY, 1) span.set_metric(_SPAN_MEASURED_KEY, 1) @@ -105,17 +110,39 @@ def _inject_ray_span_tags_and_metrics(span): span.set_tag_str(RAY_ACTOR_ID, actor_id) -def set_maybe_big_tag(span, tag_name, tag_value): +def set_tag_or_truncate(span, tag_name, tag_value): """We want to add args/kwargs values as tag when we execute a task/actor method. However they might be really big. In that case we dont way to serialize them AT ALL and we do not want to rely on _encoding.pyx. """ if sys.getsizeof(tag_value) > MAX_SPAN_META_VALUE_LEN: - span.set_tag(tag_name, "") + span.set_tag(tag_name, REDACTED_VALUE) else: span.set_tag(tag_name, tag_value) +def get_dd_job_name_from_submission_id(submission_id: str): + """ + Get the job name from the submission id. + If the submission id is set but not in a job:test,run:3 format, return the default job name. + If the submission id is not set, return None. + """ + match = JOB_NAME_REGEX.match(submission_id) + if match: + return match.group(1) + return None + + +def get_dd_job_name_from_entrypoint(entrypoint: str): + """ + Get the job name from the entrypoint. + """ + match = ENTRY_POINT_REGEX.search(entrypoint) + if match: + return match.group(1) + return None + + # ------------------------------------------------------------------------------------------- # This is extracted from ray code # it allows to ensure compatibility with older versions of ray still maintained (2.46.0) @@ -195,25 +222,3 @@ def check_cython(x): # Check if function or method, respectively return check_cython(obj) or (hasattr(obj, "__func__") and check_cython(obj.__func__)) - - -def get_dd_job_name_from_submission_id(submission_id: str): - """ - Get the job name from the submission id. - If the submission id is set but not in a job:test,run:3 format, return the default job name. - If the submission id is not set, return None. - """ - match = JOB_NAME_REGEX.match(submission_id) - if match: - return match.group(1) - return None - - -def get_dd_job_name_from_entrypoint(entrypoint: str): - """ - Get the job name from the entrypoint. - """ - match = ENTRY_POINT_REGEX.search(entrypoint) - if match: - return match.group(1) - return None diff --git a/ddtrace/contrib/ray.py b/ddtrace/contrib/ray.py index 05b5cc98023..105321b9196 100644 --- a/ddtrace/contrib/ray.py +++ b/ddtrace/contrib/ray.py @@ -1,18 +1,16 @@ import logging -import os from ray.util.tracing import tracing_helper from ray.util.tracing.tracing_helper import _is_tracing_enabled -from ddtrace import patch -import ddtrace.auto # noqa:F401 - log = logging.getLogger(__name__) def setup_tracing(): - os.environ["DD_TRACE_REPORT_HOSTNAME"] = "True" + from ddtrace import patch + import ddtrace.auto # noqa:F401 + patch(ray=True) if _is_tracing_enabled(): diff --git a/ddtrace/settings/_config.py b/ddtrace/settings/_config.py index 7146fc6cc86..97cee1e1789 100644 --- a/ddtrace/settings/_config.py +++ b/ddtrace/settings/_config.py @@ -670,6 +670,12 @@ def __init__(self): "DD_TRACE_RESOURCE_RENAMING_ALWAYS_SIMPLIFIED_ENDPOINT", default=False, modifier=asbool ) + # Long-running span submission interval (generic configuration) + # Only supported for Ray spans for now + self._long_running_span_submission_interval = _get_config( + "DD_TRACE_LONG_RUNNING_SPAN_SUBMISSION_INTERVAL", default=120.0, modifier=float + ) + def __getattr__(self, name) -> Any: if name in self._config: return self._config[name].value() diff --git a/tests/contrib/ray/test_long_running_span.py b/tests/contrib/ray/test_long_running_span.py index fe1ffa88158..3646e2a4195 100644 --- a/tests/contrib/ray/test_long_running_span.py +++ b/tests/contrib/ray/test_long_running_span.py @@ -13,11 +13,13 @@ class TestLongRunningSpan(TracerTestCase): def setUp(self): super().setUp() # Override timing values to make tests run quickly - self.original_resubmit_interval = getattr(config.ray, "resubmit_interval", 120.0) + self.original_long_running_span_submission_interval = getattr( + config, "_long_running_span_submission_interval", 120.0 + ) self.original_initial_submit_threshold = getattr(config.ray, "initial_submit_threshold", 10.0) # Set fast timing for testing - config.ray.resubmit_interval = 2 # 2s instead of 120s + config._long_running_span_submission_interval = 2.0 # 2s instead of 120s config.ray.initial_submit_threshold = 1 # 1s instead of 10s # Clear any existing spans from the job manager @@ -28,7 +30,7 @@ def setUp(self): def tearDown(self): # Restore original values - config.ray.resubmit_interval = self.original_resubmit_interval + config._long_running_span_submission_interval = self.original_long_running_span_submission_interval config.ray.initial_submit_threshold = self.original_initial_submit_threshold # Clean up any remaining timers diff --git a/tests/contrib/ray/test_ray.py b/tests/contrib/ray/test_ray.py index 97c872ec2ac..b8fe1a0f831 100644 --- a/tests/contrib/ray/test_ray.py +++ b/tests/contrib/ray/test_ray.py @@ -13,6 +13,7 @@ "meta.ray.actor_id", "meta.ray.task_id", "meta.ray.submission_id", + "meta.ray.hostname", "meta.ray.pid", "meta.tracestate", "meta.traceparent", diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_actor_and_task.json b/tests/snapshots/tests.contrib.ray.test_ray.test_actor_and_task.json index 6f807b85bd9..a19cc44ea7e 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_actor_and_task.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_actor_and_task.json @@ -1,8 +1,8 @@ [[ { - "name": "tests.contrib.ray.test_ray.compute_value.remote()", + "name": "task.submit", "service": "tests.contrib.ray", - "resource": "tests.contrib.ray.test_ray.compute_value.remote()", + "resource": "tests.contrib.ray.test_ray.compute_value.remote", "trace_id": 0, "span_id": 1, "parent_id": 0, @@ -11,16 +11,17 @@ "meta": { "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68d562a500000000", + "_dd.p.tid": "68d57eee00000000", "component": "ray", "language": "python", + "ray.hostname": "docker-desktop", "ray.job_id": "01000000", - "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.node_id": "5d8e28ce24c45f5ea6c436328166b1b8b188f18a32fca9feb10956d1", "ray.task.args": "(3,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", + "runtime-id": "8def9fd563244a47b1509fd9b8463d04", "span.kind": "producer" }, "metrics": { @@ -32,11 +33,11 @@ "_sampling_priority_v1": 2, "process_id": 543 }, - "duration": 438583, - "start": 1758814885198426050 + "duration": 517000, + "start": 1758822126929180555 }, { - "name": "tests.contrib.ray.test_ray.TestRayIntegration.test_actor_and_task..compute_value", + "name": "task.execute", "service": "tests.contrib.ray", "resource": "tests.contrib.ray.test_ray.TestRayIntegration.test_actor_and_task..compute_value", "trace_id": 0, @@ -46,13 +47,14 @@ "error": 0, "meta": { "component": "ray", + "ray.hostname": "docker-desktop", "ray.job_id": "01000000", - "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.node_id": "5d8e28ce24c45f5ea6c436328166b1b8b188f18a32fca9feb10956d1", "ray.task.args": "(3,)", "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", + "runtime-id": "8def9fd563244a47b1509fd9b8463d04", "span.kind": "consumer" }, "metrics": { @@ -63,14 +65,14 @@ "_sampling_priority_v1": 2, "process_id": 543 }, - "duration": 51458, - "start": 1758814885198751050 + "duration": 68583, + "start": 1758822126929559180 }], [ { - "name": "tests.contrib.ray.test_ray.compute_value.remote()", + "name": "task.submit", "service": "tests.contrib.ray", - "resource": "tests.contrib.ray.test_ray.compute_value.remote()", + "resource": "tests.contrib.ray.test_ray.compute_value.remote", "trace_id": 1, "span_id": 1, "parent_id": 0, @@ -79,16 +81,17 @@ "meta": { "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68d562a500000000", + "_dd.p.tid": "68d57eee00000000", "component": "ray", "language": "python", + "ray.hostname": "docker-desktop", "ray.job_id": "01000000", - "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.node_id": "5d8e28ce24c45f5ea6c436328166b1b8b188f18a32fca9feb10956d1", "ray.task.args": "(4,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", + "runtime-id": "8def9fd563244a47b1509fd9b8463d04", "span.kind": "producer" }, "metrics": { @@ -100,11 +103,11 @@ "_sampling_priority_v1": 2, "process_id": 543 }, - "duration": 388333, - "start": 1758814885199183592 + "duration": 575000, + "start": 1758822126930091013 }, { - "name": "tests.contrib.ray.test_ray.TestRayIntegration.test_actor_and_task..compute_value", + "name": "task.execute", "service": "tests.contrib.ray", "resource": "tests.contrib.ray.test_ray.TestRayIntegration.test_actor_and_task..compute_value", "trace_id": 1, @@ -114,13 +117,14 @@ "error": 0, "meta": { "component": "ray", + "ray.hostname": "docker-desktop", "ray.job_id": "01000000", - "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.node_id": "5d8e28ce24c45f5ea6c436328166b1b8b188f18a32fca9feb10956d1", "ray.task.args": "(4,)", "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", + "runtime-id": "8def9fd563244a47b1509fd9b8463d04", "span.kind": "consumer" }, "metrics": { @@ -131,14 +135,14 @@ "_sampling_priority_v1": 2, "process_id": 543 }, - "duration": 49459, - "start": 1758814885199462758 + "duration": 64292, + "start": 1758822126930514096 }], [ { - "name": "TestRayIntegration.test_actor_and_task..ComputationManager.compute_and_store.remote()", + "name": "actor_method.submit", "service": "tests.contrib.ray", - "resource": "TestRayIntegration.test_actor_and_task..ComputationManager.compute_and_store.remote()", + "resource": "TestRayIntegration.test_actor_and_task..ComputationManager.compute_and_store.remote", "trace_id": 2, "span_id": 1, "parent_id": 0, @@ -147,15 +151,16 @@ "meta": { "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68d562a500000000", + "_dd.p.tid": "68d57eee00000000", "component": "ray", "language": "python", "ray.actor_method.args": "([2, 3, 4],)", "ray.actor_method.kwargs": "{}", + "ray.hostname": "docker-desktop", "ray.job_id": "01000000", - "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.node_id": "5d8e28ce24c45f5ea6c436328166b1b8b188f18a32fca9feb10956d1", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", + "runtime-id": "8def9fd563244a47b1509fd9b8463d04", "span.kind": "producer" }, "metrics": { @@ -167,11 +172,11 @@ "_sampling_priority_v1": 2, "process_id": 543 }, - "duration": 7708750, - "start": 1758814885192457050 + "duration": 8345958, + "start": 1758822126922859138 }, { - "name": "ComputationManager.compute_and_store", + "name": "actor_method.execute", "service": "tests.contrib.ray", "resource": "ComputationManager.compute_and_store", "trace_id": 2, @@ -183,8 +188,9 @@ "component": "ray", "ray.actor_method.args": "([2, 3, 4],)", "ray.actor_method.kwargs": "{}", + "ray.hostname": "docker-desktop", "ray.job_id": "01000000", - "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.node_id": "5d8e28ce24c45f5ea6c436328166b1b8b188f18a32fca9feb10956d1", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "consumer" }, @@ -194,11 +200,11 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 6421958, - "start": 1758814885193516092 + "duration": 7308458, + "start": 1758822126923712013 }, { - "name": "ComputationManager.increment_count", + "name": "actor_method.execute", "service": "tests.contrib.ray", "resource": "ComputationManager.increment_count", "trace_id": 2, @@ -210,8 +216,9 @@ "component": "ray", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", + "ray.hostname": "docker-desktop", "ray.job_id": "01000000", - "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.node_id": "5d8e28ce24c45f5ea6c436328166b1b8b188f18a32fca9feb10956d1", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "consumer" }, @@ -221,13 +228,13 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 101917, - "start": 1758814885193933425 + "duration": 90250, + "start": 1758822126924146513 }, { - "name": "tests.contrib.ray.test_ray.batch_compute.remote()", + "name": "task.submit", "service": "tests.contrib.ray", - "resource": "tests.contrib.ray.test_ray.batch_compute.remote()", + "resource": "tests.contrib.ray.test_ray.batch_compute.remote", "trace_id": 2, "span_id": 4, "parent_id": 2, @@ -235,8 +242,9 @@ "error": 0, "meta": { "component": "ray", + "ray.hostname": "docker-desktop", "ray.job_id": "01000000", - "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.node_id": "5d8e28ce24c45f5ea6c436328166b1b8b188f18a32fca9feb10956d1", "ray.task.args": "([2, 3, 4],)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", @@ -249,11 +257,11 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 5651666, - "start": 1758814885194200842 + "duration": 6533250, + "start": 1758822126924407596 }, { - "name": "tests.contrib.ray.test_ray.TestRayIntegration.test_actor_and_task..batch_compute", + "name": "task.execute", "service": "tests.contrib.ray", "resource": "tests.contrib.ray.test_ray.TestRayIntegration.test_actor_and_task..batch_compute", "trace_id": 2, @@ -263,13 +271,14 @@ "error": 0, "meta": { "component": "ray", + "ray.hostname": "docker-desktop", "ray.job_id": "01000000", - "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.node_id": "5d8e28ce24c45f5ea6c436328166b1b8b188f18a32fca9feb10956d1", "ray.task.args": "([2, 3, 4],)", "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", + "runtime-id": "8def9fd563244a47b1509fd9b8463d04", "span.kind": "consumer" }, "metrics": { @@ -280,13 +289,13 @@ "_sampling_priority_v1": 2, "process_id": 543 }, - "duration": 3361333, - "start": 1758814885196434092 + "duration": 3933833, + "start": 1758822126926945305 }, { - "name": "tests.contrib.ray.test_ray.compute_value.remote()", + "name": "task.submit", "service": "tests.contrib.ray", - "resource": "tests.contrib.ray.test_ray.compute_value.remote()", + "resource": "tests.contrib.ray.test_ray.compute_value.remote", "trace_id": 2, "span_id": 6, "parent_id": 5, @@ -294,8 +303,9 @@ "error": 0, "meta": { "component": "ray", + "ray.hostname": "docker-desktop", "ray.job_id": "01000000", - "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.node_id": "5d8e28ce24c45f5ea6c436328166b1b8b188f18a32fca9feb10956d1", "ray.task.args": "(2,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", @@ -308,11 +318,11 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 1821333, - "start": 1758814885196572925 + "duration": 2041083, + "start": 1758822126927098680 }, { - "name": "tests.contrib.ray.test_ray.TestRayIntegration.test_actor_and_task..compute_value", + "name": "task.execute", "service": "tests.contrib.ray", "resource": "tests.contrib.ray.test_ray.TestRayIntegration.test_actor_and_task..compute_value", "trace_id": 2, @@ -322,13 +332,14 @@ "error": 0, "meta": { "component": "ray", + "ray.hostname": "docker-desktop", "ray.job_id": "01000000", - "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.node_id": "5d8e28ce24c45f5ea6c436328166b1b8b188f18a32fca9feb10956d1", "ray.task.args": "(2,)", "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", + "runtime-id": "8def9fd563244a47b1509fd9b8463d04", "span.kind": "consumer" }, "metrics": { @@ -339,6 +350,6 @@ "_sampling_priority_v1": 2, "process_id": 543 }, - "duration": 59083, - "start": 1758814885198242675 + "duration": 81292, + "start": 1758822126928939471 }]] diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_actor_interactions.json b/tests/snapshots/tests.contrib.ray.test_ray.test_actor_interactions.json index 4db5c8f0b4d..9ff2899a22b 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_actor_interactions.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_actor_interactions.json @@ -1,8 +1,8 @@ [[ { - "name": "tests.contrib.ray.test_ray.run_test.remote()", + "name": "task.submit", "service": "tests.contrib.ray", - "resource": "tests.contrib.ray.test_ray.run_test.remote()", + "resource": "tests.contrib.ray.test_ray.run_test.remote", "trace_id": 0, "span_id": 1, "parent_id": 0, @@ -11,16 +11,17 @@ "meta": { "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68d562a500000000", + "_dd.p.tid": "68d57eee00000000", "component": "ray", "language": "python", + "ray.hostname": "docker-desktop", "ray.job_id": "01000000", - "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.node_id": "5d8e28ce24c45f5ea6c436328166b1b8b188f18a32fca9feb10956d1", "ray.task.args": "()", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", + "runtime-id": "8def9fd563244a47b1509fd9b8463d04", "span.kind": "producer" }, "metrics": { @@ -32,11 +33,11 @@ "_sampling_priority_v1": 2, "process_id": 543 }, - "duration": 31463166, - "start": 1758814885216240217 + "duration": 35965000, + "start": 1758822126950106721 }, { - "name": "tests.contrib.ray.test_ray.TestRayIntegration.test_actor_interactions..run_test", + "name": "task.execute", "service": "tests.contrib.ray", "resource": "tests.contrib.ray.test_ray.TestRayIntegration.test_actor_interactions..run_test", "trace_id": 0, @@ -46,13 +47,14 @@ "error": 0, "meta": { "component": "ray", + "ray.hostname": "docker-desktop", "ray.job_id": "01000000", - "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.node_id": "5d8e28ce24c45f5ea6c436328166b1b8b188f18a32fca9feb10956d1", "ray.task.args": "()", "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", + "runtime-id": "8def9fd563244a47b1509fd9b8463d04", "span.kind": "consumer" }, "metrics": { @@ -63,11 +65,11 @@ "_sampling_priority_v1": 2, "process_id": 543 }, - "duration": 24725375, - "start": 1758814885222684258 + "duration": 26732709, + "start": 1758822126959188596 }, { - "name": "Sender.__init__", + "name": "actor_method.execute", "service": "tests.contrib.ray", "resource": "Sender.__init__", "trace_id": 0, @@ -79,8 +81,9 @@ "component": "ray", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", + "ray.hostname": "docker-desktop", "ray.job_id": "01000000", - "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.node_id": "5d8e28ce24c45f5ea6c436328166b1b8b188f18a32fca9feb10956d1", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "consumer" }, @@ -90,11 +93,11 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 113542, - "start": 1758814885233803800 + "duration": 112250, + "start": 1758822126971669430 }, { - "name": "Receiver.__init__", + "name": "actor_method.execute", "service": "tests.contrib.ray", "resource": "Receiver.__init__", "trace_id": 0, @@ -106,8 +109,9 @@ "component": "ray", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", + "ray.hostname": "docker-desktop", "ray.job_id": "01000000", - "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.node_id": "5d8e28ce24c45f5ea6c436328166b1b8b188f18a32fca9feb10956d1", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "consumer" }, @@ -117,13 +121,13 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 126292, - "start": 1758814885244768050 + "duration": 114041, + "start": 1758822126983304555 }, { - "name": "TestRayIntegration.test_actor_interactions..Sender.send_message.remote()", + "name": "actor_method.submit", "service": "tests.contrib.ray", - "resource": "TestRayIntegration.test_actor_interactions..Sender.send_message.remote()", + "resource": "TestRayIntegration.test_actor_interactions..Sender.send_message.remote", "trace_id": 0, "span_id": 5, "parent_id": 2, @@ -131,10 +135,11 @@ "error": 0, "meta": { "component": "ray", - "ray.actor_method.args": "(Actor(TestRayIntegration.test_actor_interactions..Receiver, d66274d67076036932b9e04901000000), 'hello')", + "ray.actor_method.args": "(Actor(TestRayIntegration.test_actor_interactions..Receiver, 042bcf28a0d7c0e7a03540c401000000), 'hello')", "ray.actor_method.kwargs": "{}", + "ray.hostname": "docker-desktop", "ray.job_id": "01000000", - "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.node_id": "5d8e28ce24c45f5ea6c436328166b1b8b188f18a32fca9feb10956d1", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "producer" }, @@ -144,11 +149,11 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 1344750, - "start": 1758814885245024508 + "duration": 1420458, + "start": 1758822126983544180 }, { - "name": "Sender.send_message", + "name": "actor_method.execute", "service": "tests.contrib.ray", "resource": "Sender.send_message", "trace_id": 0, @@ -158,10 +163,11 @@ "error": 0, "meta": { "component": "ray", - "ray.actor_method.args": "(Actor(TestRayIntegration.test_actor_interactions..Receiver, d66274d67076036932b9e04901000000), 'hello')", + "ray.actor_method.args": "(Actor(TestRayIntegration.test_actor_interactions..Receiver, 042bcf28a0d7c0e7a03540c401000000), 'hello')", "ray.actor_method.kwargs": "{}", + "ray.hostname": "docker-desktop", "ray.job_id": "01000000", - "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.node_id": "5d8e28ce24c45f5ea6c436328166b1b8b188f18a32fca9feb10956d1", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "consumer" }, @@ -171,13 +177,13 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 642083, - "start": 1758814885245649467 + "duration": 658458, + "start": 1758822126984233763 }, { - "name": "TestRayIntegration.test_actor_interactions..Receiver.receive_message.remote()", + "name": "actor_method.submit", "service": "tests.contrib.ray", - "resource": "TestRayIntegration.test_actor_interactions..Receiver.receive_message.remote()", + "resource": "TestRayIntegration.test_actor_interactions..Receiver.receive_message.remote", "trace_id": 0, "span_id": 11, "parent_id": 8, @@ -187,8 +193,9 @@ "component": "ray", "ray.actor_method.args": "('hello',)", "ray.actor_method.kwargs": "{}", + "ray.hostname": "docker-desktop", "ray.job_id": "01000000", - "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.node_id": "5d8e28ce24c45f5ea6c436328166b1b8b188f18a32fca9feb10956d1", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "producer" }, @@ -198,11 +205,11 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 469500, - "start": 1758814885245739592 + "duration": 458875, + "start": 1758822126984333805 }, { - "name": "Receiver.receive_message", + "name": "actor_method.execute", "service": "tests.contrib.ray", "resource": "Receiver.receive_message", "trace_id": 0, @@ -214,8 +221,9 @@ "component": "ray", "ray.actor_method.args": "('hello',)", "ray.actor_method.kwargs": "{}", + "ray.hostname": "docker-desktop", "ray.job_id": "01000000", - "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.node_id": "5d8e28ce24c45f5ea6c436328166b1b8b188f18a32fca9feb10956d1", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "consumer" }, @@ -225,13 +233,13 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 67709, - "start": 1758814885246069133 + "duration": 68542, + "start": 1758822126984642638 }, { - "name": "TestRayIntegration.test_actor_interactions..Sender.get_sent_count.remote()", + "name": "actor_method.submit", "service": "tests.contrib.ray", - "resource": "TestRayIntegration.test_actor_interactions..Sender.get_sent_count.remote()", + "resource": "TestRayIntegration.test_actor_interactions..Sender.get_sent_count.remote", "trace_id": 0, "span_id": 6, "parent_id": 2, @@ -241,8 +249,9 @@ "component": "ray", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", + "ray.hostname": "docker-desktop", "ray.job_id": "01000000", - "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.node_id": "5d8e28ce24c45f5ea6c436328166b1b8b188f18a32fca9feb10956d1", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "producer" }, @@ -252,11 +261,11 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 380417, - "start": 1758814885246449883 + "duration": 336875, + "start": 1758822126985048680 }, { - "name": "Sender.get_sent_count", + "name": "actor_method.execute", "service": "tests.contrib.ray", "resource": "Sender.get_sent_count", "trace_id": 0, @@ -268,8 +277,9 @@ "component": "ray", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", + "ray.hostname": "docker-desktop", "ray.job_id": "01000000", - "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.node_id": "5d8e28ce24c45f5ea6c436328166b1b8b188f18a32fca9feb10956d1", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "consumer" }, @@ -279,13 +289,13 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 69417, - "start": 1758814885246695258 + "duration": 56083, + "start": 1758822126985273013 }, { - "name": "TestRayIntegration.test_actor_interactions..Receiver.get_messages.remote()", + "name": "actor_method.submit", "service": "tests.contrib.ray", - "resource": "TestRayIntegration.test_actor_interactions..Receiver.get_messages.remote()", + "resource": "TestRayIntegration.test_actor_interactions..Receiver.get_messages.remote", "trace_id": 0, "span_id": 7, "parent_id": 2, @@ -295,8 +305,9 @@ "component": "ray", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", + "ray.hostname": "docker-desktop", "ray.job_id": "01000000", - "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.node_id": "5d8e28ce24c45f5ea6c436328166b1b8b188f18a32fca9feb10956d1", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "producer" }, @@ -306,11 +317,11 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 339625, - "start": 1758814885246903967 + "duration": 337375, + "start": 1758822126985458680 }, { - "name": "Receiver.get_messages", + "name": "actor_method.execute", "service": "tests.contrib.ray", "resource": "Receiver.get_messages", "trace_id": 0, @@ -322,8 +333,9 @@ "component": "ray", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", + "ray.hostname": "docker-desktop", "ray.job_id": "01000000", - "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.node_id": "5d8e28ce24c45f5ea6c436328166b1b8b188f18a32fca9feb10956d1", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "consumer" }, @@ -333,6 +345,6 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 60000, - "start": 1758814885247123092 + "duration": 58458, + "start": 1758822126985681888 }]] diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_nested_tasks.json b/tests/snapshots/tests.contrib.ray.test_ray.test_nested_tasks.json index 73f9521f57f..b1676037190 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_nested_tasks.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_nested_tasks.json @@ -1,8 +1,8 @@ [[ { - "name": "tests.contrib.ray.test_ray.submit_addition_task.remote()", + "name": "task.submit", "service": "tests.contrib.ray", - "resource": "tests.contrib.ray.test_ray.submit_addition_task.remote()", + "resource": "tests.contrib.ray.test_ray.submit_addition_task.remote", "trace_id": 0, "span_id": 1, "parent_id": 0, @@ -11,16 +11,17 @@ "meta": { "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68d562a500000000", + "_dd.p.tid": "68d57eee00000000", "component": "ray", "language": "python", + "ray.hostname": "docker-desktop", "ray.job_id": "01000000", - "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.node_id": "5d8e28ce24c45f5ea6c436328166b1b8b188f18a32fca9feb10956d1", "ray.task.args": "(2,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", + "runtime-id": "8def9fd563244a47b1509fd9b8463d04", "span.kind": "producer" }, "metrics": { @@ -32,11 +33,11 @@ "_sampling_priority_v1": 2, "process_id": 543 }, - "duration": 6561500, - "start": 1758814885257526592 + "duration": 7100916, + "start": 1758822126998289555 }, { - "name": "tests.contrib.ray.test_ray.TestRayIntegration.test_nested_tasks..submit_addition_task", + "name": "task.execute", "service": "tests.contrib.ray", "resource": "tests.contrib.ray.test_ray.TestRayIntegration.test_nested_tasks..submit_addition_task", "trace_id": 0, @@ -46,13 +47,14 @@ "error": 0, "meta": { "component": "ray", + "ray.hostname": "docker-desktop", "ray.job_id": "01000000", - "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.node_id": "5d8e28ce24c45f5ea6c436328166b1b8b188f18a32fca9feb10956d1", "ray.task.args": "(2,)", "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", + "runtime-id": "8def9fd563244a47b1509fd9b8463d04", "span.kind": "consumer" }, "metrics": { @@ -63,13 +65,13 @@ "_sampling_priority_v1": 2, "process_id": 543 }, - "duration": 3267583, - "start": 1758814885260542175 + "duration": 3282333, + "start": 1758822127001912888 }, { - "name": "tests.contrib.ray.test_ray.add_one.remote()", + "name": "task.submit", "service": "tests.contrib.ray", - "resource": "tests.contrib.ray.test_ray.add_one.remote()", + "resource": "tests.contrib.ray.test_ray.add_one.remote", "trace_id": 0, "span_id": 3, "parent_id": 2, @@ -77,8 +79,9 @@ "error": 0, "meta": { "component": "ray", + "ray.hostname": "docker-desktop", "ray.job_id": "01000000", - "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.node_id": "5d8e28ce24c45f5ea6c436328166b1b8b188f18a32fca9feb10956d1", "ray.task.args": "(3,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", @@ -91,11 +94,11 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 2700459, - "start": 1758814885260879258 + "duration": 2706792, + "start": 1758822127002392013 }, { - "name": "tests.contrib.ray.test_ray.TestRayIntegration.test_nested_tasks..add_one", + "name": "task.execute", "service": "tests.contrib.ray", "resource": "tests.contrib.ray.test_ray.TestRayIntegration.test_nested_tasks..add_one", "trace_id": 0, @@ -105,13 +108,14 @@ "error": 0, "meta": { "component": "ray", + "ray.hostname": "docker-desktop", "ray.job_id": "01000000", - "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.node_id": "5d8e28ce24c45f5ea6c436328166b1b8b188f18a32fca9feb10956d1", "ray.task.args": "(3,)", "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", + "runtime-id": "8def9fd563244a47b1509fd9b8463d04", "span.kind": "consumer" }, "metrics": { @@ -122,6 +126,6 @@ "_sampling_priority_v1": 2, "process_id": 543 }, - "duration": 81500, - "start": 1758814885263345883 + "duration": 114625, + "start": 1758822127004869263 }]] diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_actor.json b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_actor.json index b7861da970c..6018934d686 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_actor.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_actor.json @@ -1,8 +1,8 @@ [[ { - "name": "TestRayIntegration.test_simple_actor..Counter.increment_get_and_double.remote()", + "name": "actor_method.submit", "service": "tests.contrib.ray", - "resource": "TestRayIntegration.test_simple_actor..Counter.increment_get_and_double.remote()", + "resource": "TestRayIntegration.test_simple_actor..Counter.increment_get_and_double.remote", "trace_id": 0, "span_id": 1, "parent_id": 0, @@ -11,15 +11,16 @@ "meta": { "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68d562a500000000", + "_dd.p.tid": "68d57eef00000000", "component": "ray", "language": "python", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", + "ray.hostname": "docker-desktop", "ray.job_id": "01000000", - "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.node_id": "5d8e28ce24c45f5ea6c436328166b1b8b188f18a32fca9feb10956d1", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", + "runtime-id": "8def9fd563244a47b1509fd9b8463d04", "span.kind": "producer" }, "metrics": { @@ -31,11 +32,11 @@ "_sampling_priority_v1": 2, "process_id": 543 }, - "duration": 1185625, - "start": 1758814885290737383 + "duration": 1234291, + "start": 1758822127031092930 }, { - "name": "Counter.increment_get_and_double", + "name": "actor_method.execute", "service": "tests.contrib.ray", "resource": "Counter.increment_get_and_double", "trace_id": 0, @@ -47,8 +48,9 @@ "component": "ray", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", + "ray.hostname": "docker-desktop", "ray.job_id": "01000000", - "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.node_id": "5d8e28ce24c45f5ea6c436328166b1b8b188f18a32fca9feb10956d1", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "consumer" }, @@ -58,11 +60,11 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 572167, - "start": 1758814885291250425 + "duration": 590708, + "start": 1758822127031550138 }, { - "name": "Counter.increment_and_get", + "name": "actor_method.execute", "service": "tests.contrib.ray", "resource": "Counter.increment_and_get", "trace_id": 0, @@ -74,8 +76,9 @@ "component": "ray", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", + "ray.hostname": "docker-desktop", "ray.job_id": "01000000", - "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.node_id": "5d8e28ce24c45f5ea6c436328166b1b8b188f18a32fca9feb10956d1", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "consumer" }, @@ -85,11 +88,11 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 271166, - "start": 1758814885291533092 + "duration": 257667, + "start": 1758822127031863638 }, { - "name": "Counter.increment", + "name": "actor_method.execute", "service": "tests.contrib.ray", "resource": "Counter.increment", "trace_id": 0, @@ -101,8 +104,9 @@ "component": "ray", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", + "ray.hostname": "docker-desktop", "ray.job_id": "01000000", - "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.node_id": "5d8e28ce24c45f5ea6c436328166b1b8b188f18a32fca9feb10956d1", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "consumer" }, @@ -112,11 +116,11 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 68500, - "start": 1758814885291619508 + "duration": 55583, + "start": 1758822127031955305 }, { - "name": "Counter.get_value", + "name": "actor_method.execute", "service": "tests.contrib.ray", "resource": "Counter.get_value", "trace_id": 0, @@ -128,8 +132,9 @@ "component": "ray", "ray.actor_method.args": "()", "ray.actor_method.kwargs": "{}", + "ray.hostname": "docker-desktop", "ray.job_id": "01000000", - "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.node_id": "5d8e28ce24c45f5ea6c436328166b1b8b188f18a32fca9feb10956d1", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", "span.kind": "consumer" }, @@ -139,6 +144,6 @@ "_dd.measured": 1, "_sampling_priority_v1": 2 }, - "duration": 47917, - "start": 1758814885291733800 + "duration": 49958, + "start": 1758822127032048930 }]] diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_task.json b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_task.json index a2a08bcf98d..3ec2a1458b4 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_task.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_task.json @@ -1,8 +1,8 @@ [[ { - "name": "tests.contrib.ray.test_ray.add_one.remote()", + "name": "task.submit", "service": "tests.contrib.ray", - "resource": "tests.contrib.ray.test_ray.add_one.remote()", + "resource": "tests.contrib.ray.test_ray.add_one.remote", "trace_id": 0, "span_id": 1, "parent_id": 0, @@ -11,16 +11,17 @@ "meta": { "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68d562a500000000", + "_dd.p.tid": "68d57eef00000000", "component": "ray", "language": "python", + "ray.hostname": "docker-desktop", "ray.job_id": "01000000", - "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.node_id": "5d8e28ce24c45f5ea6c436328166b1b8b188f18a32fca9feb10956d1", "ray.task.args": "(0,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", + "runtime-id": "8def9fd563244a47b1509fd9b8463d04", "span.kind": "producer" }, "metrics": { @@ -32,11 +33,11 @@ "_sampling_priority_v1": 2, "process_id": 543 }, - "duration": 2364917, - "start": 1758814885305291383 + "duration": 2589917, + "start": 1758822127042398888 }, { - "name": "tests.contrib.ray.test_ray.TestRayIntegration.test_simple_task..add_one", + "name": "task.execute", "service": "tests.contrib.ray", "resource": "tests.contrib.ray.test_ray.TestRayIntegration.test_simple_task..add_one", "trace_id": 0, @@ -46,13 +47,14 @@ "error": 0, "meta": { "component": "ray", + "ray.hostname": "docker-desktop", "ray.job_id": "01000000", - "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.node_id": "5d8e28ce24c45f5ea6c436328166b1b8b188f18a32fca9feb10956d1", "ray.task.args": "(0,)", "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", + "runtime-id": "8def9fd563244a47b1509fd9b8463d04", "span.kind": "consumer" }, "metrics": { @@ -63,14 +65,14 @@ "_sampling_priority_v1": 2, "process_id": 543 }, - "duration": 215625, - "start": 1758814885307286842 + "duration": 233000, + "start": 1758822127044554013 }], [ { - "name": "tests.contrib.ray.test_ray.add_one.remote()", + "name": "task.submit", "service": "tests.contrib.ray", - "resource": "tests.contrib.ray.test_ray.add_one.remote()", + "resource": "tests.contrib.ray.test_ray.add_one.remote", "trace_id": 1, "span_id": 1, "parent_id": 0, @@ -79,16 +81,17 @@ "meta": { "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68d562a500000000", + "_dd.p.tid": "68d57eef00000000", "component": "ray", "language": "python", + "ray.hostname": "docker-desktop", "ray.job_id": "01000000", - "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.node_id": "5d8e28ce24c45f5ea6c436328166b1b8b188f18a32fca9feb10956d1", "ray.task.args": "(1,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", + "runtime-id": "8def9fd563244a47b1509fd9b8463d04", "span.kind": "producer" }, "metrics": { @@ -100,11 +103,11 @@ "_sampling_priority_v1": 2, "process_id": 543 }, - "duration": 652917, - "start": 1758814885307780508 + "duration": 771625, + "start": 1758822127045120388 }, { - "name": "tests.contrib.ray.test_ray.TestRayIntegration.test_simple_task..add_one", + "name": "task.execute", "service": "tests.contrib.ray", "resource": "tests.contrib.ray.test_ray.TestRayIntegration.test_simple_task..add_one", "trace_id": 1, @@ -114,13 +117,14 @@ "error": 0, "meta": { "component": "ray", + "ray.hostname": "docker-desktop", "ray.job_id": "01000000", - "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.node_id": "5d8e28ce24c45f5ea6c436328166b1b8b188f18a32fca9feb10956d1", "ray.task.args": "(1,)", "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", + "runtime-id": "8def9fd563244a47b1509fd9b8463d04", "span.kind": "consumer" }, "metrics": { @@ -131,6 +135,6 @@ "_sampling_priority_v1": 2, "process_id": 543 }, - "duration": 182708, - "start": 1758814885308115175 + "duration": 220041, + "start": 1758822127045517097 }]] diff --git a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_wait.json b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_wait.json index 3e373e5d5c7..ae8fd222a2a 100644 --- a/tests/snapshots/tests.contrib.ray.test_ray.test_simple_wait.json +++ b/tests/snapshots/tests.contrib.ray.test_ray.test_simple_wait.json @@ -1,8 +1,8 @@ [[ { - "name": "tests.contrib.ray.test_ray.add_one.remote()", + "name": "task.submit", "service": "tests.contrib.ray", - "resource": "tests.contrib.ray.test_ray.add_one.remote()", + "resource": "tests.contrib.ray.test_ray.add_one.remote", "trace_id": 0, "span_id": 1, "parent_id": 0, @@ -11,16 +11,17 @@ "meta": { "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68d562a500000000", + "_dd.p.tid": "68d57eef00000000", "component": "ray", "language": "python", + "ray.hostname": "docker-desktop", "ray.job_id": "01000000", - "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.node_id": "5d8e28ce24c45f5ea6c436328166b1b8b188f18a32fca9feb10956d1", "ray.task.args": "(42,)", "ray.task.kwargs": "{}", "ray.task.submit_status": "success", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", + "runtime-id": "8def9fd563244a47b1509fd9b8463d04", "span.kind": "producer" }, "metrics": { @@ -32,11 +33,11 @@ "_sampling_priority_v1": 2, "process_id": 543 }, - "duration": 2655500, - "start": 1758814885319518217 + "duration": 2676958, + "start": 1758822127055921805 }, { - "name": "tests.contrib.ray.test_ray.TestRayIntegration.test_simple_wait..add_one", + "name": "task.execute", "service": "tests.contrib.ray", "resource": "tests.contrib.ray.test_ray.TestRayIntegration.test_simple_wait..add_one", "trace_id": 0, @@ -46,13 +47,14 @@ "error": 0, "meta": { "component": "ray", + "ray.hostname": "docker-desktop", "ray.job_id": "01000000", - "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.node_id": "5d8e28ce24c45f5ea6c436328166b1b8b188f18a32fca9feb10956d1", "ray.task.args": "(42,)", "ray.task.kwargs": "{}", "ray.task.status": "success", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", + "runtime-id": "8def9fd563244a47b1509fd9b8463d04", "span.kind": "consumer" }, "metrics": { @@ -63,8 +65,8 @@ "_sampling_priority_v1": 2, "process_id": 543 }, - "duration": 241042, - "start": 1758814885321713758 + "duration": 300458, + "start": 1758822127058126972 }], [ { @@ -79,15 +81,16 @@ "meta": { "_dd.hostname": "docker-desktop", "_dd.p.dm": "-0", - "_dd.p.tid": "68d562a500000000", + "_dd.p.tid": "68d57eef00000000", "component": "ray", "language": "python", + "ray.hostname": "docker-desktop", "ray.job_id": "01000000", - "ray.node_id": "7f3bf1e6eb42bb45e347a3b6e6aecd3df114ed6e1f0ef197bc04654c", + "ray.node_id": "5d8e28ce24c45f5ea6c436328166b1b8b188f18a32fca9feb10956d1", "ray.wait.num_returns": "1", "ray.wait.timeout_s": "60", "ray.worker_id": "01000000ffffffffffffffffffffffffffffffffffffffffffffffff", - "runtime-id": "297ce76b248d4f9dbd3f1056958e0139", + "runtime-id": "8def9fd563244a47b1509fd9b8463d04", "span.kind": "producer" }, "metrics": { @@ -99,6 +102,6 @@ "_sampling_priority_v1": 2, "process_id": 543 }, - "duration": 317041, - "start": 1758814885322329217 + "duration": 307375, + "start": 1758822127058761805 }]] From 768541886a935d7b34b0109c81c9fc90e6a1b9a5 Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Thu, 25 Sep 2025 19:55:06 +0200 Subject: [PATCH 37/59] riot fix --- .riot/requirements/1711b0d.txt | 70 ------------------------------- .riot/requirements/17721fd.txt | 77 ---------------------------------- 2 files changed, 147 deletions(-) delete mode 100644 .riot/requirements/1711b0d.txt delete mode 100644 .riot/requirements/17721fd.txt diff --git a/.riot/requirements/1711b0d.txt b/.riot/requirements/1711b0d.txt deleted file mode 100644 index d4117fe8b33..00000000000 --- a/.riot/requirements/1711b0d.txt +++ /dev/null @@ -1,70 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.10 -# by the following command: -# -# pip-compile --allow-unsafe --cert=None --client-cert=None --index-url=None --no-annotate --pip-args=None .riot/requirements/1711b0d.in -# -aiohappyeyeballs==2.6.1 -aiohttp==3.12.15 -aiohttp-cors==0.8.1 -aiosignal==1.4.0 -annotated-types==0.7.0 -async-timeout==5.0.1 -attrs==25.3.0 -cachetools==5.5.2 -certifi==2025.8.3 -charset-normalizer==3.4.3 -click==8.3.0 -colorful==0.5.7 -coverage[toml]==7.10.7 -distlib==0.4.0 -exceptiongroup==1.3.0 -filelock==3.19.1 -frozenlist==1.7.0 -google-api-core==2.25.1 -google-auth==2.40.3 -googleapis-common-protos==1.70.0 -grpcio==1.75.0 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -jsonschema==4.25.1 -jsonschema-specifications==2025.9.1 -mock==5.2.0 -msgpack==1.1.1 -multidict==6.6.4 -opencensus==0.11.4 -opencensus-context==0.1.3 -opentracing==2.4.0 -packaging==25.0 -platformdirs==4.4.0 -pluggy==1.6.0 -prometheus-client==0.23.1 -propcache==0.3.2 -proto-plus==1.26.1 -protobuf==6.32.1 -py-spy==0.4.1 -pyasn1==0.6.1 -pyasn1-modules==0.4.2 -pydantic==2.11.9 -pydantic-core==2.33.2 -pygments==2.19.2 -pytest==8.4.2 -pytest-cov==7.0.0 -pytest-mock==3.15.1 -pyyaml==6.0.2 -ray[default]==2.46.0 -referencing==0.36.2 -requests==2.32.5 -rpds-py==0.27.1 -rsa==4.9.1 -six==1.17.0 -smart-open==7.3.1 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.15.0 -typing-inspection==0.4.1 -urllib3==2.5.0 -virtualenv==20.34.0 -wrapt==1.17.3 -yarl==1.20.1 diff --git a/.riot/requirements/17721fd.txt b/.riot/requirements/17721fd.txt deleted file mode 100644 index a22e9c64aea..00000000000 --- a/.riot/requirements/17721fd.txt +++ /dev/null @@ -1,77 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.10 -# by the following command: -# -# pip-compile --allow-unsafe --cert=None --client-cert=None --index-url=None --no-annotate --pip-args=None .riot/requirements/17721fd.in -# -aiohappyeyeballs==2.6.1 -aiohttp==3.12.15 -aiohttp-cors==0.8.1 -aiosignal==1.4.0 -annotated-types==0.7.0 -async-timeout==5.0.1 -attrs==25.3.0 -cachetools==5.5.2 -certifi==2025.8.3 -charset-normalizer==3.4.3 -click==8.3.0 -colorful==0.5.7 -coverage[toml]==7.10.7 -distlib==0.4.0 -exceptiongroup==1.3.0 -filelock==3.19.1 -frozenlist==1.7.0 -google-api-core==2.25.1 -google-auth==2.40.3 -googleapis-common-protos==1.70.0 -grpcio==1.75.0 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.7.0 -iniconfig==2.1.0 -jsonschema==4.25.1 -jsonschema-specifications==2025.9.1 -mock==5.2.0 -msgpack==1.1.1 -multidict==6.6.4 -opencensus==0.11.4 -opencensus-context==0.1.3 -opentelemetry-api==1.37.0 -opentelemetry-exporter-prometheus==0.58b0 -opentelemetry-proto==1.37.0 -opentelemetry-sdk==1.37.0 -opentelemetry-semantic-conventions==0.58b0 -opentracing==2.4.0 -packaging==25.0 -platformdirs==4.4.0 -pluggy==1.6.0 -prometheus-client==0.23.1 -propcache==0.3.2 -proto-plus==1.26.1 -protobuf==6.32.1 -py-spy==0.4.1 -pyasn1==0.6.1 -pyasn1-modules==0.4.2 -pydantic==2.11.9 -pydantic-core==2.33.2 -pygments==2.19.2 -pytest==8.4.2 -pytest-cov==7.0.0 -pytest-mock==3.15.1 -pyyaml==6.0.2 -ray[default]==2.49.2 -referencing==0.36.2 -requests==2.32.5 -rpds-py==0.27.1 -rsa==4.9.1 -six==1.17.0 -smart-open==7.3.1 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.15.0 -typing-inspection==0.4.1 -urllib3==2.5.0 -virtualenv==20.34.0 -wrapt==1.17.3 -yarl==1.20.1 -zipp==3.23.0 From c11a4d34f0c2e65f42eda4ea077b1f56d600e64d Mon Sep 17 00:00:00 2001 From: Imran Hendley Date: Fri, 26 Sep 2025 02:10:20 -0400 Subject: [PATCH 38/59] add metadata tags and entrypoint to root span --- ddtrace/contrib/internal/ray/constants.py | 3 ++ ddtrace/contrib/internal/ray/patch.py | 25 ++++++--- ddtrace/contrib/internal/ray/utils.py | 63 +++++++++++++++++++---- 3 files changed, 74 insertions(+), 17 deletions(-) diff --git a/ddtrace/contrib/internal/ray/constants.py b/ddtrace/contrib/internal/ray/constants.py index 22ffa35755a..26feffc2f35 100644 --- a/ddtrace/contrib/internal/ray/constants.py +++ b/ddtrace/contrib/internal/ray/constants.py @@ -12,6 +12,8 @@ RAY_ACTOR_ID = "ray.actor_id" RAY_SUBMISSION_ID_TAG = "ray.submission_id" RAY_HOSTNAME = "ray.hostname" +RAY_ENTRYPOINT = "ray.entrypoint" +RAY_ENTRYPOINT_SCRIPT = "ray.entrypoint_script" # Default job name if not set by the user DEFAULT_JOB_NAME = "unnamed.ray.job" @@ -39,6 +41,7 @@ RAY_WAIT_TIMEOUT = "ray.wait.timeout_s" RAY_WAIT_NUM_RETURNS = "ray.wait.num_returns" RAY_WAIT_FETCH_LOCAL = "ray.wait.fetch_local" +RAY_METADATA_PREFIX = "ray.job.metadata" # Error tag names ERROR_MESSAGE = "error.message" diff --git a/ddtrace/contrib/internal/ray/patch.py b/ddtrace/contrib/internal/ray/patch.py index 11aff7484aa..1bda3e3bbfc 100644 --- a/ddtrace/contrib/internal/ray/patch.py +++ b/ddtrace/contrib/internal/ray/patch.py @@ -32,6 +32,8 @@ from .constants import DEFAULT_JOB_NAME from .constants import RAY_ACTOR_METHOD_ARGS from .constants import RAY_ACTOR_METHOD_KWARGS +from .constants import RAY_ENTRYPOINT +from .constants import RAY_ENTRYPOINT_SCRIPT from .constants import RAY_JOB_NAME from .constants import RAY_JOB_STATUS from .constants import RAY_JOB_SUBMIT_STATUS @@ -59,6 +61,7 @@ from .utils import extract_signature from .utils import get_dd_job_name_from_entrypoint from .utils import get_dd_job_name_from_submission_id +from .utils import metadata_to_dot_pairs from .utils import set_tag_or_truncate @@ -190,17 +193,27 @@ def traced_submit_job(wrapped, instance, args, kwargs): submission_id = kwargs.get("submission_id") or generate_job_id() kwargs["submission_id"] = submission_id entrypoint = kwargs.get("entrypoint", "") - job_name = ( - config.service - or kwargs.get("metadata", {}).get("job_name", "") - or get_dd_job_name_from_submission_id(submission_id) - or get_dd_job_name_from_entrypoint(entrypoint) - ) + job_name = config.service or kwargs.get("metadata", {}).get("job_name", "") + + if not job_name: + if os.environ.get("DD_RAY_USE_ENTRYPOINT_AS_JOB_NAME", "false").lower() in ("true", "1"): + job_name = get_dd_job_name_from_entrypoint(entrypoint) or DEFAULT_JOB_NAME + else: + job_name = DEFAULT_JOB_NAME # Root span creation job_span = tracer.start_span("ray.job", service=job_name or DEFAULT_JOB_NAME, span_type=SpanTypes.RAY) _inject_ray_span_tags_and_metrics(job_span) job_span.set_tag_str(RAY_SUBMISSION_ID_TAG, submission_id) + if entrypoint: + job_span.set_tag_str(RAY_ENTRYPOINT, entrypoint) + entrypoint_script = get_dd_job_name_from_entrypoint(entrypoint) + if entrypoint_script: + job_span.set_tag_str(RAY_ENTRYPOINT_SCRIPT, entrypoint_script) + metadata = kwargs.get("metadata", {}) + for k, v in metadata_to_dot_pairs(metadata): + set_tag_or_truncate(job_span, k, v) + tracer.context_provider.activate(job_span) start_long_running_job(job_span) diff --git a/ddtrace/contrib/internal/ray/utils.py b/ddtrace/contrib/internal/ray/utils.py index 3958d8acec0..b602840bae3 100644 --- a/ddtrace/contrib/internal/ray/utils.py +++ b/ddtrace/contrib/internal/ray/utils.py @@ -1,6 +1,7 @@ import inspect from inspect import Parameter from inspect import Signature +import json import os import re import socket @@ -24,6 +25,7 @@ from .constants import RAY_COMPONENT from .constants import RAY_HOSTNAME from .constants import RAY_JOB_ID +from .constants import RAY_METADATA_PREFIX from .constants import RAY_NODE_ID from .constants import RAY_SUBMISSION_ID from .constants import RAY_SUBMISSION_ID_TAG @@ -121,27 +123,66 @@ def set_tag_or_truncate(span, tag_name, tag_value): span.set_tag(tag_name, tag_value) -def get_dd_job_name_from_submission_id(submission_id: str): +def get_dd_job_name_from_entrypoint(entrypoint: str): """ - Get the job name from the submission id. - If the submission id is set but not in a job:test,run:3 format, return the default job name. - If the submission id is not set, return None. + Get the job name from the entrypoint. """ - match = JOB_NAME_REGEX.match(submission_id) + match = ENTRY_POINT_REGEX.search(entrypoint) if match: return match.group(1) return None -def get_dd_job_name_from_entrypoint(entrypoint: str): +def json_to_dot_notation(data): """ - Get the job name from the entrypoint. + Converts a JSON (or Python dictionary) structure into a dict mapping + dot-notation paths to leaf values. + + - Assumes the top-level is a dictionary. If a list is encountered anywhere, + it is stringified with json.dumps and treated as a leaf (no recursion into list elements). + - Leaf values (str, int, float, bool, None) are returned as-is as the dict values. + - If the top-level value is a simple primitive (str, int, float, bool, None), + it is returned unchanged. If the top-level is a list, it is stringified. """ - match = ENTRY_POINT_REGEX.search(entrypoint) - if match: - return match.group(1) - return None + # If top-level is a primitive, return it directly + if not isinstance(data, (dict, list)): + return data + + # If top-level is a list, stringify and return + if isinstance(data, list): + try: + return json.dumps(data, ensure_ascii=False) + except Exception: + return "[]" + + result = {} + + def _recurse(node, path): + if isinstance(node, dict): + for key, value in node.items(): + new_path = f"{path}.{key}" if path else key + _recurse(value, new_path) + elif isinstance(node, list): + # Treat any list as a leaf by stringifying it + try: + list_dump = json.dumps(node, ensure_ascii=False) + except Exception: + list_dump = "[]" + # path should always be non-empty for list encountered in a dict traversal + result[path] = list_dump + else: + # leaf node: store the accumulated path -> value + result[path] = node + + _recurse(data, "") + return result + +def metadata_to_dot_pairs(metadata): + if isinstance(metadata, dict): + for k, v in json_to_dot_notation(metadata).items(): + yield f"{RAY_METADATA_PREFIX}.{k}", v + # ------------------------------------------------------------------------------------------- # This is extracted from ray code From 8410538ea57c405558c2ea0854e0d6a7fa9f0167 Mon Sep 17 00:00:00 2001 From: Imran Hendley Date: Fri, 26 Sep 2025 02:25:50 -0400 Subject: [PATCH 39/59] style --- ddtrace/contrib/internal/ray/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ddtrace/contrib/internal/ray/utils.py b/ddtrace/contrib/internal/ray/utils.py index b602840bae3..92d6fff05ef 100644 --- a/ddtrace/contrib/internal/ray/utils.py +++ b/ddtrace/contrib/internal/ray/utils.py @@ -182,7 +182,7 @@ def metadata_to_dot_pairs(metadata): if isinstance(metadata, dict): for k, v in json_to_dot_notation(metadata).items(): yield f"{RAY_METADATA_PREFIX}.{k}", v - + # ------------------------------------------------------------------------------------------- # This is extracted from ray code From ecddb1538a4b7a9f54876abd89a42e030197c505 Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Fri, 26 Sep 2025 10:16:44 +0200 Subject: [PATCH 40/59] config name consistent with java --- ddtrace/contrib/internal/ray/__init__.py | 2 +- ddtrace/contrib/internal/ray/span_manager.py | 2 +- ddtrace/settings/_config.py | 4 ++-- tests/contrib/ray/test_long_running_span.py | 8 +++----- tests/telemetry/test_writer.py | 1 + 5 files changed, 8 insertions(+), 9 deletions(-) diff --git a/ddtrace/contrib/internal/ray/__init__.py b/ddtrace/contrib/internal/ray/__init__.py index a6a249ecc4c..d46da4a074c 100644 --- a/ddtrace/contrib/internal/ray/__init__.py +++ b/ddtrace/contrib/internal/ray/__init__.py @@ -24,7 +24,7 @@ The Ray integration can be configured using environment variables: -- ``DD_TRACE_LONG_RUNNING_SPAN_SUBMISSION_INTERVAL``: Interval for resubmitting long-running +- ``DD_TRACE_EXPERIMENTAL_LONG_RUNNING_FLUSH_INTERVAL``: Interval for resubmitting long-running spans (default: ``120.0`` seconds) Ray service name can be configured by: diff --git a/ddtrace/contrib/internal/ray/span_manager.py b/ddtrace/contrib/internal/ray/span_manager.py index 446354e43a3..5152ed4e507 100644 --- a/ddtrace/contrib/internal/ray/span_manager.py +++ b/ddtrace/contrib/internal/ray/span_manager.py @@ -157,7 +157,7 @@ def _resubmit_long_running_spans(self, submission_id): with self._lock: if submission_id not in self._job_spans: return - self._create_resubmit_timer(submission_id, float(config._long_running_span_submission_interval)) + self._create_resubmit_timer(submission_id, float(config._long_running_flush_interval)) job_spans = list(self._job_spans[submission_id].values()) for span in job_spans: diff --git a/ddtrace/settings/_config.py b/ddtrace/settings/_config.py index 97cee1e1789..356639601ab 100644 --- a/ddtrace/settings/_config.py +++ b/ddtrace/settings/_config.py @@ -672,8 +672,8 @@ def __init__(self): # Long-running span submission interval (generic configuration) # Only supported for Ray spans for now - self._long_running_span_submission_interval = _get_config( - "DD_TRACE_LONG_RUNNING_SPAN_SUBMISSION_INTERVAL", default=120.0, modifier=float + self._long_running_flush_interval = _get_config( + "DD_TRACE_EXPERIMENTAL_LONG_RUNNING_FLUSH_INTERVAL", default=120.0, modifier=float ) def __getattr__(self, name) -> Any: diff --git a/tests/contrib/ray/test_long_running_span.py b/tests/contrib/ray/test_long_running_span.py index 3646e2a4195..c51de054868 100644 --- a/tests/contrib/ray/test_long_running_span.py +++ b/tests/contrib/ray/test_long_running_span.py @@ -13,13 +13,11 @@ class TestLongRunningSpan(TracerTestCase): def setUp(self): super().setUp() # Override timing values to make tests run quickly - self.original_long_running_span_submission_interval = getattr( - config, "_long_running_span_submission_interval", 120.0 - ) + self.original_long_running_flush_interval = getattr(config, "_long_running_span_submission_interval", 120.0) self.original_initial_submit_threshold = getattr(config.ray, "initial_submit_threshold", 10.0) # Set fast timing for testing - config._long_running_span_submission_interval = 2.0 # 2s instead of 120s + config._long_running_flush_interval = 2.0 # 2s instead of 120s config.ray.initial_submit_threshold = 1 # 1s instead of 10s # Clear any existing spans from the job manager @@ -30,7 +28,7 @@ def setUp(self): def tearDown(self): # Restore original values - config._long_running_span_submission_interval = self.original_long_running_span_submission_interval + config._long_running_flush_interval = self.original_long_running_flush_interval config.ray.initial_submit_threshold = self.original_initial_submit_threshold # Clean up any remaining timers diff --git a/tests/telemetry/test_writer.py b/tests/telemetry/test_writer.py index aa78d47d7f1..c01d943e28f 100644 --- a/tests/telemetry/test_writer.py +++ b/tests/telemetry/test_writer.py @@ -486,6 +486,7 @@ def test_app_started_event_configuration_override(test_agent_session, run_python {"name": "DD_TRACE_DEBUG", "origin": "env_var", "value": True}, {"name": "DD_TRACE_ENABLED", "origin": "env_var", "value": False}, {"name": "DD_TRACE_EXPERIMENTAL_FEATURES_ENABLED", "origin": "default", "value": "set()"}, + {"name": "DD_TRACE_EXPERIMENTAL_LONG_RUNNING_FLUSH_INTERVAL", "origin": "default", "value": 120.0}, {"name": "DD_TRACE_EXPERIMENTAL_RUNTIME_ID_ENABLED", "origin": "default", "value": False}, {"name": "DD_TRACE_HEADER_TAGS", "origin": "default", "value": ""}, {"name": "DD_TRACE_HEALTH_METRICS_ENABLED", "origin": "env_var", "value": True}, From 996aa678474382496a7435b378d87cff7948934b Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Fri, 26 Sep 2025 11:00:07 +0200 Subject: [PATCH 41/59] config consistency --- ddtrace/contrib/internal/ray/patch.py | 2 -- ddtrace/contrib/internal/ray/span_manager.py | 2 +- ddtrace/settings/_config.py | 5 ++++- tests/contrib/ray/test_long_running_span.py | 8 +++++--- tests/telemetry/test_writer.py | 1 + 5 files changed, 11 insertions(+), 7 deletions(-) diff --git a/ddtrace/contrib/internal/ray/patch.py b/ddtrace/contrib/internal/ray/patch.py index 11aff7484aa..041ff8c002a 100644 --- a/ddtrace/contrib/internal/ray/patch.py +++ b/ddtrace/contrib/internal/ray/patch.py @@ -26,7 +26,6 @@ from ddtrace.internal.schema import schematize_service_name from ddtrace.internal.utils import get_argument_value from ddtrace.propagation.http import _TraceContext -from ddtrace.settings._config import _get_config from .constants import DD_RAY_TRACE_CTX from .constants import DEFAULT_JOB_NAME @@ -76,7 +75,6 @@ "ray", dict( _default_service=schematize_service_name("ray"), - initial_submit_threshold=_get_config("_DD_TRACE_RAY_INITIAL_SUBMIT_THRESHOLD", default=10.0, modifier=float), ), ) diff --git a/ddtrace/contrib/internal/ray/span_manager.py b/ddtrace/contrib/internal/ray/span_manager.py index 5152ed4e507..4c3334d09e9 100644 --- a/ddtrace/contrib/internal/ray/span_manager.py +++ b/ddtrace/contrib/internal/ray/span_manager.py @@ -187,7 +187,7 @@ def add_span(self, span): if submission_id not in self._job_spans: self._job_spans[submission_id] = {} # the first timer will be only 10 seconds to have a well formed trace - self._create_resubmit_timer(submission_id, float(config.ray.initial_submit_threshold)) + self._create_resubmit_timer(submission_id, float(config._long_running_initial_flush_interval)) self._job_spans[submission_id][(span.trace_id, span.span_id)] = span def stop_long_running_span(self, span_to_stop): diff --git a/ddtrace/settings/_config.py b/ddtrace/settings/_config.py index 356639601ab..a769db175ee 100644 --- a/ddtrace/settings/_config.py +++ b/ddtrace/settings/_config.py @@ -670,11 +670,14 @@ def __init__(self): "DD_TRACE_RESOURCE_RENAMING_ALWAYS_SIMPLIFIED_ENDPOINT", default=False, modifier=asbool ) - # Long-running span submission interval (generic configuration) + # Long-running span interval configurations # Only supported for Ray spans for now self._long_running_flush_interval = _get_config( "DD_TRACE_EXPERIMENTAL_LONG_RUNNING_FLUSH_INTERVAL", default=120.0, modifier=float ) + self._long_running_initial_flush_interval = _get_config( + "DD_TRACE_EXPERIMENTAL_LONG_RUNNING_INITIAL_FLUSH_INTERVAL", default=10.0, modifier=float + ) def __getattr__(self, name) -> Any: if name in self._config: diff --git a/tests/contrib/ray/test_long_running_span.py b/tests/contrib/ray/test_long_running_span.py index c51de054868..1626c3b4a02 100644 --- a/tests/contrib/ray/test_long_running_span.py +++ b/tests/contrib/ray/test_long_running_span.py @@ -14,11 +14,13 @@ def setUp(self): super().setUp() # Override timing values to make tests run quickly self.original_long_running_flush_interval = getattr(config, "_long_running_span_submission_interval", 120.0) - self.original_initial_submit_threshold = getattr(config.ray, "initial_submit_threshold", 10.0) + self.original_long_running_initial_flush_interval = getattr( + config, "_long_running_initial_flush_interval", 10.0 + ) # Set fast timing for testing config._long_running_flush_interval = 2.0 # 2s instead of 120s - config.ray.initial_submit_threshold = 1 # 1s instead of 10s + config._long_running_initial_flush_interval = 1 # 1s instead of 10s # Clear any existing spans from the job manager with _ray_span_manager._lock: @@ -29,7 +31,7 @@ def setUp(self): def tearDown(self): # Restore original values config._long_running_flush_interval = self.original_long_running_flush_interval - config.ray.initial_submit_threshold = self.original_initial_submit_threshold + config._long_running_initial_flush_interval = self.original_long_running_initial_flush_interval # Clean up any remaining timers with _ray_span_manager._lock: diff --git a/tests/telemetry/test_writer.py b/tests/telemetry/test_writer.py index c01d943e28f..29afe3a1831 100644 --- a/tests/telemetry/test_writer.py +++ b/tests/telemetry/test_writer.py @@ -487,6 +487,7 @@ def test_app_started_event_configuration_override(test_agent_session, run_python {"name": "DD_TRACE_ENABLED", "origin": "env_var", "value": False}, {"name": "DD_TRACE_EXPERIMENTAL_FEATURES_ENABLED", "origin": "default", "value": "set()"}, {"name": "DD_TRACE_EXPERIMENTAL_LONG_RUNNING_FLUSH_INTERVAL", "origin": "default", "value": 120.0}, + {"name": "DD_TRACE_EXPERIMENTAL_LONG_RUNNING_INITIAL_FLUSH_INTERVAL", "origin": "default", "value": 10.0}, {"name": "DD_TRACE_EXPERIMENTAL_RUNTIME_ID_ENABLED", "origin": "default", "value": False}, {"name": "DD_TRACE_HEADER_TAGS", "origin": "default", "value": ""}, {"name": "DD_TRACE_HEALTH_METRICS_ENABLED", "origin": "env_var", "value": True}, From bd597d9dbcffa13c83f438e5e07e8ec53d103332 Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Fri, 26 Sep 2025 15:25:22 +0200 Subject: [PATCH 42/59] upgrade systemtests --- .github/workflows/system-tests.yml | 6 +++--- .gitlab-ci.yml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/system-tests.yml b/.github/workflows/system-tests.yml index b5e98cfa48b..a25be4526c4 100644 --- a/.github/workflows/system-tests.yml +++ b/.github/workflows/system-tests.yml @@ -47,7 +47,7 @@ jobs: persist-credentials: false repository: 'DataDog/system-tests' # Automatically managed, use scripts/update-system-tests-version to update - ref: '0eadeeae3a7c2fddb61ed55b692580ad6cd852f9' + ref: '2639c0bbe8e084936631ccb98b7da8676cf7b61d' - name: Download wheels to binaries directory uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 @@ -94,7 +94,7 @@ jobs: persist-credentials: false repository: 'DataDog/system-tests' # Automatically managed, use scripts/update-system-tests-version to update - ref: '0eadeeae3a7c2fddb61ed55b692580ad6cd852f9' + ref: '2639c0bbe8e084936631ccb98b7da8676cf7b61d' - name: Build runner uses: ./.github/actions/install_runner @@ -279,7 +279,7 @@ jobs: persist-credentials: false repository: 'DataDog/system-tests' # Automatically managed, use scripts/update-system-tests-version to update - ref: '0eadeeae3a7c2fddb61ed55b692580ad6cd852f9' + ref: '2639c0bbe8e084936631ccb98b7da8676cf7b61d' - name: Download wheels to binaries directory uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 34508166f50..c8b493fe023 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -14,7 +14,7 @@ variables: DD_VPA_TEMPLATE: "vpa-template-cpu-p70-10percent-2x-oom-min-cap" # CI_DEBUG_SERVICES: "true" # Automatically managed, use scripts/update-system-tests-version to update - SYSTEM_TESTS_REF: "0eadeeae3a7c2fddb61ed55b692580ad6cd852f9" + SYSTEM_TESTS_REF: "2639c0bbe8e084936631ccb98b7da8676cf7b61d" default: interruptible: true From c15b17d9208e9703abce09fdb03e1864e4654772 Mon Sep 17 00:00:00 2001 From: Imran Hendley Date: Fri, 26 Sep 2025 09:34:08 -0400 Subject: [PATCH 43/59] style --- ddtrace/contrib/internal/ray/patch.py | 1 - 1 file changed, 1 deletion(-) diff --git a/ddtrace/contrib/internal/ray/patch.py b/ddtrace/contrib/internal/ray/patch.py index 1bda3e3bbfc..d912ee2ac4b 100644 --- a/ddtrace/contrib/internal/ray/patch.py +++ b/ddtrace/contrib/internal/ray/patch.py @@ -60,7 +60,6 @@ from .utils import _inject_ray_span_tags_and_metrics from .utils import extract_signature from .utils import get_dd_job_name_from_entrypoint -from .utils import get_dd_job_name_from_submission_id from .utils import metadata_to_dot_pairs from .utils import set_tag_or_truncate From d7e526ce5542cc25ba302af8cfe9d492e005ee87 Mon Sep 17 00:00:00 2001 From: Imran Hendley Date: Fri, 26 Sep 2025 10:33:25 -0400 Subject: [PATCH 44/59] bug fix and add unit tests --- ddtrace/contrib/internal/ray/patch.py | 6 ++++-- tests/contrib/ray/test_ray_utils.py | 23 ++++++++++++++--------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/ddtrace/contrib/internal/ray/patch.py b/ddtrace/contrib/internal/ray/patch.py index d912ee2ac4b..b777c985f0b 100644 --- a/ddtrace/contrib/internal/ray/patch.py +++ b/ddtrace/contrib/internal/ray/patch.py @@ -210,8 +210,10 @@ def traced_submit_job(wrapped, instance, args, kwargs): if entrypoint_script: job_span.set_tag_str(RAY_ENTRYPOINT_SCRIPT, entrypoint_script) metadata = kwargs.get("metadata", {}) - for k, v in metadata_to_dot_pairs(metadata): - set_tag_or_truncate(job_span, k, v) + dot_pairs = metadata_to_dot_pairs(metadata) + if isinstance(dot_pairs, dict): + for k, v in dot_pairs.items(): + set_tag_or_truncate(job_span, k, v) tracer.context_provider.activate(job_span) start_long_running_job(job_span) diff --git a/tests/contrib/ray/test_ray_utils.py b/tests/contrib/ray/test_ray_utils.py index 1dc2c30de88..3a99af858ed 100644 --- a/tests/contrib/ray/test_ray_utils.py +++ b/tests/contrib/ray/test_ray_utils.py @@ -1,13 +1,6 @@ +from ddtrace.contrib.internal.ray.constants import RAY_METADATA_PREFIX from ddtrace.contrib.internal.ray.utils import get_dd_job_name_from_entrypoint -from ddtrace.contrib.internal.ray.utils import get_dd_job_name_from_submission_id - - -def test_get_dd_job_name_from_submission_id(): - assert ( - get_dd_job_name_from_submission_id("job:frobnitzigate_idiosyncrasies,run:38") == "frobnitzigate_idiosyncrasies" - ) - assert get_dd_job_name_from_submission_id("joe.schmoe-cf32445c3b2842958956ba6b6225ad") is None - assert get_dd_job_name_from_submission_id("") is None +from ddtrace.contrib.internal.ray.utils import metadata_to_dot_pairs def test_get_dd_job_name_from_entrypoint(): @@ -16,3 +9,15 @@ def test_get_dd_job_name_from_entrypoint(): assert get_dd_job_name_from_entrypoint("/Users/bits/.pyenv/shims/python3 woof.py") == "woof" assert get_dd_job_name_from_entrypoint("python3 woof.py --breed mutt") == "woof" assert get_dd_job_name_from_entrypoint("perl meow.pl") is None + + +def test_metadata_to_dot_pairs(): + assert metadata_to_dot_pairs({"a": {"b": {"c": 1}}}) == {f"{RAY_METADATA_PREFIX}.a.b.c": 1} + assert metadata_to_dot_pairs({"a": [1, 2, 3]}) == {f"{RAY_METADATA_PREFIX}.a": "[1, 2, 3]"} + assert metadata_to_dot_pairs({"a": {"b": 1}, "c": 2}) == { + f"{RAY_METADATA_PREFIX}.a.b": 1, + f"{RAY_METADATA_PREFIX}.c": 2, + } + assert metadata_to_dot_pairs({"a": {"b": {"c": 1, "d": [1, 2]}}}) == { + f"{RAY_METADATA_PREFIX}.a.b.c: 1, {RAY_METADATA_PREFIX}.a.b.d: [1, 2]" + } From 3eee0bd27be0288388401df99a9bd170a59a75c8 Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Mon, 29 Sep 2025 10:18:18 +0200 Subject: [PATCH 45/59] last reviews --- ddtrace/contrib/internal/ray/__init__.py | 3 +++ ddtrace/contrib/internal/ray/constants.py | 3 --- ddtrace/contrib/internal/ray/patch.py | 15 ++++++++------- ddtrace/contrib/internal/ray/span_manager.py | 4 ++-- tests/contrib/ray/test_long_running_span.py | 2 +- 5 files changed, 14 insertions(+), 13 deletions(-) diff --git a/ddtrace/contrib/internal/ray/__init__.py b/ddtrace/contrib/internal/ray/__init__.py index d46da4a074c..cc762a406a0 100644 --- a/ddtrace/contrib/internal/ray/__init__.py +++ b/ddtrace/contrib/internal/ray/__init__.py @@ -7,6 +7,9 @@ Enabling ~~~~~~~~ +Ray instrumentation is experimental. It is deactivated by default. To enable it, +you have to follow one of the two methods below: + The recommended way to instrument Ray, is to instrument the Ray cluster. You can do it by starting the Ray head with a tracing startup hook:: diff --git a/ddtrace/contrib/internal/ray/constants.py b/ddtrace/contrib/internal/ray/constants.py index 22ffa35755a..47a7e9cdcfb 100644 --- a/ddtrace/contrib/internal/ray/constants.py +++ b/ddtrace/contrib/internal/ray/constants.py @@ -40,9 +40,6 @@ RAY_WAIT_NUM_RETURNS = "ray.wait.num_returns" RAY_WAIT_FETCH_LOCAL = "ray.wait.fetch_local" -# Error tag names -ERROR_MESSAGE = "error.message" - # Long-running span metric names DD_PARTIAL_VERSION = "_dd.partial_version" DD_WAS_LONG_RUNNING = "_dd.was_long_running" diff --git a/ddtrace/contrib/internal/ray/patch.py b/ddtrace/contrib/internal/ray/patch.py index 041ff8c002a..691838f2a54 100644 --- a/ddtrace/contrib/internal/ray/patch.py +++ b/ddtrace/contrib/internal/ray/patch.py @@ -63,6 +63,7 @@ log = get_logger(__name__) +RAY_SERVICE_NAME = os.environ.get(RAY_JOB_NAME) # Ray modules that should be excluded from tracing RAY_MODULE_DENYLIST = { @@ -111,7 +112,7 @@ def _wrap_task_execution(wrapped, *args, **kwargs): with long_running_ray_span( "task.execute", resource=f"{wrapped.__module__}.{wrapped.__qualname__}", - service=os.environ.get(RAY_JOB_NAME), + service=RAY_SERVICE_NAME, span_type=SpanTypes.RAY, child_of=extracted_context, activate=True, @@ -152,7 +153,7 @@ def traced_submit_task(wrapped, instance, args, kwargs): with tracer.trace( "task.submit", resource=f"{instance._function_name}.remote", - service=os.environ.get(RAY_JOB_NAME), + service=RAY_SERVICE_NAME, span_type=SpanTypes.RAY, ) as span: span.set_tag_str(SPAN_KIND, SpanKind.PRODUCER) @@ -253,7 +254,7 @@ def traced_actor_method_call(wrapped, instance, args, kwargs): with tracer.trace( "actor_method.submit", - service=os.environ.get(RAY_JOB_NAME), + service=RAY_SERVICE_NAME, span_type=SpanTypes.RAY, resource=f"{actor_name}.{method_name}.remote", ) as span: @@ -276,7 +277,7 @@ def traced_wait(wrapped, instance, args, kwargs): with long_running_ray_span( "ray.wait", - service=os.environ.get(RAY_JOB_NAME), + service=RAY_SERVICE_NAME, span_type=SpanTypes.RAY, child_of=tracer.context_provider.active(), activate=True, @@ -306,7 +307,7 @@ async def _traced_run_method(self: Any, *args: Any, _dd_ray_trace_ctx, **kwargs: with long_running_ray_span( "actor_method.execute", resource=f"{self.__class__.__name__}.{method.__name__}", - service=os.environ.get(RAY_JOB_NAME), + service=RAY_SERVICE_NAME, span_type=SpanTypes.RAY, child_of=context, activate=True, @@ -344,7 +345,7 @@ def _traced_exec_entrypoint_method(self: Any, *args: Any, _dd_ray_trace_ctx=None with tracer.trace( "exec entrypoint", resource=f"exec {entrypoint_name}", - service=os.environ.get(RAY_JOB_NAME), + service=RAY_SERVICE_NAME, span_type=SpanTypes.RAY, ) as span: span.set_tag_str(SPAN_KIND, SpanKind.CONSUMER) @@ -364,7 +365,7 @@ def _trace_actor_method(self: Any, method: Callable[..., Any], dd_trace_ctx, *ar with long_running_ray_span( "actor_method.execute", resource=f"{self.__class__.__name__}.{method.__name__}", - service=os.environ.get(RAY_JOB_NAME), + service=RAY_SERVICE_NAME, span_type=SpanTypes.RAY, child_of=context, activate=True, diff --git a/ddtrace/contrib/internal/ray/span_manager.py b/ddtrace/contrib/internal/ray/span_manager.py index 4c3334d09e9..90c71bdf3fa 100644 --- a/ddtrace/contrib/internal/ray/span_manager.py +++ b/ddtrace/contrib/internal/ray/span_manager.py @@ -7,12 +7,12 @@ from ddtrace import config from ddtrace import tracer from ddtrace._trace.span import Span +from ddtrace.constants import ERROR_MSG from ddtrace.constants import SPAN_KIND from ddtrace.ext import SpanKind from .constants import DD_PARTIAL_VERSION from .constants import DD_WAS_LONG_RUNNING -from .constants import ERROR_MESSAGE from .constants import RAY_COMPONENT from .constants import RAY_JOB_MESSAGE from .constants import RAY_JOB_STATUS @@ -177,7 +177,7 @@ def _finish_span(self, span, job_info=None): if str(job_info.status) == RAY_STATUS_FAILED: span.error = 1 - span.set_tag_str(ERROR_MESSAGE, job_info.message) + span.set_tag_str(ERROR_MSG, job_info.message) span.finish() def add_span(self, span): diff --git a/tests/contrib/ray/test_long_running_span.py b/tests/contrib/ray/test_long_running_span.py index 1626c3b4a02..607f795f910 100644 --- a/tests/contrib/ray/test_long_running_span.py +++ b/tests/contrib/ray/test_long_running_span.py @@ -113,7 +113,7 @@ def test_multiple_long_running_spans_same_submission(self): self.assertIn((span1.trace_id, span1.span_id), job_spans) self.assertIn((span2.trace_id, span2.span_id), job_spans) - time.sleep(1.5) + time.sleep(2) self.assertGreater(span1.get_metric("_dd.partial_version"), 0) self.assertEqual(span1.get_tag("ray.job.status"), "RUNNING") From 7ef705e051c362d07d618658c76f6fcfbf97a10f Mon Sep 17 00:00:00 2001 From: Imran Hendley Date: Mon, 29 Sep 2025 15:06:49 -0400 Subject: [PATCH 46/59] fix json_to_dot_notation and clean up --- ddtrace/contrib/internal/ray/patch.py | 9 ++++----- ddtrace/contrib/internal/ray/utils.py | 26 +++++++++++++++----------- tests/contrib/ray/test_ray_utils.py | 13 +++++++------ 3 files changed, 26 insertions(+), 22 deletions(-) diff --git a/ddtrace/contrib/internal/ray/patch.py b/ddtrace/contrib/internal/ray/patch.py index b777c985f0b..0c66c292b3c 100644 --- a/ddtrace/contrib/internal/ray/patch.py +++ b/ddtrace/contrib/internal/ray/patch.py @@ -60,7 +60,7 @@ from .utils import _inject_ray_span_tags_and_metrics from .utils import extract_signature from .utils import get_dd_job_name_from_entrypoint -from .utils import metadata_to_dot_pairs +from .utils import json_to_dot_notation from .utils import set_tag_or_truncate @@ -210,10 +210,9 @@ def traced_submit_job(wrapped, instance, args, kwargs): if entrypoint_script: job_span.set_tag_str(RAY_ENTRYPOINT_SCRIPT, entrypoint_script) metadata = kwargs.get("metadata", {}) - dot_pairs = metadata_to_dot_pairs(metadata) - if isinstance(dot_pairs, dict): - for k, v in dot_pairs.items(): - set_tag_or_truncate(job_span, k, v) + dot_pairs = json_to_dot_notation(metadata) + for k, v in dot_pairs.items(): + set_tag_or_truncate(job_span, k, v) tracer.context_provider.activate(job_span) start_long_running_job(job_span) diff --git a/ddtrace/contrib/internal/ray/utils.py b/ddtrace/contrib/internal/ray/utils.py index 92d6fff05ef..ecb9bb99214 100644 --- a/ddtrace/contrib/internal/ray/utils.py +++ b/ddtrace/contrib/internal/ray/utils.py @@ -133,16 +133,17 @@ def get_dd_job_name_from_entrypoint(entrypoint: str): return None -def json_to_dot_notation(data): +def json_to_dot_paths(data): """ Converts a JSON (or Python dictionary) structure into a dict mapping - dot-notation paths to leaf values. + dot-notation paths to leaf values, with keys prefixed once by RAY_METADATA_PREFIX. - Assumes the top-level is a dictionary. If a list is encountered anywhere, it is stringified with json.dumps and treated as a leaf (no recursion into list elements). - Leaf values (str, int, float, bool, None) are returned as-is as the dict values. - If the top-level value is a simple primitive (str, int, float, bool, None), it is returned unchanged. If the top-level is a list, it is stringified. + - Returned dict keys are prefixed once with RAY_METADATA_PREFIX. """ # If top-level is a primitive, return it directly if not isinstance(data, (dict, list)): @@ -155,7 +156,7 @@ def json_to_dot_notation(data): except Exception: return "[]" - result = {} + flat = {} def _recurse(node, path): if isinstance(node, dict): @@ -168,20 +169,23 @@ def _recurse(node, path): list_dump = json.dumps(node, ensure_ascii=False) except Exception: list_dump = "[]" - # path should always be non-empty for list encountered in a dict traversal - result[path] = list_dump + flat[path] = list_dump else: # leaf node: store the accumulated path -> value - result[path] = node + flat[path] = node _recurse(data, "") - return result + # Prefix keys once with RAY_METADATA_PREFIX + result = {} + for k, v in flat.items(): + if k: + result[f"{RAY_METADATA_PREFIX}.{k}"] = v + else: + # If an empty key (top-level primitive under a dict), attach prefix alone + result[RAY_METADATA_PREFIX] = v -def metadata_to_dot_pairs(metadata): - if isinstance(metadata, dict): - for k, v in json_to_dot_notation(metadata).items(): - yield f"{RAY_METADATA_PREFIX}.{k}", v + return result # ------------------------------------------------------------------------------------------- diff --git a/tests/contrib/ray/test_ray_utils.py b/tests/contrib/ray/test_ray_utils.py index 3a99af858ed..54f1f5d95c8 100644 --- a/tests/contrib/ray/test_ray_utils.py +++ b/tests/contrib/ray/test_ray_utils.py @@ -1,6 +1,6 @@ from ddtrace.contrib.internal.ray.constants import RAY_METADATA_PREFIX from ddtrace.contrib.internal.ray.utils import get_dd_job_name_from_entrypoint -from ddtrace.contrib.internal.ray.utils import metadata_to_dot_pairs +from ddtrace.contrib.internal.ray.utils import json_to_dot_notation def test_get_dd_job_name_from_entrypoint(): @@ -11,13 +11,14 @@ def test_get_dd_job_name_from_entrypoint(): assert get_dd_job_name_from_entrypoint("perl meow.pl") is None -def test_metadata_to_dot_pairs(): - assert metadata_to_dot_pairs({"a": {"b": {"c": 1}}}) == {f"{RAY_METADATA_PREFIX}.a.b.c": 1} - assert metadata_to_dot_pairs({"a": [1, 2, 3]}) == {f"{RAY_METADATA_PREFIX}.a": "[1, 2, 3]"} - assert metadata_to_dot_pairs({"a": {"b": 1}, "c": 2}) == { +def test_json_to_dot_notation(): + assert json_to_dot_notation({"a": {"b": {"c": 1}}}) == {f"{RAY_METADATA_PREFIX}.a.b.c": 1} + assert json_to_dot_notation({"a": [1, 2, 3]}) == {f"{RAY_METADATA_PREFIX}.a": "[1, 2, 3]"} + assert json_to_dot_notation({"a": {"b": 1}, "c": 2}) == { f"{RAY_METADATA_PREFIX}.a.b": 1, f"{RAY_METADATA_PREFIX}.c": 2, } - assert metadata_to_dot_pairs({"a": {"b": {"c": 1, "d": [1, 2]}}}) == { + assert json_to_dot_notation({"a": {"b": {"c": 1, "d": [1, 2]}}}) == { f"{RAY_METADATA_PREFIX}.a.b.c: 1, {RAY_METADATA_PREFIX}.a.b.d: [1, 2]" } + assert json_to_dot_notation(1) == f"{RAY_METADATA_PREFIX}:1" From b02bee6aaaa279e260752ef497edf0e21eceedc4 Mon Sep 17 00:00:00 2001 From: Imran Hendley Date: Mon, 29 Sep 2025 15:35:27 -0400 Subject: [PATCH 47/59] fix json_to_dot_paths refactor --- ddtrace/contrib/internal/ray/patch.py | 4 ++-- tests/contrib/ray/test_ray_utils.py | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/ddtrace/contrib/internal/ray/patch.py b/ddtrace/contrib/internal/ray/patch.py index 0c66c292b3c..dd3bb17d178 100644 --- a/ddtrace/contrib/internal/ray/patch.py +++ b/ddtrace/contrib/internal/ray/patch.py @@ -60,7 +60,7 @@ from .utils import _inject_ray_span_tags_and_metrics from .utils import extract_signature from .utils import get_dd_job_name_from_entrypoint -from .utils import json_to_dot_notation +from .utils import json_to_dot_paths from .utils import set_tag_or_truncate @@ -210,7 +210,7 @@ def traced_submit_job(wrapped, instance, args, kwargs): if entrypoint_script: job_span.set_tag_str(RAY_ENTRYPOINT_SCRIPT, entrypoint_script) metadata = kwargs.get("metadata", {}) - dot_pairs = json_to_dot_notation(metadata) + dot_pairs = json_to_dot_paths(metadata) for k, v in dot_pairs.items(): set_tag_or_truncate(job_span, k, v) diff --git a/tests/contrib/ray/test_ray_utils.py b/tests/contrib/ray/test_ray_utils.py index 54f1f5d95c8..38ba12e474f 100644 --- a/tests/contrib/ray/test_ray_utils.py +++ b/tests/contrib/ray/test_ray_utils.py @@ -1,6 +1,6 @@ from ddtrace.contrib.internal.ray.constants import RAY_METADATA_PREFIX from ddtrace.contrib.internal.ray.utils import get_dd_job_name_from_entrypoint -from ddtrace.contrib.internal.ray.utils import json_to_dot_notation +from ddtrace.contrib.internal.ray.utils import json_to_dot_paths def test_get_dd_job_name_from_entrypoint(): @@ -11,14 +11,14 @@ def test_get_dd_job_name_from_entrypoint(): assert get_dd_job_name_from_entrypoint("perl meow.pl") is None -def test_json_to_dot_notation(): - assert json_to_dot_notation({"a": {"b": {"c": 1}}}) == {f"{RAY_METADATA_PREFIX}.a.b.c": 1} - assert json_to_dot_notation({"a": [1, 2, 3]}) == {f"{RAY_METADATA_PREFIX}.a": "[1, 2, 3]"} - assert json_to_dot_notation({"a": {"b": 1}, "c": 2}) == { +def test_json_to_dot_paths(): + assert json_to_dot_paths({"a": {"b": {"c": 1}}}) == {f"{RAY_METADATA_PREFIX}.a.b.c": 1} + assert json_to_dot_paths({"a": [1, 2, 3]}) == {f"{RAY_METADATA_PREFIX}.a": "[1, 2, 3]"} + assert json_to_dot_paths({"a": {"b": 1}, "c": 2}) == { f"{RAY_METADATA_PREFIX}.a.b": 1, f"{RAY_METADATA_PREFIX}.c": 2, } - assert json_to_dot_notation({"a": {"b": {"c": 1, "d": [1, 2]}}}) == { + assert json_to_dot_paths({"a": {"b": {"c": 1, "d": [1, 2]}}}) == { f"{RAY_METADATA_PREFIX}.a.b.c: 1, {RAY_METADATA_PREFIX}.a.b.d: [1, 2]" } - assert json_to_dot_notation(1) == f"{RAY_METADATA_PREFIX}:1" + assert json_to_dot_paths(1) == f"{RAY_METADATA_PREFIX}:1" From 4f199ca92149716f6f6ca60a3ba234d8236d9122 Mon Sep 17 00:00:00 2001 From: Imran Hendley Date: Mon, 29 Sep 2025 16:53:43 -0400 Subject: [PATCH 48/59] fix json_to_dot_paths and fix tests --- ddtrace/contrib/internal/ray/utils.py | 3 --- tests/contrib/ray/test_ray_utils.py | 5 +++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/ddtrace/contrib/internal/ray/utils.py b/ddtrace/contrib/internal/ray/utils.py index ecb9bb99214..c6ae25d6e91 100644 --- a/ddtrace/contrib/internal/ray/utils.py +++ b/ddtrace/contrib/internal/ray/utils.py @@ -145,9 +145,6 @@ def json_to_dot_paths(data): it is returned unchanged. If the top-level is a list, it is stringified. - Returned dict keys are prefixed once with RAY_METADATA_PREFIX. """ - # If top-level is a primitive, return it directly - if not isinstance(data, (dict, list)): - return data # If top-level is a list, stringify and return if isinstance(data, list): diff --git a/tests/contrib/ray/test_ray_utils.py b/tests/contrib/ray/test_ray_utils.py index 38ba12e474f..538adc75dfa 100644 --- a/tests/contrib/ray/test_ray_utils.py +++ b/tests/contrib/ray/test_ray_utils.py @@ -19,6 +19,7 @@ def test_json_to_dot_paths(): f"{RAY_METADATA_PREFIX}.c": 2, } assert json_to_dot_paths({"a": {"b": {"c": 1, "d": [1, 2]}}}) == { - f"{RAY_METADATA_PREFIX}.a.b.c: 1, {RAY_METADATA_PREFIX}.a.b.d: [1, 2]" + f"{RAY_METADATA_PREFIX}.a.b.c": 1, + f"{RAY_METADATA_PREFIX}.a.b.d": "[1, 2]", } - assert json_to_dot_paths(1) == f"{RAY_METADATA_PREFIX}:1" + assert json_to_dot_paths(1) == {f"{RAY_METADATA_PREFIX}":1} From 2242816623bfa4aff4ac95d8881f09652b9c4995 Mon Sep 17 00:00:00 2001 From: Imran Hendley Date: Mon, 29 Sep 2025 17:01:09 -0400 Subject: [PATCH 49/59] style --- tests/contrib/ray/test_ray_utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/contrib/ray/test_ray_utils.py b/tests/contrib/ray/test_ray_utils.py index 538adc75dfa..1142c64d198 100644 --- a/tests/contrib/ray/test_ray_utils.py +++ b/tests/contrib/ray/test_ray_utils.py @@ -19,7 +19,7 @@ def test_json_to_dot_paths(): f"{RAY_METADATA_PREFIX}.c": 2, } assert json_to_dot_paths({"a": {"b": {"c": 1, "d": [1, 2]}}}) == { - f"{RAY_METADATA_PREFIX}.a.b.c": 1, + f"{RAY_METADATA_PREFIX}.a.b.c": 1, f"{RAY_METADATA_PREFIX}.a.b.d": "[1, 2]", } - assert json_to_dot_paths(1) == {f"{RAY_METADATA_PREFIX}":1} + assert json_to_dot_paths(1) == {f"{RAY_METADATA_PREFIX}": 1} From fce2709c2ce90f81c41a4518547f1da8b760b586 Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Wed, 1 Oct 2025 18:47:46 +0200 Subject: [PATCH 50/59] brett's review --- ddtrace/contrib/internal/ray/span_manager.py | 60 ++++++++++++------- ddtrace/contrib/internal/ray/utils.py | 18 +++--- ...ray-core-integration-91f88d121822166d.yaml | 2 +- riotfile.py | 1 - 4 files changed, 49 insertions(+), 32 deletions(-) diff --git a/ddtrace/contrib/internal/ray/span_manager.py b/ddtrace/contrib/internal/ray/span_manager.py index 90c71bdf3fa..cfc301fe705 100644 --- a/ddtrace/contrib/internal/ray/span_manager.py +++ b/ddtrace/contrib/internal/ray/span_manager.py @@ -3,9 +3,16 @@ from itertools import chain import threading import time +from typing import Dict +from typing import Optional +from typing import Tuple +from typing import Union + +from ray.dashboard.modules.job.common import JobInfo from ddtrace import config from ddtrace import tracer +from ddtrace._trace.context import Context from ddtrace._trace.span import Span from ddtrace.constants import ERROR_MSG from ddtrace.constants import SPAN_KIND @@ -24,7 +31,14 @@ @contextmanager -def long_running_ray_span(span_name, service, span_type, resource=None, child_of=None, activate=True): +def long_running_ray_span( + span_name: str, + service: str, + span_type: str, + resource: Optional[str] = None, + child_of: Optional[Union[Span, Context]] = None, + activate: bool = True, +): """Context manager that handles Ray span creation and long-running span lifecycle""" with tracer.start_span( name=span_name, service=service, resource=resource, span_type=span_type, child_of=child_of, activate=activate @@ -42,22 +56,22 @@ def long_running_ray_span(span_name, service, span_type, resource=None, child_of class RaySpanManager: - def __init__(self): - self._timers = {} + def __init__(self) -> None: + self._timers: Dict[str, threading.Timer] = {} # {submission_id: {(trace_id, span_id): Span}} - self._job_spans = {} + self._job_spans: Dict[str, Dict[Tuple[int, int], Span]] = {} # {submission_id: (Span)} - self._root_spans = {} - self._lock = threading.Lock() - self._is_shutting_down = False + self._root_spans: Dict[str, Span] = {} + self._lock: threading.Lock = threading.Lock() + self._is_shutting_down: bool = False # Register cleanup on process exit atexit.register(self.cleanup_on_exit) - def _get_submission_id(self, span): + def _get_submission_id(self, span: Span) -> Optional[str]: return span.get_tag(RAY_SUBMISSION_ID_TAG) - def cleanup_on_exit(self): + def cleanup_on_exit(self) -> None: """Clean up all resources when the process exits.""" with self._lock: self._is_shutting_down = True @@ -77,7 +91,7 @@ def cleanup_on_exit(self): for span in spans_to_close: self._finish_span(span) - def _emit_partial_span(self, span): + def _emit_partial_span(self, span: Span) -> None: partial_version = time.time_ns() if span.get_metric(DD_PARTIAL_VERSION) is None: span.set_metric(DD_PARTIAL_VERSION, partial_version) @@ -120,7 +134,7 @@ def _emit_partial_span(self, span): spans = spans_to_write aggregator.writer.write(spans) - def _create_resubmit_timer(self, submission_id, time): + def _create_resubmit_timer(self, submission_id: str, time: float) -> None: """This function should be called under a lock""" if self._is_shutting_down: return @@ -133,7 +147,7 @@ def _create_resubmit_timer(self, submission_id, time): except Exception: self._timers.pop(submission_id, None) - def _recreate_job_span(self, job_span): + def _recreate_job_span(self, job_span: Span) -> Span: new_span = Span( name=job_span.name, service=job_span.service, @@ -150,7 +164,7 @@ def _recreate_job_span(self, job_span): return new_span - def _resubmit_long_running_spans(self, submission_id): + def _resubmit_long_running_spans(self, submission_id: str) -> None: if self._is_shutting_down: return @@ -163,7 +177,7 @@ def _resubmit_long_running_spans(self, submission_id): for span in job_spans: self._emit_partial_span(span) - def _finish_span(self, span, job_info=None): + def _finish_span(self, span: Span, job_info: Optional[JobInfo] = None) -> None: # only if span was long running if span.get_metric(DD_PARTIAL_VERSION) is not None: del span._metrics[DD_PARTIAL_VERSION] @@ -173,14 +187,14 @@ def _finish_span(self, span, job_info=None): if job_info: span.set_tag_str(RAY_JOB_STATUS, job_info.status) - span.set_tag_str(RAY_JOB_MESSAGE, job_info.message) + span.set_tag(RAY_JOB_MESSAGE, job_info.message) if str(job_info.status) == RAY_STATUS_FAILED: span.error = 1 - span.set_tag_str(ERROR_MSG, job_info.message) + span.set_tag(ERROR_MSG, job_info.message) span.finish() - def add_span(self, span): + def add_span(self, span: Span) -> None: submission_id = self._get_submission_id(span) with self._lock: @@ -190,7 +204,7 @@ def add_span(self, span): self._create_resubmit_timer(submission_id, float(config._long_running_initial_flush_interval)) self._job_spans[submission_id][(span.trace_id, span.span_id)] = span - def stop_long_running_span(self, span_to_stop): + def stop_long_running_span(self, span_to_stop: Span) -> None: self._finish_span(span_to_stop) submission_id = self._get_submission_id(span_to_stop) @@ -211,7 +225,7 @@ def stop_long_running_span(self, span_to_stop): timer.cancel() self._job_spans.pop(submission_id, None) - def stop_long_running_job(self, submission_id, job_info): + def stop_long_running_job(self, submission_id: str, job_info: Optional[JobInfo]) -> None: with self._lock: job_span = self._root_spans[submission_id] @@ -228,7 +242,7 @@ def stop_long_running_job(self, submission_id, job_info): _ray_span_manager = RaySpanManager() -def start_long_running_job(job_span): +def start_long_running_job(job_span: Span) -> None: submission_id = _ray_span_manager._get_submission_id(job_span) with _ray_span_manager._lock: @@ -237,13 +251,13 @@ def start_long_running_job(job_span): start_long_running_span(job_span) -def stop_long_running_job(submission_id, job_info): +def stop_long_running_job(submission_id: str, job_info: Optional[JobInfo]) -> None: _ray_span_manager.stop_long_running_job(submission_id, job_info) -def start_long_running_span(span): +def start_long_running_span(span: Span) -> None: _ray_span_manager.add_span(span) -def stop_long_running_span(span): +def stop_long_running_span(span: Span) -> None: _ray_span_manager.stop_long_running_span(span) diff --git a/ddtrace/contrib/internal/ray/utils.py b/ddtrace/contrib/internal/ray/utils.py index 3958d8acec0..7afc32772c3 100644 --- a/ddtrace/contrib/internal/ray/utils.py +++ b/ddtrace/contrib/internal/ray/utils.py @@ -7,12 +7,16 @@ import sys from typing import Any from typing import Callable +from typing import Dict from typing import List +from typing import Optional import ray from ray.runtime_context import get_runtime_context from ddtrace._trace._limits import MAX_SPAN_META_VALUE_LEN +from ddtrace._trace.context import Context +from ddtrace._trace.span import Span from ddtrace.constants import _DJM_ENABLED_KEY from ddtrace.constants import _FILTER_KEPT_KEY from ddtrace.constants import _SAMPLING_PRIORITY_KEY @@ -52,7 +56,7 @@ def _inject_dd_trace_ctx_kwarg(method: Callable) -> Signature: return old_sig.replace(parameters=sorted_params) -def _inject_context_in_kwargs(context, kwargs): +def _inject_context_in_kwargs(context: Context, kwargs: Dict[str, Any]) -> None: headers = {} _TraceContext._inject(context, headers) if "kwargs" not in kwargs or kwargs["kwargs"] is None: @@ -60,14 +64,14 @@ def _inject_context_in_kwargs(context, kwargs): kwargs["kwargs"][DD_RAY_TRACE_CTX] = headers -def _inject_context_in_env(context): +def _inject_context_in_env(context: Context) -> None: headers = {} _TraceContext._inject(context, headers) os.environ["traceparent"] = headers.get("traceparent", "") os.environ["tracestate"] = headers.get("tracestate", "") -def _extract_tracing_context_from_env(): +def _extract_tracing_context_from_env() -> Optional[Context]: if os.environ.get("traceparent") is not None and os.environ.get("tracestate") is not None: return _TraceContext._extract( { @@ -78,7 +82,7 @@ def _extract_tracing_context_from_env(): return None -def _inject_ray_span_tags_and_metrics(span): +def _inject_ray_span_tags_and_metrics(span: Span) -> None: span.set_tag_str("component", RAY_COMPONENT) span.set_tag_str(RAY_HOSTNAME, socket.gethostname()) span.set_metric(_DJM_ENABLED_KEY, 1) @@ -110,7 +114,7 @@ def _inject_ray_span_tags_and_metrics(span): span.set_tag_str(RAY_ACTOR_ID, actor_id) -def set_tag_or_truncate(span, tag_name, tag_value): +def set_tag_or_truncate(span: Span, tag_name: str, tag_value: Any = None) -> None: """We want to add args/kwargs values as tag when we execute a task/actor method. However they might be really big. In that case we dont way to serialize them AT ALL and we do not want to rely on _encoding.pyx. @@ -121,7 +125,7 @@ def set_tag_or_truncate(span, tag_name, tag_value): span.set_tag(tag_name, tag_value) -def get_dd_job_name_from_submission_id(submission_id: str): +def get_dd_job_name_from_submission_id(submission_id: str) -> Optional[str]: """ Get the job name from the submission id. If the submission id is set but not in a job:test,run:3 format, return the default job name. @@ -133,7 +137,7 @@ def get_dd_job_name_from_submission_id(submission_id: str): return None -def get_dd_job_name_from_entrypoint(entrypoint: str): +def get_dd_job_name_from_entrypoint(entrypoint: str) -> Optional[str]: """ Get the job name from the entrypoint. """ diff --git a/releasenotes/notes/ray-core-integration-91f88d121822166d.yaml b/releasenotes/notes/ray-core-integration-91f88d121822166d.yaml index 97f3dfa88dd..f39ca2f93e9 100644 --- a/releasenotes/notes/ray-core-integration-91f88d121822166d.yaml +++ b/releasenotes/notes/ray-core-integration-91f88d121822166d.yaml @@ -5,5 +5,5 @@ features: tasks, and actor method calls. Supported for Ray >= 2.46.0. To enable tracing, start the Ray head with - `--tracing-startup-hook=ddtrace.contrib.ray:setup_tracing`, + ``--tracing-startup-hook=ddtrace.contrib.ray:setup_tracing`` then submit jobs as usual. diff --git a/riotfile.py b/riotfile.py index 8a7e6bd5604..828107fc680 100644 --- a/riotfile.py +++ b/riotfile.py @@ -3014,7 +3014,6 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT pkgs={ "ray[default]": ["~=2.46.0", latest], }, - env={"DD_TRACE_AIOHTTP_ENABLED": "false", "DD_TRACE_REPORT_HOSTNAME": "true"}, ), Venv( name="logbook", From 35f3817776ffb7bdd67259aed486a25f2f65d529 Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Wed, 1 Oct 2025 21:52:28 +0200 Subject: [PATCH 51/59] chore: change into forksafe lock --- ddtrace/contrib/internal/ray/span_manager.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ddtrace/contrib/internal/ray/span_manager.py b/ddtrace/contrib/internal/ray/span_manager.py index cfc301fe705..fbc6af93d8a 100644 --- a/ddtrace/contrib/internal/ray/span_manager.py +++ b/ddtrace/contrib/internal/ray/span_manager.py @@ -17,6 +17,7 @@ from ddtrace.constants import ERROR_MSG from ddtrace.constants import SPAN_KIND from ddtrace.ext import SpanKind +from ddtrace.internal.forksafe import Lock from .constants import DD_PARTIAL_VERSION from .constants import DD_WAS_LONG_RUNNING @@ -62,7 +63,7 @@ def __init__(self) -> None: self._job_spans: Dict[str, Dict[Tuple[int, int], Span]] = {} # {submission_id: (Span)} self._root_spans: Dict[str, Span] = {} - self._lock: threading.Lock = threading.Lock() + self._lock = Lock() self._is_shutting_down: bool = False # Register cleanup on process exit From a046f038f97e5a7dea8d7fda410fae160a5fb45a Mon Sep 17 00:00:00 2001 From: Imran Hendley Date: Wed, 1 Oct 2025 15:57:06 -0400 Subject: [PATCH 52/59] redact paths and other cleanup for pr feedback --- ddtrace/contrib/internal/ray/constants.py | 1 - ddtrace/contrib/internal/ray/patch.py | 16 ++--- ddtrace/contrib/internal/ray/utils.py | 74 +++++++++++++++++------ tests/contrib/ray/test_ray_utils.py | 39 +++++++++++- 4 files changed, 102 insertions(+), 28 deletions(-) diff --git a/ddtrace/contrib/internal/ray/constants.py b/ddtrace/contrib/internal/ray/constants.py index 26feffc2f35..940884f024d 100644 --- a/ddtrace/contrib/internal/ray/constants.py +++ b/ddtrace/contrib/internal/ray/constants.py @@ -13,7 +13,6 @@ RAY_SUBMISSION_ID_TAG = "ray.submission_id" RAY_HOSTNAME = "ray.hostname" RAY_ENTRYPOINT = "ray.entrypoint" -RAY_ENTRYPOINT_SCRIPT = "ray.entrypoint_script" # Default job name if not set by the user DEFAULT_JOB_NAME = "unnamed.ray.job" diff --git a/ddtrace/contrib/internal/ray/patch.py b/ddtrace/contrib/internal/ray/patch.py index dd3bb17d178..3819adb61a1 100644 --- a/ddtrace/contrib/internal/ray/patch.py +++ b/ddtrace/contrib/internal/ray/patch.py @@ -33,7 +33,6 @@ from .constants import RAY_ACTOR_METHOD_ARGS from .constants import RAY_ACTOR_METHOD_KWARGS from .constants import RAY_ENTRYPOINT -from .constants import RAY_ENTRYPOINT_SCRIPT from .constants import RAY_JOB_NAME from .constants import RAY_JOB_STATUS from .constants import RAY_JOB_SUBMIT_STATUS @@ -61,6 +60,7 @@ from .utils import extract_signature from .utils import get_dd_job_name_from_entrypoint from .utils import json_to_dot_paths +from .utils import redact_paths from .utils import set_tag_or_truncate @@ -79,6 +79,8 @@ dict( _default_service=schematize_service_name("ray"), initial_submit_threshold=_get_config("_DD_TRACE_RAY_INITIAL_SUBMIT_THRESHOLD", default=10.0, modifier=float), + use_entrypoint_as_job_name=_get_config("DD_RAY_USE_ENTRYPOINT_AS_JOB_NAME", default=False, modifier=bool), + redact_entrypoint_paths=_get_config("DD_RAY_REDACT_ENTRYPOINT_PATHS", default=True, modifier=bool), ), ) @@ -192,10 +194,12 @@ def traced_submit_job(wrapped, instance, args, kwargs): submission_id = kwargs.get("submission_id") or generate_job_id() kwargs["submission_id"] = submission_id entrypoint = kwargs.get("entrypoint", "") + if entrypoint and config.ray.redact_entrypoint_paths: + entrypoint = redact_paths(entrypoint) job_name = config.service or kwargs.get("metadata", {}).get("job_name", "") if not job_name: - if os.environ.get("DD_RAY_USE_ENTRYPOINT_AS_JOB_NAME", "false").lower() in ("true", "1"): + if config.ray.use_entrypoint_as_job_name: job_name = get_dd_job_name_from_entrypoint(entrypoint) or DEFAULT_JOB_NAME else: job_name = DEFAULT_JOB_NAME @@ -206,12 +210,10 @@ def traced_submit_job(wrapped, instance, args, kwargs): job_span.set_tag_str(RAY_SUBMISSION_ID_TAG, submission_id) if entrypoint: job_span.set_tag_str(RAY_ENTRYPOINT, entrypoint) - entrypoint_script = get_dd_job_name_from_entrypoint(entrypoint) - if entrypoint_script: - job_span.set_tag_str(RAY_ENTRYPOINT_SCRIPT, entrypoint_script) + metadata = kwargs.get("metadata", {}) - dot_pairs = json_to_dot_paths(metadata) - for k, v in dot_pairs.items(): + dot_paths = json_to_dot_paths(metadata) + for k, v in dot_paths.items(): set_tag_or_truncate(job_span, k, v) tracer.context_provider.activate(job_span) diff --git a/ddtrace/contrib/internal/ray/utils.py b/ddtrace/contrib/internal/ray/utils.py index c6ae25d6e91..55f7c2f0ded 100644 --- a/ddtrace/contrib/internal/ray/utils.py +++ b/ddtrace/contrib/internal/ray/utils.py @@ -42,6 +42,8 @@ # then the job name will be woof ENTRY_POINT_REGEX = re.compile(r"([^\s\/\\]+)\.py") +REDACTED_PATH = "" + def _inject_dd_trace_ctx_kwarg(method: Callable) -> Signature: old_sig = inspect.signature(method) @@ -133,6 +135,53 @@ def get_dd_job_name_from_entrypoint(entrypoint: str): return None +def redact_paths(s): + """ + Redact path-like substrings from an entry-point string. + Uses os.sep (and os.altsep if present) to detect paths; preserves spacing. + """ + + def _redact_pathlike(s): + """ + If s contains a path separator, replace the directory part with REDACTION, + preserving the final component (basename). Trailing separators are ignored. + Detects both os.sep and os.altsep if present. + """ + + # Pick the actual separator used in this token (prefer os.sep if both appear) + used_sep = os.sep if (os.sep in s) else (os.altsep if (os.altsep and os.altsep in s) else None) + if not used_sep: + return s + + core = s.rstrip(used_sep) + if not core: + return REDACTED_PATH + + basename = core.split(used_sep)[-1] + return f"{REDACTED_PATH}{used_sep}{basename}" + + def _redact_token(tok) -> str: + # key=value (value may be quoted) + if "=" in tok: + key, val = tok.split("=", 1) + if len(val) >= 2 and val[0] == val[-1] and val[0] in {"'", '"'}: + q = val[0] + inner = val[1:-1] + return f"{key}={q}{_redact_pathlike(inner)}{q}" + return f"{key}={_redact_pathlike(val)}" + + # Whole token may be quoted + if len(tok) >= 2 and tok[0] == tok[-1] and tok[0] in {"'", '"'}: + q = tok[0] + inner = tok[1:-1] + return f"{q}{_redact_pathlike(inner)}{q}" + + return _redact_pathlike(tok) + + parts = re.split(r"(\s+)", s) # keep whitespace + return "".join(part if part.strip() == "" else _redact_token(part) for part in parts) + + def json_to_dot_paths(data): """ Converts a JSON (or Python dictionary) structure into a dict mapping @@ -146,14 +195,10 @@ def json_to_dot_paths(data): - Returned dict keys are prefixed once with RAY_METADATA_PREFIX. """ - # If top-level is a list, stringify and return - if isinstance(data, list): - try: - return json.dumps(data, ensure_ascii=False) - except Exception: - return "[]" + if not isinstance(data, dict): + return {} - flat = {} + result = {} def _recurse(node, path): if isinstance(node, dict): @@ -166,21 +211,12 @@ def _recurse(node, path): list_dump = json.dumps(node, ensure_ascii=False) except Exception: list_dump = "[]" - flat[path] = list_dump + result[path] = list_dump else: # leaf node: store the accumulated path -> value - flat[path] = node - - _recurse(data, "") + result[path] = node - # Prefix keys once with RAY_METADATA_PREFIX - result = {} - for k, v in flat.items(): - if k: - result[f"{RAY_METADATA_PREFIX}.{k}"] = v - else: - # If an empty key (top-level primitive under a dict), attach prefix alone - result[RAY_METADATA_PREFIX] = v + _recurse(data, RAY_METADATA_PREFIX) return result diff --git a/tests/contrib/ray/test_ray_utils.py b/tests/contrib/ray/test_ray_utils.py index 1142c64d198..09459971d03 100644 --- a/tests/contrib/ray/test_ray_utils.py +++ b/tests/contrib/ray/test_ray_utils.py @@ -1,6 +1,8 @@ from ddtrace.contrib.internal.ray.constants import RAY_METADATA_PREFIX +from ddtrace.contrib.internal.ray.utils import REDACTED_PATH from ddtrace.contrib.internal.ray.utils import get_dd_job_name_from_entrypoint from ddtrace.contrib.internal.ray.utils import json_to_dot_paths +from ddtrace.contrib.internal.ray.utils import redact_paths def test_get_dd_job_name_from_entrypoint(): @@ -11,6 +13,40 @@ def test_get_dd_job_name_from_entrypoint(): assert get_dd_job_name_from_entrypoint("perl meow.pl") is None +def test_redact_paths(): + assert redact_paths("") == "" + assert redact_paths("my_script.py") == "my_script.py" + assert redact_paths("python my_script.py") == "python my_script.py" + assert redact_paths("python my_script.py arg1") == "python my_script.py arg1" + assert redact_paths("python my_script.py arg1 --kwarg1 value1") == "python my_script.py arg1 --kwarg1 value1" + assert redact_paths("python path/to/my_script.py") == f"python {REDACTED_PATH}/my_script.py" + assert redact_paths("python /path/to/my_script.py") == f"python {REDACTED_PATH}/my_script.py" + assert ( + redact_paths("path1/to1/python path2/to2/my_script.py") + == f"{REDACTED_PATH}/python {REDACTED_PATH}/my_script.py" + ) + assert ( + redact_paths("/path1/to1/python /path2/to2/my_script.py") + == f"{REDACTED_PATH}/python {REDACTED_PATH}/my_script.py" + ) + assert ( + redact_paths("/path1/to1/python /path2/to2/my_script.py /pathlike/arg1") + == f"{REDACTED_PATH}/python {REDACTED_PATH}/my_script.py {REDACTED_PATH}/arg1" + ) + assert ( + redact_paths("/path1/to1/python /path2/to2/my_script.py /pathlike/arg1 --kwarg1 /pathlike/value1") + == f"{REDACTED_PATH}/python {REDACTED_PATH}/my_script.py {REDACTED_PATH}/arg1 --kwarg1 {REDACTED_PATH}/value1" + ) + assert ( + redact_paths("/path1/to1/python /path2/to2/my_script.py /pathlike/arg1 --kwarg1=/pathlike/value1") + == f"{REDACTED_PATH}/python {REDACTED_PATH}/my_script.py {REDACTED_PATH}/arg1 --kwarg1={REDACTED_PATH}/value1" + ) + assert ( + redact_paths("/path1/to1/python /path2/to2/my_script.py /pathlike/arg1 --kwarg1='/pathlike/value1'") + == f"{REDACTED_PATH}/python {REDACTED_PATH}/my_script.py {REDACTED_PATH}/arg1 --kwarg1='{REDACTED_PATH}/value1'" + ) + + def test_json_to_dot_paths(): assert json_to_dot_paths({"a": {"b": {"c": 1}}}) == {f"{RAY_METADATA_PREFIX}.a.b.c": 1} assert json_to_dot_paths({"a": [1, 2, 3]}) == {f"{RAY_METADATA_PREFIX}.a": "[1, 2, 3]"} @@ -22,4 +58,5 @@ def test_json_to_dot_paths(): f"{RAY_METADATA_PREFIX}.a.b.c": 1, f"{RAY_METADATA_PREFIX}.a.b.d": "[1, 2]", } - assert json_to_dot_paths(1) == {f"{RAY_METADATA_PREFIX}": 1} + assert json_to_dot_paths(1) == {} + assert json_to_dot_paths([1, 2, 3]) == {} From b48fd0e9210e5abae8b138a6b91ef9b857c97a7b Mon Sep 17 00:00:00 2001 From: Imran Hendley Date: Wed, 1 Oct 2025 16:15:00 -0400 Subject: [PATCH 53/59] fix merge --- ddtrace/contrib/internal/ray/patch.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ddtrace/contrib/internal/ray/patch.py b/ddtrace/contrib/internal/ray/patch.py index af532ff19c9..d81034243a2 100644 --- a/ddtrace/contrib/internal/ray/patch.py +++ b/ddtrace/contrib/internal/ray/patch.py @@ -25,6 +25,7 @@ from ddtrace.internal.logger import get_logger from ddtrace.internal.schema import schematize_service_name from ddtrace.internal.utils import get_argument_value +from ddtrace.internal.utils.formats import asbool from ddtrace.propagation.http import _TraceContext from .constants import DD_RAY_TRACE_CTX @@ -78,9 +79,8 @@ "ray", dict( _default_service=schematize_service_name("ray"), - initial_submit_threshold=_get_config("_DD_TRACE_RAY_INITIAL_SUBMIT_THRESHOLD", default=10.0, modifier=float), - use_entrypoint_as_job_name=_get_config("DD_RAY_USE_ENTRYPOINT_AS_JOB_NAME", default=False, modifier=bool), - redact_entrypoint_paths=_get_config("DD_RAY_REDACT_ENTRYPOINT_PATHS", default=True, modifier=bool), + use_entrypoint_as_job_name=asbool(os.getenv("DD_RAY_USE_ENTRYPOINT_AS_JOB_NAME", default=False)), + redact_entrypoint_paths=asbool(os.getenv("DD_RAY_REDACT_ENTRYPOINT_PATHS", default=True)), ), ) From 0585dd3f9d5fe40814e50c6ddc1535bfcf89efa8 Mon Sep 17 00:00:00 2001 From: Imran Hendley Date: Thu, 2 Oct 2025 01:50:55 -0400 Subject: [PATCH 54/59] add env config var docs --- ddtrace/contrib/internal/ray/__init__.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/ddtrace/contrib/internal/ray/__init__.py b/ddtrace/contrib/internal/ray/__init__.py index cc762a406a0..291eaba7276 100644 --- a/ddtrace/contrib/internal/ray/__init__.py +++ b/ddtrace/contrib/internal/ray/__init__.py @@ -30,6 +30,14 @@ - ``DD_TRACE_EXPERIMENTAL_LONG_RUNNING_FLUSH_INTERVAL``: Interval for resubmitting long-running spans (default: ``120.0`` seconds) +- ``DD_RAY_USE_ENTRYPOINT_AS_JOB_NAME``: Whether to use the job entrypoint as the job name + (default: ``False``). If ``True``, the entrypoint will be used as the job name fall back when + the job name is not specified in the submission ID or metadata. + +- ``DD_RAY_REDACT_ENTRYPOINT_PATHS``: Whether to redact file paths in the job entrypoint + (default: ``True``). If ``True``, file paths in the entrypoint will be redacted to avoid + leaking sensitive information. + Ray service name can be configured by: - specifying in submission ID using ``job:your-job-name`` during job submission:: From 4fba5c4d95bb3cdc47d9462b6c219d6fb76cf794 Mon Sep 17 00:00:00 2001 From: Imran Hendley Date: Thu, 2 Oct 2025 10:12:52 -0400 Subject: [PATCH 55/59] pr feedback cleanup --- ddtrace/contrib/internal/ray/__init__.py | 8 ++++---- ddtrace/contrib/internal/ray/constants.py | 1 + ddtrace/contrib/internal/ray/patch.py | 10 +++++----- ddtrace/contrib/internal/ray/utils.py | 7 +++---- tests/contrib/ray/test_ray_utils.py | 18 +++++++++--------- 5 files changed, 22 insertions(+), 22 deletions(-) diff --git a/ddtrace/contrib/internal/ray/__init__.py b/ddtrace/contrib/internal/ray/__init__.py index 291eaba7276..ba5fc1acbb9 100644 --- a/ddtrace/contrib/internal/ray/__init__.py +++ b/ddtrace/contrib/internal/ray/__init__.py @@ -30,11 +30,11 @@ - ``DD_TRACE_EXPERIMENTAL_LONG_RUNNING_FLUSH_INTERVAL``: Interval for resubmitting long-running spans (default: ``120.0`` seconds) -- ``DD_RAY_USE_ENTRYPOINT_AS_JOB_NAME``: Whether to use the job entrypoint as the job name - (default: ``False``). If ``True``, the entrypoint will be used as the job name fall back when - the job name is not specified in the submission ID or metadata. +- ``DD_TRACE_RAY_USE_ENTRYPOINT_AS_SERVICE_NAME``: Whether to use the job entrypoint as the + service name (default: ``False``). If ``True``, the entrypoint will be used as the service + name if DD_SERVICE is not set and a job name is not specified in the metadata. -- ``DD_RAY_REDACT_ENTRYPOINT_PATHS``: Whether to redact file paths in the job entrypoint +- ``DD_TRACE_RAY_REDACT_ENTRYPOINT_PATHS``: Whether to redact file paths in the job entrypoint (default: ``True``). If ``True``, file paths in the entrypoint will be redacted to avoid leaking sensitive information. diff --git a/ddtrace/contrib/internal/ray/constants.py b/ddtrace/contrib/internal/ray/constants.py index 6caa81411dd..4a7196ff2d7 100644 --- a/ddtrace/contrib/internal/ray/constants.py +++ b/ddtrace/contrib/internal/ray/constants.py @@ -48,3 +48,4 @@ # Special values REDACTED_VALUE = "" +REDACTED_PATH = "" diff --git a/ddtrace/contrib/internal/ray/patch.py b/ddtrace/contrib/internal/ray/patch.py index d81034243a2..5199cd4d744 100644 --- a/ddtrace/contrib/internal/ray/patch.py +++ b/ddtrace/contrib/internal/ray/patch.py @@ -58,8 +58,8 @@ from .utils import _inject_dd_trace_ctx_kwarg from .utils import _inject_ray_span_tags_and_metrics from .utils import extract_signature +from .utils import flatten_metadata_dict from .utils import get_dd_job_name_from_entrypoint -from .utils import json_to_dot_paths from .utils import redact_paths from .utils import set_tag_or_truncate @@ -79,8 +79,8 @@ "ray", dict( _default_service=schematize_service_name("ray"), - use_entrypoint_as_job_name=asbool(os.getenv("DD_RAY_USE_ENTRYPOINT_AS_JOB_NAME", default=False)), - redact_entrypoint_paths=asbool(os.getenv("DD_RAY_REDACT_ENTRYPOINT_PATHS", default=True)), + use_entrypoint_as_service_name=asbool(os.getenv("DD_TRACE_RAY_USE_ENTRYPOINT_AS_SERVICE_NAME", default=False)), + redact_entrypoint_paths=asbool(os.getenv("DD_TRACE_RAY_REDACT_ENTRYPOINT_PATHS", default=True)), ), ) @@ -199,7 +199,7 @@ def traced_submit_job(wrapped, instance, args, kwargs): job_name = config.service or kwargs.get("metadata", {}).get("job_name", "") if not job_name: - if config.ray.use_entrypoint_as_job_name: + if config.ray.use_entrypoint_as_service_name: job_name = get_dd_job_name_from_entrypoint(entrypoint) or DEFAULT_JOB_NAME else: job_name = DEFAULT_JOB_NAME @@ -212,7 +212,7 @@ def traced_submit_job(wrapped, instance, args, kwargs): job_span.set_tag_str(RAY_ENTRYPOINT, entrypoint) metadata = kwargs.get("metadata", {}) - dot_paths = json_to_dot_paths(metadata) + dot_paths = flatten_metadata_dict(metadata) for k, v in dot_paths.items(): set_tag_or_truncate(job_span, k, v) diff --git a/ddtrace/contrib/internal/ray/utils.py b/ddtrace/contrib/internal/ray/utils.py index cc6c9958d22..3e55ddb4cd5 100644 --- a/ddtrace/contrib/internal/ray/utils.py +++ b/ddtrace/contrib/internal/ray/utils.py @@ -35,6 +35,7 @@ from .constants import RAY_SUBMISSION_ID_TAG from .constants import RAY_TASK_ID from .constants import RAY_WORKER_ID +from .constants import REDACTED_PATH from .constants import REDACTED_VALUE @@ -46,8 +47,6 @@ # then the job name will be woof ENTRY_POINT_REGEX = re.compile(r"([^\s\/\\]+)\.py") -REDACTED_PATH = "" - def _inject_dd_trace_ctx_kwarg(method: Callable) -> Signature: old_sig = inspect.signature(method) @@ -139,7 +138,7 @@ def get_dd_job_name_from_entrypoint(entrypoint: str): return None -def redact_paths(s): +def redact_paths(s: str) -> str: """ Redact path-like substrings from an entry-point string. Uses os.sep (and os.altsep if present) to detect paths; preserves spacing. @@ -186,7 +185,7 @@ def _redact_token(tok) -> str: return "".join(part if part.strip() == "" else _redact_token(part) for part in parts) -def json_to_dot_paths(data): +def flatten_metadata_dict(data: dict) -> Dict[str, Any]: """ Converts a JSON (or Python dictionary) structure into a dict mapping dot-notation paths to leaf values, with keys prefixed once by RAY_METADATA_PREFIX. diff --git a/tests/contrib/ray/test_ray_utils.py b/tests/contrib/ray/test_ray_utils.py index 09459971d03..e934ac0ed88 100644 --- a/tests/contrib/ray/test_ray_utils.py +++ b/tests/contrib/ray/test_ray_utils.py @@ -1,7 +1,7 @@ from ddtrace.contrib.internal.ray.constants import RAY_METADATA_PREFIX -from ddtrace.contrib.internal.ray.utils import REDACTED_PATH +from ddtrace.contrib.internal.ray.constants import REDACTED_PATH +from ddtrace.contrib.internal.ray.utils import flatten_metadata_dict from ddtrace.contrib.internal.ray.utils import get_dd_job_name_from_entrypoint -from ddtrace.contrib.internal.ray.utils import json_to_dot_paths from ddtrace.contrib.internal.ray.utils import redact_paths @@ -47,16 +47,16 @@ def test_redact_paths(): ) -def test_json_to_dot_paths(): - assert json_to_dot_paths({"a": {"b": {"c": 1}}}) == {f"{RAY_METADATA_PREFIX}.a.b.c": 1} - assert json_to_dot_paths({"a": [1, 2, 3]}) == {f"{RAY_METADATA_PREFIX}.a": "[1, 2, 3]"} - assert json_to_dot_paths({"a": {"b": 1}, "c": 2}) == { +def test_flatten_metadata_dict(): + assert flatten_metadata_dict({"a": {"b": {"c": 1}}}) == {f"{RAY_METADATA_PREFIX}.a.b.c": 1} + assert flatten_metadata_dict({"a": [1, 2, 3]}) == {f"{RAY_METADATA_PREFIX}.a": "[1, 2, 3]"} + assert flatten_metadata_dict({"a": {"b": 1}, "c": 2}) == { f"{RAY_METADATA_PREFIX}.a.b": 1, f"{RAY_METADATA_PREFIX}.c": 2, } - assert json_to_dot_paths({"a": {"b": {"c": 1, "d": [1, 2]}}}) == { + assert flatten_metadata_dict({"a": {"b": {"c": 1, "d": [1, 2]}}}) == { f"{RAY_METADATA_PREFIX}.a.b.c": 1, f"{RAY_METADATA_PREFIX}.a.b.d": "[1, 2]", } - assert json_to_dot_paths(1) == {} - assert json_to_dot_paths([1, 2, 3]) == {} + assert flatten_metadata_dict(1) == {} + assert flatten_metadata_dict([1, 2, 3]) == {} From ac5fe3a9dc524e5523b1bef2bba4c4c14863d557 Mon Sep 17 00:00:00 2001 From: Imran Hendley Date: Thu, 2 Oct 2025 10:25:16 -0400 Subject: [PATCH 56/59] fix flatten_metadata_dict docstring --- ddtrace/contrib/internal/ray/utils.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/ddtrace/contrib/internal/ray/utils.py b/ddtrace/contrib/internal/ray/utils.py index 3e55ddb4cd5..d42225adaae 100644 --- a/ddtrace/contrib/internal/ray/utils.py +++ b/ddtrace/contrib/internal/ray/utils.py @@ -193,8 +193,6 @@ def flatten_metadata_dict(data: dict) -> Dict[str, Any]: - Assumes the top-level is a dictionary. If a list is encountered anywhere, it is stringified with json.dumps and treated as a leaf (no recursion into list elements). - Leaf values (str, int, float, bool, None) are returned as-is as the dict values. - - If the top-level value is a simple primitive (str, int, float, bool, None), - it is returned unchanged. If the top-level is a list, it is stringified. - Returned dict keys are prefixed once with RAY_METADATA_PREFIX. """ From 65f7274883304bb7262da38b0afc1dd1b94316b9 Mon Sep 17 00:00:00 2001 From: Imran Hendley Date: Thu, 2 Oct 2025 10:28:26 -0400 Subject: [PATCH 57/59] style --- ddtrace/contrib/internal/ray/__init__.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ddtrace/contrib/internal/ray/__init__.py b/ddtrace/contrib/internal/ray/__init__.py index ba5fc1acbb9..ebb3d20adb2 100644 --- a/ddtrace/contrib/internal/ray/__init__.py +++ b/ddtrace/contrib/internal/ray/__init__.py @@ -30,12 +30,12 @@ - ``DD_TRACE_EXPERIMENTAL_LONG_RUNNING_FLUSH_INTERVAL``: Interval for resubmitting long-running spans (default: ``120.0`` seconds) -- ``DD_TRACE_RAY_USE_ENTRYPOINT_AS_SERVICE_NAME``: Whether to use the job entrypoint as the - service name (default: ``False``). If ``True``, the entrypoint will be used as the service +- ``DD_TRACE_RAY_USE_ENTRYPOINT_AS_SERVICE_NAME``: Whether to use the job entrypoint as the + service name (default: ``False``). If ``True``, the entrypoint will be used as the service name if DD_SERVICE is not set and a job name is not specified in the metadata. - ``DD_TRACE_RAY_REDACT_ENTRYPOINT_PATHS``: Whether to redact file paths in the job entrypoint - (default: ``True``). If ``True``, file paths in the entrypoint will be redacted to avoid + (default: ``True``). If ``True``, file paths in the entrypoint will be redacted to avoid leaking sensitive information. Ray service name can be configured by: From cdb67b86a364e323a9c87bfe8085a6102e65327e Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Fri, 3 Oct 2025 11:26:23 +0200 Subject: [PATCH 58/59] change doc --- ddtrace/contrib/internal/ray/__init__.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ddtrace/contrib/internal/ray/__init__.py b/ddtrace/contrib/internal/ray/__init__.py index 235a4deb543..b250f388004 100644 --- a/ddtrace/contrib/internal/ray/__init__.py +++ b/ddtrace/contrib/internal/ray/__init__.py @@ -56,7 +56,10 @@ - specifying ``DD_SERVICE`` when initializing your Ray cluster. -By default, the service name will be the name of your entrypoint +- setting ``DD_TRACE_RAY_USE_ENTRYPOINT_AS_SERVICE_NAME=True``. In this case, the service +name will be the name of your entrypoint script. + +By default, the service name will be ``unnamed.ray.job``. Notes ~~~~~ From 8f712b412e1cfb911708cdb8df411a6b2c0a78fe Mon Sep 17 00:00:00 2001 From: Louis Tricot Date: Fri, 3 Oct 2025 11:54:40 +0200 Subject: [PATCH 59/59] fixing docs --- ddtrace/contrib/internal/ray/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ddtrace/contrib/internal/ray/__init__.py b/ddtrace/contrib/internal/ray/__init__.py index b250f388004..292aaa7fd00 100644 --- a/ddtrace/contrib/internal/ray/__init__.py +++ b/ddtrace/contrib/internal/ray/__init__.py @@ -57,7 +57,7 @@ - specifying ``DD_SERVICE`` when initializing your Ray cluster. - setting ``DD_TRACE_RAY_USE_ENTRYPOINT_AS_SERVICE_NAME=True``. In this case, the service -name will be the name of your entrypoint script. + name will be the name of your entrypoint script. By default, the service name will be ``unnamed.ray.job``.