From e98326f916e764fde0b16774e88c56dee970a37d Mon Sep 17 00:00:00 2001 From: spez Date: Tue, 3 Mar 2009 11:54:47 -0800 Subject: [PATCH] add locking around reddit creation --- r2/r2/models/subreddit.py | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/r2/r2/models/subreddit.py b/r2/r2/models/subreddit.py index 2792ac578..4dc6f6d9d 100644 --- a/r2/r2/models/subreddit.py +++ b/r2/r2/models/subreddit.py @@ -19,6 +19,8 @@ # All portions of the code written by CondeNet are Copyright (c) 2006-2009 # CondeNet, Inc. All Rights Reserved. ################################################################################ +from __future__ import with_statement + from pylons import c, g from pylons.i18n import _ @@ -58,23 +60,23 @@ class Subreddit(Thing, Printable): @classmethod def _new(self, name, title, author_id, ip, lang = 'en', type = 'public', over_18 = False, **kw): - try: - sr = Subreddit._by_name(name) - raise SubredditExists - except NotFound: - sr = Subreddit(name = name, - title = title, - lang = lang, - type = type, - over_18 = over_18, - author_id = author_id, - ip = ip, - **kw) - sr._commit() - clear_memo('subreddit._by_name', Subreddit, name.lower()) - clear_memo('subreddit.subreddits', Subreddit) - return sr - + with g.make_lock('create_sr_' + name.lower()): + try: + sr = Subreddit._by_name(name) + raise SubredditExists + except NotFound: + sr = Subreddit(name = name, + title = title, + lang = lang, + type = type, + over_18 = over_18, + author_id = author_id, + ip = ip, + **kw) + sr._commit() + clear_memo('subreddit._by_name', Subreddit, name.lower()) + clear_memo('subreddit.subreddits', Subreddit) + return sr @classmethod @memoize('subreddit._by_name')