From 70939ecfdab62f6a7fb3ed901bb3c9b82b067bd5 Mon Sep 17 00:00:00 2001 From: Jeffrey Picard Date: Thu, 3 Feb 2022 14:18:00 -0500 Subject: [PATCH] asdf --- db/db.go | 167 ++++++++++++++++++++++++++++++++++- db/db_test.go | 104 +++++++++++++++++++--- db/prefixes/prefixes.go | 2 +- db/prefixes/prefixes_test.go | 23 +++-- go.mod | 1 - go.sum | 34 ------- main.go | 38 ++++++-- server/args.go | 4 + 8 files changed, 307 insertions(+), 66 deletions(-) diff --git a/db/db.go b/db/db.go index 1edaf07..fbda6ef 100644 --- a/db/db.go +++ b/db/db.go @@ -3,11 +3,13 @@ package db import ( "bytes" "encoding/hex" + "fmt" "log" "math" "os" "github.com/lbryio/hub/db/prefixes" + "github.com/lbryio/lbry.go/v2/extras/util" "github.com/linxGnu/grocksdb" ) @@ -76,6 +78,7 @@ type IterOptions struct { IncludeValue bool RawKey bool RawValue bool + CfHandle *grocksdb.ColumnFamilyHandle It *grocksdb.Iterator } @@ -92,10 +95,16 @@ func NewIterateOptions() *IterOptions { IncludeValue: false, RawKey: false, RawValue: false, + CfHandle: nil, It: nil, } } +func (o *IterOptions) WithCfHandle(cfHandle *grocksdb.ColumnFamilyHandle) *IterOptions { + o.CfHandle = cfHandle + return o +} + func (o *IterOptions) WithFillCache(fillCache bool) *IterOptions { o.FillCache = fillCache return o @@ -165,8 +174,47 @@ func (o *IterOptions) StopIteration(key []byte) bool { return false } -func ParseURL(url string) (stream string, channel string, err error) { - return "", "", nil +type PathSegment struct { + name string + claimId string + amountOrder int +} + +func (ps *PathSegment) Normalized() string { + return util.NormalizeName(ps.name) +} + +func (ps *PathSegment) IsShortId() bool { + return ps.claimId != "" && len(ps.claimId) < 40 +} + +func (ps *PathSegment) IsFullId() bool { + return len(ps.claimId) == 40 +} + +func (ps *PathSegment) String() string { + if ps.claimId != "" { + return fmt.Sprintf("%s:%s", ps.name, ps.claimId) + } else if ps.amountOrder != 0 { + return fmt.Sprintf("%s:%d", ps.name, ps.amountOrder) + } + return ps.name +} + +type URL struct { + stream *PathSegment + channel *PathSegment +} + +func NewURL() *URL { + return &URL{ + stream: nil, + channel: nil, + } +} + +func ParseURL(url string) (parsed *URL, err error) { + return NewURL(), nil } func Resolve(db *grocksdb.DB, url string) *ExpandedResolveResult { @@ -177,7 +225,7 @@ func Resolve(db *grocksdb.DB, url string) *ExpandedResolveResult { RepostedChannel: nil, } - stream, channel, err := ParseURL(url) + parsed, err := ParseURL(url) if err != nil { res.Stream = &optionalResolveResultOrError{ err: &ResolveError{err}, @@ -185,7 +233,7 @@ func Resolve(db *grocksdb.DB, url string) *ExpandedResolveResult { return res } - log.Println(stream, channel) + log.Printf("parsed: %+v\n", parsed) return res } @@ -248,6 +296,39 @@ func (opts *IterOptions) ReadRow(ch chan *prefixes.PrefixRowKV, prevKey *[]byte) return true } +func IterCF(db *grocksdb.DB, opts *IterOptions) <-chan *prefixes.PrefixRowKV { + ch := make(chan *prefixes.PrefixRowKV) + + ro := grocksdb.NewDefaultReadOptions() + ro.SetFillCache(opts.FillCache) + it := db.NewIteratorCF(ro, opts.CfHandle) + // it := db.NewIterator(ro) + opts.It = it + + it.Seek(opts.Prefix) + if opts.Start != nil { + it.Seek(opts.Start) + } + + go func() { + defer it.Close() + defer close(ch) + + var prevKey []byte = nil + if !opts.IncludeStart { + it.Next() + } + if !it.Valid() && opts.IncludeStop { + opts.ReadRow(ch, &prevKey) + } + for ; !opts.StopIteration(prevKey) && it.Valid(); it.Next() { + opts.ReadRow(ch, &prevKey) + } + }() + + return ch +} + func Iter(db *grocksdb.DB, opts *IterOptions) <-chan *prefixes.PrefixRowKV { ch := make(chan *prefixes.PrefixRowKV) @@ -280,6 +361,48 @@ func Iter(db *grocksdb.DB, opts *IterOptions) <-chan *prefixes.PrefixRowKV { return ch } +func GetWriteDBCF(name string) (*grocksdb.DB, []*grocksdb.ColumnFamilyHandle, error) { + opts := grocksdb.NewDefaultOptions() + cfOpt := grocksdb.NewDefaultOptions() + cfNames, err := grocksdb.ListColumnFamilies(opts, name) + if err != nil { + return nil, nil, err + } + cfOpts := make([]*grocksdb.Options, len(cfNames)) + for i, _ := range cfNames { + cfOpts[i] = cfOpt + } + db, handles, err := grocksdb.OpenDbColumnFamilies(opts, name, cfNames, cfOpts) + if err != nil { + return nil, nil, err + } + + for i, handle := range handles { + log.Printf("%d: %s, %+v\n", i, cfNames[i], handle) + } + + return db, handles, nil +} + +func GetDBCF(name string, cf string) (*grocksdb.DB, []*grocksdb.ColumnFamilyHandle, error) { + opts := grocksdb.NewDefaultOptions() + cfOpt := grocksdb.NewDefaultOptions() + + cfNames := []string{"default", cf} + cfOpts := []*grocksdb.Options{cfOpt, cfOpt} + + db, handles, err := grocksdb.OpenDbAsSecondaryColumnFamilies(opts, name, "asdf", cfNames, cfOpts) + + for i, handle := range handles { + log.Printf("%d: %+v\n", i, handle) + } + if err != nil { + return nil, nil, err + } + + return db, handles, nil +} + func GetDB(name string) (*grocksdb.DB, error) { opts := grocksdb.NewDefaultOptions() db, err := grocksdb.OpenDbAsSecondary(opts, name, "asdf") @@ -321,6 +444,42 @@ func ReadPrefixN(db *grocksdb.DB, prefix []byte, n int) []*prefixes.PrefixRowKV return res } +func ReadWriteRawNCF(db *grocksdb.DB, options *IterOptions, out string, n int) { + + options.RawKey = true + options.RawValue = true + ch := IterCF(db, options) + + file, err := os.Create(out) + if err != nil { + log.Println(err) + return + } + defer file.Close() + + var i = 0 + log.Println(options.Prefix) + file.Write([]byte(fmt.Sprintf("%s,\n", options.Prefix))) + for kv := range ch { + log.Println(i) + if i >= n { + return + } + key := kv.Key.([]byte) + value := kv.Value.([]byte) + keyHex := hex.EncodeToString(key) + valueHex := hex.EncodeToString(value) + log.Println(keyHex) + log.Println(valueHex) + file.WriteString(keyHex) + file.WriteString(",") + file.WriteString(valueHex) + file.WriteString("\n") + + i++ + } +} + func ReadWriteRawN(db *grocksdb.DB, options *IterOptions, out string, n int) { options.RawKey = true diff --git a/db/db_test.go b/db/db_test.go index a34f71c..4b829a0 100644 --- a/db/db_test.go +++ b/db/db_test.go @@ -1,4 +1,4 @@ -package db +package db_test import ( "bytes" @@ -8,13 +8,12 @@ import ( "os" "testing" + dbpkg "github.com/lbryio/hub/db" "github.com/lbryio/hub/db/prefixes" "github.com/linxGnu/grocksdb" ) -func TestIter(t *testing.T) { - - filePath := "../resources/reposted_claim.csv" +func OpenAndFillTmpDBCF(filePath string) (*grocksdb.DB, [][]string, func(), *grocksdb.ColumnFamilyHandle, error) { log.Println(filePath) file, err := os.Open(filePath) @@ -24,7 +23,7 @@ func TestIter(t *testing.T) { reader := csv.NewReader(file) records, err := reader.ReadAll() if err != nil { - log.Println(err) + return nil, nil, nil, nil, err } wOpts := grocksdb.NewDefaultWriteOptions() @@ -32,29 +31,105 @@ func TestIter(t *testing.T) { opts.SetCreateIfMissing(true) db, err := grocksdb.OpenDb(opts, "tmp") if err != nil { - log.Println(err) + return nil, nil, nil, nil, err } - defer func() { + handle, err := db.CreateColumnFamily(opts, records[0][0]) + if err != nil { + return nil, nil, nil, nil, err + } + toDefer := func() { db.Close() err = os.RemoveAll("./tmp") if err != nil { log.Println(err) } - }() - for _, record := range records { + } + for _, record := range records[1:] { key, err := hex.DecodeString(record[0]) if err != nil { - log.Println(err) + return nil, nil, nil, nil, err } val, err := hex.DecodeString(record[1]) + if err != nil { + return nil, nil, nil, nil, err + } + db.PutCF(wOpts, handle, key, val) + } + + return db, records, toDefer, handle, nil +} + +func OpenAndFillTmpDB(filePath string) (*grocksdb.DB, [][]string, func(), error) { + + log.Println(filePath) + file, err := os.Open(filePath) + if err != nil { + log.Println(err) + } + reader := csv.NewReader(file) + records, err := reader.ReadAll() + if err != nil { + return nil, nil, nil, err + } + + wOpts := grocksdb.NewDefaultWriteOptions() + opts := grocksdb.NewDefaultOptions() + opts.SetCreateIfMissing(true) + db, err := grocksdb.OpenDb(opts, "tmp") + if err != nil { + return nil, nil, nil, err + } + toDefer := func() { + db.Close() + err = os.RemoveAll("./tmp") if err != nil { log.Println(err) } + } + for _, record := range records { + key, err := hex.DecodeString(record[0]) + if err != nil { + return nil, nil, nil, err + } + val, err := hex.DecodeString(record[1]) + if err != nil { + return nil, nil, nil, err + } db.Put(wOpts, key, val) } + + return db, records, toDefer, nil +} + +func TestResolve(t *testing.T) { + filePath := "../resources/reposted_claim.csv" + db, _, toDefer, err := OpenAndFillTmpDB(filePath) + if err != nil { + t.Error(err) + return + } + defer toDefer() + expandedResolveResult := dbpkg.Resolve(db, "asdf") + log.Println(expandedResolveResult) +} + +func TestIter(t *testing.T) { + + filePath := "../resources/reposted_claim.csv" + + db, records, toDefer, handle, err := OpenAndFillTmpDBCF(filePath) + if err != nil { + t.Error(err) + return + } + // skip the cf + records = records[1:] + defer toDefer() // test prefix - options := NewIterateOptions().WithPrefix([]byte{prefixes.RepostedClaim}).WithIncludeValue(true) - ch := Iter(db, options) + options := dbpkg.NewIterateOptions().WithPrefix([]byte{prefixes.RepostedClaim}).WithIncludeValue(true) + options = options.WithCfHandle(handle) + // ch := dbpkg.Iter(db, options) + ch := dbpkg.IterCF(db, options) var i = 0 for kv := range ch { // log.Println(kv.Key) @@ -102,8 +177,9 @@ func TestIter(t *testing.T) { if err != nil { log.Println(err) } - options2 := NewIterateOptions().WithStart(start).WithStop(stop).WithIncludeValue(true) - ch2 := Iter(db, options2) + options2 := dbpkg.NewIterateOptions().WithStart(start).WithStop(stop).WithIncludeValue(true) + options2 = options2.WithCfHandle(handle) + ch2 := dbpkg.IterCF(db, options2) i = 0 for kv := range ch2 { got := kv.Value.(*prefixes.RepostedValue).PackValue() diff --git a/db/prefixes/prefixes.go b/db/prefixes/prefixes.go index 09408bc..3f5356b 100644 --- a/db/prefixes/prefixes.go +++ b/db/prefixes/prefixes.go @@ -10,7 +10,7 @@ import ( "sort" "strings" - "github.com/lbryio/lbry.go/extras/errors" + "github.com/lbryio/lbry.go/v2/extras/errors" ) const ( diff --git a/db/prefixes/prefixes_test.go b/db/prefixes/prefixes_test.go index 3c33d58..4e130a6 100644 --- a/db/prefixes/prefixes_test.go +++ b/db/prefixes/prefixes_test.go @@ -14,7 +14,7 @@ import ( "github.com/linxGnu/grocksdb" ) -func testInit(filePath string) (*grocksdb.DB, [][]string, func()) { +func testInit(filePath string) (*grocksdb.DB, [][]string, func(), *grocksdb.ColumnFamilyHandle) { log.Println(filePath) file, err := os.Open(filePath) if err != nil { @@ -25,6 +25,8 @@ func testInit(filePath string) (*grocksdb.DB, [][]string, func()) { if err != nil { log.Println(err) } + columnFamily := records[0][0] + records = records[1:] // wOpts := grocksdb.NewDefaultWriteOptions() opts := grocksdb.NewDefaultOptions() @@ -33,6 +35,10 @@ func testInit(filePath string) (*grocksdb.DB, [][]string, func()) { if err != nil { log.Println(err) } + handle, err := db.CreateColumnFamily(opts, columnFamily) + if err != nil { + log.Println(err) + } toDefer := func() { db.Close() err = os.RemoveAll("./tmp") @@ -41,14 +47,14 @@ func testInit(filePath string) (*grocksdb.DB, [][]string, func()) { } } - return db, records, toDefer + return db, records, toDefer, handle } func testGeneric(filePath string, prefix byte, numPartials int) func(*testing.T) { return func(t *testing.T) { wOpts := grocksdb.NewDefaultWriteOptions() - db, records, toDefer := testInit(filePath) + db, records, toDefer, handle := testInit(filePath) defer toDefer() for _, record := range records { key, err := hex.DecodeString(record[0]) @@ -59,11 +65,13 @@ func testGeneric(filePath string, prefix byte, numPartials int) func(*testing.T) if err != nil { log.Println(err) } - db.Put(wOpts, key, val) + // db.Put(wOpts, key, val) + db.PutCF(wOpts, handle, key, val) } // test prefix options := dbpkg.NewIterateOptions().WithPrefix([]byte{prefix}).WithIncludeValue(true) - ch := dbpkg.Iter(db, options) + options = options.WithCfHandle(handle) + ch := dbpkg.IterCF(db, options) var i = 0 for kv := range ch { // log.Println(kv.Key) @@ -116,7 +124,8 @@ func testGeneric(filePath string, prefix byte, numPartials int) func(*testing.T) log.Println(err) } options2 := dbpkg.NewIterateOptions().WithStart(start).WithStop(stop).WithIncludeValue(true) - ch2 := dbpkg.Iter(db, options2) + options2 = options2.WithCfHandle(handle) + ch2 := dbpkg.IterCF(db, options2) i = 0 for kv := range ch2 { got, err := prefixes.PackGenericValue(prefix, kv.Value) @@ -258,7 +267,7 @@ func TestRepost(t *testing.T) { } func TestRepostedClaim(t *testing.T) { - filePath := "../../resources/reposted_claim.csv" + filePath := "../../resources/reposted_claim_cf.csv" testGeneric(filePath, prefixes.RepostedClaim, 3)(t) } diff --git a/go.mod b/go.mod index 542074f..b6b44e9 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,6 @@ go 1.16 require ( github.com/ReneKroon/ttlcache/v2 v2.8.1 github.com/akamensky/argparse v1.2.2 - github.com/lbryio/lbry.go v1.1.2 github.com/lbryio/lbry.go/v2 v2.7.2-0.20210625145058-2b155597bf57 github.com/linxGnu/grocksdb v1.6.42 github.com/olivere/elastic/v7 v7.0.24 diff --git a/go.sum b/go.sum index 4e2e132..f191980 100644 --- a/go.sum +++ b/go.sum @@ -11,7 +11,6 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/aws/aws-sdk-go v1.38.3/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= @@ -47,10 +46,8 @@ github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= github.com/go-errors/errors v1.1.1 h1:ljK/pL5ltg3qoN+OtN6yCv9HWSfMwxSx90GJCZQxYNg= github.com/go-errors/errors v1.1.1/go.mod h1:psDX2osz5VnTOnFWbDeWwS7yejl+uV3FEWEp4lssFEs= -github.com/go-ini/ini v1.38.2/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-ini/ini v1.48.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= @@ -58,7 +55,6 @@ github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vb github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-ozzo/ozzo-validation v3.5.0+incompatible/go.mod h1:gsEKFIVnabGBt6mXmxK0MoFy+cZoTJY6mu5Ll3LVLBU= github.com/go-ozzo/ozzo-validation v3.6.0+incompatible/go.mod h1:gsEKFIVnabGBt6mXmxK0MoFy+cZoTJY6mu5Ll3LVLBU= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= @@ -67,7 +63,6 @@ github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfU github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= @@ -93,12 +88,8 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gopherjs/gopherjs v0.0.0-20190915194858-d3ddacdb130f/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/rpc v1.1.0/go.mod h1:V4h9r+4sF5HnzqbwIez0fKSpANP0zlYd3qR7p36jkTQ= github.com/gorilla/rpc v1.2.0/go.mod h1:V4h9r+4sF5HnzqbwIez0fKSpANP0zlYd3qR7p36jkTQ= github.com/gorilla/websocket v1.2.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1 h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvKCM= @@ -114,11 +105,9 @@ github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlT github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -130,25 +119,17 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/lbryio/errors.go v0.0.0-20180223142025-ad03d3cc6a5c/go.mod h1:muH7wpUqE8hRA3OrYYosw9+Sl681BF9cwcjzE+OCNK8= -github.com/lbryio/lbry.go v1.1.2 h1:Dyxc+glT/rVWJwHfIf7vjlPYYbjzrQz5ARmJd5Hp69c= -github.com/lbryio/lbry.go v1.1.2/go.mod h1:JtyI30bU51rm0LZ/po3mQuzf++14OWb6kR/6mMRAmKU= github.com/lbryio/lbry.go/v2 v2.7.2-0.20210625145058-2b155597bf57 h1:Dzg3a7M9EWS48D0mbYInBjeqX/LB5qRuDgG29ktpmw8= github.com/lbryio/lbry.go/v2 v2.7.2-0.20210625145058-2b155597bf57/go.mod h1:I1q8W9fwU+t0IWNiprPgE1SorWQwcO6ser0nzP3L5Pk= -github.com/lbryio/lbryschema.go v0.0.0-20190428231007-c54836bca002/go.mod h1:dAzPCBj3CKKWBGYBZxK6tKBP5SCgY2tqd9SnQd/OyKo= github.com/lbryio/ozzo-validation v0.0.0-20170323141101-d1008ad1fd04/go.mod h1:fbG/dzobG8r95KzMwckXiLMHfFjZaBRQqC9hPs2XAQ4= -github.com/lbryio/types v0.0.0-20190422033210-321fb2abda9c/go.mod h1:CG3wsDv5BiVYQd5i1Jp7wGsaVyjZTJshqXeWMVKsISE= github.com/lbryio/types v0.0.0-20201019032447-f0b4476ef386/go.mod h1:CG3wsDv5BiVYQd5i1Jp7wGsaVyjZTJshqXeWMVKsISE= github.com/linxGnu/grocksdb v1.6.42 h1:nJLoXFuzwBwQQQrXTUgRGRz1QRm7y8pR6CNV/gwrbqs= github.com/linxGnu/grocksdb v1.6.42/go.mod h1:JcMMDBFaDNhRXFYcYXmgQwb/RarSld1PulTI7UzE+w0= -github.com/lusis/go-slackbot v0.0.0-20180109053408-401027ccfef5/go.mod h1:c2mYKRyMb1BPkO5St0c/ps62L4S0W2NAkaTXj9qEI+0= -github.com/lusis/slack-test v0.0.0-20180109053238-3c758769bfa6/go.mod h1:sFlOUpQL1YcjhFVXhg1CG8ZASEs/Mf1oVb6H75JL/zg= github.com/lyoshenka/bencode v0.0.0-20180323155644-b7abd7672df5/go.mod h1:H0aPCWffGOaDcjkw1iB7W9DVLp6GXmfcJY/7YZCWPA4= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/mitchellh/mapstructure v0.0.0-20180511142126-bb74f1db0675/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -156,7 +137,6 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/nlopes/slack v0.5.0/go.mod h1:jVI4BBK3lSktibKahxBF74txcK2vyvkza1z/+rRnVAM= github.com/nlopes/slack v0.6.0 h1:jt0jxVQGhssx1Ib7naAOZEZcGdtIhTzkP0nopK0AsRA= github.com/nlopes/slack v0.6.0/go.mod h1:JzQ9m3PMAqcpeCam7UaHSuBuupz7CmpjehYMayT6YOk= github.com/olivere/elastic/v7 v7.0.24 h1:9ZcCQP3Pvgese7TaypYiVAL49sCEphyIwkVxtRf8jb8= @@ -192,10 +172,8 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/sebdah/goldie v0.0.0-20180424091453-8784dd1ab561/go.mod h1:lvjGftC8oe7XPtyrOidaMi0rp5B9+XY/ZRUynGnuaxQ= github.com/sebdah/goldie v0.0.0-20190531093107-d313ffb52c77/go.mod h1:jXP4hmWywNEwZzhMuv2ccnqTSFpuq8iyQhtQdkkZBH4= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/shopspring/decimal v0.0.0-20180607144847-19e3cb6c2930/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= github.com/shopspring/decimal v0.0.0-20191009025716-f1972eb1d1f5/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= @@ -205,10 +183,8 @@ github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1 github.com/smartystreets/assertions v1.0.1/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM= github.com/smartystreets/assertions v1.1.1/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo= github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM= -github.com/smartystreets/goconvey v0.0.0-20181108003508-044398e4856c/go.mod h1:XDJAKZRPZ1CvBcN2aX5YOUTYGHki24fSF0Iv48Ibg0s= github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/smartystreets/gunit v1.4.2/go.mod h1:ZjM1ozSIMJlAz/ay4SG8PeKF00ckUp+zMHZXV9/bvak= -github.com/spf13/cast v1.2.0/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -219,11 +195,9 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/uber-go/atomic v1.3.2/go.mod h1:/Ct5t2lcmbJ4OSe/waGBoaVvVqtO0bmtfVNex1PFV8g= github.com/ybbus/jsonrpc v0.0.0-20180411222309-2a548b7d822d/go.mod h1:XJrh1eMSzdIYFbM08flv0wp5G35eRniyeGut1z+LSiE= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/goleak v1.1.10 h1:z+mqJhf6ss6BSfSM671tgKyZBFPTTJM+HLxnhPC3wu0= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= @@ -276,7 +250,6 @@ golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190520201301-c432e742b0af/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191009170203-06d7bd2c5f4f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -297,9 +270,7 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190921001708-c4c64cad1fd0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= @@ -320,14 +291,11 @@ golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8T google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181004005441-af9cb2a35e7f/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20191009194640-548a555dbc03/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20210524171403-669157292da3 h1:xFyh6GBb+NO1L0xqb978I3sBPQpk6FrKO0jJGRvdj/0= google.golang.org/genproto v0.0.0-20210524171403-669157292da3/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= -google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= @@ -356,7 +324,6 @@ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/ini.v1 v1.41.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.48.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/karalabe/cookiejar.v1 v1.0.0-20141109175019-e1490cae028c h1:4GYkPhjcYLPrPAnoxHVQlH/xcXtWN8pEgqBnHrPAs8c= gopkg.in/karalabe/cookiejar.v1 v1.0.0-20141109175019-e1490cae028c/go.mod h1:xd7qpr5uPMNy4hsRJ5JEBXA8tJjTFmUI1soCjlCIgAE= @@ -373,6 +340,5 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= -honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/main.go b/main.go index 3b940e7..789890d 100644 --- a/main.go +++ b/main.go @@ -31,11 +31,6 @@ func main() { return } else if args.CmdType == server.DBCmd { - dbVal, err := db.GetDB("/mnt/d/data/wallet/lbry-rocksdb/") - if err != nil { - log.Fatalln(err) - } - options := &db.IterOptions{ FillCache: false, Prefix: []byte{prefixes.SupportAmount}, @@ -49,8 +44,41 @@ func main() { RawValue: true, } + dbVal, err := db.GetDB("/mnt/d/data/wallet/lbry-rocksdb/") + if err != nil { + log.Fatalln(err) + } + db.ReadWriteRawN(dbVal, options, "./resources/support_amount.csv", 10) + return + } else if args.CmdType == server.DBCmd2 { + var rawPrefix byte = prefixes.RepostedClaim + + prefix := []byte{rawPrefix} + columnFamily := string(prefix) + options := &db.IterOptions{ + FillCache: false, + Prefix: prefix, + Start: nil, + Stop: nil, + IncludeStart: true, + IncludeStop: false, + IncludeKey: true, + IncludeValue: true, + RawKey: true, + RawValue: true, + } + + dbVal, handles, err := db.GetDBCF("/mnt/d/data/snapshot_1072108/lbry-rocksdb/", columnFamily) + if err != nil { + log.Fatalln(err) + } + + options.CfHandle = handles[1] + + db.ReadWriteRawNCF(dbVal, options, "./resources/reposted_claim_cf.csv", 10) + return } diff --git a/server/args.go b/server/args.go index d03b1dd..8b8cb3e 100644 --- a/server/args.go +++ b/server/args.go @@ -13,6 +13,7 @@ const ( ServeCmd = iota SearchCmd = iota DBCmd = iota + DBCmd2 = iota ) // Args struct contains the arguments to the hub server. @@ -85,6 +86,7 @@ func ParseArgs(searchRequest *pb.SearchRequest) *Args { serveCmd := parser.NewCommand("serve", "start the hub server") searchCmd := parser.NewCommand("search", "claim search") dbCmd := parser.NewCommand("db", "db testing") + dbCmd2 := parser.NewCommand("db2", "db testing") host := parser.String("", "rpchost", &argparse.Options{Required: false, Help: "RPC host", Default: DefaultHost}) port := parser.String("", "rpcport", &argparse.Options{Required: false, Help: "RPC port", Default: DefaultPort}) @@ -171,6 +173,8 @@ func ParseArgs(searchRequest *pb.SearchRequest) *Args { args.CmdType = SearchCmd } else if dbCmd.Happened() { args.CmdType = DBCmd + } else if dbCmd2.Happened() { + args.CmdType = DBCmd2 } if *text != "" {