testcontainers / testcontainers/testcontainers-python
Bug: Random failures on Redis Container when DinD + parallel
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 2.3k
- Forks
- 386
- Ø Merge
- 4 Std. 40 Min.
- Gemergte PRs (30 T.)
- 1
Beschreibung
Describe the bug
Hey everyone,
I have a monorepo with dozens of small projects, and I am running tests that use a Redis Container in each project.
To reduce the time to run the tests (since each project tests are somewhat CPU-light), I am using gnu parallel
to run the tests of all projects in parallel, this causes situations where several containers are appearing/terminating
simultaneously. I do not have any problems running this setup locally.
However, in my CI pipeline, each is built on top of a k8s cluster that uses dind to run the containers inside the container of the CI runner, the tests are incredibly flaky, even with multiple retries. The error is always something like this:
def read_response(self, disable_decoding=False):
if not self._reader:
raise ConnectionError(SERVER_CLOSED_CONNECTION_ERROR)
# _next_response might be cached from a can_read() call
if self._next_response is not False:
response = self._next_response
self._next_response = False
return response
if disable_decoding:
response = self._reader.gets(False)
else:
response = self._reader.gets()
while response is False:
self.read_from_socket()
if disable_decoding:
response = self._reader.gets(False)
else:
> response = self._reader.gets()
E redis.exceptions.InvalidResponse: Protocol error, got "A" as reply type byte
I am not sure if this is an issue with testcontainers, but I already spent several hours trying to find the problem.
Do you guys know what might be the source of this issue?
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Keine Repository-Datei und kein Test ist angegeben. Beginne damit, das DinD- und Kubernetes-Setup mit GNU parallel und mehreren Redis-Containern zu reproduzieren, und untersuche anschließend den Lebenszyklus der Container zusammen mit dem in read_response angezeigten Redis-Clientfehler. Als erledigt gilt, festzustellen, ob der Fehler in testcontainers oder im CI-/Container-Setup liegt, und eine reproduzierbare Lösung zu dokumentieren.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- docker, kubernetes, python, redis
- Bereich
- databases, infrastructure, testing
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Muss geklärt werden
- Anfängerfreundlichkeit
- 25/100