Hi Nick

I run the test in 3 steps (with half a minute in between):
1. Heavy load process to spawn appinstances
2. Write a lot of random values to the same key
3. Read the key from multiple threads.
I can repeat 3rd step, and still get the same result (mostly 2
different values)

It seems like I hit 2 different memcache servers with different view
on what is in the cache at that key

>Also, are you running this against the dev_appserver, or in production?
How do I see that?
We are running towards .appspot.com

-Kim

On Jun 23, 12:39 pm, "Nick Johnson (Google)" <nick.john...@google.com>
wrote:
> Hi Kim,
>
> It's not clear from your description exactly how you're performing your
> tests. Without extra information, the most likely explanation would be that
> you're seeing a race condition in your code, where the key is modified
> between subsequent requests to the memcache API.
>
> Also, are you running this against the dev_appserver, or in production?
>
> -Nick Johnson
>
>
>
> On Tue, Jun 23, 2009 at 7:18 AM, Kim Riber <kimsteenri...@gmail.com> wrote:
>
> > 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/...
> > 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 <kimsteenri...@gmail.com> 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 <kimsteenri...@gmail.com> 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
>
> --
> Nick Johnson, App Engine Developer Programs Engineer
> Google Ireland Ltd. :: Registered in Dublin, Ireland, Registration Number:
> 368047
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Google App Engine" group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to