8460: Fix copy-paste errors; use html entity instead of literal utf8 bullet.
[arvados.git] / services / datamanager / summary / pull_list.go
index cc01249a624a7f4947cdcfc8dafd73dd7e347377..d7fb3eb8f7cb3953d0f40e0e67626376f0d2941a 100644 (file)
@@ -9,7 +9,6 @@ import (
        "git.curoverse.com/arvados.git/sdk/go/keepclient"
        "git.curoverse.com/arvados.git/sdk/go/logger"
        "git.curoverse.com/arvados.git/services/datamanager/keep"
-       "git.curoverse.com/arvados.git/services/datamanager/loggerutil"
        "log"
        "os"
        "strings"
@@ -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
 
@@ -176,23 +175,41 @@ func BuildPullLists(lps map[Locator]PullServers) (spl map[string]PullList) {
 // This is just a hack for prototyping, it is not expected to be used
 // in production.
 func WritePullLists(arvLogger *logger.Logger,
-       pullLists map[string]PullList) {
+       pullLists map[string]PullList,
+       dryRun bool) error {
        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 {
+                       log.Print("dry run, not sending pull list to service %s with %d blocks", host, len(list))
+                       continue
+               }
+
                filename := fmt.Sprintf("pull_list.%s", r.Replace(RemoveProtocolPrefix(host)))
                pullListFile, err := os.Create(filename)
                if err != nil {
-                       loggerutil.FatalWithMessage(arvLogger,
-                               fmt.Sprintf("Failed to open %s: %v", filename, err))
+                       return err
                }
                defer pullListFile.Close()
 
                enc := json.NewEncoder(pullListFile)
                err = enc.Encode(list)
                if err != nil {
-                       loggerutil.FatalWithMessage(arvLogger,
-                               fmt.Sprintf("Failed to write pull list to %s: %v", filename, err))
+                       return err
                }
                log.Printf("Wrote pull list to %s.", filename)
        }
+
+       return nil
 }