X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/c62e4ae2026770d983ef5b7ffda0cf6d0f48ffc2..163c8f8750193b791eb62f5a8d73dc44a006b69e:/services/keepstore/trash_worker.go diff --git a/services/keepstore/trash_worker.go b/services/keepstore/trash_worker.go index 27d6216d01..8a9fedfb70 100644 --- a/services/keepstore/trash_worker.go +++ b/services/keepstore/trash_worker.go @@ -1,8 +1,11 @@ +// Copyright (C) The Arvados Authors. All rights reserved. +// +// SPDX-License-Identifier: AGPL-3.0 + package main import ( "errors" - "log" "time" "git.curoverse.com/arvados.git/sdk/go/arvados" @@ -35,27 +38,37 @@ func TrashItem(trashRequest TrashRequest) { return } - for _, volume := range KeepVM.AllWritable() { + var volumes []Volume + if uuid := trashRequest.MountUUID; uuid == "" { + volumes = KeepVM.AllWritable() + } else if v := KeepVM.Lookup(uuid, true); v == nil { + log.Printf("warning: trash request for nonexistent mount: %v", trashRequest) + return + } else { + volumes = []Volume{v} + } + + for _, volume := range volumes { mtime, err := volume.Mtime(trashRequest.Locator) if err != nil { - log.Printf("%v Delete(%v): %v", volume, trashRequest.Locator, err) + log.Printf("%v Trash(%v): %v", volume, trashRequest.Locator, err) continue } if trashRequest.BlockMtime != mtime.UnixNano() { - log.Printf("%v Delete(%v): stored mtime %v does not match trash list value %v", volume, trashRequest.Locator, mtime.UnixNano(), trashRequest.BlockMtime) + log.Printf("%v Trash(%v): stored mtime %v does not match trash list value %v", volume, trashRequest.Locator, mtime.UnixNano(), trashRequest.BlockMtime) continue } if !theConfig.EnableDelete { - err = errors.New("did not delete block because EnableDelete is false") + err = errors.New("skipping because EnableDelete is false") } else { err = volume.Trash(trashRequest.Locator) } if err != nil { - log.Printf("%v Delete(%v): %v", volume, trashRequest.Locator, err) + log.Printf("%v Trash(%v): %v", volume, trashRequest.Locator, err) } else { - log.Printf("%v Delete(%v) OK", volume, trashRequest.Locator) + log.Printf("%v Trash(%v) OK", volume, trashRequest.Locator) } } }