Difference between revisions of "Изменения в версии 3.10.3"

From EjudgeWiki
(Created page with "Навигация: Главная страница/Система ejudge/Разработка/История версий/Изменения в в...")
 
(3.10.3)
(4 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
Навигация: [[Main Page|Главная страница]]/[[Система ejudge]]/[[Разработка]]/[[История версий]]/[[Изменения в версии 3.10.3]]
 
Навигация: [[Main Page|Главная страница]]/[[Система ejudge]]/[[Разработка]]/[[История версий]]/[[Изменения в версии 3.10.3]]
  
Время выхода: ?? ?? 2023 г.
+
Время выхода: 21 мая 2023 г.
  
 
[[Изменения в версии 3.10.2|Предыдущая версия]]
 
[[Изменения в версии 3.10.2|Предыдущая версия]]
 +
 +
Небольшие улучшения, исправление ошибок и повышение производительности.
 +
 +
Выложена [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]

Revision as of 08:51, 21 May 2023

Навигация: Главная страница/Система 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