[Bug]: LoggedPullImageResultCallback throws java.lang.ArithmeticException: / by zero
Mantenedores costumam responder em até 1 dia
Avaliação
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Facilidade para iniciantes
- 58/100
- Tipo de issue
- Bug
- Clareza
- Claramente especificada
- Status de atividade
- Estagnada
- Stack de tecnologia
- docker, java
- Domínio
- testing-qa
Direção de pesquisa
Comece em core/src/main/java/org/testcontainers/images/LoggedPullImageResultCallback.java, especialmente no cálculo da duração em torno das linhas 113 e 121 e no método onComplete. Revise as convenções existentes de testes do Core, adicione cobertura para um pull concluído em menos de um segundo e execute os testes relevantes do Core para confirmar que a conclusão não lança mais ArithmeticException.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Module
Core
Testcontainers version
1.21.3
Using the latest Testcontainers version?
Yes
Host OS
Linux
Host Arch
x86
Docker version
Docker Client 28.0.4
Docker Server 28.0.4
What happened?
When running tests in GitHub actions, it fails due to line 121 in LoggedPullImageResultCallback throws an java.lang.ArithmeticException: / by zero. Out of 10 times running our tests, it has failed 8 times and succeeded2. I have not been able to reproduce this in a reliable way but it seems like this would happen if a pull takes less than one full second since duration will become 0.
My first hypothesis was that this could happen if one already pulled the image in question but it seems that if the image is found locally, completed will never be set to true and therefore the line that throws the exception will never be executed.
Our current hypothesis is that there could be a race condition if a pull of an image is triggered twice. So just before the first pull invocation completes, another process triggers a pull. It's not fully found locally so we'll enter the "pull flow" but just at the last second, causing it to complete less in less than a second and trigger this issue.
If my hypothesis is correct it's hard to reliably create a way to replicate this but I think it would be worth it to be a bit more defensive in this part of the code and not throw an exception if it happens that a pull takes less than a second.
Relevant log output
OurTestClass > initializationError FAILED
org.opentest4j.AssertionFailedError: failed to start service!
at app//xx.xxxxxx.ourlibrary.integrationtests.IntegrationTestPostProcessor.postProcessTestInstance(IntegrationTestPostProcessor.java:112)
at [email protected]/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
at [email protected]/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at [email protected]/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
at [email protected]/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at [email protected]/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1708)
at [email protected]/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
at [email protected]/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at [email protected]/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
at [email protected]/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
at [email protected]/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at [email protected]/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
at [email protected]/java.util.Optional.orElseGet(Optional.java:364)
at [email protected]/java.util.ArrayList.forEach(ArrayList.java:1596)
Caused by:
java.lang.ArithmeticException: / by zero
at org.testcontainers.images.LoggedPullImageResultCallback.onComplete(LoggedPullImageResultCallback.java:120)
at org.testcontainers.images.TimeLimitedLoggedPullImageResultCallback.onComplete(TimeLimitedLoggedPullImageResultCallback.java:91)
at xx.xxxxxx.ourlibrary.integrationtests.testcontainers.ReactivePullImageResultCallback.onComplete(ReactivePullImageResultCallback.java:17)
at org.testcontainers.shaded.com.github.dockerjava.core.exec.AbstrAsyncDockerCmdExec$1.onComplete(AbstrAsyncDockerCmdExec.java:51)
at org.testcontainers.shaded.com.github.dockerjava.core.DefaultInvocationBuilder.lambda$executeAndStream$1(DefaultInvocationBuilder.java:276)
at java.base/java.lang.Thread.run(Thread.java:1583)
Additional Information
No response
- Linguagem predominante
- Java
- Estrelas
- 8.7k
- Forks
- 1.9k
- Merge médio
- 20h 43min
- PRs com merge (30d)
- 4
Preparar o ambiente
Inicia o contêiner de desenvolvimento do projeto no navegador, com a sua própria conta do GitHub.
- Inclui um Dockerfile ou arquivo Docker Compose
- Tem um modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de testcontainers/testcontainers-java
-
[Bug]: Build fails with "Unknown cli flag: --scripts-prepend-node-path" due to outdated Spotless pluginTalvez já em andamento @dhruv9b assumiu há 37 dias. Abertatype/bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
testcontainers/testcontainers-java#11997 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
[Enhancement]: Document why singleton containers are required under Spring's test context cachingTalvez já em andamento @zakaullah075 assumiu há 55 dias. Abertatype/enhancement
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 85/100
testcontainers/testcontainers-java#11967 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
[Bug]: Cannot reuse Selenium BrowserWebDriverContainers under LinuxTalvez já em andamento @kdelay assumiu há 76 dias. Abertatype/bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
testcontainers/testcontainers-java#11941 ·
Mantenedores costumam responder em até 1 dia
-
[Bug]: DockerDesktopClientProviderStrategy is always applicableTalvez já em andamento @seonwooj0810 assumiu há 125 dias. Abertatype/bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 74/100
testcontainers/testcontainers-java#11829 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
[Enhancement]: cleanup document after removing junit4 supportTalvez já em andamento @SJvaca30 assumiu há 133 dias. Abertatype/enhancement
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 65/100
testcontainers/testcontainers-java#11578 ·
Mantenedores costumam responder em até 1 dia
Todas as issues de testcontainers/testcontainers-java
Issues semelhantes
-
waiting-for-triage
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 72/100
spring-cloud/spring-cloud-openfeign#1443 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 1/5 1-3 horas Facilidade para iniciantes 84/100
ADORSYS-GIS/keycloak-oid4vp-plugin#221 ·
Mantenedores costumam responder em até 2 dias
-
status: team-only type: dependency-upgrade
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 65/100
spring-projects/spring-boot#52099 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 67/100
tchiotludo/akhq#3307 · 1 reação ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
objectionary/jeo-maven-plugin#1885 ·
Mantenedores costumam responder em até 4 dias