From 6d6184f3d855abc18cabd9644203596a31d1d40a Mon Sep 17 00:00:00 2001 From: codl Date: Mon, 11 Mar 2019 02:00:06 +0000 Subject: [PATCH] disable autoflush in refresh_posts, fixing deadlocks. closes GH-19 --- libforget/mastodon.py | 28 +++++++++++++++------------- tasks.py | 2 +- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/libforget/mastodon.py b/libforget/mastodon.py index 6ecfc96..6cdbaad 100644 --- a/libforget/mastodon.py +++ b/libforget/mastodon.py @@ -160,19 +160,21 @@ def refresh_posts(posts): api = get_api_for_acc(acc) new_posts = list() - for post in posts: - try: - status = api.status(post.mastodon_id) - new_post = db.session.merge( - post_from_api_object(status, post.mastodon_instance)) - new_post.touch() - new_posts.append(new_post) - except MastodonNotFoundError: - db.session.delete(post) - except (MastodonAPIError, - MastodonNetworkError, - MastodonRatelimitError) as e: - raise TemporaryError(e) + with db.session.no_autoflush: + for post in posts: + print('Refreshing {}'.format(post)) + try: + status = api.status(post.mastodon_id) + new_post = db.session.merge( + post_from_api_object(status, post.mastodon_instance)) + new_post.touch() + new_posts.append(new_post) + except MastodonNotFoundError: + db.session.delete(post) + except (MastodonAPIError, + MastodonNetworkError, + MastodonRatelimitError) as e: + raise TemporaryError(e) return new_posts diff --git a/tasks.py b/tasks.py index 789dffa..e9794ac 100644 --- a/tasks.py +++ b/tasks.py @@ -234,7 +234,7 @@ def delete_from_account(account_id): Post.query.with_parent(account, 'posts') .filter(Post.created_at + account.policy_keep_younger <= db.func.now()) .filter(~Post.id.in_(db.select((latest_n_posts.c.id, )))).order_by( - db.func.random()).limit(100).with_for_update().all()) + db.func.random()).limit(100).all()) to_delete = None