// 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{}{}
_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))
// 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