Skip to content

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

@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": "[email protected]",
  "$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

Labels

type/bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions