Skip to content

Commit 0ef5d1a

Browse files
authored
feat: add contexts on datastore methods (#38)
1 parent 18e33e9 commit 0ef5d1a

File tree

3 files changed

+71
-36
lines changed

3 files changed

+71
-36
lines changed

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
module github.com/ipfs/go-ds-measure
22

33
require (
4-
github.com/ipfs/go-datastore v0.4.1
4+
github.com/ipfs/go-datastore v0.5.0
55
github.com/ipfs/go-metrics-interface v0.0.1
66
)
77

go.sum

+39-5
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,51 @@
1+
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
2+
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
3+
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
4+
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
15
github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
26
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
3-
github.com/ipfs/go-datastore v0.4.1 h1:W4ZfzyhNi3xmuU5dQhjfuRn/wFuqEE1KnOmmQiOevEY=
4-
github.com/ipfs/go-datastore v0.4.1/go.mod h1:SX/xMIKoCszPqp+z9JhPYCmoOoXTvaa13XEbGtsFUhA=
7+
github.com/ipfs/go-datastore v0.5.0 h1:rQicVCEacWyk4JZ6G5bD9TKR7lZEG1MWcG7UdWYrFAU=
8+
github.com/ipfs/go-datastore v0.5.0/go.mod h1:9zhEApYMTl17C8YDp7JmU7sQZi2/wqiYh73hakZ90Bk=
9+
github.com/ipfs/go-detect-race v0.0.1 h1:qX/xay2W3E4Q1U7d9lNs1sU9nvguX0a7319XbyQ6cOk=
10+
github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps=
511
github.com/ipfs/go-ipfs-delay v0.0.0-20181109222059-70721b86a9a8/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw=
612
github.com/ipfs/go-metrics-interface v0.0.1 h1:j+cpbjYvu4R8zbleSs36gvB7jR+wsL2fGD6n0jO4kdg=
713
github.com/ipfs/go-metrics-interface v0.0.1/go.mod h1:6s6euYU4zowdslK0GKHmqaIZ3j/b/tL7HTWtJ4VPgWY=
8-
github.com/jbenet/goprocess v0.0.0-20160826012719-b497e2f366b8 h1:bspPhN+oKYFk5fcGNuQzp6IGzYQSenLEgH3s6jkXrWw=
9-
github.com/jbenet/goprocess v0.0.0-20160826012719-b497e2f366b8/go.mod h1:Ly/wlsjFq/qrU3Rar62tu1gASgGw6chQbSh/XgIIXCY=
10-
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
14+
github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA=
15+
github.com/jbenet/goprocess v0.1.4 h1:DRGOFReOMqqDNXwW70QkacFW0YN9QnwLV0Vqk+3oU0o=
16+
github.com/jbenet/goprocess v0.1.4/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4=
17+
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
1118
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
19+
github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs=
20+
github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
1221
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
1322
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
1423
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
24+
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
25+
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
26+
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
27+
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
28+
go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
29+
go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
30+
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
31+
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
32+
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
33+
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
34+
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
35+
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
36+
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
37+
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
38+
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
39+
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
40+
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
41+
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
42+
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
43+
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
44+
golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
45+
golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
1546
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
47+
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
1648
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
1749
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
50+
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
51+
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=

measure.go

+31-30
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
package measure
44

55
import (
6+
"context"
67
"io"
78
"time"
89

@@ -171,31 +172,31 @@ func recordLatency(h metrics.Histogram, start time.Time) {
171172
h.Observe(elapsed.Seconds())
172173
}
173174

174-
func (m *measure) Put(key datastore.Key, value []byte) error {
175+
func (m *measure) Put(ctx context.Context, key datastore.Key, value []byte) error {
175176
defer recordLatency(m.putLatency, time.Now())
176177
m.putNum.Inc()
177178
m.putSize.Observe(float64(len(value)))
178-
err := m.backend.Put(key, value)
179+
err := m.backend.Put(ctx, key, value)
179180
if err != nil {
180181
m.putErr.Inc()
181182
}
182183
return err
183184
}
184185

185-
func (m *measure) Sync(prefix datastore.Key) error {
186+
func (m *measure) Sync(ctx context.Context, prefix datastore.Key) error {
186187
defer recordLatency(m.syncLatency, time.Now())
187188
m.syncNum.Inc()
188-
err := m.backend.Sync(prefix)
189+
err := m.backend.Sync(ctx, prefix)
189190
if err != nil {
190191
m.syncErr.Inc()
191192
}
192193
return err
193194
}
194195

195-
func (m *measure) Get(key datastore.Key) (value []byte, err error) {
196+
func (m *measure) Get(ctx context.Context, key datastore.Key) (value []byte, err error) {
196197
defer recordLatency(m.getLatency, time.Now())
197198
m.getNum.Inc()
198-
value, err = m.backend.Get(key)
199+
value, err = m.backend.Get(ctx, key)
199200
switch err {
200201
case nil:
201202
m.getSize.Observe(float64(len(value)))
@@ -207,20 +208,20 @@ func (m *measure) Get(key datastore.Key) (value []byte, err error) {
207208
return value, err
208209
}
209210

210-
func (m *measure) Has(key datastore.Key) (exists bool, err error) {
211+
func (m *measure) Has(ctx context.Context, key datastore.Key) (exists bool, err error) {
211212
defer recordLatency(m.hasLatency, time.Now())
212213
m.hasNum.Inc()
213-
exists, err = m.backend.Has(key)
214+
exists, err = m.backend.Has(ctx, key)
214215
if err != nil {
215216
m.hasErr.Inc()
216217
}
217218
return exists, err
218219
}
219220

220-
func (m *measure) GetSize(key datastore.Key) (size int, err error) {
221+
func (m *measure) GetSize(ctx context.Context, key datastore.Key) (size int, err error) {
221222
defer recordLatency(m.getsizeLatency, time.Now())
222223
m.getsizeNum.Inc()
223-
size, err = m.backend.GetSize(key)
224+
size, err = m.backend.GetSize(ctx, key)
224225
switch err {
225226
case nil, datastore.ErrNotFound:
226227
// Not really an error.
@@ -230,31 +231,31 @@ func (m *measure) GetSize(key datastore.Key) (size int, err error) {
230231
return size, err
231232
}
232233

233-
func (m *measure) Delete(key datastore.Key) error {
234+
func (m *measure) Delete(ctx context.Context, key datastore.Key) error {
234235
defer recordLatency(m.deleteLatency, time.Now())
235236
m.deleteNum.Inc()
236-
err := m.backend.Delete(key)
237+
err := m.backend.Delete(ctx, key)
237238
if err != nil {
238239
m.deleteErr.Inc()
239240
}
240241
return err
241242
}
242243

243-
func (m *measure) Query(q query.Query) (query.Results, error) {
244+
func (m *measure) Query(ctx context.Context, q query.Query) (query.Results, error) {
244245
defer recordLatency(m.queryLatency, time.Now())
245246
m.queryNum.Inc()
246-
res, err := m.backend.Query(q)
247+
res, err := m.backend.Query(ctx, q)
247248
if err != nil {
248249
m.queryErr.Inc()
249250
}
250251
return res, err
251252
}
252253

253-
func (m *measure) Check() error {
254+
func (m *measure) Check(ctx context.Context) error {
254255
defer recordLatency(m.checkLatency, time.Now())
255256
m.checkNum.Inc()
256257
if c, ok := m.backend.(datastore.CheckedDatastore); ok {
257-
err := c.Check()
258+
err := c.Check(ctx)
258259
if err != nil {
259260
m.checkErr.Inc()
260261
}
@@ -263,11 +264,11 @@ func (m *measure) Check() error {
263264
return nil
264265
}
265266

266-
func (m *measure) Scrub() error {
267+
func (m *measure) Scrub(ctx context.Context) error {
267268
defer recordLatency(m.scrubLatency, time.Now())
268269
m.scrubNum.Inc()
269270
if c, ok := m.backend.(datastore.ScrubbedDatastore); ok {
270-
err := c.Scrub()
271+
err := c.Scrub(ctx)
271272
if err != nil {
272273
m.scrubErr.Inc()
273274
}
@@ -276,11 +277,11 @@ func (m *measure) Scrub() error {
276277
return nil
277278
}
278279

279-
func (m *measure) CollectGarbage() error {
280+
func (m *measure) CollectGarbage(ctx context.Context) error {
280281
defer recordLatency(m.gcLatency, time.Now())
281282
m.gcNum.Inc()
282283
if c, ok := m.backend.(datastore.GCDatastore); ok {
283-
err := c.CollectGarbage()
284+
err := c.CollectGarbage(ctx)
284285
if err != nil {
285286
m.gcErr.Inc()
286287
}
@@ -289,10 +290,10 @@ func (m *measure) CollectGarbage() error {
289290
return nil
290291
}
291292

292-
func (m *measure) DiskUsage() (uint64, error) {
293+
func (m *measure) DiskUsage(ctx context.Context) (uint64, error) {
293294
defer recordLatency(m.duLatency, time.Now())
294295
m.duNum.Inc()
295-
size, err := datastore.DiskUsage(m.backend)
296+
size, err := datastore.DiskUsage(ctx, m.backend)
296297
if err != nil {
297298
m.duErr.Inc()
298299
}
@@ -304,12 +305,12 @@ type measuredBatch struct {
304305
m *measure
305306
}
306307

307-
func (m *measure) Batch() (datastore.Batch, error) {
308+
func (m *measure) Batch(ctx context.Context) (datastore.Batch, error) {
308309
bds, ok := m.backend.(datastore.Batching)
309310
if !ok {
310311
return nil, datastore.ErrBatchUnsupported
311312
}
312-
batch, err := bds.Batch()
313+
batch, err := bds.Batch(ctx)
313314
if err != nil {
314315
return nil, err
315316
}
@@ -320,31 +321,31 @@ func (m *measure) Batch() (datastore.Batch, error) {
320321
}, nil
321322
}
322323

323-
func (mt *measuredBatch) Put(key datastore.Key, val []byte) error {
324+
func (mt *measuredBatch) Put(ctx context.Context, key datastore.Key, val []byte) error {
324325
defer recordLatency(mt.m.batchPutLatency, time.Now())
325326
mt.m.batchPutNum.Inc()
326327
mt.m.batchPutSize.Observe(float64(len(val)))
327-
err := mt.b.Put(key, val)
328+
err := mt.b.Put(ctx, key, val)
328329
if err != nil {
329330
mt.m.batchPutErr.Inc()
330331
}
331332
return err
332333
}
333334

334-
func (mt *measuredBatch) Delete(key datastore.Key) error {
335+
func (mt *measuredBatch) Delete(ctx context.Context, key datastore.Key) error {
335336
defer recordLatency(mt.m.batchDeleteLatency, time.Now())
336337
mt.m.batchDeleteNum.Inc()
337-
err := mt.b.Delete(key)
338+
err := mt.b.Delete(ctx, key)
338339
if err != nil {
339340
mt.m.batchDeleteErr.Inc()
340341
}
341342
return err
342343
}
343344

344-
func (mt *measuredBatch) Commit() error {
345+
func (mt *measuredBatch) Commit(ctx context.Context) error {
345346
defer recordLatency(mt.m.batchCommitLatency, time.Now())
346347
mt.m.batchCommitNum.Inc()
347-
err := mt.b.Commit()
348+
err := mt.b.Commit(ctx)
348349
if err != nil {
349350
mt.m.batchCommitErr.Inc()
350351
}

0 commit comments

Comments
 (0)