-/*
- For each Pull request:
- Generate a random API token.
- Generate a permission signature using this token, timestamp ~60 seconds in the future, and desired block hash.
- Using this token & signature, retrieve the given block.
- Write to storage
-*/
-func Pull(addr string, locator string) (err error) {
- log.Printf("Pull %s/%s starting", addr, locator)
-
- defer func() {
- if err == nil {
- log.Printf("Pull %s/%s success", addr, locator)
- } else {
- log.Printf("Pull %s/%s error: %s", addr, locator, err)
- }
- }()
+// PullItemAndProcess pulls items from PullQueue and processes them.
+// For each Pull request:
+// Generate a random API token.
+// Generate a permission signature using this token, timestamp ~60 seconds in the future, and desired block hash.
+// Using this token & signature, retrieve the given block.
+// Write to storage
+//
+func PullItemAndProcess(pullRequest PullRequest, token string, keepClient *keepclient.KeepClient) (err error) {
+ keepClient.Arvados.ApiToken = token
+
+ serviceRoots := make(map[string]string)
+ for _, addr := range pullRequest.Servers {
+ serviceRoots[addr] = addr
+ }
+ keepClient.SetServiceRoots(serviceRoots, nil, nil)