Releases: rethinkdb/rethinkdb
2.3.1 — Fantasia
Bug fix release
Compatibility
RethinkDB 2.3.1 servers can be mixed with RethinkDB 2.3.0 servers in the same cluster.
We recommend that you run a mixed-version cluster only temporarily for upgrading
purposes.
No migration is required when upgrading from RethinkDB 2.3.0. Please read the
RethinkDB 2.3.0 release notes if you're upgrading from an
older version.
Supported systems
We now provide packages for Ubuntu 16.04 (Xenial Xerus).
The r.http
command no longer supports fetching data from encrypted https
resources on
OS X 10.7 and 10.8 (#5681). Newer releases of OS X are not affected.
Bug fixes
- Server
- Fixed a segmentation fault triggered by performing a batched
insert
with multiple
occurrences of the same primary key (#5683) - Fixed an uncaught exception bug in the
hostname_to_ips
function that could be
triggered by connecting a server with an unresolvable address (#5629) - Fixed a query failure when opening a changefeed with the
squash: true
option on a
system table (#5644) - Fixed a crash that was triggered when joining servers with identical server names
(#5643) - Fixed an issue with the random number generator that stopped initial server names from
getting randomized correctly (#5655) - Fixed a bug that caused memory to not be released properly after dropping a table or
removing its replicas from a server (#5666) - Fixed a bug causing
eqJoin
to freeze the server when chained after achanges
command (#5696) - Fixed an issue that caused the
returnChanges: "always"
option of theinsert
command to miss certain types of errors in thechanges
result (#5366) - Fixed a crash on OS X 10.7 when using the .dmg uninstaller (#5671)
- The OS X .dmg uninstaller is now signed (#5615)
- Fixed an edge case in the error handling for auto-generated primary keys when
inserting into a system table (#5691) - RethinkDB can now be compiled with GCC 5.3 (#5635)
- Fixed a segmentation fault triggered by performing a batched
- JavaScript driver
- Python driver
- Java driver
Contributors
Many thanks to external contributors from the RethinkDB community for helping
us ship RethinkDB 2.3.1. In no particular order:
- Brian Chavez (@bchavez)
- Neil Hanlon (@NeilHanlon)
- Jason Soares (@JasonSoares)
- Magnus Lundgren (@iorlas1)
2.3.0 — Fantasia
RethinkDB 2.3 introduces a users and permissions system, TLS encrypted connections, a
Windows beta, and numerous improvements to the ReQL query language. ReQL improvements
include up to 10x better performance for distributed joins, and a new fold
command that
allows you to implement efficient stateful transformations on streams.
Read the blog post for more details.
Compatibility
Data files from RethinkDB version 1.16 onward will be automatically migrated.
As with any major release, back up your data files before performing the upgrade.
If you're upgrading from RethinkDB 1.15.x or earlier, please read the
data migration guide to find out about the required migration steps.
RethinkDB 2.3.0 servers cannot be mixed with servers running RethinkDB 2.2.x or earlier
in the same cluster.
Managing password-protected clusters
If you migrate a cluster from a previous version of RethinkDB and have an auth_key
set,
the auth_key
is turned into the password for the "admin"
user. If no auth_key
is
set, a new "admin"
user with an empty password is automatically created during
migration.
RethinkDB 2.3 adds a new restriction when adding a server to an existing cluster. If
the existing cluster has a non-empty password set for the "admin"
user, a new server
is only allowed to join the cluster if it has a password set as well. This is to avoid
insecure states during the join process. You can use the new --initial-password auto
command line option for joining a new server or proxy to a password-protected cluster.
The --initial-password auto
option assigns a random "admin"
password on startup,
which gets overwritten by the previously configured password on the cluster once the join
process is complete.
API-breaking changes
- The
eqJoin
command no longer returns results in the order of its first input. You can
pass in the new{ordered: true}
option to restore the previous behavior. - Operations on geospatial multi-indexes now emit duplicate results if multiple index
keys of a given document match the query. You can append the.distinct()
command in
order to restore the previous behavior. - Changefeeds on queries of the form
orderBy(...).limit(...).filter(...)
are no longer
allowed. Previous versions of RethinkDB allowed the creation of such changefeeds, but
did not provide the correct semantics. - The commands
r.wait
,r.rebalance
andr.reconfigure
can no longer be called on the
globalr
scope. Previously, these commands defaulted to the"test"
database
implicitly. Now they have to be explicitly called on either a database or table object.
For example:r.db("test").wait()
,r.db("test").rebalance()
, etc. - The
{returnChanges: "always"}
option with theinsert
command will now add
{error: "..."}
documents to thechanges
array if the insert fails for some
documents. Previously failed documents were simply omitted from thechanges
result. - The special values
r.minval
andr.maxval
are no longer permitted as return values
of secondary index functions.
Deprecated APIs
- The JavaScript
each
function is deprecated in favor ofeachAsync
. In a
future release,each
will be turned into an alias ofeachAsync
. We recommend
converting existing calls of the form.each(function(err, row) {})
into the
eachAsync
equivalent.eachAsync(function(row) {}, function(err) {})
.
You can read more abouteachAsync
in the documentation. - The
auth_key
option toconnect
in the official drivers is deprecated in favor of
the newuser
andpassword
options. For now, a providedauth_key
value is mapped
by the drivers to a password for the"admin"
user, so existing code will keep
working.
Discontinued packages
We no longer provide packages for the Debian oldstable distribution 7.x (Wheezy).
When compiling from source, the minimum required GCC version is now 4.7.4.
New features
- Added support for user accounts, user authentication, and access permissions. Users can
be configured through the"users"
system table. Permissions can be configured through
either the new"permissions"
system table or through thegrant
command. (#4519) - Driver, intracluster and web UI connections can now be configured to use TLS
encryption. For driver and intracluster connections, the server additionally supports
certificate verification. (Linux and OS X only, #5381) - Added beta support for running RethinkDB on Windows (64 bit only, Windows 7 and up).
(#1100) - Added a
fold
command to allow stateful transformations on ordered streams. (#3736) - Added support for changefeeds on
getIntersecting
queries. (#4777)
Improvements
- Server
- The
--bind
option can now be specified separately for the web UI (--bind-http
),
client driver port (--bind-driver
) and cluster port (--bind-cluster
). (#5467) - RethinkDB servers now detect non-transitive connectivity in the cluster and raise a
"non_transitive_error"
issue in the"current_issues"
system table when detecting
an issue. Additionally, the"server_status"
system table now contains information on
each server's connectivity in the newconnected_to
field. (#4936) - Added a new
"memory_error"
issue type for the"current_issues"
system table that
is displayed when the RethinkDB process starts using swap space. (Linux only) (#1023) - Reduced the number of scenarios that require index migration after a RethinkDB
upgrade. Indexes no longer need to be migrated unless they use a custom index
function. (#5175) - Added support for compiling RethinkDB on Alpine Linux. (#4437)
- Proxy servers now print their server ID on startup. (#5515)
- Raised the maximum query size from 64 MB to 128 MB. (#4529)
- Increased the maximum number of shards for a table from 32 to 64. (#5311)
- Implemented a
--join-delay
option to better tolerate unstable network conditions
(#5319) - Added an
--initial-password
command line option to secure the process of adding new
servers to a password-protected cluster. (#5490) - Implemented a new client protocol handshake to support user authentication. (#5406)
- The
- ReQL
- Added an
interleave
option to theunion
command to allow merging streams in a
particular order. (#5090) - Added support for custom conflict-resolution functions to the
insert
command.
(#3753) - The
insert
command now returns changes in the same order in which they were passed
in when thereturnChanges
option is used. (#5041) - Added an
includeOffsets
option to thechanges
command to obtain the positions
of changed elements in anorderBy.limit
changefeeds. (#5334) - Added an
includeTypes
option to thechanges
command that adds atype
field to
every changefeed result. (#5188) - Made geospatial multi-indexes behave consistently with non-geospatial multi-indexes
if a document is indexed under multiple matching keys.getIntersecting
and
getNearest
now return duplicates if multiple index keys match. (#3351) - The
and
,or
andgetAll
commands can now be called with zero arguments.
(#4696, #2588) - Disallowed calling
r.wait
,r.rebalance
andr.reconfigure
on the global scope to
avoid confusing semantics. (#4382) - The
count
andslice
commands can now be applied to strings. (#4227, #4228) - Improved the error message from
reconfigure
if too many servers are unreachable.
(#5267) - Improved the error message for invalid timezone specifications. (#1280)
- Added an
- Performance
- Web UI
- The web UI now uses the
conn.server()
command for getting information about the
connected server. (#5059)
- The web UI now uses the
- All drivers
- JavaScript driver
- Python driver
- Added a
"gevent"
loop type to the Python driver. (#4433) - Printing a cursor object now displays the first few results. (#5331)
- Removed the dependency on
tar
for therethinkdb restore
andrethinkdb dump
commands. (#5399) - Added a
--tls-cert
option to therethinkdb import
,rethinkdb export
,
rethinkdb dump
,rethinkdb restore
andrethinkdb index-rebuild
commands to enable
TLS connections. (#5330) - Added
--password
and--password-file
options to therethinkdb import
,
rethinkdb export
,rethinkdb dump
,rethinkdb restore
and
rethinkdb index-rebuild
commands to connect to password-protected servers. (#5464) - Added a
--format ndjson
option torethinkdb export
that allows exporting tables
in a newline-separated JSON format. (#5101) - Made
rethinkdb dump
rethinkdb restore
andrethinkdb import
able to write to
stdout and load data from stdin respectively. (#5525, #3838) r.min
,r.max
,r.sum
,r.avg
andr.distinct
now accept an array argument
(#5494)
- Added a
- Java driver:
- Made it easier to publish the driver on local Ivy and Maven repositories. (#5054)
Bug fixes
- Server
- Fixed a crash with the message
[cmp != 0]
when querying withr.minval
or
r.maxval
values inside of an array. (#5542) - Fi...
- Fixed a crash with the message
2.2.6 — Modern Times
Bug fix release
Compatibility
Warning: Due to a bug (#5570), RethinkDB 2.2.6 fails to migrate data directories from RethinkDB 2.0.x or earlier. Please use RethinkDB 2.2.5 for migrating your data, and then upgrade to RethinkDB 2.2.5 in a second step.
RethinkDB 2.2.6 servers cannot be mixed with servers running RethinkDB 2.2.1 or earlier
in the same cluster.
No migration is required when upgrading from RethinkDB 2.2.0 or higher. Please read the
RethinkDB 2.2.0 release notes if you're upgrading from an
older version.
Bug fixes
- Fixed two bugs in the changefeed code that caused crashes with an "Unreachable code"
error in certain edge cases (#5438, #5535) - Fixed a
SANITY CHECK FAILED: [d.has()]
error when using themap
command on
a combination of empty and non-empty input streams (#5481) - The result of
conn.server()
now includes aproxy
field (#5485) - Changed the connection behavior of proxy servers to avoid repeating "Rejected a
connection from server X since one is open already" warnings (#5456) - The Python driver now supports connecting to a server via IPv6, even when using the
async API (asyncio, tornado, twisted) (#5445) - Fixed an incompatibility with certain versions of Python that made the driver unable to
load thebackports.ssl_match_hostname
module (#5470) - Fixed a resource leak in the Java driver's
cursor.close()
call (#5448) - Cursors in the Java driver now implement the
Closeable
interface (#5468) - Fixed a remaining incompatibility with Internet Explorer 10 in the JavaScript driver
(#5499)
Contributors
Many thanks to external contributors from the RethinkDB community for helping
us ship RethinkDB 2.2.6. In no particular order:
- Paulo Pires (@pires)
- Mike Mintz (@mikemintz)
2.2.5 — Modern Times
Bug fix release
Compatibility
RethinkDB 2.2.5 servers cannot be mixed with servers running RethinkDB 2.2.1 or earlier
in the same cluster.
No migration is required when upgrading from RethinkDB 2.2.0 or higher. Please read the
RethinkDB 2.2.0 release notes if you're upgrading from an
older version.
Improvements
- Improved the CPU efficiency of
orderBy
queries on secondary indexes (#5280) - Improved the efficiency of geospatial queries on indexes with point values (#5411)
- Connections in the Java driver are now thread-safe (#5166)
- Made the JavaScript driver compatible with Internet Explorer 10 (#5067)
- The Ruby driver now supports nested pseudotypes (#5373)
Bug fixes
- Fixed an issue that caused servers to not connect and/or reconnect properly (#2755)
- Fixed an issue that caused servers to time out when running queries on secondary
indexes with long index keys (#5280) - Changefeeds now always emit events for documents leaving or entering the changefeed
range (#5205) - Fixed a bug in the Java driver that caused null pointer exceptions (#5355)
- Fixed the
isFeed()
function in the Java driver (#5390, #5400) - The
r.now
command now performs arity checking correctly (#5405) - Fixed a test failure in the
unit.ClusteringBranch
test (#5182)
Contributors
Many thanks to external contributors from the RethinkDB community for helping
us ship RethinkDB 2.2.5. In no particular order:
- Mike Mintz (@mikemintz)
- Paulo Pires (@pires)
- Nicolas Viennot (@nviennot)
- Brian Chavez (@bchavez)
2.2.4 — Modern Times
This bug fix release addresses a critical bug in RethinkDB's clustering system,
that can lead to data loss and invalid query results under certain rare
circumstances. The bug can appear if a table is reconfigured during a network
partition (read more in GitHub issue #5289).
We recommend upgrading to this release as soon as possible to avoid data loss.
If you see replicas get stuck in the transitioning
state during a reconfiguration
after upgrading, you can run .reconfigure({emergencyRepair: '_debug_recommit'})
on the table to allow the reconfiguration to complete. Please make sure that the
cluster is idle when running this operation, as RethinkDB does not guarantee
consistency during the emergency repair.
Compatibility
RethinkDB 2.2.4 servers cannot be mixed with servers running RethinkDB 2.2.1 or earlier
in the same cluster.
No migration is required when upgrading from RethinkDB 2.2.0 or higher. Please read the
RethinkDB 2.2.0 release notes if you're upgrading from an
older version.
Bug fixes
- Fixed a bug in the clustering system that could lead to data loss, inconsistent
reads, and server crashes after reconfiguring a table during incomplete connectivity
(#5289, #4949) - Fixed a segmentation fault that occurred when requesting certain documents from the
stats
system table (#5327) - Changefeeds on system tables now support
map
,filter
and related commands (#5241) - Backtraces are now printed even if the
addr2line
tool is not installed (#5321) - The Java driver now supports SSL connections thanks to a contribution by @pires (#5284)
- Fixed the "Serialized query" debug output in the Java driver (#5306)
- Fixed an incompatibility of the
rethinkdb import
script with Python 2.6 (#5294)
2.1.6 — Forbidden Planet
Legacy bug fix release
Legacy support release
This release maintains full compatibility with RethinkDB 2.1.5, while fixing a
critical bug in RethinkDB's clustering system.
We recommend installing this version only if upgrading to RethinkDB 2.2.4 is not
an option, for example if you depend on a driver that still uses the old protocol buffer
client protocol.
Bug fixes
2.2.3 — Modern Times
Bug fix release
Compatibility
RethinkDB 2.2.3 servers cannot be mixed with servers running RethinkDB 2.2.1 or earlier
in the same cluster.
No migration is required when upgrading from RethinkDB 2.2.0 or higher. Please read the
RethinkDB 2.2.0 release notes if you're upgrading from an
older version.
Bug fixes
- Fixed a bug in the changefeed code that caused crashes with the message
Guarantee failed: [env.has()]
(#5238) - Fixed a crash in
r.http
when using pagination (#5256) - Fixed a bug that made
orderBy.limit
changefeeds prevent other changefeeds on the same
table from becoming ready (#5247) - Replaced a call to the deprecated
Object#timeout
function in the Ruby driver (#5232)
2.2.2 — Modern Times
Bug fix release
Compatibility
RethinkDB 2.2.2 servers cannot be mixed with servers running RethinkDB 2.2.1 or earlier
in the same cluster. The protocol change was necessary to address correctness issues in
the changefeed implementation.
No migration is required when upgrading from RethinkDB 2.2.0 or higher. Please read the
RethinkDB 2.2.0 release notes if you're upgrading from an
older version.
Bug fixes
- Server
- Fixed an issue causing
include_initial
changefeeds to miss changes (#5216) - Fixed an issue causing
include_initial
changefeeds to stall and never reach the
"ready"
state (#5157) - Fixed an issue causing
include_initial
changefeeds to emit unexpected initial
results with anull
value (#5153) - Improved the efficiency of
skip
in combination withlimit
(#5155) - Fixed an issue with determinism checking in geospatial commands (#5130)
- Fixed an invalid memory access that caused segmentation faults on ARM (#5093)
- Fixed a crash with "Unreachable code" when migrating from versions of RethinkDB older
than 1.16 (#5158) - Fixed an issue where the server would send an extra response to the client after
a cursor completed (#5159) - Fixed a build dependency issue with OpenSSL on OS X 10.11 (#4963)
- Fixed compiler warnings on ARM (#4541)
- Made the APT repository compatible with APT 1.1 (#5174)
- Fixed an issue causing
- Drivers
- Fixed missing backtraces on
ReQLCompileError
in the JavaScript driver (#4803) - Upgraded the version of CoffeeScript used to compile the JavaScript driver in order
to avoid errors in strict mode (#5198) - Fixed a syntax error warning in the Python driver during installation on older Python
versions (#4702) rethinkdb restore
now waits for tables to be available (#5154)
- Fixed missing backtraces on
2.2.1 — Modern Times
Bug fix release
Compatibility
RethinkDB 2.2.1 is fully compatible with RethinkDB 2.2.0. Please read the RethinkDB 2.2.0 release notes if you're upgrading from an older version.
Bug fixes
- Fixed a crash with the message "Guarantee failed: [found_hash_pair]" when running
getAll
queries (#5085) rethinkdb export
andrethinkdb dump
now limit the number of subprocesses to
reduce memory consumption (#4809)- Fixed a segmentation fault in
orderBy.limit
changefeeds (#5081) - Fixed a crash when using
getAll
with illegal keys (#5086) r.uuid
is now considered a deterministic operation if it is passed a single
argument (#5092)- Fixed the "Task was destroyed but it is pending!" error when using the
asyncio
event loop on Python (#5043)
2.2.0 — Modern Times
RethinkDB 2.2 introduces atomic changefeeds. Atomic changefeeds include existing values
from the database into the changefeed result, and then atomically transition to streaming
updates.
Atomic changefeeds make building realtime apps dramatically easier: you can use
a single code path to populate your application with initial data, and continue receiving
realtime data updates.
This release also includes numerous performance and scalability improvements designed to
help RethinkDB clusters scale to larger sizes while using fewer resources.
Read the blog post for more details.
Compatibility
Data files from RethinkDB version 1.16 onward will be automatically migrated.
As with any major release, back up your data files before performing the upgrade.
If you're upgrading from RethinkDB 1.14.x or 1.15.x, you need to migrate your secondary
indexes first. You can do this by following these steps:
- Install RethinkDB 2.0.5.
- Update the RethinkDB Python driver (
sudo pip install 'rethinkdb<2.1.0'
). - Rebuild your indexes with
rethinkdb index-rebuild
.
Afterwards, you can install RethinkDB 2.2 and start it on the existing data files.
If you're upgrading directly from RethinkDB 1.13 or earlier, you will need to manually
upgrade using rethinkdb dump
.
API-breaking changes
- Changefeeds on
.orderBy.limit
as well as.get
queries previously provided
initial results by default. You now need to include the optional argument
includeInitial: true
to.changes
to achieve the same behavior. - The deprecated protocol buffer driver protocol is no longer supported. The newer JSON
protocol is now the only supported driver protocol. Older drivers using the deprecated
protocol no longer work with RethinkDB 2.2.0. See the drivers list for
up-to-date drivers.- If you're using Java, please note that at the time of writing, existing community
drivers have not been updated to use the newer JSON protocol. However, an
official Java driver is in active development and will be available
soon.
- If you're using Java, please note that at the time of writing, existing community
- Certain argument errors that used to throw
ReqlDriverError
exceptions now throw
ReqlCompileError
exceptions. See #4669 for a full list of changes.
Supported distributions
RethinkDB 2.2.0 now comes with official packages for Ubuntu 15.10 (Wily Werewolf) and
CentOS 7.
We no longer provide packages for Ubuntu 10.04 (Lucid Lynx), which has reached end of
life.
New features
- Added full support for atomic changefeeds through the
include_initial
optarg (#3579) - Added a
values
command to obtain the values of an object as an array (#2945) - Added a
conn.server
command to identify the server for a given connection (#3934) - Extended
r.uuid
to accept a string and work as a hash function (#4636)
Improvements
- Server
- Improved the scalability of range queries on sharded tables (#4343)
- Improved the performance of
between
queries on secondary indexes (#4862) - Reduced the memory overhead for large data sets (#1951)
- Redesigned the internal representation of queries to improve efficiency (#4601)
- Removed the deprecated protocol buffer driver protocol (#4601)
- Improved the construction of secondary indexes to make them resumable and to reduce
their impact on any production workload (#4959) - Improved the performance when using
getAll
with a secondary index in some edge cases
(#4948) - Removed the limit of 1024 concurrent changefeeds on a single connection (#4732)
- Implemented automatically growing coroutine stacks to avoid stack overflows (#4462)
- Optimized the deserialization of network messages to avoid an extra copy (#3734)
- Added a
raft_leader
field to a table's status to expose its current Raft leader
(#4902) - Made the handling of invalid lines in the
'logs'
system table more robust (#4929)
- ReQL
indexStatus
now exposes the secondary index function (#3231)- Added an optarg called
changefeed_queue_size
to specify how many changes the server
should buffer on a changefeed before generating an error (#3607) - Extended
branch
to accept an arbitrary number of conditions and values (#3199) - Strings can now contain null characters (except in primary keys) (#3163)
- Streams can now be coerced directly to an object (#2802)
- Made
coerceTo('BOOL')
consistent withbranch
(#3133) - Changefeeds on
filter
andmap
queries involving geospatial terms are now allowed
(#4063) - Extended
or
andand
to accept zero arguments (#4132)
- Web UI
- The Data Explorer now allows executing only parts of a query be selecting them (#4814)
- All drivers
- Improved the consistency of ReQL error types by throwing
ReqlCompileError
rather
thanReqlDriverError
for certain errors (#4669)
- Improved the consistency of ReQL error types by throwing
- JavaScript driver
- Added an
eachAsync
method on cursors that behaves likeeach
but also returns a
promise (#4784)
- Added an
- Python driver
Bug fixes
- Server
- Fixed a segmentation fault that could happen when disconnecting a server while
having open changefeeds (#4972) - Updated the description of the
--server-name
parameter inrethinkdb --help
(#4739) - Fixed a crash with the message "Guarantee failed: [ts->tv_nsec >= 0 &&
ts->tv_nsec < (1000LL * (1000LL * 1000LL))] " (#4931) - Fixed a problem where backfill jobs didn't get removed from the
'jobs'
table (#4923) - Fixed a memory corruption that could trigger a segmentation fault during
getIntersecting
queries (#4937) - Fixed an issue that could stop data files from RethinkDB 1.13 from migrating properly
(#4991) - Fixed a "Guarantee failed: [pair.second] key for entry_t already exists" crash when
rapidly reconnecting servers (#4968) - Fixed an "Uncaught exception of type interrupted_exc_t" crash (#4977)
- Added a check to catch
r.minval
andr.maxval
values when writing to the
'_debug_scratch'
system table (#4032)
- Fixed a segmentation fault that could happen when disconnecting a server while
- ReQL
- JavaScript driver
- Object keys in
toString
are now properly quoted (#4997)
- Object keys in
Contributors
Many thanks to external contributors from the RethinkDB community for helping
us ship RethinkDB 2.2. In no particular order:
- Peter Hollows (@captainpete)
- Zhenchao Li (@fantasticsid)
- Marshall Cottrell (@marshall007)
- Adam Grandquist (@grandquista)
- Ville Immonen (@fson)
- Matt Broadstone (@mbroadst)
- Pritam Baral (@pritambaral)
- Elian Gidoni (@eliangidoni)
- Mike Mintz (@mikemintz)
- Daniel Compton (@danielcompton)
- Vinh Quốc Nguyễn (@kureikain)
- Shayne Hodge (@schodge)
- Alexander Zeillinger (@alexanderzeillinger)
- Ben Gesoff (@bengesoff)
- Dmitriy Lazarev (@wKich)
- Chris Gaudreau (@clessg)
- Paweł Świątkowski (@katafrakt)
- Wang Zuo (@wangzuo)
- Chris Goller (@goller)
- Mateus Craveiro (@mccraveiro)