func createN(t testing.TB, n int) ([]*torus.Server, *temp.Server) { var out []*torus.Server s := temp.NewServer() for i := 0; i < n; i++ { srv := newServer(t, s) addr := fmt.Sprintf("http://127.0.0.1:%d", 40000+i) uri, err := url.Parse(addr) if err != nil { t.Fatal(err) } err = distributor.ListenReplication(srv, uri) if err != nil { t.Fatal(err) } out = append(out, srv) } // Heartbeat time.Sleep(10 * time.Millisecond) return out, s }
func runServer(cmd *cobra.Command, args []string) { if completion { cmd.Root().GenBashCompletion(os.Stdout) os.Exit(0) } var ( srv *torus.Server err error ) switch { case cfg.MetadataAddress == "": srv, err = torus.NewServer(cfg, "temp", "mfile") case debugInit: err = torus.InitMDS("etcd", cfg, torus.GlobalMetadata{ BlockSize: 512 * 1024, DefaultBlockSpec: blockset.MustParseBlockLayerSpec("crc,base"), }, ring.Ketama) if err != nil { if err == torus.ErrExists { fmt.Println("debug-init: Already exists") } else { fmt.Printf("Couldn't debug-init: %s\n", err) os.Exit(1) } } fallthrough default: srv, err = torus.NewServer(cfg, "etcd", "mfile") } if err != nil { fmt.Printf("Couldn't start: %s\n", err) os.Exit(1) } if autojoin { err = doAutojoin(srv) if err != nil { fmt.Printf("Couldn't auto-join: %s\n", err) os.Exit(1) } } mainClose := make(chan bool) signalChan := make(chan os.Signal, 1) signal.Notify(signalChan, os.Interrupt) if peerAddress != "" { var u *url.URL u, err = url.Parse(peerAddress) if err != nil { fmt.Printf("Couldn't parse peer address %s: %s\n", peerAddress, err) os.Exit(1) } if u.Scheme == "" { fmt.Printf("Peer address %s does not have URL scheme (http:// or tdp://)\n", peerAddress) os.Exit(1) } err = distributor.ListenReplication(srv, u) } else { err = distributor.OpenReplication(srv) } defer srv.Close() go func() { for _ = range signalChan { fmt.Println("\nReceived an interrupt, stopping services...") close(mainClose) os.Exit(0) } }() if err != nil { fmt.Println("couldn't use server:", err) os.Exit(1) } if httpAddress != "" { http.ServeHTTP(httpAddress, srv) } // Wait <-mainClose }