Изменения в версии 3.10.3

From EjudgeWiki

Навигация: Главная страница/Система ejudge/Разработка/История версий/Изменения в версии 3.10.3

Время выхода: 21 мая 2023 г.

Предыдущая версия Следующая версия

Небольшие улучшения, исправление ошибок и повышение производительности.

Выложена документация на API.

ejudge-control

Добавлена опция -rc, позволяющая задать скрипт, который будет выполняться при запросе на перезагрузку инстанса.

Поддерживается покомпонентная остановка и запуск компонентов ejudge. Например, ejudge-control stop contest остановит только компонент ej-contests, а команда ejudge-control start contest запустит только компонент ej-contests. Pull Request #173

Добавлена опция -nst, которая отключает вывод трассы стека в логи у всех запускаемых компонентов. Каждый компонент так же поддерживает эту опцию. Опция может быть полезна при отладке.

ej-agent

Протокол взаимодействия улучшен: пакет запроса на компиляцию и тестирование передается сразу же с нотификацией о наличии запроса на компиляцию или тестирование, таким образом выполняется на один обмен клиент-сервер меньше. Issue #162

Исправлена ошибка, которую долгое время не удавалось найти. Issue #155

ej-compile

Добавлена опция -hi, которая позволяет задать идентификатор инстанса для сохранения в файл статуса компиляции.

Добавлена опция -rc, позволяющая задать скрипт, который будет выполняться при запросе на перезагрузку инстанса.

Добавлена опция -hc, позволяющая задать скрипт, который будет выполняться при запросе на остановку (down) инстанса.

Добавлена опция -nhb, отключающая периодическое сохранения текущего состояния в каталог состояний (heartbeat).

Добавлена опция -hb, включающая периодическое сохранения текущего состояния в каталог состояний (heartbeat). По умолчанию опция включена и так.

Для ожидания изменения состояния каталогов обмена используется механизм inotify вместо периодической проверки состояния.

Поддерживается язык Typescript (транслятор ts-node).

Переработана поддержка языка Java. Для определения имени класса, сданного на проверку, используется небольшая программа на Java JavaClassNameExtractor.java, соответствующий jar-файл называется java-classname.jar.

Для компиляции java поддерживаются две переменных окружения: EJUDGE_MAIN_CLASS позволяет задать имя главного класса для компиляции java вместо автоматически определяемого. Переменная окружения EJUDGE_CLASSPATH позволяет задать CLASSPATH для компиляции и выполнения кода.

ej-contests

Многочисленные оптимизации с целью повышения производительности.

Реализовано кеширование сессий и ключей API. В результате резко сокращается количество обращений к компоненту ej-users для получения информации о сессиях. Время жизни кеша сессии - 20 минут, а ключа API - 2 часа. Сессии, которые не использовались долгое время, периодически удаляются из кеша. Pull Request #183 Pull Request #153

В интерфейсе администратора турнира добавлен пункт меню "View -> Server Info". На это странице выводится различная статистика работы сервера. Кроме того, на это странице расположена кнопка "Clear session cache", которая принудительно очищает кеш сессий и ключей API. Pull Request #182

На странице очереди тестирования (Testing Queue) поддерживается возможность перезагрузки инвокера тестирования или компиляции. Она доступна по ссылке [R] столбца Ops. Инвокеры тестирования или компиляции должны быть соответствующим образом сконфигурированы. Pull Request #177

На странице очереди тестирования отображается информация об инстансах компиляции. Pull Request #176

Для получения результатов компиляции от ej-compile в ej-contests используется единый каталог обмена. До этого у каждого турнира был свой каталог обмена. Аналогично, для получения результатов тестирования от ej-super-run в ej-contests используется единый каталог обмена. При большом количестве турниров, одновременно загруженных в память, это существенно экономит процессорное время. Pull Request #171

Для ожидания изменения состояния каталогов обмена используется механизм inotify вместо периодической проверки состояния.

Добавлен новый конфигурационный параметр задачи checker_extra_files.

Добавлен новый конфигурационный параметр задачи copy_exe_to_tgzdir.

Добавлен новый конфигурационный параметр задачи extra_src_dir.

В таблицу посылок добавлено поле last_change_us, которое хранит время последнего изменения записи о посылки с микросекундной точностью. Это время обновляется, например, при завершении тестирования, или при отправке на перетестирование, то есть при каждом изменении в соответствующую запись в базе данных.

В списке посылок в административном интерфейсе можно выбрать для просмотра столбец "Last Change Time".

В информацию о посылках, возвращаемую по запросу list-runs-json, добавлены поля last_change_id и serial_id.

В фильтре посылок доступно выражение last_change_us, которое возвращает 64-битное целое значение - время последнего изменения записи о посылке в виде количества микросекунд, прошедшего от 1970-01-01.

В фильтре посылок доступно выражение unow, которое возвращает текущее время в виде 64-битного числа: количества микросекунд, прошедшего от 1970-01-01.

В некоторых случаях (но не всегда) при json-запросе на сервер в ответе используются статусы http, например, 503, если подключение к серверу невозможно.

Добавлен новый глобальный конфигурационный параметр compile_server_id.

Файлы external.xml, internal.xml не перегенерируются, если не было обновлений в таблице посылок.

Исправлена ошибка, из-за которой не работал параметр autoupdate_standings = 0 (запрет автоматического обновления таблицы результатов).

Поддерживается атрибут disable_autoupdate_standings глобального конфигурационного файла ejudge.xml. Если он установлен в true, во всех турнирах по умолчанию запрещено автоматическое обновление таблицы результатов.

ej-page-gen

В Си-коде для .csp-страниц используется fwrite_unlocked вместо fwrite. Почему-то это привело к резкому увеличению времени компиляции сгенерированного Си-кода.

ej-polygon

В запросах к серверу Polygon не устанавливается заголовок Accept-Encoding:. Ответ сервера в этом случае, по всей видимости, не поддерживается библиотекой curl.

ej-suid-container

Улучшена поддержка ruby.

ej-super-run

Добавлена опция -rc, позволяющая задать скрипт, который будет выполняться при запросе на перезагрузку инстанса.

Для ожидания изменения состояния каталогов обмена используется механизм inotify вместо периодической проверки состояния.

Атрибут tests_passed добавляется в отчет о тестировании во всех типах турниров.

ej-super-server

На главную страницу со списком всех турниров добавлена кнопка "View Editing Sessions". На странице просмотра сессий редактирования можно посмотреть все сессии, в которых открыты на редактирование турниры или тесты и при необходимости очистить эти сессии. Таким образом решается проблема "залипших" сессий редактирования. Для просмотра и очистки сессий необходимо глобальное полномочие EDIT_CONTEST. Pull Request #184

Если у задачи не установлен параметр enable_testlib_mode, то проверяющие программы на java не требуют библиотеки testlib for java, а предполагаются автономными.

Поддерживаются проверяющие программы на golang.

.inf-файлы

Добавлен параметр check_cmd. Он позволяет задать проверяющую программу для данного теста.

Прочее

В каталог boot/openstack добавлены скрипты, которые можно использовать на виртуальных машинах в openstack. Pull Request #181

В каталог исходных кодов скопирована библиотека run-time поддержки для flatbuf flatcc. В данный момент flatbuf используется для файлов статуса компиляции (compile heartbeat). Преимущество flatbuf над protobuf в том, что flatbuf не требует декодирования данных перед использованием, и можно работать с данными просто отображенными из файла в память. Pull Request #174