~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

New in v6.1

* Bugfixes

    - Correctly deallocate named counters if resource fails to allocate.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

New in v6.0

* Enhancements

    - Cross-pool "named counters" implemented.  Use these for calculating
      shared resources (e.g., for counting ranges of IPv6 addresses).

New in v5.11

* Bugfixes

    - Issue #173 has been resolved. The resalloc server no longer allows the
      processes spawned by CleanUnknownWorker to run indefinitely. Instead, if
      these processes do not finish within 120 seconds, the server will
      terminate them. This 120s timeout should not be a significant problem as
      terminating processes only typically involves making a few "cloud API"
      calls.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

New in v5.10

* Enhancements

    - Resalloc packages use the RPM built-in mechanism for handling
      system users (modern distributions only).

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

New in v5.9:

* Enhancements

    - The Pool's page in the Web UI now includes a "totals" line that
      displays overall statistics summarized for all pools.

    - The Pool's Web UI page now also shows the `DELETE_REQUEST` numbers.

    - The Resource's Web UI page now renders the Data field as `<code>`,
      which properly displays newlines.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

New in v5.8:

* Bugfixes:

    - Show pool descriptions in a details tag. Otherwise the UX was especially
      bad on vertical monitors

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

New in v5.7:

* New Features:

    - A `description` field for pools in the `pools.yaml` config is now
      recognized and displayed by the Web-UI.

* Bugfixes:

    - The Manager now waits until PostgreSQL is running (PR #165).

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

New in v5.6:

* Bugfixes:

    - The Watcher thread no longer fails in the case of random database
      exceptions, such as "database is locked."  It now simply retries, ensuring
      the cluster remains well-maintained (cleanup of dead machines works
      properly).

    - The Web-UI now sorts the list of Pools alphabetically (PR #161).

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

New in v5.5:

* Bugfixes:

    - Previous versions of the Resalloc Web-UI loaded the `pools.yaml`
      configuration file. In cases of configuration issues, they attempted to
      log problematic details into a log file owned by `resalloc-server`
      (`var/log/resallocserver`).  Such attempts resulted in file permission
      problems.  The Web-UI logic has been modified to no longer read
      `pools.yaml` and to rely solely on the database.  In the future, we have
      to implement a completely separate configuration for the Web-UI and cease
      loading `server.yaml`, which should not be readable by Apache either, for
      instance.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

New in v5.4:

* Bugfixes:

    - The agent-spawner workers now ignore the output from shell command hooks
      (redirects them to /dev/null to avoid SIGPIPE)

    - The agent-spawner server now correctly base64-encodes the ticket data.

    - The agent-spawner package now requires up2date python3-copr-common for
      fixed get_redis_connection() method.

    - The resalloc's tags/tags_on_demand configuration was cleaned up to
      allow user to keep them unspecified, e.g,, and several useful warnings
      related to tag misconfiguration were added.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

New in v5.3:

* Changes:

    - The helper scripts have been moved from resalloc-server to the
      resalloc-helpers (sub)package.  Cloud drivers that rely on those
      scripts might be usable without the resalloc-server package and its
      transitive dependencies.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

New in v5.2:

* New Features

    - Added a new convenience script, /bin/resalloc-wait-for-ssh.  This script
      is useful for cloud drivers that want to actively wait until the VMs
      (resources) become available on SSH.

    - The /bin/resalloc-check-vm-ip now optionally accepts the $SSH_USER
      environment variable if checking root-SSH isn't possible.  Users can use
      `cmd_livecheck: SSH_USER=centos resalloc-check-vm-ip`.

* Bug Fixes

    - Compatibility fix with SQLAlchemy v2.

    - The $AGENT_SPAWNER_RESOURCE_DATA variable content is now base64 encoded.

    - The resalloc-agent-spawner package now correctly specifies all the
      required runtime dependencies.

    - The `survive_server_restart` client option now ignores all possible
      server socket errors, avoiding unexpected client interrupts.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

New in v5.1:

* New Features:

    - A new concept of "agent-like" resources has been implemented.  A new
      `resalloc-agent-spawner` daemon (shipped in resalloc-agent-spawner
      package) converges the number of agents (tickets opened against the
      resalloc server) according to the current state of the external system
      (e.g., according to the wishes of the OpenScanHub, software based on the
      Kobo framework).  This feature is now provided in "beta" quality.

    - The `resalloc ticket-check` now raises a WARNING for non-existing ticket
      IDs.  The API has been appropriately fixed so that even clients with the
      `.survive_server_restart` option won't indefinitely hang on a non-existing
      ticket ID.

* Bugfixes:

    - Web browsing the pools has been fixed to prevent users from encountering
      500 errors.  For more information, see
      https://github.com/fedora-copr/copr/issues/2882

    - The `resalloc-selinux` package has dropped the RPM dependency on
      `resalloc-webui`.

    - A bug in the "on-demand" resources concept has been fixed so that even a
      single ticket can no longer trigger the allocation of multiple resources.

    - A traceback bug-fix has been added to the "cleanup resource orphans"
      logic, addressing cases when no resource has yet started in the configured
      pool. A user-friendly warning is now raised instead.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

New in v5.0:

* New features

    - A new concept of "on-demand" ticket tags has been introduced. These
      on-demand tags, when assigned to tickets, trigger an "on-demand"
      resource allocation in the corresponding pools, rather than
      pre-allocating them in advance.

    - The README file has been significantly rewritten by Jakub Kadlčík in
      markdown format.

    - The number of "livecheck" attempts before a resource is deleted is
      now configurable through the "livecheck_attempts" option.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

New in v4.9:

* New features

    - Resources that fail the livecheck are terminated, even though they
      have some ticket assigned.  Such a ticket goes to FAILED state.

    - We use the SPDX-formatted license.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

New in v4.8:

* New features:

  - Eetter logging support: Exceptions are logged to 'main.log', the
    default log_level=info is made useful, more readable messages, log
    entries contain PID, TID and thread name.

  - Stopped using 'sqlalchemy.pool.NullPool' for connecting to database,
    and use the default.  That is NullPool anyway for SQLite backend, and
    QueuePool(pool_size=5) for the PostgreSQL backend:
    https://docs.sqlalchemy.org/en/14/core/pooling.html#sqlalchemy.pool.NullPool

  - A new PostgreSQL index to speedup `resalloc-maint ticket-list` command.


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

New in v4.7:

* Bugfixes:

  - the new mechanism for cleaning orphaned resources was cleaning also
    resources in STARTING/DELETING/RELEASING states.

  - fix traceback in `$ resalloc-maint resource-info` for a non-existing
    resource

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

New in v4.6:

* New features:

  - A new resalloc-selinux subpackage, currently adjusting only SELinux context
    for the CGI script used by WebUI
  - Adding a simple homepage for the WebUI


* Bugfixes:

  - The CGI script for WebUI is now compatible with both Apache and Lighttpd

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

New in v4.5:

* Bugfixes:

  - added a forgotten CGI script for the web UI subpackage

  - now we are running the "orphaned resources" cleaner in background, this
    blocked the manager logic before

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

New in v4.4:

* New features:

  - Server now periodically checks for unknown or forgotten resources. This is
    useful when your termination scripts are not reliable, and report successful
    termination even if the resource somehow survives. Enable this feature by
    configuring 'cmd_list' option for the respective pools.

  - Major performance and other improvements to the web-ui pools page

  - New web-ui page providing basic information about resources


* Bugfixes:

  - Connection to resalloc occasionally ended up with uncaught xmlrpc exception

  - Fixed race-condition causing infinitely RELEASING resource

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

New in v4.3:

* New features:

  - new Flask-based Python "overview" web-ui page added, providing basic
    info about used Pools

  - Fixed up 'resource-info' command for "STARTING" resources

  - More verbose RELEASING logging output to simplify debugging when needed

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

New in v4.2:

* New features:

  - New 'resalloc-maint resource-logs' command printing out logs for
    queried resources.  Accepts both resource ID and resource name.

  - New 'resalloc-maint resource-info' command, priting out basic metadata
    about the selected resource.

  - Added new arguments '--all' and '--unused' for the 'resalloc-maint
    resource-delete' command.


* Bugfixes:

  - RESALLOC_RESOURCE_DATA env var is given also to the 'cmd_delete' processes.

  - Dump (debug) log entry giving user the with reason why concrete ticket
    can not be resolved.


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

New in v4.1:

* Bugfixes:

  - Released resources were de-prioritized by the tag-priority feature
    introduced in v4.  This was fixed, and released resources have again
    higher priority over the non-released resources (with additional
    score 500).

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

New in v4:

* New features:

 - The resource (pool) tags can be specified with an integer priority value, and
   resalloc then assigns the preallocated resources to tickets respecting the
   priority (the resources with higher priority are assigned first).

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

New in 3.7:

* Bugfixes:

  - Added new helper script 'resalloc-check-vm-ip', that is often useful
    inside `cmd_livecheck` command.

  - Re-taken (released) resources are not causing additional allocation
    of resources over the max_prealloc quota.

  - The `resalloc-maint foreach-resource` command doesn't traceback on
    starting resources that don't have any data stored, yet.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

New in 3.6:

* Bugfixes:

  - A build failure fix for v3.5 on RHEL 7.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

New in 3.5:

* New features:

  - Many new DB indexes were installed to perform fluently on very
    large ticket/resource sets.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

New in 3.4:

* New features:

  - The 'resalloc-maint' command got a new sub-command 'foreach-resource'
    that can be used for programatic way of executing commands for each
    running resource.

* Bugfixes:

  - We fixed a bug in calculation of "preallocated" resources; previously
    released resources were counted as free-to-use by anyone - thus also
    pre-allocated.  But these are not useable by anyone, and shouldn't be
    taken as preallocated.

  - We re-added the "host" config option, which is just for backward
    compatibility.  Users still should use 'hostname' preferably.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

New in 3.3:

* Bugfixes:

  - Large stdout output from `cmd_new` command is properly trimmed, without
    traceback and leftover always-STARTING instance.

  - Better (fixed) logging from AllocWorker.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

New in 3.2:

* Enhancements:

  - Configurable command `cmd_release` to be run before we mark the
    resource as reusable again.

  - After server restart, schedule all inconsistent resources to be
    terminated.  (mitigates issue#41)

  - Systemd serrver service is restarted upon failure (just in case).

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

New in 3.1:

* Enhancements:

  - Resource Watcher thread doesn't directly terminate resources, but only
    checks periodically for liveness.  The termination task is given to
    Manager thread to avoid races.

  - The Watcher thread has a new environment variable
    RESALLOC_RESOURCE_DATA with base64 encoded output from 'cmd_new'.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

New in 3.0:

* New features:

  - Resource "re-using" mechanism was added.  Resources are newly put to
    sandboxes (per ticket sandbox flag), and when the resource is released
    from ticket the resource can be assigned to other (subsequent) ticket
    with the same sandbox flag.

  - Python API; The resalloc.client.Connection constructor now accepts
    'request_survives_server_restart'.  When set to True (default False),
    each XML request network failure is ignored and the request is retried
    till it succeeds.  This allows administrator to do resalloc server
    maintenance, restart it and clients survive without noticing.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
