[7:00pm] marzia_google: (and this marks the beginning of App Engine chat
time
[7:00pm] smwaveforms: so does the app-engine-patcher run on top of django
0.96
[7:00pm] smwaveforms: or instead of it
[7:01pm] cresloyd joined the chat room.
[7:01pm] marzia_google: i'm not an app-engine-patch expert, but i think it
works with either 0.96 and 1.0
[7:02pm] Kardax: Is there any particular format to this chat?
[7:02pm] marzia_google: no format
[7:02pm] dan_google: Shout questions.  And answers, if you have 'em.
[7:02pm] smwaveforms: I am wondering if you are running both 0.96 and the
patch at the same time. That would seem to be expensive
[7:02pm] Kardax: Ok, question: permanent unique user identifiers...
something we can use in a key name... any chance this will happen soon?
[7:03pm] oktopus joined the chat room.
[7:03pm] marzia_google: re:app-engine-patch, i don't think there is
significant additional overhead involved, it's basically just an extension
of django that bridges the gap between app engine and traditional
environments
[7:04pm] taylorhughes: @Kardax good question!
[7:04pm] smwaveforms: @Marzia, that is good news.
[7:04pm] marzia_google: re: permanent unique user identifiers, we don't have
any very immediate plans to introduce it, but it's something we are actively
investigating
[7:04pm] Kardax: So... how can one safely use the Google User's API... what
if a user changes their email address?
[7:05pm] amichail: How to fix an index that is stuck on "Building"?
[7:05pm] marzia_google: so that is an issue with the user's api in theory,
in reality, this is a very rare occurence
[7:05pm] marzia_google: it almost never happens
[7:06pm] Kardax: That's true... but it's always the rare stuff that bites ya

[7:06pm] marzia_google: if an index has been in building more than 24 hours
you will need to send an email to the group and someone will be able to fix
it
[7:06pm] taylorhughes: the main issue I ran into is, I changed my user
account's e-mail address and couldn't create a User object to use in a query
because my old e-mail address was not linked to an existing account anymore
[7:06pm] marzia_google: if it's less than 24 hours it could still be
building
[7:07pm] marzia_google: @taylorhughes yes, currently, unfortunately this
happens, you would basically need to treat them like a new user
[7:07pm] marzia_google: or manually link the two accounts together
[7:07pm] taylorhughes: the way I'm dealing with it is to record the user's
e-mail address when the account is created separately so I can at least find
it later to migrate it
[7:08pm] marzia_google: that is the best solution right now
[7:08pm] Kardax: I posted an issue about the permanent ID's a while back,
for anyone who's interested.  #1019
[7:08pm] Kardax:
http://code.google.com/p/googleappengine/issues/detail?id=1019
[7:08pm] dw: i was wondering if there was an official comment on the recent
failure that resulted in high latencies. how did this happen? what is being
done to prevent such an evil problem in future?
[7:09pm] dw: particularly im interested in how you segment your rollouts.
seems something went live that you couldn't roll back, and that's worrying
[7:09pm] marzia_google: the problems stemmed from monday's maintenance
[7:09pm] marzia_google: you can read the most concise useful summary that
was just posted:
[7:09pm] marzia_google:
http://groups.google.com/group/google-appengine-downtime-notify/browse_thread/thread/86ab36fa2e7fac2c

[7:09pm] dw: th
[7:10pm] dw: *thx
[7:10pm] marzia_google: but we take what happened very seriously
[7:10pm] marzia_google: obviously this is one of the worst downtimes we've
seen since launch
[7:11pm] marzia_google: generally at Google when something like this happens
there is a full internal post mortem to ensure that this kind of stuff
doesn't happen again
[7:11pm] marzia_google: so the team will be going through everything and
fixing things so that this kind of thing is less likely to happen in the
future
[7:12pm] dw: can you expand at all on what caused the failure? is a new
component resulting in higher io?   *very curious*
[7:14pm] marzia_google: at this point, beyond what is published there isn't
much more I can say, it wasn't the result of any specific feature or system
[7:14pm] Kardax: My app is just a little experiment at the moment, but I'm
seeing greatly improved performance vs. yesterday and this morning
[7:14pm] marzia_google: it was basically just the result of the scheduled
maintenance
[7:14pm] dw: marzia_google: thanks again
[7:14pm] marzia_google: it should be coming back in line with more typical
performance now
[7:15pm] marzia_google: i can say the team has been working _very_ hard the
past couple of days on this problem
[7:15pm] marzia_google: (as you can imagine)
[7:15pm] dw: telling me that only makes me more curious  sounds like a fun
problem
[7:15pm] pranny:
http://appgallery.appspot.com/results?topapps=true&start=15&num=5 any
progress on thie error that pops up when viewing this. Sorry can't file bug,
in hurry
[7:16pm] amichail: Do you plan to provide access to previous versions of the
datastore in case the current version becomes corrupted?
[7:16pm] marzia_google: oh, hmm that page works for me, actally
[7:16pm] marzia_google: we have no current plans for datastore versioning,
but you should star the issue for it (or file it if it isn't already there)
if it's something you would like to see
[7:16pm] oktopus: 10 days ago I posted a message asking for reactions to my
app at simplifyconnections.appspot.com and got zero responses. That likely
means no on had anything good to say. But just in case it was overlooked by
everyone, let me note here that I would love to hear from people.
http://groups.google.com/group/google-appengine/browse_thread/thread/a9473091ecc2e829/1318ebf58f98744b?lnk=gst&q=thebrianschott#1318ebf58f98744b
[7:17pm] pranny: marzia_google: might be this could help
http://dpaste.com/6652/
[7:18pm] marzia_google: hmmm, it's a timeout error
[7:18pm] marzia_google: so the call took to long
[7:18pm] marzia_google: the appgallery could use better error recovery
[7:18pm] dw: oktopus: i posted a datastore backup app a week ago and got one
response, and only 20 or so hits to the web page   i think the group's
demographic is not the idle hobbyist who clicks on every link
[7:19pm] pranny: marzia_google: yeah, I guess so. My internet speed is
fairly good. Gotta go. Bye. Good work, AppEngine team.
[7:19pm] Kardax: Ok, next question: we have db.run_in_transaction; is there
a chance of getting a db.run_in_snapshot?
[7:19pm] dankles: Q: What (if any) progress / plans are there on reducing
Datastore CPU usage?
[7:20pm] Kardax: I'd like to be able to read an entity group from a
consistant state without the overhead of a transaction.
[7:21pm] marzia_google: @kardax file a feature request  right now there are
no plans for such a thing
[7:21pm] marzia_google: you can db.get multiple keys
[7:21pm] marzia_google: which seems like it would be similar
[7:21pm] dan_google: Kardax: Depending on what you're reading, you can store
all the stuff you want in a "snapshot" on a single entity.
[7:21pm] dan_google: Kardax: Reads are consistent within an entity.
[7:21pm] Kardax: Yes, I'm doing that a lot... but I don't know what the next
key is until I've read the first.
[7:22pm] marzia_google: @dankles there isn't anything specific to report wrt
to datastore cpu
[7:22pm] Kardax: I'm playing with B-tree storage in the datastore, a single
entity can't hold one of these...
[7:22pm] oktopus: dw: Yes this is a great group, but maybe not the ones to
ask such questions. My app is very difficult to publicize and this
particular feature requires almost a nationwide commitment to be effective.
[7:22pm] Kardax: So, I'm using an entity group for the b-tree.
[7:23pm] Kardax: This gives me the consistant state I need for
updates/deletes.
[7:23pm] Kardax: But if something changes while another app instance is
reading it, it can fail in interesting ways.
[7:23pm] Kardax: So, being able to run_in_snapshot is the only way to fix it

[7:24pm] Kardax: I guess I'll have to make that feature request, then...
[7:24pm] dankles: Q: (Not a Q) I would again like to voice my anti-starring
of all non-Python languages, with the motivation being that GAE team focus
on platform itself without fragmentation.
[7:25pm] marzia_google: noted
[7:25pm] Kardax: As much as I hate python, I do agree.
[7:25pm] • angerman votes for haskell
[7:25pm] Kardax: There are a lot of things I'd like to see before we get
more languages, as you might have guessed from my comments here
[7:26pm] dan_google: But then what would all our Fortran engineers do?  They
don't know Python.
[7:26pm] nwinter: Marzia, thanks ever so much for diagnosing my CPU
sidelining after the last chat.
[7:26pm] nwinter: It would help even more to know how this works:
"Applications that are heavily cpu-bound, on the other hand, may incur
[7:26pm] nwinter: some additional latency in long-running requests in order
to make room
[7:26pm] nwinter: for other apps sharing the same servers."
[7:26pm] • angerman has yet to see a fortran webframework
[7:27pm] dankles: Q: Not sure if this has come up... Any plans to
offer/parter with CDN, so a few lines in app.yaml could push a directory of
static assets out for efficient serving?
[7:27pm] nwinter:  Like, how is a handler identified as high-cpu, and how
long does that classification last?
[7:27pm] cresloyd: dan_google: could you re-train those Fortran guys to
learn Cobol?
[7:27pm] marzia_google: the high-cpu is done on a per-request basis
[7:27pm] dan_google: angerman: If you write one, you could be a hero to the
Fortran web development community!
[7:27pm] amichail: Do you know if python 2.5's random module will give the
same results for the same seed across all architectures, compilers, etc.?
[7:27pm] marzia_google: and it's basically when cpu is in the hunderds of
runtime ms per request
[7:27pm] angerman: dan_google: i question the last 3 words
[7:28pm] nwinter:  So, if a request goes over X cpu seconds, it can be put
on the backburner, but other requests to the same handler will be unaffected
by that?
[7:28pm] marzia_google: it's possible that other requests will be unaffected
[7:28pm] amichail: Is there any chance that the random module will give
different results as Google upgrades GAE servers?
[7:28pm] nwinter:  Hmm. Okay, thanks!
[7:29pm] marzia_google: @dankles, that is an interesting idea, i don't think
it's one we've explored
[7:29pm] • angerman is running his blog
http://journal.moritzangermann.compretty well on app-engine. The only
thing that annoies me from time to time
is that the deployment fail... I even had it fail for 5 times in a row...
[7:30pm] angerman: @dankles, @marzia_google: dunno if that's legal, but I
saw instructions on using GAE as a CDN of it's own.
[7:30pm] angerman: (having an implicit file(+size) limit though
[7:30pm] dankles: @angerman: but GAE isn't really well suited for being a
CDN
[7:31pm] marzia_google: concerning the random module in python i'm going to
have to cop to not knowing the answer to what it uses to see the random
number
[7:32pm] dankles: re random: i wouldn't rely on it not changing, but it
probably won't
[7:32pm] angerman: dankles: apart from the file+size limit, what else holds
you back?
[7:32pm] marzia_google: i imagine that aside from the seed, the algorithm is
the same for all python implementations, but that's just a random guess
[7:32pm] smwaveforms: when I log into dashboard I always get UNAUTHORIZED
but then it gives me a link Return to applications screen' and I can get in
[7:32pm] smwaveforms: should I be concerned?
[7:32pm] marzia_google: have you tried appengine.google.com/a/mydomain.com
[7:33pm] marzia_google: it seems ike this could be a Google Apps / Google
Accounts issue (@smwaveforms)
[7:33pm] smwaveforms: In what way?
[7:33pm] dankles: @angerman : a good CDN has servers all over the world,
serving each user from the closest edge, and optimized for low bandwidth
costs, static assets... GAE design goals were different, as it clusters
around itself + Datastore, etc.
[7:33pm] marzia_google: it's certainly possible to use App Engine as a CDN,
nothing is stopping you
[7:34pm] marzia_google: if you have an account that is both a Google Apps
account and a Google Account... it's just
[7:34pm] marzia_google: the system sometimes authenticates against the wrong
account and can cause problems access your application
[7:34pm] dankles: right, the easiest thing is to just serve up
static_files.  I'm thinking about an upgrade, possibly one that Google could
make $ from, instead of people going to outside CDNs.
[7:35pm] marzia_google: if the admin is the Google Apps account and you
login with the Google Account for instance
[7:35pm] Kardax: Another question:  How "big" can an entity group be before
problems are encountered (besides concurrency)?  What's the definitiion of
"big"?  What problems are seen?
[7:36pm] marzia_google: with entity groups, the biggest issues is contention
[7:36pm] marzia_google: since writes to an entity group happen serially
[7:37pm] voluntas left the chat room.
[7:37pm] marzia_google: so an entity group is too 'big', i would say, when
it can't reasonably handle the number of writes to the group
[7:37pm] marzia_google: writing to one entity in the group locks the entire
group
[7:37pm] Kniht joined the chat room.
[7:37pm] marzia_google: which is the main issue
[7:37pm] voluntas joined the chat room.
[7:38pm] muthu_ left the chat room. (Remote closed the connection)
[7:38pm] deltab joined the chat room.
[7:38pm] Kardax: I'm more concerned with physical size limitations... for
example, if I can make reasonably sure that contention will be low, but it
could have 10's of thousands of entities in size, is that going to work?
[7:39pm] LuchoVtn3d joined the chat room.
[7:39pm] marzia_google: 10s of thousands... i don't know that there is a
lmitation that would prevent this
[7:40pm] dan_google: Kardax: I think you'll be fine.
[7:40pm] nwinter:  Is it possible to get a rough estimate of how long an app
instance will stick around once spawned?
[7:40pm] Kardax: Good to know, thanks
[7:40pm] marzia_google: @nwinter, not really
[7:40pm] marzia_google: there are no garuntees
[7:40pm] dankles: Q: What's the latest with background tasks?
[7:41pm] Kardax: Good question
[7:41pm] savraj joined the chat room.
[7:41pm] nwinter:  No average time or anything?
[7:41pm] savraj: hi guys... just jumping in here.  Are there any decent
libraries to integrate Google Checkout and App Engine?
[7:42pm] marzia_google: @nwinter i'm not sure an average time would be
meaningful, even if i knew off hand what it was ( i don't)
[7:42pm] voluntas left the chat room. (Client Quit)
[7:42pm] marzia_google: since it really can be quite variable
[7:42pm] marzia_google: concerning background tasks, i odn't have any
specific announcements
[7:42pm] nwinter:  @marzia: Okay; thanks.
[7:42pm] Kardax: Re instance lifetime: So an app instance could last a few
seconds or a few hours?  Just curious
[7:42pm] marzia_google: @savrag, i know there is a python checkout library,
gchecky?
[7:43pm] marzia_google: i've never used it
[7:43pm] dan_google: nwinter: Apps are evicted by least-recently-used on an
app server.  As someone noted recently (forums or chat I forget), low
traffic could mean lots of "restarts", but so could spikes in traffic which
may start new instances on multiple app servers.
[7:43pm] voluntas joined the chat room.
[7:43pm] nwinter:  @dan_google: good to know!
[7:43pm] dan_google: Kardax: Yes, depending on the weather.  By which I
mean, request patterns, other apps on each app server, and so forth.  Not
really predictable.
[7:44pm] Kardax: Makes sense
[7:44pm] savraj: @marzia -- ah, cool. found it on google code, will try
getting this working tonight.  Thanks!
[7:44pm] Kardax: Ok, my next question:  Currently, it looks like db.get,
when fed a bunch of keys, only counts as one datastore API call... is this a
bug or by design?
[7:45pm] amichail: Do we need to make datastore backups?  Could we trust GAE
not to lose our data?
[7:45pm] dankles: Good question, amichail
[7:45pm] marzia_google: @kardax that's by design
[7:45pm] dan_google: Kardax: By design.  The datastore has a batch API for
gets, puts and deletes.
[7:46pm] dan_google: Kardax: That also means you have to be aware of API
request size limits when doing batches.
[7:46pm] Kardax: Excellent... I've been purposely grouping together
gets/puts/deletes as much as possible hoping that was the case
[7:46pm] Kardax: How do API request size limits come into play?
[7:46pm] marzia_google: @amichail i think it's probably a good idea to make
backups for personal reasons
[7:47pm] angerman: what was with the background jobs and xmpp? did I miss
something intermediate?
[7:47pm] marzia_google: but i don't believe, due to the natural redencies in
the system, there is much chance of App Engine loosing the data that is
stored there
[7:47pm] marzia_google: backups would be a good idea in the case of
overwritten/deleted data
[7:47pm] dan_google: Kardax: There's a limit of 1 MB for an API call
request, and an API call response.  With a batch put, for instance, the
*total* size of all entities being put needs to be under 1 MB.  If you put
each entity separately (not in a batch), then each entity could be up to 1
MB.
[7:48pm] marzia_google: @angerman these things are things we are working on
[7:48pm] dan_google: Kardax: Similar for batch gets, since the limit applies
to API responses.
[7:48pm] marzia_google: though they aren't yet released and I don't have a
timeline on when the will be
[7:48pm] marzia_google: aside from the one on the roadmap
[7:48pm] Kardax: dan_google: Ok, makes sense.  Is there a good way to tell
how large an entity is?
[7:49pm] nwinter:  Is a get_by_key_name() lookup significantly faster than a
query.get() lookup?
[7:49pm] oktopus: My app allows users to delete records. An evil doer could
delete a lot of stuff. Is there an example of a system that stores all added
records from users to an archive file?
[7:49pm] dan_google: Kardax: Entity size = kind + key name/id + key path
elements + property names + property values.
[7:50pm] nwinter:  oktopus: why not have user deletions set a "deleted" flag
instead of actually deleting the record and having a separate backup?
[7:50pm] Kardax: dan_google: Ok, that's what I was expecting... good to know

[7:50pm] dan_google: Kardax: Specifically, it's the size of the resulting
proto buffer, if you want to dig for that.
[7:50pm] marzia_google: @nwinter, yes, faster
[7:50pm] oktopus: nwinter: yes, that might work for me. Thanx.
[7:51pm] nwinter:  Maybe I'm missing this somewhere, but what's the limit to
how much the memcache can hold before it starts evicting items?
[7:51pm] Kardax: dan_google: I do know a little about protocol buffers...
not suprising to hear that they're integral to the datastore's operation
[7:51pm] marzia_google: @nwinter, it's not listed anywhere, because it
depends a lot on usage
[7:52pm] marzia_google: but around 100MB is a safe assumption
[7:52pm] nwinter:  oh, sweet!
[7:52pm] angerman: hehe. I'm caching so much on my blog I'm running out of
traffic before I run out of CPU
[7:52pm] dan_google: nwinter: Be sure to code defensively, since memcache
can evict for other reasons.  It's rare, but possible.
[7:53pm] nwinter:  will do; was just wondering if it could support the size
of my "working set", which it more than can -- very happy to hear that
[7:54pm] Kardax: I just wanted to take a moment to say that this chat has
been very, very valuable to me
[7:54pm] angerman: dan_google: are there people who rely on existance of
objects in the cache(?)
[7:54pm] nwinter:  me too; thanks so much, guys!
[7:54pm] marzia_google: great, we still have a couple more minutes
[7:54pm] marzia_google:
[7:55pm] angerman: marzia_google: could you publish a list of
"successfull"/high traffic app-engine apps?
[7:55pm] dankles: Q: All my static files are returning with HTTP 200 (not
being cached).  What am I doing wrong?
[7:55pm] Kardax: Good question, dankles
[7:55pm] marzia_google: ahve you set an expiration on the files? in the
app.yaml
[7:55pm] dan_google: angerman: I've seen people suggest techniques that use
memcache for inter-request work space without persisting to the datastore.
There's nothing inherently wrong with that, as long as you don't mind
starting the calculation over or losing results.
[7:55pm] Kardax: Expiration shouldn't be necessary... the browser sends an
If-Modified-Since header when it checks a file it has in it scache.
[7:55pm] dankles: by "all" I may have meant "all except for the ones that
are"... But yes, I have in app.yaml:  default_expiration: "5d"
[7:56pm] Kardax: The server should check the date of the file and compare it
against that header value, returinging 304 (and no content) if the
browser/proxy cache is current.
[7:56pm] Dennis_TW: i'm new to memcache.  does that 100mb memcache stay
around for days even if app has not been called?
[7:56pm] marzia_google: i don't know any reason off the top of my head this
wouldn't work
[7:56pm] marzia_google: if you notice it consitently i would post some
headers in the group
[7:57pm] marzia_google: which would be the most helpful, request response
headers + app.yaml
[7:57pm] dan_google: Dennis_TW: Yes, memcache eviction is unrelated to app
cache eviction.
[7:57pm] dankles: OK will look into it.  Am pre-launch, so haven't done deep
research yet, just wondering if there was something obvious.
[7:57pm] angerman: Dennis_TW: I had cached items for over 72hs
[7:57pm] Dennis_TW: cool!
[7:58pm] angerman: marzia_google: btw, the memcache.get_statistics behaves
different on dev and prod
[7:58pm] dankles: My app is trying to memcache for 1 week, but haven't
tested yet.
[7:58pm] marzia_google: yes i believe there was a thread about this
[7:58pm] Kardax: Implementing support for the If-Modified-Since header is
super easy... I did it for an ASP.NET image processing app I wrote a few
years ago
[7:59pm] Kardax: In the next day or two I'll see if there are any feature
requests out for it, and add to it or create one if necessary.
[7:59pm] dankles: Kardax: one man's "super easy" is another man's
nightmare   however I was talking about my static files, which is beyond my
control.
[7:59pm] savraj left the chat room.
[7:59pm] angerman: dankles: I'm having either never expering values in the
memcache (e.g. for static stuff) where I just cache the response
indeterminate... or usually 15minutes
[7:59pm] marzia_google: sorry i can't find it write now
[7:59pm] marzia_google: *right
[8:00pm] Kardax: dankles: Yeah, I know what you mean... it's up to Google to
support If-Modified-Since on static files
[8:00pm] dankles: Hey Googlers, thank you very much for the chat & all your
hard work!
[8:00pm] angerman: marzia_google: maybe it's even been filled by me, wait a
sec
[8:00pm] pranny left the chat room. ("Leaving.")
[8:01pm] angerman: hmm no.
[8:01pm] smwaveforms: thanks !
[8:01pm] angerman: marzia_google: but this one was strange too:
http://code.google.com/p/googleappengine/issues/detail?id=1070&can=4&colspec=ID%20Type%20Status%20Priority%20Stars%20Owner%20Summary%20Log%20Component
[8:01pm] oktopus: Thank you, all.
[8:01pm] smwaveforms left the chat room.
[8:01pm] oktopus left the chat room.
[8:02pm] marzia_google: @angerman
[8:02pm] marzia_google:
http://groups.google.com/group/google-appengine/browse_thread/thread/8e0304f1a4ce6ecc/f4e046f773451aa5?lnk=gst&q=memcache+get_stats()%2C+what+do+they+mean%3F#f4e046f773451aa5

[8:02pm] marzia_google: ok, i have to be off
[8:02pm] marzia_google: thanks everyone for coming
[8:02pm] angerman:
http://code.google.com/p/googleappengine/issues/detail?id=624
[8:02pm] Kardax: Thanks for your help
[8:02pm] taylorhughes: @marzia_google thanks
[8:02pm] nwinter:  thanks!
[8:02pm] marzia_google: as always the transcript will be on the group
tomorrow!
[8:02pm] angerman: that's the memcache issue
[8:03pm] marzia_google: goodnight!

--~--~---------~--~----~------------~-------~--~----~
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