Merge branch 'master' into 7490-datamanager-dont-die-return-error
[arvados.git] / services / datamanager / summary / trash_list.go
index 330cd4e45a33a23ed01a9946c10c76dcbea34d7e..b6ceacecde2b8e2ffe810deea9e3777aade06625 100644 (file)
@@ -1,16 +1,19 @@
 // Code for generating trash lists
+
 package summary
 
 import (
+       "errors"
+       "fmt"
        "git.curoverse.com/arvados.git/sdk/go/keepclient"
        "git.curoverse.com/arvados.git/services/datamanager/keep"
-       "log"
        "time"
 )
 
+// BuildTrashLists builds list of blocks to be sent to trash queue
 func BuildTrashLists(kc *keepclient.KeepClient,
        keepServerInfo *keep.ReadServers,
-       keepBlocksNotInCollections BlockSet) (m map[string]keep.TrashList) {
+       keepBlocksNotInCollections BlockSet) (m map[string]keep.TrashList, err error) {
 
        // Servers that are writeable
        writableServers := map[string]struct{}{}
@@ -20,8 +23,7 @@ func BuildTrashLists(kc *keepclient.KeepClient,
 
        _ttl, err := kc.Arvados.Discovery("blobSignatureTtl")
        if err != nil {
-               log.Printf("Failed to get blobSignatureTtl: %v", err)
-               return map[string]keep.TrashList{}
+               return nil, errors.New(fmt.Sprintf("Failed to get blobSignatureTtl, can't build trash lists: %v", err))
        }
 
        ttl := int64(_ttl.(float64))
@@ -29,28 +31,30 @@ func BuildTrashLists(kc *keepclient.KeepClient,
        // expire unreferenced blocks more than "ttl" seconds old.
        expiry := time.Now().UTC().Unix() - ttl
 
-       return BuildTrashListsInternal(writableServers, keepServerInfo, expiry, keepBlocksNotInCollections)
+       return buildTrashListsInternal(writableServers, keepServerInfo, expiry, keepBlocksNotInCollections), nil
 }
 
-func BuildTrashListsInternal(writableServers map[string]struct{},
+func buildTrashListsInternal(writableServers map[string]struct{},
        keepServerInfo *keep.ReadServers,
        expiry int64,
        keepBlocksNotInCollections BlockSet) (m map[string]keep.TrashList) {
 
        m = make(map[string]keep.TrashList)
 
-       for block, _ := range keepBlocksNotInCollections {
-               for _, block_on_server := range keepServerInfo.BlockToServers[block] {
-                       if block_on_server.Mtime < expiry {
-                               // block is older than expire cutoff
-                               srv := keepServerInfo.KeepServerIndexToAddress[block_on_server.ServerIndex].String()
+       for block := range keepBlocksNotInCollections {
+               for _, blockOnServer := range keepServerInfo.BlockToServers[block] {
+                       if blockOnServer.Mtime >= expiry {
+                               continue
+                       }
 
-                               _, writable := writableServers[srv]
+                       // block is older than expire cutoff
+                       srv := keepServerInfo.KeepServerIndexToAddress[blockOnServer.ServerIndex].String()
 
-                               if writable {
-                                       m[srv] = append(m[srv], keep.TrashRequest{Locator: block.Digest.String(), BlockMtime: block_on_server.Mtime})
-                               }
+                       if _, writable := writableServers[srv]; !writable {
+                               continue
                        }
+
+                       m[srv] = append(m[srv], keep.TrashRequest{Locator: block.Digest.String(), BlockMtime: blockOnServer.Mtime})
                }
        }
        return