diff options
author | Sebastiaan van Stijn <github@gone.nl> | 2020-07-25 14:14:38 +0200 |
---|---|---|
committer | Sebastiaan van Stijn <github@gone.nl> | 2020-07-28 12:41:14 +0200 |
commit | 51c7992928fb83ecfb4b62fc6cd51c76090e3042 (patch) | |
tree | 98003f7ac9562e2a3fa6a87bd44c75e10961f452 /volume | |
parent | 624154fe63686a43b84d01ccfab0477079bc7de4 (diff) | |
download | docker-51c7992928fb83ecfb4b62fc6cd51c76090e3042.tar.gz |
API: add "prune" events
This patch adds a new "prune" event type to indicate that pruning of a resource
type completed.
This event-type can be used on systems that want to perform actions after
resources have been cleaned up. For example, Docker Desktop performs an fstrim
after resources are deleted (https://github.com/linuxkit/linuxkit/tree/v0.7/pkg/trim-after-delete).
While the current (remove, destroy) events can provide information on _most_
resources, there is currently no event triggered after the BuildKit build-cache
is cleaned.
Prune events have a `reclaimed` attribute, indicating the amount of space that
was reclaimed (in bytes). The attribute can be used, for example, to use as a
threshold for performing fstrim actions. Reclaimed space for `network` events
will always be 0, but the field is added to be consistent with prune events for
other resources.
To test this patch:
Create some resources:
for i in foo bar baz; do \
docker network create network_$i \
&& docker volume create volume_$i \
&& docker run -d --name container_$i -v volume_$i:/volume busybox sh -c 'truncate -s 5M somefile; truncate -s 5M /volume/file' \
&& docker tag busybox:latest image_$i; \
done;
docker pull alpine
docker pull nginx:alpine
echo -e "FROM busybox\nRUN truncate -s 50M bigfile" | DOCKER_BUILDKIT=1 docker build -
Start listening for "prune" events in another shell:
docker events --filter event=prune
Prune containers, networks, volumes, and build-cache:
docker system prune -af --volumes
See the events that are returned:
docker events --filter event=prune
2020-07-25T12:12:09.268491000Z container prune (reclaimed=15728640)
2020-07-25T12:12:09.447890400Z network prune (reclaimed=0)
2020-07-25T12:12:09.452323000Z volume prune (reclaimed=15728640)
2020-07-25T12:12:09.517236200Z image prune (reclaimed=21568540)
2020-07-25T12:12:09.566662600Z builder prune (reclaimed=52428841)
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Diffstat (limited to 'volume')
-rw-r--r-- | volume/service/service.go | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/volume/service/service.go b/volume/service/service.go index 8dbfa283c8..b185471a39 100644 --- a/volume/service/service.go +++ b/volume/service/service.go @@ -2,6 +2,7 @@ package service // import "github.com/docker/docker/volume/service" import ( "context" + "strconv" "sync/atomic" "github.com/docker/docker/api/types" @@ -238,6 +239,9 @@ func (s *VolumesService) Prune(ctx context.Context, filter filters.Args) (*types rep.SpaceReclaimed += uint64(vSize) rep.VolumesDeleted = append(rep.VolumesDeleted, v.Name()) } + s.eventLogger.LogVolumeEvent("", "prune", map[string]string{ + "reclaimed": strconv.FormatInt(int64(rep.SpaceReclaimed), 10), + }) return rep, nil } |