| Index: impl/memory/datastore_data.go
|
| diff --git a/impl/memory/datastore_data.go b/impl/memory/datastore_data.go
|
| index dff438b30b33a9d6415fa218e698f26b1fdd3f55..1afc1f30581cf86c99ac287f5a65b3e864823aa6 100644
|
| --- a/impl/memory/datastore_data.go
|
| +++ b/impl/memory/datastore_data.go
|
| @@ -45,6 +45,36 @@ func (d *dataStoreData) Unlock() {
|
| d.rwlock.Unlock()
|
| }
|
|
|
| +func (d *dataStoreData) getQuerySnaps(consistent bool) (idx, head *memStore) {
|
| + d.rwlock.RLock()
|
| + defer d.rwlock.RUnlock()
|
| + head = d.store.Snapshot()
|
| + if consistent {
|
| + idx = head
|
| + } else {
|
| + idx = d.snap
|
| + }
|
| + return
|
| +}
|
| +
|
| +func (d *dataStoreData) takeSnapshot() *memStore {
|
| + d.rwlock.RLock()
|
| + defer d.rwlock.RUnlock()
|
| + return d.store.Snapshot()
|
| +}
|
| +
|
| +func (d *dataStoreData) setSnapshot(snap *memStore) {
|
| + d.rwlock.Lock()
|
| + defer d.rwlock.Unlock()
|
| + d.snap = snap
|
| +}
|
| +
|
| +func (d *dataStoreData) catchupIndexes() {
|
| + d.rwlock.Lock()
|
| + defer d.rwlock.Unlock()
|
| + d.snap = d.store.Snapshot()
|
| +}
|
| +
|
| /////////////////////////// indicies(dataStoreData) ////////////////////////////
|
|
|
| func groupMetaKey(key ds.Key) []byte {
|
| @@ -165,9 +195,7 @@ func getMultiInner(keys []ds.Key, cb ds.GetMultiCB, getColl func() (*memCollecti
|
|
|
| func (d *dataStoreData) getMulti(keys []ds.Key, cb ds.GetMultiCB) error {
|
| getMultiInner(keys, cb, func() (*memCollection, error) {
|
| - d.rwlock.RLock()
|
| - s := d.store.Snapshot()
|
| - d.rwlock.RUnlock()
|
| + s := d.takeSnapshot()
|
|
|
| return s.GetCollection("ents:" + keys[0].Namespace()), nil
|
| })
|
|
|