Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(206)

Unified Diff: service/datastore/checkfilter.go

Issue 2007123002: datastore: Update AllocateIDs to take keys. (Closed) Base URL: https://chromium.googlesource.com/external/github.com/luci/gae@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: service/datastore/checkfilter.go
diff --git a/service/datastore/checkfilter.go b/service/datastore/checkfilter.go
index fe9bc57f99f3a3ea52e7f8d232b5de783e33090b..2e93755c17aaf1e8a4b0bea006ac3998d9d6f132 100644
--- a/service/datastore/checkfilter.go
+++ b/service/datastore/checkfilter.go
@@ -19,14 +19,38 @@ type checkFilter struct {
ns string
}
-func (tcf *checkFilter) AllocateIDs(incomplete *Key, n int) (start int64, err error) {
- if n <= 0 {
- return 0, fmt.Errorf("datastore: invalid `n` parameter in AllocateIDs: %d", n)
+func (tcf *checkFilter) AllocateIDs(keys []*Key) error {
+ if len(keys) == 0 {
+ return nil
+ }
+
+ // Assert that all of the supplied keys are PartialValid, and that they all
+ // share the same entity.
+ //
+ // TODO: If GAE protobufs and/or API ever relaxes the same-kind requirement,
+ // we can drop that here and in the raw interface API too.
+ lme := errors.NewLazyMultiError(len(keys))
+ var exemplar *Key
+ for i, k := range keys {
+ if !k.PartialValid(tcf.aid, tcf.ns) {
+ lme.Assign(i, ErrInvalidKey)
+ continue
+ }
+
+ if exemplar == nil {
+ exemplar = k
+ } else {
+ if !k.SameKind(exemplar) {
+ lme.Assign(i, ErrInvalidKey)
+ continue
+ }
+ }
}
- if !incomplete.PartialValid(tcf.aid, tcf.ns) {
- return 0, ErrInvalidKey
+ if me := lme.Get(); me != nil {
+ return me
}
- return tcf.RawInterface.AllocateIDs(incomplete, n)
+
+ return tcf.RawInterface.AllocateIDs(keys)
}
func (tcf *checkFilter) RunInTransaction(f func(c context.Context) error, opts *TransactionOptions) error {

Powered by Google App Engine
This is Rietveld 408576698