1 # Copyright 2008 Google Inc.
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
7 # http://www.apache.org/licenses/LICENSE-2.0
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
16 from google
.appengine
.ext
import db
19 class SimpleCounterShard(db
.Model
):
20 """Shards for the counter"""
21 count
= db
.IntegerProperty(required
=True, default
=0)
26 """Retrieve the value for a given sharded counter."""
28 for counter
in SimpleCounterShard
.all():
29 total
+= counter
.count
33 """Increment the value for a given sharded counter."""
35 index
= random
.randint(0, NUM_SHARDS
- 1)
36 shard_name
= "shard" + str(index
)
37 counter
= SimpleCounterShard
.get_by_key_name(shard_name
)
39 counter
= SimpleCounterShard(key_name
=shard_name
)
42 db
.run_in_transaction(txn
)