github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/cmd/subtool/fetch.go (about) 1 package main 2 3 import ( 4 "bufio" 5 "fmt" 6 "os" 7 8 "github.com/Cloud-Foundations/Dominator/lib/hash" 9 "github.com/Cloud-Foundations/Dominator/lib/log" 10 "github.com/Cloud-Foundations/Dominator/lib/objectcache" 11 "github.com/Cloud-Foundations/Dominator/lib/srpc" 12 "github.com/Cloud-Foundations/Dominator/proto/sub" 13 ) 14 15 func fetchSubcommand(args []string, logger log.DebugLogger) error { 16 srpcClient := getSubClient(logger) 17 defer srpcClient.Close() 18 if err := fetch(srpcClient, args[0]); err != nil { 19 return fmt.Errorf("Error fetching: %s", err) 20 } 21 return nil 22 } 23 24 func fetch(srpcClient *srpc.Client, hashesFilename string) error { 25 hashesFile, err := os.Open(hashesFilename) 26 if err != nil { 27 return err 28 } 29 defer hashesFile.Close() 30 scanner := bufio.NewScanner(hashesFile) 31 serverAddress := fmt.Sprintf("%s:%d", 32 *objectServerHostname, *objectServerPortNum) 33 hashes := make([]hash.Hash, 0) 34 for scanner.Scan() { 35 hashval, err := objectcache.FilenameToHash(scanner.Text()) 36 if err != nil { 37 return err 38 } 39 hashes = append(hashes, hashval) 40 } 41 if err := scanner.Err(); err != nil { 42 return err 43 } 44 return srpcClient.RequestReply("Subd.Fetch", sub.FetchRequest{ 45 ServerAddress: serverAddress, 46 Wait: true, 47 Hashes: hashes}, 48 &sub.FetchResponse{}) 49 }