Just made another test, to confirm the behavior I see. This example is much simpler, and simply has 10 threads writing random values to memcahce to the same key. I would expect the last value written to be the one left in memcache. When afterwards, having 4 threads reading 10 times from that same key, they return 2 different values. This only happens if I prior to the writing threads, run some heavy tasks, to force gae to spawn more app instances. It seems like each server cluster might have its own memcache, independant from each other. I hope this is not true. From a thread from Ryan http://groups.google.com/group/google-appengine/browse_thread/thread/45272062a8e36545/2289806f3f711c09?lnk=gst&q=memcache+atomic#2289806f3f711c09 he states that
>as for the datastore, and all other current stored data APIs like >memcache, there is a single, global view of data. we go to great >lengths to ensure that these APIs are strongly consistent. Regards Kim On Jun 17, 8:51 pm, Kim Riber <[email protected]> wrote: > To clarify a bit: > > one thread from our server runs one loop with a unique id. > each requests stores a value in memcache and returns that value. In > the following request, the memcache is queried if the value just > written, is in the cache. > This sometimes fail. > > My fear is that it is due to the requests changing to another app > instance and then suddently getting wrong data. > > instance 1 +++++ +++++ > instance 2 -- > > Hope this clears out the example above a bit > > Cheers > Kim > > On Jun 17, 7:52 pm, Kim Riber <[email protected]> wrote: > > > Hi, > > I'm experiencing some rather strange behavior from memcache. I think > > I'm getting different data back from memcache using the same key > > The issue I see is that when putting load on our application, even > > simple memcache queries are starting to return inconsistant data. When > > running the same request from multiple threads, I get different > > results. > > I've made a very simple example, that runs fine on 1-200 threads, but > > if I put load on the app (with some heavier requests) just before I > > run my test, I see different values coming back from memcache using > > the same keys. > > > def get_new_memcahce_value(key, old_value): > > old_val = memcache.get(key) > > new_val = uuid.uuid4().get_hex() > > reply = 'good' > > if old_val and old_value != "": > > if old_val != old_value: > > reply = 'fail' > > new_val = old_value > > else: > > if not memcache.set(key, new_val): > > reply = 'set_fail' > > else: > > reply = 'new' > > if not memcache.set(key,new_val): > > reply = 'set_fail' > > return (new_value, reply) > > > and from a server posting requests: > > > def request_loop(id): > > key = "test:key_%d" % id > > val, reply = get_new_memcahce_value(key, "") > > for i in range(20): > > val,reply = get_new_memcahce_value(key, val) > > > Is memcache working localy on a cluster of servers, and if an > > application is spawned over more clusters, memcache will not > > propergate data to the other clusters? > > > I hope someone can clarify this, since I can't find any post regarding > > this issue. > > > Is there some way to get the application instance ID, so I can do some > > more investigation on the subject? > > > Thanks > > Kim > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Google App Engine" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en -~----------~----~----~----~------~----~------~--~---
