.. _version_2.0.4:

=============
Version 2.0.4
=============

Released on 2017/07/06.

.. NOTE::

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

   If you want to perform a :ref:`rolling_upgrade`, your current CrateDB
   version number must be :ref:`version_2.0.0`. If you want to
   upgrade from a version prior to this, the upgrade will introduce all of the
   breaking changes listed for :ref:`version_2.0.0`, and will require a
   :ref:`full_restart_upgrade`.

   Consult the :ref:`version_2.0.0_upgrade_notes` for ``2.0.0`` when
   upgrading.

.. WARNING::

   If you're using CrateDB's BLOB storage you should consult the
   `Upgrade Notes`_.

.. WARNING::

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

.. _back up your data: https://crate.io/a/backing-up-and-restoring-crate/

Upgrade Notes
=============

Due to a bug introduced in :ref:`version_2.0.0` that can cause loss of BLOB
data, it is necessary to perform a :ref:`rolling_upgrade` if you're running a
version greater than or equal to 2.0.0 and using BLOB tables.

Additionally, the number of replicas needs to be set to at least ``1`` for
**all** blob tables and you need to make sure that data is fully replicated
before continuing.

Only then you may upgrade one node after each other.

Changelog
=========

Changes
-------

 - The ``recovery_after_time`` node check now fails if it would prevent the
   ``gateway.expected_nodes`` setting from having any effect.

Fixes
-----

 - Fixed ``SELECT settings['gateway']['recover_after_time'] FROM sys.cluster``
   so it returns the correct value.

 - Fixed an issue that caused blob data to be deleted upon node shutdown.

 - Fix thread-safety issue for scalar functions ``md5`` and ``sha1``.

 - ``information.schema.tables`` now returns the default routing hash function
   if none is present in the table metadata.

 - Fixed an issue that caused an exception to be thrown when using
   ``COUNT(*)`` with subselects that return one row, e.g.::

     SELECT count(*) FROM t1 WHERE id > (SELECT max(col1) FROM t2)

 - Throw proper exception when using the ``_raw`` column inside the where
   clause instead of silently ignoring it.
