Difference between revisions of "Изменения в версии 3.10.3"
(Created page with "Навигация: Главная страница/Система ejudge/Разработка/История версий/Изменения в в...") |
(...) |
||
(6 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
Навигация: [[Main Page|Главная страница]]/[[Система ejudge]]/[[Разработка]]/[[История версий]]/[[Изменения в версии 3.10.3]] | Навигация: [[Main Page|Главная страница]]/[[Система ejudge]]/[[Разработка]]/[[История версий]]/[[Изменения в версии 3.10.3]] | ||
− | Время выхода: | + | Время выхода: 21 мая 2023 г. |
− | [[Изменения в версии 3.10.2|Предыдущая версия]] | + | [[Изменения в версии 3.10.2|Предыдущая версия]] [[Изменения в версии 3.11.0|Следующая версия]] |
+ | |||
+ | Небольшие улучшения, исправление ошибок и повышение производительности. | ||
+ | |||
+ | Выложена [https://ejudge.ru/swagger/index.html документация на API]. | ||
+ | |||
+ | === [[ejudge-control]] === | ||
+ | |||
+ | Добавлена опция <code>-rc</code>, позволяющая задать скрипт, | ||
+ | который будет выполняться при запросе на перезагрузку инстанса. | ||
+ | |||
+ | Поддерживается покомпонентная остановка и запуск компонентов | ||
+ | ejudge. Например, <code>ejudge-control stop contest</code> | ||
+ | остановит только компонент [[ej-contests]], а команда | ||
+ | <code>ejudge-control start contest</code> запустит | ||
+ | только компонент [[ej-contests]]. | ||
+ | [https://github.com/blackav/ejudge/pull/173 Pull Request #173] | ||
+ | |||
+ | Добавлена опция <code>-nst</code>, которая отключает вывод трассы стека | ||
+ | в логи у всех запускаемых компонентов. Каждый компонент так же | ||
+ | поддерживает эту опцию. Опция может быть полезна при отладке. | ||
+ | |||
+ | === [[ej-agent]] === | ||
+ | |||
+ | Протокол взаимодействия улучшен: пакет запроса на компиляцию | ||
+ | и тестирование передается сразу же с нотификацией о наличии | ||
+ | запроса на компиляцию или тестирование, таким образом выполняется | ||
+ | на один обмен клиент-сервер меньше. | ||
+ | [https://github.com/blackav/ejudge/issues/162 Issue #162] | ||
+ | |||
+ | Исправлена ошибка, которую долгое время не удавалось найти. | ||
+ | [https://github.com/blackav/ejudge/issues/155 Issue #155] | ||
+ | |||
+ | === [[ej-compile]] === | ||
+ | |||
+ | Добавлена опция <code>-hi</code>, которая позволяет задать | ||
+ | идентификатор инстанса для сохранения в файл статуса компиляции. | ||
+ | |||
+ | Добавлена опция <code>-rc</code>, позволяющая задать скрипт, | ||
+ | который будет выполняться при запросе на перезагрузку инстанса. | ||
+ | |||
+ | Добавлена опция <code>-hc</code>, позволяющая задать скрипт, | ||
+ | который будет выполняться при запросе на остановку (down) инстанса. | ||
+ | |||
+ | Добавлена опция <code>-nhb</code>, отключающая периодическое | ||
+ | сохранения текущего состояния в каталог состояний (heartbeat). | ||
+ | |||
+ | Добавлена опция <code>-hb</code>, включающая периодическое | ||
+ | сохранения текущего состояния в каталог состояний (heartbeat). | ||
+ | По умолчанию опция включена и так. | ||
+ | |||
+ | Для ожидания изменения состояния каталогов обмена используется | ||
+ | механизм <code>inotify</code> вместо периодической проверки состояния. | ||
+ | |||
+ | Поддерживается язык Typescript (транслятор ts-node). | ||
+ | |||
+ | Переработана поддержка языка Java. Для определения имени класса, | ||
+ | сданного на проверку, используется небольшая программа на Java | ||
+ | JavaClassNameExtractor.java, соответствующий jar-файл | ||
+ | называется java-classname.jar. | ||
+ | |||
+ | Для компиляции java поддерживаются две переменных окружения: | ||
+ | <code>EJUDGE_MAIN_CLASS</code> позволяет задать имя главного | ||
+ | класса для компиляции java вместо автоматически определяемого. | ||
+ | Переменная окружения <code>EJUDGE_CLASSPATH</code> позволяет | ||
+ | задать CLASSPATH для компиляции и выполнения кода. | ||
+ | |||
+ | === [[ej-contests]] === | ||
+ | |||
+ | Многочисленные оптимизации с целью повышения производительности. | ||
+ | |||
+ | Реализовано кеширование сессий и ключей API. В результате резко | ||
+ | сокращается количество обращений к компоненту [[ej-users]] для | ||
+ | получения информации о сессиях. Время жизни кеша сессии - 20 минут, | ||
+ | а ключа API - 2 часа. Сессии, которые не использовались долгое время, | ||
+ | периодически удаляются из кеша. | ||
+ | [https://github.com/blackav/ejudge/pull/183 Pull Request #183] | ||
+ | [https://github.com/blackav/ejudge/pull/153 Pull Request #153] | ||
+ | |||
+ | В интерфейсе администратора турнира добавлен пункт меню | ||
+ | "View -> Server Info". На это странице выводится различная | ||
+ | статистика работы сервера. Кроме того, на это странице | ||
+ | расположена кнопка "Clear session cache", которая принудительно | ||
+ | очищает кеш сессий и ключей API. | ||
+ | [https://github.com/blackav/ejudge/pull/182 Pull Request #182] | ||
+ | |||
+ | На странице очереди тестирования (Testing Queue) поддерживается | ||
+ | возможность перезагрузки инвокера тестирования или компиляции. | ||
+ | Она доступна по ссылке <code>[R]</code> столбца Ops. Инвокеры | ||
+ | тестирования или компиляции должны быть соответствующим | ||
+ | образом сконфигурированы. | ||
+ | [https://github.com/blackav/ejudge/pull/177 Pull Request #177] | ||
+ | |||
+ | На странице очереди тестирования отображается информация | ||
+ | об инстансах компиляции. | ||
+ | [https://github.com/blackav/ejudge/pull/176 Pull Request #176] | ||
+ | |||
+ | Для получения результатов компиляции от [[ej-compile]] в [[ej-contests]] | ||
+ | используется единый каталог обмена. До этого у каждого турнира был | ||
+ | свой каталог обмена. Аналогично, для получения результатов тестирования | ||
+ | от [[ej-super-run]] в [[ej-contests]] используется единый каталог обмена. | ||
+ | При большом количестве турниров, одновременно загруженных в память, | ||
+ | это существенно экономит процессорное время. | ||
+ | [https://github.com/blackav/ejudge/pull/171 Pull Request #171] | ||
+ | |||
+ | Для ожидания изменения состояния каталогов обмена используется | ||
+ | механизм <code>inotify</code> вместо периодической проверки состояния. | ||
+ | |||
+ | Добавлен новый конфигурационный параметр задачи | ||
+ | <code>[[serve.cfg:problem:checker_extra_files|checker_extra_files]]</code>. | ||
+ | |||
+ | Добавлен новый конфигурационный параметр задачи | ||
+ | <code>[[serve.cfg:problem:copy_exe_to_tgzdir|copy_exe_to_tgzdir]]</code>. | ||
+ | |||
+ | Добавлен новый конфигурационный параметр задачи | ||
+ | <code>[[serve.cfg:problem:extra_src_dir|extra_src_dir]]</code>. | ||
+ | |||
+ | В таблицу посылок добавлено поле <code>last_change_us</code>, | ||
+ | которое хранит время последнего изменения записи о посылки | ||
+ | с микросекундной точностью. Это время обновляется, например, | ||
+ | при завершении тестирования, или при отправке на перетестирование, | ||
+ | то есть при каждом изменении в соответствующую запись в базе данных. | ||
+ | |||
+ | В списке посылок в административном интерфейсе можно выбрать | ||
+ | для просмотра столбец "Last Change Time". | ||
+ | |||
+ | В информацию о посылках, возвращаемую по запросу | ||
+ | <code>list-runs-json</code>, добавлены поля | ||
+ | <code>last_change_id</code> и <code>serial_id</code>. | ||
+ | |||
+ | В фильтре посылок доступно выражение <code>last_change_us</code>, | ||
+ | которое возвращает 64-битное целое значение - время | ||
+ | последнего изменения записи о посылке в виде количества микросекунд, | ||
+ | прошедшего от 1970-01-01. | ||
+ | |||
+ | В фильтре посылок доступно выражение <code>unow</code>, | ||
+ | которое возвращает текущее время в виде 64-битного числа: | ||
+ | количества микросекунд, прошедшего от 1970-01-01. | ||
+ | |||
+ | В некоторых случаях (но не всегда) при json-запросе на сервер | ||
+ | в ответе используются статусы http, например, 503, если | ||
+ | подключение к серверу невозможно. | ||
+ | |||
+ | Добавлен новый глобальный конфигурационный параметр | ||
+ | <code>[[serve.cfg:global:compile_server_id|compile_server_id]]</code>. | ||
+ | |||
+ | Файлы external.xml, internal.xml не перегенерируются, если не было обновлений | ||
+ | в таблице посылок. | ||
+ | |||
+ | Исправлена ошибка, из-за которой не работал параметр | ||
+ | <code>[[serve.cfg:global:autoupdate_standings|autoupdate_standings]] = 0</code> (запрет автоматического | ||
+ | обновления таблицы результатов). | ||
+ | |||
+ | Поддерживается атрибут <code>disable_autoupdate_standings</code> глобального | ||
+ | конфигурационного файла [[ejudge.xml]]. Если он установлен в <code>true</code>, | ||
+ | во всех турнирах по умолчанию запрещено автоматическое обновление таблицы | ||
+ | результатов. | ||
+ | |||
+ | === [[ej-page-gen]] === | ||
+ | |||
+ | В Си-коде для .csp-страниц используется <code>fwrite_unlocked</code> | ||
+ | вместо <code>fwrite</code>. Почему-то это привело к резкому увеличению | ||
+ | времени компиляции сгенерированного Си-кода. | ||
+ | |||
+ | === [[ej-polygon]] === | ||
+ | |||
+ | В запросах к серверу Polygon не устанавливается заголовок | ||
+ | <code>Accept-Encoding:</code>. Ответ сервера в этом случае, | ||
+ | по всей видимости, не поддерживается библиотекой curl. | ||
+ | |||
+ | === [[ej-suid-container]] === | ||
+ | |||
+ | Улучшена поддержка ruby. | ||
+ | |||
+ | === [[ej-super-run]] === | ||
+ | |||
+ | Добавлена опция <code>-rc</code>, позволяющая задать скрипт, | ||
+ | который будет выполняться при запросе на перезагрузку инстанса. | ||
+ | |||
+ | Для ожидания изменения состояния каталогов обмена используется | ||
+ | механизм <code>inotify</code> вместо периодической проверки состояния. | ||
+ | |||
+ | Атрибут <code>tests_passed</code> добавляется в отчет о | ||
+ | тестировании во всех типах турниров. | ||
+ | |||
+ | === [[ej-super-server]] === | ||
+ | |||
+ | На главную страницу со списком всех турниров добавлена кнопка | ||
+ | "View Editing Sessions". На странице просмотра сессий редактирования | ||
+ | можно посмотреть все сессии, в которых открыты на редактирование | ||
+ | турниры или тесты и при необходимости очистить эти сессии. | ||
+ | Таким образом решается проблема "залипших" сессий редактирования. | ||
+ | Для просмотра и очистки сессий необходимо глобальное полномочие | ||
+ | <code>EDIT_CONTEST</code>. | ||
+ | [https://github.com/blackav/ejudge/pull/184 Pull Request #184] | ||
+ | |||
+ | Если у задачи не установлен параметр | ||
+ | <code>[[serve.cfg:problem:enable_testlib_mode|enable_testlib_mode]]</code>, | ||
+ | то проверяющие программы на java не требуют библиотеки testlib for java, | ||
+ | а предполагаются автономными. | ||
+ | |||
+ | Поддерживаются проверяющие программы на golang. | ||
+ | |||
+ | === [[.inf-файлы]] === | ||
+ | |||
+ | Добавлен параметр <code>check_cmd</code>. Он позволяет задать | ||
+ | проверяющую программу для данного теста. | ||
+ | |||
+ | === Прочее === | ||
+ | |||
+ | В каталог <code>boot/openstack</code> добавлены скрипты, | ||
+ | которые можно использовать на виртуальных машинах в openstack. | ||
+ | [https://github.com/blackav/ejudge/pull/181 Pull Request #181] | ||
+ | |||
+ | В каталог исходных кодов скопирована библиотека run-time поддержки | ||
+ | для flatbuf [https://github.com/dvidelabs/flatcc flatcc]. | ||
+ | В данный момент flatbuf используется для файлов статуса компиляции | ||
+ | (compile heartbeat). Преимущество flatbuf над protobuf в том, | ||
+ | что flatbuf не требует декодирования данных перед использованием, | ||
+ | и можно работать с данными просто отображенными из файла в память. | ||
+ | [https://github.com/blackav/ejudge/pull/174 Pull Request #174] |
Latest revision as of 05:33, 1 August 2023
Навигация: Главная страница/Система ejudge/Разработка/История версий/Изменения в версии 3.10.3
Время выхода: 21 мая 2023 г.
Предыдущая версия Следующая версия
Небольшие улучшения, исправление ошибок и повышение производительности.
Выложена документация на API.
Contents
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