This release includes the following major changes or new features.
A number of CLI commands and vttablet RPCs have been deprecated as we move from master
to primary
.
All functionality is backwards compatible except as noted under Incompatible Changes.
Deprecated commands and flags will be removed in the next release (13.0).
Deprecated vttablet RPCs will be removed in the subsequent release (14.0).
The newest version of the query planner, Gen4
, becomes an experimental feature as part of this release.
While Gen4
has been under development for a few release cycles, we have now reached parity with its predecessor, v3
.
To use Gen4
, VTGate's -planner_version
flag needs to be set to Gen4Fallback
.
In order to support buffering during resharding cutovers in addition to primary failovers, a new implementation
of query buffering has been added.
This is considered experimental. To enable it the flag buffer_implementation
should be set to keyspace_events
.
The existing implementation (flag value healthcheck
) will be deprecated in a future release.
-
A critical vulnerability CVE-2021-44228 in the Apache Log4j logging library was disclosed on Dec 9 2021. The project provided release
2.15.0
with a patch that mitigates the impact of this CVE. It was quickly found that the initial patch was insufficient, and additional CVEs CVE-2021-45046 and CVE-2021-44832 followed. These have been fixed in release2.17.1
. This release of Vitess,v12.0.0
, uses a version of Log4j below2.17.1
, for this reason, we encourage you to use versionv12.0.3
instead, to benefit from the vulnerability patches. -
An issue where the value of the -force flag is used instead of -keep_data flag's value in v2 vreplication workflows (#9174) is known to be present in this release. A workaround is available in the description of issue #9174. This issue is fixed in release >=
v12.0.1
.
Wherever CLI commands produced master
or MASTER
for tablet type, they now produce primary
or PRIMARY
.
Scripts and tools that depend on parsing command output will need to change.
Example:
$ vtctlclient -server localhost:15999 ListAllTablets
zone1-0000000100 sourcekeyspace 0 primary 192.168.0.134:15100 192.168.0.134:17100 [] 2021-09-24T01:12:00Z
zone1-0000000101 sourcekeyspace 0 rdonly 192.168.0.134:15101 192.168.0.134:17101 [] <null>
zone1-0000000102 sourcekeyspace 0 replica 192.168.0.134:15102 192.168.0.134:17102 [] <null>
zone1-0000000103 sourcekeyspace 0 rdonly 192.168.0.134:15103 192.168.0.134:17103 [] <null>
Use of reserved connections is controlled by the vtgate flag -enable_system_settings
. This flag has in the past defaulted to false
(or OFF
) in release versions (i.e. x.0 and x.0.y) of Vitess, and to true
(or ON
) in development versions.
From Vitess 12.0.0 onwards, it defaults to true in all release and development versions. You can read more about this here. Hence you should specify this flag explicitly, so that you are sure whether it is enabled or not, regardless of which Vitess release/build/version you are running.
If you have reserved connections disabled, you will get the old Vitess behavior: where most system settings (e.g. sql_mode
) are just silently ignored by Vitess. In situations where you know your backend MySQL defaults are acceptable, this may be the correct setting to ensure the best possible performance of the vttablet <-> MySQL connection pools. This comes down to a trade-off between compatibility and performance/scalability. You should also review this section of the documentation when deciding whether or not to enable reserved connections.
VExec
is deprecated and removed. All Online DDL commands should be run through OnlineDDL
.
OnlineDDL revert
is deprecated. Use REVERT VITESS_MIGRATION '...'
SQL command either via ApplySchema
or via vtgate
.
InitShardMaster
is deprecated, use InitShardPrimary
instead.
SetShardIsMasterServing
is deprecated, use SetShardIsPrimaryServing
instead.
Various command flags have been deprecated and new variants provided.
DeleteTablet
flagallow_master
replaced withallow_primary
PlannedReparentShard
flagavoid_master
replaced withavoid_tablet
PlannedReparentShard
flagnew_master
replaced withnew_primary
BackupShard
flagallow_master
replaced withallow_primary
Backup
flagallow_master
replaced withallow_primary
EmergencyReparentShard
flagnew_master
replaced withnew_primary
ReloadSchemeShard
flaginclude_master
replaced withinclude_primary
ReloadSchemaKeyspace
flaginclude_master
replaced withinclude_primary
ValidateSchemaKeyspace
flagskip-no-master
replaced withskip-no-primary
- Add
SHOW VITESS_REPLICATION_STATUS
Query Support #8900- The new
SHOW VITESS_REPLICATION_STATUS
command/query shows the MySQL replica/replication (notvreplication
) health for the vitess deployment.
- The new
- Added @GuptaManan100 to maintainers #8833
- Update golang/x dependencies #8688
- tests: use AtomicInt32 instead of int to fix races #8696
- Use consul lock properly #8310
- Trivial: mysqlctl reinit_config -h was not showing help #8369
- Port #8422 to main branch #8745
- [vtctl] Add missing call to
flag.Parse
incommandGetRoutingRules
#8795 - Fix for padding in OrderAndCheckPartitions #8873
- tabletmanager: correct implementations of deprecated RPCs for backwards compatibility #9059
- Avoid some pollution of CLI argument namespace across vtgate and vttablet #9026
- schema engine: reset table size stats when a table is dropped #8634
- Fix for function calls in DEFAULT value of CREATE TABLE statement in main #8477
- Fixing multiple issues related to onlineddl/lifecycle #8500
- boolean values should not be parenthesised in default clause #8502
- mysql/server: abort connection if secure transport is required #8504
- Clear only the current shard's schemacopy rows during schema reload #8519
- go/mysql/auth: fix error message for wrong auth method. #8525
- Fix handshake protocol with MySQL client #8537
- Copy parameter data from byte buffer in COM_STMT_SEND_LONG_DATA #8562
- Negative float default #8587
- [vtexplain] prevent panic on show tables/show full tables #8601
- OnlineDDL: better scheduling/cancellation logic #8603
- Fix parsing of FIRST clause in ALTER TABLE #8614
- onlineddl Executor: build schema with DBA user #8624
- Handle subquery merging with references correctly #8662
- Fixing error on deletes from owning table for a lookup being populated by CreateLookupVindex after a SwitchWrites #8701
- Fixing a panic in vtgate with OLAP mode #8722
- default to primary tablet if not set in VStream api #8755
- Fix bug in parsing of version comments #8770
- Proper merge of the SysTableTableName fields when joining two routes #8771
- fix parsing of MySQL Server Version flag #8791
- Fix typo in pool config syntax. Fixes #8819 #8820
- VtGate schema tracker to use provided user #8857
- fix merging dba query as a subquery both in v3 and gen4 #8871
- sql_select_limit support #9027
- [12.0] Handle sql_mode setting to compare modes in any order #9041
- [12.0] Fix for schema tracker not recognizing RENAME for schema reloading #9043
- [12.0] Fix savepoint support with reserved connections #9047
- [12.0] Gen4: Handle single column vindex correctly with multi column #9061
- MoveTables: don't create unnecessary streams on the target for non-intersecting sources and targets #8090
- VDiff: Add BIT datatype to list of byte comparable types #8401
- Fix vreplication error metric #8483
- Return from throttler goroutine if context is cancelled to prevent goroutine leaks #8489
- Fix VReplication logging to file and db #8521
- Fix passing the wrong cell/cells variable to CreateLookupVindex #8590
- Refresh SrvVSchema after an ExternalizeVindex: was missing #8670
- Fixing missing argument in function call #8692
- Fix how we identify MySQL generated columns #8763
- [vtadmin-web] Set Backup status indicators to the correct colours #8410
- [vtadmin] Fix bad copy-paste in pool config flag parsing #8518
- Print actual current datetime for vtctl dry run commands #8778
- Remove lingering mysqld sock files on vttestserver container startup #8463
- Fixed filename for the configuration file in Vttestserver #8809
- Update release process #7759
- [ci] Add
errcheck
to golangci-lint #7996 - gomod: do not replace GRPC #8416
- consolidation: Fix flaky test #8417
- Small build improvements #8418
- proto: upgrade vtprotobuf version #8454
- Automatically use the latest tag of Vitess for cluster upgrade E2E test #8471
- Addition of known issues to release notes #8482
- Fix Cluster 14 flakiness #8494
- add question on backporting back to PR template #8541
- Enable GitHub Actions concurrency feature #8546
- Updated Makefile do_release script to include godoc steps #8550
- Changing codahale/hdrhistogram import path #8637
- Upgrade to Go 1.17 #8640
- Fixes for reparent endtoend test flakiness #8642
- hooks: remove govet because it already runs as part of golangci-lint #8674
- Enhancement of the release instructions #8790
- Remove consul-api usage in favor of official consul/api #8794
- Enhancement of the release notes generation #8877
- update MAINTAINERS and CODEOWNERS for deepthi, pH14 and vmg #8675
- Cleanup: import of gh-ost test suite is complete #8459
- VReplication support for non-PRIMARY KEY (Online DDL context) #8364
- maintainers: add Messaging as area of expertise #8578
- Enhance k8stopo flag documentation #8464
- Update some vtctl/vtctlclient command help #8560
- Trivial: fix the GenerateShardRanges vtctl[client] help #8586
- examples: update README to use new vreplication command syntax #8825
- update governance #8609
- vtexplain examples #8652
- vtctl help/usage update #8879
- [vtadmin] Remove outdated commands from vtadmin-web README #8496
- Initial pass at some vtadmin docs #8526
- Add Support for Restoring Specific Backups #8824
- Initial support for stress testing in end-to-end tests #8406
- CI: Remove mariadb101 which is well past eol and no longer available in distributions #8446
- Adding GitHub Self Hosted Runner tests #8721
- Vitess mixin improvements #7499
- Expose topo_consul_lock_session_checks to allow customized consul session check #8298
- Handle lock release with SIGHUP in VTGR #8472
- Enhance PRS error message #8529
- srvtopo: resilient watcher #8583
- Add
-restart_before_backup
parameter for vtbackup #8608 - srvtopo: allow unwatching from watch callbacks #8633
- introduced cluster_operation as a new error code in vtrpc #8646
- servenv: add
--onclose_timeout
flag #8651 - Improve determinism of bootstrap #8840
- OnlineDDL in v12: remove legacy code deprecated in earlier version #8972
- [vtadmin] cluster debug pages #8427
- Export memstats for statsd backend #8777
- [tablet, queryrules] Extend query rules to check comments #8233
- Add "show global status" support #8344
- added batch lookup param to lookup vindex #8398
- Online DDL/VReplication: able to read from replica #8405
- multishard autocommit should work for bypass routing #8428
- Add "no-scatter" flag to prohibit the use of scatter queries #8439
- OnlineDDL: -skip-topo is always 'true' #8450
- Add
rows
as keyword in sqlparser #8467 - Periodic update of gh-ost binary #8470
- fix when show tables record too much error log "Got unhandled packet.." #8478
- SHOW VITESS_MIGRATION '...' LOGS, retain logs for 24 hours #8493
- NativeDDL: analyzing added&removed unique keys #8495
- Refactor authentication server plugin mechanism #8503
- Update to planetscale/tengo v0.10.1-ps.v4 #8516
- query serving to continue when topo server restarts - main #8534
- support grpc reflection on APIs #8551
- Customized CreateLookUpVindex to be Compatible with non-consistent Lookup Vindex #8570
- Add additional options for configuring SSL modes as a client #8588
- Fail plan for unsupported aggregate function #8593
- gateway: use keyspace events when buffering requests #8700
- Add optional query annotations, i.e. prefix SQL comments indicating the #8783
- Slight improvement of the ACL error message #8805
- Changed parsing for unions #8821
- Use vt_dba user for online schema migration cutover phase #8836
- Add parsing support for column list with subquery alias #8884
- Add planner-version flag to vtexplain #8979
- [Backport 12.0]: Add planner-version flag to vtexplain #9003
- Allow min TLS version for tablet to mysqld conns #8757
- VReplication: Add ability to tag workflows #8388
- Ignore SBR statements from pt-table-checksum #8396
- Tablet Picker: add metric to record lack of available tablets #8403
- VReplication: support different keys on source and target tables (different covered columns) #8423
- VStream API: handle reparenting and unhealthy tablets #8445
- Change local example to use v2 vreplication flows and change default to v2 from v1 #8553
- Customized CreateLookUpVindex to Include a Flag to Continue Vreplication After Backfill with an Owner Provided #8572
- Update MoveTables CLI help to reflect change we made at the beginning of #8597
- VStreamer Field/Row Events: add Keyspace/Shard #8598
- VStream API: Add flag to stop streaming on a reshard #8628
- [vtadmin] cluster rpc pools #8421
- Add support for passing custom interceptors to vtadmin grpcserver #8507
- [vtctldserver] Migrate remaining ServingGraph rpcs to VtctldServer #8249
- [grpctmclient] Add support for (bounded) per-host connection reuse #8368
- VTGR: Vitess + MySQL group replication #8387
- Add isActive flag to vtgr to support multi-cell topology #8780
- [vtctld] Add
SetWritable
,StartReplication
andStopReplication
rpcs #8816 - [vtctld] sleep/ping tablets #8826
- [vtctld] migrate more util rpcs #8843
- [vtctld] migrate validator rpcs #8849
- [vtctld] localvtctldclient #8882
- [vtctldserver] Migrate RunHealthCheck #8892
- [vtctl] run new commands as standalone binary #8893
- [vtadmin] [experimental] add per-api RBAC implementation #8515
- [vtadmin] shard replication positions #8775
- [vtadmin] GetVtctlds #8792
- Bump aws-sdk-go to v1.34.2 #8632
- Upgrade consul api:
go get github.com/hashicorp/consul/[email protected]
#8784
- topodata: remove deprecated field 'ServedTypes' #8566
- Upgrade to k8s 1.18 client #8762
- [vtctl] command deprecations #8967
- Remove the deprecated Helm charts and related code #8868
- Bump ini from 1.3.5 to 1.3.8 in /vitess-mixin/e2e #8823
- backport operator updates to v12 branch . #9057
- Migrate k8s topo CRD to v1 api (v12 branch) #9046
- fix copyright #8611
- Adds flag to vttablet to disallow online DDL statements #8433
- Remove vtrpc.LegacyErrorCode #8456
- Allow for configuration of the minimal TLS version #8460
- engine: allow retrying partial primitives #8727
- srvtopo: expose WatchSrvKeyspace #8752
- Clean up Primitive interface implementations #8901
- LegacySplitCloneWorker is no longer used in any code paths #8867
- [vtadmin] Add Options struct to wrap grpc/http options #8461
- Update vtadmin local scripts to enable basic rbac #8801
- Correctly identify backup timestamp var as a string #8891
- Improve the Docker local and compose examples #8685
- throttler: don't allocate any resources unless it is actually enabled #8643
- cache: track memory usage more closely #8804
- Use
fmt.Fprintf
instead offmt.Sprintf
#8922
- Alter tests to reuse cluster components #8276
- Adds some more orchestrator tests to vtorc #8535
- increase conn killer check to double the tx timeout value #8649
- Added UNION testcases and auxiliary code for running tests #8797
- fixed regression in v3 for grouping by integer functions #8856
- [vtadmin] Add a vtctld Dialer unit test #8455
The release includes 1351 commits (excluding merges)
Thanks to all our contributors: @Anders-PlanetScale, @GuptaManan100, @Johnny-Three, @Juneezee, @ajm188, @aquarapid, @askdba, @bnu0, @carsonoid, @choo-stripe, @dbussink, @dctrwatson, @deepthi, @demmer, @dependabot[bot], @derekperkins, @doeg, @eeSeeGee, @falun, @fatih, @frouioui, @hallaroo, @harshit-gangal, @ilikeorangutans, @mattlord, @rafael, @ritwizsinha, @rohit-nayak-ps, @sahutd, @shlomi-noach, @sonne5, @systay, @tdakkota, @tokikanno, @utk9, @vmg