Commit f180b00e authored by Julien Muchembled's avatar Julien Muchembled

Release version 1.6

parent cd669221
Change History
1.6 (2015-12-02)
This release has changes in storage format. The upgrade is done automatically,
but only if the cluster was stopped cleanly: see UPGRADE notes for more
- NEO did not ensure that all data and metadata were written on disk before
tpc_finish, and it was for example vulnerable to ENOSPC errors. In order to
minimize the risk of failures during tpc_finish, the writing of metadata to
temporary tables is now done in tpc_vote. See commit `7eb7cf1`_ for more
information about possible changes on performance side.
This change comes with a new algorithm to verify unfinished data, which also
fixes a bug discarding transactions with objects for which readCurrent was
- The RECOVERING/VERIFYING phases, as well as transitions from/to other states,
have been completely reviewed, to fix many bugs:
- Possible corruption of partition table.
- The cluster could be stuck in RECOVERING or VERIFYING state.
- The probability to have cells out-of-date when restarting several storage
nodes simultaneously has been reduced.
- During recovery, a newly elected master now always waits all the storage
nodes with readable cells to be pending, in order to avoid a split of the
- The last tid/oid could be wrong in several cases, for example after
transactions are recovered during VERIFYING phase.
- neoctl gets a new command to truncate the database at an arbitrary TID.
Internally, NEO was already able to truncate the database, because this was
necessary to make the database consistent when leaving the backup mode.
However, there were several bugs that caused the database to be partially
- The master now first stores persistently the decision to truncate,
so that it can recover from any kind of connection failure.
- The cluster goes back to RUNNING state only after an acknowledgment from
all storage nodes (including those without any readable cell) that they
- Storage:
- As a workaround to fix holes if replication is interrupted after new data
is committed, outdated cells always restart to replicate from the beginning.
- The deletion of partial transactions during verification didn't try to free
the associated raw data.
- The MySQL backend didn't drop the 'bigdata' table when erasing the database.
- Handshaking SSL connections could be stuck when they're aborted.
- 'neoctl print ids' displays a new value in backup mode: the higher common TID
up to which all readable cells have replicated, i.e. the TID at which the
database would be truncated when leaving the backup mode.
.. _7eb7cf1:
1.5.1 (2015-10-26)
NEO 1.6
The `ttrans` table in MySQL/SQLite backends is automatically upgraded at
However, because the algorithm to verify unfinished data has changed in a way
that such data can not be migrated, a storage node will refuse to start to
if either `ttrans` or `tobj` are not empty.
Therefore, you must first stop NEO cleanly, before upgrading the code. If any
temporary table is not empty, you are requested to restart with an older
version of NEO.
The change in `ttrans` is such that NEO < 1.6 is still usable after a
successful upgrade to NEO >= 1.6, provided you always make sure that `ttrans`
and `tobj` are empty when switching from one to another.
NEO 1.4
......@@ -54,7 +54,7 @@ else:
name = 'neoppod',
version = '1.5.1',
version = '1.6',
description = __doc__.strip(),
author = 'NEOPPOD',
author_email = '',
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment