@@ -11,9 +11,9 @@ import (
11
11
12
12
"github.com/gammazero/deque"
13
13
lru "github.com/hashicorp/golang-lru/v2"
14
- datastore "github.com/ipfs/go-datastore"
15
- namespace "github.com/ipfs/go-datastore/namespace"
16
- query "github.com/ipfs/go-datastore/query"
14
+ "github.com/ipfs/go-datastore"
15
+ "github.com/ipfs/go-datastore/namespace"
16
+ "github.com/ipfs/go-datastore/query"
17
17
logging "github.com/ipfs/go-log/v2"
18
18
)
19
19
@@ -44,6 +44,7 @@ type DSQueue struct {
44
44
enqueue chan string
45
45
clear chan chan <- int
46
46
closeTimeout time.Duration
47
+ name string
47
48
}
48
49
49
50
// New creates a queue for strings.
@@ -60,6 +61,7 @@ func New(ds datastore.Batching, name string, options ...Option) *DSQueue {
60
61
enqueue : make (chan string ),
61
62
clear : make (chan chan <- int ),
62
63
closeTimeout : cfg .closeTimeout ,
64
+ name : name ,
63
65
}
64
66
65
67
go q .worker (ctx , cfg .bufferSize , cfg .dedupCacheSize , cfg .idleWriteTime )
@@ -97,7 +99,7 @@ func (q *DSQueue) Enqueue(item []byte) (err error) {
97
99
}
98
100
defer func () {
99
101
if r := recover (); r != nil {
100
- err = errors . New ("failed to enqueue item: shutting down" )
102
+ err = fmt . Errorf ("failed to enqueue item: %s" , r )
101
103
}
102
104
}()
103
105
@@ -118,6 +120,11 @@ func (q *DSQueue) Clear() int {
118
120
return <- rsp
119
121
}
120
122
123
+ // Name returns the name of this DSQueue instance.
124
+ func (q * DSQueue ) Name () string {
125
+ return q .name
126
+ }
127
+
121
128
func makeKey (item string , counter uint64 ) datastore.Key {
122
129
b64Item := base64 .RawURLEncoding .EncodeToString ([]byte (item ))
123
130
return datastore .NewKey (fmt .Sprintf ("%020d/%s" , counter , b64Item ))
@@ -144,16 +151,16 @@ func (q *DSQueue) worker(ctx context.Context, bufferSize, dedupCacheSize int, id
144
151
defer func () {
145
152
if item != "" {
146
153
if err := q .ds .Put (ctx , k , nil ); err != nil {
147
- log .Errorw ("dsqueue: failed to write item to datastore" , "err" , err )
154
+ log .Errorw ("failed to write item to datastore" , "err" , err , "qname" , q . name )
148
155
}
149
156
counter ++
150
157
}
151
158
if inBuf .Len () != 0 {
152
159
err := q .commitInput (ctx , counter , & inBuf )
153
160
if err != nil && ! errors .Is (err , context .Canceled ) {
154
- log .Error ( err )
161
+ log .Errorw ( "error writing items to datastore" , " err" , err , "qname" , q . name )
155
162
if inBuf .Len () != 0 {
156
- q .closed <- fmt .Errorf ("dsqueue: %d items not written to datastore" , inBuf .Len ())
163
+ q .closed <- fmt .Errorf ("%d items not written to datastore" , inBuf .Len ())
157
164
}
158
165
}
159
166
}
@@ -183,23 +190,23 @@ func (q *DSQueue) worker(ctx context.Context, bufferSize, dedupCacheSize int, id
183
190
if ! dsEmpty {
184
191
head , err := q .getQueueHead (ctx )
185
192
if err != nil {
186
- log .Errorw ("dsqueue: error querying for head of queue, stopping dsqueue" , "err" , err )
193
+ log .Errorw ("error querying for head of queue, stopping dsqueue" , "err" , err , "qname" , q . name )
187
194
return
188
195
}
189
196
if head != nil {
190
197
k = datastore .NewKey (head .Key )
191
198
if err = q .ds .Delete (ctx , k ); err != nil {
192
- log .Errorw ("dsqueue: error deleting queue entry, stopping dsqueue" , "err" , err , "key" , head .Key )
199
+ log .Errorw ("error deleting queue entry, stopping dsqueue" , "err" , err , "key" , head .Key , "qname" , q . name )
193
200
return
194
201
}
195
202
parts := strings .SplitN (strings .TrimPrefix (head .Key , "/" ), "/" , 2 )
196
203
if len (parts ) != 2 {
197
- log .Errorw ("dsqueue: malformed queued item, removing it from queue" , "err" , err , "key" , head .Key )
204
+ log .Errorw ("malformed queued item, removing it from queue" , "err" , err , "key" , head .Key , "qname" , q . name )
198
205
continue
199
206
}
200
207
itemBin , err := base64 .RawURLEncoding .DecodeString (parts [1 ])
201
208
if err != nil {
202
- log .Errorw ("dsqueue: error decoding queued item, removing it from queue" , "err" , err , "key" , head .Key )
209
+ log .Errorw ("error decoding queued item, removing it from queue" , "err" , err , "key" , head .Key , "qname" , q . name )
203
210
continue
204
211
}
205
212
item = string (itemBin )
@@ -281,11 +288,11 @@ func (q *DSQueue) worker(ctx context.Context, bufferSize, dedupCacheSize int, id
281
288
dedupCache .Purge ()
282
289
rmDSCount , err := q .clearDatastore (ctx )
283
290
if err != nil {
284
- log .Errorw ("dsqueue: cannot clear datastore" , "err" , err )
291
+ log .Errorw ("cannot clear datastore" , "err" , err , "qname" , q . name )
285
292
} else {
286
293
dsEmpty = true
287
294
}
288
- log .Infow ("cleared dsqueue" , "fromMemory" , rmMemCount , "fromDatastore" , rmDSCount )
295
+ log .Infow ("cleared dsqueue" , "fromMemory" , rmMemCount , "fromDatastore" , rmDSCount , "qname" , q . name )
289
296
rsp <- rmMemCount + rmDSCount
290
297
}
291
298
@@ -295,7 +302,7 @@ func (q *DSQueue) worker(ctx context.Context, bufferSize, dedupCacheSize int, id
295
302
err = q .commitInput (ctx , counter , & inBuf )
296
303
if err != nil {
297
304
if ! errors .Is (err , context .Canceled ) {
298
- log .Errorw ("dsqueue: error writing items to datastore, stopping dsqueue" , "err" , err )
305
+ log .Errorw ("error writing items to datastore, stopping dsqueue" , "err" , err , "qname" , q . name )
299
306
}
300
307
return
301
308
}
@@ -380,7 +387,7 @@ func (q *DSQueue) commitInput(ctx context.Context, counter uint64, items *deque.
380
387
item := items .At (i )
381
388
key := makeKey (item , counter )
382
389
if err = b .Put (ctx , key , nil ); err != nil {
383
- log .Errorw ("dsqueue: failed to add item to batch" , "err" , err )
390
+ log .Errorw ("failed to add item to batch" , "err" , err , "qname" , q . name )
384
391
continue
385
392
}
386
393
counter ++
@@ -389,7 +396,7 @@ func (q *DSQueue) commitInput(ctx context.Context, counter uint64, items *deque.
389
396
items .Clear ()
390
397
391
398
if err = b .Commit (ctx ); err != nil {
392
- return fmt .Errorf ("dsqueue: failed to commit batch to datastore: %w" , err )
399
+ return fmt .Errorf ("failed to commit batch to datastore: %w" , err )
393
400
}
394
401
395
402
return nil
0 commit comments