Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
varqox committed May 8, 2024
2 parents 40cad6a + 6cff6ec commit 3d91892
Show file tree
Hide file tree
Showing 53 changed files with 1,274 additions and 872 deletions.
25 changes: 25 additions & 0 deletions subprojects/sim/include/sim/add_problem_jobs/add_problem_job.hh
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#pragma once

#include <cstdint>
#include <optional>
#include <sim/jobs/job.hh>
#include <sim/problems/problem.hh>

namespace sim::add_problem_jobs {

struct AddProblemJob {
decltype(jobs::Job::id) id;
uint64_t file_id;
decltype(problems::Problem::type) visibility;
bool force_time_limits_reset;
bool ignore_simfile;
decltype(problems::Problem::name) name;
decltype(problems::Problem::label) label;
std::optional<uint64_t> memory_limit_in_mib;
std::optional<uint64_t> fixed_time_limit_in_ns;
bool reset_scoring;
bool look_for_new_tests;
std::optional<decltype(problems::Problem::id)> added_problem_id;
};

} // namespace sim::add_problem_jobs
6 changes: 6 additions & 0 deletions subprojects/sim/include/sim/internal_files/internal_file.hh
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

#include <cstdint>
#include <sim/sql/fields/datetime.hh>
#include <simlib/concat_tostr.hh>
#include <string>

namespace sim::internal_files {

Expand All @@ -10,4 +12,8 @@ struct InternalFile {
sql::fields::Datetime created_at;
};

inline std::string path_of(decltype(InternalFile::id) id) {
return concat_tostr("internal_files/", id);
}

} // namespace sim::internal_files
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,10 @@ struct OldInternalFile {

constexpr CStringView dir = "internal_files/";

inline auto path_of(decltype(OldInternalFile::id) id) { return concat<64>(dir, id); }
inline auto old_path_of(decltype(OldInternalFile::id) id) { return concat<64>(dir, id); }

inline auto path_of(const OldInternalFile& internal_file) { return path_of(internal_file.id); }
inline auto old_path_of(const OldInternalFile& internal_file) {
return old_path_of(internal_file.id);
}

} // namespace sim::internal_files
11 changes: 3 additions & 8 deletions subprojects/sim/include/sim/jobs/job.hh
Original file line number Diff line number Diff line change
Expand Up @@ -15,19 +15,17 @@ struct Job {
(JUDGE_SUBMISSION, 1, "judge_submission")
(ADD_PROBLEM, 2, "add_problem")
(REUPLOAD_PROBLEM, 3, "reupload_problem")
(ADD_PROBLEM__JUDGE_MODEL_SOLUTION, 4, "add_problem__judge_model_solution")
(REUPLOAD_PROBLEM__JUDGE_MODEL_SOLUTION, 5,
"reupload_problem__judge_model_solution")
(REUPLOAD_PROBLEM__JUDGE_MODEL_SOLUTION, 5, "reupload_problem__judge_model_solution")
(EDIT_PROBLEM, 6, "edit_problem")
(DELETE_PROBLEM, 7, "delete_problem")
(RESELECT_FINAL_SUBMISSIONS_IN_CONTEST_PROBLEM, 8,
"reselect_final_submissions_in_contest_problem")
"reselect_final_submissions_in_contest_problem")
(DELETE_USER, 9, "delete_user")
(DELETE_CONTEST, 10, "delete_contest")
(DELETE_CONTEST_ROUND, 11, "delete_contest_round")
(DELETE_CONTEST_PROBLEM, 12, "delete_contest_problem")
(RESET_PROBLEM_TIME_LIMITS_USING_MODEL_SOLUTION, 13,
"reset_problem_time_limits_using_model_solution")
"reset_problem_time_limits_using_model_solution")
(MERGE_PROBLEMS, 14, "merge_problems")
(REJUDGE_SUBMISSION, 15, "rejudge_submission")
(DELETE_FILE, 16, "delete_file")
Expand Down Expand Up @@ -73,7 +71,6 @@ constexpr decltype(Job::priority) default_priority(Job::Type type) {
case Job::Type::EDIT_PROBLEM:
case Job::Type::CHANGE_PROBLEM_STATEMENT: return 25;
case Job::Type::RESET_PROBLEM_TIME_LIMITS_USING_MODEL_SOLUTION: return 20;
case Job::Type::ADD_PROBLEM__JUDGE_MODEL_SOLUTION:
case Job::Type::REUPLOAD_PROBLEM__JUDGE_MODEL_SOLUTION: return 15;
case Job::Type::ADD_PROBLEM:
case Job::Type::REUPLOAD_PROBLEM: return 10;
Expand All @@ -87,7 +84,6 @@ constexpr bool is_problem_management_job(Job::Type type) {
// NOLINTNEXTLINE(bugprone-switch-missing-default-case)
switch (type) {
case Job::Type::ADD_PROBLEM:
case Job::Type::ADD_PROBLEM__JUDGE_MODEL_SOLUTION:
case Job::Type::REUPLOAD_PROBLEM:
case Job::Type::REUPLOAD_PROBLEM__JUDGE_MODEL_SOLUTION:
case Job::Type::EDIT_PROBLEM:
Expand All @@ -114,7 +110,6 @@ constexpr bool is_submission_job(Job::Type type) {
case Job::Type::JUDGE_SUBMISSION:
case Job::Type::REJUDGE_SUBMISSION: return true;
case Job::Type::ADD_PROBLEM:
case Job::Type::ADD_PROBLEM__JUDGE_MODEL_SOLUTION:
case Job::Type::REUPLOAD_PROBLEM:
case Job::Type::REUPLOAD_PROBLEM__JUDGE_MODEL_SOLUTION:
case Job::Type::EDIT_PROBLEM:
Expand Down
5 changes: 0 additions & 5 deletions subprojects/sim/include/sim/jobs/old_job.hh
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ struct OldJob {
(JUDGE_SUBMISSION, 1, "judge_submission")
(ADD_PROBLEM, 2, "add_problem")
(REUPLOAD_PROBLEM, 3, "reupload_problem")
(ADD_PROBLEM__JUDGE_MODEL_SOLUTION, 4, "add_problem__judge_model_solution")
(REUPLOAD_PROBLEM__JUDGE_MODEL_SOLUTION, 5,
"reupload_problem__judge_model_solution")
(EDIT_PROBLEM, 6, "edit_problem")
Expand Down Expand Up @@ -81,7 +80,6 @@ constexpr decltype(OldJob::priority) default_priority(OldJob::Type type) {
case OldJob::Type::EDIT_PROBLEM:
case OldJob::Type::CHANGE_PROBLEM_STATEMENT: return 25;
case OldJob::Type::RESET_PROBLEM_TIME_LIMITS_USING_MODEL_SOLUTION: return 20;
case OldJob::Type::ADD_PROBLEM__JUDGE_MODEL_SOLUTION:
case OldJob::Type::REUPLOAD_PROBLEM__JUDGE_MODEL_SOLUTION: return 15;
case OldJob::Type::ADD_PROBLEM:
case OldJob::Type::REUPLOAD_PROBLEM: return 10;
Expand All @@ -97,7 +95,6 @@ constexpr const char* to_string(OldJob::Type x) {
case JT::JUDGE_SUBMISSION: return "JUDGE_SUBMISSION";
case JT::ADD_PROBLEM: return "ADD_PROBLEM";
case JT::REUPLOAD_PROBLEM: return "REUPLOAD_PROBLEM";
case JT::ADD_PROBLEM__JUDGE_MODEL_SOLUTION: return "ADD_PROBLEM__JUDGE_MODEL_SOLUTION";
case JT::REUPLOAD_PROBLEM__JUDGE_MODEL_SOLUTION:
return "REUPLOAD_PROBLEM__JUDGE_MODEL_SOLUTION";
case JT::EDIT_PROBLEM: return "EDIT_PROBLEM";
Expand All @@ -123,7 +120,6 @@ constexpr bool is_problem_management_job(OldJob::Type x) {
using JT = OldJob::Type;
switch (x) {
case JT::ADD_PROBLEM:
case JT::ADD_PROBLEM__JUDGE_MODEL_SOLUTION:
case JT::REUPLOAD_PROBLEM:
case JT::REUPLOAD_PROBLEM__JUDGE_MODEL_SOLUTION:
case JT::EDIT_PROBLEM:
Expand All @@ -150,7 +146,6 @@ constexpr bool is_submission_job(OldJob::Type x) {
case JT::JUDGE_SUBMISSION:
case JT::REJUDGE_SUBMISSION: return true;
case JT::ADD_PROBLEM:
case JT::ADD_PROBLEM__JUDGE_MODEL_SOLUTION:
case JT::REUPLOAD_PROBLEM:
case JT::REUPLOAD_PROBLEM__JUDGE_MODEL_SOLUTION:
case JT::EDIT_PROBLEM:
Expand Down
4 changes: 2 additions & 2 deletions subprojects/sim/include/sim/mysql/mysql.hh
Original file line number Diff line number Diff line change
Expand Up @@ -229,8 +229,8 @@ public:
Statement(const Statement&) = delete;
Statement& operator=(const Statement&) = delete;

// Prevents client retrieving the whole result from the server. This disallows executing other
// queries in parallel. If called, must be called before res_bind(). It may be advantageous for
// If called, must be called before res_bind(). Prevents client retrieving the whole result from
// the server. This disallows executing other queries in parallel. It may be advantageous for
// very big queries or even required if the result does not fit in memory.
void do_not_store_result() noexcept;

Expand Down
68 changes: 0 additions & 68 deletions subprojects/sim/include/sim/sql/sql.hh
Original file line number Diff line number Diff line change
Expand Up @@ -133,32 +133,6 @@ public:
SelectFrom& operator=(const SelectFrom&) = delete;
SelectFrom& operator=(SelectFrom&&) = delete;

SelectJoin<Params...> join(const std::string_view& sql_str) &&;

template <class... SelectParams>
SelectJoin<Params..., SelectParams...>
join(SelectFrom<SelectParams...>&& select_from, std::string_view table_name) &&;

template <class... SelectParams>
SelectJoin<Params..., SelectParams...>
join(SelectJoinOn<SelectParams...>&& select_join_on, std::string_view table_name) &&;

template <class... SelectParams>
SelectJoin<Params..., SelectParams...>
join(SelectWhere<SelectParams...>&& select_where, std::string_view table_name) &&;

template <class... SelectParams>
SelectJoin<Params..., SelectParams...>
join(SelectGroupBy<SelectParams...>&& select_group_by, std::string_view table_name) &&;

template <class... SelectParams>
SelectJoin<Params..., SelectParams...>
join(SelectOrderBy<SelectParams...>&& select_order_by, std::string_view table_name) &&;

template <class... SelectParams>
SelectJoin<Params..., SelectParams...>
join(SelectLimit<SelectParams...>&& select_limit, std::string_view table_name) &&;

SelectJoin<Params...> left_join(const std::string_view& sql_str) &&;

template <class... SelectParams>
Expand Down Expand Up @@ -310,32 +284,6 @@ public:
SelectJoinOn& operator=(const SelectJoinOn&) = delete;
SelectJoinOn& operator=(SelectJoinOn&&) = delete;

SelectJoin<Params...> join(const std::string_view& sql_str) &&;

template <class... SelectParams>
SelectJoin<Params..., SelectParams...>
join(SelectFrom<SelectParams...>&& select_from, std::string_view table_name) &&;

template <class... SelectParams>
SelectJoin<Params..., SelectParams...>
join(SelectJoinOn<SelectParams...>&& select_join_on, std::string_view table_name) &&;

template <class... SelectParams>
SelectJoin<Params..., SelectParams...>
join(SelectWhere<SelectParams...>&& select_where, std::string_view table_name) &&;

template <class... SelectParams>
SelectJoin<Params..., SelectParams...>
join(SelectGroupBy<SelectParams...>&& select_group_by, std::string_view table_name) &&;

template <class... SelectParams>
SelectJoin<Params..., SelectParams...>
join(SelectOrderBy<SelectParams...>&& select_order_by, std::string_view table_name) &&;

template <class... SelectParams>
SelectJoin<Params..., SelectParams...>
join(SelectLimit<SelectParams...>&& select_limit, std::string_view table_name) &&;

SelectJoin<Params...> left_join(const std::string_view& sql_str) &&;

template <class... SelectParams>
Expand Down Expand Up @@ -996,14 +944,6 @@ DEFINE_FROM(SelectFrom, Select)
}; \
}

DEFINE_JOIN(SelectJoin, SelectFrom, join, "JOIN")
DEFINE_JOIN_SELECT(SelectJoin, SelectFrom, join, "JOIN", SelectFrom)
DEFINE_JOIN_SELECT(SelectJoin, SelectFrom, join, "JOIN", SelectJoinOn)
DEFINE_JOIN_SELECT(SelectJoin, SelectFrom, join, "JOIN", SelectWhere)
DEFINE_JOIN_SELECT(SelectJoin, SelectFrom, join, "JOIN", SelectGroupBy)
DEFINE_JOIN_SELECT(SelectJoin, SelectFrom, join, "JOIN", SelectOrderBy)
DEFINE_JOIN_SELECT(SelectJoin, SelectFrom, join, "JOIN", SelectLimit)

DEFINE_JOIN(SelectJoin, SelectFrom, left_join, "LEFT JOIN")
DEFINE_JOIN_SELECT(SelectJoin, SelectFrom, left_join, "LEFT JOIN", SelectFrom)
DEFINE_JOIN_SELECT(SelectJoin, SelectFrom, left_join, "LEFT JOIN", SelectJoinOn)
Expand Down Expand Up @@ -1148,14 +1088,6 @@ SelectJoin<Params...>::on(Condition<CondParams...>&& condition) && {

// SelectJoinOn

DEFINE_JOIN(SelectJoin, SelectJoinOn, join, "JOIN")
DEFINE_JOIN_SELECT(SelectJoin, SelectJoinOn, join, "JOIN", SelectFrom)
DEFINE_JOIN_SELECT(SelectJoin, SelectJoinOn, join, "JOIN", SelectJoinOn)
DEFINE_JOIN_SELECT(SelectJoin, SelectJoinOn, join, "JOIN", SelectWhere)
DEFINE_JOIN_SELECT(SelectJoin, SelectJoinOn, join, "JOIN", SelectGroupBy)
DEFINE_JOIN_SELECT(SelectJoin, SelectJoinOn, join, "JOIN", SelectOrderBy)
DEFINE_JOIN_SELECT(SelectJoin, SelectJoinOn, join, "JOIN", SelectLimit)

DEFINE_JOIN(SelectJoin, SelectJoinOn, left_join, "LEFT JOIN")
DEFINE_JOIN_SELECT(SelectJoin, SelectJoinOn, left_join, "LEFT JOIN", SelectFrom)
DEFINE_JOIN_SELECT(SelectJoin, SelectJoinOn, left_join, "LEFT JOIN", SelectJoinOn)
Expand Down
5 changes: 3 additions & 2 deletions subprojects/sim/src/backup.cc
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include <simlib/concat_tostr.hh>
#include <simlib/file_info.hh>
#include <simlib/file_manip.hh>
#include <simlib/file_remover.hh>
#include <simlib/sim/problem_package.hh>
#include <simlib/spawner.hh>
#include <simlib/time.hh>
Expand Down Expand Up @@ -44,7 +45,7 @@ int main2(int argc, char** argv) {
return 1;
}

mysql_cnf_guard.reset(MYSQL_CNF);
mysql_cnf_guard = FileRemover{MYSQL_CNF};
{
auto old_mysql = old_mysql::ConnectionView{mysql};
write_all_throw(
Expand Down Expand Up @@ -89,7 +90,7 @@ int main2(int argc, char** argv) {
auto deleter = old_mysql.prepare("DELETE FROM internal_files WHERE id=?");
// Remove jobs temporary internal files
while (stmt.next()) {
auto file_path = sim::internal_files::path_of(tmp_file_id);
auto file_path = sim::internal_files::old_path_of(tmp_file_id);
if (access(file_path, F_OK) == 0 and
system_clock::now() - get_modification_time(file_path) > 2h)
{
Expand Down
13 changes: 1 addition & 12 deletions subprojects/sim/src/job_server/dispatcher.cc
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
#include "job_handlers/add_problem.hh"
#include "job_handlers/add_problem__judge_main_solution.hh"
#include "job_handlers/change_problem_statement.hh"
#include "job_handlers/delete_contest.hh"
#include "job_handlers/delete_contest_problem.hh"
Expand Down Expand Up @@ -43,11 +42,7 @@ void job_dispatcher(
using JT = OldJob::Type;

switch (jtype) {
case JT::ADD_PROBLEM:
job_handler = make_unique<AddProblem>(
mysql, job_id, creator.value(), info, file_id.value(), tmp_file_id
);
break;
case JT::ADD_PROBLEM: job_handler = make_unique<AddProblem>(job_id); break;

case JT::REUPLOAD_PROBLEM:
job_handler = make_unique<ReuploadProblem>(
Expand Down Expand Up @@ -113,12 +108,6 @@ void job_dispatcher(
job_handler = make_unique<JudgeOrRejudge>(job_id, aux_id.value(), created_at);
break;

case JT::ADD_PROBLEM__JUDGE_MODEL_SOLUTION:
job_handler = make_unique<AddProblemJudgeModelSolution>(
mysql, job_id, creator.value(), info, file_id.value(), tmp_file_id
);
break;

case JT::REUPLOAD_PROBLEM__JUDGE_MODEL_SOLUTION:
job_handler = make_unique<ReuploadProblemJudgeModelSolution>(
mysql, job_id, creator.value(), info, file_id.value(), tmp_file_id, aux_id.value()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ namespace job_server::job_handlers {
void AddOrReuploadProblemJudgeModelSolutionBase::run(sim::mysql::Connection& mysql) {
STACK_UNWINDING_MARK;

auto package_path = sim::internal_files::path_of(tmp_file_id_.value());
auto package_path = sim::internal_files::old_path_of(tmp_file_id_.value());
reset_package_time_limits(package_path);
if (failed()) {
return;
Expand Down
Loading

0 comments on commit 3d91892

Please sign in to comment.