3
0
mirror of https://github.com/ergochat/ergo.git synced 2024-11-22 03:49:27 +01:00

upgrade buntdb

This commit is contained in:
Shivaram Lingamneni 2024-07-05 16:36:53 -04:00
parent ce41f501c9
commit 82c50cc497
4 changed files with 34 additions and 10 deletions

2
go.mod
View File

@ -17,7 +17,7 @@ require (
github.com/onsi/ginkgo v1.12.0 // indirect github.com/onsi/ginkgo v1.12.0 // indirect
github.com/onsi/gomega v1.9.0 // indirect github.com/onsi/gomega v1.9.0 // indirect
github.com/stretchr/testify v1.4.0 // indirect github.com/stretchr/testify v1.4.0 // indirect
github.com/tidwall/buntdb v1.2.10 github.com/tidwall/buntdb v1.3.1
github.com/toorop/go-dkim v0.0.0-20201103131630-e1cd1a0a5208 github.com/toorop/go-dkim v0.0.0-20201103131630-e1cd1a0a5208
github.com/xdg-go/scram v1.0.2 github.com/xdg-go/scram v1.0.2
golang.org/x/crypto v0.17.0 golang.org/x/crypto v0.17.0

2
go.sum
View File

@ -49,6 +49,8 @@ github.com/tidwall/btree v1.4.2 h1:PpkaieETJMUxYNADsjgtNRcERX7mGc/GP2zp/r5FM3g=
github.com/tidwall/btree v1.4.2/go.mod h1:LGm8L/DZjPLmeWGjv5kFrY8dL4uVhMmzmmLYmsObdKE= github.com/tidwall/btree v1.4.2/go.mod h1:LGm8L/DZjPLmeWGjv5kFrY8dL4uVhMmzmmLYmsObdKE=
github.com/tidwall/buntdb v1.2.10 h1:U/ebfkmYPBnyiNZIirUiWFcxA/mgzjbKlyPynFsPtyM= github.com/tidwall/buntdb v1.2.10 h1:U/ebfkmYPBnyiNZIirUiWFcxA/mgzjbKlyPynFsPtyM=
github.com/tidwall/buntdb v1.2.10/go.mod h1:lZZrZUWzlyDJKlLQ6DKAy53LnG7m5kHyrEHvvcDmBpU= github.com/tidwall/buntdb v1.2.10/go.mod h1:lZZrZUWzlyDJKlLQ6DKAy53LnG7m5kHyrEHvvcDmBpU=
github.com/tidwall/buntdb v1.3.1 h1:HKoDF01/aBhl9RjYtbaLnvX9/OuenwvQiC3OP1CcL4o=
github.com/tidwall/buntdb v1.3.1/go.mod h1:lZZrZUWzlyDJKlLQ6DKAy53LnG7m5kHyrEHvvcDmBpU=
github.com/tidwall/gjson v1.12.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/gjson v1.12.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
github.com/tidwall/gjson v1.14.3 h1:9jvXn7olKEHU1S9vwoMGliaT8jq1vJ7IH/n9zD9Dnlw= github.com/tidwall/gjson v1.14.3 h1:9jvXn7olKEHU1S9vwoMGliaT8jq1vJ7IH/n9zD9Dnlw=
github.com/tidwall/gjson v1.14.3/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/gjson v1.14.3/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=

View File

@ -61,6 +61,8 @@ var (
ErrTxIterating = errors.New("tx is iterating") ErrTxIterating = errors.New("tx is iterating")
) )
const useAbsEx = true
// DB represents a collection of key-value pairs that persist on disk. // DB represents a collection of key-value pairs that persist on disk.
// Transactions are used for all forms of data access to the DB. // Transactions are used for all forms of data access to the DB.
type DB struct { type DB struct {
@ -895,24 +897,35 @@ func (db *DB) readLoad(rd io.Reader, modTime time.Time) (n int64, err error) {
return totalSize, ErrInvalid return totalSize, ErrInvalid
} }
if len(parts) == 5 { if len(parts) == 5 {
if strings.ToLower(parts[3]) != "ex" { arg := strings.ToLower(parts[3])
if arg != "ex" && arg != "ae" {
return totalSize, ErrInvalid return totalSize, ErrInvalid
} }
ex, err := strconv.ParseUint(parts[4], 10, 64) ex, err := strconv.ParseInt(parts[4], 10, 64)
if err != nil { if err != nil {
return totalSize, err return totalSize, err
} }
var exat time.Time
now := time.Now() now := time.Now()
dur := (time.Duration(ex) * time.Second) - now.Sub(modTime) if arg == "ex" {
if dur > 0 { dur := (time.Duration(ex) * time.Second) - now.Sub(modTime)
exat = now.Add(dur)
} else {
exat = time.Unix(ex, 0)
}
if exat.After(now) {
db.insertIntoDatabase(&dbItem{ db.insertIntoDatabase(&dbItem{
key: parts[1], key: parts[1],
val: parts[2], val: parts[2],
opts: &dbItemOpts{ opts: &dbItemOpts{
ex: true, ex: true,
exat: now.Add(dur), exat: exat,
}, },
}) })
} else {
db.deleteFromDatabase(&dbItem{
key: parts[1],
})
} }
} else { } else {
db.insertIntoDatabase(&dbItem{key: parts[1], val: parts[2]}) db.insertIntoDatabase(&dbItem{key: parts[1], val: parts[2]})
@ -1330,13 +1343,19 @@ func appendBulkString(buf []byte, s string) []byte {
// writeSetTo writes an item as a single SET record to the a bufio Writer. // writeSetTo writes an item as a single SET record to the a bufio Writer.
func (dbi *dbItem) writeSetTo(buf []byte, now time.Time) []byte { func (dbi *dbItem) writeSetTo(buf []byte, now time.Time) []byte {
if dbi.opts != nil && dbi.opts.ex { if dbi.opts != nil && dbi.opts.ex {
ex := dbi.opts.exat.Sub(now) / time.Second
buf = appendArray(buf, 5) buf = appendArray(buf, 5)
buf = appendBulkString(buf, "set") buf = appendBulkString(buf, "set")
buf = appendBulkString(buf, dbi.key) buf = appendBulkString(buf, dbi.key)
buf = appendBulkString(buf, dbi.val) buf = appendBulkString(buf, dbi.val)
buf = appendBulkString(buf, "ex") if useAbsEx {
buf = appendBulkString(buf, strconv.FormatUint(uint64(ex), 10)) ex := dbi.opts.exat.Unix()
buf = appendBulkString(buf, "ae")
buf = appendBulkString(buf, strconv.FormatUint(uint64(ex), 10))
} else {
ex := dbi.opts.exat.Sub(now) / time.Second
buf = appendBulkString(buf, "ex")
buf = appendBulkString(buf, strconv.FormatUint(uint64(ex), 10))
}
} else { } else {
buf = appendArray(buf, 3) buf = appendArray(buf, 3)
buf = appendBulkString(buf, "set") buf = appendBulkString(buf, "set")
@ -1622,6 +1641,9 @@ func (tx *Tx) scan(desc, gt, lt bool, index, start, stop string,
// wrap a btree specific iterator around the user-defined iterator. // wrap a btree specific iterator around the user-defined iterator.
iter := func(item interface{}) bool { iter := func(item interface{}) bool {
dbi := item.(*dbItem) dbi := item.(*dbItem)
if dbi.expired() {
return true
}
return iterator(dbi.key, dbi.val) return iterator(dbi.key, dbi.val)
} }
var tr *btree.BTree var tr *btree.BTree

2
vendor/modules.txt vendored
View File

@ -48,7 +48,7 @@ github.com/okzk/sdnotify
# github.com/tidwall/btree v1.4.2 # github.com/tidwall/btree v1.4.2
## explicit; go 1.18 ## explicit; go 1.18
github.com/tidwall/btree github.com/tidwall/btree
# github.com/tidwall/buntdb v1.2.10 # github.com/tidwall/buntdb v1.3.1
## explicit; go 1.18 ## explicit; go 1.18
github.com/tidwall/buntdb github.com/tidwall/buntdb
# github.com/tidwall/gjson v1.14.3 # github.com/tidwall/gjson v1.14.3