X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/2ca0934c1daf79d5c1b959c8b3d0f36b5dd57bc4..cc303a0ef797c1c752b4fd86e48e2c84fc7d96ca:/services/keepstore/trash_worker.go diff --git a/services/keepstore/trash_worker.go b/services/keepstore/trash_worker.go index 6b8d60bdf1..bc1775f97e 100644 --- a/services/keepstore/trash_worker.go +++ b/services/keepstore/trash_worker.go @@ -13,34 +13,35 @@ import ( Repeat */ -var DEFAULT_TRASH_LIFE_TIME int64 = 1209600 // Use 2 weeks for now - func RunTrashWorker(trashq *WorkQueue) { - nextItem := trashq.NextItem - for item := range nextItem { + for item := range trashq.NextItem { trashRequest := item.(TrashRequest) - err := TrashItem(trashRequest) - if err != nil { - log.Printf("Trash request error for %s: %s", trashRequest, err) - } + TrashItem(trashRequest) } } -/* - Delete the block indicated by the Locator in TrashRequest. -*/ -func TrashItem(trashRequest TrashRequest) (err error) { - // Verify if the block is to be deleted based on its Mtime - for _, volume := range KeepVM.Volumes() { +// TrashItem deletes the indicated block from every writable volume. +func TrashItem(trashRequest TrashRequest) { + reqMtime := time.Unix(trashRequest.BlockMtime, 0) + if time.Since(reqMtime) < blob_signature_ttl { + log.Printf("WARNING: data manager asked to delete a %v old block %v (BlockMtime %d = %v), but my blob_signature_ttl is %v! Skipping.", + time.Since(reqMtime), + trashRequest.Locator, + trashRequest.BlockMtime, + reqMtime, + blob_signature_ttl) + return + } + for _, volume := range KeepVM.AllWritable() { mtime, err := volume.Mtime(trashRequest.Locator) - if err == nil { - if trashRequest.BlockMtime == mtime.Unix() { - currentTime := time.Now().Unix() - if (currentTime - trashRequest.BlockMtime) > DEFAULT_TRASH_LIFE_TIME { - err = volume.Delete(trashRequest.Locator) - } - } + if err != nil || trashRequest.BlockMtime != mtime.Unix() { + continue + } + err = volume.Delete(trashRequest.Locator) + if err != nil { + log.Printf("%v Delete(%v): %v", volume, trashRequest.Locator, err) + continue } + log.Printf("%v Delete(%v) OK", volume, trashRequest.Locator) } - return }