From 357277463a731168b5a17dc3b72d698abee9326f Mon Sep 17 00:00:00 2001 From: gammazero <11790789+gammazero@users.noreply.github.com> Date: Wed, 8 Oct 2025 06:21:36 -1000 Subject: [PATCH] Do not reuse datastore Batch Reusing a batch is not guaranteed to be safe for all datastores. --- dsqueue.go | 18 +----------------- go.mod | 4 ++-- go.sum | 8 ++++---- 3 files changed, 7 insertions(+), 23 deletions(-) diff --git a/dsqueue.go b/dsqueue.go index 870f374..87243fc 100644 --- a/dsqueue.go +++ b/dsqueue.go @@ -411,17 +411,11 @@ func (q *DSQueue) clearDatastore(ctx context.Context) (int, error) { return 0, fmt.Errorf("cannot create datastore batch: %w", err) } - var rmCount, writeCount int + var rmCount int for result := range results.Next() { if ctx.Err() != nil { return 0, ctx.Err() } - if writeCount >= DefaultBufferSize { - writeCount = 0 - if err = batch.Commit(ctx); err != nil { - return 0, fmt.Errorf("cannot commit datastore updates: %w", err) - } - } if result.Error != nil { return 0, fmt.Errorf("cannot read query result from datastore: %w", result.Error) } @@ -429,7 +423,6 @@ func (q *DSQueue) clearDatastore(ctx context.Context) (int, error) { return 0, fmt.Errorf("cannot delete key from datastore: %w", err) } rmCount++ - writeCount++ } if err = batch.Commit(ctx); err != nil { @@ -509,7 +502,6 @@ func (q *DSQueue) readDatastore(ctx context.Context, n int, items [][]byte) ([][ if err != nil { return nil, fmt.Errorf("cannot create datastore batch: %w", err) } - var delCount int for result := range results.Next() { if ctx.Err() != nil { @@ -522,14 +514,6 @@ func (q *DSQueue) readDatastore(ctx context.Context, n int, items [][]byte) ([][ if err = batch.Delete(ctx, datastore.NewKey(result.Key)); err != nil { return nil, fmt.Errorf("error deleting queue item: %w", err) } - delCount++ - - if delCount >= DefaultBufferSize { - delCount = 0 - if err = batch.Commit(ctx); err != nil { - return nil, fmt.Errorf("cannot commit datastore updates: %w", err) - } - } parts := strings.SplitN(strings.TrimPrefix(result.Key, "/"), "/", 2) if len(parts) != 2 { diff --git a/go.mod b/go.mod index c040cb8..bb11893 100644 --- a/go.mod +++ b/go.mod @@ -6,8 +6,8 @@ require ( github.com/gammazero/deque v1.1.0 github.com/hashicorp/golang-lru/v2 v2.0.7 github.com/ipfs/go-cid v0.5.0 - github.com/ipfs/go-datastore v0.8.4 - github.com/ipfs/go-log/v2 v2.8.1 + github.com/ipfs/go-datastore v0.9.0 + github.com/ipfs/go-log/v2 v2.8.2 github.com/ipfs/go-test v0.2.3 ) diff --git a/go.sum b/go.sum index c8499e5..eaf6d18 100644 --- a/go.sum +++ b/go.sum @@ -18,12 +18,12 @@ github.com/ipfs/go-block-format v0.2.2 h1:uecCTgRwDIXyZPgYspaLXoMiMmxQpSx2aq34eN github.com/ipfs/go-block-format v0.2.2/go.mod h1:vmuefuWU6b+9kIU0vZJgpiJt1yicQz9baHXE8qR+KB8= github.com/ipfs/go-cid v0.5.0 h1:goEKKhaGm0ul11IHA7I6p1GmKz8kEYniqFopaB5Otwg= github.com/ipfs/go-cid v0.5.0/go.mod h1:0L7vmeNXpQpUS9vt+yEARkJ8rOg43DF3iPgn4GIN0mk= -github.com/ipfs/go-datastore v0.8.4 h1:vXEsd76T3KIOSKXizjhmS3ICGMl+oOSjpLSxE3v8/Wc= -github.com/ipfs/go-datastore v0.8.4/go.mod h1:uT77w/XEGrvJWwHgdrMr8bqCN6ZTW9gzmi+3uK+ouHg= +github.com/ipfs/go-datastore v0.9.0 h1:WocriPOayqalEsueHv6SdD4nPVl4rYMfYGLD4bqCZ+w= +github.com/ipfs/go-datastore v0.9.0/go.mod h1:uT77w/XEGrvJWwHgdrMr8bqCN6ZTW9gzmi+3uK+ouHg= github.com/ipfs/go-detect-race v0.0.1 h1:qX/xay2W3E4Q1U7d9lNs1sU9nvguX0a7319XbyQ6cOk= github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps= -github.com/ipfs/go-log/v2 v2.8.1 h1:Y/X36z7ASoLJaYIJAL4xITXgwf7RVeqb1+/25aq/Xk0= -github.com/ipfs/go-log/v2 v2.8.1/go.mod h1:NyhTBcZmh2Y55eWVjOeKf8M7e4pnJYM3yDZNxQBWEEY= +github.com/ipfs/go-log/v2 v2.8.2 h1:nVG4nNHUwwI/sTs9Bi5iE8sXFQwXs3AjkkuWhg7+Y2I= +github.com/ipfs/go-log/v2 v2.8.2/go.mod h1:UhIYAwMV7Nb4ZmihUxfIRM2Istw/y9cAk3xaK+4Zs2c= github.com/ipfs/go-test v0.2.3 h1:Z/jXNAReQFtCYyn7bsv/ZqUwS6E7iIcSpJ2CuzCvnrc= github.com/ipfs/go-test v0.2.3/go.mod h1:QW8vSKkwYvWFwIZQLGQXdkt9Ud76eQXRQ9Ao2H+cA1o= github.com/klauspost/cpuid/v2 v2.2.10 h1:tBs3QSyvjDyFTq3uoc/9xFpCuOsJQFNPiAhYdw2skhE=