[Bug][Tempo] GET /connections/{id}/teams always fails to decode the teams page, and remote scope search only sees the first 50 teams

Aberta
#9,320 0 comentários 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 2 dias

@ShivamSharma43 já está trabalhando nisso.

Desde 3/11/2026.

  • #9321 de @ShivamSharma43 — aberto

Avaliação

Dificuldade
3/5
Tempo estimado
1-2 dias
Facilidade para iniciantes
25/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
go

Direção de pesquisa

Start with backend/plugins/tempo/api/connection.go (GetTeams) and api/remote.go (searchTempoRemoteTeams); compare their requests with listTempoRemoteTeams and the collectors, which already follow metadata.next. Add coverage using a fake API client for multiple response pages. Done means GetTeams returns every team and remote scope search considers all matching teams; linked PR #9321 is already open.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

Search before asking
  • I had searched in the issues and found no similar issues.
What happened

GET /plugins/tempo/connections/{connectionId}/teams (GetTeams in backend/plugins/tempo/api/connection.go) always fails with failed to unmarshal teams response.

It decodes the GET /4/teams response into []models.TempoTeamResponse, but Tempo v4 returns a page object (PageableTeam: self, metadata, results), not an array. On main (84e3707), decoding such a body with api.UnmarshalResponse into []models.TempoTeamResponse fails with error decoding response from https://api.tempo.io/4/teams: raw response: {"self":...,"metadata":{...},"results":[...]}. Even if it decoded, it would only return the first page (Tempo's default limit is 50).

The remote scope search (searchTempoRemoteTeams in api/remote.go, behind search-remote-scopes) has the same single-request issue. It sends one GET /4/teams?name=... without offset/limit, so it only looks at the first 50 teams the API returns. Its own page/pageSize paging then works on that list, so if more than 50 teams match, the later ones can't be found.

What do you expect to happen

GET /plugins/tempo/connections/{id}/teams returns every team of the Tempo instance, and the remote scope search looks at every matching team. Both should follow metadata.next like listTempoRemoteTeams and the collectors do since #9307.

How to reproduce
  1. Create a Tempo connection.
  2. curl http://localhost:8080/plugins/tempo/connections/1/teams: the request fails with failed to unmarshal teams response.
Anything else

Proposed fix (I have a PR ready): add a listAllTempoTeams helper in api/remote.go that pages through GET /4/teams with offset/limit until metadata.next is absent. Use it in GetTeams and in searchTempoRemoteTeams, and add unit tests with a fake API client.

Version

main

Are you willing to submit PR?
  • Yes I am willing to submit a PR!
Code of Conduct
Linguagem predominante
Go
Estrelas
3.2k
Forks
832
Merge médio
1d 21h
PRs com merge (30d)
78

Preparar o ambiente

Abrir no Codespaces

Inicia o contêiner de desenvolvimento do projeto no navegador, com a sua própria conta do GitHub.

  • Sem Dockerfile nem arquivo Docker Compose
  • Tem um modelo de pull request
  • Sem guia de contribuição

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de apache/devlake

Todas as issues de apache/devlake

Issues semelhantes

Mais issues de Go

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.