Skip to content

Commit e57c047

Browse files
committed
Retry transient grading poll failures
Keep polling after failed submission-status requests until the existing bounded poll budget is exhausted. Extend the E2E submission wait to cover that window and add regression coverage for a transient 503 response.
1 parent 9c8752a commit e57c047

3 files changed

Lines changed: 24 additions & 5 deletions

File tree

e2e_tests/helpers.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,7 @@ def upload_submission(page: Page, chapter_name: str, exercise_name: str, files:
3535
for file in files:
3636
page.get_by_label(file.label).set_input_files(os.path.join(assets_path, file.name))
3737
page.locator(exercise_name).get_by_role("button", name="Submit").click()
38-
expect(page.locator("#page-modal")
39-
).to_contain_text("Total points:", timeout=10000)
38+
expect(page.locator("#page-modal")).to_contain_text("Total points:", timeout=65000)
4039
page.get_by_role("button", name="Close", exact=True).click()
4140

4241
def navigate_to_default_course(page: Page):

e2e_tests/test_compare_submissions.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from e2e_tests.helpers import upload_submission, login, logout, navigate_to_default_course, File
33

44

5-
def test_compare_submissions(page: Page) -> None:
5+
def test_compare_submissions(page: Page) -> None: # pylint: disable=too-many-statements
66
ASSISTANT_FEEDBACK_TEXT = "ASSISTANT_FEEDBACK"
77
FEEDBACK_TEXT = "FEEDBACK"
88
POINTS = "5"
@@ -14,12 +14,26 @@ def test_compare_submissions(page: Page) -> None:
1414
red = "rgb(248, 215, 218)"
1515
login(page, "student", "student")
1616
navigate_to_default_course(page)
17+
18+
first_poll_failed = False
19+
20+
def fail_first_poll(route):
21+
nonlocal first_poll_failed
22+
if first_poll_failed:
23+
route.continue_()
24+
else:
25+
first_poll_failed = True
26+
route.fulfill(status=503, body="Temporary polling failure")
27+
28+
page.route("**/poll/**", fail_first_poll)
1729
upload_submission(
1830
page,
1931
chapter_name=chapter_name,
2032
exercise_name=exercise_name,
2133
files=(File("wallet.py"), File("wallet_program.py"))
2234
)
35+
page.unroute("**/poll/**", fail_first_poll)
36+
assert first_poll_failed
2337
upload_submission(
2438
page,
2539
chapter_name=chapter_name,

exercise/static/exercise/poll.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,14 @@
4141
var poller = this;
4242
$.ajax(this.url, {dataType: "html"})
4343
.fail(function() {
44-
poller.message("error");
45-
poller.ready(true);
44+
poller.count++;
45+
if (poller.element.is(":visible") &&
46+
poller.count < poller.settings.poll_delays.length) {
47+
poller.schedule();
48+
} else {
49+
poller.message("error");
50+
poller.ready(true);
51+
}
4652
})
4753
.done(function(data) {
4854
poller.count++;

0 commit comments

Comments
 (0)