Skip to content

Releases: rethinkdb/rethinkdb

2.3.1 — Fantasia

23 Apr 02:13
Compare
Choose a tag to compare

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 a changes
      command (#5696)
    • Fixed an issue that caused the returnChanges: "always" option of the insert
      command to miss certain types of errors in the changes 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)
  • JavaScript driver
    • Renamed the username option of the r.connect command to user. The username
      option is still supported for backwards-compatibility with existing code (#5659)
    • Improved the error message shown when connecting with the 2.3 driver to an older
      server (#5667)
  • Python driver
    • Improved the error message that is emitted when trying to connect to a server with a
      wrong password (#5624)
    • Fixed the "global name 'options' is not defined" bug in the rethinkdb import script
      (#5637)
    • Fixed a Python 3 incompatibility in the rethinkdb restore script (#5647)
  • Java driver
    • Implemented the timeout option for getNext (#5603)
    • Losing the server connection while having a changefeed open now correctly results in
      an error (#5660)
    • The driver now caches authentication nonces in order to speed up connection setup
      (#5614)

Contributors

Many thanks to external contributors from the RethinkDB community for helping
us ship RethinkDB 2.3.1. In no particular order:

2.3.0 — Fantasia

06 Apr 15:57
Compare
Choose a tag to compare

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 and r.reconfigure can no longer be called on the
    global r 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 the insert command will now add
    {error: "..."} documents to the changes array if the insert fails for some
    documents. Previously failed documents were simply omitted from the changes result.
  • The special values r.minval and r.maxval are no longer permitted as return values
    of secondary index functions.

Deprecated APIs

  • The JavaScript each function is deprecated in favor of eachAsync. In a
    future release, each will be turned into an alias of eachAsync. 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 about eachAsync in the documentation.
  • The auth_key option to connect in the official drivers is deprecated in favor of
    the new user and password options. For now, a provided auth_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 the grant 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 new connected_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)
  • ReQL
    • Added an interleave option to the union 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 the returnChanges option is used. (#5041)
    • Added an includeOffsets option to the changes command to obtain the positions
      of changed elements in an orderBy.limit changefeeds. (#5334)
    • Added an includeTypes option to the changes command that adds a type 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 and getAll commands can now be called with zero arguments.
      (#4696, #2588)
    • Disallowed calling r.wait, r.rebalance and r.reconfigure on the global scope to
      avoid confusing semantics. (#4382)
    • The count and slice 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)
  • Performance
    • Implemented efficient batching for distributed joins using the eqJoin command.
      (#5115)
    • Optimized tableCreate to complete more quickly. (#4746)
    • Reduced the CPU overhead of ReQL function calls and term evaluation. (no issue number)
  • Web UI
    • The web UI now uses the conn.server() command for getting information about the
      connected server. (#5059)
  • All drivers
    • Implemented a new protocol handshake and added user and password options to the
      connect method to enable user authentication. (#5458, #5459, #5460, #5461)
    • Added clientPort and clientAddress functions to the connection objects in the
      JavaScript, Python and Ruby drivers. (#4796)
  • JavaScript driver
    • Added new variants of the cursor.eachAsync function. (#5056)
    • Added a concurrency option for cursor.eachAsync. (#5529)
    • r.min, r.max, r.sum, r.avg and r.distinct now accept an array argument
      (#4594)
  • 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 the rethinkdb restore and rethinkdb dump
      commands. (#5399)
    • Added a --tls-cert option to the rethinkdb import, rethinkdb export,
      rethinkdb dump, rethinkdb restore and rethinkdb index-rebuild commands to enable
      TLS connections. (#5330)
    • Added --password and --password-file options to the rethinkdb import,
      rethinkdb export, rethinkdb dump, rethinkdb restore and
      rethinkdb index-rebuild commands to connect to password-protected servers. (#5464)
    • Added a --format ndjson option to rethinkdb export that allows exporting tables
      in a newline-separated JSON format. (#5101)
    • Made rethinkdb dump rethinkdb restore and rethinkdb import able to write to
      stdout and load data from stdin respectively. (#5525, #3838)
    • r.min, r.max, r.sum, r.avg and r.distinct now accept an array argument
      (#5494)
  • 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 with r.minval or
      r.maxval values inside of an array. (#5542)
    • Fi...
Read more

2.2.6 — Modern Times

28 Mar 18:08
Compare
Choose a tag to compare

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 the map command on
    a combination of empty and non-empty input streams (#5481)
  • The result of conn.server() now includes a proxy 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 the backports.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:

2.2.5 — Modern Times

24 Feb 23:33
Compare
Choose a tag to compare

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:

2.2.4 — Modern Times

01 Feb 19:17
Compare
Choose a tag to compare

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

01 Feb 19:14
Compare
Choose a tag to compare

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

  • 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)

2.2.3 — Modern Times

11 Jan 20:22
Compare
Choose a tag to compare

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

21 Dec 09:02
Compare
Choose a tag to compare

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 a null value (#5153)
    • Improved the efficiency of skip in combination with limit (#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)
  • 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)

2.2.1 — Modern Times

17 Nov 09:14
Compare
Choose a tag to compare

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 and rethinkdb 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

12 Nov 15:26
Compare
Choose a tag to compare

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.
  • 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 with branch (#3133)
    • Changefeeds on filter and map queries involving geospatial terms are now allowed
      (#4063)
    • Extended or and and 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
      than ReqlDriverError for certain errors (#4669)
  • JavaScript driver
    • Added an eachAsync method on cursors that behaves like each but also returns a
      promise (#4784)
  • Python driver
    • Implemented an API to override the default JSON encoder and decoder (#4825, #4818)

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 in rethinkdb --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 and r.maxval values when writing to the
      '_debug_scratch' system table (#4032)
  • ReQL
    • Fixed the error message that's generated when passing in a function with the wrong
      arity (#4189)
    • Fixed a regression that caused r.asc("test") to not fail as it should (#4951)
  • JavaScript driver
    • Object keys in toString are now properly quoted (#4997)

Contributors

Many thanks to external contributors from the RethinkDB community for helping
us ship RethinkDB 2.2. In no particular order: