Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: proper synchronisation for start/stop log production #2576

Merged
merged 5 commits into from
Jun 17, 2024

Conversation

mdelapenya
Copy link
Member

@mdelapenya mdelapenya commented Jun 11, 2024

What does this PR do?

This PR simplifies the sync mechanisms for starting and stopping the produciton of logs:

  • the wait group controls the goroutine that reads the logs
  • the start logs method initialises the logProductionStop channel, as a buffered channel of 1, so that the stop can close it properly
  • the start logs method already used the logProductionStop channel to wait for a signal to stop processing logs
  • the start logs method always adds 1 to the wait group, as it'll be the goroutine processing the logs
  • the stop logs method will wait for all goroutines to finish
  • the stop logs method will signal the logProductionStop channel so that the start method can stop

See https://go.dev/play/p/x0pOElF2Vjf, where we have created a simplified scenario for it.

As a consequence, the mutex is not needed anymore, as the synchronisation happens with channels and wait groups.

The test proposed in the issue report has been added to the log consumers tests.

Why is it important?

Lots of spaguetti code for the synchronisation, that has been simplified thanks to going to first principles (see https://go.dev/play/p/x0pOElF2Vjf)

Related issues

@mdelapenya mdelapenya added the bug An issue with the library label Jun 11, 2024
@mdelapenya mdelapenya self-assigned this Jun 11, 2024
Copy link

netlify bot commented Jun 11, 2024

Deploy Preview for testcontainers-go ready!

Name Link
🔨 Latest commit dd36de0
🔍 Latest deploy log https://app.netlify.com/sites/testcontainers-go/deploys/666c8ac2747ffe0008b939ee
😎 Deploy Preview https://deploy-preview-2576--testcontainers-go.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site configuration.

@mdelapenya mdelapenya marked this pull request as ready for review June 12, 2024 08:55
@mdelapenya mdelapenya requested a review from a team as a code owner June 12, 2024 08:55
@mdelapenya mdelapenya merged commit 77da736 into testcontainers:main Jun 17, 2024
106 checks passed
@mdelapenya mdelapenya deleted the fix-log-consumer-race branch June 17, 2024 11:43
mdelapenya added a commit that referenced this pull request Jun 17, 2024
* fix: proper synchronisation for start/stop log production

* fix: protect channel close

* fix: properly close the log channel

* chore: do not close the channel
mdelapenya added a commit that referenced this pull request Jun 18, 2024
* fix: proper synchronisation for start/stop log production

* fix: protect channel close

* fix: properly close the log channel

* chore: do not close the channel
mdelapenya added a commit that referenced this pull request Jun 18, 2024
* fix: proper synchronisation for start/stop log production

* fix: protect channel close

* fix: properly close the log channel

* chore: do not close the channel
mdelapenya added a commit to mdelapenya/testcontainers-go that referenced this pull request Jun 24, 2024
* main:
  docs: document disabling ryuk with properties (testcontainers#2603)
  fix: allow compose files and readers to be used together (testcontainers#2598)
  chore(deps): bump urllib3 from 2.2.1 to 2.2.2 (testcontainers#2590)
  docs: example for NATS cluster (testcontainers#2591)
  docs: fix deprecation for material extensions emoji (testcontainers#2592)
  gha: update golangci-lint to v1.59.1 (testcontainers#2588)
  network: WithCheckDuplicate: don't set CheckDuplicate value (testcontainers#2589)
  fix: proper synchronisation for start/stop log production (testcontainers#2576)
  chore(deps): bump github.com/docker/docker from v25.0.5 to v26.1.4 (testcontainers#2584)
  docs: update contributing guide (testcontainers#2586)
  feat: add testcontainers labels to the built images (testcontainers#2579)
  feat(mongodb): Make the replica set name configurable (testcontainers#2538)
  chore: skip reaper tests if ryuk is disabled (testcontainers#2582)
  chore: increase check time to 60 secs instead of 20 (testcontainers#2581)
  fix: prepend substitutors for built images (testcontainers#2577)
  docs: update colima docs (testcontainers#2578)
  fix(cockroachdb): Fixes cockroachdb wait strategy handling (testcontainers#2456)
  Fix race condition when looking up reaper (ryuk) container (testcontainers#2508)
  chore: bring golangci-lint back (testcontainers#2571)
  docs(compose): Fix typo docker compose docs (testcontainers#2565)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug An issue with the library
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Bug]: Restart Container with Log Consumer is not working
1 participant