Пример #1
0
def increase_shards(name, num):

    """
    Increase the number of shards for a given sharded counter.
    Will never decrease the number of shards.

    Parameters:
      name - The name of the counter
      num - How many shards to use

    """

    config = GeneralCounterShardConfig.get_or_insert(name, name=name)

    def txn():
        if config.num_shards < num:
            config.num_shards = num
            config.put()
    db.run_in_transaction(txn)
Пример #2
0
def increment(name):

    """
    Increment the value for a given sharded counter.

    Parameters:
      name - The name of the counter
    """

    config = GeneralCounterShardConfig.get_or_insert(name, name=name)

    def txn():
        index = random.randint(0, config.num_shards - 1)
        shard_name = name + str(index)
        counter = GeneralCounterShard.get_by_key_name(shard_name)
        if counter is None:
            counter = GeneralCounterShard(key_name=shard_name, name=name)
        counter.count += 1
        counter.put()
    db.run_in_transaction(txn)

    # does nothing if the key does not exist
    memcache.incr(name)