May 26, 2020
This page lists additions and changes in v20.1.1 since v20.1.0.
- For a comprehensive summary of features in v20.1, see the v20.1 GA release notes.
- To upgrade to v20.1, see Upgrade to CockroachDB v20.1
A denial-of-service (DoS) vulnerability is present in CockroachDB v20.1.0 - v20.1.10 due to a bug in protobuf. This is resolved in CockroachDB v20.1.11 and later releases. When upgrading is not an option, users should audit their network configuration to verify that the CockroachDB HTTP port is not available to untrusted clients. We recommend blocking the HTTP port behind a firewall.
For more information, including other affected versions, see Technical Advisory 58932.
Cockroach Labs has discovered a bug relating to incremental backups, for CockroachDB v20.1.0 - v20.1.13. If a backup coincides with an in-progress index creation (backfill), RESTORE
, or IMPORT
, it is possible that a subsequent incremental backup will not include all of the indexed, restored or imported data.
Users are advised to upgrade to v20.1.15 or later, which includes resolutions.
For more information, including other affected versions, see Technical Advisory 63162.
Get future release notes emailed to you:
Downloads
Docker image
$ docker pull cockroachdb/cockroach:v20.1.1
Backward-incompatible changes
- The copy of
system
andcrdb_internal
tables extracted bycockroach debug zip
is now written using theTSV
format (inside the .zip file), instead of an ASCII-art table. #48094 - Updated the textual error and warning messages displayed by
cockroach quit
. #47692 cockroach quit
now prints progress details on its standard error stream, even when--logtostderr
is not specified. Scripts that wish to ignore this output can redirect the standard error stream. #47692- CockroachDB v20.1 introduced an experimental new rule for the
--join
flag causing it to prefer SRV records, if present in DNS, to look up the peer nodes to join. However, it is also found to cause disruption in in certain deployments. To reduce this disruption and UX surprise, the feature is now gated behind a new command-line flag--experimental-dns-srv
which must now be explicitly passed tocockroach start
to enable it. #49129 - Added a new cluster setting,
server.shutdown.lease_transfer_wait
, that allows you to configure the server shutdown timeout period for transferring range leases to other nodes. Previously, the timeout period was not configurable and was set to 5 seconds, and the phase of server shutdown responsible for range lease transfers would give up after 10000 attempts of transferring replica leases away. The limit of 10000 attempts has been removed, so that now only the maximum durationserver.shutdown.lease_transfer_wait
applies. #47692
General changes
- The statement diagnostics bundle now contains a new file,
trace-jaeger.json
, that can be manually imported in Jaeger for visualization. #47432
Enterprise edition changes
- Fixed a bug where the job ID of a lagging changefeed would be omitted, and instead it would be reported as sinkless. #48562
SQL language changes
- The
pg_collation
,pg_proc
,pg_database
, andpg_type
tables in thepg_catalog
database no longer require privileges on any database in order for the data to be visible. #48080, #48765 - Histogram collection with
CREATE STATISTICS
is no longer supported on columns with typearray
. Only row count, distinct count, and null count are collected for array-type columns. #48343 ROLLBACK TO SAVEPOINT
is no longer permitted after miscellaneous internal errors. #48305- Fixed an issue with optimizing subqueries involving set operations that can prevent queries from executing. #48680
- CockroachDB now correctly reports the type length for the
char
type. #48642 - The
RowDescription
message of the wire-level protocol now contains the table ID and column ID for each column in the result set. These values correspond topg_attribute.attrelid
andpg_attribute.attnum
. If a result column does not refer to a simple table or view, these values will be zero, as they were before. The message also contains the type modifier for each column in the result set. This corresponds topg_attribute.atttypmod
. If it is not available, the value is-1
, as it was before. #48748, #49087
Command-line changes
cockroach debug zip
now tries multiple times to retrieve data using SQL if it encounters retry errors and skips over fully decommissioned nodes. It also supports two command-line parameters--nodes
and--exclude-nodes
. When specified, they control which nodes are inspected when gathering the data. This makes it possible to focus on a group of nodes of interest in a large cluster, or to exclude nodes thatcockroach debug zip
would have trouble reaching otherwise. Both flags accept a list of individual node IDs or ranges of node IDs, e.g.,--nodes=1,10,13-15
. #48094- Client commands such as
cockroach init
andcockroach quit
now support the--cluster-name
and--disable-cluster-name-verification
flags in order to support running them on clusters that have been configured to use a cluster name. Previously it was impossible to run such commands against nodes configured with the--cluster-name
flag. #48016 - It is now possible to drain a node without shutting down the process, using the
cockroach node drain
command. This makes it easier to integrate with service managers and orchestration: it now becomes safe to issuecockroach node drain
and then separately stop the service via a process manager or orchestrator. Without this new mode, there is a risk to misconfigure the service manager to auto-restart the node after it shuts down viaquit
, in a way that's surprising or unwanted. The new commandnode drain
also recognizes the new--drain-wait
flag. #47692 - The time that
cockroach quit
waits client-side for the node to drain (remove existing clients and push range leases away) is now configurable via the command-line flag--drain-wait
. Note that separate server-side timeouts also apply separately. Check theserver.shutdown.*
cluster settings for details. #47692 - The commands
cockroach quit
andcockroach node drain
now report a "work remaining" metric on their standard error stream. The value reduces until it reaches0
to indicate that the graceful shutdown has completed server-side. An operator can now rely oncockroach node drain
to obtain confidence of a graceful shutdown prior to terminating the server process. #47692 - The default value of the parameter
--drain-wait
forcockroach quit
has been increased from 1 minute to 10 minutes, to give more time for nodes with thousands of ranges to migrate their leases away. #47692 - Added support for
list cert
with certificates which require--cert-principal-map
to pass validation. #48177 - Added support for the
--cert-principal-map
flag in thecockroach cert
,cockroach sql
,cockroach init
, andcockroach quit
commands. #48177 - Made
--storage-engine
sticky (i.e., resolve to the last used engine type when unspecified) even when specified stores are encrypted at rest. #49073
Admin UI changes
- Fixed a bug where
Raft log too large
was reported incorrectly for replicas for which the raft log size is not to be trusted. #48286 - Fixed a bug where a multi-node cluster without localities defined wouldn't be able to render the Network Latency page. #49191
- Fixed a bug where link to specific problem ranges had an incorrect path. Problem ranges are now linked correctly again. #49188
Bug fixes
- Fixed a bug where vectorized queries on composite datatypes could sometimes return invalid data. #48463
- Fixed a bug that could lead to data corruption or data loss if a replica was both the source of a snapshot and was being concurrently removed from the range and certain specific conditions exist inside RocksDB. This scenario is rare, but possible. #48321
- Fixed a bug where the migration for ongoing schema change jobs would cause the node to panic with an "index out of bounds" error upon encountering a malformed table descriptor with no schema change mutation corresponding to the job to be migrated. #48838
- Fixed an error where instead of returning a parsing error in queries with
count(*)
CockroachDB could incorrectly return no output (when the query was executed via row-by-row engine). #47485 - Fixed a bug where CockroachDB was incorrectly releasing memory used by hash aggregation. #47518
cockroach debug zip
can now successfully avoid out-of-memory errors when extracting very largesystem
orcrdb_internal
tables. It will also report an error encountered while writing the end of the output ZIP file. #48094- Removed redundant metadata information for subqueries and postqueries in
EXPLAIN (VERBOSE)
output. #47975 TRUNCATE
can now run on temporary tables, fixing a bug in v20.1 where temporary tables could not be truncated, resulting in an errorunexpected value: nil
. #48078- Fixed a bug in which
(tuple).*
was only expanded to the first column in the tuple and the remaining elements were dropped. #48290 - Fixed case where
PARTITION BY
andORDER BY
columns in window specifications were losing qualifications when used inside views. #47715 - CockroachDB will no longer display a severe
internal error
upon certain privilege check failures viapg_catalog
built-in functions. #48242 - Fixed a bug where a read operation in a transaction with a past savepoint rollback would give an internal error for exceeding the maximum count of results requested #48165
- The distinction between delete jobs for columns and dependent jobs for deleting indices, views and sequences is now better defined. #48259
- Fixed incorrect results that could occur when casting negative intervals or timestamps to type
decimal
. #48345 - Fixed an error that occurred when statistics collection was explicitly requested on a column with type
array
. #48343 - Fixed a nil pointer dereference in Pebble's block cache due to a rare "double free" of a block. #48346
- Fixed Pebble to properly mark
sstables
for compaction which contain range tombstones. This matches the behavior when using RocksDB and ensures that space used for temporary storage is reclaimed quickly. #48346 - Fixed a bug introduced in v20.1 that could cause multiple index GC jobs to be created for the same schema change in rare cases. #47818
- Fixed a bug where CockroachDB could return an internal error when performing a query with
CASE
,AND
,OR
operators in some cases when it was executed via the vectorized engine. #48072 - Fixed a rare bug where stats were not automatically generated for a new table. #48027
- Fixed a panic that could occur when
SHOW RANGES
orSHOW RANGE FOR ROW
was called with a virtual table. #48347 - Made SRV resolution non-fatal for join list records to align with the standard and improve reliability of node startup. #48349
- Fixed a rare bug causing a range to deadlock and all the writes to the respective range to timeout. #48303
- Fixed a long-standing bug where HTTP requests would start to fail with error 503 "
transport: authentication handshake failed: io: read/write on closed pipe
" and never become possible again until the node is restarted. #48456 - When processing
--join
, invalid SRV records with port number0
are now properly ignored. #48527 - Fixed a bug where
SHOW STATISTICS USING JSON
contained incorrect single quotes for strings with spaces inside histograms. #48544 - Fixed a bug where the two settings
kv.range_split.by_load_enabled
andkv.range_split.load_qps_threshold
were incorrectly marked as non-public in the output ofSHOW CLUSTER SETTINGS
. #48585 - You can no longer drop databases that contain tables which are currently offline due to
IMPORT
orRESTORE
. Previously dropping a database in this state could lead to a corrupted schema which prevented running backups. #48606 - Fixed a bug preventing timestamps from being closed which could result in failed follower reads or failure to observe resolved timestamps in changefeeds. #48682
- Fixed
debug encryption-status
and the Admin UI display of encryption status when using Pebble. #47995 - CockroachDB now deletes the partially imported data after an
IMPORT
fails or is canceled. #48605 - Fixed a bug where the
SHOW CREATE
statement would sometimes show a partitioning step for an index that has been dropped. #48768 - Re-allowed
diagnostics.forced_sql_stat_reset.interval
,diagnostics.sql_stat_reset.interval
andexternal.graphite.interval
to set to their maximum values (24hr, 24hr and 15min respectively). #48760 - Fixed a bug where CockroachDB could encounter an internal error when a query with
LEFT SEMI
orLEFT ANTI
join was performed via the vectorized execution engine. This is likely to occur only withvectorize=on
setting. #48751 - Fixed a bug where running
cockroach dump
on tables with interleaved primary keys would erroneously include an extraCREATE UNIQUE INDEX "primary" ... INTERLEAVE IN PARENT
statement in the dump output. This made it impossible to reimport dumped data without manual editing. #48776 - Fixed a bug where running
cockroach dump
on a table with collated strings would omit the collation clause for the data insertion statements. #48832 - CockroachDB now properly restores tables that were backed up while they were in the middle of a schema change. #48850
- Manually writing a
NULL
value into thesystem.users
table for thehashedPassword
column will no longer cause a server crash during user authentication. #48836 - Fixed a bug where in rare circumstances, CockroachDB may fail to open a store configured to use the Pebble storage engine. #49080
- Fixed a bug where the storage engine, when configured to use the Pebble storage engine, would return duplicate keys, causing incorrect or inconsistent results. #49080
- Fixed a bug where columns of a table could not be dropped after a primary key change. #49088
- Fixed a bug which falsely indicated that
kv.closed_timestamp.max_behind_nanos
was almost always growing. #48716 - Fixed a bug where changing the primary key of a table that had partitioned indexes could cause indexes to lose their zone configurations. In particular, the indexes rebuilt as part of a primary key change would keep their partitions but lose the zone configurations attached to those partitions. #48827
- Fixed costing of lookup join with a limit on top, resulting in better plans in some cases. #49137
- Fixed a bug where on dropping a database, it would not drop the entry for its public schema in the
system.namespace
table. #49139 SHOW BACKUP SCHEMAS
no longer shows table comments as they may be inaccurate. #49130- Fixed a memory leak which can affect changefeeds performing scans of large tables. #49161
- Prevented namespace orphans (manifesting as
database "" not found
errors) when migrating from v19.2. #49200 - Fixed a bug that caused query failures when using arrays in window functions. #49238
Performance improvements
- Disabled the Go runtime block profile by default which results in a small but measurable reduction in CPU usage. The block profile has diminished in utility with the advent of mutex contention profiles and is almost never used during performance investigations. #48153
- The cleanup job which runs after a primary key change to remove old indexes, which blocks other schema changes from running, now starts immediately after the primary key swap is complete. This reduces the amount of waiting time before subsequent schema changes can run. #47818
- Histograms used by the optimizer for query planning now have more accurate row counts per histogram bucket, particularly for columns that have many null values. The histograms also have improved cardinality estimates. This results in better plans in some cases. #48626, #48646
- Fixed a bug that caused a simple schema change to take more than 30s. #48621
- Queries run via the vectorized execution engine are now processed faster, with most noticeable gains on the queries that output many rows. #48732
- Reduced time needed to run a backup command when it is built on a lot of previous incremental backups. #48772
Doc updates
- Added a tutorial on using Flyway with CockroachDB. #7329
Contributors
This release includes 94 merged PRs by 27 authors. We would like to thank the following contributors from the CockroachDB community:
- Drew Kimball (first-time contributor)