From 4bab10fbdd3db83a61505d5affcb887b1112bf4e Mon Sep 17 00:00:00 2001 From: Brian Stafford Date: Sun, 15 Sep 2024 19:23:10 -0500 Subject: [PATCH] use update time instead of decoding order --- client/db/bolt/db.go | 15 ++++++++++----- client/db/bolt/db_test.go | 23 +++++++++++------------ 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/client/db/bolt/db.go b/client/db/bolt/db.go index ea7a4d97b5..5087612bac 100644 --- a/client/db/bolt/db.go +++ b/client/db/bolt/db.go @@ -471,7 +471,7 @@ func (db *BoltDB) pruneArchivedOrders() error { type orderStamp struct { oid []byte - stamp int64 + stamp uint64 } deletes := make([]*orderStamp, 0, toClear) sortDeletes := func() { @@ -485,11 +485,16 @@ func (db *BoltDB) pruneArchivedOrders() error { if _, found := oidsWithActiveMatches[oid]; found { return nil } - ord, err := decodeOrderBucket(oidB, archivedOB.Bucket(oidB)) - if err != nil { - return fmt.Errorf("error decoding order %x: %v", oid, err) + oBkt := archivedOB.Bucket(oidB) + if oBkt == nil { + return fmt.Errorf("no order bucket iterated order %x", oidB) + } + stampB := oBkt.Get(updateTimeKey) + if stampB == nil { + // Highly improbable. + stampB = make([]byte, 8) } - stamp := ord.Order.Prefix().ClientTime.Unix() + stamp := intCoder.Uint64(stampB) if len(deletes) < toClear { deletes = append(deletes, &orderStamp{ stamp: stamp, diff --git a/client/db/bolt/db_test.go b/client/db/bolt/db_test.go index dc26b9a557..d17193f16f 100644 --- a/client/db/bolt/db_test.go +++ b/client/db/bolt/db_test.go @@ -1627,13 +1627,11 @@ func TestPruneArchivedOrders(t *testing.T) { return n } - var ordStampI int64 - addOrder := func(optStamp int64) order.OrderID { + var ordStampI uint64 + addOrder := func(stamp uint64) order.OrderID { ord, _ := ordertest.RandomLimitOrder() - if optStamp != 0 { - ord.P.ClientTime = time.Unix(optStamp, 0) - } else { - ord.P.ClientTime = time.Unix(ordStampI, 0) + if stamp == 0 { + stamp = ordStampI ordStampI++ } boltdb.UpdateOrder(&db.MetaOrder{ @@ -1644,7 +1642,12 @@ func TestPruneArchivedOrders(t *testing.T) { }, Order: ord, }) - return ord.ID() + oid := ord.ID() + boltdb.ordersUpdate(func(ob, archivedOB *bbolt.Bucket) error { + archivedOB.Bucket(oid[:]).Put(updateTimeKey, uint64Bytes(stamp)) + return nil + }) + return oid } for i := 0; i < archiveSizeLimit*2; i++ { addOrder(0) @@ -1666,11 +1669,7 @@ func TestPruneArchivedOrders(t *testing.T) { if err := boltdb.View(func(tx *bbolt.Tx) error { bkt := tx.Bucket(archivedOrdersBucket) return bkt.ForEach(func(oidB, _ []byte) error { - ord, err := decodeOrderBucket(oidB, bkt.Bucket(oidB)) - if err != nil { - return fmt.Errorf("error decoding order %x: %v", oidB, err) - } - if stamp := ord.Order.Prefix().ClientTime.Unix(); stamp < int64(archiveSizeLimit) { + if stamp := intCoder.Uint64(bkt.Bucket(oidB).Get(updateTimeKey)); stamp < archiveSizeLimit { return fmt.Errorf("order stamp %d should have been pruned", stamp) } return nil