9 messages in com.googlegroups.google-appengine[google-appengine] felxible sharded c...
FromSent OnAttachments
conmanAug 13, 2008 4:11 am 
Calvin SpealmanAug 13, 2008 3:07 pm 
BillAug 13, 2008 7:03 pm 
conmanAug 14, 2008 12:16 am 
conmanAug 14, 2008 12:39 am 
BillAug 14, 2008 10:38 am 
BillAug 14, 2008 11:39 am 
Bryan A. PendletonAug 14, 2008 12:15 pm 
conmanAug 14, 2008 11:58 pm 
Actions with this message:
Paste this link in email or IM:
Paste this link in email or IM:
Atom feed for this thread
Paste this URL into your reader:
Subject:[google-appengine] felxible sharded counterActions...
From:conman (cons@googlemail.com)
Date:Aug 14, 2008 12:16:42 am
List:com.googlegroups.google-appengine

Hello,

I posted this message twice yesterday and it never became published in the group... Hope it works this time :)

I have implemented a variation of the sharded counter form Google IO speech (http://sites.google.com/site/io/building-scalable-web- applications-with-google-app-engine)

My variation is that instead of haveing a fixed number my number of shards increases if contention on the counter increases.

But I am not quite sure if I have done it right: Please have a look:

def inc(self): try: def txn(): c = self._get_one() # get sharded counter by random c.count += 1 # increase counter c.put() # write counter try: db.run_in_transaction(txn) except db.TransactionFailedError(): # if this transaction fails... logging.debug('Counter %s: inc failed.' % self.name) self.num_shards += 5 # increase number of shards self.put() except: pass

You see, when the transaction fails due to high contention I modify the number of shards. But I am not sure, if I should place this

self.num_shards += 5 # increase number of shards self.put()

inside a transaction or not...? I mean if contention is high a lot threads are going to try to increase the number of shards. Is it correct to ignore the case when this code fails (the outer try/except block) or should it be placed inside a transaction (which would leed to retries of this code)?

Regards, Constantin