X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/d005c38bea17107e7be3c5338ad31ba54085df61..b73985d8a0c9173aec57f6a81fe540b2813a5bff:/services/datamanager/summary/pull_list.go diff --git a/services/datamanager/summary/pull_list.go b/services/datamanager/summary/pull_list.go index 6058616dd6..d7fb3eb8f7 100644 --- a/services/datamanager/summary/pull_list.go +++ b/services/datamanager/summary/pull_list.go @@ -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 }