func main() { flag.Usage = printUsage flag.Parse() if flag.NArg() < 1 { printUsage() os.Exit(2) } clientName := fmt.Sprintf("%s:%d", *imageServerHostname, *imageServerPortNum) imageClient, err := rpc.DialHTTP("tcp", clientName) if err != nil { fmt.Fprintf(os.Stderr, "Error dialing\t%s\n", err) os.Exit(1) } objectClient := objectclient.NewObjectClient(clientName) for _, subcommand := range subcommands { if flag.Arg(0) == subcommand.command { if flag.NArg()-1 != subcommand.numArgs { printUsage() os.Exit(2) } subcommand.cmdFunc(imageClient, objectClient, flag.Args()[1:]) os.Exit(3) } } printUsage() os.Exit(2) }
func (t *rpcType) doFetch(request sub.FetchRequest) { defer t.clearFetchInProgress() objectServer := objectclient.NewObjectClient(request.ServerAddress) benchmark := false if t.networkReaderContext.MaximumSpeed() < 1 { benchmark = enoughBytesForBenchmark(objectServer, request) if benchmark { objectServer.SetExclusiveGetObjects(true) t.logger.Println("Benchmarking network speed") } } objectsReader, err := objectServer.GetObjects(request.Hashes) if err != nil { t.logger.Printf("Error getting object reader:\t%s\n", err.Error()) if *exitOnFetchFailure { os.Exit(1) } return } defer objectsReader.Close() var totalLength uint64 timeStart := time.Now() for _, hash := range request.Hashes { length, reader, err := objectsReader.NextObject() if err != nil { t.logger.Println(err) if *exitOnFetchFailure { os.Exit(1) } return } err = readOne(t.objectsDir, hash, length, t.networkReaderContext.NewReader(reader)) reader.Close() if err != nil { t.logger.Println(err) if *exitOnFetchFailure { os.Exit(1) } return } totalLength += length } duration := time.Since(timeStart) speed := uint64(float64(totalLength) / duration.Seconds()) if benchmark { file, err := os.Create(t.netbenchFilename) if err == nil { fmt.Fprintf(file, "%d\n", speed) file.Close() } t.networkReaderContext.InitialiseMaximumSpeed(speed) } t.logger.Printf("Fetch() complete. Read: %s in %s (%s/s)\n", format.FormatBytes(totalLength), duration, format.FormatBytes(speed)) t.rescanObjectCacheChannel <- true }
func main() { flag.Usage = printUsage flag.Parse() if flag.NArg() < 1 { printUsage() os.Exit(2) } objectServer := objectclient.NewObjectClient(fmt.Sprintf("%s:%d", *objectServerHostname, *objectServerPortNum)) for _, subcommand := range subcommands { if flag.Arg(0) == subcommand.command { if flag.NArg()-1 != subcommand.numArgs { printUsage() os.Exit(2) } subcommand.cmdFunc(objectServer, flag.Args()[1:]) os.Exit(3) } } printUsage() os.Exit(2) }