Comments (13)
Eu testei com o código desse PR e o meu começou a falhar e quando analisei era realmente uma falha do meu lado que o teste atual não tava computando corretamente em relação ao saldo. Isso pq minha constraint de banco não permitia -10 quando por exemplo o limite era 10
from rinha-de-backend-2024-q1.
me envia por favor
from rinha-de-backend-2024-q1.
Esses são alguns que eu vi:
https://github.com/arrudaricardo/rinha-de-backend-2024-q1-bun
https://github.com/carls-rodrigues/rinha-backend-rust
https://github.com/aysion/rinha_de_backend_2024_q1-nodejs
https://github.com/aysion/rinha_de_backend_2024_q1-bun
from rinha-de-backend-2024-q1.
Não sei se entendi corretamente, mas o principal do teste é justamente fazer várias requisições concorrentes para os mesmo clientes. Uma das validações no teste é justamente comparar o saldo atual com o limite do cliente e, se for ultrapassado, o Gatling acusa o erro.
Qual seria essa API problemática que mencionou, por favor?
from rinha-de-backend-2024-q1.
Opa zan.
Eu testei o cenário onde estamos saindo com 10 requisições paralelas debitando 10000 do cliente id 1, esperamos que ele fique com -100000; como você pode ver o log das respostas disponibilizado na issue, o saldo não segue o que deveria seguir.
Uma das validações no teste é justamente comparar o saldo atual com o limite do cliente e, se for ultrapassado, o Gatling acusa o erro.
A minha suspeita é que não estamos saindo com requisições paralelas para o mesmo cliente id em um curto espaço de tempo e isso está camuflando o problema.
Qual seria essa API problemática que mencionou, por favor?
Eu testei algumas outras (todas que suspeitei travaram com a versão do meu PR), mas essa aqui foi a que originou o teste:
https://github.com/aysion/rinha_de_backend_2024_q1-nodejs
from rinha-de-backend-2024-q1.
Para reproduzir o problema você pode rodar a aplicação dele no seu local e executar o teste de carga, provavelmente vai passar todos os testes. Depois você reseta o banco de dados e executa o teste de carga usando a versão que eu disponibilizei no meu PR, ai você checa o extrato do cliente 1, ele terá 10 transações de débito de 10000, porém o saldo não estará -100000
Após a execução da versão do meu PR, veja a resposta no /extratos:
Clique para expandir
{
"saldo": {
"total": -10000,
"data_extrato": "2024-02-11T15:58:21.000Z",
"limite": 100000
},
"ultimas_transacoes": [
{
"id": 12,
"cliente_id": 1,
"valor": 10000,
"tipo": "d",
"descricao": "um0XAaYXkE",
"realizada_em": "2024-02-11T15:58:16.000Z"
},
{
"id": 11,
"cliente_id": 1,
"valor": 10000,
"tipo": "d",
"descricao": "9BWwcApIhj",
"realizada_em": "2024-02-11T15:58:16.000Z"
},
{
"id": 10,
"cliente_id": 1,
"valor": 10000,
"tipo": "d",
"descricao": "5AsH2CJvIU",
"realizada_em": "2024-02-11T15:58:16.000Z"
},
{
"id": 9,
"cliente_id": 1,
"valor": 10000,
"tipo": "d",
"descricao": "rQiKUy1vkD",
"realizada_em": "2024-02-11T15:58:16.000Z"
},
{
"id": 8,
"cliente_id": 1,
"valor": 10000,
"tipo": "d",
"descricao": "oYu05cwPYt",
"realizada_em": "2024-02-11T15:58:16.000Z"
},
{
"id": 7,
"cliente_id": 1,
"valor": 10000,
"tipo": "d",
"descricao": "RCNoNug0Yr",
"realizada_em": "2024-02-11T15:58:16.000Z"
},
{
"id": 6,
"cliente_id": 1,
"valor": 10000,
"tipo": "d",
"descricao": "VflZclcgjC",
"realizada_em": "2024-02-11T15:58:16.000Z"
},
{
"id": 5,
"cliente_id": 1,
"valor": 10000,
"tipo": "d",
"descricao": "zjAdxeJQXC",
"realizada_em": "2024-02-11T15:58:16.000Z"
},
{
"id": 4,
"cliente_id": 1,
"valor": 10000,
"tipo": "d",
"descricao": "o5HPkfTtOi",
"realizada_em": "2024-02-11T15:58:16.000Z"
},
{
"id": 3,
"cliente_id": 1,
"valor": 10000,
"tipo": "d",
"descricao": "MJvdEhRwhE",
"realizada_em": "2024-02-11T15:58:16.000Z"
}
]
}
Repare que temos 10 transações registradas, cada uma debitando 10000, mas o saldo ficou inconsistente.
from rinha-de-backend-2024-q1.
Só pra eu ter certeza de que entendi o que está dizendo: o que você está reportando é que tem API em que o saldo mostrado no extrato não corresponde com as transações feitas. É isso?
from rinha-de-backend-2024-q1.
Sim. O que eu estou dizendo é que o teste está deixando passar API com problema de Race Condition. Se quiser posso te explicar via call
from rinha-de-backend-2024-q1.
Obrigado. Vou pensar num teste pra esse cenário.
from rinha-de-backend-2024-q1.
Obrigado. Vou pensar num teste pra esse cenário.
O PR que eu disponibilizei está cobrindo esse cenário e está dando o fail fast para evitar que o dev precise aguardar toda a bateria de teste (e gerar possíveis side effects)
from rinha-de-backend-2024-q1.
Posso te mandar alguns repositórios que eu vi que estão com esse mesmo problema e que passaram a ser reprovados pela versão disponível no PR
from rinha-de-backend-2024-q1.
Todos esses que mencionei eu testei rodando com a versão atual do teste de carga e posteriormente rodei com a versão disponibilizada no PR. Qualquer coisa só falar.
from rinha-de-backend-2024-q1.
Melhoria no teste implementada. Muito obrigado pela ajuda, @filipemacedo!
from rinha-de-backend-2024-q1.
Related Issues (20)
- PR errado aceito? HOT 6
- Usar Unix Sockets para conectar os containers HOT 3
- Teste de validação incorreto HOT 4
- [Ajuda] Algum erro que não foi exibido no docker-compose.logs HOT 1
- Docker como load balancer HOT 1
- Teste integridade do extrato em race condition HOT 2
- docker-compose ou docker compose? HOT 3
- load balancer é realmente necessário? HOT 3
- Sobre utilizacao do Redis no desafio HOT 1
- Duvida sobre o p75 geral HOT 2
- O arquivo `quantos-testes-faltam?.sh` não funciona no Windows e está impedindo o pull HOT 2
- Duvida sobre banco de dados em memória HOT 6
- Banco de dados em tmpfs HOT 1
- Quando a aplicação inicia ela tem que tentar ler do banco de dados? HOT 1
- Criar Artefatos dos Resultados Considerando Deficientes Visuais HOT 3
- Dúvida script de testes HOT 2
- Imagem pública da aplicação deve ser hospedada em docker hub? HOT 1
- [Ajuda] Logs de erro docker-compose.logs HOT 3
- Validação de strings HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rinha-de-backend-2024-q1.