func interactiveSplitDiff(wr *wrangler.Wrangler, w http.ResponseWriter, r *http.Request) { if err := r.ParseForm(); err != nil { httpError(w, "cannot parse form: %s", err) return } keyspace := r.FormValue("keyspace") shard := r.FormValue("shard") if keyspace == "" || shard == "" { // display the list of possible shards to chose from result := make(map[string]interface{}) shards, err := shardsWithSources(wr) if err != nil { result["Error"] = err.Error() } else { result["Shards"] = shards } executeTemplate(w, splitDiffTemplate, result) } else { // start the diff job wrk := worker.NewSplitDiffWorker(wr, *cell, keyspace, shard) if _, err := setAndStartWorker(wrk); err != nil { httpError(w, "cannot set worker: %s", err) return } http.Redirect(w, r, servenv.StatusURLPath(), http.StatusTemporaryRedirect) } }
func commandSplitDiff(wr *wrangler.Wrangler, subFlags *flag.FlagSet, args []string) worker.Worker { subFlags.Parse(args) if subFlags.NArg() != 1 { log.Fatalf("command SplitDiff requires <keyspace/shard|zk shard path>") } keyspace, shard := shardParamToKeyspaceShard(subFlags.Arg(0)) return worker.NewSplitDiffWorker(wr, *cell, keyspace, shard) }
func interactiveSplitDiff(ctx context.Context, wr *wrangler.Wrangler, w http.ResponseWriter, r *http.Request) { if err := r.ParseForm(); err != nil { httpError(w, "cannot parse form: %s", err) return } keyspace := r.FormValue("keyspace") shard := r.FormValue("shard") if keyspace == "" || shard == "" { // display the list of possible shards to chose from result := make(map[string]interface{}) shards, err := shardsWithSources(ctx, wr) if err != nil { result["Error"] = err.Error() } else { result["Shards"] = shards } executeTemplate(w, splitDiffTemplate, result) return } submitButtonValue := r.FormValue("submit") if submitButtonValue == "" { // display the input form result := make(map[string]interface{}) result["Keyspace"] = keyspace result["Shard"] = shard executeTemplate(w, splitDiffTemplate2, result) return } // Process input form. excludeTables := r.FormValue("excludeTables") var excludeTableArray []string if excludeTables != "" { excludeTableArray = strings.Split(excludeTables, ",") } // start the diff job wrk := worker.NewSplitDiffWorker(wr, *cell, keyspace, shard, excludeTableArray) if _, err := setAndStartWorker(wrk); err != nil { httpError(w, "cannot set worker: %s", err) return } http.Redirect(w, r, servenv.StatusURLPath(), http.StatusTemporaryRedirect) }
func commandSplitDiff(wr *wrangler.Wrangler, subFlags *flag.FlagSet, args []string) (worker.Worker, error) { excludeTables := subFlags.String("exclude_tables", "", "comma separated list of tables to exclude") subFlags.Parse(args) if subFlags.NArg() != 1 { return nil, fmt.Errorf("command SplitDiff requires <keyspace/shard>") } keyspace, shard, err := topo.ParseKeyspaceShardString(subFlags.Arg(0)) if err != nil { return nil, err } var excludeTableArray []string if *excludeTables != "" { excludeTableArray = strings.Split(*excludeTables, ",") } return worker.NewSplitDiffWorker(wr, *cell, keyspace, shard, excludeTableArray), nil }