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

From EjudgeWiki
(...)
(3.10.3)
(3 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]] ===
 
=== [[ejudge-control]] ===
Line 17: Line 19:
 
<code>ejudge-control start contest</code> запустит
 
<code>ejudge-control start contest</code> запустит
 
только компонент [[ej-contests]].
 
только компонент [[ej-contests]].
[Pull Request #173 https://github.com/blackav/ejudge/pull/173]
+
[https://github.com/blackav/ejudge/pull/173 Pull Request #173]
  
 
Добавлена опция <code>-nst</code>, которая отключает вывод трассы стека
 
Добавлена опция <code>-nst</code>, которая отключает вывод трассы стека
Line 29: Line 31:
 
запроса на компиляцию или тестирование, таким образом выполняется
 
запроса на компиляцию или тестирование, таким образом выполняется
 
на один обмен клиент-сервер меньше.
 
на один обмен клиент-сервер меньше.
[Issue #162 https://github.com/blackav/ejudge/issues/162]
+
[https://github.com/blackav/ejudge/issues/162 Issue #162]
  
 
Исправлена ошибка, которую долгое время не удавалось найти.
 
Исправлена ошибка, которую долгое время не удавалось найти.
[Issue #155 https://github.com/blackav/ejudge/issues/155]
+
[https://github.com/blackav/ejudge/issues/155 Issue #155]
  
 
=== [[ej-compile]] ===
 
=== [[ej-compile]] ===
Line 77: Line 79:
 
а ключа API - 2 часа. Сессии, которые не использовались долгое время,
 
а ключа API - 2 часа. Сессии, которые не использовались долгое время,
 
периодически удаляются из кеша.
 
периодически удаляются из кеша.
[Pull Request #183 https://github.com/blackav/ejudge/pull/183]
+
[https://github.com/blackav/ejudge/pull/183 Pull Request #183]
[Pull Request #153 https://github.com/blackav/ejudge/pull/153]
+
[https://github.com/blackav/ejudge/pull/153 Pull Request #153]
  
 
В интерфейсе администратора турнира добавлен пункт меню
 
В интерфейсе администратора турнира добавлен пункт меню
Line 85: Line 87:
 
расположена кнопка "Clear session cache", которая принудительно
 
расположена кнопка "Clear session cache", которая принудительно
 
очищает кеш сессий и ключей API.
 
очищает кеш сессий и ключей API.
[Pull Request #182 https://github.com/blackav/ejudge/pull/182]
+
[https://github.com/blackav/ejudge/pull/182 Pull Request #182]
  
 
На странице очереди тестирования (Testing Queue) поддерживается
 
На странице очереди тестирования (Testing Queue) поддерживается
Line 92: Line 94:
 
тестирования или компиляции должны быть соответствующим
 
тестирования или компиляции должны быть соответствующим
 
образом сконфигурированы.
 
образом сконфигурированы.
[Pull Request #177 https://github.com/blackav/ejudge/pull/177]
+
[https://github.com/blackav/ejudge/pull/177 Pull Request #177]
  
 
На странице очереди тестирования отображается информация
 
На странице очереди тестирования отображается информация
 
об инстансах компиляции.
 
об инстансах компиляции.
[Pull Request #176 https://github.com/blackav/ejudge/pull/176]
+
[https://github.com/blackav/ejudge/pull/176 Pull Request #176]
  
 
Для получения результатов компиляции от [[ej-compile]] в [[ej-contests]]
 
Для получения результатов компиляции от [[ej-compile]] в [[ej-contests]]
Line 104: Line 106:
 
При большом количестве турниров, одновременно загруженных в память,
 
При большом количестве турниров, одновременно загруженных в память,
 
это существенно экономит процессорное время.
 
это существенно экономит процессорное время.
[Pull Request #171 https://github.com/blackav/ejudge/pull/171]
+
[https://github.com/blackav/ejudge/pull/171 Pull Request #171]
  
 
Для ожидания изменения состояния каталогов обмена используется
 
Для ожидания изменения состояния каталогов обмена используется
Line 145: Line 147:
  
 
Добавлен новый глобальный конфигурационный параметр
 
Добавлен новый глобальный конфигурационный параметр
<code>[[serve.cfg:problem:compile_server_id|compile_server_id]]</code>.
+
<code>[[serve.cfg:global:compile_server_id|compile_server_id]]</code>.
  
 
Файлы external.xml, internal.xml не перегенерируются, если не было обновлений
 
Файлы external.xml, internal.xml не перегенерируются, если не было обновлений
Line 151: Line 153:
  
 
Исправлена ошибка, из-за которой не работал параметр
 
Исправлена ошибка, из-за которой не работал параметр
<code>autoupdate_standings = 0</code> (запрет автоматического
+
<code>[[serve.cfg:global:autoupdate_standings|autoupdate_standings]] = 0</code> (запрет автоматического
 
обновления таблицы результатов).
 
обновления таблицы результатов).
  
Line 195: Line 197:
 
Для просмотра и очистки сессий необходимо глобальное полномочие
 
Для просмотра и очистки сессий необходимо глобальное полномочие
 
<code>EDIT_CONTEST</code>.
 
<code>EDIT_CONTEST</code>.
[Pull Request #184 https://github.com/blackav/ejudge/pull/184]
+
[https://github.com/blackav/ejudge/pull/184 Pull Request #184]
  
 
Если у задачи не установлен параметр
 
Если у задачи не установлен параметр
Line 213: Line 215:
 
В каталог <code>boot/openstack</code> добавлены скрипты,
 
В каталог <code>boot/openstack</code> добавлены скрипты,
 
которые можно использовать на виртуальных машинах в openstack.
 
которые можно использовать на виртуальных машинах в openstack.
[Pull Request #181 https://github.com/blackav/ejudge/pull/181]
+
[https://github.com/blackav/ejudge/pull/181 Pull Request #181]
  
 
В каталог исходных кодов скопирована библиотека run-time поддержки
 
В каталог исходных кодов скопирована библиотека run-time поддержки
для flatbuf [flatcc https://github.com/dvidelabs/flatcc].
+
для flatbuf [https://github.com/dvidelabs/flatcc flatcc].
 
В данный момент flatbuf используется для файлов статуса компиляции
 
В данный момент flatbuf используется для файлов статуса компиляции
 
(compile heartbeat). Преимущество flatbuf над protobuf в том,
 
(compile heartbeat). Преимущество flatbuf над protobuf в том,
 
что flatbuf не требует декодирования данных перед использованием,
 
что flatbuf не требует декодирования данных перед использованием,
 
и можно работать с данными просто отображенными из файла в память.
 
и можно работать с данными просто отображенными из файла в память.
[Pull Request #174 https://github.com/blackav/ejudge/pull/174]
+
[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