Skip to content

ERROR:aws_xray_sdk.core.context:cannot find the current segment/subsegment, please make sure you have a segment openΒ #452

@bettygha

Description

@bettygha

``Hi,

I am experiencing an issue with the AWS X-Ray SDK for Python where segments are not being properly created or propagated, resulting in the following exception:

ERROR:aws_xray_sdk.core.context:cannot find the current segment/subsegment, please make sure you have a segment open

The file is being successfully being uploaded in my s3 bucket but the segment is not being traced.

Steps to Reproduce:


import json
import os
import boto3
from aws_xray_sdk.core import xray_recorder
from aws_xray_sdk.core import patch_all
import logging
from botocore.exceptions import NoCredentialsError, PartialCredentialsError
from aws_xray_sdk import global_sdk_config
from boto3.s3.transfer import TransferConfig

patch_all()

logging.basicConfig(level='ERROR')
logging.getLogger('aws_xray_sdk.core').setLevel(logging.ERROR)

.
.
.
.
def generate_and_upload(init, count):
    session = boto3.Session(profile_name=aws_profile_name)
    s3_client = session.client("s3")

    # Create file path
    file_path = os.path.join("generated", "data.json")

    # Write data to the file
    with open(file_path, "w") as file:
        json.dump(
            generate_json_document(init, count),
            file,
            separators=(",", ":"),
            ensure_ascii=False,
        )
        
    xray_recorder.configure(service='data-generator')
    with xray_recorder.in_segment('generate_and_upload') as segment:
        trace_header = segment.trace_id
        print(f"Trace Header: {trace_header}")
        try:
            trnasver_config = TransferConfig(max_concurrency=1)
            s3_client.upload_file(
                file_path,
                f"{bucket}",
                f"{path}",
                ExtraArgs={"Metadata": {"X-Amzn-Trace-Id": trace_header}},
                Config=trnasver_config,
            )
            print(
                f"Uploaded"
            )
        finally:
            xray_recorder.end_segment()

I tried to set os.environ['AWS_XRAY_SDK_ENABLED'] = 'false' and a dummy segment was created, but I am not able to see it in the AWS X-ray console.
I am using Python 3.11.1 and aws-xray-sdk is Version: 2.14.0

I have also tried to set off threading and also have 1 thread. The issue still exist,

@chanchiem
@luzfcb
@heitorlessa

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions