From 9631d339b08c36bc14d333a8171bcd969d74a729 Mon Sep 17 00:00:00 2001 From: bel Date: Thu, 5 Aug 2021 21:24:46 -0600 Subject: [PATCH] workin on migr8 fix double def name --- cli/{main.go => cli.go} | 0 cli/ls_s3.sh | 2 +- cli/migr8.go | 73 +++++++++++++++++++++++++++++++++++++++++ db.go | 2 -- map.go | 2 +- mongo.go | 6 ++-- 6 files changed, 78 insertions(+), 7 deletions(-) rename cli/{main.go => cli.go} (100%) create mode 100644 cli/migr8.go diff --git a/cli/main.go b/cli/cli.go similarity index 100% rename from cli/main.go rename to cli/cli.go diff --git a/cli/ls_s3.sh b/cli/ls_s3.sh index fdba7e0..08fafcc 100755 --- a/cli/ls_s3.sh +++ b/cli/ls_s3.sh @@ -9,7 +9,7 @@ function main() { local max="${2:-"}}}"}" shift shift - go run main.go \ + go run cli.go \ -do list \ -db minio \ -addr "https://s3-$region.amazonaws.com" \ diff --git a/cli/migr8.go b/cli/migr8.go new file mode 100644 index 0000000..6bf7873 --- /dev/null +++ b/cli/migr8.go @@ -0,0 +1,73 @@ +package main + +import ( + "fmt" + "local/args" + "local/storage" + "local/storage/resolve" + "log" +) + +type Config struct { + DBs [2]storage.DB + Dry bool +} + +func (config Config) String() string { + return fmt.Sprintf("{1:%T 2:%T Dry:%v}", config.DBs[0], config.DBs[1], config.Dry) +} + +func main() { + c := config() + resolve.DefaultNamespace = "" + keys, err := c.DBs[0].List(nil) + if err != nil { + panic(err) + } + log.Println(c) + for _, key := range keys { + v, err := c.DBs[0].Get(key) + if err != nil { + panic(err) + } + if c.Dry { + log.Printf("c.DBs[1].Set(%s, %s)", key, v) + } else if err := c.DBs[1].Set(key, v); err != nil { + panic(err) + } + } +} + +func config() Config { + as := args.NewArgSet() + for i := range [2]int{} { + s := fmt.Sprint(i + 1) + as.Append(args.STRING, s+"usr", s+"'s user", "") + as.Append(args.STRING, s+"pwd", s+"'s password", "") + as.Append(args.STRING, s+"addr", s+"'s addr", "") + as.Append(args.STRING, s+"type", s+"'s type", "") + } + as.Append(args.BOOL, "dry", "dry run", false) + if err := as.Parse(); err != nil { + panic(err) + } + + stores := [2]storage.DB{} + for i := range stores { + var err error + stores[i], err = storage.New( + storage.TypeFromString(as.GetString(fmt.Sprint(i+1)+"type")), + as.GetString(fmt.Sprint(i+1)+"addr"), + as.GetString(fmt.Sprint(i+1)+"usr"), + as.GetString(fmt.Sprint(i+1)+"pwd"), + ) + if err != nil { + panic(err) + } + } + + return Config{ + DBs: stores, + Dry: as.GetBool("dry"), + } +} diff --git a/db.go b/db.go index 8529144..9bdcf3a 100755 --- a/db.go +++ b/db.go @@ -19,8 +19,6 @@ type DB interface { Close() error } -var DefaultNamespace = "namespace" - func New(key Type, params ...string) (db DB, err error) { defer func() { if i := recover(); i != nil { diff --git a/map.go b/map.go index c45807f..7b3c87e 100755 --- a/map.go +++ b/map.go @@ -46,7 +46,7 @@ func (m *Map) List(ns []string, limits ...string) ([]string, error) { keys := []string{} if _, ok := m.m[namespace]; !ok { - namespace = DefaultNamespace + namespace = resolve.DefaultNamespace } for k := range m.m[namespace] { if k >= limits[0] && k <= limits[1] { diff --git a/mongo.go b/mongo.go index f2039b9..bd71c3c 100755 --- a/mongo.go +++ b/mongo.go @@ -60,7 +60,7 @@ func (mg *Mongo) List(ns []string, limits ...string) ([]string, error) { limits = resolve.Limits(limits) ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) defer cancel() - collection := mg.db.Database(DefaultNamespace).Collection(namespace) + collection := mg.db.Database(resolve.DefaultNamespace).Collection(namespace) filter := bson.M{"_id": bson.M{ "$gte": limits[0], "$lte": limits[1], @@ -92,7 +92,7 @@ func (mg *Mongo) Get(key string, ns ...string) ([]byte, error) { namespace := resolve.Namespace(ns) ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) defer cancel() - collection := mg.db.Database(DefaultNamespace).Collection(namespace) + collection := mg.db.Database(resolve.DefaultNamespace).Collection(namespace) filter := bson.M{"_id": key} cursor, err := collection.Find(ctx, filter) if err != nil { @@ -122,7 +122,7 @@ func (mg *Mongo) Set(key string, value []byte, ns ...string) error { namespace := resolve.Namespace(ns) ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) defer cancel() - collection := mg.db.Database(DefaultNamespace).Collection(namespace) + collection := mg.db.Database(resolve.DefaultNamespace).Collection(namespace) filter := bson.M{"_id": key} document := bson.M{"value": value} _, err := collection.ReplaceOne(ctx, filter, document, options.Replace().SetUpsert(true))