mirror of
https://github.com/apple/container.git
synced 2026-09-27 17:36:08 -04:00
This PR resolves a race condition when removing a container immediately after stopping it, caused by the `stop` command returning before the container fully transitions to the stopped state (#130). **Changes:** - Enhanced `TestCLIRmRace.swift` with robust test logic and helper methods (`containerExists`, `safeRemove`). - Improved error handling to distinguish race conditions from successful removals. - Added exponential backoff retry logic for cleanup operations. - Updated `CLITest.swift` with missing `doRemove` method. - Fixed `BuilderStart.swift` to handle `.stopping` case. - Improved error messages with container ID for better debugging. **Testing:** - ✅ All tests pass (`make test`, `make integration`). - ✅ Verified on macOS 26. - ✅ Race condition test validates success and failure scenarios. - ✅ Code formatted (`make fmt`). Hopefully, this will pass the integration tests on GitHub. Signed-off-by: ramsyana <47033578+ramsyana@users.noreply.github.com>
This commit is contained in:
@@ -209,10 +209,10 @@ actor ContainersService {
|
||||
switch item.state {
|
||||
case .alive(let client):
|
||||
let state = try await client.state()
|
||||
if state.status == .running {
|
||||
if state.status == .running || state.status == .stopping {
|
||||
throw ContainerizationError(
|
||||
.invalidState,
|
||||
message: "container with ID \(id) is running"
|
||||
message: "container \(id) is not yet stopped and can not be deleted"
|
||||
)
|
||||
}
|
||||
try self._cleanup(id: id, item: item)
|
||||
|
||||
Reference in New Issue
Block a user