All user-facing, notable changes will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- This job type uses job-runner-python-lib to reduce duplicated code of wrapper logic.
- Use mounted secrets when building the image. This hides the secret environment variables, so they can't be accessed after the build.
- Job type format updated to new Racetrack interface for defining job types.
- FastAPI dependency has been upgraded to solve memory leaks.
-
Maximum number of concurrent requests can be limited by
max_concurrencyfield in a manifest:jobtype_extra: max_concurrency: 1
By default, concurrent requests are unlimited. Setting
max_concurrencyto1will make the job process requests one by one. Overdue requests will be queued and processed in order.Having such concurrency limits may cause some requests to wait in a queue. If an average throughput is higher than the job can handle, the queue will grow indefinitely. To prevent that, you can set
jobtype_extra.max_concurrency_queueto limit the queue size. When the queue is full, the job will return429 Too Many Requestsstatus code.See the Python job type
- Use ExceptionGroups from Python 3.11 properly.
- Hide ANSI color characters in logs if not in TTY mode.
pydanticpackage has been upgraded to version 2.
- A job can configure its own logging formatter, for instance structured logging formatter. Check out python-logging-format sample.
- Base Dockerfile has been merged with a job template, according to new job type interface for building images.
- Python 3.11 jobs no longer conflict with "typeguard" package.
- Graceful shutdown on SIGTERM signal
- Function
racetrack_job_wrapper.call.call_job_asyncallows you to make chain calls inside a job within anasynccontext in Python:See example.from racetrack_job_wrapper.call import call_job_async async def do_it_async(self): response = await call_job_async(self, job_name='job_name', path='/api/v1/perform', payload={}, version='latest')
- New Prometheus metrics coming from
racetrack_commonsmodule.
- Third-party libraries have been upgraded to newer versions.
- Better handling of asynchronous calls. It no longer freezes the server.
- Python module
job_wrapperhas been renamed toracetrack_job_wrapper. Therefore, if you want to import chain call function, you have to use:from racetrack_job_wrapper.call import call_job
- This plugin manifests itself with category "job-type".
- You can configure the home page of your job.
Home page is the one you see when opening a job through the Dashboard or at the root endpoint.
By default, it shows the SwaggerUI page. Now you can change it, for instance, to a webview endpoint:
(#22)
jobtype_extra: home_page: '/api/v1/webview'
- Chain calls to the jobs can be made by importing the
call_jobfunction from a package provided by the job type pluginfrom job_wrapper.call import call_job. See the example and the function for more details.
- Setting
LOG_CALLER_NAME: 'true'env var in a manifest allows you to keep record of a caller in the job's logs. This will add caller identity (username or ESC name) to every log entry. Exemplary Manifest snippet:runtime_env: LOG_CALLER_NAME: 'true'
python3base image has nowgitandbuild-essentialinstalled (again).- User-defined requirements, coming from
python3jobs, are better isolated from the core job dependencies to avoid conflicts.
Older changes are included in the Racetrack's Changelog
when python3 wrapper was part of the Racetrack repository.