Skip to content

Commit 5344434

Browse files
committed
lexi: Update badger if bad version.
1 parent 9079eb2 commit 5344434

File tree

13 files changed

+486
-11
lines changed

13 files changed

+486
-11
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,4 @@ server/cmd/dcrdex/evm-protocol-overrides.json
5858
client/bworg/bworg
5959
tatanka/cmd/tatanka/tatanka
6060
dex/politeia/politeia_test.db
61+
dex/lexi/cmd/lexidbexplorer/lexidbexplorer

client/asset/btc/txdb.go

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020

2121
"decred.org/dcrdex/client/asset"
2222
"decred.org/dcrdex/dex"
23+
"decred.org/dcrdex/dex/lexi"
2324
"github.com/dgraph-io/badger/v4"
2425
)
2526

@@ -119,12 +120,26 @@ func (db *BadgerTxDB) Connect(ctx context.Context) (*sync.WaitGroup, error) {
119120
// .WithValueLogLoadingMode(options.FileIO) // default options.MemoryMap
120121
// .WithMaxTableSize(sz int64); // bytes, default 6MB
121122
// .WithValueLogFileSize(sz int64), bytes, default 1 GB, must be 1MB <= sz <= 1GB
122-
opts := badger.DefaultOptions(db.filePath).WithLogger(&badgerLoggerWrapper{db.log})
123-
var err error
124-
db.DB, err = badger.Open(opts)
123+
v4Path, needs, err := lexi.NeedsV1toV4Update(db.filePath)
125124
if err != nil {
126125
return nil, err
127126
}
127+
opts := badger.DefaultOptions(v4Path).WithLogger(&badgerLoggerWrapper{db.log})
128+
if needs {
129+
db.DB, err = lexi.BadgerV1Update(db.filePath, v4Path, db.log, opts)
130+
if err != nil {
131+
db.log.Warnf("Unable to update old db, creating new one: %v", err)
132+
db.DB, err = badger.Open(opts)
133+
if err != nil {
134+
return nil, err
135+
}
136+
}
137+
} else {
138+
db.DB, err = badger.Open(opts)
139+
if err != nil {
140+
return nil, err
141+
}
142+
}
128143
db.ctx = ctx
129144
db.seq, err = db.GetSequence([]byte("seq"), 10)
130145
if err != nil {

client/asset/eth/txdb_legacy.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import (
1111
"time"
1212

1313
"decred.org/dcrdex/dex"
14-
"github.com/dgraph-io/badger/v4"
14+
"github.com/dgraph-io/badger" // Keep version 1
1515
"github.com/ethereum/go-ethereum/common"
1616
)
1717

@@ -99,6 +99,15 @@ func newBadgerTxDB(filePath string, log dex.Logger) (*badgerTxDB, error) {
9999
opts := badger.DefaultOptions(filePath).WithLogger(&badgerLoggerWrapper{log})
100100
var err error
101101
bdb, err := badger.Open(opts)
102+
if err == badger.ErrTruncateNeeded {
103+
// Probably a Windows thing.
104+
// https://github.com/dgraph-io/badger/issues/744
105+
log.Warnf("error opening badger db: %v", err)
106+
// Try again with value log truncation enabled.
107+
opts.Truncate = true
108+
log.Warnf("Attempting to reopen badger DB with the Truncate option set...")
109+
bdb, err = badger.Open(opts)
110+
}
102111
if err != nil {
103112
return nil, err
104113
}

client/asset/kvdb/kvdb.go

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"time"
1111

1212
"decred.org/dcrdex/dex"
13+
"decred.org/dcrdex/dex/lexi"
1314
"github.com/dgraph-io/badger/v4"
1415
)
1516

@@ -31,11 +32,27 @@ func NewFileDB(filePath string, log dex.Logger) (KeyValueDB, error) {
3132
// .WithValueLogLoadingMode(options.FileIO) // default options.MemoryMap
3233
// .WithMaxTableSize(sz int64); // bytes, default 6MB
3334
// .WithValueLogFileSize(sz int64), bytes, default 1 GB, must be 1MB <= sz <= 1GB
34-
opts := badger.DefaultOptions(filePath).WithLogger(&badgerLoggerWrapper{log})
35-
db, err := badger.Open(opts)
35+
v4Path, needs, err := lexi.NeedsV1toV4Update(filePath)
3636
if err != nil {
3737
return nil, err
3838
}
39+
opts := badger.DefaultOptions(v4Path).WithLogger(&badgerLoggerWrapper{log})
40+
var db *badger.DB
41+
if needs {
42+
db, err = lexi.BadgerV1Update(filePath, v4Path, log, opts)
43+
if err != nil {
44+
log.Warnf("Unable to update old db, creating new one: %v", err)
45+
db, err = badger.Open(opts)
46+
if err != nil {
47+
return nil, err
48+
}
49+
}
50+
} else {
51+
db, err = badger.Open(opts)
52+
if err != nil {
53+
return nil, err
54+
}
55+
}
3956

4057
return &kvDB{db, log}, nil
4158
}

client/cmd/bisonw-desktop/go.mod

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ require (
1313

1414
require (
1515
filippo.io/edwards25519 v1.0.0 // indirect
16+
github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 // indirect
1617
github.com/BurntSushi/toml v1.4.0 // indirect
1718
github.com/Microsoft/go-winio v0.6.2 // indirect
1819
github.com/ProjectZKM/Ziren/crates/go-runtime/zkvm_runtime v0.0.0-20251001021608-1fe7b43fc4d6 // indirect
@@ -23,6 +24,7 @@ require (
2324
github.com/bisoncraft/neutrino-bch v1.0.1 // indirect
2425
github.com/bisoncraft/op-geth v0.0.0-20250729074358-3cfe4f15e91c // indirect
2526
github.com/bits-and-blooms/bitset v1.22.0 // indirect
27+
github.com/cespare/xxhash v1.1.0 // indirect
2628
github.com/consensys/gnark-crypto v0.18.0 // indirect
2729
github.com/crate-crypto/go-eth-kzg v1.4.0 // indirect
2830
github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a // indirect
@@ -33,7 +35,9 @@ require (
3335
github.com/decred/dcrd/mixing v0.6.1 // indirect
3436
github.com/decred/vspd/client/v4 v4.0.2 // indirect
3537
github.com/decred/vspd/types/v3 v3.0.0 // indirect
38+
github.com/dgraph-io/badger v1.6.2 // indirect
3639
github.com/dgraph-io/badger/v4 v4.9.0 // indirect
40+
github.com/dgraph-io/ristretto v0.0.2 // indirect
3741
github.com/dgraph-io/ristretto/v2 v2.2.0 // indirect
3842
github.com/emicklei/dot v1.6.2 // indirect
3943
github.com/ethereum/c-kzg-4844/v2 v2.1.5 // indirect
@@ -43,6 +47,7 @@ require (
4347
github.com/go-logr/logr v1.4.3 // indirect
4448
github.com/go-logr/stdr v1.2.2 // indirect
4549
github.com/go-toast/toast v0.0.0-20190211030409-01e6764cf0a4 // indirect
50+
github.com/golang/protobuf v1.5.4 // indirect
4651
github.com/google/flatbuffers v25.2.10+incompatible // indirect
4752
github.com/holiman/billy v0.0.0-20250707135307-f2f9b9aae7db // indirect
4853
github.com/klauspost/compress v1.18.0 // indirect
@@ -53,6 +58,7 @@ require (
5358
github.com/naoina/go-stringutil v0.1.0 // indirect
5459
github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416 // indirect
5560
github.com/nu7hatch/gouuid v0.0.0-20131221200532-179d4d0c4d8d // indirect
61+
github.com/pkg/errors v0.9.1 // indirect
5662
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
5763
github.com/stretchr/objx v0.5.2 // indirect
5864
github.com/stretchr/testify v1.10.0 // indirect

client/cmd/bisonw-desktop/go.sum

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek=
4747
filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns=
4848
fyne.io/systray v1.10.1-0.20230403195833-7dc3c09283d6 h1:lHt8dm97Uy9ggtnt9N6XOlsp76wXmRAh3SjReWm1e2Q=
4949
fyne.io/systray v1.10.1-0.20230403195833-7dc3c09283d6/go.mod h1:oM2AQqGJ1AMo4nNqZFYU8xYygSBZkW2hmdJ7n4yjedE=
50+
github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 h1:cTp8I5+VIoKjsnZuH8vjyaysT/ses3EvZeaV/1UkF2M=
51+
github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8=
5052
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
5153
github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0=
5254
github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
@@ -62,6 +64,7 @@ github.com/Masterminds/sprig v2.15.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuN
6264
github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o=
6365
github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
6466
github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
67+
github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE=
6568
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
6669
github.com/OpenBazaar/jsonpb v0.0.0-20171123000858-37d32ddf4eef/go.mod h1:55mCznBcN9WQgrtgaAkv+p2LxeW/tQRdidyyE9D0I5k=
6770
github.com/OpenPeeDeeP/depguard v1.0.1/go.mod h1:xsIw86fROiiwelg+jB2uM9PiKihMMmUx/1V+TNhjQvM=
@@ -187,6 +190,7 @@ github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QH
187190
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
188191
github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk=
189192
github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s=
193+
github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
190194
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
191195
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
192196
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
@@ -333,11 +337,16 @@ github.com/deepmap/oapi-codegen v1.8.2 h1:SegyeYGcdi0jLLrpbCMoJxnUUn8GBXHsvr4rbz
333337
github.com/deepmap/oapi-codegen v1.8.2/go.mod h1:YLgSKSDv/bZQB7N4ws6luhozi3cEdRktEqrX88CvjIw=
334338
github.com/denis-tingajkin/go-header v0.4.2/go.mod h1:eLRHAVXzE5atsKAnNRDB90WHCFFnBUn4RN0nRcs1LJA=
335339
github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE=
340+
github.com/dgraph-io/badger v1.6.2 h1:mNw0qs90GVgGGWylh0umH5iag1j6n/PeJtNvL6KY/x8=
341+
github.com/dgraph-io/badger v1.6.2/go.mod h1:JW2yswe3V058sS0kZ2h/AXeDSqFjxnZcRrVH//y2UQE=
336342
github.com/dgraph-io/badger/v4 v4.9.0 h1:tpqWb0NewSrCYqTvywbcXOhQdWcqephkVkbBmaaqHzc=
337343
github.com/dgraph-io/badger/v4 v4.9.0/go.mod h1:5/MEx97uzdPUHR4KtkNt8asfI2T4JiEiQlV7kWUo8c0=
344+
github.com/dgraph-io/ristretto v0.0.2 h1:a5WaUrDa0qm0YrAAS1tUykT5El3kt62KNZZeMxQn3po=
345+
github.com/dgraph-io/ristretto v0.0.2/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E=
338346
github.com/dgraph-io/ristretto/v2 v2.2.0 h1:bkY3XzJcXoMuELV8F+vS8kzNgicwQFAaGINAEJdWGOM=
339347
github.com/dgraph-io/ristretto/v2 v2.2.0/go.mod h1:RZrm63UmcBAaYWC1DotLYBmTvgkrs0+XhBd7Npn7/zI=
340348
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
349+
github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
341350
github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da h1:aIftn67I1fkbMa512G+w+Pxci9hJPB8oMnkcP3iZF38=
342351
github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
343352
github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
@@ -730,6 +739,7 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxv
730739
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
731740
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
732741
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
742+
github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
733743
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
734744
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
735745
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
@@ -1064,6 +1074,8 @@ github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4l
10641074
github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY=
10651075
github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs=
10661076
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
1077+
github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI=
1078+
github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
10671079
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
10681080
github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I=
10691081
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
@@ -1350,6 +1362,7 @@ golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7w
13501362
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
13511363
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
13521364
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
1365+
golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
13531366
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
13541367
golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
13551368
golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=

dex/lexi/cmd/lexidbexplorer/db.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010
"strings"
1111

1212
"decred.org/dcrdex/dex/lexi"
13-
"github.com/dgraph-io/badger"
13+
"github.com/dgraph-io/badger/v4"
1414
)
1515

1616
// These constants mirror unexported values from the lexi package.

dex/lexi/cmd/lexidbexplorer/model.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88

99
"decred.org/dcrdex/dex/lexi"
1010
tea "github.com/charmbracelet/bubbletea"
11-
"github.com/dgraph-io/badger"
11+
"github.com/dgraph-io/badger/v4"
1212
)
1313

1414
// viewState represents the current view in the application.

0 commit comments

Comments
 (0)