What's new in the YugabyteDB v2.20 LTS release series
Release announcements
Release notes
What follows are the release notes for the YugabyteDB v2.20 release series. Content will be added as new notable features and changes are available in the patch releases of the YugabyteDB v2.20 release series.
For an RSS feed of all release series to track the latest product updates, point your feed reader to the RSS feed for releases.
Technical Advisories
v2.20.8.0 - December 2, 2024
Build: 2.20.8.0-b53
Third-party licenses: YugabyteDB, YugabyteDB Anywhere
Downloads
Docker
docker pull yugabytedb/yugabyte:2.20.8.0-b53
Improvements
YSQL
- Reverts the unused
epoch
code in YsqlBackendsManager to the originalterm
. #21217 - Reduces the YSQL catalog lease period to 10 seconds with a new flag
master_ts_ysql_catalog_lease_ms
. #21249
Bug fixes
YSQL
- Minimizes CREATE INDEX delays during master leader changes or cluster startups. #21251
- Enhances performance during nested loop joins by ensuring correct limit resets in colocated index scans. #24560
- Enhances indexing by allowing batching of
PlaceHolderVar
in parameterized conditions. #24186 - Reduces assert strictness for unbatchable clauses in YSQL. #22911
DocDB
- Prevents incorrect marking of tablets as over-replicated during startup. #21135
v2.20.7.2 - November 22, 2024
Build: 2.20.7.2-b1
Third-party licenses: YugabyteDB, YugabyteDB Anywhere
Downloads
Docker
docker pull yugabytedb/yugabyte:2.20.7.2-b1
Bug fix
YSQL
- Reduces memory usage spikes by using a new memory context for
RelationBuildTriggers
. #24951
v2.20.7.1 - October 16, 2024
Build: 2.20.7.1-b10
Third-party licenses: YugabyteDB, YugabyteDB Anywhere
Downloads
Docker
docker pull yugabytedb/yugabyte:2.20.7.1-b10
Improvements
DocDB
- Allows reduction of thread stack size to avoid Linux huge page backing. #23927
Bug fixes
DocDB
- Allows the packed row size to exceed its limit during repacking, preventing TServer crash after
alter table add column
commands with a default value. #24050
v2.20.7.0 - September 30, 2024
Build: 2.20.7.0-b58
Third-party licenses: YugabyteDB, YugabyteDB Anywhere
Downloads
Docker
docker pull yugabytedb/yugabyte:2.20.7.0-b58
Improvements
YSQL
- Introduces the
yb_make_next_ddl_statement_nonincrementing
configuration parameter to reduce catalog version increments during many consecutive DDLs, lowering memory and latency spikes. #23786 - Added yb_make_next_ddl_statement_nonincrementing to YbDbAdminVariables for yb_db_admin role. #23786
YCQL
- Updates YCQL tables
system_schema.functions
andsystem_schema.aggregates
to align with Cassandra, aiding Cortex migration. #3893
DocDB
- Enables reduction of duplicate code and custom flag filtering through
GetFlagInfos
relocation. #23632 - Adds
emergency_repair_mode
flag and yb-admin commandsdump_sys_catalog_entries
andwrite_sys_catalog_entry
to address CatalogEntity data corruption issues. #23098
CDC
- Allows dynamic table addition alongside table removal from CDC streams without needing to disable or restart. #23581
- Adds a yb-admin option to disable dynamic table addition when creating new streams. #23482
- Allows automatic cleanup for ineligible tables on CDC streams and improves the removal process by fetching tablet list from a local copy instead of the state table, improving performance. Updates include removal of flag protection for Step-1 and the replacement of the preview flag. #23806
- Enables asynchronous removal of user tables from CDC streams by adjusting how background threads process and persist stream metadata. #23700
yugabyted
- Stops sending gflags details in the callhome diagnostics to eliminate redundant data. #24029
Other
- Updates the callhome URL to use HTTPS for enhanced security. #23947
Bug fixes
YSQL
- Fixes an issue related to regular expression pushdown causing inconsistency and crashes by introducing thread local cache. #22989
- Resets catalog read time after table prefetching to prevent outdated readings for on-demand loading from a master. #23421
- Corrects IndexScan's indextlist to improve accuracy of variable references in subquery scenarios. #22533
- Prevents retry of schema mismatch errors in batched execution mode to maintain transaction atomicity. #23843
- Resolves potential memory corruption by mutating pushdown expressions outside the per tuple context. #23461
- Replaces deprecated function
shared_ptr::unique
to resolve compilation errors on macOS. #24012 - Removes unnecessary DCHECK for smoother rolling upgrades from release 2.20, enhancing
ysql_enable_db_catalog_version_mode
gflag functionality. #23462
DocDB
- Limits response size by omitting per-object details from SysSnapshotEntryPB in ListSnapshotSchedules RPC. #23518
- Reduces the risk of deadlocks when making active read/write requests to a table right after a tablet-split. #23747
- Simplifies handling of large RPC responses by catching errors earlier and appropriately using
narrow_cast
. #22301 - Switches write query duration from
CoarseMonoClock
toMonoClock
for precise nanosecond granularity. #20335 - Refactors to remove an assumption that every tserver hosts tablets, preventing crashes in certain circumstances. #20230
- Sets the
close_timestamp_micros
field for partially copied log segments to prevent time-based policy violation. #23335 - Eliminates persistent logging issue after dropping a colocated table by removing unnecessary logs. #22037
- Corrects leader balancing for geopartitioned tables to prevent early exits and ensure accurate global leader sorting. #23886
CDC
- Prevents tserver crash by giving each thread its own copy of
SchemaDetailsMap
during concurrentGetChanges
calls. #23394, #22962 - Reduces disk IO overhead by optimizing the tablet-meta update process in CDCService. #22805
- Refactors CDCSDK to prevent data loss during workload with single shard transactions by ensuring WAL messages are committed before being replicated. #19294
- Introduces three new yb-admin commands for managing user tables in a CDC stream and addresses a race condition issue by removing an optimization in the
UpdateCheckpointForTabletEntriesInCDCState
method. #22876, #22835, #22773 - Obsoletes expired or unpolled tables from CDC stream and state table, reducing unnecessary resource retention and potential blocking of split tablet deletion. #23367
- Eliminates occurrence of master crashes after table drop by handling non-eligible tables cleanup in CDC stream loading. #23278
yugabyted
- Offers corrected DB OID in the function
calculate_table_size
, now matchingYBCGetDatabaseOid(rel)
for improved reliability. #20030
v2.20.6.0 - August 23, 2024
Build: 2.20.6.0-b66
Third-party licenses: YugabyteDB, YugabyteDB Anywhere
Downloads
Docker
docker pull yugabytedb/yugabyte:2.20.6.0-b66
Improvements
YSQL
- Enhances logging for DDL transaction conflicts and PG catalog version mismatches by including the DDL command tag and specific log details outside of the
log_ysql_catalog_versions
gflag. #20084 - Avoids renaming DocDb tables during legacy rewrite operations to prevent issues with backup/restore and improves handling of failed ADD/DROP primary key, ALTER TYPE operations. #22802
DocDB
- Allows asynchronous DNS cache updating and resolution retry upon failure to reduce RPC call delays and prevent unexpected leadership changes. #22930, #22311
CDC
- Transforms the flag
yb_enable_cdc_consistent_snapshot_streams
from a preview into a default true auto flag. #22984
yugabyted
- Updates the cqlsh version to v3.10-yb-19 for enhanced functionality. #22982
- Reduces
collect_logs
command failures by removing the yugabyted running check even when the yugabyted process is not running. #23210
Bug fixes
YSQL
- Allows YB Admins to run pg_locks without requiring superuser status. #23266
- Now allows for correct backward prefix-based scanning by eliminating the problematic
kGroupEnd
marker that was leading to inaccurate seek results. #22615 - Reduces sequence cache collision by incorporating both database and sequence OIDs as the entry key. #22935
- Allows faster data inserts into tables with identity columns. #22837
- Prevents a crash related to memory release associated with TupleTableSlots in SubPlans during a Values Scan. #22967
- Reduces prefix length in the index when using distinct index scan with included columns. #22822
- Eliminates unnecessary waiting for concurrent transactions in the DEFERRABLE mode for READ ONLY serializable transactions. #23120
DocDB
- Allows restoring a snapshot schedule from a time just before the oldest snapshot, improving usability. #21269
- Fixes issue of scans not honoring timeouts, preventing indefinite reads and reducing CPU usage. #21829
- Adds validation to RPCs
DeleteSnapshot
andRestoreSnapshot
to prevent deletion or use of snapshots involved in ongoing processes. #23055 - Allows the persistent mapping of source-target schema versions when a new table is added to a colocated database, thus preventing replication from stalling after TServer restarts. #23188
- Updates cotable ids in flushed frontiers during a snapshot restore, preventing potential post-restore issues. #23047
- Eliminates latency spikes in conflicting workloads by preventing redundant ProbeTransactionDeadlock rpcs. #22426
- Ensures object drops correctly cascade to dependent columns in the DocDB table, preventing inconsistencies. #22874
- Allows large bytes to be requested on RateLimiter, preventing indefinite call stalling. #23173
- Removes extra reads during the processing of
INSERT INTO ...RETURNS STATUS AS ROW
for CQL tables with a specific primary key, improving system load and efficiency. #23330
CDC
- Resolves an issue preventing newly created tables from being added to the stream metadata and CDC state table after an existing table is dropped, by considering streams in
DELETING_METADATA
state as well asACTIVE
state during dynamic table addition. #20428 - Prevents newly created indexes, materialized views, and non-user tables from being added to the CDC stream metadata. #22808
- Introduces three new yb-admin commands to manage CDC streams, including disabling dynamic table addition, removing specific user tables from CDC streams, and validating CDC state table entries. #22876, #22835, #22773
- Allows removal of expired or unpolled tables from CDC stream metadata and state table, preventing potential blockages. #23367
- Conversion of
cdcsdk_enable_cleanup_of_expired_table_entries
to an auto flag now allows more consistent handling and cleanup of expired tables. #23367 - Refines the logic to remove
BEGIN
record when no DML records are added, preventing potential virtual WAL crashes. #21646 - Allows handling of non-eligible table cleanup in CDC stream loading even after table drop, preventing master crash. #23278
v2.20.5.0 - July 10, 2024
Build: 2.20.5.0-b72
Third-party licenses: YugabyteDB, YugabyteDB Anywhere
Downloads
Docker
docker pull yugabytedb/yugabyte:2.20.5.0-b72
Improvements
YSQL
- Adds new columns to
localhost:13000/statements
for more comprehensive database management, including user and database IDs along with varied block level statistics. #21735
DocDB
- Introduces utility to dump top heap stacks when memory limit is exceeded for enhanced debugging. #21396
- Solves the potential deadlock in
DeleteTabletListAndSendRequests
, while also preventing xrepl tablets deletion due to multiple calls to the function. #22618, #22608 - Shifts tcmalloc profiling code to the Utils folder. #22258
CDC
- Promotes the flag
yb_enable_cdc_consistent_snapshot_streams
from a preview flag to a default true auto flag. #22984 - Introduces three new yb-admin commands for managing user tables in a CDCSDK stream, enabling you to disable dynamic table addition, remove specific user tables from the CDC stream, and validate CDC state table entries for a stream. #22876, #22773
yugabyted
- Updates the cqlsh version to
v3.10-yb-19
for enhanced functionality. #22982
Bug fixes
YSQL
- Fixes an error that occurs when decoding null values from a boolean column sorted as NULLS LAST in a secondary index. #22121
- Fixes YSQL upgrade single connection mode error preventing new connection attempts before the old ones are released. #22283
- Stops Batched Nest Loop (BNL) crashes by ensuring better indexing condition checks. #21954
- Refines the logic to accurately push down join clauses to batched index scans without causing conflicts. #21878
- Reenables rechecking for RowCompareExpressions to accurately handle NULL inputs in scan bound calculations. #22075
- Grants BNL hashtable its own expression context to prevent data overwrites during query execution. #21266
- Makes
yb_get_range_split_clause
robust using PG TRY CATCH block, ensuring YB backup doesn't fail. #22356 - Prevents coredumps by ensuring YSQL webserver destruction upon receiving a termination signal. #18948
- Fixes memory leaks in ybcFetchNextHeapTuple by properly freeing the YBCStatus. #22396
- Allows
CreateNamespaceIfNotExists
function to retry on "already exists" error, preventing race conditions. #22512 - Fixes database OID collision issue by skipping 65535 for database oid allocation. #22598
- Prevents the
IN
expressions on single column from wrongly taking the tuple path, ensuring correct data processing. #22704 - Corrects the YbGetOrdinaryColumnsNeedingPgRecheck function to return table column numbers instead of index numbers, preventing unnecessary data fetches and potential crashes or errors after dropping a column. #22832
- Reduces sequence cache collision by incorporating both database and sequence OIDs as the entry key. #22935
DocDB
- Fix ensures heartbeat processing doesn't blindly overwrite tablet replica state, avoiding potential data corruption. #21836
- Eliminates possible deadlock during setup replication by fixing the order in which locks are acquired. #22376
- Removes unnecessary flush during snapshot deletion, preventing write blocks. #22369
- Resolves a heartbeat metrics issue ensuring full xCluster error information is sent to the new master even during a leader failover, and makes
tserver_heartbeat_metrics_interval_ms
runtime updatable. #22624 - Converted the
ysql_skip_row_lock_for_update
to an auto-flag to resolve compatibility issues during upgrade, preventing incorrect DB record creations that can affect row visibility and integrity. #22057 - Changes the class of
enable_automatic_tablet_splitting
gflag fromkLocalPersisted
(class 2) tokExternal
(class 4) to eliminate setup issues with xCluster configurations. #22088 - Prevents duplicate entries in the sequence data filter used by Snapshot schedules, ensuring successful operations. #22663
- Resolves the issue of
pg_locks
query failure due to missing host node UUID in distributed transactions. #22181 - Prevents premature metric destruction during Prometheus scrapes, resolving non-UTF8 character issues. #22767
- Ensures failed xCluster setup if the xcluster stream state update to
ACTIVE
does not occur. #22601
CDC
- Ensures deletion of MemoryContext after each GetChanges RPC to prevent memory leaks. #22328
- Resolves an issue preventing newly created tables from being added to the stream metadata and CDC state table after an existing table is dropped, by considering streams in
DELETING_METADATA
state as well asACTIVE
state during dynamic table addition. #20428 - Prevents newly created indexes and materialized views from automatically being added to the CDC stream metadata. #22808
- Enables removal of non-eligible tables from Change Data Capture (CDC) streams to prevent unnecessary resource usage. Includes a background thread for dynamic table addition in CDC streams and introduces three new yb-admin commands with the auto flag
enable_cdcsdk_dynamic_tables_disable_option
for better CDC stream management. #22876, #22835, #22773 - Solves an issue where CDCSDK incorrectly deduces tablets as not interesting for stream before reaching the configured time limit. #22383
- Corrects the logic to remove the BEGIN record when no DML records are added to the GetChanges response. #21646
v2.20.4.1 - June 21, 2024
Build: 2.20.4.1-b5
Third-party licenses: YugabyteDB, YugabyteDB Anywhere
Downloads
Docker
docker pull yugabytedb/yugabyte:2.20.4.1-b5
Improvements
DocDB
- Solves the potential deadlock in DeleteTabletListAndSendRequests, while also preventing xrepl tablets deletion due to multiple calls to the function. #22618, #22608
Bug fixes
YSQL
- Makes
yb_get_range_split_clause
robust using PG TRY CATCH block, ensuring YB backup doesn't fail. #22356
DocDB
- Removes unnecessary flush during snapshot deletion, preventing write blocks. #22369
CDC
- Ensures deletion of MemoryContext after each GetChanges RPC to prevent memory leaks. #22328
v2.20.4.0 - May 23, 2024
Build: 2.20.4.0-b50
Third-party licenses: YugabyteDB, YugabyteDB Anywhere
Downloads
Docker
docker pull yugabytedb/yugabyte:2.20.4.0-b50
Improvements
YSQL
- Adds new columns to localhost:13000/statements for more comprehensive database management, including user and database IDs along with varied block level statistics. #21735
YCQL
- Now throws an error when using the unsupported GROUP BY clause in YCQL with autoflag
ycql_suppress_group_by_error
available for compatibility issues. #13956
DocDB
- Updates
AreNodesSafeToTakeDown
to return earlier and deliver a readable error message when hitting a timeout, using a control flag,are_nodes_safe_to_take_down_timeout_buffer_ms
with a default setting of 2 seconds. #21855 - Allows for faster failover in xCluster DR by skipping the cleanup process when
skip_producer_stream_deletion
is set onDeleteUniverseReplicationRequestPB
. Safe for upgrades and rollbacks. #22050
yugabyted
- Allows a smooth restart of the second node in a cluster using the
join
flag without throwing any errors. #20684
Bug fixes
YSQL
- Re-enables the
Storage Rows Scanned
forEXPLAIN (ANALYZE, DIST)
functionality in 2.20 after a successful upgrade fix, enhancing user understanding of data selectivity in filters and index conditions. #21229, #12676 - Safeguards against an out-of-bounds memory write error in HashAggregate plan node with duplicate columns by rectifying array size allocation. Imported tests ensure the fix's robustness. #21122
- Resolves colocation option issues in table creation linked to table rewriting and partitioning. Enhances the
defGetBoolean
function to parse string values "0" and "1" as false and true respectively, and shifts a verification step to a earlier spot in the CREATE TABLE execution path, ensuring successful table partition creation. #20302, #20914 - Corrects checks in YbIsScanCompatible to ensure the right-hand side (RHS) of all bound index conditions, not just inequalities, fits into the left-hand side (LHS) datatype. #21758
- Refines the YbGetOrdinaryColumnsNeedingPgRecheck condition to align with the ybIsTupMismatch implementation, ensuring Postgres rechecks index conditions when the "preliminary check" is skipped due to an invalid target key attnum. #21451
- Ensures pushed down RowCompareExpressions correctly enforce non-null column references, rectifying previous behavior and enhancing data accuracy. #21847
- Delivers consistent error messages for aborted transactions that align with those from serialization and deadlock errors. #21043
YCQL
- Allows the deletion of the Cassandra role in YCQLsh without it regenerating upon cluster restart, by adding a flag to mark if the role was previously created. #21057
DocDB
- Ensures
Create Table
operation fails ifAlter Replication
encounters an error, enhancing the reliability of replication setup. #21732 - Converted the
ysql_skip_row_lock_for_update
to an auto-flag to resolve compatibility issues during upgrade, preventing incorrect DB record creations that can affect row visibility and integrity. #22057 - Modifies memory consumption calculations for pending operations to ensure accurate rejection of new writes at bootstrap, preventing loading failures. #21254
- Allows DML operations on non-replicated databases and blocks DML only on databases in transactional xCluster replication STANDBY mode. Now only databases part of an inbound transactional xCluster replication group in the xCluster safe time map will have DML operations blocked. Also, certain attributes are moved from tserver to TserverXClusterContext. #21245
- Allows viewing of the rpc bind addresses in the master leader UI, especially beneficial in cases like k8s where the rpc bind address with the pod DNS is more useful than the broadcast address. #21959
- Reduces unnecessary logging during checkpoint operations by lowering INFO level logs to DEBUG_LEVEL, enhancing log readability. #21658
- Enhances load balancer efficiency by refining validation logic to block tablet replica additions only for those with a pending delete in progress on the same server, avoiding potential slowdowns during mass tablet replica moves. #21806
- Restores original order of
rpcs_.Shutdown
inTransactionParticipant::Impl::CompleteShutdown
that was altered due to a bad backport commit. #22011 - Stops fatal errors caused by the re-use of remote log anchor session during remote bootstrap from a non-leader peer. This fix ensures shared pointers are accurately tracked for
tablet_peer
objects using the=
operator, preventing unintentional destruction of underlying objects. #22007 - Fixes hidden split parent tablets wrongly appearing as leaderless in the master's leaderless tablet endpoint, ensuring accurate load balance status and preventing potential issues with Point-in-Time Recovery (PITR) operations. #21371
- Addresses an issue where tablet shutdown may be blocked due to a race condition between shutdown request and transaction loader thread. The fix ensures a smoother tablet shutdown process when errors occur during transaction loading or when there is a premature exit from the loader thread. #20587, #20977
CDC
- Prevents failures in decoding change events by refreshing
cached_schema_details
when executing a newGetChanges
request if the client indicates a necessity for the schema. #20698
v2.20.3.1 - May 14, 2024
Build: 2.20.3.1-b2
Third-party licenses: YugabyteDB, YugabyteDB Anywhere
Downloads
Docker
docker pull yugabytedb/yugabyte:2.20.3.1-b2
Bug fix
DocDB
- Converted the
ysql_skip_row_lock_for_update
to an auto-flag to resolve compatibility issues during upgrade, preventing incorrect DB record creations that can affect row visibility and integrity. #22057
v2.20.3.0 - April 9, 2024
Download
Use v2.20.3.1 or later.
New feature
-
Roll back upgrades. Ability to roll back a database upgrade in-place and restore the cluster to its state before the upgrade. You can roll back a database upgrade only to the pre-upgrade release. EA
-
Added support for Red Hat Enterprise Linux 9.3 on x86-based systems. Refer to Operating system support for the complete list of supported operating systems.
Improvements
YSQL
- Alters temporary namespace naming in YB to
pg_temp_<tserver-uuid>_<backend_id>
frompg_temp_<backend_id>
, making them unique across nodes and preventing temp tables overwriting or deletion. #19255 - Treats
REFRESH MATERIALIZED VIEW
as a non-disruptive change, preventing unnecessary transaction terminations. The default option,REFRESH MATERIALIZED VIEW NONCONCURRENTLY
, modifies metadata but without making a disruptive alteration. #20420 - Displays distinct prefix keys explicitly in the explain output, enhancing the clarity of indexing for users. #20831
- Allows correct initialization and propagation of
ybDataSent
andybDataSentForCurrQuery
flags for both parent and child transactions, for enhanced error handling and retry mechanism. #18638 - Optimizes the
get_tablespace_distance
function, enhancing the speed of theyb_is_local_table
YSQL function. Reduces query time by cachingGeolocationDistance
value. #20860
DocDB
- Limits the number of rows returned per transaction per tablet in
pg_locks
to avoid potential memory issues during batch inserts, and includes additional fields to indicate partial lock info. #20765 - Introduces a new YSQL configuration parameter
yb_locks_txn_locks_per_tablet
to limit the number of rows returned by pg_locks, preventing the system from running out of memory during large transactions. #19934 - Introduces a new metric for untracked memory which eliminates the need to hardcode child memory trackers. Now users can effortlessly monitor untracked memory for better resource management. #18683
- Limits the number of tablets per node, and hastens reaching the desired number of tablets by lowering the values of FLAGS_tablet_split_low_phase_shard_count_per_node to 1 and FLAGS_tablet_split_low_phase_size_threshold_bytes to 128_MB. #20579
- Adds a new retrying master-to-master task, allowing for the API
AreNodesSafeToTakeDown
to check if it's safe to remove or upgrade certain nodes without disrupting overall cluster health. #17562 - Introduces
AreNodesSafeToTakeDown
API that ensures safe node removals during cluster upgrades or maintenance operations by checking tablet health and follower lag, facilitating seamless and risk-free updates. #17562 - Enables monitoring of master leader heartbeat delays through a new RPC in the MasterAdmin, ensuring undesired lags can be readily detected and mitigated. #18788
- Introduces two new metrics to alert users when CreateTable function tries to exceed the tablet count limits and to highlight when a tablet server is managing more tablets than its capacity allows. #20668
- Adjusts the tablet guardrail mechanism to wait for TServer registrations when master leadership changes, avoiding false-positive CREATE TABLE rejections due to incomplete TServer data. A new gflag now controls this wait duration. #20667
- Adds a flag
FLAGS_tablet_split_min_size_ratio
to control tablet splitting based on SST file sizes, ensuring better control over tablet size imbalance. #21458
CDC
- Added a test to certify the
safe_time
set duringGetChanges
call, reducing data loss during network failures. Ensures consistentsafe_hybrid_time
in multipleGetChanges
calls. #21240
Bug fixes
YSQL
- Eliminates unnecessary computation of range bounds in Index-Only Scan precheck condition, preventing crashes for certain queries and improving performance. #21004
- Eliminates risk of data loss by ensuring only the first statement in SQL mutation batches is retried in the event of a transaction conflict, when using PostgreSQL extended query protocol. #21297
- Temporarily reverts new field additions to the PgsqlResponsePB proto to address upgrade failures encountered when transitioning from versions 2.14/2.16 to 2.20.2. #21229
- Fixes table rewrite issue on non-colocated tables/matviews in colocated DB, ensuring the new table uses the original table's colocation setting. Includes a workaround for GH issue 20914. #20856
- Reduces excessive storage metric updates during
EXPLAIN ANALYZE
operation, enhancing performance by incorporatingstorage_metrics_version
inYBCPgExecStats
andYbInstrumentation
. #20917 - Prevents simultaneous send of read and write operations in the same RPC request that could lead to inconsistent read results, by ensuring that, in case of multiple operations, all buffered ones are flushed first. #20864
- Redesigned expression tree walkers to properly handle NULL nodes in queries with subselects used in an index condition, preventing planner crashes. #21133
- Enforces stricter locking mechanisms during concurrent updates on different columns of the same row, to maintain data consistency and prevent 'write-skew anomaly within a row’. Adds a new gflag
ysql_skip_row_lock_for_update
to toggle the new row-level locking behavior. #15196 - Adjusts heartbeat mechanism to shut down when an "Unknown Session" error occurs, reducing log alerts. This benefits idle connections with expired sessions. #21264
- Allows BNL's on outer and inner tables, even if the inner table has "unbatchable" join restrictions that can't accept batches of inputs, enhancing queries with complex join conditions. #21366
- Incorporates checks of inequality filters in the YSQL layer to avoid transmitting trivially false inequalities, preventing undesired behavior from DocDB iterators. #21383
- Allows ModifyTable EXPLAIN statements to run as a single row transactions, decreasing latency. Also enables logging for transaction types when
yb_debug_log_docdb_requests
is enabled. #19604 - Corrects an issue where certain unbatchable filters weren't detected during indexpath formation when indexpath accepted batched values from multiple relations. #21292
DocDB
- Fixes a race condition on kv_store_.colocation_to_table to prevent undefined behavior and re-enables packed row feature for colocated tables, enhancing data writing and compaction processes. #20638
- Clears
pending_deletes_
on failed delete tasks thus preventing tablets from being incorrectly retained after task failure or completion. This rectifies a race condition and allows the Load Balancer to perform operations on specific tablets and Tablet Servers. #13156 - Enhances universe upgrade process by incrementing ClusterConfig version during an update and adds checks to prevent universe_uuid modification. Also introduces a yb-ts-cli to clear universe uuid if necessary, improving troubleshooting capabilities. #21491
- Reflects the actual columns locked in conflict resolution instead of the shared in-memory locks in
pg_locks
, providing more accurate output for waiting transactions. #18399 - Modifies the
DocDB
system by shifting the acquirement ofsubmit_token_
of theWriteQuery
to the post-conflict resolution phase to prevent DDL requests from being blocked, thus optimizing both reads and writes for continued performance and enhanced data consistency. #20730 - Corrects transaction queue behavior allowing multiple waiters for a single transaction per tablet, thereby resolving conflicts and enhancing transaction handling capability. #18394
- Incorporates detection of recently aborted transactions into the transaction coordinator with a new flag
clear_deadlocked_txns_info_older_than_seconds
. #14165, #19257 - Disables the packed row feature for colocated tables, effectively preventing a possible encounter with the underlying issue in 21218 during debugging. #21218
- Prevents TServers from crashing due to duplication of tablets in two drives, occurring after repairing a faulty drive, by preventing the creation of new tablets during Raft-based system (RBS) process. #20754
- Eliminates potential issues with colocated tables during heavy DDL operations and compaction, reducing the risk of crashing on newer builds (2.20.0+) where the packed row feature is default. #21244
- Allows database drop operations to proceed smoothly by ignoring missing streams errors and skipping replication checks for already dropped tables. #21070
- Allows ListTabletServers to handle heartbeats older than 24 days by adjusting the setting to the maximum int32 value, avoiding system crash. #21096
- Includes the
indexed_table_id
with the index in table listings, eliminating the need for a second lookup to associate a main table with an index. #21159 - Corrects RPATH setting for OpenLDAP libraries that prevents system libraries being picked up or not found. Also refactors library_packager.py for improved library dependency categorization. #21236
- Reduces TPCC NewOrder latency by replacing the ThreadPoolToken with a Strand within a dedicated rpc::ThreadPool in PeerMessageQueue's NotifyObservers functions, enhancing speed and efficiency. #20912
- Early aborts transactions that fail during the promotion process, enhancing throughput in geo-partitioned workloads and offering stability in geo-partitioned tests. #21328
- Corrects block cache metrics discrepancy by ensuring Statistics object passes into LRUCache from TableCache for accurate updates. #21407
- Fixes a segmentation fault in yb-master by checking for a null pointer before dereferencing it, addressing an issue in the CDC run on
2.23.0.0-b37-arm
. #21648 - Validates the use of two arguments for
disable_tablet_splitting
, addressing a previous condition where only one was required, thereby enhancing backup process reliability. #8744
CDC
- Introduces a fix for data loss issue caused by faulty update of
cdc_sdk_safe_time
during explicit checkpointing, along with tests to ensure validity. #15718 - Fixed the decoding of NUMERIC value in CDC records to prevent precision loss by ensuring that the decoded string is not converted to scientific notation if its length is more than 20 characters. #20414
- Fixes issue with CDC packed rows, now ensures a single record for large insert operations, providing consistent data regardless of row size. #20310
- Ensures consistency in
CDCSDKYsqlTest.TestLargeTxnWithExplicitStream
test by settingFLAGS_cdc_max_stream_intent_records
value from 40 to 41, overcoming the issue of multiple records for a single insert when packed row size exceedsysql_packed_row_size_limit
. #20310
Other
- Updates the condition for HT lease reporting to ensure accurate leaderless tablet detection in RF-1 setup, preventing false alarms. #20919
- Reduces disruptions by throttling the master process log messages related to "tablet server has a pending delete" into 20-second intervals. #19331
v2.20.2.4 - September 12, 2024
Build: 2.20.2.4-b3
Third-party licenses: YugabyteDB, YugabyteDB Anywhere
Downloads
Docker
docker pull yugabytedb/yugabyte:2.20.2.4-b3
Bug fix
DocDB
- Reduces the risk of deadlocks when making active read/write requests to a table right after a tablet-split. #23747
v2.20.2.3 - June 27, 2024
Build: 2.20.2.3-b2
Third-party licenses: YugabyteDB, YugabyteDB Anywhere
Downloads
Docker
docker pull yugabytedb/yugabyte:2.20.2.3-b2
This is a YugabyteDB Anywhere-only release, with no changes to YugabyteDB.
v2.20.2.2 - April 1, 2024
Build: 2.20.2.2-b1
Third-party licenses: YugabyteDB, YugabyteDB Anywhere
Downloads
Docker
docker pull yugabytedb/yugabyte:2.20.2.2-b1
This is a YugabyteDB Anywhere-only release, with no changes to the database.
v2.20.2.1 - March 22, 2024
Build: 2.20.2.1-b3
Third-party licenses: YugabyteDB, YugabyteDB Anywhere
Downloads
Docker
docker pull yugabytedb/yugabyte:2.20.2.1-b3
Bug fixes
DocDB
- Enhances universe upgrade process by incrementing ClusterConfig version during an update and adds checks to prevent universe_uuid modification. Also, introduces a yb-ts-cli to clear universe UUID if necessary, improving troubleshooting capabilities. #21491
CDC
- Ensures numeric values are decoded without precision loss by utilizing string representation with no length limit and the PostgreSQL numeric_out method. #20414
v2.20.2.0 - March 4, 2024
Build: 2.20.2.0-b145
Third-party licenses: YugabyteDB, YugabyteDB Anywhere
Downloads
Docker
docker pull yugabytedb/yugabyte:2.20.2.0-b145
New features
-
Added support for read-only mode for DR replica, currently supported for YSQL tables.
-
Tablet splitting now can be enabled on tables with CDC configured. #18479
-
Transactional CDC now supports consistent snapshots, ensuring data integrity during replication to a sink. Snapshots, ordered by commit time across all tables and tablets, establish a reliable replication order. #19682
Improvements
YSQL
- Introduces
yb_silence_advisory_locks_not_supported_error
as a temporary solution, avoiding disruption while users transition from the use of advisory locks. #19974 - Shifts from the test flag "FLAGS_TEST_enable_db_catalog_version_mode" to the TP flag "FLAGS_ysql_enable_db_catalog_version_mode", enhancing user control over concurrent DDL execution across different databases. #12417
- Issues a notice for unsafe ALTER TABLE operations, including for ADD COLUMN...DEFAULT, to indicate existing rows won't be backfilled with the default value, enhancing user awareness. Suppression possible by setting
ysql_suppress_unsafe_alter_notice
flag to true. #19360 - Added sorting capabilities to BatchNestedLoopJoin to return the rows in the same order as NestedLoopJoin. #19589
- Replaces the
ysql_max_read_restart_attempts
andysql_max_write_restart_attempts
flags withyb_max_query_layer_retries
, applies limit to Read Committed isolation statement retries, and adjustsretry_backoff_multiplier
andretry_min_backoff
defaults. #20359 - Disallows the creation of a temporary index with a tablespace, preventing client hangs and providing a clear error message for temporary index creation with set tablespace. #19368
- Enables index tablespace modification through the
ALTER INDEX SET TABLESPACE
command and regulates column statistics using theALTER INDEX ALTER COLUMN SET STATISTICS
command. Also, allows the creation and alteration of materialized views with the specified tablespace. Suppress the beta feature warning by enablingysql_beta_feature_tablespace_alteration
flag. #6639 - Adds function to log the memory contexts of a specified backend process, enhancing memory usage monitoring and allowing users to troubleshoot memory-related issues more effectively. #14025
DocDB
- Allows customizing retryable request timeouts to respect client-side YCQL and YSQL timings, optimizing log replay and preventing the tserver from rejecting requests that exceed durations. Adjusts default retryable request timeout to 660 seconds and offers a configuration to eliminate server-side retention of retryable requests with
FLAGS_retryable_request_timeout_secs =0
. #18736 - Speeds up TServer Init by optimizing the handling of deleted and tombstoned tablets. It ensures faster startup by using a new flag
num_open_tablets_metadata_simultaneously
, which sets the number of threads for opening tablet metadata. This allows for parallel opening of metadata, improving response times even in cases with large numbers of tablets. Additionally, the handling of tablets marked asDeleted
orTombstoned
is managed asynchronously, marking tombstoned tablets as dirty for inclusion in the next heartbeat. #15088 - Logs all instances of tablet metadata creation/updation, enabling additional insights for troubleshooting in cases of multiple meta records for the same tablet. #20042
- Adds a 10-second delay (
auto_flags_apply_delay_ms
) between AutoFlag config updates and their application, allowing all tservers to receive the new config before applying it. This change enhances configuration consistency and update safety. #19932 - Enhances thread safety by setting
Wthread-safety-reference
to check when guarded members are passed by reference and resolving all build errors resulting from this change. #19365 - Automates recovery of index tables impacted by a bug, preventing performance degradation and disk size leak, by ensuring schema.table_properties.retain_delete_markers is reset to false when index backfilling is done. #19731
- Enhances the
demote_single_auto_flag
yb-admin command by returning distinct error messages for invalid process_name, flag_name, or non-promoted flag, thereby aiding easier identification of errors. ReplacesHasSubstring
withASSERT_STR_CONTAINS
in the AutoFlags yb-admin test. #20004 - Introduces support for Upgrade and Downgrade of universes with xCluster links, enhancing compatibility checks for AutoFlags during these operations. Data replication between two universes is only catered if AutoFlags of the Target universe are compatible with the Source universe. The compatibility check, stored in
ProducerEntryPB
, triggers if the AutoFlag configuration changes during upgrades and rollbacks. This prevents unnecessary RPC calls if no AutoFlag configurations have changed. Also includes fixes for cds initialization bugs inTestThreadHolder
. #19518 - Offers redesigned server level aggregation for metrics, thus introducing more metrics for enhanced debugging. Removes several unused URL parameters and makes the new output compatible with YugabyteDB Anywhere and YugabyteDB Aeon, preventing double-counting issues in charts. Drops unused JSON and Prometheus callbacks from MetricEntity for a cleaner design. #18078
- Allows a limit on the addition of new tablet replicas in a cluster to conserve CPU resources, with safeguards for downscaling. Introduces test flags for controlling memory reservation and tablet replica per core limits. #16177
- Introduces verbose logging for global and per table state transitions in the load balancer to facilitate easier debugging. #20289
- Reduces server initialization time by eliminating the accumulation of deleted tablet superblocks during startup, through a modification in the
DeleteTablet
operation. #19840 - Enables automatic recovery of index tables affected by a bug, verifying their backfilling status and correcting the
retain_delete_markers
property to enhance performance. #20247 - Includes single shard (fast-path) transactions in the pg_locks by querying single shard waiters registered with the local waiting transaction registry at the corresponding Tserver, ensuring more complete transaction tracking and lock status reporting. #18195
- Creates Prometheus metrics for server hard and soft memory limits which allow detailed insight into TServer or master memory usage regardless of Google flag defaults; aids in creating dashboards charts to monitor utilization close to soft limit or TServer TCMalloc overhead. #20578
- Enables control over the batching of non-deferred indexes during backfill via a new flag, improving index management. #20213
yugabyted
-
Corrects the CPU usage reporting in the sankey diagram by filtering nodes based on region selection on the performance page. #19991
-
Repairs yugabyted-ui functionality when using custom YSQL and YCQL ports by passing values to yugabyted-ui, ensuring the correct operation of the user interface. #20406
Bug fixes
YSQL
- Reduces Proc struct consumption by enabling cleanup for killed background workers, preventing webserver start-up failure after 8 attempts. #20154
- Frees up large volumes of unused memory from the webserver after processing queries, enhancing periodic workloads by reallocating held memory to the OS more effectively. #20040
- Introduces two new boolean flags for YSQL webserver debugging and failure identification.The first will log every endpoint access and its list of arguments before running the path handler. The second will print basic tcmalloc stats after the path handler and garbage collection have run. #20157
- Rectifies an issue causing segmentation faults when the postmaster acquires already owned LWLock, enhancing stability during process cleanup. Uses KilledProcToCleanup instead of MyProc if acquiring locks under the postmaster. #20166
- Introduces two new boolean flags for YSQL webserver debugging and failure identification.The first will log every endpoint access and its list of arguments before running the path handler. The second will print basic tcmalloc stats after the path handler and garbage collection have run. #20157
- Restarts postmaster in critical sections.This applies to backend PG code; defines and improves handling of errors in these sections. #20255
- Introduces the
pg_stat_statements.yb_qtext_size_limit
flag to control the maximum file size read into memory, preventing system crashes due to oversized or corrupt qtext files. #20211 - Caps the number of attempts to read inconsistent backend entries to 1000 for safer operation and better visibility, limiting potential infinite loops in /rpcz calls and logging every hundredth attempt. #20274
- Resolves segmentation faults in the webserver SIGHUP handler during cleanup. #20309
- Display consistent wait-start times in
pg_locks
view for waiting transactions. #18603, #20120 - Reduces excessive memory consumption during secondary index scans. #20275
- Allows the finalize_plan function to now apply finalize_primnode on PushdownExprs, ensuring Parameter nodes in subplans transfer values accurately, especially in Parallel Queries. #19694
- Return correct results when Batch Nested Loop join is used for queries involving Nested LEFT JOINs on LATERAL views. #19642, #19946
- Upgrades "Unknown session" error to FATAL permitting drivers to instantly terminate stale connections, minimizing manual user intervention. #16445
- Rectifies correctness issues when BatchNestedLoop join is used and the join condition contained a mix of equality and non-equality filters. #20531
- Mitigates incorrect data entry into the default partition by incrementing the schema version when creating a new partition, enhancing data consistency across all connections. #17942
- Rectifies correctness issue when join on inequality condition and join columns contains NULL values. #20642
- Rectifies correctness issue when queries involving outer joins and aggregate use BNL. #20660
- Corrects the Batch Nested Loop's optimization logic for proper handling of cases where the given limit matches the outer table's exact size, ensuring accurate query results. #20707
- Prevents "Not enough live tablet servers to create table" error during ALTER TABLE SET TABLESPACE by correctly supplying the placement_uuid, even when creating a table in the same tablespace. #14984
- Addresses a bug that caused backup failure due to the absence of
yb_catalog_version
, by ensuring the function's existence post-normal migration. #18507 - Corrects an error in the aggregate scans' pushdown eligibility criteria to prevent wrong results from being returned when PG recheck is not expected, but YB preliminary check is required to filter additional rows. #20709
- Ensures the Linux
PDEATH_SIG
mechanism signals child processes of their parent process's exit, by correctly configuring all PG backends immediately after their fork from the postmaster process. #20396 - Fixes a MISMATCHED_SCHEMA error when upgrading from version 2.16 to 2.21 by introducing a 2-second delay for catalog version propagation when a breaking DDL statement is detected. #20842
- Return correct result for join queries using BatchNestedLoop join and DISTINCT scan using the range Index during inner table scan. #20827
- Renders a fix for memory corruption issue that caused failure in creating a valid execution plan for
SELECT DISTINCT
queries. Enables successful execution of queries without errors and prevents server connection closures by disablingdistinct pushdown
. This fix improves the stability and effectiveness of SELECT DISTINCT queries. #20893 - Eliminates unnecessary computation of range bounds in Index-Only Scan precheck condition, preventing crashes for certain queries. #21004
DocDB
- Resolves potential
WriteQuery
leak issue in CQL workloads, ensuring proper execution and destruction of queries, while preventing possible tablet shutdown blockages during conflict resolution failure. #19919 - Mitigates the issue of uneven tablet partitions and multiple pollers writing to the same consumer tablet by only applying intents on the consumer that match the producer tablet's key range. If some keys/values are filtered out from a batch, it will not delete the consumer's intents, as they may be needed by subsequent applications. Also guarantees idempotency, even if some apply records stutter and fetch older changes. #19728
- Reduces chances of transaction conflicts upon promotion by delaying the sending of UpdateTransactionStatusLocation RPCs until after the first PROMOTED heartbeat response is received, enhancing transaction consistency and accuracy. #17319
- Sets
kMinAutoFlagsConfigVersion
to 1 to resolve flag configuration mismatch issue. #19985 - Unblocks single shard waiters once a blocking subtransaction rolls back, by applying identical conflict check logic for both distributed transactions and single shard transactions. #20113
- Eliminates a race condition that can occur when simultaneous calls to
SendAbortToOldStatusTabletIfNeeded
try to send the abort RPC, thus preventing avoidable FATALs for failed geo promotions. #17113 - Fixes behavior of Tcmalloc sampling; deprecates the enable_process_lifetime_heap_sampling flag in favor of directly setting profiler_sample_freq_bytes for controlling tcmalloc sampling, enhancing control over sampling process. #20236
- Resolves instances of the leaderless tablet endpoint incorrectly reporting a tablet as leaderless post-leader change, by tweaking the detection logic to depend on the last occurrence of a valid leader, ensuring more accurate tablet reporting. #20124
- Allows early termination of ReadCommitted transactions with a
kConflict
error, enhancing overall system throughput by eliminating unnecessary blockages without waiting for the next rpc restart. #20329 - Fixes FATAL errors occurring during tablet participant shutdown due to in-progress RPCs by ensuring rpcs_.Shutdown is invoked after all status resolvers have been shut down. #19823
- Modifies SysCatalog tablet's retryable request retention duration to consider both YQL and YSQL client timeouts, reducing the likelihood of
request is too old
errors during YSql DDLs. #20330 - Handles backfill responses gracefully even when they overlap across multiple operations, reducing risks of crashes and errors due to network delays or slow masters. #20510
- Reintroduces bloom filters use during multi-row insert, improving conflict resolution and rectifying missing conflict issues, while also addressing GH 20648 problem. #20398, #20648
- Fixes handling of duplicate placement blocks in under-replication endpoint for better compatibility and correct replica counting, preventing misrepresentation of under-replicated tablespaces. #20657
- Logs the first failure during setup replication instead of the last error, facilitating better error diagnosis. #20689
- Implements a retry mechanism to acquire the shared in-memory locks during waiter resumption. Rather than failing after a single attempt, it now schedules retrying until the request's deadline, reducing request failures due to heavy contention. #20651, #19032, #19859
- Reduces log warnings in normal situations by downgrading repeated waiter resumption alerts to VLOG(1), benefiting from the direct signaling of transaction resolution. #19573
- Disables the packed row feature for colocated tables to prevent possible write failures post complications, as a workaround while investigating issue 20638. #21047
- Resolves database deletion failures by skipping replication checks for dropped tables during the database drop process, addressing errors related to missing streams. #21070
- Addresses a race condition on kv_store_.colocation_to_table reading and permits packed row features for colocated tables, tackling undefined behaviors and failed table writes. #20638
- Disables the packed row feature for colocated tables to prevent the issue 20638 that causes subsequent write failures after certain compactions. #21047
- Corrects RPATH setting for OpenLDAP libraries, preventing the system from picking up wrong versions or failing to find them at all. #21236
CDC
- Corrects the computation of the
cdcsdk_sent_lag
metric to prevent steep, disproportionate increases by updating thelast_sent_record_time
when aSafePoint
record is spotted, in addition to DMLs andREAD
ops. #15415
Other
- Adjusts
tserver start
andtserver stop
scripts to successfully terminate all running PG processes, irrespective of their PID digit count. #19817 - Updates the condition for HT lease reporting to ensure accurate leaderless tablet detection in RF-1 setup, preventing false alarms. #20919
v2.20.1.3 - January 25, 2024
Build: 2.20.1.3-b3
Third-party licenses: YugabyteDB, YugabyteDB Anywhere
Downloads
Docker
docker pull yugabytedb/yugabyte:2.20.1.3-b3
Bug fixes
YSQL
- Fixed index scans where a query with join on inequality condition incorrectly returns rows with NULL in the key column. #20642
DocDB
v2.20.1.2 - January 17, 2024
Downloads
Use 2.20.1.3 or later.
Bug fixes
YSQL
- Fix BNL local join lookup equality function. #20531
CDC
- Fix addition of new tables to stream metadata after drop table. #20428
v2.20.1.1 - January 11, 2024
Downloads
Use 2.20.1.3 or later.
Improvements
YSQL
- In Read Committed Isolation, limit the number of retry attempts when the aborted query is retried. #20359
Bug fixes
YSQL
-
Return correct results when Batch Nested Loop join is used for queries involving Nested LEFT JOINs on LATERAL views. #19642, #19946
-
Added a regression test for nested correlated subquery. #20316
CDC
- Fixed decimal type precision while decoding CDC record. #20414
DocDB
- In Read Committed Isolation, immediately abort transactions when conflict is detected. #20329
v2.20.1.0 - December 27, 2023
Downloads
Use 2.20.1.3 or later.
Improvements
YSQL
- Adjusts ysql_dump when run with
--include-yb-metadata
argument, to circumvent unnecessary automatic index backfilling. This avoids unnecessary RPC calls. #19457 - Imports the
pgcrypto: Check for error return of px_cipher_decrypt
upstream PostgreSQL patch; OpenSSL 3.0+ prerequisite. #19732 - Imports the upstream PG commit
Disable OpenSSL EVP digest padding in pgcrypto
; OpenSSL 3.0+ prerequisite. #19733 - Imports an upstream PostgreSQL commit that adds an alternative output when OpenSSL 3 doesn't load legacy modules; OpenSSL 3.0+ prerequisite. #19734
- Removes the need for a table scan when adding a new column with a
NOT NULL
constraint and a non-volatileDEFAULT
value, enhancing ADD COLUMN operations. #19355 - Mitigates CVE-2023-39417 by importing a security-focused upstream Postgres commit from REL_11_STABLE for YSQL users. #14419
- Fixes CVE-2020-1720 by importing upstream Postgres commit from REL_11_STABLE, enabling support for
ALTER <object>DEPENDS ON EXTENSION
in future for objects like function, procedure, routine, trigger, materialized view, and index. #14419 - Modifies the planner to allow ordered index scans with IN conditions on lower columns; this takes advantage of the YB LSM indexes, which maintain index order. #19576
- Increase the oom_score_adj (Out of Memory score adjustment) of the YSQL webserver to 900, the same as PG backends, prioritizing its termination when it significantly consumes memory. #20028
- Blocks the use of advisory locks in YSQL, as they are currently unsupported. #18954
- Introduces
yb_silence_advisory_locks_not_supported_error
as a temporary solution, avoiding disruption while users transition from the use of advisory locks. #19974
DocDB
- Enable checks for trailing zeros in SST data files to help identify potential corruption. #19691
- Includes version information in the error message when the yb process crashes due to AutoFlags being enabled on an unsupported older version, enhancing the ease of identifying the issue. #16181
- Prints long trace logs with a continuation marker when a trace is split into multiple LOG(INFO) outputs. This is for log readability. #19532, #19808
- Upgrades OpenSSL to version 3.0.8, disabling Linuxbrew builds and updating glog for stack unwinding based on the backtrace function. #19736
- Expands debug information to help investigate SELECT command errors that imply faults in read path processing or provisional record writing. #19876
- Adds support for
rocksdb_max_sst_write_retries
flag: maximum allowed number of attempts to write SST file in case of detected corruption after write (by default 0 which means no retries). Implemented for both flushes and compactions. #19730 - Balances load during tablet creation across all drives, preventing bottlenecks and underutilized drives during remote-bootstrapping; uses total number of tablets assigned for tie-breaking. #19846
- Adds tserver page to display all ongoing Remote Bootstrap sessions, and shows the source of bootstrap sessions in the
Last Status
field, for improved visibility. #19568 - Enhances error reporting from XClusterPollers by storing just the error code instead of detailed status, making it safer against master and Tserver restarts and reducing memory usage. #19455
- Incorporates a JoinStringsLimitCount utility for displaying only the first 20 elements in a large array, saving memory and space while logging or reporting tablet IDs. #19527
- Adds a sanity check to prevent restoration of the initial sys catalog snapshot when the
master_join_existing_universe
flag is set. #19357 - Parallelizes RPCs in
DoGetLockStatus
to fetch locks swiftly, enhancing the database's response time while retrieving old transactions. #18034 - Simplifies xCluster replication failure debugging via a new
get_auto_flags_config
yb-admin command, returning the current AutoFlags config. #20046 - Enables automatic recovery of index tables affected by #19544, improving performance and disk size management by removing excess tombstones in the SST files. #19731
- Introduces verbose logging for global and per table state transitions in the load balancer to facilitate easier debugging. #20289
CDC
- Allows the catalog manager to eliminate erroneous entries from the
cdc_state
table for newly split tablets; prevents race conditions by reversing the order of operations during theCleanUpCDCStreamsMetadata
process. #19746
yugabyted
- Resolves
0.0.0.0
to127.0.0.1
as the IP for master, tserver and yugabyted-UI when0.0.0.0
is specified as theadvertise_address
inyugabyted start
command. #18580 - Ensures the yugabyted UI can fetch and display
Alert
messages from different nodes by adjusting the/alerts
endpoint in the API server to include anode_address
parameter. #19972 - Eliminates the deprecated
use_initial_sys_catalog_snapshot
gflag in yugabyted, thus reducing log warning messages. #20056
Other
- Better indentation of multi-line remote trace entry output, for readability. #19758
- Implements a preventative safeguard in tserver operations by adding a check that a tablet has explicitly been deleted before issuing a
DeleteTablet
command, minimizing data loss risks and enhancing reliability. This feature, enabled withmaster_enable_deletion_check_for_orphaned_tablets=true
, is upgrade and downgrade safe. #18332
Bug fixes
YSQL
- Allows the postprocess script in
pg_regress
to run on alternative expected files alongsidedefault_expectfile
andplatform_expectfile
, fixing unintended mismatches. #19737 - Prevents stuck PostgreSQL processes and ensures successful acquisition of locks in the future. This enhancement particularly aids in preventing deadlocks when creating replication slots with duplicate names. #19509
- Ensures OID uniqueness within a database in YB environment by introducing a new per-database OID allocator, avoiding risk of collisions across multiple nodes or tenants. This change is safe for upgrades and rollbacks, enabled by a new gflag
ysql_enable_pg_per_database_oid_allocator
. #16130 - Prevents postmaster crashes during connection termination cleanup by using the killed process's
ProcStruct
to wait on a lock. #18000 - Fixes the distinct query iteration to distinguish between deleted and live keys; this prevents missing live rows during distinct queries on tables with dead tuples. #19911
- Fixes bug when type-checking bound tuple IN conditions involving binary columns like UUID. #19753
- Ensures PK modification does not disable Row-Level Security (RLS). #19815
- Tracks spinlock acquisition during process initialisation, and reduce the time to detect spinlock deadlock. #18272, #18265
- Reverts to PG restart in rare event of process termination during initiation or cleanup; this avoids needing to determine what subset of shared memory items to clean. #19945
- Prevents unexpected crashes during plan creation when joining two varchar columns. Handles the derivation of
element_typeid
in Batched Nested Loop (BNL) queries; casts both sides to text to ensure valid equality expression. #20003 - Reduces Proc struct consumption by enabling cleanup for killed background workers, preventing webserver start-up failure after 8 attempts. #20154
- Frees up large volumes of unused memory from the webserver after processing queries, enhancing periodic workloads by reallocating held memory to the OS more effectively. #20040
- Introduces two new boolean flags for YSQL webserver debugging and failure identification.The first will log every endpoint access and its list of arguments before running the path handler. The second will print basic tcmalloc stats after the path handler and garbage collection have run. #20157
- Rectifies an issue causing segmentation faults when the postmaster acquires already owned LWLock, enhancing stability during process cleanup. Uses KilledProcToCleanup instead of MyProc if acquiring locks under the postmaster. #20166
- Improves insight into webserver memory usage
:13000/memz
and:13000/webserver-heap-prof
, which print tcmalloc stats and display currents or peak allocations respectively. #20157 - Restarts postmaster in critical sections.This applies to backend PG code; defines and improves handling of errors in these sections. #20255
- Caps the number of attempts to read inconsistent backend entries to 1000 for safer operation and better visibility, limiting potential infinite loops in
/rpcz
calls and logging every hundredth attempt. #20274 - Resolves segmentation faults in the webserver SIGHUP handler during cleanup. #20309
- Allows the finalize_plan function to now apply finalize_primnode on PushdownExprs, ensuring Parameter nodes in subplans transfer values accurately, especially in Parallel Queries. #19694
DocDB
- Enables Masters to decrypt universe key registry correctly when Master turns into a leader following Remote Bootstrap. correctly when it turns into a leader. #19513
- Fixes metric retryable requests mem-tracker metric so it's aggregated at table-level #19301
- Ensure data consistency by checking if there is pending apply record, preventing the removal of large transactions that are still applying intents during bootstrap. #19359
- Prevents a write to freed memory;
RefinedStream::Connected
returns status instead of callingcontext_->Destroy(status)
. #19727 - Allows serving remote bootstrap from a follower peer, i.e. initial remote log anchor request is at the follower's last logged operation id index, reducing probability of fallback to bootstrap from the leader; this could increase system efficiency under high load. #19536
- Corrects Master's tablet_overhead memory tracker to correctly display consumption, ensuring accurate reflection of data in Memory Breakdown UI page, and aligns MemTracker metric names between TServer and Master. #19904
- Resolves intermittent index creation failure for empty YCQL tables by validating the
is_running
state instead of checking the index state directly; prevents inaccurate values in old indexes and ensuringretain_delete_markers
are correctly set to false. #19933 - Addresses a deadlock issue during tablet shutdown with wait-queues enabled by modifying the Wait-Queue shutdown path to set shutdown flags during
StartShutdown
and process callbacks duringCompleteShutdown
. #19867 - Reduces race conditions in
MasterChangeConfigTest.TestBlockRemoveServerWhenConfigHasTransitioningServer
by letting asynchronous threads operate onExternalMaster*
copies, notcurrent_masters
. #19927 - Allows only a single heap profile to run at a time, restricting concurrent profile runs to avoid misinterpretation of sampling frequency reset values. #19841
- Eliminates misleading
Transaction Metadata Missing
errors during a deadlock by replacing them with more accurate deadlock-specific messages. #20016 - Fixes behavior of Tcmalloc sampling; deprecates the
enable_process_lifetime_heap_sampling
flag in favor of directly settingprofiler_sample_freq_bytes
for controlling tcmalloc sampling, enhancing control over sampling process. #20236
CDC
- Corrects a deadlock during the deletion of a database with CDC streams by ensuring namespace-level CDC stream does not add the same stream per table more than once. #19879
yugabyted
- Adds a check for a join flag to avoid error when starting two different local RF-1 YugabyteDB instances on mac #20018
Other
- Rectifies the CentOS GCC11 and background worker asan build issues by utilizing stack allocation and eliminating the unsupported std::string::erase with const iterators. #20147, #20087
- Fixes segmentation fault in stats collector after Postmaster reset by cleaning up after terminated backends and properly resetting shared memory and structures, resulting in improved stability and reliability of the system. #19672
- Allows custom port configurations in multi-region/zone YugabyteDB clusters to prevent connectivity problems during cluster setup. #15334
v2.20.0.2 - December 15, 2023
Downloads
Use 2.20.1.3 or later.
This is a YugabyteDB Anywhere-only release, with no changes to the database.
v2.20.0.1 - December 5, 2023
Downloads
Use 2.20.1.3 or later.
Bug fixes
- [19753] [YSQL] Fix tuple IN condition type-checking in the presence of binary columns
- [19904] [DocDB] Fix Master's tablet_overhead mem_tracker zero consumption issue
- [19911] [DocDB] Avoid AdvanceToNextRow seeking past live rows upon detecting a deleted row during distinct iteration
- [19933] [DocDB] Backfill done may not be triggered for empty YCQL table
v2.20.0.0 - November 13, 2023
Downloads
Use 2.20.1.3 or later.
Highlights
- Support for OIDC token-based authentication via Azure AD. This allows YSQL database users to sign in to YugabyteDB universes using their JSON Web Token (JWT) as their password.
- Support for Transactional CDC.
- Wait-on conflict concurrency control with pg_locks. This feature is especially important to users that have workloads with many multi-tablet statements, which may have multiple sessions contending for the same locks concurrently. Wait-on conflict concurrency control helps avoid a deadlock scenario as well as ensure fairness so a session is not starved by new sessions. EA
- Catalog metadata caching to improve YSQL connection scalability and performance with faster warm up times. EA
- Support for ALTER COLUMN TYPE with on-disk changes is now GA for production deployments. This feature expands ALTER TABLE capabilities with a broader range of data type modifications, including changes to the type itself, not just size increments.
- Index backfill stability improvements. Ensure timely notification to all nodes and PostgreSQL backends before initiating index backfill to prevent missing entries during index creation. EA
New Features
- [13686] [DocDB] Introduce the ability to Rollback And Demote an AutoFlag
- [18748] [CDCSDK] Change default checkpointing type to EXPLICIT while stream creating
Improvements
- [4906] [YSQL] Uncouple variables
is_single_row_txn
fromis_non_transactional
- [9647] [DocDB] Add metric for the number of running tablet peers on a YB-TServer
- [12751] [CDCSDK] Made maxAttempts and sleepTime for retrying RPCs configurable in AsyncClient
- [13358] [YSQL] YSQL DDL Atomicity Part 5: YB-Backup support
- [16177] [DocDB] Mechanisms to reject table creation requests based on cluster resources, switch the tablet limit gflags from test flags to runtime flags
- [16785] [DocDB] Add tracking for event stats metrics
- [17904] [DocDB] Prevent YB-TServer heartbeats to master leader in a different universe
- [18055] [DocDB] Resume waiters in consistent order across tablets
- [18335] [DocDB] Reject ChangeConfig requests for sys catalog when another server is amidst transition
- [18384] [14114] [DocDB] Throw consistent error on detected deadlocks
- [18522] [YSQL] Change default unit for
yb_fetch_size_limit
to bytes from kilobytes - [18940] [DocDB] Metric to track active WriteQuery objects
- [19071] [DocDB] Add estimated bytes/count to pprof memory pages
- [19099] [YSQL] [DocDB] Adopt the trace correctly in pg_client_session
- [19203] [xCluster] Add xCluster YB-TServer UI page, Switch to throughput in the YB-TServer UI pages from MiBps to KiBps
- [19221] [DocDB] Improved timeout handling for YCQL index scan
- [19272] [DocDB] Clear ResumedWaiterRunner queue during WaitQueue Shutdown
- [19274] [xCluster] Update xCluster apply safe time if there are no active transactions
- [19292] [CDCSDK] Publish snapshot_key in
GetCheckpointResponse
only if it is present - [19295] [yugabyted] Password Authentication showing enabled in UI even when it's not turned on.
- [19301] [DocDB] Make re-tryable requests mem-tracker metric to be aggregated for Prometheus
- [19351] Harden more YSQL backends manager tests
- [19353] [xCluster] Introduce XClusterManager, Cleanup code on master and XClusterConsumer
- [19417] [DocDB] Support tracing UpdateConsensus API
- [19454] build: Move macOS support off of mac11
- [19482] [CDCSDK] Add GFlag to disable tablet split on tables part of CDCSDK stream
- [19532] [DocDB] Allow Traces to get past Glog's 30k limit
- [YSQL] Disable backends manager by default
- [YSQL] Some extra logging in Postgres Automatically determine upstream branch name from local branch name
Bug fixes
- [17025] [xCluster] Calculate replication lag metrics for split tablet children
- [17229] [DocDB] Prevent GC of any schema packings referenced in xCluster configuration
- [18081] [19535] [DocDB] Update TabletState only for tablets that are involved in write, Ignore statuses from old status tablet on promotion
- [18157] [DocDB] Don't pack rows without liveness column
- [18540] [xCluster] [TabletSplitting] Fix setting opid in cdc_state for split children
- [18711] [YSQL] Fix
pg_stat_activity
taking exclusive lock on t-server session - [18732] [DocDB] Don't update cache in LookupByIdRpc if the fetched tablet has been split
- [18909] [YSQL] Fix ALTER TYPE on temporary tables
- [18911] [19382] [YSQL] Fix ALTER TYPE null constraint violation and failure for range key tables
- [19021] [YSQL] Fix bug in computation of semi/anti join factors during inner unique joins
- [19033] [DocDB] PGSQL operation triggered during parent tablet shutting down may be not retried
- [19063] [YSQL] Fix table rewrite on a table referenced through a partitioned table's foreign key
- [19308] [YSQL] Fix bug where tuple IN filters were not bound to the request
- [19316] [19314] [yugabyted] Bugs regarding
--join
flag provided. - [19329] [YSQL] Avoid O(n^2) complexity in list traversal while generating ybctid for IN operator
- [19348] [CDCSDK] Only delete removed tablets from
cdc_state
inCleanUpCDCStreamsMetadata
- [19384] [YSQL] Fix handling of case where a given RowCompareExpression cannot be bound
- [19385] [CDCSDK] Fix WAL GC issue for tables added after stream creation
- [19394] [CDCSDK] Only populate key to
GetChangesRequest
when it is not null, Set snapshot key from correct parameter in explicit checkpointing - [19407] [YSQL] Single shard operations should pick read time only after conflict resolution
- [19414] [yugabyted] UI bugs
- [19434] [CDCSDK] Do not completely fail while fetching tablets if one table hits error
- [19440] [DocDB] Fix bug where invalid filter key was passed to Iterator initialization in backwards scans
- [19450] [xCluster] Fix CDCServiceTestMultipleServersOneTablet.TestUpdateLagMetrics
- [19497] [DocDB] Collect end-to-end traces only if the parent trace is non-null
- [19514] [DocDB] Do not ignore replicas on dead YB-TServer in under-replicated endpoint
- [19523] [xCluster] Fix TSAN error in xClusterConfig
- [19544] [DocDB] Hash and Range Indexes grow in size even after rows are deleted, leading to slower queries
- [19546] [DocDB] Add missing call to Prepare in PlayChangeMetadataRequest
- [19605] [YSQL] Fix test failures encountered upon enabling DDL Atomicity
- [19663] [DocDB] Fix AutoFlagsMiniClusterTest.PromoteOneFlag test