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  }