vitess.io/vitess@v0.16.2/changelog/15.0/15.0.0/summary.md (about) 1 ## Summary 2 3 - **[Known Issues](#known-issues)** 4 - **[Breaking Changes](#breaking-changes)** 5 - [Flags](#flags) 6 - [VTTablet Flag Deletions](#vttablet-flag-deletions) 7 - [Vindex Interface](#vindex-interface) 8 - **[Deprecations](#deprecations)** 9 - [LogStats Table and Keyspace Deprecated](#logstats-table-and-keyspace-deprecated) 10 - [Orchestrator Integration Deprecation](#orchestrator-integration-deprecation) 11 - [Connection Pool Prefill](#connection-pool-prefill) 12 - [InitShardPrimary Deprecation](#initshardprimary-deprecation) 13 - **[Command-Line Syntax Deprecations](#command-line-syntax-deprecations)** 14 - [VTTablet Startup Flag Deletions](#vttablet-startup-flag-deletions) 15 - [VTTablet Startup Flag Deprecations](#vttablet-startup-flag-deprecations) 16 - [VTBackup Flag Deprecations](#vtbackup-flag-deprecations) 17 - **[VTGate](#vtgate)** 18 - [vtgate --mysql-server-pool-conn-read-buffers](#vtgate--mysql-server-pool-conn-read-buffers) 19 - **[VDiff2](#vdiff2)** 20 - [Resume Workflow](#resume-workflow) 21 - **[New command line flags and behavior](#new-command-line)** 22 - [vtctl GetSchema --table-schema-only](#vtctl-getschema--table-schema-only) 23 - [Support for Additional Compressors and Decompressors During Backup & Restore](#support-for-additional-compressors-and-decompressors-during-backup-&-restore) 24 - [Independent OLAP and OLTP Transactional Timeouts](#independant-olap-and-oltp-transactional-timeouts) 25 - [Support for Specifying Group Information in Calls to VTGate](#support-for-specifying-group-information-in-calls-to-vtgate) 26 - **[Online DDL Changes](#online-ddl-changes)** 27 - [Concurrent Vitess Migrations](#concurrent-vitess-migrations) 28 - [VTCtl Command Changes](#vtctl-command-changes) 29 - [New Syntax](#new-syntax) 30 - **[Tablet Throttler](#tablet-throttler)** 31 - [API Changes](#api-changes) 32 - **[Mysql Compatibility](#mysql-compatibility)** 33 - [System Settings](#system-settings) 34 - [Lookup Vindexes](#lookup-vindexes) 35 - **[Durability Policy](#durability-policy)** 36 - [Cross Cell](#cross-cell) 37 - **[New EXPLAIN Format](#new-explain-format)** 38 - [FORMAT=vtexplain](#formatvtexplain) 39 - **[VTOrc](#vtorc)** 40 - [Old UI Removal and Replacement](#old-ui-removal-and-replacement) 41 - [Configuration Refactor and New Flags](#configuratoin-refactor-and-new-flags) 42 - [Example Upgrade](#example-upgrade) 43 - [Default Configuration Files](#default-configuration-files) 44 - **[Flags Restructure](#flags-restructure)** 45 - [Flags Diff](#flags-diff) 46 47 ## <a id="known-issues"/>Known Issues 48 49 - [Corrupted results for non-full-group-by queries with JOINs](https://github.com/vitessio/vitess/issues/11625). This can be resolved by using full-group-by queries. 50 51 ## Major Changes 52 53 ### <a id="breaking-changes"/>Breaking Changes 54 55 #### <a id="flags"/>Flags 56 57 - The deprecated `--cpu_profile` flag has been removed. Please use the `--pprof` flag instead. 58 - The deprecated `--mem-profile-rate` flag has been removed. Please use `--pprof=mem` instead. 59 - The deprecated `--mutex-profile-fraction` flag has been removed. Please use `--pprof=mutex` instead. 60 - The deprecated vtgate/vtexplain/vtcombo flag `--planner_version` has been removed. Please use `--planner-version` instead. 61 - The deprecated flag `--master_connect_retry` has been removed. Please use `--replication_connect_retry` instead. 62 - `vtctl` commands that take shard names and ranges as positional arguments (e.g. `vtctl Reshard ks.workflow -80 -40,40-80`) need to have their positional arguments separated from their flag arguments by a double-dash separator to avoid the new parsing library from mistaking them as flags (e.g. `vtctl Reshard ks.workflow -- -80 -40,40-80`). 63 - The `--cell` flag in the `vtgate` binary no longer has a default value. It is a required argument that has to be specified for the binary to run. Please explicitly specify the flag, if dependent on the flag's default value. 64 - The `--db-config-*-*` VTTablet flags were deprecated in `v3.0.0`. They have now been deleted as part of this release. You must use `--db_dba_*` now. 65 66 #### <a id="vttablet-flag-deletions"/>vttablet Flag Deletions 67 The following VTTablet flags were deprecated in 7.0. They have now been deleted 68 - `--queryserver-config-message-conn-pool-size` 69 - `--queryserver-config-message-conn-pool-prefill-parallelism` 70 - `--client-found-rows-pool-size` A different existing flag `--queryserver-config-transaction-cap` will be used instead 71 - `--transaction_shutdown_grace_period` Use `--shutdown_grace_period` instead 72 - `--queryserver-config-max-dml-rows` 73 - `--queryserver-config-allowunsafe-dmls` 74 - `--pool-name-prefix` 75 - `--enable-autocommit` Autocommit is always allowed 76 77 #### <a id="vindex-interface"/>Vindex Interface 78 79 All the vindex interface methods are changed by adding `context.Context` as an input parameter. 80 81 E.g: 82 ```go 83 Map(vcursor VCursor, .... ) .... 84 To 85 Map(ctx context.Context, vcursor VCursor, .... ) .... 86 ``` 87 88 This only affects users who have added their own custom vindex implementation. 89 They are required to change their implementation with these new interface method expectations. 90 91 ### <a id="deprecations"/>Deprecations 92 93 #### <a id="logstats-table-and-keyspace-deprecated"/>LogStats Table and Keyspace deprecated 94 95 Information about which tables are used was being reported through the `Keyspace` and `Table` fields on LogStats. 96 For multi-table queries, this output can be confusing, so we have added `TablesUsed`, that is a string array, listing all tables and which keyspace they are on. 97 `Keyspace` and `Table` fields are deprecated and will be removed in the v16 release of Vitess. 98 99 #### <a id="orchestrator-integration-deprecation"/>Orchestrator Integration Deprecation 100 101 Orchestrator integration in `vttablet` has been deprecated. It will continue to work in this release but is liable to be removed in future releases. 102 Consider using VTOrc instead of Orchestrator as VTOrc goes GA in this release. 103 104 #### <a id="connection-pool-prefill"/>Connection Pool Prefill 105 106 The connection pool with prefilled connections have been removed. The pool now does lazy connection creation. 107 108 #### <a id="initshardprimary-deprecation"/>InitShardPrimary Deprecation 109 110 The vtcltd command InitShardPrimary has been deprecated. Please use PlannedReparentShard instead. 111 112 ### <a id="command-line-syntax-deprecations"/>Command-line syntax deprecations 113 114 #### <a id="vttablet-startup-flag-deletions"/>vttablet startup flag deletions 115 The following VTTablet flags were deprecated in 7.0. They have now been deleted 116 - --queryserver-config-message-conn-pool-size 117 - --queryserver-config-message-conn-pool-prefill-parallelism 118 - --client-found-rows-pool-size --queryserver-config-transaction-cap will be used instead 119 - --transaction_shutdown_grace_period Use --shutdown_grace_period instead 120 - --queryserver-config-max-dml-rows 121 - --queryserver-config-allowunsafe-dmls 122 - --pool-name-prefix 123 - --enable-autocommit Autocommit is always allowed 124 125 #### <a id="vttablet-startup-flag-deprecations"/>vttablet startup flag deprecations 126 - `--enable-query-plan-field-caching` has been deprecated. It will be removed in v16. 127 - `--enable_semi_sync` has been deprecated. It will be removed in v16. Instead, set the correct durability policy using `SetKeyspaceDurabilityPolicy` 128 - `--queryserver-config-pool-prefill-parallelism`, `--queryserver-config-stream-pool-prefill-parallelism` and `--queryserver-config-transaction-prefill-parallelism` have all been deprecated. They will be removed in v16. 129 - `--backup_storage_hook` has been deprecated, consider using one of the builtin compression algorithms or `--external-compressor` and `--external-decompressor` instead. 130 131 #### <a id="vtbackup-flag-deprecations"/>vtbackup flag deprecations 132 - `--backup_storage_hook` has been deprecated, consider using one of the builtin compression algorithms or `--external-compressor` and `--external-decompressor` instead. 133 134 ### <a id="vtgate"/>VTGate 135 136 #### <a id="vtgate--mysql-server-pool-conn-read-buffers"/>vtgate --mysql-server-pool-conn-read-buffers 137 138 `--mysql-server-pool-conn-read-buffers` enables pooling of buffers used to read from incoming 139 connections, similar to the way pooling happens for write buffers. Defaults to off. 140 141 ### <a id="vdiff2"/>VDiff v2 142 143 #### <a id="resume-workflow"/>Resume Workflow 144 145 We introduced the ability to resume a VDiff2 workflow: 146 ``` 147 $ vtctlclient --server=localhost:15999 VDiff --v2 customer.commerce2customer resume 4c664dc2-eba9-11ec-9ef7-920702940ee0 148 VDiff 4c664dc2-eba9-11ec-9ef7-920702940ee0 resumed on target shards, use show to view progress 149 150 $ vtctlclient --server=localhost:15999 VDiff --v2 customer.commerce2customer show last 151 152 VDiff Summary for customer.commerce2customer (4c664dc2-eba9-11ec-9ef7-920702940ee0) 153 State: completed 154 RowsCompared: 196 155 HasMismatch: false 156 StartedAt: 2022-06-26 22:44:29 157 CompletedAt: 2022-06-26 22:44:31 158 159 Use "--format=json" for more detailed output. 160 161 $ vtctlclient --server=localhost:15999 VDiff --v2 --format=json customer.commerce2customer show last 162 { 163 "Workflow": "commerce2customer", 164 "Keyspace": "customer", 165 "State": "completed", 166 "UUID": "4c664dc2-eba9-11ec-9ef7-920702940ee0", 167 "RowsCompared": 196, 168 "HasMismatch": false, 169 "Shards": "0", 170 "StartedAt": "2022-06-26 22:44:29", 171 "CompletedAt": "2022-06-26 22:44:31" 172 } 173 ``` 174 175 We leverage this resume capability to automatically restart a VDiff2 workflow that encountered a retryable error. 176 177 We also made a number of other enhancements like progress reporting and features needed to make it a full replacement for VDiff v1. You can see more details in the tracking ticket for the VDiff2 feature complete target: https://github.com/vitessio/vitess/issues/10494 178 179 Now that VDiff v2 is feature complete in 15.0, we hope to make it GA in 16.0. 180 181 Please see the VDiff2 [documentation](https://vitess.io/docs/15.0/reference/vreplication/vdiff2/) for additional information. 182 183 ### <a id="new-command-line"/>New command line flags and behavior 184 185 #### <a id="vtctl-getschema--table-schema-only"/>vtctl GetSchema --table-schema-only 186 187 The new flag `--table-schema-only` skips column introspection. `GetSchema` only returns general schema analysis, and specifically it includes the `CREATE TABLE|VIEW` statement in the `schema` field. 188 189 #### <a id="support-for-additional-compressors-and-decompressors-during-backup-&-restore"/>Support for additional compressors and decompressors during backup & restore 190 Backup/Restore now allow you many more options for compression and decompression instead of relying on the default compressor(`pargzip`). 191 There are some built-in compressors which you can use out-of-the-box. Users will need to evaluate which option works best for their 192 use-case. Here are the flags that control this feature 193 194 - `--compression-engine-name` 195 - `--external-compressor` 196 - `--external-decompressor` 197 - `--external-compressor-extension` 198 - `--compression-level` 199 200 `--compression-engine-name` specifies the engine used for compression. It can have one of the following values 201 202 - pargzip (Default) 203 - pgzip 204 - lz4 205 - zstd 206 - external 207 208 If you want to use any of the built-in compressors, simply set one of the above values other than `external` for `--compression-engine-name`. The value 209 specified in `--compression-engine-name` is saved in the backup MANIFEST, which is later read by the restore process to decide which 210 engine to use for decompression. Default value for engine is 'pargzip'. 211 212 If you would like to use a custom command or external tool for compression/decompression then you need to provide the full command with 213 arguments to the `--external-compressor` and `--external-decompressor` flags. `--external-compressor-extension` flag also needs to be provided 214 so that compressed files are created with the correct extension. If the external command is not using any of the built-in compression engines 215 (i.e. pgzip, pargzip, lz4 or zstd) then you need to set `--compression-engine-name` to value 'external'. 216 217 Please note that if you want to keep the current behavior then you don't need to provide any of these flags. 218 You can read more about backup & restore [here] (https://vitess.io/docs/15.0/user-guides/operating-vitess/backup-and-restore/). 219 220 If you decided to switch from an external compressor to one of the built-in supported compressors (i.e. pgzip, pargzip, lz4 or zstd) at any point 221 in the future, you will need to do it in two steps. 222 223 - step #1, set `--external-compressor` and `--external-compressor-extension` flag values to empty and change `--compression-engine-name` to desired value. 224 - Step #2, after at least one cycle of backup with new configuration, you can set `--external-decompressor` flag value to empty. 225 226 The reason you cannot change all the values together is because the restore process will then have no way to find out which external decompressor 227 should be used to process the previous backup. Please make sure you have thought out all possible scenarios for restore before transitioning from one 228 compression engine to another. 229 230 #### <a id="independant-olap-and-oltp-transactional-timeouts"/>Independent OLAP and OLTP transactional timeouts 231 232 `--queryserver-config-olap-transaction-timeout` specifies the timeout applied 233 to a transaction created within an OLAP workload. The default value is `30` 234 seconds, but this can be raised, lowered, or set to zero to disable the timeout 235 altogether. 236 237 Until now, while OLAP queries would bypass the query timeout, transactions 238 created within an OLAP session would be rolled back 239 `--queryserver-config-transaction-timeout` seconds after the transaction was 240 started. 241 242 As of now, OLTP and OLAP transaction timeouts can be configured independently of each 243 other. 244 245 The main use case is to run queries spanning a long period of time which 246 require transactional guarantees such as consistency or atomicity. 247 248 #### <a id="support-for-specifying-group-information-in-calls-to-vtgate"/>Support for specifying group information in calls to VTGate 249 250 `--grpc-use-effective-groups` allows non-SSL callers to specify groups information for a caller. 251 Until now, you could only specify the caller-id for the security context used to authorize queries. 252 As of now, you can specify the principal of the caller, and any groups they belong to. 253 254 ### <a id="online-ddl-changes"/>Online DDL changes 255 256 #### <a id="concurrent-vitess-migrations"/>Concurrent vitess migrations 257 258 All Online DDL migrations using the `vitess` strategy are now eligible to run concurrently, given `--allow-concurrent` DDL strategy flag. Until now, only `CREATE`, `DROP` and `REVERT` migrations were eligible, and now `ALTER` migrations are supported, as well. The terms for `ALTER` migrations concurrency: 259 260 - DDL strategy must be `vitess --allow-concurent ...` 261 - No two migrations can run concurrently on the same table 262 - No two `ALTER`s will copy table data concurrently 263 - A concurrent `ALTER` migration will not start if another `ALTER` is running and is not `ready_to_complete` 264 265 The main use case is to run multiple concurrent migrations, all with `--postpone-completion`. All table-copy operations will run sequentially, but no migration will actually cut-over, and eventually all migrations will be `ready_to_complete`, continuously tailing the binary logs and keeping up-to-date. A quick and iterative `ALTER VITESS_MIGRATION '...' COMPLETE` sequence of commands will cut-over all migrations _closely together_ (though not atomically together). 266 267 #### <a id="vtctl-command-changes"/>vtctl command changes. 268 All `online DDL show` commands can now be run with a few additional parameters 269 - `--order` , order migrations in the output by either ascending or descending order of their `id` fields. 270 - `--skip` , skip specified number of migrations in the output. 271 - `--limit` , limit results to a specified number of migrations in the output. 272 273 #### <a id="new-syntax"/>New syntax 274 275 The following is now supported: 276 277 ```sql 278 ALTER VITESS_MIGRATION COMPLETE ALL 279 ``` 280 281 This works on all pending migrations (`queued`, `ready`, `running`) and internally issues a `ALTER VITESS_MIGRATION '<uuid>' COMPLETE` for each one. The command is useful for completing multiple concurrent migrations (see above) that are open-ended (`--postpone-completion`). 282 283 ### <a id="tablet-throttler"/>Tablet Throttler 284 285 #### <a id="api-changes"/>API changes 286 287 API endpoint `/debug/vars` now exposes throttler metrics, such as number of hits and errors per app per check type. Example: 288 289 ```shell 290 $ curl -s http://127.0.0.1:15100/debug/vars | jq . | grep Throttler 291 "ThrottlerAggregatedMysqlSelf": 0.191718, 292 "ThrottlerAggregatedMysqlShard": 0.960054, 293 "ThrottlerCheckAnyError": 27, 294 "ThrottlerCheckAnyMysqlSelfError": 13, 295 "ThrottlerCheckAnyMysqlSelfTotal": 38, 296 "ThrottlerCheckAnyMysqlShardError": 14, 297 "ThrottlerCheckAnyMysqlShardTotal": 42, 298 "ThrottlerCheckAnyTotal": 80, 299 "ThrottlerCheckMysqlSelfSecondsSinceHealthy": 0, 300 "ThrottlerCheckMysqlShardSecondsSinceHealthy": 0, 301 "ThrottlerProbesLatency": 355523, 302 "ThrottlerProbesTotal": 74, 303 ``` 304 305 ### <a id="mysql-compatibility"/>Mysql Compatibility 306 307 #### <a id="system-settings"/>System Settings 308 Vitess has had support for system settings from release 7.0 onwards, but this support came with some caveats. 309 As soon as a client session changes a default system setting, a mysql connection gets reserved for it. 310 This can sometimes lead to clients running out of mysql connections. 311 Users were instructed to minimize the use of this feature and to try to set the desired system settings as defaults in the mysql config. 312 313 With this release, Vitess can handle system settings changes in a much better way and clients can use them more freely. 314 Vitess now has the ability to pool changed settings without reserving connections for any particular session. 315 316 This feature can be enabled by setting `queryserver-enable-settings-pool` flag on the vttablet. It is disabled by default. 317 In future releases, we will make this flag enabled by default. 318 319 #### <a id="lookup-vindexes"/>Lookup Vindexes 320 321 Lookup vindexes now support a new parameter `multi_shard_autocommit`. If this is set to `true`, lookup vindex dml queries will be sent as autocommit to all shards instead of being wrapped in a transaction. 322 This is different from the existing `autocommit` parameter where the query is sent in its own transaction separate from the ongoing transaction if any i.e. begin -> lookup query execs -> commit/rollback 323 324 ### <a id="durability-policy"/>Durability Policy 325 326 #### <a id="cross-cell"/>Cross Cell 327 328 A new durability policy `cross_cell` is now supported. `cross_cell` durability policy only allows replica tablets from a different cell than the current primary to 329 send semi-sync ACKs. This ensures that any committed write exists in at least 2 tablets belonging to different cells. 330 331 ### <a id="new-explain-format"/>New EXPLAIN format 332 333 #### <a id="format=vtexplain"/>FORMAT=vtexplain 334 335 With this new `explain` format, you can get an output that is very similar to the command line `vtexplain` app, but from a running `vtgate`, through a MySQL query. 336 337 ### <a id="vtorc"/>VTOrc 338 339 #### <a id="old-ui-removal-and-replacement"/>Old UI Removal and Replacement 340 341 The old UI that VTOrc inherited from `Orchestrator` has been removed. A replacement UI, more consistent with the other Vitess binaries has been created. 342 In order to use the new UI, `--port` flag has to be provided. 343 344 Along with the UI, the old APIs have also been deprecated. However, some of them have been ported over to the new UI - 345 346 | Old API | New API | Additional notes | 347 |----------------------------------|----------------------------------|-----------------------------------------------------------------------| 348 | `/api/problems` | `/api/problems` | The new API also supports filtering using the keyspace and shard name | 349 | `/api/disable-global-recoveries` | `/api/disable-global-recoveries` | Functionally remains the same | 350 | `/api/enable-global-recoveries` | `/api/enable-global-recoveries` | Functionally remains the same | 351 | `/api/health` | `/debug/health` | Functionally remains the same | 352 | `/api/replication-analysis` | `/api/replication-analysis` | Functionally remains the same. Output is now JSON format. | 353 354 Apart from these APIs, we also now have `/debug/status`, `/debug/vars` and `/debug/liveness` available in the new UI. 355 356 #### <a id="configuratoin-refactor-and-new-flags"/>Configuration Refactor and New Flags 357 358 Since VTOrc was forked from `Orchestrator`, it inherited a lot of configurations that don't make sense for the Vitess use-case. 359 All of such configurations have been removed. 360 361 VTOrc ignores the configurations that it doesn't understand. So old configurations can be kept around on upgrading and won't cause any issues. 362 They will just be ignored. 363 364 For all the configurations that are kept, flags have been added for them and the flags are the desired way to pass these configurations going forward. 365 The config file will be deprecated and removed in upcoming releases. The following is a list of all the configurations that are kept and the associated flags added. 366 367 | Configurations Kept | Flags Introduced | 368 |:-------------------------------------:|:-------------------------------------:| 369 | SQLite3DataFile | `--sqlite-data-file` | 370 | InstancePollSeconds | `--instance-poll-time` | 371 | SnapshotTopologiesIntervalHours | `--snapshot-topology-interval` | 372 | ReasonableReplicationLagSeconds | `--reasonable-replication-lag` | 373 | AuditLogFile | `--audit-file-location` | 374 | AuditToSyslog | `--audit-to-backend` | 375 | AuditToBackendDB | `--audit-to-syslog` | 376 | AuditPurgeDays | `--audit-purge-duration` | 377 | RecoveryPeriodBlockSeconds | `--recovery-period-block-duration` | 378 | PreventCrossDataCenterPrimaryFailover | `--prevent-cross-cell-failover` | 379 | LockShardTimeoutSeconds | `--lock-shard-timeout` | 380 | WaitReplicasTimeoutSeconds | `--wait-replicas-timeout` | 381 | TopoInformationRefreshSeconds | `--topo-information-refresh-duration` | 382 | RecoveryPollSeconds | `--recovery-poll-duration` | 383 384 Apart from configurations, some flags from VTOrc have also been removed - 385 - `sibling` 386 - `destination` 387 - `discovery` 388 - `skip-unresolve` 389 - `skip-unresolve-check` 390 - `noop` 391 - `binlog` 392 - `statement` 393 - `grab-election` 394 - `promotion-rule` 395 - `skip-continuous-registration` 396 - `enable-database-update` 397 - `ignore-raft-setup` 398 - `tag` 399 400 The ideal way to ensure backward compatibility is to remove the flags listed above while on the previous release. Then upgrade VTOrc. 401 After upgrading, remove the config file and instead pass the flags that are introduced. 402 403 #### <a id="example-upgrade"/>Example Upgrade 404 405 If you are running VTOrc with the flags `--ignore-raft-setup --clusters_to_watch="ks/0" --config="path/to/config"` and the following configuration 406 ```json 407 { 408 "Debug": true, 409 "ListenAddress": ":6922", 410 "MySQLTopologyUser": "orc_client_user", 411 "MySQLTopologyPassword": "orc_client_user_password", 412 "MySQLReplicaUser": "vt_repl", 413 "MySQLReplicaPassword": "", 414 "RecoveryPeriodBlockSeconds": 1, 415 "InstancePollSeconds": 1, 416 "PreventCrossDataCenterPrimaryFailover": true 417 } 418 ``` 419 First drop the flag `--ignore-raft-setup` while on the previous release. So, you'll be running VTOrc with `--clusters_to_watch="ks/0" --config="path/to/config"` and the same configuration listed above. 420 421 Now you can upgrade your VTOrc version continuing to use the same flags and configurations, and it will continue to work just the same. If you wish to use the new UI, then you can add the `--port` flag as well. 422 423 After upgrading, you can drop the configuration entirely and use the new flags like `--clusters_to_watch="ks/0" --recovery-period-block-duration=1s --instance-poll-time=1s --prevent-cross-cell-failover` 424 425 #### <a id="default-configuration-files"/>Default Configuration Files 426 427 The default files that VTOrc searches for configurations in have also changed from `"/etc/orchestrator.conf.json", "conf/orchestrator.conf.json", "orchestrator.conf.json"` to 428 `"/etc/vtorc.conf.json", "conf/vtorc.conf.json", "vtorc.conf.json"`. 429 430 ### <a id="flags-restructure"/>Flags Restructure 431 432 #### <a id="flags-diff"/>Flags Diff 433 434 In addition to these major streams of work in release-15.0, we have made tremendous progress on [VEP-4, aka The Flag Situation](https://github.com/vitessio/enhancements/blob/main/veps/vep-4.md), reorganizing our code so that Vitess binaries and their flags are 435 clearly aligned in help text. An immediate win for usability, this positions us well to move on to a [viper](https://github.com/spf13/viper) implementation which will facilitate additional improvements including standardization of flag syntax and runtime configuration reloads. 436 We are also aligning with industry standards regarding the use of flags, ensuring a seamless experience for users migrating from or integrating with other platforms. 437 Below are the changes for each binary. 438 - [mysqlctl](https://github.com/vitessio/vitess/blob/release-15.0/doc/flags/14.0-to-15.0-transition/mysqlctl.diff) 439 - [mysqlctld](https://github.com/vitessio/vitess/blob/release-15.0/doc/flags/14.0-to-15.0-transition/mysqlctld.diff) 440 - [vtaclcheck](https://github.com/vitessio/vitess/blob/release-15.0/doc/flags/14.0-to-15.0-transition/vtaclcheck.diff) 441 - [vtadmin](https://github.com/vitessio/vitess/blob/release-15.0/doc/flags/14.0-to-15.0-transition/vtadmin.diff) 442 - [vtctlclient](https://github.com/vitessio/vitess/blob/release-15.0/doc/flags/14.0-to-15.0-transition/vtctlclient.diff) 443 - [vtctld](https://github.com/vitessio/vitess/blob/release-15.0/doc/flags/14.0-to-15.0-transition/vtctld.diff) 444 - [vtctldclient](https://github.com/vitessio/vitess/blob/release-15.0/doc/flags/14.0-to-15.0-transition/vtctldclient.diff) 445 - [vtexplain](https://github.com/vitessio/vitess/blob/release-15.0/doc/flags/14.0-to-15.0-transition/vtexplain.diff) 446 - [vtgate](https://github.com/vitessio/vitess/blob/release-15.0/doc/flags/14.0-to-15.0-transition/vtgate.diff) 447 - [vtgtr](https://github.com/vitessio/vitess/blob/release-15.0/doc/flags/14.0-to-15.0-transition/vtgtr.diff) 448 - [vtorc](https://github.com/vitessio/vitess/blob/release-15.0/doc/flags/14.0-to-15.0-transition/vtorc.diff) 449 - [vttablet](https://github.com/vitessio/vitess/blob/release-15.0/doc/flags/14.0-to-15.0-transition/vttablet.diff) 450 - [vttestserver](https://github.com/vitessio/vitess/blob/release-15.0/doc/flags/14.0-to-15.0-transition/vttestserver.diff) 451 - [vttlstest](https://github.com/vitessio/vitess/blob/release-15.0/doc/flags/14.0-to-15.0-transition/vttlstest.diff) 452 - [zk](https://github.com/vitessio/vitess/blob/release-15.0/doc/flags/14.0-to-15.0-transition/zk.diff) 453 - [zkctl](https://github.com/vitessio/vitess/blob/release-15.0/doc/flags/14.0-to-15.0-transition/zkctl.diff) 454 - [zkctld](https://github.com/vitessio/vitess/blob/release-15.0/doc/flags/14.0-to-15.0-transition/zkctld.diff)