| Index: impl/memory/datastore_data.go
|
| diff --git a/impl/memory/datastore_data.go b/impl/memory/datastore_data.go
|
| index a3bbda7074f61d34b15ddd8a7dbb63d33e36687d..60874e963be2e9825180c082d24254825f30c3d0 100644
|
| --- a/impl/memory/datastore_data.go
|
| +++ b/impl/memory/datastore_data.go
|
| @@ -22,11 +22,11 @@ type dataStoreData struct {
|
| rwlock sync.RWMutex
|
| // See README.md for head schema.
|
| head *memStore
|
| + // if snap is nil, that means that this is always-consistent, and
|
| + // getQuerySnaps will return (head, head)
|
| snap *memStore
|
| // For testing, see SetTransactionRetryCount.
|
| txnFakeRetry int
|
| - // true means that head always == snap
|
| - consistent bool
|
| // true means that queries with insufficent indexes will pause to add them
|
| // and then continue instead of failing.
|
| autoIndex bool
|
| @@ -67,8 +67,9 @@ func (d *dataStoreData) setConsistent(always bool) {
|
| d.Lock()
|
| defer d.Unlock()
|
|
|
| - d.consistent = always
|
| - if d.consistent {
|
| + if always {
|
| + d.snap = nil
|
| + } else {
|
| d.snap = d.head.Snapshot()
|
| }
|
| }
|
| @@ -77,9 +78,6 @@ func (d *dataStoreData) addIndexes(ns string, idxs []*ds.IndexDefinition) {
|
| d.Lock()
|
| defer d.Unlock()
|
| addIndexes(d.head, ns, idxs)
|
| - if d.consistent {
|
| - d.snap = d.head.Snapshot()
|
| - }
|
| }
|
|
|
| func (d *dataStoreData) setAutoIndex(enable bool) {
|
| @@ -121,9 +119,9 @@ func (d *dataStoreData) getDisableSpecialEntities() bool {
|
| func (d *dataStoreData) getQuerySnaps(consistent bool) (idx, head *memStore) {
|
| d.rwlock.RLock()
|
| defer d.rwlock.RUnlock()
|
| - if d.consistent {
|
| - // snap is already a consistent snapshot of head
|
| - return d.snap, d.snap
|
| + if d.snap == nil {
|
| + // we're 'always consistent'
|
| + return d.head, d.head
|
| }
|
|
|
| head = d.head.Snapshot()
|
| @@ -138,16 +136,14 @@ func (d *dataStoreData) getQuerySnaps(consistent bool) (idx, head *memStore) {
|
| func (d *dataStoreData) takeSnapshot() *memStore {
|
| d.rwlock.RLock()
|
| defer d.rwlock.RUnlock()
|
| - if d.consistent {
|
| - return d.snap
|
| - }
|
| return d.head.Snapshot()
|
| }
|
|
|
| func (d *dataStoreData) setSnapshot(snap *memStore) {
|
| d.rwlock.Lock()
|
| defer d.rwlock.Unlock()
|
| - if d.consistent {
|
| + if d.snap == nil {
|
| + // we're 'always consistent'
|
| return
|
| }
|
| d.snap = snap
|
| @@ -156,7 +152,8 @@ func (d *dataStoreData) setSnapshot(snap *memStore) {
|
| func (d *dataStoreData) catchupIndexes() {
|
| d.rwlock.Lock()
|
| defer d.rwlock.Unlock()
|
| - if d.consistent {
|
| + if d.snap == nil {
|
| + // we're 'always consistent'
|
| return
|
| }
|
| d.snap = d.head.Snapshot()
|
| @@ -278,9 +275,6 @@ func (d *dataStoreData) putMulti(keys []*ds.Key, vals []ds.PropertyMap, cb ds.Pu
|
| }
|
| updateIndexes(d.head, ret, oldPM, pmap)
|
| ents.Set(keyBytes(ret), dataBytes)
|
| - if d.consistent {
|
| - d.snap = d.head.Snapshot()
|
| - }
|
| return
|
| }()
|
| if cb != nil {
|
| @@ -342,9 +336,6 @@ func (d *dataStoreData) delMulti(keys []*ds.Key, cb ds.DeleteMultiCB) {
|
| }
|
| updateIndexes(d.head, k, oldPM, nil)
|
| ents.Delete(kb)
|
| - if d.consistent {
|
| - d.snap = d.head.Snapshot()
|
| - }
|
| }
|
| return nil
|
| }()
|
|
|