github.com/tickoalcantara12/micro/v3@v3.0.0-20221007104245-9d75b9bcbab9/client/cli/store/sync.go (about) 1 package cli 2 3 import ( 4 "github.com/pkg/errors" 5 "github.com/urfave/cli/v2" 6 ) 7 8 // sync is the entrypoint for micro store sync 9 func sync(ctx *cli.Context) error { 10 from, to, err := makeStores(ctx) 11 if err != nil { 12 return errors.Wrap(err, "Sync") 13 } 14 15 keys, err := from.List() 16 if err != nil { 17 return errors.Wrapf(err, "couldn't list from store %s", from.String()) 18 } 19 for _, k := range keys { 20 r, err := from.Read(k) 21 if err != nil { 22 return errors.Wrapf(err, "couldn't read %s from store %s", k, from.String()) 23 } 24 if len(r) != 1 { 25 return errors.Errorf("received multiple records reading %s from %s", k, from.String()) 26 } 27 err = to.Write(r[0]) 28 if err != nil { 29 return errors.Wrapf(err, "couldn't write %s to store %s", k, to.String()) 30 } 31 } 32 return nil 33 } 34 35 // SyncFlags are the flags for micro store sync 36 var SyncFlags = []cli.Flag{ 37 &cli.StringFlag{ 38 Name: "from-backend", 39 Usage: "Backend to sync from", 40 EnvVars: []string{"MICRO_STORE_FROM"}, 41 }, 42 &cli.StringFlag{ 43 Name: "from-nodes", 44 Usage: "Nodes to sync from", 45 EnvVars: []string{"MICRO_STORE_FROM_NODES"}, 46 }, 47 &cli.StringFlag{ 48 Name: "from-database", 49 Usage: "Database to sync from", 50 EnvVars: []string{"MICRO_STORE_FROM_DATABASE"}, 51 }, 52 &cli.StringFlag{ 53 Name: "from-table", 54 Usage: "Table to sync from", 55 EnvVars: []string{"MICRO_STORE_FROM_TABLE"}, 56 }, 57 &cli.StringFlag{ 58 Name: "to-backend", 59 Usage: "Backend to sync to", 60 EnvVars: []string{"MICRO_STORE_TO"}, 61 }, 62 &cli.StringFlag{ 63 Name: "to-nodes", 64 Usage: "Nodes to sync to", 65 EnvVars: []string{"MICRO_STORE_TO_NODES"}, 66 }, 67 &cli.StringFlag{ 68 Name: "to-database", 69 Usage: "Database to sync to", 70 EnvVars: []string{"MICRO_STORE_TO_DATABASE"}, 71 }, 72 &cli.StringFlag{ 73 Name: "to-table", 74 Usage: "Table to sync to", 75 EnvVars: []string{"MICRO_STORE_TO_TABLE"}, 76 }, 77 }