My User
object that I want to create and store in the datastore has an email
, and a username
. How do I make sure when creating my User
object that another User
object doesn't also have either the same email
or the same username
?
If I just do a query to see if any other users have already used the username or the email, then there could be a race condition.
UPDATE:
The solution I'm currently considering is to use the MemCache to implement a locking mechanism. I would acquire 2 locks before trying to store the User
object in the datastore. First a lock that locks based on email
, then another that locks based on username
.
Since creating new User
objects only happens at user registration time, and it's even rarer that two people try to use either the same username or the same email, I think it's okay to take the performance hit of locking.
I'm thinking of using the MemCache locking code that is here: http://appengine-cookbook.appspot.com/recipe/mutex-using-memcache-api/
What do you guys think?