Release Notes for Beta-20161201

What's new in CockroachDB beta-20161201

Happy Thursday!

This week's release is 'yuge and includes a whopping 292 PRs. Inside you'll find all the things you've come to expect - performance improvements, bug fixes, SQL language changes, Admin UI improvements, and the like. 
We've also released instructions for how to deploy CockroachDB on GCEAWS, and Digital Ocean, and Azure.

You can download the new beta here.


We would like to thank the following contributors from the CockroachDB community, including first-time contributors Christian Gati, Dustin Hiatt, kiran, and Nathan Johnson.

  • Christian Gati
  • Dustin Hiatt
  • Haines Chan
  • kiran
  • Nathan Johnson
  • songhao
  • yznming

The Cockroach Labs Team

Upgrade Notes

Due to changes in the on-disk format of internal range leases, this release cannot be run concurrently with any prior release. All servers running older versions must be stopped before starting any node with this version. #10420

We realize that “stop the world” upgrades are overly interruptive and are actively working on infrastructure improvements to drastically reduce the need for such upgrades in the future.

Build Changes

  • CockroachDB now vendors its dependencies, so building from source no longer interferes with other project in the $GOPATH. #9900

SQL Language Changes

  • Adding a FOREIGN KEY constraint now automatically creates necessary indexes. #9572
  • The pg_catalog.pg_roles, pg_catalog.pg_description, pg_catalog.pg_settings, and pg_catalog.pg_index tables are now supported. #10377 #10381 #10293 #10548 #10592
  • The pg_catalog.pg_depend table is now partially supported (just enough to support pgjdbc). #10696
  • pg_catalog tables now report databases as belonging to PostgreSQL-compatible namespaces. This is for compatibility only; CockroachDB does not have a notion of namespaces. #11603
  • The pg_catalog.pg_get_expr and pg_catalog.pg_generate_series functions are now supported. #10952 #11214
  • The conkey and confkey columns of the pg_catalog.pg_constraint table now return real integer arrays. #10584
  • New functions from_ip() and to_ip() convert between binary and textual IP address formats. #10349
  • Tuple types can now be returned by queries. #10380
  • The SQL standard interval format Y-M-D is now supported. #10499
  • The array_length, array_upper, and array_lower functions are now available. #10565
  • The to_uuid and from_uuid functions are now available. #10541
  • The pow() and div() functions now work when both arguments are integers. #10538
  • The ARRAY[] constructor syntax is now supported. #10585
  • The COLLATE operator is now supported. Collation support is still incomplete and will be improved in upcoming releases. #10605
  • The current_schema function is now supported. #10707
  • The SET APPLICATION_NAME statement is now supported. This is a write-only variable which is used by some frameworks but has no effect. #10725
  • The CREATE DATABASE statement now accepts the options TEMPLATE, LC_COLLATE, and LC_CTYPE for compatibility with PostgreSQL, although the values available for these options are limited. #10775
  • The SELECT statement now supports the WITH ORDINALITY modifier to generate row numbers. #10558

Command-Line Interface Changes

  • Temporary directories are no longer created automatically for logging. Commands other than cockroach start log to stderr if no --log-dir flag is given, and cockroach start writes to the directory of the first store. Various combinations of --log-dir, --logtostderr, and --alsologtostderr now work in more sensible ways. #10675 #10926 #10962
  • The cockroach sql prompt now indicates the status of the current transaction (if any). #10866
  • The --password flag for the cockroach user set command no longer accepts the new password as a command-line argument; instead this flag is a boolean to determine whether a password should be created for the user. The password is always read from stdin. #10680
  • The cockroach user set command no longer prompts for passwords in insecure mode unless --password is given. #10547
  • The cockroach debug compact command now always rewrites all data, allowing it to pick up configuration changes. #10532

Admin UI Changes

  • The design of the navigation elements has been updated. #10611
  • The design of the Database tab has been updated. #10552
  • Syntax highlighting is now used when displaying CREATE TABLE statements. #10579
  • The UI no longer attempts to display information about the virtual databases information_schema and pg_catalog. #10920
  • Metrics for the fraction of available and fully-replicated ranges are now computed more accurately. #11213

Performance Improvements

  • Increased the speed of some mathematical operations (Log, Pow) on DECIMAL values. #11669
  • Reduced rebalancer thrashing by dynamically adjusting how often store capacities are gossiped. #11662
  • Adding new replicas is now prioritized over removing dead ones. #10492 #10683
  • Replicating ranges to a new node is now more reliably performed back-to-back. #10440 #10749
  • The rebalancing system is now less prone to thrashing. #10761
  • Raft log truncation is now aware of pending snapshots. #10482
  • Raft snapshots are now applied more efficiently. #10931
  • Raft now sends log entries in smaller batches. #10929
  • Replica garbage collection is now triggered more reliably by replication changes. #10500
  • Old replicas that are blocking other operations are now prioritized for garbage collection. #10426
  • Small clusters now run their replica scanners more frequently by default. #10433
  • Reduced contention in the command queue for multi-range operations. #10470
  • Operations that have already expired are no longer added to the command queue. #10487
  • Reduced allocations for SQL row data. #10534
  • Reduced memory allocations when encoding dates and times. #10531
  • Parsing hexadecimal literals using the x'' syntax is now more efficient. #10660
  • Time series pruning is now more efficient. #10682
  • Commands that have been canceled by clients no longer accumulate in the internal command queue. #10772
  • When a command that has been retried on multiple replicas succeeds on any of them, any in-flight attempts on the other replicas is canceled. #10970
  • The fast-path for local “RPCs” now uses goroutines to avoid blocking the caller. #11196

Bug Fixes

  • Fixed a bug that caused over-aggressive Raft log truncation, which in turn led to an excessive number of Raft initiated snapshots. #11720
  • Fixed a bug that caused data corruption when upgrading from beta-20161103 to beta-20161110. #10681 #10724
  • A node that is stopped and restarted quickly can no longer produce inconsistent results. #10420
  • Fixed bugs that prevented communication with a node that was previously down. #10642 #10652
  • It is now possible for a new node to start up using the same network address as a node that had previously existed. #10544 #10699
  • Replication snapshots now release their resources earlier, preventing deadlocks. #10491
  • Fixed a bug with time series garbage collection when the time series data spans multiple ranges. #10400
  • Fixed several bugs with very large DECIMAL values or very small fractions. #10446 #10559 #10570 #10934
  • The pow() function now returns an error when its arguments are too large. #10525
  • Fixed a crash when the number of placeholders in a query doesn’t match the number of arguments. #10474
  • Improved error handling when a SQL transaction exceeds an internal deadline. #9906
  • Fixed a panic in raft leadership transfers. #10530
  • Fixed a leak in CREATE TABLE AS and CREATE VIEW. #10527
  • Fixed a panic “range lookup of meta key found only non-matching ranges”. #10583
  • The consistency checker now runs to completion instead of canceling itself before finishing. #10625
  • Internal retries no longer cause transaction replay errors. #10639
  • The cockroach sql command no longer crashes when given a URL without a username. #10862
  • Fixed a deadlock in RemoveReplica. #10875
  • result is ambiguous errors are now returned in more situations. #10703 #11211
  • The ALTER TABLE SPLIT AT command will now retry internally instead of returning errors about conflicting updates. #10728
  • Fixed a panic that could occur when a node is restarted after an unclean shutdown. #10690
  • Fixed a panic when replicas are removed and re-added rapidly. #11699
  • The sign() function with a DECIMAL argument now returns a decimal rather than a float. #10954
  • Fixed a panic in the raft tick loop. #11622
  • The LIMIT operator now works correctly in INSERT ... SELECT. #11632

Doc Updates