From 3f9123856492939cb7ca264ed753105bc069042c Mon Sep 17 00:00:00 2001
From: Sanford Student <sstudent@edx.org>
Date: Thu, 26 Apr 2018 11:05:40 -0400
Subject: [PATCH] rate limit

---
 cms/envs/aws.py                | 3 +++
 cms/envs/common.py             | 3 +++
 lms/djangoapps/grades/tasks.py | 3 ++-
 lms/envs/aws.py                | 3 +++
 lms/envs/common.py             | 4 ++++
 5 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/cms/envs/aws.py b/cms/envs/aws.py
index 16d0d262c93..4e4caaad6ee 100644
--- a/cms/envs/aws.py
+++ b/cms/envs/aws.py
@@ -437,6 +437,9 @@ CELERY_QUEUES.update(
 # Queue to use for updating grades due to grading policy change
 POLICY_CHANGE_GRADES_ROUTING_KEY = ENV_TOKENS.get('POLICY_CHANGE_GRADES_ROUTING_KEY', LOW_PRIORITY_QUEUE)
 
+# Rate limit for regrading tasks that a grading policy change can kick off
+POLICY_CHANGE_TASK_RATE_LIMIT = ENV_TOKENS.get('POLICY_CHANGE_TASK_RATE_LIMIT', POLICY_CHANGE_TASK_RATE_LIMIT)
+
 # Event tracking
 TRACKING_BACKENDS.update(AUTH_TOKENS.get("TRACKING_BACKENDS", {}))
 EVENT_TRACKING_BACKENDS['tracking_logs']['OPTIONS']['backends'].update(AUTH_TOKENS.get("EVENT_TRACKING_BACKENDS", {}))
diff --git a/cms/envs/common.py b/cms/envs/common.py
index cea9c6aad9c..6cecd044111 100644
--- a/cms/envs/common.py
+++ b/cms/envs/common.py
@@ -1469,6 +1469,9 @@ RECALCULATE_GRADES_ROUTING_KEY = LOW_PRIORITY_QUEUE
 # Queue to use for updating grades due to grading policy change
 POLICY_CHANGE_GRADES_ROUTING_KEY = LOW_PRIORITY_QUEUE
 
+# Rate limit for regrading tasks that a grading policy change can kick off
+POLICY_CHANGE_TASK_RATE_LIMIT = '300/h'
+
 ############## Settings for CourseGraph ############################
 COURSEGRAPH_JOB_QUEUE = LOW_PRIORITY_QUEUE
 
diff --git a/lms/djangoapps/grades/tasks.py b/lms/djangoapps/grades/tasks.py
index 2839834bbac..80ca5586c33 100644
--- a/lms/djangoapps/grades/tasks.py
+++ b/lms/djangoapps/grades/tasks.py
@@ -72,7 +72,8 @@ def compute_all_grades_for_course(**kwargs):
     base=LoggedPersistOnFailureTask,
     default_retry_delay=RETRY_DELAY_SECONDS,
     max_retries=1,
-    time_limit=COURSE_GRADE_TIMEOUT_SECONDS
+    time_limit=COURSE_GRADE_TIMEOUT_SECONDS,
+    rate_limit=settings.POLICY_CHANGE_TASK_RATE_LIMIT,
 )
 def compute_grades_for_course_v2(self, **kwargs):
     """
diff --git a/lms/envs/aws.py b/lms/envs/aws.py
index 2d15044e070..f3f8a688aa7 100644
--- a/lms/envs/aws.py
+++ b/lms/envs/aws.py
@@ -634,6 +634,9 @@ GRADES_DOWNLOAD_ROUTING_KEY = ENV_TOKENS.get('GRADES_DOWNLOAD_ROUTING_KEY', HIGH
 
 GRADES_DOWNLOAD = ENV_TOKENS.get("GRADES_DOWNLOAD", GRADES_DOWNLOAD)
 
+# Rate limit for regrading tasks that a grading policy change can kick off
+POLICY_CHANGE_TASK_RATE_LIMIT = ENV_TOKENS.get('POLICY_CHANGE_TASK_RATE_LIMIT', POLICY_CHANGE_TASK_RATE_LIMIT)
+
 # financial reports
 FINANCIAL_REPORTS = ENV_TOKENS.get("FINANCIAL_REPORTS", FINANCIAL_REPORTS)
 
diff --git a/lms/envs/common.py b/lms/envs/common.py
index c241714b1a8..84da8d61664 100644
--- a/lms/envs/common.py
+++ b/lms/envs/common.py
@@ -2620,6 +2620,10 @@ FINANCIAL_REPORTS = {
     'ROOT_PATH': '/tmp/edx-s3/financial_reports',
 }
 
+#### Grading policy change-related settings #####
+# Rate limit for regrading tasks that a grading policy change can kick off
+POLICY_CHANGE_TASK_RATE_LIMIT = '300/h'
+
 #### PASSWORD POLICY SETTINGS #####
 PASSWORD_MIN_LENGTH = 8
 PASSWORD_MAX_LENGTH = None
-- 
GitLab