Release notes

GAMS Engine 22.06.24

New features

  • UI: When a job is canceled on the job page, the user is now prompted to confirm the cancellation.
  • UI: When deleting a user/invitation, the username/invitation code is now mentioned in the confirmation dialog.
  • UI: Timing info is now also available on the job info page for Hypercube jobs.

Bug fixes

  • UI: Fix issue where the instance multiplier in usage charts was not considered.

API Changes

  • The maximum length for Hypercube job ids is now 255 characters. In addition, ids are now validated against the regular expression ^[0-9a-zA-Z_\-. ]+$. For more information, check the chapter on Hypercube jobs.

GAMS Engine 22.06.22

Update GAMS to version 39.2.1.

GAMS Engine 22.06.03

Update GAMS to version 39.2.0.

GAMS Engine 22.05.19

Update GAMS to version 39.1.1.

GAMS Engine 22.05.05

Update GAMS to version 39.1.0.

Bug fixes

  • Fix issue issue where the event manager could hang indefinitely when receiving a canceled job.

GAMS Engine 22.04.27

New features

  • UI: Add charts when viewing a user's usage data.
  • UI: Engine SaaS users can now select a default instance.
  • UI: Minor restructuring of job submission form.

Bug fixes

  • Fixed an issue in the GET /usage endpoint when recursively querying usage data for an inviter as root admin. In this case, the root admin usage data was also included.

GAMS Engine 22.04.12

API Changes

  • The maximum length for text entries is now 10 MB. It can be configured via the new /configuration endpoint.

New features

  • It is now possible to tag a (Hypercube) job with a human-readable string to make it easier to identify.
  • Engine licences are now tied to a specific Engine installation. Old licences will continue to be accepted and work just as before. To learn more about how to activate new Engine licenses, read here.
  • Engine now supports webhooks as a way to be notified when a job is finished. Webhooks are disabled by default, but can be enabled via the new configuration API (either for administrators only or for everyone).
  • When registering models (POST/PATCH /namespaces/{namespace}/models/{model}), you can now specify that model files should be protected from being overwritten (protect_model_files parameter). Together with INEX files, you can thus protect the intellectual property of your models.
  • Jobs can now be shared with user groups. Any user with access to this group can then access the job (view the job details, cancel the job, download/delete the results, etc.).

Bug fixes

  • The query for usage data (GET /usage/) by the first admin with recursive=true did not contain any usage data of this admin.

GAMS Engine 22.04.06

Update GAMS to version 38.3.0.

GAMS Engine 22.02.20

Update GAMS to version 38.2.1.

GAMS Engine 22.02.18

Update GAMS to version 38.2.0.

GAMS Engine 22.02.03

Bug Fixes

  • Fix issue with sorting by username, model and namespace when listing jobs, listing hypercubes and listing cleanup entries.
  • Fix layout issue with Engine UI when many namespaces are present.

GAMS Engine 22.02.02

Update GAMS to version 38.1.0.

GAMS Engine 22.01.25

API Changes

  • The minimum length for passwords has been increased to 8 characters.
  • The maximum length for namespace names has been increased to 100 characters.

Bug fixes

  • Fix issue where deleting users did not work in certain situations.
  • Fix issue where retrieving user details of a specific user did not work in certain situations.

New features

  • The installation script now supports specifying the default admin password via the -a switch.
  • UI: String columns in tables rendered client-side (users, models) can now be filtered.

GAMS Engine 21.11.12

Update GAMS to version 37.1.0.

GAMS Engine 21.11.04

Breaking Changes

  • This release does not contain any breaking changes. In the next 3rd release stream entries and partial logs will return 410 instead of 308 when the stream is ended.

New features

  • The installation script now supports specifying the path where GAMS Engine is mounted via the -m switch.
  • The access scope of JWT can now be restricted.
  • The maximum expiration time of JWT was increased to 186 days.
  • JWT can now be invalidated via the new /auth/logout endpoint.
  • The worker container now marks the GAMS process as the first candidate for the Out-of-Memory killer.
  • The following containers accept the new GMS_RUNNER_LOG_SHOW_MSEC environment variable to add milliseconds to timestamps in log entries:
    • Broker*
    • Worker
    • Cleaner
    • Hypercube Unpacker
    • Hypercube Appender
    • Dependency Checker
    • Job Watcher
    • Job Spawner
    • Job Cleaner
    • Job Canceler
    Setting GMS_RUNNER_LOG_SHOW_MSEC environment variable to 'true' will change the logging format. Not setting it or setting it to anything else will have no effect. For example, a log from the worker container: [17/10/2021 14:58:47] INFO #: Start consuming on signal queue Would become: [17/10/2021 14:58:47.084] INFO #: Start consuming on signal queue
* Changing the logging format of the Broker(REST API) does not change logging format of nginx and the logs that come from uwsgi will have 000 in the milliseconds because it is not supported. However, the logs that come from REST API will have milliseconds.

API Changes

  • DELETE /jobs/{token}/stream-entry/{entry_name} now returns queue_finished which indicates whether the stream entry queue has been finished.
  • GET /hypercube/ labels field also includes resource_warning which can be "none", "memory" or "disk".
  • GET /jobs/{token} labels field also includes resource_warning which can be "none", "memory" or "disk".
  • GET /usage/ labels field also includes resource_warning which can be "none", "memory" or "disk".
  • POST /auth/, creating JWT token via basic auth, is not considered deprecated anymore since it might be used to create a new token using another token.
  • GET /users/ now returns the details of the logged in user if user is not admin or inviter. Previously a 403 Forbidden error was thrown if the username parameter was not explicitly set to the name of the logged in user.
  • Now it is possible to use stream/text entries to track files located in subdirectories.
    • New endpoint: GET /jobs/{token}/text-entry?entry_name={entry_name}. It does exactly what GET /jobs/{token}/text-entry/{entry_name} does but accepts the entry name in query string to allow querying inside the directories. Operation ID is: queryJobTextEntry
    • New endpoint: HEAD /jobs/{token}/text-entry?entry_name={entry_name}. It does exactly what HEAD /jobs/{token}/text-entry/{entry_name} does but accepts the entry name in query string to allow querying inside the directories. Operation ID is: queryJobTextEntryInfo
    • New endpoint: DELETE /jobs/{token}/stream-entry?entry_name={entry_name}. It does exactly what DELETE /jobs/{token}/stream-entry/{entry_name} does but accepts the entry name in query string to allow querying inside the directories. Operation ID is consumeStreamEntry

Bug fixes

  • Fix issue where sparse output of stream entries caused connection timeouts.
  • Introduced performance improvements for stream entries.
  • CRITICAL: Fix security issue that allowed an authorized attacker to leak system information.

GAMS Engine 21.09.14

Breaking changes

  • The log file is no longer automatically appended to the array of text entries. GAMS log files can get quite large and storing them can consume significant resources. Therefore, this is now opt-in: To save log files, you must explicitly add them to the text_entries array.

New features

  • Models can now be assigned to user groups to limit the visibility of the model.
  • New string interface for INEX files.
  • The results of GET /cleanup/results can now be filtered by namespace.
  • Text entries and stream entries can now be specified when creating/updating a model.

Bug fixes

  • CRITICAL: Fix a security issue that can lead to privilege escalation if an attacker has access to an inviter account.
  • Fix issue with updating models via Python client.

API Changes

  • POST /jobs/ accepts query parameter inex_string
  • that can be used instead of inex_file
  • POST /hypercube/ accepts query parameter inex_string that can be used instead of inex_file
  • POST /namespaces/{namespace}/models/{model} accepts query parameter inex_string that can be used instead of inex_file
  • PATCH /namespaces/{namespace}/models/{model} accepts form parameter inex_string that can be used instead of inex_file
  • Admins can no longer make a user an admin if their inviter is not also an admin.

GAMS Engine 21.09.06

Update GAMS to version 36.2.0.

GAMS Engine 21.08.09

Bug fixes

  • Fix issue with updating models via Engine UI.

GAMS Engine 21.08.06

New features

  • When inviting users, Engine now supports assigning a GAMS license when invited by an admin.
  • Now, admins can change usernames. Changing username invalidates previously generated JWT tokens.
  • Now, changing password invalidates previously generated JWT tokens.
  • Significantly reduced image size of Engine components.

Bug fixes

  • Fix issue with inheriting licenses from admins.
  • Fix issue where license inheritance did not work in certain situations.

API Changes

  • When listing invitations, quotas, user groups, and GAMS license attached to the invitation are also listed.
  • All the endpoints that return datetimes ensure that the datetimes have timezone info. For example, if an old return value were 2021-08-04T17:10:15.000000, which did not indicate the timezone, the new return value would be 2021-08-04T17:10:15.000000+00:00.

GAMS Engine 21.08.04

Update GAMS to version 36.1.0.

GAMS Engine 21.07.20

New features

  • Engine UI is updated
  • When inviting users, Engine now supports assigning quotas and user groups.
  • Speed up uploading temporary models

Bug fixes

  • Fix issue with assigning disk quota larger than 2,147,483,647 bytes to users.
  • Fix issue with leftover files if the database is down while sending a job/hypercube.

API Changes

  • Switched to a new JWT library as the old one is deprecated. Already existing unexpired tokens will be invalidated.
  • Defined caching options for endpoints
  • Namespace name length must be between 3-16 chars and it must consist of alphanumeric chars - and _. This change does not affect existing namespaces.
  • Model name length must be between 1-260 chars and it cannot contain / and \. This change does not affect existing models.
  • Jobs are limited to maximum of:
    • 100 text entries
    • 5 stream entries
    • 255 arguments
    • 2 labels
    • 100 dependent jobs
    • 5 MB inex file
  • Cleanup endpoint accepts 10 thousand files at once at most.
  • Registered models are limited to have 255 arguments at most.
  • Now invitations can have instances, user groups and quotas assigned Invitations are limited to maximum of:
    • 2 roles
    • 50 instances
    • 50 namespace permissions
    • 50 user groups
  • Now GET /usage/ endpoint is accessible by each user group.
  • Now GET /usage/ endpoint's return model's labels is changed to return a dictionary instead of an array
  • Now GET /usage/ endpoint also returns tolerations and node_selectors in labels.
  • Now users can specify token and hypercube_token to GET /usage/ endpoint in order to further limit the results.
  • Instances now have workspace_request, tolerations and node_selectors fields to have a better control over pod node assignment (related to Kubernetes version).
  • Jobs and Hypercubes accept workspace_request=n, tolerations=key=value, and node_selectors=key=value (related to Kubernetes version).
  • When querying a single job or Hypercube, information about workspace_request, tolerances and node_selectors assigned to that job is now provided (related to Kubernetes version).

GAMS Engine 21.06.09

New features

  • Quotas introduced. Quotas allow limiting the solve time and disk usage of users or groups of users.
  • Users can now be assigned to user groups. User groups allow you to see all other Engine users within your groups.
  • Admins can now get a disk usage report via the sigusr1 signal.
  • Admins can now manually trigger housekeeping via the sigusr2 signal.

Bug fixes

  • Improve performance when listing jobs with stream entries and when retrieving a single job with text entries
  • Fix issue that caused the accumulation of intermediate files.
  • Fix issue related to canceling dependent Hypercube jobs.
  • Containers connecting to PostgresSQL have been made more robust against connection failures.
  • API Documentation updated to solve issues in the auto-generated Python Client.
  • /cleanup/results enpoints: Operation ids added for auto-generated clients: listResults and removeResults.

API changes

  • DEPRECATED endpoint: GET /namespaces/permissions/me, use GET /namespaces/ instead.
  • DEPRECATED endpoint: DELETE/GET/PATCH/POST /namespaces/{namespace}/{model}, use /namespaces/{namespace}/models/{model} instead.
  • DEPRECATED endpoint: GET /namespaces/{namespace}/permissions/me, use GET /namespaces/{namespace}/permissions instead.
  • New endpoint: DELETE/GET/PUT /usage/quota available to modify user quotas.
  • New endpoint: DELETE/GET/PUT /namespaces/{namespace}/disk-quota available to modify namespace disk quotas.
  • New endpoint: DELETE/GET/POST /namespaces/{namespace}/user-groups available to delete/get/create user groups.
  • New endpoint: DELETE/POST /namespaces/{namespace}/user-groups/{label} available to change user groups of users.
  • New endpoint: GET /namespaces/{namespace}/permissions added to get permissions of a user on a namespace.
  • GET /namespaces/ is now accessible by inviters and users as well (not just admins).
  • Operation id for endpoint: POST /auth/login added: createJWTTokenJSON.
  • Updates in models
    • GET /version endpoint returns a new field in_kubernetes to indicate that Engine is running in Kubernetes (Kubernetes version is not released yet).
    • GET /cleanup/results has old_username field added to user object.
    • GET /hypercube/ returns a new field labels that returns the labels assigned to the job.
    • GET /usage/ now also returns new field labels of (Hypercube) jobs.
    • POST /hypercube/ returns new field quota_warning that lists the quotas that are at least 80% used.
    • POST /jobs/ returns new field quota_warning that lists the quotas that are at least 80% used.
    • GET /namespaces/permissions/me returns a new field disk_quota for the namespaces.
    • GET /namespaces/ returns a new field disk_quota for the namespaces.
    • GET /namespaces/{namespace} also returns length (size) of the models now.
  • Updates in request parsers
    • Admins can set quotas for namespaces while creating them: POST /namespaces/{namespace} accepts query parameter disk_quota.
  • Updates in responses
    • (Hypercube) job creation may fail with status code 402 to indicate that at least 1 quota has been exceeded.
    • Download/delete job result documentation model for 404 was incorrect, and changed to correct ones.
    • Uploading a new model may fail with 402 to indicate that namespace quota has been exceeded.
    • Patching an existing model may fail with 402 to indicate that namespace quota has been exceeded.

GAMS Engine 21.06.03

Update GAMS to version 35.2.0.

GAMS Engine 21.05.04

Update GAMS to version 35.1.0.

GAMS Engine 21.03.19

  • Fix issue that caused jobs to not get canceled when the GAMS process creates another GAMS process.

GAMS Engine 21.03.12

  • listJobs with show_only_active set now also returns jobs that are waiting for dependencies.
  • Inviters now have access to jobs submitted by invitees.
  • The Engine UI now has the option to display only jobs that are currently active.
  • Users can change registered models' files, arguments, inex file, run filename via PATCH /namespaces/{namespace}/{model}
  • Listing models provides run filename information as well
  • Deprecated creating JWT token via basic auth, use the other option instead
  • Users now can specify expiration time for JWT token, defaults to 4 hours
  • Dependency checker, hcube appender, hcube unpacker logging format changed
  • Restarting worker now handled by Container Runtime in connection error

GAMS Engine 21.02.03

First official release of GAMS Engine.