Release highlights:
- Support for attaching a changefeed to the
get_all
andunion
commands - Improved support for asynchronous queries
- The first production-ready release of RethinkDB
Read the release blog post for more details.
Compatibility
Data files from RethinkDB versions 1.13.0 onward will be automatically
migrated to version 2.0. As with any major release, back up your data files
before performing the upgrade.
Handling of negative zero in indexes
IEEE 754 floating point numbers distinguish between negative (-0) and
positive (+0) zero. The following information is only relevant if you
are storing negative zero values in your documents. We expect very
few users to be affected by this change.
ReQL compares -0 and +0 as equal in accordance with IEEE 754. In
previous versions of RethinkDB, -0 and +0 were however treated as
distinct values in primary and secondary indexes. This could lead to
inconsistent behavior and wrong query results in some rare cases.
Starting with RethinkDB 2.0, -0 and +0 are indexed as equal values.
Secondary indexes can be migrated online using
the rethinkdb index-rebuild
utility. If any of your documents have
negative zero values in their primary keys, those documents will
become partially inaccessible in RethinkDB 2.0. You will need to
re-import the affected tables using the rethinkdb dump
and
rethinkdb restore
commands. See the article "Back up your
data" for more information.
If you are unsure if any of your documents are affected, you can run
python -m rethinkdb._negative_zero_check
after upgrading both the
server and Python driver. See the output of python -m rethinkdb._negative_zero_check --help
for additional options.
API-breaking changes
between
no longer acceptsnull
bounds. The newr.minval
and
r.maxval
can be used instead- The
any
andall
commands have been removed. Theor
andand
commands can be used instead indexes_of
has been renamed tooffsets_of
- The
squash
argument tochanges
now defaults tofalse
- The type hierarchy for exception types in the Python driver changed.
All exceptions includingRqlDriverError
now inherit from the
RqlError
type.RqlRuntimeError
,RqlCompileError
and
RqlClientError
additionally inherit from the newRqlQueryError
type
New features
- Overall
- Reached a production-ready state (#1174)
- ReQL
- Drivers
- Python driver
- Ruby driver
- Added an asynchronous API based on EventMachine (#2622)
Improvements
- Server
- Report open cursors as a single entry in the jobs table (#3662)
- Timestamps are no longer sent between servers in
batchspec_t
(#2671) - Some expensive changefeed checks are no longer performed in release mode (#3656)
- Include the remote port number in the heartbeat timeout message (#2891)
- Improved the ordering and throttling of reads and writes (#1606)
- Limit the number of documents per write batch to reduce the impact of large writes on other queries (#3806)
- Execute multiple queries in parallel on a single connection (#3296)
- Improved the performance of sending responses (#3744)
- Immediately send back an empty first batch when the result is a changefeed (#3852)
- Simplified the
multi_throttling
infrastructure (#4021) - The server now reports handshake errors to client drivers earlier (#4011)
- Set
TCP_NODELAY
in the Python and Ruby driver to avoid delays in combination withnoreply
(#3998)
- Web UI
- ReQL
table.rebalance
with insufficient data is no longer an error (#3679)- Renamed
indexes_of
tooffsets_of
to avoid confusion with secondary indexes (#3265) - Removed
any
andall
in favor ofor
andand
(#1581) - Trivial changes are filtered out from
return_changes
(#3697) - Reduced the size of profiles (#3218)
- Changefeeds are no longer squashed by default (#3904)
- JavaScript driver
- Added an upper bound to the bluebird dependency (#3823)
- Ruby driver
- Build
- Packaging
- Tests
- Increased the number of retries in the
RDBBtree
tests to avoid false positives (#3805)
- Increased the number of retries in the
Bug Fixes
- Server
- Fixed a race condition that could be caused by concurrent queries (#3766)
- Deleted servers and tables are no longer counted during version checks (#3692)
- Made JSON parsing more strict (#3810)
- Fixed a bug that could cause the server to crash when killed (#3792)
- Databases can no longer be renamed to "rethinkdb" (#3858)
- Return an initial value for point changefeeds on system tables (#3723)
- Improved the handling of negative zero (#3637)
- Correctly abort
order_by.limit
changefeeds when a table become unavailable (#3932) - Do not unlink files early to avoid crashing in virtual environments (#3791)
- Fallback to TCP4 when binding sockets (#4000)
- No longer crash when the data files are in a VirtualBox shared folder (#3791)
- ReQL
- Web UI
- Fixed a bug that caused the status icon to be green when a table was unavailable (#3500)
- Fixed a bug that truncated labels in the performance graph (#3751)
- Correctly handle the escape key in modal dialogs (#3872)
- Fixed a bug that caused an
InternalError
when loading large tables (#3873) - Fixed a bug that caused the Data Explorer to break when reading older data from
localStorage
(#3935) - Fixed a bug that caused autocompletion to fail in certain cases (#3143)
- Python driver
- JavaScript driver
- Ruby driver
- Build
- Fetching Browserify during the build process is now more reliable (#4009)
Contributors
Many thanks to external contributors from the RethinkDB community for helping
us ship RethinkDB 2.0. In no particular order:
- Andrey Deryabin (@aderyabin)
- Krishna Narasimhan (@krishnanm86)
- Elian Gidoni (@eliangidoni)
- Sherzod Kuchkarov (@tundrax)
- Jason Dobry (@jmdobry)
- Justin Mealey (@justinmealey)
- Jonathan Ong (@jonathanong)
- Andrey Deryabin (@aderyabin)
- Angelo Ashmore (@angeloashmore)
- Bill Barsch (@billbarsch)
- Ed Costello (@epc)
- Ilya Radchenko (@knownasilya)
- Kai Curry (@webmasterkai)
- Loring Dodge (@loringdodge)
- Mike Marcacci (@mike-marcacci)
- Param Aggarwal (@paramaggarwal)
- Tinco Andringa (@tinco)
- Armen Filipetyan (@armenfilipetyan)
- Andrei Horak (@linkyndy)
- Shirow Miura (@sharow)