.. _version_2.3.12:

==============
Version 2.3.12
==============

Released on 2018/06/21.

If you are upgrading a cluster, you must be running CrateDB
:ref:`version_1.1.3` or higher before you upgrade to 2.3.12.

If you want to perform a `rolling upgrade`_, your current CrateDB
version number must be at least :ref:`version_2.3.0`. Any upgrade
from a version prior to this will require a `full restart upgrade`_.

.. WARNING::

   Before upgrading, you should `back up your data`_.

.. _rolling upgrade: http://crate.io/docs/crate/guide/best_practices/rolling_upgrade.html
.. _full restart upgrade: http://crate.io/docs/crate/guide/best_practices/full_restart_upgrade.html
.. _back up your data: https://crate.io/a/backing-up-and-restoring-crate/

Changelog
=========

Changes
-------

- Implemented a thread-utilization down-scaling logic which dynamically adapts
  the number of threads used for ``SELECT`` queries to avoid running into
  ``RejectedExcecution`` errors if there are many shards per node involved in
  the queries.

- Changed internals for DELETE and UPDATE queries which should generally result
  in a performance increase for queries which only match a subset of the rows
  and avoid ``CircuitBreakingException`` errors. But it might result in a
  slight performance decrease if the queries match all
  or almost all records.

Fixes
-----

- Use only primary shards to calculate table stats. This will improve the
  precision of the statistics and also reduce the amount of shards that need to
  be queried resulting in better performance on clusters with a large amount of
  shards.

- Fixed an issue that prevented blob tables from showing up or triggering the
  system check indicating that they'll need to be re-created in order to update
  to CrateDB 3.0+

- Fixed an issue that caused an UnsupportedFeatureException to be thrown for
  queries with a ``WHERE`` clause which contains an equality comparison that
  references a table column in both sides. E.g.::

    SELECT * FROM t
    WHERE t.i = abs(t.i)

- Handle ``STRING_ARRAY`` as argument type for user-defined functions correctly
  to prevent an ``ArrayStoreException``.

- Fixed an issue that could cause ``HTTP`` requests using empty ``bulk_args``
  to fail.

- Fixed a ``NullPointerException`` which could be thrown when deleting a table
  and querying ``size`` from the ``sys.shards`` table.
