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

From EjudgeWiki
(Created page with "Навигация: Главная страница/Система ejudge/Разработка/История версий/Изменения в в...")
 
(...)
Line 4: Line 4:
  
 
[[Изменения в версии 3.10.2|Предыдущая версия]]
 
[[Изменения в версии 3.10.2|Предыдущая версия]]
 +
 +
Небольшие улучшения, исправление ошибок и повышение производительности.
 +
 +
=== [[ejudge-control]] ===
 +
 +
Добавлена опция <code>-rc</code>, позволяющая задать скрипт,
 +
который будет выполняться при запросе на перезагрузку инстанса.
 +
 +
Поддерживается покомпонентная остановка и запуск компонентов
 +
ejudge. Например, <code>ejudge-control stop contest</code>
 +
остановит только компонент [[ej-contests]], а команда
 +
<code>ejudge-control start contest</code> запустит
 +
только компонент [[ej-contests]].
 +
[Pull Request #173 https://github.com/blackav/ejudge/pull/173]
 +
 +
Добавлена опция <code>-nst</code>, которая отключает вывод трассы стека
 +
в логи у всех запускаемых компонентов. Каждый компонент так же
 +
поддерживает эту опцию. Опция может быть полезна при отладке.
 +
 +
=== [[ej-agent]] ===
 +
 +
Протокол взаимодействия улучшен: пакет запроса на компиляцию
 +
и тестирование передается сразу же с нотификацией о наличии
 +
запроса на компиляцию или тестирование, таким образом выполняется
 +
на один обмен клиент-сервер меньше.
 +
[Issue #162 https://github.com/blackav/ejudge/issues/162]
 +
 +
Исправлена ошибка, которую долгое время не удавалось найти.
 +
[Issue #155 https://github.com/blackav/ejudge/issues/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 часа. Сессии, которые не использовались долгое время,
 +
периодически удаляются из кеша.
 +
[Pull Request #183 https://github.com/blackav/ejudge/pull/183]
 +
[Pull Request #153 https://github.com/blackav/ejudge/pull/153]
 +
 +
В интерфейсе администратора турнира добавлен пункт меню
 +
"View -> Server Info". На это странице выводится различная
 +
статистика работы сервера. Кроме того, на это странице
 +
расположена кнопка "Clear session cache", которая принудительно
 +
очищает кеш сессий и ключей API.
 +
[Pull Request #182 https://github.com/blackav/ejudge/pull/182]
 +
 +
На странице очереди тестирования (Testing Queue) поддерживается
 +
возможность перезагрузки инвокера тестирования или компиляции.
 +
Она доступна по ссылке <code>[R]</code> столбца Ops. Инвокеры
 +
тестирования или компиляции должны быть соответствующим
 +
образом сконфигурированы.
 +
[Pull Request #177 https://github.com/blackav/ejudge/pull/177]
 +
 +
На странице очереди тестирования отображается информация
 +
об инстансах компиляции.
 +
[Pull Request #176 https://github.com/blackav/ejudge/pull/176]
 +
 +
Для получения результатов компиляции от [[ej-compile]] в [[ej-contests]]
 +
используется единый каталог обмена. До этого у каждого турнира был
 +
свой каталог обмена. Аналогично, для получения результатов тестирования
 +
от [[ej-super-run]] в [[ej-contests]] используется единый каталог обмена.
 +
При большом количестве турниров, одновременно загруженных в память,
 +
это существенно экономит процессорное время.
 +
[Pull Request #171 https://github.com/blackav/ejudge/pull/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:problem:compile_server_id|compile_server_id]]</code>.
 +
 +
Файлы external.xml, internal.xml не перегенерируются, если не было обновлений
 +
в таблице посылок.
 +
 +
Исправлена ошибка, из-за которой не работал параметр
 +
<code>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>.
 +
[Pull Request #184 https://github.com/blackav/ejudge/pull/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.
 +
[Pull Request #181 https://github.com/blackav/ejudge/pull/181]
 +
 +
В каталог исходных кодов скопирована библиотека run-time поддержки
 +
для flatbuf [flatcc https://github.com/dvidelabs/flatcc].
 +
В данный момент flatbuf используется для файлов статуса компиляции
 +
(compile heartbeat). Преимущество flatbuf над protobuf в том,
 +
что flatbuf не требует декодирования данных перед использованием,
 +
и можно работать с данными просто отображенными из файла в память.
 +
[Pull Request #174 https://github.com/blackav/ejudge/pull/174]

Revision as of 15:47, 9 May 2023

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

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

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

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

ejudge-control

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

Поддерживается покомпонентная остановка и запуск компонентов ejudge. Например, ejudge-control stop contest остановит только компонент ej-contests, а команда ejudge-control start contest запустит только компонент ej-contests. [Pull Request #173 https://github.com/blackav/ejudge/pull/173]

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

ej-agent

Протокол взаимодействия улучшен: пакет запроса на компиляцию и тестирование передается сразу же с нотификацией о наличии запроса на компиляцию или тестирование, таким образом выполняется на один обмен клиент-сервер меньше. [Issue #162 https://github.com/blackav/ejudge/issues/162]

Исправлена ошибка, которую долгое время не удавалось найти. [Issue #155 https://github.com/blackav/ejudge/issues/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 https://github.com/blackav/ejudge/pull/183] [Pull Request #153 https://github.com/blackav/ejudge/pull/153]

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

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

На странице очереди тестирования отображается информация об инстансах компиляции. [Pull Request #176 https://github.com/blackav/ejudge/pull/176]

Для получения результатов компиляции от ej-compile в ej-contests используется единый каталог обмена. До этого у каждого турнира был свой каталог обмена. Аналогично, для получения результатов тестирования от ej-super-run в ej-contests используется единый каталог обмена. При большом количестве турниров, одновременно загруженных в память, это существенно экономит процессорное время. [Pull Request #171 https://github.com/blackav/ejudge/pull/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 https://github.com/blackav/ejudge/pull/184]

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

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

.inf-файлы

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

Прочее

В каталог boot/openstack добавлены скрипты, которые можно использовать на виртуальных машинах в openstack. [Pull Request #181 https://github.com/blackav/ejudge/pull/181]

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