[Bug]: LoggedPullImageResultCallback throws java.lang.ArithmeticException: / by zero
Les mainteneurs répondent en général sous 1 jour
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 58/100
- Type d'issue
- Bug
- Clarté
- Clairement spécifiée
- Activité
- À l'abandon
- Stack technique
- docker, java
- Domaine
- testing-qa
Piste de recherche
Commencez dans core/src/main/java/org/testcontainers/images/LoggedPullImageResultCallback.java, en particulier sur le calcul de la durée autour des lignes 113 et 121 ainsi que sur la méthode onComplete. Examinez les conventions existantes des tests Core, ajoutez une couverture pour un pull qui se termine en moins d’une seconde et exécutez les tests Core concernés afin de confirmer que la finalisation ne lève plus ArithmeticException.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
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
- Langage dominant
- Java
- Étoiles
- 8.7k
- Forks
- 1.9k
- Merge moyen
- 20 h 43 min
- PR mergées (30 j)
- 4
Préparer son environnement
Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.
- Fournit un Dockerfile ou un fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de testcontainers/testcontainers-java
-
[Bug]: Build fails with "Unknown cli flag: --scripts-prepend-node-path" due to outdated Spotless pluginPeut-être pris @dhruv9b l’a pris il y a 37 jours. Ouvertetype/bug
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
testcontainers/testcontainers-java#11997 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
[Enhancement]: Document why singleton containers are required under Spring's test context cachingPeut-être pris @zakaullah075 l’a pris il y a 55 jours. Ouvertetype/enhancement
Difficulté 1/5 Moins d'une heure Accessibilité débutants 85/100
testcontainers/testcontainers-java#11967 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
[Bug]: Cannot reuse Selenium BrowserWebDriverContainers under LinuxPeut-être pris @kdelay l’a pris il y a 76 jours. Ouvertetype/bug
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
testcontainers/testcontainers-java#11941 ·
Les mainteneurs répondent en général sous 1 jour
-
[Bug]: DockerDesktopClientProviderStrategy is always applicablePeut-être pris @seonwooj0810 l’a pris il y a 125 jours. Ouvertetype/bug
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100
testcontainers/testcontainers-java#11829 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
[Enhancement]: cleanup document after removing junit4 supportPeut-être pris @SJvaca30 l’a pris il y a 133 jours. Ouvertetype/enhancement
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
testcontainers/testcontainers-java#11578 ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de testcontainers/testcontainers-java
Issues similaires
-
waiting-for-triage
Difficulté 1/5 Moins d'une heure Accessibilité débutants 72/100
spring-cloud/spring-cloud-openfeign#1443 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 1/5 1-3 heures Accessibilité débutants 84/100
ADORSYS-GIS/keycloak-oid4vp-plugin#221 ·
Les mainteneurs répondent en général sous 2 jours
-
Upgrade to Spring Pulsar 2.0.8Ouvertestatus: team-only type: dependency-upgrade
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
spring-projects/spring-boot#52099 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 67/100
tchiotludo/akhq#3307 · 1 réaction ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
objectionary/jeo-maven-plugin#1885 ·
Les mainteneurs répondent en général sous 4 jours