Skip to content

[bug][pyroscope] Pyroscope does not ingest Speedscope files with multiple profiles #3989

Open
@lagutrop

Description

@lagutrop

Describe the bug

I've been using Pyroscope version 0.37.2 for a couple of months and decided to upgrade to the new version of Pyroscope (1.12). In the above version it was possible to call the ingest endpoint (POST localhost:4040/ingest?name=MyServiceName&from=1741682023&until=1741682083&format=speedscope) with multiple profiles like the example that you provide in your TestData folder.
Now with the upgrade to 1.12.0, I'm getting the following error

{
    "code": "unknown",
    "message": "invalid_argument: pyroscopeIngesterAdapter failed to convert metadata: unknown profile type: seconds"
}

To Reproduce

Use the last release build 1.12.0 and call the following endpoint in Postman for example

POST localhost:4040/ingest?name=MyServiceName&from=1741682023&until=1741682083&format=speedscope

In body select Raw and insert the following Speedscope

{
  "exporter": "speedscope@0.6.0",
  "$schema": "https://www.speedscope.app/file-format-schema.json",
  "name": "Two Samples",
  "activeProfileIndex": 1,
  "profiles": [
    {
      "type": "sampled",
      "name": "one",
      "unit": "seconds",
      "startValue": 0,
      "endValue": 14,
      "samples": [
        [0, 1, 2],
        [0, 1, 2],
        [0, 1, 3],
        [0, 1, 2],
        [0, 1]
      ],
      "weights": [1, 1, 4, 3, 5]
    },
    {
      "type": "sampled",
      "name": "two",
      "unit": "seconds",
      "startValue": 0,
      "endValue": 14,
      "samples": [
        [0, 1, 2],
        [0, 1, 2],
        [0, 1, 3],
        [0, 1, 2],
        [0, 1]
      ],
      "weights": [1, 1, 4, 3, 5]
    }
  ],
  "shared": {
    "frames": [
      { "name": "a" },
      { "name": "b" },
      { "name": "c" },
      { "name": "d" }
    ]
  }
}

The following error will appear, with status code 422 Unprocessable Entity.

{
    "code": "unknown",
    "message": "invalid_argument: pyroscopeIngesterAdapter failed to convert metadata: unknown profile type: seconds"
}

Expected behavior

The ingest endpoint should process this speedscope file correctly, since it is one of the files provided in TestData folder (https://github.com/grafana/pyroscope/blob/main/pkg/og/convert/speedscope/testdata/two-sampled.speedscope.json).

Environment

  • Infrastructure: Docker
  • Deployment tool: Docker-compose with image 1.12.0

Additional Context

2025-03-11 08:35:13 ts=2025-03-11T08:35:13.851202454Z caller=http.go:285 level=warn traceID=6804a615f0d03319 msg="POST /ingest?name=Postman1&from=1741682023&until=1741682083&format=speedscope (422) 841.156µs Response: "{\"code\":\"unknown\",\"message\":\"invalid_argument: pyroscopeIngesterAdapter failed to convert metadata: unknown profile type: seconds\"}\n" ws: false; Accept: /; Accept-Encoding: gzip, deflate, br; Connection: keep-alive; Content-Length: 914; Content-Type: application/json; Postman-Token: 7c16899e-266b-436f-9696-2b7ce78ab190; User-Agent: PostmanRuntime/7.43.0; "

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