-
Notifications
You must be signed in to change notification settings - Fork 152
feat: add option to stop containers with a timeout #779
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
Conversation
✅ Deploy Preview for testcontainers-rust ready!
To edit notification comments on pull requests, go to your Netlify site configuration. |
96e10b5
to
3d210d5
Compare
Thank you for the contribution! 👍 I've fixed PR name |
b532967
to
e1d188d
Compare
Apologies for that, not sure what happened with the linter and forgot to enable all features! |
54bf1fc
to
e337458
Compare
8479c44
to
887bcae
Compare
I think this is now there! there is a new clippy lint I dont think I want to get into:
I also want to test this on my problematic container just to make sure |
Previously containers were stopped with the system default timeout before issuing SIGKILL which was interfering with clean shutdown of processes being tested. This commit adds a new API of stop_with_timeout(Option<timeout_seconds>) in addition to the original stop() which retains its original functionality. A value of Some(-1) will issue a SIGTERM then wait indefinitely, a value of Some(t) will issue a SIGTERM then wait t seconds before issuing a SIGKILL. A value of None will follow the system default - often waiting 10 seconds, but this is configurable within the docker engine.
fb908c1
to
5c63b12
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you for the contribution!
Really appreciate it!
Sorry for the delay, we probably should have fix the lints in separate PR before.
But I don't mind merging as part of this PR
## 🤖 New release * `testcontainers`: 0.23.3 -> 0.24.0 (⚠ API breaking changes) ### ⚠ `testcontainers` breaking changes ```text --- failure enum_variant_added: enum variant added on exhaustive enum --- Description: A publicly-visible enum without #[non_exhaustive] has a new variant. ref: https://doc.rust-lang.org/cargo/reference/semver.html#enum-variant-new impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.40.0/src/lints/enum_variant_added.ron Failed in: variant CmdWaitFor:Exit in /tmp/.tmpPG1hwc/testcontainers-rs/testcontainers/src/core/wait/cmd_wait.rs:16 variant ClientError:PauseContainer in /tmp/.tmpPG1hwc/testcontainers-rs/testcontainers/src/core/client.rs:81 variant ClientError:UnpauseContainer in /tmp/.tmpPG1hwc/testcontainers-rs/testcontainers/src/core/client.rs:83 variant ClientError:PauseContainer in /tmp/.tmpPG1hwc/testcontainers-rs/testcontainers/src/core/client.rs:81 variant ClientError:UnpauseContainer in /tmp/.tmpPG1hwc/testcontainers-rs/testcontainers/src/core/client.rs:83 --- failure enum_variant_missing: pub enum variant removed or renamed --- Description: A publicly-visible enum has at least one variant that is no longer available under its prior name. It may have been renamed or removed entirely. ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.40.0/src/lints/enum_variant_missing.ron Failed in: variant CmdWaitFor::ExitCode, previously in file /tmp/.tmp7IxuhL/testcontainers/src/core/wait/cmd_wait.rs:16 --- failure trait_method_added: pub trait method added --- Description: A non-sealed public trait added a new method without a default implementation, which breaks downstream implementations of the trait ref: https://doc.rust-lang.org/cargo/reference/semver.html#trait-new-item-no-default impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.40.0/src/lints/trait_method_added.ron Failed in: trait method testcontainers::core::ImageExt::with_user in file /tmp/.tmpPG1hwc/testcontainers-rs/testcontainers/src/core/image/image_ext.rs:171 trait method testcontainers::core::ImageExt::with_readonly_rootfs in file /tmp/.tmpPG1hwc/testcontainers-rs/testcontainers/src/core/image/image_ext.rs:174 trait method testcontainers::core::ImageExt::with_security_opt in file /tmp/.tmpPG1hwc/testcontainers-rs/testcontainers/src/core/image/image_ext.rs:177 trait method testcontainers::ImageExt::with_user in file /tmp/.tmpPG1hwc/testcontainers-rs/testcontainers/src/core/image/image_ext.rs:171 trait method testcontainers::ImageExt::with_readonly_rootfs in file /tmp/.tmpPG1hwc/testcontainers-rs/testcontainers/src/core/image/image_ext.rs:174 trait method testcontainers::ImageExt::with_security_opt in file /tmp/.tmpPG1hwc/testcontainers-rs/testcontainers/src/core/image/image_ext.rs:177 ``` <details><summary><i><b>Changelog</b></i></summary><p> <blockquote> ## [0.24.0] - 2025-05-04 ### Details #### Features - Support waiting for commands exit regardless of exit code (#771) - Add user configuration for container commands (#784) - Add option to stop containers with a timeout (#779) - Support `pause` and `unpause` container (#785) - Allow `security_opt` and `readonly_rootfs` to be configured (#787) #### Miscellaneous Tasks - Update etcetera requirement from 0.8.0 to 0.9.0 (#773) - Update etcetera requirement from 0.9.0 to 0.10.0 (#775) </blockquote> </p></details> --- This PR was generated with [release-plz](https://github.com/release-plz/release-plz/). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Previously containers were stopped with no timeout (SIGKILL) which was interfering with clean shutdown of processes being tested.
This commit adds a new API of stop_with_timeout(timeout_secconds) in addition to the original stop(). The original stop() interface calls stop_with_timeout using the default '0'.
EDIT:
It would seem my original diagnosis was incorrect and the default timeout is 10 seconds, but my CI system was somehow setting the default to 1 second. I will fix the docs and put in the correct default. I think there is still some value in here - apologies for the time waste getting to this point!