Skip to content

Commit f187c1e

Browse files
committed
Enforce countdown of 5 seconds on buffers for queued tasks
1 parent 4a6cbcd commit f187c1e

File tree

4 files changed

+27
-10
lines changed

4 files changed

+27
-10
lines changed

sentry/buffer/base.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"""
88

99
from django.db.models import F
10-
from sentry.utils.queue import maybe_delay
10+
from sentry.utils.queue import maybe_async
1111
from sentry.tasks.process_buffer import process_incr
1212

1313

@@ -31,7 +31,12 @@ def incr(self, model, columns, filters, extra=None):
3131
"""
3232
>>> incr(Group, columns={'times_seen': 1}, filters={'pk': group.pk})
3333
"""
34-
maybe_delay(process_incr, model=model, columns=columns, filters=filters, extra=extra)
34+
maybe_async(process_incr, kwargs={
35+
'model': model,
36+
'columns': columns,
37+
'filters': filters,
38+
'extra': extra,
39+
}, countdown=5)
3540

3641
def process(self, model, columns, filters, extra=None):
3742
update_kwargs = dict((c, F(c) + v) for c, v in columns.iteritems())

sentry/utils/queue.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,13 @@ def maybe_delay(func, *args, **kwargs):
1313
if settings.USE_QUEUE:
1414
return func.delay(*args, **kwargs)
1515
return func(*args, **kwargs)
16+
17+
18+
def maybe_async(func, args=None, kwargs=None, *fargs, **fkwargs):
19+
if args is None:
20+
args = []
21+
if kwargs is None:
22+
kwargs = {}
23+
if settings.USE_QUEUE:
24+
return func.apply_async(args=args, kwargs=kwargs, *fargs, **fkwargs)
25+
return func(*args, **kwargs)

tests/sentry/buffer/base/tests.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,14 @@ class BufferTest(TestCase):
1515
def setUp(self):
1616
self.buf = Buffer()
1717

18-
@mock.patch('sentry.buffer.base.maybe_delay')
19-
def test_incr_delays_task(self, maybe_delay):
18+
@mock.patch('sentry.buffer.base.maybe_async')
19+
def test_incr_delays_task(self, maybe_async):
2020
model = mock.Mock()
2121
columns = {'times_seen': 1}
2222
filters = {'pk': 1}
2323
self.buf.incr(model, columns, filters)
24-
maybe_delay.assert_called_once_with(process_incr, model=model, columns=columns, filters=filters, extra=None)
24+
kwargs = dict(model=model, columns=columns, filters=filters, extra=None)
25+
maybe_async.assert_called_once_with(process_incr, kwargs=kwargs, countdown=5)
2526

2627
def test_process_saves_data(self):
2728
group = Group.objects.create(project=Project(id=1))

tests/sentry/buffer/redis/tests.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,18 @@ def test_make_extra_key_response(self):
3838

3939
@mock.patch('sentry.buffer.redis.RedisBuffer._make_extra_key', mock.Mock(return_value='extra'))
4040
@mock.patch('sentry.buffer.redis.RedisBuffer._make_key', mock.Mock(return_value='foo'))
41-
@mock.patch('sentry.buffer.base.maybe_delay')
42-
def test_incr_delays_task(self, maybe_delay):
41+
@mock.patch('sentry.buffer.base.maybe_async')
42+
def test_incr_delays_task(self, maybe_async):
4343
model = mock.Mock()
4444
columns = {'times_seen': 1}
4545
filters = {'pk': 1}
4646
self.buf.incr(model, columns, filters)
47-
maybe_delay.assert_called_once_with(process_incr, model=model, columns=columns, filters=filters, extra=None)
47+
kwargs = dict(model=model, columns=columns, filters=filters, extra=None)
48+
maybe_async.assert_called_once_with(process_incr, kwargs=kwargs, countdown=5)
4849

4950
@mock.patch('sentry.buffer.redis.RedisBuffer._make_extra_key', mock.Mock(return_value='extra'))
5051
@mock.patch('sentry.buffer.redis.RedisBuffer._make_key', mock.Mock(return_value='foo'))
51-
@mock.patch('sentry.buffer.base.maybe_delay', mock.Mock())
52+
@mock.patch('sentry.buffer.base.maybe_async', mock.Mock())
5253
def test_incr_does_buffer_to_conn(self):
5354
model = mock.Mock()
5455
columns = {'times_seen': 1}
@@ -90,7 +91,7 @@ def test_process_does_clear_buffer(self, process):
9091

9192
@mock.patch('sentry.buffer.redis.RedisBuffer._make_extra_key', mock.Mock(return_value='extra'))
9293
@mock.patch('sentry.buffer.redis.RedisBuffer._make_key', mock.Mock(return_value='foo'))
93-
@mock.patch('sentry.buffer.base.maybe_delay', mock.Mock())
94+
@mock.patch('sentry.buffer.base.maybe_async', mock.Mock())
9495
def test_incr_does_buffer_extra_to_conn(self):
9596
model = mock.Mock()
9697
columns = {'times_seen': 1}

0 commit comments

Comments
 (0)