10008: Move test setup from __init__() to setUp()
[arvados.git] / services / datamanager / summary / pull_list.go
index 6058616dd6e1086bfe2fbfca52ca2a952f69cf80..d7fb3eb8f7cb3953d0f40e0e67626376f0d2941a 100644 (file)
@@ -12,7 +12,6 @@ import (
        "log"
        "os"
        "strings"
-       "time"
 )
 
 // Locator is a block digest
@@ -72,7 +71,7 @@ func ComputePullServers(kc *keepclient.KeepClient,
        blockToDesiredReplication map[blockdigest.DigestWithSize]int,
        underReplicated BlockSet) (m map[Locator]PullServers) {
        m = map[Locator]PullServers{}
-       // We use CanonicalString to avoid filling memory with dupicate
+       // We use CanonicalString to avoid filling memory with duplicate
        // copies of the same string.
        var cs CanonicalString
 
@@ -181,29 +180,36 @@ func WritePullLists(arvLogger *logger.Logger,
        r := strings.NewReplacer(":", ".")
 
        for host, list := range pullLists {
+               if arvLogger != nil {
+                       // We need a local variable because Update doesn't call our mutator func until later,
+                       // when our list variable might have been reused by the next loop iteration.
+                       host := host
+                       listLen := len(list)
+                       arvLogger.Update(func(p map[string]interface{}, e map[string]interface{}) {
+                               pullListInfo := logger.GetOrCreateMap(p, "pull_list_len")
+                               pullListInfo[host] = listLen
+                       })
+               }
+
                if dryRun {
-                       if arvLogger != nil {
-                               arvLogger.Update(func(p map[string]interface{}, e map[string]interface{}) {
-                                       pullListInfo := logger.GetOrCreateMap(p, "pull_list")
-                                       pullListInfo["started_at"] = time.Now()
-                                       pullListInfo[host] = list
-                               })
-                       }
-               } else {
-                       filename := fmt.Sprintf("pull_list.%s", r.Replace(RemoveProtocolPrefix(host)))
-                       pullListFile, err := os.Create(filename)
-                       if err != nil {
-                               return err
-                       }
-                       defer pullListFile.Close()
+                       log.Print("dry run, not sending pull list to service %s with %d blocks", host, len(list))
+                       continue
+               }
 
-                       enc := json.NewEncoder(pullListFile)
-                       err = enc.Encode(list)
-                       if err != nil {
-                               return err
-                       }
-                       log.Printf("Wrote pull list to %s.", filename)
+               filename := fmt.Sprintf("pull_list.%s", r.Replace(RemoveProtocolPrefix(host)))
+               pullListFile, err := os.Create(filename)
+               if err != nil {
+                       return err
+               }
+               defer pullListFile.Close()
+
+               enc := json.NewEncoder(pullListFile)
+               err = enc.Encode(list)
+               if err != nil {
+                       return err
                }
+               log.Printf("Wrote pull list to %s.", filename)
        }
+
        return nil
 }