diff options
author | Matthew Heon <matthew.heon@pm.me> | 2021-03-02 11:58:32 -0500 |
---|---|---|
committer | Matthew Heon <matthew.heon@pm.me> | 2021-03-02 13:30:28 -0500 |
commit | 43e899c2ec2a874b9cb16f42bfd1e676981353b1 (patch) | |
tree | c8a42515aae42c0f50767323ed849ccbc8c2b2d5 /libpod/state.go | |
parent | 426178a49991106ffe222f12cc42409ae78dd257 (diff) | |
download | podman-43e899c2ec2a874b9cb16f42bfd1e676981353b1.tar.gz podman-43e899c2ec2a874b9cb16f42bfd1e676981353b1.tar.bz2 podman-43e899c2ec2a874b9cb16f42bfd1e676981353b1.zip |
Rewrite Rename backend in a more atomic fashion
Move the core of renaming logic into the DB. This guarantees a
lot more atomicity than we have right now (our current solution,
removing the container from the DB and re-creating it, is *VERY*
not atomic and prone to leaving a corrupted state behind if
things go wrong. Moving things into the DB allows us to remove
most, but not all, of this - there's still a potential scenario
where the c/storage rename fails but the Podman rename succeeds,
and we end up with a mismatched state.
Signed-off-by: Matthew Heon <matthew.heon@pm.me>
Diffstat (limited to 'libpod/state.go')
-rw-r--r-- | libpod/state.go | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/libpod/state.go b/libpod/state.go index 074d21740..4b711bae9 100644 --- a/libpod/state.go +++ b/libpod/state.go @@ -155,6 +155,19 @@ type State interface { // answer is this: use this only very sparingly, and only if you really // know what you're doing. RewriteContainerConfig(ctr *Container, newCfg *ContainerConfig) error + // This is a more limited version of RewriteContainerConfig, though it + // comes with the added ability to alter a container's name. In exchange + // it loses the ability to manipulate the container's locks. + // It is not intended to be as restrictive as RewriteContainerConfig, in + // that we allow it to be run while other Podman processes are running, + // and without holding the alive lock. + // Container ID and pod membership still *ABSOLUTELY CANNOT* be altered. + // Also, you cannot change a container's dependencies - shared namespace + // containers or generic dependencies - at present. This is + // theoretically possible but not yet implemented. + // If newName is not "" the container will be renamed to the new name. + // The oldName parameter is only required if newName is given. + SafeRewriteContainerConfig(ctr *Container, oldName, newName string, newCfg *ContainerConfig) error // PLEASE READ THE DESCRIPTION FOR RewriteContainerConfig BEFORE USING. // This function is identical to RewriteContainerConfig, save for the // fact that it is used with pods instead. |