Repository navigation
Tratar redirect em escritas como resultado incerto TG-274 - #16
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
US #274, fase 4 da taiga-cli (épico #242). Nenhuma escrita curada já enviada sai mais com exit 7 (repetível) quando a resposta é redirect 3xx. Vale também para rede depois de aberta a conexão e para 5xx. Exit 7 fica para leitura pura, para conexão que nem abriu (DNS, conexão recusada) e para
taiga apie login, que não têm como conferir. A CLI continua sem seguirLocation.Levantamento
story update/close(bloqueio, swimlane, campos)unexpected_redirect, exit 7story_update_unconfirmed(1)story updatecom responsáveisversionseguintestory_update_unconfirmed(1)story field setversionseguinte (como na task)story_update_unconfirmed(1)story commentcomment_unconfirmed(1)story create(com ou sem--epic)story_create_unconfirmed(1)attachment uploadattachment_unconfirmed(1)field create(e campo doproject apply)field_create_unconfirmed(1)project apply: statusstatus_create_unconfirmed(1)project apply: reordenaçãostatus_order_unconfirmed(1)task create/update/close/field set,epic link,DELETEda troca de épicotask commentcomment_unconfirmed(1)Decisões
uncertain(err), para story e task:kind.confirmUncertainekind.unsuresaíram. O PATCH de story passa a conferir por releitura também em 5xx e rede, que antes davam exit 7.story create, comentário de story e de task, anexo,field createe status doproject apply. Resposta inconclusiva nunca vira sucesso, mesmo com a candidata encontrada, e o recovery não sugere criar de novo. Isso muda o contrato documentado de comentário e anexo, que antes davam sucesso quando achavam a escrita (também em 5xx). Corpo perdido depois de um 2xx continua sucesso: a gravação é certa.story createlêusers/mee as stories desta conta antes doPOST(baseline sem relógio, como a task). Candidata é uma story nova desta conta com o mesmo subject.findTaskvirouunconfirmedCreate, compartilhado por story e task.Revisão adversarial
A revisão encontrou quatro pontos, nenhum crítico. Os quatro foram corrigidos, cada um com um teste que antes falhava:
project applysaía com exit 7 quando uma leitura falhava depois de ações já aplicadas. Agora saiproject_apply_interrupted(exit 1), com o código original nacause.PATCHrecusado porversioncuja releitura para a nova tentativa falhava saía como*_update_unconfirmed("may have been applied"). Agora sai o erro dessa leitura (taiga.RefusedWriteError), porque nada foi gravado.cause. Agora sai "redirect not followed". O fake dos testes passou a mandarLocatione esse corpo também no caso não aplicado.story create --epicincerto não citava o épico. Agora indicataiga epic link EPIC REF.Rodada 1 da revisão
A revisão apontou um caso no
project apply. O POST do status na primeira ação recebia 201 com o corpo perdido e a releitura de conferência falhava (3xx, 5xx ou rede). A CLI saía com o erro dessa leitura, exit 7, e o status já estava gravado. Agora o 400 de nome duplicado, que é recusa, é tratado separado do corpo perdido depois de 2xx, e o segundo caso saiwrite_applied(exit 1). Testes novos, de unidade e de integração, falham sem a correção. Nas demais escritas o caso já terminava em exit 1.Testes
go test -race ./...,go vetegolangci-lint(com e sem--build-tags integration): verdes.TestEveryCuratedWriteRedirectIsUncertain(unidade): 15 escritas × 301/302/303/307/308 × aplicado e não aplicado. O teste fixa exit, código, envio único, stdout vazio na falha eLocationnunca citado. Fica vermelho nomainpara cada escrita alterada.TestIntegrationCuratedWritesRedirectIsUncertain(Taiga local): 20 escritas, aplicado e não aplicado, por um proxy que responde 302 comLocationpara uma armadilha que conta acessos. Também fica vermelho nomain.project apply, story PATCH com 503.TestEveryCuratedCommandHidesTokens.Documentação
docs/errors.mdganhou uma regra geral, os códigos novos (story_create_unconfirmed,story_update_unconfirmed,field_create_unconfirmed,status_create_unconfirmed,status_order_unconfirmed) e linhas revistas paracomment_unconfirmed,attachment_unconfirmed,network_error,server_erroreunexpected_redirect. README,docs/guia.mdedocs/api-notes.mdforam alinhados.