vitess.io/vitess@v0.16.2/changelog/7.0/7.0.0/release_notes.md (about) 1 ## Incompatible Changes 2 3 *This release includes the following changes which may result in incompatibilities when upgrading from a previous release*. *It is important that Vitess components are* _[upgraded in the recommended order](https://vitess.io/docs/user-guides/upgrading/#upgrade-order)_. *This will change in the next release as documented in* *[VEP-3](https://github.com/vitessio/enhancements/blob/master/veps/vep-3.md).* 4 5 * VTGate: The default gateway (-gateway_implementation flag value) is now "tabletgateway". The old default was “discoverygateway”. To use the old gateway, specify the flag in the command line. Anyone already using the flag will see no change; to use the new gateway, remove the -gateway_implementation flag. The new gateway is simpler and uses a new healthcheck module with no loss of functionality. #6155 6 7 * VTGate: VTGate incorrectly returned Warning Code field name as Type. This has now been fixed. Code or scripts that depend on the incorrect behavior might break. #6437 8 9 * VReplication: The "-cell" parameter to MoveTables has been renamed to “-cells”, since it now accepts multiple comma-separated cells or cellsAliases. The parameter specifies which cells can provide tablets as the source for vreplication streams. #6456 10 11 * VTGate: The possibility of sending OpenTracing trace spans through query comments has been changed. The old way of doing it was severely broken, so our assumption is that no-one has successfully been using this feature. Still, this is an API change, and we are reporting it as a breaking change. #6463 12 13 * VTTablet has been refactored to be generally more responsive to state changes and its environment: #6131 #6139 #6241 #6263 #6311 #6345 #6348 #6384 #6396 #6432 #6461 14 15 * Some initialization parameters are now mandatory: init_keyspace, init_shard and init_tablet_type. The flow where you could issue a vtctlclient InitTablet and then invoke vttablet without those init parameters is no longer supported. 16 17 * Consequently vtctl's InitTablet and UpdateTabletAddrs are deprecated. 18 19 * demote_master_type is deprecated: Now that init_tablet_type is mandatory, that value can act as the demote_master_type. There is no need for a separate flag. 20 21 * VTTablet will publish the discovered MySQL port on startup, and will not update it during the life of the process. There is no known use case where a MySQL port is expected to change. So, there is no need to keep polling MySQL for its port. 22 23 * Decouple enable_replication_watcher from disable_active_reparents. Currently, vttablet attempts to fix replication only if enable_replication_watcher is true and disable_active_reparents is false. This behavior has changed to depend only on the disable_active_reparents flag. 24 25 * Transitioning from a serving type to SPARE used to go through a brief lameduck period specified by the serving_state_grace_period (default 0). This has been removed. The transition will now happen immediately even if a grace period is specified. 26 27 * It was possible to enable health reporting and heartbeat at the same time. Performing the two at the same time is not useful. As of this release, enabling heartbeat automatically disables the polling mode of checking for replica health. 28 29 * The ACL rules used to be reported on the vttablet status page. The design was using an incorrect framework. This has been removed. 30 31 * Build: make targets "build_web" and “embed_static” have been removed. Instead there are new targets “web_bootstrap”, “web_build” and “web_start” #6473 32 33 ## Deprecations 34 35 * The following vtctl commands have been deprecated. Deprecated commands will continue to work until the next release (8.0). #6428 #6345 #6461 36 37 * StartSlave -> Replaced with StartReplication 38 39 * StopSlave -> Replaced with StopReplication 40 41 * ChangeSlaveType -> Replaced with ChangeTabletType 42 43 * InitTablet 44 45 * UpdateTabletAddrs 46 47 * Various vtctl commands had a flag called "-wait_slave_timeout". It has been replaced with “-wait_replicas_timeout”. Scripts using the old flag will continue to work until the next major release (8.0). #6428 48 49 * Helm charts: The current helm charts have not been keeping up with the forward progress in vitess, and there has been no maintainer for it. Additionally, the operator has pulled ahead of what the helm charts could do. The operator can also be functionally more versatile than the helm charts because custom code can be written to manage complex workflows. To maintain focus and velocity in the project, we are deprecating the helm charts. #6439 50 51 * Consul: The usage of Consul has been problematic for vitess users. The main difficulty comes from the fact that it's non-trivial for a multi-cell deployment. Due to this, we want to discourage the use of consul as a topo server, and are deprecating support for it. #6440 52 53 ## Bugs Fixed 54 55 ### VTGate / MySQL compatibility 56 57 * Handle non-keyword tokens FORMAT, TREE and VITESS. (This was broken by #6110) #6445 58 59 * When using user-defined variables that have not been initialized first, a non-fatal panic occurs and the connection is dropped. #6294 #6308 60 61 * Setting system variable panics vtgate. #6162 #6163 62 63 * regression: USE does not work from MySQL client. #6153 #6157 64 65 * USE does not return an error if a keyspace doesn't exist. #3060 #6157 66 67 * Dotted table names are not escaped properly in lookup vindex flow. #6142 #6145 68 69 * Produce correct error code (1105 instead of 1062) when inserting duplicates into consistent_lookup vindex. #6144 70 71 * Rewriting expressions fail when used as function parameters. #6281 72 73 * Rollback after error clobbers updates. #6285 74 75 * Queries should not be wrapped into transactions if **autocommit=1** is set. #6264 76 77 * Prepared statements with bind variables in column specification produce ‘missing bind var’ error. #6287 #6298 78 79 * Prepared statement queries returning NULL results are not parsed. #6240 #6249 80 81 * DEFAULT function not working with status column. #6221 #6224 82 83 * VTGate panic kills connection when selecting database() when using OLAP workload. #6200 #6205 84 85 * Wrong column value can be inserted due to parameterization variable confusion. #6266 #6270 86 87 * Fix owned table name formatting and duplicate error code in consistent lookup. #6145 88 89 * Support for case-insensitive user defined variables. #6225 90 91 * Fix performance regression on VTGate. #6203 92 93 * Return NULL for non-existent user-defined variables. #6308 94 95 * MySQL connection closing should not inflate query counts. #6226 96 97 * show vitess_shards intermittently returns empty list. #5038 #5189 98 99 * Protect insert lookup queries from bind variable name clashes #6328 100 101 * CAST/CONVERT should work correctly #6304 102 103 * Allow charset introducers for vindex columns #6301 104 105 * Fix panic from EXPLAIN #6204 106 107 * Handle special comments that start with ! #6186 108 109 * Fix panic with uppercase types #6140 110 111 * Allow ‘$’ in identifiers #6136 112 113 ### Other 114 115 * VTTablet: Etcd query timeout because auto-committable transactions are not properly rolled back. #6258 #6299 116 117 * VTTablet: Fixed race in schema engine during notification of schema changes. #6268 118 119 * VTTablet: Reloading ACL config was throwing misleading error messages.his has now been fixed and the error messages improved. #6309 120 121 * VTTablet: Panic during backup caused an error in the pgzip library has been fixed by contributing a fix to pgzip and upgrading to a new release that includes the fix. #6189 122 123 * VTTablet: Improvement of error handling by retrying while uploading to S3. #6182 #6395 #6405 124 125 * VTTablet: builtinbackupengine was uploading a manifest despite errors from S3. Error collection during backup has been fixed to address this. #6349 #6350 126 127 * VTTablet: Fix dba connection leak in LockTables. #6424 128 129 * VTTablet: Fix connection pool leak in schema engine. #6426 130 131 * VTTablet: Fix regression where a heartbeat interval flag setting of 1s would have resulted in an internal value of 1000s #6356 #6357 132 133 * VTTablet: Fix panic from binlog_streamer when ‘-watch_replication_stream’ is set., #6253 134 135 * VTTablet: Add context to MysqlDaemon schema functions. This lets us handle disconnected RPCs instead of the client hanging forever. #6243 136 137 * VTTablet: fix panic from txlogz #6238 138 139 * VTTablet: Add back support for millisecond values for flags that was dropped when yaml config was introduced #6250 140 141 * Vtctld UI: Change all external links in vitess to use https #6170 #6169 142 143 * Ensure SrvVSchema gets rebuilt for all cells #6276 144 145 * Fix MariadbGTIDSet multi-domain support #6184 146 147 * mysqlctl: Fix connection leak during killConnection() #6245 148 149 * Fix release script to install examples in the correct directory #6159 150 151 * examples/operator: fix port-forward command #6418 152 153 * VStream client: should send current position events immediately #6391 #6397 154 155 ## Functionality Added or Changed 156 157 ### VTGate/ MySQL compatibility 158 159 * Transactions on read-only replicas are now supported. Start a transaction by first choosing the desired tablet_type ("use keyspace@replica"), then issuing a “BEGIN” statement. Internally, this will issue a “START TRANSACTION READ ONLY” on the underlying database. This is only available if using the new gateway_implementation of tabletgateway (which is now the default). #6166 #6244 160 161 * Create better plans for NULL comparisons. Instead of using a SelectScatter, now vtgate will produce empty results when the predicate is a comparison against literal NULLs. #6133 #6425 162 163 * Support IN, NOT IN and equality (=) with null values #6152 #6146 164 165 * Add EXPLAIN support for vtgate plans. View the produced vtgate query plan by using explain format=vitess #6110 166 167 * Allow users to perform savepoint related constructs. #6355 #6404 #6412 #6414 168 169 * Added support for user-level advisory lock functions like get_lock and release_lock. This is considered experimental and will be improved in future releases based on user feedback. #6367 #6370 #6470 170 171 * Allow users to change system variable settings at session level using set statements. This is a major change that was merged later in the development cycle. It is considered experimental and there may be edge cases. #6107 #6459 #6472 #6488 172 173 * "ignore_nulls" option to lookup vindexes #6147 #6222: There are situations where the "from" columns of a lookup vindex can be null. Such columns cannot be inserted in the lookup due to the uniqueness constraints of a lookup. The new “ignore_nulls” option of the lookup vindex allows you to accommodate null values in rows. Such rows can still be found through other means, like the primary vindex. 174 175 * Add support for row_count() function. #6174 #6179 176 177 * XOR Operator is now supported. #6369 #6371 178 179 * Allow 'binary' for character_set_results. It is equivalent to null. #6237 180 181 * Improve logging by adding keyspace, table, and tablet_type. #6282 182 183 * VTGate now takes in optional flags for ‘max_payload_size’ and ‘warn_payload_size’. A payload size above the warning threshold will only produce a warning. A payload size that exceeds ‘max_payload_size’ will result in an error. The default behavior is not to check payload size, which is backwards-compatible. #6143 #6375 184 185 * A new comment directive (‘/*vt+ IGNORE_MAX_PAYLOAD_SIZE=1 */) has been added to provide the ability to override the payload size checking per query. #6143 186 187 * A new comment directive (‘/*vt+ IGNORE_MAX_MEMORY_ROWS=1 */) has been added to provide the ability to ignore the "-max_memory_rows" setting per query. #6430 188 189 * Support ‘select * from information_schema.processlist’. #6310 190 191 * Support batch lookup queries for integer and binary types. Other types will continue to require one query per row. #6420 192 193 * Support system settings at session level. #6149 194 195 * Prepare for future features by adding reserved connections. This is the ability for a connected client to have a dedicated connection instead of using the connection pool. #6303 #6313 #6402 #6441 #6451 196 197 * Allow charset introducers with vindex column values. #6236 #6314 198 199 * Support Union All between different shards. #6351 200 201 * Exclude KeyspaceId(s) from plan cache key.This improves the cache hit rate. #6233 202 203 * Reload TLS config on SIGHUP. #6215 204 205 * Drop vindex DDL. #6151 206 207 * show vitess_tablets now reports master_term_start_time. We ensure that this is reported correctly after reparents. #6135 #6292 #6293 208 209 * Allow parenthesized selects #6342 210 211 * Support DO statements #6239 212 213 * Support calling database() inside other functions #6291 214 215 * Support IN, NOT IN and equality (=) with null values #6152 #6146 216 217 ### VReplication 218 219 * VStream Copy extends the VStream API to allow streaming of the contents of databases or tables. Earlier you had to specify a position to start streaming events from. #6277 220 221 * VReplication workflows now accept "-cells" as an option. This can be a comma-separated list of cells or cellsAliases. The source tablet for vreplication will be chosen randomly among the tablets that belong to the specified cells/cellsAliases. If the option is not provided, we default to the cell that is local to the vreplication target. #6442, #6456 #6465 222 223 * Schema Versioning. Tablets now have a schema tracker that can be enabled to store schema versions as DDLs are applied. The _vt.schema_version table contains the schema with the corresponding ddl and gtid position when the ddl was applied. The tracked schemas are used by the new Historian service to provide vstreams with the correct schema while streaming old events. #6300 #6164 #6278 #6399 #6411 #6435 #6448 224 225 * Support for specifying multiple external sources to facilitate migration into vitess. 226 227 * Foreign Keys are now supported on the target database during vreplication. In the copy phase we disable FK checks and re-enable them once the replication phase starts. #6284 228 229 * Materialize: added a drop_constraint option during table copy to strip constraints while creating target tables #6422 230 231 * Materialize: optimizations while creating target tables resulting in a significant improvement in performance when moving a large number of tables from an external MySQL instance #6207, #6251 232 233 * DropSources: Added ‘-rename_tables’ option to rename the source tables rather than dropping them entirely. #6383 234 235 * Savepoints: Vreplication streams are not able to handle savepoint events in the binlog. #6438 236 237 * Add keyspace, shard and workflow labels to VReplicationSecondsBehindMaster metrics #6279 238 239 * Correct command line help for MigrateServedTypes, MigrateServedFrom and SwitchWrites #6187 240 241 * VExec and Workflow commands have been added to vtctld as a layer above VReplicationExec. They allow listing/stopping/starting/deleting workflows and ability to run custom queries on the _vt.vreplication table for all shards in a workflow. #6410 242 243 ### Point-in-time Recovery 244 245 In the 4.0 release we introduced functionality to recover a keyspace into a snapshot based on a specified time. That feature only allowed you to restore a backup, but did not have the ability to automatically replay binlogs up to the specified time. The feature has now been completed so that true point-in-time recovery is possible. This is currently only supported for MySQL compatible installations, not MariaDB. #4857 #6267 #6408 246 247 ### Healthcheck 248 249 * VTGate can now use a new healthcheck that is logically simpler while providing the same functionality. This is the default. The older healthcheck has been deprecated but is still available to use if desired by setting "-gateway_implementation=discoverygateway" #5750 #6155 250 251 * VTCombo has been migrated to use the new healthcheck #6302 252 253 * VTExplain has been migrated to use new healthcheck #6460 254 255 ### MiniVitess 256 257 A docker container that can be used to bring up a self-contained vitess cluster, which can automatically resolve and self-configure to meet an external MySQL cluster. While this might sound very similar to VTCombo and vttestserver, it is not quite the same. 258 259 MiniVitess spins up in docker. Given a MySQL server hostname, schema name & credentials, it runs an automated topology analysis via orchestrator, identifying the cluster members. It proceeds to bring up distinct tablet for each server and opens up vtgate connections. #6377 260 261 ### Examples / Tutorials 262 263 * Vitess operator example #6154 264 265 * Region sharding example #6209 #6275 266 267 * Change local example to use new command DropSources #6178 268 269 * Are-you-alive example now makes it easier to test multiple endpoints #6202 270 271 * Local docker tutorial added to website 272 273 * Simplified helm chart for examples (however, helm is now deprecated) #6168 274 275 ### Other 276 277 * vtctlclient ListAllTablets now shows the MasterTermStartTime. This is shown as "<null>" for read-only tablet types. In case of an old master that has not yet updated the topo record, TabletType will be reported as “unknown” #6135 278 279 * New debug handlers have been added to enable/disable golang block and mutex profiling. #6137 280 281 * Vitessdriver: Allow overriding driver name. Default stays as "vitess" #6138 282 283 * VTCombo: add options to allow starting MySQL within VTCombo. Note that vttestserver provides similar functionality. #6265 284 285 * Disable foreign key checks during preflight schema change tests #4696 286 287 * Fix labels for opentsdb #6289 288 289 * Allow empty shards when running ValidateSchemaKeyspace behind flag ‘-skip-no-master’ #6216 290 291 * Death by SIGPIPE on stdout/stderr can be avoided by setting the new flag ‘catch-sigpipe’ #6297 292 293 * Prepared Statement support added when using special vitess construct of use `<keyspace>:<shard>` by adding GetField support in engine plan execute #6132 294 295 * GTIDSet Union #6180 296 297 * Add relay log position and file based positions to ReplicationStatus #6217 298 299 * Function that can find errant GTIDs #6296 300 301 * VTTablet: Add StopReplicationMode to StopReplicationAndGetStatus RPC #6335 302 303 * VTTablet: DemoteMaster RPC returns full status instead of string representation of current position #6365 304 305 * VTTablet: WaitForPosition RPC can now accept either file-based or GTID-based positions #6374 306 307 ## Documentation 308 309 * Fix links to local example and sample client in vitessdriver godoc #6254 310 311 * Flag documentation has been improved #6261 312 313 * All flags are now documented in the [program reference](https://vitess.io/docs/reference/programs/) on the website. 314 315 ## Build Environment Changes 316 317 * golangci-lint now runs as a pre-commit hook and CI check #6385 #6406 318 319 * CI test for region_sharding example #6275 320 321 * Removed staticcheck as a pre-commit hook because it is included in golangci-lint #6416 322 323 * Faster unit tests #6415 324 325 * Consul-api version upgraded to 1.8.0 #6358 326 327 * Upgrade pgzip to v1.2.4 #6189 328 329 * Upgrade log4j2 version to 2.13.3 #6403 330 331 * Upgrade netty version to 4.1.48.Final #6317 332 333 * Upgrade tcnative version to 2.0.30.Final #6317 334 335 * Add docker_local target to Makefile and a docker/local/run.sh script #6393 336 337 * Only check for k3s on Linux #6353 338 339 * UI build tooling was broken, it has now been fixed. #6473 340 341 ## Functionality Neutral Changes 342 343 * Refactor table filtering logic #6242 #6259 344 345 * VTGate: Replace Sprintf with string concatenation in normalizer, this reduces CPU usage on benchmarks #6127 346 347 * VTTablet: Reduce the number of packets sent from vttablet to MySQL #6130 348 349 * Fixed flakiness in External Connector Test: fixed race #6201 350 351 * Fixed flakiness in Message Test: test had not been updated after jitter functionality was added #6283 352 353 * Fix flakiness in TestConnectTimeout #6188 354 355 * Fix TLS test for Go 1.13+ #6185 356 357 * Fixed linter errors #6416 #6364 #6307 358 359 * More dollar-sign tests #6363 360 361 * VTExplain: use DiscoveryGateway (and old healthcheck) until migration can be completed #6248 362 363 * Deprecated RPCs from 6.0 have been deleted #6380 364 365 * Update references to orchestrator repo to point to openark instead of github #6360 366 367 * Terminology: deprecate or replace references to "slave" with “replica” except where referring to actual sql commands or fields returned from MySQL. #6428 #6392 #6379 368 369 * Terminology: replace user-facing references to "slave" with “replica” or “replication” in UI #6481 370 371 * Fix log format - use Infof instead of Info #6413 372 373 * Cleanup temp files used in tests #6400 374 375 * Add unit test for func stringMapToString #6280 376 377 * Check errors in etcd2topo unit test #6128 378 379 * Unit test for atomic.go #6120 380 381 * Unit test for ResolveIPv4Addrs #6230 382 383 * Enabled set statement tests #6167 384 385 * Replaced VTTablet ExecuteBatch api call with Execute for autocommit query. #6407 #6431 386 387 * Fixed flaky TestQueryPlanCache #6454 388 389 * Fix test compile errors #6434 390 391 * Scatter_conn unit test using new healthcheck #6458 392 393 * Test that vtexplain works with healthcheck #6252 394 395 * Tests: Removed error check that caused spurious test failures #6462 396 397 * More test cases for IGNORE_MAX_PAYLOAD_SIZE #6467 398 399 * VSCopy Test: Mods/bug fixes/test logging to make test repeatable/debuggable, fix flakiness #6341 #6235 400 401 * Cleanup scatter conn #6257 402 403 * Simplify vtgate executor #6256 404 405 * Add tests for SHOW COLUMNS #6192 406 407 * Added fuzzer #6175 408 409 * Simplified TxPool and ConnPool code #6150 410