blob: 1722fe22346abedcc91242ce7c7826bc87f35422 [file] [log] [blame]
// Copyright 2015 The LUCI Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package meta
import (
"context"
ds "go.chromium.org/luci/gae/service/datastore"
)
// EntityGroupMeta is the model corresponding to the __entity_group__ model in
// appengine. You shouldn't need to use this struct directly, but instead should
// use GetEntityGroupVersion.
type EntityGroupMeta struct {
kind string `gae:"$kind,__entity_group__"`
id int64 `gae:"$id,1"`
Parent *ds.Key `gae:"$parent"`
Version int64 `gae:"__version__"`
}
// GetEntityGroupVersion returns the entity group version for the entity group
// containing root. If the entity group doesn't exist, this function will return
// zero and a nil error.
func GetEntityGroupVersion(ctx context.Context, key *ds.Key) (int64, error) {
egm := &EntityGroupMeta{Parent: key.Root()}
err := ds.Get(ctx, egm)
ret := egm.Version
if err == ds.ErrNoSuchEntity {
// this is OK for callers. The version of the entity group is effectively 0
// in this case.
err = nil
}
return ret, err
}