Skip to content

Commit 241b4af

Browse files
committed
sync: apply entire query while locked
1 parent e5644bc commit 241b4af

File tree

2 files changed

+19
-4
lines changed

2 files changed

+19
-4
lines changed

query/query.go

-2
Original file line numberDiff line numberDiff line change
@@ -258,8 +258,6 @@ func ResultsWithEntries(q Query, res []Entry) Results {
258258
})
259259
}
260260

261-
}
262-
263261
func ResultsReplaceQuery(r Results, q Query) Results {
264262
switch r := r.(type) {
265263
case *results:

sync/sync.go

+19-2
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,28 @@ func (d *MutexDatastore) Delete(key ds.Key) (err error) {
6161
return d.child.Delete(key)
6262
}
6363

64-
// KeyList implements Datastore.KeyList
64+
// Query implements Datastore.Query
6565
func (d *MutexDatastore) Query(q dsq.Query) (dsq.Results, error) {
6666
d.RLock()
6767
defer d.RUnlock()
68-
return d.child.Query(q)
68+
69+
// Apply the entire query while locked. Non-sync datastores may not
70+
// allow concurrent queries.
71+
72+
results, err := d.child.Query(q)
73+
if err != nil {
74+
return nil, err
75+
}
76+
77+
entries, err1 := results.Rest()
78+
err2 := results.Close()
79+
switch {
80+
case err1 != nil:
81+
return nil, err1
82+
case err2 != nil:
83+
return nil, err2
84+
}
85+
return dsq.ResultsWithEntries(q, entries), nil
6986
}
7087

7188
func (d *MutexDatastore) Batch() (ds.Batch, error) {

0 commit comments

Comments
 (0)