Hey everyone,

Just wanted to post the transcript for our IRC office hours. We're thinking
about reducing the chat time to once a month due to the relatively low-level
of activity. Would it be more useful if we scheduled IRC office hours for a
week after each release?

-----

Notable questions:

- What is multi-tenancy?

Multitenancy is the ability to create namespaces for your data in the
datastore, memcache and task queues. Developers will be able to create
virtual partitions in their application as needed. This can apply to an
application with multiple domains, multiple customers, and so forth.

- How do you get the namespace of a model instance in Python?

.key().namespace()

- Can you use namespaces to separate models by account owners? (replace
"where account = :1")

Yes

- Can you globally change a namespace name?

No

- Will App Engine allow users to manage/purchase more memory in the future?

Possibly, we are exploring ways in which we can do this.


[08:59am] ikai_google: All right everybody, let's kick off today's office
hours session
[08:59am] ikai_google: there are a few Googlers in hiding here
[08:59am] nickjohnson: Evening all
[08:59am] ikai_google: you all know me, I lurk here much of the time
[09:00am] moraes: i knew it!!!11
[09:00am] ikai_google: there's also nickjohnson
[09:00am] ikai_google: there are a few whom I suspect are googlers based on
their handles
[09:00am] ikai_google: but I'm not going to call them out =)
[09:01am] • moraes summons the hidding spirits
[09:01am] morais78 joined the chat room.
[09:02am] ikai_google: okay, so ... everyone has seen the 1.3.6 release,
right?
[09:02am] ikai_google:
http://googleappengine.blogspot.com/2010/08/multi-tenancy-support-high-performance_17.html
[09:02am] nickjohnson: Yaay!
[09:02am] ikai_google: there's LOTS of good stuff here
[09:02am] moraes: you know, i didn't even know what "Multi-tenancy" meant
but i know that i was doing it hardcoded
[09:02am] perlmonkey2: anything in the gae pipeline thats going to make a
splash?
[09:02am] nickjohnson: moraes: Are you intending to switch?
[09:02am] moraes: nickjohnson, yes, now
[09:02am] ikai_google: perlmonkey2: lots
[09:03am] ikai_google: perlmonkey2: 1.3.6 is a pretty big release as it is
[09:03am] slynch_google joined the chat room.
[09:03am] moraes: nickjohnson, i created run_in_namespace(), the cousing of
run_in_transaction(): http://paste.pocoo.org/show/251604/
[09:03am] moraes: hehe
[09:04am] moraes: *cousin
[09:04am] psykidellic: So what would be the best option to stream mp3
(stored in GAE) over RTMP?
[09:04am] perlmonkey2: ikai_google just saw your post. new releases are
always exciting
[09:04am] johnlockwood joined the chat room.
[09:04am] nickjohnson: moraes: Oh, nice.
[09:05am] ikai_google: psykidellic: I'm not an expert on RTMP but #2 looks
like the way to go http://en.wikipedia.org/wiki/Real_Time_Messaging_Protocol
[09:05am] morais78: "Custom Error Pages": thank you appengine team :)
[09:06am] psykidellic: So I guess I have to run an external RTMP server and
configure it to use the GAE datastore?
[09:06am] ikai_google: psykidellic: Again, not an expert. Try it out and let
us know, I don't know how this works or even if it *will* work
[09:06am] mbw: psykidellic: if you are interested in RTMP in python, talk to
Nick Joyce.  He is the author of PyAMF and RTMPy ... he is njoyce on this
chan
[09:06am] psykidellic: Okay.
[09:06am] ikai_google: hey mike!
[09:06am] nickjohnson: psykidellic: That's probably the best option. RTMP
over HTTP _might_ work, but you'd have to implement your own RTMP stack in
App Engine
[09:06am] mbw: hi ikai
[09:06am] moraes: nickjohnson, can you get from an entity its namespace?
[09:06am] ikai_google: in case anyone is wondering, mbw is from WebFilings:
http://googleappengine.blogspot.com/2010/08/webfilings-streamlines-sec-reporting.html
[09:07am] psykidellic: Yeah, I have seen: http://rtmpy.org/ - it uses
Twisted so wont run on GAE.
[09:07am] ikai_google: moraes: You might be able to set the namespace, then
just do a "get all entities"
[09:07am] ikai_google: moraes: I'm not sure what you're asking?
[09:07am] mbw: psykidellic:  Nick actually works with Webfilings now, but he
is still actively working on PyAMF and RTMPy.  WF hasn't used rtmp at all,
but we have made large contributions to the GAE adapter for PyAMF
[09:07am] nickjohnson: moraes: Yes, it's part of the key
[09:08am] nickjohnson: .key().namespace(), I suspect
[09:08am] psykidellic: mbw: Aha, nice. I will look around for him up here.
[09:08am] moraes: nickjohnson, oh ok, was looking for this. ikai_google,
that ^
[09:08am] psykidellic: mbw: From all the option, it seems the easiest
(considering I am not much RTMP expert) would be run Wowza on EC2 and
configure it to use GAE (though I am not sure if thats even possible)
[09:08am] moraes: key().namespace() indeed, i missed that
[09:09am] carlosm left the chat room. (Remote host closed the connection)
[09:10am] mbw: psykidellic: an external setup would probably work. Nick
would know a lot more.  he is in Australia so his timezone is wacky.  Ill
ping him and let him know you were curious about it.
[09:11am] psykidellic: mbw: Oh, that would be nice :) Thanks.
[09:11am] chevelle_ joined the chat room.
[09:11am] Wesley_Google joined the chat room.
[09:11am] psykidellic: I wonder how hard it will be to implement the stack
on GAE?
[09:12am] ph43thon: only one way to find out
[09:12am] ph43thon: :)
[09:12am] psykidellic: Heh
[09:12am] mbw: ikai_google: what did you think of the blog post?  Some of it
sounded a bit funny to me (i didnt write it), but overall a good thing for
both webfilings and gae I think.
[09:12am] nickjohnson: I suspect you'll be able to reuse some of the message
parsing infrastructure, but you'll have to write your own connectors.
[09:12am] ikai_google: ikai_google: I wish we had 10x more like you guys.
seriously. hahaha
[09:13am] ikai_google: DOH
[09:13am] ikai_google: replied to myself
[09:13am] ikai_google: that was meant to go to mbw
[09:13am] ikai_google: LOL LOL what a bad one to address to myself
[09:13am] Wesley_Google: lolz
[09:13am] slynch_google: hahahahaha
[09:13am] moraes: moraes: haha
[09:13am] ph43thon: seems like  a Freudian slip
[09:13am] ph43thon: :)
[09:13am] Wesley_Google: means it's too early in the morning for ikai
[09:13am] ikai_google: well, I'mm sending out the recap so that'll be
conveniently missing
[09:13am] jwbnyc joined the chat room.
[09:14am] ksachdeva: In my gae models I have been putting the name/ref of
domain name so as to be able to find the entities belonging to a particular
gapps domain name. Is the namespace support eliminate such a need now ?
[09:14am] derferman joined the chat room.
[09:14am] nickjohnson: ksachdeva: Yes.
[09:14am] mbw: We will be able to get rid of  "where account=:1"
 everywhere!
[09:15am] nickjohnson: If you want to convert your old entities, you'll need
to get them, clone them into new entities, and store them again. The Mapper
API would be a good match for that.
[09:15am] nickjohnson: mbw: You mean you didn't have an RPC hook to do that
for you? :)
[09:15am] mbw: nickjohnson: that migration is going to be scary and tricky
for us
[09:15am] nickjohnson: mbw: Yes, I can imagine you'd want to take particular
care.
[09:15am] nickjohnson: You could do something like this:
[09:15am] nickjohnson: 1) Make new code write to both old and new schemes
[09:16am] derferman left the chat room. (Read error: Connection reset by
peer)
[09:16am] nickjohnson: 2) Run the mapreduce to copy everything to the new
scheme, leaving the 'account' property in
[09:16am] mbw: 1) wont perform very well
[09:16am] derferman joined the chat room.
[09:16am] nickjohnson: 3) Add the namespace hook
[09:16am] nickjohnson: 4) Remove 'account=' from old code
[09:16am] ph43thon: Can you create namespaces inside namespaces?
[09:16am] mbw: we will mapreduce and write new ones in a migration, we will
most likely do it late at night on a weekend when no customers are using
it.. shutdown the app during
[09:16am] nickjohnson: No, it won't, but it wouldn't have to be for long
[09:17am] nickjohnson: ph43thon: No, but you can set any namespace you want,
so you could build a namespace string like "foo:bar"
[09:17am] mbw: but the migration wont be easy, not everything has account
set on it, the model is not that simple :D
[09:17am] nickjohnson: mbw: That's a more straightforward option, if you can
do it.
[09:17am] ph43thon: hmm.. can you globally change a namespace name?
[09:17am] ph43thon: like "foo:bar" --> "bar"
[09:17am] ikai_google: ph43thon: Namespaces are keys, I believe, so no
[09:17am] ikai_google: keys cannot change
[09:17am] jwbnyc: A question on deployment - I'd like to run a continuous
integration with automated deployment in the cloud. Anyone know of a tool
that can be run from GAE Cron that will pull from repository and deploy a
GAE app?
[09:17am] nickjohnson: ph43thon: No, only by get/clone/set across all the
entities that use it.
[09:17am] ikai_google: it's a different entity altogether
[09:17am] nickjohnson: mbw: You'll also need to make sure you handle any
reference properties.
[09:18am] ph43thon: okay thanks.
[09:18am] nickjohnson: For that matter, you may choose to continue as you
are, if you consider the disadvantages of your current approach worth it
[09:18am] ikai_google: jwbnyc: I don't know of one, but other folks have
used local tools to pull from a repo and do deploys using the --passin flag
for password
[09:18am] moraes: the "Multi-tenancy" name is not fair. i first looked at
"Multi-tenancy" and thought, hmm, let's see the next one, and later realized
this is a huge one :P
[09:19am] nickjohnson: moraes: Perhaps we should've listed it as "OMG,
Awesome multitenancy!!!111"
[09:19am] ph43thon: are there any writeups on the innerworkings of
namespaces?  or is it pretty much that it's just a prepended value to the
front of the full gae keyname?
[09:19am] moraes: "namespaced data!!!1!"
[09:19am] ikai_google: ph43thon: No writeups yet, it's just released
[09:19am] ikai_google: ph43thon: Give us a bit, I'm sure Nick is already
working on something =P
[09:20am] nickjohnson: ph43thon: They become part of the key, as you say,
and the datastore has safeguards to make sure you can only get/query/put the
current namespace.
[09:20am] nickjohnson: In principle it's fairly simple.
[09:20am] psykidellic: Yeah, I have never used such things before so I am in
a bind, what problem exactly gets solved by namespace :)
[09:20am] ikai_google: ph43thon: The big win here is queries, whereas before
it would have been harder, especially if you implemented it yourself
[09:20am] mbw: exactly... which will reduce indexes
[09:21am] moraes: psykidellic, user1.foo.appspot.com and
user2.foo.appspot.com ---> set namespaces for user1 and user2 and have
separate data without api hooks or extra filters in queries
[09:21am] mbw: also, we will setup certain kinds to be in the default
namespace while most others will use current namespace as set by a
middleware related to session management/security... will be much more
simple and harder for us to make a mistake and leak data across accounts
[09:22am] ph43thon: ikai: welll, i can also see a lot of really great uses..
i mean.. you could create something to do snapshots of all your data in your
app (with namespace="snapshotdate") .. its a good way to allow you to keep
Model definititions simple and breaking them up into different sets (with
namepsaces becoming things beyond just clients..) etc
[09:23am] pranny left the chat room. (Quit: Leaving.)
[09:23am] mbw: it will make backup simpler too I assume,  we will be able to
take an entire customers data and pull it out, into another instance or
whatever
[09:24am] ikai_google: ph43thon: I think the problem with snapshots is that
you need to set a namespace to use the data, so that data is not available
unless you are in that namespace. To use namespaces like that you're
essentially doing a doublewrite
[09:24am] chevelle_ left the chat room. (Ping timeout: 240 seconds)
[09:25am] ph43thon: ikai: hmm, yeah, haven't thought out the snapshot
thing.. it think its ridculawesome mainly for making it easier to partition
out data without needing to add an extra property to a model (and it makes
life a lot easier if you craft your own key_names for entities)
[09:26am] ikai_google: ph43thon: yep yep yep!
[09:28am] nickjohnson: And as others have pointed out, it eliminates many
places where you'd otherwise need an index because of the namespace property
[09:29am] moraes: the was a long discussion in mailing list of a guy that
had to the multi-tenancy himself
[09:30am] moraes: if he's still around he must be happy :P
[09:30am] rafanunes: I was hoping that channel api would come in that sdk
version
[09:31am] ikai_google: rafanunes: so were we. stay tuned
[09:31am] mbw: We have enough to do to catch up and use all the new
awesomeness that the GAE team has released... channel will be another one
[09:31am] ikai_google: rafafunes: in a perfect world, we can release every
single feature everyone wants with every release and there are no
scalability/security concerns
[09:31am] ph43thon: hehe.. i noticed the comments on the blog post:
("multi-tenancy what?.. hey where's Channel Api?")
[09:32am] ikai_google: yeah, it makes me wonder if we should go back to not
announcing anything
[09:32am] moraes: multi-tenancy is not a sexy name
[09:32am] ikai_google: but I think the lesser of the two evils is teasing
everyone
[09:33am] ikai_google: moraes: how about ... data sharding
[09:33am] mbw: I like that you guys put out things to play with before
release.  Gives us a chance to kick the tires and do some planning
[09:33am] moraes: but i am personally very excited about multi-tenancy
[09:33am] nickjohnson: ikai_google: That implies other things.
[09:33am] ikai_google: moraes: maybe there's a very buzzword-y name. nosql
cloud scalable sharding
[09:33am] ph43thon: Do any of you know of any academic institutions or
research places using GAE in place of other grid computing infrastructures?
 i.e. is anyone using it for anything big that has to do with back end
processing or solving big NP-hard stuff?
[09:33am] julian__ left the chat room. (Ping timeout: 276 seconds)
[09:34am] nickjohnson: ph43thon: It's possible, but big backend grunt work
jobs aren't really App Engine's forte
[09:36am] ph43thon: nickj: well, it seems like the parallelization part is
very easy to do.. what would be the main reason not to do a big search
optimization problem on GAE? (versus setting up a big cluster of EC2
instances)
[09:37am] ikai_google: ph43thon: Seems pretty theoretical right now ...
build it and let us know!
[09:37am] ph43thon: ikai: :) working on it
[09:37am] ph43thon: (though, i frequently do pretty dumb things so.. trying
to figure out just how dumb I may be being.)
[09:39am] derferman left the chat room. (Quit: derferman)
[09:39am] ph43thon: oh.. and by "search optimization", i mean searching
through a problem space randomly.. trying to seek out an optimal answer to
ones question.. (not search engine optimization)
[09:40am] slynch_google left the chat room. (Quit: slynch_google)
[09:41am] morais78 left the chat room. (Quit: Page closed)
[09:42am] nickjohnson: .set_request_namespace('tumbleweed')
[09:44am] ph43thon: yeah, people really seem to clam up when the topic isn't
twittering links back and forth to pictures of Kim Kardashian's bottom..
[09:44am] nickjohnson: You could write an App Engine app for that
[09:44am] nickjohnson: Is kimkardashiansbottom.appspot.com taken?
[09:44am] ph43thon: nickj: working on it too!
[09:44am] nickjohnson: heh.
[09:44am] Wesley_Google: who?
[09:45am] sako joined the chat room.
[09:45am] ph43thon: i'm creating a pso algorithm to randomly analyze all web
pics of kim kardashians bottom and find the ultimate one
[09:45am] mbw: Is anyone working on addressing memory profiling concerns
that some GAE users are having?
[09:45am] ph43thon: but.. there are so many.. and i'm looking at all
possible sets of 5.. this is NP-hard
[09:45am] ph43thon: (so to speak)
[09:46am] Wesley_Google: the issue is that's subjective, and algorithms
aren't as such...
[09:46am] mbw: I am also wondering if/when the amount of memory available
will be discussed, changed, or made purchasable
[09:46am] johnlockwood: how do you add to the domain name of an app:
user1.myapp.appspot.com, user2.myapp.appspot.com
[09:46am] ikai_google: mbw: that's something we're looking into, but before
we can do that we need to figure out how to bill for it, how to make it
fair, etc
[09:46am] Wesley_Google: mbw> specifically what kinds of memory profiling
issues have you been encountering?
[09:46am] moraes: johnlockwood, you don't need. you just use it
[09:47am] nickjohnson: johnlockwood: That feature is enabled automatically.
[09:47am] Wesley_Google: i think you just check the HOST env var to get the
hostname? (or something similar)
[09:47am] mbw: Wesley_Google: We see soft memory limit errors more
frequently when we stress some particular features we have.  We need to
figure out what is leaking.
[09:48am] jeffr joined the chat room.
[09:48am] johnlockwood: son-of-a-gun
[09:48am] mbw: Wesley_Google: for a majority of our app's services, we don't
see them at all.  It is more related to some task queue tasks, etc
[09:49am] Wesley_Google: mbw> pls cut-n-paste those full stack traces to
us... it'll really help route it to the right team mbrs
[09:50am] mbw: Wesley_Google: We are not seeing an actual "MemoryError"
exception.  Just the soft memory limit warning messages in the logs.  The
requests/tasks seem to complete normally most of the time.
[09:51am] Wesley_Google: mbw> ah.... send those anyway so we can at least
figure out where they're happening...
[09:51am] mbw: Another question.  On some deferred tasks we see  Error code
203... what is that?
[09:51am] johnlockwood: it doesn't seem to work automatically for custom
domains, like user1.www.mydomain.com
[09:52am] mbw: we only ever see "Error code 203" on our deferred queue tasks
[09:52am] xjrn left the chat room. (Ping timeout: 255 seconds)
[09:53am] mbw: some have throttle_code=1
[09:53am] xjrn joined the chat room.
[09:54am] moraes: johnlockwood, those you need to map in dns
[09:54am] Wesley_Google: mbw> is that an HTTP 203 or more like an app engine
error code?
[09:55am] moraes: johnlockwood, *.www.domain.com CNAME ghs.google.com or
something
[09:55am] johnlockwood: moraes:  thanks
[09:55am] mbw: Wesley_Google: HTTP 500, log level warning,  "A serious
problem was encountered with the process that handled this request, causing
it to exit. This is likely to cause a new process to be used for the next
request to your application. If you see this message frequently, you should
contact the App Engine team. (Error code 203)"
[09:56am] Bimmel joined the chat room.
[09:56am] mbw: the calls seem to last various times,  some 10s, up to about
20s
[09:58am] mbw: also, I see the same error message only with "(Error code
201)"  and before that it mentions the soft memory limit was exceeded
[10:00am] mbw: Wesley_Google: should I just send off a report of this stuff
to Fred or someone else?
[10:00am] ksuFreeflier joined the chat room.
[10:00am] Wesley_Google: i just pinged the team, but you can send it to me
to fwd to them. fred may not be the only one that works in this area... it's
better to spread the love :-)
[10:01am] mbw: you guys can poke around our logs right?
[10:01am] ikai_google: alright guys, I'm going to go ahead and wrap up these
office hours
[10:01am] nickjohnson: mbw: Only if we have a good reason.
[10:01am] ikai_google: thanks for coming out
[10:01am] ikai_google: we'll see you in the groups. I've got to jump off,
but a few folks will probably stick around a bit longer


-- 
Ikai Lan
Developer Programs Engineer, Google App Engine
Blog: http://googleappengine.blogspot.com
Twitter: http://twitter.com/app_engine
Reddit: http://www.reddit.com/r/appengine

-- 
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-appeng...@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