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