Skip to content

Commit cb8200a

Browse files
committed
Remove management command and fix test failures
- Remove refresh_flight_totals management command (won't be used) - Update task documentation to run every 5-10 minutes - Fix all test failures by adding refresh_denormalized_totals() calls after incr() operations that check total_views/total_clicks - Update tests that manually set total_clicks/total_views to use save(update_fields=[...]) to avoid triggering other updates
1 parent 296d9fc commit cb8200a

File tree

4 files changed

+20
-75
lines changed

4 files changed

+20
-75
lines changed

adserver/management/commands/refresh_flight_totals.py

Lines changed: 0 additions & 61 deletions
This file was deleted.

adserver/tasks.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -929,8 +929,8 @@ def refresh_flight_denormalized_totals():
929929
"""
930930
Refresh denormalized total_views and total_clicks fields for all live flights.
931931
932-
This task should be run periodically (e.g., hourly) to update the denormalized
933-
fields without causing lock contention on the Flight table.
932+
This task should be run periodically (e.g., every 5-10 minutes) to update
933+
the denormalized fields without causing lock contention on the Flight table.
934934
"""
935935
log.info("Refreshing denormalized totals for live flights")
936936

adserver/tests/test_decision_engine.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -271,13 +271,13 @@ def test_custom_interval(self):
271271
self.assertTrue(self.backend.filter_flight(self.cpm_flight))
272272

273273
self.cpm_flight.total_views = 10_000 - pace - 1
274-
self.cpm_flight.save()
274+
self.cpm_flight.save(update_fields=['total_views'])
275275
self.assertEqual(self.cpm_flight.views_needed_this_interval(), 1)
276276
self.assertTrue(self.backend.filter_flight(self.cpm_flight))
277277

278278
# Don't show this flight anymore. It is above pace
279279
self.cpm_flight.total_views = 10_000 - pace
280-
self.cpm_flight.save()
280+
self.cpm_flight.save(update_fields=['total_views'])
281281
self.assertEqual(self.cpm_flight.views_needed_this_interval(), 0)
282282
self.assertFalse(self.backend.filter_flight(self.cpm_flight))
283283

@@ -466,8 +466,8 @@ def test_clicks_needed(self):
466466
for _ in range(clicks_to_simulate):
467467
self.advertisement1.incr(CLICKS, self.publisher)
468468

469-
# Refresh the data on the include_flight - gets the denormalized views
470-
self.include_flight.refresh_from_db()
469+
# Refresh the denormalized totals manually since they're no longer updated in real-time
470+
self.include_flight.refresh_denormalized_totals()
471471

472472
self.assertEqual(self.include_flight.clicks_needed_this_interval(), 23)
473473

@@ -491,8 +491,8 @@ def test_views_needed(self):
491491
for _ in range(views_to_simulate):
492492
self.advertisement1.incr(VIEWS, self.publisher)
493493

494-
# Refresh the data on the include_flight - gets the denormalized views
495-
self.cpm_flight.refresh_from_db()
494+
# Refresh the denormalized totals manually since they're no longer updated in real-time
495+
self.cpm_flight.refresh_denormalized_totals()
496496

497497
self.assertEqual(self.cpm_flight.views_needed_this_interval(), 313)
498498

adserver/tests/test_models.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -522,6 +522,8 @@ def test_campaign_totals(self):
522522
self.ad1.incr(CLICKS, self.publisher)
523523
self.ad1.incr(CLICKS, self.publisher)
524524

525+
self.flight.refresh_denormalized_totals()
526+
525527
self.assertAlmostEqual(self.campaign.total_value(), 4.0)
526528

527529
cpm_flight = get(
@@ -551,6 +553,10 @@ def test_campaign_totals(self):
551553
ad2.incr(VIEWS, self.publisher)
552554
ad2.incr(VIEWS, self.publisher)
553555

556+
# Refresh denormalized totals for both flights
557+
self.flight.refresh_denormalized_totals()
558+
cpm_flight.refresh_denormalized_totals()
559+
554560
self.assertAlmostEqual(self.campaign.total_value(), 4.3)
555561

556562
def test_flight_state(self):
@@ -576,12 +582,12 @@ def test_flight_value_remaining(self):
576582
self.flight.save()
577583
self.assertAlmostEqual(self.flight.value_remaining(), 100 * 2)
578584

579-
# Each click is worth $2
585+
# Each click is $2
580586
self.ad1.incr(CLICKS, self.publisher)
581587
self.ad1.incr(CLICKS, self.publisher)
582588
self.ad1.incr(CLICKS, self.publisher)
583589

584-
self.flight.refresh_from_db()
590+
self.flight.refresh_denormalized_totals()
585591
self.assertAlmostEqual(self.flight.value_remaining(), 97 * 2)
586592

587593
self.flight.cpm = 50.0
@@ -596,7 +602,7 @@ def test_flight_value_remaining(self):
596602
for _ in range(25):
597603
self.ad1.incr(VIEWS, self.publisher)
598604

599-
self.flight.refresh_from_db()
605+
self.flight.refresh_denormalized_totals()
600606
self.assertAlmostEqual(self.flight.value_remaining(), 5.0 - (25 * 0.05))
601607

602608
def test_projected_total_value(self):
@@ -607,7 +613,7 @@ def test_projected_total_value(self):
607613
self.ad1.incr(CLICKS, self.publisher)
608614
self.ad1.incr(CLICKS, self.publisher)
609615

610-
self.flight.refresh_from_db()
616+
self.flight.refresh_denormalized_totals()
611617
self.assertAlmostEqual(self.flight.projected_total_value(), 1000 * 2)
612618

613619
self.flight.cpm = 50.0
@@ -727,7 +733,7 @@ def test_refund(self):
727733
for click in (click1, click2, click3):
728734
self.assertIsNotNone(click)
729735

730-
self.flight.refresh_from_db()
736+
self.flight.refresh_denormalized_totals()
731737

732738
self.assertEqual(self.flight.total_clicks, 3)
733739

@@ -760,7 +766,7 @@ def test_refund(self):
760766
self.assertTrue(offer.clicked)
761767

762768
# Reload data from the DB
763-
self.flight.refresh_from_db()
769+
self.flight.refresh_denormalized_totals()
764770
impression.refresh_from_db()
765771

766772
self.assertEqual(self.flight.total_clicks, 1)

0 commit comments

Comments
 (0)