diff --git a/judgels-backends/judgels-server-app/src/main/java/judgels/jerahmeel/submission/programming/SubmissionResource.java b/judgels-backends/judgels-server-app/src/main/java/judgels/jerahmeel/submission/programming/SubmissionResource.java index c41e317b7..3cd4ee801 100644 --- a/judgels-backends/judgels-server-app/src/main/java/judgels/jerahmeel/submission/programming/SubmissionResource.java +++ b/judgels-backends/judgels-server-app/src/main/java/judgels/jerahmeel/submission/programming/SubmissionResource.java @@ -11,6 +11,7 @@ import com.google.common.collect.Lists; import io.dropwizard.hibernate.UnitOfWork; +import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -287,7 +288,7 @@ public void regradeSubmission( @POST @Path("/regrade") - @UnitOfWork + @UnitOfWork(transactional = false) public void regradeSubmissions( @HeaderParam(AUTHORIZATION) AuthHeader authHeader, @QueryParam("containerJid") Optional containerJid, @@ -298,22 +299,27 @@ public void regradeSubmissions( String actorJid = actorChecker.check(authHeader); checkAllowed(submissionRoleChecker.canManage(actorJid)); + List submissions = new ArrayList<>(); + Map configsMap = new HashMap<>(); + for (int pageNumber = 1;; pageNumber++) { - List submissions = submissionStore.getSubmissions( + List curSubmissions = submissionStore.getSubmissions( containerJid, byUserJid(username), byProblemJid(containerJid, problemJid, problemAlias), pageNumber, - PAGE_SIZE).getPage(); + 1000).getPage(); - if (submissions.isEmpty()) { + if (curSubmissions.isEmpty()) { break; } + submissions.addAll(curSubmissions); - var problemJids = Lists.transform(submissions, Submission::getProblemJid); - Map configsMap = sandalphonClient.getProgrammingProblemSubmissionConfigs(problemJids); - submissionRegrader.regradeSubmissions(submissions, configsMap); + var problemJids = Lists.transform(curSubmissions, Submission::getProblemJid); + configsMap.putAll(sandalphonClient.getProgrammingProblemSubmissionConfigs(problemJids)); } + + submissionRegrader.regradeSubmissions(submissions, configsMap); } private Optional byUserJid(Optional username) { diff --git a/judgels-backends/judgels-server-app/src/main/java/judgels/uriel/contest/submission/programming/ContestSubmissionResource.java b/judgels-backends/judgels-server-app/src/main/java/judgels/uriel/contest/submission/programming/ContestSubmissionResource.java index 5a82fe2b0..e3b140fb6 100644 --- a/judgels-backends/judgels-server-app/src/main/java/judgels/uriel/contest/submission/programming/ContestSubmissionResource.java +++ b/judgels-backends/judgels-server-app/src/main/java/judgels/uriel/contest/submission/programming/ContestSubmissionResource.java @@ -15,8 +15,10 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; import io.dropwizard.hibernate.UnitOfWork; +import java.util.ArrayList; import java.util.Collections; import java.util.Date; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; @@ -318,7 +320,7 @@ public void regradeSubmission( @POST @Path("/regrade") - @UnitOfWork + @UnitOfWork(transactional = false) public void regradeSubmissions( @HeaderParam(AUTHORIZATION) AuthHeader authHeader, @QueryParam("contestJid") String contestJid, @@ -331,22 +333,27 @@ public void regradeSubmissions( Optional problemJid = byProblemJid(contestJid, problemAlias); + List submissions = new ArrayList<>(); + Map configsMap = new HashMap<>(); + for (int pageNumber = 1;; pageNumber++) { - List submissions = submissionStore.getSubmissions( + List curSubmissions = submissionStore.getSubmissions( Optional.of(contestJid), byUserJid(username), problemJid, pageNumber, - PAGE_SIZE).getPage(); + 1000).getPage(); - if (submissions.isEmpty()) { + if (curSubmissions.isEmpty()) { break; } + submissions.addAll(curSubmissions); - var problemJids = Lists.transform(submissions, Submission::getProblemJid); - Map configsMap = sandalphonClient.getProgrammingProblemSubmissionConfigs(problemJids); - submissionRegrader.regradeSubmissions(submissions, configsMap); + var problemJids = Lists.transform(curSubmissions, Submission::getProblemJid); + configsMap.putAll(sandalphonClient.getProgrammingProblemSubmissionConfigs(problemJids)); } + + submissionRegrader.regradeSubmissions(submissions, configsMap); scoreboardIncrementalMarker.invalidateMark(contest.getJid()); contestLogger.log(contest.getJid(), "REGRADE_SUBMISSIONS", null, problemJid.orElse(null));