Skip to content

[feat][es/os] Add missing link and scope fields in dbmodel#8473

Draft
Manik2708 wants to merge 31 commits into
jaegertracing:mainfrom
Manik2708:es-scope
Draft

[feat][es/os] Add missing link and scope fields in dbmodel#8473
Manik2708 wants to merge 31 commits into
jaegertracing:mainfrom
Manik2708:es-scope

Conversation

@Manik2708

@Manik2708 Manik2708 commented May 3, 2026

Copy link
Copy Markdown
Contributor

Which problem is this PR solving?

Description of the changes

  • Add scope tags and missing link fields (attributes, tracestate and flags).

Migration Guide: Manual Mapping Updates for Scope and Link Attributes

The first step of the migration guide is optional for every user but second step is mandatory for the users who have turned CreateIndexTemplates off and are managing the mappings manually.

1. Update Existing Indices

You can apply these updates to your current active index using the _mapping API.

💡 Note: Unlike the Template API, the _mapping API is a merge operation by default; existing fields will not be affected. We include dynamic_templates so that new attributes appearing in the current index are correctly mapped.

Note: Replace jaeger-span-YYYY-MM-DD with your actual current index name.

The reason why it is optional is because if you will not do this then you will not be able to see the changes even after upgrading jaeger because jaeger will update the template not mapping which will be reflected in the mappings created in the future. So do this only if you want changes in your present mappings too.

curl -X PUT "http://localhost:9200/jaeger-span-YYYY-MM-DD/_mapping" -H 'Content-Type: application/json' -d'
{
  "dynamic_templates": [
    {
      "scope_tags_map": {
        "path_match": "scopeTag.*",
        "mapping": { "type": "keyword", "ignore_above": 256 }
      }
    }
  ],
  "properties": {
    "scopeTag": { "type": "object" },
    "scopeTags": {
      "type": "nested",
      "dynamic": false,
      "properties": {
        "key": { "type": "keyword", "ignore_above": 256 },
        "value": { "type": "keyword", "ignore_above": 256 },
        "type": { "type": "keyword", "ignore_above": 256 }
      }
    },
    "references": {
      "type": "nested",
      "properties": {
        "traceState": { "type": "keyword", "ignore_above": 256 },
        "flags": { "type": "integer" },
        "tags": {
          "type": "nested",
          "dynamic": false,
          "properties": {
            "key": { "type": "keyword", "ignore_above": 256 },
            "value": { "type": "keyword", "ignore_above": 256 },
            "type": { "type": "keyword", "ignore_above": 256 }
          }
        }
      }
    }
  }
}'

2. Update Index Templates (For Future Indices)

This guide provides the specific Elasticsearch API calls required for users who manage their own mappings (CreateIndexTemplates=false). These updates enable storage for the new OpenTelemetry Instrumentation Scope and Span Link attributes.

⚠️ WARNING: The Elasticsearch Template API is a full replacement operation. If you send only the snippet below, it will delete your existing Jaeger mappings (like operationName, startTime, etc.).

You must MERGE these changes into your existing template definition.

Steps to Update:

  1. Fetch your current template:
    curl -s "http://localhost:9200/_index_template/jaeger-span" | jq ' .index_templates[0].index_template' > full_template.json
  2. Merge the following fields into the mappings section of your full_template.json:
{
  "dynamic_templates": [
    /* Add these to your existing dynamic_templates list */
    {
      "scope_tags_map": {
        "path_match": "scopeTag.*",
        "mapping": { "type": "keyword", "ignore_above": 256 }
      }
    }
  ],
  "properties": {
    /* Add these to your existing root properties */
    "scopeTag": { "type": "object" },
    "scopeTags": {
      "type": "nested",
      "dynamic": false,
      "properties": {
        "key": { "type": "keyword", "ignore_above": 256 },
        "value": { "type": "keyword", "ignore_above": 256 },
        "type": { "type": "keyword", "ignore_above": 256 }
      }
    },
    /* Update your existing references block with these new fields */
    "references": {
      "type": "nested",
      "properties": {
        /* ... keep your existing refType, traceID, spanID ... */
        "traceState": { "type": "keyword", "ignore_above": 256 },
        "flags": { "type": "integer" },
        "tags": {
          "type": "nested",
          "dynamic": false,
          "properties": {
            "key": { "type": "keyword", "ignore_above": 256 },
            "value": { "type": "keyword", "ignore_above": 256 },
            "type": { "type": "keyword", "ignore_above": 256 }
          }
        }
      }
    }
  }
}
  1. Upload the full updated template:
    curl -X PUT "http://localhost:9200/_index_template/jaeger-span" -H 'Content-Type: application/json' -d @full_template.json

Verification

Verify the update by checking the mapping of any index:

curl -s "http://localhost:9200/jaeger-span-*/_mapping" | jq '.. | .scopeTags?'

How was this change tested?

  • Integration and Mannual Testing

Mannual Testing

This testing was done to ensure that the query changes are running fine on old data. For this, 1000 traces were sent to jaeger and then a query related to attributes was run to see the number of traces, the result was:

 jaeger git:(main) ✗ curl -s 'http://localhost:16686/api/traces?service=tracegen&tags=%7B%22attr_28%22%3A%22val_989%22%7D' | jq '.data | length'
1

Then this same query was run after changing the branch, rebuilding the jaeger and resending the 1000 traces

jaeger git:(es-scope) ✗ curl -s 'http://localhost:16686/api/traces?service=tracegen&tags=%7B%22attr_28%22%3A%22val_989%22%7D' | jq '.data | length'
2

The change of output from 1 to 2 shows that query ran fine without any error on old data too.

Checklist

AI Usage in this PR (choose one)

See AI Usage Policy.

  • None: No AI tools were used in creating this PR
  • Light: AI provided minor assistance (formatting, simple suggestions)
  • Moderate: AI helped with code generation or debugging specific parts (In generating migration guide)
  • Heavy: AI generated most or all of the code changes

Manik2708 added 4 commits May 3, 2026 14:47
Signed-off-by: Manik Mehta <mehtamanik96@gmail.com>
Signed-off-by: Manik Mehta <mehtamanik96@gmail.com>
Signed-off-by: Manik Mehta <mehtamanik96@gmail.com>
Signed-off-by: Manik Mehta <mehtamanik96@gmail.com>
Copilot AI review requested due to automatic review settings May 3, 2026 11:52
@Manik2708 Manik2708 requested a review from a team as a code owner May 3, 2026 11:52
Manik2708 added 2 commits May 3, 2026 17:23
Signed-off-by: Manik Mehta <mehtamanik96@gmail.com>
@Manik2708

Copy link
Copy Markdown
Contributor Author

Some notes to the reviewer:

  1. The production changes are small but most of the changes are from changing tests and fixtures.
  2. I had the option to break it into separate link and scope issues but then 1 migration guide is better than 2 so I decided to do it in one change.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR addresses ES/OS v2 trace model gaps by adding storage/roundtrip support for OpenTelemetry Instrumentation Scope attributes and Span Link fields (attributes, tracestate, flags), and updates ES query construction so these new fields are searchable (including compatibility handling for older indices).

Changes:

  • Extend ES v2 dbmodel to include Span.ScopeTags/ScopeTag and Reference.TraceState/Flags/Tags/Tag.
  • Update OTLP <-> DB model translation to preserve scope attributes and link fields.
  • Expand ES tag querying fixtures/logic and enable previously skipped integration tests for scope/link attributes.

Reviewed changes

Copilot reviewed 17 out of 17 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
internal/storage/v2/elasticsearch/tracestore/to_dbmodel.go Persist scope attributes on spans and link tracestate/flags/attributes on references.
internal/storage/v2/elasticsearch/tracestore/from_dbmodel.go Restore scope attributes and link tracestate/flags/attributes back into OTLP traces.
internal/storage/v2/elasticsearch/tracestore/fixtures/otel_traces_01.json Add scope attributes and link tracestate/flags/tags to OTLP fixture.
internal/storage/v2/elasticsearch/tracestore/fixtures/es_01.json Update ES span fixture to include scopeTags and reference link fields.
internal/storage/v2/elasticsearch/tracestore/fixtures/es_01_string_tags.json Same as above for string-encoded tag values.
internal/storage/v2/elasticsearch/tracestore/core/reader.go Expand tag query fields to include scope/reference tags; add ignore_unmapped for new nested paths; merge tags for new fields.
internal/storage/v2/elasticsearch/tracestore/core/fixtures/query_01.json Update expected ES query JSON to include scope/reference tag queries.
internal/storage/v2/elasticsearch/tracestore/core/fixtures/query_02.json Same for regex query fixture.
internal/storage/v2/elasticsearch/tracestore/core/fixtures/query_03.json Same for escaped-regex query fixture.
internal/storage/v2/elasticsearch/tracestore/core/dbmodel/model.go Add new dbmodel fields for scope tags and link fields.
internal/storage/v1/elasticsearch/mappings/jaeger-span-6.json Add mappings for scopeTag/scopeTags and reference traceState/flags/tags.
internal/storage/v1/elasticsearch/mappings/jaeger-span-7.json Same mapping updates for ES7.
internal/storage/v1/elasticsearch/mappings/jaeger-span-8.json Same mapping updates for ES8.
internal/storage/v1/elasticsearch/mappings/fixtures/jaeger-span-6.json Update mapping fixture snapshot.
internal/storage/v1/elasticsearch/mappings/fixtures/jaeger-span-7.json Update mapping fixture snapshot.
internal/storage/v1/elasticsearch/mappings/fixtures/jaeger-span-8.json Update mapping fixture snapshot.
internal/storage/integration/capabilities/capabilities.go Stop skipping scope/link attribute integration tests for ES/OS.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread internal/storage/v2/elasticsearch/tracestore/to_dbmodel.go
Comment thread internal/storage/v2/elasticsearch/tracestore/core/reader.go Outdated
Comment thread internal/storage/v2/elasticsearch/tracestore/core/reader.go Outdated
Comment thread internal/storage/v2/elasticsearch/tracestore/core/dbmodel/model.go Outdated
Manik2708 added 4 commits May 3, 2026 17:30
Signed-off-by: Manik Mehta <mehtamanik96@gmail.com>
Signed-off-by: Manik Mehta <mehtamanik96@gmail.com>
Signed-off-by: Manik Mehta <mehtamanik96@gmail.com>
Signed-off-by: Manik Mehta <mehtamanik96@gmail.com>
Copilot AI review requested due to automatic review settings May 3, 2026 12:16

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 20 out of 20 changed files in this pull request and generated 6 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread internal/storage/v1/elasticsearch/mappings/jaeger-span-8.json Outdated
Comment thread internal/storage/v1/elasticsearch/mappings/fixtures/jaeger-span-8.json Outdated
Comment thread internal/storage/v1/elasticsearch/mappings/jaeger-span-7.json Outdated
Comment thread internal/storage/v1/elasticsearch/mappings/fixtures/jaeger-span-7.json Outdated
Comment thread internal/storage/v1/elasticsearch/mappings/jaeger-span-6.json Outdated
Comment thread internal/storage/v1/elasticsearch/mappings/fixtures/jaeger-span-6.json Outdated
@codecov

codecov Bot commented May 3, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 98.31933% with 2 lines in your changes missing coverage. Please review.
✅ Project coverage is 96.57%. Comparing base (393f160) to head (09e09a1).
⚠️ Report is 21 commits behind head on main.

Files with missing lines Patch % Lines
internal/storage/v1/elasticsearch/factory.go 91.66% 1 Missing and 1 partial ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #8473      +/-   ##
==========================================
+ Coverage   96.56%   96.57%   +0.01%     
==========================================
  Files         331      332       +1     
  Lines       17566    17681     +115     
==========================================
+ Hits        16963    17076     +113     
- Misses        454      455       +1     
- Partials      149      150       +1     
Flag Coverage Δ
badger_direct 8.87% <0.00%> (-0.08%) ⬇️
badger_e2e 1.03% <0.00%> (-0.01%) ⬇️
cassandra-4.x-direct-manual 14.43% <0.00%> (-0.13%) ⬇️
cassandra-4.x-e2e-auto 1.02% <0.00%> (-0.01%) ⬇️
cassandra-4.x-e2e-manual 1.02% <0.00%> (-0.01%) ⬇️
cassandra-5.x-direct-manual 14.43% <0.00%> (-0.13%) ⬇️
cassandra-5.x-e2e-auto 1.02% <0.00%> (-0.01%) ⬇️
cassandra-5.x-e2e-manual 1.02% <0.00%> (-0.01%) ⬇️
clickhouse-direct 8.90% <0.00%> (-0.08%) ⬇️
clickhouse-e2e 1.15% <0.00%> (-0.01%) ⬇️
elasticsearch-6.x-direct 17.07% <42.85%> (+0.19%) ⬆️
elasticsearch-7.x-direct 17.10% <42.85%> (+0.19%) ⬆️
elasticsearch-8.x-direct 17.25% <42.85%> (+0.19%) ⬆️
elasticsearch-8.x-e2e 1.03% <0.00%> (-0.01%) ⬇️
elasticsearch-9.x-e2e 1.03% <0.00%> (-0.01%) ⬇️
grpc_direct 7.83% <0.00%> (-0.07%) ⬇️
grpc_e2e 1.03% <0.00%> (-0.01%) ⬇️
kafka-3.x-v2 1.03% <0.00%> (-0.01%) ⬇️
memory_v2 1.03% <0.00%> (-0.01%) ⬇️
opensearch-1.x-direct 17.14% <42.85%> (+0.19%) ⬆️
opensearch-2.x-direct 17.14% <42.85%> (+0.19%) ⬆️
opensearch-2.x-e2e 1.03% <0.00%> (-0.01%) ⬇️
opensearch-3.x-e2e 1.03% <0.00%> (-0.01%) ⬇️
query 1.03% <0.00%> (-0.01%) ⬇️
tailsampling-processor 0.54% <0.00%> (-0.01%) ⬇️
unittests 94.92% <98.31%> (+0.05%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Signed-off-by: Manik Mehta <mehtamanik96@gmail.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 20 out of 20 changed files in this pull request and generated 2 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread internal/storage/v2/elasticsearch/tracestore/to_dbmodel.go
Comment thread internal/storage/v2/elasticsearch/tracestore/to_dbmodel.go
@yurishkuro

Copy link
Copy Markdown
Member

I feel like this is a very unfriendly approach for the user. My preference would be

  1. When the new Jaeger version starts it checks if the mapping contains the new settings for the scope (and btw is it just scope or are we making fully OTEL-compatible schema change once?). If they are missing the binary should crash and ask the user to run a migration script.
  2. The migration script applies the schema changes automatically (unless users are using manual templates). It could be a one-off python script, for example.
  3. We can release all of this as a breaking change without actually writing the data in the new OTEL format.

@github-actions github-actions Bot added the waiting-for-author PR is waiting for author to respond to maintainer's comments label May 3, 2026
@Manik2708

Copy link
Copy Markdown
Contributor Author

I feel like this is a very unfriendly approach for the user. My preference would be

1. When the new Jaeger version starts it checks if the mapping contains the new settings for the scope (and btw is it just scope or are we making fully OTEL-compatible schema change once?). If they are missing the binary should crash and ask the user to run a migration script.

2. The migration script applies the schema changes automatically (unless users are using manual templates). It could be a one-off python script, for example.

3. We can release all of this as a breaking change without actually writing the data in the new OTEL format.

Just two questions: where should that script be placed and how it should be pointed for the users (I mean should we provide the PR link in the error?)

@github-actions github-actions Bot removed the waiting-for-author PR is waiting for author to respond to maintainer's comments label May 3, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 31 out of 31 changed files in this pull request and generated 4 comments.

Comment thread internal/storage/elasticsearch/wrapper/wrapper.go Outdated
Comment on lines +295 to +298
// Check for scopeTag (Scope attributes)
if _, ok = properties["scopeTag"]; !ok {
return fmt.Errorf("template %q is missing 'scopeTag' field; please update mappings", templateName)
}
Comment thread internal/storage/elasticsearch/estesting/helper.go Outdated
@Manik2708 Manik2708 requested a review from yurishkuro May 11, 2026 11:09
Signed-off-by: Manik Mehta <mehtamanik96@gmail.com>
Signed-off-by: Manik Mehta <mehtamanik96@gmail.com>
Copilot AI review requested due to automatic review settings May 15, 2026 07:58
@Manik2708

Copy link
Copy Markdown
Contributor Author

@yurishkuro a gentle reminder to review the pr

Manik2708 added 4 commits May 16, 2026 16:29
Signed-off-by: Manik Mehta <mehtamanik96@gmail.com>
Signed-off-by: Manik Mehta <mehtamanik96@gmail.com>
@mahadzaryab1

Copy link
Copy Markdown
Collaborator

@Manik2708 I'll help with reviewing this PR and have the following suggestions to break it down to make it easier to review:

  • The migration script can be in a separate PR
  • Changes to the mock server in a separate PR
  • Index template changes in a separate PRs (these changes are purely additive so we should be able to land them independently)
  • Separate PRs for scope and links

Try to open prequel PRs that set up the preparation for this change before making the breaking change itself.

@github-actions github-actions Bot added the waiting-for-author PR is waiting for author to respond to maintainer's comments label May 25, 2026
@Manik2708

Copy link
Copy Markdown
Contributor Author

@Manik2708 I'll help with reviewing this PR and have the following suggestions to break it down to make it easier to review:

  • The migration script can be in a separate PR
  • Changes to the mock server in a separate PR
  • Index template changes in a separate PRs (these changes are purely additive so we should be able to land them independently)
  • Separate PRs for scope and links

Try to open prequel PRs that set up the preparation for this change before making the breaking change itself.

Hey, thanks for the reply! My reason of raising one PR as a whole was to test manually on some points, for example turning off the CreateIndexTemplates and seeing if jaeger is crashing right or not and then running the script and rechecking running jaeger (I have uploaded two videos too as a proof). So now how will we testing the PRs? Take an example of migration script, should I write e2e tests for the script? Similar for changes of template.

@github-actions github-actions Bot removed the waiting-for-author PR is waiting for author to respond to maintainer's comments label May 26, 2026
@mahadzaryab1

Copy link
Copy Markdown
Collaborator

@Manik2708 I'll help with reviewing this PR and have the following suggestions to break it down to make it easier to review:

  • The migration script can be in a separate PR
  • Changes to the mock server in a separate PR
  • Index template changes in a separate PRs (these changes are purely additive so we should be able to land them independently)
  • Separate PRs for scope and links

Try to open prequel PRs that set up the preparation for this change before making the breaking change itself.

Hey, thanks for the reply! My reason of raising one PR as a whole was to test manually on some points, for example turning off the CreateIndexTemplates and seeing if jaeger is crashing right or not and then running the script and rechecking running jaeger (I have uploaded two videos too as a proof). So now how will we testing the PRs? Take an example of migration script, should I write e2e tests for the script? Similar for changes of template.

I don't think we need e2e tests for the migration script. A manual test should be sufficient. You can spin up an instance of ES and run the migration script it against it and add the results to the PR description.

@github-actions github-actions Bot added the waiting-for-author PR is waiting for author to respond to maintainer's comments label May 26, 2026
@Manik2708

Manik2708 commented May 26, 2026

Copy link
Copy Markdown
Contributor Author

@Manik2708 I'll help with reviewing this PR and have the following suggestions to break it down to make it easier to review:

  • The migration script can be in a separate PR
  • Changes to the mock server in a separate PR
  • Index template changes in a separate PRs (these changes are purely additive so we should be able to land them independently)
  • Separate PRs for scope and links

Try to open prequel PRs that set up the preparation for this change before making the breaking change itself.

Hey, thanks for the reply! My reason of raising one PR as a whole was to test manually on some points, for example turning off the CreateIndexTemplates and seeing if jaeger is crashing right or not and then running the script and rechecking running jaeger (I have uploaded two videos too as a proof). So now how will we testing the PRs? Take an example of migration script, should I write e2e tests for the script? Similar for changes of template.

I don't think we need e2e tests for the migration script. A manual test should be sufficient. You can spin up an instance of ES and run the migration script it against it and add the results to the PR description.

@mahadzaryab1 I am thinking of 4 PRs as following:

  1. Index Template Changes
  2. Migration script
  3. Reader changes
  4. Verify Span Mapping and crash jaeger if template doesn't consist scope/link fields (breaking change in this PR)
    The reason of this is because only the last thing will be a breaking change, does this plan seems right to you?

@github-actions github-actions Bot removed the waiting-for-author PR is waiting for author to respond to maintainer's comments label May 26, 2026
@mahadzaryab1

Copy link
Copy Markdown
Collaborator

@Manik2708 I'll help with reviewing this PR and have the following suggestions to break it down to make it easier to review:

  • The migration script can be in a separate PR
  • Changes to the mock server in a separate PR
  • Index template changes in a separate PRs (these changes are purely additive so we should be able to land them independently)
  • Separate PRs for scope and links

Try to open prequel PRs that set up the preparation for this change before making the breaking change itself.

Hey, thanks for the reply! My reason of raising one PR as a whole was to test manually on some points, for example turning off the CreateIndexTemplates and seeing if jaeger is crashing right or not and then running the script and rechecking running jaeger (I have uploaded two videos too as a proof). So now how will we testing the PRs? Take an example of migration script, should I write e2e tests for the script? Similar for changes of template.

I don't think we need e2e tests for the migration script. A manual test should be sufficient. You can spin up an instance of ES and run the migration script it against it and add the results to the PR description.

@mahadzaryab1 I am thinking of 4 PRs as following:

  1. Index Template Changes
  2. Migration script
  3. Reader changes
  4. Verify Span Mapping and crash jaeger if template doesn't consist scope/link fields (breaking change in this PR)
    The reason of this is because only the last thing will be a breaking change, does this plan seems right to you?

lgtm!

@github-actions github-actions Bot added the waiting-for-author PR is waiting for author to respond to maintainer's comments label May 30, 2026
yurishkuro pushed a commit that referenced this pull request May 31, 2026
## Which problem is this PR solving?
- Pr-requisite of: #8473 

## Description of the changes
- Required changes in index templates as one of the parts of the PR

## How was this change tested?
- Unit Tests

## Checklist
- [x] I have read
https://github.com/jaegertracing/jaeger/blob/main/CONTRIBUTING_GUIDELINES.md
- [x] I have signed all commits
- [x] I have added unit tests for the new functionality
- [x] I have run lint and test steps successfully: `make lint test`

## AI Usage in this PR (choose one)
See [AI Usage
Policy](https://github.com/jaegertracing/jaeger/blob/main/CONTRIBUTING_GUIDELINES.md#ai-usage-policy).
- [x] **None**: No AI tools were used in creating this PR
- [ ] **Light**: AI provided minor assistance (formatting, simple
suggestions)
- [ ] **Moderate**: AI helped with code generation or debugging specific
parts
- [ ] **Heavy**: AI generated most or all of the code changes

Signed-off-by: Manik Mehta <mehtamanik96@gmail.com>
vic-comm pushed a commit to vic-comm/jaeger that referenced this pull request Jun 11, 2026
…ing#8643)

## Which problem is this PR solving?
- Pr-requisite of: jaegertracing#8473

## Description of the changes
- Required changes in index templates as one of the parts of the PR

## How was this change tested?
- Unit Tests

## Checklist
- [x] I have read
https://github.com/jaegertracing/jaeger/blob/main/CONTRIBUTING_GUIDELINES.md
- [x] I have signed all commits
- [x] I have added unit tests for the new functionality
- [x] I have run lint and test steps successfully: `make lint test`

## AI Usage in this PR (choose one)
See [AI Usage
Policy](https://github.com/jaegertracing/jaeger/blob/main/CONTRIBUTING_GUIDELINES.md#ai-usage-policy).
- [x] **None**: No AI tools were used in creating this PR
- [ ] **Light**: AI provided minor assistance (formatting, simple
suggestions)
- [ ] **Moderate**: AI helped with code generation or debugging specific
parts
- [ ] **Heavy**: AI generated most or all of the code changes

Signed-off-by: Manik Mehta <mehtamanik96@gmail.com>
Signed-off-by: Victor Chidera Obiezue <obiezuechidera@gmail.com>
@yurishkuro

Copy link
Copy Markdown
Member

too many merge conflicts

@Manik2708

Copy link
Copy Markdown
Contributor Author

@yurishkuro #8668 is a part of this PR which is blocked due #8691, once we have backward compatibility tests running, it will be easier to merge #8668 and then this PR will be unblocked

@github-actions github-actions Bot removed the waiting-for-author PR is waiting for author to respond to maintainer's comments label Jun 29, 2026
@Manik2708 Manik2708 marked this pull request as draft June 29, 2026 07:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/storage changelog:breaking-change Change that is breaking public APIs or established behavior enhancement storage/elasticsearch

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: ES/OS backend ignore scope and link attributes

4 participants