X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/a6650f13fe461641defa4f281972df0ce1567594..afabb6c30c449d6139aec344d0912fc2645e2e89:/services/datamanager/datamanager.go diff --git a/services/datamanager/datamanager.go b/services/datamanager/datamanager.go index c1a5cbed75..8e12835842 100644 --- a/services/datamanager/datamanager.go +++ b/services/datamanager/datamanager.go @@ -22,6 +22,7 @@ var ( logEventTypePrefix string logFrequencySeconds int minutesBetweenRuns int + collectionBatchSize int dryRun bool ) @@ -38,6 +39,10 @@ func init() { "minutes-between-runs", 0, "How many minutes we wait between data manager runs. 0 means run once and exit.") + flag.IntVar(&collectionBatchSize, + "collection-batch-size", + 1000, + "How many collections to request in each batch.") flag.BoolVar(&dryRun, "dry-run", false, @@ -108,10 +113,9 @@ func singlerun(arv arvadosclient.ArvadosClient) error { dataFetcher = BuildDataFetcher(arv) } - dataFetcher(arvLogger, &readCollections, &keepServerInfo) - - if readCollections.Err != nil { - return readCollections.Err + err = dataFetcher(arvLogger, &readCollections, &keepServerInfo) + if err != nil { + return err } err = summary.MaybeWriteData(arvLogger, readCollections, keepServerInfo) @@ -182,30 +186,35 @@ func singlerun(arv arvadosclient.ArvadosClient) error { // BuildDataFetcher returns a data fetcher that fetches data from remote servers. func BuildDataFetcher(arv arvadosclient.ArvadosClient) summary.DataFetcher { - return func(arvLogger *logger.Logger, + return func( + arvLogger *logger.Logger, readCollections *collection.ReadCollections, - keepServerInfo *keep.ReadServers) { - collectionChannel := make(chan collection.ReadCollections) - + keepServerInfo *keep.ReadServers, + ) error { + collDone := make(chan struct{}) + var collErr error go func() { - collectionChannel <- collection.GetCollectionsAndSummarize( + *readCollections, collErr = collection.GetCollectionsAndSummarize( collection.GetCollectionsParams{ Client: arv, Logger: arvLogger, - BatchSize: 50}) + BatchSize: collectionBatchSize}) + collDone <- struct{}{} }() - var err error - *keepServerInfo, err = keep.GetKeepServersAndSummarize( + var keepErr error + *keepServerInfo, keepErr = keep.GetKeepServersAndSummarize( keep.GetKeepServersParams{ Client: arv, Logger: arvLogger, Limit: 1000}) - if err != nil { - return - } + <-collDone - *readCollections = <-collectionChannel + // Return a nil error only if both parts succeeded. + if collErr != nil { + return collErr + } + return keepErr } }