summaryrefslogtreecommitdiff
path: root/volume
diff options
context:
space:
mode:
authorSebastiaan van Stijn <github@gone.nl>2020-07-25 14:14:38 +0200
committerSebastiaan van Stijn <github@gone.nl>2020-07-28 12:41:14 +0200
commit51c7992928fb83ecfb4b62fc6cd51c76090e3042 (patch)
tree98003f7ac9562e2a3fa6a87bd44c75e10961f452 /volume
parent624154fe63686a43b84d01ccfab0477079bc7de4 (diff)
downloaddocker-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.go4
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
}