delete negative cache
diff --git a/goon.go b/goon.go
index a866342..0030bef 100644
--- a/goon.go
+++ b/goon.go
@@ -180,7 +180,6 @@
}
memcache.DeleteMulti(g.Context, memkeys)
}
-
g.cacheLock.Lock()
defer g.cacheLock.Unlock()
for k, v := range ng.toSet {
@@ -223,24 +222,6 @@
return nil, err
}
- var memkeys []string
- for _, key := range keys {
- if !key.Incomplete() {
- memkeys = append(memkeys, memkey(key))
- }
- }
-
- // Memcache needs to be updated after the datastore to prevent a common race condition,
- // where a concurrent request will fetch the not-yet-updated data from the datastore
- // and populate memcache with it.
- if g.inTransaction {
- for _, mk := range memkeys {
- g.toDeleteMC[mk] = true
- }
- } else {
- defer memcache.DeleteMulti(g.Context, memkeys)
- }
-
v := reflect.Indirect(reflect.ValueOf(src))
multiErr, any := make(appengine.MultiError, len(keys)), false
goroutines := (len(keys)-1)/putMultiLimit + 1
@@ -281,6 +262,7 @@
mk := memkey(rkeys[i])
delete(g.toDelete, mk)
g.toSet[mk] = vi
+ g.toDeleteMC[mk] = true
} else {
g.putMemory(vi)
}
@@ -288,6 +270,18 @@
}(i)
}
wg.Wait()
+
+ // Memcache needs to be updated after the datastore to prevent a common race condition,
+ // where a concurrent request will fetch the not-yet-updated data from the datastore
+ // and populate memcache with it.
+ if !g.inTransaction {
+ var memkeys []string
+ for _, key := range keys {
+ memkeys = append(memkeys, memkey(key))
+ }
+ memcache.DeleteMulti(g.Context, memkeys)
+ }
+
if any {
return keys, realError(multiErr)
}