From bdd7fe09c87425b3df03c00bdcaf64c3f3157c82 Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Thu, 13 Jun 2024 09:00:57 +0300 Subject: [PATCH 1/3] update vitess image versions Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- content/en/docs/20.0/get-started/local-docker.md | 1 + content/en/docs/20.0/get-started/local-mac.md | 1 + content/en/docs/20.0/get-started/local.md | 4 ++-- content/en/docs/20.0/get-started/operator.md | 1 + content/en/docs/20.0/get-started/vttestserver-docker-image.md | 1 + content/en/docs/releases/_index.md | 3 +++ 6 files changed, 9 insertions(+), 2 deletions(-) diff --git a/content/en/docs/20.0/get-started/local-docker.md b/content/en/docs/20.0/get-started/local-docker.md index d4bf43fd5..b1db9cc46 100644 --- a/content/en/docs/20.0/get-started/local-docker.md +++ b/content/en/docs/20.0/get-started/local-docker.md @@ -21,6 +21,7 @@ Clone the GitHub repository via: ```shell cd vitess +git checkout release-20.0 ``` ## Build the docker image diff --git a/content/en/docs/20.0/get-started/local-mac.md b/content/en/docs/20.0/get-started/local-mac.md index da2654ec4..f249e729c 100644 --- a/content/en/docs/20.0/get-started/local-mac.md +++ b/content/en/docs/20.0/get-started/local-mac.md @@ -76,6 +76,7 @@ With everything now in place you can clone and build Vitess. ```sh $ git clone https://github.com/vitessio/vitess.git $ cd vitess +$ git checkout release-20.0 $ make build ``` diff --git a/content/en/docs/20.0/get-started/local.md b/content/en/docs/20.0/get-started/local.md index de8bc7651..46bff90f6 100644 --- a/content/en/docs/20.0/get-started/local.md +++ b/content/en/docs/20.0/get-started/local.md @@ -88,8 +88,8 @@ Download the [latest binary release](https://github.com/vitessio/vitess/releases * Ubuntu is the only fully supported OS, for another OS please [build Vitess by yourself](/docs/contributing) or use the Docker images. ```sh -version=19.0.0-rc1 -file=vitess-${version}-1bdb462.tar.gz +version=20.0.0-rc1 +file=vitess-${version}-fe01c8d.tar.gz wget https://github.com/vitessio/vitess/releases/download/v${version}/${file} tar -xzf ${file} cd ${file/.tar.gz/} diff --git a/content/en/docs/20.0/get-started/operator.md b/content/en/docs/20.0/get-started/operator.md index 7a6685655..5720f49b8 100644 --- a/content/en/docs/20.0/get-started/operator.md +++ b/content/en/docs/20.0/get-started/operator.md @@ -33,6 +33,7 @@ Change to the operator example directory: ```bash git clone https://github.com/vitessio/vitess cd vitess/examples/operator +git checkout release-20.0 ``` Install the operator: diff --git a/content/en/docs/20.0/get-started/vttestserver-docker-image.md b/content/en/docs/20.0/get-started/vttestserver-docker-image.md index 7d72717a9..6e10480db 100644 --- a/content/en/docs/20.0/get-started/vttestserver-docker-image.md +++ b/content/en/docs/20.0/get-started/vttestserver-docker-image.md @@ -22,6 +22,7 @@ Clone the GitHub repository via: ```shell cd vitess +git checkout release-20.0 ``` #### Build the docker image diff --git a/content/en/docs/releases/_index.md b/content/en/docs/releases/_index.md index d6eb11ff7..b104cd078 100644 --- a/content/en/docs/releases/_index.md +++ b/content/en/docs/releases/_index.md @@ -17,6 +17,9 @@ Each major release is maintained for 1 year. > The latest and current vitess release is v17.0 +### v20.0 +- **Current version:** [v20.0.0-rc1](https://github.com/vitessio/vitess/releases/tag/v20.0.0-rc1) (2024-06-13) + ### v19.0 - **Current version:** [v19.0.4](https://github.com/vitessio/vitess/releases/tag/v19.0.4) (2024-05-08) - **Initial GA release:** [v19.0.0](https://github.com/vitessio/vitess/releases/tag/v19.0.0) (2024-03-06) From 9da6fbb248815ffe3022e72b404eb1d7f12a5f4c Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Thu, 13 Jun 2024 09:08:19 +0300 Subject: [PATCH 2/3] 21.0 docs Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- config.toml | 4 +- content/en/docs/20.0/_index.md | 4 +- content/en/docs/21.0/_index.md | 11 + content/en/docs/21.0/concepts/_index.md | 6 + content/en/docs/21.0/concepts/cell.md | 10 + .../en/docs/21.0/concepts/execution-plans.md | 33 + content/en/docs/21.0/concepts/img/VStream.svg | 1 + content/en/docs/21.0/concepts/keyspace-id.md | 10 + content/en/docs/21.0/concepts/keyspace.md | 8 + content/en/docs/21.0/concepts/move-tables.md | 26 + .../en/docs/21.0/concepts/query-rewriting.md | 248 ++ .../docs/21.0/concepts/replication-graph.md | 6 + content/en/docs/21.0/concepts/shard.md | 46 + content/en/docs/21.0/concepts/tablet.md | 20 + .../en/docs/21.0/concepts/topology-service.md | 30 + content/en/docs/21.0/concepts/vschema.md | 9 + content/en/docs/21.0/concepts/vstream.md | 26 + content/en/docs/21.0/concepts/vtctl.md | 9 + content/en/docs/21.0/concepts/vtctld.md | 7 + content/en/docs/21.0/concepts/vtgate.md | 11 + content/en/docs/21.0/get-started/_index.md | 8 + .../en/docs/21.0/get-started/local-docker.md | 98 + content/en/docs/21.0/get-started/local-mac.md | 311 +++ content/en/docs/21.0/get-started/local.md | 341 +++ content/en/docs/21.0/get-started/operator.md | 172 ++ .../get-started/vttestserver-docker-image.md | 152 + content/en/docs/21.0/overview/_index.md | 8 + content/en/docs/21.0/overview/architecture.md | 17 + content/en/docs/21.0/overview/cloud-native.md | 19 + content/en/docs/21.0/overview/history.md | 19 + .../docs/21.0/overview/img/architecture.svg | 86 + .../21.0/overview/scalability-philosophy.md | 75 + .../docs/21.0/overview/supported-databases.md | 29 + content/en/docs/21.0/overview/whatisvitess.md | 69 + content/en/docs/21.0/reference/_index.md | 7 + .../reference/backup-and-restore/_index.md | 7 + .../reference/backup-and-restore/metrics.md | 128 + .../21.0/reference/compatibility/_index.md | 6 + .../compatibility/mysql-compatibility.md | 231 ++ .../en/docs/21.0/reference/errors/_index.md | 6 + .../21.0/reference/errors/query-serving.md | 124 + .../en/docs/21.0/reference/features/_index.md | 6 + .../reference/features/connection-pools.md | 154 ++ .../21.0/reference/features/global-routing.md | 153 + .../reference/features/img/vschema_arch.png | Bin 0 -> 259778 bytes .../docs/21.0/reference/features/messaging.md | 224 ++ .../21.0/reference/features/monitoring.md | 42 + .../features/mysql-query-extensions.md | 17 + .../reference/features/mysql-replication.md | 37 + .../docs/21.0/reference/features/recovery.md | 186 ++ .../reference/features/schema-management.md | 117 + .../features/schema-routing-rules.md | 178 ++ .../reference/features/schema-tracking.md | 26 + .../docs/21.0/reference/features/sharding.md | 99 + .../en/docs/21.0/reference/features/show.md | 118 + .../reference/features/tablet-throttler.md | 469 ++++ .../reference/features/topology-service.md | 746 +++++ .../features/transport-security-model.md | 125 + .../reference/features/two-phase-commit.md | 102 + .../docs/21.0/reference/features/vindexes.md | 348 +++ .../reference/features/vitess-sequences.md | 241 ++ .../docs/21.0/reference/features/vschema.md | 311 +++ .../reference/features/vtgate-buffering.md | 171 ++ .../img/vitesstransportsecuritymodel.png | Bin 0 -> 62871 bytes .../en/docs/21.0/reference/programs/_index.md | 7 + .../reference/programs/mysqlctl/_index.md | 107 + .../programs/mysqlctl/mysqlctl_init.md | 119 + .../programs/mysqlctl/mysqlctl_init_config.md | 117 + .../programs/mysqlctl/mysqlctl_position.md | 102 + .../mysqlctl/mysqlctl_reinit_config.md | 117 + .../programs/mysqlctl/mysqlctl_shutdown.md | 115 + .../programs/mysqlctl/mysqlctl_start.md | 114 + .../programs/mysqlctl/mysqlctl_teardown.md | 118 + .../reference/programs/mysqlctld/_index.md | 144 + .../reference/programs/regular-expression.txt | 11 + .../reference/programs/topo2topo/_index.md | 61 + .../reference/programs/vtaclcheck/_index.md | 43 + .../21.0/reference/programs/vtadmin-web.md | 36 + .../docs/21.0/reference/programs/vtadmin.md | 80 + .../docs/21.0/reference/programs/vtbackup.md | 240 ++ .../reference/programs/vtbackup/_index.md | 260 ++ .../reference/programs/vtclient/_index.md | 72 + .../21.0/reference/programs/vtcombo/_index.md | 460 ++++ .../21.0/reference/programs/vtctl/_index.md | 268 ++ .../reference/programs/vtctl/cell-aliases.md | 80 + .../21.0/reference/programs/vtctl/cells.md | 114 + .../21.0/reference/programs/vtctl/generic.md | 91 + .../reference/programs/vtctl/keyspaces.md | 388 +++ .../programs/vtctl/replication-graph.md | 30 + .../vtctl/schema-version-permissions.md | 384 +++ .../reference/programs/vtctl/serving-graph.md | 70 + .../21.0/reference/programs/vtctl/shards.md | 467 ++++ .../21.0/reference/programs/vtctl/tablets.md | 437 +++ .../reference/programs/vtctl/throttler.md | 52 + .../21.0/reference/programs/vtctl/topo.md | 69 + .../21.0/reference/programs/vtctld/_index.md | 200 ++ .../reference/programs/vtctldclient/_index.md | 131 + .../vtctldclient/vtctldclient_AddCellInfo.md | 44 + .../vtctldclient_AddCellsAlias.md | 43 + .../vtctldclient_ApplyKeyspaceRoutingRules.md | 39 + .../vtctldclient_ApplyRoutingRules.md | 39 + .../vtctldclient/vtctldclient_ApplySchema.md | 58 + .../vtctldclient_ApplyShardRoutingRules.md | 39 + .../vtctldclient/vtctldclient_ApplyVSchema.md | 42 + .../vtctldclient/vtctldclient_Backup.md | 38 + .../vtctldclient/vtctldclient_BackupShard.md | 44 + .../vtctldclient_ChangeTabletType.md | 42 + .../vtctldclient_CreateKeyspace.md | 48 + .../vtctldclient/vtctldclient_CreateShard.md | 36 + .../vtctldclient_DeleteCellInfo.md | 39 + .../vtctldclient_DeleteCellsAlias.md | 38 + .../vtctldclient_DeleteKeyspace.md | 43 + .../vtctldclient/vtctldclient_DeleteShards.md | 45 + .../vtctldclient_DeleteSrvVSchema.md | 34 + .../vtctldclient_DeleteTablets.md | 35 + .../vtctldclient_EmergencyReparentShard.md | 39 + .../vtctldclient_ExecuteFetchAsApp.md | 37 + .../vtctldclient_ExecuteFetchAsDBA.md | 38 + .../vtctldclient/vtctldclient_ExecuteHook.md | 48 + .../vtctldclient_ExecuteMultiFetchAsDBA.md | 38 + .../vtctldclient_FindAllShardsInKeyspace.md | 34 + .../vtctldclient_GenerateShardRanges.md | 34 + .../vtctldclient/vtctldclient_GetBackups.md | 36 + .../vtctldclient/vtctldclient_GetCellInfo.md | 34 + .../vtctldclient_GetCellInfoNames.md | 34 + .../vtctldclient_GetCellsAliases.md | 34 + .../vtctldclient_GetFullStatus.md | 34 + .../vtctldclient/vtctldclient_GetKeyspace.md | 34 + .../vtctldclient_GetKeyspaceRoutingRules.md | 34 + .../vtctldclient/vtctldclient_GetKeyspaces.md | 34 + .../vtctldclient_GetPermissions.md | 34 + .../vtctldclient_GetRoutingRules.md | 34 + .../vtctldclient/vtctldclient_GetSchema.md | 40 + .../vtctldclient/vtctldclient_GetShard.md | 34 + .../vtctldclient_GetShardReplication.md | 34 + .../vtctldclient_GetShardRoutingRules.md | 42 + .../vtctldclient_GetSrvKeyspaceNames.md | 34 + .../vtctldclient_GetSrvKeyspaces.md | 34 + .../vtctldclient_GetSrvVSchema.md | 34 + .../vtctldclient_GetSrvVSchemas.md | 34 + .../vtctldclient/vtctldclient_GetTablet.md | 34 + .../vtctldclient_GetTabletVersion.md | 34 + .../vtctldclient/vtctldclient_GetTablets.md | 62 + .../vtctldclient_GetTopologyPath.md | 36 + .../vtctldclient/vtctldclient_GetVSchema.md | 34 + .../vtctldclient/vtctldclient_GetWorkflows.md | 36 + .../vtctldclient_InitShardPrimary.md | 41 + .../vtctldclient_LegacyVtctlCommand.md | 67 + .../vtctldclient_LookupVindex/_index.md | 36 + .../vtctldclient_LookupVindex_cancel.md | 42 + .../vtctldclient_LookupVindex_create.md | 53 + .../vtctldclient_LookupVindex_externalize.md | 43 + .../vtctldclient_LookupVindex_show.md | 42 + .../vtctldclient_Materialize/_index.md | 38 + .../vtctldclient_Materialize_cancel.md | 43 + .../vtctldclient_Materialize_create.md | 82 + .../vtctldclient_Materialize_show.md | 44 + .../vtctldclient_Materialize_start.md | 43 + .../vtctldclient_Materialize_stop.md | 43 + .../vtctldclient_Migrate/_index.md | 38 + .../vtctldclient_Migrate_cancel.md | 43 + .../vtctldclient_Migrate_complete.md | 43 + .../vtctldclient_Migrate_create.md | 58 + .../vtctldclient_Migrate_show.md | 44 + .../vtctldclient_Migrate_status.md | 43 + .../vtctldclient/vtctldclient_Mount/_index.md | 34 + .../vtctldclient_Mount_list.md | 40 + .../vtctldclient_Mount_register.md | 44 + .../vtctldclient_Mount_show.md | 41 + .../vtctldclient_Mount_unregister.md | 41 + .../vtctldclient_MoveTables/_index.md | 42 + .../vtctldclient_MoveTables_cancel.md | 46 + .../vtctldclient_MoveTables_complete.md | 48 + .../vtctldclient_MoveTables_create.md | 62 + .../vtctldclient_MoveTables_reversetraffic.md | 50 + .../vtctldclient_MoveTables_show.md | 45 + .../vtctldclient_MoveTables_start.md | 43 + .../vtctldclient_MoveTables_status.md | 44 + .../vtctldclient_MoveTables_stop.md | 43 + .../vtctldclient_MoveTables_switchtraffic.md | 51 + .../vtctldclient_OnlineDDL/_index.md | 39 + .../vtctldclient_OnlineDDL_cancel.md | 40 + .../vtctldclient_OnlineDDL_cleanup.md | 40 + .../vtctldclient_OnlineDDL_complete.md | 40 + .../vtctldclient_OnlineDDL_force-cutover.md | 40 + .../vtctldclient_OnlineDDL_launch.md | 40 + .../vtctldclient_OnlineDDL_retry.md | 40 + .../vtctldclient_OnlineDDL_show.md | 51 + .../vtctldclient_OnlineDDL_throttle.md | 40 + .../vtctldclient_OnlineDDL_unthrottle.md | 40 + .../vtctldclient/vtctldclient_PingTablet.md | 34 + .../vtctldclient_PlannedReparentShard.md | 38 + .../vtctldclient_RebuildKeyspaceGraph.md | 36 + .../vtctldclient_RebuildVSchemaGraph.md | 35 + .../vtctldclient/vtctldclient_RefreshState.md | 34 + .../vtctldclient_RefreshStateByShard.md | 35 + .../vtctldclient/vtctldclient_ReloadSchema.md | 34 + .../vtctldclient_ReloadSchemaKeyspace.md | 36 + .../vtctldclient_ReloadSchemaShard.md | 36 + .../vtctldclient/vtctldclient_RemoveBackup.md | 34 + .../vtctldclient_RemoveKeyspaceCell.md | 36 + .../vtctldclient_RemoveShardCell.md | 36 + .../vtctldclient_ReparentTablet.md | 34 + .../vtctldclient_Reshard/_index.md | 42 + .../vtctldclient_Reshard_cancel.md | 43 + .../vtctldclient_Reshard_complete.md | 43 + .../vtctldclient_Reshard_create.md | 54 + .../vtctldclient_Reshard_reversetraffic.md | 49 + .../vtctldclient_Reshard_show.md | 44 + .../vtctldclient_Reshard_start.md | 43 + .../vtctldclient_Reshard_status.md | 43 + .../vtctldclient_Reshard_stop.md | 43 + .../vtctldclient_Reshard_switchtraffic.md | 49 + .../vtctldclient_RestoreFromBackup.md | 38 + .../vtctldclient_RunHealthCheck.md | 34 + ...tctldclient_SetKeyspaceDurabilityPolicy.md | 44 + .../vtctldclient_SetShardIsPrimaryServing.md | 34 + .../vtctldclient_SetShardTabletControl.md | 56 + .../vtctldclient/vtctldclient_SetWritable.md | 34 + .../vtctldclient_ShardReplicationFix.md | 34 + .../vtctldclient_ShardReplicationPositions.md | 40 + .../vtctldclient/vtctldclient_SleepTablet.md | 50 + .../vtctldclient_SourceShardAdd.md | 36 + .../vtctldclient_SourceShardDelete.md | 34 + .../vtctldclient_StartReplication.md | 34 + .../vtctldclient_StopReplication.md | 34 + ...vtctldclient_TabletExternallyReparented.md | 41 + .../vtctldclient_UpdateCellInfo.md | 42 + .../vtctldclient_UpdateCellsAlias.md | 39 + .../vtctldclient_UpdateThrottlerConfig.md | 45 + .../vtctldclient/vtctldclient_VDiff/_index.md | 38 + .../vtctldclient_VDiff_create.md | 60 + .../vtctldclient_VDiff_delete.md | 44 + .../vtctldclient_VDiff_resume.md | 43 + .../vtctldclient_VDiff_show.md | 46 + .../vtctldclient_VDiff_stop.md | 43 + .../vtctldclient/vtctldclient_Validate.md | 35 + .../vtctldclient_ValidateKeyspace.md | 35 + .../vtctldclient_ValidateSchemaKeyspace.md | 38 + .../vtctldclient_ValidateShard.md | 35 + .../vtctldclient_ValidateVersionKeyspace.md | 34 + .../vtctldclient_ValidateVersionShard.md | 34 + .../vtctldclient_Workflow/_index.md | 41 + .../vtctldclient_Workflow_delete.md | 45 + .../vtctldclient_Workflow_list.md | 42 + .../vtctldclient_Workflow_show.md | 44 + .../vtctldclient_Workflow_start.md | 43 + .../vtctldclient_Workflow_stop.md | 43 + .../vtctldclient_Workflow_update.md | 47 + .../docs/21.0/reference/programs/vtexplain.md | 72 + .../21.0/reference/programs/vtgate/_index.md | 263 ++ .../programs/vtgateclienttest/_index.md | 82 + .../21.0/reference/programs/vtorc/_index.md | 125 + .../reference/programs/vttablet/_index.md | 451 +++ .../reference/programs/vttestserver/_index.md | 178 ++ .../reference/programs/vttlstest/_index.md | 28 + .../programs/vttlstest/vttlstest_CreateCA.md | 39 + .../programs/vttlstest/vttlstest_CreateCRL.md | 39 + .../vttlstest_CreateIntermediateCA.md | 42 + .../vttlstest/vttlstest_CreateSignedCert.md | 42 + .../vttlstest/vttlstest_RevokeCert.md | 40 + .../docs/21.0/reference/programs/zk/_index.md | 50 + .../21.0/reference/programs/zk/zk_addAuth.md | 23 + .../docs/21.0/reference/programs/zk/zk_cat.md | 35 + .../21.0/reference/programs/zk/zk_chmod.md | 30 + .../docs/21.0/reference/programs/zk/zk_cp.md | 33 + .../21.0/reference/programs/zk/zk_edit.md | 24 + .../docs/21.0/reference/programs/zk/zk_ls.md | 40 + .../docs/21.0/reference/programs/zk/zk_rm.md | 37 + .../21.0/reference/programs/zk/zk_stat.md | 24 + .../21.0/reference/programs/zk/zk_touch.md | 44 + .../21.0/reference/programs/zk/zk_unzip.md | 30 + .../21.0/reference/programs/zk/zk_wait.md | 34 + .../21.0/reference/programs/zk/zk_watch.md | 29 + .../docs/21.0/reference/programs/zk/zk_zip.md | 30 + .../21.0/reference/programs/zkctl/_index.md | 46 + .../reference/programs/zkctl/zkctl_init.md | 52 + .../programs/zkctl/zkctl_shutdown.md | 52 + .../reference/programs/zkctl/zkctl_start.md | 52 + .../programs/zkctl/zkctl_teardown.md | 52 + .../21.0/reference/programs/zkctld/_index.md | 19 + .../21.0/reference/query-serving/_index.md | 5 + .../reference/query-serving/reserved-conn.md | 148 + .../en/docs/21.0/reference/viper/_index.md | 3 + content/en/docs/21.0/reference/viper/basic.md | 70 + .../docs/21.0/reference/viper/config_files.md | 69 + .../21.0/reference/viper/dynamic_values.md | 17 + .../en/docs/21.0/reference/viper/overview.md | 19 + .../21.0/reference/vreplication/_index.md | 7 + .../docs/21.0/reference/vreplication/faq.md | 44 + .../docs/21.0/reference/vreplication/flags.md | 194 ++ .../vreplication/img/VReplicationFlow.png | Bin 0 -> 31635 bytes .../reference/vreplication/img/VStream.svg | 1 + .../reference/vreplication/internal/_index.md | 8 + .../vreplication/internal/cutover.md | 328 +++ .../reference/vreplication/internal/keys.md | 459 +++ .../vreplication/internal/life-of-a-stream.md | 174 ++ .../vreplication/internal/tracker.md | 184 ++ .../internal/vstream-skew-detection.md | 84 + .../internal/vstream-stream-migration.md | 82 + .../reference/vreplication/lookupvindex.md | 23 + .../reference/vreplication/materialize.md | 123 + .../21.0/reference/vreplication/metrics.md | 163 ++ .../21.0/reference/vreplication/migrate.md | 152 + .../docs/21.0/reference/vreplication/mount.md | 19 + .../21.0/reference/vreplication/movetables.md | 360 +++ .../21.0/reference/vreplication/reshard.md | 306 ++ .../vreplication/shardlevelmigrations.md | 84 + .../vreplication/tablet_selection.md | 49 + .../21.0/reference/vreplication/throttling.md | 32 + .../docs/21.0/reference/vreplication/vdiff.md | 153 + .../reference/vreplication/vreplication.md | 207 ++ .../21.0/reference/vreplication/vstream.md | 320 +++ .../21.0/reference/vreplication/workflow.md | 9 + .../en/docs/21.0/reference/vtadmin/_index.md | 5 + .../21.0/reference/vtadmin/architecture.md | 91 + .../reference/vtadmin/cluster_discovery.md | 199 ++ .../21.0/reference/vtadmin/img/schemas.png | Bin 0 -> 940145 bytes .../21.0/reference/vtadmin/operators_guide.md | 118 + .../vtadmin/role-based-access-control.md | 270 ++ .../reference/vtadmin/running_with_vtop.md | 72 + .../vtadmin/vtctld-api-transition.md | 55 + .../vtctldclient-transition/_index.md | 6 + .../vtctldclient-transition/command_diff.md | 47 + .../vtctldclient-transition/legacy_shim.md | 64 + .../vtctldclient-transition/overview.md | 45 + .../en/docs/21.0/reference/vtorc/_index.md | 5 + .../docs/21.0/reference/vtorc/architecture.md | 46 + .../vtorc/img/VTOrc-Recent-Recoveries.png | Bin 0 -> 31112 bytes .../21.0/reference/vtorc/running_with_vtop.md | 40 + .../21.0/reference/vtorc/ui_api_metrics.md | 49 + content/en/docs/21.0/user-guides/_index.md | 8 + .../configuration-advanced/_index.md | 5 + .../configuration-advanced/authorization.md | 265 ++ .../buffering-scenarios.md | 573 ++++ .../comment-directives.md | 121 + .../createlookupvindex.md | 621 +++++ .../integration-with-orchestrator.md | 7 + .../configuration-advanced/ldap_auth.md | 80 + .../query-consolidation.md | 27 + .../configuration-advanced/region-sharding.md | 527 ++++ .../configuration-advanced/reparenting.md | 112 + .../configuration-advanced/resharding.md | 368 +++ .../shard-isolation-atomicity.md | 200 ++ .../configuration-advanced/static-auth.md | 154 ++ .../configuration-advanced/trace1.png | Bin 0 -> 95000 bytes .../configuration-advanced/tracing.md | 80 + .../transport-security-model.md | 761 +++++ .../unmanaged-tablet.md | 187 ++ .../configuration-advanced/user-management.md | 23 + .../user-guides/configuration-basic/_index.md | 5 + .../configuration-basic/add-delete-cell.md | 48 + .../configuration-basic/backups-restores.md | 32 + .../configuration-basic/collations.md | 414 +++ .../configuration-basic/create-cell.md | 56 + .../configuration-basic/delete-keyspace.md | 31 + .../configuration-basic/durability_policy.md | 29 + .../configuration-basic/exporting-data.md | 72 + .../configuration-basic/global-topo.md | 52 + .../configuration-basic/img/cell-in-topo.png | Bin 0 -> 432242 bytes .../img/healthy-tablet.png | Bin 0 -> 46190 bytes .../img/unhealthy-tablet.png | Bin 0 -> 58739 bytes .../img/vtadmin-reparenting.png | Bin 0 -> 555273 bytes .../img/vtadmin-tablet-list.png | Bin 0 -> 455633 bytes .../img/vtgate-healthy-tablets.png | Bin 0 -> 34360 bytes .../img/vtgate-partially-healthy-tablets.png | Bin 0 -> 51449 bytes .../initialize-shard-primary.md | 34 + .../configuration-basic/keyspaces-shards.md | 14 + .../configuration-basic/monitoring.md | 407 +++ .../configuration-basic/planning.md | 69 + .../user-guides/configuration-basic/ports.md | 53 + .../configuration-basic/reparenting.md | 22 + .../configuration-basic/troubleshooting.md | 168 ++ .../user-guides/configuration-basic/vtctld.md | 41 + .../user-guides/configuration-basic/vtgate.md | 104 + .../user-guides/configuration-basic/vtorc.md | 46 + .../configuration-basic/vttablet-mysql.md | 219 ++ .../docs/21.0/user-guides/migration/_index.md | 5 + .../21.0/user-guides/migration/materialize.md | 403 +++ .../user-guides/migration/migrate-data.md | 71 + .../21.0/user-guides/migration/move-tables.md | 831 ++++++ .../user-guides/migration/troubleshooting.md | 288 ++ .../user-guides/operating-vitess/_index.md | 6 + .../backup-and-restore/_index.md | 5 + .../bootstrap-and-restore.md | 101 + .../backup-and-restore/creating-a-backup.md | 139 + .../backup-and-restore/managing-backups.md | 44 + .../backup-and-restore/overview.md | 332 +++ .../backup-and-restore/scheduled-backups.md | 103 + .../operating-vitess/upgrading-vitess.md | 48 + .../21.0/user-guides/schema-changes/_index.md | 113 + .../schema-changes/advanced-usage.md | 190 ++ .../schema-changes/audit-and-control.md | 806 ++++++ .../schema-changes/concurrent-migrations.md | 70 + .../schema-changes/ddl-strategies.md | 195 ++ .../schema-changes/ddl-strategy-flags.md | 64 + .../schema-changes/declarative-migrations.md | 117 + .../managed-online-schema-changes.md | 247 ++ .../schema-changes/postponed-migrations.md | 342 +++ .../schema-changes/recoverable-migrations.md | 32 + .../schema-changes/revertible-migrations.md | 231 ++ .../schema-changes/table-lifecycle.md | 102 + .../unmanaged-schema-changes.md | 90 + .../schema-changes/validating-migrations.md | 64 + .../en/docs/21.0/user-guides/sql/_index.md | 5 + .../en/docs/21.0/user-guides/sql/vexplain.md | 253 ++ .../21.0/user-guides/sql/vtexplain-in-bulk.md | 217 ++ .../en/docs/21.0/user-guides/sql/vtexplain.md | 307 +++ .../21.0/user-guides/vschema-guide/_index.md | 5 + .../vschema-guide/advanced-vschema.md | 205 ++ .../vschema-guide/backfill-vindexes.md | 114 + .../user-guides/vschema-guide/foreign-keys.md | 171 ++ .../vschema-guide/img/vschema1.png | Bin 0 -> 501742 bytes .../vschema-guide/img/vschema2.png | Bin 0 -> 572732 bytes .../vschema-guide/lookup-as-primary.md | 146 + .../vschema-guide/non-unique-lookup.md | 157 ++ .../user-guides/vschema-guide/overview.md | 34 + .../user-guides/vschema-guide/pictorial.md | 14 + .../user-guides/vschema-guide/sequences.md | 96 + .../21.0/user-guides/vschema-guide/sharded.md | 132 + .../vschema-guide/sharding-guidelines.md | 79 + .../vschema-guide/shared-vindexes.md | 175 ++ .../vschema-guide/subsharding-vindex.md | 323 +++ .../vschema-guide/unique-lookup.md | 112 + .../user-guides/vschema-guide/unsharded.md | 85 + .../user-guides/vschema-guide/vindex-hints.md | 75 + .../user-guides/vschema-guide/vschema_ddl.md | 112 + content/zh/docs/20.0/_index.md | 4 +- content/zh/docs/21.0/_index.md | 26 + content/zh/docs/21.0/concepts/_index.md | 8 + content/zh/docs/21.0/concepts/cell.md | 12 + content/zh/docs/21.0/concepts/keyspace-id.md | 10 + content/zh/docs/21.0/concepts/keyspace.md | 9 + .../docs/21.0/concepts/replication-graph.md | 7 + content/zh/docs/21.0/concepts/shard.md | 17 + content/zh/docs/21.0/concepts/tablet.md | 16 + .../zh/docs/21.0/concepts/topology-service.md | 33 + content/zh/docs/21.0/concepts/vschema.md | 11 + content/zh/docs/21.0/contributing/_index.md | 86 + .../21.0/contributing/build-from-source.md | 271 ++ .../zh/docs/21.0/contributing/code-reviews.md | 63 + .../docs/21.0/contributing/github-workflow.md | 135 + content/zh/docs/21.0/faq/_index.md | 84 + content/zh/docs/21.0/get-started/_index.md | 10 + .../zh/docs/21.0/get-started/kubernetes.md | 843 ++++++ content/zh/docs/21.0/get-started/local.md | 653 +++++ content/zh/docs/21.0/get-started/vagrant.md | 152 + content/zh/docs/21.0/launching/_index.md | 10 + .../21.0/launching/production-planning.md | 68 + .../21.0/launching/scalability-philosophy.md | 160 ++ .../21.0/launching/server-configuration.md | 558 ++++ .../zh/docs/21.0/launching/troubleshooting.md | 39 + content/zh/docs/21.0/launching/twopc.md | 86 + content/zh/docs/21.0/overview/_index.md | 10 + content/zh/docs/21.0/overview/architecture.md | 55 + content/zh/docs/21.0/overview/cloud-native.md | 16 + content/zh/docs/21.0/overview/history.md | 22 + .../docs/21.0/overview/img/VitessOverview.png | Bin 0 -> 35460 bytes content/zh/docs/21.0/overview/whatisvitess.md | 74 + content/zh/docs/21.0/reference/_index.md | 9 + content/zh/docs/21.0/reference/messaging.md | 214 ++ .../21.0/reference/mysql-server-protocol.md | 23 + .../21.0/reference/row-based-replication.md | 92 + content/zh/docs/21.0/reference/sharding.md | 108 + .../zh/docs/21.0/reference/update-stream.md | 257 ++ content/zh/docs/21.0/reference/vitess-api.md | 1037 +++++++ .../docs/21.0/reference/vitess-replication.md | 87 + .../docs/21.0/reference/vitess-sequences.md | 208 ++ .../zh/docs/21.0/reference/vreplication.md | 432 +++ content/zh/docs/21.0/reference/vtctl.md | 2449 +++++++++++++++++ .../zh/docs/21.0/schema-management/_index.md | 138 + .../schema-management/consistent-lookup.md | 33 + .../21.0/schema-management/mysql-schema.md | 33 + .../21.0/schema-management/routing-rules.md | 53 + .../zh/docs/21.0/schema-management/vschema.md | 366 +++ content/zh/docs/21.0/user-guides/_index.md | 92 + .../21.0/user-guides/backup-and-restore.md | 253 ++ .../img/vitesstransportsecuritymodel.svg | 2 + .../zh/docs/21.0/user-guides/reparenting.md | 93 + .../docs/21.0/user-guides/topology-service.md | 587 ++++ .../user-guides/transport-security-model.md | 72 + content/zh/docs/21.0/user-guides/upgrading.md | 47 + content/zh/docs/21.0/user-guides/vtexplain.md | 153 + .../docs/21.0/user-guides/vttablet-modes.md | 111 + 484 files changed, 49157 insertions(+), 6 deletions(-) create mode 100644 content/en/docs/21.0/_index.md create mode 100644 content/en/docs/21.0/concepts/_index.md create mode 100644 content/en/docs/21.0/concepts/cell.md create mode 100644 content/en/docs/21.0/concepts/execution-plans.md create mode 100644 content/en/docs/21.0/concepts/img/VStream.svg create mode 100644 content/en/docs/21.0/concepts/keyspace-id.md create mode 100644 content/en/docs/21.0/concepts/keyspace.md create mode 100644 content/en/docs/21.0/concepts/move-tables.md create mode 100644 content/en/docs/21.0/concepts/query-rewriting.md create mode 100644 content/en/docs/21.0/concepts/replication-graph.md create mode 100644 content/en/docs/21.0/concepts/shard.md create mode 100644 content/en/docs/21.0/concepts/tablet.md create mode 100644 content/en/docs/21.0/concepts/topology-service.md create mode 100644 content/en/docs/21.0/concepts/vschema.md create mode 100644 content/en/docs/21.0/concepts/vstream.md create mode 100644 content/en/docs/21.0/concepts/vtctl.md create mode 100644 content/en/docs/21.0/concepts/vtctld.md create mode 100644 content/en/docs/21.0/concepts/vtgate.md create mode 100644 content/en/docs/21.0/get-started/_index.md create mode 100644 content/en/docs/21.0/get-started/local-docker.md create mode 100644 content/en/docs/21.0/get-started/local-mac.md create mode 100644 content/en/docs/21.0/get-started/local.md create mode 100644 content/en/docs/21.0/get-started/operator.md create mode 100644 content/en/docs/21.0/get-started/vttestserver-docker-image.md create mode 100644 content/en/docs/21.0/overview/_index.md create mode 100644 content/en/docs/21.0/overview/architecture.md create mode 100644 content/en/docs/21.0/overview/cloud-native.md create mode 100644 content/en/docs/21.0/overview/history.md create mode 100644 content/en/docs/21.0/overview/img/architecture.svg create mode 100644 content/en/docs/21.0/overview/scalability-philosophy.md create mode 100644 content/en/docs/21.0/overview/supported-databases.md create mode 100644 content/en/docs/21.0/overview/whatisvitess.md create mode 100644 content/en/docs/21.0/reference/_index.md create mode 100644 content/en/docs/21.0/reference/backup-and-restore/_index.md create mode 100644 content/en/docs/21.0/reference/backup-and-restore/metrics.md create mode 100644 content/en/docs/21.0/reference/compatibility/_index.md create mode 100644 content/en/docs/21.0/reference/compatibility/mysql-compatibility.md create mode 100644 content/en/docs/21.0/reference/errors/_index.md create mode 100644 content/en/docs/21.0/reference/errors/query-serving.md create mode 100644 content/en/docs/21.0/reference/features/_index.md create mode 100644 content/en/docs/21.0/reference/features/connection-pools.md create mode 100644 content/en/docs/21.0/reference/features/global-routing.md create mode 100644 content/en/docs/21.0/reference/features/img/vschema_arch.png create mode 100644 content/en/docs/21.0/reference/features/messaging.md create mode 100644 content/en/docs/21.0/reference/features/monitoring.md create mode 100644 content/en/docs/21.0/reference/features/mysql-query-extensions.md create mode 100644 content/en/docs/21.0/reference/features/mysql-replication.md create mode 100644 content/en/docs/21.0/reference/features/recovery.md create mode 100644 content/en/docs/21.0/reference/features/schema-management.md create mode 100644 content/en/docs/21.0/reference/features/schema-routing-rules.md create mode 100644 content/en/docs/21.0/reference/features/schema-tracking.md create mode 100644 content/en/docs/21.0/reference/features/sharding.md create mode 100644 content/en/docs/21.0/reference/features/show.md create mode 100644 content/en/docs/21.0/reference/features/tablet-throttler.md create mode 100644 content/en/docs/21.0/reference/features/topology-service.md create mode 100644 content/en/docs/21.0/reference/features/transport-security-model.md create mode 100644 content/en/docs/21.0/reference/features/two-phase-commit.md create mode 100644 content/en/docs/21.0/reference/features/vindexes.md create mode 100644 content/en/docs/21.0/reference/features/vitess-sequences.md create mode 100644 content/en/docs/21.0/reference/features/vschema.md create mode 100644 content/en/docs/21.0/reference/features/vtgate-buffering.md create mode 100644 content/en/docs/21.0/reference/img/vitesstransportsecuritymodel.png create mode 100644 content/en/docs/21.0/reference/programs/_index.md create mode 100644 content/en/docs/21.0/reference/programs/mysqlctl/_index.md create mode 100644 content/en/docs/21.0/reference/programs/mysqlctl/mysqlctl_init.md create mode 100644 content/en/docs/21.0/reference/programs/mysqlctl/mysqlctl_init_config.md create mode 100644 content/en/docs/21.0/reference/programs/mysqlctl/mysqlctl_position.md create mode 100644 content/en/docs/21.0/reference/programs/mysqlctl/mysqlctl_reinit_config.md create mode 100644 content/en/docs/21.0/reference/programs/mysqlctl/mysqlctl_shutdown.md create mode 100644 content/en/docs/21.0/reference/programs/mysqlctl/mysqlctl_start.md create mode 100644 content/en/docs/21.0/reference/programs/mysqlctl/mysqlctl_teardown.md create mode 100644 content/en/docs/21.0/reference/programs/mysqlctld/_index.md create mode 100644 content/en/docs/21.0/reference/programs/regular-expression.txt create mode 100644 content/en/docs/21.0/reference/programs/topo2topo/_index.md create mode 100644 content/en/docs/21.0/reference/programs/vtaclcheck/_index.md create mode 100644 content/en/docs/21.0/reference/programs/vtadmin-web.md create mode 100644 content/en/docs/21.0/reference/programs/vtadmin.md create mode 100644 content/en/docs/21.0/reference/programs/vtbackup.md create mode 100644 content/en/docs/21.0/reference/programs/vtbackup/_index.md create mode 100644 content/en/docs/21.0/reference/programs/vtclient/_index.md create mode 100644 content/en/docs/21.0/reference/programs/vtcombo/_index.md create mode 100644 content/en/docs/21.0/reference/programs/vtctl/_index.md create mode 100644 content/en/docs/21.0/reference/programs/vtctl/cell-aliases.md create mode 100644 content/en/docs/21.0/reference/programs/vtctl/cells.md create mode 100644 content/en/docs/21.0/reference/programs/vtctl/generic.md create mode 100644 content/en/docs/21.0/reference/programs/vtctl/keyspaces.md create mode 100644 content/en/docs/21.0/reference/programs/vtctl/replication-graph.md create mode 100644 content/en/docs/21.0/reference/programs/vtctl/schema-version-permissions.md create mode 100644 content/en/docs/21.0/reference/programs/vtctl/serving-graph.md create mode 100644 content/en/docs/21.0/reference/programs/vtctl/shards.md create mode 100644 content/en/docs/21.0/reference/programs/vtctl/tablets.md create mode 100644 content/en/docs/21.0/reference/programs/vtctl/throttler.md create mode 100644 content/en/docs/21.0/reference/programs/vtctl/topo.md create mode 100644 content/en/docs/21.0/reference/programs/vtctld/_index.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/_index.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_AddCellInfo.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_AddCellsAlias.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ApplyKeyspaceRoutingRules.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ApplyRoutingRules.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ApplySchema.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ApplyShardRoutingRules.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ApplyVSchema.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Backup.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_BackupShard.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ChangeTabletType.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_CreateKeyspace.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_CreateShard.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_DeleteCellInfo.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_DeleteCellsAlias.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_DeleteKeyspace.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_DeleteShards.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_DeleteSrvVSchema.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_DeleteTablets.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_EmergencyReparentShard.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ExecuteFetchAsApp.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ExecuteFetchAsDBA.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ExecuteHook.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ExecuteMultiFetchAsDBA.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_FindAllShardsInKeyspace.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GenerateShardRanges.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetBackups.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetCellInfo.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetCellInfoNames.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetCellsAliases.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetFullStatus.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetKeyspace.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetKeyspaceRoutingRules.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetKeyspaces.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetPermissions.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetRoutingRules.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetSchema.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetShard.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetShardReplication.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetShardRoutingRules.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetSrvKeyspaceNames.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetSrvKeyspaces.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetSrvVSchema.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetSrvVSchemas.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetTablet.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetTabletVersion.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetTablets.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetTopologyPath.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetVSchema.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetWorkflows.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_InitShardPrimary.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_LegacyVtctlCommand.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_LookupVindex/_index.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_LookupVindex/vtctldclient_LookupVindex_cancel.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_LookupVindex/vtctldclient_LookupVindex_create.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_LookupVindex/vtctldclient_LookupVindex_externalize.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_LookupVindex/vtctldclient_LookupVindex_show.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Materialize/_index.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Materialize/vtctldclient_Materialize_cancel.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Materialize/vtctldclient_Materialize_create.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Materialize/vtctldclient_Materialize_show.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Materialize/vtctldclient_Materialize_start.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Materialize/vtctldclient_Materialize_stop.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Migrate/_index.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Migrate/vtctldclient_Migrate_cancel.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Migrate/vtctldclient_Migrate_complete.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Migrate/vtctldclient_Migrate_create.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Migrate/vtctldclient_Migrate_show.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Migrate/vtctldclient_Migrate_status.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Mount/_index.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Mount/vtctldclient_Mount_list.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Mount/vtctldclient_Mount_register.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Mount/vtctldclient_Mount_show.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Mount/vtctldclient_Mount_unregister.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/_index.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/vtctldclient_MoveTables_cancel.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/vtctldclient_MoveTables_complete.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/vtctldclient_MoveTables_create.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/vtctldclient_MoveTables_reversetraffic.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/vtctldclient_MoveTables_show.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/vtctldclient_MoveTables_start.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/vtctldclient_MoveTables_status.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/vtctldclient_MoveTables_stop.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/vtctldclient_MoveTables_switchtraffic.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/_index.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/vtctldclient_OnlineDDL_cancel.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/vtctldclient_OnlineDDL_cleanup.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/vtctldclient_OnlineDDL_complete.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/vtctldclient_OnlineDDL_force-cutover.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/vtctldclient_OnlineDDL_launch.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/vtctldclient_OnlineDDL_retry.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/vtctldclient_OnlineDDL_show.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/vtctldclient_OnlineDDL_throttle.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/vtctldclient_OnlineDDL_unthrottle.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_PingTablet.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_PlannedReparentShard.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_RebuildKeyspaceGraph.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_RebuildVSchemaGraph.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_RefreshState.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_RefreshStateByShard.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ReloadSchema.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ReloadSchemaKeyspace.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ReloadSchemaShard.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_RemoveBackup.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_RemoveKeyspaceCell.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_RemoveShardCell.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ReparentTablet.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/_index.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/vtctldclient_Reshard_cancel.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/vtctldclient_Reshard_complete.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/vtctldclient_Reshard_create.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/vtctldclient_Reshard_reversetraffic.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/vtctldclient_Reshard_show.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/vtctldclient_Reshard_start.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/vtctldclient_Reshard_status.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/vtctldclient_Reshard_stop.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/vtctldclient_Reshard_switchtraffic.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_RestoreFromBackup.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_RunHealthCheck.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_SetKeyspaceDurabilityPolicy.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_SetShardIsPrimaryServing.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_SetShardTabletControl.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_SetWritable.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ShardReplicationFix.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ShardReplicationPositions.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_SleepTablet.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_SourceShardAdd.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_SourceShardDelete.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_StartReplication.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_StopReplication.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_TabletExternallyReparented.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_UpdateCellInfo.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_UpdateCellsAlias.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_UpdateThrottlerConfig.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_VDiff/_index.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_VDiff/vtctldclient_VDiff_create.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_VDiff/vtctldclient_VDiff_delete.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_VDiff/vtctldclient_VDiff_resume.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_VDiff/vtctldclient_VDiff_show.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_VDiff/vtctldclient_VDiff_stop.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Validate.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ValidateKeyspace.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ValidateSchemaKeyspace.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ValidateShard.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ValidateVersionKeyspace.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ValidateVersionShard.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Workflow/_index.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Workflow/vtctldclient_Workflow_delete.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Workflow/vtctldclient_Workflow_list.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Workflow/vtctldclient_Workflow_show.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Workflow/vtctldclient_Workflow_start.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Workflow/vtctldclient_Workflow_stop.md create mode 100644 content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Workflow/vtctldclient_Workflow_update.md create mode 100644 content/en/docs/21.0/reference/programs/vtexplain.md create mode 100644 content/en/docs/21.0/reference/programs/vtgate/_index.md create mode 100644 content/en/docs/21.0/reference/programs/vtgateclienttest/_index.md create mode 100644 content/en/docs/21.0/reference/programs/vtorc/_index.md create mode 100644 content/en/docs/21.0/reference/programs/vttablet/_index.md create mode 100644 content/en/docs/21.0/reference/programs/vttestserver/_index.md create mode 100644 content/en/docs/21.0/reference/programs/vttlstest/_index.md create mode 100644 content/en/docs/21.0/reference/programs/vttlstest/vttlstest_CreateCA.md create mode 100644 content/en/docs/21.0/reference/programs/vttlstest/vttlstest_CreateCRL.md create mode 100644 content/en/docs/21.0/reference/programs/vttlstest/vttlstest_CreateIntermediateCA.md create mode 100644 content/en/docs/21.0/reference/programs/vttlstest/vttlstest_CreateSignedCert.md create mode 100644 content/en/docs/21.0/reference/programs/vttlstest/vttlstest_RevokeCert.md create mode 100644 content/en/docs/21.0/reference/programs/zk/_index.md create mode 100644 content/en/docs/21.0/reference/programs/zk/zk_addAuth.md create mode 100644 content/en/docs/21.0/reference/programs/zk/zk_cat.md create mode 100644 content/en/docs/21.0/reference/programs/zk/zk_chmod.md create mode 100644 content/en/docs/21.0/reference/programs/zk/zk_cp.md create mode 100644 content/en/docs/21.0/reference/programs/zk/zk_edit.md create mode 100644 content/en/docs/21.0/reference/programs/zk/zk_ls.md create mode 100644 content/en/docs/21.0/reference/programs/zk/zk_rm.md create mode 100644 content/en/docs/21.0/reference/programs/zk/zk_stat.md create mode 100644 content/en/docs/21.0/reference/programs/zk/zk_touch.md create mode 100644 content/en/docs/21.0/reference/programs/zk/zk_unzip.md create mode 100644 content/en/docs/21.0/reference/programs/zk/zk_wait.md create mode 100644 content/en/docs/21.0/reference/programs/zk/zk_watch.md create mode 100644 content/en/docs/21.0/reference/programs/zk/zk_zip.md create mode 100644 content/en/docs/21.0/reference/programs/zkctl/_index.md create mode 100644 content/en/docs/21.0/reference/programs/zkctl/zkctl_init.md create mode 100644 content/en/docs/21.0/reference/programs/zkctl/zkctl_shutdown.md create mode 100644 content/en/docs/21.0/reference/programs/zkctl/zkctl_start.md create mode 100644 content/en/docs/21.0/reference/programs/zkctl/zkctl_teardown.md create mode 100644 content/en/docs/21.0/reference/programs/zkctld/_index.md create mode 100644 content/en/docs/21.0/reference/query-serving/_index.md create mode 100644 content/en/docs/21.0/reference/query-serving/reserved-conn.md create mode 100644 content/en/docs/21.0/reference/viper/_index.md create mode 100644 content/en/docs/21.0/reference/viper/basic.md create mode 100644 content/en/docs/21.0/reference/viper/config_files.md create mode 100644 content/en/docs/21.0/reference/viper/dynamic_values.md create mode 100644 content/en/docs/21.0/reference/viper/overview.md create mode 100644 content/en/docs/21.0/reference/vreplication/_index.md create mode 100644 content/en/docs/21.0/reference/vreplication/faq.md create mode 100644 content/en/docs/21.0/reference/vreplication/flags.md create mode 100644 content/en/docs/21.0/reference/vreplication/img/VReplicationFlow.png create mode 100644 content/en/docs/21.0/reference/vreplication/img/VStream.svg create mode 100644 content/en/docs/21.0/reference/vreplication/internal/_index.md create mode 100644 content/en/docs/21.0/reference/vreplication/internal/cutover.md create mode 100644 content/en/docs/21.0/reference/vreplication/internal/keys.md create mode 100644 content/en/docs/21.0/reference/vreplication/internal/life-of-a-stream.md create mode 100644 content/en/docs/21.0/reference/vreplication/internal/tracker.md create mode 100644 content/en/docs/21.0/reference/vreplication/internal/vstream-skew-detection.md create mode 100644 content/en/docs/21.0/reference/vreplication/internal/vstream-stream-migration.md create mode 100644 content/en/docs/21.0/reference/vreplication/lookupvindex.md create mode 100644 content/en/docs/21.0/reference/vreplication/materialize.md create mode 100644 content/en/docs/21.0/reference/vreplication/metrics.md create mode 100644 content/en/docs/21.0/reference/vreplication/migrate.md create mode 100644 content/en/docs/21.0/reference/vreplication/mount.md create mode 100644 content/en/docs/21.0/reference/vreplication/movetables.md create mode 100644 content/en/docs/21.0/reference/vreplication/reshard.md create mode 100644 content/en/docs/21.0/reference/vreplication/shardlevelmigrations.md create mode 100644 content/en/docs/21.0/reference/vreplication/tablet_selection.md create mode 100644 content/en/docs/21.0/reference/vreplication/throttling.md create mode 100644 content/en/docs/21.0/reference/vreplication/vdiff.md create mode 100644 content/en/docs/21.0/reference/vreplication/vreplication.md create mode 100644 content/en/docs/21.0/reference/vreplication/vstream.md create mode 100644 content/en/docs/21.0/reference/vreplication/workflow.md create mode 100644 content/en/docs/21.0/reference/vtadmin/_index.md create mode 100644 content/en/docs/21.0/reference/vtadmin/architecture.md create mode 100644 content/en/docs/21.0/reference/vtadmin/cluster_discovery.md create mode 100644 content/en/docs/21.0/reference/vtadmin/img/schemas.png create mode 100644 content/en/docs/21.0/reference/vtadmin/operators_guide.md create mode 100644 content/en/docs/21.0/reference/vtadmin/role-based-access-control.md create mode 100644 content/en/docs/21.0/reference/vtadmin/running_with_vtop.md create mode 100644 content/en/docs/21.0/reference/vtadmin/vtctld-api-transition.md create mode 100644 content/en/docs/21.0/reference/vtctldclient-transition/_index.md create mode 100644 content/en/docs/21.0/reference/vtctldclient-transition/command_diff.md create mode 100644 content/en/docs/21.0/reference/vtctldclient-transition/legacy_shim.md create mode 100644 content/en/docs/21.0/reference/vtctldclient-transition/overview.md create mode 100644 content/en/docs/21.0/reference/vtorc/_index.md create mode 100644 content/en/docs/21.0/reference/vtorc/architecture.md create mode 100644 content/en/docs/21.0/reference/vtorc/img/VTOrc-Recent-Recoveries.png create mode 100644 content/en/docs/21.0/reference/vtorc/running_with_vtop.md create mode 100644 content/en/docs/21.0/reference/vtorc/ui_api_metrics.md create mode 100644 content/en/docs/21.0/user-guides/_index.md create mode 100644 content/en/docs/21.0/user-guides/configuration-advanced/_index.md create mode 100644 content/en/docs/21.0/user-guides/configuration-advanced/authorization.md create mode 100644 content/en/docs/21.0/user-guides/configuration-advanced/buffering-scenarios.md create mode 100644 content/en/docs/21.0/user-guides/configuration-advanced/comment-directives.md create mode 100644 content/en/docs/21.0/user-guides/configuration-advanced/createlookupvindex.md create mode 100644 content/en/docs/21.0/user-guides/configuration-advanced/integration-with-orchestrator.md create mode 100644 content/en/docs/21.0/user-guides/configuration-advanced/ldap_auth.md create mode 100644 content/en/docs/21.0/user-guides/configuration-advanced/query-consolidation.md create mode 100644 content/en/docs/21.0/user-guides/configuration-advanced/region-sharding.md create mode 100644 content/en/docs/21.0/user-guides/configuration-advanced/reparenting.md create mode 100644 content/en/docs/21.0/user-guides/configuration-advanced/resharding.md create mode 100644 content/en/docs/21.0/user-guides/configuration-advanced/shard-isolation-atomicity.md create mode 100644 content/en/docs/21.0/user-guides/configuration-advanced/static-auth.md create mode 100644 content/en/docs/21.0/user-guides/configuration-advanced/trace1.png create mode 100644 content/en/docs/21.0/user-guides/configuration-advanced/tracing.md create mode 100644 content/en/docs/21.0/user-guides/configuration-advanced/transport-security-model.md create mode 100644 content/en/docs/21.0/user-guides/configuration-advanced/unmanaged-tablet.md create mode 100644 content/en/docs/21.0/user-guides/configuration-advanced/user-management.md create mode 100644 content/en/docs/21.0/user-guides/configuration-basic/_index.md create mode 100644 content/en/docs/21.0/user-guides/configuration-basic/add-delete-cell.md create mode 100644 content/en/docs/21.0/user-guides/configuration-basic/backups-restores.md create mode 100644 content/en/docs/21.0/user-guides/configuration-basic/collations.md create mode 100644 content/en/docs/21.0/user-guides/configuration-basic/create-cell.md create mode 100644 content/en/docs/21.0/user-guides/configuration-basic/delete-keyspace.md create mode 100644 content/en/docs/21.0/user-guides/configuration-basic/durability_policy.md create mode 100644 content/en/docs/21.0/user-guides/configuration-basic/exporting-data.md create mode 100644 content/en/docs/21.0/user-guides/configuration-basic/global-topo.md create mode 100644 content/en/docs/21.0/user-guides/configuration-basic/img/cell-in-topo.png create mode 100644 content/en/docs/21.0/user-guides/configuration-basic/img/healthy-tablet.png create mode 100644 content/en/docs/21.0/user-guides/configuration-basic/img/unhealthy-tablet.png create mode 100644 content/en/docs/21.0/user-guides/configuration-basic/img/vtadmin-reparenting.png create mode 100644 content/en/docs/21.0/user-guides/configuration-basic/img/vtadmin-tablet-list.png create mode 100644 content/en/docs/21.0/user-guides/configuration-basic/img/vtgate-healthy-tablets.png create mode 100644 content/en/docs/21.0/user-guides/configuration-basic/img/vtgate-partially-healthy-tablets.png create mode 100644 content/en/docs/21.0/user-guides/configuration-basic/initialize-shard-primary.md create mode 100644 content/en/docs/21.0/user-guides/configuration-basic/keyspaces-shards.md create mode 100644 content/en/docs/21.0/user-guides/configuration-basic/monitoring.md create mode 100644 content/en/docs/21.0/user-guides/configuration-basic/planning.md create mode 100644 content/en/docs/21.0/user-guides/configuration-basic/ports.md create mode 100644 content/en/docs/21.0/user-guides/configuration-basic/reparenting.md create mode 100644 content/en/docs/21.0/user-guides/configuration-basic/troubleshooting.md create mode 100644 content/en/docs/21.0/user-guides/configuration-basic/vtctld.md create mode 100644 content/en/docs/21.0/user-guides/configuration-basic/vtgate.md create mode 100644 content/en/docs/21.0/user-guides/configuration-basic/vtorc.md create mode 100644 content/en/docs/21.0/user-guides/configuration-basic/vttablet-mysql.md create mode 100644 content/en/docs/21.0/user-guides/migration/_index.md create mode 100644 content/en/docs/21.0/user-guides/migration/materialize.md create mode 100644 content/en/docs/21.0/user-guides/migration/migrate-data.md create mode 100644 content/en/docs/21.0/user-guides/migration/move-tables.md create mode 100644 content/en/docs/21.0/user-guides/migration/troubleshooting.md create mode 100644 content/en/docs/21.0/user-guides/operating-vitess/_index.md create mode 100644 content/en/docs/21.0/user-guides/operating-vitess/backup-and-restore/_index.md create mode 100644 content/en/docs/21.0/user-guides/operating-vitess/backup-and-restore/bootstrap-and-restore.md create mode 100644 content/en/docs/21.0/user-guides/operating-vitess/backup-and-restore/creating-a-backup.md create mode 100644 content/en/docs/21.0/user-guides/operating-vitess/backup-and-restore/managing-backups.md create mode 100644 content/en/docs/21.0/user-guides/operating-vitess/backup-and-restore/overview.md create mode 100644 content/en/docs/21.0/user-guides/operating-vitess/backup-and-restore/scheduled-backups.md create mode 100644 content/en/docs/21.0/user-guides/operating-vitess/upgrading-vitess.md create mode 100644 content/en/docs/21.0/user-guides/schema-changes/_index.md create mode 100644 content/en/docs/21.0/user-guides/schema-changes/advanced-usage.md create mode 100644 content/en/docs/21.0/user-guides/schema-changes/audit-and-control.md create mode 100644 content/en/docs/21.0/user-guides/schema-changes/concurrent-migrations.md create mode 100644 content/en/docs/21.0/user-guides/schema-changes/ddl-strategies.md create mode 100644 content/en/docs/21.0/user-guides/schema-changes/ddl-strategy-flags.md create mode 100644 content/en/docs/21.0/user-guides/schema-changes/declarative-migrations.md create mode 100644 content/en/docs/21.0/user-guides/schema-changes/managed-online-schema-changes.md create mode 100644 content/en/docs/21.0/user-guides/schema-changes/postponed-migrations.md create mode 100644 content/en/docs/21.0/user-guides/schema-changes/recoverable-migrations.md create mode 100644 content/en/docs/21.0/user-guides/schema-changes/revertible-migrations.md create mode 100644 content/en/docs/21.0/user-guides/schema-changes/table-lifecycle.md create mode 100644 content/en/docs/21.0/user-guides/schema-changes/unmanaged-schema-changes.md create mode 100644 content/en/docs/21.0/user-guides/schema-changes/validating-migrations.md create mode 100644 content/en/docs/21.0/user-guides/sql/_index.md create mode 100644 content/en/docs/21.0/user-guides/sql/vexplain.md create mode 100644 content/en/docs/21.0/user-guides/sql/vtexplain-in-bulk.md create mode 100644 content/en/docs/21.0/user-guides/sql/vtexplain.md create mode 100644 content/en/docs/21.0/user-guides/vschema-guide/_index.md create mode 100644 content/en/docs/21.0/user-guides/vschema-guide/advanced-vschema.md create mode 100644 content/en/docs/21.0/user-guides/vschema-guide/backfill-vindexes.md create mode 100644 content/en/docs/21.0/user-guides/vschema-guide/foreign-keys.md create mode 100644 content/en/docs/21.0/user-guides/vschema-guide/img/vschema1.png create mode 100644 content/en/docs/21.0/user-guides/vschema-guide/img/vschema2.png create mode 100644 content/en/docs/21.0/user-guides/vschema-guide/lookup-as-primary.md create mode 100644 content/en/docs/21.0/user-guides/vschema-guide/non-unique-lookup.md create mode 100644 content/en/docs/21.0/user-guides/vschema-guide/overview.md create mode 100644 content/en/docs/21.0/user-guides/vschema-guide/pictorial.md create mode 100644 content/en/docs/21.0/user-guides/vschema-guide/sequences.md create mode 100644 content/en/docs/21.0/user-guides/vschema-guide/sharded.md create mode 100644 content/en/docs/21.0/user-guides/vschema-guide/sharding-guidelines.md create mode 100644 content/en/docs/21.0/user-guides/vschema-guide/shared-vindexes.md create mode 100644 content/en/docs/21.0/user-guides/vschema-guide/subsharding-vindex.md create mode 100644 content/en/docs/21.0/user-guides/vschema-guide/unique-lookup.md create mode 100644 content/en/docs/21.0/user-guides/vschema-guide/unsharded.md create mode 100644 content/en/docs/21.0/user-guides/vschema-guide/vindex-hints.md create mode 100644 content/en/docs/21.0/user-guides/vschema-guide/vschema_ddl.md create mode 100644 content/zh/docs/21.0/_index.md create mode 100644 content/zh/docs/21.0/concepts/_index.md create mode 100644 content/zh/docs/21.0/concepts/cell.md create mode 100644 content/zh/docs/21.0/concepts/keyspace-id.md create mode 100644 content/zh/docs/21.0/concepts/keyspace.md create mode 100644 content/zh/docs/21.0/concepts/replication-graph.md create mode 100644 content/zh/docs/21.0/concepts/shard.md create mode 100644 content/zh/docs/21.0/concepts/tablet.md create mode 100644 content/zh/docs/21.0/concepts/topology-service.md create mode 100644 content/zh/docs/21.0/concepts/vschema.md create mode 100644 content/zh/docs/21.0/contributing/_index.md create mode 100644 content/zh/docs/21.0/contributing/build-from-source.md create mode 100644 content/zh/docs/21.0/contributing/code-reviews.md create mode 100644 content/zh/docs/21.0/contributing/github-workflow.md create mode 100644 content/zh/docs/21.0/faq/_index.md create mode 100644 content/zh/docs/21.0/get-started/_index.md create mode 100644 content/zh/docs/21.0/get-started/kubernetes.md create mode 100644 content/zh/docs/21.0/get-started/local.md create mode 100644 content/zh/docs/21.0/get-started/vagrant.md create mode 100644 content/zh/docs/21.0/launching/_index.md create mode 100644 content/zh/docs/21.0/launching/production-planning.md create mode 100644 content/zh/docs/21.0/launching/scalability-philosophy.md create mode 100644 content/zh/docs/21.0/launching/server-configuration.md create mode 100644 content/zh/docs/21.0/launching/troubleshooting.md create mode 100644 content/zh/docs/21.0/launching/twopc.md create mode 100644 content/zh/docs/21.0/overview/_index.md create mode 100644 content/zh/docs/21.0/overview/architecture.md create mode 100644 content/zh/docs/21.0/overview/cloud-native.md create mode 100644 content/zh/docs/21.0/overview/history.md create mode 100644 content/zh/docs/21.0/overview/img/VitessOverview.png create mode 100644 content/zh/docs/21.0/overview/whatisvitess.md create mode 100644 content/zh/docs/21.0/reference/_index.md create mode 100644 content/zh/docs/21.0/reference/messaging.md create mode 100644 content/zh/docs/21.0/reference/mysql-server-protocol.md create mode 100644 content/zh/docs/21.0/reference/row-based-replication.md create mode 100644 content/zh/docs/21.0/reference/sharding.md create mode 100644 content/zh/docs/21.0/reference/update-stream.md create mode 100644 content/zh/docs/21.0/reference/vitess-api.md create mode 100644 content/zh/docs/21.0/reference/vitess-replication.md create mode 100644 content/zh/docs/21.0/reference/vitess-sequences.md create mode 100644 content/zh/docs/21.0/reference/vreplication.md create mode 100644 content/zh/docs/21.0/reference/vtctl.md create mode 100644 content/zh/docs/21.0/schema-management/_index.md create mode 100644 content/zh/docs/21.0/schema-management/consistent-lookup.md create mode 100644 content/zh/docs/21.0/schema-management/mysql-schema.md create mode 100644 content/zh/docs/21.0/schema-management/routing-rules.md create mode 100644 content/zh/docs/21.0/schema-management/vschema.md create mode 100644 content/zh/docs/21.0/user-guides/_index.md create mode 100644 content/zh/docs/21.0/user-guides/backup-and-restore.md create mode 100644 content/zh/docs/21.0/user-guides/img/vitesstransportsecuritymodel.svg create mode 100644 content/zh/docs/21.0/user-guides/reparenting.md create mode 100644 content/zh/docs/21.0/user-guides/topology-service.md create mode 100644 content/zh/docs/21.0/user-guides/transport-security-model.md create mode 100644 content/zh/docs/21.0/user-guides/upgrading.md create mode 100644 content/zh/docs/21.0/user-guides/vtexplain.md create mode 100644 content/zh/docs/21.0/user-guides/vttablet-modes.md diff --git a/config.toml b/config.toml index 196889ff5..aec9f03fe 100644 --- a/config.toml +++ b/config.toml @@ -13,8 +13,8 @@ pygmentsStyle = "fruity" # Versions (folder-based) [params.versions] -current = "19.0" -next = "20.0" +current = "20.0" +next = "21.0" # end Versions diff --git a/content/en/docs/20.0/_index.md b/content/en/docs/20.0/_index.md index a67ae3f36..e5aec698b 100644 --- a/content/en/docs/20.0/_index.md +++ b/content/en/docs/20.0/_index.md @@ -1,7 +1,7 @@ --- -title: v20.0 (Development) +title: v20.0 (RC) description: > - Under construction, development release. + Release Candidate. Everything you need to know about scaling MySQL with Vitess. notoc: true cascade: diff --git a/content/en/docs/21.0/_index.md b/content/en/docs/21.0/_index.md new file mode 100644 index 000000000..41111c926 --- /dev/null +++ b/content/en/docs/21.0/_index.md @@ -0,0 +1,11 @@ +--- +title: v21.0 (Development) +description: > + Under construction, development release. + Everything you need to know about scaling MySQL with Vitess. +notoc: true +cascade: + version: v21.0 +weight: 79 +--- + diff --git a/content/en/docs/21.0/concepts/_index.md b/content/en/docs/21.0/concepts/_index.md new file mode 100644 index 000000000..3282daf67 --- /dev/null +++ b/content/en/docs/21.0/concepts/_index.md @@ -0,0 +1,6 @@ +--- +title: Concepts +description: Learn core Vitess concepts and terminology +aliases: ['/docs/overview/concepts/'] +weight: 3 +--- diff --git a/content/en/docs/21.0/concepts/cell.md b/content/en/docs/21.0/concepts/cell.md new file mode 100644 index 000000000..f6d16f088 --- /dev/null +++ b/content/en/docs/21.0/concepts/cell.md @@ -0,0 +1,10 @@ +--- +title: Cell +description: Data center, availability zone or group of computing resources +--- + +A *cell* is a group of servers and network infrastructure collocated in an area, and isolated from failures in other cells. It is typically either a full data center or a subset of a data center, sometimes called a *zone* or *availability zone*. Vitess gracefully handles cell-level failures, such as when a cell is cut off the network. + +Each cell in a Vitess implementation has a [local topology service](../topology-service), which is hosted in that cell. The topology service contains most of the information about the Vitess tablets in its cell. This enables a cell to be taken down and rebuilt as a unit. + +Vitess limits cross-cell traffic for both data and metadata. While it may be useful to also have the ability to route read traffic to individual cells, Vitess currently serves reads only from the local cell. Writes will go cross-cell when necessary, to wherever the primary for that shard resides. diff --git a/content/en/docs/21.0/concepts/execution-plans.md b/content/en/docs/21.0/concepts/execution-plans.md new file mode 100644 index 000000000..d11cb8d0c --- /dev/null +++ b/content/en/docs/21.0/concepts/execution-plans.md @@ -0,0 +1,33 @@ +--- +title: Execution Plans +--- + +Vitess parses queries at both the VTGate and VTTablet layer in order to evaluate the best method to execute a query. This evaluation is known as query planning, and results in a _query execution plan_. + +The Execution Plan is dependent on both the query and the associated [VSchema](../vschema). One of the underlying goals of Vitess' planning strategy is to push down as much work as possible to the underlying MySQL instances. When this is not possible, Vitess will use a plan that collects input from multiple sources and merges the results to produce the correct query result. + +### Evaluation Model + +An execution plan consists of operators, each of which implements a specific piece of work. The operators combine into a tree-like structure, which represents the overall execution plan. The plan represents each operator as a node in the tree. Each operator takes as input zero or more rows, and produces as output zero or more rows. This means that the output from one operator becomes the input for the next operator. Operators that join two branches in the tree combine input from two incoming streams and produce a single output. + +Evaluation of the execution plan begins at the leaf nodes of the tree. Leaf nodes pull in data from VTTablet, the Topology Service, and in some cases are also able to evaluate expression values locally. Each leaf node will not have input from other operators, and pipe in any nodes they produce into their parent nodes. The parents nodes will then pipe in nodes to their parent nodes, all the way up to a root node. The root node produces the final results of the query and delivers the results to the user. + +### Routing Operators + +A routing operator in an execution plan instructs Vitess which destination to send a piece of work to. Typically a routing operator will tell Vitess which keyspace to use when executing the piece of work, whether or not the keyspace is sharded, and, in the case of sharded keyspaces, which vindex to use. + +### Scatter Queries + +A routing operator which specifies a sharded keyspace, but which does not specify a vindex, will "scatter" to all shards in a sharded keyspace. A "scatter" query contains one or more pieces of work routed to a sharded keyspace, but which cannot be routed using a vindex. + +Note that not all queries which are sent to multiple (or all) shards in a sharded keyspace are considered scatter queries. + +### Observing Execution Plans + +Cached execution plans can be observed at the VTGate level by browsing the `/queryz` end point. + +Starting with Vitess 16, individual statement plans can also be observed with [`VExplain`](../../user-guides/sql/explain-format-vtexplain). + +**Related Vitess Documentation** + +* [VTGate](../vtgate) diff --git a/content/en/docs/21.0/concepts/img/VStream.svg b/content/en/docs/21.0/concepts/img/VStream.svg new file mode 100644 index 000000000..47b54d4a1 --- /dev/null +++ b/content/en/docs/21.0/concepts/img/VStream.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/content/en/docs/21.0/concepts/keyspace-id.md b/content/en/docs/21.0/concepts/keyspace-id.md new file mode 100644 index 000000000..a4ac032d7 --- /dev/null +++ b/content/en/docs/21.0/concepts/keyspace-id.md @@ -0,0 +1,10 @@ +--- +title: Keyspace ID +--- + +The *keyspace ID* is the value that is used to decide on which shard a given row lives. [Range-based Sharding](../../reference/features/sharding/#key-ranges-and-partitions) refers to creating shards that each cover a particular range of keyspace IDs. + +Using this technique means you can split a given shard by replacing it with two or more new shards that combine to cover the original range of keyspace IDs, without having to move any records in other shards. + +The keyspace ID itself is computed using a function of some column in your data, such as the user ID. Vitess allows you to choose from a variety of functions ([vindexes](../../reference/features/vindexes/)) to perform this mapping. This allows you to choose the right one to achieve optimal distribution of the data across shards. + diff --git a/content/en/docs/21.0/concepts/keyspace.md b/content/en/docs/21.0/concepts/keyspace.md new file mode 100644 index 000000000..c22c61fd5 --- /dev/null +++ b/content/en/docs/21.0/concepts/keyspace.md @@ -0,0 +1,8 @@ +--- +title: Keyspace +--- + +A *keyspace* is a logical database. If you're using [sharding](http://en.wikipedia.org/wiki/Shard_(database_architecture)), a keyspace maps to multiple MySQL databases; if you're not using sharding, a keyspace maps directly to a MySQL database name. In either case, a keyspace appears as a single database from the standpoint of the application. + +Reading data from a keyspace is just like reading from a MySQL database. However, depending on the consistency requirements of the read operation, Vitess might fetch the data from a primary database or from a replica. By routing each query to the appropriate database, Vitess allows your code to be structured as if it were reading from a single MySQL database. + diff --git a/content/en/docs/21.0/concepts/move-tables.md b/content/en/docs/21.0/concepts/move-tables.md new file mode 100644 index 000000000..cf72e817d --- /dev/null +++ b/content/en/docs/21.0/concepts/move-tables.md @@ -0,0 +1,26 @@ +--- +title: MoveTables +--- + +MoveTables is a workflow based on VReplication. It enables you to relocate tables between keyspaces, and therefore physical MySQL instances, without downtime. + +## Identifying Candidate Tables + +It is recommended to keep tables that need to join on each other in the same keyspace, so typical candidates for a MoveTables operation are a set of tables which logically group together or are otherwise isolated. + +If you have multiple groups of tables as candidates, which makes the most sense to move may depend on the specifics of your environment. For example, a larger table will take more time to move, but in doing so you might be able to utilize additional or newer hardware which has more headroom before you need to perform additional operations such as sharding. + +Similarly, tables that are updated at a more frequent rate could increase the move time. + +### Impact to Production Traffic + +Internally, a MoveTables operation is comprised of both a table copy and a subscription to all changes made to the table. Vitess uses batching to improve the performance of both table copying and applying subscription changes, but you should expect that tables with lighter modification rates to move faster. + +During the active move process, data is copied from replicas instead of the primary server. This helps ensure minimal production traffic impact. + +During the `SwitchTraffic` phase of the MoveTables operation, for primary tablets, Vitess may be briefly unavailable. This unavailability is usually a few seconds, but will be higher in the event that your system has a high replication delay from primary to replica(s). + + +**Related Vitess Documentation** + +* [MoveTables User Guide](../../user-guides/migration/move-tables) diff --git a/content/en/docs/21.0/concepts/query-rewriting.md b/content/en/docs/21.0/concepts/query-rewriting.md new file mode 100644 index 000000000..6d8c7c417 --- /dev/null +++ b/content/en/docs/21.0/concepts/query-rewriting.md @@ -0,0 +1,248 @@ +--- +title: Query Rewriting +--- + +Vitess works hard to create an illusion of the user having a single connection to a single database. +In reality, a single query might interact with multiple databases and may use multiple connections to the same database. +Here we'll go over what Vitess does and how it might impact you. + +### Query splitting + +A complicated query with a cross shard join might need to first fetch information from a tablet keeping vindex lookup tables. Then use this information to query two different shards for more data and subsequently join the incoming results into a single result that the user receives. +The queries that MySQL gets are often just pieces of the original query, and the final result will get assembled at the vtgate level. + +### Connection Pooling + +When a tablet talks with a MySQL to execute a query on behalf of a user, it does not use a dedicated connection per user, and instead will share the underlying connection between users. +This means that it's not safe to store any state in the session as you can't be sure it will continue executing queries on the same connection, and you can't be sure if this connection will be used by other users later on. + +### User-Defined Variables + +User defined variables are kept in the session state when working with MySQL. +You can assign values to them using SET: + +```sql +SET @my_user_variable = 'foobar' +``` + +And later there can be queries using for example SELECT: + +```sql +> SELECT @my_user_variable; ++-------------------+ +| @my_user_variable | ++-------------------+ +| foobar | ++-------------------+ +``` + +If you execute these queries against a VTGate, the first `SET` query is not sent to MySQL. +Instead, it is evaluated in the VTGate, and VTGate will keep this state for you. +The second query is also not sent down. Trivial queries such as this one are actually fully executed on VTGate. + +If we try a more complicated query that requires data from MySQL, VTGate will rewrite the query before sending it down. +If we were to write something like: + +```sql +WHERE col = @my_user_variable +``` + +What MySQL will see is: + +```sql +WHERE col = 'foobar' +``` + +This way, no session state is needed to evaluate the query in MySQL. + +### Server System Variables + +A user might also want to change one of the many different system variables that MySQL exposes. +Vitess handles system variables in one of five different ways: + + * *No op*. For some settings, Vitess will just silently ignore the setting. This is for system variables that don't make much sense in a sharded setting, and don't change the behaviour of MySQL in an interesting way. + * *Check and fail if not already set*. These are settings that should not change, but Vitess will allow SET statements that try to set the variable to whatever it already is. + * *Not supported*. For these settings, attempting to change them will always result in an error. + * *Vitess aware*. These are settings that change Vitess' behaviour, and are not sent down to MySQL + * *Reserved connection*. For some settings, it makes sense to allow them to be set, but it makes using a shared connection for this user much harder. By default, Vitess will first apply these system variables that are set, and then keep the connection dedicated for this user. Connection pooling is important for the performance of Vitess, so this should not be the normal way to run applications on Vitess. Just make sure that the global variable is set to the same value the application will set it to, and Vitess can use connection pooling. Vitess now has support for connection-pooling even for these settings that originally required reserved connections. You can read more about it [here](../../reference/query-serving/reserved-conn/#settings-pool-and-reserved-connections). + +In addition to this, Vitess makes sure that @@version includes both the emulated MySQL version and the Vitess version, such as: `5.7.9-vitess-14.0.0`. This value can be changed by using the vtgate flag `--mysql_server_version`. + + +### Special functions + +There are a few special functions that Vitess handles without delegating to MySQL. + + * `DATABASE()` - The keyspace name and the underlying database names do not have to be equal. Vitess will rewrite these calls to use the literal string for the keyspace name. (This also applies to the synonym `SCHEMA()`) + * `ROW_COUNT()` and `FOUND_ROWS()` - These functions returns how many rows the last query affected/returned. Since this might have been executed on a different connection, these get rewritten to use the literal value of the number of returned rows. + * `LAST_INSERT_ID()` - Much like `FOUND_ROWS()`, we can't trust a pooled connection for these function calls, so they get rewritten before hitting MySQL. + +### Reference + +Here is a list of all the system variables that are handled by Vitess and how they are handled. + +| *System variable* | *Handled* | +|-----------------------------------------|----------------| +| autocommit | VitessAware | +| client_found_rows | VitessAware | +| skip_query_plan_cache | VitessAware | +| tx_read_only | VitessAware | +| transaction_read_only | VitessAware | +| sql_select_limit | VitessAware | +| transaction_mode | VitessAware | +| ddl_strategy | VitessAware | +| foreign_key_checks | VitessAware | +| workload | VitessAware | +| charset | VitessAware | +| names | VitessAware | +| session_uuid | VitessAware | +| migration_context | VitessAware | +| enable_system_settings | VitessAware | +| read_after_write_gtid | VitessAware | +| read_after_write_timeout | VitessAware | +| session_track_gtids | VitessAware | +| query_timeout | VitessAware | +| transaction_isolation | VitessAware | +| tx_isolation | VitessAware | +| big_tables | NoOp | +| bulk_insert_buffer_size | NoOp | +| debug | NoOp | +| default_storage_engine | NoOp | +| default_tmp_storage_engine | NoOp | +| innodb_strict_mode | NoOp | +| innodb_support_xa | NoOp | +| innodb_table_locks | NoOp | +| innodb_tmpdir | NoOp | +| join_buffer_size | NoOp | +| keep_files_on_create | NoOp | +| lc_messages | NoOp | +| long_query_time | NoOp | +| low_priority_updates | NoOp | +| max_delayed_threads | NoOp | +| max_insert_delayed_threads | NoOp | +| multi_range_count | NoOp | +| net_buffer_length | NoOp | +| new | NoOp | +| query_cache_type | NoOp | +| query_cache_wlock_invalidate | NoOp | +| query_prealloc_size | NoOp | +| sql_buffer_result | NoOp | +| transaction_alloc_block_size | NoOp | +| wait_timeout | NoOp | +| audit_log_read_buffer_size | NotSupported | +| auto_increment_increment | NotSupported | +| auto_increment_offset | NotSupported | +| binlog_direct_non_transactional_updates | NotSupported | +| binlog_row_image | NotSupported | +| binlog_rows_query_log_events | NotSupported | +| innodb_ft_enable_stopword | NotSupported | +| innodb_ft_user_stopword_table | NotSupported | +| max_points_in_geometry | NotSupported | +| max_sp_recursion_depth | NotSupported | +| myisam_repair_threads | NotSupported | +| myisam_sort_buffer_size | NotSupported | +| myisam_stats_method | NotSupported | +| ndb_allow_copying_alter_table | NotSupported | +| ndb_autoincrement_prefetch_sz | NotSupported | +| ndb_blob_read_batch_bytes | NotSupported | +| ndb_blob_write_batch_bytes | NotSupported | +| ndb_deferred_constraints | NotSupported | +| ndb_force_send | NotSupported | +| ndb_fully_replicated | NotSupported | +| ndb_index_stat_enable | NotSupported | +| ndb_index_stat_option | NotSupported | +| ndb_join_pushdown | NotSupported | +| ndb_log_bin | NotSupported | +| ndb_log_exclusive_reads | NotSupported | +| ndb_row_checksum | NotSupported | +| ndb_use_exact_count | NotSupported | +| ndb_use_transactions | NotSupported | +| ndbinfo_max_bytes | NotSupported | +| ndbinfo_max_rows | NotSupported | +| ndbinfo_show_hidden | NotSupported | +| ndbinfo_table_prefix | NotSupported | +| old_alter_table | NotSupported | +| preload_buffer_size | NotSupported | +| rbr_exec_mode | NotSupported | +| sql_log_off | NotSupported | +| thread_pool_high_priority_connection | NotSupported | +| thread_pool_prio_kickup_timer | NotSupported | +| transaction_write_set_extraction | NotSupported | +| default_week_format | ReservedConn | +| end_markers_in_json | ReservedConn | +| eq_range_index_dive_limit | ReservedConn | +| explicit_defaults_for_timestamp | ReservedConn | +| group_concat_max_len | ReservedConn | +| information_schema_stats_expiry | ReservedConn | +| max_heap_table_size | ReservedConn | +| max_seeks_for_key | ReservedConn | +| max_tmp_tables | ReservedConn | +| min_examined_row_limit | ReservedConn | +| old_passwords | ReservedConn | +| optimizer_prune_level | ReservedConn | +| optimizer_search_depth | ReservedConn | +| optimizer_switch | ReservedConn | +| optimizer_trace | ReservedConn | +| optimizer_trace_features | ReservedConn | +| optimizer_trace_limit | ReservedConn | +| optimizer_trace_max_mem_size | ReservedConn | +| optimizer_trace_offset | ReservedConn | +| parser_max_mem_size | ReservedConn | +| profiling | ReservedConn | +| profiling_history_size | ReservedConn | +| query_alloc_block_size | ReservedConn | +| range_alloc_block_size | ReservedConn | +| range_optimizer_max_mem_size | ReservedConn | +| read_buffer_size | ReservedConn | +| read_rnd_buffer_size | ReservedConn | +| show_create_table_verbosity | ReservedConn | +| show_old_temporals | ReservedConn | +| sort_buffer_size | ReservedConn | +| sql_big_selects | ReservedConn | +| sql_mode | ReservedConn | +| sql_notes | ReservedConn | +| sql_quote_show_create | ReservedConn | +| sql_safe_updates | ReservedConn | +| sql_warnings | ReservedConn | +| time_zone | ReservedConn | +| tmp_table_size | ReservedConn | +| transaction_prealloc_size | ReservedConn | +| unique_checks | ReservedConn | +| updatable_views_with_limit | ReservedConn | +| binlog_format | CheckAndIgnore | +| block_encryption_mode | CheckAndIgnore | +| character_set_client | CheckAndIgnore | +| character_set_connection | CheckAndIgnore | +| character_set_database | CheckAndIgnore | +| character_set_filesystem | CheckAndIgnore | +| character_set_results | CheckAndIgnore | +| character_set_server | CheckAndIgnore | +| collation_connection | CheckAndIgnore | +| collation_database | CheckAndIgnore | +| collation_server | CheckAndIgnore | +| completion_type | CheckAndIgnore | +| div_precision_increment | CheckAndIgnore | +| innodb_lock_wait_timeout | CheckAndIgnore | +| interactive_timeout | CheckAndIgnore | +| lc_time_names | CheckAndIgnore | +| lock_wait_timeout | CheckAndIgnore | +| max_allowed_packet | CheckAndIgnore | +| max_error_count | CheckAndIgnore | +| max_execution_time | CheckAndIgnore | +| max_join_size | CheckAndIgnore | +| max_length_for_sort_data | CheckAndIgnore | +| max_sort_length | CheckAndIgnore | +| max_user_connections | CheckAndIgnore | +| net_read_timeout | CheckAndIgnore | +| net_retry_count | CheckAndIgnore | +| net_write_timeout | CheckAndIgnore | +| session_track_schema", boolean: | CheckAndIgnore | +| session_track_state_change", boolean: | CheckAndIgnore | +| session_track_system_variables | CheckAndIgnore | +| session_track_transaction_info | CheckAndIgnore | +| sql_auto_is_null", boolean: | CheckAndIgnore | +| version_tokens_session | CheckAndIgnore | + +**Related Vitess Documentation** + +* [VTGate](../vtgate) diff --git a/content/en/docs/21.0/concepts/replication-graph.md b/content/en/docs/21.0/concepts/replication-graph.md new file mode 100644 index 000000000..2a88f88f3 --- /dev/null +++ b/content/en/docs/21.0/concepts/replication-graph.md @@ -0,0 +1,6 @@ +--- +title: Replication Graph +--- + +The *replication graph* identifies the relationships between primary databases and their respective replicas. During a failover, the replication graph enables Vitess to point all existing replicas to a newly designated primary database so that replication can continue. + diff --git a/content/en/docs/21.0/concepts/shard.md b/content/en/docs/21.0/concepts/shard.md new file mode 100644 index 000000000..375aa9ddf --- /dev/null +++ b/content/en/docs/21.0/concepts/shard.md @@ -0,0 +1,46 @@ +--- +title: Shard +--- + +A *shard* is a subset of a keyspace. A keyspace will always contain one or more shards. A shard typically contains one MySQL primary and potentially many MySQL replicas. + +Each MySQL instance within a shard has identical data (if we ignore any replication lag). The replicas can serve read-only traffic (with eventual consistency guarantees), execute long-running data analysis queries, or perform administrative tasks (backup, restore, diff, etc.). + +An *unsharded* keyspace is a keyspace with only a single shard. Vitess names the shard `0` (or sometimes `-`) by convention. When sharded, a keyspace has `N` shards with non-overlapping data. The number of shards in a keyspace can vary depending on the use-case and load characteristics, some Vitess users have hundreds of shards in some keyspaces. + +## Shard Naming + +Shard names have the following characteristics: + +* They represent a range in unsigned integer space, where the left number is included, but the right is not. +* Their notation is hexadecimal. +* They are left justified, and right-padded with zeros. +* A `-` prefix means: anything less than the right value. +* A `-` postfix means: anything greater than or equal to the LHS value. +* A plain `-` denotes the full keyrange. + +Thus: `-80` == `00-80` == `0000-8000` == `000000-800000` == `0000000000000000-8000000000000000` + +`80-` is not the same as `80-FF`. This is why: + +`80-FF` == `8000-FF00`. Therefore `FFFF` will be out of the `80-FF` range. + +`80-` means: ‘anything greater than or equal to `0x80` + +A `hash` type vindex produces an unsigned 64 bit integer as output. This means that all integers **less** than `0x8000000000000000` will fall in shard `-80`. Any number with the highest bit set will be >= `0x8000000000000000`, and will therefore belong to shard `80-`. + +This left-justified approach allows you to have keyspace ids of arbitrary length. However, the most significant bits are the ones on the left. + +For example an `md5` hash produces 16 bytes. That can also be used as a keyspace id. + +A `varbinary` of arbitrary length can also be mapped as is to a keyspace id. This is what the `binary` vindex does. + +## Resharding + +Vitess supports [resharding](../../user-guides/configuration-advanced/resharding), in which the number of shards is changed on a live cluster. This can be either splitting one or more shards into smaller pieces, or merging neighboring shards into bigger pieces. + +During resharding, the data in the source shards is copied into the destination shards, allowed to catch up on replication, and then compared against the original to ensure data integrity. Then the live serving infrastructure is shifted to the destination shards, and the source shards are deleted. + +**Related Vitess Documentation** + +* [Resharding User Guide](../../user-guides/configuration-advanced/resharding) diff --git a/content/en/docs/21.0/concepts/tablet.md b/content/en/docs/21.0/concepts/tablet.md new file mode 100644 index 000000000..3f4ae798d --- /dev/null +++ b/content/en/docs/21.0/concepts/tablet.md @@ -0,0 +1,20 @@ +--- +title: Tablet +--- + +A *tablet* is a combination of a `mysqld` process and a corresponding `vttablet` process, usually running on the same machine. Each tablet is assigned a *tablet type*, which specifies what role it currently performs. + +Queries are routed to a tablet via a [VTGate](../vtgate) server. + +## Tablet Types + +See the user guide [VTTablet Modes](../../user-guides/configuration-basic/vttablet-mysql/) for more information. + +* **primary** - A *replica* tablet that happens to currently be the MySQL primary for its shard. +* **master** - Same as **primary**. Deprecated. +* **replica** - A MySQL replica that is eligible to be promoted to *primary*. Conventionally, these are reserved for serving live, user-facing requests (like from the website's frontend). +* **rdonly** - A MySQL replica that cannot be promoted to *primary*. Conventionally, these are used for background processing jobs, such as taking backups, dumping data to other systems, heavy analytical queries and MapReduce. +* **backup** - A tablet that has stopped replication at a consistent snapshot, so it can upload a new backup for its shard. After it finishes, it will resume replication and return to its previous type. +* **restore** - A tablet that has started up with no data, and is in the process of restoring itself from the latest backup. After it finishes, it will begin replicating at the GTID position of the backup, and become either *replica* or *rdonly*. +* **drained** - A tablet that has been reserved by a Vitess background process (such as rdonly tablets for resharding). + diff --git a/content/en/docs/21.0/concepts/topology-service.md b/content/en/docs/21.0/concepts/topology-service.md new file mode 100644 index 000000000..3591bdcdd --- /dev/null +++ b/content/en/docs/21.0/concepts/topology-service.md @@ -0,0 +1,30 @@ +--- +title: Topology Service +description: Also known as the TOPO or lock service +--- + +The [*Topology Service*](../../user-guides/configuration-basic/global-topo/) is a set of backend processes running on different servers. Those servers store topology data and provide a distributed locking service. + +Vitess uses a plug-in system to support various backends for storing topology data, which are assumed to provide a distributed, consistent key-value store. The default topology service plugin is `etcd2`. + +The topology service exists for several reasons: + +* It enables tablets to coordinate among themselves as a cluster. +* It enables Vitess to discover tablets, so it knows where to route queries. +* It stores Vitess configuration provided by the database administrator that is needed by many different servers in the cluster, and that must persist between server restarts. + +A Vitess cluster has one global topology service, and a local topology service in each cell. + +## Global Topology + +The global topology service stores Vitess-wide data that does not change frequently. Specifically, it contains data about keyspaces and shards as well as the primary tablet alias for each shard. + +The global topology is used for some operations, including reparenting and resharding. By design, the global topology service is not used a lot. + +In order to survive any single cell going down, the global topology service should have nodes in multiple cells, with enough to maintain quorum in the event of a cell failure. + +## Local Topology + +Each local topology contains information related to its own cell. Specifically, it contains data about tablets in the cell, the keyspace graph for that cell, and the replication graph for that cell. + +The local topology service must be available for Vitess to discover tablets and adjust routing as tablets come and go. However, no calls to the topology service are made in the critical path of serving a query at steady state. That means queries are still served during temporary unavailability of topology. diff --git a/content/en/docs/21.0/concepts/vschema.md b/content/en/docs/21.0/concepts/vschema.md new file mode 100644 index 000000000..5df75980b --- /dev/null +++ b/content/en/docs/21.0/concepts/vschema.md @@ -0,0 +1,9 @@ +--- +title: VSchema +--- + +A [VSchema](../../reference/features/vschema) allows you to describe how data is organized within keyspaces and shards. This information is used for routing queries, and also during resharding operations. + +For a Keyspace, you can specify if it's sharded or not. For sharded keyspaces, you can specify the list of vindexes for each table. + +Vitess also supports [sequence generators](../../reference/features/vitess-sequences/) that can be used to generate new ids that work like MySQL auto increment columns. The VSchema allows you to associate table columns to sequence tables. If no value is specified for such a column, then VTGate will know to use the sequence table to generate a new value for it. diff --git a/content/en/docs/21.0/concepts/vstream.md b/content/en/docs/21.0/concepts/vstream.md new file mode 100644 index 000000000..efa0db7aa --- /dev/null +++ b/content/en/docs/21.0/concepts/vstream.md @@ -0,0 +1,26 @@ +--- +title: VStream +--- + + +VStream is a change notification service accessible via VTGate. The purpose of +VStream is to provide equivalent information to the MySQL binary logs from the +underlying MySQL shards of the Vitess cluster. gRPC clients, including Vitess +components like VTTablets, can subscribe to a VStream to receive change events +from other shards. The VStream pulls events from one or more VStreamer +instances on VTTablet instances, which in turn pulls events from the binary +log of the underlying MySQL instance. This allows for efficient execution of +functions such as VReplication where a subscriber can indirectly receive +events from the binary logs of one or more MySQL instance shards, and then +apply it to a target instance. A user can leverage VStream to obtain in-depth +information about data change events for a given Vitess keyspace, shard, and +position. A single VStream can also consolidate change events from multiple +shards in a keyspace, making it a convenient tool to feed a CDC (Change Data +Capture) process downstream from your Vitess datastore. + + +For reference, please refer to the diagram below: + +![VStream diagram](/img/VStream.svg) + +Note: A VStream is distinct from a VStreamer. The former is located on the VTGate and the latter is located on the VTTablet. diff --git a/content/en/docs/21.0/concepts/vtctl.md b/content/en/docs/21.0/concepts/vtctl.md new file mode 100644 index 000000000..339ac96aa --- /dev/null +++ b/content/en/docs/21.0/concepts/vtctl.md @@ -0,0 +1,9 @@ +--- +title: vtctl +--- + +**vtctl** is a command-line tool used to administer a Vitess cluster. It is available as both a standalone tool (`vtctl`) and client-server (`vtctldclient` in combination with `vtctld`). Using client-server is recommended, as it provides an additional layer of security when using the client remotely. + +Using vtctl, you can identify primary and replica databases, create tables, initiate failovers, perform resharding operations, and so forth. + +As vtctl performs operations, the Topology Service is updated as needed. Other Vitess servers observe those changes and react accordingly. For example, if you use vtctl to fail over to a new primary database, vtgate sees the change and directs future write operations to the new primary. diff --git a/content/en/docs/21.0/concepts/vtctld.md b/content/en/docs/21.0/concepts/vtctld.md new file mode 100644 index 000000000..3236a00ec --- /dev/null +++ b/content/en/docs/21.0/concepts/vtctld.md @@ -0,0 +1,7 @@ +--- +title: vtctld +--- + +**vtctld** is an HTTP server that lets you browse the information stored in the Topology Service. It is useful for troubleshooting or for getting a high-level overview of the servers and their current states. + +`vtctld` also acts as the server for `vtctldclient` connections. diff --git a/content/en/docs/21.0/concepts/vtgate.md b/content/en/docs/21.0/concepts/vtgate.md new file mode 100644 index 000000000..3e441bb25 --- /dev/null +++ b/content/en/docs/21.0/concepts/vtgate.md @@ -0,0 +1,11 @@ +--- +title: VTGate +--- + +VTGate is a lightweight proxy server that routes traffic to the correct [VTTablet](../tablet) servers and returns consolidated results back to the client. It speaks both the MySQL Protocol and the Vitess gRPC protocol. Thus, your applications can connect to VTGate as if it is a MySQL Server. + +When routing queries to the appropriate VTTablet servers, VTGate considers the sharding scheme, required latency and the availability of tables and their underlying MySQL instances. + +**Related Vitess Documentation** + +* [Execution Plans](../execution-plans) diff --git a/content/en/docs/21.0/get-started/_index.md b/content/en/docs/21.0/get-started/_index.md new file mode 100644 index 000000000..514be5cc4 --- /dev/null +++ b/content/en/docs/21.0/get-started/_index.md @@ -0,0 +1,8 @@ +--- +title: Get Started +description: Deploy Vitess on your favorite platform +weight: 2 +aliases: ['/docs/tutorials/'] +--- + +Vitess supports binary deployment on the following platforms. See also [Build On CentOS](../../contributing/build-on-centos), [Build on MacOS](../../contributing/build-on-macos), or [Build on Ubuntu](../../contributing/build-on-ubuntu) if you are interesting in building your own binary, or contributing to Vitess. diff --git a/content/en/docs/21.0/get-started/local-docker.md b/content/en/docs/21.0/get-started/local-docker.md new file mode 100644 index 000000000..b1db9cc46 --- /dev/null +++ b/content/en/docs/21.0/get-started/local-docker.md @@ -0,0 +1,98 @@ +--- +title: Local Install via Docker +description: Instructions for using Vitess on your machine for testing purposes +weight: 5 +featured: false +aliases: ['/docs/tutorials/local-docker/'] +--- + +{{< warning >}} +This guide will only work on x86_64/amd64 based machines. +{{}} + +This guide illustrates how to run a local testing Vitess setup via Docker. The Vitess environment is identical to the [local setup](../local/), but without having to install software on one's host other than Docker. + +## Check out the vitessio/vitess repository + +Clone the GitHub repository via: + +- SSH: `git clone git@github.com:vitessio/vitess.git`, or: +- HTTP: `git clone https://github.com/vitessio/vitess.git` + +```shell +cd vitess +git checkout release-20.0 +``` + +## Build the docker image + +In your shell, execute: + +```shell +make docker_local +``` + +This creates a docker image named `vitess/local` (aka `vitess/local:latest`) + +## Run the docker image + +In your shell, execute: + +```shell +make docker_run_local +``` + +This will set up a MySQL replication topology, as well as `etcd`, `vtctld`, `vtgate`, +`vtorc`, and `vtadmin` services. + +- `vtgate` listens on [http://127.0.0.1:15001/debug/status](http://127.0.0.1:15001/debug/status) +- `vtctld` listens on [http://127.0.0.1:15000/debug/status](http://127.0.0.1:15000/debug/status) +- `VTOrc` page is available at [http://localhost:16000](http://localhost:16000) +- `VTadmin` web application is available [http://localhost:14201](http://localhost:14201) + +From within the docker shell, aliases are set up for your convenience. Try the following `mysql` commands to connect to various tablets: + +- `mysql commerce` +- `mysql commerce@primary` +- `mysql commerce@replica` +- `mysql commerce@rdonly` + +You will find that Vitess runs a single keyspace, single shard cluster. + +## Summary + +In this example, we deployed a single unsharded keyspace named `commerce`. Unsharded keyspaces have a single shard named `0`. The following schema reflects a common ecommerce scenario that was created by the script: + +```sql +create table product ( + sku varbinary(128), + description varbinary(128), + price bigint, + primary key(sku) +); +create table customer ( + customer_id bigint not null auto_increment, + email varbinary(128), + primary key(customer_id) +); +create table corder ( + order_id bigint not null auto_increment, + customer_id bigint, + sku varbinary(128), + price bigint, + primary key(order_id) +); +``` + +The schema has been simplified to include only those fields that are significant to the example: + +* The `product` table contains the product information for all of the products. +* The `customer` table has a `customer_id` that has an `auto_increment`. A typical customer table would have a lot more columns, and sometimes additional detail tables. +* The `corder` table (named so because `order` is an SQL reserved word) has an `order_id` auto-increment column. It also has foreign keys into `customer(customer_id)` and `product(sku)`. + +## Next Steps + +You can now proceed with [MoveTables](../../user-guides/migration/move-tables). + +Exiting the docker shell terminates and destroys the vitess cluster. + diff --git a/content/en/docs/21.0/get-started/local-mac.md b/content/en/docs/21.0/get-started/local-mac.md new file mode 100644 index 000000000..f249e729c --- /dev/null +++ b/content/en/docs/21.0/get-started/local-mac.md @@ -0,0 +1,311 @@ +--- +title: Local Install via source for Mac +description: Instructions for using Vitess on your macOS machine for testing purposes +weight: 4 +--- + +This guide covers installing Vitess locally for testing purposes, from pre-compiled binaries. We will launch multiple copies of `mysqld`, so it is recommended to have greater than 4GB RAM, as well as 20GB of available disk space. + +## Install Brew + +For the purposes of installing software you will need to have brew installed. This will also install curl and git which will also be needed: + +```sh +curl https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh > brew-install.sh + +bash brew-install.sh +``` + +## Install MySQL and etcd + +Once brew is installed you will need to install some dependencies for Vitess. Vitess supports the databases listed [here](../../overview/supported-databases/): + +```sh +brew install automake go mysql mysql-client etcd +``` + +When MySQL installs with brew it will startup, you will want to shut this process down, as Vitess will be managing the startup and shutdown of MySQL: + +```sh +$ brew services stop mysql +``` + +### Install Node 18.16.0+ (required to run VTAdmin) + +```bash +brew install nvm +nvm install --lts 18.16.0 +nvm use 18.16.0 +``` + +See the [vtadmin README](https://github.com/vitessio/vitess/blob/main/web/vtadmin/README.md) for more details. + +## PATH Settings + +With the tools you’ve just installed via brew, you will next update your PATH variable so your shell knows where to find the binaries: + +```sh +echo "export PATH=${PATH}:/opt/homebrew/opt/mysql-client/bin:/opt/homebrew/opt/mysql/bin:${HOME}/go/bin:/opt/homebrew/bin" >> ~/.zshrc +source ~/.zshrc +``` + +If you’re using bash for your shell you’ll have to update the paths in `.bash_profile` or `.bashrc` instead. Mac does not read `.bashrc` by default: + +```sh +echo "export PATH=${PATH}:/opt/homebrew/opt/mysql-client/bin:/opt/homebrew/opt/mysql/bin:${HOME}/go/bin:/opt/homebrew/bin" >> ~/.bash_profile +source ~/.bash_profile +``` + +## System Check + +Before going further, you should check to confirm your shell has access to `go`, `mysql`, and `mysqld`. If versions are not returned when you run the following commands you should check that the programs are installed and the path is correct for your shell: + +```sh +$ mysqld --version +$ mysql --version +$ go version +$ etcd --version +$ node --version +$ npm --version +``` + +## Install Vitess + +With everything now in place you can clone and build Vitess. + +```sh +$ git clone https://github.com/vitessio/vitess.git +$ cd vitess +$ git checkout release-20.0 +$ make build +``` + +It will take some time for Vitess to build. Once it completes you should see a bin folder which will hold the Vitess binaries. You will need to add this folder to your `PATH` variable as well: + +```sh +$ cd bin +$ echo "$(printf 'export PATH="${PATH}:'; echo "$(pwd)\"")" >> ~/.zshrc +$ source ~/.zshrc +``` + +If you are using bash this will need to be your `.bash_profile` or `.bashrc` file instead: + +```sh +$ cd bin +$ echo "$(printf 'export PATH="${PATH}:'; echo "$(pwd)\"")" >> ~/.bash_profile +$ source ~/.bash_profile +``` + +You are now ready to start your first cluster! Open a new terminal window to ensure your `.bashrc` file changes take effect. + +## Start a Single Keyspace Cluster + +You are now ready to stand up your first Vitess cluster, using the example scripts provided in the source code. Assuming you are still in the bin directory you will need to navigate to the sample files: + +```sh +$ cd ../examples/local/ +``` + +From here you can startup the cluster and source the env file which will help set environment variables used when working with this local cluster: + +```sh +$ ./101_initial_cluster.sh +$ source ../common/env.sh +``` + +You should see an output similar to the following: + +```bash +$ ./101_initial_cluster.sh +add /vitess/global +add /vitess/zone1 +add zone1 CellInfo +Created cell: zone1 +etcd start done... +Starting vtctld... +vtctld is running! +Successfully created keyspace commerce. Result: +{ + "name": "commerce", + "keyspace": { + "served_froms": [], + "keyspace_type": 0, + "base_keyspace": "", + "snapshot_time": null, + "durability_policy": "semi_sync", + "throttler_config": null, + "sidecar_db_name": "_vt" + } +} +Starting MySQL for tablet zone1-0000000100... +Starting vttablet for zone1-0000000100... +HTTP/1.1 200 OK +Date: Mon, 26 Jun 2023 19:21:51 GMT +Content-Type: text/html; charset=utf-8 + +Starting MySQL for tablet zone1-0000000101... +Starting vttablet for zone1-0000000101... +HTTP/1.1 200 OK +Date: Mon, 26 Jun 2023 19:21:54 GMT +Content-Type: text/html; charset=utf-8 + +Starting MySQL for tablet zone1-0000000102... +Starting vttablet for zone1-0000000102... +HTTP/1.1 200 OK +Date: Mon, 26 Jun 2023 19:21:56 GMT +Content-Type: text/html; charset=utf-8 + +vtorc is running! + - UI: http://localhost:16000 + - Logs: /Users/florentpoinsard/Code/vitess/vtdataroot/tmp/vtorc.out + - PID: 49556 + + +New VSchema object: +{ + "sharded": false, + "vindexes": {}, + "tables": { + "corder": { + "type": "", + "column_vindexes": [], + "auto_increment": null, + "columns": [], + "pinned": "", + "column_list_authoritative": false, + "source": "" + }, + "customer": { + "type": "", + "column_vindexes": [], + "auto_increment": null, + "columns": [], + "pinned": "", + "column_list_authoritative": false, + "source": "" + }, + "product": { + "type": "", + "column_vindexes": [], + "auto_increment": null, + "columns": [], + "pinned": "", + "column_list_authoritative": false, + "source": "" + } + }, + "require_explicit_routing": false +} +If this is not what you expected, check the input data (as JSON parsing will skip unexpected fields). +Waiting for vtgate to be up... +vtgate is up! +Access vtgate at http://Florents-MacBook-Pro-2.local:15001/debug/status +vtadmin-api is running! + - API: http://Florents-MacBook-Pro-2.local:14200 + - Logs: /Users/florentpoinsard/Code/vitess/vtdataroot/tmp/vtadmin-api.out + - PID: 49695 + +vtadmin-web is running! + - Browser: http://Florents-MacBook-Pro-2.local:14201 + - Logs: /Users/florentpoinsard/Code/vitess/vtdataroot/tmp/vtadmin-web.out + - PID: 49698 +``` + +If you encounter any errors, such as ports already in use, you can kill the processes and start over. Ensure you're in the vitess/examples/local directory, then issue the statement to kill the processes and remove the data directory. +This data directory `vtdataroot` will get recreated when you run the 101_initial_cluster.sh startup script again. + +```sh +user@computer:~/Github/vitess/examples/local$ pwd +/home/user/Github/vitess/examples/local + +user@computer:~/Github/vitess/examples/local$ pkill -9 -f '(vtdataroot|VTDATAROOT|vitess|vtadmin)' +etcd killed (pid 224091) +vtctld killed (pid 224154) +mysqld_safe killed (pid 224247) +mysqld killed (pid 224716) +vttablet killed (pid 224764) +mysqld_safe killed (pid 224897) +mysqld killed (pid 225364) +vttablet killed (pid 225413) +mysqld_safe killed (pid 225529) +mysqld killed (pid 225995) +vttablet killed (pid 226045) +vtgate killed (pid 226204) +vtadmin killed (pid 226391) +vtorc killed (pid 226397) + +user@computer:~/Github/vitess/examples/local$ rm -rf ./vtdataroot +``` + +## Connect to your cluster + +You should now be able to connect to the VTGate server that was started in `101_initial_cluster.sh`: + +```sh +$ mysql -P 15306 -u root --protocol tcp +``` + +
+ +You can also now browse and administer your new Vitess cluster using the [VTAdmin](../../reference/vtadmin/) UI at the following URL: + +```text +http://localhost:14201 +``` + +
+ +VTOrc is also setup as part of the initialization. You can look at its user-interface at: + +```text +http://localhost:16000 +``` + +## Summary + +In this example, we deployed a single unsharded keyspace named `commerce`. Unsharded keyspaces have a single shard named `0`. The following schema reflects a common ecommerce scenario that was created by the script: + +```sql +create table product ( + sku varbinary(128), + description varbinary(128), + price bigint, + primary key(sku) +); +create table customer ( + customer_id bigint not null auto_increment, + email varbinary(128), + primary key(customer_id) +); +create table corder ( + order_id bigint not null auto_increment, + customer_id bigint, + sku varbinary(128), + price bigint, + primary key(order_id) +); +``` + +The schema has been simplified to include only those fields that are significant to the example: + +* The `product` table contains the product information for all of the products. +* The `customer` table has a `customer_id` that has an `auto_increment`. A typical customer table would have a lot more columns, and sometimes additional detail tables. +* The `corder` table (named so because `order` is an SQL reserved word) has an `order_id` auto-increment column. It also has foreign keys into `customer(customer_id)` and `product(sku)`. + +## Next Steps + +You can now proceed with [MoveTables](../../user-guides/migration/move-tables). + +Or alternatively, once you are finished with the local examples or if you would like to start over, you can clean up by running the 401_teardown script: + +```sh +$ ./401_teardown.sh +$ rm -rf ./vtdataroot +``` + +Sometimes you will still need to manually kill processes if there are errors in the environment: + +```sh +$ pkill -9 -f ./vtdataroot +$ rm -rf ./vtdataroot +``` diff --git a/content/en/docs/21.0/get-started/local.md b/content/en/docs/21.0/get-started/local.md new file mode 100644 index 000000000..46bff90f6 --- /dev/null +++ b/content/en/docs/21.0/get-started/local.md @@ -0,0 +1,341 @@ +--- +title: Local Install +description: Instructions for using Vitess on your machine for testing purposes +weight: 2 +featured: true +aliases: ['/docs/tutorials/local/'] +--- + +This guide covers installing Vitess locally for testing purposes, from pre-compiled binaries. We will launch multiple copies of `mysqld`, so it is recommended to have greater than 4GB RAM, as well as 20GB of available disk space. + +A [docker setup](../local-docker/) is also available, which requires no dependencies on your local host. + +## Install MySQL and etcd + +Vitess supports the databases listed [here](../../overview/supported-databases/). We recommend MySQL 8.0 if your installation method provides that option: + +```sh +# Ubuntu based +sudo apt install -y mysql-server etcd-server etcd-client curl + +# Debian +sudo apt install -y default-mysql-server default-mysql-client etcd curl + +# Yum based +sudo yum -y localinstall https://dev.mysql.com/get/mysql80-community-release-el8-3.noarch.rpm +sudo yum -y install mysql-community-server etcd curl +``` + +On apt-based distributions the services `mysqld` and `etcd` will need to be shutdown, since `etcd` will conflict with the `etcd` started in the examples, and `mysqlctl` will start its own copies of `mysqld`: + +```sh +# Debian and Ubuntu +sudo service mysql stop +sudo service etcd stop +sudo systemctl disable mysql +sudo systemctl disable etcd +``` + + +## Install Node + +``` +curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash +``` + +Ensure the following is in your bashrc/zshrc or similar. `nvm` automatically attempts to add them: +``` +export NVM_DIR="$HOME/.nvm" +[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm +[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" +``` + +Finally, install [node](https://nodejs.org/): + +``` +nvm install 18 +nvm use 18 +``` + +See the [vtadmin README](https://github.com/vitessio/vitess/blob/main/web/vtadmin/README.md) for more details. + +## Disable AppArmor or SELinux + +AppArmor/SELinux will not allow Vitess to launch MySQL in any data directory by default. You will need to disable it: + +__AppArmor__: +```sh +# Debian and Ubuntu +sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/ +sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld + +# The following command should return an empty result: +sudo aa-status | grep mysqld +``` + +__SELinux__: +```sh +# CentOS +sudo setenforce 0 +``` + +## Install Vitess + +Download the [latest binary release](https://github.com/vitessio/vitess/releases) for Vitess on Linux. For example with Vitess 19: + +**Notes:** + +* Ubuntu is the only fully supported OS, for another OS please [build Vitess by yourself](/docs/contributing) or use the Docker images. + +```sh +version=20.0.0-rc1 +file=vitess-${version}-fe01c8d.tar.gz +wget https://github.com/vitessio/vitess/releases/download/v${version}/${file} +tar -xzf ${file} +cd ${file/.tar.gz/} +sudo mkdir -p /usr/local/vitess +sudo cp -r * /usr/local/vitess/ +``` + +Make sure to add `/usr/local/vitess/bin` to the `PATH` environment variable. You can do this by adding the following to your `$HOME/.bashrc` file: + +```sh +export PATH=/usr/local/vitess/bin:${PATH} +``` + +You are now ready to start your first cluster! Open a new terminal window to ensure your `.bashrc` file changes take effect. + +## Start a Single Keyspace Cluster + +Start by copying the local examples included with Vitess to your preferred location. For our first example we will deploy a [single unsharded keyspace](../../concepts/keyspace). The file `101_initial_cluster.sh` is for example `1` phase `01`. Lets execute it now: + +```sh +vitess_path=/usr/local/vitess +mkdir ~/my-vitess-example +cp -r ${vitess_path}/{examples,web} ~/my-vitess-example +cd ~/my-vitess-example/examples/local +./101_initial_cluster.sh +``` + +You should see an output similar to the following: + +```bash +$ ./101_initial_cluster.sh +add /vitess/global +add /vitess/zone1 +add zone1 CellInfo +Created cell: zone1 +etcd start done... +Starting vtctld... +vtctld is running! +Successfully created keyspace commerce. Result: +{ + "name": "commerce", + "keyspace": { + "served_froms": [], + "keyspace_type": 0, + "base_keyspace": "", + "snapshot_time": null, + "durability_policy": "semi_sync", + "throttler_config": null, + "sidecar_db_name": "_vt" + } +} +Starting MySQL for tablet zone1-0000000100... +Starting vttablet for zone1-0000000100... +HTTP/1.1 200 OK +Date: Mon, 26 Jun 2023 19:21:51 GMT +Content-Type: text/html; charset=utf-8 + +Starting MySQL for tablet zone1-0000000101... +Starting vttablet for zone1-0000000101... +HTTP/1.1 200 OK +Date: Mon, 26 Jun 2023 19:21:54 GMT +Content-Type: text/html; charset=utf-8 + +Starting MySQL for tablet zone1-0000000102... +Starting vttablet for zone1-0000000102... +HTTP/1.1 200 OK +Date: Mon, 26 Jun 2023 19:21:56 GMT +Content-Type: text/html; charset=utf-8 + +vtorc is running! + - UI: http://localhost:16000 + - Logs: /Users/florentpoinsard/Code/vitess/vtdataroot/tmp/vtorc.out + - PID: 49556 + + +New VSchema object: +{ + "sharded": false, + "vindexes": {}, + "tables": { + "corder": { + "type": "", + "column_vindexes": [], + "auto_increment": null, + "columns": [], + "pinned": "", + "column_list_authoritative": false, + "source": "" + }, + "customer": { + "type": "", + "column_vindexes": [], + "auto_increment": null, + "columns": [], + "pinned": "", + "column_list_authoritative": false, + "source": "" + }, + "product": { + "type": "", + "column_vindexes": [], + "auto_increment": null, + "columns": [], + "pinned": "", + "column_list_authoritative": false, + "source": "" + } + }, + "require_explicit_routing": false +} +If this is not what you expected, check the input data (as JSON parsing will skip unexpected fields). +Waiting for vtgate to be up... +vtgate is up! +Access vtgate at http://Florents-MacBook-Pro-2.local:15001/debug/status +vtadmin-api is running! + - API: http://Florents-MacBook-Pro-2.local:14200 + - Logs: /Users/florentpoinsard/Code/vitess/vtdataroot/tmp/vtadmin-api.out + - PID: 49695 + +vtadmin-web is running! + - Browser: http://Florents-MacBook-Pro-2.local:14201 + - Logs: /Users/florentpoinsard/Code/vitess/vtdataroot/tmp/vtadmin-web.out + - PID: 49698 +``` + +You can also verify that the processes have started with `pgrep`: + +```bash +$ pgrep -fl vitess +14119 etcd +14176 vtctld +14251 mysqld_safe +14720 mysqld +14787 vttablet +14885 mysqld_safe +15352 mysqld +15396 vttablet +15492 mysqld_safe +15959 mysqld +16006 vttablet +16112 vtgate +16788 vtorc +``` + +_The exact list of processes will vary. For example, you may not see `mysqld_safe` listed._ + +If you encounter any errors, such as ports already in use, you can kill the processes and start over: + +```sh +pkill -9 -f '(vtdataroot|VTDATAROOT|vitess|vtadmin)' # kill Vitess processes +rm -rf vtdataroot +``` + +## Setup Aliases + +For ease-of-use, Vitess provides aliases for `mysql` and `vtcltdclient`: + +```bash +source ../common/env.sh +``` + +Setting up aliases changes `mysql` to always connect to Vitess for your current session. To revert this, type `unalias mysql && unalias vtctldclient` or close your session. + +## Connect to your cluster + +You should now be able to connect to the VTGate server that was started in `101_initial_cluster.sh`: + +```bash +$ mysql +Welcome to the MySQL monitor. Commands end with ; or \g. +Your MySQL connection id is 2 +Server version: 8.0.31-Vitess (Ubuntu) + +Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. + +Oracle is a registered trademark of Oracle Corporation and/or its +affiliates. Other names may be trademarks of their respective +owners. + +Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + +mysql> show tables; ++-----------------------+ +| Tables_in_vt_commerce | ++-----------------------+ +| corder | +| customer | +| product | ++-----------------------+ +3 rows in set (0.00 sec) +``` + +
+ +You can also now browse and administer your new Vitess cluster using the [VTAdmin](../../reference/vtadmin/) UI at the following URL: + +```text +http://localhost:14201 +``` + +
+ +VTOrc is also setup as part of the initialization. You can look at its user-interface at: + +```text +http://localhost:16000 +``` + +## Summary + +In this example, we deployed a single unsharded keyspace named `commerce`. Unsharded keyspaces have a single shard named `0`. The following schema reflects a common ecommerce scenario that was created by the script: + +```sql +create table product ( + sku varbinary(128), + description varbinary(128), + price bigint, + primary key(sku) +); +create table customer ( + customer_id bigint not null auto_increment, + email varbinary(128), + primary key(customer_id) +); +create table corder ( + order_id bigint not null auto_increment, + customer_id bigint, + sku varbinary(128), + price bigint, + primary key(order_id) +); +``` + +The schema has been simplified to include only those fields that are significant to the example: + +* The `product` table contains the product information for all of the products. +* The `customer` table has a `customer_id` that has an `auto_increment`. A typical customer table would have a lot more columns, and sometimes additional detail tables. +* The `corder` table (named so because `order` is an SQL reserved word) has an `order_id` auto-increment column. It also has foreign keys into `customer(customer_id)` and `product(sku)`. + +## Next Steps + +You can now proceed with [MoveTables](../../user-guides/migration/move-tables). + +Or alternatively, if you would like to teardown your example: + +```bash +./401_teardown.sh +rm -rf vtdataroot +``` diff --git a/content/en/docs/21.0/get-started/operator.md b/content/en/docs/21.0/get-started/operator.md new file mode 100644 index 000000000..5720f49b8 --- /dev/null +++ b/content/en/docs/21.0/get-started/operator.md @@ -0,0 +1,172 @@ +--- +title: Vitess Operator for Kubernetes +weight: 1 +featured: true +aliases: ['/docs/tutorials/kubernetes/','/user-guide/sharding-kubernetes.html', '/docs/get-started/scaleway/','/docs/get-started/kubernetes/'] +--- + +PlanetScale provides a [Vitess Operator for Kubernetes](https://github.com/planetscale/vitess-operator), released under the Apache 2.0 license. The following steps show how to get started using Minikube: + +## Prerequisites + +{{}}Information on the versions of Kubernetes supported can be [found here](https://github.com/planetscale/vitess-operator#compatibility).{{}} + +Before we get started, let’s get a few pre-requisites out of the way: + +1. Install [Docker Engine](https://docs.docker.com/engine/install/) locally. + +1. Install [Minikube](https://kubernetes.io/docs/tasks/tools/install-minikube/) and start a Minikube engine: + ```bash + minikube start --kubernetes-version=v1.28.5 --cpus=4 --memory=11000 --disk-size=32g + ``` + +1. Install [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) and ensure it is in your `PATH`. + +1. Install [the MySQL client](https://dev.mysql.com/doc/mysql-getting-started/en/) locally. + +1. Install [vtctldclient](https://vitess.io/docs/get-started/local/#install-vitess) locally. + +## Install the Operator + +Change to the operator example directory: + +```bash +git clone https://github.com/vitessio/vitess +cd vitess/examples/operator +git checkout release-20.0 +``` + +Install the operator: + +```bash +kubectl apply -f operator.yaml +``` + +## Bring up an initial cluster + +In this directory, you will see a group of yaml files. The first digit of each file name indicates the phase of example. The next two digits indicate the order in which to execute them. For example, `101_initial_cluster.yaml` is the first file of the first phase. We shall execute that now: + +```bash +kubectl apply -f 101_initial_cluster.yaml +``` + +### Verify cluster + +You can check the state of your cluster with `kubectl get pods`. After a few minutes, it should show that all pods are in the status of running: + +```bash +$ kubectl get pods +NAME READY STATUS RESTARTS AGE +example-commerce-x-x-zone1-vtorc-c13ef6ff-5db4c77865-l96xq 1/1 Running 2 (2m49s ago) 5m16s +example-etcd-faf13de3-1 1/1 Running 0 5m17s +example-etcd-faf13de3-2 1/1 Running 0 5m17s +example-etcd-faf13de3-3 1/1 Running 0 5m17s +example-vttablet-zone1-2469782763-bfadd780 3/3 Running 1 (2m43s ago) 5m16s +example-vttablet-zone1-2548885007-46a852d0 3/3 Running 1 (2m47s ago) 5m16s +example-zone1-vtadmin-c03d7eae-7c6f6c98f8-f4f5z 2/2 Running 0 5m17s +example-zone1-vtctld-1d4dcad0-57b9d7bc4b-2tnqd 1/1 Running 2 (2m53s ago) 5m17s +example-zone1-vtgate-bc6cde92-7d445d676-x6npk 1/1 Running 2 (3m ago) 5m17s +vitess-operator-5f47c6c45d-bgqp2 1/1 Running 0 6m52s +``` + +## Setup Port-forward + +{{< warning >}} +The port-forward will only forward to a specific pod. Currently, `kubectl` does not automatically terminate a port-forward as the pod disappears due to apply/upgrade operations. You will need to manually restart the port-forward. +{{}} + +For ease-of-use, Vitess provides a script to port-forward from Kubernetes to your local machine. This script also recommends setting up aliases for `mysql` and `vtctldclient`: + +```bash +./pf.sh & +alias vtctldclient="vtctldclient --server=localhost:15999" +alias mysql="mysql -h 127.0.0.1 -P 15306 -u user" +``` + +Setting up aliases changes `mysql` to always connect to Vitess for your current session. To revert this, type `unalias mysql && unalias vtctldclient` or close your session. + +Once the port-forward starts running, the VTAdmin UI will be available at [http://localhost:14000/](http://localhost:14000/) + +## Create Schema + +Load our initial schema: + +```bash +vtctldclient ApplySchema --sql-file="create_commerce_schema.sql" commerce +vtctldclient ApplyVSchema --vschema-file="vschema_commerce_initial.json" commerce +``` + +### Connect to your cluster + +You should now be able to connect to the VTGate Server in your cluster with the MySQL client: + +```text +~/vitess/examples/operator$ mysql +Welcome to the MySQL monitor. Commands end with ; or \g. +Your MySQL connection id is 3 +Server version: 8.0.30-Vitess MySQL Community Server (GPL) + +Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. + +Oracle is a registered trademark of Oracle Corporation and/or its +affiliates. Other names may be trademarks of their respective +owners. + +Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + +mysql> show databases; ++--------------------+ +| Database | ++--------------------+ +| commerce | +| information_schema | +| mysql | +| sys | +| performance_schema | ++--------------------+ +5 rows in set (0.01 sec) + +mysql> +``` + +### Summary + +In this example, we deployed a single unsharded keyspace named `commerce`. Unsharded keyspaces have a single shard named `0`. The following schema reflects a common ecommerce scenario that was created by the script: + +``` sql +create table product( + sku varbinary(128), + description varbinary(128), + price bigint, + primary key(sku) +); +create table customer( + customer_id bigint not null auto_increment, + email varbinary(128), + primary key(customer_id) +); +create table corder( + order_id bigint not null auto_increment, + customer_id bigint, + sku varbinary(128), + price bigint, + primary key(order_id) +); +``` + +The schema has been simplified to include only those fields that are significant to the example: + +* The `product` table contains the product information for all of the products. +* The `customer` table has a `customer_id` that has an `auto_increment`. A typical customer table would have a lot more columns, and sometimes additional detail tables. +* The `corder` table (named so because `order` is an SQL reserved word) has an `order_id` auto-increment column. It also has foreign keys into `customer(customer_id)` and `product(sku)`. + +## Next Steps + +You can now proceed with [MoveTables](../../user-guides/migration/move-tables). + +Or alternatively, if you would like to teardown your example: + +```sh +kubectl delete -f 101_initial_cluster.yaml +``` +Congratulations on completing this exercise! diff --git a/content/en/docs/21.0/get-started/vttestserver-docker-image.md b/content/en/docs/21.0/get-started/vttestserver-docker-image.md new file mode 100644 index 000000000..6e10480db --- /dev/null +++ b/content/en/docs/21.0/get-started/vttestserver-docker-image.md @@ -0,0 +1,152 @@ +--- +title: Vttestserver Docker Image +weight: 10 +featured: true +aliases: ['/docs/tutorials/vttestserver/'] +--- + +This guide covers using the vttestserver docker image for testing purposes. This is also the docker image that we use for testing in [Vitess Framework Testing](https://github.com/planetscale/vitess-framework-testing). + +## Get the docker image + +The first step is to get the docker image. There are two ways of doing this : + +### 1. From the vitessio/vitess repository + +#### Check out the vitessio/vitess repository + +Clone the GitHub repository via: + +- SSH: `git clone git@github.com:vitessio/vitess.git`, or: +- HTTP: `git clone https://github.com/vitessio/vitess.git` + +```shell +cd vitess +git checkout release-20.0 +``` + +#### Build the docker image + +In your shell, execute: + +```shell +make docker_vttestserver +``` + +This creates 2 docker images named `vitess/vttestserver:mysql57` and `vitess/vttestserver:mysql80` + +### 2. Pulling from docker hub + +Alternately, you can get the latest docker images from the docker hub. In your shell, execute: + +```shell +docker pull vitess/vttestserver:mysql57 +docker pull vitess/vttestserver:mysql80 +``` + +## Run the docker image + +At this point, you should have a docker image named `vitess/vttestserver:mysql57` or `vitess/vttestserver:mysql80`. + +### Environment variables + +The docker image expects some of the environment variables to be set to function properly. The following table lists all the environment variables available along with their usages. + +| Environment variable | Required | Use | +|---------------------------|----------|---------------------------------------------------------------------------------------------------------------------------------------------------| +| *KEYSPACES* | yes | Specifies the names of the keyspaces to be created as a comma separated value. | +| *NUM_SHARDS* | yes | Specifies the number of shards in each keyspace. It is a comma separated value as well, read in conjunction with the KEYSPACES. | +| *PORT* | yes | The starting of the port addresses that vitess will use to register its components like vtgate, etc. | +| *MYSQL_MAX_CONNECTIONS* | no | Maximum number of connections that the MySQL instance will support. If unspecified, it defaults to 1000. | +| *MYSQL_BIND_HOST* | no | Which host to bind the MySQL listener to. If unspecified, it defaults to `127.0.0.1`. | +| *VTCOMBO_BIND_HOST* | no | Which host to bind the vtcombo servenv listener to. If unspecified, it defaults to `127.0.0.1`. | +| *MYSQL_SERVER_VERSION* | no | MySQL server version to advertise. If unspecified, it defaults to `8.0.31-vitess` or `5.7.9-vitess` according to the version of vttestserver run. | +| *CHARSET* | no | Default charset to use. If unspecified, it defaults to `utf8mb4`. | +| *FOREIGN_KEY_MODE* | no | This is to provide how to handle foreign key constraint in create/alter table. Valid values are: allow (default), disallow. | +| *ENABLE_ONLINE_DDL* | no | Allow users to submit, review and control Online DDL. Valid values are: true (default), false. | +| *ENABLE_DIRECT_DDL* | no | Allow users to submit direct DDL statements. Valid values are: true (default), false. | +| *PLANNER_VERSION* | no | Sets the default planner to use when the session has not changed it. Valid values are: Gen4, Gen4Greedy, Gen4Left2Right. | +| *TABLET_REFRESH_INTERVAL* | no | Interval at which vtgate refreshes tablet information from topology server. | + +Environment variables in docker can be specified using the `-e` aka `--env` flag. + +### Sending queries to vttestserver container from outside + +The vtgate listens for MySQL connections on 3 + the `PORT` environment variable specified. i.e. if you specify `PORT` to be 33574, then vtgate will be listening to connections on 33577, on the `MYSQL_BIND_HOST` which defaults to localhost. But this port will be on the docker container side. To connect to vtgate externally from a MySQL client, you will need to publish that port as well and specify the `MYSQL_BIND_HOST` to `0.0.0.0`. This can be done via the `-p` aka `--publish` flag to docker. For eg: adding `-p 33577:33577` to the `docker +run` command will publish the container's 33577 port to your local 33577 port, which can now be used to connect to the vtgate. + +### Viewing the vtcombo `/debug/status` dashboard and running vtctld commands + +The vtcombo `/debug/status` page is viewable at the port specified by the `PORT` environment variable on the docker side. To view it in a browser outside, you will need to publish that port as well and specify the `VTCOMBO_BIND_HOST` to `0.0.0.0`. This can be done via the `-p` aka `--publish` flag to docker. + +Similarily, vtctld listens for grpc requests at the port 1 + `PORT`. So, in order to run vtctld commands using vtctldclient binary, this port must also be published. + +### Persisting container data + +If you wish to keep the state of the test container across reboots, such as when running the vttestserver container as a database container in local application development environments, you may optionally pass the `--persistent_mode` flag, along with a `--data_dir` directory which is bound to a docker volume. Due to a bug, the `--port` argument must also be present for correct operation. + +When running in this mode, underlying MySQL table schemas, their data, and the Vitess VSchema objects are persisted under the provided `--data_dir`. + +For example: + +```shell +docker run --name=vttestserver \ + -p 33574:33574 \ + -p 33575:33575 \ + -p 33577:33577 \ + --health-cmd="mysqladmin ping -h127.0.0.1 -P33577" \ + --health-interval=5s \ + --health-timeout=2s \ + --health-retries=5 \ + -v vttestserver_data:/vt/vtdataroot \ + vitess/vttestserver:mysql80 \ + /vt/bin/vttestserver \ + --alsologtostderr \ + --data_dir=/vt/vtdataroot/ \ + --persistent_mode \ + --port=33574 \ + --mysql_bind_host=0.0.0.0 \ + --vtcombo-bind-host=0.0.0.0 \ + --keyspaces=test,unsharded \ + --num_shards=2,1 +``` + +## Example + +An example command to run the docker image is as follows : + +```shell +docker run --name=vttestserver \ + -p 33574:33574 \ + -p 33575:33575 \ + -p 33577:33577 \ + -e PORT=33574 \ + -e KEYSPACES=test,unsharded \ + -e NUM_SHARDS=2,1 \ + -e MYSQL_MAX_CONNECTIONS=70000 \ + -e MYSQL_BIND_HOST=0.0.0.0 \ + -e VTCOMBO_BIND_HOST=0.0.0.0 \ + --health-cmd="mysqladmin ping -h127.0.0.1 -P33577" \ + --health-interval=5s \ + --health-timeout=2s \ + --health-retries=5 \ + vitess/vttestserver:mysql80 +``` + +Now, we can connect to the vtgate from a MySQL client as follows : + +```shell +mysql --host 127.0.0.1 --port 33577 --user "root" +``` + +We have 2 keyspaces which we can use, `test` which has 2 shards and `unsharded` which has a single shard. + +We can run vtctldclient commands as follows : +```shell +vtctldclient --server 127.0.0.1:33575 GetKeyspaces +``` + +And the vtcombo `/debug/status` page can be viewed at : +```shell +http://localhost:33574/debug/status +``` diff --git a/content/en/docs/21.0/overview/_index.md b/content/en/docs/21.0/overview/_index.md new file mode 100644 index 000000000..7b7450ff5 --- /dev/null +++ b/content/en/docs/21.0/overview/_index.md @@ -0,0 +1,8 @@ +--- +title: Overview +description: High-level information about Vitess +weight: 1 +aliases: ['/docs/overview/scalingwithvitess/','/user-guide/introduction.html'] +--- + +The Vitess overview documentation provides general information about Vitess that's less immediately practical than what you'll find in [Get Started](../get-started) section and the [User Guides](../user-guides). diff --git a/content/en/docs/21.0/overview/architecture.md b/content/en/docs/21.0/overview/architecture.md new file mode 100644 index 000000000..b94d7e5d4 --- /dev/null +++ b/content/en/docs/21.0/overview/architecture.md @@ -0,0 +1,17 @@ +--- +title: Architecture +weight: 2 +featured: true +--- + +The Vitess platform consists of a number of server processes, command-line utilities, and web-based utilities, backed by a consistent metadata store. + +Depending on the current state of your application, you could arrive at a full Vitess implementation through a number of different process flows. For example, if you're building a service from scratch, your first step with Vitess would be to define your database topology. However, if you need to scale your existing database, you'd likely start by deploying Vitess in Unmanaged mode. + +Vitess tools and servers are designed to help you whether you start with a complete fleet of databases or start small and scale over time. For smaller implementations, vttablet features like connection pooling and query rewriting help you get more from your existing hardware. Vitess' automation tools then provide additional benefits for larger implementations. + +The diagram below illustrates Vitess' components: + +Architecture Diagram + +For additional details on each of the components, see [Concepts](../../concepts). diff --git a/content/en/docs/21.0/overview/cloud-native.md b/content/en/docs/21.0/overview/cloud-native.md new file mode 100644 index 000000000..7baea63e1 --- /dev/null +++ b/content/en/docs/21.0/overview/cloud-native.md @@ -0,0 +1,19 @@ +--- +title: Cloud Native +weight: 4 +--- + +Vitess is well-suited for Cloud deployments because it enables databases to incrementally add capacity. The easiest way to run Vitess in the Cloud is via Kubernetes. + +## Vitess on Kubernetes + +Kubernetes is an open-source orchestration system for containerized applications, and Vitess can run as a Kubernetes-aware cloud native distributed database. + +Kubernetes handles scheduling onto nodes in a compute cluster, actively manages workloads on those nodes, and groups containers comprising an application for easy management and discovery. This provides an analogous open-source environment to the way Vitess ran in YouTube on Borg, the predecessor to Kubernetes. + +An open-source Kubernetes [operator](https://github.com/planetscale/vitess-operator) is available for Vitess, and is being used in production by several deployments. + +**Related Vitess Documentation** + +* [Kubernetes Quickstart](../../get-started/operator/) + diff --git a/content/en/docs/21.0/overview/history.md b/content/en/docs/21.0/overview/history.md new file mode 100644 index 000000000..b91d4b3e5 --- /dev/null +++ b/content/en/docs/21.0/overview/history.md @@ -0,0 +1,19 @@ +--- +title: History +description: Born at YouTube, released as Open Source +weight: 5 +--- + +Vitess was created in 2010 to solve the MySQL scalability challenges that the team at YouTube faced. This section briefly summarizes the sequence of events that led to Vitess' creation: + +1. YouTube's MySQL database reached a point when peak traffic would soon exceed the database's serving capacity. To temporarily alleviate the problem, YouTube created a master database for write traffic and a replica database for read traffic. +2. With demand for cat videos at an all-time high, read-only traffic was still high enough to overload the replica database. So YouTube added more replicas, again providing a temporary solution. +3. Eventually, write traffic became too high for the master database to handle, requiring YouTube to shard data to handle incoming traffic. As an aside, sharding would have also become necessary if the overall size of the database became too large for a single MySQL instance. +4. YouTube's application layer was modified so that before executing any database operation, the code could identify the right database shard to receive that particular query. + +Vitess let YouTube remove that logic from the application source code, introducing a proxy between the application and the database to route and manage database interactions. Since then, YouTube has scaled its user base by a factor of more than 50, greatly increasing its capacity to serve pages, process newly uploaded videos, and more. Even more importantly, Vitess is a platform that continues to scale. + +## Vitess becomes a CNCF project + +The [CNCF](https://www.cncf.io) serves as the vendor-neutral home for many of the fastest-growing open source projects. In [February 2018](https://www.cncf.io/blog/2018/02/05/cncf-host-vitess/) the Technical Oversight Committee (TOC) voted to accept Vitess as a CNCF incubation project. Vitess became the eighth CNCF project to graduate in [November 2019](https://www.cncf.io/announcement/2019/11/05/cloud-native-computing-foundation-announces-vitess-graduation/), joining Kubernetes, Prometheus, Envoy, CoreDNS, containerd, Fluentd, and Jaeger. + diff --git a/content/en/docs/21.0/overview/img/architecture.svg b/content/en/docs/21.0/overview/img/architecture.svg new file mode 100644 index 000000000..f5fecc21c --- /dev/null +++ b/content/en/docs/21.0/overview/img/architecture.svg @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/content/en/docs/21.0/overview/scalability-philosophy.md b/content/en/docs/21.0/overview/scalability-philosophy.md new file mode 100644 index 000000000..ee261ac79 --- /dev/null +++ b/content/en/docs/21.0/overview/scalability-philosophy.md @@ -0,0 +1,75 @@ +--- +title: Scalability Philosophy +weight: 3 +aliases: ['/docs/launching/scalability-philosophy/'] +--- + +Scalability problems can be solved using many approaches. This document describes Vitess' approach to address these problems. + +## Small instances + +When deciding to shard or break databases up into smaller parts, it's tempting to break them just enough that they fit in one machine. In the industry, it’s common to run only one MySQL instance per host. + +Vitess recommends that instances be broken up into manageable chunks (250GB per MySQL server), and not to shy away from running multiple instances per host. The net resource usage would be about the same. But the manageability greatly improves when MySQL instances are small. There is the complication of keeping track of ports, and separating the paths for the MySQL instances. However, everything else becomes simpler once this hurdle is crossed. + +There are fewer lock contentions to worry about, replication is a lot happier, production impact of outages is smaller, backups and restores run faster, and a lot more secondary advantages can be realized. For example, you can shuffle instances around to get better machine or rack diversity leading to even smaller production impact on outages, and improved resource usage. + +## Durability through replication + +Traditional data storage software treated data as durable as soon as it was flushed to disk. However, this approach is impractical in today’s world of commodity hardware. Such an approach also does not address disaster scenarios. + +The new approach to durability is achieved by copying the data to multiple machines, and even geographical locations. This form of durability addresses the modern concerns of device failures and disasters. + +Many of the workflows in Vitess have been built with this approach in mind. For example, turning on semi-sync replication is highly recommended. This allows Vitess to failover to a new replica when a primary goes down, with no data loss. Vitess also recommends that you avoid recovering a crashed database. Instead, create a fresh one from a recent backup and let it catch up. + +Relying on replication also allows you to loosen some of the disk-based durability settings. For example, you can turn off `sync_binlog`, which greatly reduces the number of IOPS to the disk thereby increasing effective throughput. + +## Consistency model + +Before sharding or moving tables to different keyspaces, the application needs to be verified (or changed) such that it can tolerate the following changes: + +* Cross-shard reads may not be consistent with each other. Conversely, the sharding decision should also attempt to minimize such occurrences because cross-shard reads are more expensive. +* In "best-effort mode", cross-shard transactions can fail in the middle and result in partial commits. You could instead use "2PC mode" transactions that give you distributed atomic guarantees. However, choosing this option increases the write cost by approximately 50%. + +Single shard transactions continue to remain ACID, just like MySQL supports it. + +If there are read-only code paths that can tolerate slightly stale data, the queries should be sent to REPLICA tablets for OLTP, and RDONLY tablets for OLAP workloads. This allows you to scale your read traffic more easily, and gives you the ability to distribute them geographically. + +This trade-off allows for better throughput at the expense of stale or possibly inconsistent reads, since the reads may be lagging behind the primary, as data changes (and possibly with varying lag on different shards). To mitigate this, VTGate servers are capable of monitoring replica lag and can be configured to avoid serving data from instances that are lagging beyond X seconds. + +For a true snapshot, queries must be sent to the primary within a transaction. For read-after-write consistency, reading from the primary without a transaction is sufficient. + +To summarize, these are the various levels of consistency supported: + +* `REPLICA/RDONLY` read: Servers can be scaled geographically. Local reads are fast, but can be stale depending on replica lag. +* `PRIMARY` read: There is only one worldwide primary per shard. Reads coming from remote locations will be subject to network latency and reliability, but the data will be up-to-date (read-after-write consistency). The isolation level is `READ_COMMITTED`. +* `PRIMARY` transactions: These exhibit the same properties as PRIMARY reads. However, you get REPEATABLE_READ consistency and ACID writes for a single shard. Support is planned for cross-shard Atomic transactions. + +As for atomicity, the following levels are supported: + +* `SINGLE`: disallow multi-db transactions. +* `MULTI`: multi-db transactions with best effort commit. +* `TWOPC`: multi-db transactions with 2PC commit. + +### No active-active replication + +Vitess doesn’t support active-active replication setup (previously called multi-master). It has alternate ways of addressing most of the use cases that are typically solved by such a configuration. + +* Scalability: There are situations where active-active gives you a little bit of additional runway. However, since all writes have to eventually be applied to all writable servers, it’s not a sustainable strategy. Vitess addresses this problem through sharding, which can scale indefinitely. +* High availability: Vitess has native capability for detecting primary failures and performing a failover to a new primary within seconds of failure detection. This is usually sufficient for most applications. +* Low-latency geographically distributed writes: This is one case that is not addressed by Vitess. The current recommendation is to absorb the latency cost of long-distance round-trips for writes. If the data distribution allows, you still have the option of sharding based on geographic affinity. You can then setup primaries for different shards to be in different geographic locations. This way, most of the primary writes can still be local. + +## Multi-cell + +Vitess is meant to run in multiple data centers / regions / cells. In this part, we'll use "cell" to mean a set of servers that are very close together, and share the same regional availability. + +A cell typically contains a set of tablets, a vtgate pool, and app servers that use the Vitess cluster. With Vitess, all components can be configured and brought up as needed: + +* The primary for a shard can be in any cell. If cross-cell primary access is required, vtgate can be configured to do so easily (by passing the cell that contains the primary as a cell to watch). +* It is not uncommon to have the cells that can contain the primary be more provisioned than read-only serving cells. These *primary-capable* cells may need one more replica to handle a possible failover, while still maintaining the same replica serving capacity. +* Failing over from a primary in one cell to a primary in a different cell is no different than a local failover. It has an implication on traffic and latency, but if the application traffic also gets re-directed to the new cell, the end result is stable. +* It is also possible to have some shards with a primary in one cell, and some other shards with their primary in another cell. vtgate will just route the traffic to the right place, incurring extra latency cost only on the remote access. For instance, creating U.S. user records in a database with primaries in the U.S. and European user records in a database with primaries in Europe is easy to do. Replicas can exist in every cell anyway, and serve the replica traffic quickly. +* Replica serving cells are a good compromise to reduce user-visible latency: they only contain replica servers, and primary access is always done remotely. If the application profile is mostly reads, this works really well. +* Not all cells need `rdonly` (or batch) instances. Only the cells that run batch jobs, or OLAP jobs, really need them. + +Note that Vitess uses local-cell data first, and is very resilient to any cell going down (most of our processes handle that case gracefully). diff --git a/content/en/docs/21.0/overview/supported-databases.md b/content/en/docs/21.0/overview/supported-databases.md new file mode 100644 index 000000000..f7c3a6117 --- /dev/null +++ b/content/en/docs/21.0/overview/supported-databases.md @@ -0,0 +1,29 @@ +--- +title: Supported Databases +weight: 2 +featured: true +--- + +## Supported Databases In Vitess + +Vitess deploys, scales and manages clusters of open-source SQL database instances. Currently, Vitess supports the [MySQL](https://www.mysql.com/) and [Percona Server for MySQL](https://www.percona.com/software/mysql-database/percona-server) databases. + +The [VTGate](../../concepts/vtgate/) proxy server advertises its version as MySQL 8.0. + +### MySQL 8.0 + +Vitess supports the core features of MySQL 8.0.\*, +with [some limitations](../../reference/compatibility/mysql-compatibility/). Vitess also +supports [Percona Server for MySQL](https://www.percona.com/software/mysql-database/percona-server) 8.0.\*. + +## Supported Databases For Imports + +Vitess supports importing from a wide range of databases that include: + +- [MySQL](https://www.mysql.com/) version 5.7 to 8.0 +- [Percona Server for MySQL](https://www.percona.com/software/mysql-database/percona-server) version 5.7 to 8.0 +- [MariaDB](https://mariadb.com) versions 10.10+ + +## See also + ++ [MySQL Compatibility](../../reference/compatibility/mysql-compatibility/) diff --git a/content/en/docs/21.0/overview/whatisvitess.md b/content/en/docs/21.0/overview/whatisvitess.md new file mode 100644 index 000000000..4dc39d80f --- /dev/null +++ b/content/en/docs/21.0/overview/whatisvitess.md @@ -0,0 +1,69 @@ +--- +title: What Is Vitess +weight: 1 +featured: true +--- + +Vitess is a database solution for deploying, scaling and managing large clusters of open-source database instances. It currently supports MySQL and Percona Server for MySQL. It's architected to run as effectively in a public or private cloud architecture as it does on dedicated hardware. It combines and extends many important SQL features with the scalability of a NoSQL database. Vitess can help you with the following problems: + +1. Scaling a SQL database by allowing you to shard it, while keeping application changes to a minimum. +2. Migrating from bare-metal or VMs to a private or public cloud. +3. Deploying and managing a large number of SQL database instances. + +Vitess includes compliant JDBC and Go database drivers using a native query protocol. Additionally, it implements the MySQL server protocol which is compatible with virtually any other language. + +Vitess served all YouTube database traffic for over five years. Many enterprises have now adopted Vitess for their production needs. + +## Features + +* Performance + - Connection pooling - Multiplex front-end application queries onto a pool of MySQL connections to optimize performance. + - Query de-duping – Reuse results of an in-flight query for any identical requests received while the in-flight query was still executing. + - Transaction manager – Limit number of concurrent transactions and manage timeouts to optimize overall throughput. + +* Protection + - Query rewriting and sanitization – Add limits and avoid non-deterministic updates. + - Query blocking – Customize rules to prevent potentially problematic queries from hitting your database. + - Query killing – Terminate queries that take too long to return data. + - Table ACLs – Specify access control lists (ACLs) for tables based on the connected user. + +* Monitoring + - Performance analysis tools let you monitor, diagnose, and analyze your database performance. + +* Topology Management Tools + - Cluster management tools (handles planned and unplanned failovers) + - Web-based management GUI + - Designed to work in multiple data centers / regions + +* Sharding + - Virtually seamless dynamic re-sharding + - Vertical and Horizontal sharding support + - Multiple sharding schemes, with the ability to plug-in custom ones + +## Comparisons to other storage options + +The following sections compare Vitess to two common alternatives, a vanilla MySQL implementation and a NoSQL implementation. + +### Vitess vs. Vanilla MySQL + +Vitess improves a vanilla MySQL implementation in several ways: + +| Vanilla MySQL | Vitess | +|:--|:--| +| Every MySQL connection has a memory overhead that ranges between 256KB and almost 3MB, depending on which MySQL release you're using. As your user base grows, you need to add RAM to support additional connections, but the RAM does not contribute to faster queries. In addition, there is a significant CPU cost associated with obtaining the connections. | Vitess creates very lightweight connections. Vitess' connection pooling feature uses Go's concurrency support to map these lightweight connections to a small pool of MySQL connections. As such, Vitess can easily handle thousands of connections. | +| Poorly written queries, such as those that don't set a LIMIT, can negatively impact database performance for all users. | Vitess employs a SQL parser that uses a configurable set of rules to rewrite queries that might hurt database performance. | +| Sharding is a process of partitioning your data to improve scalability and performance. MySQL lacks native sharding support, requiring you to write sharding code and embed sharding logic in your application. | Vitess supports a variety of sharding schemes. It can also migrate tables into different databases and scale the number of shards up or down. These functions are performed non-intrusively, completing most data transitions with just a few seconds of read-only downtime. | +| A MySQL cluster using replication for availability has a primary database and a few replicas. If the primary fails, a replica should become the new primary. This requires you to manage the database lifecycle and communicate the current system state to your application. | Vitess helps to manage the lifecycle of your database servers. It supports and automatically handles various scenarios, including primary failure detection and recovery. It also has support for data backups and restores. | +| A MySQL cluster can have custom database configurations for different workloads, like a primary database for writes, fast read-only replicas for web clients, slower read-only replicas for batch jobs, and so forth. If the database has horizontal sharding, the setup is repeated for each shard, and the app needs baked-in logic to know how to find the right database. | Vitess uses a topology backed by a consistent data store, like etcd or ZooKeeper. This means the cluster view is always up-to-date and consistent for different clients. Vitess also provides a proxy that routes queries efficiently to the most appropriate MySQL instance. | + + +### Vitess vs. NoSQL + +If you're considering a NoSQL solution primarily because of concerns about the scalability of MySQL, Vitess might be a more appropriate choice for your application. While NoSQL provides great support for unstructured data, Vitess still offers several benefits not available in NoSQL datastores: + +| NoSQL | Vitess | +|:--|:--| +| NoSQL databases do not define relationships between database tables, and only support a subset of the SQL language. | Vitess is not a simple key-value store. It supports complex query semantics such as where clauses, JOINS, aggregation functions, and more. | +| NoSQL datastores do not usually support transactions. | Vitess supports transactions. | +| NoSQL solutions have custom APIs, leading to custom architectures, applications, and tools. | Vitess adds very little variance to MySQL, a database that most people are already accustomed to working with. | +| NoSQL solutions provide limited support for database indexes compared to MySQL. | Vitess allows you to use all of MySQL's indexing functionality to optimize query performance. | diff --git a/content/en/docs/21.0/reference/_index.md b/content/en/docs/21.0/reference/_index.md new file mode 100644 index 000000000..3d086453c --- /dev/null +++ b/content/en/docs/21.0/reference/_index.md @@ -0,0 +1,7 @@ +--- +title: Reference +description: Detailed information about specific Vitess functionality +weight: 5 +aliases: ['/docs/advanced/'] +--- + diff --git a/content/en/docs/21.0/reference/backup-and-restore/_index.md b/content/en/docs/21.0/reference/backup-and-restore/_index.md new file mode 100644 index 000000000..c072654b6 --- /dev/null +++ b/content/en/docs/21.0/reference/backup-and-restore/_index.md @@ -0,0 +1,7 @@ +--- +title: Backup and Restore +description: "Backup and Restore Reference" +weight: 10 +aliases: ['/docs/reference/backup-and-restore/'] +skip_sections: true +--- diff --git a/content/en/docs/21.0/reference/backup-and-restore/metrics.md b/content/en/docs/21.0/reference/backup-and-restore/metrics.md new file mode 100644 index 000000000..57d89f091 --- /dev/null +++ b/content/en/docs/21.0/reference/backup-and-restore/metrics.md @@ -0,0 +1,128 @@ +--- +title: Metrics +description: Metrics related to backup and restore functionality +weight: 10 +--- + +Backup and restore operations export several metrics using the expvars interface. These are available at the `/debug/vars` endpoint of Vtbackup's and VTTablet's http status pages. [More details can be found here](../../features/monitoring/#3-push-based-metrics-system). + +## Backup metrics + +Metrics related to backup operations are available in both Vtbackup and VTTablet. + +#### BackupBytes, BackupCount, BackupDurationNanoseconds + +Depending on the Backup Engine and Backup Storage in-use, a backup may be a complex pipeline of operations, including but not limited to: + + * Reading files from disk. + * Compressing files. + * Uploading compress files to cloud object storage. + +These operations are counted and timed, and the number of bytes consumed or produced by each stage of the pipeline are counted as well. + +## Restore metrics + +Metrics related to restore operations are available in both Vtbackup and VTTablet. + +#### RestoreBytes, RestoreCount, RestoreDurationNanoseconds + +Depending on the Backup Engine and Backup Storage in-use, a restore may be a complex pipeline of operations, including but not limited to: + + * Downloading compressed files from cloud object storage. + * Decompressing files. + * Writing decompressed files to disk. + +These operations are counted and timed, and the number of bytes consumed or produced by each stage of the pipeline are counted as well. + +#### RestoredBackupTime, RestorePosition + +_RestoredBackupTime_ captures the timestamp associated with the backup from which the current process was restored. _RestorePosition_ captures the GTID position associated with that backup. + +## Vtbackup metrics + +Vtbackup exports some metrics which are not available elsewhere. + +#### DurationByPhaseSeconds + +Vtbackup fetches the last backup, restores it to an empty mysql installation, replicates recent changes into that installation, and then takes a backup of that installation. + +_DurationByPhaseSeconds_ exports timings for these individual phases. + +
+ +## Example +**A snippet of vtbackup metrics after running it against the local example after creating the initial cluster** + +(Processed with `jq` for readability.) + +``` +{ + "BackupBytes": { + "BackupEngine.Builtin.Source:Read": 4777, + "BackupEngine.Builtin.Compressor:Write": 4616, + "BackupEngine.Builtin.Destination:Write": 162, + "BackupStorage.File.File:Write": 163 + }, + "BackupCount": { + "-.-.Backup": 1, + "BackupEngine.Builtin.Source:Open": 161, + "BackupEngine.Builtin.Source:Close": 322, + "BackupEngine.Builtin.Compressor:Close": 161, + "BackupEngine.Builtin.Destination:Open": 161, + "BackupEngine.Builtin.Destination:Close": 322 + }, + "BackupDurationNanoseconds": { + "-.-.Backup": 4188508542, + "BackupEngine.Builtin.Source:Open": 10649832, + "BackupEngine.Builtin.Source:Read": 55901067, + "BackupEngine.Builtin.Source:Close": 960826, + "BackupEngine.Builtin.Compressor:Write": 278358826, + "BackupEngine.Builtin.Compressor:Close": 79358372, + "BackupEngine.Builtin.Destination:Open": 16456627, + "BackupEngine.Builtin.Destination:Write": 11021043, + "BackupEngine.Builtin.Destination:Close": 17144630, + "BackupStorage.File.File:Write": 10743169 + }, + "DurationByPhaseSeconds": { + "InitMySQLd": 2, + "RestoreLastBackup": 6, + "CatchUpReplication": 1, + "TakeNewBackup": 4 + }, + "RestoreBytes": { + "BackupEngine.Builtin.Source:Read": 1095, + "BackupEngine.Builtin.Decompressor:Read": 950, + "BackupEngine.Builtin.Destination:Write": 209, + "BackupStorage.File.File:Read": 1113 + }, + "RestoreCount": { + "-.-.Restore": 1, + "BackupEngine.Builtin.Source:Open": 161, + "BackupEngine.Builtin.Source:Close": 322, + "BackupEngine.Builtin.Decompressor:Close": 161, + "BackupEngine.Builtin.Destination:Open": 161, + "BackupEngine.Builtin.Destination:Close": 322 + }, + "RestoreDurationNanoseconds": { + "-.-.Restore": 6204765541, + "BackupEngine.Builtin.Source:Open": 10542539, + "BackupEngine.Builtin.Source:Read": 104658370, + "BackupEngine.Builtin.Source:Close": 773038, + "BackupEngine.Builtin.Decompressor:Read": 165692120, + "BackupEngine.Builtin.Decompressor:Close": 51040, + "BackupEngine.Builtin.Destination:Open": 22715122, + "BackupEngine.Builtin.Destination:Write": 41679581, + "BackupEngine.Builtin.Destination:Close": 26954624, + "BackupStorage.File.File:Read": 102416075 + }, + "RestorePosition": "MySQL56/f00e54ca-0fbf-11ee-ad84-eddb850690bf:1-61", + "RestoredBackupTime": "2023-06-21T00:39:00Z", +} +``` + +Some notes to help understand these metrics: + + * `BackupBytes["BackupStorage.File.File:Write"]` measures how many bytes were read from disk by the `file` Backup Storage implementation during the backup phase. + * `DurationByPhaseSeconds["CatchUpReplication"]` measures how long it took to catch-up replication after the restore phase. + * `DurationByPhaseSeconds["RestoreLastBackup"]` measures to the duration of the restore phase. + * `RestoreDurationNanoseconds["-.-.Restore"]` also measures to the duration of the restore phase. diff --git a/content/en/docs/21.0/reference/compatibility/_index.md b/content/en/docs/21.0/reference/compatibility/_index.md new file mode 100644 index 000000000..9e6afdc21 --- /dev/null +++ b/content/en/docs/21.0/reference/compatibility/_index.md @@ -0,0 +1,6 @@ +--- +title: Compatibility +description: Reference documents for MySQL compatibility with Vitess +weight: 5 +--- + diff --git a/content/en/docs/21.0/reference/compatibility/mysql-compatibility.md b/content/en/docs/21.0/reference/compatibility/mysql-compatibility.md new file mode 100644 index 000000000..42fd42bb9 --- /dev/null +++ b/content/en/docs/21.0/reference/compatibility/mysql-compatibility.md @@ -0,0 +1,231 @@ +--- +title: MySQL Compatibility +weight: 1 +aliases: ['/docs/reference/mysql-server-protocol/', '/docs/reference/mysql-compatibility/'] +--- + +Vitess supports MySQL and gRPC server protocol. This allows Vitess to be a drop-in replacement for MySQL Server without any changes to application code. +As Vitess is a distributed system, it is important to understand the differences between Vitess and MySQL on compatibility. + +## Transaction Model + +Vitess provides MySQL default semantics i.e. `REPEATABLE READ` for single-shard transactions. For multi-shard transactions the semantics change to `READ COMMITTED`. +The clients can change the shard level transaction mode with `SET` statement on a connection. + +## SQL Support + +The following describes some differences in query handling between Vitess and MySQL. +The Vitess team maintains a list of [unsupported queries](https://github.com/vitessio/vitess/blob/main/go/vt/vtgate/planbuilder/testdata/unsupported_cases.json) which is kept up-to-date as we add support for new constructs. + +This is an area of active development in Vitess. Any unsupported query can be raised as an issue in the [Vitess GitHub Project](https://github.com/vitessio/vitess/issues/new/choose). + +### DDL + +Vitess supports all DDL queries. It offers both [managed, online schema changes](../../../user-guides/schema-changes/managed-online-schema-changes) and non-managed DDL. +It is recommended to use Vitess's managed schema changes, which offer non-blocking, trackable, failure agnostic, revertible, concurrent changes, and more. Read more about [making schema changes](../../../user-guides/schema-changes). + +### Join, Subqueries, Union, Aggregation, Grouping, Having, Ordering, Limit Queries + +Vitess supports most of these types of queries. It is recommended to leave [schema tracking](../../features/schema-tracking) enabled in order to fully utilize the available support. + +### Prepared Statements + +Vitess supports prepared statements via both the MySQL binary protocol and the [`PREPARE`, `EXECUTE` and `DEALLOCATE` SQL statements](https://dev.mysql.com/doc/refman/8.0/en/sql-prepared-statements.html). + +### Start Transaction +There are multiple ways to start a transaction like `begin`, `start transaction` and `start transaction [transaction_characteristic [, transaction_characteristic] ...]` with several modifiers that control transaction characteristics. +```sql +transaction_characteristic: { + WITH CONSISTENT SNAPSHOT + | READ WRITE + | READ ONLY +} +``` +The scope of these modifications is limited to the next transaction only. +These modifications have a special purpose and more can be read about in the [MySQL reference manual](https://dev.mysql.com/doc/refman/8.0/en/commit.html). + +### Set Transaction +Set Transaction statement is used to change the isolation level or access mode for transactions. +Vitess as of now **only** supports modification of isolation level at the session scope. +The change in isolation level only changes the shard level transaction isolation level and not the global Vitess level. + +More details about the isolation level can be read in the [MySQL reference manual](https://dev.mysql.com/doc/refman/8.0/en/set-transaction.html). + +### Stored Procedures + +Calling stored procedures using CALL is only supported for: + +* unsharded keyspaces +* if you directly target a specific shard + +There are further limitations to calling stored procedures using CALL: + +* The stored procedure CALL cannot return any results +* Only IN parameters are supported +* If you use transactions, the transaction state cannot be changed by the stored procedure. + + For example, if there is a transaction open at the beginning of the CALL, a transaction must still be open after the procedure finishes. Likewise, if no transaction is open at the beginning of the CALL, the stored procedure must not leave an open transaction after execution finishes. + +CREATE PROCEDURE is not supported. You have to create the procedure directly on the underlying MySQL servers and not through Vitess. + +### Views +Views are supported for sharded keyspaces as an experimental feature, it has to be enabled using: `--enable-views` on VTGate and `--queryserver-enable-views` on VTTablet. Views are only readable. + +Here is an example of how to create a view: + +```sql +CREATE VIEW my_view AS SELECT id, col FROM user +``` + +When using the view in a `SELECT` statement it will be rewritten to a derived table: + +```sql +-- the query: +SELECT id FROM my_view +-- will be rewritten to: +SELECT id FROM (SELECT id, col FROM user) as my_view; +``` + +> **Limitations**: +> +> - The table referenced by the view must belong to the same keyspace as the view's. +> +> - Views are only readable. Updatable views are not supported. + +The [RFC for views support](https://github.com/vitessio/vitess/issues/11559) is available on GitHub. + +### Temporary Tables + +Vitess has limited support for temporary tables. It works only for unsharded keyspaces. + +If the user creates a temporary table then the session will start using reserved connections for any query sent on that session. + +The query plans generated by this session will not be cached. It will still continue to use the query plan cached from other non-temporary table sessions. + +### USE Statements + +Vitess allows you to select a keyspace using the MySQL `USE` statement, and corresponding binary API used by client libraries. SQL statements can refer to a table in another keyspace by using the standard _dot_ notation: + +```sql +SELECT * FROM my_other_keyspace.table; +``` + +Vitess extends this functionality further by allowing you to select a specific shard and tablet-type within a `USE` statement (backticks are important): + +```sql +-- `KeyspaceName:shardKeyRange@tabletType` +USE `mykeyspace:-80@rdonly` +``` + +A similar effect can be achieved by using a database name like `mykeyspace:-80@rdonly` in your MySQL application client connection string. + +### Common Table Expressions +Vitess supports Non-recursive CTEs with the limitation that CTE aliases cannot be the same as a base table used in the CTE. +Currently, Vitess does not have support for recursive CTEs. + +### Window Functions +Vitess does not yet support Window Functions. + +### Killing running queries + +In v18, Vitess introduced the ability to terminate running queries using the [`KILL` command](https://dev.mysql.com/doc/refman/8.0/en/kill.html) through VTGate. +To execute a "kill connection" or "kill query" statement, the client needs to establish a new connection. +This behavior is similar to when a user on the MySQL shell client terminates a command by pressing ctrl+c. + +The [RFC](https://github.com/vitessio/vitess/issues/13438) highlights the current limitation of the `Kill statement` support. + +Alternatively, +- [query_timeout_ms](../../../user-guides/configuration-advanced/comment-directives/#query-timeouts-query_timeout_ms) query comment directive can be set to define a query timeout. This ensures that the query either returns a result or aborts within the specified time. +- [mysql_server_query_timeout](../../programs/vtgate/) command-line flag can be set on VTGate to establish a default timeout. + +Vitess does have strict query timeouts for OLTP workloads (see below). + +### Workload + +By default, Vitess applies specific limitations on the execution time and the number of rows a query can return. +These limitations can be modified by adjusting the parameters like `queryserver-config-query-timeout`, `queryserver-config-transaction-timeout` and more in [vttablet](../../programs/vttablet/). +This default workload mode is referred as `OLTP`. This can be disabled by switching to `OLAP` mode by executing the following SQL statement: + +```sql +set workload = olap; +``` + +### SELECT ... INTO Statement + +The `SELECT ... INTO` form of `SELECT` in MySQL enables a query result to be stored in variables or written to a file. Vitess supports `SELECT ... INTO DUMFILE` and `SELECT ... INTO OUTFILE` constructs for unsharded keyspaces but does not support storing results in variable. Moreover, the position of `INTO` must be towards the end of the query and not in the middle. An example of a correct query is as follows: +```sql +SELECT * FROM INTO OUTFILE 'x.txt' FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '\t' LINES TERMINATED BY '\n' +``` +For sharded keyspaces this statement can still be used but only after specifying the exact shard with a [USE Statement](#use-statements). + +### LOAD DATA Statement + +`LOAD DATA` is the complement of `SELECT ... INTO OUTFILE` that reads rows from a text file into a table at a very high speed. Just like `SELECT ... INTO` statement, `LOAD DATA` is also supported in unsharded keyspaces. An example of a correct query is as follows: +```sql +LOAD DATA INFILE 'x.txt' INTO REPLACE TABLE FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '\t' LINES TERMINATED BY '\n' +``` +For sharded keyspaces this statement can still be used but only after specifying the exact shard with a [USE Statement](#use-statements). + +### Create/Drop Database + +Vitess does not support CREATE and DROP DATABASE queries out of the box. + +However, a plugin mechanism is available that can be used to provision databases. +The plugin has to take care of creating and dropping the database, and update the topology & VSchema so that Vitess can start receiving queries for the new keyspace. + +The plugin should implement the `DBDDLPlugin` interface, and be saved into a new file in the `go/vt/vtgate/engine/` directory. + +```go +type DBDDLPlugin interface { + CreateDatabase(ctx context.Context, name string) error + DropDatabase(ctx context.Context, name string) error +} +``` + +It must then register itself by calling `DBDDLRegister`. +You can take a look at the `dbddl_plugin.go` in the engine package for an example of how it's done. +Finally, you need to add a command line flag to vtgate to have it use the new plugin: `--dbddl_plugin=myPluginName` + +### User Defined Functions +VTGates can now track user-defined functions (UDFs) and use them during planning. +To enable this feature, set the `--enable-udfs` flag on VTGate. +More details on how to add UDFs can be found in [MySQL Docs](https://dev.mysql.com/doc/extending-mysql/8.0/en/adding-loadable-function.html). + +## Cross-shard Transactions + +Vitess supports multiple [transaction modes](../../../user-guides/configuration-advanced/shard-isolation-atomicity): `SINGLE`, `MULTI` and `TWOPC` . + +The default mode is MULTI i.e. multi-shard transactions as best-effort. A transaction that affects only one shard will be fully ACID complaint. +When a transactions affects multiple shards, any failure on one or more shards will rollback the effect of that query. +Committing the multi-shard transaction issues commits to the participating shards in a particular order. This allows the application or user to undo the effects of partial commits in case of failures. + +## Auto Increment + +Tables in sharded keyspaces should not be defined using the `auto_increment` column attribute, as the values generated will not be unique across shards. +It is recommended to use [Vitess Sequences](../../features/vitess-sequences) instead. The semantics are very similar to `auto_increment` and the differences are documented. + +## Character Set and Collation + +Vitess supports ~99% of MySQL collations. More details can be found [here](../../../user-guides/configuration-basic/collations). + +## Data Types + +Vitess supports all of the data types available in MySQL. Using the `FLOAT` data type as part of a `PRIMARY KEY` is strongly discouraged, since features such as filtered replication and VReplication will not correctly be able to detect which rows should be included as part of a modification. + +## SQL Mode + +Vitess behaves similar to the `STRICT_TRANS_TABLES` sql mode, and does not recommend changing the SQL Mode setting. + +## Network Protocol + +### Authentication Plugins + +Vitess supports both 5.7 and 8.0 authentication. E.g. `mysql_native_password`, `caching_sha2_password`, etc. + +### Transport Security + +To configure VTGate to support `TLS` set `--mysql_server_ssl_cert` and `--mysql_server_ssl_key`. Client certificates can also be mandated by setting `--mysql_server_ssl_ca`. If there is no CA specified then TLS is optional. + +### X Dev API + +Vitess does not support [X Dev API](https://dev.mysql.com/doc/x-devapi-userguide/en/). diff --git a/content/en/docs/21.0/reference/errors/_index.md b/content/en/docs/21.0/reference/errors/_index.md new file mode 100644 index 000000000..7aa609b75 --- /dev/null +++ b/content/en/docs/21.0/reference/errors/_index.md @@ -0,0 +1,6 @@ +--- +title: Errors +description: Detailed information about errors that the user might run into +weight: 6 +--- + diff --git a/content/en/docs/21.0/reference/errors/query-serving.md b/content/en/docs/21.0/reference/errors/query-serving.md new file mode 100644 index 000000000..5fbed5fa8 --- /dev/null +++ b/content/en/docs/21.0/reference/errors/query-serving.md @@ -0,0 +1,124 @@ +--- +title: Query Serving +weight: 1 +description: Errors a users might encounter while querying Vitess +--- + +{{< info >}} +These error messages are internal to Vitess. If you are getting other errors from MySQL you can check them on this MySQL error [page](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html). +{{< /info >}} + +## New Errors + + +| ID | Description | Error | MySQL Error Code | SQL State | +| --- | --- | --- | --- | --- | +| VT03001 | This aggregation function only takes a single argument. | aggregate functions take a single argument '%s' | 1149 | 42000 | +| VT03002 | This schema change is not allowed. You cannot change the keyspace of a table. | changing schema from '%s' to '%s' is not allowed | 1450 | HY000 | +| VT03003 | The specified table in this DELETE statement is unknown. | unknown table '%s' in MULTI DELETE | 1109 | 42S02 | +| VT03004 | You cannot delete something that is not a real MySQL table. | the target table %s of the DELETE is not updatable | 1288 | HY000 | +| VT03005 | The planner does not allow grouping on certain field. For instance, aggregation function. | cannot group on '%s' | 1056 | 42000 | +| VT03006 | The number of columns you want to insert do not match the number of columns of your SELECT query. | column count does not match value count with the row | 1136 | 21S01 | +| VT03007 | You need to add a keyspace qualifier. | keyspace not specified | 0 | | +| VT03008 | The given token is not usable in this situation. Please refer to the MySQL documentation to learn more about your token's syntax. | incorrect usage/placement of '%s' | 1234 | 42000 | +| VT03009 | You cannot assign this type to the given variable. | unexpected value type for '%s': %v | 1231 | 42000 | +| VT03010 | You cannot set the given variable as it is a read-only variable. | variable '%s' is a read only variable | 1238 | HY000 | +| VT03011 | The given value type is not accepted. | invalid value type: %v | 0 | | +| VT03012 | The syntax is invalid. Please refer to the MySQL documentation for the proper syntax. | invalid syntax: %s | 0 | | +| VT03013 | This table or alias name is already use. Please use another one that is unique. | not unique table/alias: '%s' | 1066 | 42000 | +| VT03014 | The given column is unknown. | unknown column '%s' in '%s' | 1054 | 42S22 | +| VT03015 | Cannot assign multiple values to a column in an update statement. | column has duplicate set values: '%v' | 0 | | +| VT03016 | The given column is unknown in the vindex table. | unknown vindex column: '%s' | 0 | | +| VT03017 | This vstream where clause can only be a greater than filter. | where clause can only be of the type 'pos > ' | 1149 | 42000 | +| VT03018 | You cannot use the NEXT syntax on a table that is not a sequence table. | NEXT used on a non-sequence table | 0 | | +| VT03019 | The given column was not found or is not available. | column %s not found | 0 | | +| VT03020 | The given column was not found in the subquery. | column %s not found in subquery | 0 | | +| VT03021 | The given column is ambiguous. You can use a table qualifier to make it unambiguous. | ambiguous column reference: %v | 0 | | +| VT03022 | The given column cannot be found. | column %v not found in %v | 0 | | +| VT03023 | When targeting a range of shards, Vitess does not know which shard to send the INSERT to. | INSERT not supported when targeting a key range: %s | 0 | | +| VT03024 | The query cannot be prepared using the user defined variable as it does not exists for this session. | '%s' user defined variable does not exists | 0 | | +| VT03025 | The execute statement have wrong number of arguments | Incorrect arguments to %s | 1210 | HY000 | +| VT03024 | The query cannot be executed as missing the bind variable. | '%s' bind variable does not exists | 0 | | +| VT03027 | The column cannot have null value. | Column '%s' cannot be null | 1048 | 23000 | +| VT03028 | The column cannot have null value. | Column '%s' cannot be null on row %d, col %d | 1048 | 23000 | +| VT03029 | The number of columns you want to insert do not match the number of columns of your SELECT query. | column count does not match value count with the row for vindex '%s' | 1136 | 21S01 | +| VT03030 | The number of columns you want to insert do not match the number of columns of your SELECT query. | lookup column count does not match value count with the row (columns, count): (%v, %d) | 1136 | 21S01 | +| VT03031 | EXPLAIN has to be sent down as a single query to the underlying MySQL, and this is not possible if it uses tables from multiple keyspaces | EXPLAIN is only supported for single keyspace | 0 | | +| VT03032 | You cannot update a table that is not a real MySQL table. | the target table %s of the UPDATE is not updatable | 1288 | HY000 | +| VT03033 | The table column list and derived column list have different column counts. | In definition of view, derived table or common table expression, SELECT list and column names list have different column counts | 1353 | HY000 | +| VT05001 | The given database does not exist; Vitess cannot drop it. | cannot drop database '%s'; database does not exists | 1008 | HY000 | +| VT05002 | The given database does not exist; Vitess cannot alter it. | cannot alter database '%s'; unknown database | 1049 | 42000 | +| VT05003 | The given database does not exist in the VSchema. | unknown database '%s' in vschema | 1049 | 42000 | +| VT05004 | The given table is unknown. | table '%s' does not exist | 1109 | 42S02 | +| VT05005 | The given table does not exist in this keyspace. | table '%s' does not exist in keyspace '%s' | 1146 | 42S02 | +| VT05006 | The given system variable is unknown. | unknown system variable '%s' | 1193 | HY000 | +| VT05007 | Table information is not available. | no table info | 0 | | +| VT06001 | The given database name already exists. | cannot create database '%s'; database exists | 1007 | HY000 | +| VT07001 | Kill statement is not allowed. More in docs about how to enable it and its limitations. | %s | 1095 | HY000 | +| VT09001 | the table does not have a primary vindex, the operation is impossible. | table '%s' does not have a primary vindex | 1173 | 42000 | +| VT09002 | This type of DML statement is not allowed on a replica target. | %s statement with a replica target | 1874 | HY000 | +| VT09003 | A vindex column is mandatory for the insert, please provide one. | INSERT query does not have primary vindex column '%v' in the column list | 0 | | +| VT09004 | You need to provide the list of columns you want to insert, or provide a VSchema with authoritative columns. If schema tracking is disabled you can enable it to automatically have authoritative columns. | INSERT should contain column list or the table should have authoritative columns in vschema | 0 | | +| VT09005 | A database must be selected. | no database selected: use keyspace<:shard><@type> or keyspace<[range]><@type> (<> are optional) | 1046 | 3D000 | +| VT09006 | VITESS_MIGRATION commands work only on primary tablets, you must send such commands to a primary tablet. | %s VITESS_MIGRATION works only on primary tablet | 0 | | +| VT09007 | VITESS_THROTTLED_APPS commands work only on primary tablet, you must send such commands to a primary tablet. | %s VITESS_THROTTLED_APPS works only on primary tablet | 0 | | +| VT09008 | vexplain queries/all will actually run queries. `/*vt+ EXECUTE_DML_QUERIES */` must be set to run DML queries in vtexplain. Example: `vexplain /*vt+ EXECUTE_DML_QUERIES */ queries delete from t1` | vexplain queries/all will actually run queries | 0 | | +| VT09009 | Stream is only supported for primary tablets, please use a stream on those tablets. | stream is supported only for primary tablet type, current type: %v | 0 | | +| VT09010 | SHOW VITESS_THROTTLER STATUS works only on primary tablet. | SHOW VITESS_THROTTLER STATUS works only on primary tablet | 0 | | +| VT09011 | The prepared statement is not available | Unknown prepared statement handler (%s) given to %s | 1243 | HY000 | +| VT09012 | This type of statement is not allowed on the given tablet. | %s statement with %s tablet not allowed | 0 | | +| VT09013 | Durability policy wants Vitess to use semi-sync, but the MySQL instances don't have the semi-sync plugin loaded. | semi-sync plugins are not loaded | 0 | | +| VT09014 | The vindex cannot be used as table in DML statement | vindex cannot be modified | 0 | | +| VT09015 | This query cannot be planned without more information on the SQL schema. Please turn on schema tracking or add authoritative columns information to your VSchema. | schema tracking required | 0 | | +| VT09016 | SET DEFAULT is not supported by InnoDB | Cannot delete or update a parent row: a foreign key constraint fails | 1451 | 23000 | +| VT09017 | Invalid syntax for the statement type. | %s | 0 | | +| VT09018 | Invalid syntax for the vindex function statement. | %s | 0 | | +| VT09019 | Vitess doesn't support cyclic foreign keys. | keyspace '%s' has cyclic foreign keys. Cycle exists between %v | 0 | | +| VT09020 | Vitess does not allow using multiple vindex hints on the same table. | can not use multiple vindex hints for table %s | 0 | | +| VT09021 | Vindex hints have to reference an existing vindex, and no such vindex could be found for the given table. | Vindex '%s' does not exist in table '%s' | 1176 | 42000 | +| VT09022 | Cannot send query to multiple shards. | Destination does not have exactly one shard: %v | 0 | | +| VT09023 | Unable to determine the shard for the given row. | could not map %v to a keyspace id | 0 | | +| VT09024 | Unable to determine the shard for the given row. | could not map %v to a unique keyspace id: %v | 0 | | +| VT10001 | Foreign key constraints are not allowed, see https://vitess.io/blog/2021-06-15-online-ddl-why-no-fk/. | foreign key constraints are not allowed | 0 | | +| VT12001 | This statement is unsupported by Vitess. Please rewrite your query to use supported syntax. | unsupported: %s | 0 | | +| VT12002 | Vitess does not support cross shard foreign keys. | unsupported: cross-shard foreign keys | 0 | | +| VT13001 | This error should not happen and is a bug. Please file an issue on GitHub: https://github.com/vitessio/vitess/issues/new/choose. | [BUG] %s | 0 | | +| VT13002 | This error should not happen and is a bug. Please file an issue on GitHub: https://github.com/vitessio/vitess/issues/new/choose. | unexpected AST struct for query: %s | 0 | | +| VT14001 | The connection failed. | connection error | 0 | | +| VT14002 | No available connection. | no available connection | 0 | | +| VT14003 | No connection for the given tablet. | no connection for tablet %v | 0 | | +| VT14004 | The specified keyspace could not be found. | cannot find keyspace for: %s | 0 | | +| VT14005 | Failed to read sidecar database identifier. | cannot lookup sidecar database for keyspace: %s | 0 | | + + +## Old Errors +| Error Number | Error State | Message | Meaning | +| :--: |:--: | :-- | -- | +| 1192 | HY000 | Can't execute the given command because you have an active transaction | The provided statement cannot be executed inside a transaction. | +| 1231 | 42000 | invalid transaction_mode: %s | Valid transaction_mode values are 'SINGLE', 'MULTI' or 'TWOPC'. | +| 1231 | 42000 | invalid workload: %s | Valid workload values are 'OLTP', 'OLAP' or 'DBA'. | +| 1231 | 42000 | invalid DDL strategy: %s | Valid DDL strategies are gh-ost, pt-osc. | +| 1690 | 22003 | %s value is out of range in %v [+,-,*,/] %v | Arithmetic operation lead to out of range value for the type. | +| 1047 | 42000 | connection ID and transaction ID do not exist | The session is pointing to a transaction and/or reserved connection that is not valid. | +| 1105 | HY000 | %d is not a boolean | Tried setting a system variable to a value that could not be converted a boolean value. | +| 1105 | HY000 | %s is not a sequence | The given table is not a sequence table. | +| 1105 | HY000 | %v cannot be converted to a go type | This type can't be represented as a golang value. | +| 1105 | HY000 | 2pc is not enabled | This functionality requires 2PC. Read more about 'transaction_mode' to learn how to enable it. | +| 1105 | HY000 | GTIDSet Mismatch: requested source position:%v, current target vrep position: %v | The requested GTIDSet does not exist in the vrep stream. | +| 1105 | HY000 | No target | TODO https://github.com/vitessio/vitess/blob/9542883311c0849c645cfb1b5c77ac761990b31b/go/vt/vttablet/tabletserver/state_manager.go#L376 | +| 1105 | HY000 | Unexpected error, DestinationKeyspaceID mapping to multiple shards | This is an internal error. If you see this error, please report it as a bug. | +| 1105 | HY000 | auto sequence generation can happen through single shard only, it is getting routed to %d shards | A sequence query has to be routed to a single shard, but this query was not. | +| 1105 | HY000 | could not parse value: '%s' | Tried parsing a value as a number but failed. | +| 1105 | HY000 | disallowed due to rule: %s | The query was not permitted to execute because the session was lacking permissions to do so. | +| 1105 | HY000 | invalid increment for sequence %s: %d | The given sequence increment is incorrect it should be equal or greater than zero. | +| 1105 | HY000 | invalid keyspace %v does not match expected %v | The given keyspace target does not match this tablet's keyspace name. | +| 1105 | HY000 | invalid shard %v does not match expected %v | The given shard target does not match this tablet's shard. | +| 1105 | HY000 | invalid table name: %s | The table name contains invalid characters. | +| 1105 | HY000 | [%d,'%s'] is not a boolean | This error will be returned if you try to set a variable to a value that can't be converted to a boolean value. | +| 1105 | HY000 | negative number cannot be converted to unsigned: %d | The column or variable is expecting an unsigned int, and negative numbers invalid here. | +| 1105 | HY000 | query arguments missing for %s | Argument expected but was missing. | +| 1105 | HY000 | require autocommit to be 1: got %s | Connection needs autocommit to be enabled, but it was not. | +| 1105 | HY000 | require sql_auto_is_null to be 0: got %s | Vitess requires the connection not use the auto_col functionality. | +| 1105 | HY000 | require sql_mode to be STRICT_TRANS_TABLES or STRICT_ALL_TABLES: got '%s' | Vitess requires the connection to be in STRICT mode; either or both of these settings need to be enabled. | +| 1105 | HY000 | unexpected rows from reading sequence %s (possible mis-route): %d | The sequence table used returned invalid results. | +| 1105 | HY000 | unsigned number overflows int64 value: %d | Tried to convert an unsigned integer into a signed integer, and the value overflows. | diff --git a/content/en/docs/21.0/reference/features/_index.md b/content/en/docs/21.0/reference/features/_index.md new file mode 100644 index 000000000..6d3b5e10c --- /dev/null +++ b/content/en/docs/21.0/reference/features/_index.md @@ -0,0 +1,6 @@ +--- +title: Features +description: Reference documents for Vitess features +weight: 1 +--- + diff --git a/content/en/docs/21.0/reference/features/connection-pools.md b/content/en/docs/21.0/reference/features/connection-pools.md new file mode 100644 index 000000000..3571ce4eb --- /dev/null +++ b/content/en/docs/21.0/reference/features/connection-pools.md @@ -0,0 +1,154 @@ +--- +title: VTTablet Connection Pools and Sizing +weight: 20 +--- + +VTTablet uses a variety of connection pools to connect to MySQLd. +Most of these can be controlled by vttablet options. +Note that almost all of these pools are **not** fixed size connection pools, and will grow on demand to the maximum configured sizes. +In older Vitess versions, v6.0 or before, some pools would eventually shrink again, but in recent Vitess versions a new pool connection is created when an old one reaches its idle timeout. +As a result, pools will now effectively never shrink. + +One thing to note is that each of these pools do not use unique MySQL usernames, so it can be hard from a MySQL process list to distinguish between different pool connections. +Consult the `_active` pool metrics (e.g. `vttablet_dba_conn_pool_active`) as the authoritative resource on how many MySQL protocol connections are in use for each pool. +In a similar fashion the `_exhausted` pool metrics (e.g. `vttablet_dba_conn_pool_exhausted`) can be used to see if a given pool has run out of connections (and how many times), since VTTablet startup. + +Note that a connection pool running out of connections is not necessarily a bad thing, since it limits the concurrency in the database. +As a result, connection pools should be sized mindful of the capacity of the underlying MySQL instance(s). + +## Pools: + +### transaction_pool and found_rows_pool + + * Max size (for each) controlled by: `--queryserver-config-transaction-cap` (default 20) + * metric: `vttablet_transaction_pool_capacity` + * metric: `vttablet_found_rows_pool_capacity` + * Used by transaction engine to manage transactions that require a dedicated connection. + The main pool for this use the **transaction_pool**. + The **found_rows_pool** is dedicated for connections where the client is using the `CLIENT_FOUND_ROWS` option. + For example, the `affected_rows` field return by the [MySQL protocol](https://dev.mysql.com/doc/internals/en/packet-OK_Packet.html) becomes the number of rows matched by the `WHERE` clause instead. + +### conn_pool + + * Max size controlled controlled by: `--queryserver-config-pool-size` (default 16) + * metric: `vttablet_conn_pool_capacity` + * Potentially uses `--db_app_user`, `--db_dba_user` and `--db_appdebug_user` i.e. defaults 'vt_app', 'vt_dba' and 'vt_appdebug' + * Used as the vttablet query engine "normal" (non-streaming) connections pool. + +### stream_conn_pool + + * Max size controlled by: `--queryserver-config-stream-pool-size` (default 200) + * metric: `vttablet_stream_conn_pool_capacity` + * Potentially uses `--db_app_user`, `--db_dba_user` and `--db_appdebug_user` + i.e. defaults 'vt_app', 'vt_dba' and 'vt_appdebug' + * Used as vttablet query engine streaming connections pool. All streaming queries that are not transactional should use this pool. + +### dba_conn_pool + + * Max size controlled by: `--dba_pool_size` (default 20) + * metric: `vttablet_dba_conn_pool_capacity` + * vttablet user flag: `--db_dba_user` (default 'vt_dba') + * Used by vttablet `ExecuteFetchAsDBA` RPC. This is used when using `vtctldclient ExecuteFetchAsDBA` + Also used implicitly for various internal Vitess maintenance tasks (e.g. schema reloads, etc.) + +### app_conn_pool + + * Max size controlled by: `--app_pool_size` (default 40) + * metric: `vttablet_app_conn_pool_capacity` + * vttablet user flag: `--db_app_user` default 'vt_app') + * Used by vttablet `ExecuteFetchAsApp` RPC. This is used when using `vtctldclient ExecuteFetchAsApp` + +### tx_read_pool + + * Hardcoded (size 3) + * metric: `vttablet_tx_read_pool_capacity` + * vttablet user flag: `--db_dba_user` (default 'vt_dba') + * Used in the (non-default) TWOPC `transaction_mode` for metadata state management. + This pool will always be empty unless TWOPC is used. + +### Pools associated with online DDL + +#### online_ddl_executor_pool + + * Hardcoded (size 3) + * metric: `vttablet_online_ddl_executor_pool_capacity` + * Potentially uses `--db_app_user`, `--db_dba_user` and `--db_appdebug_user` i.e. defaults 'vt_app', 'vt_dba' and 'vt_appdebug' + * Used in Online DDL to during the actual process of running gh-ost or pt-osc. + +#### table_gc_pool + + * Hardcoded (default 2) + * metric: `vttablet_table_gc_pool_capacity` + * Potentially uses `--db_app_user`, `--db_dba_user` and `--db_appdebug_user` i.e. defaults 'vt_app', 'vt_dba' and 'vt_appdebug' + * Used in Online DDL to purge/evac/drop origin tables after Online DDL operations from them have been completed. + +## Other DB connections used without pools: + +### vttablet user flag: + +#### `--db_allprivs_user` + + * (default 'vt_allprivs') + +#### `--db_erepl_user` + + * (default 'vt_erepl') + * Used only if you setup replication explicitly from an external MySQL instance **without** front-ending that instance with a tablet. + This user is then used to login to the external MySQL. + +#### `--db_repl_user` + + * (default 'vt_repl') + * Used to setup MySQL replication between shard primary and replica instance types. + +#### `--db_filtered_user` + + * (default 'vt_filtered') + * Used by VReplication on the source (vstreamer) and target (vplayer) side when copying data. + +## Other relevant pool-related variables + +### vttablet user limit +Flag: `--transaction_limit_per_user` + + * (default 0.4) + * This flag determines the fraction of connections in the **transaction_pool** and **found_rows_pool** that can be used by a single user. + The username is passed to vttablet from vtgate. + If you are using a limited set of users, you may want to increase this limit. + Or disable this limit feature by setting `--transaction_limit_by_username` to `false` as the default is `true`. + This option only comes into play if the TX limiter is enabled by `--enable_transaction_limit`, which it is not by default. + +### vtgate system settings +Flag: `--enable_system_settings` + +This vtgate flag allows clients to modify a [subset of system settings](https://github.com/vitessio/vitess/blob/main/go/vt/sysvars/sysvars.go#L174-L217) on the MySQL. This is done using the mechanism of [reserved connection](../../query-serving/reserved-conn/#enabling-reserved-connections). +Once a reserved connection is created, it lives for the life of the vtgate client session. These connections live outside of the regular connection pool and as a result, the number of MySQL server connections used by +vttablet may become significantly higher than what you might expect based on the pool settings. + +### vttablet settings pool +Flag: `--queryserver-enable-settings-pool` + +This vttablet flag enables pooling of connections with modified settings. +This overcomes the issue described with the number of MySQL connections in [vtgate system settings](#vtgate-system-settings). +Both these flags should be enabled for clients to be able to modify system settings without foregoing the benefits of connection pooling. + + +## Calculating maximum db connections used by vttablet + +You can use the following formula to approximate the maximum MySQL connections per vttablet instance: +``` + --queryserver-config-transaction-cap x 2 (transaction_pool and found_rows_pool) + + --queryserver-config-pool-size (conn_pool) + + --queryserver-config-stream-pool-size (stream_conn_pool) + + --dba_pool_size (dba_conn_pool) + + --app_pool_size (app_conn_pool) + + 3 (tx_read_pool, hardcoded) + + 7 (online DDL) + + variable (on demand: for vreplication, MySQL replication, etc; should < 10) + + variable (reserved connections used by `enable_system_settings`) +``` + +{{< info >}} +Note that most servers will not use this many connections, since most workloads do not exercise all the pools. +{{< /info >}} + diff --git a/content/en/docs/21.0/reference/features/global-routing.md b/content/en/docs/21.0/reference/features/global-routing.md new file mode 100644 index 000000000..c3813db8e --- /dev/null +++ b/content/en/docs/21.0/reference/features/global-routing.md @@ -0,0 +1,153 @@ +--- +title: Global Routing +weight: 23 +--- + +# Global Table Routing +Vitess has an implicit feature of routing the queries to the appropriate keyspace based on the table specified in the `from` list. +This differs from the standard mysql, in mysql unqualified tables will fail if the correct database is not set on the connection. + +This feature works only for unique table names provided in the [VSchema](../../../vschema/), and only when no default keyspace is set on the connection. One exception to the uniqueness rule is [Reference Tables](../../../user-guides/vschema-guide/advanced-vschema/#reference-tables) that explicitly specify a `source` table. + +Example: +```sql +mysql> show keyspaces; ++----------+ +| Database | ++----------+ +| ks | +| customer | +| commerce | ++----------+ +3 rows in set (0.00 sec) +``` + +`ks` and `customer` are sharded keyspaces and `commerce` is an unsharded keyspace. + +Tables present in each of the keyspace. + +```sql +mysql> show tables from ks; ++--------------+ +| Tables_in_ks | ++--------------+ +| customer | +| matches | +| player | ++--------------+ +3 rows in set (0.00 sec) + +mysql> show tables from customer; ++--------------------+ +| Tables_in_customer | ++--------------------+ +| corder | +| customer | ++--------------------+ +2 rows in set (0.00 sec) + +mysql> show tables from commerce; ++--------------------+ +| Tables_in_commerce | ++--------------------+ +| customer_seq | +| order_seq | +| product | ++--------------------+ +3 rows in set (0.00 sec) +``` + +Without a default keyspace we can route to unique tables like `corder`, `product` and `player` but cannot route to `customer` + +```sql +mysql> show columns from corder; ++-------------+----------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++-------------+----------------+------+-----+---------+-------+ +| order_id | bigint | NO | PRI | NULL | | +| customer_id | bigint | YES | | NULL | | +| sku | varbinary(128) | YES | | NULL | | +| price | bigint | YES | | NULL | | ++-------------+----------------+------+-----+---------+-------+ +4 rows in set (0.01 sec) + +mysql> show columns from product; ++-------------+----------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++-------------+----------------+------+-----+---------+-------+ +| sku | varbinary(128) | NO | PRI | NULL | | +| description | varbinary(128) | YES | | NULL | | +| price | bigint | YES | | NULL | | ++-------------+----------------+------+-----+---------+-------+ +3 rows in set (0.00 sec) + +mysql> show columns from player; ++-----------+-------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++-----------+-------------+------+-----+---------+-------+ +| player_id | bigint | NO | PRI | NULL | | +| name | varchar(50) | NO | | NULL | | ++-----------+-------------+------+-----+---------+-------+ +2 rows in set (0.00 sec) + +mysql> show columns from customer; +ERROR 1105 (HY000): ambiguous table reference: customer +``` + +With the default keyspace set to `customer` we can only query tables in `commerce` i.e `customer` and `corder`. +```sql +mysql> use customer +Reading table information for completion of table and column names +You can turn off this feature to get a quicker startup with -A + +Database changed +mysql> show columns from customer; ++-------------+----------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++-------------+----------------+------+-----+---------+-------+ +| customer_id | bigint | NO | PRI | NULL | | +| email | varbinary(128) | YES | | NULL | | ++-------------+----------------+------+-----+---------+-------+ +2 rows in set (0.01 sec) + +mysql> show columns from corder; ++-------------+----------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++-------------+----------------+------+-----+---------+-------+ +| order_id | bigint | NO | PRI | NULL | | +| customer_id | bigint | YES | | NULL | | +| sku | varbinary(128) | YES | | NULL | | +| price | bigint | YES | | NULL | | ++-------------+----------------+------+-----+---------+-------+ +4 rows in set (0.00 sec) + +mysql> show columns from product; +ERROR 1105 (HY000): table product not found +``` + +With a default keyspace set, the queries can be routed to other keyspaces by specifying the table qualifier. +```sql +mysql> use customer +Reading table information for completion of table and column names +You can turn off this feature to get a quicker startup with -A + +Database changed +mysql> show columns from ks.player; ++-----------+-------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++-----------+-------------+------+-----+---------+-------+ +| player_id | bigint | NO | PRI | NULL | | +| name | varchar(50) | NO | | NULL | | ++-----------+-------------+------+-----+---------+-------+ +2 rows in set (0.00 sec) + +mysql> show columns from commerce.product; ++-------------+----------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++-------------+----------------+------+-----+---------+-------+ +| sku | varbinary(128) | NO | PRI | NULL | | +| description | varbinary(128) | YES | | NULL | | +| price | bigint | YES | | NULL | | ++-------------+----------------+------+-----+---------+-------+ +3 rows in set (0.00 sec) +``` diff --git a/content/en/docs/21.0/reference/features/img/vschema_arch.png b/content/en/docs/21.0/reference/features/img/vschema_arch.png new file mode 100644 index 0000000000000000000000000000000000000000..ac1c9a969d2d7ef8caad31e4f154904561aaa198 GIT binary patch literal 259778 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 z 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�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%0AX1{6RT!}TQ(CsvCF@G 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 literal 0 HcmV?d00001 diff --git a/content/en/docs/21.0/reference/features/messaging.md b/content/en/docs/21.0/reference/features/messaging.md new file mode 100644 index 000000000..8724ae323 --- /dev/null +++ b/content/en/docs/21.0/reference/features/messaging.md @@ -0,0 +1,224 @@ +--- +title: Vitess Messaging +--- + +Vitess messaging gives the application an easy way to schedule and manage work +that needs to be performed asynchronously. Under the covers, messages are +stored in a traditional MySQL table and therefore enjoy the following +properties: + +* **Scalable**: Because of Vitess's sharding abilities, messages can scale to + very large QPS or sizes. +* **Guaranteed delivery**: A message will be indefinitely retried until a + successful ack is received. +* **Non-blocking**: If the sending is backlogged, new messages continue to be + accepted for eventual delivery. +* **Adaptive**: Messages that fail delivery are backed off exponentially with + jitter to prevent thundering herds. +* **Analytics**: Acknowledged messages are retained for a period of time — dictated + by the `time_acked` value for the row and the `vt_purge_after` (seconds) value + provided for the table — and can be used for analytics. +* **Transactional**: Messages can be created or acked as part of an existing + transaction. The action will complete only if the commit succeeds. + +The properties of a message are chosen by the application. However, every +message needs a uniquely identifiable key. If the messages are stored in a +sharded table, the key must also be the primary vindex of the table. + +Although messages will generally be delivered in the order they're created, +this is not an explicit guarantee of the system. The focus is more on keeping +track of the work that needs to be done and ensuring that it was performed. +Messages are good for: + +* Handing off work to another system. +* Recording potentially time-consuming work that needs to be done + asynchronously. +* Accumulating work that could be done during off-peak hours. + +Messages are not a good fit for the following use cases: + +* Broadcasting each event to multiple subscribers. +* Ordered delivery is required. +* Real-time delivery properties are required. + +## Creating a message table + +The current implementation requires a base fixed schema with properties defined +using Vitess specific table `COMMENT` directives. The message table format is as +follows: + +```sql +create table my_message( + # required columns + id bigint NOT NULL COMMENT 'often an event id, can also be auto-increment or a sequence', + priority tinyint NOT NULL DEFAULT '50' COMMENT 'lower number priorities process first', + epoch bigint NOT NULL DEFAULT '0' COMMENT 'Vitess increments this each time it sends the message, and is used for incremental backoff doubling', + time_next bigint DEFAULT 0 COMMENT 'the earliest time the message will be sent in epoch nanoseconds. Must be null if time_acked is set', + time_acked bigint DEFAULT NULL COMMENT 'the time the message was acked in epoch nanoseconds. Must be null if time_next is set', + + # add as many custom fields here as required + # optional - these are suggestions + tenant_id bigint COMMENT 'offers a nice way to segment your messages', + message json, + + # required indexes + primary key(id), + index poller_idx(time_acked, priority, time_next desc) + + # add any secondary indexes or foreign keys - no restrictions +) comment 'vitess_message,vt_min_backoff=30,vt_max_backoff=3600,vt_ack_wait=30,vt_purge_after=86400,vt_batch_size=10,vt_cache_size=10000,vt_poller_interval=30' +``` + +The application-related columns are as follows: + +* `id`: can be any type. Must be unique (for sharded message tables, this will typically be your primary vindex column). +* `message`: can be any type. +* `priority`: messages with a lower priority will be processed first. + +The noted indexes are recommended for optimum performance. However, some +variation can be allowed to achieve different performance trade-offs. + +The comment section specifies additional configuration parameters. The fields +are as follows: + +* `vitess_message`: Indicates that this is a message table. +* `vt_min_backoff=30`: Set lower bound, in seconds, on exponential backoff for + message retries. If not set, defaults to `vt_ack_wait` _(optional)_ +* `vt_max_backoff=3600`: Set upper bound, in seconds, on exponential backoff for + message retries. The default value is infinite backoff _(optional)_ +* `vt_ack_wait=30`: Wait for 30 seconds for the *first* message send to be acked. + If one is not received within this time frame, the message will be resent. +* `vt_purge_after=86400`: Purge acked messages that are older than 86400 + seconds (1 day). +* `vt_batch_size=10`: Send up to 10 messages per gRPC packet. +* `vt_cache_size=10000`: Store up to 10,000 messages in the cache. If the demand + is higher, the rest of the items will have to wait for the next poller cycle. +* `vt_poller_interval=30`: Poll every 30 seconds for messages that should be + [re]sent. + +If any of the above fields not marked as optional are missing, Vitess will fail to load the table. No +operation will be allowed on a table that has failed to load. + +## Enqueuing messages + +The application can enqueue messages using a standard `INSERT` statement, for example: + +```sql +insert into my_message(id, message) values(1, '{"message": "hello world"}') +``` + +These inserts can be part of a regular transaction. Multiple messages can be +inserted into different tables. Avoid accumulating too many big messages within a +transaction as it consumes memory on the VTTablet side. At the time of commit, +memory permitting, all messages are instantly enqueued to be sent. + +Messages can also be created to be sent in the future: + + ```sql + insert into my_message(id, message, time_next) values(1, '{"message": "hello world"}', :future_time) + ``` + + `future_time` must be a unix timestamp expressed in nanoseconds. + +## Receiving messages + +Processes can subscribe to receive messages by sending a [`MessageStream`](https://pkg.go.dev/vitess.io/vitess/go/vt/vtgate#Executor.MessageStream) +gRPC request to a `VTGate` or using the `stream * from ` SQL statement +(if using the interactive mysql command-line client you must also pass the +`-q`/`--quick` option): + +```mysql +$ mysql --quick +mysql> SET WORKLOAD=OLAP; +mysql> STREAM * FROM
; +``` + +
+ +If there are multiple subscribers, the messages will be delivered in a round-robin +fashion. Note that *this is not a broadcast*; each message will be sent to at most +one subscriber. + +The format for messages is the same as a standard Vitess `Result` received from +a `VTGate`. This means that standard database tools that understand query results +can also be message receivers. + +### Subsetting + +It's possible that you may want to subscribe to specific shards or groups of +shards while requesting messages. This is useful for partitioning or load +balancing. The `MessageStream` gRPC API call allows you to specify these +constraints. The request parameters are as follows: + +* `Name`: Name of the message table. +* `Keyspace`: Keyspace where the message table is present. +* `Shard`: For unsharded keyspaces, this is usually "0". However, an empty + shard will also work. For sharded keyspaces, a specific shard name can be + specified. +* `KeyRange`: If the keyspace is sharded, streaming will be performed only from + the shards that match the range. This must be an exact match. + +## Acknowledging messages + +A received and processed (you've completed some meaningful work based on the +message contents received) message can be acknowledged using the `MessageAck` +gRPC API call. This call accepts the following parameters: + +* `Name`: Name of the message table. +* `Keyspace`: Keyspace where the message table is present. This field can be + empty if the table name is unique across all keyspaces. +* `Ids`: The list of ids that need to be acked. + +Once a message is successfully acked, it will never be resent. + +## Exponential backoff + +For a message that was successfully sent we will wait for the specified `vt_ack_wait` +time. If no ack is received by then, it will be resent. The next attempt will be 2x +the previous wait and this delay is doubled for every subsequent attempt — bound by +`vt_min_backoff` and `vt_max_backoff` — with some added jitter (up to 33%) to avoid +thundering herds. + +## Purging + +Messages that have been successfully acked will be deleted after their age +exceeds the time period specified by `vt_purge_after`. + +## Advanced usage + +The `MessageAck` functionality is currently a gRPC API call and cannot be used +from the SQL interface. However, you can manually ack messages using a regular +DML query like this: + +```sql +update my_message set time_acked = :time_acked, time_next = null where id in ::ids and time_acked is null +``` + +You can also manually change the schedule of existing messages with a statement like +this: + +```sql +update my_message set priority = :priority, time_next = :time_next, epoch = :epoch where id in ::ids and time_acked is null +``` + +This comes in handy if a bunch of messages had chronic failures and got +postponed to the distant future. If the root cause of the problem was fixed, +the application could reschedule them to be delivered as soon as possible. You can +also optionally change the priority and or epoch. Lower priority and epoch values +both increase the relative priority of the message and the back-off is less +aggressive. + +You can also view messages using regular `SELECT` queries against the message table. + +## Known limitations + +Here is a short list of possible limitations/improvements: + +* Proactive scheduling: Upcoming messages can be proactively scheduled for + timely delivery instead of waiting for the next polling cycle. +* Changed properties: Although the engine detects new message tables, it does + not refresh the properties (such as `vt_ack_wait`) of an existing table. +* No explicit rate limiting. +* Usage of MySQL partitioning for more efficient purging. + + diff --git a/content/en/docs/21.0/reference/features/monitoring.md b/content/en/docs/21.0/reference/features/monitoring.md new file mode 100644 index 000000000..c04233f4a --- /dev/null +++ b/content/en/docs/21.0/reference/features/monitoring.md @@ -0,0 +1,42 @@ +--- +title: Monitoring +weight: 8 +--- + +# Current state of monitoring + +There are currently three main ways that a Vitess cluster can be monitored. Depending on your needs, you can use any of the following methods: + +## 1. Vitess status pages + +The status HTML pages of various Vitess components can be accessed by pointing your browser to `http://:/debug/status`. The status pages will often display some basic, but useful, information for monitoring. For example, the status page of a vttablet will show the QPS graph for the past few minutes. + +Viewing a status page can be useful since it works out of the box, but it only provides very basic monitoring capabilities. + +## 2. Pull-based metrics system + +Vitess uses Go’s [expvar package](https://golang.org/pkg/expvar/) to expose various metrics, with the expectation that a user can configure a pull-based metrics system to ingest those metrics. Metrics are published to `http://:/debug/vars` as JSON key-value pairs, which should be easy for any metrics system to parse. + +Scraping Vitess variables is a good way to integrate Vitess into an existing monitoring system, and is useful for building up detailed monitoring dashboards. It is also the officially supported way for monitoring Vitess. + +## 3. Push-based metrics system + +Vitess also includes support for push-based metrics systems via plug-ins. Each Vitess component would need to be run with the `--emit_stats` flag. + +By default, the stats_emit_period is 60s, so each component will push stats to the selected backend every minute. This is configurable via the `--stats_emit_period` flag. + +Vitess has preliminary plug-ins to support OpenTSDB as a push-based metrics backend. + +It should be fairly straightforward to write your own plug-in, if you want to support a different backend. The plug-in package simply needs to implement the `PushBackend` interface of the `stats` package. For an example, you can see the [OpenTSDB plugin](https://github.com/vitessio/vitess/blob/main/go/stats/opentsdb/opentsdb.go). + +Once you’ve written the backend plug-in, you also need to register the plug-in from within all the relevant Vitess binaries. An example of how to do this can be seen in [this pull request](https://github.com/vitessio/vitess/pull/469). + +You can then specify that Vitess should publish stats to the backend that you’re targeting by using the `--stats_backend` flag. + +Connecting Vitess to a push-based metrics system can be useful if you’re already running a push-based system that you would like to integrate into. + +# Monitoring with Kubernetes + +The existing methods for integrating metrics are not supported in a Kubernetes environment by the Vitess team yet, but are on the roadmap for the future. However, it should be possible to get the Prometheus backend working with Kubernetes. + +In the meantime, if you run into issues or have questions, please post on our [Slack](https://vitess.io/slack). diff --git a/content/en/docs/21.0/reference/features/mysql-query-extensions.md b/content/en/docs/21.0/reference/features/mysql-query-extensions.md new file mode 100644 index 000000000..a50f5b873 --- /dev/null +++ b/content/en/docs/21.0/reference/features/mysql-query-extensions.md @@ -0,0 +1,17 @@ +--- +title: MySQL Query Language Extensions +weight: 9 +aliases: [] +--- + +Vitess uses the MySQL [client server protocol](https://dev.mysql.com/doc/internals/en/client-server-protocol.html) and [query language](https://dev.mysql.com/doc/refman/en/language-structure.html). While there are some [limitations and compatibility mismatches](../../compatibility/mysql-compatibility/), Vitess also expands on the MySQL query language for Vitess specific usage. + +## Extensions to the MySQL Query Language + +* [SHOW](../show) has some additional functionality. +* [VEXPLAIN](../../../user-guides/sql/explain-format-vtexplain) is similar to `EXPLAIN` but specifically for Vitess plans +* You can use a special `SELECT` query to see the next value from a sequence: + +```sql +select next value from user_seq; +``` diff --git a/content/en/docs/21.0/reference/features/mysql-replication.md b/content/en/docs/21.0/reference/features/mysql-replication.md new file mode 100644 index 000000000..a7bf9d6bd --- /dev/null +++ b/content/en/docs/21.0/reference/features/mysql-replication.md @@ -0,0 +1,37 @@ +--- +title: Replication +weight: 9 +aliases: ['/docs/reference/row-based-replication/','/docs/reference/vitess-replication/','/docs/reference/mysql-replication/'] +--- + +{{< warning >}} +Vitess requires the use of Row-Based Replication with GTIDs enabled. In addition, Vitess only supports the default `binlog_row_image` of `FULL`. +{{< /warning >}} + +Vitess makes use of MySQL Replication for both high availability and to receive a feed of changes to database tables. This feed is then used in features such as [VReplication](../../vreplication/vreplication/), and to identify schema changes so that caches can be updated. + +## Semi-Sync + +Vitess strongly recommends the use of Semi-synchronous replication for High Availability. The characteristics of semi-sync are replication governed by the [Durability Policy](../../../user-guides/configuration-basic/durability_policy) configured for the keyspace. +Some characteristics are shared by all the policies - + +* Vitess configures the semi-sync timeout to essentially an unlimited number so that it will never fallback to asyncronous replication. This is important to prevent split brain (or alternate futures) in case of a network partition. If we can verify all replicas have stopped replicating, we know the old primary is not accepting writes, even if we are unable to contact the old primary itself. + +* All pre-configured durability policies do not allow tablets of type rdonly to send semi-sync ACKs. This is intentional because rdonly tablets are not eligible to be promoted to primary, so Vitess avoids the case where a rdonly tablet is the single best candidate for election at the time of primary failure. + +Having semi-sync enabled, gives you the property that, in case of primary failure, there is at least one other replica that has every transaction that was ever reported to clients as having completed. You can then wait for [VTOrc](../../../user-guides/configuration-basic/vtorc) to repair it, or ([manually](../../programs/vtctl/shards/#emergencyreparentshard) pick the replica that is farthest ahead in GTID position and promote that to be the new primary. + +Thus, you can survive sudden primary failure without losing any transactions that were reported to clients as completed. In MySQL 5.7+, this guarantee is strengthened slightly to preventing loss of any transactions that were ever **committed** on the original primary, eliminating so-called [phantom reads](http://bugs.mysql.com/bug.php?id=62174). + +On the other hand these behaviors also give a requirement that each shard must have at least 2 tablets with type *replica* (with addition of the primary that can be demoted to type *replica* this gives a minimum of 3 tablets with initial type *replica*). This will allow for the primary to have a semi-sync acker when one of the replica tablets is down for any reason (for a version update, machine reboot, schema swap or anything else). +These requirements will changed based on the durability policy. + +With regard to replication lag, note that this does **not** guarantee there is always at least one replica from which queries will always return up-to-date results. Semi-sync guarantees that at least one replica has the transaction in its relay log, but it has not necessarily been applied yet. The only way Vitess guarantees a fully up-to-date read is to send the request to the primary. + +## Database Schema Considerations + +* Row-based replication requires that replicas have the same schema as the primary, and corruption will likely occur if the column order does not match. Earlier versions of Vitess which used Statement-Based replication recommended applying schema changes on replicas first, and then swapping their role to primary. This method is no longer recommended in favour of the use of Online-DDL. More information can be found [here](../../../user-guides/schema-changes). + +* Using a column of type `FLOAT` or `DOUBLE` as part of a Primary Key is not supported. This limitation is because Vitess may try to execute a query for a value (for example 2.2) which MySQL will return zero results, even when the approximate value is present. + +* It is not recommended to change the schema at the same time a resharding operation is being performed. This limitation exists because interpreting RBR events requires accurate knowledge of the table's schema, and Vitess does not always correctly handle the case that the schema has changed. diff --git a/content/en/docs/21.0/reference/features/recovery.md b/content/en/docs/21.0/reference/features/recovery.md new file mode 100644 index 000000000..85b2cdcfc --- /dev/null +++ b/content/en/docs/21.0/reference/features/recovery.md @@ -0,0 +1,186 @@ +--- +title: Point In Time Recovery +weight: 17 +aliases: ['/docs/recovery/pitr','/docs/reference/pitr/'] +--- + +## Point in Time Recovery + +Vitess supports incremental backup and recoveries, AKA point in time recoveries. It supports both restore-to-timestamp and (one second resolution) as well as restore-to-position (precise GTID set). + +Point in time recoveries are based on full and incremental backups. It is possible to recover a database to a position that is _covered_ by some backup. + +See [Backup Types](../../../user-guides/operating-vitess/backup-and-restore/overview/#backup-types) and [Restore Types](../../../user-guides/operating-vitess/backup-and-restore/overview/#restore-types) for an overview of incremental backups and restores. + +See the user guides for how to [Create an Incremental Backup](../../../user-guides/operating-vitess/backup-and-restore/creating-a-backup/#create-an-incremental-backup-with-vtctl) and how to [Restore to a position](../../../user-guides/operating-vitess/backup-and-restore/bootstrap-and-restore/#restore-to-a-point-in-time). + +### Supported Databases +- MySQL 5.7, 8.0 + +### Notes + +This functionality replaces a legacy functionality, based on binlog servers and transient binary logs. + +## Point in Time Recovery: legacy functionality based on binlog server + +### Supported Databases +- MySQL 8.0 + +### Introduction + +The Point in Time Recovery feature in Vitess enables recovery of data to a specific point time (timestamp). There can be multiple recovery requests active at the same time. It is possible to recover across sharding actions, i.e. you can recover to a time when there were two shards even though at present there are four. + +Point in Time Recovery leverages two Vitess features: + +1. The use of `SNAPSHOT` keyspaces for recovery of the last backup before a requested specific timestamp to restore to. +2. Integration with a binlog server to allow vttablet to apply binary logs from the recovered backup up to the specified timestamp. + +### Use cases + +- Accidental deletion of data, e.g. dropping a table by mistake, running an UPDATE or DELETE with an incorrect WHERE clause, etc. +- Corruption of data due to application bugs. +- Corruption of data due to MySQL bugs or underlying hardware (e.g. storage) problems. + +### Preconditions + +- There should be a Vitess backup taken before the desired point in time. +- There should be continuous binlogs available from the backup time to the desired point in time. +- This feature is tested using [Ripple](https://github.com/google/mysql-ripple) as the binlog server. However, it should be possible to use a MySQL instance as source for the binlogs as well. + +### Example usage + +To use this feature, you need a usable backup of Vitess data and continuous binlogs. + +Here is how you can create a backup. + +```sh +$ vtctldclient --server : Backup zone1-101 +``` + +Here `zone1-101` is the tablet alias of a replica tablet in the shard that you +want to back up. Note that you can also use `vtctldclient BackupShard` to just +specify a keyspace and shard, and have Vitess choose the tablet to run the +backup for you, instead of having to specify the tablet alias explicitly. + +To maintain continuous binlogs, you need to have a binlog server pointing to +the primary (or a replica, assuming that the replica is also maintaining its +own binlogs, which is the default Vitess configuration). You can use +[Ripple](https://github.com/google/mysql-ripple) as a binlog server, although +there are other options; and you could use an existing MySQL server as well. + +If you use Ripple, you will need to configure it yourself, and ensure you take +care of the following: + + - You should have a highly available binlog server setup. If the binlog + server goes down, you need to ensure that it is back up and able + to synchronize the MySQL binary logs from its upstream MySQL server + before the upstream server deletes the current binlog. If you + do not do this, you will end up with gaps in your binlogs, which + could make restoring to a specific point in time impossible. Make + sure that you setup your operational and monitoring procedures + accordingly. + - The binlog files should be safely kept at some reliable and recoverable + location (e.g. AWS S3, remote file storage). + +Once the above is done, you can proceed with doing a recovery. + +#### Recovery Procedure + +First, you need to create a `SNAPSHOT` keyspace with a `base-keyspace` +pointing to the original keyspace you are recovering the backup of. +This can be done by using following: + +```sh +$ vtctldclient --server : CreateKeyspace --type=SNAPSHOT --base-keyspace=originalks --snapshot-time=2020-07-17T18:25:20Z restoreks +``` + + Here: + - `originalks` is the base keyspace, i.e. the keyspace we took a backup of, + and are trying to recover. + - `snapshot-time` is the timestamp of the point in time to we want to recover + to. Note the use of the `Z` in the timestamp, indicating it is expressed + in UTC. + - `restoreks` is the name of recovery keyspace, i.e. the keyspace to which + we are restoring our backup. + + Next, you can launch the vttablet, which as part of vttablet's normal + initialization procedure will look for a backup to restore. It will + detect the meta-information you added on the keyspace topology node + when creating the keyspace above. It will then use that information + to restore the last backup earlier than the timestamp provided for the + specific shard the vttablet is in. + + Here are the command line arguments vttablet uses in this + process. You may already be using some of these as part of your + normal vttablet initialization parameters (e.g. if you are using the + Vitess K8s operator): + + - `--init_keyspace restoreks` - here `restoreks` is the recovery keyspace + name which we created earlier + - `--init_db_name_override vt_originalks` - here `vt_originalks` is the + name of the original underlying database for the keyspace that you backed + up and want to restore. Usually, this takes the form of `vt_` prepended + to the keyspace name. However, the original underlying database could + also have been using an `--init_db_name_override` directive of its own, + and this value should then be set to match that. + - `--init_shard 0` - here `0` is the shard name (or range) which we want + to recover. + - `--binlog_host x.x.x.x` - hostname or IP address of binlog server. + - `--binlog_port XXXX` - TCP port of binlog server. + - `--binlog_user XXXX` - username to access binlog server. + - `--binlog_password YYYY` - password to access binlog server. + - `--pitr_gtid_lookup_timeout duration` - See below for details. + +And then, depending on your backup storage implementation, you can use a +variety of flags: + + - `--backup_storage_implementation file` - for plain file backup type. + If you use this option, you will also need to specify: + - `--file_backup_storage_root` - with a path pointing to your backup + storage location. + - `--backup_storage_implementation s3` - for backing up to S3. If you + use this option, you may need additional flags like: + - `--s3_backup_aws_region` + - `--s3_backup_storage_bucket` + - `--s3_backup_storage_root` + - There are more `--backup_storage_implementation` options like `gcs` and + others. + +{{< warning >}} +When using the file backup storage engine the backup storage root path must be on shared storage to provide a global view of backups to all vitess components. +{{< /warning >}} + +You will also probably want to use other flags for backup and restore like: + + - `--backup_engine_implementation xtrabackup` - Use Percona Xtrabackup to + take online backups. Without this flag, the mysql instance on the replica + being backed up will be shut down during the backup. + - `--backup_storage_compress true` - gzip compress the backup (default is + true). + +You need to be consistent in your use of these flags for backup and restore. + +Once the restore of the last backup earlier than the `snapshot-time` timestamp +is completed, the vttablet proceeds to use the `binlog_*` parameters to +connect to the binlog server and then apply all binlog events from the time +of the backup until the timestamp provided. + +Since the last backup for each shard making up the keyspace could be taken at +different points in time, the amount of time that it takes to apply these events +may differ between restores of different shards in the keyspace. + +Note that to restore to the specified `snapshot-time` timestamp, vttablet needs +to find the GTID corresponding to the last event before this timestamp from +the binlog server. This is an expensive operation and may take some time. By +default the timeout for this operation is one minute (1m). This can be changed +by setting the vttablet `--pitr_gtid_lookup_timeout` flag. + +VTGate will automatically exclude tablets belonging to snapshot keyspaces from +query routing unless they are specifically addressed using `USE restoreks` +or by using queries of the form `SELECT ... FROM restoreks.table`. + +The base keyspace's vschema will be copied over to the new snapshot keyspace +as a default. If desired this can be overwritten by the user. Care needs to +be taken to set `require_explicit_routing` to true when modifying a snapshot +keyspace's vschema, or you will bypass the VTGate routing safety feature +described above. diff --git a/content/en/docs/21.0/reference/features/schema-management.md b/content/en/docs/21.0/reference/features/schema-management.md new file mode 100644 index 000000000..5a12afb27 --- /dev/null +++ b/content/en/docs/21.0/reference/features/schema-management.md @@ -0,0 +1,117 @@ +--- +title: Schema Management +weight: 16 +aliases: ['/docs/schema-management/','/docs/user-guides/schema-management/','/docs/reference/schema-management/'] +--- + +Using Vitess requires you to work with two different types of schemas: + +1. The MySQL database schema. This is the schema of the individual MySQL instances. +2. The [VSchema](../vschema), which describes all the keyspaces and how they're sharded. + +The workflow for the `VSchema` is as follows: + +1. Apply the `VSchema` for each keyspace using the `ApplyVschema` command. This saves the VSchemas in the global topology service. +2. Execute `RebuildVSchemaGraph` for each cell (or all cells). This command propagates a denormalized version of the combined VSchema to all the specified cells. The main purpose for this propagation is to minimize the dependency of each cell from the global topology. The ability to push a change to only specific cells allows you to canary the change to make sure that it's good before deploying it everywhere. + +This document describes the [`vtctl`](../../../reference/programs/vtctl/) commands that you can use to [review](#reviewing-your-schema) or [update](#changing-your-schema) your schema in Vitess. + +It is not recommended to run schema changes through this command. Instead, use [managed, online schema changes](../../../user-guides/schema-changes/managed-online-schema-changes/). + +## Reviewing your schema + +This section describes the following vtctl commands, which let you look at the schema and validate its consistency across tablets or shards: + +* [GetSchema](#getschema) +* [ValidateSchemaShard](#validateschemashard) +* [ValidateSchemaKeyspace](#validateschemakeyspace) +* [GetVSchema](#getvschema) +* [GetSrvVSchema](#getsrvvschema) + +### GetSchema + +The [GetSchema](../../programs/vtctl/schema-version-permissions#getschema) command displays the full schema for a tablet or a subset of the tablet's tables. When you call `GetSchema`, you specify the tablet alias that uniquely identifies the tablet. The `` argument value has the format `-`. + +**Note**: You can use the [`vtctl ListAllTablets`](../../../reference/programs/vtctl/#listalltablets) command to retrieve a list of tablets in a cell and their unique IDs. + +The following example retrieves the schema for the tablet with the unique ID test-000000100: + +``` sh +GetSchema test-000000100 +``` + +### ValidateSchemaShard + +The [`ValidateSchemaShard`](../../../reference/programs/vtctl/#validateschemashard) command confirms that for a given keyspace, all of the replica tablets in a specified shard have the same schema as the primary tablet in that shard. When you call `ValidateSchemaShard`, you specify both the keyspace and the shard that you are validating. + +The following command confirms that the primary and replica tablets in shard `0` all have the same schema for the `user` keyspace: + +``` sh +ValidateSchemaShard user/0 +``` + +### ValidateSchemaKeyspace + +The [`ValidateSchemaKeyspace`](../../../reference/programs/vtctl/#validateschemakeyspace) command confirms that all of the tablets in a given keyspace have the the same schema as the primary tablet on shard `0` in that keyspace. Thus, whereas the `ValidateSchemaShard` command confirms the consistency of the schema on tablets within a shard for a given keyspace, `ValidateSchemaKeyspace` confirms the consistency across all tablets in all shards for that keyspace. + +The following command confirms that all tablets in all shards have the same schema as the primary tablet in shard 0 for the user keyspace: + +``` sh +ValidateSchemaKeyspace user +``` + +### GetVSchema + +The [`GetVSchema`](../../../reference/programs/vtctl/#getvschema) command displays the global VSchema for the specified keyspace. + +### GetSrvVSchema + +The [`GetSrvVSchema`](../../../reference/programs/vtctl/#getsrvvschema) command displays the combined VSchema for a given cell. + +## Changing your schema + +This section describes the following commands: + +* [ApplySchema](#applyschema) +* [ApplyVSchema](#applyvschema) +* [RebuildVSchemaGraph](#rebuildvschemagraph) + +### ApplySchema + +Vitess offers [managed schema migration](../../../user-guides/schema-changes/managed-online-schema-changes/), and notably supports online schema migrations (aka Online DDL), transparently to the user. Vitess Online DDL offers: + +* Non-blocking migrations +* Migrations are asyncronously auto-scheduled, queued and executed by tablets +* Migration state is trackable +* Migrations are cancellable +* Migrations are retry-able +* Lossless, [revertible migrations](../../../user-guides/schema-changes/revertible-migrations/) +* Support for [declarative migrations](../../../user-guides/schema-changes/declarative-migrations/) +* Support for [postponed migrations](../../../user-guides/schema-changes/postponed-migrations/) +* Support for [failover agnostic migrations](../../../user-guides/schema-changes/recoverable-migrations/) +* Support for [concurrent migrations](../../../user-guides/schema-changes/concurrent-migrations/) + +The [ApplySchema](../../../reference/programs/vtctl/schema-version-permissions/#applyschema) command applies a schema change to the specified keyspace on all shards. The command format is: `ApplySchema -- {--sql= || --sql_file=} ` + +Further reading: + +* [Making schema changes](../../../user-guides/schema-changes/) +* [Managed schema changes](../../../user-guides/schema-changes/managed-online-schema-changes/) +* [DDL strategies](../../../user-guides/schema-changes/ddl-strategies/) + +#### Permitted schema changes + +The `ApplySchema` command supports these commands: + +* `CREATE TABLE`, `ALTER TABLE`, `DROP TABLE`, `CREATE VIEW`, `ALTER VIEW`, `DROP VIEW` in Online DDL +* In addition, `CREATE INDEX`, `DROP INDEX`, `RENAME TABLE`, in non Online DDL + +`ApplySchema` does not support creation or modifications of stored routines, including functions, procedures, triggers, and events. + +### ApplyVSchema + +The [`ApplyVSchema`](../../../reference/programs/vtctl/#applyvschema) command applies the specified VSchema to the keyspace. The VSchema can be specified as a string or in a file. + +### RebuildVSchemaGraph + +The [`RebuildVSchemaGraph`](../../../reference/programs/vtctl/#rebuildvschemagraph) command propagates the global VSchema to a specific cell or the list of specified cells. diff --git a/content/en/docs/21.0/reference/features/schema-routing-rules.md b/content/en/docs/21.0/reference/features/schema-routing-rules.md new file mode 100644 index 000000000..ede10a3de --- /dev/null +++ b/content/en/docs/21.0/reference/features/schema-routing-rules.md @@ -0,0 +1,178 @@ +--- +title: Schema Routing Rules +weight: 15 +aliases: ['/docs/schema-management/routing-rules/','/docs/reference/schema-routing-rules/'] +--- + +The Vitess routing rules feature is a powerful mechanism for directing query traffic to the right keyspaces, shards, and tablet types in +[Vitess Gateways](../../../concepts/vtgate/) (`vtgate`). Their primary usage today is for the following use case: + +* **Routing traffic during data migrations**: during e.g. [`MoveTables`](../../vreplication/movetables/) and + [`Reshard`](../../vreplication/reshard/) operations, routing rules dictate where to send reads and writes. These routing rules are managed + automatically by [VReplication](../../vreplication/vreplication/). You can see an example of their usage in the + [MoveTables](../../../user-guides/migration/move-tables/) user guide. + +Understanding the routing rules can help you debug migration related issues as well as provide you with another powerful tool as +you operate Vitess. + +## Viewing Routing Rules + +The routing rules are global and can be viewed using the [`GetRoutingRules` client command](../../programs/vtctldclient/vtctldclient_getroutingrules/). + +## Updating Routing Rules + +You can update the routing rules using the [`ApplyRoutingRules` client command](../../programs/vtctldclient/vtctldclient_applyroutingrules/). + +## Syntax + +Routing rules are managed using the JSON format. Here's an example, using the routing rules that are put in place by `MoveTables` +in the [local examples](../../../get-started/local/) where the `customer` and `corder` tables are being moved from the `commerce` +keyspace to the `customer` keyspace and we have not yet switched traffic from the `commerce` keyspace to the `customer` keyspace — so all +traffic, regardless of which keyspace a client uses, are sent to the `commerce` keyspace: +```json +$ vtctldclient --server=localhost:15999 GetRoutingRules +{ + "rules": [ + { + "from_table": "customer.customer", + "to_tables": [ + "commerce.customer" + ] + }, + { + "from_table": "commerce.corder@replica", + "to_tables": [ + "commerce.corder" + ] + }, + { + "from_table": "customer.customer@rdonly", + "to_tables": [ + "commerce.customer" + ] + }, + { + "from_table": "commerce.corder@rdonly", + "to_tables": [ + "commerce.corder" + ] + }, + { + "from_table": "corder@replica", + "to_tables": [ + "commerce.corder" + ] + }, + { + "from_table": "commerce.customer@replica", + "to_tables": [ + "commerce.customer" + ] + }, + { + "from_table": "commerce.customer@rdonly", + "to_tables": [ + "commerce.customer" + ] + }, + { + "from_table": "customer.corder@replica", + "to_tables": [ + "commerce.corder" + ] + }, + { + "from_table": "customer.corder@rdonly", + "to_tables": [ + "commerce.corder" + ] + }, + { + "from_table": "customer.customer@replica", + "to_tables": [ + "commerce.customer" + ] + }, + { + "from_table": "customer.corder", + "to_tables": [ + "commerce.corder" + ] + }, + { + "from_table": "corder@rdonly", + "to_tables": [ + "commerce.corder" + ] + }, + { + "from_table": "customer@replica", + "to_tables": [ + "commerce.customer" + ] + }, + { + "from_table": "customer@rdonly", + "to_tables": [ + "commerce.customer" + ] + }, + { + "from_table": "corder", + "to_tables": [ + "commerce.corder" + ] + }, + { + "from_table": "customer", + "to_tables": [ + "commerce.customer" + ] + } + ] +} +``` + +## When Routing Rules Are Applied + +In the above example, we send all query traffic for the `customer` and `corder` tables to the `commerce` keyspace regardless of how +the client specifies the database/schema and table qualifiers. There is, however, one important exception and that is when the client +explicitly requests the usage of a specific shard, also known as "shard targeting". For example, if the client specifies the database +as `customer:0` or `customer:0@replica` then the query will get run against that shard in the customer keyspace. + +{{< warning >}} +You should exercise _extreme_ caution when executing ad-hoc *write* queries during this time as you may think that you're deleting data +from the target keyspace, that is as of yet unused, when in reality you're deleting it from the source keyspace that is currently +serving production traffic. +{{}} + +{{< info >}} +You can leverage shard targeting to perform ad-hoc *read-only* queries against the target and source keyspace/shards to perform any +additional data validation or checks that you want (beyond [`VDiff`](../../vreplication/vdiff/)). You can also use this shard targeting +to see how your data is distributed across the keyspace's shards. +{{}} + +## Additional Details + +There are some key details to keep in mind if you will be creating and managing your own custom routing rules. +- The `to_tables` field must contain only one entry and the table name must be fully qualified. + +- If the `from_table` is qualified by a keyspace, then a query that references that table will get redirected to the corresponding target table. The reference need not be explicit. For example, if you are connected to the `customer` keyspace, then an unqualified reference to the `customer` table is interpreted as a qualified reference to `customer.customer`. + +- You may further add a tablet type to the `from_table` field using the `@` syntax seen in the example above. If so, only queries that target that tablet type will get redirected. Although you can qualify a table by its keyspace in a query, there is no equivalent syntax for specifying the tablet type. The only way to choose a tablet type is through the `use` statement, like `use customer@replica`, or by specifying it in the connection string. + +- The more specific rules supercede the less specific one. For example, `customer.customer@replica` is chosen over `customer.customer` if the current tablet type is a `replica`. + +- If the `to_tables` have special characters that need escaping, you can use the mysql backtick syntax to do so. As for the `from_tables`, the table name should *not* be escaped. Instead, you should just concatenate the table with the keyspace without the backticks. In the following example, we are redirecting the `b.c` table to the `c.b` table in keyspace `a`: + ``` json + { + "rules": [ + { + "from_table": "a.b.c", + "to_tables": [ + "a.`c.b`" + ] + } + ] + } + ``` diff --git a/content/en/docs/21.0/reference/features/schema-tracking.md b/content/en/docs/21.0/reference/features/schema-tracking.md new file mode 100644 index 000000000..61ff0bfb5 --- /dev/null +++ b/content/en/docs/21.0/reference/features/schema-tracking.md @@ -0,0 +1,26 @@ +--- +title: Schema Tracking +weight: 16 +aliases: ['/docs/reference/schema-tracking/'] +--- + +VTGate natively tracks table schema using two different methods: schema tracking and VSchema. Using the VSchema, users are allowed to provide an authoritative list of columns which is then used to enhance query planning. If none is provided, VTGate uses its schema tracking feature. + +When using schema tracking, VTGate keeps an authoritative list of columns on all tables. The following query set can be planned: + +1. `SELECT *` cross-shard queries that need evaluation at the VTGate level. +2. Queries that are not able to resolve columns dependencies. For instance: queries with no table qualifier in the projection/filter list. +3. Evaluation improvement in Aggregations, Group By, Having, Limit, etc. clauses that require processing of records at VTGate level. VTGate will not require `weight_string()` value for the evaluation and can compare the values directly. + +If schema tracking happened to be disabled and no authoritative list of columns is provided, a set of queries will not be supported by VTGate due to a lack of information on the underlying tables/columns. + +More information on this feature can be found in [this blog post](https://vitess.io/blog/2022-01-11-schema-tracking/). + +## VTGate + +Schema tracking is enabled in VTGate with the flag `--schema_change_signal`, defaults to `true`. When enabled, VTGate listens for schema changes from VTTablet. +A change triggers a `GetSchema` rpc call to VTTablet to retrieve the stored schema. + +## VTTablet + +Schema tracking is enabled in VTTablet with the flag `--queryserver-config-schema-change-signal`, defaults to `true`. When enabled, VTTablet sends schema changes to VTGate when a DDL query executes. Additionally, VTTablet regularly checks for schema changes at a specified interval, which can be adjusted using the `--queryserver-config-schema-reload-time` flag. The default interval is set to 30 minutes. diff --git a/content/en/docs/21.0/reference/features/sharding.md b/content/en/docs/21.0/reference/features/sharding.md new file mode 100644 index 000000000..0501484be --- /dev/null +++ b/content/en/docs/21.0/reference/features/sharding.md @@ -0,0 +1,99 @@ +--- +title: Sharding +description: Shard widely, shard often. +weight: 1 +aliases: ['/docs/sharding/','/user-guide/sharding.html','/docs/reference/sharding/'] +--- + +Sharding is a method of horizontally partitioning a database to store data across two or more database servers. This document explains how sharding works in Vitess and the types of sharding that Vitess supports. + +## Overview + +A keyspace in Vitess can be sharded or unsharded. An unsharded keyspace maps directly to a MySQL database. If sharded, the rows of the keyspace are partitioned into different databases of identical schema. + +For example, if an application's "user" keyspace is split into two shards, each shard contains records for approximately half of the application's users. Each single user's information however, is stored in only one shard. + +Note that sharding is orthogonal to (MySQL) replication. A Vitess shard typically contains one MySQL primary and many MySQL replicas. The primary handles write operations, while replicas handle read-only traffic, batch processing operations, and other tasks. Each MySQL instance within the shard should have the same data, excepting some replication lag. + +### Supported Operations + +Vitess supports the following types of sharding operations: + +* **Horizontal sharding:** Splitting or merging shards in a sharded keyspace +* **Vertical sharding:** Moving tables from an unsharded keyspace to + a different keyspace. + +With these features, you can start with a single keyspace that contains all of your data (in multiple tables). As your database grows, you can move tables to different keyspaces (vertical split) and shard some or all of those keyspaces (horizontal split) without any real downtime for your application. + +## Sharding scheme + +Vitess allows you to choose the type of sharding scheme by the choice of your Primary Vindex for the tables of a shard. Once you have chosen the Primary Vindex, you can choose the partitions depending on how the resulting keyspace IDs are distributed. + +Vitess calculates the sharding key or keys for each query and then routes that query to the appropriate shards. For example, a query that updates information about a particular user might be directed to a single shard in the application's "user" keyspace. On the other hand, a query that retrieves information about several products might be directed to one or more shards in the application's "product" keyspace. + +### Key Ranges and Partitions + +Vitess uses key ranges to determine which shards should handle any particular query. + +* A **key range** is a series of consecutive keyspace ID values. It has starting and ending values. A key falls inside the range if it is equal to or greater than the start value and strictly less than the end value. +* A **partition** represents a set of key ranges that covers the entire space. + +When building the serving graph for a sharded keyspace, Vitess ensures that each shard is valid and that the shards collectively constitute a full partition. In each keyspace, one shard must have a key range with an empty start value and one shard, which could be the same shard, must have a key range with an empty end value. + +* An empty start value represents the lowest value, and all values are greater than it. +* An empty end value represents a value larger than the highest possible value, and all values are strictly lower than it. + +Vitess always converts sharding keys to a left-justified binary string for computing a shard. This left-justification makes the right-most zeroes insignificant and optional. Therefore, the value `0x80` is the middle value for sharding keys. So, in a keyspace with two shards, sharding keys that have a binary value lower than 0x80 are assigned to the first shard. Keys with a binary value equal to or higher than 0x80 are assigned to the other shard. + +Several sample key ranges are shown below: + +``` sh +Start=[], End=[]: Full Key Range +Start=[], End=[0x80]: Lower half of the Key Range. +Start=[0x80], End=[]: Upper half of the Key Range. +Start=[0x40], End=[0x80]: Second quarter of the Key Range. +Start=[0xFF00], End=[0xFF80]: Second to last 1/512th of the Key Range. +``` + +Two key ranges are consecutive if the end value of one range equals the start value of the other range. + +### Shard Names + +A shard's name identifies the start and end of the shard's key range, printed in hexadecimal and separated by a hyphen. For instance, if a shard's key range is the array of bytes beginning with [ 0x80 ] and ending, noninclusively, with [ 0xc0], then the shard's name is `80-c0`. + +Using this naming convention, the following four shards would be a valid full partition: + +* -40 +* 40-80 +* 80-c0 +* c0- + +Shards do not need to handle the same size portion of the key space. For example, the following five shards would also be a valid full partition, possibly with a highly uneven distribution of keys. + +* -80 +* 80-c0 +* c0-dc00 +* dc00-dc80 +* dc80- + +## Resharding + +Resharding describes the process of updating the sharding scheme for a keyspace and dynamically reorganizing data to match the new scheme. During resharding, Vitess copies, verifies, and keeps data up-to-date on new shards while the existing shards continue to serve live read and write traffic. When you're ready to switch over, the migration occurs with only a few seconds of read-only downtime. During that time, existing data can be read, but new data cannot be written. + +The table below lists the sharding (or resharding) processes that you would typically perform for different types of requirements: + +Requirement | Action +----------- | ------ +Uniformly increase read capacity | Add replicas or split shards +Uniformly increase write capacity | Split shards +Reclaim overprovisioned resources | Merge shards and/or keyspaces +Increase geo-diversity | Add new cells and replicas +Cool a hot tablet | For read access, add replicas or split shards. For write access, split shards. + +### Additional Tools and Processes + +Vitess provides the following tools to help manage range-based shards: + +* The [vtctl GenerateShardRanges](../../../reference/programs/vtctl/shards/#generateshardranges) command-line tool supports generating shard ranges based on the provided number of shards. +* There are additional [Shard specific vtctl](../../../reference/programs/vtctl/shards) command-line tools. +* Client APIs account for sharding operations. diff --git a/content/en/docs/21.0/reference/features/show.md b/content/en/docs/21.0/reference/features/show.md new file mode 100644 index 000000000..1498bf670 --- /dev/null +++ b/content/en/docs/21.0/reference/features/show.md @@ -0,0 +1,118 @@ +--- +title: SHOW extensions +weight: 9 +aliases: [] +--- + +In Vitess, `SHOW` has been extended with additional functionality. + +### SHOW Statements + +Vitess supports the following additional SHOW statements: + +* `SHOW GLOBAL GTID_EXECUTED [FROM ]` -- retrieves the global gtid_executed status variable from each shard in the keyspace either selected or provided in the query. +```shell +Example Output for customer keyspace: ++----------+-------------------------------------------+-------+ +| db_name | gtid_executed | shard | ++----------+-------------------------------------------+-------+ +| customer | e9148eb0-a320-11eb-8026-98af65a6dc4a:1-43 | 80- | +| customer | e0f64aca-a320-11eb-9be4-98af65a6dc4a:1-43 | -80 | ++----------+-------------------------------------------+-------+ +``` + +* `SHOW KEYSPACES` -- A list of keyspaces available. +```shell +Example Output: ++----------+ +| Database | ++----------+ +| commerce | +| customer | ++----------+ +``` + +* `SHOW VITESS_REPLICATION_STATUS [LIKE ""]` (**Experimental; 12.0+**) -- Shows the Replication (_not_ [VReplication](../../vreplication/vreplication/)) health for the Vitess deployment. It returns a row for each `REPLICA` and `RDONLY` tablet in the topology -- with support for filtering by Keyspace/Shard using a `LIKE` clause -- providing relevant health and status information, including the current [tablet throttler](../tablet-throttler/) status. +```shell +Example Output: ++----------+-------+------------+------------------+--------------+--------------------+-------------------------------------------------------------------------+----------------+-----------------------------------------+ +| Keyspace | Shard | TabletType | Alias | Hostname | ReplicationSource | ReplicationHealth | ReplicationLag | ThrottlerStatus | ++----------+-------+------------+------------------+--------------+--------------------+-------------------------------------------------------------------------+----------------+-----------------------------------------+ +| commerce | 0 | REPLICA | zone1-0000000101 | 52030e360852 | 52030e360852:17100 | {"EventStreamRunning":"Yes","EventApplierRunning":"Yes","LastError":""} | 0 | {"state":"OK","load":0.00,"message":""} | +| commerce | 0 | RDONLY | zone1-0000000102 | 52030e360852 | 52030e360852:17100 | {"EventStreamRunning":"Yes","EventApplierRunning":"Yes","LastError":""} | 0 | {"state":"OK","load":0.00,"message":""} | ++----------+-------+------------+------------------+--------------+--------------------+-------------------------------------------------------------------------+----------------+-----------------------------------------+ +``` + +* `SHOW VITESS_SHARDS` -- A list of shards that are available. +```shell +Example Output: ++--------------+ +| Shards | ++--------------+ +| commerce/0 | +| customer/-80 | +| customer/80- | ++--------------+ +``` + +* `SHOW VITESS_TABLETS` -- Information about the current Vitess tablets such as the keyspace, key ranges, tablet type, hostname, and status. +```shell +Example Output: ++-------+----------+-------+------------+---------+------------------+------------+----------------------+ +| Cell | Keyspace | Shard | TabletType | State | Alias | Hostname | PrimaryTermStartTime | ++-------+----------+-------+------------+---------+------------------+------------+----------------------+ +| zone1 | commerce | 0 | PRIMARY | SERVING | zone1-0000000100 | | 2021-04-22T04:10:29Z | +| zone1 | commerce | 0 | REPLICA | SERVING | zone1-0000000101 | | | +| zone1 | commerce | 0 | RDONLY | SERVING | zone1-0000000102 | | | +| zone1 | customer | -80 | PRIMARY | SERVING | zone1-0000000300 | | 2021-04-22T04:12:23Z | +| zone1 | customer | -80 | REPLICA | SERVING | zone1-0000000301 | | | +| zone1 | customer | -80 | RDONLY | SERVING | zone1-0000000302 | | | +| zone1 | customer | 80- | PRIMARY | SERVING | zone1-0000000400 | | 2021-04-22T04:12:23Z | +| zone1 | customer | 80- | REPLICA | SERVING | zone1-0000000401 | | | +| zone1 | customer | 80- | RDONLY | SERVING | zone1-0000000402 | | | ++-------+----------+-------+------------+---------+------------------+------------+----------------------+ +``` + +* `SHOW VSCHEMA KEYSPACES` -- Information about Vschema information for all the keyspaces including the foreign key mode, whether the keyspace is sharded, and if there is an error in the VSchema for the keyspace. +```shell +Example Output: ++----------+---------+-------------+---------+ +| Keyspace | Sharded | Foreign Key | Comment | ++----------+---------+-------------+---------+ +| ks | true | managed | | +| uks | false | managed | | ++----------+---------+-------------+---------+ +``` + +* `SHOW VSCHEMA TABLES` -- A list of tables available in the current keyspace's vschema. +```shell +Example Output for customer keyspace: ++----------+ +| Tables | ++----------+ +| corder | +| customer | +| dual | ++----------+ +``` + +* `SHOW VSCHEMA VINDEXES` -- Information about the current keyspace's vindexes such as the keyspace, name, type, params, and owner. Optionally supports an "ON" clause with a table name. +```shell +Example Output: ++----------+------+------+--------+-------+ +| Keyspace | Name | Type | Params | Owner | ++----------+------+------+--------+-------+ +| customer | hash | hash | | | ++----------+------+------+--------+-------+ +``` + +* `SHOW VITESS_THROTTLER STATUS` -- shows status for all tablet throttlers in current keyspace +```shell +Example Output: ++-------+---------+-----------+ +| shard | enabled | threshold | ++-------+---------+-----------+ +| -80 | 1 | 1.5 | +| 80- | 1 | 1.5 | ++-------+---------+-----------+ +``` diff --git a/content/en/docs/21.0/reference/features/tablet-throttler.md b/content/en/docs/21.0/reference/features/tablet-throttler.md new file mode 100644 index 000000000..2442e3b24 --- /dev/null +++ b/content/en/docs/21.0/reference/features/tablet-throttler.md @@ -0,0 +1,469 @@ +--- +title: Tablet throttler +weight: 21 +aliases: ['/docs/user-guides/tablet-throttler/','/docs/reference/tablet-throttler/'] +--- + +VTTablet runs a cooperative throttling service. This service probes the shard's MySQL topology and observes health, measure by replication lag, or by another metric delivered by custom query, on servers. The throttler is derived from GitHub's [freno](https://github.com/github/freno). + +## Why throttler: maintaining shard health via low replication lag + +Vitess uses MySQL with asynchronous or semi-synchronous replication. In these modes, each shard has a primary instance that applies changes and logs them to the binary log. The replicas for that shard will get binary log entries from the primary, potentially acknowledge them (if semi-synchronous replication is enabled), and apply them. A running replica normally applies the entries as soon as possible, unless it is stopped or configured to delay. However, if the replica is busy, then it may not have the resources to apply events in a timely fashion, and can therefore start lagging. For example, if the replica is serving traffic, it may lack the necessary disk I/O or CPU to avoid lagging behind the primary. + +Maintaining low replication lag is important in production for two reasons: + +- A lagging replica may not be representative of the data on the primary. Reads from the replica reflect data that is not consistent with the data on the primary. This is noticeable on web services following read-after-write from the replica, and this can produce results not reflecting the write. +- An up-to-date replica makes for a good failover experience. If all replicas are lagging, then a failover process must choose between waiting for a replica to catch up or losing data. + +Some common database operations include mass writes to the database, including the following: + +- Online schema migrations duplicating entire tables +- Mass population of columns, such as populating the new column with derived values following an `ADD COLUMN` migration +- Purging of old data +- Purging of tables as part of safe table `DROP` operation + +Other operations include mass reads from the database: + +- An ETL reading content of entire tables +- VReplication scanning an entire keyspace data and binary logs + +These operations can easily incur replication lag. However, these operations are typically not time-limited. It is possible to rate-limit them to reduce database load. + +This is where a throttler becomes useful. A throttler can detect when replication lag is low, a cluster is healthy, and operations can proceed. It can also detect when replication lag is high and advise applications to withhold the next operation. + +Applications are expected to break down their tasks into small sub-tasks. For example, instead of deleting `1,000,000` rows, an application should only delete `50` at a time. Between these sub-tasks, the application should check in with the throttler. + +The throttler is only intended for use with operations such as the above mass write/read cases. It should not be used for ongoing, normal OLTP queries. + +## Throttler overview + +Each `vttablet` runs an internal throttler service, and provides API endpoints to the throttler. Each tablet, including the primary, measures its own "self" health, discussed later. + +### Cluster health: + +In addition, the primary tablet is responsible for the overall health of the cluster/shard: + +- The throttler confirms it is still the primary tablet for its shard. +- Every `10sec`, the throttler uses the topology server to refresh the shard's tablets list. +- The throttler probes all `REPLICA` tablets (or other types of tablets, see [Configuration](#configuration)) for their own throttler metrics. This is done via gRPC. + - The throttler begins in dormant probe mode. As long as no application or client is actually looking for metrics, it probes the servers at multi-second intervals. + - When applications check for throttle advice, the throttler begins probing servers in subsecond intervals. It reverts to dormant probe mode if no requests are made in the duration of `1min`. +- The throttler aggregates the last probed values from all relevant tablets. This is _the cluster's metric_. + +The cluster's metric is only as accurate as the following metrics: + +- The probe interval +- The heartbeat injection interval +- The aggregation interval + +The error margin equals approximately the sum of the above values, plus additional overhead. The defaults for these intervals are as follows: + ++ Probe interval: `100ms` ++ Aggregation interval: `100ms` ++ Heartbeat interval: `250ms` + +The user may override the heartbeat interval by sending `-heartbeat_interval` flag to `vttablet`. + +Thus, the aggregated interval can be off, by default, by some `500ms`. This makes it inaccurate for evaluations that require high resolution lag evaluation. This resolution is sufficient for throttling purposes. + +### Self health + +Each tablet runs a local health check against its backend database, again in the form of evaluating replication lag from `_vt.heartbeat`. Intervals are identical to the cluster health interval illustrated above. + +### Response codes + +The throttler allows clients and applications to `check` for throttle advice. The check is an `HTTP` request, `HEAD` method, or `GET` method. Throttler returns one of the following HTTP response codes as an answer: + +- `200` (OK): The application may write to the data store. This is the desired response. +- `404` (Not Found): The check contains an unknown metric name. This can take place immediately upon startup or immediately after failover, and should resolve within 10 seconds. +- `417` (Expectation Failed): The requesting application is explicitly forbidden to write. The throttler does not implement this at this time. +- `429` (Too Many Requests): Do not write. A normal, expected state indicating there is replication lag. This is the hint for applications or clients to withhold writes. +- `500` (Internal Server Error): An internal error has occurred. Do not write. + +Normally, apps will see either `200` or `429`. An app should only ever proceed to write to the database when it receives a `200` response code. + +The throttler chooses the response by comparing the replication lag with a pre-defined _threshold_. If the lag is lower than the threshold, response can be `200` (OK). If the lag is higher than the threshold, the response would be `429` (Too Many Requests). + +The throttler only collects and evaluates lag on a set of predefined tablet types. By default, this tablet type set is `REPLICA`. See [Configuration](#configuration). + +When the throttler sees no relevant replicas in the shard, it allows writes by responding with `HTTP 200 OK`. + +## Custom metrics & queries + +The default behavior is to measure replication lag and throttle based on that lag. Vitess allows the user to use custom metrics and thresholds for throttling. + +Vitess only supports gauges for custom metrics: the user may define a query which returns a gauge value, an absolute metric by which Vitess can throttle. See [#Configuration](#configuration), below. + +## App management + +It is possible for the throttler to respond differently -- to some extent -- to different clients, or _apps_. When a client asks for the throttler's advice, it may identify itself by any arbitrary name, which the throttler terms the _app_. For example, `vreplication` workflows identify by the name "vreplication", and Online DDL operations use "online-ddl", etc. + +It is possible to _restrict_ the throttler's response to one or more apps. For example, it's possible to completely throttle "vreplication" while still responding `HTTP 200` to other apps. This is typically used to give way or precedence to one or two apps, or otherwise to further reduce the incoming load from a specific app. + +Starting `v18`, it is also possible to _exempt_ an app from throttling, even if the throttler is otherwise rejecting requests with metrics beyond the threshold. This is an advanced feature that users should treat with great care, and only in situations where they absolutely must give a specific workflow/migration the highest priority above all else. See discussion in examples, below. + +## Configuration + +{{< warning >}} +Per-tablet throttler configuration, as used in `v15` and supported in `v16`, is no longer supported in `v18`.{{< /warning >}} + +Throttler configuration is found in the [local topology server](../../../concepts/topology-service/). There is one configuration per keyspace. All shards and all tablets in all cells have the same throttler configuration: they are all enabled or disabled, and all share the same threshold or custom query. Since configuration is stored outside the tablet, it survives tablet restarts. + +`v16` introduced a new opt-in `vttablet` flag, `--throttler-config-via-topo`, and the flag defaulted `false`. In `v17` the flag now defaulted to `true`. In `v18`, the flag is not used anymore, and the tablet looks for configuration in the topology server, and will watch and apply any changes made there. + +The following flags are deprecated (and will be removed in `v19`): + +- `--throttle_threshold` +- `--throttle_metrics_query` +- `--throttle_metrics_threshold` +- `--throttle_check_as_check_self` +- `--throttler-config-via-topo` + +The following flag was removed: + +- `--enable_lag_throttler` + +Updating the throttler config is done via `vtctldclient`. For example: + +```sh +$ vtctldclient UpdateThrottlerConfig --enable --threshold 3.0 commerce +$ vtctldclient UpdateThrottlerConfig --disable commerce +$ vtctldclient UpdateThrottlerConfig --throttle-app "vreplication" --throttle-app-ratio 0.5 --throttle-app-duration "30m" commerce +``` + +See [vtctl UpdateThrottlerConfig](../../programs/vtctl/throttler#updatethrottlerconfig). + +If you are still using the `v15` flags, you will have to transition to the new throttler configuration scheme: first populate topo with a new throttler configuration via `UpdateThrottlerConfig`. At the very least, set a `--threshold`. You likely also want to `--enable`. Then, reconfigure `vttablet`s with `--throttler-config-via-topo`, and restart them. + +The list of tablet types included in the throttler's logic is dictated by `vttablet --throttle_tablet_types`. The value is a comma delimited list of tablet types. The default value is `"replica"`. You may, for example, set it to be `"replica,rdonly"`. + +## Heartbeat configuration + +The throttler requires heartbeat to be enabled via `vttablet` flags. We recommend enabling heartbeats via `--heartbeat_on_demand_duration` in conjunction with `--heartbeat_interval` as follows: + +- `--heartbeat_interval` indicates how frequently heartbeats are injected. The interval should over-sample the `--throttle_threshold` by a factor of `2` to `4`. Examples: + - If `--throttle_threshold` (replication lag) is `1s`, use `--heartbeat_interval 250ms`. + - If `--throttle_threshold` is `5s`, use an interval of `1s` or `2s`. +- `--heartbeat_on_demand_duration` ensures heartbeats are only injected when needed (e.g. during active VReplication workflows such as MoveTables or Online DDL). Heartbeats are written to the binary logs, and can therefore bloat them. If this is a concern, configure for example: `--heartbeat_on_demand_duration 5s`. This setting means: any throttler request starts a `5s` lease of heartbeat writes. + In normal times, heartbeats are not written. Once a throttle check is requested (e.g. by a running migration), the throttler asks the tablet to start a `5s` lease of heartbeats. that first check is likely to return a non-OK code, because heartbeats were stale. However, subsequent checks will soon pick up on the newly injected heartbeats. Checks made while the lease is held, further extend the lease time. In the scenario of a running migration, we can expect heartbeats to begin as soon as the migration begins, and terminate `5s` (in our example) after the migration completes. + A recommended value is a multiple of `--throttle_threshold`. If `--throttle_threshold` is `1s`, reasonable values would be `5s` to `60s`. + +Alternatively, you may choose to enable heartbeats unconditionally via `--heartbeat_enable`, again in conjunction with `--heartbeat_interval `. + +## API & usage + +Applications use these API endpoints: + +### Checks + +- `/throttler/check?app=`, for apps that wish to write mass amounts of data to a shard, and wish to maintain the overall health of the shard. This check is only applicable on the `PRIMARY` tablet. +- `/throttler/check-self`, for apps that wish to perform some operation (e.g. a massive _read_) on a specific tablet and only wish to maintain the health of that tablet. This check is applicable on all tablets. + +#### Examples: + +- `gh-ost` uses this throttler endpoint: `/throttler/check?app=online-ddl:gh-ost:&p=low` +- An app reading a massive amount of data directly from a replica tablet will use `/throttler/check-self?app=my_data_reader` + +A `HEAD` request is sufficient. A `GET` request also provides a `JSON` output. For example: + +- `{"StatusCode":200,"Value":0.207709,"Threshold":1,"Message":""}` +- `{"StatusCode":429,"Value":3.494452,"Threshold":1,"Message":"Threshold exceeded"}` +- `{"StatusCode":404,"Value":0,"Threshold":0,"Message":"No such metric"}` + +In the first two above examples we can see that the tablet is configured to throttle at `1sec` + +### Control + +All controls below apply to a given keyspace (`commerce` in the next examples). All of the keyspace's tablets, in all shards and cells, are affected. + +Enable the throttler: + +```sh +$ vtctldclient UpdateThrottlerConfig --enable commerce +``` + +Disable the throttler + +```sh +$ vtctldclient UpdateThrottlerConfig --disable commerce +``` + +Enable and also set a replication lag threshold: + +```sh +$ vtctldclient UpdateThrottlerConfig --enable --threshold 15.0 commerce +``` + +Set a custom query and a matching threshold. Does not affect enabled state: + +```sh +$ vtctldclient UpdateThrottlerConfig --custom-query "show global status like 'threads_running'" --threshold 40 --check-as-check-self commerce +``` + +In the above, we use `--check-as-check-self` because we want the shard's `PRIMARY`'s metric (concurrent threads) to be the throttling factor. + +Return to default throttling metric (replication lag): + +```sh +$ vtctldclient UpdateThrottlerConfig --custom-query "" --threshold 15.0 --check-as-check-shard commerce +``` + +In the above, we use `--check-as-check-self` because we want the shard's replicas metric (lag) to be the throttling factor. + +Throttle a specific app, `vreplication`, so that `80%` of its eligible requests are denied (slowing it down to `20%` potential speed), auto-expiring after `30` minutes: + +```sh +$ vtctldclient UpdateThrottlerConfig --throttle-app "vreplication" --throttle-app-ratio=0.8 --throttle-app-duration "30m" commerce +``` + +Unthrottle an app: + +```sh +$ vtctldclient UpdateThrottlerConfig --unthrottle-app "vreplication" commerce +``` + +An altrnative method to unthrottle is to set a throttling rule that expires immediately: + +```sh +$ vtctldclient UpdateThrottlerConfig --throttle-app "vreplication" --throttle-app-duration 0 commerce +``` + +Fully throttle all Online DDL (schema changes) for the next hour and a half: + +```sh +$ vtctldclient UpdateThrottlerConfig --throttle-app "online-ddl" --throttle-app-ratio=1.0 --throttle-app-duration "1h30m" commerce +``` + +Exempt `vreplication` from being throttled, even if otherwise the metrics are past the throttler threshold (e.g. replication lag is high): + +```sh +$ vtctldclient UpdateThrottlerConfig --throttle-app "vreplication" --throttle-app-duration "30m" --throttle-app-exempt commerce +``` + +Use the above with great care. Exempting one app can cause starvation to all other apps. Consider, for example, the common use case where throttling is based on replication lag. By exempting `vreplication`, it is free to grab all the resources it wants. It is possible and likely that it will drive replication lag higher than the threshold, which means all other throttler clients will be fully throttled and with all requests rejected. + +Exemption times out just as other throttling rules. To remove an exemption, any of the following will do: + +```sh +$ vtctldclient UpdateThrottlerConfig --throttle-app "vreplication" --throttle-app-exempt=false commerce +$ vtctldclient UpdateThrottlerConfig --throttle-app "vreplication" --throttle-app-duration "0" commerce +$ vtctldclient UpdateThrottlerConfig --unthrottle-app "vreplication" commerce +``` + +### Information + +Throttler configuration is part of the `Keyspace` entry: + +```sh +$ vtctldclient GetKeyspace commerce +``` + +```json +{ + "name": "commerce", + "keyspace": { + "served_froms": [], + "keyspace_type": 0, + "base_keyspace": "", + "snapshot_time": null, + "durability_policy": "semi_sync", + "throttler_config": { + "enabled": true, + "threshold": 15.0, + "custom_query": "", + "check_as_check_self": false, + "throttled_apps": { + "vreplication": { + "name": "vreplication", + "ratio": 0.5, + "expires_at": { + "seconds": "1687864412", + "nanoseconds": 142717831 + } + } + } + }, + "sidecar_db_name": "_vt" + } +} +``` + +- `/throttler/status` endpoint. This is useful for monitoring and management purposes. + +Vitess also accepts the SQL syntax: + +- `SHOW VITESS_THROTTLER STATUS`: returns the status for all primary tables in the keyspace. See [MySQL Query Extensions](../mysql-query-extensions/#show-statements). + +#### Example: Healthy primary tablet + +The following command gets throttler status on a primary tablet hosted on `tablet1`, serving on port `15100`. + +```shell +$ curl -s 'http://tablet1:15100/throttler/status' | jq . +``` + +This API call returns the following JSON object: + +```json +{ + "Keyspace": "commerce", + "Shard": "80-c0", + "IsLeader": true, + "IsOpen": true, + "IsDormant": false, + "Query": "select unix_timestamp(now(6))-max(ts/1000000000) as replication_lag from _vt.heartbeat", + "Threshold": 1, + "AggregatedMetrics": { + "mysql/self": { + "Value": 0.749837 + }, + "mysql/shard": { + "Value": 0.749887 + } + }, + "MetricsHealth": { + "mysql/self": { + "LastHealthyAt": "2021-01-24T19:03:19.141933727+02:00", + "SecondsSinceLastHealthy": 0 + }, + "mysql/shard": { + "LastHealthyAt": "2021-01-24T19:03:19.141974429+02:00", + "SecondsSinceLastHealthy": 0 + } + } +} +``` + +The primary tablet serves two types of metrics: + +- `mysql/shard`: an aggregated lag on relevant replicas in this shard. This is the metric to check when writing massive amounts of data to this server. +- `mysql/self`: the health of the specific primary MySQL server backed by this tablet. + +`"IsLeader": true` indicates this tablet is active, is the `primary`, and is running probes. +`"IsDormant": false,` means that an application has recently issued a `check`, and the throttler is probing for lag at high frequency. + +#### Example: replica tablet + +The following command gets throttler status on a replica tablet hosted on `tablet2`, serving on port `15100`. + +```shell +$ curl -s 'http://tablet2:15100/throttler/status' | jq . +``` + +This API call returns the following JSON object: + +```json +{ + "Keyspace": "commerce", + "Shard": "80-c0", + "IsLeader": false, + "IsOpen": true, + "IsDormant": false, + "Query": "select unix_timestamp(now(6))-max(ts/1000000000) as replication_lag from _vt.heartbeat", + "Threshold": 1, + "AggregatedMetrics": { + "mysql/self": { + "Value": 0.346409 + } + }, + "MetricsHealth": { + "mysql/self": { + "LastHealthyAt": "2021-01-24T19:04:25.038290475+02:00", + "SecondsSinceLastHealthy": 0 + } + } +} +``` + +The replica tablet only presents `mysql/self` metric (measurement of its own backend MySQL's lag). It does not serve checks for the shard in general. + +### Metrics + +The tablet throttler exports several metrics using the expvars interface. These are available at the `/debug/vars` endpoint of vttablet's http status pages. [More details can be found here](../../features/monitoring/#3-push-based-metrics-system). + +#### Aggregated metrics + +These are the metrics by which the throttler compares with the threshold and decides whether to accept or reject throttle checks. + +##### `ThrottlerAggregatedMysqlSelf` + +Gauge, the current metric value of the tablet. This is the result of a self-check, done continuously when the throttler is enabled. + +##### `ThrottlerAggregatedMysqlShard` + +Gauge, on the `PRIMARY` tablet only, this is the aggregated collected metric value from all serving shard tables, excluding the `PRIMARY`. The `PRIMARY` tablet continuously probes the serving tablets for this metric. As the default collected metric is replication lag, the aggregated value is the highest lag across the probed tablets. + +#### Check metrics + +The throttler is checked by apps (`vreplication`, `online-ddl`, etc), and responds with status codes, "OK" for "good to proceed" or any other code for "hold off". + +At this time the throttler only runs checks with the backend MySQL server. It has the potential to check other input sources. + +##### `ThrottlerCheckAnyTotal` + +Counter, number of times the throttler has been checked. Tracking this metrics shows the traffic the throttler receives. The value should only increase when an app uses the throttler. + +This metric excludes some internal apps (e.g. the schema tracker) that are always on, but does include the throttler's self checks (see following). + +##### `ThrottlerCheckAnyError` + +Counter. Included in `ThrottlerCheckAnyTotal`, indicating how many times the throttler rejected a check. + +##### `ThrottlerCheckAnyMysqlSelfTotal` + +Counter. Number of MySQL self-checks this throttler made. Included in `ThrottlerCheckAnyTotal`. + +##### `ThrottlerCheckAnyMysqlSelfError` + +Counter. Included in `ThrottlerCheckAnyMysqlSelfTotal`, indicating how many times the MySQL self-check resulted in rejection. + +##### `ThrottlerCheckAnyMysqlShardTotal` + +Counter. Number of MySQL shard-checks this throttler made. Included in `ThrottlerCheckAnyTotal`. + +##### `ThrottlerCheckAnyMysqlShardError` + +Counter. Included in `ThrottlerCheckAnyMysqlShardTotal`, indicating how many times the MySQL shard-check resulted in rejection. + +##### `ThrottlerCheckMysqlSelfSecondsSinceHealthy` + +Gauge, number of seconds since the last good MySQL self-check. + +##### `ThrottlerCheckMysqlShardSecondsSinceHealthy` + +Gauge, number of seconds since the last good MySQL shard-check. + +#### Internal throttler metrics + +These metrics are helpful when analyzing the throttler behavior, how it interacts with other shard throttlers, its heartbeat mechanism. + +##### `ThrottlerProbesTotal` + +The throttler probes for metrics independently of checks. Once probed, the result metric is cached, and any further checks are based on that cached value. Further probes overwrite that cached value. + +Counter. Total number of probes this throttler made. This includes self probes (e.g. to get the self MySQL metric) and, on `PRIMARY`, the shard probes (e.g. getting MySQL metrics from all serving replicas). + +##### `ThrottlerProbesLatency` + +Gauge. Time in nanoseconds of last probe. This serves as a general heuristic only for network latency. + +##### `ThrottlerRecentlyChecked` + +Gauge, `0` or `1`, indicating whether a throttler was "recently" checked by some app. "Recent" is measured in a few seconds. A `PRIMARY` throttler that has been recently checked requests a heartbeat lease. A non `PRIMARY` throttler makes the `RecentlyChecked` information available in `CheckThrottlerResponse` response to `CheckThrottler` gRPC. + +##### `ThrottlerProbeRecentlyChecked` + +Gauge, `0` or `1`, on a `PRIMARY` tablet only, indicating when a replica probe responds with `RecentlyChecked: true`. In such case, the `PRIMARY` throttler proceeds to request a heartbeat lease. + +##### `ThrottlerCheckRequest` + +Counter. Number of times throttler was probed via `CheckRequest` gRPC. + +##### `ThrottlerHeartbeatRequests` + +Counter. Number of times the throttler has requested a heartbeat lease. Correlated with `HeartbeatWrites` metric, and specifically when `--heartbeat_on_demand_duration` is set, this helps diagnose throttler/heartbeat negotiation and behavior. + +## Resources + +- [freno](https://github.com/github/freno) project page +- [Mitigating replication lag and reducing read load with freno](https://github.blog/2017-10-13-mitigating-replication-lag-and-reducing-read-load-with-freno/), a GitHub Engineering blog post diff --git a/content/en/docs/21.0/reference/features/topology-service.md b/content/en/docs/21.0/reference/features/topology-service.md new file mode 100644 index 000000000..ac4ee0328 --- /dev/null +++ b/content/en/docs/21.0/reference/features/topology-service.md @@ -0,0 +1,746 @@ +--- +title: Topology Service +weight: 20 +aliases: ['/docs/user-guides/topology-service/','/docs/reference/topology-service/'] +--- + +This document describes the Topology Service, a key part of the Vitess architecture. This service is exposed to all Vitess processes, and is used to store small pieces of configuration data about the Vitess cluster, and provide cluster-wide locks. It also supports watches, and primary election. + +Vitess uses a plugin implementation to support multiple backend technologies for the Topology Service (etcd, ZooKeeper, Consul). Concretely, the Topology Service handles two functions: it is both a [distributed lock manager](http://en.wikipedia.org/wiki/Distributed_lock_manager) and a repository for topology metadata. In earlier versions of Vitess, the Topology Serice was also referred to as the Lock Service. + +## Requirements and usage + +The Topology Service is used to store information about the Keyspaces, the +Shards, the Tablets, the Replication Graph, and the Serving Graph. We store +small data structures (a few hundred bytes) per object. + +The main contract for the Topology Service is to be very highly available and +consistent. It is understood it will come at a higher latency cost and very low +throughput. + +We never use the Topology Service as an RPC or queuing mechanism or as a storage +system for logs. We never depend on the Topology Service being responsive and +fast to serve every query. + +The Topology Service must also support a Watch interface, to signal when certain +conditions occur on a node. This is used, for instance, to know when the Keyspace +topology changes (e.g. for resharding). + +### Global vs Local + +We differentiate two instances of the Topology Service: the Global instance, and +the per-cell Local instance: + +* The Global instance is used to store global data about the topology that + doesn’t change very often, e.g. information about Keyspaces and Shards. + The data is independent of individual instances and cells, and needs + to survive a cell going down entirely. +* There is one Local instance per cell, that contains cell-specific information, + and also rolled-up data from the Global + Local cell to make it easier for + clients to find the data. The Vitess local processes should not use the Global + topology instance, but instead the rolled-up data in the Local topology + server as much as possible. + +The Global instance can go down for a while and not impact the local cells (an +exception to that is if a reparent needs to be processed, it might not work). If +a Local instance goes down, it only affects the local tablets in that instance +(and then the cell is usually in bad shape, and should not be used). + +Vitess will not use the global or local topology service as part of serving individual queries. The Topology Service is only used to get the topology information at startup and in the background. + +### Recovery + +If a Local Topology Service dies and is not recoverable, it can be wiped out. All +the tablets in that cell then need to be restarted so they re-initialize their +topology records (but they won’t lose any MySQL data). + +If the Global Topology Service dies and is not recoverable, this is more of a +problem. All the Keyspace / Shard objects have to be recreated or be restored. +Then the cells should recover. + +## Global data + +This section describes the data structures stored in the Global instance of the +topology service. + +### Keyspace + +The Keyspace object contains various information, mostly about sharding: how is +this Keyspace sharded, what is the name of the sharding key column, is this +Keyspace serving data yet, how to split incoming queries, … + +An entire Keyspace can be locked. We use this during resharding for instance, +when we change which Shard is serving what inside a Keyspace. That way we +guarantee only one operation changes the Keyspace data concurrently. + +### Shard + +A Shard contains a subset of the data for a Keyspace. The Shard record in the +Global topology service contains: + +* the primary tablet alias for this shard (that has the MySQL primary). +* the sharding key range covered by this Shard inside the Keyspace. +* the tablet types this Shard is serving (primary, replica, batch, …), per cell + if necessary. +* if using filtered replication, the source shards this shard is replicating + from. +* the list of cells that have tablets in this shard. +* shard-global tablet controls, like denied tables no tablet should serve + in this shard. + +A Shard can be locked. We use this during operations that affect either the +Shard record, or multiple tablets within a Shard (like reparenting), so multiple +tasks cannot concurrently alter the data. + +### VSchema data + +The VSchema data contains sharding and routing information for +the [VTGate API](https://github.com/vitessio/vitess/blob/main/doc/design-docs/VTGateV3Features.md). + +## Local data + +This section describes the data structures stored in the Local instance (per +cell) of the topology service. + +### Tablets + +The Tablet record has a lot of information about each vttablet process +making up each tablet (along with the MySQL process): + +* the Tablet Alias (cell+unique id) that uniquely identifies the Tablet. +* the Hostname, IP address and port map of the Tablet. +* the current Tablet type (primary, replica, batch, spare, …). +* which Keyspace / Shard the tablet is part of. +* the sharding Key Range served by this Tablet. +* user-specified tag map (e.g. to store per-installation data). + +A Tablet record is created before a tablet can be running (by passing the `init_*` parameters to the vttablet process). +The only way a Tablet record will be updated is one of: + +* The vttablet process itself owns the record while it is running, and can + change it. +* At init time, before the tablet starts. +* After shutdown, when the tablet gets deleted. +* If a tablet becomes unresponsive, it may be forced to spare to make it + unhealthy when it restarts. + +### Replication graph + +The Replication Graph allows us to find Tablets in a given Cell / Keyspace / +Shard. It used to contain information about which Tablet is replicating from +which other Tablet, but that was too complicated to maintain. Now it is just a +list of Tablets. + +### Serving graph + +The Serving Graph is what the clients use to find the per-cell topology of a +Keyspace. It is a roll-up of global data (Keyspace + Shard). vtgates only open a +small number of these objects and get all the information they need quickly. + +#### SrvKeyspace + +It is the local representation of a Keyspace. It contains information on what +shard to use for getting to the data (but not information about each individual +shard): + +* the partitions map is keyed by the tablet type (primary, replica, batch, …) and + the value is a list of shards to use for serving. +* it also contains the global Keyspace fields, copied for fast access. + +It can be rebuilt by running `vtctl RebuildKeyspaceGraph `. It is +automatically rebuilt when a tablet starts up in a cell and the SrvKeyspace +for that cell / keyspace does not exist yet. It will also be changed +during horizontal and vertical splits. + +#### SrvVSchema + +It is the local roll-up for the VSchema. It contains the VSchema for all +keyspaces in a single object. + +It can be rebuilt by running `vtctl RebuildVSchemaGraph`. It is automatically +rebuilt when using `vtctl ApplyVSchema` (unless prevented by flags). + +## Workflows involving the Topology Service + +The Topology Service is involved in many Vitess workflows. + +When a Tablet is initialized, we create the Tablet record, and add the Tablet to +the Replication Graph. If it is the primary for a Shard, we update the global +Shard record as well. + +Administration tools need to find the tablets for a given Keyspace / Shard. To retrieve this: + +* first we get the list of Cells that have Tablets for the Shard (global topology +Shard record has these) +* then we use the Replication Graph for that Cell / +Keyspace / Shard to find all the tablets then we can read each tablet record. + +When a Shard is reparented, we need to update the global Shard record with the +new primary alias. + +Finding a tablet to serve the data is done in two stages: + +* vtgate maintains a health check connection to all possible tablets, and they +report which Keyspace / Shard / Tablet type they serve. +* vtgate also reads the SrvKeyspace object, to find out the shard map. + +With these two pieces of information, vtgate can route the query to the right vttablet. + +During resharding events, we also change the topology significantly. A horizontal split +will change the global Shard records, and the local SrvKeyspace records. A +vertical split will change the global Keyspace records, and the local +SrvKeyspace records. + +## Exploring the data in a Topology Service + +We store the proto3 serialized binary data for each object. + +We use the following paths for the data, in all implementations: + +*Global Cell*: + +* CellInfo path: `cells//CellInfo` +* Keyspace: `keyspaces//Keyspace` +* Shard: `keyspaces//shards//Shard` +* VSchema: `keyspaces//VSchema` + +*Local Cell*: + +* Tablet: `tablets/-/Tablet` +* Replication Graph: `keyspaces//shards//ShardReplication` +* SrvKeyspace: `keyspaces//SrvKeyspace` +* SrvVSchema: `SvrVSchema` + +The `vtctl TopoCat` utility can decode these files when using the +`--decode_proto` option: + +``` sh +GLOBAL_TOPOLOGY="--topo_implementation zk2 --topo_global_server_address global_server1,global_server2 --topo_global_root /vitess/global" + +$ vtctl ${GLOBAL_TOPOLOGY} TopoCat -- --decode_proto --long /keyspaces/*/Keyspace +path=/keyspaces/ks1/Keyspace version=53 +sharding_column_name: "col1" +path=/keyspaces/ks2/Keyspace version=55 +sharding_column_name: "col2" +``` + +The VTAdmin web tool also contains a topology browser (use the `Topology` +tab on the left side). It will display the various proto files, decoded. + +## Implementations + +The Topology Service interfaces are defined in our code in `go/vt/topo/`, +specific implementations are in `go/vt/topo/`, and we also have +a set of unit tests for it in `go/vt/topo/test`. + +This part describes the implementations we have, and their specific +behavior. + +If starting from scratch, please use the `zk2`, `etcd2` or `consul` +implementations. We deprecated the old `zookeeper` and `etcd` +implementations. See the migration section below if you want to migrate. + +### Zookeeper `zk2` implementation + +This is the current implementation when using Zookeeper. (The old `zookeeper` +implementation is deprecated). + +The global cell typically has around 5 servers, distributed one in each +cell. The local cells typically have 3 or 5 servers, in different server racks / +sub-networks for higher resilience. For our integration tests, we use a single +ZK server that serves both global and local cells. + +We provide the `zk` utility for easy access to the topology data in +Zookeeper. It can list, read and write files inside any Zoopeeker server. Just +specify the `-server` parameter to point to the Zookeeper servers. Note the +VTAdmin UI can also be used to see the contents of the topology data. + +To configure a Zookeeper installation, let's start with the global cell +service. It is described by the addresses of the servers (comma separated list), +and by the root directory to put the Vitess data in. For instance, assuming we +want to use servers `global_server1,global_server2` in path `/vitess/global`: + +``` sh +# The root directory in the global server will be created +# automatically, same as when running this command: +# zk -server global_server1,global_server2 touch -p /vitess/global + +# Set the following flags to let Vitess use this global server: +# --topo_implementation zk2 +# --topo_global_server_address global_server1,global_server2 +# --topo_global_root /vitess/global +``` + +Then to add a cell whose local topology service `cell1_server1,cell1_server2` +will store their data under the directory `/vitess/cell1`: + +``` sh +GLOBAL_TOPOLOGY="--topo_implementation zk2 --topo_global_server_address global_server1,global_server2 --topo_global_root /vitess/global" + +# Reference cell1 in the global topology service: +vtctl ${GLOBAL_TOPOLOGY} AddCellInfo -- \ + --server_address cell1_server1,cell1_server2 \ + --root /vitess/cell1 \ + cell1 +``` + +If only one cell is used, the same Zookeeper instance can be used for both +global and local data. A local cell record still needs to be created, just use +the same server address, and very importantly a *different* root directory. + +[Zookeeper Observers](https://zookeeper.apache.org/doc/current/zookeeperObservers.html) can +also be used to limit the load on the global Zookeeper. They are configured by +specifying the addresses of the observers in the server address, after a `|`, +for instance: +`global_server1:p1,global_server2:p2|observer1:po1,observer2:po2`. + +#### Implementation details + +We use the following paths for Zookeeper specific data, in addition to the +regular files: + +* Locks sub-directory: `locks/` (for instance: + `keyspaces//Keyspace/locks/` for a keyspace) +* Leader election path: `elections/` + +Both locks and primary election are implemented using ephemeral, sequential files +which are stored in their respective directory. + +### etcd `etcd2` implementation (new version of `etcd`) + +This topology service plugin is meant to use etcd clusters as storage backend +for the topology data. This topology service supports version 3 and up of the +etcd server. + +This implementation is named `etcd2` because it supersedes our previous +implementation `etcd`. Note that the storage format has been changed with the +`etcd2` implementation, i.e. existing data created by the previous `etcd` +implementation must be migrated manually (See migration section below). + +To configure an `etcd2` installation, let's start with the global cell +service. It is described by the addresses of the servers (comma separated list), +and by the root directory to put the Vitess data in. For instance, assuming we +want to use servers `http://global_server1,http://global_server2` in path +`/vitess/global`: + +``` sh +# Set the following flags to let Vitess use this global server, +# and simplify the example below: +# --topo_implementation etcd2 +# --topo_global_server_address http://global_server1,http://global_server2 +# --topo_global_root /vitess/global +GLOBAL_TOPOLOGY="--topo_implementation etcd2 --topo_global_server_address http://global_server1,http://global_server2 --topo_global_root /vitess/global" +``` + +Then to add a cell whose local topology service +`http://cell1_server1,http://cell1_server2` will store their data under the +directory `/vitess/cell1`: + +``` sh +# Reference cell1 in the global topology service: +# (the TOPOLOGY variable is defined in the previous section) +vtctl ${GLOBAL_TOPOLOGY} AddCellInfo -- \ + --server_address http://cell1_server1,http://cell1_server2 \ + --root /vitess/cell1 \ + cell1 +``` + +If only one cell is used, the same etcd instances can be used for both +global and local data. A local cell record still needs to be created, just use +the same server address and, very importantly, a *different* root directory. + +#### Implementation details + +For locks, we use a subdirectory named `locks` in the directory to lock, and an +ephemeral file in that subdirectory (it is associated with a lease, whose TTL +can be set with the `--topo_etcd_lease_duration` flag, defaults to 30 +seconds). The ephemeral file with the lowest ModRevision has the lock, the +others wait for files with older ModRevisions to disappear. + +Leader elections also use a subdirectory, named after the election Name, and use +a similar method as the locks, with ephemeral files. + +We store the proto3 binary data for each object (as the API allows us to store +binary data). Note that this means that if you want to interact with etcd using +the `etcdctl` tool, you will have to tell it to use the v3 API, e.g.: + +``` +ETCDCTL_API=3 etcdctl get / --prefix --keys-only +``` + +### Consul `consul` implementation + +This topology service plugin is meant to use Consul clusters as storage backend +for the topology data. + +To configure a `consul` installation, let's start with the global cell +service. It is described by the address of a server, +and by the root node path to put the Vitess data in (it cannot start with `/`). For instance, assuming we +want to use servers `global_server:global_port` with node path +`vitess/global`: + +``` sh +# Set the following flags to let Vitess use this global server, +# and simplify the example below: +# --topo_implementation consul +# --topo_global_server_address global_server:global_port +# --topo_global_root vitess/global +GLOBAL_TOPOLOGY="--topo_implementation consul --topo_global_server_address global_server:global_port --topo_global_root vitess/global" +``` + +Then to add a cell whose local topology service +`cell1_server1:cell1_port` will store their data under the +directory `vitess/cell1`: + +``` sh +# Reference cell1 in the global topology service: +# (the TOPOLOGY variable is defined in the previous section) +vtctl ${GLOBAL_TOPOLOGY} AddCellInfo -- \ + --server_address cell1_server1:cell1_port \ + --root vitess/cell1 \ + cell1 +``` + +If only one cell is used, the same consul instances can be used for both +global and local data. A local cell record still needs to be created, just use +the same server address and, very importantly, a *different* root node path. + +#### Implementation details + +For locks, we use a file named `Lock` in the directory to lock, and the regular +Consul Lock API. + +Leader elections use a single lock file (the Election path) and the regular +Consul Lock API. The contents of the lock file is the ID of the current primary. + +Watches use the Consul long polling Get call. They cannot be interrupted, so we +use a long poll whose duration is set by the +`-topo_consul_watch_poll_duration` flag. Canceling a watch may have to +wait until the end of a polling cycle with that duration before returning. + +## Running multi cell environments + +When running an environment with multiple cells, it is essential to first create +and configure your global topology service. Then define each local topology +service to the global topology. As mentioned previously, the global +and local topology service can reside on the same or separate implementation of +etcd, zookeeper, or consul. At a higher level overview: + +* Create or locate an existing instance of etcd, zookeeper, or consul for the + global topology service. +* Use vtctl client commands to initialize the global topology service, + providing the global topology implementation, and root directory. + NOTE: for best practices the root dir should be set to `/vitess/global` (on + consul this should be `vitess/global`). +* (Optional) For each cell create an instance of etcd, zookeeper, or consul for + the local topology service. This step is optional as you may use the existing + implementation used by the global topology service. If you create a new local + instances, the technologies must match. For example, if you are using etcd for + your global topology service then you must use etcd for your local topology + service. +* For each cell, using the vtctl client commands, define the local topology + service with the global topology service. This is done by providing the global + topology service with the cell name, the local topology service, and the root + directory. NOTE: for best practices the local root dir should be set to + `/vitess/${CELL_NAME}` (on consul this should be `vitess/${CELL_NAME}`) where `${CELL_NAME}` is the location of the cell + `us-east-1, eu-west-2, etc`. +* When starting a vttablet instance you must provide the global topology service + as well as the `-tablet-path`, which implicitly includes the cell details. + With this information the vttablet process will read the local topology + details from the global topology server. +* When starting a vtgate instance, you will provide the global topology + service, as well as the `-cell` flag to explicitly provide the cell details. + With this information the vtgate process will retrieve the connection details + it needs to connect to the applicable local topology server(s). Unlike the + vttablet process, if you are watching more than one cell, in `--cells_to_watch` + you may connect to multiple local topology services. + + +### Simple local configuration + +For this example run through, we will be using two etcd services one for +the global and one for local topology service. + +{{< warning >}} +Production environments can and should be configured with multiple +topology instances at the global and local levels. +{{< /warning >}} + + +1. Create the global etcd service + +``` sh +export VTDATAROOT="/vt" +TOKEN="SOMETHING_UNIQ_HERE" +GLOBAL_ETCD_IP="192.168.0.2" +GLOBAL_ETCD_SERVER="http://${GLOBAL_ETCD_IP}:2379" +GLOBAL_ETCD_PEER_SERVER="http://${GLOBAL_ETCD_IP}:2380" + +etcd --enable-v2=true --data-dir ${VTDATAROOT}/etcd/global --listen-client-urls ${GLOBAL_ETCD_SERVER} \ + --name=global --advertise-client-urls ${GLOBAL_ETCD_SERVER} --listen-peer-urls ${GLOBAL_ETCD_PEER_SERVER} \ + --initial-advertise-peer-urls ${GLOBAL_ETCD_PEER_SERVER} --initial-cluster global=${GLOBAL_ETCD_PEER_SERVER} \ + --initial-cluster-token=${TOKEN} --initial-cluster-state=new \ + ${OTHER_ETCD_FLAGS} +``` + +2. Configure vtctld to use the global topology service + +``` sh +vtctld --topo_implementation=etcd2 --topo_global_server_address=${GLOBAL_ETCD_SERVER} \ + --topo_global_root=/vitess/global --port=15000 --grpc_port=15999 --service_map='grpc-vtctl,grpc-vtctld' \ + ${OTHER_VTCTLD_FLAGS} +``` + +3. Create a local etcd instance to store our cell information + +``` sh +CELL_NAME="US_EAST" +CELL_TOKEN="${CELL_NAME}" +CELL_ETCD_IP="192.168.0.3" +CELL_ETCD_SERVER="http://${CELL_ETCD_IP}:2379" +CELL_ETCD_PEER_SERVER="http://${CELL_ETCD_IP}:2380" + +etcd --enable-v2=true --data-dir ${VTDATAROOT}/etcd/${CELL_NAME} --listen-client-urls ${CELL_ETCD_SERVER} \ + --name=${CELL_NAME} --advertise-client-urls ${CELL_ETCD_SERVER} --listen-peer-urls ${CELL_ETCD_PEER_SERVER} \ + --initial-advertise-peer-urls ${CELL_ETCD_PEER_SERVER} --initial-cluster ${CELL_NAME}=${CELL_ETCD_PEER_SERVER} \ + --initial-cluster-token=${CELL_TOKEN} --initial-cluster-state=new \ + ${OTHER_ETCD_FLAGS} +``` + +4. Define the local topology service in the global topology service using vtctl +client commands. We are providing the global topolgy server three pieces of +information about the local topology service: + * `--root=` the root of our local topology server + * `--server_address` comma separated connection details to our local etcd + instance(s). In this example, it is only a single instance + * `${CELL_NAME}` the name of our local cell in this case `US_EAST` + +``` sh +# vtctldclient uses the IP address of the vtctld daemon with the `--server` flag +# The daemon already has the global topology information, therefore, we do not +# need to explicitly provide these details. + +vtctldclient --server ${VTCTLD_IP}:15999 AddCellInfo -- \ + --root=/vitess/${CELL_NAME} \ + --server-address=${CELL_ETCD_SERVER} \ + ${CELL_NAME} +``` + +5. When starting up a new vttablet instances, you will need to provide +the global topology details, as well as the alias of the tablet, provided through +`--tablet-path=${TABLET_ALIAS}`. With the alias vttablet will acquire the cell +name and retrieve the local topology information from the global topology server. +NOTE: the `${TABLET_ALIAS}` variable is composed of two parts, the `${CELL_NAME}` +and the `${TABLET_UID}`. The `${TABLET_ALIAS}` must be unique within the cluster +and the `${TABLET_UID}` must be unique numerical value within the cell. + +```sh +# vttablet implementation +GLOBAL_TOPOLOGY="--topo_implementation etcd2 --topo_global_server_address ${GLOBAL_ETCD_SERVER} --topo_global_root /vitess/global" +TABLET_UID="100" +CELL_NAME="US_EAST" +TABLET_ALIAS="${CELL_NAME}-${TABLET_UID}" +KEYSPACE="CustomerInfo" + +vttablet ${GLBOAL_TOPOLOGY} --tablet-path=${TABLET_ALIAS} --tablet_dir=${VTDATAROOT}/${TABLET_ALIAS} \ + --mycnf-file=${VTDATAROOT}/${TABLET_ALIAS}/my.cnf --init_keyspace=${KEYSPACE} \ + --init_shard=0 --init_tablet_type=replica --port=15100 --grpc_port=16100 \ + --service_map='grpc-queryservice,grpc-tabletmanager,grpc-updatestream' \ + ${OTHER_VTTABLET_FLAGS} +``` + +5. When starting up a new vtgate instances, you will explicitly provide cell +details with `--cell` flag, and the global topology details. vtgate may be aware +of additional local topology services if `--cells_to_watch` contains more than +one cell. Local Topology information will be retrieved from the global toplogy +server for each cell vtgate is aware of. + +```sh +# vtgate implementation +GLOBAL_TOPOLOGY="--topo_implementation etcd2 --topo_global_server_address ${GLOBAL_ETCD_SERVER} --topo_global_root /vitess/global" +CELL_NAME="US_EAST" + +vtgate ${GLOBAL_TOPOLOGY} --cell=${CELL_NAME} --cells_to_watch=${CELL_NAME} --port=15001 --grpc_port=15991 \ +--mysql_server_port=25306 --mysql_auth_server_impl=none --service_map='grpc-vtgateservice' \ +--tablet_types_to_wait PRIMARY,REPLICA \ +${OTHER_VTGATE_FLAGS} +``` + +6. You can repeat steps 3 through 5 above to create each cell as needed. If you +have a vtgate instance that is watching a new and old cell with `-cells_to_watch`, +you may have to rebuild the topology for the Keyspace and VSchema. This will +propagate information from the global topology service back to the local topology +services + +```sh +vtctldclient --server ${VTCTLD_IP}:15999 RebuildKeyspaceGraph ${KEYSPACE_NAME} +vtctldclient --server ${VTCTLD_IP}:15999 RebuildVSchemaGraph +``` + + +## Running single cell environments + +The topology service is meant to be distributed across multiple cells, and +survive single cell outages. However, one common usage is to run a Vitess +cluster in only one cell / region. This part explains how to do this, and later +on upgrade to multiple cells / regions. + +If running in a single cell, the same topology service can be used for both +global and local data. A local cell record still needs to be created, just use +the same server address and, very importantly, a *different* root node path. + +In that case, just running 3 servers for topology service quorum is probably +sufficient. For instance, 3 etcd servers. And use their address for the local +cell as well. Let's use a short cell name, like `local`, as the local data in +that topology service will later on be moved to a different topology service, +which will have the real cell name. + +### Extending to more cells + +To then run in multiple cells, the current topology service needs to be split +into a global instance and one local instance per cell. Whereas, the initial +setup had 3 topology servers (used for global and local data), we recommend to +run 5 global servers across all cells (for global topology data) and 3 local +servers per cell (for per-cell topology data). + +To migrate to such a setup, start by adding the 3 local servers in the second +cell and run `vtctldclient AddCellInfo` as was done for the first cell. Tablets and +vtgates can now be started in the second cell, and used normally. + +vtgate can then be configured with a list of cells to watch for tablets using +the `--cells_to_watch` command line parameter. It can then use all tablets in +all cells to route traffic. Note this is necessary to access the primary in +another cell. + +After the extension to two cells, the original topo service contains both the +global topology data, and the first cell topology data. The more symmetrical +configuration we are after would be to split that original service into two: a +global one that only contains the global data (spread across both cells), and a +local one to the original cells. To achieve that split: + +* Start up a new local topology service in that original cell (3 more local + servers in that cell). +* Pick a name for that cell, different from `local`. +* Use `vtctl AddCellInfo` to configure it. +* Make sure all vtgates can see that new local cell (again, using + `--cells_to_watch`). +* Restart all vttablets to be in that new cell, instead of the `local` cell name + used before. +* Use `vtctl RemoveKeyspaceCell` to remove all mentions of the `local` cell in + all keyspaces. +* Use `vtctl RemoveCellInfo` to remove the global configurations for that + `local` cell. +* Remove all remaining data in the global topology service that are in the old + local server root. + +After this split, the configuration is completely symmetrical: + +* a global topology service, with servers in all cells. Only contains global + topology data about Keyspaces, Shards and VSchema. Typically it has 5 servers + across all cells. +* a local topology service to each cell, with servers only in that cell. Only + contains local topology data about Tablets, and roll-ups of global data for + efficient access. Typically, it has 3 servers in each cell. + +## Migration between implementations + +We provide the `topo2topo` utility to migrate between one implementation +and another of the topology service. + +The process to follow in that case is: + +* Start from a stable topology, where no resharding or reparenting is ongoing. +* Configure the new topology service so it has at least all the cells of the + source topology service. Make sure it is running. +* Run the `topo2topo` program with the right flags. `--from_implementation`, + `--from_root`, `--from_server` describe the source (old) topology + service. `--to_implementation`, `--to_root`, `--to_server` describe the + destination (new) topology service. +* Run `vtctl RebuildKeyspaceGraph` for each keyspace using the new topology + service flags. +* Run `vtctl RebuildVSchemaGraph` using the new topology service flags. +* Restart all `vtgate` processes using the new topology service flags. They + will see the same Keyspaces / Shards / Tablets / VSchema as before, as the + topology was copied over. +* Restart all `vttablet` processes using the new topology service flags. + They may use the same ports or not, but they will update the new topology + when they start up, and be visible from `vtgate`. +* Restart all `vtctld` processes using the new topology service flags. So that + the UI also shows the new data. + +Sample commands to migrate from deprecated `zookeeper` to `zk2` +topology would be: + +``` sh +# Let's assume the zookeeper client config file is already +# exported in $ZK_CLIENT_CONFIG, and it contains a global record +# pointing to: global_server1,global_server2 +# an a local cell cell1 pointing to cell1_server1,cell1_server2 +# +# The existing directories created by Vitess are: +# /zk/global/vt/... +# /zk/cell1/vt/... +# +# The new zk2 implementation can use any root, so we will use: +# /vitess/global in the global topology service, and: +# /vitess/cell1 in the local topology service. + +# Create the new topology service roots in global and local cell. +zk -server global_server1,global_server2 touch -p /vitess/global +zk -server cell1_server1,cell1_server2 touch -p /vitess/cell1 + +# Store the flags in a shell variable to simplify the example below. +GLOBAL_TOPOLOGY="--topo_implementation zk2 --topo_global_server_address global_server1,global_server2 --topo_global_root /vitess/global" + +# Reference cell1 in the global topology service: +vtctl ${GLOBAL_TOPOLOGY} AddCellInfo -- \ + --server_address cell1_server1,cell1_server2 \ + --root /vitess/cell1 \ + cell1 + +# Now copy the topology. Note the old zookeeper implementation does not need +# any server or root parameter, as it reads ZK_CLIENT_CONFIG. +topo2topo \ + --from_implementation zookeeper \ + --to_implementation zk2 \ + --to_server global_server1,global_server2 \ + --to_root /vitess/global \ + +# Rebuild SvrKeyspace objects in new service, for each keyspace. +vtctl ${GLOBAL_TOPOLOGY} RebuildKeyspaceGraph keyspace1 +vtctl ${GLOBAL_TOPOLOGY} RebuildKeyspaceGraph keyspace2 + +# Rebuild SrvVSchema objects in new service. +vtctl ${GLOBAL_TOPOLOGY} RebuildVSchemaGraph + +# Now restart all vtgate, vttablet, vtctld processes replacing: +# --topo_implementation zookeeper +# With: +# --topo_implementation zk2 +# --topo_global_server_address global_server1,global_server2 +# --topo_global_root /vitess/global +# +# After this, the ZK_CLIENT_CONF file and environment variables are not needed +# any more. +``` + +### Migration using the `Tee` implementation + +If your migration is more complex, or has special requirements, we also support +a 'tee' implementation of the topo service interface. It is defined in +`go/vt/topo/helpers/tee.go`. It allows communicating to two topo services, +and the migration uses multiple phases: + +* Start with the old topo service implementation we want to replace. +* Bring up the new topo service, with the same cells. +* Use `topo2topo` to copy the current data from the old to the new topo. +* Configure a `Tee` topo implementation to maintain both services. + * Note we do not expose a plugin for this, so a small code change is necessary. + * all updates will go to both services. + * the `primary` topo service is the one we will get errors from, if any. + * the `secondary` topo service is just kept in sync. + * at first, use the old topo service as `primary`, and the new one as + `secondary`. + * then, change the configuration to use the new one as `primary`, and the + old one as `secondary`. Reverse the lock order here. + * then rollout a configuration to just use the new service. diff --git a/content/en/docs/21.0/reference/features/transport-security-model.md b/content/en/docs/21.0/reference/features/transport-security-model.md new file mode 100644 index 000000000..12fddd2eb --- /dev/null +++ b/content/en/docs/21.0/reference/features/transport-security-model.md @@ -0,0 +1,125 @@ +--- +title: Transport Security Model +weight: 12 +aliases: ['/docs/user-guides/transport-security-model/','/docs/reference/transport-security-model/'] +--- + +Vitess exposes a few RPC services and internally uses RPCs. These RPCs can optionally utilize secure transport options to use TLS over the gRPC HTTP/2 transport protocol. This document explains how to use these features. Finally, we briefly cover how to secure the MySQL protocol transport to VTGate. + +## Overview + +The following diagram represents all the RPCs we use in a Vitess cluster via gRPC: + +![Vitess Transport Security Model Diagram](../../img/vitesstransportsecuritymodel.png) + +There are two main categories: + +* Internal RPCs: They are used to connect Vitess components. +* Externally visible RPCs: They are used by the app to talk to Vitess. Note that it is not necessary to use this gRPC interface. It is still possible to instead use the MySQL protocol to VTGate, which is not covered in this document. + +A few features in the Vitess ecosystem depend on authentication including Caller ID and table ACLs. + +## Caller ID + +Caller ID is a feature provided by the Vitess stack to identify the source of queries. There are two different Caller IDs: + +* Immediate Caller ID: It represents the secure client identity when it enters the Vitess side: + - It is a single string representing the user connecting to Vitess (VTGate). + - It is authenticated by the transport layer used. + - It can be used by the Vitess TableACL feature. +* Effective Caller ID: It provides detailed information on the individual caller process: + - It contains more information about the caller: principal, component, and sub-component. + - It is provided by the application layer. + - It is not authenticated. + - It is exposed in query logs. Enabling it can be useful for debugging issues like the source of a slow query. + +## gRPC Transport + +### gRPC Encrypted Transport + +When using gRPC transport, Vitess can use the usual TLS security features. Please note that familiarity with TLS is necessary here: + +* Any Vitess server can be configured to use TLS with the following command line parameters: + - `--grpc_cert`, `--grpc_key`: server cert and key to use. + - `--grpc_ca` (optional): client cert chains to trust. If specified, the client must then use a certificate signed by one of the CA certs in the provided file. +* A Vitess go client can be configured with symmetrical parameters to enable + TLS: + - `--[vtgate|tablet]_grpc_ca`: list of server cert signers to trust. I.E. the client will only connect to servers presenting a cert signed by one of the CAs in this file. + - `--[vtgate|tablet]_grpc_server_name`: common name of the server cert to trust. Instead of the hostname used to connect or IP SAN if using an IP to connect. + - `--[vtgate|tablet]_grpc_cert`, `--[vtgate|tablet]_grpc_key`: client side cert and key to use in cases when the server requires client authentication. + * Other clients can take similar parameters, in various ways. Please view each client's parameters for more information. + +With these options, it is possible to use TLS-secured connections for all parts of the gRPC system. This enables the server side to authenticate the client, and/or the client to authenticate the server. + +This is not enabled by default, as usually the different Vitess servers will run on a private network. It is also important to note, that in a Cloud environment, for example, usually all local traffic is already secured between VMs. + +### Options for vtctld + + | Name | Type | Definition | +| :-------- | :--------- | :--------- | +| --tablet_grpc_ca | string | the server ca to use to validate servers when connecting | +| --tablet_grpc_cert | string | the cert to use to connect | +| --tablet_grpc_key | string | the key to use to connect | +| --tablet_grpc_server_name | string | the server name to use to validate server certificate | +| --tablet_manager_grpc_ca | string | the server ca to use to validate servers when connecting | +| --tablet_manager_grpc_cert | string | the cert to use to connect | +| --tablet_manager_grpc_key | string | the key to use to connect | +| --tablet_manager_grpc_server_name | string | the server name to use to validate server certificate | +| --throttler_client_grpc_ca | string | the server ca to use to validate servers when connecting | +| --throttler_client_grpc_cert | string | the cert to use to connect | +| --throttler_client_grpc_key | string | the key to use to connect | +| --throttler_client_grpc_server_name | string | the server name to use to validate server certificate | +| --vtgate_grpc_ca | string | the server ca to use to validate servers when connecting | +| --vtgate_grpc_cert | string | the cert to use to connect | +| --vtgate_grpc_key | string | the key to use to connect | +| --vtgate_grpc_server_name | string | the server name to use to validate server certificate | + +### Options for vtgate + + | Name | Type | Definition | +| :-------- | :--------- | :--------- | +| --tablet_grpc_ca | string | the server ca to use to validate servers when connecting | +| --tablet_grpc_cert | string | the cert to use to connect | +| --tablet_grpc_key | string | the key to use to connect | +| --tablet_grpc_server_name | string | the server name to use to validate server certificate | + +### Options for vttablet + + | Name | Type | Definition | +| :-------- | :--------- | :--------- | +| --binlog_player_grpc_ca | string | the server ca to use to validate servers when connecting | +| --binlog_player_grpc_cert | string | the cert to use to connect | +| --binlog_player_grpc_key | string | the key to use to connect | +| --binlog_player_grpc_server_name | string | the server name to use to validate server certificate | +| --tablet_grpc_ca | string | the server ca to use to validate servers when connecting | +| --tablet_grpc_cert | string | the cert to use to connect | +| --tablet_grpc_key | string | the key to use to connect | +| --tablet_grpc_server_name | string | the server name to use to validate server certificate | +| --tablet_manager_grpc_ca | string | the server ca to use to validate servers when connecting | +| --tablet_manager_grpc_cert | string | the cert to use to connect | +| --tablet_manager_grpc_key | string | the key to use to connect | +| --tablet_manager_grpc_server_name | string | the server name to use to validate server certificate | + +### Certificates and Caller ID + +Additionally, if a client uses a certificate to connect to Vitess (VTGate) via gRPC, the common name of that certificate is passed to vttablet as the Immediate Caller ID. It can then be used by table ACLs to grant read, write or admin access to individual tables. This should be used if different clients should have different access to Vitess tables. + +### Caller ID Override + +In a private network, where TLS security is not required, it might still be desirable to use table ACLs as a safety mechanism to prevent a user from accessing sensitive data. The gRPC connector provides the `grpc_use_effective_callerid` flag for this purpose: if specified when running vtgate, the Effective Caller ID's principal is copied into the Immediate Caller ID, and then used throughout the Vitess stack. + +**Important**: This is not secure. Any user code can provide any value for the Effective Caller ID's principal, and therefore access any data. This is intended as a safety feature to make sure some applications do not misbehave. Therefore, this flag is not enabled by default. + +Another way to customize the immediateCallerID is to set the `grpc-use-static-authentication-callerid` flag on vtgate, which is only effective if you're using the static authentication plugin with vtgate. In this case, the username from the current authenticated session to vtgate is copied over as the Immediate Caller ID, and used throughout the Vitess stack. + +### Example + +For a concrete example, see [encrypted_transport_test.go](https://github.com/vitessio/vitess/blob/main/go/test/endtoend/encryption/encryptedtransport/encrypted_transport_test.go) in the source tree. + +It first sets up all the certificates, some table ACLs, and then uses the golang client to connect with TLS. It also exercises the `grpc_use_effective_callerid` flag, by connecting without TLS. + +## MySQL Transport to VTGate + +To get VTGate to support TLS use the `--mysql_server_ssl_cert` and `--mysql_server_ssl_key` VTGate options. To require client certificates, you can set `--mysql_server_ssl_ca`, containing the CA certificate you expect the client TLS certificates to be verified against. + +Finally, if you want to require all VTGate clients to only be able to connect using TLS, you can use the `--mysql_server_require_secure_transport` flag. diff --git a/content/en/docs/21.0/reference/features/two-phase-commit.md b/content/en/docs/21.0/reference/features/two-phase-commit.md new file mode 100644 index 000000000..9ebde0d17 --- /dev/null +++ b/content/en/docs/21.0/reference/features/two-phase-commit.md @@ -0,0 +1,102 @@ +--- +title: Two-Phase Commit +weight: 11 +aliases: ['/docs/launching/twopc/','/docs/reference/two-phase-commit/'] +--- + +{{< warning >}} +2PC is an experimental feature and is likely not robust enough to be considered production-ready. +{{< /warning >}} + +{{< info >}} +Transaction commit is much slower when using 2PC. The maintainers of Vitess recommend that you design your VSchema so that cross-shard updates (and 2PC) are not required. +{{< /info >}} + +Vitess 2PC allows you to perform atomic distributed commits. The feature is implemented using traditional MySQL transactions, and hence inherits the same guarantees. With this addition, Vitess can be configured to support the following three levels of atomicity: + +1. **Single database**: At this level, only single database transactions are allowed. Any transaction that tries to go beyond a single database will fail. +2. **Multi database**: A transaction can span multiple databases, but the commit will be best effort. Partial commits are possible. +3. **2PC**: This is the same as Multi-database, but the commit will be atomic. + +2PC commits are more expensive than multi-database because the system has to save away the statements before starting the commit process, and also clean them up after a successful commit. This is the reason why it is a separate option instead of being always on. + +## Isolation + +2PC transactions guarantee atomicity: either the whole transaction commits, or it is rolled back entirely. It does not guarantee Isolation (in the ACID sense). This means that a third party that performs cross-database reads can observe partial commits while a 2PC transaction is in progress. + +Guaranteeing ACID Isolation is very contentious and has high costs. Providing it by default would have made Vitess impractical for the most common use cases. + +### Configuring VTGate + +The atomicity policy is controlled by the `transaction_mode` flag. The default value is `multi` and will set all transactions to multi-database mode. + +To enforce single-database transactions, the VTGates can be started by specifying `transaction_mode=single`. + +To enable 2PC, the VTGates need to be started with `transaction_mode=twopc`. The VTTablets will require additional flags, which will be explained below. + +The VTGate `transaction_mode` flag decides what to allow by default. The application can then override that global default for an individual transaction using `SET transaction_mode="";` when necessary or appropriate. + +## Driver APIs + +The way to request atomicity from the application is driver-specific. + +### MySQL Protocol + +Clients can set the transaction mode via a session-variable: +``` +set transaction_mode='twopc'; +``` + +### gRPC Clients + +#### Go driver + +For the Go driver, you request the atomicity by adding it to the context using the `WithAtomicity` function. For more details, please refer to the respective GoDocs. + +#### Python driver + +For Python, the begin function of the cursor has an optional `single_db` flag. If the flag is `True`, then the request is for a single-db transaction. If `False` (or unspecified), then the following commit call's twopc flag decides if the commit is 2PC or Best Effort (multi). + +#### Adding support in a new driver + +The VTGate RPC API extends the Begin and Commit functions to specify atomicity. The API mimics the Python driver: The BeginRequest message provides a `single_db` flag and the `CommitRequest` message provides an atomic flag which is synonymous to twopc. + +## Configuring VTTablet + +The following flags need to be set to enable 2PC support in VTTablet: + +* **twopc_enable**: This flag needs to be turned on. +* **twopc_coordinator_address**: This should specify the address (or VIP) of the VTGate that VTTablet will use to resolve abandoned transactions. +* **twopc_abandon_age**: This is the time in seconds that specifies how long to wait before asking a VTGate to resolve an abandoned transaction. + +With the above flags specified, every primary VTTablet also turns into a watchdog. If any 2PC transaction is left lingering for longer than `twopc_abandon_age` seconds, then VTTablet invokes VTGate and requests it to resolve it. Typically, the `twopc_abandon_age` needs to be substantially longer than the time it takes for a typical 2PC commit to complete (10s of seconds). + +## Configuring MySQL + +The usual default values of MySQL are sufficient. However, it is important to verify that the `wait_timeout` (28800 seconds by default) has not been changed. If this value was changed to be too short, then MySQL could prematurely kill a prepared transaction causing data loss. + +## Monitoring + +A few additional variables have been added to `/debug/vars`. Failures described below should be rare. But these variables are present so you can build an alert mechanism if anything were to go wrong. + +## Critical failures + +The following errors are not expected to happen. If they do, it means that 2PC transactions have failed to commit atomically: + +* **InternalErrors.TwopcCommit**: This is a counter that shows the number of times a prepared transaction failed to fulfil a commit request. +* **InternalErrors.TwopcResurrection**: This counter is incremented if a new primary failed to resurrect a previously prepared (and unresolved) transaction. + +## Alertable failures + +The following failures are not urgent, but require investigation: + +* **InternalErrors.WatchdogFail**: This counter is incremented if there are failures in the watchdog thread of VTTablet. This means that the watchdog is not able to alert VTGate of abandoned transactions. +* **Unresolved.Prepares**: This is a gauge that is set based on the number of lingering Prepared transactions that have been alive for longer than 5x the abandon age. This usually means that a distributed transaction has repeatedly failed to resolve. A more serious condition is when the metadata for a distributed transaction has been lost and this Prepare is now permanently orphaned. + +## Repairs + +If any of the alerts fire, it is time to investigate. Once you identify the dtid or the VTTablet that originated the alert, you can navigate to the `/twopcz` URL. This will display three lists: + +* **Failed Transactions**: A transaction reaches this state if it failed to commit. The only action allowed for such transactions is that you can discard it. However, you can record the DMLs that were involved and have someone come up with a plan to repair the partial commit. +* **Prepared Transactions**: Prepared transactions can be rolled back or committed. Prepared transactions must be remedied only if their root Distributed Transaction has been lost or resolved. +* **Distributed Transactions**: Distributed transactions can only be Concluded (marked as resolved). diff --git a/content/en/docs/21.0/reference/features/vindexes.md b/content/en/docs/21.0/reference/features/vindexes.md new file mode 100644 index 000000000..28984e43f --- /dev/null +++ b/content/en/docs/21.0/reference/features/vindexes.md @@ -0,0 +1,348 @@ +--- +title: Vindexes +weight: 10 +aliases: ['/docs/schema-management/consistent-lookup/','/docs/reference/vindexes/'] +--- + +## A Vindex maps column values to keyspace IDs + +A Vindex provides a way to map a column value to a `keyspace ID`. Since each shard in Vitess covers a range of `keyspace ID` values, this mapping can be used to identify which shard contains a row. A variety of vindexes are available to choose from with different trade-offs, and you can choose one that best suits your needs. + +The Sharding Key is a concept that was introduced by NoSQL datastores. It is based on the fact that, in NoSQL databases, there is only one access path to the data, which is the Key. However, relational databases are more versatile with respect to the data stored and their relationships. So, sharding a database by only designating a single sharding key is often insufficient. + +If one were to draw an analogy, the indexes in a database would be the equivalent of the key in a NoSQL datastore, except that databases allow multiple indexes per table, and there are many types of indexes. Extending this analogy to a sharded database results in different types of cross-shard indexes. In Vitess, these are called Vindexes. + + +## Advantages + +The advantages of Vindexes stem from their flexibility: + +* A table can have multiple Vindexes. +* Vindexes can be NonUnique, which allows a column value to yield multiple keyspace IDs. +* Vindexes can be a simple function or be based on a lookup table. +* Vindexes can be shared across multiple tables. +* Custom Vindexes can be created and used, and Vitess will still know how to reshard using such Vindexes. + + +### The Primary Vindex + +The Primary Vindex for a table is analogous to a database primary key. Every sharded table must have one defined. A Primary Vindex must be unique: given an input value, it must produce a single keyspace ID. At the time of an insert to the table, the unique mapping produced by the Primary Vindex determines the target shard for the inserted row. Conceptually, this is equivalent to a NoSQL Sharding Key, and we often informally refer to the Primary Vindex as the Sharding Key. + +However, there is a subtle difference: NoSQL datastores allow a choice of the Sharding Key, but the Sharding Strategy or Function is generally hardcoded in the engine. In Vitess, the choice of Vindex allows control of how a column value maps to a keyspace ID. In other words, a Primary Vindex in Vitess not only defines the Sharding Key, but also decides the Sharding Strategy. + +Uniqueness for a Primary Vindex does not mean that the column has to be a primary key or unique key in the MySQL schema for the underlying shard. You can have multiple rows that map to the same keyspace ID. The Vindex uniqueness constraint only ensures that all rows for a keyspace ID end up in the same shard. + +Vindexes come in many varieties. Some of them can be used as Primary Vindex, and others have different purposes. We will describe their properties in the [Predefined Vindexes](#predefined-vindexes) section. + + +### Secondary Vindexes + +Secondary Vindexes are additional vindexes against other columns of a table offering optimizations for WHERE clauses that do not use the Primary Vindex. Secondary Vindexes return a single or a limited set of `keyspace IDs` which will allow VTGate to only target shards where the relevant data is present. In the absence of a Secondary Vindex, VTGate would have to scatter the query to all shards. + +It is important to note that Secondary Vindexes are only used for making routing decisions. The underlying database shards will most likely need traditional indexes on those same columns, to allow efficient retrieval from the table on the underlying MySQL instances. + + +### Unique and NonUnique Vindex + +A Unique Vindex is a vindex that yields at most one keyspace ID for a given input. Knowing that a Vindex is Unique is useful because VTGate can push down certain complex queries into VTTablet if it knows that the scope of that query can be limited to a single shard. Uniqueness is also a prerequisite for a Vindex to be used as Primary Vindex. + +A NonUnique Vindex is analogous to a database non-unique index. It is a secondary index for searching by an alternate WHERE clause. An input value could yield multiple keyspace IDs, and rows could be matched from multiple shards. For example, if a table has a `name` column that allows duplicates, you can define a cross-shard NonUnique Vindex for it, and this will allow an efficient search for users that match a certain `name`. + + +### Functional and Lookup Vindex + +A **Functional Vindex** is a vindex where the column value to keyspace ID mapping is pre-established, typically through an algorithmic function. In contrast, a **Lookup Vindex** is a vindex that provides the ability to create an association between a value and a keyspace ID, and recall it later when needed. Lookup Vindexes are sometimes also informally referred to as cross-shard indexes. + +Typically, the Primary Vindex for a table is Functional. In some cases, it is the identity function where the input value yields itself as the keyspace id. However, other algorithms like a hashing function can also be used. + +A Lookup Vindex is implemented as a MySQL lookup table that maps a column value to the keyspace id. This is usually needed when database user needs to efficiently find a row using a WHERE clause that does not contain the Primary Vindex. At the time of insert, the computed keyspace ID of the row is stored in the lookup table against the column value. + + +### Lookup Vindex types + +The lookup table that implements a Lookup Vindex can be sharded or unsharded. Note that the lookup row is most likely not going to be in the same shard as the keyspace id it points to. + +Vitess allows for the transparent population of these lookup table rows by assigning an owner table, which is the main table that requires this lookup. When a row is inserted into this owner table, the lookup row for it is created in the lookup table. The lookup row is also deleted upon a delete of the corresponding row in the owner table. These essentially result in distributed transactions, which traditionally require 2PC to guarantee atomicity. + +Consistent lookup vindexes use an alternate approach that makes use of careful locking and transaction sequences to guarantee consistency without using 2PC. This gives the best of both worlds, with the benefit of a consistent cross-shard vindex without paying the price of 2PC. To read more about what makes a consistent lookup vindex different from a standard lookup vindex read our [consistent lookup vindexes design documentation](https://github.com/vitessio/vitess/issues/4855). + +There are currently two vindex types in Vitess for consistent lookup: + +* `consistent_lookup_unique` +* `consistent_lookup` + +#### Consistent Lookup usage + +There are 3 sessions which VTGate can open when a consistent lookup is involved. + +1. Pre session +2. Normal session +3. Post session + +The pre and post session are used by lookup queries. The normal session is used by the original query that was sent from the client to VTGate. + +If an insert query is received, insert on consistent lookup will happen through the pre session and the actual query insert will happen through the normal session. When a commit happens it happens on the pre session first and if it succeeds then the commit happens on the post session. + +If an update or delete query is received, the post session is used to do the update or delete on consistent lookup and the normal session for the original query. When a commit happens it happens on the normal session first and if that succeeds then the commit is executed on the post session. + +Anytime there is a consistent lookup involved in the query received, a lock will be taken so that is not available for other sessions to be modified. + +In order to do that we have to select the right session at the beginning. For an insert query, the pre session is used to send `SELECT ...` for the update query. + +For an update or delete query, the post session is used to send `SELECT ...` for the update query. + +Due to this, a current limitation with consistent lookup is that it cannot support an insert followed by an update or delete in the same transaction for the same consistent lookup column value. + +#### Shared Vindexes + +Relational databases encourage normalization, which allows the splitting of data into different tables to avoid duplication in the case of one-to-many relationships. In such cases, a key is shared between the two tables to indicate that the rows are related, a.k.a. `Foreign Key`. + +In a sharded environment, it is often beneficial to keep those rows in the same shard. If a Lookup Vindex was created on the foreign key column of each of those tables, the backing tables would actually be identical. In such cases, Vitess allows sharing a single Lookup Vindex for multiple tables. One of these tables is designated as the owner of the Lookup Vindex, and is responsible for creating and deleting these associations. The other tables just reuse these associations. + +An existing `lookup_unique` vindex can be trivially switched to a `consistent_lookup_unique` by changing the vindex type in the VSchema. This is because the data is compatible. Caveat: If you delete a row from the owner table, Vitess will not perform cascading deletes. This is mainly for efficiency reasons; the application is likely capable of doing this more efficiently. + +As for a `lookup` vindex, it can be changed it to a `consistent_lookup` only if the `from` columns can uniquely identify the owner row. Without this, many potentially valid inserts would fail. + +Functional Vindexes can be also be shared. However, there is no concept of ownership because the column to keyspace ID mapping is pre-established. + +### Lookup Vindex guidance + +The guidance for implementing lookup vindexes has been to create a two-column table. The first column (`from` column) should match the type of the column of the main table that needs the vindex. The second column (`to` column) should be a `BINARY` or a `VARBINARY` large enough to accommodate the keyspace id. + +This guidance remains the same for unique lookup vindexes. + +For non-unique lookup Vindexes, the lookup table should consist of multiple columns. The first column continues to be the input for computing the keyspace IDs. Beyond this, additional columns are needed to uniquely identify the owner row. This should typically be the primary key of the owner table. But it can be any other column that can be combined with the `from` column to uniquely identify the owner row. The last column remains the keyspace ID like before. + +For example, if a user table had the columns `(user_id, email)`, where `user_id` was the primary key and `email` needed a non-unique lookup vindex, the lookup table would have the columns `(email, user_id, keyspace_id)`. + + +### Independence + +The previously described properties are mostly independent of each other. Combining them gives rise to the following valid categories: + +* **Functional Unique**: The most popular category because it is the one best suited to be a Primary Vindex. +* **Functional NonUnique**: There are currently no use cases that need this category. +* **Lookup Unique Owned**: Used for optimizing high QPS read queries that do not use the Primary Vindex columns in their WHERE clause. There is a price to pay: an extra write to the lookup table for insert and delete operations, and an extra lookup for read operations. However, it may be worth it to avoid high QPS read queries to be sent to all shards. The overhead of maintaining the lookup table is amortized as the number of shards grow. +* **Lookup Unique Unowned**: Can be used as an optimization as described in the Shared Vindexes section. +* **Lookup NonUnique Owned**: Used for high QPS queries on columns that are non-unique. +* **Lookup NonUnique Unowned**: You would rarely have to use this category because it is unlikely that you will be using a column as foreign key that is not unique within a shard. But it is theoretically possible. + +Of the above categories, `Functional Unique` and `Lookup Unique Unowned` Vindexes can be a Primary Vindex. This is because those are the only ones that are unique and have the column to keyspace ID mapping pre-established. This is required because the Primary Vindex is responsible for assigning the keyspace ID for a row when it is created. + +However, it is generally not recommended to use a Lookup Vindex as a Primary Vindex because it is too slow for resharding. If absolutely unavoidable, it is recommended to add a `keyspace ID` column to the tables that need this level of control of the row-to-shard mapping. While resharding, Vitess can use that column to efficiently compute the target shard. Vitess can also be configured to auto-populate that column on inserts. This is done using the reverse map feature explained [below](#insert). + +### Defining Vindexes + +Vindexes are defined in the [VSchema](../vschema/) inside the `Vindexes` section of every keyspace. The `column_vindexes` section of each table in that keyspace may refer to the Vindex by name. Here is an example: + +``` json + "name_keyspace_idx": { + "type": "lookup", + "params": { + "table": "name_keyspace_idx", + "from": "name", + "to": "keyspace_id" + }, + "owner": "user" + } +``` + +In the above case, the name of the vindex is `name_keyspace_idx`. It is of type `lookup`, and it is owned by the `user` table. + +Every Vindex has an optional `params` section that contains a map of string key-value pairs. The keys and values differ depending on the vindex type and are explained below. + +There is an optional fourth parameter: `batch_lookup`. To read more about how to use `batch_lookup` see our [Unique Lookup user guide](../../../user-guides/vschema-guide/unique-lookup/). + +### How Vindexes are used + +#### Cost + +Vindexes have costs. For routing a query, the applicable Vindex with the lowest cost is chosen. The current general costs for the different Vindex Types are as follows: + +Vindex Type | Cost +| ----------- | ---- | +| Identity | 0 | +| Functional | 1 | +| Lookup Unique | 10 | +| Lookup NonUnique | 20 | + +#### Select + +In the case of a simple select, Vitess scans the WHERE clause to match references to Vindex columns and chooses the best one to use. If there is no match and the query is simple without complex constructs like aggregates, etc., it is sent to all shards. + +Vitess can handle more complex queries with the new Gen4 planner. + +#### Insert + +* The Primary Vindex is used to generate a keyspace ID. +* The keyspace ID is validated against the rest of the Vindexes on the table. There must exist a mapping from the column value(s) for these Secondary Vindexes to the keyspace ID. +* If a column value was not provided for a Vindex and the Vindex is capable of reverse mapping a keyspace ID to an input value, that function is used to auto-fill the column. If there is no reverse map, it is an error. + +#### Update + +The WHERE clause is used to route the update. Updating the value of a Vindex column is supported, but with a restriction: the change in the column value should not result in the row being moved from one shard to another. A workaround is to perform a delete followed by insert, which works as expected. + +#### Delete + +If the table owns lookup vindexes, then the rows to be deleted are first read and the associated Vindex entries are deleted. Following this, the query is routed according to the WHERE clause. + +#### Ignore Nulls + +There are situations where the from columns of a lookup vindex can be `NULL`. Such columns cannot be inserted in the lookup backing table due to the uniqueness constraints of a lookup. There are two ways to deal with a `NULL` value in the from column of a lookup vindex: + +* Use a predefined vindex as the primary vindex of the backing table that supports the use of a `NULL` value. The table for [predefined vindexes](../vindexes/#predefined-vindexes) lists what types are and are not nullable. +* Enable the `ignore_nulls` option. If the input value of any of the columns is null, Vitess can skip the creation of the lookup row if `ignore_nulls` is enabled. + +{{< info >}} +Note: You can have `NULL` values for the primary vindex column, as long as that vindex allows it (e.g. xxhash). However, you cannot have `NULL` values for the lookup input column, unless you have enabled `ignore_nulls`. +{{< /info >}} + +### Predefined Vindexes + +Vitess provides the following predefined Vindexes: + +Name | Type | Description | Primary | Multi-column | Reversible | Nullable | Cost | Data types | +---- | ---- |-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| ------- | ------------ | ---------- | -------- | --- |----------------------------------------------| +binary | Functional Unique | Identity | Yes | No | Yes | Yes | 0 | Any | +binary\_md5 | Functional Unique | MD5 hash | Yes | No | No | Yes | 1 | Any | +consistent\_lookup | Lookup NonUnique | Lookup table non-unique values | No | Identify Row | No | Yes [only if](../vindexes/#ignore-nulls) | 20 | Any | +consistent\_lookup\_unique | Lookup Unique | Lookup table unique values | If unowned | Identify Row | No | Yes [only if](../vindexes/#ignore-nulls) | 10 | Any | +hash | Functional Unique | DES null-key hash | Yes | No | Yes | No | 1 | 64 bit or smaller numeric or equivalent type | +lookup | Lookup NonUnique | Lookup table non-unique values | No | Identify Row | No | Yes [only if](../vindexes/#ignore-nulls) | 20 | Any | +lookup\_unique | Lookup Unique | Lookup table unique values | If unowned | Identify Row | No | Yes [only if](../vindexes/#ignore-nulls) | 10 | Any | +multicol | Functional Unique | Multi-column [subsharding](../../../user-guides/vschema-guide/subsharding-vindex/) hash for use in tenant based sharding or geo-partitioning or multiple column serving as sharding key | Yes | Yes | No | No | sum of cost of hashing function used for each column | Any | +null | Functional Unique | Always map to keyspace ID 0 | Yes | No | No | Yes | 100 | Any | +numeric | Functional Unique | Identity | Yes | No | Yes | No | 0 | 64 bit or smaller numeric or equivalent type | +numeric\_static\_map | Functional Unique | JSON document statically mapping input numeric values to keyspace IDs | Yes | No | No | No | 1 | 64 bit or smaller numeric or equivalent type | +region\_experimental | Functional Unique | Multi-column prefix-based hash for use in geo-partitioning | Yes | Yes | No | No | 1 | String and numeric type | +region\_json | Functional Unique | Multi-column prefix-based hash combined with a JSON map for key-to-region mapping, for use in geo-partitioning | Yes | Yes | No | No | 1 | String and numeric type | +reverse\_bits | Functional Unique | Bit reversal | Yes | No | Yes | No | 1 | 64 bit or smaller numeric or equivalent type | +unicode\_loose\_md5 | Functional Unique | Case-insensitive (UCA level 1) MD5 hash | Yes | No | No | Yes | 1 | String or binary types | +unicode\_loose\_xxhash | Functional Unique | Case-insensitive (UCA level 1) xxHash64 hash | Yes | No | No | Yes | 1 | String or binary types | +xxhash | Functional Unique | xxHash64 hash | Yes | No | No | Yes | 1 | Any | + +Consistent lookup vindexes, as described above, are a new category of Vindexes that are meant to replace the existing lookup Vindexes implementation. For the time being, they have a different name to allow for users to switch back and forth. + +Under the Multi-column heading, an `Identify Row` comment indicates that the Vindex only uses the first column to map to the keyspace id(s). The rest of the columns are used to identify the owner row. + +Lookup Vindexes support the following parameters: + +* `table`: The backing table for the lookup vindex. It is recommended that the table name be qualified by its keyspace. +* `from`: The list of "from" columns. The first column is used for routing, and the rest of the columns are used for identifying the owner row. +* `to`: The name of the "to" keyspace\_id column. +* `autocommit` (false): if true, specific vindex entries are updated in their own autocommit transaction. This is useful if values never get remapped to different values. For example, if the input column comes from an auto-increment value. Note that the autocommit option does not affect `consistent_lookup` or `consistent_lookup_unique` vindexes, but is for use with `lookup` or `lookup_unique` vindexes. +* `write_only` (false): if true, the vindex is kept updated, but a lookup will return all shards if the key is not found. This mode is used while the vindex is being populated and backfilled. +* `no_verify` (false): if true, Vitess will not internally verify lookup results. This mode is a performance optimization that is unsafe to use unless the `from` columns in the `owner` table rows are never updated. +* `read_lock` (exclusive): determines the type of locking read Vitess uses when querying the backing table. Valid options are `exclusive` (translates to a MySQL `FOR UPDATE` lock), `shared` (`LOCK IN SHARE MODE`) or `none`. Relaxing the default (`exclusive`) may improve performance, but is unsafe if concurrent queries can select and delete the same rows from the backing table. +* `ignore_nulls` (false): if true, null values in input columns do not create entries in the lookup table. Otherwise, a null input results in an error. + +The `numeric_static_map` supports the following parameters: + + * `json_path`: Path to a file which must contain a JSON document that maps input numeric values to keyspace ids. + * `json`: A string which must contain a JSON document that maps input numeric values to keyspace ids. + * `fallback_type`: Name of a functional vindex, e.g. `xxhash`, to fallback to when looking up a key not present in the map. + +One of either `json_path` or `json` is required. The two are mutually exclusive. + +The `region_experimental` vindex is an experimental vindex that uses the first one or two bytes of the input value as prefix for keyspace id. The rest of the bits are hashed. This allows you to group users of the same region within the same group of shards. The vindex requires a `region_bytes` parameter that specifies if the prefix is one or two bytes. + +The `region_json` vindex requires an additional `region_map` file name that is used to compute the region from the country. The `region_bytes` is presumed to contain country codes. + +Custom Vindexes can also be created as needed. At the moment there is no formal plugin system for custom Vindexes, but the interface is well-defined, and thus custom implementations including code performing arbitrary lookups in other systems can be accommodated. + +\ +\ +There are also the following legacy (deprecated) Vindexes. **Do not use these**: + +| Name | Type | Primary | Reversible | Cost | +| ---- | ---- | ------- | ---------- | ---- | +| lookup\_hash | Lookup NonUnique | No | No | 20 | +| lookup\_hash\_unique | Lookup Unique | If unowned | No | 10 | +| lookup\_unicodeloosemd5\_hash | Lookup NonUnique | No | No | 20 | +| lookup\_unicodeloosemd5\_hash\_unique | Lookup Unique | If unowned | No | 10 | + +### Query Vindex functions + +You can query Vindex functions to see the resulting `keyspace_id` it produces (the resulting hash is a 64-bit hexadecimal number) and thus which shard a particular row would be placed on within the keyspace. You would query the Vindex functions by referencing their name as defined in your VSchema, and using query predicates specifically on the fixed name `id` field (this is not related to your actual schema). The Vindex functions support both equality (`WHERE id = X`) and list (`WHERE id IN(...)`) lookups. Here's a full example using the `customer` keyspace: + +First, a snippet of the VSchema: +``` shell +$ vtctldclient --server=localhost:15999 GetVSchema customer | jq '.vindexes' +{ + "binary_md5_vdx": { + "type": "binary_md5" + }, + "binary_vdx": { + "type": "binary" + }, + "hash_vdx": { + "type": "hash" + } +} +``` + +And example queries using them from a VTGate (the Vindex function exists as a meta table in the given keyspace): +``` sql +mysql> use customer; +Database changed + +mysql> select * from hash_vdx where id in(1,29999,397)\G +*************************** 1. row *************************** + id: 1 + keyspace_id: k@�J�K� + range_start: + range_end: � +hex_keyspace_id: 166b40b44aba4bd6 + shard: -80 +*************************** 2. row *************************** + id: 29999 + keyspace_id: ��>V�7M� + range_start: � + range_end: +hex_keyspace_id: fcd63e56d3374d88 + shard: 80- +*************************** 3. row *************************** + id: 397 + keyspace_id: U��s��� + range_start: + range_end: � +hex_keyspace_id: 5584fa738baaf516 + shard: -80 +3 rows in set (0.00 sec) + +mysql> select * from binary_md5_vdx where id = "heythere"\G +*************************** 1. row *************************** + id: heythere + keyspace_id: ��, +���e��u�I� + range_start: � + range_end: +hex_keyspace_id: d9e62c0ad204fe91658ecc758049e515 + shard: 80- +1 row in set (0.00 sec) + +``` + +### Unknown Vindex parameters + +Most Vindexes will accept unknown parameters without complaint. For example, the following `lookup` Vindex can be applied without error: + +```json + "name_keyspace_idx": { + "type": "lookup", + "params": { + "table": "name_keyspace_idx", + "from": "name", + "to": "keyspace_id", + "rear_lock": "none" + }, + "owner": "user" + } +``` + +In this example, the user intended to use `read_lock` but typed `rear_lock` by mistake. They will be in for an unpleasant surprise during the traffic peak and `rear_lock` does nothing to mitigate lock contention. + +To help users avoid these kinds of unpleasant surprises, Vindexes may expose unknown parameters in the following ways: + + * [As warnings](../../programs/vtctl/schema-version-permissions/#warnings) in the output of `ApplyVSchema`. + * As a [VTGate stat](../../../user-guides/configuration-basic/monitoring/#vindexunknownparameters) named `VindexUnknownParameters`. diff --git a/content/en/docs/21.0/reference/features/vitess-sequences.md b/content/en/docs/21.0/reference/features/vitess-sequences.md new file mode 100644 index 000000000..7803cd8be --- /dev/null +++ b/content/en/docs/21.0/reference/features/vitess-sequences.md @@ -0,0 +1,241 @@ +--- +title: Sequences +weight: 3 +aliases: ['/docs/reference/vitess-sequences/'] +--- + +This document describes the Vitess Sequences feature, and how to use it. + +## Motivation + +MySQL provides the `auto_increment` feature to assign monotonically incrementing +IDs to a column in a table. However, when a table is sharded across multiple +instances, maintaining the same feature is a lot more tricky. + +Vitess Sequences fill that gap: + +* Inspired from the usual SQL sequences (implemented in different ways by + Oracle, SQL Server and PostgreSQL). + +* Very high throughput for ID creation, using a configurable in-memory block allocation. + +* Transparent use, similar to MySQL `auto_increment`: when the field is omitted in + an `insert` statement, the next sequence value is used. + +## When *not* to use `auto_increment` + +Let us start by exploring the limitations and drawbacks of using an +`auto_increment` column. + +### Security Considerations + +Using `auto_increment` can leak confidential information about a service. Take +the example of a web site that store user information, and assign user IDs +to its users as they sign in. The user ID is then passed in a cookie for all +subsequent requests. + +The client then knows their own user ID. It is now possible to: + +* Try other user IDs and expose potential system vulnerabilities. + +* Get an approximate number of users of the system (using the user ID). + +* Get an approximate number of sign-ups during a week (creating two accounts a + week apart, and diffing the two IDs). + +Auto-incrementing IDs should be reserved for either internal applications, or +exposed to the clients only when safe. + +### Alternatives + +Alternative to auto-incrementing IDs are: + +* Using a 64 bit random generator number. Try to insert a new row with that + ID. If already taken (the statement returns an integrity error), try another + ID. + +* Using a UUID scheme, and generate truly unique IDs. + +Now that this is out of the way, let's examine the specifics of +[MySQL auto_increment](https://dev.mysql.com/doc/refman/en/example-auto-increment.html). + +## MySQL `auto_increment` Feature + +Comparing `auto_increment` features, properties, and behaviors that Vitess Sequences share: + +* A row that has no value provided for the `auto_increment` column will be given the next ID. + +* The current ID value is stored in table metadata. + +* Values may be ‘burned’ (by rolled back transactions) and gaps in the generated and stored values are possible. + +* The value stored by the primary instance resulting from the original statement is sent in the replication stream, + so replicas will have the same value when re-playing the stream. + +* There is no strict guarantee about ordering: two concurrent statements may + have their commit time in one order, but their auto-incrementing ID in the + opposite order (as the value for the ID is reserved when the statement is + issued, not when the transaction is committed). + +* When inserting a row in a table with an `auto_increment` column, if the value + for the `auto_increment` column is generated (not explicitly specified in the + statement), the value for the column is returned to the client alongside the + statement result (which can be queried with [`LAST_INSERT_ID()`](https://dev.mysql.com/doc/refman/en/information-functions.html#function_last-insert-id)). + +## Vitess Sequences + +Each sequence has a backing MySQL table — which **must** be in an unsharded keyspace — and +uses a single row in that table to describe which values the sequence should have next. +To improve performance we also support block allocation of IDs: each update to +the MySQL table is only done every N IDs (N being configurable) and in between those writes +only the in-memory structures within the primary vttablet serving the unsharded keyspace +where the backing table lives are updated, making the QPS only limited by the RPC latency +between the vtgates and the the serving vttablet for the sequence table. + +So the sequence table is an unsharded single row table that Vitess can use to generate monotonically increasing ids. +The VSchema then allows you to associate a column in your table with the sequence. Once they are associated, an `insert` +on that table will transparently fetch an ID from the sequence, fill in the value, and route the row to the appropriate shard. + +### Creating a Sequence + +To create a sequence, a backing table must first be created. The table structure must have +the following columns and SQL comment in order to provide sequences (in the examples here the sequence is for a user table): + +``` sql +create table user_seq(id bigint, next_id bigint, cache bigint, primary key(id)) comment 'vitess_sequence'; +``` + +

+{{< info >}} +Note: the vttablet in-memory structure uses `int64` types so `bigint unsigned` types are not supported for these columns in the backing table +{{< /info >}} +

+ +Then the sequence has to be defined in the VSchema for the unsharded keyspace where the backing table lives: + +``` json +{ + "sharded": false, + "tables": { + "user_seq": { + "type": "sequence" + }, + ... + } +} +``` + +

+Now any table that will be using the new sequence can reference it in its VSchema as shown here: +

+ +``` json +{ + ... + "tables" : { + "user": { + "column_vindexes": [ + ... + ], + "auto_increment": { + "column": "user_id", + "sequence": "user_seq" + } + }, +``` + +## Initializing a Sequence +The sequence backing table needs to be pre-populated with a single row where: + +* `id` must always be 0. +* `next_id` should be set to the next (starting) value of the sequence. +* `cache` is the number of values to be reserved and cached in each block allocation of IDs served by the primary vttablet of the +unsharded keyspace where the sequence backing table lives. This value should be set to a fairly large number like 1000 for improved write +latency and throughput (the tradeoff being that this chunk of reserved IDs could be lost if e.g. the tablet crashes, resulting in a +potential ID gap up to that size). + +For example: + +``` sql +insert into user_seq(id, next_id, cache) values(0, 1, 1000); +``` + +### Accessing a Sequence directly + +If a sequence is used to fill in an ID column for a table, nothing further needs to +be done. Just sending no value for the column will make vtgate insert the next +sequence value in its place. + +It is also possible, however, to access the sequence directly with the following SQL constructs: + +``` sql +/* Returns the next value for the sequence */ +select next value from user_seq; + +/* Returns the next value for the sequence, and also reserve 4 values after that. */ +select next 5 values from user_seq; +``` + +### Sequence limitations + +Vitess sequences do not behave like a MySQL `auto_increment` column in all +ways. One significant example is if you mix cases where you provide values +for the auto-incrementing column, and cases where you do not. In a case +like this, a MySQL `auto_increment` will keep track of the highest value you +have used, and thus what the "next" value for the column would be. Vitess +sequences do not do this. Here is an example: + +MySQL mixed insert case (`c1` is the auto-incrementing column): +``` sql +mysql> create table t1 (c1 bigint not null auto_increment, c2 bigint default null, primary key (c1)) engine=innodb; +Query OK, 0 rows affected (0.03 sec) + +mysql> insert into t1 (c1,c2) values (1,1),(2,2),(3,3); +Query OK, 3 rows affected (0.01 sec) +Records: 3 Duplicates: 0 Warnings: 0 + +mysql> insert into t1 (c2) values (4); +Query OK, 1 row affected (0.01 sec) + +mysql> select * from t1; ++----+------+ +| c1 | c2 | ++----+------+ +| 1 | 1 | +| 2 | 2 | +| 3 | 3 | +| 4 | 4 | ++----+------+ +4 rows in set (0.00 sec) +``` + + +Vitess sequence mixed insert case (`c1` is the sequence column): +``` sql +mysql> insert into t1 (c1,c2) values (1,1),(2,2),(3,3); +Query OK, 3 rows affected (0.04 sec) + +mysql> select * from t1; ++----+------+ +| c1 | c2 | ++----+------+ +| 1 | 1 | +| 2 | 2 | +| 3 | 3 | ++----+------+ +3 rows in set (0.01 sec) + +mysql> insert into t1 (c2) values (4); +ERROR 1062 (23000): transaction rolled back to reverse changes of partial DML execution: target: sharded.-80.primary: vttablet: Duplicate entry '1' for key 't1.PRIMARY' (errno 1062) (sqlstate 23000) (CallerID: user): Sql: "insert into t1(c2, c1) values (:_c2_0, :_c1_0)", BindVars: {__seq0: "type:INT64 value:\"1\""_c1_0: "type:INT64 value:\"1\""_c2_0: "type:INT64 value:\"4\""vtg1: "type:INT64 value:\"4\""} +mysql> select * from t1; ++----+------+ +| c1 | c2 | ++----+------+ +| 1 | 1 | +| 2 | 2 | +| 3 | 3 | ++----+------+ +3 rows in set (0.01 sec) +``` + +It is arguably bad practice to mix use-cases like this. If you avoid mixing use-cases you will not run into this issue. diff --git a/content/en/docs/21.0/reference/features/vschema.md b/content/en/docs/21.0/reference/features/vschema.md new file mode 100644 index 000000000..9c425a5e0 --- /dev/null +++ b/content/en/docs/21.0/reference/features/vschema.md @@ -0,0 +1,311 @@ +--- +title: VSchema +weight: 9 +aliases: ['/docs/schema-management/vschema/','/docs/reference/vschema/'] +--- + +## Overview + +VSchema stands for Vitess Schema. It is an abstraction layer that presents a unified view of the underlying keyspaces and shards, and gives the semblance of a single MySQL server. + +For example, VSchema will contain the information about the sharding key for a sharded table. When the application issues a query with a WHERE clause that references the key, the VSchema information will be used to route the query to the appropriate shard. + +## Architecture + +The VSchema is specified on a per-keyspace basis. Additionally, a separate set of RoutingRules can be specified. This information is stored in the global topology. A vtctld `RebuildVSchemaGraph` command combines the RoutingRules and the per-keyspace VSchemas into a unified data structure called SrvVSchema, which is deployed into the topo of each cell. The VTGates consume this information, which they use for planning and routing queries from the application. + +![VSchema Architecture](../img/vschema_arch.png) + +## Database Access Model + +A Vitess Keyspace is the logical equivalent to a MySQL database. The usual syntax used to access databases in mysql work in Vitess as well. For example, you can connect to a specific database by specifying the database name in the connection parameter. You can also change the database you are connected to through the `use` statement. While connected to a database, you can access a table from a different keyspace by qualifying the table name in your query, like `select * from other_keyspace.table`. + +### Tablet Types + +Unlike MySQL, the vitess servers unify all types of mysql servers. You can ask vitess to target a specific tablet type by qualifying it as part of the database name. For example, to access replica tablets, you may specify the database name as `keyspace@replica`. This name can also be specified in the connection string. If no tablet type is specified in the database name, then the value specified in VTGate's `--default_tablet_type` flag is used. + +### Unspecified Mode + +Additionally, you can connect without specifying a database name and still access tables without qualifying them by their keyspace. If the table name is unique across all keyspaces, then VTGate automatically sends the query to the associated keyspace. Otherwise, it returns an error. This mode is useful if you start off with a single keyspace and plan on splitting it into multiple parts. + +You can still specify a tablet type for the unspecified mode. For example, you can connect to `@replica` if you want to access the replica tablets in unspecified mode. + +Some frameworks require you to specify an explicit database name while connecting. In order to make them work in unspecified mode, you can specify the database name as `@replica` or `@primary` instead of a blank one. + +## Sharded keyspaces require a VSchema + +A VSchema is needed to tie together all the databases that Vitess manages. For a very trivial setup where there is only one unsharded keyspace, there is no need to specify a VSchema because Vitess will know that there is no other place to route a query. + +If you have multiple unsharded keyspaces, you can still avoid defining a VSchema in one of two ways: + +1. Connect to a keyspace and all queries are sent to it. +2. Connect to Vitess without specifying a keyspace (unspecified mode), but use qualified names for tables, like `keyspace.table` in your queries. + +However, once the setup exceeds the above complexity, VSchemas become a necessity. Vitess has a [working demo](https://github.com/vitessio/vitess/tree/main/examples/demo) of VSchemas. + +## Sharding Model + +In Vitess, a `keyspace` is sharded by `keyspace ID` ranges. Each row is assigned a keyspace ID, which acts like a street address, and it determines the shard where the row lives. In some respect, one could say that the `keyspace ID` is the equivalent of a NoSQL sharding key. However, there are some differences: + +1. The `keyspace ID` is a concept that is internal to Vitess. The application does not need to know anything about it. +2. There is no physical column that stores the actual `keyspace ID`. This value is computed as needed. + +This difference is significant enough that we do not refer to the keyspace ID as the sharding key. A [Primary Vindex](../vindexes/#the-primary-vindex) more closely resembles the NoSQL sharding key. + +Mapping to a `keyspace ID`, and then to a shard, gives us the flexibility to reshard the data with minimal disruption because the `keyspace ID` of each row remains unchanged through the process. + +## Vindexes + +The Vschema contains the [Vindex](../vindexes) for any sharded tables. The Vindex tells Vitess where to find the shard that contains a particular row for a sharded table. Every VSchema must have at least one Vindex, called the [Primary Vindex](../vindexes/#the-primary-vindex), defined. The Primary Vindex is unique: given an input value, it produces a single keyspace ID, or value in the keyspace used to shard the table. The Primary Vindex is typically a functional Vindex: Vitess computes the keyspace ID as needed from a column in the sharded table. + +## Sequences + +Auto-increment columns do not work very well for sharded tables. [Vitess sequences](../vitess-sequences) solve this problem. Sequence tables must be specified in the VSchema, and then tied to table columns. At the time of insert, if no value is specified for such a column, VTGate will generate a number for it using the sequence table. + +## Reference tables + +Vitess allows you to create an unsharded table and deploy it into all shards of a sharded keyspace. The data in such a table is assumed to be identical for all shards. In this case, you can specify that the table is of type `reference`, and should not specify any vindex for it. Any joins of this table with an unsharded table will be treated as a local join. + +Typically, such a table has a canonical source in an unsharded keyspace, and the copies in the sharded keyspace are kept up-to-date through VReplication. + + +## Per-Keyspace VSchema + +The VSchema uses a flexible proto JSON format. Essentially, you can use `snake_case` or `camelCase` for the keys. + +The configuration of your VSchema reflects the desired sharding configuration for your database, including whether or not your tables are sharded and whether you want to implement a secondary Vindex. + +### Commands + +You can use the following commands for maintaining the VSchema: + +* `GetVSchema ` +* `ApplyVSchema -- {--vschema= || --vschema_file= || --sql= || --sql_file=} [--cells=c1,c2,...] [--skip_rebuild] [--dry-run] [--strict] ` +* `RebuildVSchemaGraph [--cells=c1,c2,...]` +* `GetSrvVSchema ` +* `DeleteSrvVSchema ` + +In order to verify that a VTGate has loaded SrvVSchema correctly, you can visit the `/debug/vschema` URL on the VTGate's http port. + +### Unsharded Table + +The following snippets show the necessary configs for creating a table in an unsharded keyspace: + +Schema: + +``` sql +# lookup keyspace +create table name_user_idx(name varchar(128), user_id bigint, primary key(name, user_id)); +``` + +VSchema: + +``` json +// lookup keyspace +{ + "sharded": false, + "tables": { + "name_user_idx": {} + } +} +``` + +For a normal unsharded table, the VSchema only needs to know the table name. No additional metadata is needed. + +### Sharded Table With Simple Primary Vindex + +To create a sharded table with a simple [Primary Vindex](../vindexes/#the-primary-vindex), the VSchema requires more information: + +Schema: + +``` sql +# user keyspace +create table user(user_id bigint, name varchar(128), primary key(user_id)); +``` + +VSchema: + +``` json +// user keyspace +{ + "sharded": true, + "vindexes": { + "hash": { + "type": "hash" + } + }, + "tables": { + "user": { + "column_vindexes": [ + { + "column": "user_id", + "name": "hash" + } + ] + } + } +} +``` + +Because Vindexes can be shared, the JSON requires them to be specified in a separate `vindexes` section, and then referenced by name from the `tables` section. The VSchema above simply states that `user_id` uses `hash` as Primary Vindex. The first Vindex of every table must be the Primary Vindex. + +### Specifying A Sequence + +Since user is a sharded table, it will be beneficial to tie it to a Sequence. However, the sequence must be defined in the lookup (unsharded) keyspace. It is then referred from the user (sharded) keyspace. In this example, we are designating the `user_id` (Primary Vindex) column as the auto-increment. + +Schema: + +``` sql +# lookup keyspace +create table user_seq(id int, next_id bigint, cache bigint, primary key(id)) comment 'vitess_sequence'; +insert into user_seq(id, next_id, cache) values(0, 1, 3); +``` + +For the sequence table, `id` is always 0. `next_id` starts off as 1, and the cache is usually a medium-sized number like 1000. In our example, we are using a small number to demonstrate how it works. + +VSchema: + +``` json +// lookup keyspace +{ + "sharded": false, + "tables": { + "user_seq": { + "type": "sequence" + } + } +} + +// user keyspace +{ + "sharded": true, + "vindexes": { + "hash": { + "type": "hash" + } + }, + "tables": { + "user": { + "column_vindexes": [ + { + "column": "user_id", + "name": "hash" + } + ], + "auto_increment": { + "column": "user_id", + "sequence": "lookup.user_seq" + } + } + } +} +``` + +If necessary, the reference to the sequence table `lookup.user_seq` can be escaped using backticks. + +### Specifying A Secondary Vindex + +The following snippet shows how to configure a [Secondary Vindex](../vindexes/#secondary-vindexes) that is backed by a lookup table. In this case, the lookup table is configured to be in the unsharded lookup keyspace: + +Schema: + +``` sql +# lookup keyspace +create table name_user_idx(name varchar(128), user_id bigint, primary key(name, user_id)); +``` + +VSchema: + +``` json +// lookup keyspace +{ + "sharded": false, + "tables": { + "name_user_idx": {} + } +} + +// user keyspace +{ + "sharded": true, + "vindexes": { + "name_user_idx": { + "type": "lookup", + "params": { + "table": "name_user_idx", + "from": "name", + "to": "user_id" + }, + "owner": "user" + } + }, + "tables": { + "user": { + "column_vindexes": [ + { + "column": "name", + "name": "name_user_idx" + } + ] + } + } +} +``` + +To recap, a checklist for creating the shared Secondary Vindex is: + +* Create physical `name_user_idx` table in lookup database. +* Define a routing for it in the lookup VSchema. +* Define a Vindex as type `lookup` that points to it. Ensure that the `params` match the table name and columns. +* Define the owner for the Vindex as the `user` table. +* Specify that `name` uses the Vindex. + +Currently, these steps have to be currently performed manually. However, extended DDLs backed by improved automation will simplify these tasks in the future. + +### The columns field + +For a table, you can specify an additional columns field. This can be used for two purposes: + +* Specifying that a column contains text. If so, the VTGate planner can rewrite queries to leverage mysql’s collation where possible. +* If the full list of columns is specified, then VTGate can resolve columns to their tables where needed, and also authoritative expand column lists, like in the case of a `select *` or `insert` statements with no column list. + +Here is an example: + +``` json + "tables": { + "user": { + "column_vindexes": [ + { + "column": "name", + "name": "name_user_idx" + } + ], + "columns": [ + { + "name": "name", + "type": "VARCHAR" + }, + { + "name": "keyspace_id", + "type": "VARBINARY" + } + ], + "column_list_authoritative": true + } + } +``` + +If a query goes across multiple shards and ordering is needed on the `name` column that is now specified as `VARCHAR`, then VTGate will leverage mysql to additionally the `weigh_string` of that column and use that value to order the merged results. + +If `column_list_authoritative` is false or not specified, then VTGate will treat the list of columns as partial and will not automatically expand open-ended constructs like `select *`. + +Vtgates also have the capability to track the schema changes and populate the columns list on its own. To know more about this feature, read [here](../schema-tracking). + +### Advanced usage + +The examples/demo also shows more tricks you can perform: + +* The `music` table uses a secondary lookup vindex `music_user_idx`. However, this lookup vindex is itself a sharded table. +* `music_extra` shares `music_user_idx` with `music`, and uses it as Primary Vindex. +* `music_extra` defines an additional Functional Vindex called `keyspace_id` which the demo auto-populates using the reverse mapping capability. +* There is also a `name_info` table that showcases a case-insensitive Vindex `unicode_loose_md5`. diff --git a/content/en/docs/21.0/reference/features/vtgate-buffering.md b/content/en/docs/21.0/reference/features/vtgate-buffering.md new file mode 100644 index 000000000..aad5a228e --- /dev/null +++ b/content/en/docs/21.0/reference/features/vtgate-buffering.md @@ -0,0 +1,171 @@ +--- +title: VTGate Buffering +weight: 5 +aliases: ['/docs/user-guides/buffering/','/docs/reference/programs/vtgate'] +--- + +VTGate in Vitess supports the **buffering** of queries in certain situations. +The original intention of this feature was to **reduce**, not necessarily +eliminate, downtime during planned fail overs PlannedReparentShard (PRS). VTGate +has been extended to provide buffering in some additional fail over situations, +e.g. during resharding. + +Note that buffering is not intended for, nor active during, unplanned failovers +or other unplanned issues with a `PRIMARY` tablet during normal operations. +There are some new heuristics built in the `keyspace_events` implementation +for scenarios where the `PRIMARY`is offline. However, you should not rely on +these at this time. + +Buffering can be somewhat involved, and there are a number of tricky edge cases. +We will discuss these in the context of an application's experience, starting +with the simplest case: that of buffering during a PRS (PlannedReparentShard) +operation. Examples of various edge cases can be found in +[Buffering Scenarios](../../../user-guides/configuration-advanced/buffering-scenarios/). + +{{< warning >}} +The buffering feature is not guaranteed to eliminate errors sent to the application, but +rather reduce them or make them less frequent. The application should still endeavor to +handle errors appropriately if/when they occur (e.g. unplanned outages, planned failovers, +VReplication migrations, etc.) +{{< /warning >}} + +## VTGate flags to enable buffering + +First, let us cover the flags that need to be set in VTGate to enable +buffering: + + * `--enable_buffer`: Enables buffering. **Not enabled by default** + * `--enable_buffer_dry_run`: Enable logging of if/when buffering would + trigger, without actually buffering anything. Useful for testing. + Default: `false` + * `--buffer_implementation`: Default: `keyspace_events`. More consistent results + have been seen with `keyspace_events`. However, if the legacy behavior is needed + you may use `healthcheck`. + * `--buffer_size`: Default: `1000` This should be sized to the appropriate + number of expected request during a buffering event. Typically, if each + connection has one request then, each connection will consume one buffer slot + of the `buffer_size` and be put in a "pause" state as it is buffered on the + vtgate. The resource consideration for setting this flag are memory resources. + * `--buffer_drain_concurrency`: Default: `1`. If the buffer is of any + significant size, you probably want to increase this proportionally. + * `--buffer_keyspace_shards`: Can be used to limit buffering to only + certain keyspaces. Should not be necessary in most cases, defaults to watching + all keyspaces. + * `--buffer_max_failover_duration`: Default: `20s`. If buffering is active + longer than this set duration, stop buffering and return errors to the client. + * `--buffer_window`: Default: `10s`. The maximum time any individual request + should be buffered for. Should probably be less than the value for + `--buffer_max_failover_duration`. Adjust according to your application + requirements. Be aware, if your MySQL client has `write_timeout` or + `read_timeout` settings those values should be greater than the + `buffer_max_failover_duration`. + * `--buffer_min_time_between_failovers`: Default `1m`. If consecutive + fail overs for a shard happens within less than this duration, do **not** + buffer again. The purpose of this setting is to avoid consecutive fail over + events where vtgate may be buffering, but never purging the buffer. + +## Types of queries that can be buffered + + * Only requests to tablets of type `PRIMARY` are buffered. In-flight requests + to a `REPLICA` in the process of transitioning to `PRIMARY` because of a PRS + should be unaffected, and do not require buffering. + +## What happens during a PlannedReparentShard with Buffering + +Fundamentally Vitess will: + + * Hold up and buffer any queries sent to the `PRIMARY` tablet for a shard. + * Wait for replication on a primary candidate `REPLICA` to catch up to the + current `PRIMARY`. + * Perform the actions which demote the `PRIMARY` to a `REPLICA` and promote a + primary candidate `REPLICA` to `PRIMARY`. + * Drain the buffered queries to the new `PRIMARY` tablet. + * Begin the countdown timer for `buffer_max_failover_duration`. + +## What happens during a MoveTables or Reshard SwitchTraffic or ReverseTraffic with Buffering + +Fundamentally Vitess will: + + * Hold up and buffer any queries sent to the tables (MoveTables) or shards (Reshard) for which traffic is being switched. + * Perform the traffic switching work so that application traffic against the tables (MoveTables) or shards (Reshard) are transparently switched to the new keyspace (MoveTables) or shards (Reshard). + * Drain the buffered queries to the new keyspace or shards — or if the switch failed then back to the original keyspace or shards. + +## How does it work? + +The following steps are considerably simplified, but to give a high level +overview of how buffering works: + + * All buffering is done in `vtgate` + * When a shard begins a fail over or resharding event, and a query is sent + from `vtgate` to `vttablet`, `vttablet` will return a certain type of error + to `vtgate` (`vtrpcpb.Code_CLUSTER_EVENT`). + * This error indicates to `vtgate` that it is appropriate to buffer this + request. + * Separately the various timers associated with the flags above are being + maintained to timeout and return errors to the application when appropriate, + e.g. if an individual request was buffered for too long; or if buffering + start "too long" ago. + * When the failover is complete, and the tablet starts accepting queries + again, we start draining the buffered queries, with a concurrency as + indicated by the `buffer_drain_concurrency` value. + * When the buffer is drained, the buffering is complete. We maintain a + timer based on `buffer_min_time_between_failovers` to make sure we + do not buffer again if another fail over starts within that period. + + +## What the application sees + +When buffering executes as expected the application will see a pause in their +query processing. Each query will consume a slot from the configured +`buffer_size` and will be paused for the duration of `buffer_window` before +errors are returned. Once the failover event completes, the buffer will begin to +drain at a concurrency set by the `buffer_drain_concurrency` value. Next a +countdown timer will start set by `buffer_min_time_between_failovers`. During +this period any future buffers will be disabled. Once the +`buffer_min_time_between_failovers` timer expires, buffering will be enabled +once again. + +## Potential Errors + +Buffering was implemented to minimize downtime, but there is still potential for +errors to occur, and your application should be configured to handle them +appropriately. Below are a few errors which may occur: + +### Lost connection + +``` +Error Number: 2013 +Error Message: Lost connection to MySQL server during query (timed out) +``` + +Due to the nature of buffering and pausing your queries the MySQL client will see +delays in their query request. If your client has a `read_timeout` or +`write_timeout` set, the value should be greater than the `buffer_window` value set +in vtgate. + +### Primary not serving + +``` +Error Number: 1105 +Error Message: target: ${KEYSPACE}.0.primary: primary is not serving, there is a reparent operation in progress +``` + +This is the most common error you will see in regards to buffering. You may get +this result in the application for a variety of reasons: + +* `enable_buffer` is not configured; by default buffers are disabled. +* `enable_buffer_dry_run` is configured to be true; no buffering actions are +taken when this setting is enabled. +* `buffer_keyspace_shards` is not configured for the keyspace on which the +PRS event is being executed. +* `buffer_size` is set to be lower than the number of incoming queries; any +incoming request over the `buffer_size` will see this error. +* A new buffering event occurs before the `buffer_min_time_between_fail overs` +has expired. +* `buffer_max_failover_duration` has been exceeded; buffering is discontinued +and this error is returned. + +## Next Steps + +You may want to review the scenarios in +[Buffering Scenarios](../../../user-guides/configuration-advanced/buffering-scenarios/). diff --git a/content/en/docs/21.0/reference/img/vitesstransportsecuritymodel.png b/content/en/docs/21.0/reference/img/vitesstransportsecuritymodel.png new file mode 100644 index 0000000000000000000000000000000000000000..0909a9740a676627df90f4490eb54bdb96408c69 GIT binary patch literal 62871 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%0Dv(oSS%1 z+_ot=AFyyImE8!v8$+xfro^qAZL?K_3n=ymLM>GVjW11Yub<^}mh>_6;SD#+rhVN( ztaT-Q-cw%gIF+EiV8}}wN30+ATry5Qa5FmA5nw@oKY9wEM+oRgxUL{~Lf(u5WV4=+ zzdAs8pUzhn;-J3XO_h>nZpKbA9o@NXeD`UPmezefBbZo?Zp}69%YTr(BSVSRTYdvk>{$ggF zf>py$v503QMQ7w{ml|o0m#`N7*^EOvAL|Je%U%qYjk8Iq_I6$gd4ZIxX`!mim!-NS z)g{a{mU!8qoXTKve+#nbu4c6_k!L#tuhYgg>v<&iE&F>XT>V3fRWAC9084NE~}f@D2y_&6<)Uw$iJ{m_h0;?0NE z$)+H+DF1!_>YvXL1czF*5xK)zQ=~yU?JHjoI9K?+EO%aIqI^GTZiW8rw=qWKYW8$r zv{aOX3kP>FtFBBC?^yGxvf4MAm9cDtdX1a0YTqmPTZin?4V5?NxL?dl&IaPgFy8U= zUdp%m6l<8*p~1F@rIqg|pDlVh>h zK;;6_x;1EKwgO!KweF|ivoo{>wm7C=^?o{-@^S1!FTc zk=AcHH=>h1UPws)ux7UCDz`)Z>w(7XQ*1m zFEV;H<|%5W$~H*RF|u!*s1Q<*w01h0G_0y{@YbAolMjbm=|LkNGUU~u0w9I|BfbPGV`b)S8E3*z97SmztNQ)oYY+c+IE+F`)Q^lHce2o$8&$KbD z#56L``X&*Z4X^pK;MjhZ-BxgDc9@|_h8G7Bs)F!Ky;8>qxMLZ0fsUmp*6w$3%6mac zZFUU`R$-Dg**ysgM%pg~ZPgyWljk#jK1&D=o)XowXpOol|zuubB*RFnOQ3NNY z;{8>AU;LG+;@7FW*5UBP7`2PzPb=5D=~Ua_3mVsoid^!TRIQDFh)Vv0ySwN1cD2~! z4fp-I0mq@zuY*3Zvu}^KosTQERq8<{V18SMQB8{TV@comS&Je|)qn?Cn|qFZKd3WJ ze=O<6@h#m@EN0q1Ui^X!90@7Qxe>pV`fxy7AdH?<%BgTL_1V$k=!ZGj0emLO)!3sVeMD^I=>3!1sx6stuE6H3926d zQ9l+DpFYf24_JCh&)n9ty*?>F_^I0V^0xLqH&=Fb%#;PW?W~q`Hs*o>J?f>VQ=Nq7 zIi{KFm!c2f78?1i44cZEum}shmdRztO&)Yju8hSiJR+}Hrkj2^J>+GwX5?%Xy`T7X zyQ5_#!{m$7C5i;=#VeX-mbv+NJ^|p_@>ngUc6HLrGMvvLszGLJX1Yjb02BTB*JpJ! z&qCM3!+DE@?1Em4OsAnItX)S{lM{VOlUBfvOv~SV4);rFR~6P5!%C_R2f#lS_?DoI zGllTUYvwvebFO%)C|-^~NnWD>F5le#1MU9ak>Z1}ufZ3|>2g)yiTJ${L83;|V_~o5 z!11=yKefQx129lVCb!_$SN16QkE{K63{@>^1Ama19lmTjO<77L7}#{Q+~lNVn>x8) zG?|plFpEA~LeKefcY=})S)8hVnEK*r4Sot80ovHsT+Q0p*l|Sy-*q}pDV9P`#T<7b zu6RP?i_M{%a)9BL$>u!wQZ`wf+qde+-02wQyKOSl?_9dpSyWHex~$X{rxQNF*Hq%eI$+(A+tlXJbx!diG-%SYppJio+L_ryGgv&*TRmT!@sIr;fk!xCXu)9*`< zRvfD;IqvJ~2@HrvSOZYunq!6NSo=ap@X*!4iB1#OhPAaHqH1MH(=+uQk*0|_cN|hU z9o~+TbGE_$ml!%hgDua<<=9?E$_+Kp&e6!rjx6CHdD6RdOHlTu>_qg^@#9vh;%2LF zMlpF_(NEBBQ5gL>d#W}&Syy&9hRO^YQl#)kTYGmI3aWHse%SNx*kRWZn*S`s(z!r5Kz18Fds zL@%`+9#ob51^0z(zKpABew)`s{0g8K?p|+JKw|k!NS2hpiFhRC3EaM^(*D%;fkk1U zgX+8p#o6kHpIj1WJsQqMczFHb zt0mTJkgDtIGcI<-SG&jrT|&z3g3*InyURcX)bh>^U|s>&EP1=$ImTt8)T&-p5FA{k zpyFHjKKt4_pi+$XnrA2nF<>2(Avi}5YM=46Lt3=F(xNe^%3R!ed0(!OrYM-8`7bd5 z&ed;7VYfnqw1rKq0NP#n>kjY+W82dlS!KMRd@MpTV@o@S<{0}LJ{TJ=06%%rJ(vq; zl|s1k<9Z;6(ju8GwiHy!D79tke?Ft2-)6pK94CfiAkrq|jZgcAksTlB4vQ18)!`?J znO^hUVOZml1DUhOp2nB@kvS9yN-V*Nw&!Ub}RqW)QT(>YhiVA&pUm+N|9LZ&!XJ)fvgjIgswYoLn;7eWNQ67AS z_MhcVefHBAJN?FYg}XDBz!Lh#Hd4Ah2n<|JHFiSz`EyjP2dYe2XA>~`YNA6 zg(IBg43&E=!0c(pU(hwU0Kf49ffBHdnYB?eu(Q6bRZ^gQ&0Uv;O6$=fzTl|D)vRp; zBz{~sTG0WyWp8wt;$B}y*09Iv`N*=)>>HfU9>AEMK~+4nEo&_H3jG{rxPuA2qvx20 zt#G`e2mfU3#4OA@))W-90T|H9V*xcx%1yPF!nuGgjmfK2tXG@|?}5P70ZK9$P~EI@ zGMIDG{EQql@iK7%r}{f*K*qk_*$ql7BYAK^U?oVawIm*D^0ek_K4L=t<{hWm|Gw-p zj+HDz>=FR1KsHYE%G}VI*bTn+>bf4WhyXNlOrFNabXXJ#7GO(XMT}R9B*xO&%f_dnr^wwrPyNeqn)o6 z_gr31W|MCoYw6oA9eKdkVEZ8>^I ze)p3oYx4R|-?t1s&IpiC3*7QsxfC7cKf`V>Cl-R)X;=@4wNm~ryi?R)RJ5|BNx#xo zv99@M|K|6Z5qq?(kDNUnU0+%cn1uj4!2)Pz1@f0Mhd&qs?OYpC$GcIf*#dMI4Aiv; zU%02{33%zGkU4feZy-47d&EGA)atF~d%1ysqOKI0x(QDl(l0Aujb>zb7Ko279n>IPrCHpJ*`u>?2%ajZhOFTCxB;^!tp zT@!EPUY9eyb09w1$jiT6yY}Lb@SsJh?+x{urAnM7VjZPobRz5ZtJA5YBK`3{$4afN zC;fsJo=y;@aHyhjSH}e=D(5phf^u(3u0CPHb7Di|-3mJIB`F+i`RL1DMRdqy9GF)2 z$%b|?bGoID4H)J44-9Ut%?i4W*?W9W9jq}?wW18hX3^98yMemPHMUw7;2Z~ zxq5W*k<>Xtiumf4q5^-REXmnCyg5X9cuO7RHT3((c|TyP8n=q>oGAqn-F%rA@#Eo% zJd29kUiC2y3n7iJB3v)77j`R^ra7&I^$wdft5ZoT-Dmo*uE7F#i#>25^= zGnexapwKy|;lIQ$7>h|AY&zO1xRN~818^SwdxqR{YVW;+qE5dz(FT;DU?3+&M}lOKoEa4*gV5v*HaQ28 z)SxIcLsX%g98_Y{Q8uKrZ8W$*=8j*4jSxAFYLqSV!4Noe+a%~7t z`GtvlC8Y;2*_vpt0q-GpOJ5`2XiKiX*vYm9!`v|7Oj7+h#{f#`FR_>P2@@6c!G>3~ z9c*})HUy42X6-#db+;!H^`gNLF!~nIs|^VjTHpkEKpv~@$47O(?DxRl$0UtFS3KUx zrI9LI{29bmk~o_~RZ{_$FCA_*J!z5g5)FJuFd!~7l<|MEP@0SCqqN2q2y&l~^J7j$ zfrY>05Cm$RhSj9qYuVdsZ@02A^e=Q1I+z{F)mjQ!ai#M)F?yKv#BJx$bSc(xCr-}i$%XT}m8Q?m zh?yJ=dU`t+iSo}bT>6+JB9ge3;L5meiteoH%+7F_bWP;p3w==xNyw=-7o;!ikmyhM zeF?MY9&i+Y*Bd>QfL^R*=Zki0%Nbi&Aa;0_@-=n(Df#mS^l|Q3bbc&^%g3b}2H!Cv z1<4QLN-k+Subq=F^0L1H>WU`Ilpo`Qt=YLyvr@T^S4TA3_JCQCt546qZ^)TR&0f0M zGxyHmg2yI4;;0g75}w_^5U1+IuG_aAzlw9Hp5&RKyRzau-^4ipj+LV{uj`Z zK$K3WHGvZ^*R^)n)A6ulfcy&Xz-c&LDuc0El2$jK_Ig*e`)^8C1?Mv7jaq_Ut83QV z7J=P7+j9r8j7Q-&XJ0!MD^&M@+zzh7!l(Taz{{Myp1I7zjfXb6pvd0zWx7Ve{aH*p zqklbuT|UghE4jk`t@XUNwmWx=SZ1hC=}?Yws=bEE6KmS(r@hf`^!J-?4Fw?FJEfYV zaqUF3)DA6j0dh$K;kJY8H5y``4320y~gCMEK@LFXRK90QuYZ z&bPJ74t&73ea}%@FzrkDnopmu*e<@10)UpdDxi%<;&jlOhZIm$T4*s(zRM)5g>K8L zoFWKWH;%3UB7;0`POKlvY%FrsO9Y##s^vFo?9`Vu@^M?O`1+pD@{{o=KZvV7me9MD zWjtl5rkC&~D-?lZk;Yx-|E^8Qg^^1Z2se*guW_8#KnJ={wAQRAC=lXjh-Djd^vmqRbf2L8lgeqa=HeVm27Yz$`~_4^UXBsoyPm3UL*?@A!- zEumzD*7&BBg7r1Li-2?uqy2VLP|z^sCDnY5@G6{AcQOC#ov}uWPtWqC5zqR{qhKe` z(XG{qEH);S5@xmFS58BKj4QuXyX-GYy8XEakCF^}T$R~>voui|dC(`m{H|FP7&v+F z-BVNi^CT>4e9k9;wJuR?cowXiFNsa0R{y3*6tmv05?t>BBsSVJ@4GB#O!$ysnDwI8 z>!4_EA`5>dBH1c=ea}ONmY=;RMl;;!dYgItw%2Ac1V7mT(XB4!{7_*9wnC&hy0KY$ ztH6B4SczHIfZZM+tCEkEa=k8=T;Ut=yQksIU%NCgoP54L-vbC65Mw|RECn*!67y(` z+&^P_o`OJR_pY({LrA8I?^1-!(NhFx>>sRrY#{Dh_io@j6@;RgF{*eCc4LB54HtKv zL9mHS{1;9amI;E#;2IEu`U{d#Ck3LAZFK)W{|i40OZi`t#IkcdP&uYs*}AW~u|P{C zAM9ZLP7o7((JA!Yj_T9jCC2e-m<1{7!>nZ8P?-C}bz0W(#i=t7RPy2PuCxeV6}fIb zmwcb*gZy8VD(5|i-?~45^U=N@nmHdziatnJP^NqoMR_bHBrGhgGv<)jQ-a=>wpwx9 zN-pU<@=Z;1fLIqg*Rg(mgVOs8K&a~U5c(I8=gYr=JU`RkPOg#-gC@TJSvM#TSBT95 z-sFCH5ZfjH34;#!OJbYx*N>2r;{2B^>S6!}lSl^NVp`Rg{GRc$EN|}Xy4#rm=7a^3 zhr?~>ap6odqtCSgz+qMZ6fv~l+l>>pF-1=j`rP(USR4Iz&Byj(89CJi(a-(j;VBpHS%zuBnYN9y8mJ?>G zu#0^Ky}9n`ZgK<6%FW^21Gz?BnB`xJb({i`OjI+ovj))9a(qEK16t&@uGdbT-=QgI z#pn`-zOf^P71c{QAuR9cZgohk6sJ(ZWDRz)pz$InX{uqz^+H!^g|x2X#ZWDKaS9Ys z;gp@u!`ve~i6N@zx+z2F+>b=J%USW?r<-%Ziey>7q2dShiu}xgSmdMtKqD#l?XJXg z_H`~gapN7y<-P=$hQ{#@;^{67FK9bj`pdZi;g^$!Vn_y=r>1MdNh>rpu-un*A2P#< z>-1-h%UlH*xFozctX+U2Aa(IMn01J+@Fyz(@iQ&t5$%jpuCvDp@%7&ga8U>Fy%J@X zZ@sZ|5yV87uiO953E+D_20&p3Z$7(#@($2L+oc3>^QlVv;N@$VH|KOH6X7mh6Ne{= zdtlCUC000I8^^f5DLEWMSZk0x-Rx8I zA=18Oasy;Y3^hU)^xV=p7$4=Xa@SVfE^r|}8g}nd;q+djsoiOuC`vwD)LWn+g`5q3 zeS0eL!a3HJHj&b4P7ETBT+q&B0(hKa=Z^%hN&9}FAog7<=?{j4*RrI1079B3dGAYx zcm&h&PV-RLa8~z$7x0Z7>$R&{^GuEb4zwx$m4~+vzdw}WD0LjE*x3e-QrdVDr5{`} zW5DlawhHApKqNBC5f5F`=k4x3&8u2dT;1qV>rbkjdZQG4vORdZkW;3L4eP-q+sQt6 zI}Ex3bm=-Kx|MjBBxj_CpX^Sr@FGofcLrp5+cx%LF;eAQB%ZKI?I8WjHIqd&FuOmF zi%Y!)WDK?heg7hbg=*6YCksJ&C;j=l@IdZEM-hkayut~6d|eU}EES2AAK<*Z4LMX) znd09TPP7So@eHxt=yhOdV#6y=h)5`^qH#mg*8YQsS=)&E2KTC!kKuThq=)Y60Z6^i zBu$ov09o|kyVu_hImmOIy)*1qr4TUi+Ab;hLS5?4+O>d^`z+taV|GpTYUGii!1`U} z02H>SXG$G7(`!SN2O;YKuw(&l)anYfbS_t2TY44nHRbn$JAd|Z%6@vv@)+%AZQHd9 z+}&!k;@fGwem0gF4}*{_H-xR#v833o2jUdwbFHNGGO_)TNz(H4967 z5oY&Hv94j<b@Kwu)K;2(A65~oY`mA^cNnZA-R(kB}DJ#zqzO92Npc>+04Bnt%TTI zWtQ@mogSIPo(bUXJh4^v7NwOw%ww{tS7>4%{CNHFdTh(M;th7Z0*tHu9W4uw7WcOx z0-NU$f1^hb-WvD7OHH`*_wp*B0-xv>WuuS{kWGDiimq9sZsYrhthBoOt~r`%S7QXJ zEbw$M!tt*IEV=+B%B5XQ0A@zLBT{v;E8J997Cb9Uq^#H2KhgL!01!9wx|p4B+1huGw067jk7-BolJI%a(fhX zP04@f5C7YXA~#8{`S0RPmJJy+T1XX16j)LtliMM`J@e$7l+GYB263e!eBIbf#p36! z@t=@HuoQnGeboq|smhxdK^UGwTIq)kaLQP{jHj&*_3wDpAt#_NL)K${!2o8Lc!j%* z6~l%PL}_tB&GJdFZCPZFcRLL}Q-hQ$*A<jv+X)-HeTh+&ug3!KQ4Sofu6Ng*B!Zjm z_re#Qaz0!+C*)zER(Hz2?4)aT;i9QZYYBJ1Xh7+eC+AJ$b~|kvrcF4gYJfiL zz)g6E{u_3_Y^|J{t&%(sj46Mj#?5T~a;_e;^xv*UZng<@x+8O+ED!4eiMCGzrmQSG z`Z>0!d5f&)jqZw#)wa`x%74TLyE~L3jUM^#;F~z(+o|O`Ech7^6o>LoVU zLJ8?HU9eOyd1roC;SkR8eng`jE6#0Gk8toj+Mfx&eE8ht3W43jT$}PzyyDlv1u$g_ zRKUZAKZOC|U_DJcEWZhQ(Ggb#2#8WggZv*amveWxwaTS?ZfsT>@n+?20K8dcX);%A zZUOysebw^h?7W(a(qur0m{TO(bBaemhjzOV0>JGixIAr_0tAC}HrvedQc zj^fYME~4*^LenLubu@}%ElIOiUTT!cc-hC>%I5EmA`0)Y%s3ryInhAeas@!%>#s7a zg}$6ds9Qxe#i$GIsfLAH;tm43tglihudk8fPAXS1WC;+i?OdnAo{ zZ622SO(DCS($Y^B6pw*1*JefeVlipGG5AP&#h7c`zSs<3Q)YC+!aQx5xgzfOW_wC) zfuLSDEzDL1J*{J;t?ZANG{)8lhIk%PwGX7a46fWbA+nSlXdQ~nJSR!N&~Kihy#Ux2 z8-aPE2Mj5u*yV5-%&J97dfWQ}+s$OZxcCpX5WsH+6D&P_NTm?o` zluW5!Z)~rxO#E$*GJmYP8VBX3MyVT6S~UtZYM_sF#5{Y?=nsf*x{nh=j6bHY8AdHJ z^-?A@Fg9$kKl^ij<1Nt7qxX*2S!m_VGaL@g;v1Svi#Fx}0eLk_K=$VYwn5?M>oe^X zPF8f^6p1rA%wkZ*PiC zMlW7maI)_~@2dSiJVuMeoKZrLa=n>mu;+FF-jp~ioKQKi2T)v2SRF6A(ZH6{$bWqQ zG{5)Tpuc2mOn2TJhf8?=x?AD`9jtFC4>Jn0rXK;M3*E?5CSO zpcL;PGTvI^8q@JoF*Xpw^3SDJ9Ny-5o4Rxe$06i%|T$U&!6vb&zu-eAdif~!5`mvy=-|KPB=%pEjAZbiFR zByCZ;S%leO`5Tv{7nbTy`h!LZyJ-cjh&n;nL;UnGF!YLJ73CY9ylrVD z^eJkREkS)mEj+Q+FzZsEZ?29{d?$B?z89AMx*divDXzCZNQm{2UamK%6S-BCC~Ud7 zrt9D{aHKJK41j5uHh13BHZ1bK&4G(>Zol4E91;wC-cS+5BD%`vzs8n0y>hg?(&1gB zBVS_U=;-*izk8*0WUy?|Z>z|`4O7uA19HhOiN+oOHaiPkpo_|{#n?%P9xKQ*Q=!5c z#k%#Ltc)6E=fVk}YPi?}#YL$y1KYt`muuN#a){jHT`}J6NS1|GMRk(Deb?j1uuHeh z3T&GQ$}gLmSN?Xy8b4+80* zOy{7&2l7MBNsDS{Iv;i*7=*I(s=?+k$KHy!X6jse7;kleOq9*I5NBBrj7LQRr?!{*)}Ib!H`WF8z} z8VVc?=^+6m;SgIb*bq3~U7VlK*KarHIpk=hyCl6oP)h10c-YN**d5#~)MI+In|$nL z6`OkQKKUR(7!c3{1KyrsADiWq4@FmIvNbczwCNF5| zeddVhg{foc)7#r^ldAjj;Db?z9`O?b3mCuS@yq@nCMHQOLI=$aErfIV7q`|wYq#@F z+hznNzBs_&y~QvS?179RE!NF_RIa_-eKE$8g9pEhby;chrfwfmk2!wbhQ3{oiT36N zf5GT9jt)|#65D=2eOf&g73!5sUx(3V!zJU^QCCz-==+!jv(Z9Y`$mc4MYIz!Tp1N( z{l-2HzfHm&_WArr9|#4F)Y~|GAw`qfVS1Fg_k3!%eG;epkxTvhGM6Sdz_&h?dkBKd z`{FC*Lr%4R6Mi3nW42N|Qt?%GMU74XreehPrrm`Qii)uC00qn{(dCIgsb4k_e6cCg8)@LcVh8xme?k5_TE2e`%xkF}>DuLt5! zM(*__Qv)7EkKCpd`hb=%FZK4c{2VqrNo-Zb4SNyx+rqU8|^~dOMB@K%RIAI2JBj+7-AEMJ)W+-44Kc$gQJr1rh zhOz}3zo~Q3ZC;2C-P7&OS4!t-1KWCh%@T4=d`H}QzcpVDWwKjQiAYF-F!9Idl$*Io zGKGjg5NMv2F8%g@(UcWcdN2&M1Y0>kgWE+ zi(peta9(bHtlPtMUEJMzwX*@!QA|%#%EG4&C{HfvBW|;gV+zLx(&?Tv%tXCXYH^_u z=eQ?NQc30(-1VXtA{`FpR@N56@Y^@|*on2iZOGydC&Z(uVbCVFNwDY>#PBDe zF(&PE<{4)59Z2T7)n{(A!O88(9HV|f!|8lqI-GsK>pTZLzFq%ZaDiK+!9(8}d{fD_ zfxQNXK9BnL&1X=2YV1q!!sc^OrB!(cU~@UUEC?k;STL z2 zpQP5HhNF97)wQ+jw=<^ivUT*0~0JM~IJ2YB%)RfXnerNu=%1M*EaIof;I3`1IE6PqeSEzgj_&bYO z`)kj&!EMf&er-J#WrYiiJx64#BcB}tR1Y;6<#B^Z;Pb>uiEf)eTWP^)YbwfT(FfDr z$Jd{ZdPBk~1q_bt`TqQL4Xk#nVhWcMUHZJ1oE=yl^78za>_QCE$9C6hljk@ozH*dR zFO?2a2R@dwI6z+z*2=JFOm~SGPeoKwT)@_>P|z+?&sg~8R&Nb;&LFcBWrvRFP%y^(@w$y&o5d-h&iE2Z=9gmX9zsxMGQD1Q17wZyD?>mMwD z`T(2EZc9yizOpq4|JujffNY6@+fDXYB54~Ga9&Ec^Y_-faukR4HOPEYgI}==1emo7 zvGh~l)HdxynH>0kr!l;Ur&~R&D)s9tkW*tv~i~~)wY(NMG=5ikwhtj#yl z#vrc@J>8)@@O9<^e|Xvb$*Mox>Ew7oc6+8p|K z3j39be>nQlqd~PXPaVdV&PqNO|7<(feQX;LxH<@gfLFmX+n;#D=BRCl-UU-;IFxb4b0pPi#nis!ox=q8m~SsG8|W)E?{`HNwDK9cu&Qg3 zRid6@&E+iwGta$(HZen<;jw83w>g`Y{$y9$6oP1-XFI`)f{Oc_R`u@aJsbayd+C%p zTf7#p6kUpL)JBayJ(~N`{7^U{DZL{)sZMcf@U@+ME=zg()Zm0SzH=NHW7r_Yx}_py zACakUD{q;A(7l=f9PhKS?V9bJuns)g5MY(PTW|ad2rVq7yZi7 zk;(H12vqigS5~mz?u2lsNT5Jg2i$MTb-!g5WAa0LKc=6>9^Oi+*2{j2=yja|-EGbW z+upi?+s&yaSv%+gdHF1R3$HdLrgr*6FNaxg0Y|othi1+l5&OyO4UZHm(b-XOlv}Jc z*XEJA;GG$eHgQ`T%ytap)So;gKE89UXaujG*99>Iwb@-;c~-3$OdjWPfVyLr(reG&z>~F7HlCMlM2UHl;3Zn zTBMzq4PB1*dLm#O+Cli_Rf#e+>WtDeZqzU(-0ae@$N^ja)}sRZPiyBr>k+Z7<6t}} z%;HM)j=LFP+ML_n! z+T%U(B%DB}*Mb`n14cIE0%WG{U#~56BDpTSALEy%g4+t%c)k+F%ezf7zf>{~j0ky~zLpGt1@zc6HIopXQL3exYuwnpg@$y4!6UE#Z6 zS^+&HVqWC|##P>WzH>)J0F^{7!xDE*C<%L^`sUV6*vRFm!LDji%3?(-s3EV@Q zz}oKk*dUXX3Nc@!OfZn($lqH@4p*$R$qG<@E}L~{6Q~m;X=!oxw=p<=cw3a`*duo7 zxA9{5xS~%sl@P_0f+=>O!;$Jkp~GH6zs~mSEiF!86l5{9){v`m5EO_#al6p6_Eisq z`icqSw`};1V{URzXqA49-6#9p{!TR|6>HfyE;0zX6H`FFy;Q8zv~fH>I=omUO*{#? zdnZ6b*~+Ii3xrTF}&6dYW<|wg4NHKV#N1C9Tl9 ztyw~9&H0l}5IiX0s**<`0K3g$10Nfe1k=eHv_aViAE9VLiV5IpiH)E67?+&9ySnKn?7TZKp5EKWUNLE7^!ftJRe;=_$ijqsh3Bw$I zidYkz5{d75eye*1@TR%n?e>8WsQPP_SJCJ5`oEvihX-8Ug|fqHJS9Js{v+25J(Le0 z7)k6&UNf;Zo(T@?^#5k_p?wB{aR^r2S@Q5`&;KgmO`na=4?_UH>{3-v6>Hx4nBsCk zM8qo!#ZNcvaAiq9UI5@t9s9xJmcQ^> zAN=~pn}a}+B={cUb-yJOEHd?kg8H8ldP@M^7ywGqAw|3}_CMT&95@dcVu*iHp9f8q zAs5Q@%XtHS&k-?)3I`nxE+ZcO9_Td5oo|7ORx6b&((f-7qqF!xzo7l|Jh|il-0=VRTIyrC^s{Y2 z094F%>d()F`f6uA@PBQ?nub*Z60HyrlZZElvW$RYiOqkx z4**>3T&6y~o&fpITs&a^Mj&!Oi%>^Z-~yk`|5#MMEoFbDwicoWgG$B41Du5mSd&(e zWIQskH4(zQT+!Q?V<6GF0yIw6w{?uY(jc)S+vXM*-0UCY-#!K=K8bG5z0S6?8Bv9*EUQZPGjrsaLur=L#r2O8ID#E z;XhDQ-f5eRj_lWo(Ddt+JldI5s;Ssb`n1*Vm&Q$3hOr;>jj*hAv>0u--K&1%5>)bQ zj9bdzl|p>VpzHEF+MShHp!idthwBSYj>f2XN12Y)b~&5$fH|{BAK|n9m6UZ_w0AaI zGpMJ~K_C<@&1_$67*8QPUlQRexku*4&9<);?>edoBAgaWS|pD)FRX3$WK`w)*1{t+ zTPqlE?a!s{C4G7VJ~pp-8sc0?C<-;8bG5H|SY#w)@nH}t(rj7|KJM32V|l+`lw|mC z$TyJ-_!@jipBCAmN^%CW{huQT!&k?;LRcqxUbY!gGNCe zNxo|>gZ!Z{O5)qjzz}+Fa;Ohj;>!PuZES*mr zE0K)1hJ>3%X76;;SdALss!i5FS?S`dO2vffB5i+g?IVHBMqP%}McBt#d=(5uUcS?j zuYI;y*M-V&W}LGnFU|^bS0ovR2bzpZgk+?G;7mOw!9~ zBLh~OqP?45_BH9{d4<;y-*SCbJWTYGXDhXqIriV=Yc_otY@SfAn}f1;#23~K=_n1d zif`@%VUJF|L!J)!fTB<9dg2ZEx-Z)&^m?M3hIY1HtJ?tUkZ?rg?3y%31A-)+JIz-u z^%&ut%@}_N9_`S*jK$StPex5j9{gxXl(9;vto97*UFmk6B(*!i=bg+lZLb`Ek59M# zVU?zZBVSbD%Z$F08hPW9+XWmF^6M_zqf#{J6z9|Q%dx&jTID>Gh4A3J5i7r%AJAQEriw zj{gO+fxUUwgj}S9>xaI;{I;Hv)&qDu^x?$mrQeM zg=H^l?p2sI1U=h|7xt9sCoxVd)DhE~R^0H(Mf>D!das1O8*9Mu5cT{TIiffa{;Bw2 zn>9zqX4ZAVN=dJ!hFq58o~=r3J-Yrq(YO6-a2IyhT(&Du1^}I#^ zhO8&+g^)GX2PDd`^$5guD=~gXVBeCsMPtPgj;QEVj?{PXN$PwODcpu6kSpl;r?%?s zX;bIFKztoLv$mUs!tx)oL@9pEm#HB#voot|tQWJ#*sl}OHN#nzsER<+6b&x`rJJV} zp;XxhA_~=FOAAR~=KMVwAyc!n2iH?#>W+SNeqylO>6_r${w3xr$^A_RYi~dxFCIbi zpoCjKs#OmW-^$J!t?3xuKfT%TwLe88jZ4WTy|q6Ro2oVv^?TKe@zx9WBk+5FMhaq) z1R1{uD`|^hDDGt(6pPQ=qXhAKr|ECQfF2;R`Ni~d?eP&yS^GKyRj}rv6+2iUO0iWj z87_ey)=63sLedq5j%bWmy9R$wOQ-SMUn+~XzbDfwoyLs|Q@g8cv#rtNv*pdRfV*PO zKw3G*_wW9ks;_-l5DItp2f&{T1L8a*QZvM0Lt(x4Q0jASJ-KXBV#IutrGH@!)>z9= zMXTN|s|^GPm=V5lRC#OL*v|FpCg!)*p+-%@{<(zcwF+C)JOc@grkHj_vdm?ABxcK| ze3d=Wvwha-!+21KMfk|VrdMro3*R1DLg}dJNyi48TYLF$tk2S4B$2z%Yw2uQl)xXol-% z>6n6ly!#z{YhQaO*`|c7Kk+WLNO$L@HD&bgcB~fGh_kl$Tg|sHW?&Cc!S<1tZsnGa z)!9I3sgt9QRN>E=Pp@w!zS0taMVV^$)vh)%Xi}8255+gXNWgU0&aY<==rpn3Oa*;r zJE7?gSYw}CA$qYhN6?0YW#~=6h)KK!n`{}m%{s)v(rjN^nY^AjOYz0FlzlRCws2*B zKa;yh5xiFR(NB{Gs)epRZiCV`m37nh&dz;LfNcbPHE*&waKQ)?UZH!|0AKRUf+6_i z4uaJe5O)!E`loup;PSRAKvz(+a`WlIYO_Q{d)9rtzEiyvaMCn=#Q*pZqOcK{Z>Spociy*i6xzT3H&}WXUY>CjeOE zJqfex8-@aj3C7@ty%J!4mfKv%?(TXWUjo=U*f%Z`)TU+u7o-bm4j51fuj=-kOremh z0XPq{)2l~hnQj5=w%^+eT4Y6ro$t8-9|aZQSNLlimOpbcEcmXR4mI8VKCx!##*+hn zHfDfO*Z&PzqeU^8=Q{AaEdR$gVKCVL_gG4(y#I62n*ZCpq20UTA0GuDBjmjBkvW9K zM=x0s#t@%P*#S2PptLmrecLQ40x31lEwd1iHsgE@t)>}(L!KO@EhYzzCdIBMu)tH9 z67Vza8$kX?lMI3g+SNsixAyU4qE5_p+Mnde|8)$Qrb4(yL*(vsBj9S%agPaO5TOQR z0ph})x{pWk{#1+)%zal_u9N~O1=R{)9u)@xtICNPMflS(0o#~`cwNBuQ=-e-VWgr2 zVl)lo<8wKiuwbEeP>#+s&x$wwu+USba`3%%#D+j&6X>`NcW;LmIT#ak5uRA&rZ;{X z<^f07M4eNhH>i$nBFI+gkq%V5wFs#fY$f^e|#9}%zrps z7KH!haCv=R|K6D~7;sh5bP)gGG?y!VASCiY~qJ@VfMG*5oEr;Cr&V zmO3Q(J9uI$>z(NC z=-t(2pNxJ2zUsbqs>bqJ%Empnnc&TZ;E97xIhWAE zYWVf#eKc&@3ga(TKP?i>c6dCu^h!NE+gH-YTCh&bSO0 zGWh-i$0J&HyTd>Em7c-b%*O{OdDYHj^8Fk!oRuIYt4ghni5Gkdb#T~hClyVCRYhCr znb~W4o1F4H{JmJZI34Uz0k)eQ&O=EwCU%Vv_nT?osqhJ?FRVUCCo}C0bwUtIIC|}@ zSKm^*^Q?!eEr#oC^k^@RYzI$RtpmU+EMK1_=5R4tji^o9{bR+%up8-IDmK2|5i|yL z90rd6%;h;kx+>9g5;0|CVpXI{UYh+5giqb(ZtalPDH{pac#{@+w@ z_qSt!0mAvhSUIXj~7lVP%vu{Poj;{ivWh zOj%^RaQv)sQ(|OtTQ9WMMK zpnih1!~b#d)`f~cF@G!S)jB|A>d-31vn{TD<`gh}&|bUHMvz}x-k$@3@lOtL!(J{2 z4-D(D?7_+Q58FFm;F{b%`&bD9gcf8oEWPvVTfTo)u(}p7@GYtAUq8xkQo}4?`i!=o zr8~66C|`WC7FBeq&i<2B=SJtL;t_af4F5{f#*#R!sIl4!5ZV1x#u@Nj#(;r|Q4zqU z_w&a9ItzMbm}QvH*tfG`YT4GZtxQB%XAiOy{#6LCZK?n3-EN8iRB9Re@7saU%2~Ss zN7Gr|{O|1))t@gaJFYZe$aB;;tnnVBY3lB(Jy@nFnH=>Usa>OfMt9czz%>4^RlI1N zjR^UrWbMoL5ze2NXKe5D+pym;_J{tw)#?V@C?Y1FOHAUri+k_$LJ`<9|J`g0iM~-L zCVHF;tV!W)^@+J!Te$mXVr+PArE`AK-*0B_Etzb+UAy`~lL`&>@wkZ0qyr(J+*uQw z1|19;I7(#~`R|Uf1qs8Bmtv2%u^z|GEB4#e1Tnw59p62T0xqh*F?Zw;WwKut4>DGy zk$u?}S_%XyBYhGwr#*|$;12h+h5r_lo!`-sQfHnx49(6bKxNrmTeB6^L7CvvzjA=I zntM1{wh&RHF|;-yb!_2ca!5N{0PCYa^U0ewxyN4;pu%aC+Y22n2&g4*&O0_g@0EY* z0%{e*O(KNa@^fc3^vz_Rdr75F^eOlFm*WVvp^GD9qimypsFFf9-7R!Q|CH90fSL) zLK*>&*rK#iS;7L-tgs%1GoPvDm;CgGHo+JbFk2`Cm0zaQifK!SQ|+VLqun{eQCmxX zB}Jqf4p_Pe3tD6jIXJ<0Svy-z&zPR%9BeTm*996I<9WH4_Y%jL2IZ#=)AWb^_m(G1 z)PasPyB9GFRClfcLlMV6>S2iuFiByjVcWgSpe>%&wcXSYL^Opa`G zJhNcY9zOoQnWet_6369s9v?!-Z=jkB9X#47CKjGlVfXv{N1gi?)(0QKiIl$P7|3)7 z1=Qxb*^Bz|VJW;8B{-nJ|s&dvpp+u#rtlS9g*o?RLuinQ4^)5n`e)Uzt$}ucAqr-wU)PUSTVsNr}8+ zN_5}!jX}tZ5OkRH^Ct>lVP=c4REm#uB+o;1nNu&);qY4$pZ0fL!SBp^;p?-tHP^2x z<=zYL+!%|U!*o8h%_;M#tlZNAV|cX8zt)A8C;ZTY$v=Hfm$ARfLGIb++3o|@-EZ== z;12Os4vDNBvz|#6yb_*2ujstUoWGgHdX+DmD2JLvL*-(AZ=;yag`&gn%S$LN?#jdN zc8l#spFRU@pIjZ5eP^pE`RFN2^Leg^XG6)F6fY63kexN56+LLmGpS@Unl0%w8laPq z?Zwd`7n5`SZpgNwTyG&U&4csB3aiE{4x;h*KVXmaEVIx=*k79!K1`|BWr9S?A6aD| z?Y*Vj(K++lm(#iT62_`mhtfLLHFxrj50?d1n$xebCe(7zo{m_UJfg9{JB1CS-WX{qCsBa};TpHHnY@HJJIx-xd-_%b^MjTs#U}FdC5&8RxU%C35h^V7`H3 z^xN#xHqn)3q| z3?{o11^X6QbH-ce`rs|xcQum%p4rMh3KnuUA%c4=|0aF_y*&AFqj}DbcbN7tXOvJt zpO&X5$wgD{0}ltPw|Qd5v$nQxRX6?4;Kz^2I^J9%rPb$z1OM3t!PKwzma+yS9+}x0 zmT+;PRptTgJ#$`|ZY_BJvCKhBr_}`mZi-7G>-m`3CVpOqOChsrr8%LniIB0Hk}r1n zH2225{%Iptp%SN1MZ_j`>^M`cb55kicBKf?VAm&f0DChBQEzrt(O_!#>QNl&#q>h) zk-{c!jpq3kJo{4-Kk$^4-#GMo2`nCEap{|@2K)E)KKV0JtD=5+`JokZ+5dP(N2%KL zP?Bpeq4szx11%o@BNl+_c70xqqDea1-_1#sDN~82{BqnoD;GB;P<~AGj=>x`Ris{j z>^-|wX1TX&@sH`P?(4zMW>tNu2FFKE%{82Ce{ooi z?X=QF(?@%aUXJ;dx9Z$x)B7n76X&5&eg5%_YSoJ(a?Tugb+WJIXy(wJERQOVqoU<*8o52Zm(8C3p<9imgoXa8G`+Xv{!1GJo=(qHefm0&lKNut!4Ws!K0tbo;HlrmOTt-@O|pMK7Lhk?Y{c z8!!FEwz?F!?^H71HD5nh@=jwwR8)wLG`>vA@mTI6o>dvr|Xgw*l!WHRl`){c9j z3LHa$ePPWkM~3OG13T*?B`jf`Qpn51osw?}`z24-zZk&S3+mop8tm~aK&ra*Nviru zd;A||xBr)v-M+^lJL!m04BGtG&!*V#F-uAvqOcM3<@mEzNVeJDNTc+8fFu8QyV^fX zT#7~MA|*i=|4hv;-9Khn_`rZ`6W(`fx3Pn>O^mpukCFr*tfFyPMCQz13!mFAK1Yxu zVcxNTL$$XbbDT6R5d7{!IY=zR+ylj&_|LlYwc?^_EI}99OjYBV)#$Dcclt~Xd;=ln zs*Q#J`aLS_2}lb!EIXSo0>WEM6TM)A?f>!HVEM3;!ILmN>#Ueb^IQx5Bbrk`Q%Zw$ zp+&>BfG2mFxzCpKl!n4)?<}XWYXRuL%DHDmsn6`+F0+Ew+;JczQL;i=2hK=554Z^2o|8=OC=-WGfnVhqZ17iyg=HrOQbAA*P z-Ek@*3|^7ZO-&IHBD;?(D(XdDJ{38sb2Y!^pPk&z6l~@#C>R4vNJR3cWfU3@mUF?M zXv0sGZo$2#mIZH*%PJ3x{aRx1oQ2Ih{wjZ%xoCgpr{Rmv)Td@Ri17bJC<9xda#Lv& zGtf}AQsq=WEjBfI{Gm>%&s;>~`;8w27Q}V)_fdsx0#tW8BhM=BB10J)=aFa3(MB}% zF=!Z9?wHctU!2uZQt2EsUT1^F)aEMe&w0f0`lz!z1s{Rw^{cn{KdCyoFW{n#h|d}k zd;c8XJ236yzk9BCu5Hx+u{~alW41r-?T~;%*@4DWje9W7DynEFdaWD>Wj&4QHo1;5 zC#-uL!}hKfQJUD@fv_nIIYYMul>Aj!*D)Q{{fEzc=K-G;rl2*AV!)ur>S99zK0XpEy80IZ?1TJX2NW{;c|@MQ;s0pT{y*d}2_{BgqXndq zFv~ANLa81n0YzBC;*IBseL_f=imt?r%;p4G2!pW=fy@)XKmgaP3mwc4Dn1F~!2%*j zXrK{ddi}K5bs^uI4oI;9=Ar+*yOQQ(;eY4urR{Y|f049}Iv{ura}Fk&rgwdh(6c;! zXOGmMc5{bozHA(*}6#`Alm#2kfLQ@;K@|}tt*fV7rsTXSMqzg z#Vc@0rp>zkKaaSil^fd+cJZx?CnZ)FxAwxxFPMU>z;^HJ<;-(9@TL8ECE!Uh&KZWB zr5b2N-^Y{FueuZ0;&xwqHx|N;)wk_{WD4w(IC(|k&xT0B(QgxkpU1VDyc_$W1#bUd z#o&;uEv$WnkNa6?0l5{A^0cYF8^-fpBnbmQA{FQKOlUwmsd`Iwu4fzVeUp2n3n7Dn zS6wL2O0Vw&Q`eUZZi^Lppex8)dAO*YR*-DJa<#CukS==G>p){4od@Po+1X)^{uhaF z5V5EAYvh_;B|K_v%h|@y4J6-S;%RQ&d<(^YpP)Tc2+~XI7$vf(X1wj0A(@&b+ zPRQLo-Q|KCSZSAt9_y9zhST0@kr3S=m z_R{y3-Nja8FuVc~f9Ji)o%O15qSVQ|ec`n1JkLKPWzh)Eq0729`S$jFw1#TzBMR(G zxd)A)lrfFq>mMY|=F#SCat7C*_Oo@q!ONct?Wgzg03;l$`bn3r>Gqc%;2lLS>VyeE zGvFwfUq<4ryE$uv;Zn$DfJ4>|0;x$v-J-Xb+2LGC4cLgwdP?1Tm6&(O^mJaR z6K7l^!g8t$mu{I3q<%F0;p^pc7-!-H3eClh4BODBW399jLJUyos&~zB!QC2Rgr8swtH%lNkA;?NB40Qwr MIo12QcTJ!FH%yXnkN^Mx literal 0 HcmV?d00001 diff --git a/content/en/docs/21.0/reference/programs/_index.md b/content/en/docs/21.0/reference/programs/_index.md new file mode 100644 index 000000000..5b1bea58b --- /dev/null +++ b/content/en/docs/21.0/reference/programs/_index.md @@ -0,0 +1,7 @@ +--- +title: Programs +description: Reference documents for list of Vitess programs +notoc: true +weight: 4 +--- + diff --git a/content/en/docs/21.0/reference/programs/mysqlctl/_index.md b/content/en/docs/21.0/reference/programs/mysqlctl/_index.md new file mode 100644 index 000000000..319dc78cd --- /dev/null +++ b/content/en/docs/21.0/reference/programs/mysqlctl/_index.md @@ -0,0 +1,107 @@ +--- +title: mysqlctl +series: mysqlctl +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## mysqlctl + +mysqlctl initializes and controls mysqld with Vitess-specific configuration. + +### Synopsis + +`mysqlctl` is a command-line client used for managing `mysqld` instances. + +It is responsible for bootstrapping tasks such as generating a configuration file for `mysqld` and initializing the instance and its data directory. +The `mysqld_safe` watchdog is utilized when present. +This helps ensure that `mysqld` is automatically restarted after failures. + +### Options + +``` + --alsologtostderr log to standard error as well as files + --app_idle_timeout duration Idle timeout for app connections (default 1m0s) + --app_pool_size int Size of the connection pool for app connections (default 40) + --catch-sigpipe catch and ignore SIGPIPE on stdout and stderr if specified + --config-file string Full path of the config file (with extension) to use. If set, --config-path, --config-type, and --config-name are ignored. + --config-file-not-found-handling ConfigFileNotFoundHandling Behavior when a config file is not found. (Options: error, exit, ignore, warn) (default warn) + --config-name string Name of the config file (without extension) to search for. (default "vtconfig") + --config-path strings Paths to search for config files in. (default []) + --config-persistence-min-interval duration minimum interval between persisting dynamic config changes back to disk (if no change has occurred, nothing is done). (default 1s) + --config-type string Config file type (omit to infer config type from file extension). + --db-credentials-file string db credentials file; send SIGHUP to reload this file + --db-credentials-server string db credentials server type ('file' - file implementation; 'vault' - HashiCorp Vault implementation) (default "file") + --db-credentials-vault-addr string URL to Vault server + --db-credentials-vault-path string Vault path to credentials JSON blob, e.g.: secret/data/prod/dbcreds + --db-credentials-vault-role-mountpoint string Vault AppRole mountpoint; can also be passed using VAULT_MOUNTPOINT environment variable (default "approle") + --db-credentials-vault-role-secretidfile string Path to file containing Vault AppRole secret_id; can also be passed using VAULT_SECRETID environment variable + --db-credentials-vault-roleid string Vault AppRole id; can also be passed using VAULT_ROLEID environment variable + --db-credentials-vault-timeout duration Timeout for vault API operations (default 10s) + --db-credentials-vault-tls-ca string Path to CA PEM for validating Vault server certificate + --db-credentials-vault-tokenfile string Path to file containing Vault auth token; token can also be passed using VAULT_TOKEN environment variable + --db-credentials-vault-ttl duration How long to cache DB credentials from the Vault server (default 30m0s) + --db_charset string Character set used for this tablet. (default "utf8mb4") + --db_conn_query_info enable parsing and processing of QUERY_OK info fields + --db_connect_timeout_ms int connection timeout to mysqld in milliseconds (0 for no timeout) + --db_dba_password string db dba password + --db_dba_use_ssl Set this flag to false to make the dba connection to not use ssl (default true) + --db_dba_user string db dba user userKey (default "vt_dba") + --db_flags uint Flag values as defined by MySQL. + --db_flavor string Flavor overrid. Valid value is FilePos. + --db_host string The host name for the tcp connection. + --db_port int tcp port + --db_server_name string server name of the DB we are connecting to. + --db_socket string The unix socket to connect on. If this is specified, host and port will not be used. + --db_ssl_ca string connection ssl ca + --db_ssl_ca_path string connection ssl ca path + --db_ssl_cert string connection ssl certificate + --db_ssl_key string connection ssl key + --db_ssl_mode SslMode SSL mode to connect with. One of disabled, preferred, required, verify_ca & verify_identity. + --db_tls_min_version string Configures the minimal TLS version negotiated when SSL is enabled. Defaults to TLSv1.2. Options: TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3. + --dba_idle_timeout duration Idle timeout for dba connections (default 1m0s) + --dba_pool_size int Size of the connection pool for dba connections (default 20) + -h, --help help for mysqlctl + --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --lameduck-period duration keep running at least this long after SIGTERM before stopping (default 50ms) + --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace + --log_dir string If non-empty, write log files in this directory + --log_err_stacks log stack traces for errors + --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) + --logtostderr log to standard error instead of files + --max-stack-size int configure the maximum stack size in bytes (default 67108864) + --mysql_port int MySQL port. (default 3306) + --mysql_server_version string MySQL server version to advertise. (default "8.0.30-Vitess") + --mysql_socket string Path to the mysqld socket file. + --mysqlctl_client_protocol string the protocol to use to talk to the mysqlctl server (default "grpc") + --mysqlctl_mycnf_template string template file to use for generating the my.cnf file during server init + --mysqlctl_socket string socket file to use for remote mysqlctl actions (empty for local actions) + --onclose_timeout duration wait no more than this for OnClose handlers before stopping (default 10s) + --onterm_timeout duration wait no more than this for OnTermSync handlers before stopping (default 10s) + --pid_file string If set, the process will write its pid to the named file, and delete it on graceful shutdown. + --pool_hostname_resolve_interval duration if set force an update to all hostnames and reconnect if changed, defaults to 0 (disabled) + --pprof strings enable profiling + --pprof-http enable pprof http endpoints + --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) + --replication_connect_retry duration how long to wait in between replica reconnect attempts. Only precise to the second. (default 10s) + --security_policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) + --service_map strings comma separated list of services to enable (or disable if prefixed with '-') Example: grpc-queryservice + --socket_file string Local unix socket file to listen on + --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) + --table-refresh-interval int interval in milliseconds to refresh tables in status page with refreshRequired class + --tablet_dir string The directory within the vtdataroot to store vttablet/mysql files. Defaults to being generated by the tablet uid. + --tablet_uid uint32 Tablet UID. (default 41983) + --v Level log level for V logs + -v, --version print binary version + --vmodule vModuleFlag comma-separated list of pattern=N settings for file-filtered logging +``` + +### SEE ALSO + +* [mysqlctl init](./mysqlctl_init/) - Initializes the directory structure and starts mysqld. +* [mysqlctl init_config](./mysqlctl_init_config/) - Initializes the directory structure, creates my.cnf file, but does not start mysqld. +* [mysqlctl position](./mysqlctl_position/) - Compute operations on replication positions +* [mysqlctl reinit_config](./mysqlctl_reinit_config/) - Reinitializes my.cnf file with new server_id. +* [mysqlctl shutdown](./mysqlctl_shutdown/) - Shuts down mysqld, without removing any files. +* [mysqlctl start](./mysqlctl_start/) - Starts mysqld on an already 'init'-ed directory. +* [mysqlctl teardown](./mysqlctl_teardown/) - Shuts mysqld down and removes the directory. + diff --git a/content/en/docs/21.0/reference/programs/mysqlctl/mysqlctl_init.md b/content/en/docs/21.0/reference/programs/mysqlctl/mysqlctl_init.md new file mode 100644 index 000000000..6dc402d10 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/mysqlctl/mysqlctl_init.md @@ -0,0 +1,119 @@ +--- +title: init +series: mysqlctl +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## mysqlctl init + +Initializes the directory structure and starts mysqld. + +### Synopsis + +Bootstraps a new `mysqld` instance, initializes its data directory, and starts the instance. +The MySQL version and flavor will be auto-detected, with a minimal configuration file applied. + +``` +mysqlctl init [flags] +``` + +### Examples + +``` +mysqlctl \ + --alsologtostderr \ + --tablet_uid 101 \ + --mysql_port 12345 \ + init +``` + +### Options + +``` + -h, --help help for init + --init_db_sql_file string Path to .sql file to run after mysqld initiliaztion. + --wait_time duration How long to wait for mysqld startup. (default 5m0s) +``` + +### Options inherited from parent commands + +``` + --alsologtostderr log to standard error as well as files + --app_idle_timeout duration Idle timeout for app connections (default 1m0s) + --app_pool_size int Size of the connection pool for app connections (default 40) + --catch-sigpipe catch and ignore SIGPIPE on stdout and stderr if specified + --config-file string Full path of the config file (with extension) to use. If set, --config-path, --config-type, and --config-name are ignored. + --config-file-not-found-handling ConfigFileNotFoundHandling Behavior when a config file is not found. (Options: error, exit, ignore, warn) (default warn) + --config-name string Name of the config file (without extension) to search for. (default "vtconfig") + --config-path strings Paths to search for config files in. (default []) + --config-persistence-min-interval duration minimum interval between persisting dynamic config changes back to disk (if no change has occurred, nothing is done). (default 1s) + --config-type string Config file type (omit to infer config type from file extension). + --db-credentials-file string db credentials file; send SIGHUP to reload this file + --db-credentials-server string db credentials server type ('file' - file implementation; 'vault' - HashiCorp Vault implementation) (default "file") + --db-credentials-vault-addr string URL to Vault server + --db-credentials-vault-path string Vault path to credentials JSON blob, e.g.: secret/data/prod/dbcreds + --db-credentials-vault-role-mountpoint string Vault AppRole mountpoint; can also be passed using VAULT_MOUNTPOINT environment variable (default "approle") + --db-credentials-vault-role-secretidfile string Path to file containing Vault AppRole secret_id; can also be passed using VAULT_SECRETID environment variable + --db-credentials-vault-roleid string Vault AppRole id; can also be passed using VAULT_ROLEID environment variable + --db-credentials-vault-timeout duration Timeout for vault API operations (default 10s) + --db-credentials-vault-tls-ca string Path to CA PEM for validating Vault server certificate + --db-credentials-vault-tokenfile string Path to file containing Vault auth token; token can also be passed using VAULT_TOKEN environment variable + --db-credentials-vault-ttl duration How long to cache DB credentials from the Vault server (default 30m0s) + --db_charset string Character set used for this tablet. (default "utf8mb4") + --db_conn_query_info enable parsing and processing of QUERY_OK info fields + --db_connect_timeout_ms int connection timeout to mysqld in milliseconds (0 for no timeout) + --db_dba_password string db dba password + --db_dba_use_ssl Set this flag to false to make the dba connection to not use ssl (default true) + --db_dba_user string db dba user userKey (default "vt_dba") + --db_flags uint Flag values as defined by MySQL. + --db_flavor string Flavor overrid. Valid value is FilePos. + --db_host string The host name for the tcp connection. + --db_port int tcp port + --db_server_name string server name of the DB we are connecting to. + --db_socket string The unix socket to connect on. If this is specified, host and port will not be used. + --db_ssl_ca string connection ssl ca + --db_ssl_ca_path string connection ssl ca path + --db_ssl_cert string connection ssl certificate + --db_ssl_key string connection ssl key + --db_ssl_mode SslMode SSL mode to connect with. One of disabled, preferred, required, verify_ca & verify_identity. + --db_tls_min_version string Configures the minimal TLS version negotiated when SSL is enabled. Defaults to TLSv1.2. Options: TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3. + --dba_idle_timeout duration Idle timeout for dba connections (default 1m0s) + --dba_pool_size int Size of the connection pool for dba connections (default 20) + --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --lameduck-period duration keep running at least this long after SIGTERM before stopping (default 50ms) + --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace + --log_dir string If non-empty, write log files in this directory + --log_err_stacks log stack traces for errors + --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) + --logtostderr log to standard error instead of files + --max-stack-size int configure the maximum stack size in bytes (default 67108864) + --mysql_port int MySQL port. (default 3306) + --mysql_server_version string MySQL server version to advertise. (default "8.0.30-Vitess") + --mysql_socket string Path to the mysqld socket file. + --mysqlctl_client_protocol string the protocol to use to talk to the mysqlctl server (default "grpc") + --mysqlctl_mycnf_template string template file to use for generating the my.cnf file during server init + --mysqlctl_socket string socket file to use for remote mysqlctl actions (empty for local actions) + --onclose_timeout duration wait no more than this for OnClose handlers before stopping (default 10s) + --onterm_timeout duration wait no more than this for OnTermSync handlers before stopping (default 10s) + --pid_file string If set, the process will write its pid to the named file, and delete it on graceful shutdown. + --pool_hostname_resolve_interval duration if set force an update to all hostnames and reconnect if changed, defaults to 0 (disabled) + --pprof strings enable profiling + --pprof-http enable pprof http endpoints + --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) + --replication_connect_retry duration how long to wait in between replica reconnect attempts. Only precise to the second. (default 10s) + --security_policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) + --service_map strings comma separated list of services to enable (or disable if prefixed with '-') Example: grpc-queryservice + --socket_file string Local unix socket file to listen on + --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) + --table-refresh-interval int interval in milliseconds to refresh tables in status page with refreshRequired class + --tablet_dir string The directory within the vtdataroot to store vttablet/mysql files. Defaults to being generated by the tablet uid. + --tablet_uid uint32 Tablet UID. (default 41983) + --v Level log level for V logs + -v, --version print binary version + --vmodule vModuleFlag comma-separated list of pattern=N settings for file-filtered logging +``` + +### SEE ALSO + +* [mysqlctl](../) - mysqlctl initializes and controls mysqld with Vitess-specific configuration. + diff --git a/content/en/docs/21.0/reference/programs/mysqlctl/mysqlctl_init_config.md b/content/en/docs/21.0/reference/programs/mysqlctl/mysqlctl_init_config.md new file mode 100644 index 000000000..29c029a9c --- /dev/null +++ b/content/en/docs/21.0/reference/programs/mysqlctl/mysqlctl_init_config.md @@ -0,0 +1,117 @@ +--- +title: init config +series: mysqlctl +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## mysqlctl init_config + +Initializes the directory structure, creates my.cnf file, but does not start mysqld. + +### Synopsis + +Bootstraps the configuration for a new `mysqld` instance and initializes its data directory. +This command is the same as `init` except the `mysqld` server will not be started. + +``` +mysqlctl init_config [flags] +``` + +### Examples + +``` +mysqlctl \ + --alsologtostderr \ + --tablet_uid 101 \ + --mysql_port 12345 \ + init_config +``` + +### Options + +``` + -h, --help help for init_config +``` + +### Options inherited from parent commands + +``` + --alsologtostderr log to standard error as well as files + --app_idle_timeout duration Idle timeout for app connections (default 1m0s) + --app_pool_size int Size of the connection pool for app connections (default 40) + --catch-sigpipe catch and ignore SIGPIPE on stdout and stderr if specified + --config-file string Full path of the config file (with extension) to use. If set, --config-path, --config-type, and --config-name are ignored. + --config-file-not-found-handling ConfigFileNotFoundHandling Behavior when a config file is not found. (Options: error, exit, ignore, warn) (default warn) + --config-name string Name of the config file (without extension) to search for. (default "vtconfig") + --config-path strings Paths to search for config files in. (default []) + --config-persistence-min-interval duration minimum interval between persisting dynamic config changes back to disk (if no change has occurred, nothing is done). (default 1s) + --config-type string Config file type (omit to infer config type from file extension). + --db-credentials-file string db credentials file; send SIGHUP to reload this file + --db-credentials-server string db credentials server type ('file' - file implementation; 'vault' - HashiCorp Vault implementation) (default "file") + --db-credentials-vault-addr string URL to Vault server + --db-credentials-vault-path string Vault path to credentials JSON blob, e.g.: secret/data/prod/dbcreds + --db-credentials-vault-role-mountpoint string Vault AppRole mountpoint; can also be passed using VAULT_MOUNTPOINT environment variable (default "approle") + --db-credentials-vault-role-secretidfile string Path to file containing Vault AppRole secret_id; can also be passed using VAULT_SECRETID environment variable + --db-credentials-vault-roleid string Vault AppRole id; can also be passed using VAULT_ROLEID environment variable + --db-credentials-vault-timeout duration Timeout for vault API operations (default 10s) + --db-credentials-vault-tls-ca string Path to CA PEM for validating Vault server certificate + --db-credentials-vault-tokenfile string Path to file containing Vault auth token; token can also be passed using VAULT_TOKEN environment variable + --db-credentials-vault-ttl duration How long to cache DB credentials from the Vault server (default 30m0s) + --db_charset string Character set used for this tablet. (default "utf8mb4") + --db_conn_query_info enable parsing and processing of QUERY_OK info fields + --db_connect_timeout_ms int connection timeout to mysqld in milliseconds (0 for no timeout) + --db_dba_password string db dba password + --db_dba_use_ssl Set this flag to false to make the dba connection to not use ssl (default true) + --db_dba_user string db dba user userKey (default "vt_dba") + --db_flags uint Flag values as defined by MySQL. + --db_flavor string Flavor overrid. Valid value is FilePos. + --db_host string The host name for the tcp connection. + --db_port int tcp port + --db_server_name string server name of the DB we are connecting to. + --db_socket string The unix socket to connect on. If this is specified, host and port will not be used. + --db_ssl_ca string connection ssl ca + --db_ssl_ca_path string connection ssl ca path + --db_ssl_cert string connection ssl certificate + --db_ssl_key string connection ssl key + --db_ssl_mode SslMode SSL mode to connect with. One of disabled, preferred, required, verify_ca & verify_identity. + --db_tls_min_version string Configures the minimal TLS version negotiated when SSL is enabled. Defaults to TLSv1.2. Options: TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3. + --dba_idle_timeout duration Idle timeout for dba connections (default 1m0s) + --dba_pool_size int Size of the connection pool for dba connections (default 20) + --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --lameduck-period duration keep running at least this long after SIGTERM before stopping (default 50ms) + --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace + --log_dir string If non-empty, write log files in this directory + --log_err_stacks log stack traces for errors + --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) + --logtostderr log to standard error instead of files + --max-stack-size int configure the maximum stack size in bytes (default 67108864) + --mysql_port int MySQL port. (default 3306) + --mysql_server_version string MySQL server version to advertise. (default "8.0.30-Vitess") + --mysql_socket string Path to the mysqld socket file. + --mysqlctl_client_protocol string the protocol to use to talk to the mysqlctl server (default "grpc") + --mysqlctl_mycnf_template string template file to use for generating the my.cnf file during server init + --mysqlctl_socket string socket file to use for remote mysqlctl actions (empty for local actions) + --onclose_timeout duration wait no more than this for OnClose handlers before stopping (default 10s) + --onterm_timeout duration wait no more than this for OnTermSync handlers before stopping (default 10s) + --pid_file string If set, the process will write its pid to the named file, and delete it on graceful shutdown. + --pool_hostname_resolve_interval duration if set force an update to all hostnames and reconnect if changed, defaults to 0 (disabled) + --pprof strings enable profiling + --pprof-http enable pprof http endpoints + --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) + --replication_connect_retry duration how long to wait in between replica reconnect attempts. Only precise to the second. (default 10s) + --security_policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) + --service_map strings comma separated list of services to enable (or disable if prefixed with '-') Example: grpc-queryservice + --socket_file string Local unix socket file to listen on + --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) + --table-refresh-interval int interval in milliseconds to refresh tables in status page with refreshRequired class + --tablet_dir string The directory within the vtdataroot to store vttablet/mysql files. Defaults to being generated by the tablet uid. + --tablet_uid uint32 Tablet UID. (default 41983) + --v Level log level for V logs + -v, --version print binary version + --vmodule vModuleFlag comma-separated list of pattern=N settings for file-filtered logging +``` + +### SEE ALSO + +* [mysqlctl](../) - mysqlctl initializes and controls mysqld with Vitess-specific configuration. + diff --git a/content/en/docs/21.0/reference/programs/mysqlctl/mysqlctl_position.md b/content/en/docs/21.0/reference/programs/mysqlctl/mysqlctl_position.md new file mode 100644 index 000000000..b2b73ade8 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/mysqlctl/mysqlctl_position.md @@ -0,0 +1,102 @@ +--- +title: position +series: mysqlctl +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## mysqlctl position + +Compute operations on replication positions + +``` +mysqlctl position [flags] +``` + +### Options + +``` + -h, --help help for position +``` + +### Options inherited from parent commands + +``` + --alsologtostderr log to standard error as well as files + --app_idle_timeout duration Idle timeout for app connections (default 1m0s) + --app_pool_size int Size of the connection pool for app connections (default 40) + --catch-sigpipe catch and ignore SIGPIPE on stdout and stderr if specified + --config-file string Full path of the config file (with extension) to use. If set, --config-path, --config-type, and --config-name are ignored. + --config-file-not-found-handling ConfigFileNotFoundHandling Behavior when a config file is not found. (Options: error, exit, ignore, warn) (default warn) + --config-name string Name of the config file (without extension) to search for. (default "vtconfig") + --config-path strings Paths to search for config files in. (default []) + --config-persistence-min-interval duration minimum interval between persisting dynamic config changes back to disk (if no change has occurred, nothing is done). (default 1s) + --config-type string Config file type (omit to infer config type from file extension). + --db-credentials-file string db credentials file; send SIGHUP to reload this file + --db-credentials-server string db credentials server type ('file' - file implementation; 'vault' - HashiCorp Vault implementation) (default "file") + --db-credentials-vault-addr string URL to Vault server + --db-credentials-vault-path string Vault path to credentials JSON blob, e.g.: secret/data/prod/dbcreds + --db-credentials-vault-role-mountpoint string Vault AppRole mountpoint; can also be passed using VAULT_MOUNTPOINT environment variable (default "approle") + --db-credentials-vault-role-secretidfile string Path to file containing Vault AppRole secret_id; can also be passed using VAULT_SECRETID environment variable + --db-credentials-vault-roleid string Vault AppRole id; can also be passed using VAULT_ROLEID environment variable + --db-credentials-vault-timeout duration Timeout for vault API operations (default 10s) + --db-credentials-vault-tls-ca string Path to CA PEM for validating Vault server certificate + --db-credentials-vault-tokenfile string Path to file containing Vault auth token; token can also be passed using VAULT_TOKEN environment variable + --db-credentials-vault-ttl duration How long to cache DB credentials from the Vault server (default 30m0s) + --db_charset string Character set used for this tablet. (default "utf8mb4") + --db_conn_query_info enable parsing and processing of QUERY_OK info fields + --db_connect_timeout_ms int connection timeout to mysqld in milliseconds (0 for no timeout) + --db_dba_password string db dba password + --db_dba_use_ssl Set this flag to false to make the dba connection to not use ssl (default true) + --db_dba_user string db dba user userKey (default "vt_dba") + --db_flags uint Flag values as defined by MySQL. + --db_flavor string Flavor overrid. Valid value is FilePos. + --db_host string The host name for the tcp connection. + --db_port int tcp port + --db_server_name string server name of the DB we are connecting to. + --db_socket string The unix socket to connect on. If this is specified, host and port will not be used. + --db_ssl_ca string connection ssl ca + --db_ssl_ca_path string connection ssl ca path + --db_ssl_cert string connection ssl certificate + --db_ssl_key string connection ssl key + --db_ssl_mode SslMode SSL mode to connect with. One of disabled, preferred, required, verify_ca & verify_identity. + --db_tls_min_version string Configures the minimal TLS version negotiated when SSL is enabled. Defaults to TLSv1.2. Options: TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3. + --dba_idle_timeout duration Idle timeout for dba connections (default 1m0s) + --dba_pool_size int Size of the connection pool for dba connections (default 20) + --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --lameduck-period duration keep running at least this long after SIGTERM before stopping (default 50ms) + --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace + --log_dir string If non-empty, write log files in this directory + --log_err_stacks log stack traces for errors + --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) + --logtostderr log to standard error instead of files + --max-stack-size int configure the maximum stack size in bytes (default 67108864) + --mysql_port int MySQL port. (default 3306) + --mysql_server_version string MySQL server version to advertise. (default "8.0.30-Vitess") + --mysql_socket string Path to the mysqld socket file. + --mysqlctl_client_protocol string the protocol to use to talk to the mysqlctl server (default "grpc") + --mysqlctl_mycnf_template string template file to use for generating the my.cnf file during server init + --mysqlctl_socket string socket file to use for remote mysqlctl actions (empty for local actions) + --onclose_timeout duration wait no more than this for OnClose handlers before stopping (default 10s) + --onterm_timeout duration wait no more than this for OnTermSync handlers before stopping (default 10s) + --pid_file string If set, the process will write its pid to the named file, and delete it on graceful shutdown. + --pool_hostname_resolve_interval duration if set force an update to all hostnames and reconnect if changed, defaults to 0 (disabled) + --pprof strings enable profiling + --pprof-http enable pprof http endpoints + --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) + --replication_connect_retry duration how long to wait in between replica reconnect attempts. Only precise to the second. (default 10s) + --security_policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) + --service_map strings comma separated list of services to enable (or disable if prefixed with '-') Example: grpc-queryservice + --socket_file string Local unix socket file to listen on + --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) + --table-refresh-interval int interval in milliseconds to refresh tables in status page with refreshRequired class + --tablet_dir string The directory within the vtdataroot to store vttablet/mysql files. Defaults to being generated by the tablet uid. + --tablet_uid uint32 Tablet UID. (default 41983) + --v Level log level for V logs + -v, --version print binary version + --vmodule vModuleFlag comma-separated list of pattern=N settings for file-filtered logging +``` + +### SEE ALSO + +* [mysqlctl](../) - mysqlctl initializes and controls mysqld with Vitess-specific configuration. + diff --git a/content/en/docs/21.0/reference/programs/mysqlctl/mysqlctl_reinit_config.md b/content/en/docs/21.0/reference/programs/mysqlctl/mysqlctl_reinit_config.md new file mode 100644 index 000000000..a96f1f7e8 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/mysqlctl/mysqlctl_reinit_config.md @@ -0,0 +1,117 @@ +--- +title: reinit config +series: mysqlctl +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## mysqlctl reinit_config + +Reinitializes my.cnf file with new server_id. + +### Synopsis + +Regenerate new configuration files for an existing `mysqld` instance (generating new server_id and server_uuid values). +This could be helpful to revert configuration changes, or to pick up changes made to the bundled config in newer Vitess versions. + +``` +mysqlctl reinit_config [flags] +``` + +### Examples + +``` +mysqlctl \ + --alsologtostderr \ + --tablet_uid 101 \ + --mysql_port 12345 \ + reinit_config +``` + +### Options + +``` + -h, --help help for reinit_config +``` + +### Options inherited from parent commands + +``` + --alsologtostderr log to standard error as well as files + --app_idle_timeout duration Idle timeout for app connections (default 1m0s) + --app_pool_size int Size of the connection pool for app connections (default 40) + --catch-sigpipe catch and ignore SIGPIPE on stdout and stderr if specified + --config-file string Full path of the config file (with extension) to use. If set, --config-path, --config-type, and --config-name are ignored. + --config-file-not-found-handling ConfigFileNotFoundHandling Behavior when a config file is not found. (Options: error, exit, ignore, warn) (default warn) + --config-name string Name of the config file (without extension) to search for. (default "vtconfig") + --config-path strings Paths to search for config files in. (default []) + --config-persistence-min-interval duration minimum interval between persisting dynamic config changes back to disk (if no change has occurred, nothing is done). (default 1s) + --config-type string Config file type (omit to infer config type from file extension). + --db-credentials-file string db credentials file; send SIGHUP to reload this file + --db-credentials-server string db credentials server type ('file' - file implementation; 'vault' - HashiCorp Vault implementation) (default "file") + --db-credentials-vault-addr string URL to Vault server + --db-credentials-vault-path string Vault path to credentials JSON blob, e.g.: secret/data/prod/dbcreds + --db-credentials-vault-role-mountpoint string Vault AppRole mountpoint; can also be passed using VAULT_MOUNTPOINT environment variable (default "approle") + --db-credentials-vault-role-secretidfile string Path to file containing Vault AppRole secret_id; can also be passed using VAULT_SECRETID environment variable + --db-credentials-vault-roleid string Vault AppRole id; can also be passed using VAULT_ROLEID environment variable + --db-credentials-vault-timeout duration Timeout for vault API operations (default 10s) + --db-credentials-vault-tls-ca string Path to CA PEM for validating Vault server certificate + --db-credentials-vault-tokenfile string Path to file containing Vault auth token; token can also be passed using VAULT_TOKEN environment variable + --db-credentials-vault-ttl duration How long to cache DB credentials from the Vault server (default 30m0s) + --db_charset string Character set used for this tablet. (default "utf8mb4") + --db_conn_query_info enable parsing and processing of QUERY_OK info fields + --db_connect_timeout_ms int connection timeout to mysqld in milliseconds (0 for no timeout) + --db_dba_password string db dba password + --db_dba_use_ssl Set this flag to false to make the dba connection to not use ssl (default true) + --db_dba_user string db dba user userKey (default "vt_dba") + --db_flags uint Flag values as defined by MySQL. + --db_flavor string Flavor overrid. Valid value is FilePos. + --db_host string The host name for the tcp connection. + --db_port int tcp port + --db_server_name string server name of the DB we are connecting to. + --db_socket string The unix socket to connect on. If this is specified, host and port will not be used. + --db_ssl_ca string connection ssl ca + --db_ssl_ca_path string connection ssl ca path + --db_ssl_cert string connection ssl certificate + --db_ssl_key string connection ssl key + --db_ssl_mode SslMode SSL mode to connect with. One of disabled, preferred, required, verify_ca & verify_identity. + --db_tls_min_version string Configures the minimal TLS version negotiated when SSL is enabled. Defaults to TLSv1.2. Options: TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3. + --dba_idle_timeout duration Idle timeout for dba connections (default 1m0s) + --dba_pool_size int Size of the connection pool for dba connections (default 20) + --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --lameduck-period duration keep running at least this long after SIGTERM before stopping (default 50ms) + --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace + --log_dir string If non-empty, write log files in this directory + --log_err_stacks log stack traces for errors + --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) + --logtostderr log to standard error instead of files + --max-stack-size int configure the maximum stack size in bytes (default 67108864) + --mysql_port int MySQL port. (default 3306) + --mysql_server_version string MySQL server version to advertise. (default "8.0.30-Vitess") + --mysql_socket string Path to the mysqld socket file. + --mysqlctl_client_protocol string the protocol to use to talk to the mysqlctl server (default "grpc") + --mysqlctl_mycnf_template string template file to use for generating the my.cnf file during server init + --mysqlctl_socket string socket file to use for remote mysqlctl actions (empty for local actions) + --onclose_timeout duration wait no more than this for OnClose handlers before stopping (default 10s) + --onterm_timeout duration wait no more than this for OnTermSync handlers before stopping (default 10s) + --pid_file string If set, the process will write its pid to the named file, and delete it on graceful shutdown. + --pool_hostname_resolve_interval duration if set force an update to all hostnames and reconnect if changed, defaults to 0 (disabled) + --pprof strings enable profiling + --pprof-http enable pprof http endpoints + --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) + --replication_connect_retry duration how long to wait in between replica reconnect attempts. Only precise to the second. (default 10s) + --security_policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) + --service_map strings comma separated list of services to enable (or disable if prefixed with '-') Example: grpc-queryservice + --socket_file string Local unix socket file to listen on + --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) + --table-refresh-interval int interval in milliseconds to refresh tables in status page with refreshRequired class + --tablet_dir string The directory within the vtdataroot to store vttablet/mysql files. Defaults to being generated by the tablet uid. + --tablet_uid uint32 Tablet UID. (default 41983) + --v Level log level for V logs + -v, --version print binary version + --vmodule vModuleFlag comma-separated list of pattern=N settings for file-filtered logging +``` + +### SEE ALSO + +* [mysqlctl](../) - mysqlctl initializes and controls mysqld with Vitess-specific configuration. + diff --git a/content/en/docs/21.0/reference/programs/mysqlctl/mysqlctl_shutdown.md b/content/en/docs/21.0/reference/programs/mysqlctl/mysqlctl_shutdown.md new file mode 100644 index 000000000..5ccb2afd4 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/mysqlctl/mysqlctl_shutdown.md @@ -0,0 +1,115 @@ +--- +title: shutdown +series: mysqlctl +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## mysqlctl shutdown + +Shuts down mysqld, without removing any files. + +### Synopsis + +Stop a `mysqld` instance that was previously started with `init` or `start`. + +For large `mysqld` instances, you may need to extend the `wait_time` to shutdown cleanly. + +``` +mysqlctl shutdown [flags] +``` + +### Examples + +``` +mysqlctl --tablet_uid 101 --alsologtostderr shutdown +``` + +### Options + +``` + -h, --help help for shutdown + --wait_time duration How long to wait for mysqld shutdown. (default 5m0s) +``` + +### Options inherited from parent commands + +``` + --alsologtostderr log to standard error as well as files + --app_idle_timeout duration Idle timeout for app connections (default 1m0s) + --app_pool_size int Size of the connection pool for app connections (default 40) + --catch-sigpipe catch and ignore SIGPIPE on stdout and stderr if specified + --config-file string Full path of the config file (with extension) to use. If set, --config-path, --config-type, and --config-name are ignored. + --config-file-not-found-handling ConfigFileNotFoundHandling Behavior when a config file is not found. (Options: error, exit, ignore, warn) (default warn) + --config-name string Name of the config file (without extension) to search for. (default "vtconfig") + --config-path strings Paths to search for config files in. (default []) + --config-persistence-min-interval duration minimum interval between persisting dynamic config changes back to disk (if no change has occurred, nothing is done). (default 1s) + --config-type string Config file type (omit to infer config type from file extension). + --db-credentials-file string db credentials file; send SIGHUP to reload this file + --db-credentials-server string db credentials server type ('file' - file implementation; 'vault' - HashiCorp Vault implementation) (default "file") + --db-credentials-vault-addr string URL to Vault server + --db-credentials-vault-path string Vault path to credentials JSON blob, e.g.: secret/data/prod/dbcreds + --db-credentials-vault-role-mountpoint string Vault AppRole mountpoint; can also be passed using VAULT_MOUNTPOINT environment variable (default "approle") + --db-credentials-vault-role-secretidfile string Path to file containing Vault AppRole secret_id; can also be passed using VAULT_SECRETID environment variable + --db-credentials-vault-roleid string Vault AppRole id; can also be passed using VAULT_ROLEID environment variable + --db-credentials-vault-timeout duration Timeout for vault API operations (default 10s) + --db-credentials-vault-tls-ca string Path to CA PEM for validating Vault server certificate + --db-credentials-vault-tokenfile string Path to file containing Vault auth token; token can also be passed using VAULT_TOKEN environment variable + --db-credentials-vault-ttl duration How long to cache DB credentials from the Vault server (default 30m0s) + --db_charset string Character set used for this tablet. (default "utf8mb4") + --db_conn_query_info enable parsing and processing of QUERY_OK info fields + --db_connect_timeout_ms int connection timeout to mysqld in milliseconds (0 for no timeout) + --db_dba_password string db dba password + --db_dba_use_ssl Set this flag to false to make the dba connection to not use ssl (default true) + --db_dba_user string db dba user userKey (default "vt_dba") + --db_flags uint Flag values as defined by MySQL. + --db_flavor string Flavor overrid. Valid value is FilePos. + --db_host string The host name for the tcp connection. + --db_port int tcp port + --db_server_name string server name of the DB we are connecting to. + --db_socket string The unix socket to connect on. If this is specified, host and port will not be used. + --db_ssl_ca string connection ssl ca + --db_ssl_ca_path string connection ssl ca path + --db_ssl_cert string connection ssl certificate + --db_ssl_key string connection ssl key + --db_ssl_mode SslMode SSL mode to connect with. One of disabled, preferred, required, verify_ca & verify_identity. + --db_tls_min_version string Configures the minimal TLS version negotiated when SSL is enabled. Defaults to TLSv1.2. Options: TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3. + --dba_idle_timeout duration Idle timeout for dba connections (default 1m0s) + --dba_pool_size int Size of the connection pool for dba connections (default 20) + --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --lameduck-period duration keep running at least this long after SIGTERM before stopping (default 50ms) + --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace + --log_dir string If non-empty, write log files in this directory + --log_err_stacks log stack traces for errors + --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) + --logtostderr log to standard error instead of files + --max-stack-size int configure the maximum stack size in bytes (default 67108864) + --mysql_port int MySQL port. (default 3306) + --mysql_server_version string MySQL server version to advertise. (default "8.0.30-Vitess") + --mysql_socket string Path to the mysqld socket file. + --mysqlctl_client_protocol string the protocol to use to talk to the mysqlctl server (default "grpc") + --mysqlctl_mycnf_template string template file to use for generating the my.cnf file during server init + --mysqlctl_socket string socket file to use for remote mysqlctl actions (empty for local actions) + --onclose_timeout duration wait no more than this for OnClose handlers before stopping (default 10s) + --onterm_timeout duration wait no more than this for OnTermSync handlers before stopping (default 10s) + --pid_file string If set, the process will write its pid to the named file, and delete it on graceful shutdown. + --pool_hostname_resolve_interval duration if set force an update to all hostnames and reconnect if changed, defaults to 0 (disabled) + --pprof strings enable profiling + --pprof-http enable pprof http endpoints + --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) + --replication_connect_retry duration how long to wait in between replica reconnect attempts. Only precise to the second. (default 10s) + --security_policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) + --service_map strings comma separated list of services to enable (or disable if prefixed with '-') Example: grpc-queryservice + --socket_file string Local unix socket file to listen on + --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) + --table-refresh-interval int interval in milliseconds to refresh tables in status page with refreshRequired class + --tablet_dir string The directory within the vtdataroot to store vttablet/mysql files. Defaults to being generated by the tablet uid. + --tablet_uid uint32 Tablet UID. (default 41983) + --v Level log level for V logs + -v, --version print binary version + --vmodule vModuleFlag comma-separated list of pattern=N settings for file-filtered logging +``` + +### SEE ALSO + +* [mysqlctl](../) - mysqlctl initializes and controls mysqld with Vitess-specific configuration. + diff --git a/content/en/docs/21.0/reference/programs/mysqlctl/mysqlctl_start.md b/content/en/docs/21.0/reference/programs/mysqlctl/mysqlctl_start.md new file mode 100644 index 000000000..d258de696 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/mysqlctl/mysqlctl_start.md @@ -0,0 +1,114 @@ +--- +title: start +series: mysqlctl +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## mysqlctl start + +Starts mysqld on an already 'init'-ed directory. + +### Synopsis + +Resume an existing `mysqld` instance that was previously bootstrapped with `init` or `init_config` + +``` +mysqlctl start [flags] +``` + +### Examples + +``` +mysqlctl --tablet_uid 101 --alsologtostderr start +``` + +### Options + +``` + -h, --help help for start + --mysqld_args strings List of comma-separated flags to pass additionally to mysqld. + --wait_time duration How long to wait for mysqld startup. (default 5m0s) +``` + +### Options inherited from parent commands + +``` + --alsologtostderr log to standard error as well as files + --app_idle_timeout duration Idle timeout for app connections (default 1m0s) + --app_pool_size int Size of the connection pool for app connections (default 40) + --catch-sigpipe catch and ignore SIGPIPE on stdout and stderr if specified + --config-file string Full path of the config file (with extension) to use. If set, --config-path, --config-type, and --config-name are ignored. + --config-file-not-found-handling ConfigFileNotFoundHandling Behavior when a config file is not found. (Options: error, exit, ignore, warn) (default warn) + --config-name string Name of the config file (without extension) to search for. (default "vtconfig") + --config-path strings Paths to search for config files in. (default []) + --config-persistence-min-interval duration minimum interval between persisting dynamic config changes back to disk (if no change has occurred, nothing is done). (default 1s) + --config-type string Config file type (omit to infer config type from file extension). + --db-credentials-file string db credentials file; send SIGHUP to reload this file + --db-credentials-server string db credentials server type ('file' - file implementation; 'vault' - HashiCorp Vault implementation) (default "file") + --db-credentials-vault-addr string URL to Vault server + --db-credentials-vault-path string Vault path to credentials JSON blob, e.g.: secret/data/prod/dbcreds + --db-credentials-vault-role-mountpoint string Vault AppRole mountpoint; can also be passed using VAULT_MOUNTPOINT environment variable (default "approle") + --db-credentials-vault-role-secretidfile string Path to file containing Vault AppRole secret_id; can also be passed using VAULT_SECRETID environment variable + --db-credentials-vault-roleid string Vault AppRole id; can also be passed using VAULT_ROLEID environment variable + --db-credentials-vault-timeout duration Timeout for vault API operations (default 10s) + --db-credentials-vault-tls-ca string Path to CA PEM for validating Vault server certificate + --db-credentials-vault-tokenfile string Path to file containing Vault auth token; token can also be passed using VAULT_TOKEN environment variable + --db-credentials-vault-ttl duration How long to cache DB credentials from the Vault server (default 30m0s) + --db_charset string Character set used for this tablet. (default "utf8mb4") + --db_conn_query_info enable parsing and processing of QUERY_OK info fields + --db_connect_timeout_ms int connection timeout to mysqld in milliseconds (0 for no timeout) + --db_dba_password string db dba password + --db_dba_use_ssl Set this flag to false to make the dba connection to not use ssl (default true) + --db_dba_user string db dba user userKey (default "vt_dba") + --db_flags uint Flag values as defined by MySQL. + --db_flavor string Flavor overrid. Valid value is FilePos. + --db_host string The host name for the tcp connection. + --db_port int tcp port + --db_server_name string server name of the DB we are connecting to. + --db_socket string The unix socket to connect on. If this is specified, host and port will not be used. + --db_ssl_ca string connection ssl ca + --db_ssl_ca_path string connection ssl ca path + --db_ssl_cert string connection ssl certificate + --db_ssl_key string connection ssl key + --db_ssl_mode SslMode SSL mode to connect with. One of disabled, preferred, required, verify_ca & verify_identity. + --db_tls_min_version string Configures the minimal TLS version negotiated when SSL is enabled. Defaults to TLSv1.2. Options: TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3. + --dba_idle_timeout duration Idle timeout for dba connections (default 1m0s) + --dba_pool_size int Size of the connection pool for dba connections (default 20) + --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --lameduck-period duration keep running at least this long after SIGTERM before stopping (default 50ms) + --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace + --log_dir string If non-empty, write log files in this directory + --log_err_stacks log stack traces for errors + --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) + --logtostderr log to standard error instead of files + --max-stack-size int configure the maximum stack size in bytes (default 67108864) + --mysql_port int MySQL port. (default 3306) + --mysql_server_version string MySQL server version to advertise. (default "8.0.30-Vitess") + --mysql_socket string Path to the mysqld socket file. + --mysqlctl_client_protocol string the protocol to use to talk to the mysqlctl server (default "grpc") + --mysqlctl_mycnf_template string template file to use for generating the my.cnf file during server init + --mysqlctl_socket string socket file to use for remote mysqlctl actions (empty for local actions) + --onclose_timeout duration wait no more than this for OnClose handlers before stopping (default 10s) + --onterm_timeout duration wait no more than this for OnTermSync handlers before stopping (default 10s) + --pid_file string If set, the process will write its pid to the named file, and delete it on graceful shutdown. + --pool_hostname_resolve_interval duration if set force an update to all hostnames and reconnect if changed, defaults to 0 (disabled) + --pprof strings enable profiling + --pprof-http enable pprof http endpoints + --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) + --replication_connect_retry duration how long to wait in between replica reconnect attempts. Only precise to the second. (default 10s) + --security_policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) + --service_map strings comma separated list of services to enable (or disable if prefixed with '-') Example: grpc-queryservice + --socket_file string Local unix socket file to listen on + --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) + --table-refresh-interval int interval in milliseconds to refresh tables in status page with refreshRequired class + --tablet_dir string The directory within the vtdataroot to store vttablet/mysql files. Defaults to being generated by the tablet uid. + --tablet_uid uint32 Tablet UID. (default 41983) + --v Level log level for V logs + -v, --version print binary version + --vmodule vModuleFlag comma-separated list of pattern=N settings for file-filtered logging +``` + +### SEE ALSO + +* [mysqlctl](../) - mysqlctl initializes and controls mysqld with Vitess-specific configuration. + diff --git a/content/en/docs/21.0/reference/programs/mysqlctl/mysqlctl_teardown.md b/content/en/docs/21.0/reference/programs/mysqlctl/mysqlctl_teardown.md new file mode 100644 index 000000000..ea82fca52 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/mysqlctl/mysqlctl_teardown.md @@ -0,0 +1,118 @@ +--- +title: teardown +series: mysqlctl +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## mysqlctl teardown + +Shuts mysqld down and removes the directory. + +### Synopsis + +{{< warning >}} +This is a destructive operation. +{{}} + +Shuts down a `mysqld` instance and removes its data directory. + +``` +mysqlctl teardown [flags] +``` + +### Examples + +``` +mysqlctl --tablet_uid 101 --alsologtostderr teardown +``` + +### Options + +``` + -f, --force Remove the root directory even if mysqld shutdown fails. + -h, --help help for teardown + --wait_time duration How long to wait for mysqld shutdown. (default 5m0s) +``` + +### Options inherited from parent commands + +``` + --alsologtostderr log to standard error as well as files + --app_idle_timeout duration Idle timeout for app connections (default 1m0s) + --app_pool_size int Size of the connection pool for app connections (default 40) + --catch-sigpipe catch and ignore SIGPIPE on stdout and stderr if specified + --config-file string Full path of the config file (with extension) to use. If set, --config-path, --config-type, and --config-name are ignored. + --config-file-not-found-handling ConfigFileNotFoundHandling Behavior when a config file is not found. (Options: error, exit, ignore, warn) (default warn) + --config-name string Name of the config file (without extension) to search for. (default "vtconfig") + --config-path strings Paths to search for config files in. (default []) + --config-persistence-min-interval duration minimum interval between persisting dynamic config changes back to disk (if no change has occurred, nothing is done). (default 1s) + --config-type string Config file type (omit to infer config type from file extension). + --db-credentials-file string db credentials file; send SIGHUP to reload this file + --db-credentials-server string db credentials server type ('file' - file implementation; 'vault' - HashiCorp Vault implementation) (default "file") + --db-credentials-vault-addr string URL to Vault server + --db-credentials-vault-path string Vault path to credentials JSON blob, e.g.: secret/data/prod/dbcreds + --db-credentials-vault-role-mountpoint string Vault AppRole mountpoint; can also be passed using VAULT_MOUNTPOINT environment variable (default "approle") + --db-credentials-vault-role-secretidfile string Path to file containing Vault AppRole secret_id; can also be passed using VAULT_SECRETID environment variable + --db-credentials-vault-roleid string Vault AppRole id; can also be passed using VAULT_ROLEID environment variable + --db-credentials-vault-timeout duration Timeout for vault API operations (default 10s) + --db-credentials-vault-tls-ca string Path to CA PEM for validating Vault server certificate + --db-credentials-vault-tokenfile string Path to file containing Vault auth token; token can also be passed using VAULT_TOKEN environment variable + --db-credentials-vault-ttl duration How long to cache DB credentials from the Vault server (default 30m0s) + --db_charset string Character set used for this tablet. (default "utf8mb4") + --db_conn_query_info enable parsing and processing of QUERY_OK info fields + --db_connect_timeout_ms int connection timeout to mysqld in milliseconds (0 for no timeout) + --db_dba_password string db dba password + --db_dba_use_ssl Set this flag to false to make the dba connection to not use ssl (default true) + --db_dba_user string db dba user userKey (default "vt_dba") + --db_flags uint Flag values as defined by MySQL. + --db_flavor string Flavor overrid. Valid value is FilePos. + --db_host string The host name for the tcp connection. + --db_port int tcp port + --db_server_name string server name of the DB we are connecting to. + --db_socket string The unix socket to connect on. If this is specified, host and port will not be used. + --db_ssl_ca string connection ssl ca + --db_ssl_ca_path string connection ssl ca path + --db_ssl_cert string connection ssl certificate + --db_ssl_key string connection ssl key + --db_ssl_mode SslMode SSL mode to connect with. One of disabled, preferred, required, verify_ca & verify_identity. + --db_tls_min_version string Configures the minimal TLS version negotiated when SSL is enabled. Defaults to TLSv1.2. Options: TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3. + --dba_idle_timeout duration Idle timeout for dba connections (default 1m0s) + --dba_pool_size int Size of the connection pool for dba connections (default 20) + --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --lameduck-period duration keep running at least this long after SIGTERM before stopping (default 50ms) + --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace + --log_dir string If non-empty, write log files in this directory + --log_err_stacks log stack traces for errors + --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) + --logtostderr log to standard error instead of files + --max-stack-size int configure the maximum stack size in bytes (default 67108864) + --mysql_port int MySQL port. (default 3306) + --mysql_server_version string MySQL server version to advertise. (default "8.0.30-Vitess") + --mysql_socket string Path to the mysqld socket file. + --mysqlctl_client_protocol string the protocol to use to talk to the mysqlctl server (default "grpc") + --mysqlctl_mycnf_template string template file to use for generating the my.cnf file during server init + --mysqlctl_socket string socket file to use for remote mysqlctl actions (empty for local actions) + --onclose_timeout duration wait no more than this for OnClose handlers before stopping (default 10s) + --onterm_timeout duration wait no more than this for OnTermSync handlers before stopping (default 10s) + --pid_file string If set, the process will write its pid to the named file, and delete it on graceful shutdown. + --pool_hostname_resolve_interval duration if set force an update to all hostnames and reconnect if changed, defaults to 0 (disabled) + --pprof strings enable profiling + --pprof-http enable pprof http endpoints + --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) + --replication_connect_retry duration how long to wait in between replica reconnect attempts. Only precise to the second. (default 10s) + --security_policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) + --service_map strings comma separated list of services to enable (or disable if prefixed with '-') Example: grpc-queryservice + --socket_file string Local unix socket file to listen on + --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) + --table-refresh-interval int interval in milliseconds to refresh tables in status page with refreshRequired class + --tablet_dir string The directory within the vtdataroot to store vttablet/mysql files. Defaults to being generated by the tablet uid. + --tablet_uid uint32 Tablet UID. (default 41983) + --v Level log level for V logs + -v, --version print binary version + --vmodule vModuleFlag comma-separated list of pattern=N settings for file-filtered logging +``` + +### SEE ALSO + +* [mysqlctl](../) - mysqlctl initializes and controls mysqld with Vitess-specific configuration. + diff --git a/content/en/docs/21.0/reference/programs/mysqlctld/_index.md b/content/en/docs/21.0/reference/programs/mysqlctld/_index.md new file mode 100644 index 000000000..04ea62dc9 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/mysqlctld/_index.md @@ -0,0 +1,144 @@ +--- +title: mysqlctld +series: mysqlctld +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## mysqlctld + +mysqlctld is a daemon that starts or initializes mysqld. + +### Synopsis + +`mysqlctld` is a gRPC server that can be used instead of the `mysqlctl` client tool. +If the target directories are empty when it is invoked, it automatically performs initialization operations to bootstrap the `mysqld` instance before starting it. +The `mysqlctld` process can subsequently receive gRPC commands from a `vttablet` to perform housekeeping operations like shutting down and restarting the `mysqld` instance as needed. + +{{< warning >}} +`mysqld_safe` is not used so the `mysqld` process will not be automatically restarted in case of a failure. +{{}} + +To enable communication with a `vttablet`, the server must be configured to receive gRPC messages on a unix domain socket. + +``` +mysqlctld [flags] +``` + +### Examples + +``` +mysqlctld \ + --log_dir=${VTDATAROOT}/logs \ + --tablet_uid=100 \ + --mysql_port=17100 \ + --socket_file=/path/to/socket_file +``` + +### Options + +``` + --alsologtostderr log to standard error as well as files + --app_idle_timeout duration Idle timeout for app connections (default 1m0s) + --app_pool_size int Size of the connection pool for app connections (default 40) + --bind-address string Bind address for the server. If empty, the server will listen on all available unicast and anycast IP addresses of the local system. + --catch-sigpipe catch and ignore SIGPIPE on stdout and stderr if specified + --config-file string Full path of the config file (with extension) to use. If set, --config-path, --config-type, and --config-name are ignored. + --config-file-not-found-handling ConfigFileNotFoundHandling Behavior when a config file is not found. (Options: error, exit, ignore, warn) (default warn) + --config-name string Name of the config file (without extension) to search for. (default "vtconfig") + --config-path strings Paths to search for config files in. (default []) + --config-persistence-min-interval duration minimum interval between persisting dynamic config changes back to disk (if no change has occurred, nothing is done). (default 1s) + --config-type string Config file type (omit to infer config type from file extension). + --db-credentials-file string db credentials file; send SIGHUP to reload this file + --db-credentials-server string db credentials server type ('file' - file implementation; 'vault' - HashiCorp Vault implementation) (default "file") + --db-credentials-vault-addr string URL to Vault server + --db-credentials-vault-path string Vault path to credentials JSON blob, e.g.: secret/data/prod/dbcreds + --db-credentials-vault-role-mountpoint string Vault AppRole mountpoint; can also be passed using VAULT_MOUNTPOINT environment variable (default "approle") + --db-credentials-vault-role-secretidfile string Path to file containing Vault AppRole secret_id; can also be passed using VAULT_SECRETID environment variable + --db-credentials-vault-roleid string Vault AppRole id; can also be passed using VAULT_ROLEID environment variable + --db-credentials-vault-timeout duration Timeout for vault API operations (default 10s) + --db-credentials-vault-tls-ca string Path to CA PEM for validating Vault server certificate + --db-credentials-vault-tokenfile string Path to file containing Vault auth token; token can also be passed using VAULT_TOKEN environment variable + --db-credentials-vault-ttl duration How long to cache DB credentials from the Vault server (default 30m0s) + --db_charset string Character set used for this tablet. (default "utf8mb4") + --db_conn_query_info enable parsing and processing of QUERY_OK info fields + --db_connect_timeout_ms int connection timeout to mysqld in milliseconds (0 for no timeout) + --db_dba_password string db dba password + --db_dba_use_ssl Set this flag to false to make the dba connection to not use ssl (default true) + --db_dba_user string db dba user userKey (default "vt_dba") + --db_flags uint Flag values as defined by MySQL. + --db_flavor string Flavor overrid. Valid value is FilePos. + --db_host string The host name for the tcp connection. + --db_port int tcp port + --db_server_name string server name of the DB we are connecting to. + --db_socket string The unix socket to connect on. If this is specified, host and port will not be used. + --db_ssl_ca string connection ssl ca + --db_ssl_ca_path string connection ssl ca path + --db_ssl_cert string connection ssl certificate + --db_ssl_key string connection ssl key + --db_ssl_mode SslMode SSL mode to connect with. One of disabled, preferred, required, verify_ca & verify_identity. + --db_tls_min_version string Configures the minimal TLS version negotiated when SSL is enabled. Defaults to TLSv1.2. Options: TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3. + --dba_idle_timeout duration Idle timeout for dba connections (default 1m0s) + --dba_pool_size int Size of the connection pool for dba connections (default 20) + --grpc_auth_mode string Which auth plugin implementation to use (eg: static) + --grpc_auth_mtls_allowed_substrings string List of substrings of at least one of the client certificate names (separated by colon). + --grpc_auth_static_client_creds string When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server. + --grpc_auth_static_password_file string JSON File to read the users/passwords from. + --grpc_bind_address string Bind address for gRPC calls. If empty, listen on all addresses. + --grpc_ca string server CA to use for gRPC connections, requires TLS, and enforces client certificate check + --grpc_cert string server certificate to use for gRPC connections, requires grpc_key, enables TLS + --grpc_compression string Which protocol to use for compressing gRPC. Default: nothing. Supported: snappy + --grpc_crl string path to a certificate revocation list in PEM format, client certificates will be further verified against this file during TLS handshake + --grpc_enable_optional_tls enable optional TLS mode when a server accepts both TLS and plain-text connections on the same port + --grpc_initial_conn_window_size int gRPC initial connection window size + --grpc_initial_window_size int gRPC initial window size + --grpc_keepalive_time duration After a duration of this time, if the client doesn't see any activity, it pings the server to see if the transport is still alive. (default 10s) + --grpc_keepalive_timeout duration After having pinged for keepalive check, the client waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) + --grpc_key string server private key to use for gRPC connections, requires grpc_cert, enables TLS + --grpc_max_connection_age duration Maximum age of a client connection before GoAway is sent. (default 2562047h47m16.854775807s) + --grpc_max_connection_age_grace duration Additional grace period after grpc_max_connection_age, after which connections are forcibly closed. (default 2562047h47m16.854775807s) + --grpc_port int Port to listen on for gRPC calls. If zero, do not listen. + --grpc_server_ca string path to server CA in PEM format, which will be combine with server cert, return full certificate chain to clients + --grpc_server_initial_conn_window_size int gRPC server initial connection window size + --grpc_server_initial_window_size int gRPC server initial window size + --grpc_server_keepalive_enforcement_policy_min_time duration gRPC server minimum keepalive time (default 10s) + --grpc_server_keepalive_enforcement_policy_permit_without_stream gRPC server permit client keepalive pings even when there are no active streams (RPCs) + --grpc_server_keepalive_time duration After a duration of this time, if the server doesn't see any activity, it pings the client to see if the transport is still alive. (default 10s) + --grpc_server_keepalive_timeout duration After having pinged for keepalive check, the server waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) + -h, --help help for mysqlctld + --init_db_sql_file string Path to .sql file to run after mysqld initialization + --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --lameduck-period duration keep running at least this long after SIGTERM before stopping (default 50ms) + --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace + --log_dir string If non-empty, write log files in this directory + --log_err_stacks log stack traces for errors + --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) + --logtostderr log to standard error instead of files + --max-stack-size int configure the maximum stack size in bytes (default 67108864) + --mysql_port int MySQL port (default 3306) + --mysql_server_version string MySQL server version to advertise. (default "8.0.30-Vitess") + --mysql_socket string Path to the mysqld socket file + --mysqlctl_mycnf_template string template file to use for generating the my.cnf file during server init + --mysqlctl_socket string socket file to use for remote mysqlctl actions (empty for local actions) + --onclose_timeout duration wait no more than this for OnClose handlers before stopping (default 10s) + --onterm_timeout duration wait no more than this for OnTermSync handlers before stopping (default 5m10s) + --pid_file string If set, the process will write its pid to the named file, and delete it on graceful shutdown. + --pool_hostname_resolve_interval duration if set force an update to all hostnames and reconnect if changed, defaults to 0 (disabled) + --port int port for the server + --pprof strings enable profiling + --pprof-http enable pprof http endpoints + --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) + --replication_connect_retry duration how long to wait in between replica reconnect attempts. Only precise to the second. (default 10s) + --security_policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) + --service_map strings comma separated list of services to enable (or disable if prefixed with '-') Example: grpc-queryservice + --shutdown-wait-time duration How long to wait for mysqld shutdown (default 5m0s) + --socket_file string Local unix socket file to listen on + --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) + --table-refresh-interval int interval in milliseconds to refresh tables in status page with refreshRequired class + --tablet_dir string The directory within the vtdataroot to store vttablet/mysql files. Defaults to being generated by the tablet uid. + --tablet_uid uint32 Tablet UID (default 41983) + --v Level log level for V logs + -v, --version print binary version + --vmodule vModuleFlag comma-separated list of pattern=N settings for file-filtered logging + --wait_time duration How long to wait for mysqld startup (default 5m0s) +``` + diff --git a/content/en/docs/21.0/reference/programs/regular-expression.txt b/content/en/docs/21.0/reference/programs/regular-expression.txt new file mode 100644 index 000000000..92dd1960c --- /dev/null +++ b/content/en/docs/21.0/reference/programs/regular-expression.txt @@ -0,0 +1,11 @@ +Format Options: + + +Find: \n ([^ ]+) ?(.+)?\n \t(.+) +Replace: | \1 | \2 | \3 |\n + + +Format vtctl table: + +Find: ([a-z]+)(.+) +Replace: | [\1](../vtctl/serving-graph#\1) | `\1 \2` | \ No newline at end of file diff --git a/content/en/docs/21.0/reference/programs/topo2topo/_index.md b/content/en/docs/21.0/reference/programs/topo2topo/_index.md new file mode 100644 index 000000000..0f43d6d5f --- /dev/null +++ b/content/en/docs/21.0/reference/programs/topo2topo/_index.md @@ -0,0 +1,61 @@ +--- +title: topo2topo +series: topo2topo +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## topo2topo + +topo2topo copies Vitess topology data from one topo server to another. + +### Synopsis + +topo2topo copies Vitess topology data from one topo server to another. +It can also be used to compare data between two topologies. + +``` +topo2topo [flags] +``` + +### Options + +``` + --alsologtostderr log to standard error as well as files + --compare compares data between topologies + --config-file string Full path of the config file (with extension) to use. If set, --config-path, --config-type, and --config-name are ignored. + --config-file-not-found-handling ConfigFileNotFoundHandling Behavior when a config file is not found. (Options: error, exit, ignore, warn) (default warn) + --config-name string Name of the config file (without extension) to search for. (default "vtconfig") + --config-path strings Paths to search for config files in. (default []) + --config-persistence-min-interval duration minimum interval between persisting dynamic config changes back to disk (if no change has occurred, nothing is done). (default 1s) + --config-type string Config file type (omit to infer config type from file extension). + --do-keyspaces copies the keyspace information + --do-routing-rules copies the routing rules + --do-shard-replications copies the shard replication information + --do-shards copies the shard information + --do-tablets copies the tablet information + --from_implementation string topology implementation to copy data from + --from_root string topology server root to copy data from + --from_server string topology server address to copy data from + --grpc_enable_tracing Enable gRPC tracing. + --grpc_max_message_size int Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'. (default 16777216) + --grpc_prometheus Enable gRPC monitoring with Prometheus. + -h, --help help for topo2topo + --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace + --log_dir string If non-empty, write log files in this directory + --log_err_stacks log stack traces for errors + --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) + --logtostderr log to standard error instead of files + --pprof strings enable profiling + --pprof-http enable pprof http endpoints + --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) + --security_policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) + --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) + --to_implementation string topology implementation to copy data to + --to_root string topology server root to copy data to + --to_server string topology server address to copy data to + --v Level log level for V logs + -v, --version print binary version + --vmodule vModuleFlag comma-separated list of pattern=N settings for file-filtered logging +``` + diff --git a/content/en/docs/21.0/reference/programs/vtaclcheck/_index.md b/content/en/docs/21.0/reference/programs/vtaclcheck/_index.md new file mode 100644 index 000000000..2d83a5e8f --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtaclcheck/_index.md @@ -0,0 +1,43 @@ +--- +title: vtaclcheck +series: vtaclcheck +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## vtaclcheck + +vtaclcheck checks that the access-control list (ACL) rules in a given file are valid. + +``` +vtaclcheck [flags] +``` + +### Options + +``` + --acl-file string The path of the JSON ACL file to check + --alsologtostderr log to standard error as well as files + --config-file string Full path of the config file (with extension) to use. If set, --config-path, --config-type, and --config-name are ignored. + --config-file-not-found-handling ConfigFileNotFoundHandling Behavior when a config file is not found. (Options: error, exit, ignore, warn) (default warn) + --config-name string Name of the config file (without extension) to search for. (default "vtconfig") + --config-path strings Paths to search for config files in. (default []) + --config-persistence-min-interval duration minimum interval between persisting dynamic config changes back to disk (if no change has occurred, nothing is done). (default 1s) + --config-type string Config file type (omit to infer config type from file extension). + -h, --help help for vtaclcheck + --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace + --log_dir string If non-empty, write log files in this directory + --log_err_stacks log stack traces for errors + --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) + --logtostderr log to standard error instead of files + --pprof strings enable profiling + --pprof-http enable pprof http endpoints + --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) + --security_policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) + --static-auth-file string The path of the auth_server_static JSON file to check + --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) + --v Level log level for V logs + -v, --version print binary version + --vmodule vModuleFlag comma-separated list of pattern=N settings for file-filtered logging +``` + diff --git a/content/en/docs/21.0/reference/programs/vtadmin-web.md b/content/en/docs/21.0/reference/programs/vtadmin-web.md new file mode 100644 index 000000000..7c589d953 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtadmin-web.md @@ -0,0 +1,36 @@ +--- +title: vtadmin-web +--- + +## Environment Variables + +These environment variables configure VTAdmin, most commonly when creating a `vtadmin-web` production build as described in the [VTAdmin Operator's Guide][operators_guide]. These environment variables also enumerated in [web/vtadmin/vite-env.d.ts][vtadmin_env_ref]. + +Under the hood, `vtadmin-web` uses [vite][vite], which requires all environment variables to be prefixed with `VITE` to avoid accidentally including secrets in the static build. For more on custom environment variables with vite, see ["Env Variables and Modes"][vite_env_ref]. + +These environment variables can be passed inline to the `npm run build` command or [added to a .env file][vite_env_file_ref]. + + +| Name | Required | Type | Default | Definition | +| -------- | --------- | --------- | --------- |--------- | +| `VITE_VTADMIN_API_ADDRESS` | **Required** | string | - | The full address of vtadmin-api's HTTP(S) interface. Example: "https://vtadmin.example.com:12345" | +| `VITE_BUGSNAG_API_KEY` | Optional | string | - | An API key for https://bugsnag.com. If defined, the @bugsnag/js client will be initialized. Your Bugsnag API key can be found in your Bugsnag Project Settings. | +| `VITE_BUILD_BRANCH` | Optional | string | - | The branch vtadmin-web was built with. Used only for debugging; will appear on the (secret) /settings route in the UI. | +| `VITE_BUILD_SHA` | Optional | string | - | The SHA vtadmin-web was built with. Used only for debugging; will appear on the (secret) /settings route in the UI. | +| `VITE_DOCUMENT_TITLE` | Optional | string | "VTAdmin" | Used for the document.title property. Overriding this can be useful to differentiate between multiple VTAdmin deployments, e.g., "VTAdmin (staging)". | +| `VITE_ENABLE_EXPERIMENTAL_TABLET_DEBUG_VARS` | Optional | string | - | Optional, but recommended. When `"true"`, enables front-end components that query vtadmin-api's /api/experimental/tablet/{tablet}/debug/vars endpoint. | +| `VITE_FETCH_CREDENTIALS` | Optional | string | - | Configures the `credentials` property for fetch requests made against vtadmin-api. If unspecified, uses fetch defaults. See https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch#sending_a_request_with_credentials_included | +| `VITE_READONLY_MODE` | Optional | string | "false" | If "true", UI controls that correspond to write actions (PUT, POST, DELETE) will be hidden. Note that this *only* affects the UI. If write actions are a concern, Vitess operators are encouraged to also [configure vtadmin-api for role-based access control (RBAC)][rbac] if needed. | + +[vite]: https://vitejs.dev/ +[vite_env_ref]: https://vitejs.dev/guide/env-and-mode.html +[vite_env_file_ref]: https://vitejs.dev/guide/env-and-mode.html#env-files#adding-development-environment-variables-in-env +[operators_guide]: ../../vtadmin/operators_guide +[rbac]: ../../vtadmin/role-based-access-control +[vtadmin_env_ref]: https://github.com/vitessio/vitess/blob/main/web/vtadmin/vite-env.d.ts + +These environment variables are automatically [filled in by vite](https://vitejs.dev/guide/env-and-mode.html#env-variables) and you do not have to provide them. They are available in the `import.meta.env` object at run time, and listed here for full coverage of environment variables: + +| Name | Type | Default | Definition | +| -------- | --------- | --------- | --------- | +| `MODE` | string | "production", "staging", or "development" | The current mode in which vite is running | diff --git a/content/en/docs/21.0/reference/programs/vtadmin.md b/content/en/docs/21.0/reference/programs/vtadmin.md new file mode 100644 index 000000000..a86a46084 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtadmin.md @@ -0,0 +1,80 @@ +--- +title: vtadmin +--- + +## Flags + +These flags are provided to the `vtadmin` process. They are also referenced in [cmd/vtadmin/main.go](https://github.com/vitessio/vitess/blob/main/go/cmd/vtadmin/main.go). + +### Common flags + +| Name | Required | Type | Default | Definition | +| -------- | --------- | --------- | --------- |--------- | +| `addr` | **Required** | string | ":15000" | The address for `vtadmin` to serve on. | +| `lame-duck-duration` | Optional | [time.Duration][duration] | "5s" | The length of the lame duck period at shutdown. | +| `lmux-read-timeout` | Optional | [time.Duration][duration] | "1s" | How long to spend connection muxing. | + +[duration]: https://pkg.go.dev/time#ParseDuration + +### Cluster config flags + +One of `cluster`, `cluster-defaults`, or `cluster-config` file is required. Multiple configurations are permitted; precedence is noted below. + +| Name | Definition | +| -------- | --------- | +| `cluster` | Per-cluster configuration. Any values here take precedence over those defined by the `cluster-defaults` and/or `cluster-config` flags. | +| `cluster-config` | Path to a yaml cluster configuration; for reference, see the example [clusters.yaml](https://github.com/vitessio/vitess/blob/main/doc/vtadmin/clusters.yaml). | +| `cluster-defaults` | Default options for all clusters. | +| `enable-dynamic-clusters` | Defaults to `false`. Whether to enable dynamic clusters that are set by request header cookies or gRPC metadata. | + +### Tracing flags + +| Name | Required | Type | Default | Definition | +| -------- | --------- | --------- | --------- |--------- | +| `grpc-tracing` | Optional | boolean | `false` | If true, enables tracing on the gRPC server. | +| `http-tracing` | Optional | boolean | `false` | If true, enables tracing on the HTTP server. | +| `tracer` | Optional | string | "noop" | Which tracing service to use; see [go/trace/trace.go](https://github.com/vitessio/vitess/blob/main/go/trace/trace.go). | +| `tracing-enable-logging` | Optional | boolean | `false` | Whether to enable logging in the tracing service; see [go/trace/trace.go](https://github.com/vitessio/vitess/blob/main/go/trace/trace.go). | +| `tracing-sampling-type` | Optional | string | - | Sampling strategy to use for jaeger. Possible values are "const", "probabilistic", "rateLimiting", or "remote"; see [go/trace/plugin_jaeger.go](https://github.com/vitessio/vitess/blob/main/go/trace/plugin_jaeger.go). | +| `tracing-sampling-rate` | Optional | float | 0.1 | Sampling rate for the probabilistic jaeger sampler; see [go/trace/plugin_jaeger.go](https://github.com/vitessio/vitess/blob/main/go/trace/plugin_jaeger.go). | +### gRPC server flags + +| Name | Required | Type | Default | Definition | +| -------- | --------- | --------- | --------- |--------- | +| `grpc-allow-reflection` | Optional | boolean | `false` | Whether to register the gRPC server for reflection; this is required to use tools like `grpc_cli`. +| `grpc-enable-channelz` | Optional | boolean | `false` | Whether to enable the [channelz](https://grpc.io/blog/a-short-introduction-to-channelz/) service on the gRPC server. | + +### HTTP server flags + +| Name | Required | Type | Default | Definition | +| -------- | --------- | --------- | --------- |--------- | +| `http-origin` | **Required** | string | - | repeated, comma-separated flag of allowed CORS origins. omit to disable CORS | +| `http-metrics-endpoint` | **Recommended** | string | "/metrics" | HTTP endpoint to expose prometheus metrics on. Omit to disable scraping metrics. Using a path used by VTAdmin's http API is unsupported and causes undefined behavior.| +| `http-tablet-url-tmpl` | **Recommended** | string | "https://{{ .Tablet.Hostname }}:80" | Go template string to generate a reachable http(s) address for a tablet. Currently used to make passthrough requests to /debug/vars endpoints. Example: `"https://{{ .Tablet.Hostname }}:80"` | +| `http-debug-omit-env` | Optional | boolean | `false` | The name of an environment variable to omit from /debug/env, if http debug endpoints are enabled. Specify multiple times to omit multiple env vars. | +| `http-debug-sanitize-env`| Optional | string | - | The name of an environment variable to sanitize in /debug/env, if http debug endpoints are enabled. Specify multiple times to sanitize multiple env vars. | +| `http-no-compress` | Optional | boolean | `false` | Whether to disable compression of HTTP API responses. | +| `http-no-debug` | Optional | boolean | `false` | Whether to disable `/debug/pprof/*` and `/debug/env` HTTP endpoints | + + +### RBAC flags + +If using RBAC, both the `--rbac` and `--rbac-config` flags must be set. If not using RBAC, the `--no-rbac` must be set. + +| Name | Required | Type | Default | Definition | +| -------- | --------- | --------- | --------- |--------- | +| `no-rbac` | Optional | boolean | `false` | Whether to disable RBAC. | +| `rbac` | Optional | boolean | `false` | Whether to enable RBAC. | +| `rbac-config` | Optional | string | - | Path to an RBAC config file. Must be set if passing `--rbac`. | + +### glog flags + +See https://pkg.go.dev/github.com/golang/glog. + +| Name | Required | Type | Default | Definition | +| -------- | --------- | --------- | --------- |--------- | +| `logtostderr` | Optional | boolean | `false` | If true, logs are written to standard error instead of to files. +| `alsologtostderr` | Optional | boolean | `false` | If true, logs are written to standard error as well as to files. +| `stderrthreshold` | Optional | string | `ERROR` | Log events at or above this severity are logged to standard error as well as to files. +| `log_dir` | Optional | string | - | Log files will be written to this directory instead of the default temporary directory. | +| `v` | Optional | int | 0 | Enable V-leveled logging at the specified level. | diff --git a/content/en/docs/21.0/reference/programs/vtbackup.md b/content/en/docs/21.0/reference/programs/vtbackup.md new file mode 100644 index 000000000..63089caeb --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtbackup.md @@ -0,0 +1,240 @@ +--- +title: vtbackup +description: The Vitess Batch Command for Backup Maintenance +--- + +`vtbackup` is a batch comand to perform a single pass of backup maintenance for a shard. + +When run periodically for each shard, `vtbackup` can ensure these configurable policies: + - There is always a recent backup for the shard. + - Old backups for the shard are removed. + +Whatever system launches `vtbackup` is responsible for the following: + - Running `vtbackup` with similar flags that would be used for a vttablet and + mysqlctld in the target shard to be backed up. + - Provisioning as much disk space for `vtbackup` as would be given to vttablet. + The data directory MUST be empty at startup. Do NOT reuse a persistent disk. + - Running `vtbackup` periodically for each shard, for each backup storage location. + - Ensuring that at most one instance runs at a time for a given pair of shard + and backup storage location. + - Retrying `vtbackup` if it fails. + - Alerting human operators if the failure is persistent. + +## Example Usage + +On a running Vitess cluster, the following command will create a backup using `vtbackup` for keyspace `commerce` and shard `0`. + +```bash +export TOPOLOGY_FLAGS="--topo_implementation etcd2 --topo_global_server_address localhost:2379 --topo_global_root /vitess/global" +export VTROOT="/tmp" + +mkdir -p $VTROOT/{backups,socket} + +vtbackup \ + $TOPOLOGY_FLAGS \ + --backup_storage_implementation file \ + --file_backup_storage_root $VTROOT/backups/vitess-local/ \ + --logtostderr=true \ + --mysql_socket $VTROOT/socket/mysql.sock \ + --port 15500 \ + --mysql_port 33306 \ + --init_shard=0 \ + --init_keyspace=commerce \ + --db_dba_user=vt_dba +``` + +While it is running, `vtbackup` serves debugging info and metrics on port `15500`, and starts a mysqld daemon serving on port `33306`. + +## Options + +| Name | Type | Definition | +| :------------------------------------ | :--------- | :----------------------------------------------------------------------------------------- | +| --allow_first_backup | boolean | Allow this job to take the first backup of an existing shard. | +| --alsologtostderr | boolean | log to standard error as well as files | +| --azblob_backup_account_key_file | string | Path to a file containing the Azure Storage account key; if this flag is unset, the environment variable VT_AZBLOB_ACCOUNT_KEY will be used as the key itself (NOT a file path). | +| --azblob_backup_account_name | string | Azure Storage Account name for backups; if this flag is unset, the environment variable VT_AZBLOB_ACCOUNT_NAME will be used. | +| --azblob_backup_buffer_size | int | The memory buffer size to use in bytes, per file or stripe, when streaming to Azure Blob Service. (default 104857600) | +| --azblob_backup_container_name | string | Azure Blob Container Name. | +| --azblob_backup_parallelism | int | Azure Blob operation parallelism (requires extra memory when increased -- a multiple of azblob_backup_buffer_size). (default 1) | +| --azblob_backup_storage_root | string | Root prefix for all backup-related Azure Blobs; this should exclude both initial and trailing '/' (e.g. just 'a/b' not '/a/b/'). | +| --backup_engine_implementation | string | Specifies which implementation to use for creating new backups (builtin or xtrabackup). Restores will always be done with whichever engine created a given backup. (default "builtin") | +| --backup_storage_block_size | int | if backup_storage_compress is true, backup_storage_block_size sets the byte size for each block while compressing (default is 250000). (default 250000) | +| --backup_storage_compress | boolean | if set, the backup files will be compressed. (default true) | +| --backup_storage_implementation | string | Which backup storage implementation to use for creating and restoring backups. | +| --backup_storage_number_blocks | int | if backup_storage_compress is true, backup_storage_number_blocks sets the number of blocks that can be processed, at once, before the writer blocks, during compression (default is 2). It should be equal to the number of CPUs available for compression. (default 2) | +| --builtinbackup-file-read-buffer-size | uint | read files using an IO buffer of this many bytes. Golang defaults are used when set to 0. | +| --builtinbackup-file-write-buffer-size | uint | write files using an IO buffer of this many bytes. Golang defaults are used when set to 0. (default 2097152) | +| --builtinbackup-incremental-restore-path | string | the directory where incremental restore files, namely binlog files, are extracted to. In k8s environments, this should be set to a directory that is shared between the vttablet and mysqld pods. The path should exist. When empty, the default OS temp dir is assumed. | +| --builtinbackup_mysqld_timeout | duration | how long to wait for mysqld to shutdown at the start of the backup. (default 10m0s) | +| --builtinbackup_progress | duration | how often to send progress updates when backing up large files. (default 5s) | +| --ceph_backup_storage_config | string | Path to JSON config file for ceph backup storage. (default "ceph_backup_config.json") | +| --compression-engine-name | string | compressor engine used for compression. (default "pargzip") | +| --compression-level | int | what level to pass to the compressor. (default 1) | +| --concurrency | int | (init restore parameter) how many concurrent files to restore at once (default 4) | +| --consul_auth_static_file | string | JSON File to read the topos/tokens from. | +| --db-credentials-file | string | db credentials file; send SIGHUP to reload this file | +| --db-credentials-server | string | db credentials server type ('file' - file implementation; 'vault' - HashiCorp Vault implementation) (default "file") | +| --db-credentials-vault-addr | string | URL to Vault server | +| --db-credentials-vault-path | string | Vault path to credentials JSON blob, e.g.: secret/data/prod/dbcreds | +| --db-credentials-vault-role-mountpoint | string | Vault AppRole mountpoint; can also be passed using VAULT_MOUNTPOINT environment variable (default "approle") | +| --db-credentials-vault-role-secretidfile | string Path to file containing Vault AppRole secret_id; can also be passed using VAULT_SECRETID environment variable | +| --db-credentials-vault-roleid | string | Vault AppRole id; can also be passed using VAULT_ROLEID environment variable | +| --db-credentials-vault-timeout | duration | Timeout for vault API operations (default 10s) | +| --db-credentials-vault-tls-ca | string | Path to CA PEM for validating Vault server certificate | +| --db-credentials-vault-tokenfile | string | Path to file containing Vault auth token; token can also be passed using VAULT_TOKEN environment variable | +| --db-credentials-vault-ttl | duration | How long to cache DB credentials from the Vault server (default 30m0s) | +| --db_allprivs_password | string | db allprivs password | +| --db_allprivs_use_ssl | boolean | Set this flag to false to make the allprivs connection to not use ssl (default true) | +| --db_allprivs_user | string | db allprivs user userKey (default "vt_allprivs") | +| --db_app_password | string | db app password | +| --db_app_use_ssl | boolean | Set this flag to false to make the app connection to not use ssl (default true) | +| --db_app_user | string | db app user userKey (default "vt_app") | +| --db_appdebug_password | string | db appdebug password | +| --db_appdebug_use_ssl | boolean | Set this flag to false to make the appdebug connection to not use ssl (default true) | +| --db_appdebug_user | string | db appdebug user userKey (default "vt_appdebug") | +| --db_charset | string | Character set used for this tablet. (default "utf8mb4") | +| --db_conn_query_info | boolean | enable parsing and processing of QUERY_OK info fields | +| --db_connect_timeout_ms | int | connection timeout to mysqld in milliseconds (0 for no timeout) | +| --db_dba_password | string | db dba password | +| --db_dba_use_ssl | boolean | Set this flag to false to make the dba connection to not use ssl (default true) | +| --db_dba_user | string | db dba user userKey (default "vt_dba") | +| --db_erepl_password | string | db erepl password | +| --db_erepl_use_ssl | boolean | Set this flag to false to make the erepl connection to not use ssl (default true) | +| --db_erepl_user | string | db erepl user userKey (default "vt_erepl") | +| --db_filtered_password | string | db filtered password | +| --db_filtered_use_ssl | boolean | Set this flag to false to make the filtered connection to not use ssl (default true) | +| --db_filtered_user | string | db filtered user userKey (default "vt_filtered") | +| --db_flags | uint | Flag values as defined by MySQL. | +| --db_flavor | string | Flavor overrid. Valid value is FilePos. | +| --db_host | string | The host name for the tcp connection. | +| --db_port | int | tcp port | +| --db_repl_password | string | db repl password | +| --db_repl_use_ssl | boolean | Set this flag to false to make the repl connection to not use ssl (default true) | +| --db_repl_user | string | db repl user userKey (default "vt_repl") | +| --db_server_name | string | server name of the DB we are connecting to. | +| --db_socket | string | The unix socket to connect on. If this is specified, host and port will not be used. | +| --db_ssl_ca | string | connection ssl ca | +| --db_ssl_ca_path | string | connection ssl ca path | +| --db_ssl_cert | string | connection ssl certificate | +| --db_ssl_key | string | connection ssl key | +| --db_ssl_mode | SslMode | SSL mode to connect with. One of disabled, preferred, required, verify_ca & verify_identity. | +| --db_tls_min_version | string | Configures the minimal TLS version negotiated when SSL is enabled. Defaults to TLSv1.2. Options: TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3. | +| --detach | boolean | detached mode - run backups detached from the terminal | +| --disable-redo-log | boolean | Disable InnoDB redo log during replication-from-primary phase of backup. | +| --emit_stats | boolean | If set, emit stats to push-based monitoring and stats backends | +| --external-compressor | string | command with arguments to use when compressing a backup. | +| --external-compressor-extension | string | extension to use when using an external compressor. | +| --external-decompressor | string | command with arguments to use when decompressing a backup. | +| --file_backup_storage_root | string | Root directory for the file backup storage. | +| --gcs_backup_storage_bucket | string | Google Cloud Storage bucket to use for backups. | +| --gcs_backup_storage_root | string | Root prefix for all backup-related object names. | +| --grpc_auth_static_client_creds | string | When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server. | +| --grpc_compression | string | Which protocol to use for compressing gRPC. Default: nothing. Supported: snappy | +| --grpc_enable_tracing | boolean | Enable gRPC tracing. | +| --grpc_initial_conn_window_size | int | gRPC initial connection window size | +| --grpc_initial_window_size | int | gRPC initial window size | +| --grpc_keepalive_time | duration | After a duration of this time, if the client doesn't see any activity, it pings the server to see if the transport is still alive. (default 10s) | +| --grpc_keepalive_timeout | duration | After having pinged for keepalive check, the client waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) | +| --grpc_max_message_size | int | Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'. (default 16777216) | +| --grpc_prometheus | boolean | Enable gRPC monitoring with Prometheus. | +| --incremental_from_pos | string | Position of previous backup. Default: empty. If given, then this backup becomes an incremental backup from given position. If value is 'auto', backup taken from last successful backup position | +| --init_db_name_override | string | (init parameter) override the name of the db used by vttablet | +| --init_db_sql_file | string | path to .sql file to run after mysql_install_db | +| --init_keyspace | string | (init parameter) keyspace to use for this tablet | +| --init_shard | string | (init parameter) shard to use for this tablet | +| --initial_backup | boolean | Instead of restoring from backup, initialize an empty database with the provided init_db_sql_file and upload a backup of that for the shard, if the shard has no backups yet. This can be used to seed a brand new shard with an initial, empty backup. If any backups already exist for the shard, this will be considered a successful no-op. This can only be done before the shard exists in topology (i.e. before any tablets are deployed). | +| --keep-alive-timeout | duration | Wait until timeout elapses after a successful backup before shutting down. | +| --keep_logs | boolean | keep logs for this long (using ctime) (zero to keep forever) | +| --keep_logs_by_mtime | duration | keep logs for this long (using mtime) (zero to keep forever) | +| --lock-timeout | duration | Maximum time for which a shard/keyspace lock can be acquired for (default 45s) | +| --log_backtrace_at | traceLocation | when logging hits line file:N, emit a stack trace (default :0) | +| --log_dir | string | If non-empty, write log files in this directory | +| --log_err_stacks | boolean | log stack traces for errors | +| --log_rotate_max_size | uint | size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) | +| --logtostderr | boolean | log to standard error instead of files | +| --manifest-external-decompressor | string | command with arguments to store in the backup manifest when compressing a backup with an external compression engine. | +| --min_backup_interval | duration | Only take a new backup if it's been at least this long since the most recent backup. | +| --min_retention_count | int | Always keep at least this many of the most recent backups in this backup storage location, even if some are older than the min_retention_time. This must be at least 1 since a backup must always exist to allow new backups to be made (default 1) | +| --min_retention_time | duration | Keep each old backup for at least this long before removing it. Set to 0 to disable pruning of old backups. | +| --mycnf-file | string | path to my.cnf, if reading all config params from there | +| --mycnf_bin_log_path | string | mysql binlog path | +| --mycnf_data_dir | string | data directory for mysql | +| --mycnf_error_log_path | string | mysql error log path | +| --mycnf_general_log_path | string | mysql general log path | +| --mycnf_innodb_data_home_dir | string | Innodb data home directory | +| --mycnf_innodb_log_group_home_dir | string | Innodb log group home directory | +| --mycnf_master_info_file | string | mysql master.info file | +| --mycnf_mysql_port | int | port mysql is listening on | +| --mycnf_pid_file | string | mysql pid file | +| --mycnf_relay_log_index_path | string | mysql relay log index path | +| --mycnf_relay_log_info_path | string | mysql relay log info path | +| --mycnf_relay_log_path | string | mysql relay log path | +| --mycnf_secure_file_priv | string | mysql path for loading secure files | +| --mycnf_server_id | int | mysql server id of the server (if specified, mycnf-file will be ignored) | +| --mycnf_slow_log_path | string | mysql slow query log path | +| --mycnf_socket_file | string | mysql socket file | +| --mycnf_tmp_dir | string | mysql tmp directory | +| --mysql_port | int | mysql port (default 3306) | +| --mysql_server_version | string | MySQL server version to advertise. | +| --mysql_socket | string | path to the mysql socket | +| --mysql_timeout | duration | how long to wait for mysqld startup (default 5m0s) | +| --port | int | port for the server | +| --pprof | strings | enable profiling | +| --purge_logs_interval | boolean | how often try to remove old logs (default 1h0m0s) | +| --remote_operation_timeout | duration | time to wait for a remote operation (default 15s) | +| --restart_before_backup | boolean | Perform a mysqld clean/full restart after applying binlogs, but before taking the backup. Only makes sense to work around xtrabackup bugs. | +| --s3_backup_aws_endpoint | string | endpoint of the S3 backend (region must be provided). | +| --s3_backup_aws_region | string | AWS region to use. (default "us-east-1") | +| --s3_backup_aws_retries | int | AWS request retries. (default -1) | +| --s3_backup_force_path_style | | force the s3 path style. | +| --s3_backup_log_level | string | determine the S3 loglevel to use from LogOff, LogDebug, LogDebugWithSigning, LogDebugWithHTTPBody, LogDebugWithRequestRetries, LogDebugWithRequestErrors. (default "LogOff") | +| --s3_backup_server_side_encryption | string | server-side encryption algorithm (e.g., AES256, aws:kms, sse_c:/path/to/key/file). | +| --s3_backup_storage_bucket | string | S3 bucket to use for backups. | +| --s3_backup_storage_root | string | root prefix for all backup-related object names. | +| --s3_backup_tls_skip_verify_cert | | skip the 'certificate is valid' check for SSL connections. | +| --security_policy | string | the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) | +| --sql-max-length-errors | int | truncate queries in error logs to the given length (default unlimited) | +| --sql-max-length-ui | int | truncate queries in debug UIs to the given length (default 512) (default 512) | +| --stats_backend | string | The name of the registered push-based monitoring/stats backend to use | +| --stats_combine_dimensions | string | List of dimensions to be combined into a single "all" value in exported stats vars | +| --stats_common_tags | strings | Comma-separated list of common tags for the stats backend. It provides both label and values. Example: label1:value1,label2:value2 | +| --stats_drop_variables | string | Variables to be dropped from the list of exported variables. | +| --stats_emit_period | duration | Interval between emitting stats to all registered backends (default 1m0s) | +| --stderrthreshold | severity | logs at or above this threshold go to stderr (default 1) | +| --tablet_manager_grpc_ca | string | the server ca to use to validate servers when connecting | +| --tablet_manager_grpc_cert | string | the cert to use to connect | +| --tablet_manager_grpc_concurrency | int | concurrency to use to talk to a vttablet server for performance-sensitive RPCs (like ExecuteFetchAs{Dba,AllPrivs,App}) (default 8) | +| --tablet_manager_grpc_connpool_size | int | number of tablets to keep tmclient connections open to (default 100) | +| --tablet_manager_grpc_crl | string | the server crl to use to validate server certificates when connecting | +| --tablet_manager_grpc_key | string | the key to use to connect | +| --tablet_manager_grpc_server_name | string | the server name to use to validate server certificate | +| --tablet_manager_protocol | string | Protocol to use to make tabletmanager RPCs to vttablets. (default "grpc") | +| --topo_consul_lock_delay | duration | LockDelay for consul session. (default 15s) | +| --topo_consul_lock_session_checks | string | List of checks for consul session. (default "serfHealth") | +| --topo_consul_lock_session_ttl | string | TTL for consul session. | +| --topo_consul_watch_poll_duration | duration | time of the long poll for watch queries. (default 30s) | +| --topo_etcd_lease_ttl | int | Lease TTL for locks and leader election. The client will use KeepAlive to keep the lease going. (default 30) | +| --topo_etcd_tls_ca | string | path to the ca to use to validate the server cert when connecting to the etcd topo server | +| --topo_etcd_tls_cert | string | path to the client cert to use to connect to the etcd topo server, requires topo_etcd_tls_key, enables TLS | +| --topo_etcd_tls_key | string | path to the client key to use to connect to the etcd topo server, enables TLS | +| --topo_global_root | string | the path of the global topology data in the global topology server | +| --topo_global_server_address | string | the address of the global topology server | +| --topo_implementation | string | the topology implementation to use | +| --topo_zk_auth_file | string | auth to use when connecting to the zk topo server, file contents should be :, e.g., digest:user:pass | +| --topo_zk_base_timeout | duration | zk base timeout (see zk.Connect) (default 30s) | +| --topo_zk_max_concurrency | int | maximum number of pending requests to send to a Zookeeper server. (default 64) | +| --topo_zk_tls_ca | string | the server ca to use to validate servers when connecting to the zk topo server | +| --topo_zk_tls_cert | string | the cert to use to connect to the zk topo server, requires topo_zk_tls_key, enables TLS | +| --topo_zk_tls_key | string | the key to use to connect to the zk topo server, enables TLS | +| --upgrade-safe | boolean | Whether to use innodb_fast_shutdown=0 for the backup so it is safe to use for MySQL upgrades | +| --v | Level | log level for V logs | +| -v, --version | | print binary version | +| --vmodule | moduleSpec | comma-separated list of pattern=N settings for file-filtered logging | +| --xbstream_restore_flags | string | Flags to pass to xbstream command during restore. These should be space separated and will be added to the end of the command. These need to match the ones used for backup e.g. --compress / --decompress, --encrypt / --decrypt | +| --xtrabackup_backup_flags | string | Flags to pass to backup command. These should be space separated and will be added to the end of the command | +| --xtrabackup_prepare_flags | string | Flags to pass to prepare command. These should be space separated and will be added to the end of the command | +| --xtrabackup_root_path | string | Directory location of the xtrabackup and xbstream executables, e.g., /usr/bin | +| --xtrabackup_stream_mode | string | Which mode to use if streaming, valid values are tar and xbstream. Please note that tar is not supported in XtraBackup 8.0 (default "tar") | +| --xtrabackup_stripe_block_size | uint | Size in bytes of each block that gets sent to a given stripe before rotating to the next stripe (default 102400) | +| --xtrabackup_stripes | uint | If greater than 0, use data striping across this many destination files to parallelize data transfer and decompression | +| --xtrabackup_user | string | User that xtrabackup will use to connect to the database server. This user must have all necessary privileges. For details, please refer to xtrabackup documentation. | diff --git a/content/en/docs/21.0/reference/programs/vtbackup/_index.md b/content/en/docs/21.0/reference/programs/vtbackup/_index.md new file mode 100644 index 000000000..33e5b078b --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtbackup/_index.md @@ -0,0 +1,260 @@ +--- +title: vtbackup +series: vtbackup +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## vtbackup + +vtbackup is a batch command to perform a single pass of backup maintenance for a shard. + +### Synopsis + +vtbackup is a batch command to perform a single pass of backup maintenance for a shard. + +When run periodically for each shard, vtbackup can ensure these configurable policies: + * There is always a recent backup for the shard. + * Old backups for the shard are removed. + +Whatever system launches vtbackup is responsible for the following: + - Running vtbackup with similar flags that would be used for a vttablet and + mysqlctld in the target shard to be backed up. + - Provisioning as much disk space for vtbackup as would be given to vttablet. + The data directory MUST be empty at startup. Do NOT reuse a persistent disk. + - Running vtbackup periodically for each shard, for each backup storage location. + - Ensuring that at most one instance runs at a time for a given pair of shard + and backup storage location. + - Retrying vtbackup if it fails. + - Alerting human operators if the failure is persistent. + +The process vtbackup follows to take a new backup has the following steps: + 1. Restore from the most recent backup. + 2. Start a mysqld instance (but no vttablet) from the restored data. + 3. Instruct mysqld to connect to the current shard primary and replicate any + transactions that are new since the last backup. + 4. Ask the primary for its current replication position and set that as the goal + for catching up on replication before taking the backup, so the goalposts + don't move. + 5. Wait until replication is caught up to the goal position or beyond. + 6. Stop mysqld and take a new backup. + +Aside from additional replication load while vtbackup's mysqld catches up on +new transactions, the shard should be otherwise unaffected. Existing tablets +will continue to serve, and no new tablets will appear in topology, meaning no +query traffic will ever be routed to vtbackup's mysqld. This silent operation +mode helps make backups minimally disruptive to serving capacity and orthogonal +to the handling of the query path. + +The command-line parameters to vtbackup specify a policy for when a new backup +is needed, and when old backups should be removed. If the existing backups +already satisfy the policy, then vtbackup will do nothing and return success +immediately. + +``` +vtbackup [flags] +``` + +### Options + +``` + --allow_first_backup Allow this job to take the first backup of an existing shard. + --alsologtostderr log to standard error as well as files + --azblob_backup_account_key_file string Path to a file containing the Azure Storage account key; if this flag is unset, the environment variable VT_AZBLOB_ACCOUNT_KEY will be used as the key itself (NOT a file path). + --azblob_backup_account_name string Azure Storage Account name for backups; if this flag is unset, the environment variable VT_AZBLOB_ACCOUNT_NAME will be used. + --azblob_backup_buffer_size int The memory buffer size to use in bytes, per file or stripe, when streaming to Azure Blob Service. (default 104857600) + --azblob_backup_container_name string Azure Blob Container Name. + --azblob_backup_parallelism int Azure Blob operation parallelism (requires extra memory when increased -- a multiple of azblob_backup_buffer_size). (default 1) + --azblob_backup_storage_root string Root prefix for all backup-related Azure Blobs; this should exclude both initial and trailing '/' (e.g. just 'a/b' not '/a/b/'). + --backup_engine_implementation string Specifies which implementation to use for creating new backups (builtin or xtrabackup). Restores will always be done with whichever engine created a given backup. (default "builtin") + --backup_storage_block_size int if backup_storage_compress is true, backup_storage_block_size sets the byte size for each block while compressing (default is 250000). (default 250000) + --backup_storage_compress if set, the backup files will be compressed. (default true) + --backup_storage_implementation string Which backup storage implementation to use for creating and restoring backups. + --backup_storage_number_blocks int if backup_storage_compress is true, backup_storage_number_blocks sets the number of blocks that can be processed, in parallel, before the writer blocks, during compression (default is 2). It should be equal to the number of CPUs available for compression. (default 2) + --bind-address string Bind address for the server. If empty, the server will listen on all available unicast and anycast IP addresses of the local system. + --builtinbackup-file-read-buffer-size uint read files using an IO buffer of this many bytes. Golang defaults are used when set to 0. + --builtinbackup-file-write-buffer-size uint write files using an IO buffer of this many bytes. Golang defaults are used when set to 0. (default 2097152) + --builtinbackup-incremental-restore-path string the directory where incremental restore files, namely binlog files, are extracted to. In k8s environments, this should be set to a directory that is shared between the vttablet and mysqld pods. The path should exist. When empty, the default OS temp dir is assumed. + --builtinbackup_mysqld_timeout duration how long to wait for mysqld to shutdown at the start of the backup. (default 10m0s) + --builtinbackup_progress duration how often to send progress updates when backing up large files. (default 5s) + --ceph_backup_storage_config string Path to JSON config file for ceph backup storage. (default "ceph_backup_config.json") + --compression-engine-name string compressor engine used for compression. (default "pargzip") + --compression-level int what level to pass to the compressor. (default 1) + --concurrency int (init restore parameter) how many concurrent files to restore at once (default 4) + --config-file string Full path of the config file (with extension) to use. If set, --config-path, --config-type, and --config-name are ignored. + --config-file-not-found-handling ConfigFileNotFoundHandling Behavior when a config file is not found. (Options: error, exit, ignore, warn) (default warn) + --config-name string Name of the config file (without extension) to search for. (default "vtconfig") + --config-path strings Paths to search for config files in. (default []) + --config-persistence-min-interval duration minimum interval between persisting dynamic config changes back to disk (if no change has occurred, nothing is done). (default 1s) + --config-type string Config file type (omit to infer config type from file extension). + --consul_auth_static_file string JSON File to read the topos/tokens from. + --db-credentials-file string db credentials file; send SIGHUP to reload this file + --db-credentials-server string db credentials server type ('file' - file implementation; 'vault' - HashiCorp Vault implementation) (default "file") + --db-credentials-vault-addr string URL to Vault server + --db-credentials-vault-path string Vault path to credentials JSON blob, e.g.: secret/data/prod/dbcreds + --db-credentials-vault-role-mountpoint string Vault AppRole mountpoint; can also be passed using VAULT_MOUNTPOINT environment variable (default "approle") + --db-credentials-vault-role-secretidfile string Path to file containing Vault AppRole secret_id; can also be passed using VAULT_SECRETID environment variable + --db-credentials-vault-roleid string Vault AppRole id; can also be passed using VAULT_ROLEID environment variable + --db-credentials-vault-timeout duration Timeout for vault API operations (default 10s) + --db-credentials-vault-tls-ca string Path to CA PEM for validating Vault server certificate + --db-credentials-vault-tokenfile string Path to file containing Vault auth token; token can also be passed using VAULT_TOKEN environment variable + --db-credentials-vault-ttl duration How long to cache DB credentials from the Vault server (default 30m0s) + --db_allprivs_password string db allprivs password + --db_allprivs_use_ssl Set this flag to false to make the allprivs connection to not use ssl (default true) + --db_allprivs_user string db allprivs user userKey (default "vt_allprivs") + --db_app_password string db app password + --db_app_use_ssl Set this flag to false to make the app connection to not use ssl (default true) + --db_app_user string db app user userKey (default "vt_app") + --db_appdebug_password string db appdebug password + --db_appdebug_use_ssl Set this flag to false to make the appdebug connection to not use ssl (default true) + --db_appdebug_user string db appdebug user userKey (default "vt_appdebug") + --db_charset string Character set used for this tablet. (default "utf8mb4") + --db_conn_query_info enable parsing and processing of QUERY_OK info fields + --db_connect_timeout_ms int connection timeout to mysqld in milliseconds (0 for no timeout) + --db_dba_password string db dba password + --db_dba_use_ssl Set this flag to false to make the dba connection to not use ssl (default true) + --db_dba_user string db dba user userKey (default "vt_dba") + --db_erepl_password string db erepl password + --db_erepl_use_ssl Set this flag to false to make the erepl connection to not use ssl (default true) + --db_erepl_user string db erepl user userKey (default "vt_erepl") + --db_filtered_password string db filtered password + --db_filtered_use_ssl Set this flag to false to make the filtered connection to not use ssl (default true) + --db_filtered_user string db filtered user userKey (default "vt_filtered") + --db_flags uint Flag values as defined by MySQL. + --db_flavor string Flavor overrid. Valid value is FilePos. + --db_host string The host name for the tcp connection. + --db_port int tcp port + --db_repl_password string db repl password + --db_repl_use_ssl Set this flag to false to make the repl connection to not use ssl (default true) + --db_repl_user string db repl user userKey (default "vt_repl") + --db_server_name string server name of the DB we are connecting to. + --db_socket string The unix socket to connect on. If this is specified, host and port will not be used. + --db_ssl_ca string connection ssl ca + --db_ssl_ca_path string connection ssl ca path + --db_ssl_cert string connection ssl certificate + --db_ssl_key string connection ssl key + --db_ssl_mode SslMode SSL mode to connect with. One of disabled, preferred, required, verify_ca & verify_identity. + --db_tls_min_version string Configures the minimal TLS version negotiated when SSL is enabled. Defaults to TLSv1.2. Options: TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3. + --detach detached mode - run backups detached from the terminal + --disable-redo-log Disable InnoDB redo log during replication-from-primary phase of backup. + --emit_stats If set, emit stats to push-based monitoring and stats backends + --external-compressor string command with arguments to use when compressing a backup. + --external-compressor-extension string extension to use when using an external compressor. + --external-decompressor string command with arguments to use when decompressing a backup. + --file_backup_storage_root string Root directory for the file backup storage. + --gcs_backup_storage_bucket string Google Cloud Storage bucket to use for backups. + --gcs_backup_storage_root string Root prefix for all backup-related object names. + --grpc_auth_static_client_creds string When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server. + --grpc_compression string Which protocol to use for compressing gRPC. Default: nothing. Supported: snappy + --grpc_enable_tracing Enable gRPC tracing. + --grpc_initial_conn_window_size int gRPC initial connection window size + --grpc_initial_window_size int gRPC initial window size + --grpc_keepalive_time duration After a duration of this time, if the client doesn't see any activity, it pings the server to see if the transport is still alive. (default 10s) + --grpc_keepalive_timeout duration After having pinged for keepalive check, the client waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) + --grpc_max_message_size int Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'. (default 16777216) + --grpc_prometheus Enable gRPC monitoring with Prometheus. + -h, --help help for vtbackup + --incremental_from_pos string Position, or name of backup from which to create an incremental backup. Default: empty. If given, then this backup becomes an incremental backup from given position or given backup. If value is 'auto', this backup will be taken from the last successful backup position. + --init_db_name_override string (init parameter) override the name of the db used by vttablet + --init_db_sql_file string path to .sql file to run after mysql_install_db + --init_keyspace string (init parameter) keyspace to use for this tablet + --init_shard string (init parameter) shard to use for this tablet + --initial_backup Instead of restoring from backup, initialize an empty database with the provided init_db_sql_file and upload a backup of that for the shard, if the shard has no backups yet. This can be used to seed a brand new shard with an initial, empty backup. If any backups already exist for the shard, this will be considered a successful no-op. This can only be done before the shard exists in topology (i.e. before any tablets are deployed). + --keep-alive-timeout duration Wait until timeout elapses after a successful backup before shutting down. + --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --lock-timeout duration Maximum time for which a shard/keyspace lock can be acquired for (default 45s) + --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace + --log_dir string If non-empty, write log files in this directory + --log_err_stacks log stack traces for errors + --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) + --logtostderr log to standard error instead of files + --manifest-external-decompressor string command with arguments to store in the backup manifest when compressing a backup with an external compression engine. + --min_backup_interval duration Only take a new backup if it's been at least this long since the most recent backup. + --min_retention_count int Always keep at least this many of the most recent backups in this backup storage location, even if some are older than the min_retention_time. This must be at least 1 since a backup must always exist to allow new backups to be made (default 1) + --min_retention_time duration Keep each old backup for at least this long before removing it. Set to 0 to disable pruning of old backups. + --mycnf-file string path to my.cnf, if reading all config params from there + --mycnf_bin_log_path string mysql binlog path + --mycnf_data_dir string data directory for mysql + --mycnf_error_log_path string mysql error log path + --mycnf_general_log_path string mysql general log path + --mycnf_innodb_data_home_dir string Innodb data home directory + --mycnf_innodb_log_group_home_dir string Innodb log group home directory + --mycnf_master_info_file string mysql master.info file + --mycnf_mysql_port int port mysql is listening on + --mycnf_pid_file string mysql pid file + --mycnf_relay_log_index_path string mysql relay log index path + --mycnf_relay_log_info_path string mysql relay log info path + --mycnf_relay_log_path string mysql relay log path + --mycnf_secure_file_priv string mysql path for loading secure files + --mycnf_server_id int mysql server id of the server (if specified, mycnf-file will be ignored) + --mycnf_slow_log_path string mysql slow query log path + --mycnf_socket_file string mysql socket file + --mycnf_tmp_dir string mysql tmp directory + --mysql-shutdown-timeout duration how long to wait for mysqld shutdown (default 5m0s) + --mysql_port int mysql port (default 3306) + --mysql_server_version string MySQL server version to advertise. (default "8.0.30-Vitess") + --mysql_socket string path to the mysql socket + --mysql_timeout duration how long to wait for mysqld startup (default 5m0s) + --opentsdb_uri string URI of opentsdb /api/put method + --port int port for the server + --pprof strings enable profiling + --pprof-http enable pprof http endpoints + --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) + --remote_operation_timeout duration time to wait for a remote operation (default 15s) + --restart_before_backup Perform a mysqld clean/full restart after applying binlogs, but before taking the backup. Only makes sense to work around xtrabackup bugs. + --s3_backup_aws_endpoint string endpoint of the S3 backend (region must be provided). + --s3_backup_aws_region string AWS region to use. (default "us-east-1") + --s3_backup_aws_retries int AWS request retries. (default -1) + --s3_backup_force_path_style force the s3 path style. + --s3_backup_log_level string determine the S3 loglevel to use from LogOff, LogDebug, LogDebugWithSigning, LogDebugWithHTTPBody, LogDebugWithRequestRetries, LogDebugWithRequestErrors. (default "LogOff") + --s3_backup_server_side_encryption string server-side encryption algorithm (e.g., AES256, aws:kms, sse_c:/path/to/key/file). + --s3_backup_storage_bucket string S3 bucket to use for backups. + --s3_backup_storage_root string root prefix for all backup-related object names. + --s3_backup_tls_skip_verify_cert skip the 'certificate is valid' check for SSL connections. + --security_policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) + --sql-max-length-errors int truncate queries in error logs to the given length (default unlimited) + --sql-max-length-ui int truncate queries in debug UIs to the given length (default 512) (default 512) + --stats_backend string The name of the registered push-based monitoring/stats backend to use + --stats_combine_dimensions string List of dimensions to be combined into a single "all" value in exported stats vars + --stats_common_tags strings Comma-separated list of common tags for the stats backend. It provides both label and values. Example: label1:value1,label2:value2 + --stats_drop_variables string Variables to be dropped from the list of exported variables. + --stats_emit_period duration Interval between emitting stats to all registered backends (default 1m0s) + --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) + --tablet_manager_grpc_ca string the server ca to use to validate servers when connecting + --tablet_manager_grpc_cert string the cert to use to connect + --tablet_manager_grpc_concurrency int concurrency to use to talk to a vttablet server for performance-sensitive RPCs (like ExecuteFetchAs{Dba,App}, CheckThrottler and FullStatus) (default 8) + --tablet_manager_grpc_connpool_size int number of tablets to keep tmclient connections open to (default 100) + --tablet_manager_grpc_crl string the server crl to use to validate server certificates when connecting + --tablet_manager_grpc_key string the key to use to connect + --tablet_manager_grpc_server_name string the server name to use to validate server certificate + --tablet_manager_protocol string Protocol to use to make tabletmanager RPCs to vttablets. (default "grpc") + --topo_consul_lock_delay duration LockDelay for consul session. (default 15s) + --topo_consul_lock_session_checks string List of checks for consul session. (default "serfHealth") + --topo_consul_lock_session_ttl string TTL for consul session. + --topo_consul_watch_poll_duration duration time of the long poll for watch queries. (default 30s) + --topo_etcd_lease_ttl int Lease TTL for locks and leader election. The client will use KeepAlive to keep the lease going. (default 30) + --topo_etcd_tls_ca string path to the ca to use to validate the server cert when connecting to the etcd topo server + --topo_etcd_tls_cert string path to the client cert to use to connect to the etcd topo server, requires topo_etcd_tls_key, enables TLS + --topo_etcd_tls_key string path to the client key to use to connect to the etcd topo server, enables TLS + --topo_global_root string the path of the global topology data in the global topology server + --topo_global_server_address string the address of the global topology server + --topo_implementation string the topology implementation to use + --topo_zk_auth_file string auth to use when connecting to the zk topo server, file contents should be :, e.g., digest:user:pass + --topo_zk_base_timeout duration zk base timeout (see zk.Connect) (default 30s) + --topo_zk_max_concurrency int maximum number of pending requests to send to a Zookeeper server. (default 64) + --topo_zk_tls_ca string the server ca to use to validate servers when connecting to the zk topo server + --topo_zk_tls_cert string the cert to use to connect to the zk topo server, requires topo_zk_tls_key, enables TLS + --topo_zk_tls_key string the key to use to connect to the zk topo server, enables TLS + --upgrade-safe Whether to use innodb_fast_shutdown=0 for the backup so it is safe to use for MySQL upgrades. + --v Level log level for V logs + -v, --version print binary version + --vmodule vModuleFlag comma-separated list of pattern=N settings for file-filtered logging + --xbstream_restore_flags string Flags to pass to xbstream command during restore. These should be space separated and will be added to the end of the command. These need to match the ones used for backup e.g. --compress / --decompress, --encrypt / --decrypt + --xtrabackup_backup_flags string Flags to pass to backup command. These should be space separated and will be added to the end of the command + --xtrabackup_prepare_flags string Flags to pass to prepare command. These should be space separated and will be added to the end of the command + --xtrabackup_root_path string Directory location of the xtrabackup and xbstream executables, e.g., /usr/bin + --xtrabackup_stream_mode string Which mode to use if streaming, valid values are tar and xbstream. Please note that tar is not supported in XtraBackup 8.0 (default "tar") + --xtrabackup_stripe_block_size uint Size in bytes of each block that gets sent to a given stripe before rotating to the next stripe (default 102400) + --xtrabackup_stripes uint If greater than 0, use data striping across this many destination files to parallelize data transfer and decompression + --xtrabackup_user string User that xtrabackup will use to connect to the database server. This user must have all necessary privileges. For details, please refer to xtrabackup documentation. +``` + diff --git a/content/en/docs/21.0/reference/programs/vtclient/_index.md b/content/en/docs/21.0/reference/programs/vtclient/_index.md new file mode 100644 index 000000000..afa557e02 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtclient/_index.md @@ -0,0 +1,72 @@ +--- +title: vtclient +series: vtclient +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## vtclient + +vtclient connects to a vtgate server using the standard go driver API. + +### Synopsis + +vtclient connects to a vtgate server using the standard go driver API. + +For query bound variables, we assume place-holders in the query string +in the form of :v1, :v2, etc. + +``` +vtclient [flags] +``` + +### Examples + +``` +vtclient --server vtgate:15991 "SELECT * FROM messages" + +vtclient --server vtgate:15991 --target '@primary' --bind_variables '[ 12345, 1, "msg 12345" ]' "INSERT INTO messages (page,time_created_ns,message) VALUES (:v1, :v2, :v3)" +``` + +### Options + +``` + --alsologtostderr log to standard error as well as files + --bind_variables float bind variables as a json list (default null) + --config-file string Full path of the config file (with extension) to use. If set, --config-path, --config-type, and --config-name are ignored. + --config-file-not-found-handling ConfigFileNotFoundHandling Behavior when a config file is not found. (Options: error, exit, ignore, warn) (default warn) + --config-name string Name of the config file (without extension) to search for. (default "vtconfig") + --config-path strings Paths to search for config files in. (default []) + --config-persistence-min-interval duration minimum interval between persisting dynamic config changes back to disk (if no change has occurred, nothing is done). (default 1s) + --config-type string Config file type (omit to infer config type from file extension). + --count int DMLs only: Number of times each thread executes the query. Useful for simple, sustained load testing. (default 1) + --grpc_enable_tracing Enable gRPC tracing. + --grpc_max_message_size int Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'. (default 16777216) + --grpc_prometheus Enable gRPC monitoring with Prometheus. + -h, --help help for vtclient + --json Output JSON instead of human-readable table + --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace + --log_dir string If non-empty, write log files in this directory + --log_err_stacks log stack traces for errors + --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) + --logtostderr log to standard error instead of files + --max_sequence_id int max sequence ID. + --min_sequence_id int min sequence ID to generate. When max_sequence_id > min_sequence_id, for each query, a number is generated in [min_sequence_id, max_sequence_id) and attached to the end of the bind variables. + --mysql_server_version string MySQL server version to advertise. (default "8.0.30-Vitess") + --parallel int DMLs only: Number of threads executing the same query in parallel. Useful for simple load testing. (default 1) + --pprof strings enable profiling + --pprof-http enable pprof http endpoints + --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) + --qps int queries per second to throttle each thread at. + --security_policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) + --server string vtgate server to connect to + --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) + --streaming use a streaming query + --target string keyspace:shard@tablet_type + --timeout duration timeout for queries (default 30s) + --use_random_sequence use random sequence for generating [min_sequence_id, max_sequence_id) + --v Level log level for V logs + -v, --version print binary version + --vmodule vModuleFlag comma-separated list of pattern=N settings for file-filtered logging +``` + diff --git a/content/en/docs/21.0/reference/programs/vtcombo/_index.md b/content/en/docs/21.0/reference/programs/vtcombo/_index.md new file mode 100644 index 000000000..1c11946ef --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtcombo/_index.md @@ -0,0 +1,460 @@ +--- +title: vtcombo +series: vtcombo +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## vtcombo + +vtcombo is a single binary containing several vitess components. + +### Synopsis + +vtcombo is a single binary containing several vitess components. + +In particular, it contains: +- A topology server based on an in-memory map. +- One vtgate instance. +- Many vttablet instances. +- A vtctld instance so it's easy to see the topology. + +``` +vtcombo [flags] +``` + +### Options + +``` + --action_timeout duration time to wait for an action before resorting to force (default 1m0s) + --allow-kill-statement Allows the execution of kill statement + --allowed_tablet_types strings Specifies the tablet types this vtgate is allowed to route queries to. Should be provided as a comma-separated set of tablet types. + --alsologtostderr log to standard error as well as files + --app_idle_timeout duration Idle timeout for app connections (default 1m0s) + --app_pool_size int Size of the connection pool for app connections (default 40) + --backup_engine_implementation string Specifies which implementation to use for creating new backups (builtin or xtrabackup). Restores will always be done with whichever engine created a given backup. (default "builtin") + --backup_storage_block_size int if backup_storage_compress is true, backup_storage_block_size sets the byte size for each block while compressing (default is 250000). (default 250000) + --backup_storage_compress if set, the backup files will be compressed. (default true) + --backup_storage_number_blocks int if backup_storage_compress is true, backup_storage_number_blocks sets the number of blocks that can be processed, in parallel, before the writer blocks, during compression (default is 2). It should be equal to the number of CPUs available for compression. (default 2) + --bind-address string Bind address for the server. If empty, the server will listen on all available unicast and anycast IP addresses of the local system. + --binlog_host string PITR restore parameter: hostname/IP of binlog server. + --binlog_password string PITR restore parameter: password of binlog server. + --binlog_player_protocol string the protocol to download binlogs from a vttablet (default "grpc") + --binlog_port int PITR restore parameter: port of binlog server. + --binlog_ssl_ca string PITR restore parameter: Filename containing TLS CA certificate to verify binlog server TLS certificate against. + --binlog_ssl_cert string PITR restore parameter: Filename containing mTLS client certificate to present to binlog server as authentication. + --binlog_ssl_key string PITR restore parameter: Filename containing mTLS client private key for use in binlog server authentication. + --binlog_ssl_server_name string PITR restore parameter: TLS server name (common name) to verify against for the binlog server we are connecting to (If not set: use the hostname or IP supplied in --binlog_host). + --binlog_user string PITR restore parameter: username of binlog server. + --buffer_drain_concurrency int Maximum number of requests retried simultaneously. More concurrency will increase the load on the PRIMARY vttablet when draining the buffer. (default 1) + --buffer_keyspace_shards string If not empty, limit buffering to these entries (comma separated). Entry format: keyspace or keyspace/shard. Requires --enable_buffer=true. + --buffer_max_failover_duration duration Stop buffering completely if a failover takes longer than this duration. (default 20s) + --buffer_min_time_between_failovers duration Minimum time between the end of a failover and the start of the next one (tracked per shard). Faster consecutive failovers will not trigger buffering. (default 1m0s) + --buffer_size int Maximum number of buffered requests in flight (across all ongoing failovers). (default 1000) + --buffer_window duration Duration for how long a request should be buffered at most. (default 10s) + --builtinbackup-file-read-buffer-size uint read files using an IO buffer of this many bytes. Golang defaults are used when set to 0. + --builtinbackup-file-write-buffer-size uint write files using an IO buffer of this many bytes. Golang defaults are used when set to 0. (default 2097152) + --builtinbackup-incremental-restore-path string the directory where incremental restore files, namely binlog files, are extracted to. In k8s environments, this should be set to a directory that is shared between the vttablet and mysqld pods. The path should exist. When empty, the default OS temp dir is assumed. + --builtinbackup_mysqld_timeout duration how long to wait for mysqld to shutdown at the start of the backup. (default 10m0s) + --builtinbackup_progress duration how often to send progress updates when backing up large files. (default 5s) + --catch-sigpipe catch and ignore SIGPIPE on stdout and stderr if specified + --cell string cell to use + --compression-engine-name string compressor engine used for compression. (default "pargzip") + --compression-level int what level to pass to the compressor. (default 1) + --config-file string Full path of the config file (with extension) to use. If set, --config-path, --config-type, and --config-name are ignored. + --config-file-not-found-handling ConfigFileNotFoundHandling Behavior when a config file is not found. (Options: error, exit, ignore, warn) (default warn) + --config-name string Name of the config file (without extension) to search for. (default "vtconfig") + --config-path strings Paths to search for config files in. (default []) + --config-persistence-min-interval duration minimum interval between persisting dynamic config changes back to disk (if no change has occurred, nothing is done). (default 1s) + --config-type string Config file type (omit to infer config type from file extension). + --consolidator-stream-query-size int Configure the stream consolidator query size in bytes. Setting to 0 disables the stream consolidator. (default 2097152) + --consolidator-stream-total-size int Configure the stream consolidator total size in bytes. Setting to 0 disables the stream consolidator. (default 134217728) + --consul_auth_static_file string JSON File to read the topos/tokens from. + --datadog-agent-host string host to send spans to. if empty, no tracing will be done + --datadog-agent-port string port to send spans to. if empty, no tracing will be done + --db-credentials-file string db credentials file; send SIGHUP to reload this file + --db-credentials-server string db credentials server type ('file' - file implementation; 'vault' - HashiCorp Vault implementation) (default "file") + --db-credentials-vault-addr string URL to Vault server + --db-credentials-vault-path string Vault path to credentials JSON blob, e.g.: secret/data/prod/dbcreds + --db-credentials-vault-role-mountpoint string Vault AppRole mountpoint; can also be passed using VAULT_MOUNTPOINT environment variable (default "approle") + --db-credentials-vault-role-secretidfile string Path to file containing Vault AppRole secret_id; can also be passed using VAULT_SECRETID environment variable + --db-credentials-vault-roleid string Vault AppRole id; can also be passed using VAULT_ROLEID environment variable + --db-credentials-vault-timeout duration Timeout for vault API operations (default 10s) + --db-credentials-vault-tls-ca string Path to CA PEM for validating Vault server certificate + --db-credentials-vault-tokenfile string Path to file containing Vault auth token; token can also be passed using VAULT_TOKEN environment variable + --db-credentials-vault-ttl duration How long to cache DB credentials from the Vault server (default 30m0s) + --db_allprivs_password string db allprivs password + --db_allprivs_use_ssl Set this flag to false to make the allprivs connection to not use ssl (default true) + --db_allprivs_user string db allprivs user userKey (default "vt_allprivs") + --db_app_password string db app password + --db_app_use_ssl Set this flag to false to make the app connection to not use ssl (default true) + --db_app_user string db app user userKey (default "vt_app") + --db_appdebug_password string db appdebug password + --db_appdebug_use_ssl Set this flag to false to make the appdebug connection to not use ssl (default true) + --db_appdebug_user string db appdebug user userKey (default "vt_appdebug") + --db_charset string Character set used for this tablet. (default "utf8mb4") + --db_conn_query_info enable parsing and processing of QUERY_OK info fields + --db_connect_timeout_ms int connection timeout to mysqld in milliseconds (0 for no timeout) + --db_dba_password string db dba password + --db_dba_use_ssl Set this flag to false to make the dba connection to not use ssl (default true) + --db_dba_user string db dba user userKey (default "vt_dba") + --db_erepl_password string db erepl password + --db_erepl_use_ssl Set this flag to false to make the erepl connection to not use ssl (default true) + --db_erepl_user string db erepl user userKey (default "vt_erepl") + --db_filtered_password string db filtered password + --db_filtered_use_ssl Set this flag to false to make the filtered connection to not use ssl (default true) + --db_filtered_user string db filtered user userKey (default "vt_filtered") + --db_flags uint Flag values as defined by MySQL. + --db_flavor string Flavor overrid. Valid value is FilePos. + --db_host string The host name for the tcp connection. + --db_port int tcp port + --db_repl_password string db repl password + --db_repl_use_ssl Set this flag to false to make the repl connection to not use ssl (default true) + --db_repl_user string db repl user userKey (default "vt_repl") + --db_server_name string server name of the DB we are connecting to. + --db_socket string The unix socket to connect on. If this is specified, host and port will not be used. + --db_ssl_ca string connection ssl ca + --db_ssl_ca_path string connection ssl ca path + --db_ssl_cert string connection ssl certificate + --db_ssl_key string connection ssl key + --db_ssl_mode SslMode SSL mode to connect with. One of disabled, preferred, required, verify_ca & verify_identity. + --db_tls_min_version string Configures the minimal TLS version negotiated when SSL is enabled. Defaults to TLSv1.2. Options: TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3. + --dba_idle_timeout duration Idle timeout for dba connections (default 1m0s) + --dba_pool_size int Size of the connection pool for dba connections (default 20) + --dbddl_plugin string controls how to handle CREATE/DROP DATABASE. use it if you are using your own database provisioning service (default "fail") + --ddl_strategy string Set default strategy for DDL statements. Override with @@ddl_strategy session variable (default "direct") + --default_tablet_type topodatapb.TabletType The default tablet type to set for queries, when one is not explicitly selected. (default PRIMARY) + --degraded_threshold duration replication lag after which a replica is considered degraded (default 30s) + --emit_stats If set, emit stats to push-based monitoring and stats backends + --enable-consolidator Synonym to -enable_consolidator (default true) + --enable-consolidator-replicas Synonym to -enable_consolidator_replicas + --enable-partial-keyspace-migration (Experimental) Follow shard routing rules: enable only while migrating a keyspace shard by shard. See documentation on Partial MoveTables for more. (default false) + --enable-per-workload-table-metrics If true, query counts and query error metrics include a label that identifies the workload + --enable-tx-throttler Synonym to -enable_tx_throttler + --enable-views Enable views support in vtgate. + --enable_buffer Enable buffering (stalling) of primary traffic during failovers. + --enable_buffer_dry_run Detect and log failover events, but do not actually buffer requests. + --enable_consolidator This option enables the query consolidator. (default true) + --enable_consolidator_replicas This option enables the query consolidator only on replicas. + --enable_direct_ddl Allow users to submit direct DDL statements (default true) + --enable_hot_row_protection If true, incoming transactions for the same row (range) will be queued and cannot consume all txpool slots. + --enable_hot_row_protection_dry_run If true, hot row protection is not enforced but logs if transactions would have been queued. + --enable_online_ddl Allow users to submit, review and control Online DDL (default true) + --enable_replication_reporter Use polling to track replication lag. + --enable_set_var This will enable the use of MySQL's SET_VAR query hint for certain system variables instead of using reserved connections (default true) + --enable_system_settings This will enable the system settings to be changed per session at the database connection level (default true) + --enable_transaction_limit If true, limit on number of transactions open at the same time will be enforced for all users. User trying to open a new transaction after exhausting their limit will receive an error immediately, regardless of whether there are available slots or not. + --enable_transaction_limit_dry_run If true, limit on number of transactions open at the same time will be tracked for all users, but not enforced. + --enable_tx_throttler If true replication-lag-based throttling on transactions will be enabled. + --enforce_strict_trans_tables If true, vttablet requires MySQL to run with STRICT_TRANS_TABLES or STRICT_ALL_TABLES on. It is recommended to not turn this flag off. Otherwise MySQL may alter your supplied values before saving them to the database. (default true) + --external-compressor string command with arguments to use when compressing a backup. + --external-compressor-extension string extension to use when using an external compressor. + --external-decompressor string command with arguments to use when decompressing a backup. + --external_topo_server Should vtcombo use an external topology server instead of starting its own in-memory topology server. If true, vtcombo will use the flags defined in topo/server.go to open topo server + --foreign_key_mode string This is to provide how to handle foreign key constraint in create/alter table. Valid values are: allow, disallow (default "allow") + --gate_query_cache_memory int gate server query cache size in bytes, maximum amount of memory to be cached. vtgate analyzes every incoming query and generate a query plan, these plans are being cached in a lru cache. This config controls the capacity of the lru cache. (default 33554432) + --gc_check_interval duration Interval between garbage collection checks (default 1h0m0s) + --gc_purge_check_interval duration Interval between purge discovery checks (default 1m0s) + --gh-ost-path string override default gh-ost binary full path + --grpc-send-session-in-streaming If set, will send the session as last packet in streaming api to support transactions in streaming + --grpc-use-effective-groups If set, and SSL is not used, will set the immediate caller's security groups from the effective caller id's groups. + --grpc-use-static-authentication-callerid If set, will set the immediate caller id to the username authenticated by the static auth plugin. + --grpc_auth_mode string Which auth plugin implementation to use (eg: static) + --grpc_auth_mtls_allowed_substrings string List of substrings of at least one of the client certificate names (separated by colon). + --grpc_auth_static_password_file string JSON File to read the users/passwords from. + --grpc_bind_address string Bind address for gRPC calls. If empty, listen on all addresses. + --grpc_ca string server CA to use for gRPC connections, requires TLS, and enforces client certificate check + --grpc_cert string server certificate to use for gRPC connections, requires grpc_key, enables TLS + --grpc_crl string path to a certificate revocation list in PEM format, client certificates will be further verified against this file during TLS handshake + --grpc_enable_optional_tls enable optional TLS mode when a server accepts both TLS and plain-text connections on the same port + --grpc_enable_tracing Enable gRPC tracing. + --grpc_key string server private key to use for gRPC connections, requires grpc_cert, enables TLS + --grpc_max_connection_age duration Maximum age of a client connection before GoAway is sent. (default 2562047h47m16.854775807s) + --grpc_max_connection_age_grace duration Additional grace period after grpc_max_connection_age, after which connections are forcibly closed. (default 2562047h47m16.854775807s) + --grpc_max_message_size int Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'. (default 16777216) + --grpc_port int Port to listen on for gRPC calls. If zero, do not listen. + --grpc_prometheus Enable gRPC monitoring with Prometheus. + --grpc_server_ca string path to server CA in PEM format, which will be combine with server cert, return full certificate chain to clients + --grpc_server_initial_conn_window_size int gRPC server initial connection window size + --grpc_server_initial_window_size int gRPC server initial window size + --grpc_server_keepalive_enforcement_policy_min_time duration gRPC server minimum keepalive time (default 10s) + --grpc_server_keepalive_enforcement_policy_permit_without_stream gRPC server permit client keepalive pings even when there are no active streams (RPCs) + --grpc_server_keepalive_time duration After a duration of this time, if the server doesn't see any activity, it pings the client to see if the transport is still alive. (default 10s) + --grpc_server_keepalive_timeout duration After having pinged for keepalive check, the server waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) + --grpc_use_effective_callerid If set, and SSL is not used, will set the immediate caller id from the effective caller id's principal. + --health_check_interval duration Interval between health checks (default 20s) + --healthcheck-dial-concurrency int Maximum concurrency of new healthcheck connections. This should be less than the golang max thread limit of 10000. (default 1024) + --healthcheck_retry_delay duration health check retry delay (default 2ms) + --healthcheck_timeout duration the health check timeout period (default 1m0s) + --heartbeat_enable If true, vttablet records (if master) or checks (if replica) the current time of a replication heartbeat in the sidecar database's heartbeat table. The result is used to inform the serving state of the vttablet via healthchecks. + --heartbeat_interval duration How frequently to read and write replication heartbeat. (default 1s) + --heartbeat_on_demand_duration duration If non-zero, heartbeats are only written upon consumer request, and only run for up to given duration following the request. Frequent requests can keep the heartbeat running consistently; when requests are infrequent heartbeat may completely stop between requests + -h, --help help for vtcombo + --hot_row_protection_concurrent_transactions int Number of concurrent transactions let through to the txpool/MySQL for the same hot row. Should be > 1 to have enough 'ready' transactions in MySQL and benefit from a pipelining effect. (default 5) + --hot_row_protection_max_global_queue_size int Global queue limit across all row (ranges). Useful to prevent that the queue can grow unbounded. (default 1000) + --hot_row_protection_max_queue_size int Maximum number of BeginExecute RPCs which will be queued for the same row (range). (default 20) + --init_db_name_override string (init parameter) override the name of the db used by vttablet. Without this flag, the db name defaults to vt_ + --init_keyspace string (init parameter) keyspace to use for this tablet + --init_shard string (init parameter) shard to use for this tablet + --init_tablet_type string (init parameter) the tablet type to use for this tablet. + --init_tags StringMap (init parameter) comma separated list of key:value pairs used to tag the tablet + --init_timeout duration (init parameter) timeout to use for the init phase. (default 1m0s) + --jaeger-agent-host string host and port to send spans to. if empty, no tracing will be done + --json_topo vttest.TopoData vttest proto definition of the topology, encoded in json format. See vttest.proto for more information. + --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --keyspaces_to_watch strings Specifies which keyspaces this vtgate should have access to while routing queries or accessing the vschema. + --lameduck-period duration keep running at least this long after SIGTERM before stopping (default 50ms) + --lock-timeout duration Maximum time for which a shard/keyspace lock can be acquired for (default 45s) + --lock_heartbeat_time duration If there is lock function used. This will keep the lock connection active by using this heartbeat (default 5s) + --lock_tables_timeout duration How long to keep the table locked before timing out (default 1m0s) + --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace + --log_dir string If non-empty, write log files in this directory + --log_err_stacks log stack traces for errors + --log_queries_to_file string Enable query logging to the specified file + --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) + --logtostderr log to standard error instead of files + --manifest-external-decompressor string command with arguments to store in the backup manifest when compressing a backup with an external compression engine. + --max-stack-size int configure the maximum stack size in bytes (default 67108864) + --max_concurrent_online_ddl int Maximum number of online DDL changes that may run concurrently (default 256) + --max_memory_rows int Maximum number of rows that will be held in memory for intermediate results as well as the final result. (default 300000) + --max_payload_size int The threshold for query payloads in bytes. A payload greater than this threshold will result in a failure to handle the query. + --message_stream_grace_period duration the amount of time to give for a vttablet to resume if it ends a message stream, usually because of a reparent. (default 30s) + --migration_check_interval duration Interval between migration checks (default 1m0s) + --mycnf-file string path to my.cnf, if reading all config params from there + --mycnf_bin_log_path string mysql binlog path + --mycnf_data_dir string data directory for mysql + --mycnf_error_log_path string mysql error log path + --mycnf_general_log_path string mysql general log path + --mycnf_innodb_data_home_dir string Innodb data home directory + --mycnf_innodb_log_group_home_dir string Innodb log group home directory + --mycnf_master_info_file string mysql master.info file + --mycnf_mysql_port int port mysql is listening on + --mycnf_pid_file string mysql pid file + --mycnf_relay_log_index_path string mysql relay log index path + --mycnf_relay_log_info_path string mysql relay log info path + --mycnf_relay_log_path string mysql relay log path + --mycnf_secure_file_priv string mysql path for loading secure files + --mycnf_server_id int mysql server id of the server (if specified, mycnf-file will be ignored) + --mycnf_slow_log_path string mysql slow query log path + --mycnf_socket_file string mysql socket file + --mycnf_tmp_dir string mysql tmp directory + --mysql-server-keepalive-period duration TCP period between keep-alives + --mysql-server-pool-conn-read-buffers If set, the server will pool incoming connection read buffers + --mysql-shutdown-timeout duration timeout to use when MySQL is being shut down. (default 5m0s) + --mysql_allow_clear_text_without_tls If set, the server will allow the use of a clear text password over non-SSL connections. + --mysql_auth_server_impl string Which auth server implementation to use. Options: none, ldap, clientcert, static, vault. (default "static") + --mysql_default_workload string Default session workload (OLTP, OLAP, DBA) (default "OLTP") + --mysql_port int mysql port (default 3306) + --mysql_server_bind_address string Binds on this address when listening to MySQL binary protocol. Useful to restrict listening to 'localhost' only for instance. + --mysql_server_flush_delay duration Delay after which buffered response will be flushed to the client. (default 100ms) + --mysql_server_port int If set, also listen for MySQL binary protocol connections on this port. (default -1) + --mysql_server_query_timeout duration mysql query timeout + --mysql_server_read_timeout duration connection read timeout + --mysql_server_require_secure_transport Reject insecure connections but only if mysql_server_ssl_cert and mysql_server_ssl_key are provided + --mysql_server_socket_path string This option specifies the Unix socket file to use when listening for local connections. By default it will be empty and it won't listen to a unix socket + --mysql_server_ssl_ca string Path to ssl CA for mysql server plugin SSL. If specified, server will require and validate client certs. + --mysql_server_ssl_cert string Path to the ssl cert for mysql server plugin SSL + --mysql_server_ssl_crl string Path to ssl CRL for mysql server plugin SSL + --mysql_server_ssl_key string Path to ssl key for mysql server plugin SSL + --mysql_server_ssl_server_ca string path to server CA in PEM format, which will be combine with server cert, return full certificate chain to clients + --mysql_server_tls_min_version string Configures the minimal TLS version negotiated when SSL is enabled. Defaults to TLSv1.2. Options: TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3. + --mysql_server_version string MySQL server version to advertise. (default "8.0.30-Vitess") + --mysql_server_write_timeout duration connection write timeout + --mysql_slow_connect_warn_threshold duration Warn if it takes more than the given threshold for a mysql connection to establish + --mysql_tcp_version string Select tcp, tcp4, or tcp6 to control the socket type. (default "tcp") + --mysqlctl_mycnf_template string template file to use for generating the my.cnf file during server init + --mysqlctl_socket string socket file to use for remote mysqlctl actions (empty for local actions) + --no_scatter when set to true, the planner will fail instead of producing a plan that includes scatter queries + --normalize_queries Rewrite queries with bind vars. Turn this off if the app itself sends normalized queries with bind vars. (default true) + --onclose_timeout duration wait no more than this for OnClose handlers before stopping (default 10s) + --onterm_timeout duration wait no more than this for OnTermSync handlers before stopping (default 10s) + --pid_file string If set, the process will write its pid to the named file, and delete it on graceful shutdown. + --pitr_gtid_lookup_timeout duration PITR restore parameter: timeout for fetching gtid from timestamp. (default 1m0s) + --planner-version string Sets the default planner to use when the session has not changed it. Valid values are: Gen4, Gen4Greedy, Gen4Left2Right + --pool_hostname_resolve_interval duration if set force an update to all hostnames and reconnect if changed, defaults to 0 (disabled) + --port int port for the server + --pprof strings enable profiling + --pprof-http enable pprof http endpoints + --proto_topo vttest.TopoData vttest proto definition of the topology, encoded in compact text format. See vttest.proto for more information. + --proxy_protocol Enable HAProxy PROXY protocol on MySQL listener socket + --proxy_tablets Setting this true will make vtctld proxy the tablet status instead of redirecting to them + --pt-osc-path string override default pt-online-schema-change binary full path + --publish_retry_interval duration how long vttablet waits to retry publishing the tablet record (default 30s) + --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) + --query-log-stream-handler string URL handler for streaming queries log (default "/debug/querylog") + --query-timeout int Sets the default query timeout (in ms). Can be overridden by session variable (query_timeout) or comment directive (QUERY_TIMEOUT_MS) + --querylog-buffer-size int Maximum number of buffered query logs before throttling log output (default 10) + --querylog-filter-tag string string that must be present in the query for it to be logged; if using a value as the tag, you need to disable query normalization + --querylog-format string format for query logs ("text" or "json") (default "text") + --querylog-row-threshold uint Number of rows a query has to return or affect before being logged; not useful for streaming queries. 0 means all queries will be logged. + --queryserver-config-acl-exempt-acl string an acl that exempt from table acl checking (this acl is free to access any vitess tables). + --queryserver-config-annotate-queries prefix queries to MySQL backend with comment indicating vtgate principal (user) and target tablet type + --queryserver-config-enable-table-acl-dry-run If this flag is enabled, tabletserver will emit monitoring metrics and let the request pass regardless of table acl check results + --queryserver-config-idle-timeout duration query server idle timeout, vttablet manages various mysql connection pools. This config means if a connection has not been used in given idle timeout, this connection will be removed from pool. This effectively manages number of connection objects and optimize the pool performance. (default 30m0s) + --queryserver-config-max-result-size int query server max result size, maximum number of rows allowed to return from vttablet for non-streaming queries. (default 10000) + --queryserver-config-message-postpone-cap int query server message postpone cap is the maximum number of messages that can be postponed at any given time. Set this number to substantially lower than transaction cap, so that the transaction pool isn't exhausted by the message subsystem. (default 4) + --queryserver-config-olap-transaction-timeout duration query server transaction timeout (in seconds), after which a transaction in an OLAP session will be killed (default 30s) + --queryserver-config-passthrough-dmls query server pass through all dml statements without rewriting + --queryserver-config-pool-conn-max-lifetime duration query server connection max lifetime, vttablet manages various mysql connection pools. This config means if a connection has lived at least this long, it connection will be removed from pool upon the next time it is returned to the pool. + --queryserver-config-pool-size int query server read pool size, connection pool is used by regular queries (non streaming, not in a transaction) (default 16) + --queryserver-config-query-cache-memory int query server query cache size in bytes, maximum amount of memory to be used for caching. vttablet analyzes every incoming query and generate a query plan, these plans are being cached in a lru cache. This config controls the capacity of the lru cache. (default 33554432) + --queryserver-config-query-pool-timeout duration query server query pool timeout, it is how long vttablet waits for a connection from the query pool. If set to 0 (default) then the overall query timeout is used instead. + --queryserver-config-query-timeout duration query server query timeout, this is the query timeout in vttablet side. If a query takes more than this timeout, it will be killed. (default 30s) + --queryserver-config-schema-change-signal query server schema signal, will signal connected vtgates that schema has changed whenever this is detected. VTGates will need to have -schema_change_signal enabled for this to work (default true) + --queryserver-config-schema-reload-time duration query server schema reload time, how often vttablet reloads schemas from underlying MySQL instance. vttablet keeps table schemas in its own memory and periodically refreshes it from MySQL. This config controls the reload time. (default 30m0s) + --queryserver-config-stream-buffer-size int query server stream buffer size, the maximum number of bytes sent from vttablet for each stream call. It's recommended to keep this value in sync with vtgate's stream_buffer_size. (default 32768) + --queryserver-config-stream-pool-size int query server stream connection pool size, stream pool is used by stream queries: queries that return results to client in a streaming fashion (default 200) + --queryserver-config-stream-pool-timeout duration query server stream pool timeout, it is how long vttablet waits for a connection from the stream pool. If set to 0 (default) then there is no timeout. + --queryserver-config-strict-table-acl only allow queries that pass table acl checks + --queryserver-config-terse-errors prevent bind vars from escaping in client error messages + --queryserver-config-transaction-cap int query server transaction cap is the maximum number of transactions allowed to happen at any given point of a time for a single vttablet. E.g. by setting transaction cap to 100, there are at most 100 transactions will be processed by a vttablet and the 101th transaction will be blocked (and fail if it cannot get connection within specified timeout) (default 20) + --queryserver-config-transaction-timeout duration query server transaction timeout, a transaction will be killed if it takes longer than this value (default 30s) + --queryserver-config-truncate-error-len int truncate errors sent to client if they are longer than this value (0 means do not truncate) + --queryserver-config-txpool-timeout duration query server transaction pool timeout, it is how long vttablet waits if tx pool is full (default 1s) + --queryserver-config-warn-result-size int query server result size warning threshold, warn if number of rows returned from vttablet for non-streaming queries exceeds this + --queryserver-enable-settings-pool Enable pooling of connections with modified system settings (default true) + --queryserver-enable-views Enable views support in vttablet. + --queryserver_enable_online_ddl Enable online DDL. (default true) + --redact-debug-ui-queries redact full queries and bind variables from debug UI + --relay_log_max_items int Maximum number of rows for VReplication target buffering. (default 5000) + --relay_log_max_size int Maximum buffer size (in bytes) for VReplication target buffering. If single rows are larger than this, a single row is buffered at a time. (default 250000) + --remote_operation_timeout duration time to wait for a remote operation (default 15s) + --replication_connect_retry duration how long to wait in between replica reconnect attempts. Only precise to the second. (default 10s) + --restore-to-pos string (init incremental restore parameter) if set, run a point in time recovery that ends with the given position. This will attempt to use one full backup followed by zero or more incremental backups + --restore-to-timestamp string (init incremental restore parameter) if set, run a point in time recovery that restores up to the given timestamp, if possible. Given timestamp in RFC3339 format. Example: '2006-01-02T15:04:05Z07:00' + --restore_concurrency int (init restore parameter) how many concurrent files to restore at once (default 4) + --restore_from_backup (init restore parameter) will check BackupStorage for a recent backup at startup and start there + --restore_from_backup_ts string (init restore parameter) if set, restore the latest backup taken at or before this timestamp. Example: '2021-04-29.133050' + --retain_online_ddl_tables duration How long should vttablet keep an old migrated table before purging it (default 24h0m0s) + --sanitize_log_messages Remove potentially sensitive information in tablet INFO, WARNING, and ERROR log messages such as query parameters. + --schema-change-reload-timeout duration query server schema change reload timeout, this is how long to wait for the signaled schema reload operation to complete before giving up (default 30s) + --schema-version-max-age-seconds int max age of schema version records to kept in memory by the vreplication historian + --schema_change_signal Enable the schema tracker; requires queryserver-config-schema-change-signal to be enabled on the underlying vttablets for this to work (default true) + --schema_dir string Schema base directory. Should contain one directory per keyspace, with a vschema.json file if necessary. + --security_policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) + --service_map strings comma separated list of services to enable (or disable if prefixed with '-') Example: grpc-queryservice + --serving_state_grace_period duration how long to pause after broadcasting health to vtgate, before enforcing a new serving state + --shard_sync_retry_delay duration delay between retries of updates to keep the tablet and its shard record in sync (default 30s) + --shutdown_grace_period duration how long to wait for queries and transactions to complete during graceful shutdown. (default 3s) + --sql-max-length-errors int truncate queries in error logs to the given length (default unlimited) + --sql-max-length-ui int truncate queries in debug UIs to the given length (default 512) (default 512) + --srv_topo_cache_refresh duration how frequently to refresh the topology for cached entries (default 1s) + --srv_topo_cache_ttl duration how long to use cached entries for topology (default 1s) + --srv_topo_timeout duration topo server timeout (default 5s) + --start_mysql Should vtcombo also start mysql + --stats_backend string The name of the registered push-based monitoring/stats backend to use + --stats_combine_dimensions string List of dimensions to be combined into a single "all" value in exported stats vars + --stats_common_tags strings Comma-separated list of common tags for the stats backend. It provides both label and values. Example: label1:value1,label2:value2 + --stats_drop_variables string Variables to be dropped from the list of exported variables. + --stats_emit_period duration Interval between emitting stats to all registered backends (default 1m0s) + --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) + --stream_buffer_size int the number of bytes sent from vtgate for each stream call. It's recommended to keep this value in sync with vttablet's query-server-config-stream-buffer-size. (default 32768) + --stream_health_buffer_size uint max streaming health entries to buffer per streaming health client (default 20) + --table-refresh-interval int interval in milliseconds to refresh tables in status page with refreshRequired class + --table_gc_lifecycle string States for a DROP TABLE garbage collection cycle. Default is 'hold,purge,evac,drop', use any subset ('drop' implicitly always included) (default "hold,purge,evac,drop") + --tablet_dir string The directory within the vtdataroot to store vttablet/mysql files. Defaults to being generated by the tablet uid. + --tablet_filters strings Specifies a comma-separated list of 'keyspace|shard_name or keyrange' values to filter the tablets to watch. + --tablet_health_keep_alive duration close streaming tablet health connection if there are no requests for this long (default 5m0s) + --tablet_hostname string if not empty, this hostname will be assumed instead of trying to resolve it + --tablet_manager_grpc_ca string the server ca to use to validate servers when connecting + --tablet_manager_grpc_cert string the cert to use to connect + --tablet_manager_grpc_concurrency int concurrency to use to talk to a vttablet server for performance-sensitive RPCs (like ExecuteFetchAs{Dba,App}, CheckThrottler and FullStatus) (default 8) + --tablet_manager_grpc_connpool_size int number of tablets to keep tmclient connections open to (default 100) + --tablet_manager_grpc_crl string the server crl to use to validate server certificates when connecting + --tablet_manager_grpc_key string the key to use to connect + --tablet_manager_grpc_server_name string the server name to use to validate server certificate + --tablet_manager_protocol string Protocol to use to make tabletmanager RPCs to vttablets. (default "grpc") + --tablet_refresh_interval duration Tablet refresh interval. (default 1m0s) + --tablet_refresh_known_tablets Whether to reload the tablet's address/port map from topo in case they change. (default true) + --tablet_types_to_wait strings Wait till connected for specified tablet types during Gateway initialization. Should be provided as a comma-separated set of tablet types. + --tablet_url_template string Format string describing debug tablet url formatting. See getTabletDebugURL() for how to customize this. (default "http://{{.GetTabletHostPort}}") + --throttle_tablet_types string Comma separated VTTablet types to be considered by the throttler. default: 'replica'. example: 'replica,rdonly'. 'replica' always implicitly included (default "replica") + --topo_consul_lock_delay duration LockDelay for consul session. (default 15s) + --topo_consul_lock_session_checks string List of checks for consul session. (default "serfHealth") + --topo_consul_lock_session_ttl string TTL for consul session. + --topo_consul_watch_poll_duration duration time of the long poll for watch queries. (default 30s) + --topo_etcd_lease_ttl int Lease TTL for locks and leader election. The client will use KeepAlive to keep the lease going. (default 30) + --topo_etcd_tls_ca string path to the ca to use to validate the server cert when connecting to the etcd topo server + --topo_etcd_tls_cert string path to the client cert to use to connect to the etcd topo server, requires topo_etcd_tls_key, enables TLS + --topo_etcd_tls_key string path to the client key to use to connect to the etcd topo server, enables TLS + --topo_global_root string the path of the global topology data in the global topology server + --topo_global_server_address string the address of the global topology server + --topo_implementation string the topology implementation to use + --topo_read_concurrency int Concurrency of topo reads. (default 32) + --topo_zk_auth_file string auth to use when connecting to the zk topo server, file contents should be :, e.g., digest:user:pass + --topo_zk_base_timeout duration zk base timeout (see zk.Connect) (default 30s) + --topo_zk_max_concurrency int maximum number of pending requests to send to a Zookeeper server. (default 64) + --topo_zk_tls_ca string the server ca to use to validate servers when connecting to the zk topo server + --topo_zk_tls_cert string the cert to use to connect to the zk topo server, requires topo_zk_tls_key, enables TLS + --topo_zk_tls_key string the key to use to connect to the zk topo server, enables TLS + --tracer string tracing service to use (default "noop") + --tracing-enable-logging whether to enable logging in the tracing service + --tracing-sampling-rate float sampling rate for the probabilistic jaeger sampler (default 0.1) + --tracing-sampling-type string sampling strategy to use for jaeger. possible values are 'const', 'probabilistic', 'rateLimiting', or 'remote' (default "const") + --track_schema_versions When enabled, vttablet will store versions of schemas at each position that a DDL is applied and allow retrieval of the schema corresponding to a position + --transaction-log-stream-handler string URL handler for streaming transactions log (default "/debug/txlog") + --transaction_limit_by_component Include CallerID.component when considering who the user is for the purpose of transaction limit. + --transaction_limit_by_principal Include CallerID.principal when considering who the user is for the purpose of transaction limit. (default true) + --transaction_limit_by_subcomponent Include CallerID.subcomponent when considering who the user is for the purpose of transaction limit. + --transaction_limit_by_username Include VTGateCallerID.username when considering who the user is for the purpose of transaction limit. (default true) + --transaction_limit_per_user float Maximum number of transactions a single user is allowed to use at any time, represented as fraction of -transaction_cap. (default 0.4) + --transaction_mode string SINGLE: disallow multi-db transactions, MULTI: allow multi-db transactions with best effort commit, TWOPC: allow multi-db transactions with 2pc commit (default "MULTI") + --truncate-error-len int truncate errors sent to client if they are longer than this value (0 means do not truncate) + --twopc_abandon_age float time in seconds. Any unresolved transaction older than this time will be sent to the coordinator to be resolved. + --twopc_coordinator_address string address of the (VTGate) process(es) that will be used to notify of abandoned transactions. + --twopc_enable if the flag is on, 2pc is enabled. Other 2pc flags must be supplied. + --tx-throttler-config string Synonym to -tx_throttler_config (default "target_replication_lag_sec:2 max_replication_lag_sec:10 initial_rate:100 max_increase:1 emergency_decrease:0.5 min_duration_between_increases_sec:40 max_duration_between_increases_sec:62 min_duration_between_decreases_sec:20 spread_backlog_across_sec:20 age_bad_rate_after_sec:180 bad_rate_increase:0.1 max_rate_approach_threshold:0.9") + --tx-throttler-default-priority int Default priority assigned to queries that lack priority information (default 100) + --tx-throttler-dry-run If present, the transaction throttler only records metrics about requests received and throttled, but does not actually throttle any requests. + --tx-throttler-healthcheck-cells strings Synonym to -tx_throttler_healthcheck_cells + --tx-throttler-tablet-types strings A comma-separated list of tablet types. Only tablets of this type are monitored for replication lag by the transaction throttler. Supported types are replica and/or rdonly. (default replica) + --tx-throttler-topo-refresh-interval duration The rate that the transaction throttler will refresh the topology to find cells. (default 5m0s) + --tx_throttler_config string The configuration of the transaction throttler as a text-formatted throttlerdata.Configuration protocol buffer message. (default "target_replication_lag_sec:2 max_replication_lag_sec:10 initial_rate:100 max_increase:1 emergency_decrease:0.5 min_duration_between_increases_sec:40 max_duration_between_increases_sec:62 min_duration_between_decreases_sec:20 spread_backlog_across_sec:20 age_bad_rate_after_sec:180 bad_rate_increase:0.1 max_rate_approach_threshold:0.9") + --tx_throttler_healthcheck_cells strings A comma-separated list of cells. Only tabletservers running in these cells will be monitored for replication lag by the transaction throttler. + --unhealthy_threshold duration replication lag after which a replica is considered unhealthy (default 2h0m0s) + --unmanaged Indicates an unmanaged tablet, i.e. using an external mysql-compatible database + --v Level log level for V logs + -v, --version print binary version + --vmodule vModuleFlag comma-separated list of pattern=N settings for file-filtered logging + --vreplication-parallel-insert-workers int Number of parallel insertion workers to use during copy phase. Set <= 1 to disable parallelism, or > 1 to enable concurrent insertion during copy phase. (default 1) + --vreplication_copy_phase_duration duration Duration for each copy phase loop (before running the next catchup: default 1h) (default 1h0m0s) + --vreplication_copy_phase_max_innodb_history_list_length int The maximum InnoDB transaction history that can exist on a vstreamer (source) before starting another round of copying rows. This helps to limit the impact on the source tablet. (default 1000000) + --vreplication_copy_phase_max_mysql_replication_lag int The maximum MySQL replication lag (in seconds) that can exist on a vstreamer (source) before starting another round of copying rows. This helps to limit the impact on the source tablet. (default 43200) + --vreplication_experimental_flags int (Bitmask) of experimental features in vreplication to enable (default 3) + --vreplication_heartbeat_update_interval int Frequency (in seconds, default 1, max 60) at which the time_updated column of a vreplication stream when idling (default 1) + --vreplication_max_time_to_retry_on_error duration stop automatically retrying when we've had consecutive failures with the same error for this long after the first occurrence + --vreplication_net_read_timeout int Session value of net_read_timeout for vreplication, in seconds (default 300) + --vreplication_net_write_timeout int Session value of net_write_timeout for vreplication, in seconds (default 600) + --vreplication_replica_lag_tolerance duration Replica lag threshold duration: once lag is below this we switch from copy phase to the replication (streaming) phase (default 1m0s) + --vreplication_retry_delay duration delay before retrying a failed workflow event in the replication phase (default 5s) + --vreplication_store_compressed_gtid Store compressed gtids in the pos column of the sidecar database's vreplication table + --vschema-persistence-dir string If set, per-keyspace vschema will be persisted in this directory and reloaded into the in-memory topology server across restarts. Bookkeeping is performed using a simple watcher goroutine. This is useful when running vtcombo as an application development container (e.g. vttestserver) where you want to keep the same vschema even if developer's machine reboots. This works in tandem with vttestserver's --persistent_mode flag. Needless to say, this is neither a perfect nor a production solution for vschema persistence. Consider using the --external_topo_server flag if you require a more complete solution. This flag is ignored if --external_topo_server is set. + --vschema_ddl_authorized_users string List of users authorized to execute vschema ddl operations, or '%' to allow all users. + --vstream-binlog-rotation-threshold int Byte size at which a VStreamer will attempt to rotate the source's open binary log before starting a GTID snapshot based stream (e.g. a ResultStreamer or RowStreamer) (default 67108864) + --vstream_dynamic_packet_size Enable dynamic packet sizing for VReplication. This will adjust the packet size during replication to improve performance. (default true) + --vstream_packet_size int Suggested packet size for VReplication streamer. This is used only as a recommendation. The actual packet size may be more or less than this amount. (default 250000) + --vtctld_sanitize_log_messages When true, vtctld sanitizes logging. + --vtgate-config-terse-errors prevent bind vars from escaping in returned errors + --vtgate_grpc_ca string the server ca to use to validate servers when connecting + --vtgate_grpc_cert string the cert to use to connect + --vtgate_grpc_crl string the server crl to use to validate server certificates when connecting + --vtgate_grpc_key string the key to use to connect + --vtgate_grpc_server_name string the server name to use to validate server certificate + --vttablet_skip_buildinfo_tags string comma-separated list of buildinfo tags to skip from merging with --init_tags. each tag is either an exact match or a regular expression of the form '/regexp/'. (default "/.*/") + --wait_for_backup_interval duration (init restore parameter) if this is greater than 0, instead of starting up empty when no backups are found, keep checking at this interval for a backup to appear + --warming-reads-concurrency int Number of concurrent warming reads allowed (default 500) + --warming-reads-percent int Percentage of reads on the primary to forward to replicas. Useful for keeping buffer pools warm + --warming-reads-query-timeout duration Timeout of warming read queries (default 5s) + --warn_memory_rows int Warning threshold for in-memory results. A row count higher than this amount will cause the VtGateWarnings.ResultsExceeded counter to be incremented. (default 30000) + --warn_payload_size int The warning threshold for query payloads in bytes. A payload greater than this threshold will cause the VtGateWarnings.WarnPayloadSizeExceeded counter to be incremented. + --warn_sharded_only If any features that are only available in unsharded mode are used, query execution warnings will be added to the session + --watch_replication_stream When enabled, vttablet will stream the MySQL replication stream from the local server, and use it to update schema when it sees a DDL. + --xbstream_restore_flags string Flags to pass to xbstream command during restore. These should be space separated and will be added to the end of the command. These need to match the ones used for backup e.g. --compress / --decompress, --encrypt / --decrypt + --xtrabackup_backup_flags string Flags to pass to backup command. These should be space separated and will be added to the end of the command + --xtrabackup_prepare_flags string Flags to pass to prepare command. These should be space separated and will be added to the end of the command + --xtrabackup_root_path string Directory location of the xtrabackup and xbstream executables, e.g., /usr/bin + --xtrabackup_stream_mode string Which mode to use if streaming, valid values are tar and xbstream. Please note that tar is not supported in XtraBackup 8.0 (default "tar") + --xtrabackup_stripe_block_size uint Size in bytes of each block that gets sent to a given stripe before rotating to the next stripe (default 102400) + --xtrabackup_stripes uint If greater than 0, use data striping across this many destination files to parallelize data transfer and decompression + --xtrabackup_user string User that xtrabackup will use to connect to the database server. This user must have all necessary privileges. For details, please refer to xtrabackup documentation. +``` + diff --git a/content/en/docs/21.0/reference/programs/vtctl/_index.md b/content/en/docs/21.0/reference/programs/vtctl/_index.md new file mode 100644 index 000000000..b0c6fa494 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctl/_index.md @@ -0,0 +1,268 @@ +--- +title: vtctl +description: vtctl Command Index +aliases: ['/docs/reference/vitess-api/','/docs/reference/vtctl/'] +--- + +`vtctl` is a command-line tool used to administer a Vitess cluster. It is available as both a standalone tool (`vtctl`) and client-server (`vtctlclient` in combination with `vtctld`). Using client-server is recommended, as it provides an additional layer of security when using the client remotely. + +Note that wherever `vtctl` 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 be updated. + +## Commands + +### Tablets + +| Name | Example Usage | +| :-------- | :--------------- | +| (DEPRECATED) [InitTablet](../vtctl/tablets#inittablet) DEPRECATED | `InitTablet -- [--allow_update] [--allow_different_shard] [--allow_master_override] [--parent] [--db_name_override=] [--hostname=] [--mysql_port=] [--port=] [--grpc_port=] [--tags=tag1:value1,tag2:value2] -keyspace= -shard= ` | +| [GetTablet](../vtctl/tablets#gettablet) | `GetTablet ` | +| (DEPRECATED) [UpdateTabletAddrs](../vtctl/tablets#updatetabletaddrs) DEPRECATED | `UpdateTabletAddrs -- [--hostname ] [--ip-addr ] [--mysql-port ] [--vt-port ] [--grpc-port ] ` | +| [DeleteTablet](../vtctl/tablets#deletetablet) | `DeleteTablet -- [--allow_primary=false] ...` | +| [SetReadOnly](../vtctl/tablets#setreadonly) | `SetReadOnly ` | +| [SetReadWrite](../vtctl/tablets#setreadwrite) | `SetReadWrite ` | +| [StartReplication](../vtctl/tablets#startreplication) | `StartReplication ` | +| [StopReplication](../vtctl/tablets#stopreplication) | `StopReplication ` | +| [ChangeTabletType](../vtctl/tablets#changetablettype) | `ChangeTabletType -- [--dry-run] ` | +| [Ping](../vtctl/tablets#ping) | `Ping ` | +| [RefreshState](../vtctl/tablets#refreshstate) | `RefreshState ` | +| [RefreshStateByShard](../vtctl/tablets#refreshstatebyshard) | `RefreshStateByShard -- [--cells=c1,c2,...] ` | +| [RunHealthCheck](../vtctl/tablets#runhealthcheck) | `RunHealthCheck ` | +| [Sleep](../vtctl/tablets#sleep) | `Sleep ` | +| [ExecuteHook](../vtctl/tablets#executehook) | `ExecuteHook [ ...]` | +| [ExecuteFetchAsApp](../vtctl/tablets#executefetchasapp) | `ExecuteFetchAsApp -- [--max_rows=10000] [--json] [--use_pool] ` | +| [ExecuteFetchAsDba](../vtctl/tablets#executefetchasdba) | `ExecuteFetchAsDba -- [--max_rows=10000] [--disable_binlogs] [--json] ` | +| [VReplicationExec](../vtctl/tablets#vreplicationexec) | `VReplicationExec -- [--json] ` | +| [Backup](../vtctl/tablets#backup) | `Backup -- [--concurrency=4] [--allow_primary=false] [--upgrade-safe=false] [--incremental-from-pos=] ` | +| [RestoreFromBackup](../vtctl/tablets#restorefrombackup) | `RestoreFromBackup ` | +| [ReparentTablet](../vtctl/tablets#reparenttablet) | `ReparentTablet ` | + +### Shards + +| Name | Example Usage | +| :-------- | :--------------- | +| [CreateShard](../vtctl/shards#createshard) | `CreateShard -- [--force] [--parent] ` | +| [GetShard](../vtctl/shards#getshard) | `GetShard ` | +| [ValidateShard](../vtctl/shards#validateshard) | `ValidateShard -- [--ping-tablets] ` | +| [ShardReplicationPositions](../vtctl/shards#shardreplicationpositions) | `ShardReplicationPositions ` | +| [ListShardTablets](../vtctl/shards#listshardtablets) | `ListShardTablets ` | +| [SetShardIsPrimaryServing](../vtctl/shards#setshardisprimaryserving) | `SetShardIsPrimaryServing ` | +| [SetShardTabletControl](../vtctl/shards#setshardtabletcontrol) | `SetShardTabletControl -- [--cells=c1,c2,...] [--denied_tables=t1,t2,...] [--remove] [--disable_query_service] ` | +| [UpdateSrvKeyspacePartition](../vtctl/shards#updatesrvkeyspacepartition)| `UpdateSrvKeyspacePartition -- [--cells=c1,c2,...] [--remove] ` | +| [SourceShardDelete](../vtctl/shards#sourcesharddelete) | `SourceShardDelete ` | +| [SourceShardAdd](../vtctl/shards#sourceshardadd) | `SourceShardAdd -- [--key_range=] [--tables=] ` | +| [ShardReplicationFix](../vtctl/shards#shardreplicationfix) | `ShardReplicationFix ` | +| [WaitForFilteredReplication](../vtctl/shards#waitforfilteredreplication) | `WaitForFilteredReplication -- [--max_delay ] ` | +| [RemoveShardCell](../vtctl/shards#removeshardcell) | `RemoveShardCell -- [--force] [--recursive] ` | +| [DeleteShard](../vtctl/shards#deleteshard) | `DeleteShard -- [--recursive] [--even_if_serving] ...` | +| [ListBackups](../vtctl/shards#listbackups) | `ListBackups ` | +| [BackupShard](../vtctl/shards#backupshard) | `BackupShard -- [--allow_primary=false] [--upgrade-safe=false] ` [--incremental_from_pos=] | +| [RemoveBackup](../vtctl/shards#removebackup) | `RemoveBackup ` | +| (DEPRECATED) [InitShardPrimary](../vtctl/shards#initshardprimary) | `InitShardPrimary -- [--force] [--wait_replicas_timeout=] ` | +| [PlannedReparentShard](../vtctl/shards#plannedreparentshard) | `PlannedReparentShard -- --keyspace_shard= [--new_primary=] [--avoid_tablet=] [--wait_replicas_timeout=]` | +| [EmergencyReparentShard](../vtctl/shards#emergencyreparentshard) | `EmergencyReparentShard -- --keyspace_shard= [--new_primary=] [--wait_replicas_timeout=] [--ignore_replicas=] [--prevent_cross_cell_promotion=]` +| [TabletExternallyReparented](../vtctl/shards#tabletexternallyreparented) | `TabletExternallyReparented ` | +| [GenerateShardRanges](../vtctl/shards#generateshardranges) | `GenerateShardRanges ` | + +### Keyspaces + +| Name | Example Usage | +| :-------- | :--------------- | +| [CreateKeyspace](../vtctl/keyspaces#createkeyspace) | `CreateKeyspace -- [--sharding_column_name=name] [--sharding_column_type=type] [--served_from=tablettype1:ks1,tablettype2:ks2,...] [--force] [--keyspace_type=type] [--base_keyspace=base_keyspace] [--snapshot_time=time] [--durability-policy=policy_name] [--sidecar-db-name=db_name] ` | +| [DeleteKeyspace](../vtctl/keyspaces#deletekeyspace) | `DeleteKeyspace -- [--recursive] ` | +| [RemoveKeyspaceCell](../vtctl/keyspaces#removekeyspacecell) | `RemoveKeyspaceCell -- [--force] [--recursive] ` | +| [GetKeyspace](../vtctl/keyspaces#getkeyspace) | `GetKeyspace ` | +| [GetKeyspaces](../vtctl/keyspaces#getkeyspaces) | `GetKeyspaces ` | +| [RebuildKeyspaceGraph](../vtctl/keyspaces#rebuildkeyspacegraph) | `RebuildKeyspaceGraph -- [--cells=c1,c2,...] ...` | +| [ValidateKeyspace](../vtctl/keyspaces#validatekeyspace) | `ValidateKeyspace -- [--ping-tablets] ` | +| [CreateLookupVindex](../vtctl/keyspaces#createlookupvindex) | `CreateLookupVindex -- [--cell=] [--tablet_types=] ` | +| [ExternalizeVindex](../vtctl/keyspaces#externalizevindex) | `ExternalizeVindex .` | +| [Materialize](../vtctl/keyspaces#materialize) | `Materialize , example : '{"workflow": "aaa", "source_keyspace": "source", "target_keyspace": "target", "table_settings": [{"target_table": "customer", "source_expression": "select * from customer", "create_ddl": "copy"}]}'` | +| [VDiff](../vtctl/keyspaces#vdiff) | `VDiff -- [--source_cell=] [--target_cell=] [--tablet_types=in_order:RDONLY,REPLICA,PRIMARY] [--limit=] [--tables=
] [--format=json] [--auto-retry] [--verbose] [--max_extra_rows_to_compare=1000] [--filtered_replication_wait_time=30s] [--debug_query] [--only_pks] [--wait] [--wait-update-interval=1m] [] []` | +| [FindAllShardsInKeyspace](../vtctl/keyspaces#findallshardsinkeyspace) | `FindAllShardsInKeyspace ` | + +### Generic + +| Name | Example Usage | +| :-------- | :--------------- | +| [Validate](../vtctl/generic#validate) | `Validate -- [--ping-tablets]` | +| [ListAllTablets](../vtctl/generic#listalltablets) | `ListAllTablets -- [--keyspace=''] [--tablet_type=] [,,...]` | +| [ListTablets](../vtctl/generic#listtablets) | `ListTablets ...` | +| [Help](../vtctl/generic#help) | `Help [command name]` | + +### Schema, Version, Permissions + +| Name | Example Usage | +| :-------- | :--------------- | +| [GetSchema](../vtctl/schema-version-permissions#getschema) | `GetSchema -- [--tables=,,...] [--exclude_tables=,,...] [--include-views] ` | +| [ReloadSchema](../vtctl/schema-version-permissions#reloadschema) | `ReloadSchema ` | +| [ReloadSchemaShard](../vtctl/schema-version-permissions#reloadschemashard) | `ReloadSchemaShard -- [--concurrency=10] [--include_primary=false] ` | +| [ReloadSchemaKeyspace](../vtctl/schema-version-permissions#reloadschemakeyspace) | `ReloadSchemaKeyspace -- [--concurrency=10] [--include_primary=false] ` | +| [ValidateSchemaShard](../vtctl/schema-version-permissions#validateschemashard) | `ValidateSchemaShard -- [--exclude_tables=''] [--include-views] ` | +| [ValidateSchemaKeyspace](../vtctl/schema-version-permissions#validateschemakeyspace) | `ValidateSchemaKeyspace -- [--exclude_tables=''] [--include-views] ` | +| [ApplySchema](../vtctl/schema-version-permissions#applyschema) | `ApplySchema -- [--wait_replicas_timeout=10s] {--sql= \|\| --sql-file=} [--batch-size=100] ` | +| [CopySchemaShard](../vtctl/schema-version-permissions#copyschemashard) | `CopySchemaShard -- [--tables=,,...] [--exclude_tables=,,...] [--include-views] [--skip-verify] [--wait_replicas_timeout=10s] { \|\| } ` | +| [ValidateVersionShard](../vtctl/schema-version-permissions#validateversionshard) | `ValidateVersionShard ` | +| [ValidateVersionKeyspace](../vtctl/schema-version-permissions#validateversionkeyspace) | `ValidateVersionKeyspace ` | +| [GetPermissions](../vtctl/schema-version-permissions#getpermissions) | `GetPermissions ` | +| [ValidatePermissionsShard](../vtctl/schema-version-permissions#validatepermissionsshard) | `ValidatePermissionsShard ` | +| [ValidatePermissionsKeyspace](../vtctl/schema-version-permissions#validatepermissionskeyspace) | `ValidatePermissionsKeyspace ` | +| [GetVSchema](../vtctl/schema-version-permissions#getvschema) | `GetVSchema ` | +| [ApplyVSchema](../vtctl/schema-version-permissions#applyvschema) | `ApplyVSchema -- {--vschema= \|\| --vschema_file= \|\| --sql= \|\| --sql_file=} [--cells=c1,c2,...] [--skip_rebuild] [--dry-run] ` | +| [GetRoutingRules](../vtctl/schema-version-permissions#getroutingrules) | `GetRoutingRules ` | +| [ApplyRoutingRules](../vtctl/schema-version-permissions#applyroutingrules) | `ApplyRoutingRules -- {--rules= \|\| --rules_file=} [--cells=c1,c2,...] [--skip_rebuild] [--dry-run]` | +| [RebuildVSchemaGraph](../vtctl/schema-version-permissions#rebuildvschemagraph) | `RebuildVSchemaGraph -- [--cells=c1,c2,...]` | + +### Serving Graph + +| Name | Example Usage | +| :-------- | :--------------- | +| [GetSrvKeyspaceNames](../vtctl/serving-graph#getsrvkeyspacenames) | `GetSrvKeyspaceNames ` | +| [GetSrvKeyspace](../vtctl/serving-graph#getsrvkeyspace) | `GetSrvKeyspace ` | +| [GetSrvVSchema](../vtctl/serving-graph#getsrvvsvchema) | `GetSrvVSchema ` | +| [DeleteSrvVSchema](../vtctl/serving-graph#deletesrvvschema) | `DeleteSrvVSchema ` | + +### Replication Graph + +| Name | Example Usage | +| :-------- | :--------------- | +| [GetShardReplication](../vtctl/replication-graph#getshardreplication) | `GetShardReplication ` | + +### Cells + +| Name | Example Usage | +| :-------- | :--------------- | +| [AddCellInfo](../vtctl/cells#addcellinfo) | `AddCellInfo -- [--server_address ] [--root ] ` | +| [UpdateCellInfo](../vtctl/cells#updatecellinfo) | `UpdateCellInfo -- [--server_address ] [--root ] ` | +| [DeleteCellInfo](../vtctl/cells#deletecellinfo) | `DeleteCellInfo -- [--force] ` | +| [GetCellInfoNames](../vtctl/cells#getcellinfonames) | `GetCellInfoNames ` | +| [GetCellInfo](../vtctl/cells#getcellinfo) | `GetCellInfo ` | + +### CellsAliases + +| Name | Example Usage | +| :-------- | :--------------- | +| [AddCellsAlias](../vtctl/cell-aliases#addcellsalias) | `AddCellsAlias -- [--cells ] ` | +| [UpdateCellsAlias](../vtctl/cell-aliases#updatecellsalias) | `UpdateCellsAlias -- [--cells ] ` | +| [DeleteCellsAlias](../vtctl/cell-aliases#deletecellsalias) | `DeleteCellsAlias ` | +| [GetCellsAliases](../vtctl/cell-aliases#getcellsaliases) | `GetCellsAliases ` | + +### Topo + +| Name | Example Usage | +| :-------- | :--------------- | +| [TopoCat](../vtctl/topo#topocat) | `TopoCat -- [--cell ] [--decode_proto] [--decode_proto_json] [--long] [...]` | +| [TopoCp](../vtctl/topo#topocp) | `TopoCp -- [--cell ] [--to_topo] ` | + +### Throttler + +| Name | Example Usage | +| :-------- | :--------------- | +| [UpdateThrottlerConfig](../vtctl/throttler#updatethrottlerconfig) | `UpdateThrottlerConfig -- [--enable\|--disable] [--threshold=] [--custom-query=] [--check-as-check-self\|--check-as-check-shard] [--throttle-app|unthrottle-app=] [--throttle-app-ratio=] [--throttle-app-duration=] ` + +## Options + +The following global options apply to `vtctl`: + + +| Name | Type | Definition | +| :------------------------------------ | :--------- | :----------------------------------------------------------------------------------------- | +| --alsologtostderr | | log to standard error as well as files | +| --azblob_backup_account_key_file | string | Path to a file containing the Azure Storage account key; if this flag is unset, the environment variable VT_AZBLOB_ACCOUNT_KEY will be used as the key itself (NOT a file path) | +| --azblob_backup_account_name | string | Azure Storage Account name for backups; if this flag is unset, the environment variable VT_AZBLOB_ACCOUNT_NAME will be used | +| --azblob_backup_buffer_size | int | The memory buffer size to use in bytes, per file or stripe, when streaming to Azure Blob Service. (default 104857600) | +| --azblob_backup_container_name | string | Azure Blob Container Name | +| --azblob_backup_parallelism | int | Azure Blob operation parallelism (requires extra memory when increased -- a multiple of azblob_backup_buffer_size). (default 1) | +| --azblob_backup_storage_root | string | Root prefix for all backup-related Azure Blobs; this should exclude both initial and trailing '/' (e.g. just 'a/b' not '/a/b/') | +| --backup_engine_implementation | string | Specifies which implementation to use for creating new backups (builtin or xtrabackup). Restores will always be done with whichever engine created a given backup. (default "builtin") | +| --backup_storage_block_size | int | if backup_storage_compress is true, backup_storage_block_size sets the byte size for each block while compressing (default is 250000). (default 250000) | +| --backup_storage_compress | | if set, the backup files will be compressed (default is true). | +| --backup_storage_implementation | string | which implementation to use for the backup storage feature | +| --backup_storage_number_blocks | int | if backup_storage_compress is true, backup_storage_number_blocks sets the number of blocks that can be processed, at once, before the writer blocks, during compression (default is 2). It should be equal to the number of CPUs available for compression (default 2) | +| --ceph_backup_storage_config | string | Path to JSON config file for ceph backup storage (default "ceph_backup_config.json") | +| --consul_auth_static_file | string | JSON File to read the topos/tokens from. | +| --datadog-agent-host | string | host to send spans to. if empty, no tracing will be done | +| --datadog-agent-port | string | port to send spans to. if empty, no tracing will be done | +| --detach | | detached mode - run vtcl detached from the terminal | +|-file_backup_storage_root | string | root directory for the file backup storage -- this path must be on shared storage to provide a global view of backups to all vitess components | +| --gcs_backup_storage_bucket | string | Google Cloud Storage bucket to use for backups | +| --gcs_backup_storage_root | string | root prefix for all backup-related object names | +| --grpc_auth_static_client_creds | string | when using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server | +| --grpc_compression | string | how to compress gRPC, default: nothing, supported: snappy | +| --grpc_enable_tracing | | Enable GRPC tracing | +| --grpc_initial_conn_window_size | int | grpc initial connection window size | +| --grpc_initial_window_size | int | grpc initial window size | +| --grpc_keepalive_time | duration | After a duration of this time if the client doesn't see any activity it pings the server to see if the transport is still alive. (default 10s) | +| --grpc_keepalive_timeout | duration | After having pinged for keepalive check, the client waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) | +| --grpc_max_message_size | int | Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'. (default 16777216) | +| --grpc_prometheus | | Enable gRPC monitoring with Prometheus | +| --jaeger-agent-host | string | host and port to send spans to. if empty, no tracing will be done | +| --keep_logs | duration | keep logs for this long (using ctime) (zero to keep forever) | +| --keep_logs_by_mtime | duration | keep logs for this long (using mtime) (zero to keep forever) | +| --log_backtrace_at | value | when logging hits line file:N, emit a stack trace | +| --log_dir | string | If non-empty, write log files in this directory | +| --log_err_stacks | | log stack traces for errors | +| --log_rotate_max_size | uint | size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) | +| --logtostderr | | log to standard error instead of files | +| --mysql_server_version | string | MySQL server version to advertise. | +| --pprof | strings | enable profiling | +| --purge_logs_interval | duration | how often try to remove old logs (default 1h0m0s) | +| --remote_operation_timeout | duration | time to wait for a remote operation (default 30s) | +| --s3_backup_aws_endpoint | string | endpoint of the S3 backend (region must be provided) | +| --s3_backup_aws_region | string | AWS region to use (default "us-east-1") | +| --s3_backup_aws_retries | int | AWS request retries (default -1) | +| --s3_backup_force_path_style | | force the s3 path style | +| --s3_backup_log_level | string | determine the S3 loglevel to use from LogOff, LogDebug, LogDebugWithSigning, LogDebugWithHTTPBody, LogDebugWithRequestRetries, LogDebugWithRequestErrors (default "LogOff") | +| --s3_backup_server_side_encryption | string | server-side encryption algorithm (e.g., AES256, aws:kms) | +| --s3_backup_storage_bucket | string | S3 bucket to use for backups | +| --s3_backup_storage_root | string | root prefix for all backup-related object names | +| --s3_backup_tls_skip_verify_cert | | skip the 'certificate is valid' check for SSL connections | +| --security_policy | string | the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) | +| --service_map | value | comma separated list of services to enable (or disable if prefixed with '-') Example: grpc-queryservice | +| --sql-max-length-errors | int | truncate queries in error logs to the given length (default unlimited) | +| --sql-max-length-ui | int | truncate queries in debug UIs to the given length (default 512) (default 512) | +| --stderrthreshold | value | logs at or above this threshold go to stderr (default 1) | +| --tablet_grpc_ca | string | the server ca to use to validate servers when connecting | +| --tablet_grpc_cert | string | the cert to use to connect | +| --tablet_grpc_crl | string | the server crl to use to validate server certificates when connecting | +| --tablet_grpc_key | string | the key to use to connect | +| --tablet_grpc_server_name | string | the server name to use to validate server certificate | +| --tablet_manager_grpc_ca | string | the server ca to use to validate servers when connecting | +| --tablet_manager_grpc_cert | string | the cert to use to connect | +| --tablet_manager_grpc_concurrency | int | concurrency to use to talk to a vttablet server for performance-sensitive RPCs (like ExecuteFetchAs{Dba,AllPrivs,App}) (default 8) | +| --tablet_manager_grpc_connpool_size | int | number of tablets to keep tmclient connections open to (default 100) | +| --tablet_manager_grpc_crl | string | the server crl to use to validate server certificates when connecting | +| --tablet_manager_grpc_key | string | the key to use to connect | +| --tablet_manager_grpc_server_name | string | the server name to use to validate server certificate | +| --tablet_manager_protocol | string | the protocol to use to talk to vttablet (default "grpc") | +| --tablet_protocol | string | how to talk to the vttablets (default "grpc") | +| --topo_consul_lock_session_ttl | string | TTL for consul session. | +| --topo_consul_watch_poll_duration | duration | time of the long poll for watch queries. (default 30s) | +| --topo_etcd_lease_ttl | int | Lease TTL for locks and leader election. The client will use KeepAlive to keep the lease going. (default 30) | +| --topo_etcd_tls_ca | string | path to the ca to use to validate the server cert when connecting to the etcd topo server | +| --topo_etcd_tls_cert | string | path to the client cert to use to connect to the etcd topo server, requires topo_etcd_tls_key, enables TLS | +| --topo_etcd_tls_key | string | path to the client key to use to connect to the etcd topo server, enables TLS | +| --topo_global_root | string | the path of the global topology data in the global topology server | +| --topo_global_server_address | string | the address of the global topology server | +| --topo_implementation | string | the topology implementation to use | +| --topo_zk_auth_file | string | auth to use when connecting to the zk topo server, file contents should be :, e.g., digest:user:pass | +| --topo_zk_base_timeout | duration | zk base timeout (see zk.Connect) (default 30s) | +| --topo_zk_max_concurrency | int | maximum number of pending requests to send to a Zookeeper server. (default 64) | +| --topo_zk_tls_ca | string | the server ca to use to validate servers when connecting to the zk topo server | +| --topo_zk_tls_cert | string | the cert to use to connect to the zk topo server, requires topo_zk_tls_key, enables TLS | +| --topo_zk_tls_key | string | the key to use to connect to the zk topo server, enables TLS | +| --tracer | string | tracing service to use (default "noop") | +| --tracing-enable-logging | | whether to enable logging in the tracing service | +| --tracing-sampling-rate | float | sampling rate for the probabilistic jaeger sampler (default 0.1) | +| --tracing-sampling-type | string | sampling strategy to use for | +| --v | value | log level for V logs | +| --version | | print binary version | +| --vmodule | value | comma-separated list of pattern=N settings for file-filtered logging | +| --vtctl_healthcheck_retry_delay | duration | delay before retrying a failed healthcheck (default 5s) | +| --vtctl_healthcheck_timeout | duration | the health check timeout period (default 1m0s) | +| --vtctl_healthcheck_topology_refresh | duration | refresh interval for re-reading the topology (default 30s) | +| --vtgate_grpc_ca | string | the server ca to use to validate servers when connecting | +| --vtgate_grpc_cert | string | the cert to use to connect | +| --vtgate_grpc_crl | string | the server crl to use to validate server certificates when connecting | +| --vtgate_grpc_key | string | the key to use to connect | +| --vtgate_grpc_server_name | string | the server name to use to validate server certificate | +| --wait-time | duration | time to wait on an action (default 24h0m0s) | diff --git a/content/en/docs/21.0/reference/programs/vtctl/cell-aliases.md b/content/en/docs/21.0/reference/programs/vtctl/cell-aliases.md new file mode 100644 index 000000000..74eef73b6 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctl/cell-aliases.md @@ -0,0 +1,80 @@ +--- +title: vtctl Cell Aliases Command Reference +series: vtctl +docs_nav_title: Cell Aliases +--- + +The following `vtctl` commands are available for administering Cell Aliases. + +## Commands + +### AddCellsAlias + +Defines a group of cells within which replica/rdonly traffic can be routed across cells. By default, Vitess does not allow traffic between replicas that are part of different cells. Between cells that are not in the same group (alias), only primary traffic can be routed. + + +#### Example + +
AddCellsAlias -- [--cells <cell1,cell2,cell3>] <alias>
+ +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- | :--------- | +| cells | string | The list of cell names that are members of this alias. | + + +#### Arguments + +* <alias> – Required. Alias name for this grouping. + +#### Errors + +* the <alias> argument is required for the <AddCellsAlias> command This error occurs if the command is not called with exactly one argument. + +### UpdateCellsAlias + +Updates the content of a CellAlias with the provided parameters. Empty values and intersections with other aliases are not supported. + +#### Example + +
UpdateCellsAliases -- [--cells <cell1,cell2,cell3>] <alias>
+ +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- | :--------- | +| cells | string |The list of cell names that are members of this alias. | + + +#### Arguments + +* <alias> – Required. Alias name group to update. + +#### Errors + +* the <alias> argument is required for the <UpdateCellsAlias> command This error occurs if the command is not called with exactly one argument. + +### DeleteCellsAlias + +Deletes the CellsAlias for the provided alias. After deleting an alias, cells that were part of the group are not going to be able to route replica/rdonly traffic to the rest of the cells that were part of the grouping. + +#### Example + +
DeleteCellsAlias <alias>
+ +#### Errors + +* the <alias> argument is required for the <DeleteCellsAlias> command This error occurs if the command is not called with exactly one argument. + +### GetCellsAliases + +Fetches in json format all the existent cells alias groups. + +#### Example + +
GetCellsAliases
+ +## See Also + +* [vtctl command index](../../vtctl) diff --git a/content/en/docs/21.0/reference/programs/vtctl/cells.md b/content/en/docs/21.0/reference/programs/vtctl/cells.md new file mode 100644 index 000000000..9a3c4646a --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctl/cells.md @@ -0,0 +1,114 @@ +--- +title: vtctl Cell Command Reference +series: vtctl +docs_nav_title: Cells +--- + +The following `vtctl` commands are available for administering Cells. + +## Commands + +### AddCellInfo + +Registers a local topology service in a new cell by creating the CellInfo with the provided parameters. The address will be used to connect to the topology service, and we'll put Vitess data starting at the provided root. + +#### Example + +
AddCellInfo -- [--server_address <addr>] [--root <root>] <cell>
+ +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- | :--------- | +| root | string | The root path the topology service is using for that cell. | +| server_address | string | The address the topology service is using for that cell. | + + +#### Arguments + +* <addr> – Required. +* <cell> – Required. A cell is a location for a service. Generally, a cell resides in only one cluster. In Vitess, the terms "cell" and "data center" are interchangeable. The argument value is a string that does not contain whitespace. + +#### Errors + +* the <cell> argument is required for the <AddCellInfo> command This error occurs if the command is not called with exactly one argument. + +### DeleteCellInfo + +Deletes the CellInfo for the provided cell. The cell cannot be referenced by any Shard record. + +#### Example + +
DeleteCellInfo <cell>
+ +#### Errors + +* the <cell> argument is required for the <DeleteCellInfo> command This error occurs if the command is not called with exactly one argument. + + +### GetCellInfo + +Prints a JSON representation of the CellInfo for a cell. + +#### Example + +
GetCellInfo <cell>
+ +#### Errors + +* the <cell> argument is required for the <GetCellInfo> command This error occurs if the command is not called with exactly one argument. + +### GetCellInfoNames + +Lists all the cells for which we have a CellInfo object, meaning we have a local topology service registered. + +#### Example + +
GetCellInfoNames 
+ +#### Errors + +* <GetCellInfoNames> command takes no parameter This error occurs if the command is not called with exactly 0 arguments. + + +### UpdateCellInfo + +Updates the content of a CellInfo with the provided parameters. If a value is empty, it is not updated. The CellInfo will be created if it doesn't exist. + +#### Example + +
UpdateCellInfo -- [--server_address <addr>] [--root <root>] <cell>
+ +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- | :----------- | +| root | string | The root path the topology service is using for that cell. | +| server_address | string | The address the topology service is using for that cell. | + + +#### Arguments + +* <addr> – Required. +* <cell> – Required. A cell is a location for a service. Generally, a cell resides in only one cluster. In Vitess, the terms "cell" and "data center" are interchangeable. The argument value is a string that does not contain whitespace. + +#### Errors + +* the <cell> argument is required for the <UpdateCellInfo> command This error occurs if the command is not called with exactly one argument. + +### GetCellInfo + +Prints a JSON representation of the CellInfo for a cell. + +#### Example + +
GetCellInfo <cell>
+ +#### Errors + +* the <cell> argument is required for the <GetCellInfo> command This error occurs if the command is not called with exactly one argument. + + +## See Also + +* [vtctl command index](../../vtctl) diff --git a/content/en/docs/21.0/reference/programs/vtctl/generic.md b/content/en/docs/21.0/reference/programs/vtctl/generic.md new file mode 100644 index 000000000..5a00359f5 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctl/generic.md @@ -0,0 +1,91 @@ +--- +title: vtctl Generic Command Reference +series: vtctl +docs_nav_title: Generic Commands +--- + +The following generic `vtctl` commands are available for administering Vitess. + +## Commands + +### Validate + +Validates that all nodes reachable from the global replication graph and that all tablets in all discoverable cells are consistent. + +#### Example + +
Validate -- [--ping-tablets]
+ +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- | :--------- | +| ping-tablets | Boolean | Indicates whether all tablets should be pinged during the validation process | + + +### ListAllTablets + +Lists all tablets in an awk-friendly way. + +#### Example + +
ListAllTablets -- [--keyspace=''] [--tablet_type=<primary,replica,rdonly,spare>] [<cell_name1>,<cell_name2>,...]
+ +#### Arguments + +* <cell_name> – Optional. A cell is a location for a service. Generally, a cell resides in only one cluster. In Vitess, the terms "cell" and "data center" are interchangeable. The argument value is a string that does not contain whitespace. This allows you to request server side filtering to exlude tablets in cells not explicitly specified. + +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- | :---------- | +| keyspace | string | (Optional) A keyspace is a logical database. This allows you to request server side filtering to exlude tablets not in this keyspace. | +| tablet_type | string | (Optional) A tablet type is one of PRIMARY,REPLICA,RDONLY,SPARE. This allows you to request server side filtering to exlude tablets not of this type. | + +#### Errors + +* An error will be returned if you specify a non-existent cell or an invalid tablet type. + +### ListTablets + +Lists specified tablets in an awk-friendly way. + +#### Example + +
ListTablets <tablet alias> ...
+ +#### Arguments + +* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. To specify multiple values for this argument, separate individual values with a space. + +#### Errors + +* the <tablet alias> argument is required for the <ListTablets> command This error occurs if the command is not called with at least one argument. + +### GenerateShardRanges + +Generates shard ranges assuming a keyspace with N shards. + +#### Example + +
GenerateShardRanges -- [--num_shards 2]
+ +#### Flags + +| Name | Type | Definition | +| :-------- |:--------| :---------- | +| num_shards | Integer | Number of shards to generate shard ranges for. (default 2) | + +### Help + +Provides help for a command. + +#### Example + +``` +Help [command name] +``` + +## See Also + +* [vtctl command index](../../vtctl) diff --git a/content/en/docs/21.0/reference/programs/vtctl/keyspaces.md b/content/en/docs/21.0/reference/programs/vtctl/keyspaces.md new file mode 100644 index 000000000..6788f9e19 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctl/keyspaces.md @@ -0,0 +1,388 @@ +--- +title: vtctl Keyspace Command Reference +series: vtctl +docs_nav_title: Keyspaces +--- + +The following `vtctl` commands are available for administering Keyspaces. + +## Commands + +### CreateKeyspace + +Creates the specified keyspace. + +#### Example + +
CreateKeyspace -- [--sharding_column_name=name] [--sharding_column_type=type] [--served_from=tablettype1:ks1,tablettype2:ks2,...] [--force] [--keyspace_type=type] [--base_keyspace=base_keyspace] [--snapshot_time=time] [--durability-policy=policy_name] [--sidecar-db-name=db_name] <keyspace name> 
+ +#### Flags + +| Name | Type | Definition | +|:---------------------|:--------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| allow_empty_vschema | Boolean | If set this will allow a new keyspace to have no vschema | +| base_keyspace | Boolean | Specifies the base keyspace for a snapshot keyspace type | +| durability-policy | String | Specifies the [durability policy](../../../../user-guides/configuration-basic/durability_policy) to use for the keyspace | +| force | Boolean | Proceeds even if the keyspace already exists | +| keyspace_type | String | Specifies the type of the keyspace. It can be NORMAL or SNAPSHOT. For a SNAPSHOT keyspace you must specify the name of a base_keyspace, and a snapshot_time in UTC, in RFC3339 time format, e.g. 2006-01-02T15:04:05+00:00 | +| sharding_column_name | String | Specifies the column to use for sharding operations | +| sharding_column_type | String | Specifies the type of the column to use for sharding operations | +| sidecar-db-name | String | (Experimental) Specifies the name of the Vitess sidecar database that tablets in this keyspace will use for internal metadata | +| served_from | String | Specifies a comma-separated list of dbtype:keyspace pairs used to serve traffic | +| snapshot_time | String | Specifies the snapshot time for this keyspace | + + +#### Arguments + +* <keyspace name> – Required. The name of a sharded database that contains one or more tables. Vitess distributes keyspace shards into multiple machines and provides an SQL interface to query the data. The argument value must be a string that does not contain whitespace. + +#### Errors + +* the <keyspace name> argument is required for the <CreateKeyspace> command This error occurs if the command is not called with exactly one argument. + +### DeleteKeyspace + +Deletes the specified keyspace. In recursive mode, it also recursively deletes all shards in the keyspace. Otherwise, there must be no shards left in the keyspace. + +#### Example + +
DeleteKeyspace -- [--recursive] <keyspace>
+Deletes the specified keyspace. In recursive mode, it also recursively deletes all shards in the keyspace. Otherwise, there must be no shards left in the keyspace.
+ +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- | :--------- | +| recursive | Boolean | Also recursively delete all shards in the keyspace. | + + +#### Arguments + +* <keyspace> – Required. The name of a sharded database that contains one or more tables. Vitess distributes keyspace shards into multiple machines and provides an SQL interface to query the data. The argument value must be a string that does not contain whitespace. + +#### Errors + +* must specify the <keyspace> argument for <DeleteKeyspace> This error occurs if the command is not called with exactly one argument. + +### RemoveKeyspaceCell + +Removes the cell from the Cells list for all shards in the keyspace, and the SrvKeyspace for that keyspace in that cell. + +#### Example + +
RemoveKeyspaceCell -- [--force] [--recursive] <keyspace> <cell>
+Removes the cell from the Cells list for all shards in the keyspace, and the SrvKeyspace for that keyspace in that cell.
+ +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- | :--------- | +| force | Boolean | Proceeds even if the cell's topology service cannot be reached. The assumption is that you turned down the entire cell, and just need to update the global topo data. | +| recursive | Boolean | Also delete all tablets in that cell belonging to the specified keyspace. | + + +#### Arguments + +* <keyspace> – Required. The name of a sharded database that contains one or more tables. Vitess distributes keyspace shards into multiple machines and provides an SQL interface to query the data. The argument value must be a string that does not contain whitespace. +* <cell> – Required. A cell is a location for a service. Generally, a cell resides in only one cluster. In Vitess, the terms "cell" and "data center" are interchangeable. The argument value is a string that does not contain whitespace. + +#### Errors + +* the <keyspace> and <cell> arguments are required for the <RemoveKeyspaceCell> command This error occurs if the command is not called with exactly 2 arguments. + +### GetKeyspace + +Outputs a JSON structure that contains information about the Keyspace. + +#### Example + +
GetKeyspace <keyspace>
+Outputs a JSON structure that contains information about the Keyspace.
+ +#### Arguments + +* <keyspace> – Required. The name of a sharded database that contains one or more tables. Vitess distributes keyspace shards into multiple machines and provides an SQL interface to query the data. The argument value must be a string that does not contain whitespace. + +#### Errors + +* the <keyspace> argument is required for the <GetKeyspace> command This error occurs if the command is not called with exactly one argument. + +### GetKeyspaces + +Outputs a sorted list of all keyspaces. + +### RebuildKeyspaceGraph + +Rebuilds the serving data for the keyspace. This command may trigger an update to all connected clients. + +#### Example + +
RebuildKeyspaceGraph -- [--cells=c1,c2,...] [--allow_partial] <keyspace> ...
+Rebuilds the serving data for the keyspace. This command may trigger an update to all connected clients.
+ +#### Flags + +| Name | Type | Definition | +|:--------------|:--------|:-------------------------------------------------------------------------------------------------------------------------------------| +| allow_partial | Boolean | Specifies whether a SNAPSHOT keyspace is allowed to serve with an incomplete set of shards. Ignored for all other types of keyspaces | +| cells | String | Specifies a comma-separated list of cells to update | + +#### Arguments + +* <keyspace> – Required. The name of a sharded database that contains one or more tables. Vitess distributes keyspace shards into multiple machines and provides an SQL interface to query the data. The argument value must be a string that does not contain whitespace. To specify multiple values for this argument, separate individual values with a space. + +#### Errors + +* the <keyspace> argument must be used to specify at least one keyspace when calling the <RebuildKeyspaceGraph> command This error occurs if the command is not called with at least one argument. + + +### ValidateKeyspace + +Validates that all nodes reachable from the specified keyspace are consistent. + +#### Example + +
ValidateKeyspace -- [--ping-tablets] <keyspace name>
+Validates that all nodes reachable from the specified keyspace are consistent.
+ +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- | :--------- | +| ping-tablets | Boolean | Specifies whether all tablets will be pinged during the validation process | + + +#### Arguments + +* <keyspace name> – Required. The name of a sharded database that contains one or more tables. Vitess distributes keyspace shards into multiple machines and provides an SQL interface to query the data. The argument value must be a string that does not contain whitespace. + +#### Errors + +* the <keyspace name> argument is required for the <ValidateKeyspace> command This error occurs if the command is not called with exactly one argument. + + +### FindAllShardsInKeyspace + +Displays all of the shards in the specified keyspace. + +#### Example + +
FindAllShardsInKeyspace <keyspace>
+Displays all of the shards in the specified keyspace.
+ +#### Arguments + +* <keyspace> – Required. The name of a sharded database that contains one or more tables. Vitess distributes keyspace shards into multiple machines and provides an SQL interface to query the data. The argument value must be a string that does not contain whitespace. + +#### Errors + +* the <keyspace> argument is required for the <FindAllShardsInKeyspace> command This error occurs if the command is not called with exactly one argument. + + +### Reshard + +Start a Resharding process. Example: Reshard --cells='zone1,alias1' --tablet_types='PRIMARY,REPLICA,RDONLY' ks.workflow001 -- '0' '-80,80-' + +#### Example + +
Reshard -- [--source_shards=<source_shards>] [--target_shards=<target_shards>] [--cells=<cells>] [--tablet_types=<source_tablet_types>] [--on-ddl=<ddl-action>] [--skip_schema_copy] <action> <keyspace.workflow> 
+ +#### Flags + +| Name | Type | Definition | +|:----------------------------|:---------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| all | Boolean | MoveTables only. Move all tables from the source keyspace. Either table_specs or --all needs to be specified. | +| auto_start | Boolean | If false, streams will start in the Stopped state and will need to be explicitly started (default true) | +| cells | String | Cell(s) or CellAlias(es) (comma-separated) to replicate from. | +| drop_foreign_keys | Boolean | If true, tables in the target keyspace will be created without foreign keys. | +| dry_run | Boolean | Does a dry run of SwitchTraffic and only reports the actions to be taken. --dry_run is only supported for SwitchTraffic, ReverseTraffic and Complete. | +| exclude | String | MoveTables only. Tables to exclude (comma-separated) if --all is specified | +| keep_data | Boolean | Do not drop tables or shards (if true, only vreplication artifacts are cleaned up). --keep_data is only supported for Complete and Cancel. | +| keep_routing_rules | Boolean | Do not remove the routing rules for the source keyspace. --keep_routing_rules is only supported for Complete and Cancel. | +| max_replication_lag_allowed | Duration | Allow traffic to be switched only if vreplication lag is below this (in seconds) (default 30s) | +| on-ddl | String | What to do when DDL is encountered in the VReplication stream. Possible values are IGNORE, STOP, EXEC, and EXEC_IGNORE. (default "IGNORE") | +| rename_tables | Boolean | MoveTables only. Rename tables instead of dropping them. --rename_tables is only supported for Complete. | +| reverse_replication | Boolean | Also reverse the replication (default true). --reverse_replication is only supported for SwitchTraffic. (default true) | +| skip_schema_copy | Boolean | Reshard only. Skip copying of schema to target shards | +| source | String | MoveTables only. Source keyspace | +| source_shards | String | Source shards | +| source_time_zone | String | MoveTables only. Specifying this causes any DATETIME fields to be converted from given time zone into UTC | +| stop_after_copy | Boolean | Streams will be stopped once the copy phase is completed | +| tables | String | MoveTables only. A table spec or a list of tables. Either table_specs or --all needs to be specified. | +| tablet_types | String | Source tablet types to replicate from (e.g. PRIMARY, REPLICA, RDONLY). Note: SwitchTraffic overrides this default and uses in_order:RDONLY,REPLICA,PRIMARY to switch all traffic by default. (default "in_order:REPLICA,PRIMARY") | +| target_shards | String | Reshard only. Target shards | +| timeout | Duration | Specifies the maximum time to wait, in seconds, for vreplication to catch up on primary migrations. The migration will be cancelled on a timeout. --timeout is only supported for SwitchTraffic and ReverseTraffic. (default 30s) | + +#### Arguments + +* <action> - Required. Action must be one of the following: Create, Complete, Cancel, SwitchTraffic, ReverseTrafffic, Show, or Progress. +* <keyspace.workflow> - Required. The name of the keyspace and workflow to be used for the resharding process. The argument value must be a string that does not contain whitespace. + + +### MoveTables + +Move table(s) to another keyspace, table_specs is a list of tables or the tables section of the vschema for the target keyspace. +Example: +```json +{ + "t1": {"column_vindexes": [{"column": "id1", "name": "hash"}]}, + "t2": {"column_vindexes": [{"column": "id2", "name": "hash"}]} +} +``` + +In the case of an unsharded target keyspace the vschema for each table may be empty. +Example: +```json +{ + "t1":{}, + "t2":{} +} +``` + +#### Example + +
MoveTables [--source=<sourceKs>] [--tables=<tableSpecs>] [--cells=<cells>] [--tablet_types=<source_tablet_types>] [--all] [--exclude=<tables>] [--auto_start] [--stop_after_copy] [--on-ddl=<ddl-action>] [--source_shards=<source_shards>] <action> <targetKs.workflow> 
+ +#### Flags + +| Name | Type | Definition | +|:----------------------------|:---------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| all | Boolean | MoveTables only. Move all tables from the source keyspace. Either table_specs or --all needs to be specified. | +| auto_start | Boolean | If false, streams will start in the Stopped state and will need to be explicitly started (default true) | +| cells | String | Cell(s) or CellAlias(es) (comma-separated) to replicate from. | +| drop_foreign_keys | Boolean | If true, tables in the target keyspace will be created without foreign keys. | +| dry_run | Boolean | Does a dry run of SwitchTraffic and only reports the actions to be taken. --dry_run is only supported for SwitchTraffic, ReverseTraffic and Complete. | +| exclude | String | MoveTables only. Tables to exclude (comma-separated) if --all is specified | +| keep_data | Boolean | Do not drop tables or shards (if true, only vreplication artifacts are cleaned up). --keep_data is only supported for Complete and Cancel. | +| keep_routing_rules | Boolean | Do not remove the routing rules for the source keyspace. --keep_routing_rules is only supported for Complete and Cancel. | +| max_replication_lag_allowed | Duration | Allow traffic to be switched only if vreplication lag is below this (in seconds) (default 30s) | +| on-ddl | String | What to do when DDL is encountered in the VReplication stream. Possible values are IGNORE, STOP, EXEC, and EXEC_IGNORE. (default "IGNORE") | +| rename_tables | Boolean | MoveTables only. Rename tables instead of dropping them. --rename_tables is only supported for Complete. | +| reverse_replication | Boolean | Also reverse the replication (default true). --reverse_replication is only supported for SwitchTraffic. (default true) | +| skip_schema_copy | Boolean | Reshard only. Skip copying of schema to target shards | +| source | String | MoveTables only. Source keyspace | +| source_shards | String | Source shards | +| source_time_zone | String | MoveTables only. Specifying this causes any DATETIME fields to be converted from given time zone into UTC | +| stop_after_copy | Boolean | Streams will be stopped once the copy phase is completed | +| tables | String | MoveTables only. A table spec or a list of tables. Either table_specs or --all needs to be specified. | +| tablet_types | String | Source tablet types to replicate from (e.g. PRIMARY, REPLICA, RDONLY). Note: SwitchTraffic overrides this default and uses in_order:RDONLY,REPLICA,PRIMARY to switch all traffic by default. (default "in_order:REPLICA,PRIMARY") | +| target_shards | String | Reshard only. Target shards | +| timeout | Duration | Specifies the maximum time to wait, in seconds, for vreplication to catch up on primary migrations. The migration will be cancelled on a timeout. --timeout is only supported for SwitchTraffic and ReverseTraffic. (default 30s) | + + +#### Arguments + +* <action> - Required. Action must be one of the following: Create, Complete, Cancel, SwitchTraffic, ReverseTrafffic, Show, or Progress. +* <keyspace.workflow> - Required. The name of the keyspace and workflow to be used for the resharding process. The argument value must be a string that does not contain whitespace. + + +### CreateLookupVindex + +Create and backfill a lookup vindex. the json_spec must contain the vindex and colvindex specs for the new lookup. + +#### Example + +
+CreateLookupVindex  -- [--cells=<source_cells>] [--continue_after_copy_with_owner=false] [--tablet_types=<source_tablet_types>] <keyspace> <json_spec>
+Create and backfill a lookup vindex. the json_spec must contain the vindex and colvindex specs for the new lookup.
+
+ +### Flags + +| Name | Type | Definition | +|:-------------------------------|:--------|:--------------------------------------------------------------------------| +| cells | String | Source cells to replicate from. | +| continue_after_copy_with_owner | Boolean | Vindex will continue materialization after copy when an owner is provided | +| tablet_types | String | Source tablet types to replicate from. | + +### Arguments + +* <keyspace> - Required. The name of the keyspace where lookup vindex needs to be created. +* <json_spec> - Required. json specification about how to create the lookup vindex. More information in [user-guides](../../../../user-guides/configuration-advanced/createlookupvindex) + + +### ExternalizeVindex + +Externalize (activate) a lookup vindex backfilled using `CreateLookupVindex`. + +This removes the workflow and vreplication streams associated with the +backfill, and clears the `write_only` flag on the vindex. After this flag is +removed, applications can start using the vindex for lookups. + +#### Example + +
+ExternalizeVindex <keyspace>.<vindex>
+
+ +### Materialize + +Performs materialization based on the json spec. Is used directly to form VReplication rules, with an optional step to copy table structure/DDL. + +#### Example + +
+Materialize -- [--cells=<cells>] [--tablet_types=<source_tablet_types>] <json_spec>
+
+ +#### Flags + +| Name | Type | Definition | +|:-------------|:-------|:---------------------------------------| +| cells | String | Source cells to replicate from. | +| tablet_types | String | Source tablet types to replicate from. | + + +#### Argument + +* - Required. + +Example: +```json +{ + "workflow": "aaa", + "source_keyspace": "source", + "target_keyspace": "target", + "table_settings": [{ + "target_table": "customer", + "source_expression": "select * from customer", + "create_ddl": "copy"}] +} +``` + +### `VDiff` + +Perform a diff of all tables in the workflow + +#### Example + +
+VDiff -- [--source_cell=<cell>] [--target_cell=<cell>] [--tablet_types=in_order:RDONLY,REPLICA,PRIMARY] [--limit=<max rows to diff>] [--tables=<table list>] [--format=json] [--auto-retry] [--verbose] [--max_extra_rows_to_compare=1000] [--filtered_replication_wait_time=30s] [--debug_query] [--only_pks] [--wait] [--wait-update-interval=1m] <keyspace.workflow> [<action>] [<UUID>]
+
+ +#### Flags + +| Name | Type | Definition | +|:-------------|:-------|:---------------------------------------| +| auto-retry | Boolean | Should this vdiff automatically retry and continue in case of recoverable errors (default true) | +| checksum | Boolean | Use row-level checksums to compare, not yet implemented | +| debug_query | Boolean | Adds a mysql query to the report that can be used for further debugging | +| filtered_replication_wait_time | Duration | Specifies the maximum time to wait, in seconds, for filtered replication to catch up on primary migrations. The migration will be cancelled on a timeout. (default 30s) | +| format | String | Format of report (default "text") | +| limit | Int | Max rows to stop comparing after (default 9223372036854775807) | +| max_extra_rows_to_compare | Int | If there are collation differences between the source and target, you can have rows that are identical but simply returned in a different order from MySQL. We will do a second pass to compare the rows for any actual differences in this case and this flag allows you to control the resources used for this operation. (default 1000) | +| only_pks | Boolean | When reporting missing rows, only show primary keys in the report. | +| sample_pct | Int | How many rows to sample, not yet implemented (default 100) | +| source_cell | String | The source cell to compare from; default is any available cell | +| tables | String | Only run vdiff for these tables in the workflow | +| tablet_types | String | Tablet types for source (PRIMARY is always used on target) (default "in_order:RDONLY,REPLICA,PRIMARY") | +| target_cell | String | The target cell to compare with; default is any available cell | +| v1 | Boolean | Use legacy VDiff v1 | +| verbose | Boolean | Show verbose vdiff output in summaries | +| wait | Boolean | When creating or resuming a vdiff, wait for it to finish before exiting | +| wait-update-interval | Duration |When waiting on a vdiff to finish, check and display the current status this often (default 1m0s) | + + +## See Also + +* [vtctl command index](../../vtctl) diff --git a/content/en/docs/21.0/reference/programs/vtctl/replication-graph.md b/content/en/docs/21.0/reference/programs/vtctl/replication-graph.md new file mode 100644 index 000000000..a4ab5b269 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctl/replication-graph.md @@ -0,0 +1,30 @@ +--- +title: vtctl Replication Graph Command Reference +series: vtctl +docs_nav_title: Replication Graph +--- + +The following `vtctl` commands are available for administering the Replication Graph. + +## Commands + +### GetShardReplication + +Outputs a JSON structure that contains information about the ShardReplication. + +#### Example + +
GetShardReplication <cell> <keyspace/shard>
+ +#### Arguments + +* <cell> – Required. A cell is a location for a service. Generally, a cell resides in only one cluster. In Vitess, the terms "cell" and "data center" are interchangeable. The argument value is a string that does not contain whitespace. +* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitespace, while the shard is typically identified by a string in the format <range start>-<range end>. + +#### Errors + +* the <cell> and <keyspace/shard> arguments are required for the <GetShardReplication> command This error occurs if the command is not called with exactly 2 arguments. + +## See Also + +* [vtctl command index](../../vtctl) diff --git a/content/en/docs/21.0/reference/programs/vtctl/schema-version-permissions.md b/content/en/docs/21.0/reference/programs/vtctl/schema-version-permissions.md new file mode 100644 index 000000000..f7b266ed6 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctl/schema-version-permissions.md @@ -0,0 +1,384 @@ +--- +title: vtctl Schema, Version, Permissions Command Reference +series: vtctl +docs_nav_title: Schema Versions & Permissions +--- + +The following `vtctl` commands are available for administering Schema, Versions and Permissions. + +## Commands + +### GetSchema + +Displays the full schema for a tablet, or just the schema for the specified tables in that tablet. + +#### Example + +
GetSchema -- [--tables=<table1>,<table2>,...] [--exclude_tables=<table1>,<table2>,...] [--include-views] <tablet alias>
+ +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- | :--------- | +| exclude_tables | string | Specifies a comma-separated list of tables to exclude. Each is either an exact match, or a regular expression of the form /regexp/ | +| include-views | Boolean | Includes views in the output | +| table_names_only | Boolean | Only displays table names that match | +| tables | string | Specifies a comma-separated list of tables for which we should gather information. Each is either an exact match, or a regular expression of the form /regexp/ | + + +#### Arguments + +* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. + +#### Errors + +* The <tablet alias> argument is required for the <GetSchema> command This error occurs if the command is not called with exactly one argument. + + +### ReloadSchema + +Reloads the schema on a remote tablet. + +#### Example + +
ReloadSchema <tablet alias>
+ +#### Arguments + +* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. + +#### Errors + +* The <tablet alias> argument is required for the <ReloadSchema> command This error occurs if the command is not called with exactly one argument. + +### ReloadSchemaShard + +Reloads the schema on all the tablets in a shard. + +#### Example + +
ReloadSchemaShard -- [--concurrency=10] [--include_primary=false] <keyspace/shard>
+ +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- | :--------- | +| concurrency | Int | How many tablets to reload in parallel | +| include_primary | Boolean | Include the primary tablet | + + +#### Arguments + +* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitespace, while the shard is typically identified by a string in the format <range start>-<range end>. + +#### Errors + +* The <keyspace/shard> argument is required for the <ReloadSchemaShard> command This error occurs if the command is not called with exactly one argument. + +### ReloadSchemaKeyspace + +Reloads the schema on all the tablets in a keyspace. + +#### Example + +
ReloadSchemaKeyspace -- [--concurrency=10] [--include_primary=false] <keyspace>
+ +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- | :--------- | +| concurrency | Int | How many tablets to reload in parallel | +| include_primary | Boolean | Include the primary tablet(s) | + + +#### Arguments + +* <keyspace> – Required. The name of a sharded database that contains one or more tables. Vitess distributes keyspace shards into multiple machines and provides an SQL interface to query the data. The argument value must be a string that does not contain whitespace. + +#### Errors + +* The <keyspace> argument is required for the <ReloadSchemaKeyspace> command This error occurs if the command is not called with exactly one argument. + +### ValidateSchemaShard + +Validates that the schema on the primary tablet matches all of the replicas. + +#### Example + +
ValidateSchemaShard -- [--exclude_tables=''] [-include-views] <keyspace/shard>
+ +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- | :--------- | +| exclude_tables | string | Specifies a comma-separated list of tables to exclude. Each is either an exact match, or a regular expression of the form /regexp/ | +| include-views | Boolean | Includes views in the validation | + + +#### Arguments + +* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitespace, while the shard is typically identified by a string in the format <range start>-<range end>. + +#### Errors + +* The <keyspace/shard> argument is required for the <ValidateSchemaShard> command This error occurs if the command is not called with exactly one argument. + +### ValidateSchemaKeyspace + +Validates that the schema on the primary tablet for shard 0 matches the schema on all of the other tablets in the keyspace. + +#### Example + +
ValidateSchemaKeyspace -- [--exclude_tables=''] [--include-views] <keyspace name>
+ +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- | :--------- | +| exclude_tables | string | Specifies a comma-separated list of tables to exclude. Each is either an exact match, or a regular expression of the form /regexp/ | +| include-views | Boolean | Includes views in the validation | + + +#### Arguments + +* <keyspace name> – Required. The name of a sharded database that contains one or more tables. Vitess distributes keyspace shards into multiple machines and provides an SQL interface to query the data. The argument value must be a string that does not contain whitespace. + +#### Errors + +* The <keyspace name> argument is required for the <ValidateSchemaKeyspace> command This error occurs if the command is not called with exactly one argument. + +### ApplySchema + +Applies the schema change to the specified keyspace on all shards. The recommended method of applying schema changes is via [Online DDL](../../../../user-guides/schema-changes/managed-online-schema-changes/), which ensures migrations are non-blocking and keeps replication in sync throughout the operation. --ddl_strategy is used to instruct migrations via vreplication, `gh-ost` or `pt-osc` with optional parameters. -request_context allows the user to specify a custom request context for online DDL migrations. + +#### Example + +
ApplySchema -- [--wait_replicas_timeout=10s] [--ddl_strategy=] [--request_context=] {--sql=<sql> || --sql-file=<filename>} <keyspace>
+ +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- | :--------- | +| caller_id | string | Effective caller ID used for the operation and should map to an ACL name which grants this identity the necessary permissions to perform the operation (this is only necessary when strict table ACLs are used). | +| ddl_strategy | string | Online DDL strategy, compatible with @@ddl_strategy session variable (examples: 'vitess', 'pt-osc', 'gh-ost --max-load=Threads_running=100' (default "direct"). | +| request_context | string | For Only DDL, optionally supply a custom unique string used as context for the migration(s) in this command. By default a unique context is auto-generated by Vitess. | +| sql | string | A list of semicolon-delimited SQL commands. | +| sql-file | string | Identifies the file that contains the SQL commands. This file needs to exist on the server, rather than on the client. | +| wait_replicas_timeout | Duration | The amount of time to wait for replicas to receive the schema change via replication (default 10s). | + +#### Arguments + +* <keyspace> – Required. The name of a sharded database that contains one or more tables. Vitess distributes keyspace shards into multiple machines and provides an SQL interface to query the data. The argument value must be a string that does not contain whitespace. + +#### Errors + +* The <keyspace> argument is required for the command<ApplySchema> command This error occurs if the command is not called with exactly one argument. +* If using a file you may need to pass the absolute path. + +### CopySchemaShard + +Copies the schema from a source shard's primary (or a specific tablet) to a destination shard. The schema is applied directly on the primary of the destination shard, and it is propagated to the replicas through binlogs. + +#### Example + +
CopySchemaShard -- [--tables=<table1>,<table2>,...] [--exclude_tables=<table1>,<table2>,...] [--include-views] [--wait_replicas_timeout=10s] {<source keyspace/shard> || <source tablet alias>} <destination keyspace/shard>
+ +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- | :--------- | +| exclude_tables | string | Specifies a comma-separated list of tables to exclude. Each is either an exact match, or a regular expression of the form /regexp/ | +| include-views | Boolean | Includes views in the output | +| tables | string | Specifies a comma-separated list of tables to copy. Each is either an exact match, or a regular expression of the form /regexp/ | +| wait_replicas_timeout | Duration | The amount of time to wait for replicas to receive the schema change via replication. | + + +#### Arguments + +* <source keyspace/shard> – Required. A keyspace or shard to be used as the source of the copy. +* <source tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. +* <destination keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitespace, while the shard is typically identified by a string in the format <range start>-<range end>. + +#### Errors + +* The <source keyspace/shard> and <destination keyspace/shard> arguments are both required for the <CopySchemaShard> command. Instead of the <source keyspace/shard> argument, you can also specify <tablet alias> which refers to a specific tablet of the shard in the source keyspace This error occurs if the command is not called with exactly 2 arguments. + +### ValidateVersionShard + +Validates that the version on the primary matches all of the replicas. + +#### Example + +
ValidateVersionShard <keyspace/shard>
+ +#### Arguments + +* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitespace, while the shard is typically identified by a string in the format <range start>-<range end>. + +#### Errors + +* The <keyspace/shard> argument is required for the <ValidateVersionShard> command This error occurs if the command is not called with exactly one argument. + +### ValidateVersionKeyspace + +Validates that the version on the primary of shard 0 matches all of the other tablets in the keyspace. + +#### Example + +
ValidateVersionKeyspace <keyspace name>
+ +#### Arguments + +* <keyspace name> – Required. The name of a sharded database that contains one or more tables. Vitess distributes keyspace shards into multiple machines and provides an SQL interface to query the data. The argument value must be a string that does not contain whitespace. + +#### Errors + +* The <keyspace name> argument is required for the <ValidateVersionKeyspace> command This error occurs if the command is not called with exactly one argument. + +### GetPermissions + +Displays the permissions for a tablet. + +#### Example + +
GetPermissions <tablet alias>
+ +#### Arguments + +* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. + +#### Errors + +* The <tablet alias> argument is required for the <GetPermissions> command This error occurs if the command is not called with exactly one argument. + +### ValidatePermissionsShard + +Validates that the permissions on the primary tablet match all the replicas. + +#### Example + +
ValidatePermissionsShard <keyspace/shard>
+ +#### Arguments + +* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitespace, while the shard is typically identified by a string in the format <range start>-<range end>. + +#### Errors + +* The <keyspace/shard> argument is required for the <ValidatePermissionsShard> command This error occurs if the command is not called with exactly one argument. + +### ValidatePermissionsKeyspace + +Validates that the permissions on the primary of shard 0 match those of all of the other tablets in the keyspace. + +#### Example + +
ValidatePermissionsKeyspace <keyspace name>
+ +#### Arguments + +* <keyspace name> – Required. The name of a sharded database that contains one or more tables. Vitess distributes keyspace shards into multiple machines and provides an SQL interface to query the data. The argument value must be a string that does not contain whitespace. + +#### Errors + +* The <keyspace name> argument is required for the <ValidatePermissionsKeyspace> command This error occurs if the command is not called with exactly one argument. + +### GetVSchema + +Displays the VTGate routing schema. + +#### Example + +
GetVSchema <keyspace>
+ +#### Arguments + +* <keyspace> – Required. The name of a sharded database that contains one or more tables. Vitess distributes keyspace shards into multiple machines and provides an SQL interface to query the data. The argument value must be a string that does not contain whitespace. + +#### Errors + +* The <keyspace> argument is required for the <GetVSchema> command This error occurs if the command is not called with exactly one argument. + +### ApplyVSchema + +Applies the VTGate routing schema to the provided keyspace. Shows the result after application. + +#### Example + +
ApplyVSchema -- {--vschema=<vschema> || --vschema_file=<vschema file> || --sql=<sql> || --sql_file=<sql file>} [--cells=c1,c2,...] [--skip_rebuild] [--dry-run]<keyspace>
+ +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- | :--------- | +| cells | string | If specified, limits the rebuild to the cells, after upload. Ignored if skipRebuild is set. | +| dry-run | Boolean | If set, do not save the altered vschema, simply echo to console. | +| skip_rebuild | Boolean | If set, do not rebuild the SrvSchema objects. | +| sql | add vindex | A vschema ddl SQL statement (e.g. add vindex, `alter table t add vindex hash(id)`, etc) | +| sql_file | add vindex | A vschema ddl SQL statement (e.g. add vindex, `alter table t add vindex hash(id)`, etc) | +| vschema | string | Identifies the VTGate routing schema | +| vschema_file | string | Identifies the VTGate routing schema file | + +#### Arguments + +* <keyspace> – Required. The name of a sharded database that contains one or more tables. Vitess distributes keyspace shards into multiple machines and provides an SQL interface to query the data. The argument value must be a string that does not contain whitespace. + +#### Errors + +* The <keyspace> argument is required for the <ApplyVSchema> command. This error occurs if the command is not called with exactly one argument. +* Either the <vschema> or <vschema>File flag must be specified when calling the <ApplyVSchema> command. +* If using a file you may need to pass the absolute path. + +#### Warnings + +* In some cases, unknown params passed to Vindexes may be accepted but reported as warnings in the command response. + +### GetRoutingRules + +``` +GetRoutingRules +``` + +### ApplyRoutingRules + +Applies the VSchema routing rules. + +#### Example + +``` +ApplyRoutingRules -- {--rules= | --rules_file=} [--cells=c1,c2,...] [--skip_rebuild] [--dry-run] +``` + +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- | :--------- | +| cells | string | If specified, limits the rebuild to the cells, after upload. Ignored if skip_rebuild is set. | +| dry-run | Boolean | If set, do not save the altered vschema, simply echo to console. | +| skip_rebuild | Boolean | If set, do not rebuild the SrvSchema objects. | +| rules | string | Specify rules as a string. | +| rules_file | string | Specify rules in a file. | + + +### RebuildVSchemaGraph + +Rebuilds the cell-specific SrvVSchema from the global VSchema objects in the provided cells (or all cells if none provided). + +#### Example + +
RebuildVSchemaGraph -- [--cells=c1,c2,...]
+ +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- | :--------- | +| cells | string | Specifies a comma-separated list of cells to look for tablets | + + +#### Errors + +* <RebuildVSchemaGraph> doesn't take any arguments This error occurs if the command is not called with exactly 0 arguments. + +## See Also + +* [vtctl command index](../../vtctl) diff --git a/content/en/docs/21.0/reference/programs/vtctl/serving-graph.md b/content/en/docs/21.0/reference/programs/vtctl/serving-graph.md new file mode 100644 index 000000000..0c756ce11 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctl/serving-graph.md @@ -0,0 +1,70 @@ +--- +title: vtctl Serving Graph Command Reference +series: vtctl +docs_nav_title: Serving Graph +--- + +The following `vtctl` commands are available for administering the Serving Graph. + +## Commands + +### GetSrvKeyspaceNames + +Outputs a list of keyspace names. + +#### Example + +
GetSrvKeyspaceNames <cell>
+ +#### Arguments + +* <cell> – Required. A cell is a location for a service. Generally, a cell resides in only one cluster. In Vitess, the terms "cell" and "data center" are interchangeable. The argument value is a string that does not contain whitespace. + +#### Errors + +* the <cell> argument is required for the <GetSrvKeyspaceNames> command This error occurs if the command is not called with exactly one argument. + + +### GetSrvKeyspace + +Outputs a JSON structure that contains information about the SrvKeyspace. + +#### Example + +
GetSrvKeyspace <cell> <keyspace>
+ +#### Arguments + +* <cell> – Required. A cell is a location for a service. Generally, a cell resides in only one cluster. In Vitess, the terms "cell" and "data center" are interchangeable. The argument value is a string that does not contain whitespace. +* <keyspace> – Required. The name of a sharded database that contains one or more tables. Vitess distributes keyspace shards into multiple machines and provides an SQL interface to query the data. The argument value must be a string that does not contain whitespace. + +#### Errors + +* the <cell> and <keyspace> arguments are required for the <GetSrvKeyspace> command This error occurs if the command is not called with exactly 2 arguments. + +### GetSrvVSchema + +Outputs a JSON structure that contains information about the SrvVSchema. + +#### Example + +
GetSrvVSchema <cell>
+ +#### Arguments + +* <cell> – Required. A cell is a location for a service. Generally, a cell resides in only one cluster. In Vitess, the terms "cell" and "data center" are interchangeable. The argument value is a string that does not contain whitespace. + +#### Errors + +* the <cell> argument is required for the <GetSrvVSchema> command This error occurs if the command is not called with exactly one argument. + +### DeleteSrvVSchema + +``` +DeleteSrvVSchema +``` + + +## See Also + +* [vtctl command index](../../vtctl) diff --git a/content/en/docs/21.0/reference/programs/vtctl/shards.md b/content/en/docs/21.0/reference/programs/vtctl/shards.md new file mode 100644 index 000000000..66e70fc6d --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctl/shards.md @@ -0,0 +1,467 @@ +--- +title: vtctl Shard Command Reference +series: vtctl +docs_nav_title: Shards +aliases: ['/docs/reference/vtctl/shards/'] +--- + +The following `vtctl` commands are available for administering shards. + +## Commands + +### CreateShard + +Creates the specified shard. + +#### Example + +
CreateShard -- [--force] [--parent] <keyspace/shard>
+ +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- | :--------- | +| force | Boolean | Proceeds with the command even if the keyspace already exists | +| parent | Boolean | Creates the parent keyspace if it doesn't already exist | + + +#### Arguments + +* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitespace, while the shard is typically identified by a string in the format <range start>-<range end>. + +#### Errors + +* the <keyspace/shard> argument is required for the <CreateShard> command This error occurs if the command is not called with exactly one argument. + +### GetShard + +Outputs a JSON structure that contains information about the Shard. + +#### Example + +
GetShard <keyspace/shard>
+ +#### Arguments + +* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitespace, while the shard is typically identified by a string in the format <range start>-<range end>. + +#### Errors + +* the <keyspace/shard> argument is required for the <GetShard> command This error occurs if the command is not called with exactly one argument. + +### ValidateShard + +Validates that all nodes that are reachable from this shard are consistent. + +#### Example + +
ValidateShard -- [--ping-tablets] <keyspace/shard>
+ +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- | :--------- | +| ping-tablets | Boolean | Indicates whether all tablets should be pinged during the validation process | + + +#### Arguments + +* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitespace, while the shard is typically identified by a string in the format <range start>-<range end>. + +#### Errors + +* the <keyspace/shard> argument is required for the <ValidateShard> command This error occurs if the command is not called with exactly one argument. + +### ShardReplicationPositions + +Shows the replication status of each replica machine in the shard graph. In this case, the status refers to the replication lag between the primary vttablet and the replica vttablet. In Vitess, data is always written to the primary vttablet first and then replicated to all replica vttablets. Output is sorted by tablet type, then replication position. Use ctrl-C to interrupt command and see partial result if needed. + +#### Example + +
ShardReplicationPositions <keyspace/shard>
+ +#### Arguments + +* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitespace, while the shard is typically identified by a string in the format <range start>-<range end>. + +#### Errors + +* the <keyspace/shard> argument is required for the <ShardReplicationPositions> command This error occurs if the command is not called with exactly one argument. + + +### ListShardTablets + +Lists all tablets in the specified shard. + +#### Example + +
ListShardTablets <keyspace/shard>
+ +#### Arguments + +* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitespace, while the shard is typically identified by a string in the format <range start>-<range end>. + +#### Errors + +* the <keyspace/shard> argument is required for the <ListShardTablets> command This error occurs if the command is not called with exactly one argument. + +### SetShardIsPrimaryServing + +``` +SetShardIsPrimaryServing +``` + +### SetShardTabletControl + +Sets the shardTabletControls or the tabletControls records for a shard and tablet type in the topology service. Only use this for an emergency fix or after a corrupted MoveTables action. Always specify the `denied_tables` flag for MoveTables, but never for Reshard operations. + +To set the `queryServiceDisabled` for the tablet, set `disable_query_service` to true; to unset the queryServiceDisabled provide `denied_tables` with an empty table set. Useful to fix vReplication operations gone wrong. These specific flags update the values for `shardTabletControls` in the topology path: `/keyspaces//SrvKeyspace`. + +{{< warning >}} +It is important to note here the queryServiceDisabled can not be removed by `disable_query_service=false` or the `remove` flags. Only `denied_tables=""` will remove this setting. +{{< /warning >}} + +To change the `deniedTables` list, specify the `denied_tables` parameter with the new list, this is useful to fix tables that are being errantly blocked. To remove the tabletControls for selected tables, use the `remove` flag. These specific flags update the values for `tabletControls` in the topology path: `/keyspaces//shards//Shard`. + +The `SetShardTabletControl` only updates the topology records for a given shard and type, you still need to run [RefreshStateByShard](../tablets#refreshstatebyshard) to inform the vttablets of the topology change. + +#### Examples + +
SetShardTabletControl -- [--cells=c1,c2,...] [--denied_tables=t1,t2,...] [--remove] [--disable_query_service] <keyspace/shard> <tablet type>
+ +**Disable serving of the listed tables for the selected keyspace/shard and tablet type:** + +
SetShardTabletControl -- [--denied_tables=t1,t2,...] <keyspace/shard> <tablet type>
+RefreshStateByShard <keyspace/shard>
+ +**Serve all tables for the selected keyspace/shard and tablet type:** + +
SetShardTabletControl -- --remove <keyspace/shard> <tablet type>
+RefreshStateByShard <keyspace/shard>
+ +**Disable serving for the selected keyspace/shard and tablet type:** + +
SetShardTabletControl -- --disable_query_service=true <keyspace/shard> <tablet type>
+RefreshStateByShard <keyspace/shard>
+ +**Enable serving for the selected keyspace/shard and tablet type:** + +
SetShardTabletControl -- --denied_tables="" <keyspace/shard> <tablet type>
+RefreshStateByShard <keyspace/shard>
+ +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- |:------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| denied_tables | string | Specifies a comma-separated list of tables to deny queries on. Each is either an exact match, or a regular expression of the form '/regexp/'. | +| cells | string | Specifies a comma-separated list of cells to update | +| disable_query_service | Boolean | Disables query service on the provided nodes. This flag requires 'denied_tables' and 'remove' to be unset, otherwise it's ignored. | +| remove | Boolean | Removes cells for MoveTables. | + + +#### Arguments + +* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitespace, while the shard is typically identified by a string in the format <range start>-<range end>. +* <tablet type> – Required. The vttablet's role. Valid values are: + + * backup – A replicated copy of data that is offline to queries other than for backup purposes + * batch – A replicated copy of data for OLAP load patterns (typically for MapReduce jobs) + * experimental – A replicated copy of data that is ready but not serving query traffic. The value indicates a special characteristic of the tablet that indicates the tablet should not be considered a potential primary. Vitess also does not worry about lag for experimental tablets when reparenting. + * primary – A primary copy of data + * master – Deprecated, same as primary + * rdonly – A replicated copy of data for OLAP load patterns + * replica – A replicated copy of data ready to be promoted to primary + * restore – A tablet that is restoring from a snapshot. Typically, this happens at tablet startup, then it goes to its right state. + * spare – A replicated copy of data that is ready but not serving query traffic. The data could be a potential primary tablet. + + +#### Errors + +* the <keyspace/shard> and <tablet type> arguments are both required for the <SetShardTabletControl> command This error occurs if the command is not called with exactly 2 arguments. + +### UpdateSrvKeyspacePartition + +``` +UpdateSrvKeyspacePartition -- [--cells=c1,c2,...] [--remove] +``` + +### SourceShardDelete + +Deletes the SourceShard record with the provided index. This is meant as an emergency cleanup function. It does not call RefreshState for the shard primary. + +#### Example + +
SourceShardDelete <keyspace/shard> <uid>
+ +#### Arguments + +* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitespace, while the shard is typically identified by a string in the format <range start>-<range end>. +* <uid> – Required. + +#### Errors + +* the <keyspace/shard> and <uid> arguments are both required for the <SourceShardDelete> command This error occurs if the command is not called with at least 2 arguments. + +### SourceShardAdd + +Adds the SourceShard record with the provided index. This is meant as an emergency function. It does not call RefreshState for the shard primary. + +#### Example + +
SourceShardAdd -- [--key_range=<keyrange>] [--tables=<table1,table2,...>] <keyspace/shard> <uid> <source keyspace/shard>
+ +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- | :--------- | +| key_range | string | Identifies the key range to use for the SourceShard | +| tables | string | Specifies a comma-separated list of tables to replicate. Each is either an exact match, or a regular expression of the form /regexp/ | + + +#### Arguments + +* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitespace, while the shard is typically identified by a string in the format <range start>-<range end>. +* <uid> – Required. +* <source keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitespace, while the shard is typically identified by a string in the format <range start>-<range end>. + +#### Errors + +* the <keyspace/shard>, <uid>, and <source keyspace/shard> arguments are all required for the <SourceShardAdd> command This error occurs if the command is not called with exactly 3 arguments. + +### ShardReplicationFix + +Walks through a ShardReplication object and fixes the first error that it encounters. + +#### Example + +
ShardReplicationFix <cell> <keyspace/shard>
+ +#### Arguments + +* <cell> – Required. A cell is a location for a service. Generally, a cell resides in only one cluster. In Vitess, the terms "cell" and "data center" are interchangeable. The argument value is a string that does not contain whitespace. +* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitespace, while the shard is typically identified by a string in the format <range start>-<range end>. + +#### Errors + +* the <cell> and <keyspace/shard> arguments are required for the ShardReplicationRemove command This error occurs if the command is not called with exactly 2 arguments. + +### WaitForFilteredReplication + +Blocks until the specified shard has caught up with the filtered replication of its source shard. + +#### Example + +
WaitForFilteredReplication -- [--max_delay <max_delay, default 30s>] <keyspace/shard>
+ +#### Arguments + +* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitespace, while the shard is typically identified by a string in the format <range start>-<range end>. + +#### Errors + +* the <keyspace/shard> argument is required for the <WaitForFilteredReplication> command This error occurs if the command is not called with exactly one argument. + +### RemoveShardCell + +Removes the cell from the shard's Cells list. + +#### Example + +
RemoveShardCell -- [--force] [--recursive] <keyspace/shard> <cell>
+ +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- | :--------- | +| force | Boolean | Proceeds even if the cell's topology service cannot be reached. The assumption is that you turned down the entire cell, and just need to update the global topo data. | +| recursive | Boolean | Also delete all tablets in that cell belonging to the specified shard. | + + +#### Arguments + +* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitespace, while the shard is typically identified by a string in the format <range start>-<range end>. +* <cell> – Required. A cell is a location for a service. Generally, a cell resides in only one cluster. In Vitess, the terms "cell" and "data center" are interchangeable. The argument value is a string that does not contain whitespace. + +#### Errors + +* the <keyspace/shard> and <cell> arguments are required for the <RemoveShardCell> command This error occurs if the command is not called with exactly 2 arguments. + +### DeleteShard + +Deletes the specified shard(s). In recursive mode, it also deletes all tablets belonging to the shard. Otherwise, there must be no tablets left in the shard. + +#### Example + +
DeleteShard -- [--recursive] [--even_if_serving] <keyspace/shard> ...
+ +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- | :--------- | +| even_if_serving | Boolean | Remove the shard even if it is serving. Use with caution. | +| recursive | Boolean | Also delete all tablets belonging to the shard. | + + +#### Arguments + +* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitespace, while the shard is typically identified by a string in the format <range start>-<range end>. To specify multiple values for this argument, separate individual values with a space. + +#### Errors + +* the <keyspace/shard> argument must be used to identify at least one keyspace and shard when calling the <DeleteShard> command This error occurs if the command is not called with at least one argument. + +### ListBackups + +Lists all the backups for a shard. + +#### Example + +
ListBackups <keyspace/shard>
+ +#### Errors + +* action <ListBackups> requires <keyspace/shard> This error occurs if the command is not called with exactly one argument. + +### BackupShard + +``` +BackupShard -- [--allow_primary=false] [--upgrade-safe=false] [--incremental-from-pos=] +``` + +### RemoveBackup + +Removes a backup from the BackupStorage. + +#### Example + +
RemoveBackup <keyspace/shard> <backup name>
+ +#### Arguments + +* <backup name> – Required. + +#### Errors + +* action <RemoveBackup> requires <keyspace/shard> <backup name> This error occurs if the command is not called with exactly 2 arguments. + +### InitShardPrimary + +This command has been deprecated. Please use PlannedReparentShard instead. + +Sets the initial primary for a shard. Will make all other tablets in the shard replicas of the provided primary. WARNING: this could cause data loss on an already replicating shard. + +#### Example + +
InitShardPrimary -- [--force] [--wait_replicas_timeout=<duration>] <keyspace/shard> <tablet alias>
+ +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- | :--------- | +| force | Boolean | will force the reparent even if the provided tablet is not writable or the shard primary | +| wait_replicas_timeout | Duration | time to wait for replicas to catch up in reparenting | + + +#### Arguments + +* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitespace, while the shard is typically identified by a string in the format <range start>-<range end>. +* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. + +#### Errors + +* action <InitShardPrimary> requires <keyspace/shard> <tablet alias> This error occurs if the command is not called with exactly 2 arguments. +* active reparent commands disabled (unset the --disable_active_reparents flag to enable) + +### PlannedReparentShard + +Reparents the shard to a new primary that can either be explicitly specified, +or chosen by Vitess. Both the existing primary and new primary need to be up +and running to use this command. If the existing primary for the shard is +down, you should use [EmergencyReparentShard](#emergencyreparentshard) instead. + +If the `new_primary` flag is not provided, Vitess will try to automatically +choose a replica to promote to primary, avoiding any replicas specified in +the `avoid_tablet` flag, if provided. Note that Vitess **will not consider +any replicas outside the cell the current primary is in for promotion**, +therefore you **must** pass the `new_primary` flag if you need to promote +a replica in a different cell from the primary. In the automated selection +mode Vitess will prefer the most advanced replica for promotion, to minimize +failover time. + +#### Example + +
PlannedReparentShard -- --keyspace_shard=<keyspace/shard> [--new_primary=<tablet alias>] [--avoid_tablet=<tablet alias>]
+ +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- | :--------- | +| avoid_tablet | string | alias of a tablet that should not be the primary, i.e. reparent to any replica other than this one | +| keyspace_shard | string | keyspace/shard of the shard that needs to be reparented | +| new_primary | string | alias of a tablet that should be the new primary | +| wait_replicas_timeout | Duration | time to wait for replicas to catch up in reparenting | + + +#### Errors + +* action <PlannedReparentShard> requires --keyspace_shard=<keyspace/shard> [--new_primary=<tablet alias>] [--avoid_tablet=<tablet alias>] This error occurs if the command is not called with exactly 0 arguments. +* active reparent commands disabled (unset the --disable_active_reparents flag to enable) +* cannot use legacy syntax and flags --<keyspace_shard> and --<new_primary> for action <PlannedReparentShard> at the same time + +### EmergencyReparentShard + +Reparents the shard to the new primary. Assumes the old primary is dead and not responding. + +#### Example + +
EmergencyReparentShard -- --keyspace_shard=<keyspace/shard> -new_primary=<tablet alias>
+ +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- | :--------- | +| keyspace_shard | string | keyspace/shard of the shard that needs to be reparented | +| new_primary | string | alias of a tablet that should be the new primary | +| wait_replicas_timeout | Duration | time to wait for replicas to catch up in reparenting | + + +#### Errors + +* action <EmergencyReparentShard> requires --keyspace_shard=<keyspace/shard> --new_primary=<tablet alias> This error occurs if the command is not called with exactly 0 arguments. +* active reparent commands disabled (unset the --disable_active_reparents flag to enable) +* cannot use legacy syntax and flag --<new_primary> for action <EmergencyReparentShard> at the same time + + +### TabletExternallyReparented + +Changes metadata in the topology service to acknowledge a shard primary change performed by an external tool. See [Reparenting](../../../../user-guides/configuration-advanced/reparenting/#external-reparenting) for more information. + +#### Example + +
TabletExternallyReparented <tablet alias>
+ +#### Arguments + +* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet to promote to primary. The argument value is in the format <cell name>-<uid>. + +#### Errors + +* the <tablet alias> argument is required for the <TabletExternallyReparented> command This error occurs if the command is not called with exactly one argument. + +### GenerateShardRanges + +Generates shard ranges assuming a keyspace with N shards. + +#### Example + +
GenerateShardRanges -- --num_shards=<N> 
+ +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- | :--------- | +| num_shards | int | Number of shards to generate shard ranges for. (default 2) | + +## See Also + +* [vtctl command index](../../vtctl) diff --git a/content/en/docs/21.0/reference/programs/vtctl/tablets.md b/content/en/docs/21.0/reference/programs/vtctl/tablets.md new file mode 100644 index 000000000..915415109 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctl/tablets.md @@ -0,0 +1,437 @@ +--- +title: vtctl Tablet Command Reference +series: vtctl +docs_nav_title: Tablets +--- + +The following `vtctl` commands are available for administering tablets. + +## Commands + +### InitTablet + +Deprecated. It is no longer necessary to run this command to initialize a tablet's record in the topology. Starting up a vttablet ensures that the tablet record is eventually published. + +#### Example + +
InitTablet -- [--allow_update] [--allow_different_shard] [--allow_master_override] [--parent] [--db_name_override=<db name>] [--hostname=<hostname>] [--mysql_port=<port>] [--port=<port>] [--grpc_port=<port>] -keyspace=<keyspace> --shard=<shard> <tablet alias> <tablet type>
+ +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- | :--------- | +| allow_master_override | Boolean | Use this flag to force initialization if a tablet is created as primary, and a primary for the keyspace/shard already exists. Use with caution. | +| allow_update | Boolean | Use this flag to force initialization if a tablet with the same name already exists. Use with caution. | +| db_name_override | string | Overrides the name of the database that the vttablet uses | +| grpc_port | Int | The gRPC port for the vttablet process | +| hostname | string | The server on which the tablet is running | +| keyspace | string | The keyspace to which this tablet belongs | +| mysql_host | string | The mysql host for the mysql server | +| mysql_port | Int | The mysql port for the mysql server | +| parent | Boolean | Creates the parent shard and keyspace if they don't yet exist | +| port | Int | The main port for the vttablet process | +| shard | string | The shard to which this tablet belongs | +| tags | string | A comma-separated list of key:value pairs that are used to tag the tablet | + + +#### Arguments + +* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. +* <tablet type> – Required. The vttablet's role. Valid values are: + + * backup – A replicated copy of data that is offline to queries other than for backup purposes + * batch – A replicated copy of data for OLAP load patterns (typically for MapReduce jobs) + * experimental – A replicated copy of data that is ready but not serving query traffic. The value indicates a special characteristic of the tablet that indicates the tablet should not be considered a potential primary. Vitess also does not worry about lag for experimental tablets when reparenting. + * primary – A primary copy of data + * master – Deprecated, same as primary + * rdonly – A replicated copy of data for OLAP load patterns + * replica – A replicated copy of data ready to be promoted to primary + * restore – A tablet that is restoring from a snapshot. Typically, this happens at tablet startup, then it goes to its right state. + * spare – A replicated copy of data that is ready but not serving query traffic. The data could be a potential primary tablet. + + +#### Errors + +* the <tablet alias> and <tablet type> arguments are both required for the <InitTablet> command This error occurs if the command is not called with exactly 2 arguments. + + +### GetTablet + +Outputs a JSON structure that contains information about the Tablet. + +#### Example + +
GetTablet <tablet alias>
+ +#### Arguments + +* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. + +#### Errors + +* the <tablet alias> argument is required for the <GetTablet> command This error occurs if the command is not called with exactly one argument. + + +### IgnoreHealthError + +Deprecated. + +### UpdateTabletAddrs + +Deprecated. Updates the IP address and port numbers of a tablet. + +#### Example + +
UpdateTabletAddrs -- [--hostname <hostname>] [--ip-addr <ip addr>] [--mysql-port <mysql port>] [--vt-port <vt port>] [--grpc-port <grpc port>] <tablet alias>
+ +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- | :--------- | +| grpc-port | Int | The gRPC port for the vttablet process | +| hostname | string | The fully qualified host name of the server on which the tablet is running. | +| mysql-port | Int | The mysql port for the mysql daemon | +| mysql_host | string | The mysql host for the mysql server | +| vt-port | Int | The main port for the vttablet process | + + +#### Arguments + +* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. + +#### Errors + +* the <tablet alias> argument is required for the <UpdateTabletAddrs> command This error occurs if the command is not called with exactly one argument. + +### DeleteTablet + +Deletes tablet(s) from the topology. + +#### Example + +
DeleteTablet -- [--allow_primary] <tablet alias> ...
+ +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- | :--------- | +| allow_primary | Boolean | Allows for the primary tablet of a shard to be deleted. Use with caution. | + + +#### Arguments + +* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. To specify multiple values for this argument, separate individual values with a space. + +#### Errors + +* the <tablet alias> argument must be used to specify at least one tablet when calling the <DeleteTablet> command This error occurs if the command is not called with at least one argument. + +### SetReadOnly + +Sets the tablet as read-only. + +#### Example + +
SetReadOnly <tablet alias>
+ +#### Arguments + +* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. + +#### Errors + +* the <tablet alias> argument is required for the <SetReadOnly> command This error occurs if the command is not called with exactly one argument. +* failed reading tablet %v: %v + +### SetReadWrite + +Sets the tablet as read-write. + +#### Example + +
SetReadWrite <tablet alias>
+ +#### Arguments + +* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. + +#### Errors + +* the <tablet alias> argument is required for the <SetReadWrite> command This error occurs if the command is not called with exactly one argument. +* failed reading tablet %v: %v + +### StartReplication + +Starts replication on the specified tablet. + +#### Example + +
StartReplication <tablet alias>
+ +#### Arguments + +* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. + +#### Errors + +* action <StartReplication> requires <tablet alias> This error occurs if the command is not called with exactly one argument. +* failed reading tablet %v: %v + +### StopReplication + +Stops replication on the specified tablet. + +#### Example + +
StopReplication <tablet alias>
+ +#### Arguments + +* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. + +#### Errors + +* action <StopReplication> requires <tablet alias> This error occurs if the command is not called with exactly one argument. +* failed reading tablet %v: %v + +### ChangeTabletType + +Changes the db type for the specified tablet, if possible. This command is used primarily to arrange replicas, and it will not convert a primary.

NOTE: This command automatically updates the serving graph.

+ +#### Example + +
ChangeTabletType -- [--dry-run] <tablet alias> <tablet type>
+ +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- | :--------- | +| dry-run | Boolean | Lists the proposed change without actually executing it | + + +#### Arguments + +* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. +* <tablet type> – Required. The vttablet's role. Valid values are: + + * backup – A replicated copy of data that is offline to queries other than for backup purposes + * batch – A replicated copy of data for OLAP load patterns (typically for MapReduce jobs) + * experimental – A replicated copy of data that is ready but not serving query traffic. The value indicates a special characteristic of the tablet that indicates the tablet should not be considered a potential primary. Vitess also does not worry about lag for experimental tablets when reparenting. + * primary – A primary copy of data + * master – Deprecated, same as primary + * rdonly – A replicated copy of data for OLAP load patterns + * replica – A replicated copy of data ready to be promoted to primary + * restore – A tablet that is restoring from a snapshot. Typically, this happens at tablet startup, then it goes to its right state. + * spare – A replicated copy of data that is ready but not serving query traffic. The data could be a potential primary tablet. + +#### Errors + +* the <tablet alias> and <db type> arguments are required for the <ChangeTabletType> command This error occurs if the command is not called with exactly 2 arguments. +* failed reading tablet %v: %v +* invalid type transition %v: %v --> %v + +### Ping + +hecks that the specified tablet is awake and responding to RPCs. This command can be blocked by other in-flight operations. + +#### Example + +
Ping <tablet alias>
+ +#### Arguments + +* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. + +#### Errors + +* the <tablet alias> argument is required for the <Ping> command This error occurs if the command is not called with exactly one argument. + +### RefreshState + +Reloads the tablet record on the specified tablet. + +#### Example + +
RefreshState <tablet alias>
+ +#### Arguments + +* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. + +#### Errors + +* the <tablet alias> argument is required for the <RefreshState> command This error occurs if the command is not called with exactly one argument. + +### RefreshStateByShard + +Runs 'RefreshState' on all tablets in the given shard. + +#### Example + +
RefreshStateByShard -- [--cells=c1,c2,...] <keyspace/shard>
+ +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- | :--------- | +| cells | string | Specifies a comma-separated list of cells whose tablets are included. If empty, all cells are considered. | + + +#### Arguments + +* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitespace, while the shard is typically identified by a string in the format <range start>-<range end>. + +#### Errors + +* the <keyspace/shard> argument is required for the <RefreshStateByShard> command This error occurs if the command is not called with exactly one argument. + +### RunHealthCheck + +Runs a health check on a remote tablet. + +#### Example + +
RunHealthCheck <tablet alias>
+ +#### Arguments + +* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. + +#### Errors + +* the <tablet alias> argument is required for the <RunHealthCheck> command This error occurs if the command is not called with exactly one argument. +* this only reports an error if a "healthcheck" RPC call to a vttablet fails. It is only useful as a connectivity and vttablet liveness check. + +### Sleep + +Blocks the action queue on the specified tablet for the specified amount of time. This is typically used for testing. + +#### Example + +
Sleep <tablet alias> <duration>
+ +#### Arguments + +* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. +* <duration> – Required. The amount of time that the action queue should be blocked. The value is a string that contains a possibly signed sequence of decimal numbers, each with optional fraction and a unit suffix, such as "300ms" or "1h45m". See the definition of the Go language's ParseDuration function for more details. Note that, in practice, the value should be a positively signed value. + +#### Errors + +* the <tablet alias> and <duration> arguments are required for the <Sleep> command This error occurs if the command is not called with exactly 2 arguments. + +### ExecuteHook + +Runs the specified hook on the given tablet. A hook is a script that resides in the $VTROOT/vthook directory. You can put any script into that directory and use this command to run that script.

For this command, the param=value arguments are parameters that the command passes to the specified hook. + +#### Example + +
ExecuteHook <tablet alias> <hook name> [<param1=value1> <param2=value2> ...]
+ +#### Arguments + +* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. +* <hook name> – Required. +* <param1=value1> <param2=value2> . – Optional. + +#### Errors + +* the <tablet alias> and <hook name> arguments are required for the <ExecuteHook> command This error occurs if the command is not called with at least 2 arguments. + +### ExecuteFetchAsApp + +``` +ExecuteFetchAsApp -- [--max_rows=10000] [--json] [--use_pool] +``` + +### ExecuteFetchAsDba + +Runs the given SQL command as a DBA on the remote tablet. + +#### Example + +
ExecuteFetchAsDba -- [--max_rows=10000] [--disable_binlogs] [--json] <tablet alias> <sql command>
+ +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- | :--------- | +| disable_binlogs | Boolean | Disables writing to binlogs during the query | +| json | Boolean | Output JSON instead of human-readable table | +| max_rows | Int | Specifies the maximum number of rows to allow in reset | +| reload_schema | Boolean | Indicates whether the tablet schema will be reloaded after executing the SQL command. The default value is false, which indicates that the tablet schema will not be reloaded. | + + +#### Arguments + +* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. +* <sql command> – Required. + +#### Errors + +* the <tablet alias> and <sql command> arguments are required for the <ExecuteFetchAsDba> command This error occurs if the command is not called with exactly 2 arguments. + +### VReplicationExec + +``` +VReplicationExec -- [--json] +``` + +### Backup + +Stops mysqld and uses the [BackupEngine](../../../../user-guides/operating-vitess/backup-and-restore/backup-and-restore/#backup-engines) to generate a new backup and uses the [BackupStorage](../../../../user-guides/operating-vitess/backup-and-restore/backup-and-restore/#backup-storage-services) service to store the results. This function also remembers if the tablet was replicating so that it can restore the same state after the backup completes. + +#### Example + +
Backup -- [--concurrency=4] [--upgrade-safe=false] <tablet alias>
+ +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- | :--------- | +| concurrency | Int | Specifies the number of compression/checksum jobs to run simultaneously | +| upgrade-safe | Boolean | Whether to use innodb_fast_shutdown=0 for the backup so it is safe to use for MySQL upgrades | + +#### Arguments + +* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. + +#### Errors + +* the <Backup> command requires the <tablet alias> argument This error occurs if the command is not called with exactly one argument. + +### RestoreFromBackup + +Stops mysqld and restores the data from the latest backup. + +#### Example + +
RestoreFromBackup -- [--backup_timestamp=2021-09-24.021828] <tablet alias>
+ +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- | :--------- | +| backup_timestamp | String | Use the latest backup at or before this time -- in `yyyy-MM-dd.HHmmss` format -- rather than using the most recent backup (Vitess 12.0+) | + +#### Errors + +* the <RestoreFromBackup> command requires the <tablet alias> argument This error occurs if the command is not called with exactly one argument. + + +### ReparentTablet + +Reparent a tablet to the current primary in the shard. This only works if the current replication position matches the last known reparent action. + +#### Example + +
ReparentTablet <tablet alias>
+ +#### Errors + +* action <ReparentTablet> requires <tablet alias> This error occurs if the command is not called with exactly one argument. +* active reparent commands disabled (unset the -disable_active_reparents flag to enable) + + +## See Also + +* [vtctl command index](../../vtctl) diff --git a/content/en/docs/21.0/reference/programs/vtctl/throttler.md b/content/en/docs/21.0/reference/programs/vtctl/throttler.md new file mode 100644 index 000000000..49cd192d9 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctl/throttler.md @@ -0,0 +1,52 @@ +--- +title: vtctl Throttler Command Reference +series: vtctl +docs_nav_title: Throttler +--- + +The following `vtctl` commands are available for controlling the tablet throttler + +## Commands + +### UpdateThrottlerConfig + +Update tablet throttler configuration for all tablets of a given keyspace. + +#### Usage + +
UpdateThrottlerConfig -- [--enable|--disable] [--threshold=<float64>] [--custom-query=<query>] [--check-as-check-self|--check-as-check-shard] [--throttle-app|unthrottle-app=<name>] [--throttle-app-ratio=<float, range [0..1]>] [--throttle-app-duration=<duration>] <keyspace>
+ +#### Examples + +```UpdateThrottlerConfig -- --enable --threshold "3.0" commerce``` + +```UpdateThrottlerConfig -- --disable commerce``` + +```UpdateThrottlerConfig -- --throttle-app="vreplication" --throttle-app-ratio=0.5 --throttle-app-duration="30m" commerce``` + +```UpdateThrottlerConfig -- --unthrottle-app="vreplication" commerce``` + + +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- | :--------- | +| `enable` | Boolean | enable the throttler. Once enabled, the throttler probes the MySQL servers for metrics, and responds to `check` requests according to those metrics | +| `disable` | Boolean | disables the throttler. Once disabled, the throttler responds to all `check` requests with `200 OK`. It will not probe the MySQL servers for metrics | +| `threshold` | Double | set a new threshold. Unless specified otherwise, the throttler measures replication lag by querying for heartbeat values, and the threshold stands for _seconds_ of lag (i.e. the value `2.5` stands for two and a half seconds) | +| `custom-query` | String | override the default replication lag measurement, and suggest a different query. Valid values are:
- _empty_, meaning the throttler should use the default replication lag query
- A `SELECT` that returns a single line, single column, floating point value
- A `SHOW GLOBAL STATUS|VARIABLES LIKE '...'`, for example `show global status like 'threads_running'` | +| `check-as-check-shard` | Boolean | this is the default behavior. A `/throttler/check` request checks the shard health. When using the default replication lag query, this is the desired check: the primary tablet's throttler responds by evaluating the overall lag throughout the shard/replicas | +| `check-as-check-self` | Boolean | override default behavior, and this can be useful when a `--custom-query` is set. A `/throttler/check` request will only consider the tablet's own metrics, and not the overall shard metrics | + + +#### Arguments + +* <keyspace> – Required. The keyspace for which to apply the throttler configuration. All tablets in all shards and cells assigned to this keyspace are affected. + +#### Errors + +Any error transporting the configuration to a cell's local topo server. + +## See Also + +* [vtctl command index](../../vtctl) diff --git a/content/en/docs/21.0/reference/programs/vtctl/topo.md b/content/en/docs/21.0/reference/programs/vtctl/topo.md new file mode 100644 index 000000000..b6f8a69c4 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctl/topo.md @@ -0,0 +1,69 @@ +--- +title: vtctl Topo Command Reference +series: vtctl +docs_nav_title: Topology Service +--- + +The following `vtctl` commands are available for administering Topology Services. + +## Commands + +### TopoCat + +Retrieves the file(s) at <path> from the topo service, and displays it. It can resolve wildcards, and decode the proto-encoded data. + +#### Example + +
TopoCat -- [--cell <cell>] [--decode_proto] [--long] <path> [<path>...]
+ +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- |:----------------------------------------------------------------| +| cell | string | topology cell to cat the file from. Defaults to global cell. | +| decode_proto | Boolean | decode proto files and display them as text. Defaults to false. | +| decode_proto_json | Boolean | decode proto files and display them as json. Defaults to false. | +| long | Boolean | long listing. Defaults to false. | + + +#### Arguments + +* <cell> – Required. A cell is a location for a service. Generally, a cell resides in only one cluster. In Vitess, the terms "cell" and "data center" are interchangeable. The argument value is a string that does not contain whitespace. +* <path> – Required. +* <path>. – Optional. + +#### Errors + +* <TopoCat>: no path specified. This error occurs if the command is not called with at least one argument. +* <TopoCat>: invalid wildcards. If you send paths that don't contain any wildcard and don't exist. +* <TopoCat>: some paths had errors. If there is an error getting node data for given paths. + +### TopoCp + +Copy data at given path from topo service to local file or vice versa. + +#### Example + +
TopoCp -- [--cell <cell>] [--to_topo] <src> <dst> 
+ +#### Flags + +| Name | Type | Definition | +| :-------- | :--------- |:------------------------------------------------| +| cell | string | topology cell to use for the copy. Defaults to global cell. | +| to_topo | Boolean | copies from local server to topo instead (reverse direction). Defaults to false. | + +#### Arguments + +* <cell> – Required. A cell is a location for a service. Generally, a cell resides in only one cluster. In Vitess, the terms "cell" and "data center" are interchangeable. The argument value is a string that does not contain whitespace. +* <src> – Required. Source from which data needs to be copied. It can be local file or some path in topo service, depedning on if `to_topo` is specified. +* <dst>. – Required. Destination to which data will be copied. It can be local file or some path in topo service, depedning on if `to_topo` is specified. + +#### Errors + +* <TopoCp>: need source and destination. This error occurs if the command is not called with proper `src` and `dst`. + + +## See Also + +* [vtctl command index](../../vtctl) diff --git a/content/en/docs/21.0/reference/programs/vtctld/_index.md b/content/en/docs/21.0/reference/programs/vtctld/_index.md new file mode 100644 index 000000000..f2eb76efd --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctld/_index.md @@ -0,0 +1,200 @@ +--- +title: vtctld +series: vtctld +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## vtctld + +The Vitess cluster management daemon. + +### Synopsis + +vtctld provides web and gRPC interfaces to manage a single Vitess cluster. +It is usually the first Vitess component to be started after a valid global topology service has been created. + +For the last several releases, vtctld has been transitioning to a newer gRPC service for well-typed cluster management requests. +This is **required** to use programs such as vtadmin and vtctldclient, and The old API and service are deprecated and will be removed in a future release. +To enable this newer service, include "grpc-vtctld" in the --service_map argument. +This is demonstrated in the example usage below. + +``` +vtctld [flags] +``` + +### Examples + +``` +vtctld \ + --topo_implementation etcd2 \ + --topo_global_server_address localhost:2379 \ + --topo_global_root /vitess/ \ + --service_map 'grpc-vtctl,grpc-vtctld' \ + --backup_storage_implementation file \ + --file_backup_storage_root $VTDATAROOT/backups \ + --port 15000 \ + --grpc_port 15999 +``` + +### Options + +``` + --action_timeout duration time to wait for an action before resorting to force (default 1m0s) + --alsologtostderr log to standard error as well as files + --azblob_backup_account_key_file string Path to a file containing the Azure Storage account key; if this flag is unset, the environment variable VT_AZBLOB_ACCOUNT_KEY will be used as the key itself (NOT a file path). + --azblob_backup_account_name string Azure Storage Account name for backups; if this flag is unset, the environment variable VT_AZBLOB_ACCOUNT_NAME will be used. + --azblob_backup_buffer_size int The memory buffer size to use in bytes, per file or stripe, when streaming to Azure Blob Service. (default 104857600) + --azblob_backup_container_name string Azure Blob Container Name. + --azblob_backup_parallelism int Azure Blob operation parallelism (requires extra memory when increased -- a multiple of azblob_backup_buffer_size). (default 1) + --azblob_backup_storage_root string Root prefix for all backup-related Azure Blobs; this should exclude both initial and trailing '/' (e.g. just 'a/b' not '/a/b/'). + --backup_engine_implementation string Specifies which implementation to use for creating new backups (builtin or xtrabackup). Restores will always be done with whichever engine created a given backup. (default "builtin") + --backup_storage_block_size int if backup_storage_compress is true, backup_storage_block_size sets the byte size for each block while compressing (default is 250000). (default 250000) + --backup_storage_compress if set, the backup files will be compressed. (default true) + --backup_storage_implementation string Which backup storage implementation to use for creating and restoring backups. + --backup_storage_number_blocks int if backup_storage_compress is true, backup_storage_number_blocks sets the number of blocks that can be processed, in parallel, before the writer blocks, during compression (default is 2). It should be equal to the number of CPUs available for compression. (default 2) + --bind-address string Bind address for the server. If empty, the server will listen on all available unicast and anycast IP addresses of the local system. + --builtinbackup-file-read-buffer-size uint read files using an IO buffer of this many bytes. Golang defaults are used when set to 0. + --builtinbackup-file-write-buffer-size uint write files using an IO buffer of this many bytes. Golang defaults are used when set to 0. (default 2097152) + --builtinbackup-incremental-restore-path string the directory where incremental restore files, namely binlog files, are extracted to. In k8s environments, this should be set to a directory that is shared between the vttablet and mysqld pods. The path should exist. When empty, the default OS temp dir is assumed. + --builtinbackup_mysqld_timeout duration how long to wait for mysqld to shutdown at the start of the backup. (default 10m0s) + --builtinbackup_progress duration how often to send progress updates when backing up large files. (default 5s) + --catch-sigpipe catch and ignore SIGPIPE on stdout and stderr if specified + --cell string cell to use + --ceph_backup_storage_config string Path to JSON config file for ceph backup storage. (default "ceph_backup_config.json") + --config-file string Full path of the config file (with extension) to use. If set, --config-path, --config-type, and --config-name are ignored. + --config-file-not-found-handling ConfigFileNotFoundHandling Behavior when a config file is not found. (Options: error, exit, ignore, warn) (default warn) + --config-name string Name of the config file (without extension) to search for. (default "vtconfig") + --config-path strings Paths to search for config files in. (default []) + --config-persistence-min-interval duration minimum interval between persisting dynamic config changes back to disk (if no change has occurred, nothing is done). (default 1s) + --config-type string Config file type (omit to infer config type from file extension). + --consul_auth_static_file string JSON File to read the topos/tokens from. + --datadog-agent-host string host to send spans to. if empty, no tracing will be done + --datadog-agent-port string port to send spans to. if empty, no tracing will be done + --disable_active_reparents if set, do not allow active reparents. Use this to protect a cluster using external reparents. + --emit_stats If set, emit stats to push-based monitoring and stats backends + --file_backup_storage_root string Root directory for the file backup storage. + --gcs_backup_storage_bucket string Google Cloud Storage bucket to use for backups. + --gcs_backup_storage_root string Root prefix for all backup-related object names. + --grpc_auth_mode string Which auth plugin implementation to use (eg: static) + --grpc_auth_mtls_allowed_substrings string List of substrings of at least one of the client certificate names (separated by colon). + --grpc_auth_static_client_creds string When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server. + --grpc_auth_static_password_file string JSON File to read the users/passwords from. + --grpc_bind_address string Bind address for gRPC calls. If empty, listen on all addresses. + --grpc_ca string server CA to use for gRPC connections, requires TLS, and enforces client certificate check + --grpc_cert string server certificate to use for gRPC connections, requires grpc_key, enables TLS + --grpc_compression string Which protocol to use for compressing gRPC. Default: nothing. Supported: snappy + --grpc_crl string path to a certificate revocation list in PEM format, client certificates will be further verified against this file during TLS handshake + --grpc_enable_optional_tls enable optional TLS mode when a server accepts both TLS and plain-text connections on the same port + --grpc_enable_tracing Enable gRPC tracing. + --grpc_initial_conn_window_size int gRPC initial connection window size + --grpc_initial_window_size int gRPC initial window size + --grpc_keepalive_time duration After a duration of this time, if the client doesn't see any activity, it pings the server to see if the transport is still alive. (default 10s) + --grpc_keepalive_timeout duration After having pinged for keepalive check, the client waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) + --grpc_key string server private key to use for gRPC connections, requires grpc_cert, enables TLS + --grpc_max_connection_age duration Maximum age of a client connection before GoAway is sent. (default 2562047h47m16.854775807s) + --grpc_max_connection_age_grace duration Additional grace period after grpc_max_connection_age, after which connections are forcibly closed. (default 2562047h47m16.854775807s) + --grpc_max_message_size int Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'. (default 16777216) + --grpc_port int Port to listen on for gRPC calls. If zero, do not listen. + --grpc_prometheus Enable gRPC monitoring with Prometheus. + --grpc_server_ca string path to server CA in PEM format, which will be combine with server cert, return full certificate chain to clients + --grpc_server_initial_conn_window_size int gRPC server initial connection window size + --grpc_server_initial_window_size int gRPC server initial window size + --grpc_server_keepalive_enforcement_policy_min_time duration gRPC server minimum keepalive time (default 10s) + --grpc_server_keepalive_enforcement_policy_permit_without_stream gRPC server permit client keepalive pings even when there are no active streams (RPCs) + --grpc_server_keepalive_time duration After a duration of this time, if the server doesn't see any activity, it pings the client to see if the transport is still alive. (default 10s) + --grpc_server_keepalive_timeout duration After having pinged for keepalive check, the server waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) + --healthcheck-dial-concurrency int Maximum concurrency of new healthcheck connections. This should be less than the golang max thread limit of 10000. (default 1024) + -h, --help help for vtctld + --jaeger-agent-host string host and port to send spans to. if empty, no tracing will be done + --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --lameduck-period duration keep running at least this long after SIGTERM before stopping (default 50ms) + --lock-timeout duration Maximum time for which a shard/keyspace lock can be acquired for (default 45s) + --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace + --log_dir string If non-empty, write log files in this directory + --log_err_stacks log stack traces for errors + --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) + --logtostderr log to standard error instead of files + --max-stack-size int configure the maximum stack size in bytes (default 67108864) + --mysql_server_version string MySQL server version to advertise. (default "8.0.30-Vitess") + --onclose_timeout duration wait no more than this for OnClose handlers before stopping (default 10s) + --onterm_timeout duration wait no more than this for OnTermSync handlers before stopping (default 10s) + --opentsdb_uri string URI of opentsdb /api/put method + --pid_file string If set, the process will write its pid to the named file, and delete it on graceful shutdown. + --port int port for the server + --pprof strings enable profiling + --pprof-http enable pprof http endpoints + --proxy_tablets Setting this true will make vtctld proxy the tablet status instead of redirecting to them + --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) + --remote_operation_timeout duration time to wait for a remote operation (default 15s) + --s3_backup_aws_endpoint string endpoint of the S3 backend (region must be provided). + --s3_backup_aws_region string AWS region to use. (default "us-east-1") + --s3_backup_aws_retries int AWS request retries. (default -1) + --s3_backup_force_path_style force the s3 path style. + --s3_backup_log_level string determine the S3 loglevel to use from LogOff, LogDebug, LogDebugWithSigning, LogDebugWithHTTPBody, LogDebugWithRequestRetries, LogDebugWithRequestErrors. (default "LogOff") + --s3_backup_server_side_encryption string server-side encryption algorithm (e.g., AES256, aws:kms, sse_c:/path/to/key/file). + --s3_backup_storage_bucket string S3 bucket to use for backups. + --s3_backup_storage_root string root prefix for all backup-related object names. + --s3_backup_tls_skip_verify_cert skip the 'certificate is valid' check for SSL connections. + --schema_change_check_interval duration How often the schema change dir is checked for schema changes. This value must be positive; if zero or lower, the default of 1m is used. (default 1m0s) + --schema_change_controller string Schema change controller is responsible for finding schema changes and responding to schema change events. + --schema_change_dir string Directory containing schema changes for all keyspaces. Each keyspace has its own directory, and schema changes are expected to live in '$KEYSPACE/input' dir. (e.g. 'test_keyspace/input/*sql'). Each sql file represents a schema change. + --schema_change_replicas_timeout duration How long to wait for replicas to receive a schema change. (default 10s) + --schema_change_user string The user who schema changes are submitted on behalf of. + --security_policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) + --service_map strings comma separated list of services to enable (or disable if prefixed with '-') Example: grpc-queryservice + --sql-max-length-errors int truncate queries in error logs to the given length (default unlimited) + --sql-max-length-ui int truncate queries in debug UIs to the given length (default 512) (default 512) + --stats_backend string The name of the registered push-based monitoring/stats backend to use + --stats_combine_dimensions string List of dimensions to be combined into a single "all" value in exported stats vars + --stats_common_tags strings Comma-separated list of common tags for the stats backend. It provides both label and values. Example: label1:value1,label2:value2 + --stats_drop_variables string Variables to be dropped from the list of exported variables. + --stats_emit_period duration Interval between emitting stats to all registered backends (default 1m0s) + --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) + --table-refresh-interval int interval in milliseconds to refresh tables in status page with refreshRequired class + --tablet_dir string The directory within the vtdataroot to store vttablet/mysql files. Defaults to being generated by the tablet uid. + --tablet_grpc_ca string the server ca to use to validate servers when connecting + --tablet_grpc_cert string the cert to use to connect + --tablet_grpc_crl string the server crl to use to validate server certificates when connecting + --tablet_grpc_key string the key to use to connect + --tablet_grpc_server_name string the server name to use to validate server certificate + --tablet_health_keep_alive duration close streaming tablet health connection if there are no requests for this long (default 5m0s) + --tablet_manager_grpc_ca string the server ca to use to validate servers when connecting + --tablet_manager_grpc_cert string the cert to use to connect + --tablet_manager_grpc_concurrency int concurrency to use to talk to a vttablet server for performance-sensitive RPCs (like ExecuteFetchAs{Dba,App}, CheckThrottler and FullStatus) (default 8) + --tablet_manager_grpc_connpool_size int number of tablets to keep tmclient connections open to (default 100) + --tablet_manager_grpc_crl string the server crl to use to validate server certificates when connecting + --tablet_manager_grpc_key string the key to use to connect + --tablet_manager_grpc_server_name string the server name to use to validate server certificate + --tablet_manager_protocol string Protocol to use to make tabletmanager RPCs to vttablets. (default "grpc") + --tablet_protocol string Protocol to use to make queryservice RPCs to vttablets. (default "grpc") + --tablet_refresh_interval duration Tablet refresh interval. (default 1m0s) + --tablet_refresh_known_tablets Whether to reload the tablet's address/port map from topo in case they change. (default true) + --tablet_url_template string Format string describing debug tablet url formatting. See getTabletDebugURL() for how to customize this. (default "http://{{.GetTabletHostPort}}") + --topo_consul_lock_delay duration LockDelay for consul session. (default 15s) + --topo_consul_lock_session_checks string List of checks for consul session. (default "serfHealth") + --topo_consul_lock_session_ttl string TTL for consul session. + --topo_consul_watch_poll_duration duration time of the long poll for watch queries. (default 30s) + --topo_etcd_lease_ttl int Lease TTL for locks and leader election. The client will use KeepAlive to keep the lease going. (default 30) + --topo_etcd_tls_ca string path to the ca to use to validate the server cert when connecting to the etcd topo server + --topo_etcd_tls_cert string path to the client cert to use to connect to the etcd topo server, requires topo_etcd_tls_key, enables TLS + --topo_etcd_tls_key string path to the client key to use to connect to the etcd topo server, enables TLS + --topo_global_root string the path of the global topology data in the global topology server + --topo_global_server_address string the address of the global topology server + --topo_implementation string the topology implementation to use + --topo_read_concurrency int Concurrency of topo reads. (default 32) + --topo_zk_auth_file string auth to use when connecting to the zk topo server, file contents should be :, e.g., digest:user:pass + --topo_zk_base_timeout duration zk base timeout (see zk.Connect) (default 30s) + --topo_zk_max_concurrency int maximum number of pending requests to send to a Zookeeper server. (default 64) + --topo_zk_tls_ca string the server ca to use to validate servers when connecting to the zk topo server + --topo_zk_tls_cert string the cert to use to connect to the zk topo server, requires topo_zk_tls_key, enables TLS + --topo_zk_tls_key string the key to use to connect to the zk topo server, enables TLS + --tracer string tracing service to use (default "noop") + --tracing-enable-logging whether to enable logging in the tracing service + --tracing-sampling-rate float sampling rate for the probabilistic jaeger sampler (default 0.1) + --tracing-sampling-type string sampling strategy to use for jaeger. possible values are 'const', 'probabilistic', 'rateLimiting', or 'remote' (default "const") + --v Level log level for V logs + -v, --version print binary version + --vmodule vModuleFlag comma-separated list of pattern=N settings for file-filtered logging + --vtctld_sanitize_log_messages When true, vtctld sanitizes logging. +``` + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/_index.md b/content/en/docs/21.0/reference/programs/vtctldclient/_index.md new file mode 100644 index 000000000..9c006481e --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/_index.md @@ -0,0 +1,131 @@ +--- +title: vtctldclient +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient + +Executes a cluster management command on the remote vtctld server. + +### Synopsis + +Executes a cluster management command on the remote vtctld server. +If there are no running vtctld servers -- for example when bootstrapping +a new Vitess cluster -- you can specify a --server value of 'internal'. +When doing so, you would use the --topo* flags so that the client can +connect directly to the topo server(s). + +``` +vtctldclient [flags] +``` + +### Options + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + -h, --help help for vtctldclient + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient AddCellInfo](./vtctldclient_addcellinfo/) - Registers a local topology service in a new cell by creating the CellInfo. +* [vtctldclient AddCellsAlias](./vtctldclient_addcellsalias/) - Defines a group of cells that can be referenced by a single name (the alias). +* [vtctldclient ApplyKeyspaceRoutingRules](./vtctldclient_applykeyspaceroutingrules/) - Applies the provided keyspace routing rules. +* [vtctldclient ApplyRoutingRules](./vtctldclient_applyroutingrules/) - Applies the VSchema routing rules. +* [vtctldclient ApplySchema](./vtctldclient_applyschema/) - Applies the schema change to the specified keyspace on every primary, running in parallel on all shards. The changes are then propagated to replicas via replication. +* [vtctldclient ApplyShardRoutingRules](./vtctldclient_applyshardroutingrules/) - Applies the provided shard routing rules. +* [vtctldclient ApplyVSchema](./vtctldclient_applyvschema/) - Applies the VTGate routing schema to the provided keyspace. Shows the result after application. +* [vtctldclient Backup](./vtctldclient_backup/) - Uses the BackupStorage service on the given tablet to create and store a new backup. +* [vtctldclient BackupShard](./vtctldclient_backupshard/) - Finds the most up-to-date REPLICA, RDONLY, or SPARE tablet in the given shard and uses the BackupStorage service on that tablet to create and store a new backup. +* [vtctldclient ChangeTabletType](./vtctldclient_changetablettype/) - Changes the db type for the specified tablet, if possible. +* [vtctldclient CreateKeyspace](./vtctldclient_createkeyspace/) - Creates the specified keyspace in the topology. +* [vtctldclient CreateShard](./vtctldclient_createshard/) - Creates the specified shard in the topology. +* [vtctldclient DeleteCellInfo](./vtctldclient_deletecellinfo/) - Deletes the CellInfo for the provided cell. +* [vtctldclient DeleteCellsAlias](./vtctldclient_deletecellsalias/) - Deletes the CellsAlias for the provided alias. +* [vtctldclient DeleteKeyspace](./vtctldclient_deletekeyspace/) - Deletes the specified keyspace from the topology. +* [vtctldclient DeleteShards](./vtctldclient_deleteshards/) - Deletes the specified shards from the topology. +* [vtctldclient DeleteSrvVSchema](./vtctldclient_deletesrvvschema/) - Deletes the SrvVSchema object in the given cell. +* [vtctldclient DeleteTablets](./vtctldclient_deletetablets/) - Deletes tablet(s) from the topology. +* [vtctldclient EmergencyReparentShard](./vtctldclient_emergencyreparentshard/) - Reparents the shard to the new primary. Assumes the old primary is dead and not responding. +* [vtctldclient ExecuteFetchAsApp](./vtctldclient_executefetchasapp/) - Executes the given query as the App user on the remote tablet. +* [vtctldclient ExecuteFetchAsDBA](./vtctldclient_executefetchasdba/) - Executes the given query as the DBA user on the remote tablet. +* [vtctldclient ExecuteHook](./vtctldclient_executehook/) - Runs the specified hook on the given tablet. +* [vtctldclient ExecuteMultiFetchAsDBA](./vtctldclient_executemultifetchasdba/) - Executes given multiple queries as the DBA user on the remote tablet. +* [vtctldclient FindAllShardsInKeyspace](./vtctldclient_findallshardsinkeyspace/) - Returns a map of shard names to shard references for a given keyspace. +* [vtctldclient GenerateShardRanges](./vtctldclient_generateshardranges/) - Print a set of shard ranges assuming a keyspace with N shards. +* [vtctldclient GetBackups](./vtctldclient_getbackups/) - Lists backups for the given shard. +* [vtctldclient GetCellInfo](./vtctldclient_getcellinfo/) - Gets the CellInfo object for the given cell. +* [vtctldclient GetCellInfoNames](./vtctldclient_getcellinfonames/) - Lists the names of all cells in the cluster. +* [vtctldclient GetCellsAliases](./vtctldclient_getcellsaliases/) - Gets all CellsAlias objects in the cluster. +* [vtctldclient GetFullStatus](./vtctldclient_getfullstatus/) - Outputs a JSON structure that contains full status of MySQL including the replication information, semi-sync information, GTID information among others. +* [vtctldclient GetKeyspace](./vtctldclient_getkeyspace/) - Returns information about the given keyspace from the topology. +* [vtctldclient GetKeyspaceRoutingRules](./vtctldclient_getkeyspaceroutingrules/) - Displays the currently active keyspace routing rules. +* [vtctldclient GetKeyspaces](./vtctldclient_getkeyspaces/) - Returns information about every keyspace in the topology. +* [vtctldclient GetPermissions](./vtctldclient_getpermissions/) - Displays the permissions for a tablet. +* [vtctldclient GetRoutingRules](./vtctldclient_getroutingrules/) - Displays the VSchema routing rules. +* [vtctldclient GetSchema](./vtctldclient_getschema/) - Displays the full schema for a tablet, optionally restricted to the specified tables/views. +* [vtctldclient GetShard](./vtctldclient_getshard/) - Returns information about a shard in the topology. +* [vtctldclient GetShardReplication](./vtctldclient_getshardreplication/) - Returns information about the replication relationships for a shard in the given cell(s). +* [vtctldclient GetShardRoutingRules](./vtctldclient_getshardroutingrules/) - Displays the currently active shard routing rules as a JSON document. +* [vtctldclient GetSrvKeyspaceNames](./vtctldclient_getsrvkeyspacenames/) - Outputs a JSON mapping of cell=>keyspace names served in that cell. Omit to query all cells. +* [vtctldclient GetSrvKeyspaces](./vtctldclient_getsrvkeyspaces/) - Returns the SrvKeyspaces for the given keyspace in one or more cells. +* [vtctldclient GetSrvVSchema](./vtctldclient_getsrvvschema/) - Returns the SrvVSchema for the given cell. +* [vtctldclient GetSrvVSchemas](./vtctldclient_getsrvvschemas/) - Returns the SrvVSchema for all cells, optionally filtered by the given cells. +* [vtctldclient GetTablet](./vtctldclient_gettablet/) - Outputs a JSON structure that contains information about the tablet. +* [vtctldclient GetTabletVersion](./vtctldclient_gettabletversion/) - Print the version of a tablet from its debug vars. +* [vtctldclient GetTablets](./vtctldclient_gettablets/) - Looks up tablets according to filter criteria. +* [vtctldclient GetTopologyPath](./vtctldclient_gettopologypath/) - Gets the value associated with the particular path (key) in the topology server. +* [vtctldclient GetVSchema](./vtctldclient_getvschema/) - Prints a JSON representation of a keyspace's topo record. +* [vtctldclient GetWorkflows](./vtctldclient_getworkflows/) - Gets all vreplication workflows (Reshard, MoveTables, etc) in the given keyspace. +* [vtctldclient LegacyVtctlCommand](./vtctldclient_legacyvtctlcommand/) - Invoke a legacy vtctlclient command. Flag parsing is best effort. +* [vtctldclient LookupVindex](./vtctldclient_lookupvindex/) - Perform commands related to creating, backfilling, and externalizing Lookup Vindexes using VReplication workflows. +* [vtctldclient Materialize](./vtctldclient_materialize/) - Perform commands related to materializing query results from the source keyspace into tables in the target keyspace. +* [vtctldclient Migrate](./vtctldclient_migrate/) - Migrate is used to import data from an external cluster into the current cluster. +* [vtctldclient Mount](./vtctldclient_mount/) - Mount is used to link an external Vitess cluster in order to migrate data from it. +* [vtctldclient MoveTables](./vtctldclient_movetables/) - Perform commands related to moving tables from a source keyspace to a target keyspace. +* [vtctldclient OnlineDDL](./vtctldclient_onlineddl/) - Operates on online DDL (schema migrations). +* [vtctldclient PingTablet](./vtctldclient_pingtablet/) - Checks that the specified tablet is awake and responding to RPCs. This command can be blocked by other in-flight operations. +* [vtctldclient PlannedReparentShard](./vtctldclient_plannedreparentshard/) - Reparents the shard to a new primary, or away from an old primary. Both the old and new primaries must be up and running. +* [vtctldclient RebuildKeyspaceGraph](./vtctldclient_rebuildkeyspacegraph/) - Rebuilds the serving data for the keyspace(s). This command may trigger an update to all connected clients. +* [vtctldclient RebuildVSchemaGraph](./vtctldclient_rebuildvschemagraph/) - Rebuilds the cell-specific SrvVSchema from the global VSchema objects in the provided cells (or all cells if none provided). +* [vtctldclient RefreshState](./vtctldclient_refreshstate/) - Reloads the tablet record on the specified tablet. +* [vtctldclient RefreshStateByShard](./vtctldclient_refreshstatebyshard/) - Reloads the tablet record all tablets in the shard, optionally limited to the specified cells. +* [vtctldclient ReloadSchema](./vtctldclient_reloadschema/) - Reloads the schema on a remote tablet. +* [vtctldclient ReloadSchemaKeyspace](./vtctldclient_reloadschemakeyspace/) - Reloads the schema on all tablets in a keyspace. This is done on a best-effort basis. +* [vtctldclient ReloadSchemaShard](./vtctldclient_reloadschemashard/) - Reloads the schema on all tablets in a shard. This is done on a best-effort basis. +* [vtctldclient RemoveBackup](./vtctldclient_removebackup/) - Removes the given backup from the BackupStorage used by vtctld. +* [vtctldclient RemoveKeyspaceCell](./vtctldclient_removekeyspacecell/) - Removes the specified cell from the Cells list for all shards in the specified keyspace (by calling RemoveShardCell on every shard). It also removes the SrvKeyspace for that keyspace in that cell. +* [vtctldclient RemoveShardCell](./vtctldclient_removeshardcell/) - Remove the specified cell from the specified shard's Cells list. +* [vtctldclient ReparentTablet](./vtctldclient_reparenttablet/) - Reparent a tablet to the current primary in the shard. +* [vtctldclient Reshard](./vtctldclient_reshard/) - Perform commands related to resharding a keyspace. +* [vtctldclient RestoreFromBackup](./vtctldclient_restorefrombackup/) - Stops mysqld on the specified tablet and restores the data from either the latest backup or closest before `backup-timestamp`. +* [vtctldclient RunHealthCheck](./vtctldclient_runhealthcheck/) - Runs a healthcheck on the remote tablet. +* [vtctldclient SetKeyspaceDurabilityPolicy](./vtctldclient_setkeyspacedurabilitypolicy/) - Sets the durability-policy used by the specified keyspace. +* [vtctldclient SetShardIsPrimaryServing](./vtctldclient_setshardisprimaryserving/) - Add or remove a shard from serving. This is meant as an emergency function. It does not rebuild any serving graphs; i.e. it does not run `RebuildKeyspaceGraph`. +* [vtctldclient SetShardTabletControl](./vtctldclient_setshardtabletcontrol/) - Sets the TabletControl record for a shard and tablet type. Only use this for an emergency fix or after a finished MoveTables. +* [vtctldclient SetWritable](./vtctldclient_setwritable/) - Sets the specified tablet as writable or read-only. +* [vtctldclient ShardReplicationFix](./vtctldclient_shardreplicationfix/) - Walks through a ShardReplication object and fixes the first error encountered. +* [vtctldclient ShardReplicationPositions](./vtctldclient_shardreplicationpositions/) - +* [vtctldclient SleepTablet](./vtctldclient_sleeptablet/) - Blocks the action queue on the specified tablet for the specified amount of time. This is typically used for testing. +* [vtctldclient SourceShardAdd](./vtctldclient_sourceshardadd/) - Adds the SourceShard record with the provided index for emergencies only. It does not call RefreshState for the shard primary. +* [vtctldclient SourceShardDelete](./vtctldclient_sourcesharddelete/) - Deletes the SourceShard record with the provided index. This should only be used for emergency cleanup. It does not call RefreshState for the shard primary. +* [vtctldclient StartReplication](./vtctldclient_startreplication/) - Starts replication on the specified tablet. +* [vtctldclient StopReplication](./vtctldclient_stopreplication/) - Stops replication on the specified tablet. +* [vtctldclient TabletExternallyReparented](./vtctldclient_tabletexternallyreparented/) - Updates the topology record for the tablet's shard to acknowledge that an external tool made this tablet the primary. +* [vtctldclient UpdateCellInfo](./vtctldclient_updatecellinfo/) - Updates the content of a CellInfo with the provided parameters, creating the CellInfo if it does not exist. +* [vtctldclient UpdateCellsAlias](./vtctldclient_updatecellsalias/) - Updates the content of a CellsAlias with the provided parameters, creating the CellsAlias if it does not exist. +* [vtctldclient UpdateThrottlerConfig](./vtctldclient_updatethrottlerconfig/) - Update the tablet throttler configuration for all tablets in the given keyspace (across all cells) +* [vtctldclient VDiff](./vtctldclient_vdiff/) - Perform commands related to diffing tables involved in a VReplication workflow between the source and target. +* [vtctldclient Validate](./vtctldclient_validate/) - Validates that all nodes reachable from the global replication graph, as well as all tablets in discoverable cells, are consistent. +* [vtctldclient ValidateKeyspace](./vtctldclient_validatekeyspace/) - Validates that all nodes reachable from the specified keyspace are consistent. +* [vtctldclient ValidateSchemaKeyspace](./vtctldclient_validateschemakeyspace/) - Validates that the schema on the primary tablet for shard 0 matches the schema on all other tablets in the keyspace. +* [vtctldclient ValidateShard](./vtctldclient_validateshard/) - Validates that all nodes reachable from the specified shard are consistent. +* [vtctldclient ValidateVersionKeyspace](./vtctldclient_validateversionkeyspace/) - Validates that the version on the primary tablet of shard 0 matches all of the other tablets in the keyspace. +* [vtctldclient ValidateVersionShard](./vtctldclient_validateversionshard/) - Validates that the version on the primary matches all of the replicas. +* [vtctldclient Workflow](./vtctldclient_workflow/) - Administer VReplication workflows (Reshard, MoveTables, etc) in the given keyspace. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_AddCellInfo.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_AddCellInfo.md new file mode 100644 index 000000000..305cf3283 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_AddCellInfo.md @@ -0,0 +1,44 @@ +--- +title: AddCellInfo +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient AddCellInfo + +Registers a local topology service in a new cell by creating the CellInfo. + +### Synopsis + +Registers a local topology service in a new cell by creating the CellInfo +with the provided parameters. + +The address will be used to connect to the topology service, and Vitess data will +be stored starting at the provided root. + +``` +vtctldclient AddCellInfo --root [--server-address ] +``` + +### Options + +``` + -h, --help help for AddCellInfo + -r, --root string The root path the topology server will use for this cell. + -a, --server-address string The address the topology server will connect to for this cell. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_AddCellsAlias.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_AddCellsAlias.md new file mode 100644 index 000000000..8e03d5483 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_AddCellsAlias.md @@ -0,0 +1,43 @@ +--- +title: AddCellsAlias +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient AddCellsAlias + +Defines a group of cells that can be referenced by a single name (the alias). + +### Synopsis + +Defines a group of cells that can be referenced by a single name (the alias). + +When routing query traffic, replica/rdonly traffic can be routed across cells +within the group (alias). Only primary traffic can be routed across cells not in +the same group (alias). + +``` +vtctldclient AddCellsAlias --cells [--cells ...] +``` + +### Options + +``` + -c, --cells strings The list of cell names that are members of this alias. + -h, --help help for AddCellsAlias +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ApplyKeyspaceRoutingRules.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ApplyKeyspaceRoutingRules.md new file mode 100644 index 000000000..e0066f42a --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ApplyKeyspaceRoutingRules.md @@ -0,0 +1,39 @@ +--- +title: ApplyKeyspaceRoutingRules +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient ApplyKeyspaceRoutingRules + +Applies the provided keyspace routing rules. + +``` +vtctldclient ApplyKeyspaceRoutingRules {--rules RULES | --rules-file RULES_FILE} [--cells=c1,c2,...] [--skip-rebuild] [--dry-run] +``` + +### Options + +``` + -c, --cells strings Limit the VSchema graph rebuilding to the specified cells. Ignored if --skip-rebuild is specified. + -d, --dry-run Validate the specified keyspace routing rules and note actions that would be taken, but do not actually apply the rules to the topo. + -h, --help help for ApplyKeyspaceRoutingRules + -r, --rules string Keyspace routing rules, specified as a string + -f, --rules-file string Path to a file containing keyspace routing rules specified as JSON + --skip-rebuild Skip rebuilding the SrvVSchema objects. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ApplyRoutingRules.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ApplyRoutingRules.md new file mode 100644 index 000000000..380651137 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ApplyRoutingRules.md @@ -0,0 +1,39 @@ +--- +title: ApplyRoutingRules +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient ApplyRoutingRules + +Applies the VSchema routing rules. + +``` +vtctldclient ApplyRoutingRules {--rules RULES | --rules-file RULES_FILE} [--cells=c1,c2,...] [--skip-rebuild] [--dry-run] +``` + +### Options + +``` + -c, --cells strings Limit the VSchema graph rebuilding to the specified cells. Ignored if --skip-rebuild is specified. + -d, --dry-run Load the specified routing rules as a validation step, but do not actually apply the rules to the topo. + -h, --help help for ApplyRoutingRules + -r, --rules string Routing rules, specified as a string. + -f, --rules-file string Path to a file containing routing rules specified as JSON. + --skip-rebuild Skip rebuilding the SrvVSchema objects. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ApplySchema.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ApplySchema.md new file mode 100644 index 000000000..10fe31c6d --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ApplySchema.md @@ -0,0 +1,58 @@ +--- +title: ApplySchema +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient ApplySchema + +Applies the schema change to the specified keyspace on every primary, running in parallel on all shards. The changes are then propagated to replicas via replication. + +### Synopsis + +Applies the schema change to the specified keyspace on every primary, running in parallel on all shards. The changes are then propagated to replicas via replication. + +If --allow-long-unavailability is set, schema changes affecting a large number of rows (and possibly incurring a longer period of unavailability) will not be rejected. +--ddl-strategy is used to instruct migrations via vreplication, gh-ost or pt-osc with optional parameters. +--migration-context allows the user to specify a custom migration context for online DDL migrations. +If --skip-preflight, SQL goes directly to shards without going through sanity checks. + +The --uuid and --sql flags are repeatable, so they can be passed multiple times to build a list of values. +For --uuid, this is used like "--uuid $first_uuid --uuid $second_uuid". +For --sql, semi-colons and repeated values may be mixed, for example: + + ApplySchema --sql "CREATE TABLE my_table; CREATE TABLE my_other_table" + ApplySchema --sql "CREATE TABLE my_table" --sql "CREATE TABLE my_other_table" + +``` +vtctldclient ApplySchema [--ddl-strategy ] [--uuid ...] [--migration-context ] [--wait-replicas-timeout ] [--caller-id ] {--sql-file | --sql } +``` + +### Options + +``` + --batch-size int How many queries to batch together. Only applicable when all queries are CREATE TABLE|VIEW + --caller-id string Effective caller ID used for the operation and should map to an ACL name which grants this identity the necessary permissions to perform the operation (this is only necessary when strict table ACLs are used). + --ddl-strategy string Online DDL strategy, compatible with @@ddl_strategy session variable (examples: 'gh-ost', 'pt-osc', 'gh-ost --max-load=Threads_running=100'. (default "direct") + -h, --help help for ApplySchema + --migration-context string For Online DDL, optionally supply a custom unique string used as context for the migration(s) in this command. By default a unique context is auto-generated by Vitess. + --sql stringArray Semicolon-delimited, repeatable SQL commands to apply. Exactly one of --sql|--sql-file is required. + --sql-file string Path to a file containing semicolon-delimited SQL commands to apply. Exactly one of --sql|--sql-file is required. + --uuid strings Optional, comma-delimited, repeatable, explicit UUIDs for migration. If given, must match number of DDL changes. + --wait-replicas-timeout duration Amount of time to wait for replicas to receive the schema change via replication. (default 10s) +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ApplyShardRoutingRules.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ApplyShardRoutingRules.md new file mode 100644 index 000000000..d46403b22 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ApplyShardRoutingRules.md @@ -0,0 +1,39 @@ +--- +title: ApplyShardRoutingRules +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient ApplyShardRoutingRules + +Applies the provided shard routing rules. + +``` +vtctldclient ApplyShardRoutingRules {--rules RULES | --rules-file RULES_FILE} [--cells=c1,c2,...] [--skip-rebuild] [--dry-run] +``` + +### Options + +``` + -c, --cells strings Limit the VSchema graph rebuilding to the specified cells. Ignored if --skip-rebuild is specified. + -d, --dry-run Validate the specified shard routing rules and note actions that would be taken, but do not actually apply the rules to the topo. + -h, --help help for ApplyShardRoutingRules + -r, --rules string Shard routing rules, specified as a string + -f, --rules-file string Path to a file containing shard routing rules specified as JSON + --skip-rebuild Skip rebuilding the SrvVSchema objects. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ApplyVSchema.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ApplyVSchema.md new file mode 100644 index 000000000..b67ea020b --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ApplyVSchema.md @@ -0,0 +1,42 @@ +--- +title: ApplyVSchema +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient ApplyVSchema + +Applies the VTGate routing schema to the provided keyspace. Shows the result after application. + +``` +vtctldclient ApplyVSchema {--vschema= || --vschema-file= || --sql= || --sql-file=} [--cells=c1,c2,...] [--skip-rebuild] [--dry-run] [--strict] +``` + +### Options + +``` + --cells strings Limits the rebuild to the specified cells, after application. Ignored if --skip-rebuild is set. + --dry-run If set, do not save the altered vschema, simply echo to console. + -h, --help help for ApplyVSchema + --skip-rebuild Skip rebuilding the SrvSchema objects. + --sql alter table t add vindex hash(id) A VSchema DDL SQL statement, e.g. alter table t add vindex hash(id). + --sql-file string Path to a file containing a VSchema DDL SQL. + --strict If set, treat unknown vindex params as errors. + --vschema string VSchema to apply, in JSON form. + --vschema-file string Path to a file containing the vschema to apply, in JSON form. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Backup.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Backup.md new file mode 100644 index 000000000..138db47d3 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Backup.md @@ -0,0 +1,38 @@ +--- +title: Backup +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient Backup + +Uses the BackupStorage service on the given tablet to create and store a new backup. + +``` +vtctldclient Backup [--concurrency ] [--allow-primary] [--incremental-from-pos=||auto] [--upgrade-safe] +``` + +### Options + +``` + --allow-primary Allow the primary of a shard to be used for the backup. WARNING: If using the builtin backup engine, this will shutdown mysqld on the primary and stop writes for the duration of the backup. + --concurrency int32 Specifies the number of compression/checksum jobs to run simultaneously. (default 4) + -h, --help help for Backup + --incremental-from-pos string Position, or name of backup from which to create an incremental backup. Default: empty. If given, then this backup becomes an incremental backup from given position or given backup. If value is 'auto', this backup will be taken from the last successful backup position. + --upgrade-safe Whether to use innodb_fast_shutdown=0 for the backup so it is safe to use for MySQL upgrades. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_BackupShard.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_BackupShard.md new file mode 100644 index 000000000..f253c6836 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_BackupShard.md @@ -0,0 +1,44 @@ +--- +title: BackupShard +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient BackupShard + +Finds the most up-to-date REPLICA, RDONLY, or SPARE tablet in the given shard and uses the BackupStorage service on that tablet to create and store a new backup. + +### Synopsis + +Finds the most up-to-date REPLICA, RDONLY, or SPARE tablet in the given shard and uses the BackupStorage service on that tablet to create and store a new backup. + +If no replica-type tablet can be found, the backup can be taken on the primary if --allow-primary is specified. + +``` +vtctldclient BackupShard [--concurrency ] [--allow-primary] [--incremental-from-pos=||auto] [--upgrade-safe] +``` + +### Options + +``` + --allow-primary Allow the primary of a shard to be used for the backup. WARNING: If using the builtin backup engine, this will shutdown mysqld on the primary and stop writes for the duration of the backup. + --concurrency int32 Specifies the number of compression/checksum jobs to run simultaneously. (default 4) + -h, --help help for BackupShard + --incremental-from-pos string Position, or name of backup from which to create an incremental backup. Default: empty. If given, then this backup becomes an incremental backup from given position or given backup. If value is 'auto', this backup will be taken from the last successful backup position. + --upgrade-safe Whether to use innodb_fast_shutdown=0 for the backup so it is safe to use for MySQL upgrades. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ChangeTabletType.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ChangeTabletType.md new file mode 100644 index 000000000..dbe80802e --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ChangeTabletType.md @@ -0,0 +1,42 @@ +--- +title: ChangeTabletType +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient ChangeTabletType + +Changes the db type for the specified tablet, if possible. + +### Synopsis + +Changes the db type for the specified tablet, if possible. + +This command is used primarily to arrange replicas, and it will not convert a primary. +NOTE: This command automatically updates the serving graph. + +``` +vtctldclient ChangeTabletType [--dry-run] +``` + +### Options + +``` + -d, --dry-run Shows the proposed change without actually executing it. + -h, --help help for ChangeTabletType +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_CreateKeyspace.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_CreateKeyspace.md new file mode 100644 index 000000000..c341dd2b6 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_CreateKeyspace.md @@ -0,0 +1,48 @@ +--- +title: CreateKeyspace +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient CreateKeyspace + +Creates the specified keyspace in the topology. + +### Synopsis + +Creates the specified keyspace in the topology. + +For a SNAPSHOT keyspace, the request must specify the name of a base keyspace, +as well as a snapshot time. + +``` +vtctldclient CreateKeyspace [--force|-f] [--type KEYSPACE_TYPE] [--base-keyspace KEYSPACE --snapshot-timestamp TIME] [--served-from DB_TYPE:KEYSPACE ...] [--durability-policy ] [--sidecar-db-name ] +``` + +### Options + +``` + -e, --allow-empty-vschema Allows a new keyspace to have no vschema. + --base-keyspace string The base keyspace for a snapshot keyspace. + --durability-policy string Type of durability to enforce for this keyspace. Default is none. Possible values include 'semi_sync' and others as dictated by registered plugins. (default "none") + -f, --force Proceeds even if the keyspace already exists. Does not overwrite the existing keyspace record. + -h, --help help for CreateKeyspace + --sidecar-db-name string (Experimental) Name of the Vitess sidecar database that tablets in this keyspace will use for internal metadata. (default "_vt") + --snapshot-timestamp string The snapshot time for a snapshot keyspace, as a timestamp in RFC3339 format. + --type cli.KeyspaceTypeFlag The type of the keyspace. (default NORMAL) +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_CreateShard.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_CreateShard.md new file mode 100644 index 000000000..2d3defe38 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_CreateShard.md @@ -0,0 +1,36 @@ +--- +title: CreateShard +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient CreateShard + +Creates the specified shard in the topology. + +``` +vtctldclient CreateShard [--force|-f] [--include-parent|-p] +``` + +### Options + +``` + -f, --force Overwrite an existing shard record, if one exists. + -h, --help help for CreateShard + -p, --include-parent Creates the parent keyspace record if does not already exist. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_DeleteCellInfo.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_DeleteCellInfo.md new file mode 100644 index 000000000..d3b4aea34 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_DeleteCellInfo.md @@ -0,0 +1,39 @@ +--- +title: DeleteCellInfo +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient DeleteCellInfo + +Deletes the CellInfo for the provided cell. + +### Synopsis + +Deletes the CellInfo for the provided cell. The cell cannot be referenced by any Shard record. + +``` +vtctldclient DeleteCellInfo [--force] +``` + +### Options + +``` + -f, --force Proceeds even if the cell's topology server cannot be reached. The assumption is that you shut down the entire cell, and just need to update the global topo data. + -h, --help help for DeleteCellInfo +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_DeleteCellsAlias.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_DeleteCellsAlias.md new file mode 100644 index 000000000..1146a8736 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_DeleteCellsAlias.md @@ -0,0 +1,38 @@ +--- +title: DeleteCellsAlias +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient DeleteCellsAlias + +Deletes the CellsAlias for the provided alias. + +### Synopsis + +Deletes the CellsAlias for the provided alias. + +``` +vtctldclient DeleteCellsAlias +``` + +### Options + +``` + -h, --help help for DeleteCellsAlias +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_DeleteKeyspace.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_DeleteKeyspace.md new file mode 100644 index 000000000..404a8a88b --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_DeleteKeyspace.md @@ -0,0 +1,43 @@ +--- +title: DeleteKeyspace +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient DeleteKeyspace + +Deletes the specified keyspace from the topology. + +### Synopsis + +Deletes the specified keyspace from the topology. + +In recursive mode, it also recursively deletes all shards in the keyspace. +Otherwise, the keyspace must be empty (have no shards), or returns an error. + +``` +vtctldclient DeleteKeyspace [--recursive|-r] [--force|-f] +``` + +### Options + +``` + -f, --force Delete the keyspace even if it cannot be locked; this should only be used for cleanup operations. + -h, --help help for DeleteKeyspace + -r, --recursive Recursively delete all shards in the keyspace, and all tablets in those shards. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_DeleteShards.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_DeleteShards.md new file mode 100644 index 000000000..0fd2da00c --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_DeleteShards.md @@ -0,0 +1,45 @@ +--- +title: DeleteShards +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient DeleteShards + +Deletes the specified shards from the topology. + +### Synopsis + +Deletes the specified shards from the topology. + +In recursive mode, it also deletes all tablets belonging to the shard. +Otherwise, the shard must be empty (have no tablets) or returns an error for +that shard. + +``` +vtctldclient DeleteShards [--recursive|-r] [--even-if-serving] [--force|-f] [ ...] +``` + +### Options + +``` + --even-if-serving Remove the shard even if it is serving. Use with caution. + -f, --force Remove the shard even if it cannot be locked; this should only be used for cleanup operations. + -h, --help help for DeleteShards + -r, --recursive Also delete all tablets belonging to the shard. This is required to delete a non-empty shard. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_DeleteSrvVSchema.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_DeleteSrvVSchema.md new file mode 100644 index 000000000..baa2c3d54 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_DeleteSrvVSchema.md @@ -0,0 +1,34 @@ +--- +title: DeleteSrvVSchema +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient DeleteSrvVSchema + +Deletes the SrvVSchema object in the given cell. + +``` +vtctldclient DeleteSrvVSchema +``` + +### Options + +``` + -h, --help help for DeleteSrvVSchema +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_DeleteTablets.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_DeleteTablets.md new file mode 100644 index 000000000..85b1001ac --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_DeleteTablets.md @@ -0,0 +1,35 @@ +--- +title: DeleteTablets +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient DeleteTablets + +Deletes tablet(s) from the topology. + +``` +vtctldclient DeleteTablets [ ... ] +``` + +### Options + +``` + -p, --allow-primary Allow the primary tablet of a shard to be deleted. Use with caution. + -h, --help help for DeleteTablets +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_EmergencyReparentShard.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_EmergencyReparentShard.md new file mode 100644 index 000000000..6858f0e6a --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_EmergencyReparentShard.md @@ -0,0 +1,39 @@ +--- +title: EmergencyReparentShard +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient EmergencyReparentShard + +Reparents the shard to the new primary. Assumes the old primary is dead and not responding. + +``` +vtctldclient EmergencyReparentShard +``` + +### Options + +``` + -h, --help help for EmergencyReparentShard + -i, --ignore-replicas strings Comma-separated, repeated list of replica tablet aliases to ignore during the emergency reparent. + --new-primary string Alias of a tablet that should be the new primary. If not specified, the vtctld will select the best candidate to promote. + --prevent-cross-cell-promotion Only promotes a new primary from the same cell as the previous primary. + --wait-for-all-tablets Should ERS wait for all the tablets to respond. Useful when all the tablets are reachable. + --wait-replicas-timeout duration Time to wait for replicas to catch up in reparenting. (default 15s) +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ExecuteFetchAsApp.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ExecuteFetchAsApp.md new file mode 100644 index 000000000..de405d967 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ExecuteFetchAsApp.md @@ -0,0 +1,37 @@ +--- +title: ExecuteFetchAsApp +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient ExecuteFetchAsApp + +Executes the given query as the App user on the remote tablet. + +``` +vtctldclient ExecuteFetchAsApp [--max-rows ] [--json|-j] [--use-pool] +``` + +### Options + +``` + -h, --help help for ExecuteFetchAsApp + -j, --json Output the results in JSON instead of a human-readable table. + --max-rows int The maximum number of rows to fetch from the remote tablet. (default 10000) + --use-pool Use the tablet connection pool instead of creating a fresh connection. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ExecuteFetchAsDBA.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ExecuteFetchAsDBA.md new file mode 100644 index 000000000..b81cb8f5f --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ExecuteFetchAsDBA.md @@ -0,0 +1,38 @@ +--- +title: ExecuteFetchAsDBA +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient ExecuteFetchAsDBA + +Executes the given query as the DBA user on the remote tablet. + +``` +vtctldclient ExecuteFetchAsDBA [--max-rows ] [--json|-j] [--disable-binlogs] [--reload-schema] +``` + +### Options + +``` + --disable-binlogs Disables binary logging during the query. + -h, --help help for ExecuteFetchAsDBA + -j, --json Output the results in JSON instead of a human-readable table. + --max-rows int The maximum number of rows to fetch from the remote tablet. (default 10000) + --reload-schema Instructs the tablet to reload its schema after executing the query. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ExecuteHook.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ExecuteHook.md new file mode 100644 index 000000000..2153dc4f9 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ExecuteHook.md @@ -0,0 +1,48 @@ +--- +title: ExecuteHook +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient ExecuteHook + +Runs the specified hook on the given tablet. + +### Synopsis + +Runs the specified hook on the given tablet. + +A hook is an executable script that resides in the ${VTROOT}/vthook directory. +For ExecuteHook, this is on the tablet requested, not on the vtctld or the host +running the vtctldclient. + +Any key-value pairs passed after the hook name will be passed as parameters to +the hook on the tablet. + +Note: hook names may not contain slash (/) characters. + + +``` +vtctldclient ExecuteHook [ ...] +``` + +### Options + +``` + -h, --help help for ExecuteHook +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ExecuteMultiFetchAsDBA.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ExecuteMultiFetchAsDBA.md new file mode 100644 index 000000000..66e43bf48 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ExecuteMultiFetchAsDBA.md @@ -0,0 +1,38 @@ +--- +title: ExecuteMultiFetchAsDBA +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient ExecuteMultiFetchAsDBA + +Executes given multiple queries as the DBA user on the remote tablet. + +``` +vtctldclient ExecuteMultiFetchAsDBA [--max-rows ] [--json|-j] [--disable-binlogs] [--reload-schema] +``` + +### Options + +``` + --disable-binlogs Disables binary logging during the query. + -h, --help help for ExecuteMultiFetchAsDBA + -j, --json Output the results in JSON instead of a human-readable table. + --max-rows int The maximum number of rows to fetch from the remote tablet. (default 10000) + --reload-schema Instructs the tablet to reload its schema after executing the query. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_FindAllShardsInKeyspace.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_FindAllShardsInKeyspace.md new file mode 100644 index 000000000..de1d68701 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_FindAllShardsInKeyspace.md @@ -0,0 +1,34 @@ +--- +title: FindAllShardsInKeyspace +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient FindAllShardsInKeyspace + +Returns a map of shard names to shard references for a given keyspace. + +``` +vtctldclient FindAllShardsInKeyspace +``` + +### Options + +``` + -h, --help help for FindAllShardsInKeyspace +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GenerateShardRanges.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GenerateShardRanges.md new file mode 100644 index 000000000..c2ae93cdf --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GenerateShardRanges.md @@ -0,0 +1,34 @@ +--- +title: GenerateShardRanges +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient GenerateShardRanges + +Print a set of shard ranges assuming a keyspace with N shards. + +``` +vtctldclient GenerateShardRanges +``` + +### Options + +``` + -h, --help help for GenerateShardRanges +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetBackups.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetBackups.md new file mode 100644 index 000000000..f58e9f16e --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetBackups.md @@ -0,0 +1,36 @@ +--- +title: GetBackups +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient GetBackups + +Lists backups for the given shard. + +``` +vtctldclient GetBackups [--limit ] [--json] +``` + +### Options + +``` + -h, --help help for GetBackups + -j, --json Output backup info in JSON format rather than a list of backups. + -l, --limit uint32 Retrieve only the most recent N backups. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetCellInfo.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetCellInfo.md new file mode 100644 index 000000000..9f4f9edde --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetCellInfo.md @@ -0,0 +1,34 @@ +--- +title: GetCellInfo +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient GetCellInfo + +Gets the CellInfo object for the given cell. + +``` +vtctldclient GetCellInfo +``` + +### Options + +``` + -h, --help help for GetCellInfo +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetCellInfoNames.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetCellInfoNames.md new file mode 100644 index 000000000..d5c8aa1ee --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetCellInfoNames.md @@ -0,0 +1,34 @@ +--- +title: GetCellInfoNames +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient GetCellInfoNames + +Lists the names of all cells in the cluster. + +``` +vtctldclient GetCellInfoNames +``` + +### Options + +``` + -h, --help help for GetCellInfoNames +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetCellsAliases.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetCellsAliases.md new file mode 100644 index 000000000..d4e3c1ff5 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetCellsAliases.md @@ -0,0 +1,34 @@ +--- +title: GetCellsAliases +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient GetCellsAliases + +Gets all CellsAlias objects in the cluster. + +``` +vtctldclient GetCellsAliases +``` + +### Options + +``` + -h, --help help for GetCellsAliases +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetFullStatus.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetFullStatus.md new file mode 100644 index 000000000..867243f37 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetFullStatus.md @@ -0,0 +1,34 @@ +--- +title: GetFullStatus +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient GetFullStatus + +Outputs a JSON structure that contains full status of MySQL including the replication information, semi-sync information, GTID information among others. + +``` +vtctldclient GetFullStatus +``` + +### Options + +``` + -h, --help help for GetFullStatus +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetKeyspace.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetKeyspace.md new file mode 100644 index 000000000..8e100063c --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetKeyspace.md @@ -0,0 +1,34 @@ +--- +title: GetKeyspace +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient GetKeyspace + +Returns information about the given keyspace from the topology. + +``` +vtctldclient GetKeyspace +``` + +### Options + +``` + -h, --help help for GetKeyspace +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetKeyspaceRoutingRules.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetKeyspaceRoutingRules.md new file mode 100644 index 000000000..7a001661c --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetKeyspaceRoutingRules.md @@ -0,0 +1,34 @@ +--- +title: GetKeyspaceRoutingRules +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient GetKeyspaceRoutingRules + +Displays the currently active keyspace routing rules. + +``` +vtctldclient GetKeyspaceRoutingRules +``` + +### Options + +``` + -h, --help help for GetKeyspaceRoutingRules +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetKeyspaces.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetKeyspaces.md new file mode 100644 index 000000000..58518ae3b --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetKeyspaces.md @@ -0,0 +1,34 @@ +--- +title: GetKeyspaces +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient GetKeyspaces + +Returns information about every keyspace in the topology. + +``` +vtctldclient GetKeyspaces +``` + +### Options + +``` + -h, --help help for GetKeyspaces +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetPermissions.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetPermissions.md new file mode 100644 index 000000000..200661edd --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetPermissions.md @@ -0,0 +1,34 @@ +--- +title: GetPermissions +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient GetPermissions + +Displays the permissions for a tablet. + +``` +vtctldclient GetPermissions +``` + +### Options + +``` + -h, --help help for GetPermissions +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetRoutingRules.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetRoutingRules.md new file mode 100644 index 000000000..36f9d38d4 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetRoutingRules.md @@ -0,0 +1,34 @@ +--- +title: GetRoutingRules +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient GetRoutingRules + +Displays the VSchema routing rules. + +``` +vtctldclient GetRoutingRules +``` + +### Options + +``` + -h, --help help for GetRoutingRules +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetSchema.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetSchema.md new file mode 100644 index 000000000..8331378dc --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetSchema.md @@ -0,0 +1,40 @@ +--- +title: GetSchema +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient GetSchema + +Displays the full schema for a tablet, optionally restricted to the specified tables/views. + +``` +vtctldclient GetSchema [--tables TABLES ...] [--exclude-tables EXCLUDE_TABLES ...] [{--table-names-only | --table-sizes-only}] [--include-views] alias +``` + +### Options + +``` + --exclude-tables /regexp/ List of tables to exclude from the result. Each is either an exact match, or a regular expression of the form /regexp/. + -h, --help help for GetSchema + --include-views Includes views in the output in addition to base tables. + -n, --table-names-only Display only table names in the result. + --table-schema-only Skip introspecting columns and fields metadata. + -s, --table-sizes-only Display only size information for matching tables. Ignored if --table-names-only is set. + --tables /regexp/ List of tables to display the schema for. Each is either an exact match, or a regular expression of the form /regexp/. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetShard.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetShard.md new file mode 100644 index 000000000..213109f76 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetShard.md @@ -0,0 +1,34 @@ +--- +title: GetShard +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient GetShard + +Returns information about a shard in the topology. + +``` +vtctldclient GetShard +``` + +### Options + +``` + -h, --help help for GetShard +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetShardReplication.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetShardReplication.md new file mode 100644 index 000000000..ba6eb0afc --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetShardReplication.md @@ -0,0 +1,34 @@ +--- +title: GetShardReplication +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient GetShardReplication + +Returns information about the replication relationships for a shard in the given cell(s). + +``` +vtctldclient GetShardReplication [cell1 [cell2...]] +``` + +### Options + +``` + -h, --help help for GetShardReplication +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetShardRoutingRules.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetShardRoutingRules.md new file mode 100644 index 000000000..e146ea673 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetShardRoutingRules.md @@ -0,0 +1,42 @@ +--- +title: GetShardRoutingRules +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient GetShardRoutingRules + +Displays the currently active shard routing rules as a JSON document. + +### Synopsis + +Displays the currently active shard routing rules as a JSON document. + +See the documentation on shard level migrations[1] for more information. + +[1]: https://vitess.io/docs/reference/vreplication/shardlevelmigrations/ + +``` +vtctldclient GetShardRoutingRules +``` + +### Options + +``` + -h, --help help for GetShardRoutingRules +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetSrvKeyspaceNames.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetSrvKeyspaceNames.md new file mode 100644 index 000000000..99fa88768 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetSrvKeyspaceNames.md @@ -0,0 +1,34 @@ +--- +title: GetSrvKeyspaceNames +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient GetSrvKeyspaceNames + +Outputs a JSON mapping of cell=>keyspace names served in that cell. Omit to query all cells. + +``` +vtctldclient GetSrvKeyspaceNames [ ...] +``` + +### Options + +``` + -h, --help help for GetSrvKeyspaceNames +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetSrvKeyspaces.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetSrvKeyspaces.md new file mode 100644 index 000000000..ba2492e8d --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetSrvKeyspaces.md @@ -0,0 +1,34 @@ +--- +title: GetSrvKeyspaces +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient GetSrvKeyspaces + +Returns the SrvKeyspaces for the given keyspace in one or more cells. + +``` +vtctldclient GetSrvKeyspaces [ ...] +``` + +### Options + +``` + -h, --help help for GetSrvKeyspaces +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetSrvVSchema.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetSrvVSchema.md new file mode 100644 index 000000000..815b48d56 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetSrvVSchema.md @@ -0,0 +1,34 @@ +--- +title: GetSrvVSchema +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient GetSrvVSchema + +Returns the SrvVSchema for the given cell. + +``` +vtctldclient GetSrvVSchema cell +``` + +### Options + +``` + -h, --help help for GetSrvVSchema +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetSrvVSchemas.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetSrvVSchemas.md new file mode 100644 index 000000000..e11362165 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetSrvVSchemas.md @@ -0,0 +1,34 @@ +--- +title: GetSrvVSchemas +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient GetSrvVSchemas + +Returns the SrvVSchema for all cells, optionally filtered by the given cells. + +``` +vtctldclient GetSrvVSchemas [ ...] +``` + +### Options + +``` + -h, --help help for GetSrvVSchemas +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetTablet.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetTablet.md new file mode 100644 index 000000000..89bbda102 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetTablet.md @@ -0,0 +1,34 @@ +--- +title: GetTablet +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient GetTablet + +Outputs a JSON structure that contains information about the tablet. + +``` +vtctldclient GetTablet +``` + +### Options + +``` + -h, --help help for GetTablet +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetTabletVersion.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetTabletVersion.md new file mode 100644 index 000000000..fdb1fb572 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetTabletVersion.md @@ -0,0 +1,34 @@ +--- +title: GetTabletVersion +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient GetTabletVersion + +Print the version of a tablet from its debug vars. + +``` +vtctldclient GetTabletVersion +``` + +### Options + +``` + -h, --help help for GetTabletVersion +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetTablets.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetTablets.md new file mode 100644 index 000000000..a07b27a42 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetTablets.md @@ -0,0 +1,62 @@ +--- +title: GetTablets +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient GetTablets + +Looks up tablets according to filter criteria. + +### Synopsis + +Looks up tablets according to the filter criteria. + +If --tablet-alias is passed, none of the other filters (tablet-type, keyspace, +shard, cell) may be passed, and tablets are looked up by tablet alias only. + +If --keyspace is passed, then all tablets in the keyspace are retrieved. The +--shard flag may also be passed to further narrow the set of tablets to that +. Passing --shard without also passing --keyspace will fail. + +If --tablet-type is passed, only tablets of the specified type will be +returned. Valid tablet types are: +"backup", "drained", "experimental", "primary", "rdonly", "replica", "restore", "spare". + +Passing --cell limits the set of tablets to those in the specified cells. The +--cell flag accepts a CSV argument (e.g. --cell "c1,c2") and may be repeated +(e.g. --cell "c1" --cell "c2"). + +Valid output formats are "awk" and "json". + +``` +vtctldclient GetTablets [--strict] [{--cell $c1 [--cell $c2 ...] [--tablet-type $t1] [--keyspace $ks [--shard $shard]], --tablet-alias $alias}] +``` + +### Options + +``` + -c, --cell strings List of cells to filter tablets by. + --format string Output format to use; valid choices are (json, awk). (default "awk") + -h, --help help for GetTablets + -k, --keyspace string Keyspace to filter tablets by. + -s, --shard string Shard to filter tablets by. + --strict Require all cells to return successful tablet data. Without --strict, tablet listings may be partial. + -t, --tablet-alias strings List of tablet aliases to filter by. + --tablet-type topodatapb.TabletType Tablet type to filter by (e.g. primary or replica). (default UNKNOWN) +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetTopologyPath.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetTopologyPath.md new file mode 100644 index 000000000..d26d07c1a --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetTopologyPath.md @@ -0,0 +1,36 @@ +--- +title: GetTopologyPath +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient GetTopologyPath + +Gets the value associated with the particular path (key) in the topology server. + +``` +vtctldclient GetTopologyPath +``` + +### Options + +``` + --data-as-json If true, only the data is output and it is in JSON format rather than prototext. + -h, --help help for GetTopologyPath + --version int The version of the path's key to get. If not specified, the latest version is returned. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetVSchema.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetVSchema.md new file mode 100644 index 000000000..cbe151c44 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetVSchema.md @@ -0,0 +1,34 @@ +--- +title: GetVSchema +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient GetVSchema + +Prints a JSON representation of a keyspace's topo record. + +``` +vtctldclient GetVSchema +``` + +### Options + +``` + -h, --help help for GetVSchema +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetWorkflows.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetWorkflows.md new file mode 100644 index 000000000..571d97271 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_GetWorkflows.md @@ -0,0 +1,36 @@ +--- +title: GetWorkflows +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient GetWorkflows + +Gets all vreplication workflows (Reshard, MoveTables, etc) in the given keyspace. + +``` +vtctldclient GetWorkflows +``` + +### Options + +``` + -h, --help help for GetWorkflows + --include-logs Include recent logs for the workflows. (default true) + -a, --show-all Show all workflows instead of just active workflows. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_InitShardPrimary.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_InitShardPrimary.md new file mode 100644 index 000000000..3f2701e36 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_InitShardPrimary.md @@ -0,0 +1,41 @@ +--- +title: InitShardPrimary +series: vtctldclient +--- +## vtctldclient InitShardPrimary + +Sets the initial primary for the shard. + +### Synopsis + +This command has been deprecated. Please use PlannedReparentShard instead. + +Sets the initial primary for the shard. + +This will make all other tablets in the shard become replicas of the promoted tablet. +WARNING: this can cause data loss on an already-replicating shard. + + +``` +vtctldclient InitShardPrimary +``` + +### Options + +``` + --force Force the reparent even if the provided tablet is not writable or the shard primary. + -h, --help help for InitShardPrimary + --wait-replicas-timeout duration Time to wait for replicas to catch up in reparenting. (default 30s) +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout for the total command (default 1h0m0s) + --server string server to use for connection (required) +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_LegacyVtctlCommand.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_LegacyVtctlCommand.md new file mode 100644 index 000000000..bd8425a6f --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_LegacyVtctlCommand.md @@ -0,0 +1,67 @@ +--- +title: LegacyVtctlCommand +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient LegacyVtctlCommand + +Invoke a legacy vtctlclient command. Flag parsing is best effort. + +### Synopsis + +LegacyVtctlCommand uses the legacy vtctl grpc client to make an ExecuteVtctlCommand +rpc to a vtctld. + +This command exists to support a smooth transition of any scripts that relied on +vtctlclient during the migration to the new vtctldclient, and will be removed, +following the Vitess project's standard deprecation cycle, once all commands +have been migrated to the new VtctldServer api. + +To see the list of available legacy commands, run "LegacyVtctlCommand -- help". +Note that, as with the old client, this requires a running server, as the flag +parsing and help/usage text generation, is done server-side. + +Also note that, in order to defer that flag parsing to the server side, you must +use the double-dash ("--") after the LegacyVtctlCommand subcommand string, or +the client-side flag parsing library we are using will attempt to parse those +flags (and fail). + +``` +vtctldclient LegacyVtctlCommand -- [flags ...] [args ...] +``` + +### Examples + +``` +LegacyVtctlCommand help # displays this help message +LegacyVtctlCommand -- help # displays help for supported legacy vtctl commands + +# When using legacy command that take arguments, a double dash must be used +# before the first flag argument, like in the first example. The double dash may +# be used, however, at any point after the "LegacyVtctlCommand" string, as in +# the second example. +LegacyVtctlCommand AddCellInfo -- --server_address "localhost:1234" --root "/vitess/cell1" +LegacyVtctlCommand -- AddCellInfo --server_address "localhost:5678" --root "/vitess/cell1" +``` + +### Options + +``` + -h, --help help for LegacyVtctlCommand +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_LookupVindex/_index.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_LookupVindex/_index.md new file mode 100644 index 000000000..e6cb98895 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_LookupVindex/_index.md @@ -0,0 +1,36 @@ +--- +title: LookupVindex +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient LookupVindex + +Perform commands related to creating, backfilling, and externalizing Lookup Vindexes using VReplication workflows. + +### Options + +``` + -h, --help help for LookupVindex + --name string The name of the Lookup Vindex to create. This will also be the name of the VReplication workflow created to backfill the Lookup Vindex. + --table-keyspace string The keyspace to create the lookup table in. This is also where the VReplication workflow is created to backfill the Lookup Vindex. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. +* [vtctldclient LookupVindex cancel](./vtctldclient_lookupvindex_cancel/) - Cancel the VReplication workflow that backfills the Lookup Vindex. +* [vtctldclient LookupVindex create](./vtctldclient_lookupvindex_create/) - Create the Lookup Vindex in the specified keyspace and backfill it with a VReplication workflow. +* [vtctldclient LookupVindex externalize](./vtctldclient_lookupvindex_externalize/) - Externalize the Lookup Vindex. If the Vindex has an owner the VReplication workflow will also be deleted. +* [vtctldclient LookupVindex show](./vtctldclient_lookupvindex_show/) - Show the status of the VReplication workflow that backfills the Lookup Vindex. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_LookupVindex/vtctldclient_LookupVindex_cancel.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_LookupVindex/vtctldclient_LookupVindex_cancel.md new file mode 100644 index 000000000..71fbb5a34 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_LookupVindex/vtctldclient_LookupVindex_cancel.md @@ -0,0 +1,42 @@ +--- +title: LookupVindex cancel +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient LookupVindex cancel + +Cancel the VReplication workflow that backfills the Lookup Vindex. + +``` +vtctldclient LookupVindex cancel +``` + +### Examples + +``` +vtctldclient --server localhost:15999 LookupVindex --name corder_lookup_vdx --table-keyspace customer cancel +``` + +### Options + +``` + -h, --help help for cancel +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --name string The name of the Lookup Vindex to create. This will also be the name of the VReplication workflow created to backfill the Lookup Vindex. + --server string server to use for the connection (required) + --table-keyspace string The keyspace to create the lookup table in. This is also where the VReplication workflow is created to backfill the Lookup Vindex. + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient LookupVindex](../) - Perform commands related to creating, backfilling, and externalizing Lookup Vindexes using VReplication workflows. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_LookupVindex/vtctldclient_LookupVindex_create.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_LookupVindex/vtctldclient_LookupVindex_create.md new file mode 100644 index 000000000..f5c2182f9 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_LookupVindex/vtctldclient_LookupVindex_create.md @@ -0,0 +1,53 @@ +--- +title: LookupVindex create +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient LookupVindex create + +Create the Lookup Vindex in the specified keyspace and backfill it with a VReplication workflow. + +``` +vtctldclient LookupVindex create +``` + +### Examples + +``` +vtctldclient --server localhost:15999 LookupVindex --name corder_lookup_vdx --table-keyspace customer create --keyspace customer --type consistent_lookup_unique --table-owner corder --table-owner-columns sku --table-name corder_lookup_tbl --table-vindex-type unicode_loose_xxhash +``` + +### Options + +``` + --cells strings Cells to look in for source tablets to replicate from. + --continue-after-copy-with-owner Vindex will continue materialization after the backfill completes when an owner is provided. (default true) + -h, --help help for create + --ignore-nulls Do not add corresponding records in the lookup table if any of the owner table's 'from' fields are NULL. + --keyspace string The keyspace to create the Lookup Vindex in. This is also where the table-owner must exist. + --table-name string The name of the lookup table. If not specified, then it will be created using the same name as the Lookup Vindex. + --table-owner string The table holding the data which we should use to backfill the Lookup Vindex. This must exist in the same keyspace as the Lookup Vindex. + --table-owner-columns strings The columns to read from the owner table. These will be used to build the hash which gets stored as the keyspace_id value in the lookup table. + --table-vindex-type string The primary vindex name/type to use for the lookup table, if the table-keyspace is sharded. This must match the name of a vindex defined in the table-keyspace. If no value is provided then the default type will be used based on the table-owner-columns types. + --tablet-types strings Source tablet types to replicate from. + --tablet-types-in-preference-order When performing source tablet selection, look for candidates in the type order as they are listed in the tablet-types flag. (default true) + --type string The type of Lookup Vindex to create. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --name string The name of the Lookup Vindex to create. This will also be the name of the VReplication workflow created to backfill the Lookup Vindex. + --server string server to use for the connection (required) + --table-keyspace string The keyspace to create the lookup table in. This is also where the VReplication workflow is created to backfill the Lookup Vindex. + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient LookupVindex](../) - Perform commands related to creating, backfilling, and externalizing Lookup Vindexes using VReplication workflows. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_LookupVindex/vtctldclient_LookupVindex_externalize.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_LookupVindex/vtctldclient_LookupVindex_externalize.md new file mode 100644 index 000000000..de4916c0c --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_LookupVindex/vtctldclient_LookupVindex_externalize.md @@ -0,0 +1,43 @@ +--- +title: LookupVindex externalize +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient LookupVindex externalize + +Externalize the Lookup Vindex. If the Vindex has an owner the VReplication workflow will also be deleted. + +``` +vtctldclient LookupVindex externalize +``` + +### Examples + +``` +vtctldclient --server localhost:15999 LookupVindex --name corder_lookup_vdx --table-keyspace customer externalize +``` + +### Options + +``` + -h, --help help for externalize + --keyspace string The keyspace containing the Lookup Vindex. If no value is specified then the table-keyspace will be used. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --name string The name of the Lookup Vindex to create. This will also be the name of the VReplication workflow created to backfill the Lookup Vindex. + --server string server to use for the connection (required) + --table-keyspace string The keyspace to create the lookup table in. This is also where the VReplication workflow is created to backfill the Lookup Vindex. + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient LookupVindex](../) - Perform commands related to creating, backfilling, and externalizing Lookup Vindexes using VReplication workflows. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_LookupVindex/vtctldclient_LookupVindex_show.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_LookupVindex/vtctldclient_LookupVindex_show.md new file mode 100644 index 000000000..f2941e4b2 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_LookupVindex/vtctldclient_LookupVindex_show.md @@ -0,0 +1,42 @@ +--- +title: LookupVindex show +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient LookupVindex show + +Show the status of the VReplication workflow that backfills the Lookup Vindex. + +``` +vtctldclient LookupVindex show +``` + +### Examples + +``` +vtctldclient --server localhost:15999 LookupVindex --name corder_lookup_vdx --table-keyspace customer show +``` + +### Options + +``` + -h, --help help for show +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --name string The name of the Lookup Vindex to create. This will also be the name of the VReplication workflow created to backfill the Lookup Vindex. + --server string server to use for the connection (required) + --table-keyspace string The keyspace to create the lookup table in. This is also where the VReplication workflow is created to backfill the Lookup Vindex. + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient LookupVindex](../) - Perform commands related to creating, backfilling, and externalizing Lookup Vindexes using VReplication workflows. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Materialize/_index.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Materialize/_index.md new file mode 100644 index 000000000..e5cd641a3 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Materialize/_index.md @@ -0,0 +1,38 @@ +--- +title: Materialize +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient Materialize + +Perform commands related to materializing query results from the source keyspace into tables in the target keyspace. + +### Options + +``` + --format string The format of the output; supported formats are: text,json. (default "text") + -h, --help help for Materialize + --target-keyspace string Target keyspace for this workflow. + -w, --workflow string The workflow you want to perform the command on. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. +* [vtctldclient Materialize cancel](./vtctldclient_materialize_cancel/) - Cancel a Materialize VReplication workflow. +* [vtctldclient Materialize create](./vtctldclient_materialize_create/) - Create and run a Materialize VReplication workflow. +* [vtctldclient Materialize show](./vtctldclient_materialize_show/) - Show the details for a Materialize VReplication workflow. +* [vtctldclient Materialize start](./vtctldclient_materialize_start/) - Start a Materialize workflow. +* [vtctldclient Materialize stop](./vtctldclient_materialize_stop/) - Stop a Materialize workflow. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Materialize/vtctldclient_Materialize_cancel.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Materialize/vtctldclient_Materialize_cancel.md new file mode 100644 index 000000000..aed379207 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Materialize/vtctldclient_Materialize_cancel.md @@ -0,0 +1,43 @@ +--- +title: Materialize cancel +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient Materialize cancel + +Cancel a Materialize VReplication workflow. + +``` +vtctldclient Materialize cancel +``` + +### Examples + +``` +vtctldclient --server localhost:15999 Materialize --workflow product_sales --target-keyspace customer cancel +``` + +### Options + +``` + -h, --help help for cancel +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --format string The format of the output; supported formats are: text,json. (default "text") + --server string server to use for the connection (required) + --target-keyspace string Target keyspace for this workflow. + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") + -w, --workflow string The workflow you want to perform the command on. +``` + +### SEE ALSO + +* [vtctldclient Materialize](../) - Perform commands related to materializing query results from the source keyspace into tables in the target keyspace. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Materialize/vtctldclient_Materialize_create.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Materialize/vtctldclient_Materialize_create.md new file mode 100644 index 000000000..603b5923a --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Materialize/vtctldclient_Materialize_create.md @@ -0,0 +1,82 @@ +--- +title: Materialize create +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient Materialize create + +Create and run a Materialize VReplication workflow. + +### Synopsis + +Materialize is a lower level VReplication command that allows for generalized materialization +of tables. The target tables can be copies, aggregations, or views. The target tables are kept +in sync in near-realtime. The primary flag used to define the materializations (you can have +multiple per workflow) is table-settings which is a JSON array where each value must contain +two key/value pairs. The first required key is 'target_table' and it is the name of the table +in the target-keyspace to store the results in. The second required key is 'source_expression' +and its value is the select query to run against the source table. An optional key/value pair +can also be specified for 'create_ddl' which provides the DDL to create the target table if it +does not exist -- you can alternatively specify a value of 'copy' if the target table schema +should be copied as-is from the source keyspace. Here's an example value for table-settings: +[ + { + "target_table": "customer_one_email", + "source_expression": "select email from customer where customer_id = 1" + }, + { + "target_table": "states", + "source_expression": "select * from states", + "create_ddl": "copy" + }, + { + "target_table": "sales_by_sku", + "source_expression": "select sku, count(*) as orders, sum(price) as revenue from corder group by sku", + "create_ddl": "create table sales_by_sku (sku varbinary(128) not null primary key, orders bigint, revenue bigint)" + } +] + + +``` +vtctldclient Materialize create +``` + +### Examples + +``` +vtctldclient --server localhost:15999 materialize --workflow product_sales --target-keyspace commerce create --source-keyspace commerce --table-settings '[{"target_table": "sales_by_sku", "create_ddl": "create table sales_by_sku (sku varbinary(128) not null primary key, orders bigint, revenue bigint)", "source_expression": "select sku, count(*) as orders, sum(price) as revenue from corder group by sku"}]' --cells zone1 --cells zone2 --tablet-types replica +``` + +### Options + +``` + -c, --cells strings Cells and/or CellAliases to copy table data from. + -h, --help help for create + --mysql_server_version string Configure the MySQL version to use for example for the parser. (default "8.0.30-Vitess") + --source-keyspace string Keyspace where the tables queried in the 'source_expression' values within table-settings live. + --sql-max-length-errors int truncate queries in error logs to the given length (default unlimited) + --sql-max-length-ui int truncate queries in debug UIs to the given length (default 512) (default 512) + --stop-after-copy Stop the workflow after it's finished copying the existing rows and before it starts replicating changes. + --table-settings JSON A JSON array defining what tables to materialize using what select statements. See the --help output for more details. (default null) + --tablet-types strings Source tablet types to replicate table data from (e.g. PRIMARY,REPLICA,RDONLY). + --tablet-types-in-preference-order When performing source tablet selection, look for candidates in the type order as they are listed in the tablet-types flag. (default true) +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --format string The format of the output; supported formats are: text,json. (default "text") + --server string server to use for the connection (required) + --target-keyspace string Target keyspace for this workflow. + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") + -w, --workflow string The workflow you want to perform the command on. +``` + +### SEE ALSO + +* [vtctldclient Materialize](../) - Perform commands related to materializing query results from the source keyspace into tables in the target keyspace. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Materialize/vtctldclient_Materialize_show.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Materialize/vtctldclient_Materialize_show.md new file mode 100644 index 000000000..cc049a039 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Materialize/vtctldclient_Materialize_show.md @@ -0,0 +1,44 @@ +--- +title: Materialize show +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient Materialize show + +Show the details for a Materialize VReplication workflow. + +``` +vtctldclient Materialize show +``` + +### Examples + +``` +vtctldclient --server localhost:15999 Materialize --workflow product_sales --target-keyspace customer show +``` + +### Options + +``` + -h, --help help for show + --include-logs Include recent logs for the workflow. (default true) +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --format string The format of the output; supported formats are: text,json. (default "text") + --server string server to use for the connection (required) + --target-keyspace string Target keyspace for this workflow. + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") + -w, --workflow string The workflow you want to perform the command on. +``` + +### SEE ALSO + +* [vtctldclient Materialize](../) - Perform commands related to materializing query results from the source keyspace into tables in the target keyspace. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Materialize/vtctldclient_Materialize_start.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Materialize/vtctldclient_Materialize_start.md new file mode 100644 index 000000000..6a32cdc75 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Materialize/vtctldclient_Materialize_start.md @@ -0,0 +1,43 @@ +--- +title: Materialize start +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient Materialize start + +Start a Materialize workflow. + +``` +vtctldclient Materialize start +``` + +### Examples + +``` +vtctldclient --server localhost:15999 Materialize --workflow product_sales --target-keyspace customer start +``` + +### Options + +``` + -h, --help help for start +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --format string The format of the output; supported formats are: text,json. (default "text") + --server string server to use for the connection (required) + --target-keyspace string Target keyspace for this workflow. + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") + -w, --workflow string The workflow you want to perform the command on. +``` + +### SEE ALSO + +* [vtctldclient Materialize](../) - Perform commands related to materializing query results from the source keyspace into tables in the target keyspace. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Materialize/vtctldclient_Materialize_stop.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Materialize/vtctldclient_Materialize_stop.md new file mode 100644 index 000000000..0e3d0a7ff --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Materialize/vtctldclient_Materialize_stop.md @@ -0,0 +1,43 @@ +--- +title: Materialize stop +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient Materialize stop + +Stop a Materialize workflow. + +``` +vtctldclient Materialize stop +``` + +### Examples + +``` +vtctldclient --server localhost:15999 Materialize --workflow product_sales --target-keyspace customer stop +``` + +### Options + +``` + -h, --help help for stop +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --format string The format of the output; supported formats are: text,json. (default "text") + --server string server to use for the connection (required) + --target-keyspace string Target keyspace for this workflow. + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") + -w, --workflow string The workflow you want to perform the command on. +``` + +### SEE ALSO + +* [vtctldclient Materialize](../) - Perform commands related to materializing query results from the source keyspace into tables in the target keyspace. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Migrate/_index.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Migrate/_index.md new file mode 100644 index 000000000..f24a6e9bd --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Migrate/_index.md @@ -0,0 +1,38 @@ +--- +title: Migrate +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient Migrate + +Migrate is used to import data from an external cluster into the current cluster. + +### Options + +``` + --format string The format of the output; supported formats are: text,json. (default "text") + -h, --help help for Migrate + --target-keyspace string Target keyspace for this workflow. + -w, --workflow string The workflow you want to perform the command on. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. +* [vtctldclient Migrate cancel](./vtctldclient_migrate_cancel/) - Cancel a Migrate VReplication workflow. +* [vtctldclient Migrate complete](./vtctldclient_migrate_complete/) - Complete a Migrate VReplication workflow. +* [vtctldclient Migrate create](./vtctldclient_migrate_create/) - Create and optionally run a Migrate VReplication workflow. +* [vtctldclient Migrate show](./vtctldclient_migrate_show/) - Show the details for a Migrate VReplication workflow. +* [vtctldclient Migrate status](./vtctldclient_migrate_status/) - Show the current status for a Migrate VReplication workflow. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Migrate/vtctldclient_Migrate_cancel.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Migrate/vtctldclient_Migrate_cancel.md new file mode 100644 index 000000000..fabbcaf35 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Migrate/vtctldclient_Migrate_cancel.md @@ -0,0 +1,43 @@ +--- +title: Migrate cancel +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient Migrate cancel + +Cancel a Migrate VReplication workflow. + +``` +vtctldclient Migrate cancel +``` + +### Examples + +``` +vtctldclient --server localhost:15999 Migrate --workflow import --target-keyspace customer cancel +``` + +### Options + +``` + -h, --help help for cancel +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --format string The format of the output; supported formats are: text,json. (default "text") + --server string server to use for the connection (required) + --target-keyspace string Target keyspace for this workflow. + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") + -w, --workflow string The workflow you want to perform the command on. +``` + +### SEE ALSO + +* [vtctldclient Migrate](../) - Migrate is used to import data from an external cluster into the current cluster. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Migrate/vtctldclient_Migrate_complete.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Migrate/vtctldclient_Migrate_complete.md new file mode 100644 index 000000000..1af150560 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Migrate/vtctldclient_Migrate_complete.md @@ -0,0 +1,43 @@ +--- +title: Migrate complete +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient Migrate complete + +Complete a Migrate VReplication workflow. + +``` +vtctldclient Migrate complete +``` + +### Examples + +``` +vtctldclient --server localhost:15999 Migrate --workflow import --target-keyspace customer complete +``` + +### Options + +``` + -h, --help help for complete +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --format string The format of the output; supported formats are: text,json. (default "text") + --server string server to use for the connection (required) + --target-keyspace string Target keyspace for this workflow. + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") + -w, --workflow string The workflow you want to perform the command on. +``` + +### SEE ALSO + +* [vtctldclient Migrate](../) - Migrate is used to import data from an external cluster into the current cluster. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Migrate/vtctldclient_Migrate_create.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Migrate/vtctldclient_Migrate_create.md new file mode 100644 index 000000000..97bcb699b --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Migrate/vtctldclient_Migrate_create.md @@ -0,0 +1,58 @@ +--- +title: Migrate create +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient Migrate create + +Create and optionally run a Migrate VReplication workflow. + +``` +vtctldclient Migrate create +``` + +### Examples + +``` +vtctldclient --server localhost:15999 migrate --workflow import --target-keyspace customer create --source-keyspace commerce --mount-name ext1 --tablet-types replica +``` + +### Options + +``` + -a, --all-cells Copy table data from any existing cell. + --all-tables Copy all tables from the source. + --auto-start Start the workflow after creating it. (default true) + -c, --cells strings Cells and/or CellAliases to copy table data from. + --defer-secondary-keys Defer secondary index creation for a table until after it has been copied. + --exclude-tables strings Source tables to exclude from copying. + -h, --help help for create + --mount-name string Name external cluster is mounted as. + --no-routing-rules (Advanced) Do not create routing rules while creating the workflow. See the reference documentation for limitations if you use this flag. + --on-ddl string What to do when DDL is encountered in the VReplication stream. Possible values are IGNORE, STOP, EXEC, and EXEC_IGNORE. (default "IGNORE") + --source-keyspace string Keyspace where the tables are being moved from. + --source-time-zone string Specifying this causes any DATETIME fields to be converted from the given time zone into UTC. + --stop-after-copy Stop the workflow after it's finished copying the existing rows and before it starts replicating changes. + --tables strings Source tables to copy. + --tablet-types strings Source tablet types to replicate table data from (e.g. PRIMARY,REPLICA,RDONLY). + --tablet-types-in-preference-order When performing source tablet selection, look for candidates in the type order as they are listed in the tablet-types flag. (default true) +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --format string The format of the output; supported formats are: text,json. (default "text") + --server string server to use for the connection (required) + --target-keyspace string Target keyspace for this workflow. + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") + -w, --workflow string The workflow you want to perform the command on. +``` + +### SEE ALSO + +* [vtctldclient Migrate](../) - Migrate is used to import data from an external cluster into the current cluster. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Migrate/vtctldclient_Migrate_show.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Migrate/vtctldclient_Migrate_show.md new file mode 100644 index 000000000..b78669144 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Migrate/vtctldclient_Migrate_show.md @@ -0,0 +1,44 @@ +--- +title: Migrate show +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient Migrate show + +Show the details for a Migrate VReplication workflow. + +``` +vtctldclient Migrate show +``` + +### Examples + +``` +vtctldclient --server localhost:15999 Migrate --workflow import --target-keyspace customer show +``` + +### Options + +``` + -h, --help help for show + --include-logs Include recent logs for the workflow. (default true) +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --format string The format of the output; supported formats are: text,json. (default "text") + --server string server to use for the connection (required) + --target-keyspace string Target keyspace for this workflow. + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") + -w, --workflow string The workflow you want to perform the command on. +``` + +### SEE ALSO + +* [vtctldclient Migrate](../) - Migrate is used to import data from an external cluster into the current cluster. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Migrate/vtctldclient_Migrate_status.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Migrate/vtctldclient_Migrate_status.md new file mode 100644 index 000000000..09f3f6d68 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Migrate/vtctldclient_Migrate_status.md @@ -0,0 +1,43 @@ +--- +title: Migrate status +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient Migrate status + +Show the current status for a Migrate VReplication workflow. + +``` +vtctldclient Migrate status +``` + +### Examples + +``` +vtctldclient --server localhost:15999 Migrate --workflow import --target-keyspace customer status +``` + +### Options + +``` + -h, --help help for status +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --format string The format of the output; supported formats are: text,json. (default "text") + --server string server to use for the connection (required) + --target-keyspace string Target keyspace for this workflow. + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") + -w, --workflow string The workflow you want to perform the command on. +``` + +### SEE ALSO + +* [vtctldclient Migrate](../) - Migrate is used to import data from an external cluster into the current cluster. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Mount/_index.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Mount/_index.md new file mode 100644 index 000000000..006f84f97 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Mount/_index.md @@ -0,0 +1,34 @@ +--- +title: Mount +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient Mount + +Mount is used to link an external Vitess cluster in order to migrate data from it. + +### Options + +``` + -h, --help help for Mount +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. +* [vtctldclient Mount list](./vtctldclient_mount_list/) - List all mounted external Vitess Clusters. +* [vtctldclient Mount register](./vtctldclient_mount_register/) - Register an external Vitess Cluster. +* [vtctldclient Mount show](./vtctldclient_mount_show/) - Show attributes of a previously mounted external Vitess Cluster. +* [vtctldclient Mount unregister](./vtctldclient_mount_unregister/) - Unregister a previously mounted external Vitess Cluster. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Mount/vtctldclient_Mount_list.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Mount/vtctldclient_Mount_list.md new file mode 100644 index 000000000..e12bfc157 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Mount/vtctldclient_Mount_list.md @@ -0,0 +1,40 @@ +--- +title: Mount list +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient Mount list + +List all mounted external Vitess Clusters. + +``` +vtctldclient Mount list +``` + +### Examples + +``` +vtctldclient --server localhost:15999 mount list +``` + +### Options + +``` + -h, --help help for list +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient Mount](../) - Mount is used to link an external Vitess cluster in order to migrate data from it. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Mount/vtctldclient_Mount_register.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Mount/vtctldclient_Mount_register.md new file mode 100644 index 000000000..d3086fc03 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Mount/vtctldclient_Mount_register.md @@ -0,0 +1,44 @@ +--- +title: Mount register +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient Mount register + +Register an external Vitess Cluster. + +``` +vtctldclient Mount register +``` + +### Examples + +``` +vtctldclient --server localhost:15999 mount register --name ext1 --topo-type etcd2 --topo-server localhost:12379 --topo-root /vitess/global +``` + +### Options + +``` + -h, --help help for register + --name string Name to use for the mount. + --topo-root string Topo server root path. + --topo-server string Topo server address. + --topo-type string Topo server implementation to use. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient Mount](../) - Mount is used to link an external Vitess cluster in order to migrate data from it. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Mount/vtctldclient_Mount_show.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Mount/vtctldclient_Mount_show.md new file mode 100644 index 000000000..58e018b74 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Mount/vtctldclient_Mount_show.md @@ -0,0 +1,41 @@ +--- +title: Mount show +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient Mount show + +Show attributes of a previously mounted external Vitess Cluster. + +``` +vtctldclient Mount show +``` + +### Examples + +``` +vtctldclient --server localhost:15999 mount show --name ext1 +``` + +### Options + +``` + -h, --help help for show + --name string Name of the mount. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient Mount](../) - Mount is used to link an external Vitess cluster in order to migrate data from it. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Mount/vtctldclient_Mount_unregister.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Mount/vtctldclient_Mount_unregister.md new file mode 100644 index 000000000..f0b257b97 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Mount/vtctldclient_Mount_unregister.md @@ -0,0 +1,41 @@ +--- +title: Mount unregister +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient Mount unregister + +Unregister a previously mounted external Vitess Cluster. + +``` +vtctldclient Mount unregister +``` + +### Examples + +``` +vtctldclient --server localhost:15999 mount unregister --name ext1 +``` + +### Options + +``` + -h, --help help for unregister + --name string Name of the mount. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient Mount](../) - Mount is used to link an external Vitess cluster in order to migrate data from it. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/_index.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/_index.md new file mode 100644 index 000000000..40366d92e --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/_index.md @@ -0,0 +1,42 @@ +--- +title: MoveTables +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient MoveTables + +Perform commands related to moving tables from a source keyspace to a target keyspace. + +### Options + +``` + --format string The format of the output; supported formats are: text,json. (default "text") + -h, --help help for MoveTables + --target-keyspace string Target keyspace for this workflow. + -w, --workflow string The workflow you want to perform the command on. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. +* [vtctldclient MoveTables cancel](./vtctldclient_movetables_cancel/) - Cancel a MoveTables VReplication workflow. +* [vtctldclient MoveTables complete](./vtctldclient_movetables_complete/) - Complete a MoveTables VReplication workflow. +* [vtctldclient MoveTables create](./vtctldclient_movetables_create/) - Create and optionally run a MoveTables VReplication workflow. +* [vtctldclient MoveTables reversetraffic](./vtctldclient_movetables_reversetraffic/) - Reverse traffic for a MoveTables VReplication workflow. +* [vtctldclient MoveTables show](./vtctldclient_movetables_show/) - Show the details for a MoveTables VReplication workflow. +* [vtctldclient MoveTables start](./vtctldclient_movetables_start/) - Start a MoveTables workflow. +* [vtctldclient MoveTables status](./vtctldclient_movetables_status/) - Show the current status for a MoveTables VReplication workflow. +* [vtctldclient MoveTables stop](./vtctldclient_movetables_stop/) - Stop a MoveTables workflow. +* [vtctldclient MoveTables switchtraffic](./vtctldclient_movetables_switchtraffic/) - Switch traffic for a MoveTables VReplication workflow. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/vtctldclient_MoveTables_cancel.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/vtctldclient_MoveTables_cancel.md new file mode 100644 index 000000000..b556b8e21 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/vtctldclient_MoveTables_cancel.md @@ -0,0 +1,46 @@ +--- +title: MoveTables cancel +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient MoveTables cancel + +Cancel a MoveTables VReplication workflow. + +``` +vtctldclient MoveTables cancel +``` + +### Examples + +``` +vtctldclient --server localhost:15999 MoveTables --workflow commerce2customer --target-keyspace customer cancel +``` + +### Options + +``` + -h, --help help for cancel + --keep-data Keep the partially copied table data from the MoveTables workflow in the target keyspace. + --keep-routing-rules Keep the routing rules created for the MoveTables workflow. + --shards strings (Optional) Specifies a comma-separated list of shards to operate on. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --format string The format of the output; supported formats are: text,json. (default "text") + --server string server to use for the connection (required) + --target-keyspace string Target keyspace for this workflow. + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") + -w, --workflow string The workflow you want to perform the command on. +``` + +### SEE ALSO + +* [vtctldclient MoveTables](../) - Perform commands related to moving tables from a source keyspace to a target keyspace. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/vtctldclient_MoveTables_complete.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/vtctldclient_MoveTables_complete.md new file mode 100644 index 000000000..dfb1b22a5 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/vtctldclient_MoveTables_complete.md @@ -0,0 +1,48 @@ +--- +title: MoveTables complete +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient MoveTables complete + +Complete a MoveTables VReplication workflow. + +``` +vtctldclient MoveTables complete +``` + +### Examples + +``` +vtctldclient --server localhost:15999 MoveTables --workflow commerce2customer --target-keyspace customer complete +``` + +### Options + +``` + --dry-run Print the actions that would be taken and report any known errors that would have occurred. + -h, --help help for complete + --keep-data Keep the original source table data that was copied by the MoveTables workflow. + --keep-routing-rules Keep the routing rules in place that direct table traffic from the source keyspace to the target keyspace of the MoveTables workflow. + --rename-tables Keep the original source table data that was copied by the MoveTables workflow, but rename each table to '__old'. + --shards strings (Optional) Specifies a comma-separated list of shards to operate on. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --format string The format of the output; supported formats are: text,json. (default "text") + --server string server to use for the connection (required) + --target-keyspace string Target keyspace for this workflow. + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") + -w, --workflow string The workflow you want to perform the command on. +``` + +### SEE ALSO + +* [vtctldclient MoveTables](../) - Perform commands related to moving tables from a source keyspace to a target keyspace. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/vtctldclient_MoveTables_create.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/vtctldclient_MoveTables_create.md new file mode 100644 index 000000000..6a50ba532 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/vtctldclient_MoveTables_create.md @@ -0,0 +1,62 @@ +--- +title: MoveTables create +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient MoveTables create + +Create and optionally run a MoveTables VReplication workflow. + +``` +vtctldclient MoveTables create +``` + +### Examples + +``` +vtctldclient --server localhost:15999 movetables --workflow commerce2customer --target-keyspace customer create --source-keyspace commerce --cells zone1 --cells zone2 --tablet-types replica +``` + +### Options + +``` + -a, --all-cells Copy table data from any existing cell. + --all-tables Copy all tables from the source. + --atomic-copy (EXPERIMENTAL) A single copy phase is run for all tables from the source. Use this, for example, if your source keyspace has tables which use foreign key constraints. + --auto-start Start the workflow after creating it. (default true) + -c, --cells strings Cells and/or CellAliases to copy table data from. + --defer-secondary-keys Defer secondary index creation for a table until after it has been copied. + --exclude-tables strings Source tables to exclude from copying. + -h, --help help for create + --no-routing-rules (Advanced) Do not create routing rules while creating the workflow. See the reference documentation for limitations if you use this flag. + --on-ddl string What to do when DDL is encountered in the VReplication stream. Possible values are IGNORE, STOP, EXEC, and EXEC_IGNORE. (default "IGNORE") + --remove-sharded-auto-increment If moving the table(s) to a sharded keyspace, remove any auto_increment clauses when copying the schema to the target as sharded keyspaces should rely on either user/application generated values or Vitess sequences to ensure uniqueness. (default true) + --shards strings (EXPERIMENTAL: Multi-tenant migrations only) Specify that vreplication streams should only be created on this subset of target shards. Warning: you should first ensure that all rows on the source route to the specified subset of target shards using your VIndex of choice or you could lose data during the migration. + --source-keyspace string Keyspace where the tables are being moved from. + --source-shards strings Source shards to copy data from when performing a partial MoveTables (experimental). + --source-time-zone string Specifying this causes any DATETIME fields to be converted from the given time zone into UTC. + --stop-after-copy Stop the workflow after it's finished copying the existing rows and before it starts replicating changes. + --tables strings Source tables to copy. + --tablet-types strings Source tablet types to replicate table data from (e.g. PRIMARY,REPLICA,RDONLY). + --tablet-types-in-preference-order When performing source tablet selection, look for candidates in the type order as they are listed in the tablet-types flag. (default true) + --tenant-id string (EXPERIMENTAL: Multi-tenant migrations only) The tenant ID to use for the MoveTables workflow into a multi-tenant keyspace. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --format string The format of the output; supported formats are: text,json. (default "text") + --server string server to use for the connection (required) + --target-keyspace string Target keyspace for this workflow. + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") + -w, --workflow string The workflow you want to perform the command on. +``` + +### SEE ALSO + +* [vtctldclient MoveTables](../) - Perform commands related to moving tables from a source keyspace to a target keyspace. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/vtctldclient_MoveTables_reversetraffic.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/vtctldclient_MoveTables_reversetraffic.md new file mode 100644 index 000000000..d8002ce19 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/vtctldclient_MoveTables_reversetraffic.md @@ -0,0 +1,50 @@ +--- +title: MoveTables reversetraffic +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient MoveTables reversetraffic + +Reverse traffic for a MoveTables VReplication workflow. + +``` +vtctldclient MoveTables reversetraffic +``` + +### Examples + +``` +vtctldclient --server localhost:15999 MoveTables --workflow commerce2customer --target-keyspace customer reversetraffic +``` + +### Options + +``` + -c, --cells strings Cells and/or CellAliases to switch traffic in. + --dry-run Print the actions that would be taken and report any known errors that would have occurred. + --enable-reverse-replication Setup replication going back to the original source keyspace to support rolling back the traffic cutover. (default true) + -h, --help help for reversetraffic + --max-replication-lag-allowed duration Allow traffic to be switched only if VReplication lag is below this. (default 30s) + --shards strings (Optional) Specifies a comma-separated list of shards to operate on. + --tablet-types strings Tablet types to switch traffic for. + --timeout duration Specifies the maximum time to wait, in seconds, for VReplication to catch up on primary tablets. The traffic switch will be cancelled on timeout. (default 30s) +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --format string The format of the output; supported formats are: text,json. (default "text") + --server string server to use for the connection (required) + --target-keyspace string Target keyspace for this workflow. + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") + -w, --workflow string The workflow you want to perform the command on. +``` + +### SEE ALSO + +* [vtctldclient MoveTables](../) - Perform commands related to moving tables from a source keyspace to a target keyspace. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/vtctldclient_MoveTables_show.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/vtctldclient_MoveTables_show.md new file mode 100644 index 000000000..cbcef6aff --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/vtctldclient_MoveTables_show.md @@ -0,0 +1,45 @@ +--- +title: MoveTables show +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient MoveTables show + +Show the details for a MoveTables VReplication workflow. + +``` +vtctldclient MoveTables show +``` + +### Examples + +``` +vtctldclient --server localhost:15999 MoveTables --workflow commerce2customer --target-keyspace customer show +``` + +### Options + +``` + -h, --help help for show + --include-logs Include recent logs for the workflow. (default true) + --shards strings (Optional) Specifies a comma-separated list of shards to operate on. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --format string The format of the output; supported formats are: text,json. (default "text") + --server string server to use for the connection (required) + --target-keyspace string Target keyspace for this workflow. + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") + -w, --workflow string The workflow you want to perform the command on. +``` + +### SEE ALSO + +* [vtctldclient MoveTables](../) - Perform commands related to moving tables from a source keyspace to a target keyspace. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/vtctldclient_MoveTables_start.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/vtctldclient_MoveTables_start.md new file mode 100644 index 000000000..433aa10ff --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/vtctldclient_MoveTables_start.md @@ -0,0 +1,43 @@ +--- +title: MoveTables start +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient MoveTables start + +Start a MoveTables workflow. + +``` +vtctldclient MoveTables start +``` + +### Examples + +``` +vtctldclient --server localhost:15999 MoveTables --workflow commerce2customer --target-keyspace customer start +``` + +### Options + +``` + -h, --help help for start +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --format string The format of the output; supported formats are: text,json. (default "text") + --server string server to use for the connection (required) + --target-keyspace string Target keyspace for this workflow. + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") + -w, --workflow string The workflow you want to perform the command on. +``` + +### SEE ALSO + +* [vtctldclient MoveTables](../) - Perform commands related to moving tables from a source keyspace to a target keyspace. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/vtctldclient_MoveTables_status.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/vtctldclient_MoveTables_status.md new file mode 100644 index 000000000..f5fd48769 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/vtctldclient_MoveTables_status.md @@ -0,0 +1,44 @@ +--- +title: MoveTables status +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient MoveTables status + +Show the current status for a MoveTables VReplication workflow. + +``` +vtctldclient MoveTables status +``` + +### Examples + +``` +vtctldclient --server localhost:15999 MoveTables --workflow commerce2customer --target-keyspace customer status +``` + +### Options + +``` + -h, --help help for status + --shards strings (Optional) Specifies a comma-separated list of shards to operate on. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --format string The format of the output; supported formats are: text,json. (default "text") + --server string server to use for the connection (required) + --target-keyspace string Target keyspace for this workflow. + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") + -w, --workflow string The workflow you want to perform the command on. +``` + +### SEE ALSO + +* [vtctldclient MoveTables](../) - Perform commands related to moving tables from a source keyspace to a target keyspace. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/vtctldclient_MoveTables_stop.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/vtctldclient_MoveTables_stop.md new file mode 100644 index 000000000..e4be8d8bf --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/vtctldclient_MoveTables_stop.md @@ -0,0 +1,43 @@ +--- +title: MoveTables stop +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient MoveTables stop + +Stop a MoveTables workflow. + +``` +vtctldclient MoveTables stop +``` + +### Examples + +``` +vtctldclient --server localhost:15999 MoveTables --workflow commerce2customer --target-keyspace customer stop +``` + +### Options + +``` + -h, --help help for stop +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --format string The format of the output; supported formats are: text,json. (default "text") + --server string server to use for the connection (required) + --target-keyspace string Target keyspace for this workflow. + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") + -w, --workflow string The workflow you want to perform the command on. +``` + +### SEE ALSO + +* [vtctldclient MoveTables](../) - Perform commands related to moving tables from a source keyspace to a target keyspace. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/vtctldclient_MoveTables_switchtraffic.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/vtctldclient_MoveTables_switchtraffic.md new file mode 100644 index 000000000..c53702aa7 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_MoveTables/vtctldclient_MoveTables_switchtraffic.md @@ -0,0 +1,51 @@ +--- +title: MoveTables switchtraffic +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient MoveTables switchtraffic + +Switch traffic for a MoveTables VReplication workflow. + +``` +vtctldclient MoveTables switchtraffic +``` + +### Examples + +``` +vtctldclient --server localhost:15999 MoveTables --workflow commerce2customer --target-keyspace customer switchtraffic --tablet-types "replica,rdonly" +``` + +### Options + +``` + -c, --cells strings Cells and/or CellAliases to switch traffic in. + --dry-run Print the actions that would be taken and report any known errors that would have occurred. + --enable-reverse-replication Setup replication going back to the original source keyspace to support rolling back the traffic cutover. (default true) + -h, --help help for switchtraffic + --initialize-target-sequences When moving tables from an unsharded keyspace to a sharded keyspace, initialize any sequences that are being used on the target when switching writes. + --max-replication-lag-allowed duration Allow traffic to be switched only if VReplication lag is below this. (default 30s) + --shards strings (Optional) Specifies a comma-separated list of shards to operate on. + --tablet-types strings Tablet types to switch traffic for. + --timeout duration Specifies the maximum time to wait, in seconds, for VReplication to catch up on primary tablets. The traffic switch will be cancelled on timeout. (default 30s) +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --format string The format of the output; supported formats are: text,json. (default "text") + --server string server to use for the connection (required) + --target-keyspace string Target keyspace for this workflow. + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") + -w, --workflow string The workflow you want to perform the command on. +``` + +### SEE ALSO + +* [vtctldclient MoveTables](../) - Perform commands related to moving tables from a source keyspace to a target keyspace. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/_index.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/_index.md new file mode 100644 index 000000000..9690e81eb --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/_index.md @@ -0,0 +1,39 @@ +--- +title: OnlineDDL +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient OnlineDDL + +Operates on online DDL (schema migrations). + +### Options + +``` + -h, --help help for OnlineDDL +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. +* [vtctldclient OnlineDDL cancel](./vtctldclient_onlineddl_cancel/) - Cancel one or all migrations, terminating any running ones as needed. +* [vtctldclient OnlineDDL cleanup](./vtctldclient_onlineddl_cleanup/) - Mark a given schema migration ready for artifact cleanup. +* [vtctldclient OnlineDDL complete](./vtctldclient_onlineddl_complete/) - Complete one or all migrations executed with --postpone-completion +* [vtctldclient OnlineDDL force-cutover](./vtctldclient_onlineddl_force-cutover/) - Mark a given schema migration, or all pending migrations, for forced cut over. +* [vtctldclient OnlineDDL launch](./vtctldclient_onlineddl_launch/) - Launch one or all migrations executed with --postpone-launch +* [vtctldclient OnlineDDL retry](./vtctldclient_onlineddl_retry/) - Mark a given schema migration for retry. +* [vtctldclient OnlineDDL show](./vtctldclient_onlineddl_show/) - Display information about online DDL operations. +* [vtctldclient OnlineDDL throttle](./vtctldclient_onlineddl_throttle/) - Throttles one or all migrations +* [vtctldclient OnlineDDL unthrottle](./vtctldclient_onlineddl_unthrottle/) - Unthrottles one or all migrations + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/vtctldclient_OnlineDDL_cancel.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/vtctldclient_OnlineDDL_cancel.md new file mode 100644 index 000000000..72903c17a --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/vtctldclient_OnlineDDL_cancel.md @@ -0,0 +1,40 @@ +--- +title: OnlineDDL cancel +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient OnlineDDL cancel + +Cancel one or all migrations, terminating any running ones as needed. + +``` +vtctldclient OnlineDDL cancel +``` + +### Examples + +``` +OnlineDDL cancel test_keyspace 82fa54ac_e83e_11ea_96b7_f875a4d24e90 +``` + +### Options + +``` + -h, --help help for cancel +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient OnlineDDL](../) - Operates on online DDL (schema migrations). + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/vtctldclient_OnlineDDL_cleanup.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/vtctldclient_OnlineDDL_cleanup.md new file mode 100644 index 000000000..9bac124da --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/vtctldclient_OnlineDDL_cleanup.md @@ -0,0 +1,40 @@ +--- +title: OnlineDDL cleanup +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient OnlineDDL cleanup + +Mark a given schema migration ready for artifact cleanup. + +``` +vtctldclient OnlineDDL cleanup +``` + +### Examples + +``` +OnlineDDL cleanup test_keyspace 82fa54ac_e83e_11ea_96b7_f875a4d24e90 +``` + +### Options + +``` + -h, --help help for cleanup +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient OnlineDDL](../) - Operates on online DDL (schema migrations). + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/vtctldclient_OnlineDDL_complete.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/vtctldclient_OnlineDDL_complete.md new file mode 100644 index 000000000..410dbf10d --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/vtctldclient_OnlineDDL_complete.md @@ -0,0 +1,40 @@ +--- +title: OnlineDDL complete +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient OnlineDDL complete + +Complete one or all migrations executed with --postpone-completion + +``` +vtctldclient OnlineDDL complete +``` + +### Examples + +``` +OnlineDDL complete test_keyspace 82fa54ac_e83e_11ea_96b7_f875a4d24e90 +``` + +### Options + +``` + -h, --help help for complete +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient OnlineDDL](../) - Operates on online DDL (schema migrations). + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/vtctldclient_OnlineDDL_force-cutover.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/vtctldclient_OnlineDDL_force-cutover.md new file mode 100644 index 000000000..582e81250 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/vtctldclient_OnlineDDL_force-cutover.md @@ -0,0 +1,40 @@ +--- +title: OnlineDDL force-cutover +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient OnlineDDL force-cutover + +Mark a given schema migration, or all pending migrations, for forced cut over. + +``` +vtctldclient OnlineDDL force-cutover +``` + +### Examples + +``` +OnlineDDL force-cutover test_keyspace 82fa54ac_e83e_11ea_96b7_f875a4d24e90 +``` + +### Options + +``` + -h, --help help for force-cutover +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient OnlineDDL](../) - Operates on online DDL (schema migrations). + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/vtctldclient_OnlineDDL_launch.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/vtctldclient_OnlineDDL_launch.md new file mode 100644 index 000000000..96daa34b2 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/vtctldclient_OnlineDDL_launch.md @@ -0,0 +1,40 @@ +--- +title: OnlineDDL launch +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient OnlineDDL launch + +Launch one or all migrations executed with --postpone-launch + +``` +vtctldclient OnlineDDL launch +``` + +### Examples + +``` +OnlineDDL launch test_keyspace 82fa54ac_e83e_11ea_96b7_f875a4d24e90 +``` + +### Options + +``` + -h, --help help for launch +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient OnlineDDL](../) - Operates on online DDL (schema migrations). + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/vtctldclient_OnlineDDL_retry.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/vtctldclient_OnlineDDL_retry.md new file mode 100644 index 000000000..5ca14647b --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/vtctldclient_OnlineDDL_retry.md @@ -0,0 +1,40 @@ +--- +title: OnlineDDL retry +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient OnlineDDL retry + +Mark a given schema migration for retry. + +``` +vtctldclient OnlineDDL retry +``` + +### Examples + +``` +vtctl OnlineDDL retry test_keyspace 82fa54ac_e83e_11ea_96b7_f875a4d24e90 +``` + +### Options + +``` + -h, --help help for retry +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient OnlineDDL](../) - Operates on online DDL (schema migrations). + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/vtctldclient_OnlineDDL_show.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/vtctldclient_OnlineDDL_show.md new file mode 100644 index 000000000..d0c5baa8b --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/vtctldclient_OnlineDDL_show.md @@ -0,0 +1,51 @@ +--- +title: OnlineDDL show +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient OnlineDDL show + +Display information about online DDL operations. + +``` +vtctldclient OnlineDDL show +``` + +### Examples + +``` +OnlineDDL show test_keyspace 82fa54ac_e83e_11ea_96b7_f875a4d24e90 +OnlineDDL show test_keyspace all +OnlineDDL show --order descending test_keyspace all +OnlineDDL show --limit 10 test_keyspace all +OnlineDDL show --skip 5 --limit 10 test_keyspace all +OnlineDDL show test_keyspace running +OnlineDDL show test_keyspace complete +OnlineDDL show test_keyspace failed +``` + +### Options + +``` + -h, --help help for show + --json Output JSON instead of human-readable table. + --limit uint Limit number of rows returned in output. + --order id Sort the results by id property of the Schema migration. (default "asc") + --skip uint Skip specified number of rows returned in output. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient OnlineDDL](../) - Operates on online DDL (schema migrations). + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/vtctldclient_OnlineDDL_throttle.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/vtctldclient_OnlineDDL_throttle.md new file mode 100644 index 000000000..5c10f7858 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/vtctldclient_OnlineDDL_throttle.md @@ -0,0 +1,40 @@ +--- +title: OnlineDDL throttle +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient OnlineDDL throttle + +Throttles one or all migrations + +``` +vtctldclient OnlineDDL throttle +``` + +### Examples + +``` +OnlineDDL throttle all +``` + +### Options + +``` + -h, --help help for throttle +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient OnlineDDL](../) - Operates on online DDL (schema migrations). + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/vtctldclient_OnlineDDL_unthrottle.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/vtctldclient_OnlineDDL_unthrottle.md new file mode 100644 index 000000000..b11743110 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_OnlineDDL/vtctldclient_OnlineDDL_unthrottle.md @@ -0,0 +1,40 @@ +--- +title: OnlineDDL unthrottle +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient OnlineDDL unthrottle + +Unthrottles one or all migrations + +``` +vtctldclient OnlineDDL unthrottle +``` + +### Examples + +``` +OnlineDDL unthrottle all +``` + +### Options + +``` + -h, --help help for unthrottle +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient OnlineDDL](../) - Operates on online DDL (schema migrations). + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_PingTablet.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_PingTablet.md new file mode 100644 index 000000000..4f0f51c65 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_PingTablet.md @@ -0,0 +1,34 @@ +--- +title: PingTablet +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient PingTablet + +Checks that the specified tablet is awake and responding to RPCs. This command can be blocked by other in-flight operations. + +``` +vtctldclient PingTablet +``` + +### Options + +``` + -h, --help help for PingTablet +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_PlannedReparentShard.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_PlannedReparentShard.md new file mode 100644 index 000000000..eadb8e6ce --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_PlannedReparentShard.md @@ -0,0 +1,38 @@ +--- +title: PlannedReparentShard +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient PlannedReparentShard + +Reparents the shard to a new primary, or away from an old primary. Both the old and new primaries must be up and running. + +``` +vtctldclient PlannedReparentShard +``` + +### Options + +``` + --avoid-primary string Alias of a tablet that should not be the primary; i.e. "reparent to any other tablet if this one is the primary". + -h, --help help for PlannedReparentShard + --new-primary string Alias of a tablet that should be the new primary. + --tolerable-replication-lag duration Amount of replication lag that is considered acceptable for a tablet to be eligible for promotion when Vitess makes the choice of a new primary. + --wait-replicas-timeout duration Time to wait for replicas to catch up on replication both before and after reparenting. (default 15s) +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_RebuildKeyspaceGraph.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_RebuildKeyspaceGraph.md new file mode 100644 index 000000000..050917ab8 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_RebuildKeyspaceGraph.md @@ -0,0 +1,36 @@ +--- +title: RebuildKeyspaceGraph +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient RebuildKeyspaceGraph + +Rebuilds the serving data for the keyspace(s). This command may trigger an update to all connected clients. + +``` +vtctldclient RebuildKeyspaceGraph [--cells=c1,c2,...] [--allow-partial] ks1 [ks2 ...] +``` + +### Options + +``` + --allow-partial Specifies whether a SNAPSHOT keyspace is allowed to serve with an incomplete set of shards. Ignored for all other types of keyspaces. + -c, --cells strings Specifies a comma-separated list of cells to update. + -h, --help help for RebuildKeyspaceGraph +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_RebuildVSchemaGraph.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_RebuildVSchemaGraph.md new file mode 100644 index 000000000..b3ffc6b6d --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_RebuildVSchemaGraph.md @@ -0,0 +1,35 @@ +--- +title: RebuildVSchemaGraph +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient RebuildVSchemaGraph + +Rebuilds the cell-specific SrvVSchema from the global VSchema objects in the provided cells (or all cells if none provided). + +``` +vtctldclient RebuildVSchemaGraph [--cells=c1,c2,...] +``` + +### Options + +``` + -c, --cells strings Specifies a comma-separated list of cells to look for tablets. + -h, --help help for RebuildVSchemaGraph +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_RefreshState.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_RefreshState.md new file mode 100644 index 000000000..ec86a2c77 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_RefreshState.md @@ -0,0 +1,34 @@ +--- +title: RefreshState +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient RefreshState + +Reloads the tablet record on the specified tablet. + +``` +vtctldclient RefreshState +``` + +### Options + +``` + -h, --help help for RefreshState +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_RefreshStateByShard.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_RefreshStateByShard.md new file mode 100644 index 000000000..8831e7e7f --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_RefreshStateByShard.md @@ -0,0 +1,35 @@ +--- +title: RefreshStateByShard +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient RefreshStateByShard + +Reloads the tablet record all tablets in the shard, optionally limited to the specified cells. + +``` +vtctldclient RefreshStateByShard [--cell ...] +``` + +### Options + +``` + -c, --cells strings If specified, only call RefreshState on tablets in the specified cells. If empty, all cells are considered. + -h, --help help for RefreshStateByShard +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ReloadSchema.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ReloadSchema.md new file mode 100644 index 000000000..d32095ec2 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ReloadSchema.md @@ -0,0 +1,34 @@ +--- +title: ReloadSchema +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient ReloadSchema + +Reloads the schema on a remote tablet. + +``` +vtctldclient ReloadSchema +``` + +### Options + +``` + -h, --help help for ReloadSchema +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ReloadSchemaKeyspace.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ReloadSchemaKeyspace.md new file mode 100644 index 000000000..88143f10c --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ReloadSchemaKeyspace.md @@ -0,0 +1,36 @@ +--- +title: ReloadSchemaKeyspace +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient ReloadSchemaKeyspace + +Reloads the schema on all tablets in a keyspace. This is done on a best-effort basis. + +``` +vtctldclient ReloadSchemaKeyspace [--concurrency=] [--include-primary] +``` + +### Options + +``` + --concurrency int32 Number of tablets to reload in parallel. Set to zero for unbounded concurrency. (default 10) + -h, --help help for ReloadSchemaKeyspace + --include-primary Also reload the primary tablets. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ReloadSchemaShard.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ReloadSchemaShard.md new file mode 100644 index 000000000..5c14f7d56 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ReloadSchemaShard.md @@ -0,0 +1,36 @@ +--- +title: ReloadSchemaShard +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient ReloadSchemaShard + +Reloads the schema on all tablets in a shard. This is done on a best-effort basis. + +``` +vtctldclient ReloadSchemaShard [--concurrency=10] [--include-primary] +``` + +### Options + +``` + --concurrency int32 Number of tablets to reload in parallel. Set to zero for unbounded concurrency. (default 10) + -h, --help help for ReloadSchemaShard + --include-primary Also reload the primary tablet. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_RemoveBackup.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_RemoveBackup.md new file mode 100644 index 000000000..b5bd0f83e --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_RemoveBackup.md @@ -0,0 +1,34 @@ +--- +title: RemoveBackup +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient RemoveBackup + +Removes the given backup from the BackupStorage used by vtctld. + +``` +vtctldclient RemoveBackup +``` + +### Options + +``` + -h, --help help for RemoveBackup +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_RemoveKeyspaceCell.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_RemoveKeyspaceCell.md new file mode 100644 index 000000000..16c9066ba --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_RemoveKeyspaceCell.md @@ -0,0 +1,36 @@ +--- +title: RemoveKeyspaceCell +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient RemoveKeyspaceCell + +Removes the specified cell from the Cells list for all shards in the specified keyspace (by calling RemoveShardCell on every shard). It also removes the SrvKeyspace for that keyspace in that cell. + +``` +vtctldclient RemoveKeyspaceCell [--force|-f] [--recursive|-r] +``` + +### Options + +``` + -f, --force Proceed even if the cell's topology server cannot be reached. The assumption is that you turned down the entire cell, and just need to update the global topo data. + -h, --help help for RemoveKeyspaceCell + -r, --recursive Also delete all tablets in that cell beloning to the specified keyspace. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_RemoveShardCell.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_RemoveShardCell.md new file mode 100644 index 000000000..5735368ec --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_RemoveShardCell.md @@ -0,0 +1,36 @@ +--- +title: RemoveShardCell +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient RemoveShardCell + +Remove the specified cell from the specified shard's Cells list. + +``` +vtctldclient RemoveShardCell [--force|-f] [--recursive|-r] +``` + +### Options + +``` + -f, --force Proceed even if the cell's topology server cannot be reached. The assumption is that you turned down the entire cell, and just need to update the global topo data. + -h, --help help for RemoveShardCell + -r, --recursive Also delete all tablets in that cell beloning to the specified shard. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ReparentTablet.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ReparentTablet.md new file mode 100644 index 000000000..b69e08d8e --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ReparentTablet.md @@ -0,0 +1,34 @@ +--- +title: ReparentTablet +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient ReparentTablet + +Reparent a tablet to the current primary in the shard. + +``` +vtctldclient ReparentTablet +``` + +### Options + +``` + -h, --help help for ReparentTablet +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/_index.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/_index.md new file mode 100644 index 000000000..a9c0ff763 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/_index.md @@ -0,0 +1,42 @@ +--- +title: Reshard +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient Reshard + +Perform commands related to resharding a keyspace. + +### Options + +``` + --format string The format of the output; supported formats are: text,json. (default "text") + -h, --help help for Reshard + --target-keyspace string Target keyspace for this workflow. + -w, --workflow string The workflow you want to perform the command on. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. +* [vtctldclient Reshard cancel](./vtctldclient_reshard_cancel/) - Cancel a Reshard VReplication workflow. +* [vtctldclient Reshard complete](./vtctldclient_reshard_complete/) - Complete a Reshard VReplication workflow. +* [vtctldclient Reshard create](./vtctldclient_reshard_create/) - Create and optionally run a Reshard VReplication workflow. +* [vtctldclient Reshard reversetraffic](./vtctldclient_reshard_reversetraffic/) - Reverse traffic for a Reshard VReplication workflow. +* [vtctldclient Reshard show](./vtctldclient_reshard_show/) - Show the details for a Reshard VReplication workflow. +* [vtctldclient Reshard start](./vtctldclient_reshard_start/) - Start a Reshard workflow. +* [vtctldclient Reshard status](./vtctldclient_reshard_status/) - Show the current status for a Reshard VReplication workflow. +* [vtctldclient Reshard stop](./vtctldclient_reshard_stop/) - Stop a Reshard workflow. +* [vtctldclient Reshard switchtraffic](./vtctldclient_reshard_switchtraffic/) - Switch traffic for a Reshard VReplication workflow. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/vtctldclient_Reshard_cancel.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/vtctldclient_Reshard_cancel.md new file mode 100644 index 000000000..b26f02dcc --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/vtctldclient_Reshard_cancel.md @@ -0,0 +1,43 @@ +--- +title: Reshard cancel +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient Reshard cancel + +Cancel a Reshard VReplication workflow. + +``` +vtctldclient Reshard cancel +``` + +### Examples + +``` +vtctldclient --server localhost:15999 Reshard --workflow cust2cust --target-keyspace customer cancel +``` + +### Options + +``` + -h, --help help for cancel +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --format string The format of the output; supported formats are: text,json. (default "text") + --server string server to use for the connection (required) + --target-keyspace string Target keyspace for this workflow. + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") + -w, --workflow string The workflow you want to perform the command on. +``` + +### SEE ALSO + +* [vtctldclient Reshard](../) - Perform commands related to resharding a keyspace. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/vtctldclient_Reshard_complete.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/vtctldclient_Reshard_complete.md new file mode 100644 index 000000000..f8ffd310d --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/vtctldclient_Reshard_complete.md @@ -0,0 +1,43 @@ +--- +title: Reshard complete +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient Reshard complete + +Complete a Reshard VReplication workflow. + +``` +vtctldclient Reshard complete +``` + +### Examples + +``` +vtctldclient --server localhost:15999 Reshard --workflow cust2cust --target-keyspace customer complete +``` + +### Options + +``` + -h, --help help for complete +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --format string The format of the output; supported formats are: text,json. (default "text") + --server string server to use for the connection (required) + --target-keyspace string Target keyspace for this workflow. + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") + -w, --workflow string The workflow you want to perform the command on. +``` + +### SEE ALSO + +* [vtctldclient Reshard](../) - Perform commands related to resharding a keyspace. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/vtctldclient_Reshard_create.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/vtctldclient_Reshard_create.md new file mode 100644 index 000000000..4ce56ea89 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/vtctldclient_Reshard_create.md @@ -0,0 +1,54 @@ +--- +title: Reshard create +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient Reshard create + +Create and optionally run a Reshard VReplication workflow. + +``` +vtctldclient Reshard create +``` + +### Examples + +``` +vtctldclient --server localhost:15999 reshard --workflow customer2customer --target-keyspace customer create --source-shards="0" --target-shards="-80,80-" --cells zone1 --cells zone2 --tablet-types replica +``` + +### Options + +``` + -a, --all-cells Copy table data from any existing cell. + --auto-start Start the workflow after creating it. (default true) + -c, --cells strings Cells and/or CellAliases to copy table data from. + --defer-secondary-keys Defer secondary index creation for a table until after it has been copied. + -h, --help help for create + --on-ddl string What to do when DDL is encountered in the VReplication stream. Possible values are IGNORE, STOP, EXEC, and EXEC_IGNORE. (default "IGNORE") + --skip-schema-copy Skip copying the schema from the source shards to the target shards. + --source-shards strings Source shards. + --stop-after-copy Stop the workflow after it's finished copying the existing rows and before it starts replicating changes. + --tablet-types strings Source tablet types to replicate table data from (e.g. PRIMARY,REPLICA,RDONLY). + --tablet-types-in-preference-order When performing source tablet selection, look for candidates in the type order as they are listed in the tablet-types flag. (default true) + --target-shards strings Target shards. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --format string The format of the output; supported formats are: text,json. (default "text") + --server string server to use for the connection (required) + --target-keyspace string Target keyspace for this workflow. + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") + -w, --workflow string The workflow you want to perform the command on. +``` + +### SEE ALSO + +* [vtctldclient Reshard](../) - Perform commands related to resharding a keyspace. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/vtctldclient_Reshard_reversetraffic.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/vtctldclient_Reshard_reversetraffic.md new file mode 100644 index 000000000..38b7dd597 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/vtctldclient_Reshard_reversetraffic.md @@ -0,0 +1,49 @@ +--- +title: Reshard reversetraffic +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient Reshard reversetraffic + +Reverse traffic for a Reshard VReplication workflow. + +``` +vtctldclient Reshard reversetraffic +``` + +### Examples + +``` +vtctldclient --server localhost:15999 Reshard --workflow cust2cust --target-keyspace customer reversetraffic +``` + +### Options + +``` + -c, --cells strings Cells and/or CellAliases to switch traffic in. + --dry-run Print the actions that would be taken and report any known errors that would have occurred. + --enable-reverse-replication Setup replication going back to the original source keyspace to support rolling back the traffic cutover. (default true) + -h, --help help for reversetraffic + --max-replication-lag-allowed duration Allow traffic to be switched only if VReplication lag is below this. (default 30s) + --tablet-types strings Tablet types to switch traffic for. + --timeout duration Specifies the maximum time to wait, in seconds, for VReplication to catch up on primary tablets. The traffic switch will be cancelled on timeout. (default 30s) +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --format string The format of the output; supported formats are: text,json. (default "text") + --server string server to use for the connection (required) + --target-keyspace string Target keyspace for this workflow. + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") + -w, --workflow string The workflow you want to perform the command on. +``` + +### SEE ALSO + +* [vtctldclient Reshard](../) - Perform commands related to resharding a keyspace. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/vtctldclient_Reshard_show.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/vtctldclient_Reshard_show.md new file mode 100644 index 000000000..24575c99e --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/vtctldclient_Reshard_show.md @@ -0,0 +1,44 @@ +--- +title: Reshard show +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient Reshard show + +Show the details for a Reshard VReplication workflow. + +``` +vtctldclient Reshard show +``` + +### Examples + +``` +vtctldclient --server localhost:15999 Reshard --workflow cust2cust --target-keyspace customer show +``` + +### Options + +``` + -h, --help help for show + --include-logs Include recent logs for the workflow. (default true) +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --format string The format of the output; supported formats are: text,json. (default "text") + --server string server to use for the connection (required) + --target-keyspace string Target keyspace for this workflow. + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") + -w, --workflow string The workflow you want to perform the command on. +``` + +### SEE ALSO + +* [vtctldclient Reshard](../) - Perform commands related to resharding a keyspace. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/vtctldclient_Reshard_start.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/vtctldclient_Reshard_start.md new file mode 100644 index 000000000..4da61b1c5 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/vtctldclient_Reshard_start.md @@ -0,0 +1,43 @@ +--- +title: Reshard start +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient Reshard start + +Start a Reshard workflow. + +``` +vtctldclient Reshard start +``` + +### Examples + +``` +vtctldclient --server localhost:15999 Reshard --workflow cust2cust --target-keyspace customer start +``` + +### Options + +``` + -h, --help help for start +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --format string The format of the output; supported formats are: text,json. (default "text") + --server string server to use for the connection (required) + --target-keyspace string Target keyspace for this workflow. + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") + -w, --workflow string The workflow you want to perform the command on. +``` + +### SEE ALSO + +* [vtctldclient Reshard](../) - Perform commands related to resharding a keyspace. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/vtctldclient_Reshard_status.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/vtctldclient_Reshard_status.md new file mode 100644 index 000000000..119ada5c1 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/vtctldclient_Reshard_status.md @@ -0,0 +1,43 @@ +--- +title: Reshard status +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient Reshard status + +Show the current status for a Reshard VReplication workflow. + +``` +vtctldclient Reshard status +``` + +### Examples + +``` +vtctldclient --server localhost:15999 Reshard --workflow cust2cust --target-keyspace customer status +``` + +### Options + +``` + -h, --help help for status +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --format string The format of the output; supported formats are: text,json. (default "text") + --server string server to use for the connection (required) + --target-keyspace string Target keyspace for this workflow. + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") + -w, --workflow string The workflow you want to perform the command on. +``` + +### SEE ALSO + +* [vtctldclient Reshard](../) - Perform commands related to resharding a keyspace. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/vtctldclient_Reshard_stop.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/vtctldclient_Reshard_stop.md new file mode 100644 index 000000000..e9f2ddef1 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/vtctldclient_Reshard_stop.md @@ -0,0 +1,43 @@ +--- +title: Reshard stop +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient Reshard stop + +Stop a Reshard workflow. + +``` +vtctldclient Reshard stop +``` + +### Examples + +``` +vtctldclient --server localhost:15999 Reshard --workflow cust2cust --target-keyspace customer stop +``` + +### Options + +``` + -h, --help help for stop +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --format string The format of the output; supported formats are: text,json. (default "text") + --server string server to use for the connection (required) + --target-keyspace string Target keyspace for this workflow. + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") + -w, --workflow string The workflow you want to perform the command on. +``` + +### SEE ALSO + +* [vtctldclient Reshard](../) - Perform commands related to resharding a keyspace. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/vtctldclient_Reshard_switchtraffic.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/vtctldclient_Reshard_switchtraffic.md new file mode 100644 index 000000000..d9b030dbf --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Reshard/vtctldclient_Reshard_switchtraffic.md @@ -0,0 +1,49 @@ +--- +title: Reshard switchtraffic +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient Reshard switchtraffic + +Switch traffic for a Reshard VReplication workflow. + +``` +vtctldclient Reshard switchtraffic +``` + +### Examples + +``` +vtctldclient --server localhost:15999 Reshard --workflow cust2cust --target-keyspace customer switchtraffic --tablet-types "replica,rdonly" +``` + +### Options + +``` + -c, --cells strings Cells and/or CellAliases to switch traffic in. + --dry-run Print the actions that would be taken and report any known errors that would have occurred. + --enable-reverse-replication Setup replication going back to the original source keyspace to support rolling back the traffic cutover. (default true) + -h, --help help for switchtraffic + --max-replication-lag-allowed duration Allow traffic to be switched only if VReplication lag is below this. (default 30s) + --tablet-types strings Tablet types to switch traffic for. + --timeout duration Specifies the maximum time to wait, in seconds, for VReplication to catch up on primary tablets. The traffic switch will be cancelled on timeout. (default 30s) +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --format string The format of the output; supported formats are: text,json. (default "text") + --server string server to use for the connection (required) + --target-keyspace string Target keyspace for this workflow. + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") + -w, --workflow string The workflow you want to perform the command on. +``` + +### SEE ALSO + +* [vtctldclient Reshard](../) - Perform commands related to resharding a keyspace. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_RestoreFromBackup.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_RestoreFromBackup.md new file mode 100644 index 000000000..55d0426b1 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_RestoreFromBackup.md @@ -0,0 +1,38 @@ +--- +title: RestoreFromBackup +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient RestoreFromBackup + +Stops mysqld on the specified tablet and restores the data from either the latest backup or closest before `backup-timestamp`. + +``` +vtctldclient RestoreFromBackup [--backup-timestamp|-t ] [--restore-to-pos ] [--dry-run] +``` + +### Options + +``` + -t, --backup-timestamp string Use the backup taken at, or closest before, this timestamp. Omit to use the latest backup. Timestamp format is "YYYY-mm-DD.HHMMSS". + --dry-run Only validate restore steps, do not actually restore data + -h, --help help for RestoreFromBackup + --restore-to-pos string Run a point in time recovery that ends with the given position. This will attempt to use one full backup followed by zero or more incremental backups + --restore-to-timestamp 2006-01-02T15:04:05Z07:00 Run a point in time recovery that restores up to, and excluding, given timestamp in RFC3339 format (2006-01-02T15:04:05Z07:00). This will attempt to use one full backup followed by zero or more incremental backups +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_RunHealthCheck.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_RunHealthCheck.md new file mode 100644 index 000000000..1e8caddf4 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_RunHealthCheck.md @@ -0,0 +1,34 @@ +--- +title: RunHealthCheck +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient RunHealthCheck + +Runs a healthcheck on the remote tablet. + +``` +vtctldclient RunHealthCheck +``` + +### Options + +``` + -h, --help help for RunHealthCheck +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_SetKeyspaceDurabilityPolicy.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_SetKeyspaceDurabilityPolicy.md new file mode 100644 index 000000000..d4e922ea6 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_SetKeyspaceDurabilityPolicy.md @@ -0,0 +1,44 @@ +--- +title: SetKeyspaceDurabilityPolicy +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient SetKeyspaceDurabilityPolicy + +Sets the durability-policy used by the specified keyspace. + +### Synopsis + +Sets the durability-policy used by the specified keyspace. +Durability policy governs the durability of the keyspace by describing which tablets should be sending semi-sync acknowledgements to the primary. +Possible values include 'semi_sync', 'none' and others as dictated by registered plugins. + +To set the durability policy of customer keyspace to semi_sync, you would use the following command: +SetKeyspaceDurabilityPolicy --durability-policy='semi_sync' customer + +``` +vtctldclient SetKeyspaceDurabilityPolicy [--durability-policy=policy_name] +``` + +### Options + +``` + --durability-policy string Type of durability to enforce for this keyspace. Default is none. Other values include 'semi_sync' and others as dictated by registered plugins. (default "none") + -h, --help help for SetKeyspaceDurabilityPolicy +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_SetShardIsPrimaryServing.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_SetShardIsPrimaryServing.md new file mode 100644 index 000000000..e877622e2 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_SetShardIsPrimaryServing.md @@ -0,0 +1,34 @@ +--- +title: SetShardIsPrimaryServing +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient SetShardIsPrimaryServing + +Add or remove a shard from serving. This is meant as an emergency function. It does not rebuild any serving graphs; i.e. it does not run `RebuildKeyspaceGraph`. + +``` +vtctldclient SetShardIsPrimaryServing +``` + +### Options + +``` + -h, --help help for SetShardIsPrimaryServing +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_SetShardTabletControl.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_SetShardTabletControl.md new file mode 100644 index 000000000..db21be62a --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_SetShardTabletControl.md @@ -0,0 +1,56 @@ +--- +title: SetShardTabletControl +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient SetShardTabletControl + +Sets the TabletControl record for a shard and tablet type. Only use this for an emergency fix or after a finished MoveTables. + +### Synopsis + +Sets the TabletControl record for a shard and tablet type. + +Only use this for an emergency fix or after a finished MoveTables. + +Always specify the denied-tables flag for MoveTables, but never for Reshard operations. + +To set the DisableQueryService flag, keep denied-tables empty, and set --disable-query-service +to true or false. This is useful to fix Reshard operations gone wrong. + +To change the list of denied tables, specify the --denied-tables parameter with +the new list. This is useful to fix tables that are being blocked after a +MoveTables operation. + +To remove the ShardTabletControl record entirely, use the --remove flag. This is +useful after a MoveTables has finished to remove serving restrictions. + +``` +vtctldclient SetShardTabletControl [--cells=c1,c2...] [--denied-tables=t1,t2,...] [--remove] [--disable-query-service[=0|false]] +``` + +### Options + +``` + -c, --cells strings Specifies a comma-separated list of cells to update. + --denied-tables strings Specifies a comma-separated list of tables to add to the denylist (for MoveTables). Each table name is either an exact match, or a regular expression of the form '/regexp/'. + --disable-query-service Sets the DisableQueryService flag in the specified cells. This flag requires --denied-tables and --remove to be unset; if either is set, this flag is ignored. + -h, --help help for SetShardTabletControl + -r, --remove Removes the specified cells for MoveTables operations. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_SetWritable.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_SetWritable.md new file mode 100644 index 000000000..165fd8397 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_SetWritable.md @@ -0,0 +1,34 @@ +--- +title: SetWritable +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient SetWritable + +Sets the specified tablet as writable or read-only. + +``` +vtctldclient SetWritable +``` + +### Options + +``` + -h, --help help for SetWritable +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ShardReplicationFix.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ShardReplicationFix.md new file mode 100644 index 000000000..74575b37d --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ShardReplicationFix.md @@ -0,0 +1,34 @@ +--- +title: ShardReplicationFix +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient ShardReplicationFix + +Walks through a ShardReplication object and fixes the first error encountered. + +``` +vtctldclient ShardReplicationFix +``` + +### Options + +``` + -h, --help help for ShardReplicationFix +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ShardReplicationPositions.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ShardReplicationPositions.md new file mode 100644 index 000000000..83e1ce2e8 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ShardReplicationPositions.md @@ -0,0 +1,40 @@ +--- +title: ShardReplicationPositions +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient ShardReplicationPositions + + + +### Synopsis + +Shows the replication status of each tablet in the shard graph. +Output is sorted by tablet type, then replication position. +Use ctrl-C to interrupt the command and see partial results if needed. + +``` +vtctldclient ShardReplicationPositions +``` + +### Options + +``` + -h, --help help for ShardReplicationPositions +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_SleepTablet.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_SleepTablet.md new file mode 100644 index 000000000..179ea8b3b --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_SleepTablet.md @@ -0,0 +1,50 @@ +--- +title: SleepTablet +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient SleepTablet + +Blocks the action queue on the specified tablet for the specified amount of time. This is typically used for testing. + +### Synopsis + +SleepTablet + +Blocks the action queue on the specified tablet for the specified duration. +This command is typically only used for testing. + +The duration is the amount of time that the action queue should be blocked. +The value is a string that contains a possibly signed sequence of decimal numbers, +each with optional fraction and a unit suffix, such as “300ms” or “1h45m”. +See the definition of the Go language’s ParseDuration[1] function for more details. +Note that, in the SleepTablet implementation, the value should be positively-signed. + +[1]: https://pkg.go.dev/time#ParseDuration + + +``` +vtctldclient SleepTablet +``` + +### Options + +``` + -h, --help help for SleepTablet +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_SourceShardAdd.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_SourceShardAdd.md new file mode 100644 index 000000000..0aa3795f8 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_SourceShardAdd.md @@ -0,0 +1,36 @@ +--- +title: SourceShardAdd +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient SourceShardAdd + +Adds the SourceShard record with the provided index for emergencies only. It does not call RefreshState for the shard primary. + +``` +vtctldclient SourceShardAdd [--key-range ] [--tables [--tables ]...] +``` + +### Options + +``` + -h, --help help for SourceShardAdd + --key-range string Key range to use for the SourceShard. + --tables strings Comma-separated lists of tables to replicate (for MoveTables). Each table name is either an exact match, or a regular expression of the form "/regexp/". +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_SourceShardDelete.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_SourceShardDelete.md new file mode 100644 index 000000000..5d5dc8832 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_SourceShardDelete.md @@ -0,0 +1,34 @@ +--- +title: SourceShardDelete +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient SourceShardDelete + +Deletes the SourceShard record with the provided index. This should only be used for emergency cleanup. It does not call RefreshState for the shard primary. + +``` +vtctldclient SourceShardDelete +``` + +### Options + +``` + -h, --help help for SourceShardDelete +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_StartReplication.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_StartReplication.md new file mode 100644 index 000000000..e6e03100b --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_StartReplication.md @@ -0,0 +1,34 @@ +--- +title: StartReplication +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient StartReplication + +Starts replication on the specified tablet. + +``` +vtctldclient StartReplication +``` + +### Options + +``` + -h, --help help for StartReplication +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_StopReplication.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_StopReplication.md new file mode 100644 index 000000000..9ee1b5c97 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_StopReplication.md @@ -0,0 +1,34 @@ +--- +title: StopReplication +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient StopReplication + +Stops replication on the specified tablet. + +``` +vtctldclient StopReplication +``` + +### Options + +``` + -h, --help help for StopReplication +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_TabletExternallyReparented.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_TabletExternallyReparented.md new file mode 100644 index 000000000..9443544c3 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_TabletExternallyReparented.md @@ -0,0 +1,41 @@ +--- +title: TabletExternallyReparented +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient TabletExternallyReparented + +Updates the topology record for the tablet's shard to acknowledge that an external tool made this tablet the primary. + +### Synopsis + +Updates the topology record for the tablet's shard to acknowledge that an external tool made this tablet the primary. + +See the Reparenting guide for more information: https://vitess.io/docs/user-guides/configuration-advanced/reparenting/#external-reparenting. + + +``` +vtctldclient TabletExternallyReparented +``` + +### Options + +``` + -h, --help help for TabletExternallyReparented +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_UpdateCellInfo.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_UpdateCellInfo.md new file mode 100644 index 000000000..425ab10d9 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_UpdateCellInfo.md @@ -0,0 +1,42 @@ +--- +title: UpdateCellInfo +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient UpdateCellInfo + +Updates the content of a CellInfo with the provided parameters, creating the CellInfo if it does not exist. + +### Synopsis + +Updates the content of a CellInfo with the provided parameters, creating the CellInfo if it does not exist. + +If a value is empty, it is ignored. + +``` +vtctldclient UpdateCellInfo [--root ] [--server-address ] +``` + +### Options + +``` + -h, --help help for UpdateCellInfo + -r, --root string The root path the topology server will use for this cell. + -a, --server-address string The address the topology server will connect to for this cell. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_UpdateCellsAlias.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_UpdateCellsAlias.md new file mode 100644 index 000000000..0a900c1cf --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_UpdateCellsAlias.md @@ -0,0 +1,39 @@ +--- +title: UpdateCellsAlias +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient UpdateCellsAlias + +Updates the content of a CellsAlias with the provided parameters, creating the CellsAlias if it does not exist. + +### Synopsis + +Updates the content of a CellsAlias with the provided parameters, creating the CellsAlias if it does not exist. + +``` +vtctldclient UpdateCellsAlias [--cells [--cells ...]] +``` + +### Options + +``` + -c, --cells strings The list of cell names that are members of this alias. + -h, --help help for UpdateCellsAlias +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_UpdateThrottlerConfig.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_UpdateThrottlerConfig.md new file mode 100644 index 000000000..65d7910c7 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_UpdateThrottlerConfig.md @@ -0,0 +1,45 @@ +--- +title: UpdateThrottlerConfig +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient UpdateThrottlerConfig + +Update the tablet throttler configuration for all tablets in the given keyspace (across all cells) + +``` +vtctldclient UpdateThrottlerConfig [--enable|--disable] [--threshold=] [--custom-query=] [--check-as-check-self|--check-as-check-shard] [--throttle-app|unthrottle-app=] [--throttle-app-ratio=] [--throttle-app-duration=] +``` + +### Options + +``` + --check-as-check-self /throttler/check requests behave as is /throttler/check-self was called + --check-as-check-shard use standard behavior for /throttler/check requests + --custom-query string custom throttler check query + --disable Disable the throttler + --enable Enable the throttler + -h, --help help for UpdateThrottlerConfig + --threshold float threshold for the either default check (replication lag seconds) or custom check + --throttle-app string an app name to throttle + --throttle-app-duration duration duration after which throttled app rule expires (app specififed in --throttled-app) (default 1h0m0s) + --throttle-app-exempt exempt this app from being at all throttled. WARNING: use with extreme care, as this is likely to push metrics beyond the throttler's threshold, and starve other apps + --throttle-app-ratio float ratio to throttle app (app specififed in --throttled-app) (default 1) + --unthrottle-app string an app name to unthrottle +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_VDiff/_index.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_VDiff/_index.md new file mode 100644 index 000000000..93bb911ef --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_VDiff/_index.md @@ -0,0 +1,38 @@ +--- +title: VDiff +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient VDiff + +Perform commands related to diffing tables involved in a VReplication workflow between the source and target. + +### Options + +``` + --format string The format of the output; supported formats are: text,json. (default "text") + -h, --help help for VDiff + --target-keyspace string Target keyspace for this workflow. + -w, --workflow string The workflow you want to perform the command on. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. +* [vtctldclient VDiff create](./vtctldclient_vdiff_create/) - Create and run a VDiff to compare the tables involved in a VReplication workflow between the source and target. +* [vtctldclient VDiff delete](./vtctldclient_vdiff_delete/) - Delete VDiffs. +* [vtctldclient VDiff resume](./vtctldclient_vdiff_resume/) - Resume a VDiff. +* [vtctldclient VDiff show](./vtctldclient_vdiff_show/) - Show the status of a VDiff. +* [vtctldclient VDiff stop](./vtctldclient_vdiff_stop/) - Stop a running VDiff. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_VDiff/vtctldclient_VDiff_create.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_VDiff/vtctldclient_VDiff_create.md new file mode 100644 index 000000000..994afcdac --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_VDiff/vtctldclient_VDiff_create.md @@ -0,0 +1,60 @@ +--- +title: VDiff create +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient VDiff create + +Create and run a VDiff to compare the tables involved in a VReplication workflow between the source and target. + +``` +vtctldclient VDiff create +``` + +### Examples + +``` +vtctldclient --server localhost:15999 vdiff --workflow commerce2customer --target-keyspace customer create +vtctldclient --server localhost:15999 vdiff --workflow commerce2customer --target-keyspace customer create b3f59678-5241-11ee-be56-0242ac120002 +``` + +### Options + +``` + --auto-retry Should this vdiff automatically retry and continue in case of recoverable errors. (default true) + --debug-query Adds a mysql query to the report that can be used for further debugging. + --filtered-replication-wait-time duration Specifies the maximum time to wait, in seconds, for replication to catch up when syncing tablet streams. (default 30s) + -h, --help help for create + --limit int Max rows to stop comparing after. (default 9223372036854775807) + --max-diff-duration duration How long should an individual table diff run before being stopped and restarted in order to lessen the impact on tablets due to holding open database snapshots for long periods of time (0 is the default and means no time limit). + --max-extra-rows-to-compare int If there are collation differences between the source and target, you can have rows that are identical but simply returned in a different order from MySQL. We will do a second pass to compare the rows for any actual differences in this case and this flag allows you to control the resources used for this operation. (default 1000) + --max-report-sample-rows int Maximum number of row differences to report (0 for all differences). NOTE: when increasing this value it is highly recommended to also specify --only-pks (default 10) + --only-pks When reporting missing rows, only show primary keys in the report. + --source-cells strings The source cell(s) to compare from; default is any available cell. + --tables strings Only run vdiff for these tables in the workflow. + --tablet-types strings Tablet types to use on the source and target. + --tablet-types-in-preference-order When performing source tablet selection, look for candidates in the type order as they are listed in the tablet-types flag. (default true) + --target-cells strings The target cell(s) to compare with; default is any available cell. + --update-table-stats Update the table statistics, using ANALYZE TABLE, on each table involved in the VDiff during initialization. This will ensure that progress estimates are as accurate as possible -- but it does involve locks and can potentially impact query processing on the target keyspace. + --wait When creating or resuming a vdiff, wait for it to finish before exiting. + --wait-update-interval duration When waiting on a vdiff to finish, check and display the current status this often. (default 1m0s) +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --format string The format of the output; supported formats are: text,json. (default "text") + --server string server to use for the connection (required) + --target-keyspace string Target keyspace for this workflow. + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") + -w, --workflow string The workflow you want to perform the command on. +``` + +### SEE ALSO + +* [vtctldclient VDiff](../) - Perform commands related to diffing tables involved in a VReplication workflow between the source and target. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_VDiff/vtctldclient_VDiff_delete.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_VDiff/vtctldclient_VDiff_delete.md new file mode 100644 index 000000000..8ede62c9c --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_VDiff/vtctldclient_VDiff_delete.md @@ -0,0 +1,44 @@ +--- +title: VDiff delete +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient VDiff delete + +Delete VDiffs. + +``` +vtctldclient VDiff delete +``` + +### Examples + +``` +vtctldclient --server localhost:15999 vdiff --workflow commerce2customer --target-keyspace customer delete a037a9e2-5628-11ee-8c99-0242ac120002 +vtctldclient --server localhost:15999 vdiff --workflow commerce2customer --target-keyspace delete all +``` + +### Options + +``` + -h, --help help for delete +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --format string The format of the output; supported formats are: text,json. (default "text") + --server string server to use for the connection (required) + --target-keyspace string Target keyspace for this workflow. + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") + -w, --workflow string The workflow you want to perform the command on. +``` + +### SEE ALSO + +* [vtctldclient VDiff](../) - Perform commands related to diffing tables involved in a VReplication workflow between the source and target. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_VDiff/vtctldclient_VDiff_resume.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_VDiff/vtctldclient_VDiff_resume.md new file mode 100644 index 000000000..e469f3d91 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_VDiff/vtctldclient_VDiff_resume.md @@ -0,0 +1,43 @@ +--- +title: VDiff resume +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient VDiff resume + +Resume a VDiff. + +``` +vtctldclient VDiff resume +``` + +### Examples + +``` +vtctldclient --server localhost:15999 vdiff --workflow commerce2customer --target-keyspace customer resume a037a9e2-5628-11ee-8c99-0242ac120002 +``` + +### Options + +``` + -h, --help help for resume +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --format string The format of the output; supported formats are: text,json. (default "text") + --server string server to use for the connection (required) + --target-keyspace string Target keyspace for this workflow. + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") + -w, --workflow string The workflow you want to perform the command on. +``` + +### SEE ALSO + +* [vtctldclient VDiff](../) - Perform commands related to diffing tables involved in a VReplication workflow between the source and target. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_VDiff/vtctldclient_VDiff_show.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_VDiff/vtctldclient_VDiff_show.md new file mode 100644 index 000000000..b6db66485 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_VDiff/vtctldclient_VDiff_show.md @@ -0,0 +1,46 @@ +--- +title: VDiff show +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient VDiff show + +Show the status of a VDiff. + +``` +vtctldclient VDiff show +``` + +### Examples + +``` +vtctldclient --server localhost:15999 vdiff --workflow commerce2customer --target-keyspace customer show last +vtctldclient --server localhost:15999 vdiff --workflow commerce2customer --target-keyspace customer show a037a9e2-5628-11ee-8c99-0242ac120002 +vtctldclient --server localhost:15999 vdiff --workflow commerce2customer --target-keyspace customer show all +``` + +### Options + +``` + -h, --help help for show + --verbose Show verbose output in summaries +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --format string The format of the output; supported formats are: text,json. (default "text") + --server string server to use for the connection (required) + --target-keyspace string Target keyspace for this workflow. + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") + -w, --workflow string The workflow you want to perform the command on. +``` + +### SEE ALSO + +* [vtctldclient VDiff](../) - Perform commands related to diffing tables involved in a VReplication workflow between the source and target. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_VDiff/vtctldclient_VDiff_stop.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_VDiff/vtctldclient_VDiff_stop.md new file mode 100644 index 000000000..9c33380ce --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_VDiff/vtctldclient_VDiff_stop.md @@ -0,0 +1,43 @@ +--- +title: VDiff stop +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient VDiff stop + +Stop a running VDiff. + +``` +vtctldclient VDiff stop +``` + +### Examples + +``` +vtctldclient --server localhost:15999 vdiff --workflow commerce2customer --target-keyspace customer stop a037a9e2-5628-11ee-8c99-0242ac120002 +``` + +### Options + +``` + -h, --help help for stop +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --format string The format of the output; supported formats are: text,json. (default "text") + --server string server to use for the connection (required) + --target-keyspace string Target keyspace for this workflow. + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") + -w, --workflow string The workflow you want to perform the command on. +``` + +### SEE ALSO + +* [vtctldclient VDiff](../) - Perform commands related to diffing tables involved in a VReplication workflow between the source and target. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Validate.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Validate.md new file mode 100644 index 000000000..6199372d4 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Validate.md @@ -0,0 +1,35 @@ +--- +title: Validate +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient Validate + +Validates that all nodes reachable from the global replication graph, as well as all tablets in discoverable cells, are consistent. + +``` +vtctldclient Validate [--ping-tablets] +``` + +### Options + +``` + -h, --help help for Validate + -p, --ping-tablets Indicates whether all tablets should be pinged during the validation process. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ValidateKeyspace.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ValidateKeyspace.md new file mode 100644 index 000000000..6aaa839c2 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ValidateKeyspace.md @@ -0,0 +1,35 @@ +--- +title: ValidateKeyspace +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient ValidateKeyspace + +Validates that all nodes reachable from the specified keyspace are consistent. + +``` +vtctldclient ValidateKeyspace [--ping-tablets] +``` + +### Options + +``` + -h, --help help for ValidateKeyspace + -p, --ping-tablets Indicates whether all tablets should be pinged during the validation process. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ValidateSchemaKeyspace.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ValidateSchemaKeyspace.md new file mode 100644 index 000000000..37503c56d --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ValidateSchemaKeyspace.md @@ -0,0 +1,38 @@ +--- +title: ValidateSchemaKeyspace +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient ValidateSchemaKeyspace + +Validates that the schema on the primary tablet for shard 0 matches the schema on all other tablets in the keyspace. + +``` +vtctldclient ValidateSchemaKeyspace [--exclude-tables=] [--include-views] [--skip-no-primary] [--include-vschema] +``` + +### Options + +``` + --exclude-tables strings Tables to exclude during schema comparison. + -h, --help help for ValidateSchemaKeyspace + --include-views Includes views in compared schemas. + --include-vschema Includes VSchema validation in validation results. + --skip-no-primary Skips validation on whether or not a primary exists in shards. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ValidateShard.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ValidateShard.md new file mode 100644 index 000000000..3df57a5b7 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ValidateShard.md @@ -0,0 +1,35 @@ +--- +title: ValidateShard +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient ValidateShard + +Validates that all nodes reachable from the specified shard are consistent. + +``` +vtctldclient ValidateShard [--ping-tablets] +``` + +### Options + +``` + -h, --help help for ValidateShard + -p, --ping-tablets Indicates whether all tablets should be pinged during the validation process. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ValidateVersionKeyspace.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ValidateVersionKeyspace.md new file mode 100644 index 000000000..cd2449000 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ValidateVersionKeyspace.md @@ -0,0 +1,34 @@ +--- +title: ValidateVersionKeyspace +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient ValidateVersionKeyspace + +Validates that the version on the primary tablet of shard 0 matches all of the other tablets in the keyspace. + +``` +vtctldclient ValidateVersionKeyspace +``` + +### Options + +``` + -h, --help help for ValidateVersionKeyspace +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ValidateVersionShard.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ValidateVersionShard.md new file mode 100644 index 000000000..0b9c3203a --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_ValidateVersionShard.md @@ -0,0 +1,34 @@ +--- +title: ValidateVersionShard +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient ValidateVersionShard + +Validates that the version on the primary matches all of the replicas. + +``` +vtctldclient ValidateVersionShard +``` + +### Options + +``` + -h, --help help for ValidateVersionShard +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Workflow/_index.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Workflow/_index.md new file mode 100644 index 000000000..d8c934a5d --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Workflow/_index.md @@ -0,0 +1,41 @@ +--- +title: Workflow +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient Workflow + +Administer VReplication workflows (Reshard, MoveTables, etc) in the given keyspace. + +``` +vtctldclient Workflow --keyspace [command] [command-flags] +``` + +### Options + +``` + -h, --help help for Workflow + -k, --keyspace string Keyspace context for the workflow. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient](../) - Executes a cluster management command on the remote vtctld server. +* [vtctldclient Workflow delete](./vtctldclient_workflow_delete/) - Delete a VReplication workflow. +* [vtctldclient Workflow list](./vtctldclient_workflow_list/) - List the VReplication workflows in the given keyspace. +* [vtctldclient Workflow show](./vtctldclient_workflow_show/) - Show the details for a VReplication workflow. +* [vtctldclient Workflow start](./vtctldclient_workflow_start/) - Start a VReplication workflow. +* [vtctldclient Workflow stop](./vtctldclient_workflow_stop/) - Stop a VReplication workflow. +* [vtctldclient Workflow update](./vtctldclient_workflow_update/) - Update the configuration parameters for a VReplication workflow. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Workflow/vtctldclient_Workflow_delete.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Workflow/vtctldclient_Workflow_delete.md new file mode 100644 index 000000000..c9982da8f --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Workflow/vtctldclient_Workflow_delete.md @@ -0,0 +1,45 @@ +--- +title: Workflow delete +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient Workflow delete + +Delete a VReplication workflow. + +``` +vtctldclient Workflow delete +``` + +### Examples + +``` +vtctldclient --server localhost:15999 workflow --keyspace customer delete --workflow commerce2customer +``` + +### Options + +``` + -h, --help help for delete + --keep-data Keep the partially copied table data from the workflow in the target keyspace. + --keep-routing-rules Keep the routing rules created for the workflow. + --shards strings (Optional) Specifies a comma-separated list of shards to operate on. + -w, --workflow string The workflow you want to delete. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + -k, --keyspace string Keyspace context for the workflow. + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient Workflow](../) - Administer VReplication workflows (Reshard, MoveTables, etc) in the given keyspace. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Workflow/vtctldclient_Workflow_list.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Workflow/vtctldclient_Workflow_list.md new file mode 100644 index 000000000..764ae73bd --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Workflow/vtctldclient_Workflow_list.md @@ -0,0 +1,42 @@ +--- +title: Workflow list +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient Workflow list + +List the VReplication workflows in the given keyspace. + +``` +vtctldclient Workflow list +``` + +### Examples + +``` +vtctldclient --server localhost:15999 workflow --keyspace customer list +``` + +### Options + +``` + -h, --help help for list + --shards strings (Optional) Specifies a comma-separated list of shards to operate on. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + -k, --keyspace string Keyspace context for the workflow. + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient Workflow](../) - Administer VReplication workflows (Reshard, MoveTables, etc) in the given keyspace. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Workflow/vtctldclient_Workflow_show.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Workflow/vtctldclient_Workflow_show.md new file mode 100644 index 000000000..d17a79d81 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Workflow/vtctldclient_Workflow_show.md @@ -0,0 +1,44 @@ +--- +title: Workflow show +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient Workflow show + +Show the details for a VReplication workflow. + +``` +vtctldclient Workflow show +``` + +### Examples + +``` +vtctldclient --server localhost:15999 workflow --keyspace customer show --workflow commerce2customer +``` + +### Options + +``` + -h, --help help for show + --include-logs Include recent logs for the workflow. (default true) + --shards strings (Optional) Specifies a comma-separated list of shards to operate on. + -w, --workflow string The workflow you want the details for. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + -k, --keyspace string Keyspace context for the workflow. + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient Workflow](../) - Administer VReplication workflows (Reshard, MoveTables, etc) in the given keyspace. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Workflow/vtctldclient_Workflow_start.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Workflow/vtctldclient_Workflow_start.md new file mode 100644 index 000000000..66b61f49d --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Workflow/vtctldclient_Workflow_start.md @@ -0,0 +1,43 @@ +--- +title: Workflow start +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient Workflow start + +Start a VReplication workflow. + +``` +vtctldclient Workflow start +``` + +### Examples + +``` +vtctldclient --server localhost:15999 workflow --keyspace customer start --workflow commerce2customer +``` + +### Options + +``` + -h, --help help for start + --shards strings (Optional) Specifies a comma-separated list of shards to operate on. + -w, --workflow string The workflow you want to start. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + -k, --keyspace string Keyspace context for the workflow. + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient Workflow](../) - Administer VReplication workflows (Reshard, MoveTables, etc) in the given keyspace. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Workflow/vtctldclient_Workflow_stop.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Workflow/vtctldclient_Workflow_stop.md new file mode 100644 index 000000000..4fca07771 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Workflow/vtctldclient_Workflow_stop.md @@ -0,0 +1,43 @@ +--- +title: Workflow stop +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient Workflow stop + +Stop a VReplication workflow. + +``` +vtctldclient Workflow stop +``` + +### Examples + +``` +vtctldclient --server localhost:15999 workflow --keyspace customer stop --workflow commerce2customer +``` + +### Options + +``` + -h, --help help for stop + --shards strings (Optional) Specifies a comma-separated list of shards to operate on. + -w, --workflow string The workflow you want to stop. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + -k, --keyspace string Keyspace context for the workflow. + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient Workflow](../) - Administer VReplication workflows (Reshard, MoveTables, etc) in the given keyspace. + diff --git a/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Workflow/vtctldclient_Workflow_update.md b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Workflow/vtctldclient_Workflow_update.md new file mode 100644 index 000000000..137550ae1 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtctldclient/vtctldclient_Workflow/vtctldclient_Workflow_update.md @@ -0,0 +1,47 @@ +--- +title: Workflow update +series: vtctldclient +commit: b9b567acbb1f36404f46b5daa168d37831dd137f +--- +## vtctldclient Workflow update + +Update the configuration parameters for a VReplication workflow. + +``` +vtctldclient Workflow update +``` + +### Examples + +``` +vtctldclient --server localhost:15999 workflow --keyspace customer update --workflow commerce2customer --cells zone1 --cells zone2 -c "zone3,zone4" -c zone5 +``` + +### Options + +``` + -c, --cells strings New Cell(s) or CellAlias(es) (comma-separated) to replicate from. + -h, --help help for update + --on-ddl string New instruction on what to do when DDL is encountered in the VReplication stream. Possible values are IGNORE, STOP, EXEC, and EXEC_IGNORE. + --shards strings (Optional) Specifies a comma-separated list of shards to operate on. + -t, --tablet-types strings New source tablet types to replicate from (e.g. PRIMARY,REPLICA,RDONLY). + --tablet-types-in-order When performing source tablet selection, look for candidates in the type order as they are listed in the tablet-types flag. (default true) + -w, --workflow string The workflow you want to update. +``` + +### Options inherited from parent commands + +``` + --action_timeout duration timeout to use for the command (default 1h0m0s) + --compact use compact format for otherwise verbose outputs + -k, --keyspace string Keyspace context for the workflow. + --server string server to use for the connection (required) + --topo-global-root string the path of the global topology data in the global topology server (default "/vitess/global") + --topo-global-server-address strings the address of the global topology server(s) (default [localhost:2379]) + --topo-implementation string the topology implementation to use (default "etcd2") +``` + +### SEE ALSO + +* [vtctldclient Workflow](../) - Administer VReplication workflows (Reshard, MoveTables, etc) in the given keyspace. + diff --git a/content/en/docs/21.0/reference/programs/vtexplain.md b/content/en/docs/21.0/reference/programs/vtexplain.md new file mode 100644 index 000000000..3fc3667de --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtexplain.md @@ -0,0 +1,72 @@ +--- +title: vtexplain +aliases: ['/docs/reference/vtexplain/'] +--- + +`vtexplain` is a command line tool which provides information on how Vitess plans to execute a particular query. It can +be used to validate queries for compatibility with Vitess. + +For a user guide that describes how to use the `vtexplain` tool to explain how Vitess executes a particular SQL +statement, see [Analyzing a SQL statement](../../../user-guides/sql/vtexplain/). + +## Example Usage + +Explain how Vitess will execute the query `SELECT * FROM users` using the VSchema contained in `vschemas.json` and the +database schema `schema.sql`: + +```bash +vtexplain -- --vschema-file vschema.json --schema-file schema.sql --sql "SELECT * FROM users" +``` + +Explain how the example will execute on 128 shards using Row-based replication: + +```bash +vtexplain -- -shards 128 --vschema-file vschema.json --schema-file schema.sql --replication-mode "ROW" --output-mode text --sql "INSERT INTO users (user_id, name) VALUES(1, 'john')" +``` + +## Options + +The following parameters apply to `mysqlctl`: + +| Name | Type | Definition | +|:-----------------------|:--------|:-------------------------------------------------------------------------------------------------------------------------------------| +| --dbname | string | Optional database target to override normal routing | +| --execution-mode | string | The execution mode to simulate -- must be set to multi, legacy-autocommit, or twopc (default "multi") | +| --ks-shard-map | string | JSON map of keyspace name -> shard name -> ShardReference object. The inner map is the same as the output of FindAllShardsInKeyspace | +| --ks-shard-map-file | string | File containing json blob of keyspace name -> shard name -> ShardReference object | +| --mysql_server_version | string | MySQL server version to advertise. (default "8.0.30-Vitess") | +| --normalize | boolean | Whether to enable vtgate normalization | +| --output-mode | string | Output in human-friendly text or json (default "text") | +| --planner-version | string | Sets the default planner to use. Valid values are: Gen4, Gen4Greedy, Gen4Left2Right | +| --replication-mode | string | The replication mode to simulate -- must be set to either ROW or STATEMENT (default "ROW") | +| --schema | string | The SQL table schema | +| --schema-file | string | Identifies the file that contains the SQL table schema | +| --shards | int | Number of shards per keyspace. Passing --ks-shard-map/--ks-shard-map-file causes this flag to be ignored. (default 2) | +| --sql | string | A list of semicolon-delimited SQL commands to analyze | +| --sql-file | string | Identifies the file that contains the SQL commands to analyze | +| --vschema | string | Identifies the VTGate routing schema | +| --vschema-file | string | Identifies the VTGate routing schema file | + +
+ +Please note that `-ks-shard-map` and `ks-shard-map-file` will supercede `--shards`. +If you attempt to `vtexplain` on a keyspace that is included in the keyspace shard map, the shards as defined in the +mapping will be used and `--shards` will be ignored. + +## Limitations + +### The VSchema must use a keyspace name. + +VTExplain requires a keyspace name for each keyspace in an input VSchema: + +``` +"keyspace_name": { + "_comment": "Keyspace definition goes here." +} +``` + +If no keyspace name is present, VTExplain will return the following error: + +``` +ERROR: initVtgateExecutor: json: cannot unmarshal bool into Go value of type map[string]json.RawMessage +``` diff --git a/content/en/docs/21.0/reference/programs/vtgate/_index.md b/content/en/docs/21.0/reference/programs/vtgate/_index.md new file mode 100644 index 000000000..2a5b680d1 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtgate/_index.md @@ -0,0 +1,263 @@ +--- +title: vtgate +series: vtgate +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## vtgate + +VTGate is a stateless proxy responsible for accepting requests from applications and routing them to the appropriate tablet server(s) for query execution. It speaks both the MySQL Protocol and a gRPC protocol. + +### Synopsis + +VTGate is a stateless proxy responsible for accepting requests from applications and routing them to the appropriate tablet server(s) for query execution. It speaks both the MySQL Protocol and a gRPC protocol. + +### Key Options + +* `--srv_topo_cache_ttl`: There may be instances where you will need to increase the cached TTL from the default of 1 second to a higher number: + * You may want to increase this option if you see that your topo leader goes down and keeps your queries waiting for a few seconds. + +``` +vtgate [flags] +``` + +### Examples + +``` +vtgate \ + --topo_implementation etcd2 \ + --topo_global_server_address localhost:2379 \ + --topo_global_root /vitess/global \ + --log_dir $VTDATAROOT/tmp \ + --port 15001 \ + --grpc_port 15991 \ + --mysql_server_port 15306 \ + --cell test \ + --cells_to_watch test \ + --tablet_types_to_wait PRIMARY,REPLICA \ + --service_map 'grpc-vtgateservice' \ + --pid_file $VTDATAROOT/tmp/vtgate.pid \ + --mysql_auth_server_impl none +``` + +### Options + +``` + --allow-kill-statement Allows the execution of kill statement + --allowed_tablet_types strings Specifies the tablet types this vtgate is allowed to route queries to. Should be provided as a comma-separated set of tablet types. + --alsologtostderr log to standard error as well as files + --bind-address string Bind address for the server. If empty, the server will listen on all available unicast and anycast IP addresses of the local system. + --buffer_drain_concurrency int Maximum number of requests retried simultaneously. More concurrency will increase the load on the PRIMARY vttablet when draining the buffer. (default 1) + --buffer_keyspace_shards string If not empty, limit buffering to these entries (comma separated). Entry format: keyspace or keyspace/shard. Requires --enable_buffer=true. + --buffer_max_failover_duration duration Stop buffering completely if a failover takes longer than this duration. (default 20s) + --buffer_min_time_between_failovers duration Minimum time between the end of a failover and the start of the next one (tracked per shard). Faster consecutive failovers will not trigger buffering. (default 1m0s) + --buffer_size int Maximum number of buffered requests in flight (across all ongoing failovers). (default 1000) + --buffer_window duration Duration for how long a request should be buffered at most. (default 10s) + --catch-sigpipe catch and ignore SIGPIPE on stdout and stderr if specified + --cell string cell to use + --cells_to_watch string comma-separated list of cells for watching tablets + --config-file string Full path of the config file (with extension) to use. If set, --config-path, --config-type, and --config-name are ignored. + --config-file-not-found-handling ConfigFileNotFoundHandling Behavior when a config file is not found. (Options: error, exit, ignore, warn) (default warn) + --config-name string Name of the config file (without extension) to search for. (default "vtconfig") + --config-path strings Paths to search for config files in. (default []) + --config-persistence-min-interval duration minimum interval between persisting dynamic config changes back to disk (if no change has occurred, nothing is done). (default 1s) + --config-type string Config file type (omit to infer config type from file extension). + --consul_auth_static_file string JSON File to read the topos/tokens from. + --datadog-agent-host string host to send spans to. if empty, no tracing will be done + --datadog-agent-port string port to send spans to. if empty, no tracing will be done + --dbddl_plugin string controls how to handle CREATE/DROP DATABASE. use it if you are using your own database provisioning service (default "fail") + --ddl_strategy string Set default strategy for DDL statements. Override with @@ddl_strategy session variable (default "direct") + --default_tablet_type topodatapb.TabletType The default tablet type to set for queries, when one is not explicitly selected. (default PRIMARY) + -d, --dir string output directory to write documentation (default "doc") + --discovery_high_replication_lag_minimum_serving duration Threshold above which replication lag is considered too high when applying the min_number_serving_vttablets flag. (default 2h0m0s) + --discovery_low_replication_lag duration Threshold below which replication lag is considered low enough to be healthy. (default 30s) + --emit_stats If set, emit stats to push-based monitoring and stats backends + --enable-partial-keyspace-migration (Experimental) Follow shard routing rules: enable only while migrating a keyspace shard by shard. See documentation on Partial MoveTables for more. (default false) + --enable-views Enable views support in vtgate. + --enable_buffer Enable buffering (stalling) of primary traffic during failovers. + --enable_buffer_dry_run Detect and log failover events, but do not actually buffer requests. + --enable_direct_ddl Allow users to submit direct DDL statements (default true) + --enable_online_ddl Allow users to submit, review and control Online DDL (default true) + --enable_set_var This will enable the use of MySQL's SET_VAR query hint for certain system variables instead of using reserved connections (default true) + --enable_system_settings This will enable the system settings to be changed per session at the database connection level (default true) + --foreign_key_mode string This is to provide how to handle foreign key constraint in create/alter table. Valid values are: allow, disallow (default "allow") + --gate_query_cache_memory int gate server query cache size in bytes, maximum amount of memory to be cached. vtgate analyzes every incoming query and generate a query plan, these plans are being cached in a lru cache. This config controls the capacity of the lru cache. (default 33554432) + --gateway_initial_tablet_timeout duration At startup, the tabletGateway will wait up to this duration to get at least one tablet per keyspace/shard/tablet type (default 30s) + --grpc-send-session-in-streaming If set, will send the session as last packet in streaming api to support transactions in streaming + --grpc-use-effective-groups If set, and SSL is not used, will set the immediate caller's security groups from the effective caller id's groups. + --grpc-use-static-authentication-callerid If set, will set the immediate caller id to the username authenticated by the static auth plugin. + --grpc_auth_mode string Which auth plugin implementation to use (eg: static) + --grpc_auth_mtls_allowed_substrings string List of substrings of at least one of the client certificate names (separated by colon). + --grpc_auth_static_client_creds string When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server. + --grpc_auth_static_password_file string JSON File to read the users/passwords from. + --grpc_bind_address string Bind address for gRPC calls. If empty, listen on all addresses. + --grpc_ca string server CA to use for gRPC connections, requires TLS, and enforces client certificate check + --grpc_cert string server certificate to use for gRPC connections, requires grpc_key, enables TLS + --grpc_compression string Which protocol to use for compressing gRPC. Default: nothing. Supported: snappy + --grpc_crl string path to a certificate revocation list in PEM format, client certificates will be further verified against this file during TLS handshake + --grpc_enable_optional_tls enable optional TLS mode when a server accepts both TLS and plain-text connections on the same port + --grpc_enable_tracing Enable gRPC tracing. + --grpc_initial_conn_window_size int gRPC initial connection window size + --grpc_initial_window_size int gRPC initial window size + --grpc_keepalive_time duration After a duration of this time, if the client doesn't see any activity, it pings the server to see if the transport is still alive. (default 10s) + --grpc_keepalive_timeout duration After having pinged for keepalive check, the client waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) + --grpc_key string server private key to use for gRPC connections, requires grpc_cert, enables TLS + --grpc_max_connection_age duration Maximum age of a client connection before GoAway is sent. (default 2562047h47m16.854775807s) + --grpc_max_connection_age_grace duration Additional grace period after grpc_max_connection_age, after which connections are forcibly closed. (default 2562047h47m16.854775807s) + --grpc_max_message_size int Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'. (default 16777216) + --grpc_port int Port to listen on for gRPC calls. If zero, do not listen. + --grpc_prometheus Enable gRPC monitoring with Prometheus. + --grpc_server_ca string path to server CA in PEM format, which will be combine with server cert, return full certificate chain to clients + --grpc_server_initial_conn_window_size int gRPC server initial connection window size + --grpc_server_initial_window_size int gRPC server initial window size + --grpc_server_keepalive_enforcement_policy_min_time duration gRPC server minimum keepalive time (default 10s) + --grpc_server_keepalive_enforcement_policy_permit_without_stream gRPC server permit client keepalive pings even when there are no active streams (RPCs) + --grpc_server_keepalive_time duration After a duration of this time, if the server doesn't see any activity, it pings the client to see if the transport is still alive. (default 10s) + --grpc_server_keepalive_timeout duration After having pinged for keepalive check, the server waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) + --grpc_use_effective_callerid If set, and SSL is not used, will set the immediate caller id from the effective caller id's principal. + --healthcheck-dial-concurrency int Maximum concurrency of new healthcheck connections. This should be less than the golang max thread limit of 10000. (default 1024) + --healthcheck_retry_delay duration health check retry delay (default 2ms) + --healthcheck_timeout duration the health check timeout period (default 1m0s) + -h, --help help for docgen + --jaeger-agent-host string host and port to send spans to. if empty, no tracing will be done + --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --keyspaces_to_watch strings Specifies which keyspaces this vtgate should have access to while routing queries or accessing the vschema. + --lameduck-period duration keep running at least this long after SIGTERM before stopping (default 50ms) + --legacy_replication_lag_algorithm Use the legacy algorithm when selecting vttablets for serving. (default true) + --lock-timeout duration Maximum time for which a shard/keyspace lock can be acquired for (default 45s) + --lock_heartbeat_time duration If there is lock function used. This will keep the lock connection active by using this heartbeat (default 5s) + --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace + --log_dir string If non-empty, write log files in this directory + --log_err_stacks log stack traces for errors + --log_queries_to_file string Enable query logging to the specified file + --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) + --logtostderr log to standard error instead of files + --max-stack-size int configure the maximum stack size in bytes (default 67108864) + --max_memory_rows int Maximum number of rows that will be held in memory for intermediate results as well as the final result. (default 300000) + --max_payload_size int The threshold for query payloads in bytes. A payload greater than this threshold will result in a failure to handle the query. + --message_stream_grace_period duration the amount of time to give for a vttablet to resume if it ends a message stream, usually because of a reparent. (default 30s) + --min_number_serving_vttablets int The minimum number of vttablets for each replicating tablet_type (e.g. replica, rdonly) that will be continue to be used even with replication lag above discovery_low_replication_lag, but still below discovery_high_replication_lag_minimum_serving. (default 2) + --mysql-server-keepalive-period duration TCP period between keep-alives + --mysql-server-pool-conn-read-buffers If set, the server will pool incoming connection read buffers + --mysql_allow_clear_text_without_tls If set, the server will allow the use of a clear text password over non-SSL connections. + --mysql_auth_server_impl string Which auth server implementation to use. Options: none, ldap, clientcert, static, vault. (default "static") + --mysql_auth_server_static_file string JSON File to read the users/passwords from. + --mysql_auth_server_static_string string JSON representation of the users/passwords config. + --mysql_auth_static_reload_interval duration Ticker to reload credentials + --mysql_auth_vault_addr string URL to Vault server + --mysql_auth_vault_path string Vault path to vtgate credentials JSON blob, e.g.: secret/data/prod/vtgatecreds + --mysql_auth_vault_role_mountpoint string Vault AppRole mountpoint; can also be passed using VAULT_MOUNTPOINT environment variable (default "approle") + --mysql_auth_vault_role_secretidfile string Path to file containing Vault AppRole secret_id; can also be passed using VAULT_SECRETID environment variable + --mysql_auth_vault_roleid string Vault AppRole id; can also be passed using VAULT_ROLEID environment variable + --mysql_auth_vault_timeout duration Timeout for vault API operations (default 10s) + --mysql_auth_vault_tls_ca string Path to CA PEM for validating Vault server certificate + --mysql_auth_vault_tokenfile string Path to file containing Vault auth token; token can also be passed using VAULT_TOKEN environment variable + --mysql_auth_vault_ttl duration How long to cache vtgate credentials from the Vault server (default 30m0s) + --mysql_clientcert_auth_method string client-side authentication method to use. Supported values: mysql_clear_password, dialog. (default "mysql_clear_password") + --mysql_default_workload string Default session workload (OLTP, OLAP, DBA) (default "OLTP") + --mysql_ldap_auth_config_file string JSON File from which to read LDAP server config. + --mysql_ldap_auth_config_string string JSON representation of LDAP server config. + --mysql_ldap_auth_method string client-side authentication method to use. Supported values: mysql_clear_password, dialog. (default "mysql_clear_password") + --mysql_server_bind_address string Binds on this address when listening to MySQL binary protocol. Useful to restrict listening to 'localhost' only for instance. + --mysql_server_flush_delay duration Delay after which buffered response will be flushed to the client. (default 100ms) + --mysql_server_port int If set, also listen for MySQL binary protocol connections on this port. (default -1) + --mysql_server_query_timeout duration mysql query timeout + --mysql_server_read_timeout duration connection read timeout + --mysql_server_require_secure_transport Reject insecure connections but only if mysql_server_ssl_cert and mysql_server_ssl_key are provided + --mysql_server_socket_path string This option specifies the Unix socket file to use when listening for local connections. By default it will be empty and it won't listen to a unix socket + --mysql_server_ssl_ca string Path to ssl CA for mysql server plugin SSL. If specified, server will require and validate client certs. + --mysql_server_ssl_cert string Path to the ssl cert for mysql server plugin SSL + --mysql_server_ssl_crl string Path to ssl CRL for mysql server plugin SSL + --mysql_server_ssl_key string Path to ssl key for mysql server plugin SSL + --mysql_server_ssl_server_ca string path to server CA in PEM format, which will be combine with server cert, return full certificate chain to clients + --mysql_server_tls_min_version string Configures the minimal TLS version negotiated when SSL is enabled. Defaults to TLSv1.2. Options: TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3. + --mysql_server_version string MySQL server version to advertise. (default "8.0.30-Vitess") + --mysql_server_write_timeout duration connection write timeout + --mysql_slow_connect_warn_threshold duration Warn if it takes more than the given threshold for a mysql connection to establish + --mysql_tcp_version string Select tcp, tcp4, or tcp6 to control the socket type. (default "tcp") + --no_scatter when set to true, the planner will fail instead of producing a plan that includes scatter queries + --normalize_queries Rewrite queries with bind vars. Turn this off if the app itself sends normalized queries with bind vars. (default true) + --onclose_timeout duration wait no more than this for OnClose handlers before stopping (default 10s) + --onterm_timeout duration wait no more than this for OnTermSync handlers before stopping (default 10s) + --opentsdb_uri string URI of opentsdb /api/put method + --pid_file string If set, the process will write its pid to the named file, and delete it on graceful shutdown. + --planner-version string Sets the default planner to use when the session has not changed it. Valid values are: Gen4, Gen4Greedy, Gen4Left2Right + --port int port for the server + --pprof strings enable profiling + --pprof-http enable pprof http endpoints + --proxy_protocol Enable HAProxy PROXY protocol on MySQL listener socket + --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) + --query-timeout int Sets the default query timeout (in ms). Can be overridden by session variable (query_timeout) or comment directive (QUERY_TIMEOUT_MS) + --querylog-buffer-size int Maximum number of buffered query logs before throttling log output (default 10) + --querylog-filter-tag string string that must be present in the query for it to be logged; if using a value as the tag, you need to disable query normalization + --querylog-format string format for query logs ("text" or "json") (default "text") + --querylog-row-threshold uint Number of rows a query has to return or affect before being logged; not useful for streaming queries. 0 means all queries will be logged. + --redact-debug-ui-queries redact full queries and bind variables from debug UI + --remote_operation_timeout duration time to wait for a remote operation (default 15s) + --retry-count int retry count (default 2) + --schema_change_signal Enable the schema tracker; requires queryserver-config-schema-change-signal to be enabled on the underlying vttablets for this to work (default true) + --security_policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) + --service_map strings comma separated list of services to enable (or disable if prefixed with '-') Example: grpc-queryservice + --sql-max-length-errors int truncate queries in error logs to the given length (default unlimited) + --sql-max-length-ui int truncate queries in debug UIs to the given length (default 512) (default 512) + --srv_topo_cache_refresh duration how frequently to refresh the topology for cached entries (default 1s) + --srv_topo_cache_ttl duration how long to use cached entries for topology (default 1s) + --srv_topo_timeout duration topo server timeout (default 5s) + --stats_backend string The name of the registered push-based monitoring/stats backend to use + --stats_combine_dimensions string List of dimensions to be combined into a single "all" value in exported stats vars + --stats_common_tags strings Comma-separated list of common tags for the stats backend. It provides both label and values. Example: label1:value1,label2:value2 + --stats_drop_variables string Variables to be dropped from the list of exported variables. + --stats_emit_period duration Interval between emitting stats to all registered backends (default 1m0s) + --statsd_address string Address for statsd client + --statsd_sample_rate float Sample rate for statsd metrics (default 1) + --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) + --stream_buffer_size int the number of bytes sent from vtgate for each stream call. It's recommended to keep this value in sync with vttablet's query-server-config-stream-buffer-size. (default 32768) + --table-refresh-interval int interval in milliseconds to refresh tables in status page with refreshRequired class + --tablet_filters strings Specifies a comma-separated list of 'keyspace|shard_name or keyrange' values to filter the tablets to watch. + --tablet_grpc_ca string the server ca to use to validate servers when connecting + --tablet_grpc_cert string the cert to use to connect + --tablet_grpc_crl string the server crl to use to validate server certificates when connecting + --tablet_grpc_key string the key to use to connect + --tablet_grpc_server_name string the server name to use to validate server certificate + --tablet_protocol string Protocol to use to make queryservice RPCs to vttablets. (default "grpc") + --tablet_refresh_interval duration Tablet refresh interval. (default 1m0s) + --tablet_refresh_known_tablets Whether to reload the tablet's address/port map from topo in case they change. (default true) + --tablet_types_to_wait strings Wait till connected for specified tablet types during Gateway initialization. Should be provided as a comma-separated set of tablet types. + --tablet_url_template string Format string describing debug tablet url formatting. See getTabletDebugURL() for how to customize this. (default "http://{{.GetTabletHostPort}}") + --topo_consul_lock_delay duration LockDelay for consul session. (default 15s) + --topo_consul_lock_session_checks string List of checks for consul session. (default "serfHealth") + --topo_consul_lock_session_ttl string TTL for consul session. + --topo_consul_watch_poll_duration duration time of the long poll for watch queries. (default 30s) + --topo_etcd_lease_ttl int Lease TTL for locks and leader election. The client will use KeepAlive to keep the lease going. (default 30) + --topo_etcd_tls_ca string path to the ca to use to validate the server cert when connecting to the etcd topo server + --topo_etcd_tls_cert string path to the client cert to use to connect to the etcd topo server, requires topo_etcd_tls_key, enables TLS + --topo_etcd_tls_key string path to the client key to use to connect to the etcd topo server, enables TLS + --topo_global_root string the path of the global topology data in the global topology server + --topo_global_server_address string the address of the global topology server + --topo_implementation string the topology implementation to use + --topo_read_concurrency int Concurrency of topo reads. (default 32) + --topo_zk_auth_file string auth to use when connecting to the zk topo server, file contents should be :, e.g., digest:user:pass + --topo_zk_base_timeout duration zk base timeout (see zk.Connect) (default 30s) + --topo_zk_max_concurrency int maximum number of pending requests to send to a Zookeeper server. (default 64) + --topo_zk_tls_ca string the server ca to use to validate servers when connecting to the zk topo server + --topo_zk_tls_cert string the cert to use to connect to the zk topo server, requires topo_zk_tls_key, enables TLS + --topo_zk_tls_key string the key to use to connect to the zk topo server, enables TLS + --tracer string tracing service to use (default "noop") + --tracing-enable-logging whether to enable logging in the tracing service + --tracing-sampling-rate float sampling rate for the probabilistic jaeger sampler (default 0.1) + --tracing-sampling-type string sampling strategy to use for jaeger. possible values are 'const', 'probabilistic', 'rateLimiting', or 'remote' (default "const") + --transaction_mode string SINGLE: disallow multi-db transactions, MULTI: allow multi-db transactions with best effort commit, TWOPC: allow multi-db transactions with 2pc commit (default "MULTI") + --truncate-error-len int truncate errors sent to client if they are longer than this value (0 means do not truncate) + --v Level log level for V logs + -v, --version print binary version + --vmodule vModuleFlag comma-separated list of pattern=N settings for file-filtered logging + --vschema_ddl_authorized_users string List of users authorized to execute vschema ddl operations, or '%' to allow all users. + --vtgate-config-terse-errors prevent bind vars from escaping in returned errors + --warming-reads-concurrency int Number of concurrent warming reads allowed (default 500) + --warming-reads-percent int Percentage of reads on the primary to forward to replicas. Useful for keeping buffer pools warm + --warming-reads-query-timeout duration Timeout of warming read queries (default 5s) + --warn_memory_rows int Warning threshold for in-memory results. A row count higher than this amount will cause the VtGateWarnings.ResultsExceeded counter to be incremented. (default 30000) + --warn_payload_size int The warning threshold for query payloads in bytes. A payload greater than this threshold will cause the VtGateWarnings.WarnPayloadSizeExceeded counter to be incremented. + --warn_sharded_only If any features that are only available in unsharded mode are used, query execution warnings will be added to the session +``` + diff --git a/content/en/docs/21.0/reference/programs/vtgateclienttest/_index.md b/content/en/docs/21.0/reference/programs/vtgateclienttest/_index.md new file mode 100644 index 000000000..1b6c1b817 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtgateclienttest/_index.md @@ -0,0 +1,82 @@ +--- +title: vtgateclienttest +series: vtgateclienttest +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## vtgateclienttest + +vtgateclienttest is a chain of vtgateservice.VTGateService implementations, each one being responsible for one test scenario. + +``` +vtgateclienttest [flags] +``` + +### Options + +``` + --alsologtostderr log to standard error as well as files + --bind-address string Bind address for the server. If empty, the server will listen on all available unicast and anycast IP addresses of the local system. + --catch-sigpipe catch and ignore SIGPIPE on stdout and stderr if specified + --config-file string Full path of the config file (with extension) to use. If set, --config-path, --config-type, and --config-name are ignored. + --config-file-not-found-handling ConfigFileNotFoundHandling Behavior when a config file is not found. (Options: error, exit, ignore, warn) (default warn) + --config-name string Name of the config file (without extension) to search for. (default "vtconfig") + --config-path strings Paths to search for config files in. (default []) + --config-persistence-min-interval duration minimum interval between persisting dynamic config changes back to disk (if no change has occurred, nothing is done). (default 1s) + --config-type string Config file type (omit to infer config type from file extension). + --default_tablet_type topodatapb.TabletType The default tablet type to set for queries, when one is not explicitly selected. (default PRIMARY) + --grpc_auth_mode string Which auth plugin implementation to use (eg: static) + --grpc_auth_mtls_allowed_substrings string List of substrings of at least one of the client certificate names (separated by colon). + --grpc_auth_static_client_creds string When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server. + --grpc_auth_static_password_file string JSON File to read the users/passwords from. + --grpc_bind_address string Bind address for gRPC calls. If empty, listen on all addresses. + --grpc_ca string server CA to use for gRPC connections, requires TLS, and enforces client certificate check + --grpc_cert string server certificate to use for gRPC connections, requires grpc_key, enables TLS + --grpc_compression string Which protocol to use for compressing gRPC. Default: nothing. Supported: snappy + --grpc_crl string path to a certificate revocation list in PEM format, client certificates will be further verified against this file during TLS handshake + --grpc_enable_optional_tls enable optional TLS mode when a server accepts both TLS and plain-text connections on the same port + --grpc_enable_tracing Enable gRPC tracing. + --grpc_initial_conn_window_size int gRPC initial connection window size + --grpc_initial_window_size int gRPC initial window size + --grpc_keepalive_time duration After a duration of this time, if the client doesn't see any activity, it pings the server to see if the transport is still alive. (default 10s) + --grpc_keepalive_timeout duration After having pinged for keepalive check, the client waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) + --grpc_key string server private key to use for gRPC connections, requires grpc_cert, enables TLS + --grpc_max_connection_age duration Maximum age of a client connection before GoAway is sent. (default 2562047h47m16.854775807s) + --grpc_max_connection_age_grace duration Additional grace period after grpc_max_connection_age, after which connections are forcibly closed. (default 2562047h47m16.854775807s) + --grpc_max_message_size int Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'. (default 16777216) + --grpc_port int Port to listen on for gRPC calls. If zero, do not listen. + --grpc_prometheus Enable gRPC monitoring with Prometheus. + --grpc_server_ca string path to server CA in PEM format, which will be combine with server cert, return full certificate chain to clients + --grpc_server_initial_conn_window_size int gRPC server initial connection window size + --grpc_server_initial_window_size int gRPC server initial window size + --grpc_server_keepalive_enforcement_policy_min_time duration gRPC server minimum keepalive time (default 10s) + --grpc_server_keepalive_enforcement_policy_permit_without_stream gRPC server permit client keepalive pings even when there are no active streams (RPCs) + --grpc_server_keepalive_time duration After a duration of this time, if the server doesn't see any activity, it pings the client to see if the transport is still alive. (default 10s) + --grpc_server_keepalive_timeout duration After having pinged for keepalive check, the server waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) + -h, --help help for vtgateclienttest + --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --lameduck-period duration keep running at least this long after SIGTERM before stopping (default 50ms) + --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace + --log_dir string If non-empty, write log files in this directory + --log_err_stacks log stack traces for errors + --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) + --logtostderr log to standard error instead of files + --max-stack-size int configure the maximum stack size in bytes (default 67108864) + --mysql_server_version string MySQL server version to advertise. (default "8.0.30-Vitess") + --onclose_timeout duration wait no more than this for OnClose handlers before stopping (default 10s) + --onterm_timeout duration wait no more than this for OnTermSync handlers before stopping (default 10s) + --pid_file string If set, the process will write its pid to the named file, and delete it on graceful shutdown. + --port int port for the server + --pprof strings enable profiling + --pprof-http enable pprof http endpoints + --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) + --security_policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) + --service_map strings comma separated list of services to enable (or disable if prefixed with '-') Example: grpc-queryservice + --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) + --table-refresh-interval int interval in milliseconds to refresh tables in status page with refreshRequired class + --v Level log level for V logs + -v, --version print binary version + --vmodule vModuleFlag comma-separated list of pattern=N settings for file-filtered logging + --vschema_ddl_authorized_users string List of users authorized to execute vschema ddl operations, or '%' to allow all users. +``` + diff --git a/content/en/docs/21.0/reference/programs/vtorc/_index.md b/content/en/docs/21.0/reference/programs/vtorc/_index.md new file mode 100644 index 000000000..4f625a18a --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vtorc/_index.md @@ -0,0 +1,125 @@ +--- +title: vtorc +series: vtorc +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## vtorc + +VTOrc is the automated fault detection and repair tool in Vitess. + +``` +vtorc [flags] +``` + +### Examples + +``` +vtorc \ + --topo_implementation etcd2 \ + --topo_global_server_address localhost:2379 \ + --topo_global_root /vitess/global \ + --log_dir $VTDATAROOT/tmp \ + --port 15000 \ + --instance-poll-time "1s" \ + --topo-information-refresh-duration "30s" \ + --alsologtostderr +``` + +### Options + +``` + --allow-emergency-reparent Whether VTOrc should be allowed to run emergency reparent operation when it detects a dead primary (default true) + --alsologtostderr log to standard error as well as files + --audit-file-location string File location where the audit logs are to be stored + --audit-purge-duration duration Duration for which audit logs are held before being purged. Should be in multiples of days (default 168h0m0s) + --audit-to-backend Whether to store the audit log in the VTOrc database + --audit-to-syslog Whether to store the audit log in the syslog + --bind-address string Bind address for the server. If empty, the server will listen on all available unicast and anycast IP addresses of the local system. + --catch-sigpipe catch and ignore SIGPIPE on stdout and stderr if specified + --change-tablets-with-errant-gtid-to-drained Whether VTOrc should be changing the type of tablets with errant GTIDs to DRAINED + --clusters_to_watch strings Comma-separated list of keyspaces or keyspace/shards that this instance will monitor and repair. Defaults to all clusters in the topology. Example: "ks1,ks2/-80" + --config string config file name + --config-file string Full path of the config file (with extension) to use. If set, --config-path, --config-type, and --config-name are ignored. + --config-file-not-found-handling ConfigFileNotFoundHandling Behavior when a config file is not found. (Options: error, exit, ignore, warn) (default warn) + --config-name string Name of the config file (without extension) to search for. (default "vtconfig") + --config-path strings Paths to search for config files in. (default []) + --config-persistence-min-interval duration minimum interval between persisting dynamic config changes back to disk (if no change has occurred, nothing is done). (default 1s) + --config-type string Config file type (omit to infer config type from file extension). + --consul_auth_static_file string JSON File to read the topos/tokens from. + --emit_stats If set, emit stats to push-based monitoring and stats backends + --grpc_auth_static_client_creds string When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server. + --grpc_compression string Which protocol to use for compressing gRPC. Default: nothing. Supported: snappy + --grpc_enable_tracing Enable gRPC tracing. + --grpc_initial_conn_window_size int gRPC initial connection window size + --grpc_initial_window_size int gRPC initial window size + --grpc_keepalive_time duration After a duration of this time, if the client doesn't see any activity, it pings the server to see if the transport is still alive. (default 10s) + --grpc_keepalive_timeout duration After having pinged for keepalive check, the client waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) + --grpc_max_message_size int Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'. (default 16777216) + --grpc_prometheus Enable gRPC monitoring with Prometheus. + -h, --help help for vtorc + --instance-poll-time duration Timer duration on which VTOrc refreshes MySQL information (default 5s) + --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --lameduck-period duration keep running at least this long after SIGTERM before stopping (default 50ms) + --lock-timeout duration Maximum time for which a shard/keyspace lock can be acquired for (default 45s) + --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace + --log_dir string If non-empty, write log files in this directory + --log_err_stacks log stack traces for errors + --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) + --logtostderr log to standard error instead of files + --max-stack-size int configure the maximum stack size in bytes (default 67108864) + --onclose_timeout duration wait no more than this for OnClose handlers before stopping (default 10s) + --onterm_timeout duration wait no more than this for OnTermSync handlers before stopping (default 10s) + --pid_file string If set, the process will write its pid to the named file, and delete it on graceful shutdown. + --port int port for the server + --pprof strings enable profiling + --pprof-http enable pprof http endpoints + --prevent-cross-cell-failover Prevent VTOrc from promoting a primary in a different cell than the current primary in case of a failover + --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) + --reasonable-replication-lag duration Maximum replication lag on replicas which is deemed to be acceptable (default 10s) + --recovery-poll-duration duration Timer duration on which VTOrc polls its database to run a recovery (default 1s) + --remote_operation_timeout duration time to wait for a remote operation (default 15s) + --security_policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) + --shutdown_wait_time duration Maximum time to wait for VTOrc to release all the locks that it is holding before shutting down on SIGTERM (default 30s) + --snapshot-topology-interval duration Timer duration on which VTOrc takes a snapshot of the current MySQL information it has in the database. Should be in multiple of hours + --sqlite-data-file string SQLite Datafile to use as VTOrc's database (default "file::memory:?mode=memory&cache=shared") + --stats_backend string The name of the registered push-based monitoring/stats backend to use + --stats_combine_dimensions string List of dimensions to be combined into a single "all" value in exported stats vars + --stats_common_tags strings Comma-separated list of common tags for the stats backend. It provides both label and values. Example: label1:value1,label2:value2 + --stats_drop_variables string Variables to be dropped from the list of exported variables. + --stats_emit_period duration Interval between emitting stats to all registered backends (default 1m0s) + --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) + --table-refresh-interval int interval in milliseconds to refresh tables in status page with refreshRequired class + --tablet_manager_grpc_ca string the server ca to use to validate servers when connecting + --tablet_manager_grpc_cert string the cert to use to connect + --tablet_manager_grpc_concurrency int concurrency to use to talk to a vttablet server for performance-sensitive RPCs (like ExecuteFetchAs{Dba,App}, CheckThrottler and FullStatus) (default 8) + --tablet_manager_grpc_connpool_size int number of tablets to keep tmclient connections open to (default 100) + --tablet_manager_grpc_crl string the server crl to use to validate server certificates when connecting + --tablet_manager_grpc_key string the key to use to connect + --tablet_manager_grpc_server_name string the server name to use to validate server certificate + --tablet_manager_protocol string Protocol to use to make tabletmanager RPCs to vttablets. (default "grpc") + --tolerable-replication-lag duration Amount of replication lag that is considered acceptable for a tablet to be eligible for promotion when Vitess makes the choice of a new primary in PRS + --topo-information-refresh-duration duration Timer duration on which VTOrc refreshes the keyspace and vttablet records from the topology server (default 15s) + --topo_consul_lock_delay duration LockDelay for consul session. (default 15s) + --topo_consul_lock_session_checks string List of checks for consul session. (default "serfHealth") + --topo_consul_lock_session_ttl string TTL for consul session. + --topo_consul_watch_poll_duration duration time of the long poll for watch queries. (default 30s) + --topo_etcd_lease_ttl int Lease TTL for locks and leader election. The client will use KeepAlive to keep the lease going. (default 30) + --topo_etcd_tls_ca string path to the ca to use to validate the server cert when connecting to the etcd topo server + --topo_etcd_tls_cert string path to the client cert to use to connect to the etcd topo server, requires topo_etcd_tls_key, enables TLS + --topo_etcd_tls_key string path to the client key to use to connect to the etcd topo server, enables TLS + --topo_global_root string the path of the global topology data in the global topology server + --topo_global_server_address string the address of the global topology server + --topo_implementation string the topology implementation to use + --topo_zk_auth_file string auth to use when connecting to the zk topo server, file contents should be :, e.g., digest:user:pass + --topo_zk_base_timeout duration zk base timeout (see zk.Connect) (default 30s) + --topo_zk_max_concurrency int maximum number of pending requests to send to a Zookeeper server. (default 64) + --topo_zk_tls_ca string the server ca to use to validate servers when connecting to the zk topo server + --topo_zk_tls_cert string the cert to use to connect to the zk topo server, requires topo_zk_tls_key, enables TLS + --topo_zk_tls_key string the key to use to connect to the zk topo server, enables TLS + --v Level log level for V logs + -v, --version print binary version + --vmodule vModuleFlag comma-separated list of pattern=N settings for file-filtered logging + --wait-replicas-timeout duration Duration for which to wait for replica's to respond when issuing RPCs (default 30s) +``` + diff --git a/content/en/docs/21.0/reference/programs/vttablet/_index.md b/content/en/docs/21.0/reference/programs/vttablet/_index.md new file mode 100644 index 000000000..7f1f149e2 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vttablet/_index.md @@ -0,0 +1,451 @@ +--- +title: vttablet +series: vttablet +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## vttablet + +The VTTablet server controls a running MySQL server. + +### Synopsis + +The VTTablet server _controls_ a running MySQL server. VTTablet supports two primary types of deployments: + +* Managed MySQL (most common) +* External MySQL + +In addition to these deployment types, a partially managed VTTablet is also possible by setting `--disable_active_reparents`. + +### Managed MySQL + +In this mode, Vitess actively manages MySQL. + +### External MySQL. + +In this mode, an external MySQL can be used such as AWS RDS, AWS Aurora, Google CloudSQL; or just an existing (vanilla) MySQL installation. + +See "Unmanaged Tablet" for the full guide. + +Even if a MySQL is external, you can still make vttablet perform some management functions. They are as follows: + +* `--unmanaged`: This flag indicates that this tablet is running in unmanaged mode. In this mode, any reparent or replica commands are not allowed. These are InitShardPrimary, PlannedReparentShard, EmergencyReparentShard, and ReparentTablet. You should use the TabletExternallyReparented command to inform vitess of the current primary. +* `--replication_connect_retry`: This value is give to mysql when it connects a replica to the primary as the retry duration parameter. +* `--heartbeat_enable` and `--heartbeat_interval duration`: cause vttablet to write heartbeats to the sidecar database. This information is also used by the replication reporter to assess replica lag. + + +``` +vttablet [flags] +``` + +### Examples + +``` + +vttablet \ + --topo_implementation etcd2 \ + --topo_global_server_address localhost:2379 \ + --topo_global_root /vitess/ \ + --tablet-path $alias \ + --init_keyspace $keyspace \ + --init_shard $shard \ + --init_tablet_type $tablet_type \ + --port $port \ + --grpc_port $grpc_port \ + --service_map 'grpc-queryservice,grpc-tabletmanager,grpc-updatestream' + +`$alias` needs to be of the form: `-id`, and the cell should match one of the local cells that was created in the topology. The id can be left padded with zeroes: `cell-100` and `cell-000000100` are synonymous. +``` + +### Options + +``` + --alsologtostderr log to standard error as well as files + --app_idle_timeout duration Idle timeout for app connections (default 1m0s) + --app_pool_size int Size of the connection pool for app connections (default 40) + --azblob_backup_account_key_file string Path to a file containing the Azure Storage account key; if this flag is unset, the environment variable VT_AZBLOB_ACCOUNT_KEY will be used as the key itself (NOT a file path). + --azblob_backup_account_name string Azure Storage Account name for backups; if this flag is unset, the environment variable VT_AZBLOB_ACCOUNT_NAME will be used. + --azblob_backup_buffer_size int The memory buffer size to use in bytes, per file or stripe, when streaming to Azure Blob Service. (default 104857600) + --azblob_backup_container_name string Azure Blob Container Name. + --azblob_backup_parallelism int Azure Blob operation parallelism (requires extra memory when increased -- a multiple of azblob_backup_buffer_size). (default 1) + --azblob_backup_storage_root string Root prefix for all backup-related Azure Blobs; this should exclude both initial and trailing '/' (e.g. just 'a/b' not '/a/b/'). + --backup_engine_implementation string Specifies which implementation to use for creating new backups (builtin or xtrabackup). Restores will always be done with whichever engine created a given backup. (default "builtin") + --backup_storage_block_size int if backup_storage_compress is true, backup_storage_block_size sets the byte size for each block while compressing (default is 250000). (default 250000) + --backup_storage_compress if set, the backup files will be compressed. (default true) + --backup_storage_implementation string Which backup storage implementation to use for creating and restoring backups. + --backup_storage_number_blocks int if backup_storage_compress is true, backup_storage_number_blocks sets the number of blocks that can be processed, in parallel, before the writer blocks, during compression (default is 2). It should be equal to the number of CPUs available for compression. (default 2) + --bind-address string Bind address for the server. If empty, the server will listen on all available unicast and anycast IP addresses of the local system. + --binlog_host string PITR restore parameter: hostname/IP of binlog server. + --binlog_password string PITR restore parameter: password of binlog server. + --binlog_player_grpc_ca string the server ca to use to validate servers when connecting + --binlog_player_grpc_cert string the cert to use to connect + --binlog_player_grpc_crl string the server crl to use to validate server certificates when connecting + --binlog_player_grpc_key string the key to use to connect + --binlog_player_grpc_server_name string the server name to use to validate server certificate + --binlog_player_protocol string the protocol to download binlogs from a vttablet (default "grpc") + --binlog_port int PITR restore parameter: port of binlog server. + --binlog_ssl_ca string PITR restore parameter: Filename containing TLS CA certificate to verify binlog server TLS certificate against. + --binlog_ssl_cert string PITR restore parameter: Filename containing mTLS client certificate to present to binlog server as authentication. + --binlog_ssl_key string PITR restore parameter: Filename containing mTLS client private key for use in binlog server authentication. + --binlog_ssl_server_name string PITR restore parameter: TLS server name (common name) to verify against for the binlog server we are connecting to (If not set: use the hostname or IP supplied in --binlog_host). + --binlog_user string PITR restore parameter: username of binlog server. + --builtinbackup-file-read-buffer-size uint read files using an IO buffer of this many bytes. Golang defaults are used when set to 0. + --builtinbackup-file-write-buffer-size uint write files using an IO buffer of this many bytes. Golang defaults are used when set to 0. (default 2097152) + --builtinbackup-incremental-restore-path string the directory where incremental restore files, namely binlog files, are extracted to. In k8s environments, this should be set to a directory that is shared between the vttablet and mysqld pods. The path should exist. When empty, the default OS temp dir is assumed. + --builtinbackup_mysqld_timeout duration how long to wait for mysqld to shutdown at the start of the backup. (default 10m0s) + --builtinbackup_progress duration how often to send progress updates when backing up large files. (default 5s) + --catch-sigpipe catch and ignore SIGPIPE on stdout and stderr if specified + --ceph_backup_storage_config string Path to JSON config file for ceph backup storage. (default "ceph_backup_config.json") + --compression-engine-name string compressor engine used for compression. (default "pargzip") + --compression-level int what level to pass to the compressor. (default 1) + --config-file string Full path of the config file (with extension) to use. If set, --config-path, --config-type, and --config-name are ignored. + --config-file-not-found-handling ConfigFileNotFoundHandling Behavior when a config file is not found. (Options: error, exit, ignore, warn) (default warn) + --config-name string Name of the config file (without extension) to search for. (default "vtconfig") + --config-path strings Paths to search for config files in. (default []) + --config-persistence-min-interval duration minimum interval between persisting dynamic config changes back to disk (if no change has occurred, nothing is done). (default 1s) + --config-type string Config file type (omit to infer config type from file extension). + --consolidator-stream-query-size int Configure the stream consolidator query size in bytes. Setting to 0 disables the stream consolidator. (default 2097152) + --consolidator-stream-total-size int Configure the stream consolidator total size in bytes. Setting to 0 disables the stream consolidator. (default 134217728) + --consul_auth_static_file string JSON File to read the topos/tokens from. + --datadog-agent-host string host to send spans to. if empty, no tracing will be done + --datadog-agent-port string port to send spans to. if empty, no tracing will be done + --db-credentials-file string db credentials file; send SIGHUP to reload this file + --db-credentials-server string db credentials server type ('file' - file implementation; 'vault' - HashiCorp Vault implementation) (default "file") + --db-credentials-vault-addr string URL to Vault server + --db-credentials-vault-path string Vault path to credentials JSON blob, e.g.: secret/data/prod/dbcreds + --db-credentials-vault-role-mountpoint string Vault AppRole mountpoint; can also be passed using VAULT_MOUNTPOINT environment variable (default "approle") + --db-credentials-vault-role-secretidfile string Path to file containing Vault AppRole secret_id; can also be passed using VAULT_SECRETID environment variable + --db-credentials-vault-roleid string Vault AppRole id; can also be passed using VAULT_ROLEID environment variable + --db-credentials-vault-timeout duration Timeout for vault API operations (default 10s) + --db-credentials-vault-tls-ca string Path to CA PEM for validating Vault server certificate + --db-credentials-vault-tokenfile string Path to file containing Vault auth token; token can also be passed using VAULT_TOKEN environment variable + --db-credentials-vault-ttl duration How long to cache DB credentials from the Vault server (default 30m0s) + --db_allprivs_password string db allprivs password + --db_allprivs_use_ssl Set this flag to false to make the allprivs connection to not use ssl (default true) + --db_allprivs_user string db allprivs user userKey (default "vt_allprivs") + --db_app_password string db app password + --db_app_use_ssl Set this flag to false to make the app connection to not use ssl (default true) + --db_app_user string db app user userKey (default "vt_app") + --db_appdebug_password string db appdebug password + --db_appdebug_use_ssl Set this flag to false to make the appdebug connection to not use ssl (default true) + --db_appdebug_user string db appdebug user userKey (default "vt_appdebug") + --db_charset string Character set used for this tablet. (default "utf8mb4") + --db_conn_query_info enable parsing and processing of QUERY_OK info fields + --db_connect_timeout_ms int connection timeout to mysqld in milliseconds (0 for no timeout) + --db_dba_password string db dba password + --db_dba_use_ssl Set this flag to false to make the dba connection to not use ssl (default true) + --db_dba_user string db dba user userKey (default "vt_dba") + --db_erepl_password string db erepl password + --db_erepl_use_ssl Set this flag to false to make the erepl connection to not use ssl (default true) + --db_erepl_user string db erepl user userKey (default "vt_erepl") + --db_filtered_password string db filtered password + --db_filtered_use_ssl Set this flag to false to make the filtered connection to not use ssl (default true) + --db_filtered_user string db filtered user userKey (default "vt_filtered") + --db_flags uint Flag values as defined by MySQL. + --db_flavor string Flavor overrid. Valid value is FilePos. + --db_host string The host name for the tcp connection. + --db_port int tcp port + --db_repl_password string db repl password + --db_repl_use_ssl Set this flag to false to make the repl connection to not use ssl (default true) + --db_repl_user string db repl user userKey (default "vt_repl") + --db_server_name string server name of the DB we are connecting to. + --db_socket string The unix socket to connect on. If this is specified, host and port will not be used. + --db_ssl_ca string connection ssl ca + --db_ssl_ca_path string connection ssl ca path + --db_ssl_cert string connection ssl certificate + --db_ssl_key string connection ssl key + --db_ssl_mode SslMode SSL mode to connect with. One of disabled, preferred, required, verify_ca & verify_identity. + --db_tls_min_version string Configures the minimal TLS version negotiated when SSL is enabled. Defaults to TLSv1.2. Options: TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3. + --dba_idle_timeout duration Idle timeout for dba connections (default 1m0s) + --dba_pool_size int Size of the connection pool for dba connections (default 20) + --degraded_threshold duration replication lag after which a replica is considered degraded (default 30s) + --emit_stats If set, emit stats to push-based monitoring and stats backends + --enable-consolidator Synonym to -enable_consolidator (default true) + --enable-consolidator-replicas Synonym to -enable_consolidator_replicas + --enable-per-workload-table-metrics If true, query counts and query error metrics include a label that identifies the workload + --enable-tx-throttler Synonym to -enable_tx_throttler + --enable_consolidator This option enables the query consolidator. (default true) + --enable_consolidator_replicas This option enables the query consolidator only on replicas. + --enable_hot_row_protection If true, incoming transactions for the same row (range) will be queued and cannot consume all txpool slots. + --enable_hot_row_protection_dry_run If true, hot row protection is not enforced but logs if transactions would have been queued. + --enable_replication_reporter Use polling to track replication lag. + --enable_transaction_limit If true, limit on number of transactions open at the same time will be enforced for all users. User trying to open a new transaction after exhausting their limit will receive an error immediately, regardless of whether there are available slots or not. + --enable_transaction_limit_dry_run If true, limit on number of transactions open at the same time will be tracked for all users, but not enforced. + --enable_tx_throttler If true replication-lag-based throttling on transactions will be enabled. + --enforce-tableacl-config if this flag is true, vttablet will fail to start if a valid tableacl config does not exist + --enforce_strict_trans_tables If true, vttablet requires MySQL to run with STRICT_TRANS_TABLES or STRICT_ALL_TABLES on. It is recommended to not turn this flag off. Otherwise MySQL may alter your supplied values before saving them to the database. (default true) + --external-compressor string command with arguments to use when compressing a backup. + --external-compressor-extension string extension to use when using an external compressor. + --external-decompressor string command with arguments to use when decompressing a backup. + --file_backup_storage_root string Root directory for the file backup storage. + --filecustomrules string file based custom rule path + --filecustomrules_watch set up a watch on the target file and reload query rules when it changes + --gc_check_interval duration Interval between garbage collection checks (default 1h0m0s) + --gc_purge_check_interval duration Interval between purge discovery checks (default 1m0s) + --gcs_backup_storage_bucket string Google Cloud Storage bucket to use for backups. + --gcs_backup_storage_root string Root prefix for all backup-related object names. + --gh-ost-path string override default gh-ost binary full path + --grpc_auth_mode string Which auth plugin implementation to use (eg: static) + --grpc_auth_mtls_allowed_substrings string List of substrings of at least one of the client certificate names (separated by colon). + --grpc_auth_static_client_creds string When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server. + --grpc_auth_static_password_file string JSON File to read the users/passwords from. + --grpc_bind_address string Bind address for gRPC calls. If empty, listen on all addresses. + --grpc_ca string server CA to use for gRPC connections, requires TLS, and enforces client certificate check + --grpc_cert string server certificate to use for gRPC connections, requires grpc_key, enables TLS + --grpc_compression string Which protocol to use for compressing gRPC. Default: nothing. Supported: snappy + --grpc_crl string path to a certificate revocation list in PEM format, client certificates will be further verified against this file during TLS handshake + --grpc_enable_optional_tls enable optional TLS mode when a server accepts both TLS and plain-text connections on the same port + --grpc_enable_tracing Enable gRPC tracing. + --grpc_initial_conn_window_size int gRPC initial connection window size + --grpc_initial_window_size int gRPC initial window size + --grpc_keepalive_time duration After a duration of this time, if the client doesn't see any activity, it pings the server to see if the transport is still alive. (default 10s) + --grpc_keepalive_timeout duration After having pinged for keepalive check, the client waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) + --grpc_key string server private key to use for gRPC connections, requires grpc_cert, enables TLS + --grpc_max_connection_age duration Maximum age of a client connection before GoAway is sent. (default 2562047h47m16.854775807s) + --grpc_max_connection_age_grace duration Additional grace period after grpc_max_connection_age, after which connections are forcibly closed. (default 2562047h47m16.854775807s) + --grpc_max_message_size int Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'. (default 16777216) + --grpc_port int Port to listen on for gRPC calls. If zero, do not listen. + --grpc_prometheus Enable gRPC monitoring with Prometheus. + --grpc_server_ca string path to server CA in PEM format, which will be combine with server cert, return full certificate chain to clients + --grpc_server_initial_conn_window_size int gRPC server initial connection window size + --grpc_server_initial_window_size int gRPC server initial window size + --grpc_server_keepalive_enforcement_policy_min_time duration gRPC server minimum keepalive time (default 10s) + --grpc_server_keepalive_enforcement_policy_permit_without_stream gRPC server permit client keepalive pings even when there are no active streams (RPCs) + --grpc_server_keepalive_time duration After a duration of this time, if the server doesn't see any activity, it pings the client to see if the transport is still alive. (default 10s) + --grpc_server_keepalive_timeout duration After having pinged for keepalive check, the server waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) + --health_check_interval duration Interval between health checks (default 20s) + --heartbeat_enable If true, vttablet records (if master) or checks (if replica) the current time of a replication heartbeat in the sidecar database's heartbeat table. The result is used to inform the serving state of the vttablet via healthchecks. + --heartbeat_interval duration How frequently to read and write replication heartbeat. (default 1s) + --heartbeat_on_demand_duration duration If non-zero, heartbeats are only written upon consumer request, and only run for up to given duration following the request. Frequent requests can keep the heartbeat running consistently; when requests are infrequent heartbeat may completely stop between requests + -h, --help help for vttablet + --hot_row_protection_concurrent_transactions int Number of concurrent transactions let through to the txpool/MySQL for the same hot row. Should be > 1 to have enough 'ready' transactions in MySQL and benefit from a pipelining effect. (default 5) + --hot_row_protection_max_global_queue_size int Global queue limit across all row (ranges). Useful to prevent that the queue can grow unbounded. (default 1000) + --hot_row_protection_max_queue_size int Maximum number of BeginExecute RPCs which will be queued for the same row (range). (default 20) + --init_db_name_override string (init parameter) override the name of the db used by vttablet. Without this flag, the db name defaults to vt_ + --init_keyspace string (init parameter) keyspace to use for this tablet + --init_shard string (init parameter) shard to use for this tablet + --init_tablet_type string (init parameter) the tablet type to use for this tablet. + --init_tags StringMap (init parameter) comma separated list of key:value pairs used to tag the tablet + --init_timeout duration (init parameter) timeout to use for the init phase. (default 1m0s) + --jaeger-agent-host string host and port to send spans to. if empty, no tracing will be done + --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --lameduck-period duration keep running at least this long after SIGTERM before stopping (default 50ms) + --lock-timeout duration Maximum time for which a shard/keyspace lock can be acquired for (default 45s) + --lock_tables_timeout duration How long to keep the table locked before timing out (default 1m0s) + --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace + --log_dir string If non-empty, write log files in this directory + --log_err_stacks log stack traces for errors + --log_queries Enable query logging to syslog. + --log_queries_to_file string Enable query logging to the specified file + --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) + --logtostderr log to standard error instead of files + --manifest-external-decompressor string command with arguments to store in the backup manifest when compressing a backup with an external compression engine. + --max-stack-size int configure the maximum stack size in bytes (default 67108864) + --max_concurrent_online_ddl int Maximum number of online DDL changes that may run concurrently (default 256) + --migration_check_interval duration Interval between migration checks (default 1m0s) + --mycnf-file string path to my.cnf, if reading all config params from there + --mycnf_bin_log_path string mysql binlog path + --mycnf_data_dir string data directory for mysql + --mycnf_error_log_path string mysql error log path + --mycnf_general_log_path string mysql general log path + --mycnf_innodb_data_home_dir string Innodb data home directory + --mycnf_innodb_log_group_home_dir string Innodb log group home directory + --mycnf_master_info_file string mysql master.info file + --mycnf_mysql_port int port mysql is listening on + --mycnf_pid_file string mysql pid file + --mycnf_relay_log_index_path string mysql relay log index path + --mycnf_relay_log_info_path string mysql relay log info path + --mycnf_relay_log_path string mysql relay log path + --mycnf_secure_file_priv string mysql path for loading secure files + --mycnf_server_id int mysql server id of the server (if specified, mycnf-file will be ignored) + --mycnf_slow_log_path string mysql slow query log path + --mycnf_socket_file string mysql socket file + --mycnf_tmp_dir string mysql tmp directory + --mysql-shutdown-timeout duration timeout to use when MySQL is being shut down. (default 5m0s) + --mysql_server_version string MySQL server version to advertise. (default "8.0.30-Vitess") + --mysqlctl_mycnf_template string template file to use for generating the my.cnf file during server init + --mysqlctl_socket string socket file to use for remote mysqlctl actions (empty for local actions) + --onclose_timeout duration wait no more than this for OnClose handlers before stopping (default 10s) + --onterm_timeout duration wait no more than this for OnTermSync handlers before stopping (default 10s) + --opentsdb_uri string URI of opentsdb /api/put method + --pid_file string If set, the process will write its pid to the named file, and delete it on graceful shutdown. + --pitr_gtid_lookup_timeout duration PITR restore parameter: timeout for fetching gtid from timestamp. (default 1m0s) + --pool_hostname_resolve_interval duration if set force an update to all hostnames and reconnect if changed, defaults to 0 (disabled) + --port int port for the server + --pprof strings enable profiling + --pprof-http enable pprof http endpoints + --pt-osc-path string override default pt-online-schema-change binary full path + --publish_retry_interval duration how long vttablet waits to retry publishing the tablet record (default 30s) + --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) + --query-log-stream-handler string URL handler for streaming queries log (default "/debug/querylog") + --querylog-filter-tag string string that must be present in the query for it to be logged; if using a value as the tag, you need to disable query normalization + --querylog-format string format for query logs ("text" or "json") (default "text") + --querylog-row-threshold uint Number of rows a query has to return or affect before being logged; not useful for streaming queries. 0 means all queries will be logged. + --queryserver-config-acl-exempt-acl string an acl that exempt from table acl checking (this acl is free to access any vitess tables). + --queryserver-config-annotate-queries prefix queries to MySQL backend with comment indicating vtgate principal (user) and target tablet type + --queryserver-config-enable-table-acl-dry-run If this flag is enabled, tabletserver will emit monitoring metrics and let the request pass regardless of table acl check results + --queryserver-config-idle-timeout duration query server idle timeout, vttablet manages various mysql connection pools. This config means if a connection has not been used in given idle timeout, this connection will be removed from pool. This effectively manages number of connection objects and optimize the pool performance. (default 30m0s) + --queryserver-config-max-result-size int query server max result size, maximum number of rows allowed to return from vttablet for non-streaming queries. (default 10000) + --queryserver-config-message-postpone-cap int query server message postpone cap is the maximum number of messages that can be postponed at any given time. Set this number to substantially lower than transaction cap, so that the transaction pool isn't exhausted by the message subsystem. (default 4) + --queryserver-config-olap-transaction-timeout duration query server transaction timeout (in seconds), after which a transaction in an OLAP session will be killed (default 30s) + --queryserver-config-passthrough-dmls query server pass through all dml statements without rewriting + --queryserver-config-pool-conn-max-lifetime duration query server connection max lifetime, vttablet manages various mysql connection pools. This config means if a connection has lived at least this long, it connection will be removed from pool upon the next time it is returned to the pool. + --queryserver-config-pool-size int query server read pool size, connection pool is used by regular queries (non streaming, not in a transaction) (default 16) + --queryserver-config-query-cache-memory int query server query cache size in bytes, maximum amount of memory to be used for caching. vttablet analyzes every incoming query and generate a query plan, these plans are being cached in a lru cache. This config controls the capacity of the lru cache. (default 33554432) + --queryserver-config-query-pool-timeout duration query server query pool timeout, it is how long vttablet waits for a connection from the query pool. If set to 0 (default) then the overall query timeout is used instead. + --queryserver-config-query-timeout duration query server query timeout, this is the query timeout in vttablet side. If a query takes more than this timeout, it will be killed. (default 30s) + --queryserver-config-schema-change-signal query server schema signal, will signal connected vtgates that schema has changed whenever this is detected. VTGates will need to have -schema_change_signal enabled for this to work (default true) + --queryserver-config-schema-reload-time duration query server schema reload time, how often vttablet reloads schemas from underlying MySQL instance. vttablet keeps table schemas in its own memory and periodically refreshes it from MySQL. This config controls the reload time. (default 30m0s) + --queryserver-config-stream-buffer-size int query server stream buffer size, the maximum number of bytes sent from vttablet for each stream call. It's recommended to keep this value in sync with vtgate's stream_buffer_size. (default 32768) + --queryserver-config-stream-pool-size int query server stream connection pool size, stream pool is used by stream queries: queries that return results to client in a streaming fashion (default 200) + --queryserver-config-stream-pool-timeout duration query server stream pool timeout, it is how long vttablet waits for a connection from the stream pool. If set to 0 (default) then there is no timeout. + --queryserver-config-strict-table-acl only allow queries that pass table acl checks + --queryserver-config-terse-errors prevent bind vars from escaping in client error messages + --queryserver-config-transaction-cap int query server transaction cap is the maximum number of transactions allowed to happen at any given point of a time for a single vttablet. E.g. by setting transaction cap to 100, there are at most 100 transactions will be processed by a vttablet and the 101th transaction will be blocked (and fail if it cannot get connection within specified timeout) (default 20) + --queryserver-config-transaction-timeout duration query server transaction timeout, a transaction will be killed if it takes longer than this value (default 30s) + --queryserver-config-truncate-error-len int truncate errors sent to client if they are longer than this value (0 means do not truncate) + --queryserver-config-txpool-timeout duration query server transaction pool timeout, it is how long vttablet waits if tx pool is full (default 1s) + --queryserver-config-warn-result-size int query server result size warning threshold, warn if number of rows returned from vttablet for non-streaming queries exceeds this + --queryserver-enable-settings-pool Enable pooling of connections with modified system settings (default true) + --queryserver-enable-views Enable views support in vttablet. + --queryserver_enable_online_ddl Enable online DDL. (default true) + --redact-debug-ui-queries redact full queries and bind variables from debug UI + --relay_log_max_items int Maximum number of rows for VReplication target buffering. (default 5000) + --relay_log_max_size int Maximum buffer size (in bytes) for VReplication target buffering. If single rows are larger than this, a single row is buffered at a time. (default 250000) + --remote_operation_timeout duration time to wait for a remote operation (default 15s) + --replication_connect_retry duration how long to wait in between replica reconnect attempts. Only precise to the second. (default 10s) + --restore-to-pos string (init incremental restore parameter) if set, run a point in time recovery that ends with the given position. This will attempt to use one full backup followed by zero or more incremental backups + --restore-to-timestamp string (init incremental restore parameter) if set, run a point in time recovery that restores up to the given timestamp, if possible. Given timestamp in RFC3339 format. Example: '2006-01-02T15:04:05Z07:00' + --restore_concurrency int (init restore parameter) how many concurrent files to restore at once (default 4) + --restore_from_backup (init restore parameter) will check BackupStorage for a recent backup at startup and start there + --restore_from_backup_ts string (init restore parameter) if set, restore the latest backup taken at or before this timestamp. Example: '2021-04-29.133050' + --retain_online_ddl_tables duration How long should vttablet keep an old migrated table before purging it (default 24h0m0s) + --s3_backup_aws_endpoint string endpoint of the S3 backend (region must be provided). + --s3_backup_aws_region string AWS region to use. (default "us-east-1") + --s3_backup_aws_retries int AWS request retries. (default -1) + --s3_backup_force_path_style force the s3 path style. + --s3_backup_log_level string determine the S3 loglevel to use from LogOff, LogDebug, LogDebugWithSigning, LogDebugWithHTTPBody, LogDebugWithRequestRetries, LogDebugWithRequestErrors. (default "LogOff") + --s3_backup_server_side_encryption string server-side encryption algorithm (e.g., AES256, aws:kms, sse_c:/path/to/key/file). + --s3_backup_storage_bucket string S3 bucket to use for backups. + --s3_backup_storage_root string root prefix for all backup-related object names. + --s3_backup_tls_skip_verify_cert skip the 'certificate is valid' check for SSL connections. + --sanitize_log_messages Remove potentially sensitive information in tablet INFO, WARNING, and ERROR log messages such as query parameters. + --schema-change-reload-timeout duration query server schema change reload timeout, this is how long to wait for the signaled schema reload operation to complete before giving up (default 30s) + --schema-version-max-age-seconds int max age of schema version records to kept in memory by the vreplication historian + --security_policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) + --service_map strings comma separated list of services to enable (or disable if prefixed with '-') Example: grpc-queryservice + --serving_state_grace_period duration how long to pause after broadcasting health to vtgate, before enforcing a new serving state + --shard_sync_retry_delay duration delay between retries of updates to keep the tablet and its shard record in sync (default 30s) + --shutdown_grace_period duration how long to wait for queries and transactions to complete during graceful shutdown. (default 3s) + --sql-max-length-errors int truncate queries in error logs to the given length (default unlimited) + --sql-max-length-ui int truncate queries in debug UIs to the given length (default 512) (default 512) + --srv_topo_cache_refresh duration how frequently to refresh the topology for cached entries (default 1s) + --srv_topo_cache_ttl duration how long to use cached entries for topology (default 1s) + --srv_topo_timeout duration topo server timeout (default 5s) + --stats_backend string The name of the registered push-based monitoring/stats backend to use + --stats_combine_dimensions string List of dimensions to be combined into a single "all" value in exported stats vars + --stats_common_tags strings Comma-separated list of common tags for the stats backend. It provides both label and values. Example: label1:value1,label2:value2 + --stats_drop_variables string Variables to be dropped from the list of exported variables. + --stats_emit_period duration Interval between emitting stats to all registered backends (default 1m0s) + --statsd_address string Address for statsd client + --statsd_sample_rate float Sample rate for statsd metrics (default 1) + --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) + --stream_health_buffer_size uint max streaming health entries to buffer per streaming health client (default 20) + --table-acl-config string path to table access checker config file; send SIGHUP to reload this file + --table-acl-config-reload-interval duration Ticker to reload ACLs. Duration flag, format e.g.: 30s. Default: do not reload + --table-refresh-interval int interval in milliseconds to refresh tables in status page with refreshRequired class + --table_gc_lifecycle string States for a DROP TABLE garbage collection cycle. Default is 'hold,purge,evac,drop', use any subset ('drop' implicitly always included) (default "hold,purge,evac,drop") + --tablet-path string tablet alias + --tablet_config string YAML file config for tablet + --tablet_dir string The directory within the vtdataroot to store vttablet/mysql files. Defaults to being generated by the tablet uid. + --tablet_grpc_ca string the server ca to use to validate servers when connecting + --tablet_grpc_cert string the cert to use to connect + --tablet_grpc_crl string the server crl to use to validate server certificates when connecting + --tablet_grpc_key string the key to use to connect + --tablet_grpc_server_name string the server name to use to validate server certificate + --tablet_hostname string if not empty, this hostname will be assumed instead of trying to resolve it + --tablet_manager_grpc_ca string the server ca to use to validate servers when connecting + --tablet_manager_grpc_cert string the cert to use to connect + --tablet_manager_grpc_concurrency int concurrency to use to talk to a vttablet server for performance-sensitive RPCs (like ExecuteFetchAs{Dba,App}, CheckThrottler and FullStatus) (default 8) + --tablet_manager_grpc_connpool_size int number of tablets to keep tmclient connections open to (default 100) + --tablet_manager_grpc_crl string the server crl to use to validate server certificates when connecting + --tablet_manager_grpc_key string the key to use to connect + --tablet_manager_grpc_server_name string the server name to use to validate server certificate + --tablet_manager_protocol string Protocol to use to make tabletmanager RPCs to vttablets. (default "grpc") + --tablet_protocol string Protocol to use to make queryservice RPCs to vttablets. (default "grpc") + --throttle_tablet_types string Comma separated VTTablet types to be considered by the throttler. default: 'replica'. example: 'replica,rdonly'. 'replica' always implicitly included (default "replica") + --topo_consul_lock_delay duration LockDelay for consul session. (default 15s) + --topo_consul_lock_session_checks string List of checks for consul session. (default "serfHealth") + --topo_consul_lock_session_ttl string TTL for consul session. + --topo_consul_watch_poll_duration duration time of the long poll for watch queries. (default 30s) + --topo_etcd_lease_ttl int Lease TTL for locks and leader election. The client will use KeepAlive to keep the lease going. (default 30) + --topo_etcd_tls_ca string path to the ca to use to validate the server cert when connecting to the etcd topo server + --topo_etcd_tls_cert string path to the client cert to use to connect to the etcd topo server, requires topo_etcd_tls_key, enables TLS + --topo_etcd_tls_key string path to the client key to use to connect to the etcd topo server, enables TLS + --topo_global_root string the path of the global topology data in the global topology server + --topo_global_server_address string the address of the global topology server + --topo_implementation string the topology implementation to use + --topo_zk_auth_file string auth to use when connecting to the zk topo server, file contents should be :, e.g., digest:user:pass + --topo_zk_base_timeout duration zk base timeout (see zk.Connect) (default 30s) + --topo_zk_max_concurrency int maximum number of pending requests to send to a Zookeeper server. (default 64) + --topo_zk_tls_ca string the server ca to use to validate servers when connecting to the zk topo server + --topo_zk_tls_cert string the cert to use to connect to the zk topo server, requires topo_zk_tls_key, enables TLS + --topo_zk_tls_key string the key to use to connect to the zk topo server, enables TLS + --topocustomrule_cell string topo cell for customrules file. (default "global") + --topocustomrule_path string path for customrules file. Disabled if empty. + --tracer string tracing service to use (default "noop") + --tracing-enable-logging whether to enable logging in the tracing service + --tracing-sampling-rate float sampling rate for the probabilistic jaeger sampler (default 0.1) + --tracing-sampling-type string sampling strategy to use for jaeger. possible values are 'const', 'probabilistic', 'rateLimiting', or 'remote' (default "const") + --track_schema_versions When enabled, vttablet will store versions of schemas at each position that a DDL is applied and allow retrieval of the schema corresponding to a position + --transaction-log-stream-handler string URL handler for streaming transactions log (default "/debug/txlog") + --transaction_limit_by_component Include CallerID.component when considering who the user is for the purpose of transaction limit. + --transaction_limit_by_principal Include CallerID.principal when considering who the user is for the purpose of transaction limit. (default true) + --transaction_limit_by_subcomponent Include CallerID.subcomponent when considering who the user is for the purpose of transaction limit. + --transaction_limit_by_username Include VTGateCallerID.username when considering who the user is for the purpose of transaction limit. (default true) + --transaction_limit_per_user float Maximum number of transactions a single user is allowed to use at any time, represented as fraction of -transaction_cap. (default 0.4) + --twopc_abandon_age float time in seconds. Any unresolved transaction older than this time will be sent to the coordinator to be resolved. + --twopc_coordinator_address string address of the (VTGate) process(es) that will be used to notify of abandoned transactions. + --twopc_enable if the flag is on, 2pc is enabled. Other 2pc flags must be supplied. + --tx-throttler-config string Synonym to -tx_throttler_config (default "target_replication_lag_sec:2 max_replication_lag_sec:10 initial_rate:100 max_increase:1 emergency_decrease:0.5 min_duration_between_increases_sec:40 max_duration_between_increases_sec:62 min_duration_between_decreases_sec:20 spread_backlog_across_sec:20 age_bad_rate_after_sec:180 bad_rate_increase:0.1 max_rate_approach_threshold:0.9") + --tx-throttler-default-priority int Default priority assigned to queries that lack priority information (default 100) + --tx-throttler-dry-run If present, the transaction throttler only records metrics about requests received and throttled, but does not actually throttle any requests. + --tx-throttler-healthcheck-cells strings Synonym to -tx_throttler_healthcheck_cells + --tx-throttler-tablet-types strings A comma-separated list of tablet types. Only tablets of this type are monitored for replication lag by the transaction throttler. Supported types are replica and/or rdonly. (default replica) + --tx-throttler-topo-refresh-interval duration The rate that the transaction throttler will refresh the topology to find cells. (default 5m0s) + --tx_throttler_config string The configuration of the transaction throttler as a text-formatted throttlerdata.Configuration protocol buffer message. (default "target_replication_lag_sec:2 max_replication_lag_sec:10 initial_rate:100 max_increase:1 emergency_decrease:0.5 min_duration_between_increases_sec:40 max_duration_between_increases_sec:62 min_duration_between_decreases_sec:20 spread_backlog_across_sec:20 age_bad_rate_after_sec:180 bad_rate_increase:0.1 max_rate_approach_threshold:0.9") + --tx_throttler_healthcheck_cells strings A comma-separated list of cells. Only tabletservers running in these cells will be monitored for replication lag by the transaction throttler. + --unhealthy_threshold duration replication lag after which a replica is considered unhealthy (default 2h0m0s) + --unmanaged Indicates an unmanaged tablet, i.e. using an external mysql-compatible database + --v Level log level for V logs + -v, --version print binary version + --vmodule vModuleFlag comma-separated list of pattern=N settings for file-filtered logging + --vreplication-parallel-insert-workers int Number of parallel insertion workers to use during copy phase. Set <= 1 to disable parallelism, or > 1 to enable concurrent insertion during copy phase. (default 1) + --vreplication_copy_phase_duration duration Duration for each copy phase loop (before running the next catchup: default 1h) (default 1h0m0s) + --vreplication_copy_phase_max_innodb_history_list_length int The maximum InnoDB transaction history that can exist on a vstreamer (source) before starting another round of copying rows. This helps to limit the impact on the source tablet. (default 1000000) + --vreplication_copy_phase_max_mysql_replication_lag int The maximum MySQL replication lag (in seconds) that can exist on a vstreamer (source) before starting another round of copying rows. This helps to limit the impact on the source tablet. (default 43200) + --vreplication_experimental_flags int (Bitmask) of experimental features in vreplication to enable (default 3) + --vreplication_heartbeat_update_interval int Frequency (in seconds, default 1, max 60) at which the time_updated column of a vreplication stream when idling (default 1) + --vreplication_max_time_to_retry_on_error duration stop automatically retrying when we've had consecutive failures with the same error for this long after the first occurrence + --vreplication_net_read_timeout int Session value of net_read_timeout for vreplication, in seconds (default 300) + --vreplication_net_write_timeout int Session value of net_write_timeout for vreplication, in seconds (default 600) + --vreplication_replica_lag_tolerance duration Replica lag threshold duration: once lag is below this we switch from copy phase to the replication (streaming) phase (default 1m0s) + --vreplication_retry_delay duration delay before retrying a failed workflow event in the replication phase (default 5s) + --vreplication_store_compressed_gtid Store compressed gtids in the pos column of the sidecar database's vreplication table + --vstream-binlog-rotation-threshold int Byte size at which a VStreamer will attempt to rotate the source's open binary log before starting a GTID snapshot based stream (e.g. a ResultStreamer or RowStreamer) (default 67108864) + --vstream_dynamic_packet_size Enable dynamic packet sizing for VReplication. This will adjust the packet size during replication to improve performance. (default true) + --vstream_packet_size int Suggested packet size for VReplication streamer. This is used only as a recommendation. The actual packet size may be more or less than this amount. (default 250000) + --vtgate_protocol string how to talk to vtgate (default "grpc") + --vttablet_skip_buildinfo_tags string comma-separated list of buildinfo tags to skip from merging with --init_tags. each tag is either an exact match or a regular expression of the form '/regexp/'. (default "/.*/") + --wait_for_backup_interval duration (init restore parameter) if this is greater than 0, instead of starting up empty when no backups are found, keep checking at this interval for a backup to appear + --watch_replication_stream When enabled, vttablet will stream the MySQL replication stream from the local server, and use it to update schema when it sees a DDL. + --xbstream_restore_flags string Flags to pass to xbstream command during restore. These should be space separated and will be added to the end of the command. These need to match the ones used for backup e.g. --compress / --decompress, --encrypt / --decrypt + --xtrabackup_backup_flags string Flags to pass to backup command. These should be space separated and will be added to the end of the command + --xtrabackup_prepare_flags string Flags to pass to prepare command. These should be space separated and will be added to the end of the command + --xtrabackup_root_path string Directory location of the xtrabackup and xbstream executables, e.g., /usr/bin + --xtrabackup_stream_mode string Which mode to use if streaming, valid values are tar and xbstream. Please note that tar is not supported in XtraBackup 8.0 (default "tar") + --xtrabackup_stripe_block_size uint Size in bytes of each block that gets sent to a given stripe before rotating to the next stripe (default 102400) + --xtrabackup_stripes uint If greater than 0, use data striping across this many destination files to parallelize data transfer and decompression + --xtrabackup_user string User that xtrabackup will use to connect to the database server. This user must have all necessary privileges. For details, please refer to xtrabackup documentation. +``` + diff --git a/content/en/docs/21.0/reference/programs/vttestserver/_index.md b/content/en/docs/21.0/reference/programs/vttestserver/_index.md new file mode 100644 index 000000000..183ef0606 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vttestserver/_index.md @@ -0,0 +1,178 @@ +--- +title: vttestserver +series: vttestserver +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## vttestserver + +vttestserver allows users to spawn a self-contained Vitess server for local testing/CI. + +``` +vttestserver [flags] +``` + +### Options + +``` + --alsologtostderr log to standard error as well as files + --app_idle_timeout duration Idle timeout for app connections (default 1m0s) + --app_pool_size int Size of the connection pool for app connections (default 40) + --backup_engine_implementation string Specifies which implementation to use for creating new backups (builtin or xtrabackup). Restores will always be done with whichever engine created a given backup. (default "builtin") + --backup_storage_block_size int if backup_storage_compress is true, backup_storage_block_size sets the byte size for each block while compressing (default is 250000). (default 250000) + --backup_storage_compress if set, the backup files will be compressed. (default true) + --backup_storage_number_blocks int if backup_storage_compress is true, backup_storage_number_blocks sets the number of blocks that can be processed, in parallel, before the writer blocks, during compression (default is 2). It should be equal to the number of CPUs available for compression. (default 2) + --builtinbackup-file-read-buffer-size uint read files using an IO buffer of this many bytes. Golang defaults are used when set to 0. + --builtinbackup-file-write-buffer-size uint write files using an IO buffer of this many bytes. Golang defaults are used when set to 0. (default 2097152) + --builtinbackup-incremental-restore-path string the directory where incremental restore files, namely binlog files, are extracted to. In k8s environments, this should be set to a directory that is shared between the vttablet and mysqld pods. The path should exist. When empty, the default OS temp dir is assumed. + --builtinbackup_mysqld_timeout duration how long to wait for mysqld to shutdown at the start of the backup. (default 10m0s) + --builtinbackup_progress duration how often to send progress updates when backing up large files. (default 5s) + --catch-sigpipe catch and ignore SIGPIPE on stdout and stderr if specified + --cells strings Comma separated list of cells (default [test]) + --charset string MySQL charset (default "utf8mb4") + --compression-engine-name string compressor engine used for compression. (default "pargzip") + --compression-level int what level to pass to the compressor. (default 1) + --config-file string Full path of the config file (with extension) to use. If set, --config-path, --config-type, and --config-name are ignored. + --config-file-not-found-handling ConfigFileNotFoundHandling Behavior when a config file is not found. (Options: error, exit, ignore, warn) (default warn) + --config-name string Name of the config file (without extension) to search for. (default "vtconfig") + --config-path strings Paths to search for config files in. (default []) + --config-persistence-min-interval duration minimum interval between persisting dynamic config changes back to disk (if no change has occurred, nothing is done). (default 1s) + --config-type string Config file type (omit to infer config type from file extension). + --consul_auth_static_file string JSON File to read the topos/tokens from. + --data_dir string Directory where the data files will be placed, defaults to a random directory under /vt/vtdataroot + --dba_idle_timeout duration Idle timeout for dba connections (default 1m0s) + --dba_pool_size int Size of the connection pool for dba connections (default 20) + --default_schema_dir string Default directory for initial schema files. If no schema is found in schema_dir, default to this location. + --enable_direct_ddl Allow users to submit direct DDL statements (default true) + --enable_online_ddl Allow users to submit, review and control Online DDL (default true) + --enable_system_settings This will enable the system settings to be changed per session at the database connection level (default true) + --external-compressor string command with arguments to use when compressing a backup. + --external-compressor-extension string extension to use when using an external compressor. + --external-decompressor string command with arguments to use when decompressing a backup. + --external_topo_global_root string the path of the global topology data in the global topology server for vtcombo process + --external_topo_global_server_address string the address of the global topology server for vtcombo process + --external_topo_implementation string the topology implementation to use for vtcombo process + --extra_my_cnf string extra files to add to the config, separated by ':' + --foreign_key_mode string This is to provide how to handle foreign key constraint in create/alter table. Valid values are: allow, disallow (default "allow") + --grpc_auth_mode string Which auth plugin implementation to use (eg: static) + --grpc_auth_mtls_allowed_substrings string List of substrings of at least one of the client certificate names (separated by colon). + --grpc_auth_static_client_creds string When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server. + --grpc_auth_static_password_file string JSON File to read the users/passwords from. + --grpc_bind_address string Bind address for gRPC calls. If empty, listen on all addresses. + --grpc_ca string server CA to use for gRPC connections, requires TLS, and enforces client certificate check + --grpc_cert string server certificate to use for gRPC connections, requires grpc_key, enables TLS + --grpc_compression string Which protocol to use for compressing gRPC. Default: nothing. Supported: snappy + --grpc_crl string path to a certificate revocation list in PEM format, client certificates will be further verified against this file during TLS handshake + --grpc_enable_optional_tls enable optional TLS mode when a server accepts both TLS and plain-text connections on the same port + --grpc_enable_tracing Enable gRPC tracing. + --grpc_initial_conn_window_size int gRPC initial connection window size + --grpc_initial_window_size int gRPC initial window size + --grpc_keepalive_time duration After a duration of this time, if the client doesn't see any activity, it pings the server to see if the transport is still alive. (default 10s) + --grpc_keepalive_timeout duration After having pinged for keepalive check, the client waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) + --grpc_key string server private key to use for gRPC connections, requires grpc_cert, enables TLS + --grpc_max_connection_age duration Maximum age of a client connection before GoAway is sent. (default 2562047h47m16.854775807s) + --grpc_max_connection_age_grace duration Additional grace period after grpc_max_connection_age, after which connections are forcibly closed. (default 2562047h47m16.854775807s) + --grpc_max_message_size int Maximum allowed RPC message size. Larger messages will be rejected by gRPC with the error 'exceeding the max size'. (default 16777216) + --grpc_port int Port to listen on for gRPC calls. If zero, do not listen. + --grpc_prometheus Enable gRPC monitoring with Prometheus. + --grpc_server_ca string path to server CA in PEM format, which will be combine with server cert, return full certificate chain to clients + --grpc_server_initial_conn_window_size int gRPC server initial connection window size + --grpc_server_initial_window_size int gRPC server initial window size + --grpc_server_keepalive_enforcement_policy_min_time duration gRPC server minimum keepalive time (default 10s) + --grpc_server_keepalive_enforcement_policy_permit_without_stream gRPC server permit client keepalive pings even when there are no active streams (RPCs) + --grpc_server_keepalive_time duration After a duration of this time, if the server doesn't see any activity, it pings the client to see if the transport is still alive. (default 10s) + --grpc_server_keepalive_timeout duration After having pinged for keepalive check, the server waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s) + -h, --help help for vttestserver + --initialize-with-vt-dba-tcp If this flag is enabled, MySQL will be initialized with an additional user named vt_dba_tcp, who will have access via TCP/IP connection. + --initialize_with_random_data If this flag is each table-shard will be initialized with random data. See also the 'rng_seed' and 'min_shard_size' and 'max_shard_size' flags. + --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --keyspaces strings Comma separated list of keyspaces (default [test_keyspace]) + --lameduck-period duration keep running at least this long after SIGTERM before stopping (default 50ms) + --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace + --log_dir string If non-empty, write log files in this directory + --log_err_stacks log stack traces for errors + --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) + --logtostderr log to standard error instead of files + --manifest-external-decompressor string command with arguments to store in the backup manifest when compressing a backup with an external compression engine. + --max-stack-size int configure the maximum stack size in bytes (default 67108864) + --max_table_shard_size int The maximum number of initial rows in a table shard. Ignored if--initialize_with_random_data is false. The actual number is chosen randomly (default 10000) + --min_table_shard_size int The minimum number of initial rows in a table shard. Ignored if--initialize_with_random_data is false. The actual number is chosen randomly. (default 1000) + --mysql_bind_host string which host to bind vtgate mysql listener to (default "localhost") + --mysql_only If this flag is set only mysql is initialized. The rest of the vitess components are not started. Also, the output specifies the mysql unix socket instead of the vtgate port. + --mysql_server_version string MySQL server version to advertise. (default "8.0.30-Vitess") + --mysqlctl_mycnf_template string template file to use for generating the my.cnf file during server init + --mysqlctl_socket string socket file to use for remote mysqlctl actions (empty for local actions) + --null_probability float The probability to initialize a field with 'NULL' if --initialize_with_random_data is true. Only applies to fields that can contain NULL values. (default 0.1) + --num_shards strings Comma separated shard count (one per keyspace) (default [2]) + --onclose_timeout duration wait no more than this for OnClose handlers before stopping (default 10s) + --onterm_timeout duration wait no more than this for OnTermSync handlers before stopping (default 10s) + --persistent_mode If this flag is set, the MySQL data directory is not cleaned up when LocalCluster.TearDown() is called. This is useful for running vttestserver as a database container in local developer environments. Note that db migration files (--schema_dir option) and seeding of random data (--initialize_with_random_data option) will only run during cluster startup if the data directory does not already exist. Changes to VSchema are persisted across cluster restarts using a simple watcher if the --data_dir argument is specified. + --pid_file string If set, the process will write its pid to the named file, and delete it on graceful shutdown. + --planner-version string Sets the default planner to use when the session has not changed it. Valid values are: Gen4, Gen4Greedy, Gen4Left2Right + --pool_hostname_resolve_interval duration if set force an update to all hostnames and reconnect if changed, defaults to 0 (disabled) + --port int Port to use for vtcombo. If this is 0, a random port will be chosen. + --pprof strings enable profiling + --pprof-http enable pprof http endpoints + --proto_topo string Define the fake cluster topology as a compact text format encoded vttest proto. See vttest.proto for more information. + --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) + --queryserver-config-transaction-timeout float query server transaction timeout (in seconds), a transaction will be killed if it takes longer than this value + --rdonly_count int Rdonly tablets per shard (default 1) + --replica_count int Replica tablets per shard (includes primary) (default 2) + --replication_connect_retry duration how long to wait in between replica reconnect attempts. Only precise to the second. (default 10s) + --rng_seed int The random number generator seed to use when initializing with random data (see also --initialize_with_random_data). Multiple runs with the same seed will result with the same initial data. (default 123) + --schema_dir string Directory for initial schema files. Within this dir, there should be a subdir for each keyspace. Within each keyspace dir, each file is executed as SQL after the database is created on each shard. If the directory contains a vschema.json file, it will be used as the vschema for the V3 API. + --security_policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) + --service_map strings comma separated list of services to enable (or disable if prefixed with '-') Example: grpc-queryservice + --snapshot_file string A MySQL DB snapshot file + --sql-max-length-errors int truncate queries in error logs to the given length (default unlimited) + --sql-max-length-ui int truncate queries in debug UIs to the given length (default 512) (default 512) + --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) + --table-refresh-interval int interval in milliseconds to refresh tables in status page with refreshRequired class + --tablet_dir string The directory within the vtdataroot to store vttablet/mysql files. Defaults to being generated by the tablet uid. + --tablet_hostname string The hostname to use for the tablet otherwise it will be derived from OS' hostname (default "localhost") + --tablet_manager_grpc_ca string the server ca to use to validate servers when connecting + --tablet_manager_grpc_cert string the cert to use to connect + --tablet_manager_grpc_concurrency int concurrency to use to talk to a vttablet server for performance-sensitive RPCs (like ExecuteFetchAs{Dba,App}, CheckThrottler and FullStatus) (default 8) + --tablet_manager_grpc_connpool_size int number of tablets to keep tmclient connections open to (default 100) + --tablet_manager_grpc_crl string the server crl to use to validate server certificates when connecting + --tablet_manager_grpc_key string the key to use to connect + --tablet_manager_grpc_server_name string the server name to use to validate server certificate + --tablet_manager_protocol string Protocol to use to make tabletmanager RPCs to vttablets. (default "grpc") + --tablet_refresh_interval duration Interval at which vtgate refreshes tablet information from topology server. (default 10s) + --topo_consul_lock_delay duration LockDelay for consul session. (default 15s) + --topo_consul_lock_session_checks string List of checks for consul session. (default "serfHealth") + --topo_consul_lock_session_ttl string TTL for consul session. + --topo_consul_watch_poll_duration duration time of the long poll for watch queries. (default 30s) + --topo_zk_auth_file string auth to use when connecting to the zk topo server, file contents should be :, e.g., digest:user:pass + --topo_zk_base_timeout duration zk base timeout (see zk.Connect) (default 30s) + --topo_zk_max_concurrency int maximum number of pending requests to send to a Zookeeper server. (default 64) + --topo_zk_tls_ca string the server ca to use to validate servers when connecting to the zk topo server + --topo_zk_tls_cert string the cert to use to connect to the zk topo server, requires topo_zk_tls_key, enables TLS + --topo_zk_tls_key string the key to use to connect to the zk topo server, enables TLS + --transaction_mode string Transaction mode MULTI (default), SINGLE or TWOPC (default "MULTI") + --v Level log level for V logs + -v, --version print binary version + --vmodule vModuleFlag comma-separated list of pattern=N settings for file-filtered logging + --vschema_ddl_authorized_users string Comma separated list of users authorized to execute vschema ddl operations via vtgate + --vtcombo-bind-host string which host to bind vtcombo servenv listener to (default "localhost") + --vtctl_client_protocol string Protocol to use to talk to the vtctl server. (default "grpc") + --vtctld_grpc_ca string the server ca to use to validate servers when connecting + --vtctld_grpc_cert string the cert to use to connect + --vtctld_grpc_crl string the server crl to use to validate server certificates when connecting + --vtctld_grpc_key string the key to use to connect + --vtctld_grpc_server_name string the server name to use to validate server certificate + --vtgate_grpc_ca string the server ca to use to validate servers when connecting + --vtgate_grpc_cert string the cert to use to connect + --vtgate_grpc_crl string the server crl to use to validate server certificates when connecting + --vtgate_grpc_key string the key to use to connect + --vtgate_grpc_server_name string the server name to use to validate server certificate + --xbstream_restore_flags string Flags to pass to xbstream command during restore. These should be space separated and will be added to the end of the command. These need to match the ones used for backup e.g. --compress / --decompress, --encrypt / --decrypt + --xtrabackup_backup_flags string Flags to pass to backup command. These should be space separated and will be added to the end of the command + --xtrabackup_prepare_flags string Flags to pass to prepare command. These should be space separated and will be added to the end of the command + --xtrabackup_root_path string Directory location of the xtrabackup and xbstream executables, e.g., /usr/bin + --xtrabackup_stream_mode string Which mode to use if streaming, valid values are tar and xbstream. Please note that tar is not supported in XtraBackup 8.0 (default "tar") + --xtrabackup_stripe_block_size uint Size in bytes of each block that gets sent to a given stripe before rotating to the next stripe (default 102400) + --xtrabackup_stripes uint If greater than 0, use data striping across this many destination files to parallelize data transfer and decompression + --xtrabackup_user string User that xtrabackup will use to connect to the database server. This user must have all necessary privileges. For details, please refer to xtrabackup documentation. +``` + diff --git a/content/en/docs/21.0/reference/programs/vttlstest/_index.md b/content/en/docs/21.0/reference/programs/vttlstest/_index.md new file mode 100644 index 000000000..197d1bdd1 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vttlstest/_index.md @@ -0,0 +1,28 @@ +--- +title: vttlstest +series: vttlstest +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## vttlstest + +vttlstest is a tool for generating test certificates, keys, and related artifacts for TLS tests. + +### Synopsis + +vttlstest is a tool for generating test certificates, keys, and related artifacts for TLS tests. + +### Options + +``` + -h, --help help for vttlstest + --root string root directory for all artifacts (default ".") +``` + +### SEE ALSO + +* [vttlstest CreateCA](./vttlstest_createca/) - Create certificate authority +* [vttlstest CreateCRL](./vttlstest_createcrl/) - Create certificate revocation list +* [vttlstest CreateIntermediateCA](./vttlstest_createintermediateca/) - Create intermediate certificate authority +* [vttlstest CreateSignedCert](./vttlstest_createsignedcert/) - Create signed certificate +* [vttlstest RevokeCert](./vttlstest_revokecert/) - Revoke a certificate + diff --git a/content/en/docs/21.0/reference/programs/vttlstest/vttlstest_CreateCA.md b/content/en/docs/21.0/reference/programs/vttlstest/vttlstest_CreateCA.md new file mode 100644 index 000000000..5f8edf9e2 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vttlstest/vttlstest_CreateCA.md @@ -0,0 +1,39 @@ +--- +title: CreateCA +series: vttlstest +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## vttlstest CreateCA + +Create certificate authority + +### Synopsis + +Create certificate authority + +``` +vttlstest CreateCA [--root ] +``` + +### Examples + +``` +CreateCA --root /tmp +``` + +### Options + +``` + -h, --help help for CreateCA +``` + +### Options inherited from parent commands + +``` + --root string root directory for all artifacts (default ".") +``` + +### SEE ALSO + +* [vttlstest](../) - vttlstest is a tool for generating test certificates, keys, and related artifacts for TLS tests. + diff --git a/content/en/docs/21.0/reference/programs/vttlstest/vttlstest_CreateCRL.md b/content/en/docs/21.0/reference/programs/vttlstest/vttlstest_CreateCRL.md new file mode 100644 index 000000000..de1111791 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vttlstest/vttlstest_CreateCRL.md @@ -0,0 +1,39 @@ +--- +title: CreateCRL +series: vttlstest +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## vttlstest CreateCRL + +Create certificate revocation list + +### Synopsis + +Create certificate revocation list + +``` +vttlstest CreateCRL [--root ] +``` + +### Examples + +``` +CreateCRL --root /tmp mail.mycoolsite.com +``` + +### Options + +``` + -h, --help help for CreateCRL +``` + +### Options inherited from parent commands + +``` + --root string root directory for all artifacts (default ".") +``` + +### SEE ALSO + +* [vttlstest](../) - vttlstest is a tool for generating test certificates, keys, and related artifacts for TLS tests. + diff --git a/content/en/docs/21.0/reference/programs/vttlstest/vttlstest_CreateIntermediateCA.md b/content/en/docs/21.0/reference/programs/vttlstest/vttlstest_CreateIntermediateCA.md new file mode 100644 index 000000000..4867cab99 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vttlstest/vttlstest_CreateIntermediateCA.md @@ -0,0 +1,42 @@ +--- +title: CreateIntermediateCA +series: vttlstest +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## vttlstest CreateIntermediateCA + +Create intermediate certificate authority + +### Synopsis + +Create intermediate certificate authority + +``` +vttlstest CreateIntermediateCA [--root ] [--parent ] [--serial ] [--common-name ] +``` + +### Examples + +``` +CreateIntermediateCA --root /tmp --parent ca mail.mycoolsite.com +``` + +### Options + +``` + --common-name string Common name for the certificate. If empty, uses the name. + -h, --help help for CreateIntermediateCA + --parent string Parent cert name to use. Use 'ca' for the toplevel CA. (default "ca") + --serial string Serial number for the certificate to create. Should be different for two certificates with the same parent. (default "01") +``` + +### Options inherited from parent commands + +``` + --root string root directory for all artifacts (default ".") +``` + +### SEE ALSO + +* [vttlstest](../) - vttlstest is a tool for generating test certificates, keys, and related artifacts for TLS tests. + diff --git a/content/en/docs/21.0/reference/programs/vttlstest/vttlstest_CreateSignedCert.md b/content/en/docs/21.0/reference/programs/vttlstest/vttlstest_CreateSignedCert.md new file mode 100644 index 000000000..9fdb48f59 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vttlstest/vttlstest_CreateSignedCert.md @@ -0,0 +1,42 @@ +--- +title: CreateSignedCert +series: vttlstest +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## vttlstest CreateSignedCert + +Create signed certificate + +### Synopsis + +Create signed certificate + +``` +vttlstest CreateSignedCert [--root ] [--parent ] [--serial ] [--common-name ] +``` + +### Examples + +``` +CreateSignedCert --root /tmp --common-name mail.mysite.com --parent mail.mycoolsite.com postman1 +``` + +### Options + +``` + --common-name string Common name for the certificate. If empty, uses the name. + -h, --help help for CreateSignedCert + --parent string Parent cert name to use. Use 'ca' for the toplevel CA. (default "ca") + --serial string Serial number for the certificate to create. Should be different for two certificates with the same parent. (default "01") +``` + +### Options inherited from parent commands + +``` + --root string root directory for all artifacts (default ".") +``` + +### SEE ALSO + +* [vttlstest](../) - vttlstest is a tool for generating test certificates, keys, and related artifacts for TLS tests. + diff --git a/content/en/docs/21.0/reference/programs/vttlstest/vttlstest_RevokeCert.md b/content/en/docs/21.0/reference/programs/vttlstest/vttlstest_RevokeCert.md new file mode 100644 index 000000000..de3506778 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/vttlstest/vttlstest_RevokeCert.md @@ -0,0 +1,40 @@ +--- +title: RevokeCert +series: vttlstest +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## vttlstest RevokeCert + +Revoke a certificate + +### Synopsis + +Revoke a certificate + +``` +vttlstest RevokeCert [--root ] [--parent ] +``` + +### Examples + +``` +RevokeCert --root /tmp --parent mail.mycoolsite.com postman1 +``` + +### Options + +``` + -h, --help help for RevokeCert + --parent string Parent cert name to use. Use 'ca' for the toplevel CA. (default "ca") +``` + +### Options inherited from parent commands + +``` + --root string root directory for all artifacts (default ".") +``` + +### SEE ALSO + +* [vttlstest](../) - vttlstest is a tool for generating test certificates, keys, and related artifacts for TLS tests. + diff --git a/content/en/docs/21.0/reference/programs/zk/_index.md b/content/en/docs/21.0/reference/programs/zk/_index.md new file mode 100644 index 000000000..08930727a --- /dev/null +++ b/content/en/docs/21.0/reference/programs/zk/_index.md @@ -0,0 +1,50 @@ +--- +title: zk +series: zk +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## zk + +zk is a tool for wrangling zookeeper. + +### Synopsis + +zk is a tool for wrangling zookeeper. + +It tries to mimic unix file system commands wherever possible, but +there are some slight differences in flag handling. + +The zk tool looks for the address of the cluster in /etc/zookeeper/zk_client.conf, +or the file specified in the ZK_CLIENT_CONFIG environment variable. + +The local cell may be overridden with the ZK_CLIENT_LOCAL_CELL environment +variable. + +### Options + +``` + -h, --help help for zk + --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) + --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) + --security_policy string the name of a registered security policy to use for controlling access to URLs - empty means allow all for anyone (built-in policies: deny-all, read-only) + --server string server(s) to connect to +``` + +### SEE ALSO + +* [zk addAuth](./zk_addauth/) - +* [zk cat](./zk_cat/) - +* [zk chmod](./zk_chmod/) - +* [zk cp](./zk_cp/) - +* [zk edit](./zk_edit/) - Create a local copy, edit, and write changes back to cell. +* [zk ls](./zk_ls/) - +* [zk rm](./zk_rm/) - +* [zk stat](./zk_stat/) - +* [zk touch](./zk_touch/) - Change node access time. +* [zk unzip](./zk_unzip/) - +* [zk wait](./zk_wait/) - Sets a watch on the node and then waits for an event to fire. +* [zk watch](./zk_watch/) - Watches for changes to nodes and prints events as they occur. +* [zk zip](./zk_zip/) - Store a zk tree in a zip archive. + diff --git a/content/en/docs/21.0/reference/programs/zk/zk_addAuth.md b/content/en/docs/21.0/reference/programs/zk/zk_addAuth.md new file mode 100644 index 000000000..be683dbe2 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/zk/zk_addAuth.md @@ -0,0 +1,23 @@ +--- +title: addAuth +series: zk +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## zk addAuth + + + +``` +zk addAuth [flags] +``` + +### Options + +``` + -h, --help help for addAuth +``` + +### SEE ALSO + +* [zk](../) - zk is a tool for wrangling zookeeper. + diff --git a/content/en/docs/21.0/reference/programs/zk/zk_cat.md b/content/en/docs/21.0/reference/programs/zk/zk_cat.md new file mode 100644 index 000000000..cb584698a --- /dev/null +++ b/content/en/docs/21.0/reference/programs/zk/zk_cat.md @@ -0,0 +1,35 @@ +--- +title: cat +series: zk +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## zk cat + + + +``` +zk cat [ ...] [flags] +``` + +### Examples + +``` +zk cat /zk/path + +# List filename before file data +zk cat -l /zk/path1 /zk/path2 +``` + +### Options + +``` + -p, --decodeProto decode proto files and display them as text + -f, --force no warning on nonexistent node + -h, --help help for cat + -l, --longListing long listing +``` + +### SEE ALSO + +* [zk](../) - zk is a tool for wrangling zookeeper. + diff --git a/content/en/docs/21.0/reference/programs/zk/zk_chmod.md b/content/en/docs/21.0/reference/programs/zk/zk_chmod.md new file mode 100644 index 000000000..4f0a271f5 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/zk/zk_chmod.md @@ -0,0 +1,30 @@ +--- +title: chmod +series: zk +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## zk chmod + + + +``` +zk chmod [flags] +``` + +### Examples + +``` +zk chmod n-mode /zk/path +zk chmod n+mode /zk/path +``` + +### Options + +``` + -h, --help help for chmod +``` + +### SEE ALSO + +* [zk](../) - zk is a tool for wrangling zookeeper. + diff --git a/content/en/docs/21.0/reference/programs/zk/zk_cp.md b/content/en/docs/21.0/reference/programs/zk/zk_cp.md new file mode 100644 index 000000000..4b4ed1bdc --- /dev/null +++ b/content/en/docs/21.0/reference/programs/zk/zk_cp.md @@ -0,0 +1,33 @@ +--- +title: cp +series: zk +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## zk cp + + + +``` +zk cp [flags] +``` + +### Examples + +``` +zk cp /zk/path . +zk cp ./config /zk/path/config + +# Trailing slash indicates directory +zk cp ./config /zk/path/ +``` + +### Options + +``` + -h, --help help for cp +``` + +### SEE ALSO + +* [zk](../) - zk is a tool for wrangling zookeeper. + diff --git a/content/en/docs/21.0/reference/programs/zk/zk_edit.md b/content/en/docs/21.0/reference/programs/zk/zk_edit.md new file mode 100644 index 000000000..11138213b --- /dev/null +++ b/content/en/docs/21.0/reference/programs/zk/zk_edit.md @@ -0,0 +1,24 @@ +--- +title: edit +series: zk +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## zk edit + +Create a local copy, edit, and write changes back to cell. + +``` +zk edit [flags] +``` + +### Options + +``` + -f, --force no warning on nonexistent node + -h, --help help for edit +``` + +### SEE ALSO + +* [zk](../) - zk is a tool for wrangling zookeeper. + diff --git a/content/en/docs/21.0/reference/programs/zk/zk_ls.md b/content/en/docs/21.0/reference/programs/zk/zk_ls.md new file mode 100644 index 000000000..7aaa07a4d --- /dev/null +++ b/content/en/docs/21.0/reference/programs/zk/zk_ls.md @@ -0,0 +1,40 @@ +--- +title: ls +series: zk +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## zk ls + + + +``` +zk ls [flags] +``` + +### Examples + +``` +zk ls /zk +zk ls -l /zk + +# List directory node itself) +zk ls -ld /zk + +# Recursive (expensive) +zk ls -R /zk +``` + +### Options + +``` + -d, --directorylisting list directory instead of contents + -f, --force no warning on nonexistent node + -h, --help help for ls + -l, --longlisting long listing + -R, --recursivelisting recursive listing +``` + +### SEE ALSO + +* [zk](../) - zk is a tool for wrangling zookeeper. + diff --git a/content/en/docs/21.0/reference/programs/zk/zk_rm.md b/content/en/docs/21.0/reference/programs/zk/zk_rm.md new file mode 100644 index 000000000..3ddfe8d99 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/zk/zk_rm.md @@ -0,0 +1,37 @@ +--- +title: rm +series: zk +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## zk rm + + + +``` +zk rm [flags] +``` + +### Examples + +``` +zk rm /zk/path + +# Recursive. +zk rm -R /zk/path + +# No error on nonexistent node. +zk rm -f /zk/path +``` + +### Options + +``` + -f, --force no warning on nonexistent node + -h, --help help for rm + -r, --recursivedelete recursive delete +``` + +### SEE ALSO + +* [zk](../) - zk is a tool for wrangling zookeeper. + diff --git a/content/en/docs/21.0/reference/programs/zk/zk_stat.md b/content/en/docs/21.0/reference/programs/zk/zk_stat.md new file mode 100644 index 000000000..537245076 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/zk/zk_stat.md @@ -0,0 +1,24 @@ +--- +title: stat +series: zk +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## zk stat + + + +``` +zk stat [flags] +``` + +### Options + +``` + -f, --force no warning on nonexistent node + -h, --help help for stat +``` + +### SEE ALSO + +* [zk](../) - zk is a tool for wrangling zookeeper. + diff --git a/content/en/docs/21.0/reference/programs/zk/zk_touch.md b/content/en/docs/21.0/reference/programs/zk/zk_touch.md new file mode 100644 index 000000000..bcfbee062 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/zk/zk_touch.md @@ -0,0 +1,44 @@ +--- +title: touch +series: zk +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## zk touch + +Change node access time. + +### Synopsis + +Change node access time. + +NOTE: There is no mkdir - just touch a node. +The disntinction between file and directory is not relevant in zookeeper. + +``` +zk touch [flags] +``` + +### Examples + +``` +zk touch /zk/path + +# Don't create, just touch timestamp. +zk touch -c /zk/path + +# Create all parts necessary (think mkdir -p). +zk touch -p /zk/path +``` + +### Options + +``` + -p, --createparent create parents + -h, --help help for touch + -c, --touchonly touch only - don't create +``` + +### SEE ALSO + +* [zk](../) - zk is a tool for wrangling zookeeper. + diff --git a/content/en/docs/21.0/reference/programs/zk/zk_unzip.md b/content/en/docs/21.0/reference/programs/zk/zk_unzip.md new file mode 100644 index 000000000..25fc08469 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/zk/zk_unzip.md @@ -0,0 +1,30 @@ +--- +title: unzip +series: zk +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## zk unzip + + + +``` +zk unzip [flags] +``` + +### Examples + +``` +zk unzip zktree.zip / +zk unzip zktree.zip /zk/prefix +``` + +### Options + +``` + -h, --help help for unzip +``` + +### SEE ALSO + +* [zk](../) - zk is a tool for wrangling zookeeper. + diff --git a/content/en/docs/21.0/reference/programs/zk/zk_wait.md b/content/en/docs/21.0/reference/programs/zk/zk_wait.md new file mode 100644 index 000000000..3b53e5fac --- /dev/null +++ b/content/en/docs/21.0/reference/programs/zk/zk_wait.md @@ -0,0 +1,34 @@ +--- +title: wait +series: zk +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## zk wait + +Sets a watch on the node and then waits for an event to fire. + +``` +zk wait [flags] +``` + +### Examples + +``` + # Wait for node change or creation. +zk wait /zk/path + +# Trailing slash waits on children. +zk wait /zk/path/children/ +``` + +### Options + +``` + -e, --exit exit if the path already exists + -h, --help help for wait +``` + +### SEE ALSO + +* [zk](../) - zk is a tool for wrangling zookeeper. + diff --git a/content/en/docs/21.0/reference/programs/zk/zk_watch.md b/content/en/docs/21.0/reference/programs/zk/zk_watch.md new file mode 100644 index 000000000..30c68e74e --- /dev/null +++ b/content/en/docs/21.0/reference/programs/zk/zk_watch.md @@ -0,0 +1,29 @@ +--- +title: watch +series: zk +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## zk watch + +Watches for changes to nodes and prints events as they occur. + +``` +zk watch [flags] +``` + +### Examples + +``` +watch /zk/path +``` + +### Options + +``` + -h, --help help for watch +``` + +### SEE ALSO + +* [zk](../) - zk is a tool for wrangling zookeeper. + diff --git a/content/en/docs/21.0/reference/programs/zk/zk_zip.md b/content/en/docs/21.0/reference/programs/zk/zk_zip.md new file mode 100644 index 000000000..176afc86b --- /dev/null +++ b/content/en/docs/21.0/reference/programs/zk/zk_zip.md @@ -0,0 +1,30 @@ +--- +title: zip +series: zk +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## zk zip + +Store a zk tree in a zip archive. + +### Synopsis + +Store a zk tree in a zip archive. + +Note this won't be immediately useful to the local filesystem since znodes can have data and children; +that is, even "directories" can contain data. + +``` +zk zip [ ...] [flags] +``` + +### Options + +``` + -h, --help help for zip +``` + +### SEE ALSO + +* [zk](../) - zk is a tool for wrangling zookeeper. + diff --git a/content/en/docs/21.0/reference/programs/zkctl/_index.md b/content/en/docs/21.0/reference/programs/zkctl/_index.md new file mode 100644 index 000000000..82bc6166d --- /dev/null +++ b/content/en/docs/21.0/reference/programs/zkctl/_index.md @@ -0,0 +1,46 @@ +--- +title: zkctl +series: zkctl +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## zkctl + +Initializes and controls zookeeper with Vitess-specific configuration. + +### Options + +``` + --alsologtostderr log to standard error as well as files + --config-file string Full path of the config file (with extension) to use. If set, --config-path, --config-type, and --config-name are ignored. + --config-file-not-found-handling ConfigFileNotFoundHandling Behavior when a config file is not found. (Options: error, exit, ignore, warn) (default warn) + --config-name string Name of the config file (without extension) to search for. (default "vtconfig") + --config-path strings Paths to search for config files in. (default []) + --config-persistence-min-interval duration minimum interval between persisting dynamic config changes back to disk (if no change has occurred, nothing is done). (default 1s) + --config-type string Config file type (omit to infer config type from file extension). + -h, --help help for zkctl + --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace + --log_dir string If non-empty, write log files in this directory + --log_err_stacks log stack traces for errors + --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) + --logtostderr log to standard error instead of files + --pprof strings enable profiling + --pprof-http enable pprof http endpoints + --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) + --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) + --v Level log level for V logs + -v, --version print binary version + --vmodule vModuleFlag comma-separated list of pattern=N settings for file-filtered logging + --zk.cfg string zkid@server1:leaderPort1:electionPort1:clientPort1,...) (default "6@:3801:3802:3803") + --zk.extra stringArray extra config line(s) to append verbatim to config (flag can be specified more than once) + --zk.myid uint which server do you want to be? only needed when running multiple instance on one box, otherwise myid is implied by hostname +``` + +### SEE ALSO + +* [zkctl init](./zkctl_init/) - Generates a new config and then starts zookeeper. +* [zkctl shutdown](./zkctl_shutdown/) - Terminates a zookeeper server but keeps its data dir intact. +* [zkctl start](./zkctl_start/) - Runs an already initialized zookeeper server. +* [zkctl teardown](./zkctl_teardown/) - Shuts down the zookeeper server and removes its data dir. + diff --git a/content/en/docs/21.0/reference/programs/zkctl/zkctl_init.md b/content/en/docs/21.0/reference/programs/zkctl/zkctl_init.md new file mode 100644 index 000000000..43bc338ca --- /dev/null +++ b/content/en/docs/21.0/reference/programs/zkctl/zkctl_init.md @@ -0,0 +1,52 @@ +--- +title: init +series: zkctl +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## zkctl init + +Generates a new config and then starts zookeeper. + +``` +zkctl init [flags] +``` + +### Options + +``` + -h, --help help for init +``` + +### Options inherited from parent commands + +``` + --alsologtostderr log to standard error as well as files + --config-file string Full path of the config file (with extension) to use. If set, --config-path, --config-type, and --config-name are ignored. + --config-file-not-found-handling ConfigFileNotFoundHandling Behavior when a config file is not found. (Options: error, exit, ignore, warn) (default warn) + --config-name string Name of the config file (without extension) to search for. (default "vtconfig") + --config-path strings Paths to search for config files in. (default []) + --config-persistence-min-interval duration minimum interval between persisting dynamic config changes back to disk (if no change has occurred, nothing is done). (default 1s) + --config-type string Config file type (omit to infer config type from file extension). + --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace + --log_dir string If non-empty, write log files in this directory + --log_err_stacks log stack traces for errors + --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) + --logtostderr log to standard error instead of files + --pprof strings enable profiling + --pprof-http enable pprof http endpoints + --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) + --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) + --v Level log level for V logs + -v, --version print binary version + --vmodule vModuleFlag comma-separated list of pattern=N settings for file-filtered logging + --zk.cfg string zkid@server1:leaderPort1:electionPort1:clientPort1,...) (default "6@:3801:3802:3803") + --zk.extra stringArray extra config line(s) to append verbatim to config (flag can be specified more than once) + --zk.myid uint which server do you want to be? only needed when running multiple instance on one box, otherwise myid is implied by hostname +``` + +### SEE ALSO + +* [zkctl](../) - Initializes and controls zookeeper with Vitess-specific configuration. + diff --git a/content/en/docs/21.0/reference/programs/zkctl/zkctl_shutdown.md b/content/en/docs/21.0/reference/programs/zkctl/zkctl_shutdown.md new file mode 100644 index 000000000..cf87c75a7 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/zkctl/zkctl_shutdown.md @@ -0,0 +1,52 @@ +--- +title: shutdown +series: zkctl +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## zkctl shutdown + +Terminates a zookeeper server but keeps its data dir intact. + +``` +zkctl shutdown [flags] +``` + +### Options + +``` + -h, --help help for shutdown +``` + +### Options inherited from parent commands + +``` + --alsologtostderr log to standard error as well as files + --config-file string Full path of the config file (with extension) to use. If set, --config-path, --config-type, and --config-name are ignored. + --config-file-not-found-handling ConfigFileNotFoundHandling Behavior when a config file is not found. (Options: error, exit, ignore, warn) (default warn) + --config-name string Name of the config file (without extension) to search for. (default "vtconfig") + --config-path strings Paths to search for config files in. (default []) + --config-persistence-min-interval duration minimum interval between persisting dynamic config changes back to disk (if no change has occurred, nothing is done). (default 1s) + --config-type string Config file type (omit to infer config type from file extension). + --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace + --log_dir string If non-empty, write log files in this directory + --log_err_stacks log stack traces for errors + --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) + --logtostderr log to standard error instead of files + --pprof strings enable profiling + --pprof-http enable pprof http endpoints + --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) + --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) + --v Level log level for V logs + -v, --version print binary version + --vmodule vModuleFlag comma-separated list of pattern=N settings for file-filtered logging + --zk.cfg string zkid@server1:leaderPort1:electionPort1:clientPort1,...) (default "6@:3801:3802:3803") + --zk.extra stringArray extra config line(s) to append verbatim to config (flag can be specified more than once) + --zk.myid uint which server do you want to be? only needed when running multiple instance on one box, otherwise myid is implied by hostname +``` + +### SEE ALSO + +* [zkctl](../) - Initializes and controls zookeeper with Vitess-specific configuration. + diff --git a/content/en/docs/21.0/reference/programs/zkctl/zkctl_start.md b/content/en/docs/21.0/reference/programs/zkctl/zkctl_start.md new file mode 100644 index 000000000..d273c28a5 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/zkctl/zkctl_start.md @@ -0,0 +1,52 @@ +--- +title: start +series: zkctl +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## zkctl start + +Runs an already initialized zookeeper server. + +``` +zkctl start [flags] +``` + +### Options + +``` + -h, --help help for start +``` + +### Options inherited from parent commands + +``` + --alsologtostderr log to standard error as well as files + --config-file string Full path of the config file (with extension) to use. If set, --config-path, --config-type, and --config-name are ignored. + --config-file-not-found-handling ConfigFileNotFoundHandling Behavior when a config file is not found. (Options: error, exit, ignore, warn) (default warn) + --config-name string Name of the config file (without extension) to search for. (default "vtconfig") + --config-path strings Paths to search for config files in. (default []) + --config-persistence-min-interval duration minimum interval between persisting dynamic config changes back to disk (if no change has occurred, nothing is done). (default 1s) + --config-type string Config file type (omit to infer config type from file extension). + --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace + --log_dir string If non-empty, write log files in this directory + --log_err_stacks log stack traces for errors + --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) + --logtostderr log to standard error instead of files + --pprof strings enable profiling + --pprof-http enable pprof http endpoints + --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) + --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) + --v Level log level for V logs + -v, --version print binary version + --vmodule vModuleFlag comma-separated list of pattern=N settings for file-filtered logging + --zk.cfg string zkid@server1:leaderPort1:electionPort1:clientPort1,...) (default "6@:3801:3802:3803") + --zk.extra stringArray extra config line(s) to append verbatim to config (flag can be specified more than once) + --zk.myid uint which server do you want to be? only needed when running multiple instance on one box, otherwise myid is implied by hostname +``` + +### SEE ALSO + +* [zkctl](../) - Initializes and controls zookeeper with Vitess-specific configuration. + diff --git a/content/en/docs/21.0/reference/programs/zkctl/zkctl_teardown.md b/content/en/docs/21.0/reference/programs/zkctl/zkctl_teardown.md new file mode 100644 index 000000000..ec54d7339 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/zkctl/zkctl_teardown.md @@ -0,0 +1,52 @@ +--- +title: teardown +series: zkctl +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## zkctl teardown + +Shuts down the zookeeper server and removes its data dir. + +``` +zkctl teardown [flags] +``` + +### Options + +``` + -h, --help help for teardown +``` + +### Options inherited from parent commands + +``` + --alsologtostderr log to standard error as well as files + --config-file string Full path of the config file (with extension) to use. If set, --config-path, --config-type, and --config-name are ignored. + --config-file-not-found-handling ConfigFileNotFoundHandling Behavior when a config file is not found. (Options: error, exit, ignore, warn) (default warn) + --config-name string Name of the config file (without extension) to search for. (default "vtconfig") + --config-path strings Paths to search for config files in. (default []) + --config-persistence-min-interval duration minimum interval between persisting dynamic config changes back to disk (if no change has occurred, nothing is done). (default 1s) + --config-type string Config file type (omit to infer config type from file extension). + --keep_logs duration keep logs for this long (using ctime) (zero to keep forever) + --keep_logs_by_mtime duration keep logs for this long (using mtime) (zero to keep forever) + --log_backtrace_at traceLocations when logging hits line file:N, emit a stack trace + --log_dir string If non-empty, write log files in this directory + --log_err_stacks log stack traces for errors + --log_rotate_max_size uint size in bytes at which logs are rotated (glog.MaxSize) (default 1887436800) + --logtostderr log to standard error instead of files + --pprof strings enable profiling + --pprof-http enable pprof http endpoints + --purge_logs_interval duration how often try to remove old logs (default 1h0m0s) + --stderrthreshold severityFlag logs at or above this threshold go to stderr (default 1) + --v Level log level for V logs + -v, --version print binary version + --vmodule vModuleFlag comma-separated list of pattern=N settings for file-filtered logging + --zk.cfg string zkid@server1:leaderPort1:electionPort1:clientPort1,...) (default "6@:3801:3802:3803") + --zk.extra stringArray extra config line(s) to append verbatim to config (flag can be specified more than once) + --zk.myid uint which server do you want to be? only needed when running multiple instance on one box, otherwise myid is implied by hostname +``` + +### SEE ALSO + +* [zkctl](../) - Initializes and controls zookeeper with Vitess-specific configuration. + diff --git a/content/en/docs/21.0/reference/programs/zkctld/_index.md b/content/en/docs/21.0/reference/programs/zkctld/_index.md new file mode 100644 index 000000000..f05175cc7 --- /dev/null +++ b/content/en/docs/21.0/reference/programs/zkctld/_index.md @@ -0,0 +1,19 @@ +--- +title: zkctld +series: zkctld +commit: 6cd09cce61fa79a1b7aacb36886b7dc44ae82a94 +--- +## zkctld + +zkctld is a daemon that starts or initializes ZooKeeper with Vitess-specific configuration. It will stay running as long as the underlying ZooKeeper server, and will pass along SIGTERM. + +``` +zkctld [flags] +``` + +### Options + +``` + -h, --help help for zkctld +``` + diff --git a/content/en/docs/21.0/reference/query-serving/_index.md b/content/en/docs/21.0/reference/query-serving/_index.md new file mode 100644 index 000000000..d53f66916 --- /dev/null +++ b/content/en/docs/21.0/reference/query-serving/_index.md @@ -0,0 +1,5 @@ +--- +title: Query Serving +description: Query Serving related reference docs +weight: 2 +--- diff --git a/content/en/docs/21.0/reference/query-serving/reserved-conn.md b/content/en/docs/21.0/reference/query-serving/reserved-conn.md new file mode 100644 index 000000000..bf5644a8e --- /dev/null +++ b/content/en/docs/21.0/reference/query-serving/reserved-conn.md @@ -0,0 +1,148 @@ +--- +title: Reserved Connections +description: +weight: 1 +--- + +## Feature Description + +Vitess uses connection pooling to minimize memory usage and otherwise +optimize the performance of the underlying MySQL servers. Even with +tens of thousands of client database connections. This means that +different users connecting to a `vtgate` can effectively share a +database session to MySQL. To make this process as transparent as possible +to users, Vitess removes all query constructs that would normally +need to change the state in the MySQL connection. For example, when a user +sets or evaluates a user defined variable, the `vtgate` will rewrite the query +so that it does not actually do anything with user variables. Instead, it keeps +the state in the Vitess layer. + +In other cases, this approach is not enough, and Vitess can use +**reserved connections**, which are controlled via the `--enable_system_settings` vtgate flag. +Enabling reserved connections means a dedicated connection is maintained for +the `vtgate` session from the relevant `vttablet` to the MySQL server. Reserved +connections are used when changing system variables, using temporary tables, +or when using MySQL locking functions to acquire advisory locks. In general, it +is better to use reserved connections sparingly, because they reduce the +effectiveness of the `vttablet` connection pooling. This may also reduce, or even +eliminate, the advantages of using connection pooling between `vttablet` and +MySQL. As such, take note of the `SET` statements that your application's +MySQL connector and/or ORM sends to MySQL/`vtgate`. Or if those settings will +result in reserved connections being employed for some/all of the application's +sessions. + +### Settings pool and reserved connections + +We will see how reserved connections get triggered for different use cases in subsequent sections of this document. +What we want to highlight at the beginning is that there is a known issue when a reserved connection is used as it cannot be reused by vttablet. More details about it are given [below](#number-of-vttablet---mysql-connections). + +To solve this problem, the connection pool implementation used by vttablet has been enhanced to keep the connections with settings in the pool and not to pin the connection to the client session. +With this enhancement, we reduce the likelihood of MySQL running out of connections due to reserved connections, because the scenarios where we still need reserved connections are sharply reduced. + +This is enabled by default from v17 onwards. It can be disabled by setting the flag `--queryserver-enable-settings-pool` on vttablet. +This change takes effect only for the cases when system variable changes need a reserved connection. +There are still cases like [temporary tables](#temporary-tables-and-reserved-connections) and [advisory locks](#get_lock-and-reserved-connections) where reserved connections will continue to be used. + +### System variables and reserved connections + +If a user changes a system variable and reserved connections are enabled, +the user connection will be marked as needing reserved connections. +For all subsequent calls to Vitess, connection pooling is turned off for +a particular session. This only applies to certain system settings. For more +details see [here](../../../../design-docs/query-serving/set-stmt/). Any queries to a +tablet from this session will create a reserved connection on that tablet. This +means a connection is reserved only for that session. + +Connection pooling is an important part of what makes Vitess performant, so +using constructs that turn it off should only be done in rare circumstances. + +If you are using an application or library that issues these kind of `SET` +statements, the best way to avoid reserved connections is to make sure the +global MySQL settings match the ones the application is trying to set (e.g. +`sql_mode`, or `wait_timeout`). When Vitess discovers that you are changing +a system setting to the global value, Vitess just ignores those `SET`s. + +Once a session has been marked as reserved, it remain reserved until the user +disconnects from `vtgate`. + +### Enabling reserved connections + +Use of reserved connections are controlled by the `vtgate` flag +`--enable_system_settings`. This flag has traditionally 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 onwards, it defaults to **true** in all release and +development versions. You can read more [here](https://github.com/vitessio/vitess/issues/9125). +Thus you should specify this flag explicitly, so you are sure whether +it is enabled or not, independent of which Vitess release/build/version +you are running. + +If you have reserved connections disabled, you will get the "old" Vitess behavior: +where most setting 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 tradeoff to ensure the best possible +performance of the `vttablet` <-> MySQL connection pools. As noted above, +this comes down to a trade-off between compatibility and +performance/scalability. You should also review [this section](#number-of-vttablet---mysql-connections) +when deciding on whether or not to enable reserved connections. + +### Avoiding the use of reserved connections + +In MySQL80 a new query hint (`SET_VAR`) allows setting the session value of certain system variables during +the execution of a statement. More information about this MySQL feature on the +[MySQL documentation](https://dev.mysql.com/doc/refman/8.0/en/optimizer-hints.html#optimizer-hints-set-var). +Vitess leverages this query hint to reduce the number of reserved connections. When setting a system variable, +instead of creating a reserved connection, the variable and its new value will be sent to MySQL using the +`SET_VAR` query hint. This applies only if the system variable is supported by the `SET_VAR` hint +(list of supported variables [here](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html)). + + +For example, executing: `set @@sql_mode = 'NO_ZERO_DATE'` will not create a reserved connection for future queries. +If we execute a `select` statement like: `select foo from bar`, VTGate will rewrite the query as +`select /*+ SET_VAR(sql_mode = 'NO_ZERO_DATE') foo from bar */`. + +This feature can be disabled using the VTGate flag `--enable_set_var` (by default set to true). + +### Temporary tables and reserved connections + +Temporary tables exist only in the context of a particular MySQL connection. +If using a temporary table, Vitess will mark the session as needing a +reserved connection. It will continue to use the reserved connection +until the user disconnects. Note that removing the temp table is not enough to reset this. +More info can be found [here](../../compatibility/mysql-compatibility/#temporary-tables). + +### GET_LOCK() and reserved connections + +The MySQL locking functions allow users to work with user level locks. Since +the locks are tied to the connection, and the lock must be released in the +same connection as it was acquired, use of these functions will force a +connection to become a reserved connection. This connection is also kept alive +so it does not time out due to inactivity. More information can be found +[here](../../../../design-docs/query-serving/locking-functions/). + +### Shutting down reserved connections + +Whenever a connection gets transformed into a reserved connection, a fresh +connection is created in the connection pool to replace it. Once the `vtgate` +session that initiated the reserved connections disconnects, all reserved +connections created for this session between the `vttablet`s and MySQL +are terminated. You may want to configure your application or application +connector to disconnect idle sessions that are likely to use +reserved connections promptly. In order to release resources that cannot +otherwise be reused. + +### Number of vttablet <-> MySQL connections + +As a result of how reserved connections work, it is possible for there +to be significantly more `vttablet` <-> MySQL connections than the limit you +set by sizing the `vttablet` connection pools. This is because the connection +pools are still being maintained. Which results in a set maximum number of +connections, plus the number of reserved connections. This is at +least partially based on the number of connected vtgate clients that are using +reserved connections. As such, it may be challenging to size your MySQL +`max_connections` configuration setting appropriately in order to deal with the +potentially (much) larger number of connections. + +We recommend you review the value of this setting carefully, and keep this +in mind when you decide whether to enable or disable reserved connections. diff --git a/content/en/docs/21.0/reference/viper/_index.md b/content/en/docs/21.0/reference/viper/_index.md new file mode 100644 index 000000000..60335c193 --- /dev/null +++ b/content/en/docs/21.0/reference/viper/_index.md @@ -0,0 +1,3 @@ +--- +title: Viper +--- \ No newline at end of file diff --git a/content/en/docs/21.0/reference/viper/basic.md b/content/en/docs/21.0/reference/viper/basic.md new file mode 100644 index 000000000..a2ba89547 --- /dev/null +++ b/content/en/docs/21.0/reference/viper/basic.md @@ -0,0 +1,70 @@ +--- +title: Framework Basics +weight: 2 +--- + +In order to integrate smoothly with existing Vitess configuration mechanisms (including flags, `vttablet`'s YAML-based configuration, `/debug/env` endpoints, etc) we have introduced a thin framework on top of viper, which: + +- Requires values to be `Configure`d. +- Separates static values (which do not change at runtime even if the config-file they were loaded from is updated) from dynamic values. + +## `Configure` Options + +In order to properly configure a value for use, `Configure` needs to know, broadly speaking, three things: + +1. The key name being bound. +1. What "things" it should be bound to (i.e. other keys via aliases, environment variables, and flag names), as well as if it has a default value. +1. How to `Get` it out of a viper. + +`Configure`, therefore, has the following signature: + +```go +func Configure[T any](key string, options Options[T]) Value[T] +``` + +The first parameter provides the key name (point 1 of our above list); all other information is provided via various `Options` fields, which looks like: + +```go +type Options[T any] struct { + // what "things" to bind to + Aliases []string + FlagName string + EnvVars []string + + // default, if any + Default T + + // whether it can reload or not (more on this later) + Dynamic bool + + // how to "get" it from a viper (more on this slightly less later) + GetFunc func(v *viper.Viper) func(key string) T +} +``` + +## `Get` funcs + +In most cases, module authors will not need to specify a `GetFunc` option, since, if not provided, `viperutil` will do its best to provide a sensible default for the given type `T`. + +This requires a fair amount of `reflect`ion code, which we won't go into here, and unfortunately cannot support even all primitive types (notably, array (not slice!!) types). +In these cases, the `GetFuncForType` will panic, allowing the module author to catch this during testing of their package. +They may then provide their own `GetFunc`. + +The full suite of types, both supported and panic-inducing, are documented by way of unit tests in [`go/viperutil/get_func_test.go`](https://github.com/vitessio/vitess/blob/main/go/viperutil/get_func_test.go). + +## Debug Endpoint + +Any component that parses its flags via one of `servenv`'s parsing methods will get an HTTP endpoint registered at `/debug/config` which displays the full viper configuration for debugging purposes. +It accepts a query parameter to control the format; anything in `viper.SupportedExts` is permitted. + +## Caveats and Gotchas + +- Config keys are case-insensitive. +`Foo`, `foo`, `fOo`, and `FOO` will all have the same value. + - **Except** for environment variables, which, when read, are case-sensitive (but the config key they are _bound to_ remains case-insensitive). + For example, if you have `viper.BindEnv("foo", "VT_FOO")`, then `VT_FOO=1 ./myprogram` will set the value to `1`, but `Vt_FoO=1 ./myprogram will not`. + The value, though, can still be read _from_ viper as `Foo`, `foo`, `FOO`, and so on. + +- The `Unmarshal*` functions rely on `mapstructure` tags, not `json|yaml|...` tags. + +- Any config files/paths added _after_ calling `WatchConfig` will not get picked up by that viper, and a viper can only watch a single config file. \ No newline at end of file diff --git a/content/en/docs/21.0/reference/viper/config_files.md b/content/en/docs/21.0/reference/viper/config_files.md new file mode 100644 index 000000000..753ba3206 --- /dev/null +++ b/content/en/docs/21.0/reference/viper/config_files.md @@ -0,0 +1,69 @@ +--- +title: Config Files +weight: 4 +slug: 'config-files' +--- + +`viperutil` provides a few flags that allow binaries to read values from config files in addition to defaults, environment variables and flags. +They are: + +- `--config-path` + - Default: `$(pwd)` + - EnvVar: `VT_CONFIG_PATH` (parsed exactly like a `$PATH` style shell variable). + - FlagType: `StringSlice` + - Behavior: Paths for `ReadInConfig` to search. +- `--config-type` + - Default: `""` + - EnvVar: `VT_CONFIG_TYPE` + - FlagType: `flagutil.StringEnum` + - Values: everything contained in `viper.SupportedExts`, case-insensitive. + - Behavior: Force viper to use a particular unmarshalling strategy; required if the config file does not have an extension (by default, viper infers the config type from the file extension). +- `--config-name` + - Default: `"vtconfig"` + - EnvVar: `VT_CONFIG_NAME` + - FlagType: `string` + - Behavior: Instructs `ReadInConfig` to only look in `ConfigPaths` for files named with this name (with any supported extension, unless `ConfigType` is also set, in which case only with that extension). +- `--config-file` + - Default: `""` + - EnvVar: `VT_CONFIG_FILE` + - FlagType: `string` + - Behavior: Instructs `ReadInConfig` to search in `ConfigPaths` for explicitly a file with this name. Takes precedence over `ConfigName`. +- `--config-file-not-found-handling` + - Default: `WarnOnConfigFileNotFound` + - EnvVar: (none) + - FlagType: `string` (options: `IgnoreConfigFileNotFound`, `WarnOnConfigFileNotFound`, `ErrorOnConfigFileNotFound`, `ExitOnConfigFileNotFound`) + - Behavior: If viper is unable to locate a config file (based on the other flags here), then `LoadConfig` will: + - `Ignore` => do nothing, return no error. Program values will come entirely from defaults, environment variables and flags. + - `Warn` => log at the WARNING level, but return no error. + - `Error` => log at the ERROR level and return the error back to the caller (usually `servenv`.) + - `Exit` => log at the FATAL level, exiting immediately. +- `--config-persistence-min-interval` + - Default: `1s` + - EnvVar: `VT_CONFIG_PERSISTENCE_MIN_INTERVAL` + - FlagType: `time.Duration` + - Behavior: If viper is watching a config file, in order to synchronize between changes to the file, and changes made in-memory to dynamic values (for example, via vtgate's `/debug/env` endpoint), it will periodically write in-memory changes back to disk, waiting _at least_ this long between writes. + If the value is 0, each in-memory `Set` is immediately followed by a write to disk. + +For more information on how viper searches for config files, see the [documentation][viper_read_in_config_docs]. + +If viper was able to locate and load a config file, `LoadConfig` will then configure the dynamic registry to set up a watch on that file, enabling all dynamic values to pick up changes to that file for the remainder of the program's execution. +If no config file was used, then dynamic values behave exactly like static values (i.e. the dynamic registry copies in the settings loaded into the static registry, but does not set up a file watch). + +## Re-persistence for Dynamic Values + +Prior to the introduction of viper in Vitess, certain components (such as `vttablet` or `vtgate`) exposed `/debug/env` HTTP endpoints that permitted the user to modify certain configuration parameters at runtime. + +This behavior is still supported, and to maintain consistency between update mechanisms, if: +- A config file was loaded at startup +- A value is configured with the `Dynamic: true` option + +then in-memory updates to that value (via `.Set()`) will be written back to disk. +If we skipped this step, then the next time viper reloaded the disk config, the in-memory change would be undone, since viper does a full load rather than something more differential. +Unfortunately, this seems unavoidable. + +To migitate against potentially writing to disk "too often" for a given user, the `--config-persistence-min-interval` flag defines the _minimum_ time to wait between writes. +Internally, the system is notified to write "soon" only when a dynamic value is updated. +If the wait period has elapsed between changes, a write happens immediately; otherwise, the system waits out the remainder of the period and persists any changes that happened while it was waiting. +Setting this interval to zero means that writes happen immediately. + +[viper_read_in_config_docs]: https://github.com/spf13/viper#reading-config-files diff --git a/content/en/docs/21.0/reference/viper/dynamic_values.md b/content/en/docs/21.0/reference/viper/dynamic_values.md new file mode 100644 index 000000000..a9d3d47fb --- /dev/null +++ b/content/en/docs/21.0/reference/viper/dynamic_values.md @@ -0,0 +1,17 @@ +--- +title: Dynamic Values +weight: 3 +slug: 'dynamic-values' +--- + +Values can be configured to be either static or dynamic. +Static values are loaded once at startup (more precisely, when `viperutil.LoadConfig` is called), and whatever value is loaded at the point will be the result of calling `Get` on that value for the remainder of the process's lifetime. +Dynamic values, conversely, may respond to config changes. + +In order for dynamic configs to be truly dynamic, `LoadConfig` must have found a config file (as opposed to pulling values entirely from defaults, flags, and environment variables). +If this is the case, a second viper shim, which backs the dynamic registry, will start a watch on that file, and any changes to that file will be reflected in the `Get` methods of any values configured with `Dynamic: true`. + +**An important caveat** is that viper on its own is not threadsafe, meaning that if a config reload is being processed while a value is being accessed, a race condition can occur. +To protect against this, the dynamic registry uses a second shim, [`sync.Viper`](https://github.com/vitessio/vitess/blob/main/go/viperutil/internal/sync/sync.go). +This works by assigning each dynamic value its own `sync.RWMutex`, and locking it for writes whenever a config change is detected. Value `GetFunc`s are then adapted to wrap the underlying get in a `m.RLock(); defer m.RUnlock()` layer. +This means that there's a potential throughput impact of using dynamic values, which module authors should be aware of when deciding to make a given value dynamic. diff --git a/content/en/docs/21.0/reference/viper/overview.md b/content/en/docs/21.0/reference/viper/overview.md new file mode 100644 index 000000000..5c0c67fd2 --- /dev/null +++ b/content/en/docs/21.0/reference/viper/overview.md @@ -0,0 +1,19 @@ +--- +title: Overview +weight: 1 +--- + +Vitess v17 introduced [`viper`][viper], a library to provide unified configuration management, to the project. + +It acts as a registry for configuration values coming from a variety of sources, including: + +- Default values. +- Configuration files (JSON, YAML, TOML, and other formats supported), including optionally watching and live-reloading. +- Environment variables. +- Command-line flags, primarily from `pflag.Flag` types. + +It is used by a wide variety of Go projects, including [hugo][hugo] and [kops][kops]. + +[viper]: https://github.com/spf13/viper +[hugo]: https://github.com/gohugoio/hugo +[kops]: https://github.com/kubernetes/kops diff --git a/content/en/docs/21.0/reference/vreplication/_index.md b/content/en/docs/21.0/reference/vreplication/_index.md new file mode 100644 index 000000000..018af89d2 --- /dev/null +++ b/content/en/docs/21.0/reference/vreplication/_index.md @@ -0,0 +1,7 @@ +--- +title: VReplication +description: "VReplication vtctl commands" +weight: 3 +aliases: ['/docs/reference/vreplication/v2/'] +skip_sections: true +--- diff --git a/content/en/docs/21.0/reference/vreplication/faq.md b/content/en/docs/21.0/reference/vreplication/faq.md new file mode 100644 index 000000000..d41262d00 --- /dev/null +++ b/content/en/docs/21.0/reference/vreplication/faq.md @@ -0,0 +1,44 @@ +--- +title: VReplication FAQ +description: Common issues/questions while operating VReplication workflows. +weight: 400 +--- + +{{< expand `What mysql permissions are needed by VReplication?`>}} +
+GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, FILE, 
+  REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES,
+  LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW,
+  SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER
+  ON *.* TO 'vt_filtered'@'localhost';
+
+{{< /expand >}} + +{{< expand `Why am I seeing io.EOF errors in my workflow?`>}} +

+ io.EOF errors can be difficult to track down. These are usually caused by an issue at the mysql server layer. You will need to consult + the source and target vttablet logs in order to know for sure in each case. Here are some possible reasons: +

+ +
    +
  • GTID is not enabled on the server. VReplication requires GTID=on + (permissible is not supported)
  • +
  • Permissions are not setup correctly for the vreplication related mysql users (in particular the `vt_filtered` user by defualt).
  • +
  • Row-based replication (RBR) binlog_format=row is not enabled. Statement-based replication (SBR) is not supported by VReplication
  • +
  • The mysql server is down or not reachable
  • +
+{{< /expand >}} + +{{< expand `What GTID-related options do I need to set in my my.cnf?`>}} +
+log_bin=1
+binlog_format=ROW
+binlog_row_image=full
+
+{{< /expand >}} + +{{< expand `If I can't turn GTIDs on, can I run a VReplication workflow using --db_flavor=FilePos instead?`>}} +Yes, you can run VReplication workflows with the pre MySQL 5.6 file and position method but this should only be used as a last resort when it's not possible +to modify the configuration of the source. This is because the File and Position method is not fault tolerant and if any error or failure/failover is encountered +you will need to throw away the existing workflow and start another one anew. +{{< /expand >}} diff --git a/content/en/docs/21.0/reference/vreplication/flags.md b/content/en/docs/21.0/reference/vreplication/flags.md new file mode 100644 index 000000000..aa8dcb689 --- /dev/null +++ b/content/en/docs/21.0/reference/vreplication/flags.md @@ -0,0 +1,194 @@ +--- +title: VTTablet Flags +description: vttablet flags related to VReplication functionality +weight: 80 +--- + +There are several flags that can be specified when `vttablet` is launched that are related to the +VReplication functionality. Some of the flags are relevant when tablets are acting as targets and others when tablets are acting as sources in a VReplication workflow. + +#### relay_log_max_size + +**Type** integer\ +**Unit** bytes\ +**Default** 250000\ +**Applicable on** target + +The target tablet receives events from the source and applies the corresponding DML to the underlying MySQL database. Depending on the load on the target the query execution times can change. Also during the copy +phase, we are doing bulk inserts. For both of these reasons VReplication introduces a buffer between receiving the events and applying them: the _relay log_. + +The relay log buffers events on the target as they are received from the source. This is done in a separate thread concurrently with the thread that applies the events. + +**relay_log_max_size** defines the maximum buffer size (in bytes). As events arrive they are stored in the relay log. The apply thread consumes these events as fast as it can. When the relay log fills up we no longer pull +events from the source until some events are consumed. If single rows are larger than the specified buffer size, a single row is buffered at a time. + +#### vreplication-parallel-insert-workers + +**Type** integer\ +**Default** 1\ +**Applicable on** target + +This flag is intended as an option to improve the performance of the [VReplication copy phase](https://vitess.io/docs/design-docs/vreplication/life-of-a-stream/#copy). + +During the VReplication copy phase, the target tablet reads batches of rows in VStream packets (the size of which is managed by the [`--vstream_packet_size` flag](#vstream_packet_size)) from the source tablet and inserts them on the target. By default, the target does this sequentially: it reads a batch, then it inserts a batch, then it reads a batch, etc. This flag adds a degree of parallelism so that, while a new batch is being read from the source, up to `--vreplication-parallel-insert-workers` may be inserting previously read batches. + +{{< info >}} +Batches of rows insert in parallel, but commit in order. In other words, given two batches B1 and B2 with all primary key IDs in B1 less than those in B2, rows in B2 may be inserted before those in B1, but the B1 transaction will commit before the B2 transaction. + +Though this limits performance, it ensures the target will be eventually consistent. +{{< /info >}} + +The performance of a VReplication stream is dependent on a number of factors, such as the hardware of the source and target tablets, the latency of the network between them, and utilization of those resources by the VReplication stream and concurrent workloads. Whether this flag improves performance depends on those factors and many others not mentioned here. + +A rule of thumb to follow is to see if there are idle resources (especially CPU and disk IO) on both the source and target side. If so, then increasing this flag may increase utilization of those resources, and improve copy phase performance. To measure effectiveness of the flag, compare the values of the [`VReplicationCopyRowCount` metric](../metrics/#vreplicationcopyrowcount-vreplicationcopyrowcounttotal) or [`VReplicationPhaseTimings` metric](../metrics/#vreplicationphasetimings-vreplicationphasetimingscounts-vreplicationphasetimingstotal) with and without the flag. + +It is recommended **not** to increase this flag beyond the number of vCPUs available to the target tablet. + +#### vreplication_copy_phase_duration + +**Type** duration\ +**Default** 1h (1 hour)\ +**Applicable on** target + +When copying the contents of a table we go through 1+ cycles of copying rows, catching up on changes made (binlog events) while we copied rows, and applying those changes to the rows that have been copied (copy,catchup,fastforward). This flag determines at most how long we copy rows before moving through the other stages in the cycle. These cycles will continue until all of the rows have been copied. + +* You can see metrics related to the copy phase in the following values at the `/debug/vars` vttablet endpoint: `VReplicationPhaseTimings`, `VReplicationPhaseTimingsCounts`, `VReplicationPhaseTimingsTotal`, `VReplicationCopyLoopCount`, `VReplicationCopyLoopCountTotal`, `VReplicationCopyRowCount`, `VReplicationCopyRowCountTotal`, `VStreamerPhaseTiming`, and `VStreamerErrors` + +{{< info >}} +You should not generally need to change this. But, you may want to increase this duration if the source has little to no write traffic occurring during the copy phase (to speed things along) and you may want to decrease it if the write rate is very high on the source during the copy phase (to ensure we can stay caught up with changes that are happening). +{{< /info >}} + +#### vreplication_copy_phase_max_innodb_history_list_length + +**Type** integer\ +**Default** 1000000\ +**Applicable on** source + +When copying the contents of a table we go through 1+ cycles of copy,catchup,fastforward in the copy phase. When preparing to copy a batch of rows (row streamer) we check the [InnoDB history list length](https://dev.mysql.com/doc/refman/en/innodb-purge-configuration.html) on the source MySQL instance and wait for it to become less than or equal to this value before beginning. This helps to limit the impact of VReplication operations such as `MoveTables` on the source tablet (especially important if the source is a PRIMARY). + +* You can see the current configuration value as `RowStreamerMaxInnoDBTrxHistLen` in the running process at the `/debug/vars` vttablet endpoint +* You can modify the current configuration value as `RowStreamerMaxInnoDBTrxHistLen` in the running process at the `/debug/env` vttablet endpoint +* You can see the total (global) number of waits and time spent waiting for MySQL on the source tablet as `waitForMySQL` in `RowStreamerWaits` at the `/debug/vars` vttablet endpoint +* You can see the number of waits and time spent waiting for MySQL on the source tablet by table (we do not have the workflow name on the source) as `:waitForMySQL` in `VStreamerPhaseTiming` at the `/debug/vars` vttablet endpoint + +#### vreplication_copy_phase_max_mysql_replication_lag + +**Type** integer\ +**Unit** seconds\ +**Default** 43200 (12 hours)\ +**Applicable on** source + +When copying the contents of a table we go through 1+ cycles of copy,catchup,fastforward in the copy phase. When preparing to copy a batch of rows (row streamer) we check the [Seconds_Behind_Source](https://dev.mysql.com/doc/refman/en/replication-administration-status.html) value on the source MySQL instance and wait for it to become less than or equal to this value before beginning. This helps to limit the impact of VReplication operations such as `MoveTables` on the source tablet. + +* You can see the current configuration value as `RowStreamerMaxMySQLReplLagSecs` in the running process at the `/debug/vars` vttablet endpoint +* You can modify the current configuration value as `RowStreamerMaxMySQLReplLagSecs` in the running process at the `/debug/env` vttablet endpoint +* You can see the total (global) number of waits and time spent waiting for MySQL on the source tablet as `waitForMySQL` in `RowStreamerWaits` at the `/debug/vars` vttablet endpoint +* You can see the number of waits and time spent waiting for MySQL on the source tablet by table (we do not have the workflow name on the source) as `:waitForMySQL` in `VStreamerPhaseTiming` at the `/debug/vars` vttablet endpoint + +#### vreplication_heartbeat_update_interval + +**Type** integer\ +**Unit** seconds\ +**Default** 1\ +**Maximum** 60 (one minute)\ +**Applicable on** target + +For an idle source shard, the source vstreamer sends a heartbeat. Currently, that is once per second. On receiving the heartbeat the target VReplication module updates the time_updated column of the relevant row of `_vt.vreplication`. For some setups this is a problem, for example: + +* If there are too many streams the extra write QPS or CPU load due to these updates are unacceptable +* If there are too many streams and/or a large source field (lot of participating tables) which generates unacceptable increase in the binlog size +* Even for a single stream, if the server is of a lower configuration, then the resulting increase in the QPS or binlog increase may become significant as a percentage of resources + +_vreplication_heartbeat_update_interval_ determines how often the time_updated column is updated if there is no activity on the source and the source vstream is only sending heartbeats. Use a low value if you expect a high QPS or you are monitoring this column to alert about potential outages. Keep this high if: + +* You have too many streams and the extra write QPS or CPU load due to these updates is unacceptable OR +* You have too many streams and/or a large binlogsource field (i.e., there are a lot of participating tables) which generates unacceptable increase in your binlog size + +Some internal processes (like OnlineDDL) depend on the heartbeat updates for operating properly. Hence there is an upper limit on this interval, which is 60 seconds. + +#### vstream-binlog-rotation-threshold + +**Type** integer\ +**Unit** bytes\ +**Default** 67108864 (64MiB)\ +**Applicable on** source + +When starting a vstream which executes a query based on a [GTID](https://dev.mysql.com/doc/refman/en/replication-gtids-concepts.html) snapshot/position (e.g. RowStreamers and ResultStreamers) we will attempt to rotate the binary log (binlog) file if the currently open binlog file on the source is larger than this value in order to limit the [GTID auto positioning](https://dev.mysql.com/doc/refman/en/replication-gtids-auto-positioning.html) overhead. The currently open binlog file — [which can be up to 1GiB in size by default](https://dev.mysql.com/doc/refman/en/replication-options-binary-log.html#sysvar_max_binlog_size) — will always need to be scanned *even when there is little to no replication lag* and empty events will be streamed for those GTIDs in the log that we are skipping. In total, this can add significant overhead on both the `mysqld` instance and the `vttablet` when starting a number of vstreams. Rotating the binlog when it's above this size helps to ensure that we are processing a relatively small open binary log file that will be minimal in both size and number of GTID events. Attempting to rotate the log if the current binlog file is of any significant size (64MiB by default) avoids too many unecessary rotations. If you're on a very fast network with low latency — and plenty of spare CPU capacity — then you may want to increase this size even further to avoid unnecessary rotations. Conversely, if you're on a very slow network with high latency then you may want to decrease this size even further to avoid longer delays when vstreams start (e.g. you may see this exhibited as a slow [`VDiff`](../vdiff) or [`MoveTables`](../movetables) operation on a number of very small tables). + +* You can see the number of successful binlog rotations that vstreams have performed (an attempt can fail e.g. due to lack of permissions) using the `VStreamerFlushedBinlogs` status variable in the running process at the [`/debug/vars` `vttablet` endpoint](../../../user-guides/configuration-basic/monitoring/#debugvars) + +#### vstream_packet_size + +**Type** integer\ +**Unit** bytes\ +**Default** 250000\ +**Applicable on** source + +On the source, events are buffered and batched where applicable, to minimize network overhead. For example, multiple row events in a transaction or the set of begin/dml/commit event sets are buffered and sent together. Commits, DDLs, and synthetic events generated by VReplication like heartbeats and resharding journals cause the events buffered on the source to be sent immediately. + +**vstream_packet_size** specifies the suggested packet size for VReplication vstreamer. This is used only as a recommendation. The actual packet size may be more or less than this amount depending on the number and type of events yet to be sent on the source. + +#### watch_replication_stream + +**Type** bool\ +**Default** false\ +**Applicable on** source + +By default vttablets reload their schema every `--queryserver-config-schema-reload-time` seconds (default 30 minutes). This can cause a problem while streaming events if DDLs are applied on the source and streaming is started _after_ the DDL was applied but _before_ vttablet refreshed its schema. This is alleviated by enabling the _watcher_. + +When enabled, vttablet will start the _watcher_ which streams the MySQL replication stream from the local database, and uses it to proactively update its schema when it encounters a DDL. + +#### track_schema_versions + +**Type** bool\ +**Default** false\ +**Applicable on** source + +All vstreams on a tablet share a common engine. vstreams that are lagging might see a newer (and hence incorrect) version of the schema in case DDLs were applied in between. Also, reloading schemas is an expensive operation. If there are multiple vstreams, each of them will separately receive a DDL event resulting in multiple reloads for the same DDL. The [tracker](../internal/tracker) addresses these issues. + +When enabled, vttablet will start the _tracker_ which runs a separate vstream that monitors DDLs and stores the version of the schema at the position that a DDL is applied in the schema version table. So if we are streaming events from the past we can get the corresponding schema and interpret the fields from the event correctly. + +#### schema-version-max-age-seconds + +**Type** integer\ +**Unit** seconds\ +**Default** 0\ +**Applicable on** source + +By default the historian loads up to 10,000 rows from the `_vt.schema_version` table into memory which contain a blob of the entire database schema. For clusters with large schemas each of these rows can become very large (>1MB) and can eventually lead to out of memory errors on the tablet if frequent DDLs are run triggering a new `_vt.schema_version` row to be written and stored in the tablet's memory. + +`schema-version-max-age-seconds` provides a way to periodically purge those schema version rows from the tablet's memory by removing rows older than the max age in seconds. The default of 0 means no records will be purged. This option **only** controls removing the records in the tablet's memory and does not remove the rows stored in the database. A safe option is to choose a max age at least as old as your [binlog retention seconds](https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html#sysvar_binlog_expire_logs_seconds) to avoid removing schema versions that are needed to serialize binlog events that require a schema different from the most recent schema. + +#### vreplication_retry_delay + +**Type** integer\ +**Unit** seconds\ +**Default** 5\ +**Applicable on** target + +The target might encounter connection failures during a workflow. VReplication automatically retries +stalled streams after _vreplication_retry_delay_ seconds + +#### vreplication_max_time_to_retry_on_error + +**Type** duration\ +**Default** 0 (unlimited)\ +**Applicable on** target + +Stop automatically retrying when we've had consecutive failures with the same error for this long after the first occurrence (default 0, meaning no time limit). + +#### vreplication_experimental_flags + +**Type** bitmask\ +**Default** 3 (VReplicationExperimentalFlagOptimizeInserts | VReplicationExperimentalFlagAllowNoBlobBinlogRowImage)\ +**Applicable on** target + +Features that are not yet adequately field-tested, that are not backward-compatible, or need to be proven in production environments are put behind _vreplication_experimental_flags_. These features are temporary and will either be made permanent, removed, or put behind a separate vttablet option. Currently, the only experimental features are expected to be performance improvements. + +This will be a bitmask for each such feature. The ones currently defined: + +* bitmask: _0x1_ => If set then we optimize the catchup phase by not sending inserts for rows that are outside the range of primary keys already copied. For more details see: https://github.com/vitessio/vitess/pull/7708 + +* bitmask: _0x2_ => If set then we support MySQL's [`binlog_row_image=NOBLOB`](https://dev.mysql.com/doc/refman/en/replication-options-binary-log.html#sysvar_binlog_row_image) option. For more details see: https://github.com/vitessio/vitess/pull/12905 + +* bitmask: _0x4_ => If set then we optimize the replay of events during the running phase by batching statements and transactions in order to limit the number of queries and thus round-trips to MySQL. For more details see: https://github.com/vitessio/vitess/pull/14502 diff --git a/content/en/docs/21.0/reference/vreplication/img/VReplicationFlow.png b/content/en/docs/21.0/reference/vreplication/img/VReplicationFlow.png new file mode 100644 index 0000000000000000000000000000000000000000..9f4985563d1985030b3f7a3459fbc16ac26bdb84 GIT binary patch literal 31635 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 literal 0 HcmV?d00001 diff --git a/content/en/docs/21.0/reference/vreplication/img/VStream.svg b/content/en/docs/21.0/reference/vreplication/img/VStream.svg new file mode 100644 index 000000000..47b54d4a1 --- /dev/null +++ b/content/en/docs/21.0/reference/vreplication/img/VStream.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/content/en/docs/21.0/reference/vreplication/internal/_index.md b/content/en/docs/21.0/reference/vreplication/internal/_index.md new file mode 100644 index 000000000..4f9a0179a --- /dev/null +++ b/content/en/docs/21.0/reference/vreplication/internal/_index.md @@ -0,0 +1,8 @@ +--- +title: Internals +description: Selected vreplication-related design docs and implementation details +weight: 1000 +skip_sections: true +aliases: ['/docs/reference/vreplication/internal'] +--- + diff --git a/content/en/docs/21.0/reference/vreplication/internal/cutover.md b/content/en/docs/21.0/reference/vreplication/internal/cutover.md new file mode 100644 index 000000000..40862b377 --- /dev/null +++ b/content/en/docs/21.0/reference/vreplication/internal/cutover.md @@ -0,0 +1,328 @@ +--- +title: How Traffic Is Switched +description: How Vitess signals traffic cutover for Reshard and MoveTables +weight: 2 +aliases: ['/docs/design-docs/vreplication/cutover/'] +--- + +# Related Persistent Vitess Objects + +{{< info >}} +As the objects or keys noted below are stored in [the topo server](../../../features/topology-service/) and +cached locally, the processes involved will refresh their topo data throughout the cutover process. For example, each +tablet on the source and target shards that are involved in a [VReplication](../../) workflow +will refresh their topo data multiple times as the state of things transition during the cutover. If we are *not* able +to confirm that all tablets involved in a VReplication worfklow are able to refresh their topo data then the cutover +command — e.g. [`vtctldclient SwitchTraffic`](../../switchtraffic) — will cancel the operation +and return an error indicating which tablet(s) are unhealthy (including for `--dry-run` executions). +{{< /info >}} + +## VSchema + +A [VSchema](../../../../concepts/vschema/) allows you to describe how data is organized within keyspaces and shards. + +## Shard Info + +The [`global` topo](../../../features/topology-service/#global-vs-local) contains +one [`Shard`](../../../features/topology-service/#shard) key per keyspace which then contains one key per +shard that has been created within the keyspace. For each shard that is healthy there is an +attribute `is_primary_serving` which is set to true. The other shards which have been created but are still not healthy +and serving within the keyspace will not have this attribute set. Here is an example shard info record from an unsharded +keyspace named commerce: + +```bash +$ vtctldclient --server=localhost:15999 GetTopologyPath /global/keyspaces/commerce/shards/0/Shard +{ + "name": "Shard", + "path": "/global//keyspaces/commerce/shards/0/Shard", + "data": "primary_alias:{cell:\"zone1\" uid:101} primary_term_start_time:{seconds:1697055542 nanoseconds:430056000} is_primary_serving:true", + "children": [] +} +``` + +## SrvKeyspace + +Each cell has a [`SrvKeyspace`](../../../features/topology-service/#srvkeyspace) key in +the [`local` topo](../../../features/topology-service/#global-vs-local) (per cell info) for each keyspace. For +each tablet type (e.g. `PRIMARY` or `REPLICA`) there is one `partitions` object. The `partitions` objects contain all of the +current shards in the keyspace. For sharded keyspaces, the tablets which are healthy and serving have a key range specified +for that shard. + +Also the primary can contain a `query_service_disabled` attribute which is set to `true` during resharding cutovers. +This tells the primary in that shard to reject any queries made to it, as a signal to vtgate in case vtgate routes +queries to this primary during the cutover or before it discovers the new serving graph. Here is an example using the +same unsharded commerce keyspace and here we specify the `--cell` flag so that cell's topo base path — stored in +its `CellInfo` record in the `global` topo — is used: + +```bash +$ vtctldclient --server=localhost:15999 GetTopologyPath /global/cells/zone1/CellInfo +{ + "name": "CellInfo", + "path": "/global/cells/zone1/CellInfo", + "data": "server_address:\"localhost:2379\" root:\"/vitess/zone1\"", + "children": [] +} + +$ vtctldclient --server=localhost:15999 GetTopologyPath /zone1/keyspaces/commerce/SrvKeyspace +{ + "name": "SrvKeyspace", + "path": "/zone1/keyspaces/commerce/SrvKeyspace", + "data": "partitions:{served_type:PRIMARY shard_references:{name:\"0\"}} partitions:{served_type:REPLICA shard_references:{name:\"0\"}} partitions:{served_type:RDONLY shard_references:{name:\"0\"}}", + "children": [] +} +``` + +## Routing Rules + +[Routing Rules](../../../features/schema-routing-rules) are stored in the `RoutingRules` key within +the `global` topo. Routing Rules contain a list of table-specific routes. You can route a table for all or specific +tablet types to another table in the same or different keyspace. Here is an example using the same commerce keyspace +where we have an active [`MoveTables`](../../../vreplication/movetables/) workflow to move tables to the +customer keyspace but we have not switched any traffic yet: + +```bash +$ vtctldclient --server=localhost:15999 GetTopologyPath /global/RoutingRules +{ + "name": "RoutingRules", + "path": "/global/RoutingRules", + "data": "rules:{from_table:\"customer.customer\" to_tables:\"commerce.customer\"} rules:{from_table:\"commerce.customer@rdonly\" to_tables:\"commerce.customer\"} rules:{from_table:\"corder\" to_tables:\"commerce.corder\"} rules:{from_table:\"corder@replica\" to_tables:\"commerce.corder\"} rules:{from_table:\"corder@rdonly\" to_tables:\"commerce.corder\"} rules:{from_table:\"customer.corder\" to_tables:\"commerce.corder\"} rules:{from_table:\"customer\" to_tables:\"commerce.customer\"} rules:{from_table:\"customer@rdonly\" to_tables:\"commerce.customer\"} rules:{from_table:\"customer.corder@replica\" to_tables:\"commerce.corder\"} rules:{from_table:\"commerce.customer@replica\" to_tables:\"commerce.customer\"} rules:{from_table:\"customer.customer@replica\" to_tables:\"commerce.customer\"} rules:{from_table:\"customer.customer@rdonly\" to_tables:\"commerce.customer\"} rules:{from_table:\"commerce.corder@rdonly\" to_tables:\"commerce.corder\"} rules:{from_table:\"customer@replica\" to_tables:\"commerce.customer\"} rules:{from_table:\"commerce.corder@replica\" to_tables:\"commerce.corder\"} rules:{from_table:\"customer.corder@rdonly\" to_tables:\"commerce.corder\"}", + "children": [] +} +``` + +
+ +{{< info >}} +In practice you would instead typically view the routing rules via the +dedicated [`GetRoutingRules`](../../../programs/vtctldclient/vtctldclient_getroutingrules/) +vtctl client command which will return the rules for all keyspaces in the topo. +{{< /info >}} + +# How VTGate Routes a Query + +This section walks through a simplified version of the logic used to determine which keyspace and table vtgate will route +a simple query of the form `select * from t1 where id = 1` (a _read_ query) or `insert into t1 (id, val) values (1,'abc')` +(a _write_ query). + +1. Check to see if `t1` has an appropriate routing rule defined. If so, use the specified target table as an alias for `t1`. +2. Locate the keyspace for `t1` using the [`VSchema`](../../../features/vschema/). +3. For a non-sharded keyspace locate the appropriate tablet (`PRIMARY`, by default) from the (cached) `SrvKeyspace` `local` +(per cell) topo record. +4. For a sharded keyspace the `SrvKeyspace` record is used to find the currently active shards. This is done by checking +the list of partitions for the specific tablet type selected for the query (`PRIMARY`, by default, for both reads and writes) +and selecting the ones whose `query_service_disabled` field is *not* set and whose `is_primary_serving` value is true. +5. Finally, based on the [`VIndex`](../../../features/vindexes/) defined for the table from the cached +[`VSchema`](../../../features/vschema/) (stored in the `global` topo), the shard for the relevant row is computed based +on the keyrange to which the id is mapped to using the declared [`VIndex` function/type](../../../features/vindexes/#predefined-vindexes). + +# Changes Made to the Topo When Traffic Is Switched + +This document outlines the steps involved in the cutover process +of [`MoveTables`](../../movetables/) and [`Reshard`](../../reshard/) +workflows when traffic is switched from the source tables/shards to the target tables/shards. We use the resharding flow +provided in the [local examples](../../../../get-started/local/) and show the relevant snippets from the topo for each step +in the workflow. + +{{< info >}} +Items in italics are topo keys and the following snippet the value of the key +{{< /info >}} + +## What Happens When a Reshard Is Cutover + +For brevity we only show the records for the `80-` shard. There will be similar records for the `-80` shard. + +#### Before Resharding, After -80/80- Shards Are Created + +Only shard `0` has `is_primary_serving` set to true. The `SrvKeyspace` record only has references to `0` for both `PRIMARY` +and `REPLICA` tablet types. + +*global/keyspaces/customer/shards/0/Shard* + +```proto +primary_alias:{cell:"zone1" uid:200} +primary_term_start_time:{seconds:1627465761 nanoseconds:600070156} +is_primary_serving:true +``` + +
+ +*global/keyspaces/customer/shards/80-/Shard* + +```proto +primary_alias:{cell:"zone1" uid:400} +primary_term_start_time:{seconds:1627465833 nanoseconds:536524508} +key_range:{start:"\x80"} +``` + +
+ +*zone1/keyspaces/customer/SrvKeyspace* + +```proto +partitions:{served_type:PRIMARY shard_references:{name:"0"}} +partitions:{served_type:REPLICA shard_references:{name:"0"}} +``` + +### After Replica Traffic Is Switched Using `SwitchTraffic` (Previously Known as SwitchReads) + +Shard `0` still has the `is_primary_serving` set as true. The primary partition is still the same. + +The replica partition has the following changes: + +* Two more shard_references for `-80` and `80-` +* Key ranges are specified for these shards +* The key range for shard `0` has been removed +* `query_service_disabled` is set to true for shard `0` + +*global/keyspaces/customer/shards/0/Shard* + +```proto +primary_alias:{cell:"zone1" uid:200} +primary_term_start_time:{seconds:1627466189 nanoseconds:587021377} +is_primary_serving:true +``` + +
+ +*global/keyspaces/customer/shards/80-/Shard* + +```proto +primary_alias:{cell:"zone1" uid:400} +primary_term_start_time:{seconds:1627466263 nanoseconds:16201490} +key_range:{start:"\x80"}`` +``` + +
+ +_zone1/keyspaces/customer/SrvKeyspace_ + +```proto +partitions:{served_type:PRIMARY shard_references:{name:"0"}} + +partitions:{served_type:REPLICA + shard_references:{name:"-80" key_range:{end:"\x80"}} + shard_references:{name:"80-" key_range:{start:"\x80"}} + shard_tablet_controls:{name:"0" query_service_disabled:true} + shard_tablet_controls:{name:"-80" key_range:{end:"\x80"}} + shard_tablet_controls:{name:"80-" key_range:{start:"\x80"}} +} +``` + +
+ +#### After Primary Traffic Is Switched Using `SwitchTraffic` (Previously Known as SwitchWrites) + +* `is_primary_serving` is removed from shard `0` +* `is_primary_serving` is added to shards `-80` and `80-` +* In the primary partition the shards `-80` and `80-` are added with their associated key ranges +* In the primary partition the key range for shard `0` is removed +* The replica partition remains the same as in the previous step + +*global/keyspaces/customer/shards/0/Shard* + +```proto +primary_alias:{cell:"zone1" uid:200} +primary_term_start_time:{seconds:1627466636 nanoseconds:405646818} +``` + +
+ +*global/keyspaces/customer/shards/80-/Shard* + +```proto +primary_alias:{cell:"zone1" uid:400} +primary_term_start_time:{seconds:1627466710 nanoseconds:579634511} +key_range:{start:"\x80"} +is_primary_serving:true +``` + +
+ +*zone1/keyspaces/customer/SrvKeyspace* + +```proto +partitions:{served_type:PRIMARY + shard_references:{name:"-80" key_range:{end:"\x80"}} + shard_references:{name:"80-" + key_range:{start:"\x80"}} +} {name:"0"} + +partitions:{served_type:REPLICA + shard_references:{name:"-80" key_range:{end:"\x80"}} + shard_references:{name:"80-" key_range:{start:"\x80"}}} + shard_tablet_controls:{name:"0" query_service_disabled:true} + shard_tablet_controls:{name:"-80" key_range:{end:"\x80"}} + shard_tablet_controls:{name:"80-" key_range:{start:"\x80"}} +} +``` + +## What Happens When a MoveTables Workflow Is Cutover + +#### Before MoveTables Is Initiated + +The [`VSchema`](../../../features/vschema/) for the source keyspace contains the table name, so vtgate routes queries to that +keyspace. + +#### During MoveTables + +Both the source and target now contain the tables and both [`VSchemas`](../../../features/vschema/) refer to them. However we +have routing rules that map the tables for each tablet type from the target keyspace to the source keyspace. + +*global/RoutingRules* + +```proto +rules:{from_table:"customer" to_tables:"commerce.customer"} +rules:{from_table:"customer.customer" to_tables:"commerce.customer"} +rules:{from_table:"customer@replica" to_tables:"commerce.customer"} +rules:{from_table:"customer.customer@replica" to_tables:"commerce.customer"} +``` + +
+ +#### On Switching Replica Traffic to Target + +The routing rules for replica targeted reads are updated to map the table on the source to the target. + +*global/RoutingRules* + +```proto +rules:{from_table:"customer.customer" to_tables:"commerce.customer"} rules:{from_table:"commerce.customer@replica" to_tables:"customer.customer"} +rules:{from_table:"customer" to_tables:"commerce.customer"} +rules:{from_table:"customer@replica" to_tables:"customer.customer"} +``` + +
+ +#### On Switching Primary Traffic + +The routing rules for default read-write traffic are updated to map the table on the source to the target. In addition the +tables are added to the “denylist” on the source keyspace which `vttablet` uses to reject queries for these tables on the +old/inactive shards. + +*global/RoutingRules* + +```proto +rules:{from_table:"commerce.customer@replica" to_tables:"customer.customer"} +rules:{from_table:"customer.customer@replica" to_tables:"customer.customer"} +rules:{from_table:"commerce.customer" to_tables:"customer.customer"} +rules:{from_table:"customer" to_tables:"customer.customer"} +``` + +
+ +*global/keyspaces/commerce/shards/0/Shard* + +```proto +primary_alias:{cell:"zone1" uid:100} +primary_term_start_time:{seconds:1627477340 nanoseconds:740407602} +tablet_controls:{tablet_type:PRIMARY denylisted_tables:"customer"} +is_primary_serving:true +``` + +# Miscellaneous Notes + +* In VReplication workflows, cutovers are performed manually by the user executing the `SwitchTraffic` and `ReverseTraffic` +actions e.g. for a [`MoveTables`](../../movetables/) or [`Reshard`](../../reshard/) vtctl +client command. +* When traffic for `REPLICA` and `RDONLY` tablets is switched not all read traffic is switched: primary/default reads will +still be served from the source shards, until `PRIMARY` tablet traffic is also switched. diff --git a/content/en/docs/21.0/reference/vreplication/internal/keys.md b/content/en/docs/21.0/reference/vreplication/internal/keys.md new file mode 100644 index 000000000..6cb62f6f1 --- /dev/null +++ b/content/en/docs/21.0/reference/vreplication/internal/keys.md @@ -0,0 +1,459 @@ +--- +title: Role of Table Keys in VReplication +description: Uses and requirements for primary and unique keys in source and target tables in VReplication Workflows +weight: 3 +aliases: ['/docs/design-docs/vreplication/keys/'] +--- + +# The Use of Unique Keys + +A VReplication stream copies data from a table on a source tablet to a table on a target tablet. In some cases, the two +tablets may be the same one, but the stream is oblivious to such nuance. VReplication needs to be able to copy existing +rows from the source table to the target table, as well as identify binary log events from the source tablet and +apply them to the target table. To that effect, VReplication needs to be able to uniquely identify rows, so that it +can apply a specific `UPDATE` on the correct row, or so that it knows that all rows _up to a given row_ have been copied. + +Thus each row needs to be uniquely identifiable. In the relational model, this is trivially done by utilizing a `UNIQUE KEY`s, +preferably `PRIMARY KEY`s. A `UNIQUE KEY` made up of non-`NULL`able columns is considered a `PRIMARY KEY` equivalent (PKE) +for this purpose. + +Typically, both the source and the target tables have a similar structure and the same keys. + +In fact, in the most common use case, both tables will have the same `PRIMARY KEY` covering the same set of columns in +the same order. This is the default assumption and expectation by VReplication. But this doesn't have to be the case, +and it is possible to have different keys on the source and the target table. + +## Which Keys Are Eligible? + +Any `UNIQUE KEY` that is non-`NULL`able potentially qualifies. A `NULL`able `UNIQUE KEY` is a key that covers one or +more `NULL`able columns. It doesn't matter if column values do or do not actually contain `NULL`s. If a column is `NULL` +able, then a `UNIQUE KEY` that includes that column is not eligible. + +`PRIMARY KEY`s are by definition always non-`NULL`able. A `PRIMARY KEY` (PK) is typically the best choice. It gives best +iteration/read performance on InnoDB tables, as those are clustered by PK (index organized tables). + +`PRIMARY KEY` aside, `VReplication` prioritizes keys that utilize e.g. integers rather than characters, and more generally +prioritizes smaller data types over larger data types. + +However, not all eligible `UNIQUE KEY`s, or even `PRIMARY KEY`s are usable for all VReplication streams, as described +below. + +## Comparable Rows + +VReplication needs to be able to determine, given a row in the source table, which row it maps to in the target table. + +In the case both tables share the same `PRIMARY KEY`, the answer is trivial: given a row from the source table, take the +PK column values (say the table has `PRIMARY KEY(col1, col2)`), and compare with/apply to the target table via +`... WHERE col1= AND col2=`. + +However, other scenarios are also valid. Consider an OnlineDDL operation that modifies the `PRIMARY KEY` as +follows: `DROP PRIMARY KEY, ADD PRIMARY KEY(col1)`. On the source table, a row is identified by `col1, col2`. On the +target table, a row is only identifiable by `col1`. This scenario still feels comfortable: all we need to do when we +apply e.g. an `UPDATE` statement on the target table is to drop `col2` from the statement: `... WHERE col1=`. + +_Note that it is the user's responsibility to make sure the data will comply with the new constraints. If not, +VReplication will fail the operation._ + +But consider the opposite case, there's a `PRIMARY KEY(col1)` and an OnlineDDL operation turns it into +`PRIMARY KEY(col1, col2)`. Now we need to apply changes using `... WHERE col1= AND col2=`. But `col2` is +not part of the source `PRIMARY KEY`. + +An extreme case is when the keys on the source table and the target table do not share _any columns_ between them. Say +the source table has `PRIMARY KEY(col1)` and the target table has `PRIMARY KEY(col2)` and with no other potential keys. +We still need to identify which row in the source table maps to which row in the target table. VReplication still supports +this scenario. + +Yet another complication is when columns are renamed along the way. Consider an +`ALTER TABLE CHANGE COLUMN col2 col_two INT UNSIGNED ...` statement. A row on the source table is identified by +`col1, col2`, but on the target table it is identified by `col1, col_two`. + +Let's now discuss what the exact requirements are for unique keys, and then discuss the implementation. + +## Requirements + +To be able to create a VReplication stream between the source table and target table: + +- The source table must have a non-`NULL`able `UNIQUE/PRIMARY` key (PK or PKE) whose columns all exist in the target + table (possibly under different names) +- The target table must have a non-`NULL`able `UNIQUE/PRIMARY` key whose columns all exist in the source table (possibly + under different names) +- Except in the trivial case where both tables share the same `PRIMARY KEY` (of the same columns in the same order), + VReplication can automatically determine which keys to utilize (more on this later) + +To clarify, it is **OK** if: + +- Keys in the source table and the target table go by different names +- Chosen key in the source table and chosen key in the target table do not share any columns +- Chosen key in the source table and chosen key in the target table share some or all columns +- Chosen key in the source table and chosen key in the target table share some or all columns, but in a different order +- There are keys in the source table that cover columns not present in the target table +- There are keys in the target table that cover columns not present in the source table +- There are `NULL`able columns in the source and the target table +- There are `NULL`able keys in the source and the target table + +All it takes is _one_ viable key that can be used to uniquely identify rows in the source table, and one such viable key +in the target table to allow VReplication to work. + +### Examples of Valid Cases + +#### Source Table and Target Table Are the Same + +```sql +CREATE TABLE `entry` ( + `id` int NOT NULL, + `uuid` varchar(40) DEFAULT NULL, + `ts` timestamp NULL DEFAULT NULL, + `customer_id` int NOT NULL, + PRIMARY KEY (`id`) +) +``` + +
+ +The above is a trivial scenario. + +#### Source Table and Target table Share the Same PRIMARY KEY + +```sql +CREATE TABLE `source` ( + `id` int NOT NULL, + `uuid` varchar(40) DEFAULT NULL, + `ts` timestamp NULL DEFAULT NULL, + `customer_id` int, + PRIMARY KEY (`id`), + KEY ts_idx(`ts`) +) + +CREATE TABLE `target` ( + `id` int NOT NULL, + `uuid` varchar(40) DEFAULT NULL, + `ts` timestamp NULL DEFAULT NULL, + `customer_id` int NOT NULL, + PRIMARY KEY (`id`) +) +``` + +
+ +The differences in structure are interesting but irrelevant to VReplication's ability to copy the data. + +#### Subset PRIMARY KEY + +```sql +CREATE TABLE `source` ( + `id` int NOT NULL, + `uuid` varchar(40) DEFAULT NULL, + `ts` timestamp NULL DEFAULT NULL, + `customer_id` int NOT NULL, + PRIMARY KEY (`id`, `customer_id`) +) + +CREATE TABLE `target` ( + `id` int NOT NULL, + `uuid` varchar(40) DEFAULT NULL, + `ts` timestamp NULL DEFAULT NULL, + `customer_id` int NOT NULL, + PRIMARY KEY (`id`) +) +``` + +
+ +#### Superset PRIMARY KEY + +```sql +CREATE TABLE `source` ( + `id` int NOT NULL, + `uuid` varchar(40) DEFAULT NULL, + `ts` timestamp NULL DEFAULT NULL, + `customer_id` int NOT NULL, + PRIMARY KEY (`id`) +) + +CREATE TABLE `target` ( + `id` int NOT NULL, + `uuid` varchar(40) DEFAULT NULL, + `ts` timestamp NULL DEFAULT NULL, + `customer_id` int NOT NULL, + PRIMARY KEY (`id`, `customer_id`) +) +``` + +
+ +#### Different PRIMARY KEYs + +```sql +CREATE TABLE `source` ( + `id` int NOT NULL, + `uuid` varchar(40) NOT NULL, + `ts` timestamp NULL DEFAULT NULL, + `customer_id` int NOT NULL, + PRIMARY KEY (`id`) +) + +CREATE TABLE `target` ( + `id` int NOT NULL, + `uuid` varchar(40) NOT NULL, + `ts` timestamp NULL DEFAULT NULL, + `customer_id` int NOT NULL, + PRIMARY KEY (`uuid`) +) +``` + +
+ +No columns are shared between the `PRIMARY KEY`s in the above. However: + +- `id`, covered by `source`'s PK, is found in `target` +- `uuid`, covered by `target`'s PK, is found in `source` + +#### Mixed Keys + +```sql +CREATE TABLE `source` ( + `uuid` varchar(40) NOT NULL, + `ts` timestamp NULL DEFAULT NULL, + `customer_id` int NOT NULL, + PRIMARY KEY (`uuid`) +) + +CREATE TABLE `target` ( + `id` int NOT NULL, + `uuid` varchar(40) NOT NULL, + `ts` timestamp NULL DEFAULT NULL, + `customer_id` int NOT NULL, + PRIMARY KEY (`id`) + UNIQUE KEY uuid_idx(`uuid`) +) +``` + +
+ +The only eligible solution in the above is: + +- Use `source`'s `PRIMARY KEY` (the column `uuid` is found in `target`) +- Use `target`'s `uuid_idx` key (again using column `uuid` which is found in `source`). + +`target`'s `PRIMARY KEY` is not valid because the covered column `id` does not exist in `source`. + +Incidentally, in the above, the chosen keys differ by name, but share the same columns (`uuid`). + +### Examples of Invalid Cases + +#### NULLable Columns + +```sql +CREATE TABLE `source` ( + `id` int NOT NULL, + `uuid` varchar(40) DEFAULT NULL, + `ts` timestamp NULL DEFAULT NULL, + `customer_id` int NOT NULL, + PRIMARY KEY (`id`) +) + +CREATE TABLE `target` ( + `id` int NOT NULL, + `uuid` varchar(40) DEFAULT NULL, + `ts` timestamp NULL DEFAULT NULL, + `customer_id` int NOT NULL, + UNIQUE KEY (`uuid`) +) +``` + +
+ +The only `UNIQUE KEY` on `target` is `NULL`able, hence _not_ eligible. + +#### Missing Columns + +```sql +CREATE TABLE `source` ( + `uuid` varchar(40) NOT NULL, + `ts` timestamp NULL DEFAULT NULL, + `customer_id` int NOT NULL, + PRIMARY KEY (`uuid`) +) + +CREATE TABLE `target` ( + `id` int NOT NULL, + `uuid` varchar(40) NOT NULL, + `ts` timestamp NULL DEFAULT NULL, + `customer_id` int NOT NULL, + PRIMARY KEY (`id`) +) +``` + +
+ +`target` only has one possible key, the `PRIMARY KEY`, covering `id`. But `id` is not found in `source`. + +## Configuring The Stream + +If both source and target table share the same `PRIMARY KEY` (covering the same columns in the same order) then there's +nothing to be done. VReplication will pick `PRIMARY KEY` on both ends by default. + +In all other cases, VReplication must determine which keys are involved and which ones to use. + +### Example 1 + +Let's begin again as a trivial example, both tables have same `PRIMARY KEY`s: + +```sql +CREATE TABLE `corder` ( + `order_id` bigint NOT NULL AUTO_INCREMENT, + `customer_id` bigint DEFAULT NULL, + `sku` varbinary(128) DEFAULT NULL, + `price` bigint DEFAULT NULL, + PRIMARY KEY (`order_id`) +) +``` + +
+ +And even though we don't _have to_, here's how we could manually configure the VReplication workflow definition +(prettified for readability): + +```proto +keyspace:"commerce" shard:"0" filter:{ + rules:{ + match:"corder" + filter:"select `order_id` as `order_id`, `customer_id` as `customer_id`, `sku` as `sku`, `price` as `price` from `corder`" + source_unique_key_columns:"order_id" + target_unique_key_columns:"order_id" + source_unique_key_target_columns:"order_id" + } +} +``` + +
+ +In the above: + +- `source_unique_key_columns` is the (comma delimited) list of columns covered by the chosen key on source table +- `target_unique_key_columns` is the (comma delimited) list of columns covered by the chosen key on target table +- `source_unique_key_target_columns` is the (comma delimited) list of column names in target table, which map + to `source_unique_key_columns`. This mapping is necessary because columns may change their names. + +### Example 2 + +Again both the source and the target table share same `PRIMARY KEY`, but this time it covers two columns: + +```sql +CREATE TABLE `shipment` ( + `order_id` int NOT NULL, + `customer_id` int NOT NULL, + `ts` timestamp NULL DEFAULT NULL, + PRIMARY KEY (`order_id`,`customer_id`) +) +``` + +```proto +keyspace:"commerce" shard:"0" filter:{ + rules:{ + match:"shipment" + filter:"select `order_id` as `order_id`, `customer_id` as `customer_id`, `ts` as `ts` from `shipment`" + source_unique_key_columns:"order_id,customer_id" + target_unique_key_columns:"order_id,customer_id" + source_unique_key_target_columns:"order_id,customer_id" + } +} +``` + +
+ +Not much changed from the previous example, just note how we comma separate `"order_id,customer_id"`. + +### Example 3 + +Continuing the previous example, we now rename a column the target table: + +```sql +CREATE TABLE `shipment` ( + `order_id` int NOT NULL, + `cust_id` int NOT NULL, + `ts` timestamp NULL DEFAULT NULL, + PRIMARY KEY (`order_id`,`cust_id`) +) +``` + +```proto +keyspace:"commerce" shard:"0" filter:{ + rules:{ + match:"shipment" + filter:"select `order_id` as `order_id`, `customer_id` as `cust_id`, `ts` as `ts` from `shipment`" + source_unique_key_columns:"order_id,customer_id" + target_unique_key_columns:"order_id,cust_id" + source_unique_key_target_columns:"order_id,cust_id" + } +} +``` + +
+ +Note: + +- `source_unique_key_columns` indicates the names of columns on the source table +- `target_unique_key_columns` indicates the names of columns on the target table +- `source_unique_key_target_columns` repeats `source_unique_key_columns`, but replaces `customer_id` with `cust_id` + +## Automation + +OnlineDDL has a mechanism to automatically analyze the differences between source and target tables, evaluate eligible +keys, choose the best keys on source and target tables, and populate the filter's +`source_unique_key_columns`, `target_unique_key_columns`, and `source_unique_key_target_columns` fields. Indeed, +OnlineDDL operations are most susceptible to differences in keys. The user can also supply their chosen values as an +override — using those fields in the workflow definition — in the rare case it's needed. + +VReplication more broadly will automatically use the most efficient `PRIMARY KEY` equivalent or PKE (non-`NULL`able unique +key) when there's no defined `PRIMARY KEY` on the table. + +## Implementation + +At a high level, this is how VReplication is able to work with different keys/columns between the source and target. + +Originally, VReplication was only designed to work with identical `PRIMARY KEY`s. If not specified, VReplication assumed +the source table's `PRIMARY KEY` _can be used_ on the target table, and that the target table's `PRIMARY KEY` is applied +to the source table. If not, it would error out and the workflow would fail. + +With the introduction of mechanisms to automatically determine the optimal key to use and of +the `source_unique_key_columns`, `target_unique_key_columns`, and `source_unique_key_target_columns` fields for more +fine-grained control, VReplication changes its behavior as needed. + +#### Notes About The Code + +Much of the code uses "PK" terminology. With the introduction of _any_ unique key utilization the "PK" terminology +becomes incorrect. However, to avoid mass rewrites we kept this terminology, and wherever VReplication discusses +a `PRIMARY KEY` or pkColumns, etc., it may refer to a non-PK Unique Key (PKE). + +### Streamer + +Streaming is done using the `source_unique_key_columns` value if present. When present, `rowstreamer` trusts the +information in `source_unique_key_columns` to be correct. It does not validate that there is indeed a valid unique key +covering those columns, it only validates that the columns exist. When a `source_unique_key_columns` value is not +present, `rowstreamer` uses the `PRIMARY KEY` columns if they exist, otherwise it will determine the best +available `PRIMARY KEY` equivalent if one exists, and lastly if none of these are available it will use all of the +columns in the table. + +The streamer iterates the table by the chosen index's column order. It then tracks its progress in `lastPk` as if this +was indeed a true `PRIMARY KEY`. + +### Copier + +VCopier receives rows from the `rowstreamer` in the chosen index's column order. It complies with the streamer's ordering. +When tracking progress in `_vt.copy_state` it uses `lastPk` values from the streamer, which means it uses the same index +columns as the streamer in that order. + +### Player + +VPlayer adheres to both `source_unique_key_columns` and `target_unique_key_columns` when present. If not present, again +it attempts to use the `PRIMARY KEY` columns if they exist, otherwise it will determine the best available `PRIMARY KEY` +equivalent if one exists, and lastly if none of these are available it will use all of the columns in the table. + +- `TablePlan`'s `isOutsidePKRange()` function needs to compare values according to `rowstreamer`'s ordering, therefore + uses the chosen index columns in order. +- `tablePlanBuilder`'s `generateWhere()` function uses the target table's `target_unique_key_columns`, and then also + appends any supplemental columns from `source_unique_key_target_columns` not included in `target_unique_key_columns` + when they are present. If not present, again it attempts to use the `PRIMARY KEY` columns if they exist, otherwise it + will determine the best available `PRIMARY KEY` equivalent if one exists, and lastly if none of these are available it + will use all of the columns in the table. diff --git a/content/en/docs/21.0/reference/vreplication/internal/life-of-a-stream.md b/content/en/docs/21.0/reference/vreplication/internal/life-of-a-stream.md new file mode 100644 index 000000000..278635c87 --- /dev/null +++ b/content/en/docs/21.0/reference/vreplication/internal/life-of-a-stream.md @@ -0,0 +1,174 @@ +--- +title: Life of a Stream +description: How VReplication replicates data +weight: 1 +aliases: ['/docs/design-docs/vreplication/life-of-a-stream/'] +--- + +### Introduction + +When a VReplication workflow runs, data is copied from source to target shards. Each target `PRIMARY` tablet runs one +vreplication stream (`vstream`) for each source shard that the target's +[keyrange](../../../features/sharding/#key-ranges-and-partitions) overlaps with. + +The diagram below outlines how one such stream operates. VReplication can be asked to start from a specific +[`GTID`](https://dev.mysql.com/doc/refman/en/replication-gtids-concepts.html) or from the start. When starting from a +[`GTID`](https://dev.mysql.com/doc/refman/en/replication-gtids-concepts.html) the _replication_ mode is used where it +streams events from the binlog. + +![VReplication Flow](/img/VReplicationFlow.png) + +#### Full Table Copy + +If the entire table data is requested then the simple streaming done by the _replication_ mode can create an avalanche +of events (think 100s of millions of rows). Moreover, and more importantly, it is highly likely that necesasry older +binlogs are no longer available. + +So a _copy/catchup_ mode is initiated first: data in the tables are copied over in a consistent manner using bulk +inserts. Once we have copied enough data so that we are close enough to the current position (when replication lag is +low) it switches over to, and forever stays in, the _replication_ mode. All future replication is done only by +streaming binlog events. + +While we may have multiple database sources in a workflow each `vstream` has just one source and one target. The source is +always a `vttablet` (and hence one `mysqld` instance). The target could be another `vttablet` (when resharding) or a +streaming gRPC response (for [`vtgate` `vstream` API](../../vstream/) clients). + +#### Transformation and Filtering + +Note that for all steps the data selected from the source will only be from the tables specified +in the [`Match`](https://github.com/vitessio/vitess/blob/main/proto/binlogdata.proto#LL128C5) field of the Rule +specification of the VReplication workflow. Furthermore, if a +[`Filter`](https://github.com/vitessio/vitess/blob/main/proto/binlogdata.proto#LL133C5) is specified for a table it will +be applied before being sent to the target. Columns may also be transformed based on the Filter’s `SELECT` clause. + +#### Source and Sink + +Each stream has two actors: the target initiates streaming by making gRPC calls to the source tablet and the source +tablet sources the data by connecting to its underlying `mysqld` server as a replica (while replicating) or using SQL +queries (in the copy phase) and streams it to the target. The target takes appropriate action: in case of resharding it +will convert the events into CRUD SQL statements and apply them to the target database. In case of [`vtgate` `vstream` +API](../../vstream/) clients the events are forwarded by `vtgate` to the client. + +Note that the target always pulls data. If the source pushes data, there are chances of buffer overruns if the target is +not able to process them in time. For example, in resharding workflows we need to convert the events to SQL `INSERT` +statements and execute them on the target's mysqld instance, which are usually much slower than just selecting data on +the source. + +### Modes, in Detail + +#### Replicate + +This is the easiest to understand. The source stream just acts like a MySQL replica and processes events as they are +received. Events, after any necessary filtering and transformation, are sent to the target. Replication runs +continuously with short sleeps when there are no more events to source. Periodic heartbeats are sent to the target to +signal liveness. You will see this reflected with the `Running` state for the workflow. + +#### Initialize + +Initialize is called at the start of the copy phase. For each table to be copied an entry is created in the internal +`_vt.copy_state` table with a null primary key (PK). As each table copy is completed the related entries are deleted +and when there are no more entries for this workflow the copy phase is considered complete and the workflow moves into +the replication mode which you will see reflected with the `Running` state for the workflow. + +#### Copy + +Copy works on one table at a time. The source selects a set of rows from the table, for primary keys greater than the +ones copied so far, using a consistent snapshot. This results in a stream of rows to be sent to the target which +generates a bulk `INSERT` for these rows. You will see this reflected with the `Copying` state for the workflow. + +However, there are a couple of factors which complicate our story: + +* Each copy selects all rows until the current position of the binlog, but, +* Since transactions continue to be applied (presuming the database is online) the GTID position is continuously +moving forward + +Consider this example: + +We have two tables `X` and `Y`. Each table has 20 rows and we copy 10 rows at a time. (The queries below simplified +for readability). + +The queries for the copy phase of `X` will be: + +```sql +T1: select * from X where pk > 0 limit 10; GTID: 100, Last PK 10 + + send rows to target + +T2: select * from X where pk > 10 limit 10; GTID: 110, Last PK 20 + + send rows to target +``` + +
+ +There is a gotcha here: onsider that there are 10 new transactions or GTIDs between times T1 and T2. Some of these +can potentially modify the rows returned from the query at T1. Hence if we just return the rows from T2 (which have +only rows from PK 11 to 20) then we will have an inconsistent state on the target: the updates to rows with PK +between 1 and 10 will not be present. + +This means that we need to first stream the events between GTIDs 100 and 110 for primary keys between 1 and 10 first +and then do the second select: + +```sql +T1: select * from X where pk > 0 limit 10; GTID: 100, Last PK 10 + + send rows to target + +T2: replicate from 100 to current position (110 from previous example), + + only pass events for pks 1 to 10 of X + +T3: select * from X where pk > 10 limit 10; GTID: 112, Last PK 20 + + send rows to target +``` + +
+ +Another gotcha: note that at time T3 when we selected the PKs from 11 to 20 the GTID position could have moved further! +This could be due to transactions that were applied between T2 and T3. So if we just applied the rows from T3 we would +still have an inconsistent state, if transactions 111 and 112 affected the rows from pks 1 to 10. + +This leads us to the following flow: + +```sql +T1: select * from X where pk > 0 limit 10; GTID: 100, Last PK 10 + + send rows to target + +T2: replicate from 100 to current position (110 from previous example), + + only pass events for pks 1 to 10 + +T3: select * from X where pk > 10 limit 10; GTID: 112, Last PK 20 + +T4: replicate from 111 to 112 + + only pass events for pks 1 to 10 + +T5: Send rows for pks 11 to 20 to target +``` + +
+ +This flow actually works and is the one used in Vitess VReplication! + +The transactions to be applied at T1 can take a long time (due to the bulk inserts). T3 (which is just a snapshot) is +quick. So the position can diverge much more at T2 than at T4. Hence, we call step T2 "Catchup" and step T4 +"Fast Forward". + +#### Catchup + +As detailed above the catchup phase runs between copy phase cycles (time limited by the +[`vreplication_copy_phase_max_duration`](../../flags/#vreplication_copy_phase_duration) flag). During the copy phase the +GTID position can move significantly ahead. So we run a catchup and fast-forward phase until we come close to the current +position — i.e. the replication lag is small. At that point we execute another Copy cycle. + +#### Fast Forward + +During the copy phase we first take a snapshot. Then we fast-forward: we replicate from the gtid position where we stopped +the Catchup to the position of the new snapshot. + +Finally once we have finished copying all the tables we proceed to the replicate or `Running` phase until our job is done: +for example if we have resharded and switched over the reads and writes to the new shards or when the +[`vstream` API](../../vstream/) client closes its connection. diff --git a/content/en/docs/21.0/reference/vreplication/internal/tracker.md b/content/en/docs/21.0/reference/vreplication/internal/tracker.md new file mode 100644 index 000000000..1aa688c12 --- /dev/null +++ b/content/en/docs/21.0/reference/vreplication/internal/tracker.md @@ -0,0 +1,184 @@ +--- +title: Schema Tracker +description: Tracking schema changes in VStreams +aliases: [] +weight: 4 +aliases: ['/user-guide/update-stream', '/docs/design-docs/vreplication/vstream/tracker/'] +--- + +# Tracking Schema Changes in VStreams + +## Motivation + +Currently, vstreams work with a single (the latest or current) database schema. On every DDL the schema engine reloads the +schema from the database engine. + +All vstreams on a tablet share a common schema engine. VStreams that are lagging can see a more recent schema than when +the older binlog events occurred. So the lagging vstreams will see an incorrect version of the schema in case DDLs were +applied in between that affect the schema of the tables involved in those lagging events. + +In addition, reloading schemas is an expensive operation. If there are multiple vstreams them each of them will separately +receive a DDL event resulting in multiple reloads for the same DDL. + +{{< info >}} +For full functionality, schema tracking relies on these non-default Vitess `vttablet` flags: +[`--watch_replication_stream`](../../flags/#watch_replication_stream) and +[`--track_schema_versions`](../../flags/#track_schema_versions). Specifically, performing a vstream from a non-PRIMARY +tablet while concurrently making DDL changes to the keyspace without one or both of these tablet options could result in +incorrect vstream results. +{{< /info >}} + +## Goals + +1. Provide a mechanism for maintaining versions of the schema +2. Reduce the number of redundant schema loads + +## Model + +We add a new `schema_version` table in the internal `_vt` database with columns, including, the `GTID` position, the +schema as of that position, and the DDL that led to this schema. Inserting into this table generates a `version` event +in the vstream. + +## Actors + +#### Schema Engine + +Schema engine gets the schema from the database and only keeps the last (latest) copy it loaded. It notifies subscribers +if the schema changes. It polls for the latest schema at intervals or can be explicitly requested to load the schema for +a tablet using the [`ReloadSchemaKeyspace`](../../../programs/vtctl/schema-version-permissions/#reloadschemakeyspace) +vtctl client command. + +#### Replication Watcher + +Replication watcher is a separate vstream that is started by the tabletserver. It notifies subscribers when it encounters +a DDL in the workflow stream. + +#### Version Tracker + +Version tracker runs on the `PRIMARY` tablet. It subscribes to the replication watcher and inserts a new row into the +`_vt.schema_version` table with the latest schema. + +#### Version Historian + +Version historian runs on both `PRIMARY` and `REPLICA` tablets and handles DDL events. For a given `GTID` it looks in its +cache to check if it has a valid schema for that `GTID`. If not, it looks up the in the `schema_version` table on `REPLICA` +tablet. If no schema is found then it provides the latest schema -- which is updated by subscribing to the schema engine’s +change notification. + +### Notes + +- Schema Engine is an existing service +- Replication Watcher is used as an optional vstream that the user can run. It doesn’t do anything user specific: it is only +used for the side-effect that a vstream loads the schema on a DDL to proactively load the latest schema + +## Basic Flow for Version Tracking + +### Primary + +#### Version Tracker: + +1. When the primary comes up the replication watcher (a vstream) is started from the current `GTID` position. The +tracker subscribes to the watcher. +1. Say, a DDL is applied +1. The watcher vstream sees the DDL and +1. Asks the schema engine to reload the schema, also providing the corresponding `GTID` position +1. Notifies the tracker of a schema change +1. Tracker stores its latest schema into the `_vt.schema_version` table associated with the given `GTID` and DDL + +#### Historian/VStreams: + +1. Historian warms its cache from the `_vt.schema_version` table when it starts +2. When the tracker inserts the latest schema into `_vt.schema_version` table, the vstream converts it into a (new) + version event +3. For every version event the vstream registers it with the historian +4. On the version event, the tracker loads the new row from the `_vt.schema_version` table +5. When a vstream needs a new `TableMap` event it asks the historian for it along with the corresponding `GTID` +6. Historian looks in its cache for a schema version for that `GTID`. If not present it provides the latest schema it + has received from the schema engine + +#### Replica + +1. Version tracker does not run: the tracker can only store versions on the `PRIMARY` since it requires writing to the +database +2. Historian functionality is identical to that on the `PRIMARY` + +## Flags + +### Primary + +Schema version snapshots are stored only on the `PRIMARY`. This is done when the Replication Watcher gets a DDL event +resulting in a `SchemaUpdated()` call. There are two independent flows here: + +1. Replication Watcher is running +2. Schema snapshots are saved to `_vt.schema_version` when `SchemaUpdated()` is called + +Point 2 is performed only when the [`--track_schema_versions`](../../flags/#track_schema_versions) `vttablet` flag is enabled. +This implies that #1 also has to happen when [`--track_schema_versions`](../../flags/#track_schema_versions) is enabled +independently of the [`--watch_replication_stream`](../../flags/#watch_replication_stream) flag. + +However if the [`--watch_replication_stream`](../../flags/#watch_replication_stream) flag is enabled but +[`--track_schema_versions`](../../flags/#track_schema_versions) is disabled we still need to run the Replication +Watcher since the user has requested it, but we do not store any schema versions. + +So the logic is: + +1. WatchReplication==true \ + => Replication Watcher is running + +2. TrackSchemaVersions==false + => SchemaUpdated is a noop + +3. TrackSchemaVersions=true + => Replication Watcher is running \ + => SchemaUpdated is handled + +The historian behavior is identical to that of the replica: of course if versions are not stored in `_vt.schema_versions` +it will always provide the latest version of the schema. + +### Replica + +Schema versions are never stored directly on `REPLICA` tablets, so SchemaUpdated is always a noop. Versions are provided +as appropriate by the historian. The historian provides the latest schema if there is no appropriate version. + +So the logic is: + +1. WatchReplication==true \ + => Replication Watcher is running + +2. TrackSchemaVersions==false || true //noop \ + => Historian tries to get appropriate schema version + +## Caveat + +Only best-effort versioning can be provided due to races between DDLs and DMLs. Some examples below: + +### Situation 1 + +If multiple DDLs are applied in a quick sequence we can end up with the following binlog scenario: + +```text +T1: DDL 1 on table1 + +T2: DDL 2 on table1 + +T3: Version Event DDL1 // gets written because of the time taken by tracker processing DDL1 + +T4: DML1 on table1 + +T5: Version Event DDL2 // gets written AFTER DML1 +``` + +
+ +So now on the `REPLICA`, at T4, the version historian will incorrectly provide the schema from T1 after DDL1 was applied. + +### Situation 2 + +If version tracking is turned off on the `PRIMARY` for some time, correct versions may not be available to the historian +which will always return the latest schema. This might result in an incorrect schema when a vstream is processing events +in the past. + +#### Possible New Features Around This Functionality + +- Schema tracking vstream client for notifications of all ddls +- Raw history of schema changes for auditing, root cause analysis, etc. diff --git a/content/en/docs/21.0/reference/vreplication/internal/vstream-skew-detection.md b/content/en/docs/21.0/reference/vreplication/internal/vstream-skew-detection.md new file mode 100644 index 000000000..dd444246a --- /dev/null +++ b/content/en/docs/21.0/reference/vreplication/internal/vstream-skew-detection.md @@ -0,0 +1,84 @@ +--- +title: VStream Skew Minimization +description: Aligning streams from different shards in the VStream API +weight: 7 +aliases: ['/docs/design-docs/vreplication/vstream/skew-detection/'] +--- + +## VStream Skew Detection + +### Motivation + +When the [VStream API](../../vstream/) is streaming from multiple shards we have multiple sources of events: one `PRIMARY` +or `REPLICA` tablet for each shard in the provided [`VGTID`](https://pkg.go.dev/vitess.io/vitess/go/vt/proto/binlogdata#VGtid). +The rate at which the events will be streamed from the underlying sources can vary depending on various factors, such as: + +* The replication lag on the source tablets (if a `REPLICA` tablet is selected as the source for the vstream) +* The CPU load on the source tablet +* Possible network partitions or network delays + +This can result in the events in the vstream from some shards being well ahead of other shards. So, for example, if a +row moves from the faster shard to a slower shard we might see the `DELETE` event in the vstream from the faster shard +long before the `INSERT` from the second. This would result in the row going "invisible" for the duration of the skew. +This can affect the user experience in applications where the vstream events are used to refresh a UI, for example. + +For most applications where [VStream API](../../vstream/) events feed into change data capture systems for auditing or +reporting purposes these delays may be acceptable. However, for applications which are using these events for user-facing +functions this can cause unexpected behavior. See https://github.com/vitessio/vitess/issues/7402 for one such case. + +### Goal + +It is not practically possible to provide exact ordering of events across Vitess shards. The [VStream API](../../vstream/) +will inherently stream events from one shard independently of another. However, vstream events +([`VEvent`](https://pkg.go.dev/vitess.io/vitess/go/vt/proto/binlogdata#VEvent)) do keep track of the binlog event +timestamps which we can use to loosely coordinate the streams. Since binlog timestamp granularity is only to the nearest +second, and we attempt to align the streams to within a second. + +### Implementation + +The skew minimization feature adds a [`MinimizeSkew` flag](../../vstream/#minimizeskew) that the client can set. This flag +enables skew detection between the various streams. Once a skew is detected, events for streams that are ahead are held back +until the lagging streams catch up causing the skew to reach an acceptable level. + +Each vstream event ([`VEvent`](https://pkg.go.dev/vitess.io/vitess/go/vt/proto/binlogdata#VEvent)) contains two timestamps: +one when the database transaction occurred, and the other the current time on the source tablet where the +[`VEvent`](https://pkg.go.dev/vitess.io/vitess/go/vt/proto/binlogdata#VEvent) was created. This lets us compute how far in +the past the event we just received was created. We use this to determine which shard has the most recent event and which one +has the oldest. Note that for shards where there is no activity, the vstreamer sends a heartbeat event every second and the +transaction time for a heartbeat is the same as the current time on the source. (These heartbeats are not forwarded to clients +in the vstream since they are synthetic/internal VReplication events.) + +If the difference between the fastest and slowest streams is greater than a threshold, we declare that we have detected +a skew. MySQL binlogs store the transaction timestamp in seconds. Also, on the `vtgate` serving the vstream, we adjust +this time for clock skews between the `vtgate` and the source tablet's `mysqld` server. When the user sets the `MinimizeSkew` +flag we want to keep the events across shards within the same second: each transaction timestamp is within 1 second of each +other. To account for rounding-off of the transaction timestamp and the clock-skew we set the threshold to be 2 seconds, +instead of 1 second, so that we don't keep stalling the streams due to cumulative round-offs. + +### Possible Unexpected Behavior + +If there are no events for a second in a shard then a heartbeat is sent. On receiving a heartbeat we reset the skew. +This is necessary to avoid shards with no events starving other shards. The current logic will align streams only if +they are all getting events faster than the heartbeat frequency. + +This means that we cannot guarantee the skew alignment feature will work as expected in certain conditions. This could +happen mainly while streaming from `REPLICA` tablets with high replication lag, say, due to high write QPS or a network +partition. + +Thus it is recommended that you stream from `PRIMARY` tablets when using the [VStream feature](../../vstream/). +Note, however, that even `PRIMARY` tablets with skewed loads could potentially trigger such a situation. + +### API + +This is how you would turn on the skew detection and alignment feature in a [VStream](../../vstream/) client: + +```go + import vtgatepb "vitess.io/vitess/go/vt/proto/vtgate" + ... + ... + flags := &vtgatepb.VStreamFlags{}; + flags.MinimizeSkew = true; + + reader, err := conn.VStream(ctx, topodatapb.TabletType_PRIMARY, vgtid, filter, flags) + +``` diff --git a/content/en/docs/21.0/reference/vreplication/internal/vstream-stream-migration.md b/content/en/docs/21.0/reference/vreplication/internal/vstream-stream-migration.md new file mode 100644 index 000000000..f22aea00f --- /dev/null +++ b/content/en/docs/21.0/reference/vreplication/internal/vstream-stream-migration.md @@ -0,0 +1,82 @@ +--- +title: VStream API and Resharding +description: How VStream API handles a reshard +weight: 8 +aliases: ['/docs/design-docs/vreplication/vstream/stream-migration/'] +--- + +## Stream Migration on a Resharding Operation + +While subscribing to the [VStream API](../../vstream/) you need to specify the shards from which to stream events. While +streaming it is possible that the underlying keyspace is resharded. Thus some or all of the shards which were originally +specified may be replaced by new shards after the resharding operation is completed. + +Stream migration logic within VReplication handles this transparently within `vtgate`. The Event streaming will be paused +momentarily during the actual cutover (when writes are switched) and you will start getting the events +([`VEvent`](https://pkg.go.dev/vitess.io/vitess/go/vt/proto/binlogdata#VEvent)) (and updated +[`VGTID`](https://pkg.go.dev/vitess.io/vitess/go/vt/proto/binlogdata#VGtid)s) for the new set of shards once the cutover +is completed. + +### An Illustration + +Here is a sample session using the scripts from the [local example](../../../../get-started/local). + +Run the steps up to and including `205_clean_commerce.sh`. Now start a [VStream API](../../vstream/) client in a +separate terminal to stream events from the `customer` table in the `customer` keyspace, which is currently unsharded. + +```json +{ + ShardGtids: []*binlogdatapb.ShardGtid{ + { + Keyspace: "customer", + Shard: "0", + }, + }, +} +``` + +
+ +Initial events will be streamed: + +```proto +[type:BEGIN type:FIELD field_event: fields: > ] +[type:VGTID vgtid: > ] +[type:ROW row_event: > > type:ROW row_event: > > type:ROW row_event: > > type:ROW row_event: > > type:ROW row_event: > > type:VGTID vgtid: > > > > type:COMMIT ] +[type:BEGIN type:VGTID vgtid: > type:COMMIT ] +``` + +
+ +Now run the resharding scripts and switch reads (steps/scripts 301, 302, 303, and 304). The following events are now seen: + +```proto +[type:VGTID vgtid: > type:DDL timestamp:1616748652 statement:"alter table customer change customer_id customer_id bigint not null" current_time:1616748652480051077 ] +[type:VGTID vgtid: > type:OTHER timestamp:1616748652 current_time:1616748652553883482 ] +``` + +
+ +Run the 305 step/script to switch writes. You will see that the [`VGTID`](https://pkg.go.dev/vitess.io/vitess/go/vt/proto/binlogdata#VGtid)s) +will include the new shards `-80` and `80-` instead of `0`: + +```proto +[type:BEGIN timestamp:1616748733 current_time:1616748733480901644 type:VGTID vgtid: > type:COMMIT timestamp:1616748733 current_time:1616748733480932466 ] +[type:BEGIN timestamp:1616748733 current_time:1616748733486715446 type:VGTID vgtid: > type:COMMIT timestamp:1616748733 current_time:1616748733486749728 ] + +[type:BEGIN timestamp:1616748733 current_time:1616748733519198641 type:VGTID vgtid: shard_gtids: > type:COMMIT timestamp:1616748733 current_time:1616748733519244822 ] +[type:BEGIN timestamp:1616748733 current_time:1616748733520355854 type:VGTID vgtid: shard_gtids: > type:COMMIT timestamp:1616748733 current_time:1616748733520403210 ] +``` + +
+ +Insert new rows: this will result in row events from the new shards. Shards will only stream changes from the point of +resharding. + +```bash +$ mysql -u root --host=127.0.0.1 -P 15306 -e "insert into customer(customer_id, email) values(6,'rohit@planetscale.com'), (7, 'mlord@planetscale.com')" +``` + +```proto +[type:BEGIN timestamp:1616749631 current_time:1616749631516372189 type:FIELD timestamp:1616749631 field_event: fields: > current_time:1616749631517765487 type:ROW timestamp:1616749631 row_event: > row_changes: > > current_time:1616749631517779353 type:VGTID vgtid: shard_gtids: > type:COMMIT timestamp:1616749631 current_time:1616749631517789376 ] +``` diff --git a/content/en/docs/21.0/reference/vreplication/lookupvindex.md b/content/en/docs/21.0/reference/vreplication/lookupvindex.md new file mode 100644 index 000000000..951f4cefc --- /dev/null +++ b/content/en/docs/21.0/reference/vreplication/lookupvindex.md @@ -0,0 +1,23 @@ +--- +title: LookupVindex +description: Create, backfill, and externalize Lookup Vindexes +weight: 60 +--- + +[`LookupVindex`](../../../reference/programs/vtctldclient/vtctldclient_lookupvindex/) is a command used to create **and** backfill +a [Lookup Vindex](../../../reference/features/vindexes/#lookup-vindex-types) automatically for a table that already +exists, and may have a significant amount of data in it already. + +Internally, the [`LookupVindex create`](../../../reference/programs/vtctldclient/vtctldclient_lookupvindex/vtctldclient_lookupvindex_create/) command uses +VReplication for the backfill process, until the lookup Vindex is "in sync". Then the normal process for +adding/deleting/updating rows in the lookup Vindex via the usual +[transactional flow when updating the "owner" table for the Vindex](../../../reference/features/vindexes/#lookup-vindex-types) +takes over. + +## Command + +Please see the [`LookupVindex` command reference](../../../reference/programs/vtctldclient/vtctldclient_lookupvindex/) for a full list of sub-commands and their flags. + +## Additional Information + +Please see the user guide for examples of [Creating a Lookup Vindex](../../../user-guides/configuration-advanced/createlookupvindex/) for more information on how to use this command. diff --git a/content/en/docs/21.0/reference/vreplication/materialize.md b/content/en/docs/21.0/reference/vreplication/materialize.md new file mode 100644 index 000000000..fb144d2d1 --- /dev/null +++ b/content/en/docs/21.0/reference/vreplication/materialize.md @@ -0,0 +1,123 @@ +--- +title: Materialize +description: Materialize the results of a query into a table +weight: 40 +--- + +### Description + +[`Materialize`](../../programs/vtctldclient/vtctldclient_materialize/) is a lower level vreplication command that allows for generalized materialization of tables. The target tables +can be copies, aggregations, or views. The target tables are kept in sync in near-realtime. + +You can specify multiple tables to materialize using the [`create`](../../programs/vtctldclient/vtctldclient_materialize/vtctldclient_materialize_create/) sub-command's `--table-settings` flag. +There are limitations, however, to the queries which can be used with `Materialize`: + - The query must be a `SELECT` statement + - Only the following operators are supported: `=`, `<`, `<=`, `>`, `>=`, `<>`, `!=` (e.g. no `IN`, `OR`, or `LIKE`) + - The query must be against a single table (so no `JOIN`s) + - The query cannot use `DISTINCT` + - The query cannot use a derived table + - Expressions in the query must have an alias, e.g. `select hour(c1) as c1_hour from t1` + - The `GROUP BY` expression cannot reference an aggregate expression such as `MAX` or `COUNT` + +{{< warning >}} +Be careful to avoid using the `INSTANT ADD COLUMN` feature in [MySQL 8.0+](https://mysqlserverteam.com/mysql-8-0-innodb-now-supports-instant-add-column/) with materialization source tables as this can cause the vreplication based materialization workflow to break. +{{< /warning >}} + +## The Basic Materialize Workflow Lifecycle + +1. Initiate the migration using `Materialize` +2. Monitor the workflow using `show` or `status`
+`Materialize --target-keyspace show --workflow `
+`Materialize --target-keyspace status --workflow `
+3. Start accessing your views once the workflow has started Replicating + +## Command + +Please see the [`Materialize` command reference](../../programs/vtctldclient/vtctldclient_materialize/) for a full list of sub-commands and their flags. + +### Example + +```shell +vtctldclient --server localhost:15999 Materialize --workflow product_sales --target-keyspace commerce create --source-keyspace commerce --table-settings '[{"target_table": "sales_by_sku", "create_ddl": "create table sales_by_sku (sku varbinary(128) not null primary key, orders bigint, revenue bigint)", "source_expression": "select sku, count(*) as orders, sum(price) as revenue from corder group by sku"}]' --cells zone1 --cells zone2 --tablet-types replica +``` + +### Parameters + +### Action + +[`Materialize`](../../programs/vtctldclient/vtctldclient_materialize/) is an "umbrella" command. The [`action` or sub-command](../../programs/vtctldclient/vtctldclient_materialize/#see-also) defines the operation on the workflow. + +### Options + +Each [`action` or sub-command](../../programs/vtctldclient/vtctldclient_materialize/#see-also) has additional options/parameters that can be used to modify its behavior. Please see the [command's reference docs](../../programs/vtctldclient/vtctldclient_materialize/) for the full list of command options or flags. Below we will add additional information for a subset of key options. + +#### --cells +**optional**\ +**default** local cell + +
+ +A comma-separated list of cell names or cell aliases. This list is used by VReplication to determine which +cells should be used to pick a tablet for selecting data from the source keyspace.

+ +
+ +###### Uses + +* Improve performance by using picking a tablet in cells in network proximity with the target +* To reduce bandwidth costs by skipping cells that are in different availability zones +* Select cells where replica lags are lower + +#### --tablet-types +**optional**\ +**default** "in_order:REPLICA,PRIMARY"\ +**string** + +
+ +Source tablet types to replicate from (e.g. PRIMARY, REPLICA, RDONLY). The value +specified impacts [tablet selection](../tablet_selection/) for the workflow. + +
+ +###### Uses + +* To reduce the load on PRIMARY tablets by using REPLICAs or RDONLYs +* Reducing lag by pointing to PRIMARY + +#### --table-settings +**required**\ +**JSON** + +
+ +This is a JSON array where each value must contain two key/value pairs. The first required key is 'target_table' and it is the name of the table in the target-keyspace to store the results in. The second required key is 'source_expression' and its value is the select query to run against the source table. An optional key/value pair can also be specified for 'create_ddl' which provides the DDL to create the target table if it does not exist – you can alternatively specify a value of 'copy' if the target table schema should be copied as-is from the source keyspace. Here's an example value for table-settings: + +```json +[ + { + "target_table": "customer_one_email", + "source_expression": "select email from customer where customer_id = 1" + }, + { + "target_table": "states", + "source_expression": "select * from states", + "create_ddl": "copy" + }, + { + "target_table": "sales_by_sku", + "source_expression": "select sku, count(*) as orders, sum(price) as revenue from corder group by sku", + "create_ddl": "create table sales_by_sku (sku varbinary(128) not null primary key, orders bigint, revenue bigint)" + } +] +``` + +
+ +### Notes + +There are special commands to perform common materialization tasks and you should prefer them +to using `Materialize` directly. + +* If you just want to copy tables to a different keyspace use [MoveTables](../movetables) +* If you want to change sharding strategies use [Reshard](../reshard) instead diff --git a/content/en/docs/21.0/reference/vreplication/metrics.md b/content/en/docs/21.0/reference/vreplication/metrics.md new file mode 100644 index 000000000..bcd83588e --- /dev/null +++ b/content/en/docs/21.0/reference/vreplication/metrics.md @@ -0,0 +1,163 @@ +--- +title: Metrics +description: Metrics related to vreplication functionality +weight: 85 +--- + +VReplication exports several metrics using the expvars interface. These are available at the `/debug/vars` endpoint of vttablet's http status pages. [More details can be found here](../../features/monitoring/#3-push-based-metrics-system). + +## Target Tablet Metrics + +#### VReplicationCopyLoopCount, VReplicationCopyLoopCountTotal + +During the copy phase we run one loop of bulk copy for approximately an hour at a time (by default) before running catchup. _VReplicationCopyLoopCount_ counts the number of times this loop has run for each stream and _VReplicationCopyLoopCountTotal_ the total across all streams. + +#### VReplicationCopyRowCount, VReplicationCopyRowCountTotal + +_VReplicationCopyRowCount_ counts the number of rows copied during the copy phase per stream and _VReplicationCopyRowCountTotal_ the total across all streams. + +#### VReplicationDDLActions + +This metric counts the number of DDL actions — based on [the value of the OnDDL strategy configured for the workflow](../vreplication/#handle-ddl) — that have been taken in the current workflow streams. + +#### VReplicationErrors + +_VReplicationErrors_ counts the number of times errors occurred during vreplication. Errors are keyed +by the type of error. + +#### VReplicationHeartbeat + +_VReplicationHeartbeat_ records, for each stream, the timestamp sent by the last heartbeat event for that stream. + +#### VReplicationLagSeconds, VReplicationLagSecondsMax, VReplicationLagSecondsTotal + +These metrics show the replication lag of the target stream with respect to the source stream. _VReplicationLagSeconds_ shows the current replication lag and _VReplicationLagSecondsMax_ has the maximum lag in this stream. Note that these values are only valid during the replication phase of a workflow. + +#### VReplicationMessages + +_VReplicationMessages_ contains a stack of the last N (currently 3) messages of a vreplication stream. + +#### VReplicationPhaseTimings, VReplicationPhaseTimingsCounts, VReplicationPhaseTimingsTotal + +This metric relates to the times each phase is run during the lifetime of a stream. +_VReplicationPhaseTimings_ counts the total time taken by the runs, +VReplicationPhaseTimingsCounts the number of runs and _VReplicationPhaseTimingsTotals_ the total +runs across all streams. + +#### VReplicationQPS + +_VReplicationQPS_ is a list of QPS values for each loop of each phase of the workflow. + +#### VReplicationQueryCount, VReplicationQueryCountTotal + +_VReplicationQueryCount_ is the total number of queries in each phase of a workflow. _VReplicationQueryCountTotal_ is the total queries across all phases and workflows. + +#### VReplicationSource + +Shows the keyspace and shard of the source from which this target stream is replicating + +#### VReplicationSourceTablet + +Shows the tablet from which this stream is currently replicating + +#### VReplicationStreamCount + +The number of streams running on this target + +#### VReplicationStreamState + +This shows the state of each stream. + +#### VReplicationTableCopyRowCounts + +_VReplicationTableCopyRowCounts_ counts the number of rows copied during the copy phase per table per stream. + +#### VReplicationTableCopyTimings + +_VReplicationTableCopyTimings_ counts the time taken per table per stream during the copy phase of the stream. Unlike _VReplicationPhaseTimings_, this metric updates continuously, rather than being set once at the end of the copy phase. + +#### VReplicationThrottledCounts + +The number of times vreplication was throttled by workflow, id, throttler (trx or tablet), and the sub-component (vstreamer, vcopier, vplayer, etc) that was throttled (see [the other tablet throttler metrics](../../features/tablet-throttler/#metrics)) + +#### VReplicationThrottledCountTotal + +The total number of times that vreplication has been throttled (see [the other tablet throttler metrics](../../features/tablet-throttler/#metrics)) + +## Source Tablet Metrics + +#### VStreamerCompressedTransactionsDecoded + +The total number of compressed transactions (MySQL's binlog_transaction_compression=ON) decoded by this vttablet across all workflows + +#### VStreamerCount + +The current number of running vstreamers + +#### VStreamersCreated + +The total number of vstreamers created during the lifetime of this tablet + +#### VStreamersEndedWithErrors + +The total number of errors that caused a stream to stall + +#### VStreamerErrors + +The number of errors per category across workflows + +#### VStreamerEventsStreamed + +The total number of events streamed by this vttablet across all workflows + +#### VStreamPacketSize + +The value of the `vstream_packet_size` flag specified for this tablet + +#### VStreamerNumPackets + +The total number of packets sent by this vttablet across all workflows + +
+ +## Example +**A snippet from tablet 200 from the local example after running the MoveTables step** + +``` +"VReplicationCopyLoopCount": {"commerce.0.commerce2customer.1": 2}, +"VReplicationCopyLoopCountTotal": 2, +"VReplicationCopyRowCount": {"commerce.0.commerce2customer.1": 10}, +"VReplicationCopyRowCountTotal": 10, +"VReplicationErrors": {}, +"VReplicationHeartbeat": {"commerce.0.commerce2customer.1": 1618681048}, +"VReplicationMessages": {"1": "2021-04-17T19:36:13.003858838+02:00:Picked source tablet: cell:\"zone1\" uid:100 "}, +"VReplicationPhaseTimings": {"commerce.0.commerce2customer.1.catchup": 1000935083, "commerce.0.commerce2customer.1.fastforward": 15349583, "commerce.0.commerce2customer.1.copy": 63353125}, +"VReplicationPhaseTimingsCounts": {"commerce.0.commerce2customer.1.copy": 2, "commerce.0.commerce2customer.1.All": 6, "commerce.0.commerce2customer.1.catchup": 2, "commerce.0.commerce2customer.1.fastforward": 2}, +"VReplicationPhaseTimingsTotal": 1079637791, +"VReplicationQPS": {"All":[11.8,1,1.2,1.2,1,1.2,1,1.2,1,1.2,1,1.2,1.2,1,1.2,1,1.2],"Query":[11.2,1,1.2,1.2,1,1.2,1,1.2,1,1.2,1,1.2,1.2,1,1.2,1,1.2],"Transaction":[0.6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}, +"VReplicationQueryCount": {"commerce.0.commerce2customer.1.copy": 2}, +"VReplicationQueryCountTotal": 2, +"VReplicationLagSeconds": {"commerce.0.commerce2customer.1": 0}, +"VReplicationLagSecondsMax": 0, +"VReplicationLagSecondsTotal": 0, +"VReplicationSource": {"1": "commerce/0"}, +"VReplicationSourceTablet": {"1": "cell:\"zone1\" uid:100 "}, +"VReplicationStreamCount": 1, +"VReplicationStreamState": {"commerce2customer.1": "Running"}, +"VReplicationTableCopyRowCounts": {"commerce.0.commerce2customer.1.corder": 4, "commerce.0.commerce2customer.1.customer": 2}, +"VReplicationTableCopyTimings": {"commerce.0.commerce2customer.1.customer": 6707583, "commerce.0.commerce2customer.1.corder": 13254250}, +"VStreamPacketSize": 250000, +"VStreamerCount": 0, +"VStreamerErrors": {"Catchup": 0, "Copy": 0, "Send": 0, "TablePlan": 0}, +"VStreamerEventsStreamed": 0, +"VStreamerNumPackets": 0, +"VStreamerPhaseTiming": {"TotalCount":0,"TotalTime":0,"Histograms":{}}, +"VStreamersCreated": 0, +"VStreamersEndedWithErrors": 0, +``` + +## VTGate Metrics +#### VStreamsCreated +The total number of vstreams created during the lifetime of this vtgate. +#### VStreamsLag +The difference in seconds between the current time when the vstream event was sent and the time when the binlog event occurred. \ No newline at end of file diff --git a/content/en/docs/21.0/reference/vreplication/migrate.md b/content/en/docs/21.0/reference/vreplication/migrate.md new file mode 100644 index 000000000..8c0f6ad16 --- /dev/null +++ b/content/en/docs/21.0/reference/vreplication/migrate.md @@ -0,0 +1,152 @@ +--- +title: Migrate +description: Move tables from an external cluster +weight: 85 +--- + +### Description + +[`Migrate`](../../programs/vtctldclient/vtctldclient_migrate/) is used to start and manage VReplication workflows for copying keyspaces and/or tables from a source Vitess cluster, to a target Vitess cluster. +This command is built off of [`MoveTables`](../movetables) but has been extended to work with independent source and target topology services. It should be +utilized when moving Keyspaces or Tables between two separate Vitess environments. Migrate is an advantageous strategy for large sharded environments +for a few reasons: + +* Data can be migrated while the source Vitess cluster, typically the production environment, continues to serve traffic. +* Shard mapping between Source and Target Vitess clusters is handled automatically by Migrate. + * Similar to MoveTables, you may have different shard counts between the source and target Vitess clusters. +* VDiffs and read-only SQL can be performed to verify data integrity before the Migration completes. +* Migrate works as a copy of data not a move, source data remains once the Migrate completes. +* Could be used for configuring lower environments with production data. + +Please note the Migrate command works with an externally mounted source cluster. See the related [Mount command](../mount) for more information +on working with external Vitess clusters. + +#### Differences Between Migrate and MoveTables + +[`Migrate`](../../programs/vtctldclient/vtctldclient_migrate/) has separate semantics and behaviors from [`MoveTables`](../../programs/vtctldclient/vtctldclient_movetables/): + +* [`MoveTables`](../../programs/vtctldclient/vtctldclient_movetables/) migrates data from one keyspace to another, within the same Vitess cluster; [`Migrate`](../../programs/vtctldclient/vtctldclient_migrate/) functions between two separate Vitess clusters. +* [`MoveTables`](../../programs/vtctldclient/vtctldclient_movetables/) erases the source data upon completion by default; Migrate keeps the source data intact. + * There are flags available in [`MoveTables`](../../programs/vtctldclient/vtctldclient_movetables/) to change the default behavior in regards to the source data. +* [`MoveTables`](../../programs/vtctldclient/vtctldclient_movetables/) sets up routing rules and reverse replication, allowing for rollback prior to completion. + * Switching read/write traffic is not meaningful in the case of [`Migrate`](../../programs/vtctldclient/vtctldclient_migrate/), as the Source is in a different cluster. + * Switching traffic requires the Target to have the ability to create vreplication streams (in the `_vt` database) on the Source; + this may not always be possible on production systems. +* Not all [`MoveTables`](../../programs/vtctldclient/vtctldclient_movetables/) sub-commands work with [`Migrate`](../../programs/vtctldclient/vtctldclient_migrate/); for example `SwitchTraffic` and `ReverseTraffic` are unavailable with [`Migrate`](../../programs/vtctldclient/vtctldclient_migrate/). + +## Command + +Please see the [`Migrate` command reference](../../programs/vtctldclient/vtctldclient_migrate/) for a full list of sub-commands and their flags. + +### An Example Migrate Workflow Lifecycle + +{{< info >}} +NOTE: there is no reverse vreplication flow with [`Migrate`](../../programs/vtctldclient/vtctldclient_migrate/). After the [`Migrate complete`](../../programs/vtctldclient/vtctldclient_migrate/vtctldclient_migrate_complete/) command is given; no writes will be replicated between the Source and Target Vitess clusters. They are essentially two identical Vitess clusters running in two different environments. Once writing resumes on one of the clusters they will begin to drift apart. +{{< /info >}} + +1. Mount the source Vitess cluster using [Mount](../mount).
+`Mount register --name ext1 --topo-type etcd2 --topo-server localhost:12379 --topo-root /vitess/global` +1. Apply source vSchema to the Target's Keyspace.
+`ApplyVSchema --vschema-file commerceVschema.json commerce` +1. Initiate the migration using `create`.
+`Migrate --workflow import --target-keyspace customer create --source-keyspace commerce --mount-name ext1 --tablet-types replica` +1. Monitor the workflow using `show` and `status`.
+`Migrate --workflow import --target-keyspace customer show` +`Migrate --workflow import --target-keyspace customer status` +1. Confirm that data has been copied over correctly using [VDiff](../vdiff).
+1. Stop the application from writing to the source Vitess cluster.
+1. Confirm again the data has been copied over correctly using [VDiff](../vdiff).
+1. Cleanup vreplication artifacts and source tables with `complete`.
+`Migrate --workflow import --target-keyspace customer complete` +1. Start the application pointed to the target Vitess Cluster. +1. Unmount the source cluster.
+`Mount unregister --name ext1` + +### Parameters + +### Action + +[`Migrate`](../../programs/vtctldclient/vtctldclient_migrate/) is an "umbrella" command. The [`action` or sub-command](../../programs/vtctldclient/vtctldclient_migrate/#see-also) defines the operation on the workflow. + +### Options + +Each [`action` or sub-command](../../programs/vtctldclient/vtctldclient_migrate/#see-also) has additional options/parameters that can be used to modify its behavior. Please see the [command's reference docs](../../programs/vtctldclient/vtctldclient_migrate/) for the full list of command options or flags. + +The options for the supported commands are the same as [MoveTables](../movetables), with the exception of `--enable-reverse-replication` as setting +up the reverse vreplication streams requires modifying the source cluster's `_vt` sidecar database which we cannot do as that database is +specific to a single Vitess cluster and these streams belong to a different one (the target cluster). + +A common option to give if migrating all of the tables from a source keyspace is the `--all-tables` option. + +### Network Considerations + +For Migrate to function properly, you will need to ensure communication is possible between the target Vitess cluster and the source Vitess cluster. At a minimum the following network concerns must be implemented: + +* Target vtctld/vttablet (PRIMARY) processes must reach the Source topo service. +* Target vtctld/vttablet (PRIMARY) processes must reach EACH source vttablet's grpc port. + * You can limit your source vttablet's to just the replicas by using the `--tablet-types` option when creating the migration. + +If you're migrating a keyspace from a production system, you may want to target a replica to reduce your load on the primary vttablets. This will also assist you in reducing the number of network considerations you need to make. + +``` +Migrate --workflow --target-keyspace create --source-keyspace --mount-name --tablet-types replica +``` + +To verify the Migration you can also perform VDiff with the `--tablet-types` option: + +``` +VDiff --workflow --target-keyspace create --tablet-types REPLICA +``` + +### Troubleshooting Errors + +`Migrate` fails right away with error: + +```shell +E0224 23:51:45.312536 138 main.go:76] remote error: rpc error: code = Unknown desc = table table1 not found in vschema for keyspace sharded +``` +
Solution: +* The target table has a VSchema which does not match the source VSchema +* Upload the source VSchema to the target VSchema and try the `Migrate` again + +--- + +`Migrate` fails right away with error: + +```shell +E0224 18:55:29.275019 578 main.go:76] remote error: rpc error: code = Unknown desc = node doesn't exist +``` + +
Solution: +* Ensure there is networking communication between Target vtctld and Source topology +* Ensure the topology information is correct on the `Mount` command + +--- + +After issuing `Migrate` command everything is stuck at 0% progress +with errors found in target vttablet logs: + +```shell +I0223 20:13:36.825110 1 tablet_picker.go:146] No tablet found for streaming +``` + +
Solution: +* Ensure there is networking communication between Target vttablets and Source vttablets +* Ensure there is networking communication between Target vttablets and the Source topology service +* Older versions of Vitess may be labeling vttablets as "master" instead of "primary" + you can resolve this problem by adjusting your `tablet-types`: + + Migrate ... create --tablet-types "MASTER,REPLICA,RDONLY" ... + +--- + +The MySQL client fails with: + +```sh +SQL error, errno = 1105, state = 'HY000': table 'table_name' does not have a primary vindex +``` + +
Solution: + +* The write was sent to the Target Vitess cluster before the migration completed, + solvable by writing to the source instead, or by completing the migration. diff --git a/content/en/docs/21.0/reference/vreplication/mount.md b/content/en/docs/21.0/reference/vreplication/mount.md new file mode 100644 index 000000000..64b6c83fe --- /dev/null +++ b/content/en/docs/21.0/reference/vreplication/mount.md @@ -0,0 +1,19 @@ +--- +title: Mount +description: Link an external cluster to the current one +weight: 90 +--- + +### Description + +Mount is used to link external Vitess clusters to the current cluster. + +Mounting Vitess clusters requires the topology information of the external cluster to be specified. Used in conjunction with [the `Migrate` command](../migrate). + +{{< info >}} +No validation is performed when using the [`Mount`](../../programs/vtctldclient/vtctldclient_mount/) command. You must ensure your values are correct, or you may get errors when initializing a migration. +{{< /info >}} + +## Command + +Please see the [`Mount` command reference](../../programs/vtctldclient/vtctldclient_mount/) for a full list of sub-commands and their flags. diff --git a/content/en/docs/21.0/reference/vreplication/movetables.md b/content/en/docs/21.0/reference/vreplication/movetables.md new file mode 100644 index 000000000..0ca61cb88 --- /dev/null +++ b/content/en/docs/21.0/reference/vreplication/movetables.md @@ -0,0 +1,360 @@ +--- +title: MoveTables +description: Move tables between keyspaces without downtime +weight: 10 +aliases: ['/docs/reference/vreplication/v2/movetables/'] +--- + +{{< warning >}} +These workflows can have a significant impact on the source tablets (which are often in production) — especially when a PRIMARY tablet is used as a source. You can limit the impact on the source tablets using the [`--vreplication_copy_phase_max_*` vttablet flags](../flags/#vreplication_copy_phase_max_innodb_history_list_length) +{{< /warning >}} + +## Description + +[`MoveTables`](../../programs/vtctldclient/vtctldclient_movetables/) is used to start and manage workflows to move one or more tables from an external database or an existing Vitess keyspace into a new Vitess keyspace. The target keyspace can be unsharded or sharded. + +[`MoveTables`](../../programs/vtctldclient/vtctldclient_movetables/) is typically used for migrating data into Vitess or to implement vertical sharding. You might use the former when you first start using Vitess and the latter if you want to distribute your load across servers without sharding tables. + +## Command + +Please see the [`MoveTables` command reference](../../programs/vtctldclient/vtctldclient_movetables/) for a full list of sub-commands and their flags. + +## The Basic MoveTables Workflow Lifecycle + +1. Initiate the migration using `create`
+`MoveTables --workflow --target-keyspace create --source-keyspace --tables ` +1. Monitor the workflow using `show` or `status`
+`MoveTables --workflow --target-keyspace show`
+`MoveTables --workflow --target-keyspace status`
+1. Confirm that data has been copied over correctly using [VDiff](../vdiff) +1. Cutover to the target keyspace with `switchtraffic`
+`MoveTables --workflow --target-keyspace switchtraffic` +1. Cleanup vreplication artifacts and source tables with `complete`
+`MoveTables --workflow --target-keyspace complete` + +## Common Use Cases for MoveTables + +### Adopting Vitess + +For those wanting to try out Vitess for the first time, `MoveTables` provides an easy way to route part of their workload to Vitess with the ability to migrate back at any time without any risk. You point a vttablet to your existing MySQL installation, spin up an unsharded Vitess cluster and use a `MoveTables` workflow to start serving some tables from Vitess. You can also go further and use a Reshard workflow to experiment with a sharded version of a part of your database. + +See this [user guide](../../../user-guides/configuration-advanced/unmanaged-tablet/#move-legacytable-to-the-commerce-keyspace) for detailed steps. + +### Vertical Sharding + +For existing Vitess users you can easily move one or more tables to another keyspace, either for balancing load or as preparation for sharding your tables. + +See this [user guide](../../../user-guides/migration/move-tables/) which describes how `MoveTables` works in the local example provided in the Vitess repo. + +## Parameters + +### Action + +[`MoveTables`](../../programs/vtctldclient/vtctldclient_movetables/) is an "umbrella" command. The [`action` or sub-command](../../programs/vtctldclient/vtctldclient_movetables/#see-also) defines the operation on the workflow. + +#### Create +
+ +[`create`](../../programs/vtctldclient/vtctldclient_movetables/vtctldclient_movetables_create/) sets up and creates a new workflow. The workflow name should not conflict with that of an existing workflow. + +
+ +#### Show +
+ +[`show`](../../programs/vtctldclient/vtctldclient_movetables/vtctldclient_movetables_show/) displays useful information about a workflow – including recent logs. + +
+ +#### Status +
+ +[`status`](../../programs/vtctldclient/vtctldclient_movetables/vtctldclient_movetables_status/) (or `progress`) reports the progress of a workflow by showing the percentage of data copied across targets, if workflow is in copy state, and the replication lag between the target and the source once the copy phase is completed. It also shows the current state of traffic for the tables involved in the workflow. + +It is too expensive to get real-time row counts of tables, using _count(*)_, say. So we use the statistics available in the `information_schema` to approximate copy progress. This data can be significantly off (up to 50-60%) depending on the utilization of the underlying mysql server resources. You can manually run `ANALYZE TABLE` to update the statistics if so desired. + +
+ +#### SwitchTraffic +
+ +[`switchtraffic`](../../programs/vtctldclient/vtctldclient_movetables/vtctldclient_movetables_switchtraffic/) switches traffic forward for the `tablet-types` specified. You can switch all traffic with just one command, and this is the default behavior. Note that you can now switch replica, rdonly, and primary traffic in any order. + +{{< info >}} +Note that VTGate can [buffer queries](../../features/vtgate-buffering/) when switching traffic which can virtually eliminate any visible impact on application users. +{{}} + +
+ +#### ReverseTraffic +
+ +[`reversetraffic`](../../programs/vtctldclient/vtctldclient_movetables/vtctldclient_movetables_reversetraffic/) switches traffic in the reverse direction for the `tablet-types` specified. The traffic should have been previously switched forward using `SwitchTraffic` for the `cells` and `tablet-types` specified. + +{{< info >}} +Note that VTGate can [buffer queries](../../features/vtgate-buffering/) when reversing traffic which can virtually eliminate any visible impact on application users. +{{}} + +
+ +#### Cancel +
+ +[`cancel`](../../programs/vtctldclient/vtctldclient_movetables/vtctldclient_movetables_cancel/) can be used if a workflow was created in error or was misconfigured and you prefer to create a new workflow instead of fixing this one. `cancel` can only be called if no traffic has been switched. It removes vreplication-related artifacts like rows from the vreplication and copy_state tables in the sidecar `_vt` database along with routing rules and blacklisted tables from the topo and, by default, the target tables on the target keyspace +(see `--keep-data` and `--rename-tables`). + +
+ +#### Complete +
+ +{{< warning >}} +This is a destructive command +{{< /warning >}} + +[`complete`](../../programs/vtctldclient/vtctldclient_movetables/vtctldclient_movetables_complete/) is used after all traffic has been switched. It removes vreplication-related artifacts like rows from vreplication and copy_state tables in the sidecar `_vt` database along with routing rules and and blocklisted tables from the topo. By default, the source tables are also dropped on the target keyspace +(see `--keep-data` and `--rename-tables`). + +
+ +### Options + +Each [`action` or sub-command](../../programs/vtctldclient/vtctldclient_movetables/#see-also) has additional options/parameters that can be used to modify its behavior. Please see the [command's reference docs](../../programs/vtctldclient/vtctldclient_movetables/) for the full list of command options or flags. Below we will add additional information for a subset of key options. + +#### --auto-start +**optional**\ +**default** true + +
+ +Normally the workflow starts immediately after it is created. If this flag is set +to false then the workflow is in a Stopped state until you explicitly start it. + +
+ +###### Uses + +* Allows updating the rows in `_vt.vreplication` after `MoveTables` has setup the +streams. For example, you can add some filters to specific tables or change the +projection clause to modify the values on the target. This +provides an easier way to create simpler Materialize workflows by first using +`MoveTables` with auto_start false, updating the BinlogSource as required by your +`Materialize` and then start the workflow. +* Changing the `copy_state` and/or `pos` values to restart a broken `MoveTables` workflow +from a specific point of time + +#### --cells +**optional**\ +**default** local cell (of source tablet)\ +**string** + +
+ +Comma seperated list of Cell(s) and/or CellAlias(es) to replicate from. + +{{< info >}} +You can alternatively specify `--all-cells` if you want to replicate from source tablets in any existing cell (the local cell of the target tablet will be preferred). +{{< /info >}} + +
+ +###### Uses + +* Improve performance by picking a tablet in cells in network proximity with the target +* Reduce bandwidth costs by skipping cells that are in different availability zones +* Select cells where replica lags are lower + +#### --defer-secondary-keys +**optional**\ +**default** false + +
+ +If true, any secondary keys are dropped from the table definitions on the target shard(s) as we first initialize the +tables for the [copy phase](../internal/life-of-a-stream/#copy). The exact same key definitions +are then re-added when the copy phase completes for each table. + +With this method all secondary index records for the table are generated in one bulk operation. This should significantly +improve the overall copy phase execution time on large tables with many secondary keys — especially with +[MySQL 8.0.31](https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-31.html) and later due to InnoDB's support for +parallel index builds. This is logically similar to the +[`mysqldump` `--disable-keys` option](https://dev.mysql.com/doc/refman/en/mysqldump.html#option_mysqldump_disable-keys). + +
+ +#### --initialize-target-sequences +**optional**\ +**default** false + +
+ +If specified, when switching write (primary tablet) traffic for tables that are being moved from an unsharded keyspace to a +sharded one, initialize any sequences being used by those tables on the target. They are initialized using the current +maximum value for the column across all shards on the target. + +
+ +###### Uses + +* It's common that users import unsharded data into Vitess — sharding it in the process — or move +tables from an unsharded keyspace to a sharded one as they become too large for a single MySQL instance. +When doing either of these you would typically be leveraging [MySQL auto_increment](https://dev.mysql.com/doc/refman/en/example-auto-increment.html) +columns for primary keys on the unsharded tables (source). On the sharded target, however, you will then +need to use [Vitess Sequences](../../features/vitess-sequences/) in order to ensure that you continue having +automatically generated incrementing unique primary keys _across all shards_. When it comes to [switching the write traffic](#switchtraffic) +during this move you would need to manually ensure that you [initialize the sequences](../../features/vitess-sequences/#initializing-a-sequence) +so that the next values they provide are higher than any already used on the source (with ample buffer in between +to avoid potential identifier reuse and duplicate key errors immediately following the cutover). This flag tells Vitess +to manage this sequence initialization for you as part of the `SwitchTraffic` operation to ensure a seamless cutover +without any additional manual steps. For more information, please see [the feature request](https://github.com/vitessio/vitess/issues/13685). + +{{< info >}} +You will still need to take the manual step of [creating each backing sequence table](../../features/vitess-sequences/#creating-a-sequence) +in an unsharded keyspace of your choosing prior to the `SwitchTraffic` operation. +{{< /info>}} + +#### --max-replication-lag-allowed +**optional**\ +**default** the value used for [`--timeout`](#--timeout) + +
+ +While executing `SwitchTraffic` we ensure that the VReplication lag for the workflow is less than this duration, otherwise report an error and don't attempt the switch. The calculated VReplication lag is the estimated maximum lag across workflow streams between the last event seen at the source and the last event processed by the target (which would be a heartbeat event if we're fully caught up). Usually, when VReplication has caught up, this lag should be very small (under a second). + +While switching write traffic, we temporarily make the source databases read-only, and wait for the targets to catchup. This means that the application can effectively be partially down for this cutover period as writes will pause or error out. While switching write traffic this flag can ensure that you only switch traffic if the current lag is low, thus limiting this period of write-unavailability and avoiding it entirely if we're not likely to catch up within the [`--timeout`](#--timeout)) window. + +While switching read traffic this can also be used to set an approximate upper bound on how stale reads will be against the replica tablets when using `@replica` shard targeting. + +
+ +#### --on-ddl +**optional**\ +**default** IGNORE + +
+ +This flag allows you to specify what to do with DDL SQL statements when they are encountered +in the replication stream from the source. The values can be as follows: + +* `IGNORE`: Ignore all DDLs (this is also the default, if a value for `on-ddl` + is not provided). +* `STOP`: Stop when DDL is encountered. This allows you to make any necessary + changes to the target. Once changes are made, updating the workflow state to + `Running` will cause VReplication to continue from just after the point where + it encountered the DDL. Alternatively you may want to `Cancel` the workflow + and create a new one to fully resync with the source. +* `EXEC`: Apply the DDL, but stop if an error is encountered while applying it. +* `EXEC_IGNORE`: Apply the DDL, but ignore any errors and continue replicating. + +{{< warning >}} +We caution against against using `EXEC` or `EXEC_IGNORE` for the following reasons: + * You may want a different schema on the target + * You may want to apply the DDL in a different way on the target + * The DDL may take a long time to apply on the target and may disrupt replication, performance, and query execution while it is being applied (if serving traffic from the target) +{{< /warning >}} + +
+ +#### --no-routing-rules +**optional**\ +**default** false + +
+Do not create routing rules for the tables being moved when the workflow is created. This implies that you should +not use global routing or send traffic to the target keyspace through a vtgate. +See https://github.com/vitessio/vitess/pull/13895 and https://github.com/vitessio/vitess/issues/13851 for a use-case +and more details. +
+ +#### --rename-tables +**optional**\ +**default** false + +
+ +During `Complete` or `Cancel` operations, the tables are renamed instead of being deleted. Currently the new name is _<table_name>_old. + +We use the same renaming logic used by [`pt-online-schema-change`](https://docs.percona.com/percona-toolkit/pt-online-schema-change.html). +Such tables are automatically skipped by VReplication if they exist on the source. + +
+ +#### --enable-reverse-replication +**optional**\ +**default** true + +
+ +`SwitchTraffic` for primary tablet types, by default, starts a reverse replication stream with the current target as the source, replicating back to the original source. This enables a quick and simple rollback mechanism using `ReverseTraffic`. This reverse workflow name is that of the original workflow concatenated with \_reverse. + +If set to false these reverse replication streams will not be created and you will not be able to rollback once you have switched write traffic over to the target. + +
+ +#### --source-time-zone +**optional**\ +**default** "" + +
+ +Specifying this flag causes all `DATETIME` fields to be converted from the given time zone into `UTC`. It is expected that the application has +stored *all* `DATETIME` fields, in all tables being moved, in the specified time zone. On the target these `DATETIME` values will be stored in `UTC`. + +As a best practice, Vitess expects users to run their MySQL servers in `UTC`. So we do not specify a target time zone for the conversion. +It is expected that the [time zone tables have been pre-populated](https://dev.mysql.com/doc/refman/en/time-zone-support.html#time-zone-installation) on the target mysql servers. + +Any reverse replication streams running after a SwitchWrites will do the reverse date conversion on the source. + +Note that selecting the `DATETIME` columns from the target will now give the times in UTC. It is expected that the application will +perform any conversions using, for example, `SET GLOBAL time_zone = 'US/Pacific'`or `convert_tz()`. + +Also note that only columns of `DATETIME` data types are converted. If you store `DATETIME` values as `VARCHAR` or `VARBINARY` strings, +setting this flag will not convert them. + +
+ +#### --stop-after-copy + +**optional** +**default** false + +
+ +If set, the workflow will stop once the Copy phase has been completed i.e. once +all tables have been copied and VReplication decides that the lag +is small enough to start replicating, the workflow state will be set to Stopped. + +
+ +###### Uses +* If you just want a consistent snapshot of all the tables you can set this flag. The workflow +will stop once the copy is done and you can then mark the workflow as `Complete`. + +#### --tablet-types +**optional**\ +**default** "in_order:REPLICA,PRIMARY"\ +**string** + +
+ +Source tablet types to replicate from (e.g. PRIMARY, REPLICA, RDONLY). The value +specified impacts [tablet selection](../tablet_selection/) for the workflow. + +
+ +#### --timeout +**optional**\ +**default** 30s + +
+ +For primary tablets, SwitchTraffic first stops writes on the source primary and waits for the replication to the target to +catchup with the point where the writes were stopped. If the wait time is longer than timeout +the command will error out. For setups with high write qps you may need to increase this value. + +
+ +### More Reading + +* [`MoveTables` in practice](../../../concepts/move-tables/) +* [`MoveTables` reference docs](../../programs/vtctldclient/vtctldclient_movetables/) diff --git a/content/en/docs/21.0/reference/vreplication/reshard.md b/content/en/docs/21.0/reference/vreplication/reshard.md new file mode 100644 index 000000000..1bf3a55d8 --- /dev/null +++ b/content/en/docs/21.0/reference/vreplication/reshard.md @@ -0,0 +1,306 @@ +--- +title: Reshard +description: Reshard a keyspace to achieve horizontal scaling +weight: 20 +aliases: ['/docs/reference/vreplication/v2/reshard/'] +--- + +{{< warning >}} +These workflows can have a significant impact on the source tablets (which are often in production) — especially when a PRIMARY tablet is used as a source. You can limit the impact on the source tablets using the [`--vreplication_copy_phase_max_*` vttablet flags](../flags/#vreplication_copy_phase_max_innodb_history_list_length) +{{< /warning >}} + +## Description + +[`Reshard`](../../programs/vtctldclient/vtctldclient_reshard/) is used to create and manage workflows to horizontally shard an existing keyspace. The source keyspace can be unsharded or sharded. + +## Command + +Please see the [`Reshard` command reference](../../programs/vtctldclient/vtctldclient_reshard/) for a full list of sub-commands and their flags. + +### The Basic Reshard Workflow Lifecycle + +1. Initiate the migration using `create`
+`Reshard --workflow --target-keyspace create --source-shards --target-shards ` +1. Monitor the workflow using `show` or `status`
+`Reshard --workflow --target-keyspace show`
+`Reshard --workflow --target-keyspace status`
+1. Confirm that data has been copied over correctly using [VDiff](../vdiff) +1. Cutover to the target keyspace with `SwitchTraffic`
+`Reshard --workflow --target-keyspace switchtraffic` +1. Cleanup vreplication artifacts and source shards with `complete`
+`Reshard --workflow --target-keyspace complete` + +## Parameters + +### Action + +[`Reshard`](../../programs/vtctldclient/vtctldclient_reshard/) is an "umbrella" command. The [`action` or sub-command](../../programs/vtctldclient/vtctldclient_reshard/#see-also) defines the operation on the workflow. + +#### Create +
+ +[`create`](../../programs/vtctldclient/vtctldclient_movetables/vtctldclient_movetables_create/) sets up and creates a new workflow. The workflow name should not conflict with that of an existing workflow. + +
+ +#### Show +
+ +[`show`](../../programs/vtctldclient/vtctldclient_movetables/vtctldclient_movetables_show/) displays useful information about a workflow — including recent logs. + +
+ +#### Status +
+ +[`status`](../../programs/vtctldclient/vtctldclient_movetables/vtctldclient_movetables_status/) (or `progress`) reports the progress of a workflow by showing the percentage of data copied across targets, if workflow is in copy state, and the replication lag between the target and the source once the copy phase is completed. It also shows the current state of traffic for the tables involved in the workflow. + +It is too expensive to get real-time row counts of tables, using _count(*)_, say. So we use the statistics available in the `information_schema` to approximate copy progress. This data can be significantly off (up to 50-60%) depending on the utilization of the underlying mysql server resources. You can manually run `ANALYZE TABLE` to update the statistics if so desired. + +
+ +#### SwitchTraffic +
+ +[`SwitchTraffic`](../../programs/vtctldclient/vtctldclient_movetables/vtctldclient_movetables_switchtraffic) switches traffic forward for the `tablet-types` specified. This replaces the previous `SwitchReads` and `SwitchWrites` commands with a single one. It is now possible to switch all traffic with just one command, and this is the default behavior. Also, you can now switch replica, rdonly and primary traffic in any order: earlier you needed to first `SwitchReads` (for replicas and rdonly tablets) first before `SwitchWrites`. + +{{< info >}} +Note that VTGate can [buffer queries](../../features/vtgate-buffering/) when switching traffic which can virtually eliminate any visible impact on application users. +{{}} + +
+ +#### ReverseTraffic +
+ +[`ReverseTraffic`](../../programs/vtctldclient/vtctldclient_movetables/vtctldclient_movetables_reversetraffic/) switches traffic in the reverse direction for the `tablet-types` specified. The traffic should have been previously switched forward using `SwitchTraffic` for the `cells` and `tablet_types` specified. + +{{< info >}} +Note that VTGate can [buffer queries](../../features/vtgate-buffering/) when reversing traffic which can virtually eliminate any visible impact on application users. +{{}} + +
+ +#### Cancel +
+ +[`cancel`](../../programs/vtctldclient/vtctldclient_movetables/vtctldclient_movetables_cancel/) can be used if a workflow was created in error or was misconfigured and you prefer to create a new workflow instead of fixing this one. Cancel can only be called if no traffic has been switched. It removes vreplication-related artifacts like rows from vreplication and copy_state tables in the sidecar `_vt` database along with the new target shards from the topo and, by default, the target tables on the target keyspace +(see `--keep-data` and `--rename-tables`). + +
+ +#### Complete +
+ +{{< warning >}} +This is a destructive command +{{< /warning >}} + +[`complete`](../../programs/vtctldclient/vtctldclient_movetables/vtctldclient_movetables_complete/) is used after all traffic has been switched. It removes vreplication-related artifacts like rows from vreplication and copy_state tables in the sidecar `_vt` database along with the original source shards from the topo. By default, the source tables are also dropped on the source shards +(see `--keep-data` and `--rename-tables`) . + +
+ +### options + +Each [`action` or sub-command](../../programs/vtctldclient/vtctldclient_reshard/#see-also) has additional options/parameters that can be used to modify its behavior. Please see the [command's reference docs](../../programs/vtctldclient/vtctldclient_reshard/) for the full list of command options or flags. `actions` are common to both `MoveTables` and `Reshard` workflows. Only the `create` action has different parameters, all other actions have common options and similar semantics. Below we will add additional information for a subset of key options. + +#### --auto-start +**optional**\ +**default** true + +
+ +Normally the workflow starts immediately after it is created. If this flag is set +to false then the workflow is in a Stopped state until you explicitly start it. + +
+ +###### Uses + +* Allows updating the rows in `_vt.vreplication` after `Reshard` has setup the +streams. For example, you can add some filters to specific tables or change the +projection clause to modify the values on the target. This +provides an easier way to create simpler Materialize workflows by first using +`Reshard` with auto_start false, updating the BinlogSource as required by your +Materialize and then start the workflow. +* Changing the `copy_state` and/or `pos` values to restart a broken `Reshard` workflow +from a specific point of time + +#### --cells +**optional**\ +**default** local cell (of source tablet)\ +**string** + +
+ +Comma seperated list of Cell(s) and/or CellAlias(es) to replicate from. + +{{< info >}} +You can alternatively specify `--all-cells` if you want to replicate from source tablets in any existing cell (the local cell of the target tablet will be preferred). +{{< /info >}} + +
+ +###### Uses + +* Improve performance by picking a tablet in cells in network proximity with the target +* Reduce bandwidth costs by skipping cells that are in different availability zones +* Select cells where replica lags are lower + +#### --defer-secondary-keys +**optional**\ +**default** false + +{{< warning >}} +This flag is currently **experimental**. +{{< /warning >}} + +
+ +If true, any secondary keys are dropped from the table definitions on the target shard(s) as we first initialize the +tables for the [copy phase](../internal/life-of-a-stream/#copy). The exact same key definitions +are then re-added when the copy phase completes for each table. + +With this method all secondary index records for the table are generated in one bulk operation. This should significantly +improve the overall copy phase execution time on large tables with many secondary keys — especially with +[MySQL 8.0.31](https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-31.html) and later due to InnoDB's support for +parallel index builds. This is logically similar to the +[`mysqldump` `--disable-keys` option](https://dev.mysql.com/doc/refman/en/mysqldump.html#option_mysqldump_disable-keys). + +
+ +#### --dry-run +**optional**\ +**default** false + +
+ +For the `SwitchTraffic`, `ReverseTraffic`, and `complete` actions, you can do a dry run where no actual steps are taken +but the command logs all the steps that would be taken. + +
+ +#### --keep-data +**optional**\ +**default** false + +
+ +Usually, the target tables are deleted by `Cancel`. If this flag is used the target tables will not be deleted. + +
+ +#### --keep-routing-rules +**optional**\ +**default** false + +
+ +Usually, any routing rules created by the workflow in the source and target keyspace are removed by `Complete` or `Cancel`. If this flag is used the routing rules will be left in place. + +
+ +#### --max-replication-lag-allowed +**optional**\ +**default** the value used for `--timeout` + +
+ +While executing `SwitchTraffic` we ensure that the VReplication lag for the workflow is less than this duration, otherwise report an error and don't attempt the switch. The calculated VReplication lag is the estimated maximum lag across workflow streams between the last event seen at the source and the last event processed by the target (which would be a heartbeat event if we're fully caught up). Usually, when VReplication has caught up, this lag should be very small (under a second). + +While switching write traffic, we temporarily make the source databases read-only, and wait for the targets to catchup. This means that the application can effectively be partially down for this cutover period as writes will pause or error out. While switching write traffic this flag can ensure that you only switch traffic if the current lag is low, thus limiting this period of write-unavailability and avoiding it entirely if we're not likely to catch up within the `--timeout` window. + +While switching read traffic this can also be used to set an approximate upper bound on how stale reads will be against the replica tablets when using `@replica` shard targeting. + +
+ +#### --on-ddl +**optional**\ +**default** IGNORE + +
+ +This flag allows you to specify what to do with DDL SQL statements when they are encountered +in the replication stream from the source. The values can be as follows: + +* `IGNORE`: Ignore all DDLs (this is also the default, if a value for `on-ddl` + is not provided). +* `STOP`: Stop when DDL is encountered. This allows you to make any necessary + changes to the target. Once changes are made, updating the workflow state to + `Running` will cause VReplication to continue from just after the point where + it encountered the DDL. Alternatively you may want to `Cancel` the workflow + and create a new one to fully resync with the source. +* `EXEC`: Apply the DDL, but stop if an error is encountered while applying it. +* `EXEC_IGNORE`: Apply the DDL, but ignore any errors and continue replicating. + +{{< warning >}} +We caution against against using `EXEC` or `EXEC_IGNORE` for the following reasons: + * You may want a different schema on the target + * You may want to apply the DDL in a different way on the target + * The DDL may take a long time to apply on the target and may disrupt replication, performance, and query execution while it is being applied (if serving traffic from the target) +{{< /warning >}} + +
+ +#### --enable-reverse-replication +**optional**\ +**default** true + +
+ +`SwitchTraffic` for primary tablet types, by default, starts a reverse replication stream with the current target as the source, replicating back to the original source. This enables a quick and simple rollback mechanism using `ReverseTraffic`. This reverse workflow name is that of the original workflow concatenated with \_reverse. + +If set to false these reverse replication streams will not be created and you will not be able to rollback once you have switched write traffic over to the target. + +
+ +#### --stop-after-copy + +**optional** +**default** false + +
+ +If set, the workflow will stop once the Copy phase has been completed i.e. once +all tables have been copied and VReplication decides that the lag +is small enough to start replicating, the workflow state will be set to Stopped. + +
+ +###### Uses +* If you just want a consistent snapshot of all the tables you can set this flag. The workflow +will stop once the copy is done and you can then mark the workflow as `Complete`d + +#### --source-shards +**mandatory** + +
+ +Comma separated shard names to reshard from. + +
+ +#### --tablet-types +**optional**\ +**default** "in_order:REPLICA,PRIMARY"\ +**string** + +
+ +Source tablet types to replicate from (e.g. PRIMARY, REPLICA, RDONLY). The value +specified impacts [tablet selection](../tablet_selection/) for the workflow. + +
+ +#### --timeout +**optional**\ +**default** 30s + +
+ +For primary tablets, SwitchTraffic first stops writes on the source primary and waits for the replication to the target to +catchup with the point where the writes were stopped. If the wait time is longer than timeout +the command will error out. For setups with high write qps you may need to increase this value. + +
diff --git a/content/en/docs/21.0/reference/vreplication/shardlevelmigrations.md b/content/en/docs/21.0/reference/vreplication/shardlevelmigrations.md new file mode 100644 index 000000000..8dadec37d --- /dev/null +++ b/content/en/docs/21.0/reference/vreplication/shardlevelmigrations.md @@ -0,0 +1,84 @@ +--- +title: Shard Level Migrations +description: Migrate large keyspaces without downtime +weight: 120 +aliases: ['/docs/reference/vreplication/v2/shardlevelmigrations/'] +--- + +## Description + +{{< warning >}} +This feature is an **experimental** variant of the [`MoveTables`](../../../reference/programs/vtctldclient/vtctldclient_movetables/) command that +allows you to migrate individual shards from one keyspace to another. Please be +sure to understand the limitations and requirements below. +{{< /warning >}} + +The full set of options for the `MoveTables` command [can be found here](../../../reference/programs/vtctldclient/vtctldclient_movetables/). +The options and other aspects specific to shard level migrations will be covered here. + +## Use Case + +The [`Mount`](../mount/) and [`Migrate`](../migrate/) commands are the default +method provided for moving keyspaces from one Vitess cluster to another. This +method, however, only provides a one-time one-way cutover without the ability +to revert in the way that [`MoveTables`](../movetables/) does. + +This feature introduces the concept of partial keyspaces where some shards are +served from a different keyspace during migration. This is useful for a specific +but critical use-case where a large production Vitess setup (100s of shards) is +being migrated to a new data center or provider. Migrating the entire cluster in +one go using MoveTables could cause an unacceptable downtime due to the large +number of primaries that need to be synced when writes are switched. + +Supporting shard level migrations allows you to move very large keyspaces from one Vitess cluster +to another in an incremental way, cutting over traffic and reverting as needed +on a per-shard basis. When using this method, there is also a +new [`vtgate`](../../programs/vtgate/) `--enable-partial-keyspace-migration` +flag that enables support for shard level query routing so that individual +shards can be routed to one side of the migration or the other during the +migration period — *including when shard targeting is used*. + +## Key Parameter + +#### --source-shards +**mandatory** (for shard level migrations) +
+ +A list of one or more shards that you want to migrate from the source keyspace +to the target keyspace. + +
+ +## Limitations and Requirements + + - The source and target keyspaces must have the exact same shard definitions + - Query routing is all or nothing per shard, so you must *move all tables in the workflow +that you wish to migrate* and you would use [`SwitchTraffic --tablet-types=RDONLY,REPLICA,PRIMARY`](../../programs/vtctldclient/vtctldclient_movetables/vtctldclient_movetables_switchtraffic/) +to switch *read and write traffic* all at once for the shard(s) + - When the entire migration is complete, you cannot use the standard +[`complete`](../../../reference/programs/vtctldclient/vtctldclient_movetables/vtctldclient_movetables_complete/) workflow action and the final cleanup step requires manual work: + - The _reverse workflows should be [`cancel`](../../programs/vtctldclient/vtctldclient_movetables/vtctldclient_movetables_cancel/)ed. This will clean up + the both the global routing rules and the shard routing rules associated with the migration + - Note: [`Workflow delete`](../../programs/vtctldclient/vtctldclient_workflow/vtctldclient_workflow_delete/) does not clean up the shard routing rules + - You would need to perform any and all source side cleanup manually + +## Related Vitess Flags + +In order to support the shard level query routing during the migration, +the `--enable-partial-keyspace-migration` flag must be set for all of the +[`vtgate`](../../programs/vtgate/) instances in the target Vitess cluster. + +{{< warning >}} +This routing support has a performance impact for all traffic and thus you +should only use this flag during the migration period and remove it once the +migration is complete. +{{< /warning >}} + +## Related Commands + +You can view the current shard level routing rules in place using +the [`GetShardRoutingRules`](../../programs/vtctldclient/vtctldclient_getshardroutingrules/) +[`vtctldclient`](../../programs/vtctldclient/) command and you can save updated +routing rules using the +[`ApplyShardRoutingRules`](../../programs/vtctldclient/vtctldclient_applyshardroutingrules/) +command. diff --git a/content/en/docs/21.0/reference/vreplication/tablet_selection.md b/content/en/docs/21.0/reference/vreplication/tablet_selection.md new file mode 100644 index 000000000..016801560 --- /dev/null +++ b/content/en/docs/21.0/reference/vreplication/tablet_selection.md @@ -0,0 +1,49 @@ +--- +title: Tablet Selection +weight: 300 +--- + +### Introduction + +For both [VTGate VStreams and VTTablet VReplication streams](../../../concepts/vstream/) we must choose a tablet to serve the role of *source* (vstreamer). This +tablet selection is performed by the internal `TabletPicker` component. + +{{< info >}} +For VReplication streams a tablet also serves the role of *target* (vapplier). These, however, will always be the primary tablets in the target keyspace as we +need to replicate the streamed writes within the target shard. +{{< /info >}} + +### Cells and Cell Preference + +By default the `TabletPicker` will only look for viable (healthy and serving) source tablets of the specified tablet type(s) within the local cell (or cell alias within which the local cell belongs) of the +calling process — the `vtgate` managing the VStream or the target `vttablet` for the VReplication stream — and it will select a random one from the candidate +list. If you want to support cross-cell streams then you will need to specify the list of cells or any +[CellAlias](../../programs/vtctl/cell-aliases/) that contain a list of cells using the `--cells` flag in your VReplication +workflow commands like [`MoveTables`](../movetables/) or the +[`VStreamFlags.Cells`](https://pkg.go.dev/vitess.io/vitess/go/vt/proto/vtgate#VStreamFlags) field in a +[`VStreamRequest`](https://pkg.go.dev/vitess.io/vitess/go/vt/proto/vtgate#VStreamRequest). + +Even with the `--cells` flag specified, by default, the `TabletPicker` will give preference to a healthy and serving tablet within the local cell of the calling process. If there are multiple candidates in the local cell, it will pick one at random. If no healthy tablets exist in the local cell pool, then it will give preference to tablets within cells belonging to the same cell alias as the local cell. If none exist here, then it moves on to selecting candidates from cells provided using the `--cells` flag in your VReplication workflow commands. + +When using the [VTGate VStream API](../vstream/), you can override this local cell preference by specifying the `CellPreference` field as `onlyspecified` and a list of cells with `Cells` in the [VStreamFlags](https://pkg.go.dev/vitess.io/vitess/go/vt/proto/vtgate#VStreamFlags) request object. This will then only pick tablets from the cells provided. + + +### Tablet Types + +#### VReplication + +For VReplication the tablet types determines the candidate types made available for potential selection as the source for a stream (default value is `in_order:REPLICA,PRIMARY`). The target tablet will provide this value to the `TabletPicker` to determine the viable source tablet candidates. You specify the value on the client side using your +workflow command's `--tablet-types` flag. + +You can also specify that the tablet types should be used in the order of preference as listed in the `--tablet-types` flag using the `--tablet-types-in-preference-order` flag. For example `--tablet-types "REPLICA,PRIMARY" --tablet-types-in-preference-order` would cause a replica source tablet to be used whenever possible +and a primary tablet would only be used as a fallback in the event that there are no viable replica tablets +available at the time. + +{{< info >}} +When using the [VTGate VStream API](../vstream/) you should instead migrate to using the new `TabletOrder` field in the [VStreamFlags](https://pkg.go.dev/vitess.io/vitess/go/vt/proto/vtgate#VStreamFlags) request object as usage of the "in_order" string hint will eventually be deprecated and removed. +{{< /info >}} + +#### VStream + +For a VStream there is no default tablet type. You must specify an individual tablet type using the +[`VStreamRequest.TabletType`](https://pkg.go.dev/vitess.io/vitess/go/vt/proto/vtgate#VStreamRequest) field. \ No newline at end of file diff --git a/content/en/docs/21.0/reference/vreplication/throttling.md b/content/en/docs/21.0/reference/vreplication/throttling.md new file mode 100644 index 000000000..4cf3a3cc4 --- /dev/null +++ b/content/en/docs/21.0/reference/vreplication/throttling.md @@ -0,0 +1,32 @@ +--- +title: Throttling +weight: 300 +--- + +### Introduction + +VReplication moves potentially massive amounts of data from one place to another, whether within the same keyspace and shard or across keyspaces. It copies tables and follows up to apply ongoing changes on those tables by reading the binary logs (aka the changelog). + +This places load on both the source side (where VReplication reads data from) as well as on target side (where VReplication writes data to). + +On the source side, VReplication reads the content of tables. This typically means loading pages from disk contending for disk IO, and "polluting" the MySQL buffer pool. The operation competes with normal production traffic for both IO and memory resources. If the source is a replica, the operation may lead to replication lag. If the source is a primary, this may lead to write contention. + +On the target side, VReplication writes massive amount of data. If the target server is a primary with replicas, then the replicas may incur replication lag. + +To help address the above issues, VReplication uses the [tablet throttler](../../features/tablet-throttler/) mechanism to push back both reads and writes. + +### Target Throttling + +On the target side, VReplication wishes to consult the overall health of the target shard (there can be multiple shards to a VReplication workflow, and here we discuss the single shard at the end of a single VReplication stream). That shard may serve production traffic unrelated to VReplication. VReplication therefore consults the internal equivalent of `/throttler/check` when writing data to the shard's primary. This checks the MySQL replication lag on relevant replicas in the shard. The throttler will delay the VReplication writes of both table-copy and changelog events until the shard's replication lag is under the defined threshold (1s by default). + +### Source Throttling + +On the source side, VReplication only affects the single MySQL server it reads from, and has no impact on the overall shard. VStreamer, the source endpoint of VReplication, consults the equivalent of `/throttler/check-self`, which looks for replication lag on the source host. + +As long as `check-self` fails — meaning that the replication lag is not within the defined threshold (1s by default) — VStreamer will not read table data, nor will it pull events from the changelog. + +### Impact of Throttling + +VReplication throttling is designed to give preference to normal production traffic while operating in the background. Production traffic will see less contention. The downside is that VReplication can take longer to operate. Under high load in production VReplication may altogether stall, to resume later when the load subsides. + +Throttling will push back VReplication on replication lag. On systems where replication lag is normally high this can prevent VReplication from being able to operate normally. In such systems consider configuring `--throttle-threshold` to a value that agrees with your constraints. The default throttling threshold is at `1` second replication lag. diff --git a/content/en/docs/21.0/reference/vreplication/vdiff.md b/content/en/docs/21.0/reference/vreplication/vdiff.md new file mode 100644 index 000000000..61158989e --- /dev/null +++ b/content/en/docs/21.0/reference/vreplication/vdiff.md @@ -0,0 +1,153 @@ +--- +title: VDiff +description: Compare the source and target in a workflow to ensure integrity +weight: 40 +aliases: ['/docs/reference/vreplication/vdiff2/'] +--- + +### Description + +VDiff does a row by row comparison of all tables associated with the workflow, diffing the +source keyspace and the target keyspace and reporting counts of missing/extra/unmatched rows. + +It is highly recommended that you do this before you finalize a workflow with `SwitchTraffic` and `complete`. + +{{< warning >}} +VDiff supports diffing tables without a defined [Primary Key (PK)](https://dev.mysql.com/doc/refman/en/primary-key-optimization.html) +and it will use a Primary Key equivalent (PKE: index on non-NULL unique column(s)) if one exists. +However, be aware of the additional overhead and time required to do the comparison in these +cases, particularly if there is no PK _or_ PKE as diffing the table will then require a full table +scan to read every row and a filesort to sort all of them before the diff can start (and this will +have to be done every time it's restarted/resumed). If the table is of any significant size then +it's strongly recommended that you define a PK for the table. +{{}} + +### Command + +VDiff takes different sub-commands or actions similar to how the [`MoveTables`](../movetables/)/[`Reshard`](../reshard/) commands work. Please see [the command's reference docs](../../../reference/programs/vtctldclient/vtctldclient_vdiff/) for additional info. The following sub-commands or actions are supported: + +#### Start a New VDiff + +The [`create` action](../../../reference/programs/vtctldclient/vtctldclient_vdiff/vtctldclient_vdiff_create/) schedules a VDiff to run on the primary tablet of each target shard to verify the subset of data that will live on the given shard. If you do not pass a specific UUID then one will be generated. + +Each scheduled VDiff has an associated UUID which is returned by the `create` action. You can use it +to monitor progress. Example: + +```shell +$ vtctldclient --server=localhost:15999 VDiff --target-keyspace customer --workflow commerce2customer create +VDiff a35b0006-e6d9-416e-bea9-917795dc5bf3 scheduled on target shards, use show to view progress +``` + +#### Resume a Previous VDiff + +The [`resume` action](../../../reference/programs/vtctldclient/vtctldclient_vdiff/vtctldclient_vdiff_resume/) allows you to resume a previously completed VDiff, picking up where it left off and comparing the records where the Primary Key column(s) are greater than the last record processed — with the progress and other status information saved when the run ends. This allows you to do approximate rolling or differential VDiffs (e.g. done after `MoveTables` finishes the initial copy phase and then again just before `SwitchTraffic`). + +Example: + +```shell +$ vtctldclient --server=localhost:15999 VDiff --target-keyspace customer --workflow commerce2customer resume 4c664dc2-eba9-11ec-9ef7-920702940ee0 +VDiff 4c664dc2-eba9-11ec-9ef7-920702940ee0 resumed on target shards, use show to view progress +``` + +{{< warning >}} +We cannot guarantee accurate results for `resume` when different collations are used for a table between the source and target keyspaces (more details can be seen [here](https://github.com/vitessio/vitess/pull/10497)). +{{< /warning >}} + +#### Show Progress/Status of a VDiff + +Using the [`show` action](../../../reference/programs/vtctldclient/vtctldclient_vdiff/vtctldclient_vdiff_show/) you can either `show` a specific UUID or use the `last` convenience shorthand to look at the most recently created VDiff. Example: + +```shell +$ vtctldclient --server=localhost:15999 VDiff --target-keyspace customer --workflow commerce2customer show last + +VDiff Summary for customer.commerce2customer (4c664dc2-eba9-11ec-9ef7-920702940ee0) +State: completed +RowsCompared: 196 +HasMismatch: false +StartedAt: 2022-06-26 22:44:29 +CompletedAt: 2022-06-26 22:44:31 + +Use "--format=json" for more detailed output. + +$ vtctldclient --server=localhost:15999 VDiff --format=json --target-keyspace customer --workflow commerce2customer show last +{ + "Workflow": "commerce2customer", + "Keyspace": "customer", + "State": "completed", + "UUID": "4c664dc2-eba9-11ec-9ef7-920702940ee0", + "RowsCompared": 196, + "HasMismatch": false, + "Shards": "0", + "StartedAt": "2022-06-26 22:44:29", + "CompletedAt": "2022-06-26 22:44:31" +} + +$ vtctldclient --server=localhost:15999 VDiff --format=json --target-keyspace customer --workflow p1c2 show daf1f03a-03ed-11ed-9ab8-920702940ee0 +{ + "Workflow": "p1c2", + "Keyspace": "customer", + "State": "started", + "UUID": "daf1f03a-03ed-11ed-9ab8-920702940ee0", + "RowsCompared": 51, + "HasMismatch": false, + "Shards": "-80,80-", + "StartedAt": "2022-07-15 03:26:03", + "Progress": { + "Percentage": 48.57, + "ETA": "2022-07-15 03:26:10" + } +} +``` + +`show all` lists all VDiffs created for the specified keyspace and workflow. + +{{< info >}} +It is too expensive to get exact real-time row counts for tables, using e.g. `SELECT COUNT(*)`. +So we instead use the statistics available in the +[`information_schema`](https://dev.mysql.com/doc/refman/en/information-schema-tables-table.html) +to approximate the number of rows in each table when initializing a VDiff on the target +primary tablet(s). This data is then used in the progress report and it can be significantly +off (up to 50-60+%) depending on the utilization of the underlying MySQL server resources and +the age of the tables. You can specify the `create` `--update-table-stats` flag so that VDiff +will run [`ANALYZE TABLE`](https://dev.mysql.com/doc/refman/en/analyze-table.html) to update the +statistics for the tables involved on the target primary tablet(s) before executing the +VDiff in order to improve the accuracy of the progress report. +{{< /info >}} + +#### Stopping a VDiff + +The [`stop` action](../../../reference/programs/vtctldclient/vtctldclient_vdiff/vtctldclient_vdiff_stop/) allows you to stop a running VDiff for any reason — for example, the load on the system(s) may be too high at the moment and you want to postpone the work until off hours. You can then later use the [`resume` action](../../../reference/programs/vtctldclient/vtctldclient_vdiff/vtctldclient_vdiff_resume/) to start the VDiff again from where it left off. Example: + +```shell +$ vtctldclient --server=localhost:15999 VDiff --format=json --target-keyspace customer --workflow commerce2customer stop ad9bd40e-0c92-11ed-b568-920702940ee0 +{ + "UUID": "ad9bd40e-0c92-11ed-b568-920702940ee0", + "Action": "stop", + "Status": "completed" +} +``` + +{{< info >}} +Attempting to `stop` a VDiff that is already completed is a no-op. +{{< /info >}} + +#### Delete VDiff Results + +You use the [`delete` action](../../../reference/programs/vtctldclient/vtctldclient_vdiff/vtctldclient_vdiff_delete/) to either `delete` a specific UUID or use the `all` shorthand to delete all VDiffs created for the specified keyspace and workflow. Example: + +```shell +$ vtctldclient --server=localhost:15999 VDiff --target-keyspace customer --workflow commerce2customer delete all +VDiff delete completed + +$ vtctldclient --server=localhost:15999 VDiff --format=json --target-keyspace customer --workflow commerce2customer delete all +{ + "Action": "delete", + "Status": "completed" +} +``` + +{{< info >}} +Deletes are idempotent, so attempting to `delete` VDiff data that does not exist is a no-op. + +All VDiff data associated with a VReplication workflow is deleted when the workflow is deleted. +{{< /info >}} diff --git a/content/en/docs/21.0/reference/vreplication/vreplication.md b/content/en/docs/21.0/reference/vreplication/vreplication.md new file mode 100644 index 000000000..04a1ae3c9 --- /dev/null +++ b/content/en/docs/21.0/reference/vreplication/vreplication.md @@ -0,0 +1,207 @@ +--- +title: Overview +description: VReplication features, design, and options in a nutshell +weight: 2 +aliases: ['/docs/reference/features/vreplication/'] +--- + +VReplication is a core component of Vitess that can be used to compose +many features. It can be used for the following use cases: + +* **Data Migrations**: Use [`MoveTables`](../movetables/) to migrate tables into + Vitess or across [`Keyspaces`](../../../concepts/keyspace/) with online revertable workflows. +* **Resharding**: Use [`Reshard`](../reshard/) to scale [`Keyspaces`](../../../concepts/keyspace/) + up or down as needed with automated online revertable workflows. +* **Materialized Views**: Use [`Materialize`](../materialize/) to create + a view of the source table in a target keyspace. This materialization + can use a different primary [`vindex`](../../features/vindexes/) than the source. + It can also materialize a subset of the source columns, or add new expressions from + the source. This view will be kept up-to-date in real time. One can also materialize + reference tables onto all shards for improved data locality, allowing + Vitess to perform efficient local joins with those materialized tables. +* **Realtime Rollups**: Use [`Materialize`](../materialize/) with aggregation + expressions in which case Vitess will create a rolled up version of the + source table which can be used for realtime analytics. +* **Lookup Vindexes**: Use the [`LookupVindex`](../../../reference/programs/vtctldclient/vtctldclient_lookupvindex/) command to create and backfill Lookup Vindexes. See the [`Creating a Lookup Vindex`](../../../user-guides/vschema-guide/backfill-vindexes/#createlookupvindex) section of the vschema user guide for example usage. +* **Online Schema Changes**: Use a [`ddl strategy of vitess`](../../../user-guides/schema-changes/ddl-strategies/) for native [online non-blocking schema + migrations](../../../user-guides/schema-changes/managed-online-schema-changes/) that are trackable, cancellable, revertible, and retryable. + All being safe to run in production due to intelligent throttling and + resource management. +* **Change Notifications (CDC)**: The [`VStream`](../../../concepts/vstream/) + component of VReplication can be used for the application or a systems + operator to subscribe to change notifications and use it to keep downstream + systems up-to-date with the source. +* **Job Queues**: VReplication can also be used to provide a job queue for + asynchronous processing of data using the [Messaging](../../features/messaging/) + feature. + +## Feature Description + +VReplication works as [a stream or set of streams](../internal/life-of-a-stream/). +Each stream establishes replication from a source keyspace/shard to a +target keyspace/shard. + +A given stream can replicate multiple tables. For each table, you can +specify a `SELECT` statement that represents both the transformation +rule and the filtering rule. The `SELECT` expressions specify the +transformation, and the `WHERE` clause specifies the filtering. + +The `SELECT` expressions can be any non-aggregate MySQL expression, or +they can also be `COUNT` or `SUM` as aggregate expressions. Aggregate +expressions combined with the corresponding `GROUP BY` clauses will +allow you to materialize real-time rollups of the source table, which +can be used for analytics. The target table can have a different name +from the source. + +For a sharded system like Vitess, multiple VReplication streams +may be needed to achieve the objective. This is because there +can be multiple source shards and multiple destination shards, and +the relationship between them may not be one to one. + +VReplication performs the following essential functions: + +* [Copy data](../internal/life-of-a-stream/#copy) + from the source to the destination table in a consistent + fashion. For a large table, this copy can be long-running. It can be + interrupted and resumed. If interrupted, VReplication can keep + the copied portion up-to-date with respect to the source, and it can + resume the copy process at a point that is consistent with the + current replication position. +* After copying is finished, it can continuously [replicate](../internal/life-of-a-stream/#replicate) + the data from the source to destination. +* The copying rule can be expressed as a `SELECT` statement. The + statement should be simple enough that the materialized table can + be kept up-to-date from the data coming from the binlog. For + example, joins in the `SELECT` statement are not supported today. +* Correctness verification: VReplication supports the [VDiff](../vdiff) command + which verifies that the target table is an exact representation of + the `SELECT` statement from the source by capturing consistent + snapshots of the source and target and comparing them against each + other. +* Journaling: If there is any kind of traffic cut-over where we + start writing to a different table than we used + to before, VReplication will save the current binlog positions + into a journal table. This can be used by other streams to resume + replication from the new source. +* Routing rules: Although this feature is itself not a direct + functionality of VReplication, it works hand in hand with it. It + automatically manages sophisticated rules about where to route queries + depending on the type of workflow being performed. For example, + it is used to control the cut-over during [`MoveTables`](../movetables/). + + + +## Other Properties of VReplication + +### Fast Replay + +VReplication has the capability to batch transactions if the send rate of the source +exceeds the replay rate of the destination. This allows it to catch up very quickly +when there is a backlog. Load tests have shown a 3-20X improvement over traditional +MySQL replication depending on the workload. + +### Accurate Lag Tracking + +The source [`VTTablet`](../../../concepts/vtgate/) sends its current time along with every event. This allows the +target to correct for clock skew while estimating replication lag. Additionally, +the source starts sending heartbeats if there is nothing to send. If the target +receives no events from the source at all, it knows that it's definitely lagged +and starts reporting itself accordingly. + +### Self-Replication + +VReplication allows you to set the source keyspace/shard to be the same as the target. +This is especially useful for performing schema rollouts: you can create the target +table with the intended schema and vreplicate from the source table to the new +target. Once caught up, you can cutover to write to the target table. +In this situation, an apply on +the target generates a binlog event that will be picked up by the source and +sent to the target. Typically, it will be an empty transaction. In such cases, +the target does not generally apply these transactions, because such an application +will generate yet another event. However, there are situations where one needs +to apply empty transactions, especially if it's a required stopping point. +VReplication can differentiate between these situations and apply events +only as needed. + +### Deadlocks and Lock Wait Timeouts + +It is possible that multiple streams can conflict with each other and cause +deadlocks or lock waits. When such things happen, VReplication silently retries +such transactions without reporting an error. It does increment a counter so +that the frequency of such occurrences can be tracked. + +### Automatic Retries + +If any other error is encountered, the replication is retried after a short wait. +Each time, the stream searches from the full list of available sources and picks +one at random. + +### Handle DDL + +The [`MoveTables`](../movetables/) and [`Reshard`](../reshard/) commands allow you to +specify a value for `on-ddl`. This allows you to specify what to do with DDL SQL + statements when they are encountered +in the replication stream from the source. The values can be as follows: + +* `IGNORE`: Ignore all DDLs (this is also the default, if a value for `on-ddl` + is not provided). +* `STOP`: Stop when DDL is encountered. This allows you to make any necessary + changes to the target. Once changes are made, updating the state to `Running` + will cause VReplication to continue from just after the point where it + encountered the DDL. +* `EXEC`: Apply the DDL, but stop if an error is encountered while applying it. +* `EXEC_IGNORE`: Apply the DDL, but ignore any errors and continue replicating. + +{{< warning >}} +We caution against against using `EXEC` or `EXEC_IGNORE` for the following reasons: + * You may want a different schema on the target + * You may want to apply the DDL in a different way on the target + * The DDL may take a long time to apply on the target and may disrupt replication, performance, and query execution while it is being applied (if serving traffic from the target) +{{< /warning >}} + +### Failover Continuation + +If a failover is performed on the target keyspace/shard, the new primary will +automatically resume VReplication from where the previous primary left off. + +### Tablet Selection + +VReplication automatically chooses viable tablets for the source and target of a given stream. See [tablet selection](../../vreplication/tablet_selection). + +### Throttling + +VReplication throttles operations when the source or target appear to be overloaded, indicated by replication lag. See [throttling](../../vreplication/throttling). + +## Monitoring and Troubleshooting + +### VTAdmin + +VTAdmin provides views into the current workflows running within a Vitess cluster. +See [`VTAdmin`](../../vtadmin). + +### VTTablet /debug/status + +The first place to look at is the `/debug/status` page of the target primary +[`VTtablet`](../../../concepts/tablet/). The bottom of the page shows the status +of all the VReplication streams. + +Typically, if there is a problem, the `Last Message` column will display the +error. Sometimes, it's possible that the stream cannot find a source. If so, +the `Source Tablet` would be empty. + +### VTTablet Logfile + +If the errors are not clear or if they keep disappearing, the VTTablet's INFO logfile +will contain information about what it's been doing with each stream. + +### Workflow Show + +The current status of the workflows and streams can also be fetched by using +the `vtctldclient` [`Workflow Show`](../workflow/) command. + +### Monitoring Variables + +VReplication also reports [a set of metrics](../metrics/) that can be scraped by +monitoring tools like [Prometheus](https://prometheus.io). + +Thresholds and alerts can be set to draw attention to potential problems. diff --git a/content/en/docs/21.0/reference/vreplication/vstream.md b/content/en/docs/21.0/reference/vreplication/vstream.md new file mode 100644 index 000000000..d42cd3efc --- /dev/null +++ b/content/en/docs/21.0/reference/vreplication/vstream.md @@ -0,0 +1,320 @@ +--- +title: VStream +description: Change event streams +weight: 75 +aliases: ['/docs/design-docs/vreplication/vstream/vscopy/'] +--- + +[Vitess Gateways](../../../concepts/vtgate/) (`vtgate`) provide a [`VStream` service](../../../concepts/vstream/) +that allows clients to subscribe to a change event stream for a set of tables. + +## Use Cases + +* **Change Data Capture (CDC)**: `VStream` can be used to capture changes to a +table and send them to a downstream system. This is useful for building +real-time data pipelines. + +## Overview + +`VStream` supports copying the current contents of a table — as you will often not have the binary logs going back +to the creation of the table — and then begin streaming new changes to the table from that point on. It supports +resuming this initial copy phase if it's interrupted for any reason. It also supports automatic handling of +[resharding events](../reshard/) — if the `VStream` is connected throughout then it will automatically transition from +the old shards to the new when traffic is switched ([`SwitchTraffic` or `ReverseTraffic`](../reshard/#switchtraffic)), and +if you were not connected but re-connect after traffic is switched ([`SwitchTraffic` or `ReverseTraffic`](../reshard/#switchtraffic)) +*but before the old shards are removed*, it will automatically catch up on any missed changes on the old shards before +seamlessly transitioning to the new shards and continuing to stream all changes made there. + +Events in the stream are [MySQL row based binary log events](https://dev.mysql.com/doc/refman/en/mysqlbinlog-row-events.html) — with [extended metadata](https://pkg.go.dev/vitess.io/vitess/go/vt/proto/binlogdata#VEvent) +— and can be processed by event bridges which support Vitess such as +[Debezium](https://debezium.io/documentation/reference/stable/connectors/vitess.html). +Other products such as [AirByte](https://airbyte.com) can also be used with [custom +Vitess connectors](https://docs.airbyte.com/connector-development/). + +{{< warning >}} +We recommend Debezium as it has native Vitess support and has been used in production +environments by many Vitess users. +{{< /warning >}} + +## API Details + +[`VStream` is a gRPC](https://pkg.go.dev/vitess.io/vitess/go/vt/vtgate/vtgateconn#VTGateConn.VStream) +that is part of the [`vtgate`](../../../concepts/vtgate/) service and is accessible via a +[`vtgate`](../../../concepts/vtgate/) process's `--grpc_port`. + +### RPC Parameters + +#### Context + +**Type** [Context](https://pkg.go.dev/context#Context)\ +**Required**\ +**Default** none + +In addition to the typical `Context` usage, it can contain a custom key-value pair where the key is `1` and the value is a +[`CallerID`](https://pkg.go.dev/vitess.io/vitess/go/vt/proto/vtrpc#CallerID). This value is then passed along to +[tablets](../../../concepts/tablet/) to identify the originating client for the request. It is not meant to be secure, but +primarily informational. The client can provide whatever info they want in the +[`CallerID`](https://pkg.go.dev/vitess.io/vitess/go/vt/proto/vtrpc#CallerID) fields and they will be trusted by the servers +as this information is primarily used to aid in monitoring and debugging. The [`vtgate`](../../../concepts/vtgate/) propagates +the value to the source [`vttablet`](../../../concepts/tablet/) processes and the tablets may use this information for various +monitoring, metrics, and logging purposes. It can, however, also be used for other purposes such as denying the client +access to tables during a migration ([`MoveTables`](../movetables/) or [`Reshard`](../reshard/)). + +#### TabletType + +**Type** [TabletType](https://pkg.go.dev/vitess.io/vitess/go/vt/proto/topodata#TabletType)\ +**Required**\ +**Default** UNKNOWN (you must specify a valid type) + +The tablet type to use [when selecting stream source tablets](../tablet_selection/). + +#### VGtid + +**Type** [VGtid](https://pkg.go.dev/vitess.io/vitess/go/vt/proto/binlogdata#VGtid)\ +**Required** + +The keyspace, shard, and GTID position list to start streaming from. If no `ShardGtid.Gtid` value is provided +then a [table copy phase](https://github.com/vitessio/vitess/issues/6277) will be initiated for the tables matched +by the provided [filter](#filter) on the given shard. + +If the `ShardGtid.Shard` value is omitted, this means that all shards in the keyspace specified in the `ShardGtid.Keyspace` value are included. +Additionally, if the `ShardGtid.Keyspace` value has a `/` prefix, you can use regular expressions such as `/.*` to include all keyspaces. + +#### Filter + +**Type** [Filter](https://pkg.go.dev/vitess.io/vitess/go/vt/proto/binlogdata#Filter)\ +**Required** + +The tables which you want to subscribe to change events from — in the given keyspace(s) and shard(s) contained +in the provided [VGtid](#vgtid) — and any query predicates to use when filtering the rows for which change +events will be generated. + +#### VStreamFlags + +##### MinimizeSkew + +**Type** bool\ +**Default** false + +When enabled the `vtgate` will keep the events in the stream roughly time aligned — it is aggregating streams coming +from each of the shards involved — using the event timestamps to ensure the maximum time skew between the source +tablet shard streams is kept under 10 minutes. When it detects skew between the source streams it will pause sending +the client more events and allow the lagging shard(s) to catch up. + +{{< info >}} +There is no strict ordering of events across shards and the client will need to examine the event timestamps. +{{}} + +##### HeartbeatInterval + +**Type** unsigned integer\ +**Default** 0 (none) + +How frequently, in seconds, to send heartbeat events to the client when there are no other events in the stream to +send. + +##### StopOnReshard + +**Type** bool\ +**Default** false + +When enabled the `vtgate` will send a reshard event to the client along with an `EOF` +`error` in the [`VStreamReader.Recv`](https://pkg.go.dev/vitess.io/vitess/go/vt/vtgate/vtgateconn#VStreamReader) +response and stop sending any further events. + +##### Cells + +**Type** string\ +**Default** "" + +If specified, these cells (comma-separated list) are used +[when selecting stream source tablets](../tablet_selection/). When no value is specified the `vtgate` will +default to looking for source tablets within its own local cell. + +##### CellPreference + +**Type** string\ +**Default** "" + +If specified, this determines which cells to give preference to during [tablet selection](../tablet_selection/). +By default, `preferlocalwithalias` is used in order to give preference to the caller's local cell and then any alias its cell belongs to. +If `onlyspecified` is given, then only tablets within the specified `Cells` field value will be considered. + +##### TabletOrder + +**Type** string\ +**Default** "" + +This replaces the `in_order` hint (e.g. `"in_order:REPLICA,PRIMARY"`) previously used to specify tablet type order [during source tablet selection](../tablet_selection/). + +### RPC Response + +The [`VStream` gRPC](https://pkg.go.dev/vitess.io/vitess/go/vt/vtgate/vtgateconn#VTGateConn.VStream) returns +a [`VStreamReader`](https://pkg.go.dev/vitess.io/vitess/go/vt/vtgate/vtgateconn#VStreamReader) and a non-nil `error` if +the stream could not be initialized. You would call the `Recv` method on that +[`VStreamReader`](https://pkg.go.dev/vitess.io/vitess/go/vt/vtgate/vtgateconn#VStreamReader) in a for loop and +responses will be sent when available. Each response consisting of the following two parameters: + +* An array of [`VEvent`](https://pkg.go.dev/vitess.io/vitess/go/vt/proto/binlogdata#VEvent) objects — the new messages to process in the stream +* An `error` — an error that, if non-nil, indicates the stream has been closed (`EOF`) or an error occurred + +### API Types + +* [TabletType](https://pkg.go.dev/vitess.io/vitess/go/vt/proto/topodata#TabletType) +* [VGtid](https://pkg.go.dev/vitess.io/vitess/go/vt/proto/binlogdata#VGtid) +* [ShardGtid](https://pkg.go.dev/vitess.io/vitess/go/vt/proto/binlogdata#ShardGtid) +* [Filter.Rule](https://pkg.go.dev/vitess.io/vitess/go/vt/proto/binlogdata#Rule) +* [LastPKEvent](https://pkg.go.dev/vitess.io/vitess/go/vt/proto/binlogdata#LastPKEvent) +* [TableLastPK](https://pkg.go.dev/vitess.io/vitess/go/vt/proto/binlogdata#TableLastPK) +* [VStreamFlags](https://pkg.go.dev/vitess.io/vitess/go/vt/proto/vtgate#VStreamFlags) +* [VStreamReader](https://pkg.go.dev/vitess.io/vitess/go/vt/vtgate/vtgateconn#VStreamReader) +* [VEvent](https://pkg.go.dev/vitess.io/vitess/go/vt/proto/binlogdata#VEvent) + +### Example Usage + +You can find a full example go client [here](https://github.com/vitessio/vitess/blob/main/examples/local/vstream_client.go). + +Below is a snippet showing how to use the `VStream` API in go: + +```go +gconn, err := vtgateconn.Dial(ctx, grpcAddress) +if err != nil { + t.Fatal(err) +} +defer gconn.Close() + +// lastPK is id1=4 +lastPK := sqltypes.Result{ + Fields: []*query.Field{{Name: "id1", Type: query.Type_INT64}}, + Rows: [][]sqltypes.Value{{sqltypes.NewInt64(4)}}, +} +tableLastPK := []*binlogdatapb.TableLastPK{{ + TableName: "t1", + Lastpk: sqltypes.ResultToProto3(&lastPK), +}} + +var shardGtids []*binlogdatapb.ShardGtid +var vgtid = &binlogdatapb.VGtid{} +shardGtids = append(shardGtids, &binlogdatapb.ShardGtid{ + Keyspace: "ks", + Shard: "-80", + Gtid: "MySQL56/89f66ef2-863a-11ed-9bdf-3d270fd3f552:1-30219" + TablePKs: tableLastPK, +}) +shardGtids = append(shardGtids, &binlogdatapb.ShardGtid{ + Keyspace: "ks", + Shard: "80-", + Gtid: "MySQL56/2174b383-5441-11e8-b90a-c80aa9429562:1-29516,24da167-0c0c-11e8-8442-00059a3c7b00:1-19" + TablePKs: tableLastPK, +}) +vgtid.ShardGtids = shardGtids +filter := &binlogdatapb.Filter{ + Rules: []*binlogdatapb.Rule{{ + Match: "t1", + Filter: "select * from t1", + }}, +} +flags := &vtgatepb.VStreamFlags{} +reader, err := gconn.VStream(ctx, topodatapb.TabletType_PRIMARY, vgtid, filter, flags) + +var evs []*binlogdatapb.VEvent +for { + e, err := reader.Recv() + ... +``` + +
+ +#### Copy All Tables From All Shards in the `ks` Keyspace + +Below is a snippet in Go that demonstrates how to copy from all shards by omitting `ShardGtid.Shard`: + +```go +vgtid := &binlogdatapb.VGtid{ + ShardGtids: []*binlogdatapb.ShardGtid{{ + Keyspace: "ks", + Gtid: "", + }}, +} +filter := &binlogdatapb.Filter{ + Rules: []*binlogdatapb.Rule{{ + Match: "/.*", + }}, +} +flags := &vtgatepb.VStreamFlags{} +reader, err := gconn.VStream(ctx, topodatapb.TabletType_PRIMARY, vgtid, filter, flags) +``` + +
+ +#### Copy All Tables From All Shards in All Keyspaces + +Below is a snippet in Go that demonstrates how to copy from all keyspaces by specifying `/.*` as the value for `ShardGtid.Keyspace`: + +```go +vgtid := &binlogdatapb.VGtid{ + ShardGtids: []*binlogdatapb.ShardGtid{{ + Keyspace: "/.*", + Gtid: "", + }}, +} +filter := &binlogdatapb.Filter{ + Rules: []*binlogdatapb.Rule{{ + Match: "/.*", + }}, +} +flags := &vtgatepb.VStreamFlags{} +reader, err := gconn.VStream(ctx, topodatapb.TabletType_PRIMARY, vgtid, filter, flags) +``` + +
+{{< warning >}} +Copying from all keyspaces can generate a significant amount of load and potentially impact production traffic. +Therefore, please exercise caution when using regular expressions in production. +{{< /warning >}} + +## Debugging + +There is also an SQL interface that can be used for testing and debugging from a `vtgate`. Here's an example: + +```mysql +$ mysql --quick + +mysql> SET WORKLOAD=OLAP; + +mysql> VSTREAM * FROM commerce.corder\G +*************** 1. row *************** + op: + + order_id: 1 +customer_id: 1 + sku: NULL + price: 10 +************** 2. row *************** + op: * + order_id: 1 +customer_id: 1 + sku: NULL + price: 7 +************** 3. row *************** + op: - + order_id: 1 +customer_id: 1 + sku: NULL + price: 7 +… +``` + +## Monitoring + +VTGates publish vstream metrics listed [here](../metrics/#vtgate-metrics). + +## More Reading + +* [VStream Copy](https://github.com/vitessio/vitess/issues/6277) +* [VStream API and Resharding](../internal/vstream-stream-migration/) +* [VStream Skew Minimization](../internal/vstream-skew-detection/) +* Debezium Connector for Vitess + * [Docs](https://debezium.io/documentation/reference/stable/connectors/vitess.html) + * [Source](https://github.com/debezium/debezium-connector-vitess/) +* Blog posts + * [Streaming Vitess at Bolt](https://medium.com/bolt-labs/streaming-vitess-at-bolt-f8ea93211c3f) diff --git a/content/en/docs/21.0/reference/vreplication/workflow.md b/content/en/docs/21.0/reference/vreplication/workflow.md new file mode 100644 index 000000000..8a09c7529 --- /dev/null +++ b/content/en/docs/21.0/reference/vreplication/workflow.md @@ -0,0 +1,9 @@ +--- +title: Workflow +description: VReplication command to perform common actions on all types of workflows +weight: 50 +--- + +### Description + +Workflow is a convenience command for useful actions that are common to all VReplication workflows. Please see the command's [reference documentation](../../../reference/programs/vtctldclient/vtctldclient_workflow/) for additional information. diff --git a/content/en/docs/21.0/reference/vtadmin/_index.md b/content/en/docs/21.0/reference/vtadmin/_index.md new file mode 100644 index 000000000..1bc9cf787 --- /dev/null +++ b/content/en/docs/21.0/reference/vtadmin/_index.md @@ -0,0 +1,5 @@ +--- +title: VTAdmin +weight: 7 +--- + diff --git a/content/en/docs/21.0/reference/vtadmin/architecture.md b/content/en/docs/21.0/reference/vtadmin/architecture.md new file mode 100644 index 000000000..cf0f00dd1 --- /dev/null +++ b/content/en/docs/21.0/reference/vtadmin/architecture.md @@ -0,0 +1,91 @@ +--- +title: Architecture +--- + +# Overview + +VTAdmin is made up of two components: +- `vtadmin-web`, the browser interface +- `vtadmin-api`, the HTTP(S) and gRPC API + +The `vtadmin-web` front-end queries its data from `vtadmin-api`. In turn, `vtadmin-api` issues queries against the vtgates and vtctlds across one or more Vitess clusters. The [clusters.yaml config file](https://github.com/vitessio/vitess/blob/main/doc/vtadmin/clusters.yaml) defines this mapping from VTAdmin to cluster(s). + +Single-cluster deployments are the simplest and most common configuration. The local example in the ["Get Started" documentation](../../../get-started/) is a good example of a single-cluster deployment. + +```mermaid +flowchart LR + vtadmin-web --> vtadmin-api + vtadmin-api --> vtgate + vtadmin-api --> vtctld + + vtgate <--> topology + vtctld <--> topology + + topology["Topology Service"] +``` + +Large Vitess deployments can be "multi-cluster". These environments have two or more Vitess clusters, each with its own Topology Service, that are isolated from one another. VTAdmin supports these, too. An example of a multi-cluster Vitess deployment is an environment that has one Vitess cluster per geographic region: + +```mermaid +flowchart LR + vtadmin-web --> vtadmin-api + + vtadmin-api --> vtgate_us + vtadmin-api --> vtctld_us + + vtadmin-api --> vtgate_ap + vtadmin-api --> vtctld_ap + + subgraph us-east-1 + topology_us["Topology Service"] + vtgate_us["vtgate"] + vtctld_us["vtctld"] + + vtgate_us <--> topology_us + vtctld_us <--> topology_us + end + + subgraph ap-east-1 + topology_ap["Topology Service"] + vtgate_ap["vtgate"] + vtctld_ap["vtctld"] + + vtgate_ap <--> topology_ap + vtctld_ap <--> topology_ap + end +``` + +# The Life Cycle of a VTAdmin Request + +To understand how data moves through VTAdmin, let's look at life cycle of a typical request: fetching a list of all of the schemas. We'll use the single-cluster ["Get Started"](../../../get-started/) environment as an example: + +A list of schemas in VTAdmin + +When a user loads the `/schemas` view in the browser, `vtadmin-web` makes an HTTP `GET /api/schema/local/commerce/corder` request to `vtadmin-api`. `vtadmin-api` then issues gRPC requests to the vtgates and vtctlds in the cluster to construct the list of schemas. Here's what that looks like in detail: + +```mermaid +sequenceDiagram + autonumber + + participant W as vtadmin-web + participant A as vtadmin-api + participant G as vtgate + participant V as vtctld + + W ->> A: GET /api/schemas + A ->> G: SHOW vitess_tablets + A ->> V: GetKeyspaces + A ->> V: GetSchema + Note left of V: { Keyspace: "commerce", TabletAlias: "zone1-101" } + A ->> V: GetSchema + Note left of V: { Keyspace: "customer", TabletAlias: "zone1-201" } + A ->> W: 200 OK + Note right of W: { "schemas": [...] } +``` + +1. `vtadmin-web` makes a `GET /api/schema/local/commerce/corder` request against `vtadmin-api`'s HTTP endpoint. +2. `vtadmin-api` discovers a vtgate in the cluster and issues a `SHOW vitess_tablets` query on that vtgate to get a list of all tablets in the cluster. +3. `vtadmin-api` discovers a vtctld in the cluster and makes a `GetKeyspaces` gRPC request to get a list of all keyspaces in the cluster. +4. For each of these keyspaces, `vtadmin-api` chooses a random, serving tablet. The keyspace and tablet alias are used to make a `GetSchema` gRPC request to the vtctld to get the full schema, with all of the tables, on that tablet in the keyspace. +5. Since the "Get Started" example has two keyspaces, `commerce` and `customer`, `vtadmin-api` issues separate requests in parallel. +6. Finally, the `GetSchema` gRPC response is annotated with additional metadata (like cluster information), and returned to `vtadmin-web` as JSON. diff --git a/content/en/docs/21.0/reference/vtadmin/cluster_discovery.md b/content/en/docs/21.0/reference/vtadmin/cluster_discovery.md new file mode 100644 index 000000000..1b64198ff --- /dev/null +++ b/content/en/docs/21.0/reference/vtadmin/cluster_discovery.md @@ -0,0 +1,199 @@ +--- +title: Cluster Discovery +--- + +# Overview +VTAdmin manages to be stateless because it mostly proxies queries to VTGates and Vtctlds within Vitess clusters. It is able to do this through **cluster discovery**, the mechanism by which addresses for VTGates and Vtctlds are discovered. + +Discovery is specified as a part of [cluster configuration](https://github.com/vitessio/vitess/blob/main/doc/vtadmin/clusters.yaml). Cluster configuration is passed as the command line argument `--cluster` to VTAdmin API like so: +```bash +vtadmin \ + --addr ":14200" \ + --http-origin "http://localhost:14201" \ + --http-tablet-url-tmpl "http://{{ .Tablet.Hostname }}:15{{ .Tablet.Alias.Uid }}" \ + --tracer "opentracing-jaeger" \ + --grpc-tracing \ + --http-tracing \ + --logtostderr \ + --alsologtostderr \ + --rbac \ + --rbac-config="./vtadmin/rbac.yaml" \ + --cluster "id=local,name=local,discovery=staticfile,discovery-staticfile-path=./vtadmin/discovery.json,tablet-fqdn-tmpl={{ .Tablet.Hostname }}:15{{ .Tablet.Alias.Uid }}" +``` +where, in this example, `discovery=staticfile` is specifying static file discovery. + +VTAdmin API currently supports a few methods for discovery: + +#### Static file discovery +With **static file discovery**, VTGate and Vtctld addresses are specified in a static file, whose path is provided as a parameter to the `--cluster` command line argument: +```bash + --cluster "id=local,name=local,discovery=staticfile,discovery-staticfile-path=./vtadmin/discovery.json,tablet-fqdn-tmpl={{ .Tablet.Hostname }}:15{{ .Tablet.Alias.Uid }}" +``` +
+In this example, the file lives at `./vtadmin/discovery.json`, and might look like: + +```json +{ + "vtctlds": [ + { + "host": { + "fqdn": "localhost:15000", + "hostname": "localhost:15999" + } + } + ], + "vtgates": [ + { + "host": { + "fqdn": "localhost:15001", + "hostname": "localhost:15991" + } + } + ] +} +``` + +where `fqdn` specifies the address of the component's web UI, and `hostname` specifies the address of the component's gRPC server. + +##### Multiple clusters +To specify multiple clusters, repeat the `--cluster` flag: +```bash +vtadmin \ + --addr ":14200" \ + --http-origin "http://localhost:14201" \ + --http-tablet-url-tmpl "http://{{ .Tablet.Hostname }}:15{{ .Tablet.Alias.Uid }}" \ + --tracer "opentracing-jaeger" \ + --grpc-tracing \ + --http-tracing \ + --logtostderr \ + --alsologtostderr \ + --rbac \ + --rbac-config="./vtadmin/rbac.yaml" \ + --cluster "id=local,name=local,discovery=staticfile,discovery-staticfile-path=./vtadmin/discovery-local.json,tablet-fqdn-tmpl={{ .Tablet.Hostname }}:15{{ .Tablet.Alias.Uid }}" + --cluster "id=prod,name=prod,discovery=staticfile,discovery-staticfile-path=./vtadmin/discovery-prod.json,tablet-fqdn-tmpl={{ .Tablet.Hostname }}:15{{ .Tablet.Alias.Uid }}" +``` +
+The above multi-cluster configuration would show up in VTAdmin Web as: + +Multiple clusters on the /clusters page in VTAdmin + +### Dynamic discovery +It is possible to discover clusters _after_ VTAdmin API has been initialized through **dynamic discovery**. When using dynamic discovery, a cluster configuration is passed as either [gRPC metadata](https://github.com/grpc/grpc-go/blob/master/Documentation/grpc-metadata.md) or an HTTP header cookie. + +A very basic cluster configuration may look like: +```json +{ + "id": "dynamic", + "name": "my-dynamic-cluster", + "discovery": "dynamic", + "discovery-dynamic-discovery": "{\"vtctlds\": [ { \"host\": { \"fqdn\": \"localhost:15000\", \"hostname\": \"localhost:15999\" } } ], \"vtgates\": [ { \"host\": {\"hostname\": \"localhost:15991\" } } ] }" +} +``` +
+ +In order to use dynamic discovery, set command line argument `--enable-dynamic-clusters=true`. At this time, it is only possible to discover a single cluster with each request. We're working on adding multicluster support to dynamic discovery. +#### HTTP header cookie +A cluster configuration can be passed as an HTTP cookie named `cluster` along with HTTP requests. + +When passing a cluster configuration as an HTTP header cookie, the cluster configuration must first be base64 encoded and then URL encoded. A cURL request with the above cluster configuration would look like: + +```bash +$ curl -X GET \ + http://localhost:14200/api/clusters \ + -H 'cookie: cluster=ewogICAgImlkIjogImR5bmFtaWMiLAogICAgIm5hbWUiOiAibXktZHluYW1pYy1jbHVzdGVyIiwKICAgICJkaXNjb3ZlcnkiOiAiZHluYW1pYyIsCiAgICAiZGlzY292ZXJ5LWR5bmFtaWMtZGlzY292ZXJ5IjogIntcInZ0Y3RsZHNcIjogWyB7IFwiaG9zdFwiOiB7IFwiZnFkblwiOiBcImxvY2FsaG9zdDoxNTAwMFwiLCBcImhvc3RuYW1lXCI6IFwibG9jYWxob3N0OjE1OTk5XCIgfSB9IF0sIFwidnRnYXRlc1wiOiBbIHsgXCJob3N0XCI6IHtcImhvc3RuYW1lXCI6IFwibG9jYWxob3N0OjE1OTkxXCIgfSB9IF0gfSIKfQ%3D%3D' + +{"result":{"clusters":[{"id":"dynamic","name":"my-dynamic-cluster"}]},"ok":true} +``` +
+ +#### gRPC metadata +A cluster configuration can also be passed as gRPC metadata with the key `cluster`. The code snippet below does the following: +1. Creates a gRPC connection to the VTAdmin client at address `localhost:14200` +2. Creates an outgoing context and adds the cluster configuration as gRPC metadata +3. Calls `GetClusters` with the created context and gRPC metadata + +```golang +package main + +import ( + "context" + "encoding/base64" + "flag" + "fmt" + + "google.golang.org/grpc" + "google.golang.org/grpc/metadata" + + "vitess.io/vitess/go/cmd/vtctldclient/cli" + "vitess.io/vitess/go/vt/log" + + vtadminpb "vitess.io/vitess/go/vt/proto/vtadmin" +) + +func main() { + addr := flag.String("addr", ":14200", "") + + flag.Parse() + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + cc, err := grpc.DialContext(ctx, *addr, grpc.WithInsecure()) + fatal(err) + + defer cc.Close() + + client := vtadminpb.NewVTAdminClient(cc) + clusterJSON := `{ + "id": "dynamic", + "name": "my-dynamic-cluster", + "vtctlds": [ + { + "host": { + "fqdn": "localhost:15000", + "hostname": "localhost:15999" + } + } + ], + "vtgates": [ + { + "host": { + "hostname": "localhost:15991" + } + } + ] + } + ` + + ctx = metadata.NewOutgoingContext(ctx, metadata.New(map[string]string{ + "cluster": base64.StdEncoding.EncodeToString([]byte(clusterJSON)), + })) + + resp, err := client.GetClusters(ctx, &vtadminpb.GetClustersRequest{}) + if err != nil { + log.Fatal(err) + } + + data, err := cli.MarshalJSON(resp) + if err != nil { + log.Fatal(err) + } + + fmt.Printf("%s\n", data) +} +``` +
+ +The result of the above program is: +```bash +$ ./bin/vtadminclient +{ + "clusters": [ + { + "id": "dynamic", + "name": "my-dynamic-cluster" + } + ] +} +``` +A full gist example can be found [here](https://gist.github.com/ajm188/5b5c8ba0cc5660298697e0f762081d45). \ No newline at end of file diff --git a/content/en/docs/21.0/reference/vtadmin/img/schemas.png b/content/en/docs/21.0/reference/vtadmin/img/schemas.png new file mode 100644 index 0000000000000000000000000000000000000000..59e343e698a8769a861622a92b6aa11f34c177b3 GIT binary patch literal 940145 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� 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�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�u~B;OgW8 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
b+)6-iEeHrkWXnldYZ|IE_>N>I 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

d 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≺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

  • `cluster_id`: Optional cluster filter
  • | - | +| Get a keyspace | GET `/keyspaces/` | - | GET `/api/keyspace//` |
  • `cluster_id`: Optional cluster filter
  • | - | +| Rebuild keyspace graph | - | - | PUT `/api/keyspace///rebuild_keyspace_graph` |
  • `allow_partial`: Specifies whether a SNAPSHOT keyspace is allowed to serve with an incomplete set of shards. Ignored for all other types of keyspaces
  • `cells`: Specifies a comma-separated list of cells to update
  • | - | +| Remove keyspace cell | - | - | PUT `/api/keyspace///remove_keyspace_cell` |
  • `cell`: Cell to be removed
  • `force`: Proceed even if the cell's topology server cannot be reached. The assumption is that you turned down the entire cell, and just need to update the global topo data.
  • `recursive`: Also delete all tablets in that cell belonging to the specified keyspace.
  • | - | +| Validate keyspace | POST `/keyspaces/` | `action`: `ValidateKeyspace` | PUT `/api/keyspace//validate` |
  • `ping_tablets`: Indicates whether all tablets should be pinged during the validation process
  • | - | +| Validate keyspace schema | POST `/keyspaces/` | `action`: `ValidateSchemaKeyspace` | PUT `/keyspace///validate/schema` | - | - | +| Validate keyspace version | POST `/keyspaces/` | `action`: `ValidateVersionKeyspace` | PUT `/api/keyspace///validate/version` | - | - | +| Validate keyspace permissions | POST `/keyspaces/` | `action`: `ValidatePermissionsKeyspace` | To be implemented in VTAdmin | - | Need to implement in VTAdmin | +| Delete keyspace | - | - | DELETE `/api/keyspace//` |
  • `recursive`: Recursively delete all shards in the keyspace. If not specified or set to false, the keyspace must be empty (have no shards), or DeleteKeyspace returns an error
  • | - | +| Get keyspace tablets | GET `/keyspace//tablets` | `cell`, `cells` | GET `/api/tablets` |
  • `cluster_id`: Optional cluster filter
  • | - | +| Get keyspace tablets for a specific shard | GET `/keyspace//tablets/` | `cell`, `cells` | GET `/api/tablets` |
  • `cluster_id`: Optional cluster filter
  • | - | +| Get shards | GET `/shards` | - | GET `/api/keyspaces` |
  • `cluster_id`: Optional cluster filter
  • | In VTAdmin, to get all shards across all keyspaces, first get all keyspaces, and shards are returned within every keyspace [`keyspace.Shards`](https://github.com/vitessio/vitess/blob/main/proto/vtadmin.proto#L223) | +| Get a shard | GET `/shards/` | - | GET `/api/keyspace//` |
  • `cluster_id`: Optional cluster filter
  • | In VTAdmin, to get a shard, first get the shard's keyspace, and then filter for the shard in [`keyspace.Shards`](https://github.com/vitessio/vitess/blob/main/proto/vtadmin.proto#L223) | +| Validate a shard | POST `/shards/` | `action`: `ValidateShard` | PUT `/api/shard////validate` |
  • `ping_tablets`: Indicates whether all tablets should be pinged during the validation process.
  • | - | +| Validate shard schema | POST `/shards/` | `action`: `ValidateSchemaShard` | To be implemented in VTAdmin | - | Need to implement in VTAdmin | +| Validate shard version | POST `/shards/` | `action`: `ValidateVersionShard` | PUT `/api/shard////validate_version` | - | - | +| Validate shard permissions | POST `/shards/` | `action`: `ValidatePermissionsShard` | To be implemented in VTAdmin | - | Need to implement in VTAdmin | +| Get SrvKeyspaces for a cell | GET `/srv_keyspace/` | - | GET `/api/srvkeyspaces` |
  • `cell`: Optional cell filter
  • `cluster_id`: Optional cluster filter
  • | The VTAdmin method returns all SrvKeyspaces across all clusters and their keyspaces if the `cluster_id` parameter is not provided. | +| Get SrvKeyspaces for a specific keyspace | GET`/srv_keyspace//` | - | GET `/api/srvkeyspace//` |
  • `cell`: Optional cell filter
  • | - | +| Get all tablets by cell and/or shard | GET `/tablets` | `shard`,`cell` | GET `/api/tablets` |
  • `cluster_id`: Optional cluster filter
  • | - | +| Get a tablet | GET `/tablets/` | - | GET `/api/tablets/` |
  • `cluster_id`: Optional cluster filter
  • | - | +| Get tablet health | GET `/tablets//health` | - | GET `/api/tablet//healthcheck` |
  • `cluster_id`: Optional cluster filter
  • | - | +| Get a tablet's full status | - | - | GET `/api/tablet//full_status` |
  • `cluster_id`: Optional cluster filter
  • | - | +| Ping tablet | POST `/tablets/` | `action`: `PingTablet` | GET `/api/tablet//ping` |
  • `cluster_id`: Optional cluster filter
  • | - | +| Refresh tablet | POST `/tablets/` | `action`: `RefreshState` | PUT `/api/tablet//refresh` |
  • `cluster_id`: Optional cluster filter
  • | - | +| Refresh tablet replication source | - | - | PUT `/api/tablet//refresh_replication_source`|
  • `cluster_id`: Optional cluster filter
  • | - | +| Reload tablet schema | POST `/tablets/` | `action`: `ReloadSchema` | PUT `/api/tablet//reload_schema` |
  • `cluster_id`: Optional cluster filter
  • | - | +| Set tablet to read-only | - | - | PUT `/api/tablet//set_read_only`|
  • `cluster_id`: Optional cluster filter
  • | - | +| Set tablet to read-write | - | - | PUT `/api/tablet//set_read_write` |
  • `cluster_id`: Optional cluster filter
  • | - | +| Start replication on tablet | - | - | PUT `/api/tablet//start_replication` |
  • `cluster_id`: Optional cluster filter
  • | - | +| Stop replication on tablet | - | - | PUT `/api/tablet//stop_replication` |
  • `cluster_id`: Optional cluster filter
  • | - | +| Mark tablet as externally promoted | - | - | POST `/api/tablet//externally_promoted` |
  • `cluster_id`: Optional cluster filter
  • | - | +| Delete tablet | POST `/tablets/` | `action`: `DeleteTablet` | DELETE `/api/tablet/` |
  • `allow_primary`: Whether or not the primary can be deleted
  • `cluster_id`: Optional cluster filter
  • | - | +| Run a vtctl command | GET `/vtctl` | `body`: array of vtctl commands | Unsupported by VTAdmin | - | We recommend using [vtctldclient](https://vitess.io/docs/16.0/reference/programs/vtctldclient/) for running any other vtctl commands | +| Apply schema changes | POST `/schema/apply` | `keyspace`, `sql`, `ddl_strategy`, `replica_timeout_seconds` | Unsupported by VTAdmin | - | Unsupported by VTAdmin | +| Get vtctl features | GET `/features` | - | GET `/debug/env` | - | Returns the current env vars for VTAdmin API. Must have [`http-no-debug` flag](https://vitess.io/docs/14.0/reference/programs/vtadmin/#http-server-flags) set to false. | \ No newline at end of file diff --git a/content/en/docs/21.0/reference/vtctldclient-transition/_index.md b/content/en/docs/21.0/reference/vtctldclient-transition/_index.md new file mode 100644 index 000000000..6ba77d418 --- /dev/null +++ b/content/en/docs/21.0/reference/vtctldclient-transition/_index.md @@ -0,0 +1,6 @@ +--- +title: vtctldclient Transition +description: Reference material for transitioning from `vtctlclient` to `vtctldclient` +weight: 8 +--- + diff --git a/content/en/docs/21.0/reference/vtctldclient-transition/command_diff.md b/content/en/docs/21.0/reference/vtctldclient-transition/command_diff.md new file mode 100644 index 000000000..bd5e38bb4 --- /dev/null +++ b/content/en/docs/21.0/reference/vtctldclient-transition/command_diff.md @@ -0,0 +1,47 @@ +--- +title: Command Diff +weight: 3 +--- + +The following table highlights the main differences in naming between `vtctlclient` and `vtctldclient`. + +Unless noted here, command names have a one-to-one mapping between the legacy `vtctlclient` and `vtctldclient`, though output formats may have changed (e.g. `GetKeyspace` now outputs valid JSON). +For stronger guarantees of compatibility, we highly encourage programming directly against the [`VtctldServer` gRPC API][grpc_api_def]. + +[grpc_api_def]: https://github.com/vitessio/vitess/blob/04870fc27499ac64dcf6050c41fe9c44aea7099c/proto/vtctlservice.proto#L32-L33. + +### Command name differences + +| | `vtctlclient` command name (OLD) | `vtctldclient` command name (NEW) | +|-|-|-| +| | N/A | [`ApplyShardRoutingRules`](../../programs/vtctldclient/vtctldclient_applyroutingrules/) | +| | `CopySchemaShard` | (deleted) | +| | `CreateLookupVindex` | [`LookupVindex create`](../../programs/vtctldclient/vtctldclient_lookupvindex/vtctldclient_lookupvindex_create/) | +| | `DeleteShard` | [`DeleteShards`](../../programs/vtctldclient/vtctldclient_deleteshards/) | +| | `DeleteTablet` | [`DeleteTablets`](../../programs/vtctldclient/vtctldclient_deletetablets/) | +| | `ExecuteFetchAsAllPrivs` | (not yet migrated) | +| | `ExecuteFetchAsDba` | [`ExecuteFetchAsDBA`](../../programs/vtctldclient/vtctldclient_executefetchasdba/) | +| | `ExternalizeVindex` | [`LookupVindex externalize`](../../programs/vtctldclient/vtctldclient_lookupvindex/vtctldclient_lookupvindex_externalize/) | +| | `ListBackups` | [`GetBackups`](../../programs/vtctldclient/vtctldclient_getbackups/) | +| | N/A | [`GetFullStatus`](../../programs/vtctldclient/vtctldclient_getfullstatus/) | +| | N/A | [`GetShardRoutingRules`](../../programs/vtctldclient/vtctldclient_getshardroutingrules/) | +| | `GetShardReplication` | [`ShardReplicationPositions`](../../programs/vtctldclient/vtctldclient_shardreplicationpositions/) | +| | `GetSrvKeyspace` | [`GetSrvKeyspaces`](../../programs/vtctldclient/vtctldclient_getsrvkeyspaces/) | +| | N/A | [`GetSrvVSchemas`](../../programs/vtctldclient/vtctldclient_getsrvvschemas/) | +| | N/A | [`GetTabletVersion`](../../programs/vtctldclient/vtctldclient_gettabletversion/) | +| | `ListAllTablets`, `ListShardTablets`, `ListTablets` | [`GetTablets`](../../programs/vtctldclient/vtctldclient_gettablets/) | +| | N/A | [`GetTopologyPath`](../../programs/vtctldclient/vtctldclient_gettopologypath/) | +| | N/A | [`GetWorkflows`](../../programs/vtctldclient/vtctldclient_getworkflows/) | +| | `InitShardPrimary` | (deleted) | +| | `Ping` | [`PingTablet`](../../programs/vtctldclient/vtctldclient_pingtablet/) | +| | N/A | [`SetKeyspaceDurabilityPolicy`](../../programs/vtctldclient/vtctldclient_setkeyspacedurabilitypolicy/) | +| | `SetReadOnly`, `SetReadWrite` | [`SetWritable`](../../programs/vtctldclient/vtctldclient_setwritable/) | +| | `Sleep` | [`SleepTablet`](../../programs/vtctldclient/vtctldclient_sleeptablet/) | +| | `TopoCat` | [`GetTopologyPath`](../../programs/vtctldclient/vtctldclient_gettopologypath/) | +| | `TopoCp` | (not yet migrated) | +| | `UpdateSrvKeyspacePartition` | (not yet migrated) | +| | `UpdateTabletAddrs` | (deleted) | +| | `VReplicationExec` | (deleted) | +| | `ValidatePermissionsKeyspace`, `ValidatePermissionsShard` | (deleted) | +| | `VtctldCommand` | N/A | +| | `WaitForFilteredReplication` | (deleted) | diff --git a/content/en/docs/21.0/reference/vtctldclient-transition/legacy_shim.md b/content/en/docs/21.0/reference/vtctldclient-transition/legacy_shim.md new file mode 100644 index 000000000..973593a77 --- /dev/null +++ b/content/en/docs/21.0/reference/vtctldclient-transition/legacy_shim.md @@ -0,0 +1,64 @@ +--- +title: Legacy Shim +weight: 2 +--- + +To make transitioning from `vtctlclient` to `vtctldclient` easier, both binaries provide shim mechanisms to run commands with each other's CLI syntaxes (and backing RPC interfaces). +Let's take each in turn. + +### `vtctldclient LegacyVtctlCommand` + +The new client provides a top-level command to run commands over the legacy `vtctlclient` interface. +This is useful to be able to use the new client "everywhere" but still be able to use functionality from the old client that has not been migrated yet (e.g. `Reshard`). + +For example: + +``` +$ vtctldclient --server ":15999" LegacyVtctlCommand -- Reshard show +``` + +You can also use this to transition a command in two phases, for example: + +1. Start with the existing invocation: + +```shell +vtctlclient --server ":15999" -- AddCellInfo --root /mycell --server_address "${some_topo_server}:1234" +``` + +2. Then "switch" to the new client but use the old code and syntax: + +```shell +vtctldclient --server ":15999" LegacyVtctlCommand -- AddCellInfo --root /mycell --server_address "${some_topo_server}:1234" +``` + +3. Finally, update the command to use the new code and CLI (notice the flag change from `--server_address` to `--server-address` and the removal of the `--`): + +```shell +vtctldclient --server ":15999" AddCellInfo --root /mycell --server-address "${some_topo_server}:1234" +``` + +### `vtctlclient VtctldCommand` + +Conversely, the _old_ client also provides a top-level command to run commands over the new `vtctldclient` interface. +This is useful to migrate your scripts over before necessarily deploying the new, separate binary everywhere. + +Taking the same example as above, in reverse: + + +1. Start with the existing invocation: + +```shell +vtctlclient --server ":15999" -- AddCellInfo --root /mycell --server_address "${some_topo_server}:1234" +``` + +2. Then switch to the new code and syntax (note the flag change from `--server_address` to `--server-address`) _without_ switching the invoked client binary: + +```shell +vtctlclient --server ":15999" -- VtctldCommand AddCellInfo --root /mycell --server-address "${some_topo_server}:1234" +``` + +3. Finally, update the command to use the new binary, cleaning up the extra flag separators (`--`) as well. + +```shell +vtctldclient --server ":15999" AddCellInfo --root /mycell --server-address "${some_topo_server}:1234" +``` diff --git a/content/en/docs/21.0/reference/vtctldclient-transition/overview.md b/content/en/docs/21.0/reference/vtctldclient-transition/overview.md new file mode 100644 index 000000000..28b59bee1 --- /dev/null +++ b/content/en/docs/21.0/reference/vtctldclient-transition/overview.md @@ -0,0 +1,45 @@ +--- +title: Overview +weight: 1 +--- + +Vitess v14 introduced a new, strongly-typed gRPC interface for cluster management, called [`VtctldServer`][grpc_vtctld_server]. +You can refer to the [original RFC][vtctld_server_rfc] for details, but the essential difference is the legacy `VtctlServer` implementation had a single, streaming RPC with the signature: + +```protobuf +rpc ExecuteVtctlCommand(ExecuteVtctlCommandRequest) returns (stream ExecuteVtctlCommandResponse); +``` + +
    + +The new interface has individual RPCs for each command, with command-specific request and response types. +Most RPCs are unary, while a few (`Backup`, for example) are streaming RPCs. + +### Enabling the new service + +In order to enable the new service interface, add `grpc-vtctld` to the list of services in the `--service_map` flag provided to `vtctld`. +Both the new and old interfaces may be run from the same `vtctld` instance, so during transition, most users will set `--service_map="grpc-vtctl,grpc-vtctld"`. + +### Transitioning clients + +The new service implementation comes with a corresponding client implementation, which is called [`vtctldclient`][vtctldclient_docs]. +Most existing commands can be run directly from the new client, for example: + +``` +$ vtctldclient --server ":15999" GetCellInfoNames +zone1 +``` + +
    + +For the full list of commands, as well as the flags they support, you can refer to the [client documentation][vtctldclient_docs]. + +Not all commands are currently implemented, but both the old ([`vtctlclient`][vtctlclient_docs]) and new (`vtctldclient`) clients provide shim mechanisms to use the new and old interfaces, respectively. +That is to say: `vtctlclient VtctldCommand ...` allows you to run new `vtctldclient` CLI commands, and `vtctldclient LegacyVtctlCommand ...` allows you to run old `vtctlclient` CLI commands. +For more details, refer to [the documentation][legacy_shim_docs]. + +[grpc_vtctld_server]: ../../programs/vtctld/#grpc-vtctld-mdash-new-as-of-v14 +[vtctld_server_rfc]: https://github.com/vitessio/vitess/issues/7058 +[vtctldclient_docs]: ../../programs/vtctldclient/ +[vtctlclient_docs]: ../../programs/vtctl/ +[legacy_shim_docs]: ../legacy_shim/ diff --git a/content/en/docs/21.0/reference/vtorc/_index.md b/content/en/docs/21.0/reference/vtorc/_index.md new file mode 100644 index 000000000..a20890d78 --- /dev/null +++ b/content/en/docs/21.0/reference/vtorc/_index.md @@ -0,0 +1,5 @@ +--- +title: VTOrc +weight: 9 +--- + diff --git a/content/en/docs/21.0/reference/vtorc/architecture.md b/content/en/docs/21.0/reference/vtorc/architecture.md new file mode 100644 index 000000000..400f69c23 --- /dev/null +++ b/content/en/docs/21.0/reference/vtorc/architecture.md @@ -0,0 +1,46 @@ +--- +title: Architecture +--- + +# Overview + +VTOrc is the automated fault detection and repair tool of Vitess. + +It follows the following high level steps for finding problems and fixing them - +- It queries the `vttablets` every `instance-poll-time` to gather information about the underlying MySQL instances. +- It also contacts the topology-server every `topo-information-refresh-duration` to know the desired state of the topology. +- Based on the information collected, VTOrc finds if there are any configuration issue on any of the MySQL instances and takes appropriate actions. +- These are then fixed by issuing RPCs to the associated `vttablets` + +```mermaid +stateDiagram-v2 + start: Collect Information + topoServer: Topology Server + vttablets: Vttablets + infoCollected: Information Received + problems: Problems Found + fixes: Run Fixes + + start --> topoServer: Every `topo-information-refresh-duration` + start --> vttablets: Every `instance-poll-time` + topoServer --> infoCollected: Keyspace and Vttablet records + vttablets --> infoCollected: MySQL information + infoCollected --> problems: Analyze collected information + problems --> fixes: RPCs to Vttablets +``` + +# Coordination among VTOrc instances and `vtctld` + +Users are encouraged to run multiple instances of VTOrc monitoring the same cluster because VTOrc too, like any other service is liable to failure +for reasons out of its control. Also, users run `vtctld` instances which can be used to run commands which alter the desired topology ([PlannedReparentShard](../../../user-guides/configuration-advanced/reparenting/#plannedreparentshard-planned-reparenting)) +and durability requirements ([SetKeyspaceDurabilityPolicy](../../programs/vtctldclient/vtctldclient_setkeyspacedurabilitypolicy/)). + +The most logical question that arises is how do we ensure coordination between multiple VTOrc instances and `vtctld`. + +We do so by using the existing central topology-server. Each of these services, acquire a shard lock before it proceeds to run any fixes. +This ensures that there is only one actor at any given point of time trying to alter the cluster. + +Another cause of concern could be recoveries run on stale data collected by VTOrc. +Since VTOrc instances use a polling method to load the information they use for fault detection, they can sometimes read outdated information. +To prevent VTOrc instances from running incorrect/unnecessary recoveries, all VTOrc instances refresh their local information that they require +for the fix after acquiring a shard lock. diff --git a/content/en/docs/21.0/reference/vtorc/img/VTOrc-Recent-Recoveries.png b/content/en/docs/21.0/reference/vtorc/img/VTOrc-Recent-Recoveries.png new file mode 100644 index 0000000000000000000000000000000000000000..4e565bc727876f44a3197875ff628017116c99e5 GIT binary patch literal 31112 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 literal 0 HcmV?d00001 diff --git a/content/en/docs/21.0/reference/vtorc/running_with_vtop.md b/content/en/docs/21.0/reference/vtorc/running_with_vtop.md new file mode 100644 index 000000000..75f9c932e --- /dev/null +++ b/content/en/docs/21.0/reference/vtorc/running_with_vtop.md @@ -0,0 +1,40 @@ +--- +title: Running with Vitess Operator +description: How to configure Vitess Kubernetes Operator to run VTOrc +--- + +## Get Started + +The Vitess operator deploys one VTOrc instance for each keyspace that it is configured for. Please look at the [VTOrc reference page](../../programs/vtorc) +to know all the flags that VTOrc accepts. + +## Configuring VTOrc in Vitess Operator + +The VTOrc can be configured to run for a given keyspace by specifying the `vitessOrchestrator` specification as part of the `keyspace` spec. +Resource limits and requests can be specified as part of the configuration and the default behaviour of VTOrc can be changed by specifying any +desired flags in the `extraFlags` field. + +The VTOrc UI runs on the port `15000` of the container and port-forwarding can be setup to access it. + +## Example Configuration + +An example deployment from the VTOrc [end to end test](https://github.com/planetscale/vitess-operator/tree/main/test/endtoend) on the Vitess Operator looks like: +```yaml +keyspaces: + - name: commerce + durabilityPolicy: semi_sync + turndownPolicy: Immediate + vitessOrchestrator: + resources: + limits: + memory: 128Mi + requests: + cpu: 100m + memory: 128Mi + extraFlags: + recovery-period-block-duration: 5s +``` + +The full configuration file is available [here](https://github.com/planetscale/vitess-operator/blob/main/test/endtoend/operator/101_initial_cluster_vtorc_vtadmin.yaml). + + diff --git a/content/en/docs/21.0/reference/vtorc/ui_api_metrics.md b/content/en/docs/21.0/reference/vtorc/ui_api_metrics.md new file mode 100644 index 000000000..2a8e77faa --- /dev/null +++ b/content/en/docs/21.0/reference/vtorc/ui_api_metrics.md @@ -0,0 +1,49 @@ +--- +title: UI, API and Metrics +--- + +# UI + +In order to use UI, `--port` flag has to be provided. + +Currently, the `/debug/status` lists the recent recoveries that VTOrc has performed. + +![VTOrc-recent-recoveries](../img/VTOrc-Recent-Recoveries.png) + +# APIs + +VTOrc supports the following APIs which can be used for monitoring and changing the behaviour of VTOrc. + + | New API | Additional notes | +|----------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| + | `/api/problems` | This API lists all the instances that have any problems in them. The problems range from replication not running to errant GTIDs. The new API also supports filtering using the keyspace and shard name | +| `/api/disable-global-recoveries` | This API disables the global recoveries in VTOrc. This makes it so that VTOrc doesn't repair any failures it detects. | + | `/api/enable-global-recoveries` | This API enables the global recoveries in VTOrc. | + | `/debug/health` | This API outputs the health of the VTOrc process. | + | `/debug/liveness` | This API outputs the liveness of the VTOrc process. | +| `/api/replication-analysis` | This API shows the replication analysis of VTOrc. Output is in JSON format. | +| `/api/errant-gtids` | This API shows the tablets that have errant GTIDs as detected by VTOrc. Output is in JSON format. This API supports filtering by keyspace and shard name. | +| `/api/database-state` | This API shows the internal database state of VTOrc. This API can be used to debug VTOrc. | + +# Metrics + +Metrics are available to be seen on the `/debug/vars` page. VTOrc exports the following metrics: + +| Metric | Usage | +|------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------| +| `PendingRecoveries` | The number of recoveries in progress which haven't completed. | +| `RecoveriesCount` | The number of recoveries run. This is further subdivided for all the different recoveries. | +| `SuccessfulRecoveries` | The number of succesful recoveries run. This is further subdivided for all the different recoveries. | +| `FailedRecoveries` | The number of recoveries that failed. This is further subdivided for all the different recoveries. | +| `ErrantGtidTabletCount` | The number of tablets with errant GTIDs as detected by VTOrc. | +| `DetectedProblems` | Binary gauge that shows the active problems that VTOrc has detected. This is further subdivided by TabletAlias, Keyspace, and Shard. | +| `planned_reparent_counts` | Number of times Planned Reparent Shard has been run. It is further subdivided by the keyspace, shard and the result of the operation. | +| `emergency_reparent_counts` | Number of times Emergency Reparent Shard has been run. It is further subdivided by the keyspace, shard and the result of the operation. | +| `reparent_shard_operation_timings` | Timings of reparent shard operations indexed by the type of operation. | + + +{{< info >}} +If there is some information about VTOrc that you would like to see +on the `/debug/status` page or support for some API or metrics to be added, please let us know in [slack](https://vitess.io/slack) +in the [#feat-vtorc](https://vitess.slack.com/archives/C02GSRZ8XAN) channel +{{< /info >}} diff --git a/content/en/docs/21.0/user-guides/_index.md b/content/en/docs/21.0/user-guides/_index.md new file mode 100644 index 000000000..32844607d --- /dev/null +++ b/content/en/docs/21.0/user-guides/_index.md @@ -0,0 +1,8 @@ +--- +title: User Guides +description: Task-based guides for common usage scenarios +weight: 4 +aliases: ['/user-guide/client-libraries.html', '/docs/user-guides/'] +--- + +We recommend running through a [get started](../get-started) on your favorite platform before running through user guides. diff --git a/content/en/docs/21.0/user-guides/configuration-advanced/_index.md b/content/en/docs/21.0/user-guides/configuration-advanced/_index.md new file mode 100644 index 000000000..93e1c5d63 --- /dev/null +++ b/content/en/docs/21.0/user-guides/configuration-advanced/_index.md @@ -0,0 +1,5 @@ +--- +title: Advanced Configuration +description: User guides covering advanced configuration concepts +weight: 5 +--- diff --git a/content/en/docs/21.0/user-guides/configuration-advanced/authorization.md b/content/en/docs/21.0/user-guides/configuration-advanced/authorization.md new file mode 100644 index 000000000..df57e6dbf --- /dev/null +++ b/content/en/docs/21.0/user-guides/configuration-advanced/authorization.md @@ -0,0 +1,265 @@ +--- +title: Authorization +weight: 10 +aliases: ['/docs/user-guides/authorization/'] +--- + +A common question is how to enforce fine-grained access control in Vitess. +This question comes up because Vitess uses connection pooling with fixed +MySQL users at the VTTablet level, and implements its own authentication +at the VTGate level. As a result, you cannot use the normal MySQL GRANTs +system to give certain application-level MySQL users more or less permissions +than others. + +The MySQL GRANT system is very extensive, and we have not reimplemented +all of this functionality in Vitess. What we have done is to enable you +to provide authorization via table-level ACLs, with a few basic +characteristics: + + * Individual users can be assigned 3 levels of permissions: + * Read (corresponding to read DML, e.g. `SELECT`) + * Write (corresponding to write DML, e.g. `INSERT`, `UPDATE`, `DELETE`) + * Admin (corresponding to DDL, e.g. `ALTER TABLE`) + * Permissions are applied on a specified set of tables, which can be + enumerated or specified by regex. + +## VTTablet parameters for table ACLs + +Note that the Vitess authorization via ACLs are applied at the VTTablet +level, as opposed to on VTGate, where authentication is enforced. +There are a number of VTTablet command line parameters that control the +behavior of ACLs. Let's review these: + + * `--enforce-tableacl-config`: Set this to `true` to ensure VTTablet will not + start unless there is a valid ACL configuration. This is used to + catch misconfigurations resulting in blanket access to authenticated + users. + * `--queryserver-config-enable-table-acl-dry-run`: Set to `true` to check the + table ACL at runtime, and only emit the + [TableACLPseudoDenied](../../configuration-basic/monitoring) + metric if a request would have been blocked. The request is then + allowed to pass, even if the ACL determined it should + be blocked. This can be used for testing new or updated ACL policies. + Default is `false`. + * `--queryserver-config-strict-table-acl`: Set to `true` to enforce table ACL + checking. **This needs to be enabled for your ACLs to have any effect.** + Any users that are not specified in an ACL policy will be denied. + Default is `false`. + * `--queryserver-config-acl-exempt-acl`: Allows you to specify the name + of an ACL (see below for format) that is exempt from enforcement. + Allows you to separate the rollout and the subsequent enforcement of + a specific ACL. + * `--table-acl-config`: Path to a file defining the table ACL config. + * `--table-acl-config-reload-interval`: How often the `table-acl-config` + should be reloaded. Set this to allow you to update the ACL file on + disk, and then have VTTablet automatically reload the file within this + period. Default is not to reload the ACL file after VTTablet startup. + Note that even if you do not set this parameter, you can always force + VTTablet to reload the ACL config file from disk by sending a SIGHUP + signal to your VTTablet process. + +## Warning regarding ACL reloading + +If you choose to reload the ACL config manually or on an interval, +and you are using the `-enforce-tableacl-config` option, your VTTablet +processes **will exit** if your table ACL config file contains an invalid +configuration at reload time. While this might be unexpected, this ensures +the highest level of security. Accordingly, it is very important to test +your ACL config thoroughly before applying, pay attention to access +permissions on the ACL config file, etc. + +## Format of the table ACL config file + +The file specified in the `--table-acl-config` parameter above is a JSON +file with the following example to explain the format: + +```json +{ + "table_groups": [ + { + "name": "aclname", + "table_names_or_prefixes": [ + "%" + ], + "readers": [ + "vtgate-user1" + ], + "writers": [ + "vtgate-user2" + ], + "admins": [ + "vtgate-user3" + ] + }, + { "... more ACLs here if necessary ..." } + ] +} +``` + +Notes: + + * `name`: This is the name of the ACL (`aclname` in the example above) and is + what needs to be specified in `--queryserver-config-acl-exempt-acl`, + if you need to exempt a specific ACL from enforcement. + * `table_names_or_prefixes`: A list of strings and/or regexes that allow + a rule to target a specific table or set of tables. Use `%` as in the + example to specify all tables. Note that only the SQL `%` "regex" + wildcard is supported here at the moment. + * `readers`: A list of VTGate users, specified by their [UserData](../../configuration-advanced/user-management/#userdata) + field in the authentication specification, that are allowed to read the + tables targeted by this ACL rule. Typically allows `SELECT`. + * `writers`: A list of VTGate users that are allowed to write to the tables + targeted by this ACL rule. Typically allows `INSERT`, `UPDATE` and `DELETE`. + * `admins`: A list of VTGate users that are allowed admin privileges on + the tables targeted by this ACL rule. Typically allows DDL privileges, + e.g. `ALTER TABLE`. Note that this also includes some commands that might + be thought of as DML, which are really DDL, like `TRUNCATE`) + * Note that `writers` privilege does not imply `readers` privilege, and `admins` + privilege does not imply `readers` or `writers`. You need to therefore + add your users to each list explicitly if you want them to have that + level of access. + * You cannot use multiple ACL rules to target the same (sub)set of tables. + Therefore the tablenames specified by `table_names_or_prefixes` + (or expanded by regexes) need to be non-overlapping between ACL rules. + Additionally, you cannot have duplicate tablenames or overlapping regexes + in the `table_names_or_prefixes` list in a single ACL rule. + +## Example + +Let's assume your Vitess cluster already has two keyspaces setup: + + * `keyspace1` with a single table `t` that should only be accessed by `myuser1` + * `keyspace2` with a single table `t` that should only be accessed by `myuser2` + +For the VTTablet configuration for `keyspace1`: +```sh +$ cat > acls_for_keyspace1.json << EOF +{ + "table_groups": [ + { + "name": "keyspace1acls", + "table_names_or_prefixes": ["%"], + "readers": ["myuser1", "vitess"], + "writers": ["myuser1", "vitess"], + "admins": ["myuser1", "vitess"] + } + ] +} +EOF + +$ vttablet --init_keyspace "keyspace1" --table-acl-config=acls_for_keyspace1.json --enforce-tableacl-config --queryserver-config-strict-table-acl ........ +``` + +Note that the `%` specifier for `table_names_or_prefixes` translates to +"all tables". + +Do the same thing for `keyspace2`: +```sh +$ cat > acls_for_keyspace2.json << EOF +{ + "table_groups": [ + { + "name": "keyspace2acls", + "table_names_or_prefixes": ["%"], + "readers": ["myuser2", "vitess"], + "writers": ["myuser2", "vitess"], + "admins": ["myuser2", "vitess"] + } + ] +} +EOF + +$ vttablet --init_keyspace "keyspace2" --table-acl-config=acls_for_keyspace2.json --enforce-tableacl-config --queryserver-config-strict-table-acl ........ +``` + +With this setup, the `myuser1` and `myuser2` users can only access their respective keyspaces, but the `vitess` +user can access both. + +```sh +# Attempt to access keyspace1 with myuser2 credentials through vtgate +$ mysql -h 127.0.0.1 -u myuser2 -ppassword2 -D keyspace1 -e "select * from t" +ERROR 1045 (HY000) at line 1: vtgate: http://vtgate-zone1-7fbfd8cc47-tchbz:15001/: target: keyspace1.-80.primary, used tablet: zone1-476565201 (zone1-keyspace1-x-80-replica-1.vttablet): vttablet: rpc error: code = PermissionDenied desc = table acl error: "myuser2" [] cannot run PASS_SELECT on table "t" (CallerID: myuser2) +target: keyspace1.80-.primary, used tablet: zone1-1289569200 (zone1-keyspace1-80-x-replica-0.vttablet): vttablet: rpc error: code = PermissionDenied desc = table acl error: "myuser2" [] cannot run PASS_SELECT on table "t" (CallerID: myuser2) +$ +``` + +Whereas myuser1 is able to access its keyspace without error: +```sh +$ mysql -h 127.0.0.1 -u myuser1 -ppassword1 -D keyspace1 -e "select * from t" +$ +``` +## Negative ACLs + +If you want to set up an authorization structure like the following: + + * Assume a database with the tables `t1`, `t2` and `t3`, and the database + (`vtgate`) users `regular` and `privileged`. + * Give read and write access to only tables `t1` and `t2` to user `regular`. + * **Only** give user `privileged` access to read or write table `t3`. + +You will need to construct an ACL config with two ACLs, and enumerate all the necessary table names in each ACL +(`t1` and `t2` in the first ACL; `t3` in the second ACL). This type of configuration could be called "completely specified". + +However, every time a non-privileged table is added to the schema, the +ACL config needs to be updated to add the table name to the config, or +user `regular` will not have access to it. For schemas with large numbers +of tables, and that change frequently, this can be a burden. + +In general, it is not possible to express a "negative" target ACL in Vitess' +ACL config syntax, e.g.: `Give this user access to all tables except these +specific ones`. It is possible to express an ACL config that is +equivalent to the above "completely specified" ACL config, but somewhat +easier to manage, even for large numbers of tables. + +Consider the following example: + + * Your schema has a 100+ tables. + * You regularly add new tables. + * You have a special set of tables called `secret` and `supersecret` + that you only want a specific `vtgate` user called `super` to have + access to. + * You have 3 other users: + * `readonly` for read access to all tables, except `secret` and + `supersecret` + * `readwrite` for read and write access to all tables, except `secret` + and `supersecret` + * `dba` for read, write and admin access to all tables, except + `secret` and `supersecret`. + * You only a few other tables that start with the letter `s`, called + `s1`, `s2`, `s3`. + * We assume you do not use table names with upper case or other + characters. + +The idea of this configuration is that you construct access to the +non-sensitive data using wildcards of table names for each letter +of the alphabet. You then only need to specify table names fully for +the letter of the alphabet that our "special" tables start +with. In other words this still requires us to specify a list of table names, but +only for the letters of the alphabet that the "special" tables start +with. + +Here is the ACL config that satisfies the requirements: + +```json +{ + "table_groups": [ + { + "name": "acl1", + "table_names_or_prefixes": ["a%", "b%", "c%", "d%", "e%", "f%", "g%", "h%", "i%", "j%", "k%", "l%", "m%", "n%", "o%", "p%", "q%", "r%", "t%", "u%", "v%", "w%", "x%", "y%", "z%", "s1", "s2", "s3"], + "readers": ["readonly", "readwrite", "dba"], + "writers": ["readwrite", "dba"], + "admins": ["dba"] + }, + { + "name": "acl2", + "table_names_or_prefixes": ["secret", "supersecret"], + "readers": ["super"], + "writers": ["super"], + "admins": ["super"] + } + ] +} +``` + +Now, with the above ACL config, you only need to update the ACL config +if you add a new table that starts with the letter `s`. diff --git a/content/en/docs/21.0/user-guides/configuration-advanced/buffering-scenarios.md b/content/en/docs/21.0/user-guides/configuration-advanced/buffering-scenarios.md new file mode 100644 index 000000000..31dda16ae --- /dev/null +++ b/content/en/docs/21.0/user-guides/configuration-advanced/buffering-scenarios.md @@ -0,0 +1,573 @@ +--- +title: VTGate Buffering Scenarios +weight: 12 +aliases: ['/docs/reference/features/vtgate-buffering', +'/docs/reference/programs/vtgate'] +--- + +For documentation on buffering behaviors please see +[VTGate Buffering](../../../reference/features/vtgate-buffering/). +In this guide we are going to go through a few scenarios involving buffering to +see the practical behaviors. There are several parameters to tune for buffering +so, we will be using a python utility [gateslap](https://github.com/planetscale/gateslap) +to generate traffic and simulate an application. You will need three terminal +windows for these exercises: + + * terminal 1 - for manipulating the vtgate process + * terminal 2 - for sending simulated traffic to vtgate; gateslap + * terminal 3 - to send PlannedReparentShard (PRS) commands and retrieve metrics + +## Setup + +These scenarios will be building off of the +[local getting started guide](../../../get-started/local/). + +#### Terminal 1 + +1.) Locate the vtgate process, copy the process information to your notes for +future use; then kill the process: + +``` +Terminal 1 + $ ps aux | head -1; ps aux | grep vtgat[e] + $ pkill vtgate +``` + +2.) From your notes, paste in the vtgate command you have previously copied into +the terminal window and hit enter: + + +``` +Terminal 1 + $ vtgate --topo_implementation etcd2 --topo_global_server_address localhost:2379 \ + --topo_global_root /vitess/global --log_dir ~/github/vitess/examples/local/vtdataroot/tmp \ + --log_queries_to_file ~/github/vitess/examples/local/vtdataroot/tmp/vtgate_querylog.txt \ + --port 15001 --grpc_port 15991 --mysql_server_port 15306 --mysql_server_socket_path /tmp/mysql.sock \ + --cell zone1 --cells_to_watch zone1 --tablet_types_to_wait PRIMARY,REPLICA \ + --service_map grpc-vtgateservice --pid_file ~/github/vitess/examples/local/vtdataroot/tmp/vtgate.pid \ + --mysql_auth_server_impl none +``` + +#### Terminal 2: + +3.) In a NEW terminal window download and configure gateslap. This utility will +be used to simulate traffic on Vitess. The virtualenv and source commands are +optional: + +``` +Terminal 2 + $ git clone https://github.com/planetscale/gateslap.git + $ cd gateslap + $ virtualenv venv + $ source venv/bin/activate + $ sudo python3 setup.py install +``` + +4.) You may do a test run of this script which will create a table called `t1` +in the commerce schema. You may hit "CTRL + C" at anytime to stop the traffic. +By default this will create 2 persistent, 2 pooled, and 2 oneoff MySQL +connections and it will drop the `t1` table when it is complete, or when the +SIGINT signal is given. You can change the behavior by modifying the +`slapper.ini` file. + +``` +Terminal 2 + (venv) $ gateslap + (venv) CTRL + C +``` + +#### Terminal 3: + +5.) In a third terminal window we will prepare the vtctldclient to do a +PlannedReparentShard (PRS). Note, `time` is optional but it is useful +for measuring how long the operation takes. + +``` +Terminal 3 + $ time vtctldclient --server localhost:15999 PlannedReparentShard commerce/0 +``` +--- + +## Scenarios + +### Scenario 1: Default behavior + +By default there are no buffering mechanisms in place on vtgate. +In this configuration gateslap is configured to exit immediately when an +error is encountered. + +``` +Terminal 2: + (venv) $ gateslap examples/01_light_traffic.ini +``` + +As soon as traffic is sent issue the PlannedReparentShard command: + +``` +Terminal 3: + $ time vtctldclient --server localhost:15999 PlannedReparentShard commerce/0 +``` + +#### Results: + +As soon as you issue the PRS operation, you will notice SQL statements begin +to drop and the utility exits. The error code we get from vtgate is `1105` with +the message `target: commerce.0.primary: primary is not serving, there is a +reparent operation in progress`. With no buffering in place it is exclusively +the job of the application to handle this error appropriately, to ensure data +is not lost. Below we can look at buffering metrics. + +```sh +$ curl -s localhost:15001/metrics | grep -v '^#' | grep buffer_requests +vtgate_buffer_requests_buffered{keyspace="commerce",shard_name="0"} 0 +vtgate_buffer_requests_buffered_dry_run{keyspace="commerce",shard_name="0"} 0 +vtgate_buffer_requests_drained{keyspace="commerce",shard_name="0"} 0 +vtgate_buffer_requests_evicted{keyspace="commerce",reason="BufferFull",shard_name="0"} 0 +vtgate_buffer_requests_evicted{keyspace="commerce",reason="ContextDone",shard_name="0"} 0 +vtgate_buffer_requests_evicted{keyspace="commerce",reason="WindowExceeded",shard_name="0"} 0 +vtgate_buffer_requests_skipped{keyspace="commerce",reason="BufferFull",shard_name="0"} 0 +vtgate_buffer_requests_skipped{keyspace="commerce",reason="Disabled",shard_name="0"} 33 +vtgate_buffer_requests_skipped{keyspace="commerce",reason="LastFailoverTooRecent",shard_name="0"} 0 +vtgate_buffer_requests_skipped{keyspace="commerce",reason="LastReparentTooRecent",shard_name="0"} 0 +vtgate_buffer_requests_skipped{keyspace="commerce",reason="Shutdown",shard_name="0"} 0 +``` + +NOTE: reviewing the buffered request metrics from vtgate, nothing was buffered +during this event. + + +### Scenario 2: Solving with error Handling + +One approach to preventing these `1105` errors is to handle them in the +application. In the next example we will configure gateslap to retry the MySQL +connection 10 times before it quits. Each time it will wait five seconds +(5000ms) for a `PRIMARY` tablet to return. + +``` +Terminal 2: + Ctrl + C + (venv) $ gateslap examples/02_light_traffic_error_handling.ini +``` + +As soon as traffic is sent issue the PlannedReparentShard command: + +``` +Terminal 3: + $ time vtctldclient --server localhost:15999 PlannedReparentShard commerce/0 +``` + +#### Results: + +The PlannedReparentShard event occurs, and the application recognizes the `1105` +error. The error is displayed on screen and the application sleeps for 5 +seconds before retrying the connection. During the error handling the connection +is retried, and it is able to execute the SQL and continue processing. Nothing +is getting buffered in vtgate. + +```sh +$ curl -s localhost:15001/metrics | grep -v '^#' | grep buffer_requests +vtgate_buffer_requests_buffered{keyspace="commerce",shard_name="0"} 0 +vtgate_buffer_requests_buffered_dry_run{keyspace="commerce",shard_name="0"} 0 +vtgate_buffer_requests_drained{keyspace="commerce",shard_name="0"} 0 +vtgate_buffer_requests_evicted{keyspace="commerce",reason="BufferFull",shard_name="0"} 0 +vtgate_buffer_requests_evicted{keyspace="commerce",reason="ContextDone",shard_name="0"} 0 +vtgate_buffer_requests_evicted{keyspace="commerce",reason="WindowExceeded",shard_name="0"} 0 +vtgate_buffer_requests_skipped{keyspace="commerce",reason="BufferFull",shard_name="0"} 0 +vtgate_buffer_requests_skipped{keyspace="commerce",reason="Disabled",shard_name="0"} 122 +vtgate_buffer_requests_skipped{keyspace="commerce",reason="LastFailoverTooRecent",shard_name="0"} 0 +vtgate_buffer_requests_skipped{keyspace="commerce",reason="LastReparentTooRecent",shard_name="0"} 0 +vtgate_buffer_requests_skipped{keyspace="commerce",reason="Shutdown",shard_name="0"} 0 +``` + +NOTE: Once again no queries are being buffered in these examples. + + +### Scenario 3: Solving with Buffering + +Another approach to this problem, is to employ buffering on vtgate. It is highly +recommended to use both buffering and error handling in your code; however for +purposes of highlighting buffering we will disable the error handling in this +example. + +First we will need to reconfigure vtgate running in your terminal 1. + +``` +Terminal 1: + Hit "Ctrl + C" to kill the vtgate process +``` + +Add the vtgate arguments needed to implement buffering. We are only implementing +basic buffering functionality. Notice the additional flag we are adding +to our vtgate process: `-enable_buffer=1` + +``` +Terminal 1: + $ vtgate --topo_implementation etcd2 --topo_global_server_address localhost:2379 \ + --topo_global_root /vitess/global --log_dir ~/github/vitess/examples/local/vtdataroot/tmp \ + --log_queries_to_file ~/github/vitess/examples/local/vtdataroot/tmp/vtgate_querylog.txt \ + --port 15001 --grpc_port 15991 --mysql_server_port 15306 --mysql_server_socket_path /tmp/mysql.sock \ + --cell zone1 --cells_to_watch zone1 --tablet_types_to_wait PRIMARY,REPLICA \ + --service_map grpc-vtgateservice --pid_file ~/github/vitess/examples/local/vtdataroot/tmp/vtgate.pid \ + --mysql_auth_server_impl none --enable_buffer=1 +``` + +We're using the `01_light_traffic.ini` which has error handling disabled. + +``` +Terminal 2: + Ctrl + C + (venv) $ gateslap examples/01_light_traffic.ini +``` + +As soon as traffic is sent issue the PlannedReparentShard command: + +``` +Terminal 3: + $ time vtctldclient --server localhost:15999 PlannedReparentShard commerce/0 +``` + +#### Results: + +Shortly after the PRS command is issued, the SQL statements pause momentarily. +During this time a message is logged to the terminal console window: + +``` +E1215 15:35:47.712589 251262 healthcheck.go:487] Adding 1 to PrimaryPromoted counter for target: keyspace:"commerce" shard:"0" tablet_type:REPLICA, tablet: zone1-0000000101, tabletType: PRIMARY +``` + +After this process completes, SQL statements resume processing once again. When +we take a look at stats (shown below) we will see for the first time records of +buffering occurring on the vtgate. + +```sh +$ curl -s localhost:15001/metrics | grep -v '^#' | grep buffer_requests +vtgate_buffer_requests_buffered{keyspace="commerce",shard_name="0"} 6 +vtgate_buffer_requests_buffered_dry_run{keyspace="commerce",shard_name="0"} 0 +vtgate_buffer_requests_drained{keyspace="commerce",shard_name="0"} 6 +vtgate_buffer_requests_evicted{keyspace="commerce",reason="BufferFull",shard_name="0"} 0 +vtgate_buffer_requests_evicted{keyspace="commerce",reason="ContextDone",shard_name="0"} 0 +vtgate_buffer_requests_evicted{keyspace="commerce",reason="WindowExceeded",shard_name="0"} 0 +vtgate_buffer_requests_skipped{keyspace="commerce",reason="BufferFull",shard_name="0"} 0 +vtgate_buffer_requests_skipped{keyspace="commerce",reason="Disabled",shard_name="0"} 0 +vtgate_buffer_requests_skipped{keyspace="commerce",reason="LastFailoverTooRecent",shard_name="0"} 0 +vtgate_buffer_requests_skipped{keyspace="commerce",reason="LastReparentTooRecent",shard_name="0"} 0 +vtgate_buffer_requests_skipped{keyspace="commerce",reason="Shutdown",shard_name="0"} 0 +``` + +NOTE: You will see each of our 6 established connections were buffered during +the PRS event. + + + +### Scenario 4: Quickly issued PRS events + +In this scenario we are going to look at the buffering behavior when quickly +issuing several PlannedReparentShard operations. Restart the VTGate before +proceeding to reset the buffering statistics. + +Restart the vtgate process to clear metrics: + +``` +Terminal 1: + Ctrl + C + $ vtgate --topo_implementation etcd2 --topo_global_server_address localhost:2379 \ + --topo_global_root /vitess/global --log_dir ~/github/vitess/examples/local/vtdataroot/tmp \ + --log_queries_to_file ~/github/vitess/examples/local/vtdataroot/tmp/vtgate_querylog.txt \ + --port 15001 -grpc_port 15991 --mysql_server_port 15306 --mysql_server_socket_path /tmp/mysql.sock \ + --cell zone1 -cells_to_watch zone1 --tablet_types_to_wait PRIMARY,REPLICA \ + --service_map grpc-vtgateservice -pid_file ~/github/vitess/examples/local/vtdataroot/tmp/vtgate.pid \ + --mysql_auth_server_impl none --enable_buffer=1 +``` + +``` +Terminal 2: + Ctrl + C + (venv) $ gateslap examples/01_light_traffic.ini + +``` + +As soon as traffic is sent issue the PlannedReparentShard commands. Note there +is a 5 second sleep commands between the PRS statements. + +``` +Terminal 3: + $ time vtctldclient --server localhost:15999 PlannedReparentShard commerce/0 && sleep 5 && time vtctldclient --server localhost:15999 PlannedReparentShard commerce/0 +``` + +#### Results: + +In this scenario, back to back PRS events were issued, only 5 seconds apart. +Due to the close nature of these events, buffering is disabled to protect Vitess +against events where PRS may be issued in a looping fashion. This behavior is +adjustable with the vtgate flag `--buffer_min_time_between_failovers`. + +```sh +$ curl -s localhost:15001/metrics | grep -v '^#' | grep buffer_requests +vtgate_buffer_requests_buffered{keyspace="commerce",shard_name="0"} 6 +vtgate_buffer_requests_buffered_dry_run{keyspace="commerce",shard_name="0"} 0 +vtgate_buffer_requests_drained{keyspace="commerce",shard_name="0"} 6 +vtgate_buffer_requests_evicted{keyspace="commerce",reason="BufferFull",shard_name="0"} 0 +vtgate_buffer_requests_evicted{keyspace="commerce",reason="ContextDone",shard_name="0"} 0 +vtgate_buffer_requests_evicted{keyspace="commerce",reason="WindowExceeded",shard_name="0"} 0 +vtgate_buffer_requests_skipped{keyspace="commerce",reason="BufferFull",shard_name="0"} 0 +vtgate_buffer_requests_skipped{keyspace="commerce",reason="Disabled",shard_name="0"} 0 +vtgate_buffer_requests_skipped{keyspace="commerce",reason="LastFailoverTooRecent",shard_name="0"} 28 +vtgate_buffer_requests_skipped{keyspace="commerce",reason="LastReparentTooRecent",shard_name="0"} 0 +vtgate_buffer_requests_skipped{keyspace="commerce",reason="Shutdown",shard_name="0"} 0 +``` + +NOTE: Here we will see the `LastFailoverTooRecent` metric to let us know these +PRS events are too close together for the vtgate to buffer again. You will also +see 6 events which were buffered from the first PRS event. + +#### Preventing this issue + +We can prevent this issue by implementing error handling, which your application +should be doing. Another way to handle the issue is to ensure you are waiting +for the `--buffer_min_time_between_failovers` timer to expire before issuing +the next PlannedReparentShard command. + + + +### Scenario 5: Too many connections + +Another aspect to be aware of is the `--buffer_size`. For this scenario we will +be setting the buffer size lower than the number of connections from the +application. As we're using 6 connections in our example we will set the +`buffer_size` down from the default of `1000` to `4`. + +Restart the vtgate process to clear metrics: + +``` +Terminal 1: + Hit "Ctrl + C" to kill the vtgate process + + $ vtgate --topo_implementation etcd2 --topo_global_server_address localhost:2379 \ + --topo_global_root /vitess/global --log_dir ~/github/vitess/examples/local/vtdataroot/tmp \ + --log_queries_to_file ~/github/vitess/examples/local/vtdataroot/tmp/vtgate_querylog.txt \ + --port 15001 --grpc_port 15991 --mysql_server_port 15306 --mysql_server_socket_path /tmp/mysql.sock \ + --cell zone1 --cells_to_watch zone1 --tablet_types_to_wait PRIMARY,REPLICA \ + --service_map grpc-vtgateservice --pid_file ~/github/vitess/examples/local/vtdataroot/tmp/vtgate.pid \ + --mysql_auth_server_impl none --enable_buffer=1 --buffer_size=4 +``` + +``` +Terminal 2: + Ctrl + C + (venv) $ gateslap examples/01_light_traffic.ini +``` + +``` +Terminal 3: + $ time vtctldclient --server localhost:15999 PlannedReparentShard commerce/0 +``` + +#### Results: + +Two of the 6 threads will die, as they were unable to obtain a slot during the +buffering event. The remaining 4 threads will be buffered and will continue to +process in their thread. To avoid this issue you should set your buffer_size to +the estimated amount of requests you expect to get during the PRS event. + +```sh +$ curl -s localhost:15001/metrics | grep -v '^#' | grep buffer_requests +vtgate_buffer_requests_buffered{keyspace="commerce",shard_name="0"} 8 +vtgate_buffer_requests_buffered_dry_run{keyspace="commerce",shard_name="0"} 0 +vtgate_buffer_requests_drained{keyspace="commerce",shard_name="0"} 4 +vtgate_buffer_requests_evicted{keyspace="commerce",reason="BufferFull",shard_name="0"} 4 +vtgate_buffer_requests_evicted{keyspace="commerce",reason="ContextDone",shard_name="0"} 0 +vtgate_buffer_requests_evicted{keyspace="commerce",reason="WindowExceeded",shard_name="0"} 0 +vtgate_buffer_requests_skipped{keyspace="commerce",reason="BufferFull",shard_name="0"} 0 +vtgate_buffer_requests_skipped{keyspace="commerce",reason="Disabled",shard_name="0"} 0 +vtgate_buffer_requests_skipped{keyspace="commerce",reason="LastFailoverTooRecent",shard_name="0"} 0 +vtgate_buffer_requests_skipped{keyspace="commerce",reason="LastReparentTooRecent",shard_name="0"} 0 +vtgate_buffer_requests_skipped{keyspace="commerce",reason="Shutdown",shard_name="0"} 0 +``` + +NOTE: Here we can see the `BufferFull` metric set to 4 to let us know the buffer +had an overflow. + + + +### Scenario 6: Buffer time too Short + +In this scenario we are going to set the `buffer_window` to a short period of +time, and hit the vtgate a bit harder with a different configuration file. + +Restart the vtgate process to clear metrics: + +``` +Terminal 1: + Hit "Ctrl + C" to kill the vtgate process + + $ vtgate --topo_implementation etcd2 --topo_global_server_address localhost:2379 \ + --topo_global_root /vitess/global --log_dir ~/github/vitess/examples/local/vtdataroot/tmp \ + --log_queries_to_file ~/github/vitess/examples/local/vtdataroot/tmp/vtgate_querylog.txt \ + --port 15001 --grpc_port 15991 --mysql_server_port 15306 --mysql_server_socket_path /tmp/mysql.sock \ + --cell zone1 --cells_to_watch zone1 --tablet_types_to_wait PRIMARY,REPLICA \ + --service_map grpc-vtgateservice --pid_file ~/github/vitess/examples/local/vtdataroot/tmp/vtgate.pid \ + --mysql_auth_server_impl none --enable_buffer=1 --buffer_window=1s +``` + +``` +Terminal 2: + Ctrl + C + (venv) $ gateslap examples/03_short_timeout.ini +``` + +``` +Terminal 3: + $ time vtctldclient --server localhost:15999 PlannedReparentShard commerce/0 +``` + +#### Results: + +In these results, we see a few SQL statements fail to buffer. They display +the standard `1105` error we've seen previously. + +```sh +$ curl -s localhost:15001/metrics | grep -v '^#' | grep buffer_requests +vtgate_buffer_requests_buffered{keyspace="commerce",shard_name="0"} 10 +vtgate_buffer_requests_buffered_dry_run{keyspace="commerce",shard_name="0"} 0 +vtgate_buffer_requests_drained{keyspace="commerce",shard_name="0"} 4 +vtgate_buffer_requests_evicted{keyspace="commerce",reason="BufferFull",shard_name="0"} 0 +vtgate_buffer_requests_evicted{keyspace="commerce",reason="ContextDone",shard_name="0"} 0 +vtgate_buffer_requests_evicted{keyspace="commerce",reason="WindowExceeded",shard_name="0"} 6 +vtgate_buffer_requests_skipped{keyspace="commerce",reason="BufferFull",shard_name="0"} 0 +vtgate_buffer_requests_skipped{keyspace="commerce",reason="Disabled",shard_name="0"} 0 +vtgate_buffer_requests_skipped{keyspace="commerce",reason="LastFailoverTooRecent",shard_name="0"} 0 +vtgate_buffer_requests_skipped{keyspace="commerce",reason="LastReparentTooRecent",shard_name="0"} 0 +vtgate_buffer_requests_skipped{keyspace="commerce",reason="Shutdown",shard_name="0"} 0 +``` + +NOTE: Reviewing these results we can see value for `WindowExceeded` at 6; +informing us the `buffer_window` was not long enough for these request. + + + +### Scenario 7: Replica never becomes Primary + +There may be time in which the PRS event takes too long and must be rolled back. +To accomplish this scenario we will need to ensure we are using an older version +of MySQL, and we will need to send excessive traffic to vtgate. + +{{< warning >}} +This scenario assumes you are running Ubuntu LTS 20.04, you may have to adjust if +your environment is different. +{{< /warning >}} + + +Here we will tear down the cluster, install an older version of MySQL, and +rebuild: + +``` +Terminal 1: + Hit "Ctrl + C" to kill the vtgate process + + $ ./401_teardown.sh + $ rm -rf ./vtdataroot + + $ sudo apt-get install mysql-client-core-8.0=8.0.19-0ubuntu5 mysql-server-core-8.0=8.0.19-0ubuntu5 + + $ ./101_initial_cluster.sh + $ ps aux | grep [v]tgate + $ pkill vtgate + $ vtgate --topo_implementation etcd2 --topo_global_server_address localhost:2379 \ + --topo_global_root /vitess/global --log_dir ~/github/vitess/examples/local/vtdataroot/tmp \ + --log_queries_to_file ~/github/vitess/examples/local/vtdataroot/tmp/vtgate_querylog.txt \ + --port 15001 --grpc_port 15991 --mysql_server_port 15306 --mysql_server_socket_path /tmp/mysql.sock \ + --cell zone1 --cells_to_watch zone1 --tablet_types_to_wait PRIMARY,REPLICA \ + --service_map grpc-vtgateservice --pid_file ~/github/vitess/examples/local/vtdataroot/tmp/vtgate.pid \ + --mysql_auth_server_impl none --enable_buffer=1 +``` + +``` +Terminal 2: + Ctrl + C + (venv) $ gateslap examples/04_numerous_heavy_traffic.ini +``` + +As soon as the heavy traffic starts to generate send the PRS command. + +``` +Terminal 3: + $ time vtctldclient --server localhost:15999 PlannedReparentShard commerce/0 +``` + +#### Results: + +Here the buffering takes too long to complete, as a result the application +heavily utilizes error handling to recover. When programming for error handling +in these events, consider allowing the client enough time to recover from an +attempted RPC + rollback. This scenario will retry the connection 10 times, +waiting 5 seconds between each attempt. + +Part of the reason we had to downgrade MySQL was to make replication issues more +relevant. In this scenario vtgate bailed on the PlannedReparentShard as the +primary candidate `REPLICA` failed to catch up to the `PRIMARY`. + +``` +$ time vtctldclient --server localhost:15999 PlannedReparentShard commerce/0 +PlannedReparentShard Error: rpc error: code = Unknown desc = primary-elect tablet zone1-0000000101 failed +to catch up with replication MySQL56/4fb7c72c-62c8-11ec-8287-8cae4cdeeda4:1-1677: rpc error: code = Unknown +desc = TabletManager.WaitForPosition on zone1-0000000101 error: timed out waiting for position +4fb7c72c-62c8-11ec-8287-8cae4cdeeda4:1-1677: timed out waiting for position 4fb7c72c-62c8-11ec-8287-8cae4cdeeda4:1-1677 + +E1221 19:44:29.715359 203407 main.go:76] remote error: rpc error: code = Unknown desc = primary-elect tablet +zone1-0000000101 failed to catch up with replication MySQL56/4fb7c72c-62c8-11ec-8287-8cae4cdeeda4:1-1677: +rpc error: code = Unknown desc = TabletManager.WaitForPosition on zone1-0000000101 error: timed out waiting for position +4fb7c72c-62c8-11ec-8287-8cae4cdeeda4:1-1677: timed out waiting for position 4fb7c72c-62c8-11ec-8287-8cae4cdeeda4:1-1677 + +real 0m35.458s +user 0m0.015s +sys 0m0.005s + +``` + +There are a few things we can do to resolve this issue: + +* Upgrade the MySQL version +* Perform these operations during non-peak times +* Ensure we have error handling in case the PRS command fails +* Increase the buffer_window to buffer request instead of return errors + +This scenario was designed to show buffering assisting, even during a failed +PlannedReparentShard: + +```sh +curl -s localhost:15001/metrics | grep -v '^#' | grep buffer_requests +vtgate_buffer_requests_buffered{keyspace="commerce",shard_name="0"} 30 +vtgate_buffer_requests_buffered_dry_run{keyspace="commerce",shard_name="0"} 0 +vtgate_buffer_requests_drained{keyspace="commerce",shard_name="0"} 15 +vtgate_buffer_requests_evicted{keyspace="commerce",reason="BufferFull",shard_name="0"} 0 +vtgate_buffer_requests_evicted{keyspace="commerce",reason="ContextDone",shard_name="0"} 0 +vtgate_buffer_requests_evicted{keyspace="commerce",reason="WindowExceeded",shard_name="0"} 15 +vtgate_buffer_requests_skipped{keyspace="commerce",reason="BufferFull",shard_name="0"} 0 +vtgate_buffer_requests_skipped{keyspace="commerce",reason="Disabled",shard_name="0"} 0 +vtgate_buffer_requests_skipped{keyspace="commerce",reason="LastFailoverTooRecent",shard_name="0"} 50 +vtgate_buffer_requests_skipped{keyspace="commerce",reason="LastReparentTooRecent",shard_name="0"} 0 +vtgate_buffer_requests_skipped{keyspace="commerce",reason="Shutdown",shard_name="0"} 0 +``` + +NOTE: Reviewing the results, we can see from the `WindowExceeded` metric some of +the buffered queries expired. If this is common you may want to increase your +`buffer_window` to cover these failures. Retrying this scenario with the following +vtgate flags appended resolves many of these errors: + +`--buffer_max_failover_duration=1m --buffer_min_time_between_failovers=2m --buffer_window=60s` + +## Revert your configurations + +To undo our configuration we will need to tear the cluster down; upgrade MySQL; +then rebuild the vitess cluster: + +``` +Terminal 1: + Ctrl + C + + $ ./401_teardown.sh + $ rm -rf ./vtdataroot + + $ sudo apt-get upgrade && sudo apt-get update + +``` diff --git a/content/en/docs/21.0/user-guides/configuration-advanced/comment-directives.md b/content/en/docs/21.0/user-guides/configuration-advanced/comment-directives.md new file mode 100644 index 000000000..bc7b06478 --- /dev/null +++ b/content/en/docs/21.0/user-guides/configuration-advanced/comment-directives.md @@ -0,0 +1,121 @@ +--- +title: Comment Directives +weight: 35 +--- + +Vitess supports a small set of meta-directives that can be passed from the application to Vitess as SQL comments in the application. These directives can be used to alter the behavior of Vitess on a per-query basis. This is often used by advanced Vitess users to obtain finely granular control over the behavior of Vitess, often for the purposes of optimizing performance. + +All the comment directives, included as part of the query, take the form: + +```sh +/*vt+ comment_directive_name_plus_argument */ +``` + +One thing to note when experimenting with query comments is that various MySQL clients can strip comments by default before sending the query to the server. You will need to make sure your query comments are not being stripped. For example, the MySQL CLI (`mysql`) will do this unless you pass it the -c (or --comments) parameter. + +## Query timeouts (`QUERY_TIMEOUT_MS`) + +In Vitess, individual non-streaming queries are subject to query timeouts. This are typically set by the vttablet option `--queryserver-config-query-timeout`. Whole transactions are also subject to the vttablet timeout setting `--queryserver-config-transaction-timeout`. + +However, for read (`SELECT`) queries, it is also possible to use a special Vitess query comment format to set a lower timeout for certain queries, e.g.: + +```sh +mysql> select /*vt+ QUERY_TIMEOUT_MS=1 */ sleep(1); +ERROR 1317 (70100): target: keyspace1.0.primary: vttablet: rpc error: code = DeadlineExceeded desc = context deadline exceeded +``` + +As indicated by the comment name (QUERY_TIMEOUT_MS), this timeout is in milliseconds. + +### Limitation and caveats: + +- Only works for `SELECT` (read) queries. +- Does not work when doing manual shard-targeting. See [this issue](https://github.com/vitessio/vitess/issues/7031). +- Cannot set a higher limit to evade the settings for `--queryserver-config-query-timeout` and/or `--queryserver-config-transaction-timeout`. + +## Multi-shard Autocommit (`MULTI_SHARD_AUTOCOMMIT`) + +Using this in, for example, an insert statement will cause individual shard autocommit to be used for the shards where the rows for the insert are routed. This means that if one of the individual shard inserts fails, it will not be possible to roll back the inserts on all the other shards. This is the default behavior. A helpful way to think of this is as best-effort cross-shard writes, with the application being responsible for repairs in the case of errors. For an example, read our [Shard Isolation and Atomicity guide](../../configuration-advanced/shard-isolation-atomicity/#method-1--the-naive-way). + +## Skip query plan cache (`SKIP_QUERY_PLAN_CACHE`) + +Vitess maintains a query/plan cache in both `vtgate` and `vttablet`. These caches serve different purposes: + +- `vtgate`: overall targeting of queries against backend shard tablets +- `vttablet`: shard-specific details like field definitions/types, etc. + +The `SKIP_QUERY_PLAN_CACHE` comment directive tells `vttablet` to skip caching this query in its query cache. This can be used by a Vitess-aware application to avoid polluting the cache with things like bulk insert plans, etc. + +Since vttablet places a memory size limit on the query cache, it is much less likely for this cache to get overrun by queries like bulk inserts. As a result, it should be less necessary to use this comment directive, other than as a performance optimization. Previously, it was unbounded in memory, or in other words it was only bounded by number of entries. At that point it might have been necessary to use to avoid vttablet out-of-memory (OOM) situations. + +## Scatter errors as warnings (`SCATTER_ERRORS_AS_WARNINGS`) + +Vitess will, by default, return only an error if any of the shards involved in a scatter query reports an error. This is important for strong correctness, however, in some cases it may be necessary or desirable to have Vitess return partial results from the available shards anyway. The application can then act accordingly based on the results. + +The `SCATTER_ERRORS_AS_WARNINGS` comment directive enables exactly this, by returning the partial results from the healthy shards in the scatter query, and returning the error(s) from the unhealthy shard(s) as warnings. The application can then potentially use the warning information to guide its subsequent action. + +## Ignore max payload size (`IGNORE_MAX_PAYLOAD_SIZE`) + +By default, Vitess will try to handle queries of any size. It is possible to use the `vtgate` parameter `--max_payload_size` (default unlimited) to limit the size of an incoming query to a certain number of bytes. Queries larger than this limit will then be rejected by `vtgate`. + +The `IGNORE_MAX_PAYLOAD_SIZE` comment directive allows a Vitess-aware application to bypass this limit, essentially setting it to the default of unlimited for that query. + +## Ignore max memory rows (`IGNORE_MAX_MEMORY_ROWS`) + +By default, `vtgate` will allow intermediate results for things like in-vtgate sorting and joining, up to a maximum of number of rows per query. This is to avoid using massive amounts of memory in `vtgate`. This limit is set using the `vtgate` parameter `--max_memory_rows`, which defaults to 300,000. Note that this limit is not a direct memory usage limit, since 300,000 very large rows could still be a huge amount of memory. + +The `IGNORE_MAX_MEMORY_ROWS` comment directive allows a Vitess-aware application to bypass this limit, essentially setting it to an unlimited number of rows for that query. Since this override can result in very large, and even potentially effectively unbounded, amounts of memory being used by `vtgate`, it should be used with extreme caution. + +## Allow scatter (`ALLOW_SCATTER`) + +In Vitess, it is possible to use the `vtgate` parameter `--no_scatter` to prevent `vtgate` from issuing scatter queries. Thus only queries that do not scatter will be allowed. + +This comment directive is used to override that limitation, allowing application code to be customized to allow scatters for certain chosen use-cases, but not for the general case. + +## Consolidator (`CONSOLIDATOR`) + +In `vttablet`, the consolidator is enabled with the `--enable_consolidator` and `--enable_consolidator_replicas` flags. Those settings may be overridden with this comment directive, allowing application code to opt into (or out of) consolidation for individual `SELECT` queries. + +This directive requires one of the following values: + + * `disabled` + * `enabled` + * `enabled_replicas` + +### Planner (`PLANNER`) + +Overrides the default planner to the one specified by the directive. Example query: + +```sql +select /*vt+ PLANNER=gen4 */ * from user; +``` + +Valid values are the same as for the planner flag - `Gen4`, `Gen4Greedy` and `Gen4Left2Right`. + +### Workload name (`WORKLOAD_NAME`) + +Specifies the client application workload name. This does not affect query execution, but can be used to instrument +some `vttablet` metrics to include a label specifying the workload name. It can be useful if you are interested in +getting insights about how much of the work being done at the `vttablet` level is being caused by each client +application workload. For this to work, you must use `--enable-per-workload-table-metrics` at the `vttablet`, and pass +the client workload name on each query as a directive. For example: + +```sql +select /*vt+ WORKLOAD_NAME=webstore */ * from commerce.customer; +``` + +will result in metrics such as this one: + +```bash +% curl -s localhost:15100/metrics | grep "table=\"customer\"" |grep webstore +vttablet_query_counts{plan="Select",table="customer",workload="webstore"} 1 +vttablet_query_error_counts{plan="Select",table="customer",workload="webstore"} 0 +vttablet_query_rows_returned{plan="Select",table="customer",workload="webstore"} 0 +vttablet_query_times_ns{plan="Select",table="customer",workload="webstore"} 602557 +``` + +As shown above, the metrics being instrumented this way are `vttablet_query_counts`, `vttablet_query_error_counts`, +`vttablet_query_rows_returned` and `vttablet_query_times_ns`. + +If the query lacks the `WORKLOAD_NAME` directive, the corresponding label in the metric will have the value of an empty +string. If `vttablet` is not started with `--enable-per-workload-table-metrics`, metrics are emitted without the +workload label (e.g. `vttablet_query_counts{plan="Select",table="customer"}`. diff --git a/content/en/docs/21.0/user-guides/configuration-advanced/createlookupvindex.md b/content/en/docs/21.0/user-guides/configuration-advanced/createlookupvindex.md new file mode 100644 index 000000000..3f6047c0a --- /dev/null +++ b/content/en/docs/21.0/user-guides/configuration-advanced/createlookupvindex.md @@ -0,0 +1,621 @@ +--- +title: Creating a LookupVindex +weight: 30 +aliases: ['/docs/user-guides/createlookupvindex/'] +--- + +{{< info >}} +This guide follows on from the Get Started guides. Please make sure that you have +an [Operator](../../../get-started/operator) or [local](../../../get-started/local) installation ready. Make sure you +are at the point where you have the sharded keyspace called `customer` setup. +{{< /info >}} + +[`LookupVindex create`](../../../reference/programs/vtctldclient/vtctldclient_lookupvindex/vtctldclient_lookupvindex_create/) uses a [VReplication](../../../reference/vreplication/) workflow used to create **and** backfill +a [Lookup Vindex](../../../reference/features/vindexes/#lookup-vindex-types) automatically for a table that already +exists, and may have a significant amount of data in it already. + +Internally, the [`LookupVindex create`](../../../reference/programs/vtctldclient/vtctldclient_lookupvindex/vtctldclient_lookupvindex_create/) command uses +VReplication for the backfill process, until the lookup Vindex is "in sync". Then the normal process for +adding/deleting/updating rows in the lookup Vindex via the usual +[transactional flow when updating the "owner" table for the Vindex](../../../reference/features/vindexes/#lookup-vindex-types) +takes over. + +In this guide, we will walk through the process of using the [`LookupVindex create`](../../../reference/programs/vtctldclient/vtctldclient_lookupvindex/vtctldclient_lookupvindex_create/) command, and give some insight into what happens underneath the covers. + +You can see the details of the [`LookupVindex create` command](../../../reference/programs/vtctldclient/vtctldclient_lookupvindex/vtctldclient_lookupvindex_create/) in the reference docs. + +In the context of the `customer` database that is part of the Vitess examples we +started earlier, let's add some rows into the `customer.corder` table, and then +look at an example command: + +```bash +$ mysql -P 15306 -h 127.0.0.1 -u root --binary-as-hex=false -A +Welcome to the MySQL monitor. Commands end with ; or \g. +... +``` + +```mysql +mysql> use customer; +Database changed + +mysql> show tables; ++-----------------------+ +| Tables_in_vt_customer | ++-----------------------+ +| corder | +| customer | ++-----------------------+ +2 rows in set (0.00 sec) + +mysql> desc corder; ++-------------+----------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++-------------+----------------+------+-----+---------+-------+ +| order_id | bigint | NO | PRI | NULL | | +| customer_id | bigint | YES | | NULL | | +| sku | varbinary(128) | YES | | NULL | | +| price | bigint | YES | | NULL | | ++-------------+----------------+------+-----+---------+-------+ +4 rows in set (0.01 sec) + +mysql> insert into corder (order_id, customer_id, sku, price) values (1, 1, "Product_1", 100); +Query OK, 1 row affected (0.01 sec) + +mysql> insert into corder (order_id, customer_id, sku, price) values (2, 1, "Product_2", 101); +Query OK, 1 row affected (0.01 sec) + +mysql> insert into corder (order_id, customer_id, sku, price) values (3, 2, "Product_3", 102); +Query OK, 1 row affected (0.01 sec) + +mysql> insert into corder (order_id, customer_id, sku, price) values (4, 3, "Product_4", 103); +Query OK, 1 row affected (0.01 sec) + +mysql> insert into corder (order_id, customer_id, sku, price) values (5, 4, "Product_5", 104); +Query OK, 1 row affected (0.03 sec) + +mysql> select * from corder; ++----------+-------------+-----------+-------+ +| order_id | customer_id | sku | price | ++----------+-------------+-----------+-------+ +| 1 | 1 | Product_1 | 100 | +| 2 | 1 | Product_2 | 101 | +| 3 | 2 | Product_3 | 102 | +| 4 | 3 | Product_4 | 103 | +| 5 | 4 | Product_5 | 104 | ++----------+-------------+-----------+-------+ +5 rows in set (0.01 sec) +``` + +
    + +If we look at the [VSchema](../../../reference/features/vschema/) for the +`customer.corder` table, we will see there is a `hash` index on the +`customer_id` column: + +```json +$ vtctldclient GetVSchema customer +{ + "sharded": true, + "vindexes": { + "hash": { + "type": "hash", + "params": {}, + "owner": "" + } + }, + "tables": { + "corder": { + "type": "", + "column_vindexes": [ + { + "column": "customer_id", + "name": "hash", + "columns": [] + } + ], + "auto_increment": { + "column": "order_id", + "sequence": "order_seq" + }, + "columns": [], + "pinned": "", + "column_list_authoritative": false, + "source": "" + }, + "customer": { + "type": "", + "column_vindexes": [ + { + "column": "customer_id", + "name": "hash", + "columns": [] + } + ], + "auto_increment": { + "column": "customer_id", + "sequence": "customer_seq" + }, + "columns": [], + "pinned": "", + "column_list_authoritative": false, + "source": "" + } + }, + "require_explicit_routing": false +} +``` + +
    + +We can now see that 4 of our 5 rows have ended up on the `-80` shard with the +5th row on the `80-` shard: + +```sql +mysql> use customer/-80 +Database changed + +mysql> select * from corder; ++----------+-------------+-----------+-------+ +| order_id | customer_id | sku | price | ++----------+-------------+-----------+-------+ +| 1 | 1 | Product_1 | 100 | +| 2 | 1 | Product_2 | 101 | +| 3 | 2 | Product_3 | 102 | +| 4 | 3 | Product_4 | 103 | ++----------+-------------+-----------+-------+ +4 rows in set (0.00 sec) + +mysql> use customer/80- +Database changed + +mysql> select * from corder; ++----------+-------------+-----------+-------+ +| order_id | customer_id | sku | price | ++----------+-------------+-----------+-------+ +| 5 | 4 | Product_5 | 104 | ++----------+-------------+-----------+-------+ +1 row in set (0.01 sec) +``` + +
    + +Note that this skewed distribution is completely coincidental — for larger +numbers of rows we would expect the distribution to be approximately even +for a `hash` index. + +Now let's say we want to add a lookup Vindex on the `sku` column. +We can use a [`consistent_lookup` or `consistent_lookup_unique`](../../vschema-guide/unique-lookup/) +Vindex type. In our example we will use `consistent_lookup_unique`. + +Note that as mentioned above, we do not have to tell Vitess about +how to shard the actual backing table for the lookup Vindex or +any schema to create as it will do it automatically. Now, let us +actually execute the `LookupVindex create` command: + +```bash +vtctldclient --server localhost:15999 LookupVindex --name customer_region_lookup --table-keyspace main create --keyspace main --type consistent_lookup_unique --table-owner customer --table-owner-columns=id --tablet-types=PRIMARY +``` + +
    + +Note: + +* We are specifying a tablet_type of `RDONLY`; meaning it is going to + run the VReplication streams from tablets of the `RDONLY` type **only**. + If tablets of this type cannot be found, in a shard, the lookup Vindex + population will fail. + +Now, in our case, the table is tiny, so the copy will be instant, but +in a real-world case this might take hours. To monitor the process, +we can use the usual VReplication commands. However, the VReplication +status commands needs to operate on individual tablets. Let's check +which tablets we have in our environment, so we know which tablets to +issue commands against: + +```bash +$ vtctldclient --server localhost:15999 GetTablets --keyspace customer +zone1-0000000300 customer -80 primary localhost:15300 localhost:17300 [] 2020-08-13T01:23:15Z +zone1-0000000301 customer -80 replica localhost:15301 localhost:17301 [] +zone1-0000000302 customer -80 rdonly localhost:15302 localhost:17302 [] +zone1-0000000400 customer 80- primary localhost:15400 localhost:17400 [] 2020-08-13T01:23:15Z +zone1-0000000401 customer 80- replica localhost:15401 localhost:17401 [] +zone1-0000000402 customer 80- rdonly localhost:15402 localhost:17402 [] +``` + +
    + +Now we can look what happened in greater detail: + +* VReplication streams were setup from the primary tablets + `zone1-0000000300` and `zone1-0000000400`; pulling data from the `RDONLY` + source tablets `zone1-0000000302` and `zone1-0000000402`. +* Note that each primary tablet will start streams from each source + tablet, for a total of 4 streams in this case. + +Lets observe the VReplication streams that got created using the `show` sub-command. + +{{< info >}} +The created vreplication workflow will have a generated name of `_vdx`. +So in our example here: `corder_lookup_vdx`. +{{< /info >}} + +```json +$ vtctldclient --server localhost:15999 LookupVindex --name customer_region_lookup --table-keyspace main show --include-logs=false +{ + "workflows": [ + { + "name": "customer_region_lookup", + "source": { + "keyspace": "main", + "shards": [ + "0" + ] + }, + "target": { + "keyspace": "main", + "shards": [ + "0" + ] + }, + "max_v_replication_lag": "0", + "shard_streams": { + "0/zone1-0000000100": { + "streams": [ + { + "id": "1", + "shard": "0", + "tablet": { + "cell": "zone1", + "uid": 100 + }, + "binlog_source": { + "keyspace": "main", + "shard": "0", + "tablet_type": "UNKNOWN", + "key_range": null, + "tables": [], + "filter": { + "rules": [ + { + "match": "customer_region_lookup", + "filter": "select id as id, keyspace_id() as keyspace_id from customer where in_keyrange(id, 'main.xxhash', '-') group by id, keyspace_id", + "convert_enum_to_text": {}, + "convert_charset": {}, + "source_unique_key_columns": "", + "target_unique_key_columns": "", + "source_unique_key_target_columns": "", + "convert_int_to_enum": {} + } + ], + "field_event_mode": "ERR_ON_MISMATCH", + "workflow_type": "0", + "workflow_name": "" + }, + "on_ddl": "IGNORE", + "external_mysql": "", + "stop_after_copy": false, + "external_cluster": "", + "source_time_zone": "", + "target_time_zone": "" + }, + "position": "63c84d28-6888-11ee-93b0-81b2fbd12545:1-63", + "stop_position": "", + "state": "Running", + "db_name": "vt_main", + "transaction_timestamp": { + "seconds": "1697064644", + "nanoseconds": 0 + }, + "time_updated": { + "seconds": "1697064646", + "nanoseconds": 0 + }, + "message": "", + "copy_states": [], + "logs": [], + "log_fetch_error": "", + "tags": [], + "rows_copied": "0", + "throttler_status": { + "component_throttled": "", + "time_throttled": { + "seconds": "0", + "nanoseconds": 0 + } + } + } + ], + "tablet_controls": [], + "is_primary_serving": true + } + }, + "workflow_type": "CreateLookupIndex", + "workflow_sub_type": "None", + "max_v_replication_transaction_lag": "0", + "defer_secondary_keys": false + } + ] +} +``` + +
    + +There is a lot going on in this output, but the most important parts are the +`state` and `message` fields which say `Stopped` and `Stopped after copy.` +for all four of the streams. This means that the VReplication streams finished +their copying/backfill of the lookup table. + +Note that if the tables were large and the copy was still in progress, the +`state` field would say `Copying` — you can see the state/progress as part +of `Workflow show` json output. + +We can verify the result of the backfill by looking at the `customer` +keyspace again in the MySQL client: + +```sql +mysql> show tables; ++-----------------------+ +| Tables_in_vt_customer | ++-----------------------+ +| corder | +| corder_lookup | +| customer | ++-----------------------+ +3 rows in set (0.01 sec) +``` + +
    + +Note there is now a new table, `corder_lookup`; which was created as the +backing table for the lookup Vindex. Lets look at this table: + +```sql +mysql> desc corder_lookup; ++-------------+----------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++-------------+----------------+------+-----+---------+-------+ +| sku | varbinary(128) | NO | PRI | NULL | | +| keyspace_id | varbinary(128) | YES | | NULL | | ++-------------+----------------+------+-----+---------+-------+ +2 rows in set (0.01 sec) + +mysql> select sku, hex(keyspace_id) from corder_lookup; ++-----------+------------------+ +| sku | hex(keyspace_id) | ++-----------+------------------+ +| Product_2 | 166B40B44ABA4BD6 | +| Product_3 | 06E7EA22CE92708F | +| Product_1 | 166B40B44ABA4BD6 | +| Product_4 | 4EB190C9A2FA169C | +| Product_5 | D2FD8867D50D2DFE | ++-----------+------------------+ +``` + +
    + +Basically, this shows exactly what we expected. Now, we have to clean-up +the artifacts of the backfill. The `ExternalizeVindex` command will delete +the VReplication streams and also clear the `write_only` flag from the +Vindex indicating that it is *not* backfilling anymore. + +```bash +$ vtctldclient --server localhost:15999 LookupVindex --name customer_region_lookup --table-keyspace main externalize +LookupVindex customer_region_lookup has been externalized and the customer_region_lookup VReplication workflow has been deleted +``` + +
    + +Next, to confirm the lookup Vindex is doing what we think it should, we can +use the [`vexplain plan` SQL statement](../../sql/vexplain/): + +```sql +mysql> vexplain plan select * from corder where customer_id = 1; ++---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| JSON | ++---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| { + "OperatorType": "Route", + "Variant": "EqualUnique", + "Keyspace": { + "Name": "customer", + "Sharded": true + }, + "FieldQuery": "select order_id, customer_id, sku, price from corder where 1 != 1", + "Query": "select order_id, customer_id, sku, price from corder where customer_id = 1", + "Table": "corder", + "Values": [ + "INT64(1)" + ], + "Vindex": "hash" +} | ++---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +1 row in set (0.00 sec) +``` + +
    + +Since the above `select` statement is doing a lookup using the primary Vindex +on the `corder` table, this query does not Scatter (variant is +`SelectEqualUnique`), as expected. Let's try a scatter query to see what that +looks like: + +```sql +mysql> vexplain select * from corder; ++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| JSON | ++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| { + "OperatorType": "Route", + "Variant": "Scatter", + "Keyspace": { + "Name": "customer", + "Sharded": true + }, + "FieldQuery": "select order_id, customer_id, sku, price from corder where 1 != 1", + "Query": "select order_id, customer_id, sku, price from corder", + "Table": "corder" +} | ++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +1 row in set (0.00 sec) +``` + +So now we see the expectied variant of `SelectScatter` for a scatter query. +Let's try a lookup on a column that does *not* have a primary or secondary +(lookup) Vindex, e.g. the `price` column: + +```sql +mysql> vexplain select * from corder where price = 103\G +*************************** 1. row *************************** +JSON: { + "OperatorType": "Route", + "Variant": "Scatter", + "Keyspace": { + "Name": "customer", + "Sharded": true + }, + "FieldQuery": "select order_id, customer_id, sku, price from corder where 1 != 1", + "Query": "select order_id, customer_id, sku, price from corder where price = 103", + "Table": "corder" +} +1 row in set (0.00 sec) +``` + +That also scatters, as expected, because there's no Vindex on the column. + +Now, let's try a lookup on the `sku` column, which we have created our lookup +Vindex on: + +```sql +mysql> vexplain select * from corder where sku = "Product_1"; ++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| JSON | ++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| { + "OperatorType": "VindexLookup", + "Variant": "EqualUnique", + "Keyspace": { + "Name": "customer", + "Sharded": true + }, + "Values": [ + "VARCHAR(\"Product_1\")" + ], + "Vindex": "corder_lookup", + "Inputs": [ + { + "OperatorType": "Route", + "Variant": "IN", + "Keyspace": { + "Name": "customer", + "Sharded": true + }, + "FieldQuery": "select sku, keyspace_id from corder_lookup where 1 != 1", + "Query": "select sku, keyspace_id from corder_lookup where sku in ::__vals", + "Table": "corder_lookup", + "Values": [ + ":sku" + ], + "Vindex": "binary_md5" + }, + { + "OperatorType": "Route", + "Variant": "ByDestination", + "Keyspace": { + "Name": "customer", + "Sharded": true + }, + "FieldQuery": "select order_id, customer_id, sku, price from corder where 1 != 1", + "Query": "select order_id, customer_id, sku, price from corder where sku = 'Product_1'", + "Table": "corder" + } + ] +} | ++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +1 row in set (0.00 sec) +``` + +
    + +As expected, we can see it is not scattering anymore, which it would have +before we executed the `CreateLookupVindex` command. + +Lastly, let's ensure that the lookup Vindex is being updated appropriately +when we insert and delete rows: + +```sql +mysql> select * from corder; ++----------+-------------+-----------+-------+ +| order_id | customer_id | sku | price | ++----------+-------------+-----------+-------+ +| 5 | 4 | Product_5 | 104 | +| 1 | 1 | Product_1 | 100 | +| 2 | 1 | Product_2 | 101 | +| 3 | 2 | Product_3 | 102 | +| 4 | 3 | Product_4 | 103 | ++----------+-------------+-----------+-------+ +5 rows in set (0.00 sec) + +mysql> delete from corder where customer_id = 1 and sku = "Product_1"; +Query OK, 1 row affected (0.03 sec) + +mysql> select * from corder; ++----------+-------------+-----------+-------+ +| order_id | customer_id | sku | price | ++----------+-------------+-----------+-------+ +| 2 | 1 | Product_2 | 101 | +| 3 | 2 | Product_3 | 102 | +| 4 | 3 | Product_4 | 103 | +| 5 | 4 | Product_5 | 104 | ++----------+-------------+-----------+-------+ +4 rows in set (0.01 sec) + +mysql> select sku, hex(keyspace_id) from corder_lookup; ++-----------+------------------+ +| sku | hex(keyspace_id) | ++-----------+------------------+ +| Product_4 | 4EB190C9A2FA169C | +| Product_5 | D2FD8867D50D2DFE | +| Product_2 | 166B40B44ABA4BD6 | +| Product_3 | 06E7EA22CE92708F | ++-----------+------------------+ +4 rows in set (0.01 sec) +``` + +
    + +We deleted a row from the `corder` table, and the matching lookup Vindex row +is gone. Now we can try adding a row: + +```sql +mysql> insert into corder (order_id, customer_id, sku, price) values (6, 1, "Product_6", 105); +Query OK, 1 row affected (0.02 sec) + +mysql> select * from corder; ++----------+-------------+-----------+-------+ +| order_id | customer_id | sku | price | ++----------+-------------+-----------+-------+ +| 2 | 1 | Product_2 | 101 | +| 3 | 2 | Product_3 | 102 | +| 4 | 3 | Product_4 | 103 | +| 6 | 1 | Product_6 | 105 | +| 5 | 4 | Product_5 | 104 | ++----------+-------------+-----------+-------+ +5 rows in set (0.00 sec) + +mysql> select sku, hex(keyspace_id) from corder_lookup; ++-----------+------------------+ +| sku | hex(keyspace_id) | ++-----------+------------------+ +| Product_4 | 4EB190C9A2FA169C | +| Product_5 | D2FD8867D50D2DFE | +| Product_6 | 166B40B44ABA4BD6 | +| Product_2 | 166B40B44ABA4BD6 | +| Product_3 | 06E7EA22CE92708F | ++-----------+------------------+ +5 rows in set (0.00 sec) +``` + +
    + +We added a new row to the `corder` table, and now we have a new row in the +lookup table! diff --git a/content/en/docs/21.0/user-guides/configuration-advanced/integration-with-orchestrator.md b/content/en/docs/21.0/user-guides/configuration-advanced/integration-with-orchestrator.md new file mode 100644 index 000000000..cc912a965 --- /dev/null +++ b/content/en/docs/21.0/user-guides/configuration-advanced/integration-with-orchestrator.md @@ -0,0 +1,7 @@ +--- +title: Integration with Orchestrator +weight: 100 +aliases: ['/docs/user-guides/integration-with-orchestrator/'] +--- + +Orchestrator integration has been removed. Please use [VTOrc](../../configuration-basic/vtorc) instead. diff --git a/content/en/docs/21.0/user-guides/configuration-advanced/ldap_auth.md b/content/en/docs/21.0/user-guides/configuration-advanced/ldap_auth.md new file mode 100644 index 000000000..ed51f2ae1 --- /dev/null +++ b/content/en/docs/21.0/user-guides/configuration-advanced/ldap_auth.md @@ -0,0 +1,80 @@ +--- +title: LDAP authentication +weight: 3 +aliases: ['/docs/user-guides/ldap_auth/'] +--- + +Currently, Vitess supports two ways to authenticate to `vtgate` via the MySQL protocol: + + * **Static** : You provide a static configuration file to `vtgate` with user names and plaintext passwords or `mysql_native_password` password hashes. This file can be reloaded without restarting `vtgate`. Further details can be found [here](../user-management). + * **LDAP** : You provide the necessary details of an upstream LDAP server, along with credentials and configuration, to query it. Using this information, the LDAP passwords for a user can then be used to authenticate the same user against `vtgate`. You can also integrate with LDAP groups to allow ACLs to be managed using information from the LDAP server. + +In this guide, we will examine the capabilities of the `vtgate` LDAP integration and how to configure them. + +## Requirements + +There are a few requirements that are necessary for the `vtgate` LDAP integration to work: + + * The communication between `vtgate` and the LDAP server has to be encrypted. + * Encrypted communication to LDAP has to be via LDAP over TLS (STARTTLS) and not via LDAP over SSL (LDAPS). The latter is not a standardized protocol and is not supported by Vitess. Ensure that your LDAP server and the LDAP URI (hostname/port) that you provide supports STARTTLS. + * The application MySQL protocol connections to `vtgate` that use LDAP usernames/passwords need to use TLS. This is required because of the next point, but can be bypassed. We strongly **DO NOT** recommend doing this. + * The application needs to be able to, and configured to, pass its password authentication using the cleartext MySQL authentication protocol. This is why it is required that the MySQL connection to `vtgate` be encrypted first. This is required because LDAP servers do not standardize their password hashes and, as a result, a cleartext password is required by `vtgate` to bind (i.e. authenticate) against the LDAP server to verify the user's password. Note that some applications might not support passing cleartext MySQL passwords without alteration or configuration. An example is recent versions of the MySQL CLI client `mysql` need the additional `--enable-cleartext-plugin` option to allow the passing of cleartext passwords. + +## Configuration + +To configure `vtgate` to integrate with LDAP you will have to perform various tasks: + + * Generate/obtain TLS certificate(s) for the `vtgate` server(s), and configure `vtgate` to use them. Further details can be found [here](https://github.com/aquarapid/vitess_examples/blob/master/tls/securing_vitess.md). + * Obtain or add the necessary LDAP user/groups for integration with `vtgate`. In general, you will need: + * LDAP user entries for each of the MySQL users you want to use at the `vtgate` level. An example might be a readonly user, a readwrite user, and an admin/DBA user. + * Ensure these users are part of one or more LDAP groups. This is not strictly required by Vitess, but is leveraged to obtain group membership that can then be used in Vitess (`vttablet`)[ACLs](../authorization). At the moment if you use an LDAP user that is not a member of an LDAP group, the MySQL client authentication to `vtgate` will fail, even if the password is correct. + * As mentioned above, you also need to have: + * Your LDAP server setup for STARTTLS + * Obtained the LDAP URI to connect to the LDAP server + * The CA certificate, that your LDAP server TLS certificate is signed by, in PEM format + * Make sure that you are accessing the LDAP server via a hostname or IP SAN that is defined in your LDAP server TLS certificate. If not, you will not be able to use your LDAP server as-is from `vtgate`. + +Once you have your prerequisites above ready, you can now construct your JSON configuration file for `vtgate` using the command line parameter `--mysql_ldap_auth_config_file`. The content of this file is a JSON format object with string key/value members as follows: + +```shell +{ + "LdapServer": "ldapserver.example.org:389", + "LdapCert": "path/to/ldap-client-cert.pem", + "LdapKey": "path/to/ldap-client-key.pem", + "LdapCA": "path/to/ldap-server-ca.pem", + "User": "cn=admin,dc=example,dc=org", + "Password": "adminpassword!", + "GroupQuery": "ou=groups,ou=people,dc=example,dc=org", + "UserDnPattern": "uid=%s,ou=users,ou=people,dc=example,dc=org", + "RefreshSeconds": 300 +} +``` + +Not all these options are necessary in all configurations. Here are what each key/value option represents: + + * **LdapServer** : Hostname/IP and port to access the LDAP server via using [STARTTLS](https://www.digitalocean.com/community/tutorials/how-to-encrypt-openldap-connections-using-starttls). Note that as mentioned above, this needs to match the server TLS certificate presented by the LDAP server. This is required. + * **LdapCert** : Path to the local file that contains the PEM format TLS client certificate that you want to present to the LDAP server. This is optional unless you use client-certificates with the LDAP server. If you are using this option, `LdapKey` is also required. + * **LdapKey** : Path to the local file that contains the PEM format TLS private key for the client certificate you want to present to the LDAP server. This is optional unless you use client-certificates with the LDAP server. If you are using this option, `LdapCert` is also required. + * **LdapCA** : Path to the local file that contains the PEM format TLS CA certificate to verify against the TLS server certificate presented by the LDAP server. This is required. + * **User** : DN of the LDAP user you will be authenticating to the LDAP server to read information such as group membership. Required, unless you are using LDAP client certificates to authenticate to the LDAP server. If you are using this option, `Password` option is also required. + * **Password** : Cleartext password for the LDAP user specified above in `User`. This is required, unless you are using LDAP client certificates to authenticate to the LDAP server. If you are using this option, `User` option is also required. + * **GroupQuery** : LDAP base DN from which to start the group membership query to establish the group of which the `User` specified (or implied via the client certificate) is a member. The group membership query itself is hardcoded to the LDAP query filter of `(memberUid=%s)` where `%s` is the authenticating username. This is required. + * **UserDnPattern** : LDAP DN pattern to autofill with MySQL username passed during MySQL client authentication to `vtgate`. This DN is then used, along with the password provided to `vtgate`, to attempt to bind with the LDAP server. If the bind is successful, you know that the password provided to `vtgate` was valid. This is required. + * **RefreshSeconds** : Number of seconds that you should cache individual LDAP credentials for in-memory at the `vtgate`. This is used to reduce load on the LDAP for high traffic MySQL servers. As well as to avoid short LDAP server outages from causing Vitess/`vtgate` authentication outages. Default value is 0, which means **do not cache**. For production it is recommended to set this value to something reasonably high, for example at least a few minutes. This is optional. + +Note that `vtgate` only does very basic validation of the values passed here and that incorrect configurations may just fail at runtime. If you are lucky, relevant errors may be logged by `vtgate`, but in many cases incorrect configuration will just result in a `vtgate` instance that you cannot log into via the MySQL protocol. + +For debugging this, it is useful to have access to the logs from your LDAP server that you are pointing to. The logs would preferably be at trace or debug level, so that you can see each LDAP bind and search operation against the LDAP server as you are testing. + +Once you have constructed the above file, you will need to remove any options that references static authentication from your `vtgate` command line such as: + + * `--mysql_auth_server_static_file` + * `--mysql_auth_server_static_string` + * `--mysql_auth_static_reload_interval` + * `--mysql_auth_server_impl static` + +and add the following new options: + +```shell +--mysql_auth_server_impl ldap --mysql_ldap_auth_config_file /path/to/ldapconfig.json +``` diff --git a/content/en/docs/21.0/user-guides/configuration-advanced/query-consolidation.md b/content/en/docs/21.0/user-guides/configuration-advanced/query-consolidation.md new file mode 100644 index 000000000..9c59f9b93 --- /dev/null +++ b/content/en/docs/21.0/user-guides/configuration-advanced/query-consolidation.md @@ -0,0 +1,27 @@ +--- +title: Query Consolidation +weight: 50 +aliases: [] +--- +Query consolidation is a VTTablet feature meant to protect your database from an overload caused by a spike in QPS for a specific query. + +Without this feature enabled such spikes can completely overwhelm the database. With this feature enabled the following will occur: when a vttablet receives a query, if an identical query is already in the process of being executed, the query will then wait. +As soon as the first query returns from the underlying database, the result is sent to all callers that have been waiting. + +**Note**: an identical query is one that is exactly the same, including literals and bind variables. + +Flags: + +* `--enable_consolidator`: Defaults to true. +* `--enable_consolidator_replicas`: Only enable query consolidation on non-primary tablets. + +## Consistency + +It is important to note that in some cases read-after-write consistency can be lost. + +For example, if user1 issues a read query and user2 issues a write, that changes the result that the first read query would get, then user2 issues an identical read while user1's read is still executing. + +In this case the consolidator will kick in and user2 will get the result of user1's query thereby losing read-after-write consistency. + +If the application is sensitive to this behavior then you can specify that consolidation should be disabled on the primary using the following flags: `--enable_consolidator=false` and `--enable_consolidator_replicas=true` + diff --git a/content/en/docs/21.0/user-guides/configuration-advanced/region-sharding.md b/content/en/docs/21.0/user-guides/configuration-advanced/region-sharding.md new file mode 100644 index 000000000..a505c4d99 --- /dev/null +++ b/content/en/docs/21.0/user-guides/configuration-advanced/region-sharding.md @@ -0,0 +1,527 @@ +--- +title: Region Based Sharding +weight: 25 +aliases: ['/docs/user-guides/region-sharding/'] +--- + +{{< info >}} +This guide follows on from the Get Started guides. Please make sure that you have a [local](../../../get-started/local) installation ready. You should also have already gone through the [MoveTables](../../migration/move-tables) and [Resharding](../../configuration-advanced/resharding) tutorials. The commands in this guide also assume you have setup the shell aliases from this example contained in `env.sh`. +{{< /info >}} + +## Introduction + +Having gone through the [Resharding tutorial](../resharding/), you should be familiar with +[VSchema](../../../reference/features/vschema) and [Vindexes](../../../reference/features/vindexes). +In this tutorial, we will perform resharding on an existing keyspace using a location-based vindex. We will create 4 shards: `-40`, `40-80`, `80-c0`, `c0-`. The location will be denoted by a `country` column in the customer table. + +## Create and Start the Cluster + +Start by copying the [`region_sharding` examples](https://github.com/vitessio/vitess/tree/main/examples/region_sharding) +included with Vitess to your preferred location and running the `101_initial_cluster.sh` script: + +```bash +cp -r /examples ~/my-vitess-example/examples +cp -r /web ~/my-vitess-example +cd ~/my-vitess-example/examples/region_sharding +./101_initial_cluster.sh +``` + +## Initial Schema + +This 101 script created the `customer` table in the unsharded `main` keyspace. This is the table that we will be +sharding by country. + +We can connect to our new cluster — using the `mysql` alias setup by `env.sh` within the script — to confirm our current schema: + +```mysql +$ mysql --binary-as-hex=false +... + +mysql> show databases; ++--------------------+ +| Database | ++--------------------+ +| main | +| information_schema | +| mysql | +| sys | +| performance_schema | ++--------------------+ +5 rows in set (0.00 sec) + +mysql> use customer; +Database changed + +mysql> show tables; ++----------------+ +| Tables_in_main | ++----------------+ +| customer | ++----------------+ +1 row in set (0.00 sec) + +mysql> show create table customer\G +*************************** 1. row *************************** + Table: customer +Create Table: CREATE TABLE `customer` ( + `id` int NOT NULL, + `fullname` varbinary(256) DEFAULT NULL, + `nationalid` varbinary(256) DEFAULT NULL, + `country` varbinary(256) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci +1 row in set (0.00 sec) +``` + +## Creating Test Data + +Let's now create some test data: + +```bash +$ mysql < ./insert_customers.sql + +$ mysql --table < ./show_initial_data.sql ++----+------------------+-------------+---------------+ +| id | fullname | nationalid | country | ++----+------------------+-------------+---------------+ +| 1 | Philip Roth | 123-456-789 | United States | +| 2 | Gary Shteyngart | 234-567-891 | United States | +| 3 | Margaret Atwood | 345-678-912 | Canada | +| 4 | Alice Munro | 456-789-123 | Canada | +| 5 | Albert Camus | 912-345-678 | France | +| 6 | Colette | 102-345-678 | France | +| 7 | Hermann Hesse | 304-567-891 | Germany | +| 8 | Cornelia Funke | 203-456-789 | Germany | +| 9 | Cixin Liu | 789-123-456 | China | +| 10 | Jian Ma | 891-234-567 | China | +| 11 | Haruki Murakami | 405-678-912 | Japan | +| 12 | Banana Yoshimoto | 506-789-123 | Japan | +| 13 | Arundhati Roy | 567-891-234 | India | +| 14 | Shashi Tharoor | 678-912-345 | India | +| 15 | Andrea Hirata | 607-891-234 | Indonesia | +| 16 | Ayu Utami | 708-912-345 | Indonesia | ++----+------------------+-------------+---------------+ +``` + +## Prepare For Resharding + +Now that we have some data in our unsharded `main` keyspace, let's go ahead and perform the setup needed +for resharding. The initial vschema is unsharded and simply lists the customer table: + +```json +$ vtctldclient GetVSchema main +{ + "sharded": false, + "vindexes": {}, + "tables": { + "customer": { + "type": "", + "column_vindexes": [], + "auto_increment": null, + "columns": [], + "pinned": "", + "column_list_authoritative": false, + "source": "" + } + }, + "require_explicit_routing": false +} +``` + +
    + +We are next going to prepare for having a sharded vschema in the cluster by editing the +`main_vschema_sharded.json` file and updating the the `region_map` key's value to point to the +filesystem path where that file resides on your machine. For example (relative paths are OK): + +```json + "region_map": "./countries.json", +``` + +
    + +We then run the 201 script: + +```bash +./201_main_sharded.sh +``` + +
    + +That script creates our sharded vschema as defined in the `main_vschema_sharded.json` file and it +creates a [lookup vindex](../../../reference/features/vindexes/#functional-and-lookup-vindex) using the +[`CreateLookupVindex` command](../../migration/move-tables/) with the definition found in the +`lookup_vindex.json` file. + +That file is where we both define the [lookup vindex](../../../reference/features/vindexes/#functional-and-lookup-vindex) +and associate it with the `customer` table in the `main` keyspace: + +```json +$ cat ./lookup_vindex.json +{ + "sharded": true, + "vindexes": { + "customer_region_lookup": { + "type": "consistent_lookup_unique", + "params": { + "table": "main.customer_lookup", + "from": "id", + "to": "keyspace_id" + }, + "owner": "customer" + } + }, + "tables": { + "customer": { + "column_vindexes": [ + { + "column": "id", + "name": "customer_region_lookup" + } + ] + } + } +} +``` + +
    + +Now if we look at the `main` keyspace's vschema again we can see that it now includes the `region_vdx` vindex and +a lookup vindex called `customer_region_lookup`: + +```json +$ vtctldclient GetVSchema main +{ + "sharded": true, + "vindexes": { + "customer_region_lookup": { + "type": "consistent_lookup_unique", + "params": { + "from": "id", + "table": "main.customer_lookup", + "to": "keyspace_id" + }, + "owner": "customer" + }, + "hash": { + "type": "hash", + "params": {}, + "owner": "" + }, + "region_vdx": { + "type": "region_json", + "params": { + "region_bytes": "1", + "region_map": "./countries.json" + }, + "owner": "" + } + }, + "tables": { + "customer": { + "type": "", + "column_vindexes": [ + { + "column": "", + "name": "region_vdx", + "columns": [ + "id", + "country" + ] + }, + { + "column": "id", + "name": "customer_region_lookup", + "columns": [] + } + ], + "auto_increment": null, + "columns": [], + "pinned": "", + "column_list_authoritative": false, + "source": "" + }, + "customer_lookup": { + "type": "", + "column_vindexes": [ + { + "column": "id", + "name": "hash", + "columns": [] + } + ], + "auto_increment": null, + "columns": [], + "pinned": "", + "column_list_authoritative": false, + "source": "" + } + }, + "require_explicit_routing": false +} +``` + +
    + +Notice that the vschema shows a `hash` [vindex type](../../../reference/features/vindexes/#predefined-vindexes) for +the lookup table. This is automatically created by the `CreateLookupVindex` workflow, along with the +backing table needed to hold the vindex and populating it with the correct rows (for additional details on this +command see [the associated user-guide](../createlookupvindex/)). We can see that by checking our `main` +database/keyspace again: + +```mysql +mysql> show tables; ++-------------------+ +| Tables_in_vt_main | ++-------------------+ +| customer | +| customer_lookup | ++-------------------+ +2 rows in set (0.00 sec) + +mysql> describe customer_lookup; ++-------------+----------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++-------------+----------------+------+-----+---------+-------+ +| id | int(11) | NO | PRI | NULL | | +| keyspace_id | varbinary(128) | YES | | NULL | | ++-------------+----------------+------+-----+---------+-------+ +2 rows in set (0.01 sec) + +mysql> select id, hex(keyspace_id) from customer_lookup; ++----+--------------------+ +| id | hex(keyspace_id) | ++----+--------------------+ +| 1 | 01166B40B44ABA4BD6 | +| 2 | 0106E7EA22CE92708F | +| 3 | 024EB190C9A2FA169C | +| 4 | 02D2FD8867D50D2DFE | +| 5 | 4070BB023C810CA87A | +| 6 | 40F098480AC4C4BE71 | +| 7 | 41FB8BAAAD918119B8 | +| 8 | 41CC083F1E6D9E85F6 | +| 9 | 80692BB9BF752B0F58 | +| 10 | 80594764E1A2B2D98E | +| 11 | 81AEFC44491CFE474C | +| 12 | 81D3748269B7058A0E | +| 13 | C062DCE203C602F358 | +| 14 | C0ACBFDA0D70613FC4 | +| 15 | C16A8B56ED414942B8 | +| 16 | C15B711BC4CEEBF2EE | ++----+--------------------+ +16 rows in set (0.01 sec) +``` + +
    + +Now that the sharded vschema and lookup vindex and its backing table are ready, we can start tablets that will be +used for our new *sharded* `main` keyspace: + +```bash +./202_new_tablets.sh +``` + +
    + +Now we have tablets for our original unsharded `main` keyspace — shard `0` — and one tablet for each of the 4 shards +we'll be using when we reshard the `main` keyspace: + +```bash +$ vtctldclient GetTablets --keyspace=main +zone1-0000000100 main 0 primary localhost:15100 localhost:17100 [] 2023-01-24T04:31:08Z +zone1-0000000200 main -40 primary localhost:15200 localhost:17200 [] 2023-01-24T04:45:38Z +zone1-0000000300 main 40-80 primary localhost:15300 localhost:17300 [] 2023-01-24T04:45:38Z +zone1-0000000400 main 80-c0 primary localhost:15400 localhost:17400 [] 2023-01-24T04:45:38Z +zone1-0000000500 main c0- primary localhost:15500 localhost:17500 [] 2023-01-24T04:45:38Z +``` + +
    + +{{< info >}} +In this example we are deploying 1 tablet per shard and thus disabling the +[semi-sync durability policy](../../configuration-basic/durability_policy/), but in typical production setups each +shard will consist of 3 or more tablets. +{{< /info >}} + +## Perform Resharding + +Now that our new tablets are up, we can go ahead with the resharding: + +```bash +./203_reshard.sh +``` + +
    + +This script executes one command: + +```bash +vtctldclient Reshard --target-keyspace main --workflow main2regions create --source-shards '0' --target-shards '-40,40-80,80-c0,c0-' --tablet-types=PRIMARY +``` + +
    + +This step copies all the data from our source `main/0` shard to our new `main` target shards and sets up +a VReplication workflow to keep the tables on the target in sync with the source. + +You can learn more about what the VReplication [`Reshard` command](../../../reference/vreplication/reshard/) +does and how it works in [the reference page](../../../reference/vreplication/reshard/) and the +[Resharding user-guide](../../configuration-advanced/resharding/). + +We can check the correctness of the copy using the [`VDiff` command](../../../reference/vreplication/vdiff) +and the `.` name we used for `Reshard` command above: + +```bash +$ vtctldclient VDiff --target-keyspace main --workflow main2regions create +VDiff 044e8da0-9ba4-11ed-8bc7-920702940ee0 scheduled on target shards, use show to view progress + +$ vtctldclient VDiff --format=json --target-keyspace main --workflow main2regions show last +{ + "Workflow": "main2regions", + "Keyspace": "main", + "State": "completed", + "UUID": "044e8da0-9ba4-11ed-8bc7-920702940ee0", + "RowsCompared": 32, + "HasMismatch": false, + "Shards": "-40,40-80,80-c0,c0-", + "StartedAt": "2023-01-24 05:00:26", + "CompletedAt": "2023-01-24 05:00:27" +} +``` + +
    + +We can take a look at the VReplication workflow's status using the +[`show` action](../../../reference/programs/vtctldclient/vtctldclient_reshard/vtctldclient_reshard_show/): + +```bash +vtctldclient Reshard --target-keyspace main --workflow main2regions show +``` + +
    + +We now have a running stream from the source tablet (`100`) to each of of our new `main` target shards that will +keep the tables up-to-date with the source shard (`0`). + +## Cutover + +Once the VReplication workflow's [copy phase](../../../reference/vreplication/internal/life-of-a-stream/#copy) is +complete, we can start cutting-over traffic. This is done via the +[SwitchTraffic](../../../reference/vreplication/reshard/#switchtraffic) actions included in the following scripts: + +```bash +./204_switch_reads.sh +./205_switch_writes.sh +``` + +
    + +Now we can look at how our data is sharded, e.g. by looking at what's stored on the `main/-40` shard: + +```mysql +mysql> show vitess_tablets; ++-------+----------+-------+------------+---------+------------------+-----------+----------------------+ +| Cell | Keyspace | Shard | TabletType | State | Alias | Hostname | PrimaryTermStartTime | ++-------+----------+-------+------------+---------+------------------+-----------+----------------------+ +| zone1 | main | -40 | PRIMARY | SERVING | zone1-0000000200 | localhost | 2023-01-24T04:45:38Z | +| zone1 | main | 0 | PRIMARY | SERVING | zone1-0000000100 | localhost | 2023-01-24T04:31:08Z | +| zone1 | main | 40-80 | PRIMARY | SERVING | zone1-0000000300 | localhost | 2023-01-24T04:45:38Z | +| zone1 | main | 80-c0 | PRIMARY | SERVING | zone1-0000000400 | localhost | 2023-01-24T04:45:38Z | +| zone1 | main | c0- | PRIMARY | SERVING | zone1-0000000500 | localhost | 2023-01-24T04:45:38Z | ++-------+----------+-------+------------+---------+------------------+-----------+----------------------+ +5 rows in set (0.00 sec) + +mysql> use main/-40; +Database changed + +mysql> select * from customer; ++----+-----------------+-------------+---------------+ +| id | fullname | nationalid | country | ++----+-----------------+-------------+---------------+ +| 1 | Philip Roth | 123-456-789 | United States | +| 2 | Gary Shteyngart | 234-567-891 | United States | +| 3 | Margaret Atwood | 345-678-912 | Canada | +| 4 | Alice Munro | 456-789-123 | Canada | ++----+-----------------+-------------+---------------+ +4 rows in set (0.01 sec) + +mysql> select id,hex(keyspace_id) from customer_lookup; ++----+--------------------+ +| id | hex(keyspace_id) | ++----+--------------------+ +| 1 | 01166B40B44ABA4BD6 | +| 2 | 0106E7EA22CE92708F | ++----+--------------------+ +2 rows in set (0.00 sec) +``` + +
    + +You can see that only data from US and Canada exists in the `customer` table in this shard. If you look at the +other shards — `40-80`, `80-c0`, and `c0-` — you will see that each shard contains 4 rows in `customer` table. + +The lookup table, however, has a different number of rows per shard. This is because we are using a +[`hash` vindex type](../../../reference/features/vindexes/#predefined-vindexes) to shard the lookup table +which means that it is distributed differently from the `customer` table. We can see an example of this if we +look at the next shard, `40-80`: + +```mysql +mysql> use main/40-80; + +Database changed +mysql> select * from customer; ++----+----------------+-------------+---------+ +| id | fullname | nationalid | country | ++----+----------------+-------------+---------+ +| 5 | Albert Camus | 912-345-678 | France | +| 6 | Colette | 102-345-678 | France | +| 7 | Hermann Hesse | 304-567-891 | Germany | +| 8 | Cornelia Funke | 203-456-789 | Germany | ++----+----------------+-------------+---------+ +4 rows in set (0.00 sec) + +mysql> select id, hex(keyspace_id) from customer_lookup; ++----+--------------------+ +| id | hex(keyspace_id) | ++----+--------------------+ +| 3 | 024EB190C9A2FA169C | +| 5 | 4070BB023C810CA87A | +| 9 | 80692BB9BF752B0F58 | +| 10 | 80594764E1A2B2D98E | +| 13 | C062DCE203C602F358 | +| 15 | C16A8B56ED414942B8 | +| 16 | C15B711BC4CEEBF2EE | ++----+--------------------+ +7 rows in set (0.00 sec) +``` + +## Cleanup + +Now that our resharding work is complete, we can teardown and delete the old `main/0` source shard: + +```bash +./206_down_shard_0.sh +./207_delete_shard_0.sh +``` + +
    + +All we have now is the sharded `main` keyspace and the original unsharded `main` keyspace (shard `0`) no +longer exists: + +```bash +$ vtctldclient GetTablets +zone1-0000000200 main -40 primary localhost:15200 localhost:17200 [] 2023-01-24T04:45:38Z +zone1-0000000300 main 40-80 primary localhost:15300 localhost:17300 [] 2023-01-24T04:45:38Z +zone1-0000000400 main 80-c0 primary localhost:15400 localhost:17400 [] 2023-01-24T04:45:38Z +zone1-0000000500 main c0- primary localhost:15500 localhost:17500 [] 2023-01-24T04:45:38Z +``` + +## Teardown + +Once you are done playing with the example, you can tear the cluster down and remove all of its resources +completely: + +```bash +./301_teardown.sh +``` diff --git a/content/en/docs/21.0/user-guides/configuration-advanced/reparenting.md b/content/en/docs/21.0/user-guides/configuration-advanced/reparenting.md new file mode 100644 index 000000000..499ccea61 --- /dev/null +++ b/content/en/docs/21.0/user-guides/configuration-advanced/reparenting.md @@ -0,0 +1,112 @@ +--- +title: Reparenting +weight: 20 +aliases: ['/docs/user-guides/reparenting/'] +--- + +**Reparenting** is the process of changing a shard's primary tablet from one host to another or changing a replica tablet to have a different primary. Reparenting can be initiated manually or it can occur automatically in response to particular database conditions. As examples, you might reparent a shard or tablet during a maintenance exercise or [VTOrc](../../configuration-basic/vtorc) might automatically trigger reparenting when a primary tablet dies. + +This document explains the types of reparenting that Vitess supports: + +* [Active reparenting](../../configuration-advanced/reparenting/#active-reparenting) occurs when Vitess manages the entire reparenting process. +* [External reparenting](../../configuration-advanced/reparenting/#external-reparenting) occurs when another tool handles the reparenting process, and Vitess just updates its topology service, replication graph, and serving graph to accurately reflect primary-replica relationships. + +## MySQL requirements + +### GTIDs + +Vitess requires the use of global transaction identifiers ([GTIDs](https://dev.mysql.com/doc/refman/8.0/en/replication-gtids-concepts.html)) for its operations: + +* During active reparenting, Vitess uses GTIDs to initialize the replication process and then depends on the GTID stream to be correct when reparenting. (During external reparenting, Vitess assumes the external tool manages the replication process.) +* During resharding, Vitess uses GTIDs for [VReplication](../../../reference/vreplication), the process by which source tablet data is transferred to the proper destination tablets. + +### Semisynchronous replication + +Vitess does not depend on [semisynchronous replication](https://dev.mysql.com/doc/refman/8.0/en/replication-semisync.html) but encourages its usage. Larger Vitess deployments typically do implement semisynchronous replication. + +### Active Reparenting + +You can use the following `vtctldclient` commands to perform reparenting operations: + +* `PlannedReparentShard` +* `EmergencyReparentShard` + +Both commands lock the Shard record in the global topology service. The two commands cannot run in parallel, nor can either command run in parallel with the `InitShardPrimary` command. + +Both commands are both dependent on the global topology service being available, and they both insert rows in the topology service's `_vt.reparent_journal` table. As such, you can review your database's reparenting history by inspecting that table. + +### PlannedReparentShard: Planned reparenting + +The `PlannedReparentShard` command reparents a healthy shard to a new primary. It can be used to initialize the shard primary when the shard is brought up. If it is used to change the primary of an already running shard, then both the current and new primary must be up and running. In case the current primary is down, use `EmergencyReparentShard` instead. + +This command performs the following actions when used to change the current primary: + +1. Puts the current primary tablet in read-only mode. +2. Shuts down the current primary's query service, which is the part of the system that handles user SQL queries. At this point, Vitess does not handle any user SQL queries until the new primary is configured and can be used a few seconds later. VTGate can be configured to [buffer](../../../reference/features/vtgate-buffering) these queries for this short duration. +3. Retrieves the current primary's replication position. +4. Instructs the primary-elect tablet to wait for replication data and then begin functioning as the new primary after that data is fully transferred. +5. Ensures replication is functioning properly via the following steps: + - On the primary-elect tablet, insert a row into an internal table and then update the global shard object's PrimaryAlias record. + - In parallel on each replica, including the old primary, set the new primary and wait for the inserted row to replicate to the replica tablet. Replica tablets that had not been replicating before the command was called are left in their current state and do not start replication after the reparenting process. + - Start replication on the old primary tablet so it catches up to the new primary. + +This command performs the following actions when used to initialize the first primary in the shard: +1. Promote the new primary that is specified. +2. Ensures replication is functioning properly via the following steps: + - On the primary-elect tablet, insert a row into an internal table and then update the global shard object's PrimaryAlias record. + - In parallel on each replica, set the new primary and wait for the inserted row to replicate to the replica tablet. + +The new primary (if unspecified) is chosen using the configured [Durability Policy](../../configuration-basic/durability_policy). + +### EmergencyReparentShard: Emergency reparenting + +The `EmergencyReparentShard` command is used to force a reparent to a new primary when the current primary is unavailable. The command assumes that data cannot be retrieved from the current primary because it is dead or not working properly. + +As such, this command does not rely on the current primary at all to replicate data to the new primary. Instead, it makes sure that the primary-elect is the most advanced in replication within all of the available replicas or that the primary-elect has caught up to the most advanced one. In either case, the candidate will only be promoted once it is the most advanced replica. + +**Important**: You can specify which replica you want to be promoted. If not specified, Vitess will choose it for you depending on the durability policies being used. + +This command performs the following actions: + +1. Determines the current replication position on all of the replica tablets and finds the tablet that has the most advanced replication position. +2. Choose a primary-elect tablet based on the durability policy specified, if the user has not specified one using the flags. +3. Wait for the primary-elect to catch up to the most advanced replica, if it isn't already the most advanced. +4. Promotes the primary-elect tablet to be the new primary. In addition to changing its tablet type to primary, the primary-elect performs any other changes that might be required for its new state. +5. Ensures replication is functioning properly via the following steps: + - On the primary-elect tablet, Vitess inserts an entry in a test table and then updates the `PrimaryAlias` record of the global Shard object. + - In parallel on each replica, excluding the old primary, Vitess sets the primary and waits for the test entry to replicate to the replica tablet. Replica tablets that had not been replicating before the command was called are left in their current state and do not start replication after the reparenting process. + +The new primary (if unspecified) is chosen using the configured [Durability Policy](../../configuration-basic/durability_policy). + +### Metrics + +Metrics are available to be seen on the `/debug/vars` page of VTOrc and vtctld for the reparent operations that they execute: + +| Metric | Usage | +|------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------| +| `planned_reparent_counts` | Number of times Planned Reparent Shard has been run. It is further subdivided by the keyspace, shard and the result of the operation. | +| `emergency_reparent_counts` | Number of times Emergency Reparent Shard has been run. It is further subdivided by the keyspace, shard and the result of the operation. | +| `reparent_shard_operation_timings` | Timings of reparent shard operations indexed by the type of operation. | + +## External Reparenting + +External reparenting occurs when another tool handles the process of changing a shard's primary tablet. After that occurs, the tool needs to call the [`vtctl TabletExternallyReparented`](../../../reference/programs/vtctl/shards/#tabletexternallyreparented) command to ensure that the topology service, replication graph, and serving graph are updated accordingly. + +That command performs the following operations: + +1. Reads the Tablet from the local topology service. +2. Reads the Shard object from the global topology service. +3. If the Tablet type is not already `PRIMARY`, sets the tablet type to `PRIMARY`. +4. The Shard record is updated asynchronously (if needed) with the current primary alias. +5. Any other tablets that still have their tablet type to `PRIMARY` will demote themselves to `REPLICA`. + +The `TabletExternallyReparented` command fails in the following cases: + +* The global topology service is not available for locking and modification. In that case, the operation fails completely. + +Active reparenting might be a dangerous practice in any system that depends on external reparents. You can disable active reparents by starting `vtctld` with the `--disable_active_reparents` flag set to true. (You cannot set the flag after `vtctld` is started.) + +## Fixing Replication + +A tablet can be orphaned after a reparenting if it is unavailable when the reparent operation is running but then recovers later on. Its replication will be automatically fixed by the replication manager or [VTOrc](../../configuration-basic/vtorc). +You can also manually reset the tablet's primary to the current shard primary using the `vtctldclient ReparentTablet` command. You can then restart replication on the tablet if it was stopped by calling the `vtctldclient StartReplication` command. diff --git a/content/en/docs/21.0/user-guides/configuration-advanced/resharding.md b/content/en/docs/21.0/user-guides/configuration-advanced/resharding.md new file mode 100644 index 000000000..1c68be9e7 --- /dev/null +++ b/content/en/docs/21.0/user-guides/configuration-advanced/resharding.md @@ -0,0 +1,368 @@ +--- +title: Resharding +weight: 15 +aliases: ['/docs/user-guides/resharding/'] +--- + +{{< info >}} +This guide follows on from the Get Started guides. Please make sure that you have +an [Operator](../../../get-started/operator) or [local](../../../get-started/local) installation ready. It also assumes +that the [MoveTables](../../migration/move-tables/) user guide has been followed (which take you through +steps `101`-`205` and more). +{{< /info >}} + +## Preparation + +[Sharding](../../../concepts/shard) enables you to both _initially shard_ or partition your data as well as reshard +your tables — as your data set size grows over time — so that your [keyspace](../../../concepts/keyspace/) is +partitioned across several underlying [tablets](../../../concepts/tablet). A sharded keyspace has some additional +restrictions on both [query syntax](../../../reference/compatibility/mysql-compatibility) and features such as +`auto_increment`, so it is helpful to plan out a reshard operation diligently. However, you can always +_reshard again_ later if your sharding scheme turns out to be suboptimal. + +Using our example `commerce` and `customer` keyspaces, lets work through the two most common issues. + +### Sequences + +The first issue to address is the fact that customer and corder have auto-increment columns. This scheme does not work +well in a sharded setup. Instead, Vitess provides an equivalent feature called [sequences](../../../reference/features/vitess-sequences/). + +The sequence table is an unsharded single row table that Vitess can use to generate monotonically increasing IDs. +The syntax to generate IDs is: `select next value from customer_seq` or `select next N values from customer_seq`. +The `vttablet` that exposes this table is capable of serving a very large number of such IDs because values are +reserved in chunks, then cached and served from memory. The chunk/cache size is configurable via the [`cache` +value](../../../reference/features/vitess-sequences/#initializing-a-sequence). + +The VSchema allows you to associate the column of a table with the sequence table. Once this is done, an `INSERT` +on that table transparently fetches an ID from the sequence table, fills in the value in the new row, and then +routes the row to the appropriate shard. This makes the construct backward compatible to how [MySQL's +`auto_increment`](https://dev.mysql.com/doc/refman/en/example-auto-increment.html) works. + +Since sequences table must be unsharded, they will be stored in the unsharded `commerce` keyspace. Here is the +schema used: + +```sql +CREATE TABLE customer_seq (id int, next_id bigint, cache bigint, primary key(id)) comment 'vitess_sequence'; +INSERT INTO customer_seq (id, next_id, cache) VALUES (0, 1000, 100); +CREATE TABLE order_seq (id int, next_id bigint, cache bigint, primary key(id)) comment 'vitess_sequence'; +INSERT INTO order_seq (id, next_id, cache) VALUES (0, 1000, 100); +``` + +
    + +Note the `vitess_sequence` comment in the create table statement. VTTablet will use this metadata to treat this +table as a sequence. About the values we specified above: + +* `id` is always 0 +* `next_id` is set to `1000`: the value should be comfortably greater than the max `auto_increment` used so far. +* `cache` specifies the number of values to reserve and cache before the primary `vttablet` for the `commerce` +keyspace updates `next_id` to reserve and cache the next chunk of IDs. + +Larger cache values perform better but can exhaust the available values more quickly since e.g. during reparent +operations the new PRIMARY `vttablet` will start off at the `next_id` value and any unused values from the +previously reserved chunk are lost. + +The [VTGate servers](../../../concepts/vtgate/) also need to know about the sequence tables. This is done by +updating the [VSchema](../../../concepts/vschema/) for the `commerce` keyspace as follows: + +```json +{ + "tables": { + "customer_seq": { + "type": "sequence" + }, + "order_seq": { + "type": "sequence" + }, + "product": {} + } +} +``` + +### Vindexes + +The next decision is about the sharding keys or +[Primary Vindexes](../../../reference/features/vindexes/#the-primary-vindex). This is a complex decision +that involves the following considerations: + +* What are the highest QPS queries, and what are the `WHERE` clauses for them? +* Cardinality of the column — it must be high. +* Do we want some rows to live together to support in-shard joins (data locality)? +* Do we want certain rows that will be in the same transaction to live together (data locality)? + +Using the above considerations, in our use case, we can determine the following: + +* For the customer table, the most common `WHERE` clause uses `customer_id`. So `customer_id` is declared as the + [Primary Vindex](../../../reference/features/vindexes/#the-primary-vindex) for that table. +* Given that the customer table has a lot of rows, its cardinality is also high. +* For the corder table, we have a choice between `customer_id` and `order_id`. Given that our app joins `customer` + with `corder` quite often on the `customer_id` column, it will be beneficial to choose `customer_id` as the Primary + Vindex for the `corder` table as well so that we have data locality for those joins and can avoid costly cross-shard operations. +* Coincidentally, transactions also update `corder` tables with their corresponding `customer` rows. This further + reinforces the decision to use `customer_id` as Primary Vindex. + +There are a couple of other considerations which are out of scope for now, but worth mentioning: + +* It may also be worth creating a [secondary lookup Vindex](../../../reference/features/vindexes/#secondary-vindexes) +on `corder.order_id`. +* Sometimes the `customer_id` is really a `tenant_id`. For example, if your application is a SaaS, which serves tenants +that themselves have customers. One key consideration here is that the sharding by the `tenant_id` can lead to +unbalanced shards. You may also need to consider sharding by the tenant's `customer_id`. + +Putting it all together, we have a VSchema similar to the following for the `customer` keyspace: + +```json +{ + "sharded": true, + "vindexes": { + "hash": { + "type": "hash" + } + }, + "tables": { + "customer": { + "column_vindexes": [ + { + "column": "customer_id", + "name": "hash" + } + ], + "auto_increment": { + "column": "customer_id", + "sequence": "customer_seq" + } + }, + "corder": { + "column_vindexes": [ + { + "column": "customer_id", + "name": "hash" + } + ], + "auto_increment": { + "column": "order_id", + "sequence": "order_seq" + } + } + } +} +``` + +
    + +Since the primary vindex columns here use the +[`BIGINT` MySQL integer type](https://dev.mysql.com/doc/refman/en/integer-types.html), we choose `hash` as +the primary [vindex type](../../../reference/features/vindexes/#predefined-vindexes), which is a pseudo-random +way of distributing rows into various shards. For other data types we would typically use a different vindex +type: + +* For `VARCHAR` columns, use `unicode_loose_md5` or `unicode_loose_xxhash`. +* For `VARBINARY`, use `binary_md5` or `xxhash`. +* Vitess uses a plugin system to define vindexes. If none of the +[predefined vindexes](../../../reference/features/vindexes/#predefined-vindexes) suit your needs, you can +develop your own custom vindex. + +## Apply VSchema + +Applying the new VSchema instructs Vitess that the keyspace is sharded, which may prevent some complex queries. It is a +good idea to [validate this](../../sql/vtexplain) before proceeding with this step. If you do notice that certain +queries start failing, you can always revert temporarily by restoring the old VSchema. Make sure you fix all of the +queries before proceeding to the [Reshard](../../../reference/vreplication/reshard/) process. + +### Using Operator + +```bash +vtctldclient ApplySchema --sql="$(cat create_commerce_seq.sql)" commerce +vtctldclient ApplyVSchema --vschema="$(cat vschema_commerce_seq.json)" commerce +vtctldclient ApplyVSchema --vschema="$(cat vschema_customer_sharded.json)" customer +vtctldclient ApplySchema --sql="$(cat create_customer_sharded.sql)" customer +``` + +### Using a Local Deployment + +```bash +vtctldclient ApplySchema --sql-file create_commerce_seq.sql commerce +vtctldclient ApplyVSchema --vschema-file vschema_commerce_seq.json commerce +vtctldclient ApplyVSchema --vschema-file vschema_customer_sharded.json customer +vtctldclient ApplySchema --sql-file create_customer_sharded.sql customer +``` + +## Create New Shards + +At this point, you have finalized your sharded VSchema and vetted all the queries to make sure they still work. Now, +it’s time to reshard. + +The resharding process works by splitting existing shards into smaller shards. This type of resharding is the most +appropriate for Vitess. There are some use cases where you may want to bring up a new shard and add new rows in the +most recently created shard. This can be achieved in Vitess by splitting a shard in such a way that no existing rows +end up in the new shard. However, it's not natural for Vitess. We now have to create the new target shards: + +### Using Operator + +```bash +kubectl apply -f 302_new_shards.yaml +``` + +
    + +Make sure that you restart the port-forward after you have verified with `kubectl get pods` that this operation has +completed: + +```bash +killall kubectl +./pf.sh & +``` + +### Using a Local Deployment + +```bash +./302_new_shards.sh +``` + +## Start the Reshard + +Now we can start the [Reshard](../../../reference/vreplication/reshard/) operation. It occurs online, and +will not block any read or write operations to your database: + +```bash +vtctldclient Reshard --target-keyspace customer --workflow cust2cust create --source-shards '0' --target-shards '-80,80-' +``` + +
    + +All of the command options and parameters for `Reshard` are listed in +our [reference page for Reshard](../../../reference/vreplication/reshard). + +## Validate Correctness + +After the reshard is complete, we can use [VDiff](../../../reference/vreplication/vdiff) to check data integrity and ensure our source and target shards are consistent: + +```bash +$ vtctldclient VDiff --target-keyspace customer --workflow cust2cust create +VDiff 60fa5738-9bad-11ed-b6de-920702940ee0 scheduled on target shards, use show to view progress + +$ vtctldclient VDiff --target-keyspace customer --workflow cust2cust show last +{ + "Workflow": "cust2cust", + "Keyspace": "customer", + "State": "completed", + "UUID": "60fa5738-9bad-11ed-b6de-920702940ee0", + "RowsCompared": 10, + "HasMismatch": false, + "Shards": "-80,80-", + "StartedAt": "2023-01-24 06:07:27", + "CompletedAt": "2023-01-24 06:07:28" +} +``` + +## Switch Non-Primary Reads + +After validating for correctness, the next step is to switch +[`REPLICA` and `RDONLY` targeted read operations](../../../reference/features/vschema/#tablet-types) to occur +at the new location. By switching targeted read operations first, we are able to verify that the new shard's +tablets are healthy and able to respond to requests: + +```bash +vtctldclient Reshard --target-keyspace customer --workflow cust2cust SwitchTraffic --tablet-types=rdonly,replica +``` + +## Switch Writes and Primary Reads + +After the [`REPLICA` and `RDONLY` targeted reads](../../../reference/features/vschema/#tablet-types) have been +switched, and the health of the system has been verified, it's time to switch writes and all default traffic: + +```bash +vtctldclient Reshard --target-keyspace customer --workflow cust2cust SwitchTraffic +``` + +## Note + +While we have switched tablet type targeted reads and writes separately in this example, you can also switch +all traffic at the same time. This is done by default as if you don't specify the `--tablet_types` parameter +then `SwitchTraffic` will start serving all traffic from the target for all tablet types. + +You should now be able to see the data that has been copied over to the new shards (assuming you +previously loaded this data in the [`MoveTable` user-guide](../../migration/move-tables/)): + +```bash +$ mysql --table < ../common/select_customer-80_data.sql +Using customer/-80 +Customer ++-------------+--------------------+ +| customer_id | email | ++-------------+--------------------+ +| 1 | alice@domain.com | +| 2 | bob@domain.com | +| 3 | charlie@domain.com | +| 5 | eve@domain.com | ++-------------+--------------------+ +COrder ++----------+-------------+----------+-------+ +| order_id | customer_id | sku | price | ++----------+-------------+----------+-------+ +| 1 | 1 | SKU-1001 | 100 | +| 2 | 2 | SKU-1002 | 30 | +| 3 | 3 | SKU-1002 | 30 | +| 5 | 5 | SKU-1002 | 30 | ++----------+-------------+----------+-------+ + +$ mysql --table < ../common/select_customer80-_data.sql +Using customer/80- +Customer ++-------------+----------------+ +| customer_id | email | ++-------------+----------------+ +| 4 | dan@domain.com | ++-------------+----------------+ +COrder ++----------+-------------+----------+-------+ +| order_id | customer_id | sku | price | ++----------+-------------+----------+-------+ +| 4 | 4 | SKU-1002 | 30 | ++----------+-------------+----------+-------+ +``` + +## Finalize and Cleanup + +After celebrating your second successful resharding, you are now ready to clean up the leftover artifacts: + +### Using Operator + +```bash +vtctldclient Reshard --target-keyspace customer --workflow cust2cust complete +``` + +After the workflow has completed, you can go ahead and remove the shard that is no longer required - + +```bash +kubectl apply -f 306_down_shard_0.yaml +``` + +### Using a Local Deployment + +```bash +vtctldclient Reshard --target-keyspace customer --workflow cust2cust complete + +for i in 200 201 202; do + CELL=zone1 TABLET_UID=$i ./scripts/vttablet-down.sh + CELL=zone1 TABLET_UID=$i ./scripts/mysqlctl-down.sh +done + +vtctldclient DeleteShards --recursive customer/0 +``` + +
    + +These are the steps taken in the `306_down_shard_0.sh` and `307_delete_shard_0.sh` scripts. In the first script (`306`) +we stop all tablet instances for shard 0. This will cause all those `vttablet` and `mysqld` processes to be stopped. +In the second script (`307`) we delete the shard records from our Vitess cluster topology. +Beyond this, you will also want to manually delete the on-disk directories associated with this shard. With the local examples that would be: + +```bash +rm -rf ${VTDATAROOT}/vt_000000020{0,1,2}/ +``` + +## Next Steps + +Congratulations, you have successfully resharded your `customer` keyspace into two shards. +Now, let's learn [how to schedule backups](../../operating-vitess/backup-and-restore/scheduled-backups) of your Vitess cluster. diff --git a/content/en/docs/21.0/user-guides/configuration-advanced/shard-isolation-atomicity.md b/content/en/docs/21.0/user-guides/configuration-advanced/shard-isolation-atomicity.md new file mode 100644 index 000000000..47550a2b9 --- /dev/null +++ b/content/en/docs/21.0/user-guides/configuration-advanced/shard-isolation-atomicity.md @@ -0,0 +1,200 @@ +--- +title: Shard Isolation and Atomicity Model +weight: 55 +aliases: ['/docs/user-guides/shard-isolation-atomicity/'] +--- + +This is meant to explain some of the practical effects of the Vitess multi-shard isolation and atomicity model touched on in [Vitess' scalability philosophy](../../../overview/scalability-philosophy/#consistency-model). + +{{< info >}} +A note about naming: When talking about multi-shard atomicity and isolation informally, we may talk about it as "consistency", but in the context of **ACID** (atomicity, consistency, isolation, durability) as it is applied in a database context, this is incorrect. For this document, we will attempt to use the more precise terms. +{{< /info >}} + +## Introduction + +For a sharded database (keyspace) Vitess maintains multiple, independent MySQL instances. Each of these instances is a member of a single **shard**, and contains a subset of the rows for one or more tables in the keyspace, dependent on the sharding strategy selected for that table according to the **vschema** for that keyspace. + +When it comes to dealing with **isolation** and **atomicity** in the database sense (i.e. the `I` and `A` in `ACID`), there are two main issues in a sharded environment like Vitess: + + * Cross-shard isolation + * Cross-shard atomicity + +Before we dive in, let us state that in the simple case, where a read (`SELECT`) or write (`INSERT`, `UPDATE`, `DELETE`) only addresses data in a single shard, there are no cross-shard concerns, and in general, both the isolation and atomicity guarantees are similar (or the same) to that of MySQL. + +## Cross-shard isolation + +Because cross-shard writes might not be [completely atomic](../shard-isolation-atomicity/#cross-shard-atomicity), cross-shard primary reads (even if they all go to the primary) might not display **isolation**, i.e. they may show partial results for in-flight cross-shard write operations. A simple example may be that the all the rows for a multi-valued insert might not become visible across all shards at the same time. + +This is typically not a big issue for most applications, since so-called read-after-write consistency is retained, e.g.: + + * if you performed a multi-value insert across multiple shards, + * **and** it completed successfully + * **then** if you issue a multi-shard (primary) read after this, you should see the results of what you wrote across all shards (assuming nothing else deleted/updated those rows in the meanwhile) + +### Note + +If you perform replica or rdonly reads instead of primary reads (using the `@replica` or `@rdonly` Vitess dbname syntax extension), you will face the same issues you would if you read from a single MySQL replica instance. Accordingly, writes might not become visible for an extended period of time, depending on **replica lag**. That being said, since Vitess helps you to keep your individual primary instances smaller, replica lag should be less of an issue than it would be with an unsharded large MySQL setup. + +## Cross-shard atomicity + +When performing a write (`INSERT`, `UPDATE`, `DELETE`) across multiple shards, Vitess attempts to optimize performance, while also trying to ensure as much **atomicity** as possible. That is, Vitess will attempt to ensure that the whole write operation succeeds across all shards, or is rolled back. However, if you think about what actually needs to happen across the multiple shards, achieving full atomicity across a (potentially large) number of shards can be very expensive. As a result, Vitess does not even try to guarantee cross-shard **isolation**, but rather focuses on trying to optimize cross-shard **atomicity**. The difference here is that while the results of a single transaction might not become visible across all shards in the same instant, Vitess does try to ensure that write failures on a subset of the shards are: + + * rolled back + * or if they cannot be rolled back, the application receives a reasonable error to that effect. + +As an example, imagine an insert of 20 rows into a sharded table with 4 shards. There are many ways for Vitess to take an insert like this and perform the inserts to the backend shards: + +### Method 1: The naive way + +The first method would be to launch an autocommit insert of the subset of rows for each shard to the 4 shards. This would insert concurrently across the 4 shards, so would be great for performance. However, there are significant drawbacks: + + * What do we do if any of them fail? + * What do we do if any/all of them time out? + +As a result we might not even be able to tell the application with some certainty what happened. However, for some use-cases the performance of this option might be desirable. It is possible to select this behavior for individual DML statements in Vitess by using the special Vitess comment: + +```sh +/*vt+ MULTI_SHARD_AUTOCOMMIT=1 */ +``` + +It is not possible to make this the default behavior in Vitess; i.e. you will have to change your application code to take advantage of this option. + +In the [examples](https://github.com/vitessio/vitess/tree/main/examples/vtexplain), we have a script, [`atomicity_method1.sh`](https://github.com/vitessio/vitess/tree/main/examples/vtexplain/atomicity_method1.sh); which tries to use a sample vschema from `atomicity_vschema.json` and SQL schema in `atomicity_schema.sql` to illustrate this method. Let's run this and inspect the output: + +```sh +$ ./method1.sh ++ vtexplain --vschema-file atomicity_vschema.json --schema-file atomicity_schema.sql --shards 4 --sql 'INSERT /*vt+ MULTI_SHARD_AUTOCOMMIT=1 */ INTO t1 (c1) values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13),(14),(15),(16),(17),(18),(19),(20);' +---------------------------------------------------------------------- +INSERT /*vt+ MULTI_SHARD_AUTOCOMMIT=1 */ INTO t1 (c1) values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13),(14),(15),(16),(17),(18),(19),(20) + +1 ks1/-40: insert /*vt+ MULTI_SHARD_AUTOCOMMIT=1 */ into t1(c1) values (10), (14), (15), (16) +1 ks1/40-80: insert /*vt+ MULTI_SHARD_AUTOCOMMIT=1 */ into t1(c1) values (8), (17), (18) +1 ks1/80-c0: insert /*vt+ MULTI_SHARD_AUTOCOMMIT=1 */ into t1(c1) values (2), (3), (4), (7), (9), (12), (13), (19), (20) +1 ks1/c0-: insert /*vt+ MULTI_SHARD_AUTOCOMMIT=1 */ into t1(c1) values (1), (5), (6), (11) + +---------------------------------------------------------------------- +``` + +As can be seen from this output, we just issue all the inserts with the subset of values destined for each shard without any transactions. + +### Method 2: The I-don't-want-this way (a.k.a. SINGLE) + +In certain situations, a schema may be constructed in a fashion where cross-shard writes are very rare (or should not happen). In a situation like this Vitess provides for a transaction mode (set via the MySQL set statement `set transaction_mode = 'single'`) called **SINGLE**. In this transaction mode, any write that needs to span multiple shards will fail with an error. Similarly, any **transactional read** (i.e. using `BEGIN` & `COMMIT`) that spans multiple shards will also get an error. + +Here is our example for this case using `vtexplain` and [`atomicity_method2.sh`](https://github.com/vitessio/vitess/tree/main/examples/vtexplain/atomicity_method2.sh): + +```sh +$ ./method2.sh ++ vtexplain --vschema-file atomicity_vschema.json --schema-file atomicity_schema.sql --shards 4 --sql 'SET transaction_mode="single"; INSERT INTO t1 (c1) values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13),(14),(15),(16),(17),(18),(19),(20);' +E0803 16:54:09.738322 89168 tabletserver.go:1368] unknown error: unsupported query rollback (errno 1105) (sqlstate HY000): Sql: "rollback", BindVars: {} +E0803 16:54:09.738352 89168 tabletserver.go:1368] unknown error: unsupported query rollback (errno 1105) (sqlstate HY000): Sql: "rollback", BindVars: {} +E0803 16:54:09.738431 89168 tabletserver.go:1368] unknown error: unsupported query rollback (errno 1105) (sqlstate HY000): Sql: "rollback", BindVars: {} +E0803 16:54:09.739161 89168 tabletserver.go:1368] unknown error: unsupported query rollback (errno 1105) (sqlstate HY000): Sql: "rollback", BindVars: {} +ERROR: vtexplain execute error in 'INSERT INTO t1 (c1) values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13),(14),(15),(16),(17),(18),(19),(20)': multi-db transaction attempted: [target:{keyspace:"ks1" shard:"40-80" tablet_type:PRIMARY} transaction_id:1628034849705415307 tablet_alias:{cell:"explainCell" uid:2} target:{keyspace:"ks1" shard:"80-c0" tablet_type:PRIMARY} transaction_id:1628034849709028116 tablet_alias:{cell:"explainCell" uid:3} target:{keyspace:"ks1" shard:"-40" tablet_type:PRIMARY} transaction_id:1628034849700176113 tablet_alias:{cell:"explainCell" uid:1} target:{keyspace:"ks1" shard:"c0-" tablet_type:PRIMARY} transaction_id:1628034849710978055 tablet_alias:{cell:"explainCell" uid:4}] +multi-db transaction attempted: [target:{keyspace:"ks1" shard:"40-80" tablet_type:PRIMARY} transaction_id:1628034849705415307 tablet_alias:{cell:"explainCell" uid:2} target:{keyspace:"ks1" shard:"80-c0" tablet_type:PRIMARY} transaction_id:1628034849709028116 tablet_alias:{cell:"explainCell" uid:3} target:{keyspace:"ks1" shard:"-40" tablet_type:PRIMARY} transaction_id:1628034849700176113 tablet_alias:{cell:"explainCell" uid:1}] +multi-db transaction attempted: [target:{keyspace:"ks1" shard:"40-80" tablet_type:PRIMARY} transaction_id:1628034849705415307 tablet_alias:{cell:"explainCell" uid:2} target:{keyspace:"ks1" shard:"80-c0" tablet_type:PRIMARY} transaction_id:1628034849709028116 tablet_alias:{cell:"explainCell" uid:3}] +``` + +As expected, we start getting errors since we are attempting a Vitess "transaction" across multiple shards. + +If we limited ourselves to writes that only target a single one of the multiple shards, this would work fine, e.g.: + +```sh +$ ./method2_working.sh ++ vtexplain --vschema-file atomicity_vschema.json --schema-file atomicity_schema.sql --shards 4 --sql 'SET transaction_mode="single"; INSERT INTO t1 (c1) values (10),(14),(15),(16);' +---------------------------------------------------------------------- +SET transaction_mode="single" + + +---------------------------------------------------------------------- +INSERT INTO t1 (c1) values (10),(14),(15),(16) + +1 ks1/-40: insert into t1(c1) values (10), (14), (15), (16) + +---------------------------------------------------------------------- +``` + +Here is the result if we attempted a transactional read across shards while in `transaction_mode` of `single` (note the `BEGIN` and `COMMIT` in the query): + +```sh +$ ./method2_reads.sh ++ vtexplain --vschema-file atomicity_vschema.json --schema-file atomicity_schema.sql --shards 4 --sql 'SET transaction_mode="single"; BEGIN; SELECT * from t1; COMMIT;' +E0803 17:00:49.524545 89777 tabletserver.go:1368] unknown error: unsupported query rollback (errno 1105) (sqlstate HY000): Sql: "rollback", BindVars: {} +E0803 17:00:49.524549 89777 tabletserver.go:1368] unknown error: unsupported query rollback (errno 1105) (sqlstate HY000): Sql: "rollback", BindVars: {} +E0803 17:00:49.524581 89777 tabletserver.go:1368] unknown error: unsupported query rollback (errno 1105) (sqlstate HY000): Sql: "rollback", BindVars: {} +E0803 17:00:49.524661 89777 tabletserver.go:1368] unknown error: unsupported query rollback (errno 1105) (sqlstate HY000): Sql: "rollback", BindVars: {} +ERROR: vtexplain execute error in 'SELECT * from t1': multi-db transaction attempted: [target:{keyspace:"ks1" shard:"c0-" tablet_type:PRIMARY} transaction_id:1628035249495856333 tablet_alias:{cell:"explainCell" uid:4} target:{keyspace:"ks1" shard:"80-c0" tablet_type:PRIMARY} transaction_id:1628035249493377809 tablet_alias:{cell:"explainCell" uid:3} target:{keyspace:"ks1" shard:"-40" tablet_type:PRIMARY} transaction_id:1628035249485888657 tablet_alias:{cell:"explainCell" uid:1} target:{keyspace:"ks1" shard:"40-80" tablet_type:PRIMARY} transaction_id:1628035249490426670 tablet_alias:{cell:"explainCell" uid:2}] +multi-db transaction attempted: [target:{keyspace:"ks1" shard:"c0-" tablet_type:PRIMARY} transaction_id:1628035249495856333 tablet_alias:{cell:"explainCell" uid:4} target:{keyspace:"ks1" shard:"80-c0" tablet_type:PRIMARY} transaction_id:1628035249493377809 tablet_alias:{cell:"explainCell" uid:3} target:{keyspace:"ks1" shard:"-40" tablet_type:PRIMARY} transaction_id:1628035249485888657 tablet_alias:{cell:"explainCell" uid:1}] +multi-db transaction attempted: [target:{keyspace:"ks1" shard:"c0-" tablet_type:PRIMARY} transaction_id:1628035249495856333 tablet_alias:{cell:"explainCell" uid:4} target:{keyspace:"ks1" shard:"80-c0" tablet_type:PRIMARY} transaction_id:1628035249493377809 tablet_alias:{cell:"explainCell" uid:3}] +``` + + +### Method 3: The default way + +By default, Vitess employs a default setting for `transaction_mode` of **MULTI** (`set transaction_mode = 'multi'`). This mode is a tradeoff between atomicity, isolation and performance, where Vitess will attempt to minimize (but not guarantee) the chances of a partial cross-shard update. What Vitess does in a case like this is: + + * Phase 1: Open transactions to each of the shards. If anything fails during this phase, nothing has been written, the application sees an error, and can cleanly retry. These transactions are opened in parallel for best performance. + * Phase 2: Issue the subset of inserts for each shard. This is also done in parallel. An error at this point will allow us to rollback the transactions on the shards. Again, no data has been affected, and the application can retry. + * Phase 3: Issue commits against each shard involved in the insert. This is done serially. This allows the operation to halt if there is an error on one of the shards. At this point an error would be returned to the application, **but the inserts on shards committed before the failing shard cannot be rolled back**. As a result the atomicity of the insert is broken, and now clients will see (possibly permanently) inconsistent results. It is left up to the client to repair the possible inconsistency, potentially with a retry, or some more elaborate mechanism. + +VTGate records a warning and increments a counter when a commit error occurs on one shard after successfully committing to other shard(s). The warnings will look like this: + +``` mysql +mysql> show warnings; ++---------+------+-----------------------------------------------------+ +| Level | Code | Message | ++---------+------+-----------------------------------------------------+ +| Warning | 301 | multi-db commit failed after committing to 1 shards | ++---------+------+-----------------------------------------------------+ +1 row in set, 1 warning (0.00 sec) +``` +
    + +#### Notes: + +* As an optimization Phase 1+2 are performed at the same time, see below. +* Because parts of this proceeds serially, the latency of the overall insert is typically proportional to the number of shards that the insert is scattered across. + +Let's run our example for this case [`atomicity_method3.sh`](https://github.com/vitessio/vitess/tree/main/examples/vtexplain/atomicity_method3.sh) and inspect the output: + +```sh +$ ./method3.sh ++ vtexplain --vschema-file atomicity_vschema.json --schema-file atomicity_schema.sql --shards 4 --sql 'INSERT INTO t1 (c1) values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13),(14),(15),(16),(17),(18),(19),(20);' +---------------------------------------------------------------------- +INSERT INTO t1 (c1) values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13),(14),(15),(16),(17),(18),(19),(20) + +1 ks1/-40: begin +1 ks1/-40: insert into t1(c1) values (10), (14), (15), (16) +1 ks1/40-80: begin +1 ks1/40-80: insert into t1(c1) values (8), (17), (18) +1 ks1/80-c0: begin +1 ks1/80-c0: insert into t1(c1) values (2), (3), (4), (7), (9), (12), (13), (19), (20) +1 ks1/c0-: begin +1 ks1/c0-: insert into t1(c1) values (1), (5), (6), (11) +2 ks1/40-80: commit +3 ks1/80-c0: commit +4 ks1/c0-: commit +5 ks1/-40: commit + +---------------------------------------------------------------------- +``` + +The numbers on the left of the output indicate the ordering of operations, i.e. everything with the number `1` are performed concurrently. Here we can see that Phase 1 and 2 are initiated across all the shards for the multi-sharded insert concurrently. It is only in Phase 3 when we start doing the commits to each of the shards in serial, which allows us to abandon or roll back changes to at least a subset of the shards if something goes wrong between the `2 ks1/40-80: commit` and the `5 ks1/-40: commit`. + + +### Method 4: The TWOPC way + +Vitess also supports (assuming the vtgate and vttablets have been configured appropriately) a two-phase commit option for multi-shard writes. This is enabled by using the non-default setting for `transaction_mode` of **TWOPC**. In this mode, Vitess can guarantee atomicity for cross-shard writes; but still does not guarantee isolation; i.e. other clients can still see partial commits across shards. + +It should be emphasized that if you need to use **TWOPC** extensively in your application, you may be using Vitess incorrectly; the vast majority of Vitess users do not use it at all. + +See our [TWOPC page](../../../reference/features/two-phase-commit/) for more details on how to configure **TWOPC**. + +In TWOPC mode, Vitess uses the `_vt` sidecar database to record metadata related to each transactions across multiple tables. As a result, any multi-shard write in **TWOPC** mode is likely to be an order of a magnitude slower than in **MULTI** mode. + +Unfortunately, we cannot use `vtexplain` to illustrate the working of TWOPC mode. + + +## In closing + +From the above examples, it should be clear that as the number of shards increase, large write operations that span multiple shards become more problematic from a performance point of view. It is therefore important for Vitess keyspaces (databases) that will span a large number of shards to be designed in a way that individual writes will affect a minimum of shards. diff --git a/content/en/docs/21.0/user-guides/configuration-advanced/static-auth.md b/content/en/docs/21.0/user-guides/configuration-advanced/static-auth.md new file mode 100644 index 000000000..42e3c0921 --- /dev/null +++ b/content/en/docs/21.0/user-guides/configuration-advanced/static-auth.md @@ -0,0 +1,154 @@ +--- +title: File based authentication +weight: 2 +--- + +The simplest way to configure users is using a `static` auth method, and we +can define the users in a JSON formatted file or string. + +```sh +$ cat > users.json << EOF +{ + "vitess": [ + { + "UserData": "vitess", + "Password": "supersecretpassword" + } + ], + "myuser1": [ + { + "UserData": "myuser1", + "Password": "password1" + } + ], + "myuser2": [ + { + "UserData": "myuser2", + "Password": "password2" + } + ] +} +EOF +``` + +Then we can load this into VTGate with the additional commandline parameters: +```sh +vtgate $(cat < SELECT UPPER(SHA1(UNHEX(SHA1("password")))) as hash; ++------------------------------------------+ +| hash | ++------------------------------------------+ +| 2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 | ++------------------------------------------+ +1 row in set (0.01 sec) +``` + +So, you would use `*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19` as the +`MysqlNativePassword` hash value for the cleartext password `password`. + + +## UserData + +In the static authentication JSON file, the `UserData` string is **not** +the username; the username is the string key for the list. The `UserData` +string does **not** need to correspond to the username, and is used by the +[authorization mechanism](../authorization) when referring to a user. It is +usually however simpler if you make the `UserData` string and the username +the same. + +The `UserData` feature can be leveraged to create multiple users that are +equivalent to the authorization layer (i.e. multiple users having the same +`UserData` strings), but are different in the authentication layer (i.e. +have different usernames and passwords). + +## Multiple passwords + +A very convenient feature of the VTGate authorization is that, as can be +seen in the example JSON authentication files, you have a **list** of +`UserData` and `Password`/`MysqlNativePassword` pairs associated with +a user. You can optionally leverage this to assign multiple different +passwords to a single user, and VTGate will allow a user to authenticate +with any of the defined passwords. This makes password rotation +much easier; and less likely to require or cause downtime. + +An example could be: +```json +{ + "vitess": [ + { + "UserData": "vitess_old", + "MysqlNativePassword": "*9E128DA0C64A6FCCCDCFBDD0FC0A2C967C6DB36F" + }, + { + "UserData": "vitess_new", + "MysqlNativePassword": "*B3AD996B12F211BEA47A7C666CC136FB26DC96AF" + } + ] +} +``` + +This feature also allows different `UserData` strings +to be associated with a user depending on the password used. This can +be used in concert with the [authorization mechanism](../authorization) to +migrate an application gracefully from one set of ACLs (or no ACLs) +to another set of ACLs, by just changing the password used by the +application. + +In the example above, the username `vitess` has **two different** passwords +that would be allowed, each resulting in different `UserData` strings +(`vitess_old` or `vitess_new`) being passed to the VTTablet layer that can +be used for authorization/ACL enforcement. diff --git a/content/en/docs/21.0/user-guides/configuration-advanced/trace1.png b/content/en/docs/21.0/user-guides/configuration-advanced/trace1.png new file mode 100644 index 0000000000000000000000000000000000000000..93486434c8d198c7c1f90e30b9adde8fd32464b9 GIT binary patch literal 95000 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
    I~MyTLWmfF3Fj`hcT4yb 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�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

    S4t-g!}%CqjK8NT;waBugik zmxFD@#XVk+7O>RH;Hg(G-i!mtQSQd^{9YI~)+(~lB6235fC~oSO@m;1juDX$MvU@A zQHmt}@rHGDnvIfed~CJ1pXMKMQ-K?hp&|`~jjl(ky514e71(`hbrC+(6!~rB3RYti z0fW&9aiD{lIz|s9=C&3>`-0n5$v(Gb$BGbAuoRK*SUX_)=4_5)QSqpf$asr&Q4j;r zkqf3AC5~Jg9!81n>we0l`i|)L_(6AE18Wh z^@1x^Q3T8G0BO}tU~TToxZnSXM1P@AEbdITjq04#2z?u7J6ph% zmS)vL(5sifS=xV+u!@*WFRUc!$*QMF$S4etSBNsDH+gg`IqlLi#>;6HMdkp2rxm}MUqQ^G$>p|9K8M3X7p#8%L0)H z;f-LkeiwR%64t2jXliQR&`?yI^_K3gE)R@k8W$XJEe-Y>{h9f^_7Aij*5CP&wGs_4 z(K^?=_Wg3ES=>|?n$yfmVzZlddXutI!4I#k5H$Mg$&R0?3D%tcS5lRMV;V07WWg+q zCQ@fD@V{0+@wYTc+1d<}&}K3!Xob`6*zw7|-tL=Eu>&P3e>LKj69L0FHXe8mb?4w) z`rZfP;EAxw(P{RU{u{PL-`@(mPyQ|<{xf=45LeCDrlCy6^bChnNvH90lFY+lVI24F zadi6T{DWX^$AOS_$i3@tfx*1@9CsbnCeHN93H_08ATwssp;ot<~YOcQG3M%Su1HO|+Y#Q}c$HEBTb$ zLdolI2IJ(yVYIJep0*Ez!G!ABqS7aplqU&xpE|Hfxzx>fBZweqx~tFPhSP{0o&Noo zX~{x-)8=UB0P>kXulpWv`M@lzgmX%3J7zA=$4>cE0mn$$OG4(dqaz;t(a{y&zLzAs zCR+|=<;MaVPnO?3N!X|>w;!MG#gotmIOq+POU9=aP0cAsaNwbJaMOIMOU>^_xa@W2 z<1{zz@&Jer1dO}d>$c10*;}2}R4kl^iKn)a94*

    Z!z2EFvM6 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 WsBclpETxbQ?StPMsNO$N^jVKUZOMQ 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

    102s$5tdz>usOl+tWNdT}M9yCyhL)IZ3SW=a{fp zdq|zw701O?GaG7!Re!pw*6yjtvoVG7Nb)1=_@vYZTlyF0$`V#rD`!S)&C-G&Nkvv? zjX#saEv}B2Z}bfEvBlohsa_=B6uFyB+4y?D;q$kFAIm&%3`6cn2z~6fOyJECHehi2 z{Z<(Mo~!m)BvAKga;tR;nNCNZ$e$S(8xV(Gw=a7>o4}Pevl+rwJS|X?+)o4frusJR z+reehmwd281HVOEdDJ{$ZX**PmH8c3a$CFF- zB$LxWbJYCoV(yZene5!mwzhaC>9-Zo%{$PPo{VGJ(!M{ zGs72ujMgLKt;brIzAw>{7p?V`TJR-oPM`*Zy-A`#EdW(GE2E80$@7;n;49jQw7$uj zLM)vcL#7MlLfx}3Yf&YN%=YJBYEtlkxKH^icqNaQ+B@v~N+-eNpqsfriF?)Go#=dk zwtA*{Y?-*8CSS{d=3*};h;Uh0dfs<5i|1qQ>Xpzo9j{w@@H*|AlBD%kX2omP^x3}y zTD}iQt#zYH-?bq!Sfme`OW^!=`H(wIfC4tagxYFq zHCVdkZ_xt2V!AN4!3BPf3e*MBLAG<^3VFs;R>`hl=PEO?Me8A)`)tliZ`Em7$6rc* z@;+SyX=klicsN8GzGb6Ghq=3{f;;@U@DRzG>@c&%M#MHVXaDeK&g(V*v(4rrm*Jc@ zqZ`3MLD_oT>eR?-ibI&=G_5b0(!`Inf z9bK>^)qeHZ#B>tG2-GQ`ou-{poo>>c-VRr{+wPvt_+Z)93+2hm&%dswrCwPcfmJy` zpv4)3pOluwjD?OG#;+K_`(= zsvd_@3OH482M7pAs$EcM8rPfeok?FZL*;@+uBzXjVXi&?khGrT*ilUA`}0G|Wa%Ew zv_fz=g&h}c! zORU#9?Buwf4CIqlVvK=oF(Qoy$MeAJ#sVj+TK+Yf(=XCn+q0+?PPsPuc!6madWsCc zgkDwZzSq<1XI@y%p11|akdl0@nZ0XNA#~Sqjemmp^e|Glt5eHqYOZMYQ1@%E^!==E z%MM_^@D9z8-tE#bBN!{rsGo#_3E(Tq6It4!LjFiA%s?T&p^2z=OX2hJL0jqlI<{} zpULS!sWLwj(v8y-R1q~qd4@~<VEi)~_@sfatrU`(R^fG!u;5hJ>PCxuVUmESs9reMacDi-rc*b9p zOtnxwGTFQc>}&iCR;z!I38MiC!HC)<#pyA}Y3eOSrb72_^Jc!&_32j>I@{ky{q|2* zj<)Qs^p;;z+ho^4@eG~qbz3bw8hGEcZ*oc#$q zDD|mk{fXvmV#Rb43gwi>@S43cx5BE_G>PZb7^DJ@R+W(b>cgPm=0Ytsq?MQ@<=n@D zaz@u)%G7N#`}5`j=db2Lqs(Qk#L3z*Hf+b0`&)Iq)sxI`m`=jJhW9j_1v7`gURy!z z_xba!Qx?mV!aM-6Z%2(=cdK`@Xq`y49~x&gVu>xDu*V{A(Db2aWiH>;*T8pCiwC)~BX^-u?uY0cu>}XF8Z6 z8TxidV)dZM=YJw5Y$Hr?LMw%VhZPmLZ4$-^Bcn`?=(CM6$mUMlj}=Qa{B&G8}>Ed*=6xn7!53^w@Ux>=g)Is zUrB8`;b2D>b1!g2>dwsS$_kEJ~opnN&ia`|1XSc=ku zxzKg7;D~aL!ZRZiL1W9x1pztn$sJRsPh-VkqBm+kjio&)Qnfyut4kft-QC;kFT_uG zR23JEt=#5%esR42>Eh&_1tJ{0kHV%cl}01?5cgWwrN+!h}05latfUnzoZ-%b7dYPZ9lCw^-%HztgNhHf8eviWmTO_7!3}N)%$%n=0|qY zRLa%LsgnXn-`>fCD&b*)r3At{w|zBq5w_|R6XY4>bn|DwkSK+&U6lbZ89+&&Nd}Yn z?i-;O$#GP34-F0Zc%JRm`;Si_^Z?f1hM3CE9wCki*Xi0#fByVU3v_lj$SEw`{|0@v z+a_0|rH<9nNrf+0uP_(Xzi%@|o_}w+aDuAtpxestsQx5>A_HyhFthh8Qn6XxIGIXx zC*_7OsqWDnvSb%IAMQ^c8v4Ak$#=FLa%xk#e%}o!2O~^X068oUC_FS z4l(Ijq-WY0PwJ-`efFqv!WxZv7-3oKJJA`)W=5M*qGP;t~X?l`|@yK$WG1()m|3C}> zL1^$_zxmGaal`BmYA*p``p@T8MS6{IKnY4yUmxXwMTKGDg1e)@9lDY(r>{fH5xTPZ zxYto>`Q~z5CKD5nG8>VdV0(tsB5`h+%#jcD&eniN7U4Owo&E^oAx_J`rnVFOSJZa6 z5#3-6+!PdL4#2E*$$J+F){;Uz@fT%h~RQK;*kyR6p>&3_^dX z^4Uc*ye|6tGgDfMsBEhmtGmV^{hSl)UIa zE;{s!k?L<#I>y|dosRtc4GlK0CpvG~gGx>1&r{RuG`Pq(Bmdg8W84q5?ed)-mWQ7C zBTth~!Ipo8tuP&7BrKR3(wkWg^K)8j3F#fOz%0xrzd6FCqsdd}(7t9jYyYRD#OM9# zkOWl2@%nWCgA~wj{O?dF4f=#8MRB?aOZMh{o&jFj*S?~GZTkxFfJR10cfXxpWVGz` z*}Xz1+ZC`~E?*4TdmmJ|!7_C_jvtLwL-hHCZP z?xU%Bsq|x`7kQoz)ceSB)RumkQz2x&j@EL`y`zV}x#P3*+TPEfX;7bb-ZJ6|#>WD9 zQg?OuAzB_C&a+jdY=b)iu9hc$%c&Icm$eL*)B)ZhKTAWDa@l1xNJiMwCQm(&?#&VBn+kwAmXPhOn`yGg-`wNKG zE+rgF8M4`W!#&bWf0T@7*tqMVX!mS;ic=fl*Spliy?a4e==uMGuy8JFZ*R|fFlhLo ztiy_S_k7P&7T&V^8Ap zdWTQe&90>(;Rv>=Gc0+kNG!sDlM0_wsFyGOlOs0R}k27R;Du7AH(=t8#rJEH zXxw-DD>X+LVzdZ|(-`D*-pf=EY=+-~^cpAItMa?{Bv`ACWS$|3e2EhXMnO%O1g{YQ zT8BPhW4kT?Do#RJG9|zDEyQFs9|DBVSJXeQ*)8^fR*0QqUd-t+F3FkzAv3X8+8Ay~ z?O1+mn{95QAVW3r1hRHmol_HtgatnNp#>_nH)aRcAJ=SjYcY<$%{@n}w!(R(xKocB?-Z_sz`_CbZF2o(jLr@b;F5i%o0AqRi14bASQCKnF#f zZD^~XH4d5@4=4cvU@`kY0Pz99A`bmO=qE=BmbhJxRj3HJO#)(LobH6i)VsLRcfBKF z2?gq`HGqunz1l9ZzryZd!a-$qwa|~H^alwH(X`l01mY3bAUrLqk3Nwt2F$-LbU9eo zs#_7ZNwDjCq6>;ifi-3Kd|#dGH__Q06f~+<7qQu94qFl({n=ht`z)63bq6o{kL$QM zo93_RqYmL7nO9OB-I!}*!x3ChG}HA*NJnH-X?%8OwZ+&P7|=Mhh_ipZartUi^bO3< z)ceD74TY1d?w0O`e>EGs7lG=C4+GYrbPO#p72E95+a1#${6ze&fJJ1ftX25G&{lFJ z650GtTM3P z$tJ~YhT}Dh4+8Jb2Fd)+hDDf!g8qs3lHu8GQuDJBS}BO0`f0s{hM-~~`S5=f1OJH| zv(2&S{|3m-;dkV8Y$b-1=dy@xseXmZLU~}BO0L}!TW!wW8G^vC`=Bn2dh+k#8bRh& zD)oz;_&P{xHopUcL&7q#WgmVMz#&AGqC$Ix4PWFsO<+1dR8j+u#1;78WY7GKwjd3< zkMj;n8p>iUA2ydi__R>j9sm=F4hYv)#l7zS2N>PQKp+dHwuhoICer2f=f%2Bdias~ z&DX`DG}k8f6q0RZidw2{dyDXOPt&O7C?<;V@xY~9ObQ2aDs<5qhXao|GY@xK%-G!@}mOxC=*m%ii); z*Y!qu6=*-+5mC|J%o`!|`jN zf3@=e67cK~%42@T85zbo!FPdGJJe6^+^ca^=$6n_;o2OLFgtIOYNDE?|7Pd~6RIhb zX20txfMok>Wgpq5NFJ^Z)Fc*JK$=3deK@72!GP%M9p0lJ3|8#&vC+q)-grf}b2NYS16*Kp}dwq41;9JTQC*QUJ=P{>z(~!_-J^c**gq>d0k1C|- zuT0|aaYt*{{G`KlScwT3t>RV;QlYk0Rzc_DtycD!W3mT?c686b@sEndF;!jdx4S0| zSZ}wvcZt%l6b!Zo-mADLbWsN|ke=>vyYcgbSiksQ#omxk8kDCd=H@tj6Q%ciNhANz zbX0u!x`JCmtG8vp2H_qah*8s8x3NBrB=5nxok zI{-MNqVK8`079^|*FgdpO5CO5|J(SipBJVa`#>G=v^^!sqkEJCQjUUuFXdqP3rf(@ zXPW}N6fX4Zp(fXO5Bd$oN{Oq|D}+U(^ySyl#>!G8t_9< zNIv<^7@@(x#2qAe*SGL^bC6vFzDeijTuzvlv8t!y-re3xl?+|~>a8uh0O;^FNDn|^ zJXXvA^cm!|3jc|V5sKnsGOx#bQZ z1?Ygg$m5?#8Bjd*LT)=tR5YjXnG0YRRgwOD77_IK;Kn@Wf2nf z_8HG2LuFHe){qjV9pX!R1{q1_Gq-HXG&Ob?Tnf>kMt^TDtjY@>6Fr01|8!<3GUMVD zDhGW45}Ao2W!u}3cr)wKMKI%d02Yz*_1uTI8p~%=-TrzLx>U zlK5^JVN6e8`fQrkrf_xZ3}*;^N^H=b-;6EdnY`NI?|06M_t}+PbnI)-a9A> z`^ogaY1H?JNYvcGK_FR$?k$CsB&HiPW|lFW2aH|G3-JFaG1@qS#d&YJW7RQ;LSQ*W^F>zzAY((G7&!J1cl6 zhgO8{9kpzo9e1rH*5aW4FTvZ_7k}ozeB1EqHu$3zLiV8NQF^(caxSPCkmuj$=ZCNQ z^<9;0ko@g;-qOlvX{@w<_-IchG!TU0kljAU=f=GOQrNdic#q*^lLupiG4@9K9o^2# zbe#E~uU@_4dq_su&~+;!!;Mo4w@FmgLii!;L7)g+o~lK4DE$g4tfSC%K^R%}GomwI zcyEP9FR-=Oq)vAX5XPtj>Ve47_~VO@{IM5<$aEh+m zBgZ{{TeUP3Qv%;kHiYUE%9e+ErhNb96aRV-dY|!>8ivOcK~QHz1$9Fp z*|N?GSWG34iBK%2bF`~L5EP4PU}Kx0H@pSbMyjA}q#yWP&mgpb<)okGdG2NXeqPQc zt(Lbm+Jv>s0<6%PRAwpmH+EzQ3@QHBhj0VqPwIODPLo((YPbO+BE=bshX!e$TZ73I z0=kDKOkqh0;f?VT+qY(bijRtV$==xaAB-cn&ySkm?SnIH=9yK)U^84WI9JDJyyOe>q36yMDEDjO9uWJ1~P5&!ylfBz|E{A=_Aajwr5Sis|l;aRh3 zRTd?(`VNoKHsRB_)U-Ke=juL|a2!5Y`bdK1&xyohZ(Y*_y;b z$w{)g@=$R#gZco@4-r_=9hGWmWhGK8&>7zu&rC`y7yorJy-rc5K~o^DQFg==W z7s}=Gu~1o9`Qzel=x=lR8(|a54xt;a>zRd6#7#>axxcv5M5w=YbKwwMt47QQNZ?Vq zKgLjc^?>WWh+yh+$g?!*uheKHE_8d>j;~oXYnX1_y*O4H)Unb{&@sDz%(Q;&H_9S9vv6Se zVuLRMhqQ>5Trj!DG*w5MO=3lR9yoU#2h zw+F=R-d8T@bq-b$gog?*E|lu$X0W^3k`H|qHAiG8#_ojIVGDUDsAE+=lh~2CFS({S z0^c%}F$zr-cGC)>^bx5O#DqAwSTk=08h?VUEfgE!wM()kmA2|BC?3umD{*WhK`#8X zp#Jo*SpR!`@y3Df%Pg7;hq@C8%uLj49hOI1K#dkJnvOwarNCnOLH5t@>Vsq~a2>8& zB%RZC+8(ZC#sK7|qtD}h_I@w>Jrn;_=_Y?g7SR#s;oIgCn#=F|C?cBU<6;-)a_zp% z(-w@d4vP#x1hZS-NmIr%j^Mv9LuaRW_g29Fb}YJVQ}QJPIjzNj+yGh11LrrYtF6<# z6PjEno3O>V3+bNvD&7Jj1j(mJg3%h>E5g(s78n>LAj^U2&ZAkz?E1K>{PG^gMzT}{qWx}}lZLOQWcOtx-%yg77_ybrhPWQ0%C?AII!&52{}?9Eyz?|Nyra)dTcJ~+eO8zXcC&+ zOSsXIq+O3Ic~~UaXn)!7zjCwfSJ5tO)lLRtRRX?#HNcd36}`aZZ67-<%<)u$iwA<8*!Q|tpd728s9mq{EJL--K0z0Em_&ECFxYidu!w)z zoSqrDRPhu&4u2UGQ15`h9OaGHPbC_nn5@4O10}%Jb0t6)!Hm4k5+fPkrM**RF=Rmq#Cy+AL z2vypVi0i)vld5kK6wDYaF|LSbT3n8fwHwY1M(xHNbm3b)=33jK=QGzIgd8l#e0j*# znsBvEza8{Poy8Ag6mMvAbMrbO zibB2bTm>(MIHy&$A2-ExPXBFk>^Evpx46KirrrdK4#~9l_J;<+4LF+XP_|O}Y~bB` zzrhTobBk$X8@L%>yIT-_5yfQWwP7K{C$YnAAS_dkA-_$!dGKyX;S3IYOm{Nh9(~$k zJG|5s&IXM!{QC%DMvG$8EnngR%MAiW5^C5jFK^@~oF7as#Kp7n*gU1kFr4E6 z9{Hg};z&ZCZR@N0^5E4<=4Y6tPd|iH;(1bh5~ zJTYkBy4u>wUY!T@=_|WF@D&a-Kjvx5)?oHU-nqo~xKsgPv7q`NAA&%Gtvjc0u-HV( zMz~7`kJQ}=3`XJzZB~7Gct+Gu0)zFZ5nJO^HWH!P&m)<|XpgXRp3&9O##|~2OZL9E zdTIU!p4*DJ{GrNC*S!^>d3PGJW1M*E*0{sOdw^95%wq)Dr+wrSE79}CU#7700bCdl z!t%PmO4U*3((vjQs!pi}t5!fN=PR&~aVDU5M?ppgherC;F@L6AG>J&H53;^0^er8$ zBsMUR9s7jv^Cx6vZ^g$e?g0$A?u4fyd1>~kq~`3a!^X6{2QP2vq{L!eeb+K`&t89o ze(7xs%or~@f^k8@;;E;At!;oH<3X33y8chcQ8`by6{y>l>Dx<7s2K8oJEm~et)fNX zA`9)KL0L%iaLzx!{eNlggTdz(Li(BJmDt)yJ}W9$1MX^F^pG)!F7N9DgZIH?rIP*B z&ml@WbIaaS%m)arJ|@Y+_Z~xr5|nL%BKM__B*Njg84I)K$)GwzXGXW}8yUmUYp1!b z8YIF0w4I4pKL;70;O3If=x_Y#ENQZ?_cP<}R_pytX)`50==UZ*US3s8umV(^hi}cJ zYpMHO?c!7Kgn|!Omr_>rx2M5Pi#m-D#Au|2O2YFYTpB3Kd||X)l82J7eQ8ecxOk0r z6yf&`I%VAS`{^H7kk~PZe#=1)CTpzp3Z8JOaGj_GR}Pt9))Jt^C8)f=iZ1(z^75uZ zuOycRz8eFH5bqUO%O{7rd!i%u-7PIr*Sy^qhYS>Hd~_2yP?IVSX2*?gQ^J#rSNzcm zbJ*VM(G8ao8kgv=v0RJ-I z)cz$Q7D1>v-eJ(&Ds$#A=+@FB3SFmVG=ARm@dkPUFy{BftfR~`SIK@QSPzm>;g?IV z^Wq-;>8F>+IS&vD_}15N+=v0h9_MLd>7#z0lpA6~ElG_bZ?6iOvnRoQdzjI4;T^#w zEYRJinD~}VBU@!sp@XscUK!6lIKB@^`;@~^k7~tWqC~#56JkVBev{}dK{jv8pOy4H zCumRbzCTLG315~Bhd1vzKG_t~vY{pZMMwc=HOp zkJtVp$^G3;$xEL*=vEqqFWz;EBIh-Oy9VAK`+A2Xaw{Fwb~W2$kPT(#KIo1w+=yq+SqrFYC8>@PN zRn*9K0CF(Y6mvQxpT85HoRE-N;0rn`r9cEVKcT|Ha4BTS;Xet@rBXoulo=?7vUz)Z zzijmK@=|5>Q49$7`VB_`Uy#AJkARaaAn;j`JKI2$e_IxbCs>t9KI||KEgbI^J+SZ1 z8w}otS(*bKq%`%7v3rCev3Gn4La035@(6nqE)^RMIV0iH-ED)#=xngA1zTp9J`QIX z*OIJeUbcEND-US+)PNaAvGev~u|;c6#vb)Bg$?dSOg@wbq4x}~aS`nPH0{_ac>bU~qSilLP&WNdL`?vKLPoeua&D-*Vh(*IAR^}SG3 z5x8!2dq)2nux>z@rP@Hurre^8m6EENb6Ev6$%dhbpzDC{NF^vDrYR0aD6Zq97AVIC_^F{5 zwj~)fYc7iH4pL@DZM|eSZ;o$c6nyU{th{qCfAGd12O$OyLbpic$zPRqD1W6FkB@4k zUGHQi;;2Rx7n}5_0$h3<*7e8if*+rYarr1+buE?dzcbsO1b0!q#zkjey=3xkIXNP} zYbBiHWaVb4ilar3{Iq&E>lIBFH6JBxMghs6WsM44I?rXUk)CdDZieZHBw*#+D(z7w z@SA-?{Q0P=39F#UBa#mC1JORTu$Nt{MqaN0dL zppPaOqT}i|Y5EfXIb^77g5tvs+iXc;E^jjSy};fOHl9H~Q8UE1vRsSF&t<}E$Ha*) zFCYI0S!|)w1Xv|Sbxp`ADJ?EPc_R5+>jNPlBj(g>moTamdn&1~;*uSEO3xN7%F zXJnuP)QEj<0OB4;4kkVmK`-0GsJ;XGA?8liJTuxoG!w!Lhb!}u0~M?<=Sp52(4U_N z`T2RAOV^k5C#^1J3A1reX5BH*GfsO~^2F68v3n)#sdBkzN z5(x)c=gH^oFSCz4xfO<>q2-HkINTClMiHb;R}=j7mC*DKw0(X_mqE#Fx*kb!iV zLg9pI#)mUqchW6h*fS${_ zw{-{J_J_&jXZ!D6T)lUJI)gb*s;robj}&w2ojssE4m9hS-{d1B+vQJ|BY)aG55ErK z!80^$Q5%)@)E|IUb%B4Q);h5_4G2Un<6kKK7V(7W1ySJ%%bP^;8H2<(3r2e3Ggm#$ z`stkEPPA%Lw)|SQf$5~)pdhLuYoYfiV>i1!LxJk5a_A1DjWZ(u=$22TTJB zN<-+*(-3u_p-Ewa!TO*K; z=`+18oQaPMws7Ar-7~2rN~G$VzH;s)Um@8w!mpe+v)4T{rP4h4Bp zS5}z}{+qI}MY@v?=ou2u^`-D+Mb@%M$lSuhf)AVWmcP`sC>~k-$C5-*Vv}`Pg#oz+ z#fwVFfHdhPyzYmvB^>DxNjI0bk)N}rMR|Lmiie|R_|}_OTcdJEc~ADTm$KF`eCXARMpl+Vq{ZoJ{x`e8sK$eA?a*{|)`*>jK8od(3 ze{nk_h&qUjU23b30j7xSY72xv3gYL789j2|S3fg-M_p_qhN8l<#oGUc$gbr5( zO7N^<0n33ef<_wiVBb66c2Nj9BP+=Suw32jaXk<_GfE4Dpl}@NFzmh+7OWv`8r&G4 zu+!fAQD<%wi2UZFup)*)!^UuWyZ)QfKXMd8aAn-l&DAfG$v?}yyi6rgW>Nu0rzp6K zz{$>F=kdX|P*avk%yNUEYpHlY-K=;f5zSi7>RX=QMcKYQ2OT%t&0&EB8+^63s8#9} zn#3pi9dx(~glkw|K_lY2?3aXQJb5qr*2d-(>UC)R%6-O{pP!l(F`6UpfV0Lk8WgGABb{A}a}+ zMZJ?khVJ;qquhamC#di% zEVaogDDGfYraly_ZV{Yg9)Z(_==V~v;oBwphd#92kzKg2%y)pS%EG5Xef3HT&p}P83knj&ZwEM_DHn7Tdx}7<1Z^ z0oenkNjZei7MQf*SkP02T@fgn`OSlWKPOrCz|-2qC;-fW?*ZE22fi@Rw~yC$WUjq> z6oQDWO66SLOW~LcstXkOM(@(rL!qr~mJa2XpL8(GAYE&D9vm)UzFJnO)bap^_0epT z*x?voKb;w~Gi6id8s}4e6%O6kZf+g3N_i?wn=O6GBD(|iBxVtEI<_6M!fS_=;}upM zK$41ei9@>K`$d@0y94fZ{MD~}7eDwPHPeM@^N*a5l5l|qfSq3sRC@tXVwm!X^%ELO zdACrU5Uef78ucbknkB`iY3c(>c=lAb9hn6#=^DxIyurwcyg-Gs1yDj^b`#khW*XO8 zUDo1eh(#CB8=;38%>*aLwc$I!mWs4Y8w4+DN<7P>TmCBVVb+>FF%*_auDRC|@!=E^ z$pt2ZqF&~J|5BkVX~S#!kFz*K*(Z%A>)*!-R4dn|S`CFh1#zMR3`9_-jM6^yRm~#N zloayG2n>Gcp>O7TylKdogaffNqbChj9$5)zL+7w4gOv5%PdCzk2Qdc~Q2y5-J@mo% zzwN;u-#VgZNj&Qk_zgPrNZZIqt7S<}neW7)T`F`ZoJRAIuoEa_LCS@F&6j!- z4F@w63=h8YBzmkr|3~Tc|GCcz>K4n1XF%-o*oEDA)Wc+^1C9s zVllP%JY1Y{o13NVMu@JVPty6mP0=END+OxVL$FTBS@wn1I0ec&ld4D6r}|RV_QA2~ z+eNHTMfl=$BfEsALe+-r%0>2N*(op$3^Va)(-d&)&=q{j^ldPs{RMRAeu`2r{?@28YJs=$6V48R$VhYMI#QI1nvMw3sI<5}GY-Qh+p1(i%erV<>b!4J!~q zm!%(y4AR1F5cI%p%DNE(dGIs+2ImU&B?7d0=I$PH4J6wiZeJcuhA+^~d;_}CpjR@i zkW{GT6Zgx>_F18#w*vg|!k7N3vmNw0kKW1{TE7}_FOwU5*-iBH^dJfZhpEd!v1yV) zBP>9N%_N4lOP`VPcL3ZRRCM|c#m?<${v8D*S8>=#piW*@mRfQke4#?b$yc9%S%$#7 zc_>glGC`c6J?WvFRQy{)*wd5mUpj8D#x8Je8wNH`Yjd1zrb9N#-TV`hZwlPMuiT?s zm$N-du=J}t#ZTt7s3u?aVOni{BYtuJy5HieN4&w2X30UV9ZkUzA`WWeG4|uc-lb@( zy;d7-)W$RTs%)wy+u|d)(x;o5kTTSrGR`nM%p|eN9=%#= z%TGyfZ8&uK-FyD4bL~mNMsQl>qq`0k*YpEr*WI4G<*mgB28NPdIqJ%8PY}hb=hp?j zMpfOuZJPOUzuzb34K}hfJ=H(h9eJDBJYwV*XB_(xQeSwETHIF=9eJL4Bgzf-c~j)Q z41fDjQRfdORHzj4dhJuBq8X1kzGk|h>lHg6<$nCS;-InPu;#a4CpeC)#I z`spha_@vP9@z~;MqwmM92Fjevq;00pH=Z&HH; zNGH;y6N(5(7m!}0N-xp`rH76XdP%~4!i>(@XP?>bbMF1_ch;Ka%2LP0oA-JC^;b^k z7;*~ezL6dvH87__#kDHwEibSbT>R?(2I}U1y1ox8*qUG;8<&d7c)xRZTeD6is(9s>@5&~J ziZFRi4Dhl5rct?G769vJdDB77G$_?XR>0>h?oLvYFJC?1GmOS1UMr;#pJT#zt-OYsi3 z_H`jY_Vdt#U2cEmN6Ecm@IO7)acyc*Ro~}C>F)NS;u)==`Kxv0^TyMwQA?=m%fh$D9(nzBiu@Zuvb!B<1GK-V&5j#!yKB+dS!}z( z2L<|ac=s<=TW(tW1Abl4??|j>Aq6sI){be73>g!`J^3xKaZ;(!V;JqO=GCh55dWaP z=NHeEg_cS!?)(~VL}}ZKhW1mX}DsQR7dStWo;u2T(GBHWkx* zRWL()>FW|FDkv_vzvcB!el}cMRQ+pw$ILA6t}#F%3sIoNf!XE{Ixu?^PF)xZbm!+@i`XAP-i{Hl(Eg2DwrZ0%wg_3kJ@20`o=B7;hQ zr>7iJN!rMHmPnY3Fp3aKwX8~;=c`E%N6$J2+MnFU{tmt0;ZV#o5f|#*DfH`VQj{<} zp_H#{qW=S!nd`-)`^G>0oUDB5UDCH}_LJGDVOmQKzU2Cs%mJ~Cu1}EqBoDWD>0_6Y za)3+Mr`Am0C;dj}RG>gDs-BW#(9HUVEDBhHsqr}L?zb^UYuK#5|k z1|8f=fG>l!LNH2DRP@6f3A{a?)8^hI-8r)T=M7T)=CvzQ0f&Ng*o{(k*Ebf}co>Koit8jId{=h_2D z04u+ycly#-**ZsF3S#)_^3doMuchbZ5uQJ%|35mP|J)kA&?od7zWQduq|U{zX+Z2K zs;Emco7PnRhOZUL${oHcStB1ANQFrV623hj9@C1JrHImD3-|th8j;wpRpp;{5)YtU z-H;0zGwI|a3k)w9C@Pgb)=fe}L%+X$Br`mhJj|V>&;cK&4|v+#^+{DI?%Mme{A?mZ zrOmV6aC6G;j!Q3tJf?(A^ChYl}282K&_^e##@SXs|4 zCD{Yq`QSsVmF4{XDZ2KBAobN{&Wh(FS}5(BtxjvFK8VW#XFFRQGdYQ>7?Dxs_hqb= zq;_}LYLSa~OLsO6tqoH))GX=Of&D6>KMZjK2?H3^6Gm5r@!Ofq%)s9QKaT76lF19- z>n=<)2;Anvi@I2Q>IJ!e5lT~e=W9^n#RD==#Y~36@@^lCfr5i30jKx&@vS?=MYHGj zs2*@~_!e?P9M=R3in<{7rTJ160ASb(?1T0*1cZ)DdHOsoTmj4KuQm;5kNWgR$ZwYQ zWc%W}vhUIcoKJom!PUGY%EQ@|h22m&s-mVlMVOlF0yrbTbUI3tfe7EAw<-0vW&MvT zcvG1$%OVDzg)#(?YdeEULT`<4ungUW%lsfIzbtsFHuPNva?{NzxGb$6oV4IAfHShDC>_#2&^m=M%mm;Xd;UexsZ_bx1GN!Lx3SoL+oR)e4gD?z zHHy!#t>N>iJs7Y3T3fy^!!e?DOs96$e=CFS#lqTVt_|AxD`uUB{{*}|yX(hu{q2Jb z5ug)e-#v-p0PFX(H&y=WQ2|1Hf8I9+z_KF>dvqI->H$HuO|z^uV0X>=*6k5nC?qE< zUL3gc_MyIRW_W@L^=FhTrG41Y2&K(aIksT4j*c4ULiUqKORdQs#@BEA^91bZhl#>P z*knGb9qt;cs4}5M3MD?Tl#c6LRbiTEN#NO|kj9S2pAU+OuGvg~@5&Cd<3ZEryFYc= zve5sA6g?P7Fom6fA57Y_y|5el2Ia2&{*_HRiI>q?OhnA{`=Z^-5WbpQBAbk?gFoM6 z!CF;&@4EOwqumtA4wmIq#NeaAGu#t#tUVuoo#@^k4MVmsO~^VITYamrn~gPj4FC@% zCwi}>aLcmMXwV)E$FlXy%F%q(#*sRiyJ>W#8F9dZ<(Avk3CU(pQ|T@Z&I0=? zm-O#rkI(3f1 z3!@KzRR~VpC(K?;r8I!S*~^zBI$WtzhBE;=^S-PxvOJ9!F6yQN;EGcy`56Plp7WF~ zHxReT?33O_iQA>Bu=;t}2~n%?3+e37DZ#%)v|r*V8S&T%{P<0rTee78jp*a9VaAQY zUCqd^G)NiQYul7Y10{Agpd1!i)ZKk=V*CawL1w23om1-u6TbJr=+JKLJ?*Uz7$MBG zjqhE=_D2M-*f*@V-C+dmYQEdTiBq?>@^%d1KRB7e+-O zW{O`cR%X{>OOS^jkl%;%XP=OkaY3wYlJ~xSFo-uR)u7MTV!lR@BE90IhhfQDQbYwH!jo5^l`hhMtg z-+nFhaO0evL*VDyfr8`+suXA>)n2teFsL2J$dpiu;`Toys*6l8Yko30yq3&E&IK6j z!)liGMituu>r#t(?~~$d-wf24XUNkzlmUJ#4zc2%?nZ5M*=iaZBW5+KZB?=0 zw&Lt1F~r7A(lf_j3Mm}6rrUmtcJOllmR4 zr)>_#9)_@Cs%M%6xc$qn>tm2pJp%Z*!R%#&x_?B+-v3Z^3;>y7I?1>F*M1-4jCPd{OBi$$7b+T>EcM zXU_kg#3h-!OdT!bsnDq1t0<^NT1^Qt7Zft*)AV_io3?iwFbbiNZL)O>ge$nAUBGB* zRE_A=rxZ%Lr)pF+jd#R-D?BLmDGgels9Du;$w>MQ^U$=@h0^m>hyS@KR`};du}nns zEuXtCAyY5(!^FdeIP0BRJvcW!-S^vI(WJoaPF)F4X|RF*c<1ZaME)zbFTu_2b4IT^GEV!Oso#li!->^T{vQ*v0ikUj@A zug7*@ibV!NT`|>3OOq6c=Mo;hsW=~-Z$x>CQqHgEAO{lY#q9i=Azj-VENwnlzRQZm zd&k!|3`mw4Yb`W=Ds?>eEYL!S@8^^pkdg;;Z4rpQF!X0s?OXROBvBr9+#yE?!|(=I zca7|#kuBIw`dFC#a&%-yAU|1`zVjpkAZIvO0w^9(9;0FE(R+dn_4fdcdf0nKFW)hL z8SnciKY(N;%9;9K(g+hknq6i{90~c&NQ|6}CWJol((nI?McDrlDU+tZ;gGutTiN|w zn->w2fQ-GcfMT3gNY)08YMaYk{sd_{E;yc(_02njwENJf7OD9#;`Lkm>a%K-b1S{b z{U*D1zEX!a{B+AWM0o;;z4oW*_1SSbkzMD*o>^MIs_$!1{4{iAD0FuG5v_K` z2{_BaL9IZ(+scyU<&C*+0hr68)`+gN2n)vUQmkG@O0pSI zH=HK}vq}hNMqR+WKd5-}*kuq zg9Ferii{nG0`KsY_$#e6QhgqI?#p_NcskfLO?}ozxS{(JhhM{amZkpIgoK|kfD8(N zb{D9QWoXojugKEcnb@)d?U-d!o#V|ptmPEhL5%;acb*|rpHZ7J>%)pNRq2k`9uHNg zB-|c%%eKE#<6JYHh(3JcQ66K_uAQ~|TC-yB zI)j~Sm-NsC$+~ClJox)BG6-BH1m$=+#B<5a^T2ZrN?Q<$L#(D+r~}{PstvSKKmPsWFG3Y%y_}%Ey{>q9e6n zd zCRooPDy6q-Wzy~W&m)GU<(CAJ9vz;dqAZ6Q$mm1NJDnAi)$=yhQ|NrIXy8zh7&9c6 zZ;b66-|sxCH920K_TRUCIjKt`<`qjc2O24-Oj>J!My@Fm|dD8Xx^xGTZYjbtORM8SsR}HBYJ(H57Trs6*cLr4f z&RpV(%K~b+|B*VfF#}rDD3b60>;#Z>&gFxCIbhPV;OL~L)pUefl4`Gd9Juy$bK`RoIesBX{iMTs8O z6I*F>NgnD9OiU{=l_2neVzDiLY`2mLdZ=%(R!?z*7TemBcfs#EWFGJy@me@UzA z?BS^dVUs|qoeVuVku$lp^lr%Ijz%yvzgnIpedKA&#o|7G;UU8-m)X#CNt0A zICv0pJMErTSckmklIfttX{Wdrq|7PfMDg|a>bzU`?FBWVBI{T38VkCUIoV2LFhk`z z_LL9v7ksI#k5DHSr=`(}*6vDDEQ@J?!{3-+x&BUc#ZjO-`Rn0K1o^$xEf&jTL+o@0 znqzDGL(W|l<^%86lc4(zT}c^5xFJrgok=a&?yeu=+UKO8`L?QeRZGm9+U&LlbU3TA zH#g2Sm(b;`EK?9-Q@?bi*HS8ldvewE%IbWvL6MWC%TVR`z!ztMq^)3+*T5M!&*=Mk z8;on8f!pHeHZUp}3wZod$^^BQV-iJIHSdcyL2R4sY?O!9-KCrdjI;wBF~6tL{+Xt% zeI>GV)jX1W?mMOKXLg_>Pq8+Io8K+^nNLOEtniNU2!ZeEu)B1!9E?3BN~W+i4YIwtoKWH-J7C2~sXcI0g12>7 zO37_{>1E?=o#RBl3EYBwV!u&$@=08PO2}qw0=_XrKdBDQL&M22@%v-_ z*xepKvM460cpVL^@+|4yVy!kF{Q{z$$02Ea6C*VqZW42pCUlBvMKLPKoO?2@-pqa+)lH>9g zsQ+90bt(!gS+~f)_{{M)R2@_wOq+BD&-#CigDb2AB}yEJdheGQFWxvvIJTlW*l*aG zpqrCLdl9p2B9gB-`aj14g=Y}+JuG~eRWrx^$TE##+xCj=yM2+sk0PLi4!6JJ@!8`2 ztWNd%Jv24T;q#2I2Dq(L?GeBO!s+mhfrsHnO(Zd z(F7Cej1Er7UVz=U#GJ#nUr~%H%$ymdfWYYLD!A)Hdg8XV%hJP99cCvoy`b;Fap-oP zeA^D_bJt(g?%vp|RN-InM=xq(MwVH342i7+}v$cwZ9S8EI zX9D7?`PKg(@+alsrcD!d8Nlpn&UPhMDz5dJCX^$w7DFpBWPiia)|AIl|$W3d488xc1}#rlKmR-+oP>rG}}a6`Sfj{yIU4Ca#pPQ zuq$)7_umdZ>D2L($kKjhO?r&8>hLMl%CD zPKz~rOj!%$L+~>uGnFKVJ|%QTKJMY(_$mVI&|&TdY>TeOY~TO<(v@^-cc6zRE_mN= z=$!@c5fEWyL4@(xm1DU|(7l$FiO#>TkKe6cU0JTA>)zeUh|c#|v0&OrA%>HD1$^c$=IFs!p$G|57RG2#{cuL>PHn5j<1>iQrC>_1_@4oBN#q{|FoghPq*AvKEK9 z)WP?D3DQ>+;o*jVL&;segWMsBf@~x3DODRQt6W2R&U&MZARbtk&yFAn+`m)La7oU! zmDs%leATp6e?&HZO=gvQ^`L0SajIKlCt)1}b5AXTCN$l0)7-d2l*f}-mRbc$7>5xQ zn3|y%1q}4=#5qym**;}oqBMHSnCHcV8S>c5Mpv064&mb)n-MuR+adXMV@gY}Zq$+p z*Pdw`&coCc6Tbeji5nYI*#e5F_o+Z5fvhCtmy@s1$49_C37{DFwXBdANEi)VOnw~b zbXtbe!WckHa$?g|>O-xL>1hmhG(Kted-*$ql>PpIF4wa!KpWxz03qLSwnOpi8z47O z_4WBiE?=f^M&gKcpw%PUp3ve|pEyQ^wNIaJyL>fb9>rHt;zx$6KVVzk4&UIu7#%Lp zNmo|km{uRT)P1x#<$`@te=6SCq!UxfdIEw|7|MEA=bK_zng&i=klu= zjL)fy*m&ukW&1YE(r<$=*Tw^^-8U{i^-S}3yba);V1Po%0HJZqy|80LB%QSp6302! zx5F~3lE9r%w37Q}Cua2O=uRjD6x0_msU?t;39F6^?C%uBeb2vmF`Mb>byhdkG~Qnx z;qwPdPhyvf?xGM~jcIIVOI;Gy6@~AWrbGn+XgTcJvrW?zaAM9_uL@gtn#*Ax#P@P2 z4Z=u&8^n}yT0z#rTIyIXEr0fl*~}2#UjEE-`S#))ggF)I#6PMG*ne+5WP_N*kWZVE zWQA&vAO99nVlntSyJpRIu%y^UU=dggkCRkxqM-LYC+R#>K#T0Y*r(FoZm_+M>#%k^ zAZU5KE?Mj%%ssI4iqNYRxN_7|V~%d&dpIz3Oq7A9)#4U)N?G%Sy2R7I4$mB|7pK?I zXzI?-<$2ZLvwer8j2V@>W4 zFx^SrGB&g)7B^vaY{<78;aQ&TBG1H_wAK#e%1E$NmL1(YDtFUd`W`et00kRb2!&Jq z&_y*b^}@4Sp%6usH$Ax(@bx~JZ5?7hy!chwS|@x&W{xMwDa>A$GL?BgO;?c&hFCaZ zrTL zzAO#-436V^BUfcQjHIpYyxzxD(_8J1X zfN5pOl6GCxe_u^ueKY+}F@?@Idp};)D9jy8jlKs=b7bHYE}!JuXi+um%-bV%)Nh_A zUSj>|daFDDCzgb}h-Mm~&aT0&SVtQmM)Fs7tkb$y^byk!$G^hr9IwbwDAqX|v6;Hp zPor#*tMx9sNHshkW_2Dk+}x#O@8?LK?SdAq+wJ>C8yGP@fUn%}5)~G{3#ylgK*>rM zjPc)=jqEwrZb0E)@2R@3+b1Mh-}|CN-1| zx3j$MF(|SSCGc7Tr{!JYZ?>)nSOp^)jC>Zv@XqK_o#!ueLtnpIG~JTvSwTA@PA7aA zFZ6)!#E)U$uBXz~K8KFJ5Iq{}me!zi6H(~zF;>Uu@LNlRV9vYOi9S{Oo%*KZ+|zNs ziF!zHk{{bdD*x(B9813IfXw{~qcxU9=<^{K;Y0pae(UGBr5*Zs!cCBTaq7PGG($Jn zs@oyT8Gq5<>zo?ZJn0Lmc+@mzHm;*r0N8N;4;Sxj6H~N-RV%@#+LCG8s0+*~?-JkN z?WGVjGEz|V;S>50+{k%ejmptNP-hD0+yTZ{6h7xOR7m7Aw8USfx{JE(wBf6|C=I&X znp0f+X0U1YXS#>?=a=SS5Z1u`mla3Izt-G-MNFk2@<%yrHY1+N8=qDHvZ#<_s+1Ny66HA==_he8k@n19!Vqe zs$KO7H(7|`1c4kdY6GUBUM_PN4XC8GuCrJW<+bkjm5Rdp_mPN0Vgmhp4Zpxu(7aWW1N9s^Q?8)sb6dM5E058Z^l2E!d1_0W1$F7#cUcq>itW_ zazLl#bXGyp>{NiB=|$Fpz{D!ku=TqF?paFi<{X@kg%Kzjg6a;ENlj^=lVfYXcAST1 zNlwH6*6)-@Sk*JoQ)WRT7Tdv%f^*3oTerzXU3=L?2dmBq0-1`k;LSJuE{zT?wrt>J z12wqiahZF@&F+7|r#i~AJyihRpB2c6U!IXXf2y7jjH*6^@t^cJwc4OxW}GkpR&{(c zvppk!L|)UbD*>)cgD?KC2!NR6`7EU(;ku&MIQ{mg@1QRM)X}BYK1pQ2a)khNn_wn( z3LXC<9fBF&*Rzq`xKb-|ylB;SaKY+MoyfP<(sD*`PsZnUoD~G|68M3WWgelIsp~5Rv&KStNsiME! z;nH{B!hCQ}`Ke-qpO0{2k^^<9h9#%-ixUDLR>7+}??LvfqefjFqPyYE@cbF!c%{J(%* z{gVPO^!m429;a_#uu0;|`C2n20p3N(Zcb~opYk!C+dtKM{)tffmA89=K-M6SKQ~BPVxI5g#CKw@yT<+z0+|JCxX8$ch#FhP| z1VhQIU{^B3g%(h~iyJ;k^mfWO3+59F>5DX+Nw+axZhS>Id2dRSwD8_Ob^O zh@ixPDT2=MV&AQ+s<&%3`9C8i+>5UZb(;^r>8S z{$-XBrvY`OAFIPE{-3l;@Z=9k^LywYBaw>_rrDxpDy|sYmG{V@2mEJ}rRojl)@cN$ zGG9RV+1HDZ&D<_oa%!#$p#RL%L}4GKrKMGJ->2A?;BpGgpcJALRWOV#6uSO7m?JnR ztNnIoM=m-5?fpXwpm6U}v~Hu2kpHA1YPVxpQ^;dFtvOGxvJDV@+Kajjdb5VkZ~e)V zxQv?CDZNiyDJ+V4m1UfX(}R{5C@TgY&FM{G63;=$jh?=~zzT<|eyw;GbdH z8Odqo=nZNUwZ`gSKAh?m0^Y4M)QeQD4;^iw-z7dByiFUJJCRkGLOCTnR9}=_xL;yRK(CO;S~_BRWpaDO0wGU zLxCe86W6Ue5ou}oc|P5{1gXgLx4eAy{UvnMr5Q-iYGCIh%X;Y0|3837e*&-O2|pGN zZQ=OKvBv^|!f3q%3~eipFy6qSvxuOs$mh>NqDFZk#sA%KOBZ9x`3tG1KTN@xg|^aQ z_1(TQqS*c$kx`TedYrfbrNf!);P2?s+K(cJz{N2Ozj^GIrp7Ccs_l%^PUJ6;j%UK- zU&#EwfRlv-pYsx%|`s zQ63OQ07q^|vp7NXRf}4^5a4|MVF3 z72pEfJEHJFa2Mzc_$%c)jaM1kh^Ytm@Tx`JxK=aF{Ys>UhFz@52zf5pqw&6DE@Q$4 zpypO_zGgX=VF5<&ozUOy^4T89!4jCFK;Y~|m}S*pn#$2&xP)IXsrcpn**uzP9Qb$z z0YMah7M zz#BPgzlUv1%mKA@i}m3QgcqP0rR{kVR2~3%cR)?wV*SqmcR$i4c07MX z#*YVj-XtRhkL3u`O$TS>i)AUH^2y+Ol=)XoAt5Bkv<(XiyDo{^=3wL_B4h6x(huKH zvrtAjC=Z*zxL>T+AwefNqd0U+;7^cWSkMIHNvRi<>bB>$hZ)RXdywmk$xcKaH-sT` zvLf)q^C;|QhC){~emNkGbIz#1ct#qqhb>3$4(50`l~)G*rB{If#ln8~F!_(_;cpS* zEs&#e2T(xyAIZ)iqN|8!!T zGI+1a7X2h|aMTp2V?l*poG|V6Pq}Lne(NrkJolZ27$2QoT93OX8o`r_q3)DlWEX}= zU(=H!(2qi=t}<^d7~wiJ@P^Nb;fyK6X*wuggA&)!VbMR$c&@!@J6GV9eI3p;K&)E# ztN$K#u|7Jc(=e6~e5t{|R^_q*H@I?)hM|WnD3sLdVA~X1R)hvyR7=ve$MxN0JvZVyVr)}QKF_8Y8r-E7x%<3}M3{Ebb=YdnO_`mUTH2(9=FM$P+N z0c!N@GBgl)%xsEEYMw-KtanWSJ{4+IyuiuvHepk%McGIxGyVQ9*9Uiuk_Tgo|M4y| zW$}9na2kurAmsTL#`ChR>Ec%x8j9~%pWC9&5QpJ9dUdam8>yCyD6kX;WQ#X3Lh-vs z!SsTxqc1F?h1KElKm6xzJS73fIS*<=t%!d8G}lZBukrC}gww?0crBvXVu)Y2*fcCC z`;EM2fVPt3`#uFmUyalwxs}_VadIf9xp1gQM_PZvl@D!Gea8F>ye0QC3<}X{*gmmd zq+kZv8(pQ65sXciH(A_VXu1|FiR&;5CjBgHDx{szAdZ`Pq|wpBqUE_5r^3{L47$Hu z?5klCx-Jw-3Bw1gC5Q{YBxkzt&22Mu5my_YUHj8!^{zkR4G}FB{Q8+55!urmy&)&F zQ+Xe~Pbp?==cYa=GA_TSJi>ncj?TrESDUwkQ?&Z%9hn?&GxeS)fOa}k)B}*S*TK&y z&5sRqO*bS*N2@E>bTm+?Q9F{fg?k10sNTtHno#{s%@9ud7Up@CJ+EHTvtx){H!uSe zX=A5~HVKvtdXlu>t|Q15C5Lb8j={cXV~z02R_umg5D^AxhULP?{=7b!gd=pdVL(Ie zmv^U*c$Sywyp6~*u8$nUp@f;N?ke| z4W*irvyatjk8lUocS7okRGpLxiRJfgRdJEmn+2!nM6}Q&y2nS@2Lj|1H48JTRXlb- zTM0WY52H#hg`2-$6n~d=HKLa5RpWzVN;S%$plLFtOP6VF=QH~61-H8g3-Z}6Il zDyB_d&vVl(SkrL|d=CqkVu@QI4Z}5m{}A8|HdUX(kehx$JUX`GDXo4lHT~R z@vfdkY_?=gTRu>gkMTAR)ZB|I8dfLb51&%~jqi>lheiv%7L+}JeL1z$usqVMA{Y`- zkg3v>9=;ctZrge9*_KvchNx%9J{WxH%$#%rRZjte! zqUhh>jGvb##vZ&ya7E4>15S!Bj-PtVR2C;@og^%4npoCzhPFw&kDx7IA0vP=tZf!~ zONHQX=BAai@8!zM!)_`~$Q#(g3wy3}zjYU`?cK#pN3@+WVT__VHL}R&HKKd1W?kz> zKmk|DZ%+N1aAhC(?vgx}&fWlwMKID}dXpPk18;H^R7W{Y#$9_XOU7{hO2yWE;+#ql zhVEy|4VU*&rc)E<%lk@9&-%1%-+GXiDkU|`bDP8nG&Hy@CxWtU=Ie>WqN zKfv>r_I%*oj7CLvqvb()B`CXKt46n^V{TA=Hq6p)!< zfk;<4uF?)rq9^-){P4+Cgm*)HujOY{{`n^U`9sX-qj%%1s>lUd|HRe{q~1+|r%@jl z<-Pi>)H`P|QDl5!#cEVQXTHAYlHg1A0KvU1WO$IES**WbZ~k7Bs3#So7g@_cn~VrI zB{kRzVl10%#bJ3sLl<_z-vW+nv&m0CnSEe`cUhCCkk->k@&-j;m1#s z`Gc$ThN-OQga|mvFF8m&!W`ry`&gBhu1wP4j=ahn75|WG5zgDII%D|ilmWI!Opsqo zPnXk9V~$ndR&CeZv+W~gVBC!x9FKY5ifcG>ScL8NHm^lG_ac>f7m$wak1}8vj4~)()2g~M(Kki^h$uRT{zk-%;*I8oA^Ge3S9Ze%aGQ^J zr_zR9KL%?EG)E%$*FKtN-<4JdzHm+ZS0)y}SVZrdttSZg8vKmFR|&p%fhmrUenf(Q z5zJml5DK-kZbc40sle}9xA=D4<$zq8L{SCqlt_nLn`xI*4W_cD-1o8@73+DMxVnJH zb=mbfRAlJN9fsQukL5r7aGw?vXSKUcT1av6=%~K1qRd_nukvH zb-R}^L~}ze_bGk2Yu#y(Sdq{>y!?STsH`prYSwGMp!sk5<|&c#5fmOX ztbY5M_B5=Rc`at_lQt#zUgSOoh|n+g7Qy;E^0@ea{?x|8gknorqva1r**XEiWbz#VWN(*gW3ts8)$9rOmsrrcuLzr2zpkMem4lK5|Z*9BR$c#Cg0PKKWh z(7ceI3dOa-$j}*gv8gsHdkk9AhL1wtGrbGXQ@Tn2=y%niJMow3aZO&D0UG9%>-RL3 z2U<0PQ?QNNo_m_-jkpnl%!UHM{=_p_LQ=L+F(2}vmK{zK{G*P);Y$cnkL$?)tq`Sn z6r!vnh~bj5l*ghSl&F+74Ch~6Ig+El4cYwsmIbO8r=l8=TTD$SC=v?Qrg@f?$JmxH z9U13`+}BE8CN*lT1NVn>+C^I(Y7NOI4>E|J9cIugJP(hxTBl7V$-m3 zFy7`!R7_wx_JT?1pjL3x?r@=zQGcdJZ@C51J*4r&pHUVxi=p6zM;R@B`gy=!jI~_=6h1)j+(`1pegS=lR`aJ4{STRWiuKXi*H5JL#R}G`2&mT<&5sq zAZX|4S_1O-`WbkbGIIBt65jF9Eu|$H2D3mR**YRzwhF50H|*Y`Y(q4nq3P#uGx2m8 z1%K#&w)~pibUpnEe-P`bJz*Fwa>Oi1QZQ&qldL&LMdES2554HK`(Vl{6r`7~+t6+N zBU#*$0EhoxXf9j)zlgLy{-{F&Bv12UH(xJOzTSzC-f8!;wF@VHC*{D^Ftc!1y`v-7CJiyIw6Ue3UXoI!FbA1aH zsB8o&Cu!7mg~>Nng45p@Q$YDnvhe->#P#N;QB%15=VsWR84uJEotl?joKLT_G*@y? z%*{j4ZswC}-2jh)k*@!bqXynnFrj6XTdMmPujl6<*`GUlPe7r*{vy(Unr7gW@y38$oJ zh<3jZo+4R&QPXC(L;mjC&~?6sr#b@nr5AX0k$HsIw; zk^mRyl*@hcCxul_U!GI$6<7%?Ru29wFmA}rqO5AGqGA^QNkB_gnUIfLc|x?Z@&{GN z6uwY;E48s-j!cNnxfIMk$IGBdKh@B*`$j3ku8H3MN^zg8S&`jZsH21nSPeY|DpkY)OF=( zY$Qff20WwafWgl*DpRFDBt|p{2F;!!VS0|>RA1DiVz&nypas)gv&mA1pl2l*G@qRA z6A(18G)oYM+4?J~lXMI(D`R5EO@XZgl)AvQxa7`0N#3nU_~zsF^fxS8O4q|5y`!en zQjN+II;e*mPQn5v8{{A2uP$h*q6g>&In)#A*%X5P6Du9Mr_+=1KTTfm2of$1S?=+F z>*Cxzx;XKmb27(o<=KEhM8gVvf#;5@xCF zpd>%3qfwU*;w*fY=jA?wmS^*mJ|#l?byqeZ+2(B*>n7{nXe7~R0YuYdvNTl1$W@gV z7#E9XnauTPSzH&FU%o_=Gmhu^8&1pl6etEt*T zkQeDnZ}Ls=RG>J$a9Vx@Zt7FkBa*_93Ug$Q`oPf8!)8{>xA2Nfuu0(!dq{+xV4n2) zJx}+jdG!_9u&>M0yXHn%)y(j{l6M#G$9|kG2$dOao71x^2k6+K#n)uS+N+{F?f%Yg9p-`7}TBZkwLhaZesv%c2 zXf3z2l!3_p?ce!AEST9b=`h2DAkQs9b+TIzu7}W0b3q|(`Q?#|8IgH`*U>0(+o|p= zVU)jxMbbPW76|1zjpO}YaPiD1I0KFfE|_wYAh9untG zL01TLL%=|*!eJ@aTa6mq^s_BA1TXI${fO(Sn&q~osVY)|{0%H@%nkh9lAqsCZ=Soq zEoL$Fpw98DhF{|gkDY|1HLWf5Mw8@4%ZmmGoZ7m@Sk;57^{>gMqI(U@iRW$9Xj4x8 zi{NccbZnCx$xY_G@em zn;wYgTTl^GqOZIUVirw<9|f{YuW~vTi~H-_dr$cGc*pl| zm3n1E`lU0dh>g>|f`&FWiv*fw4xeAc$9rhc54!jbn+K_xSE-VgnNQd>{P^zwQ!aRP zfw(z@1toKBcZEh@O{ljsHHbeP|3RiHSxWWMRpK7WXVpgeyYthq2>+RnZdQR&h@!r` z#vROZE86#~yGRSYvb!>kRayjUvDb4gdgbX7xtHYXd}a3M(~e5}zBfwyrL?)Pgq4ER z*k!LYb)TbibdcYDM0H2$4T$@}Jj^3k_RWm?xGp!QB5n5z`u5BtqAS2xn7zgI(!GyR zA0nCq)Ftj1s$St1AOjFiBqg6##H;foz z^p=PzVs0>zM4l;g8ZR;7E$OFvYLZ{trCYeaig@UhqX|yiy}+F5pKFbO498!UCMJ)0 zPfs);1rDalS}Ha*RhrJnThd6a7O3SE?wdcweKjMJCt^XYKX_K|fvj5U@!k$eBbT~l z-5p9BD!W`V>S<=?$I>SznOog_H~PU>jqK;aQ}WSzOiiLUtBw!d)#wWU_y82T)PzFU z6s&u}@yvbI2%`eV2KBI1{ty+E&u=P_O^xVD9_V7QQp6i71NUqDnQ0c9o({^Jv?mPv zL^aIycCQ&!aM*IawWpWEd)2Gxh82yQ`DeupO{-rHr+a1ReWPVO3rbL3+gd5 zjr;?zCUCA=lGPnbxnS3kj?%kd^B!s z=j(<5I?p0^@4#V(vDVK6yYTAy!OD(dV`gt5){e<2YMDEkd}Z|Q_?+ax^}~} zYU4XJtykcJyq}Y$(YNJ>QNtj$gH|%naksswp=oat0+D_C3?o5Krzo6}|`h zn_3lPjzjuF=kF&g>2}Tc8Z=I{paL}>ly~&0H0!%9r#^if?v6UkaNfEGXGO*$cvTy} z6{vKhc!nw{10y!>Dpu1SI^V1-Yz-N>$WP6o+TrBpdikXXM7ri+XU8mi3H`pL!9VSw zjY09CdI#@k=1)Pjg zj!$k`z1^4Y2F)z;(PPI!u9SmzZwpw_oMI}_31Q=ii1@2Z_=h{-P>Z-v7MOy+~DZnTWp;nw?i}n}iQ1?N){buOQY0F{&JAu9k#|Ez{`e zIo)(RxkrTgl-x31kOm75pynK~vFJ^8VRY`lTsX=<0HYkR`E=pGbHV#$CM=aQ{XA+V%Z1-pb7Ak<=jURr2LZljWj07CZjcnw^`=J&r>c z^12~-n_|n){||BR84c&&_6>(fNCZKYs0k7+i0C~{Z&63Ii5^55WppA|Dkd`BvxnPbx zofZtzyN{6nhqLX!TK<1A+JD|aRwTf7Hsr6=h4#Drpih)>!?q`$s|29=HBkQ3ejc+A z+x>d8qBbf&wWLn8cBT7lX2iID7_Z0N0!jPw#O0%Dp$?9>S&`OC4sOo}Z)X5`bf2I@S^H0e(R`)(CF7^7tr#^e~Ujj1kRs7Y2BWza;=4T?M1x%^TfP z8_-ORxk7tI-;e`!&>iZ2Huv=(BmfCp!Ve!wdaRKv=Xm`6EM7dh=;CfV$~@~=0xUxt zWvSPs&(fi93LPZuOLiN^Up2WeEU5kZhV1Ra&H7DMm-iVKX$rcv>xs2V&>2h02iOuz z-8h7wA2EnYsmMzbAI|VfLf_CSvIf{iAQdT7W_)LsxH;fOP;@1zW`EQthkFk?);HCG zry&1j5l8L3YlxXW5B6Lru-W&j)(iF+sIwWS=cjQ#T$>QNYLit8+zO?iz~w(E-=D)! z$ES3@5#_4-D=a?W^4f<%rEg{mt)ww+tpv5zqT_|1#5(FuNqr~*k; zM$%B_M~`Pj#?CXY@Yb%TaPDJI$?eaVk4gu?$4x(8`4Jg6vid>Msg7TUm0skQZ;hsQ z(9mVZ!sVtm$9cE7I6)u6Nt#r)id_XFi%Ofg(bi-24USFso!~ozMdcpIR*Pxut{1pY zWoXlS-p>O`5ATDbc?`8$+A+Uh=4H~$c+7D6vHpspD9mgGHJxM}|CjvYf1JU()Lb;q zGj3Z}6PI%~?h!+!0=999sQ$dn*f!&ok*4lQ$PbCU0txv}KLrgEddbcG*JCyAle>P` z^9tO)Q%g%7pRa>R<-2ndGZqNspz&kRYT-R+N8sa|oKh13`@OYZpFSE^&%V7c)W77AV&yJ@I%tP9<)S>X|8e+#}qeQ0mv7byV!KD!+2mWPoKImUxF`vdR ztxWFC8}%`;U2LN@5(VbY*90Jmg~}Qy{Xb^>Fo{3BAUf1jbkpnKHDANuwBW%df4)O1 z7=Q2r>ui?Nft1R(CwExhL6hU<0}!u=G}Y83*773b5iu`R%XhTi;1*(!#h+3Vr`_f# zm@J6#GlOtgFtsX%Woudt(qm489NSNL`qB>v88LN*mVCv&Yw za@%OS;8@F(ttOu|&*^zPjdIgSyHi=IpP%dGHyVeakX@WjZmG|<57)KEP}H!O;Wpql z`dX}%oA$OSZD+H#==A>0-S1mRCKy=*i`rbq(q{2-c~yO$Ic>RniV79g$DcRvE3Mf- zA^CJi4dF9j6NTUBj2rGJyXuH_X3BvQOD%kE{y}WM8El~$dBU zu(eSs*FYL-7)AH{?;WguuOm)OLNz-b!2z;cX`WlXwf4bf^czVb2^zBVzfMgTP5mgs zIx>9|zP|Fn(`6Jkb1ET;S^cP_gSk#Nk~yzXq;`!?S)RDT0jVvz@z}BvySK46%Z5Q( zPA4|)4er15X_?lUKA+3B4<3hQx^G4kcd!KH_hr|`Y0B*T8Yj!lVV8~2SB));F;%fq z>J9xxQB?EvnBj-p0dme5b;y#4So_Ds)26Gc&y9NoW)qkE*KXUG+-yv&o=6u1)1;4@ z@RGSw>>!M`!--GG(%y-XPlJ}4j`4Oyi}SghK(~8y?%QV5l-Sf7{PiK;l-m#O=|nEG zrzx^cCTc$_OfK~rIX5eX3D__{q;Za?c7pWRH}9@jjJ}*lvEO1;z{^cghMqP|zyr=N zI->h_Z=wU7)|+cpnr-wrc^%rc=*kW++8b5dDUdB1I;*J(QB~HMI>DW3 zQh^o6gY*4}LdGlWn@uPFy9=si1-ApHOFYtC76x$W2(aIwdNF+B2p8lSdF-J!0!{Wcs|uR0X#aO&uVe2+(AWBYmn z=w`V^8O#Nsrj!0td=O1hY6KbvIN zxOP_WDZ4LrCdJ}b;;)SQ82nNiynSSBrr5fkK!@jNH*vSF$`xZpX6WOIyj@RkifEI9 zroG8jTVhzR&^#k+g(cF8tx05Ts^XL9`W`%;TIvm`7e0+a99)ON%!YHuSoizo7UlMS z<56>$k2+<`PT6ME77SX6Ss1?L+*>Y#@4Ti`aEWy+Ijk)#@5_7i_4ZTYmjz0ZjQ4>r z8JxwT+7nIEXFTh*x7U1j`;5x^GDA_7`eUX(R~0q7#E;!pm}|5uKfUEe_wY>X8amBX zTi})?tv52@2#nJ}zx#inaRYe>-6@^ty;^%c+6rtk5-m{8^iosZ#~74~5f z`4G>w+0DT5LFSBclR}K+Np28nUXpMf>a4->2GqR6I__2J^99~D|9yZ?0Dh#`!8|eIF7b9OhE85{dTd(O2;}hY z0TIJx7MP5_f&YYXK<4GhV4#kYjM6LBzUAz* zqXfgf1&JNPJ>|jc*sr!(8qyFC1#z(JtT@3;xjUbAcZD;k zG$IR5!?ijxy}AUz?O$}salCRCd)<-2YJ{aMGAC{4>i!X-OaCQLd31rK-5C4yJbi$W zA4+Jh_$3QMG+$H(kN4O;VN%?OJkQ)*0wI+;stVL`qr933Hn^d<``tc6pVpFnFf?Qr zDjFGF@H+U*&1apZ@b!gp-=V_v;;s-k?Drn;+F5fQ^-k3fYSMW9Ds$;WR-c76$e0X8 zzQo73Md$2Mh`=D`#He%c9GXGmgGTluXKITGjZ_=LZ|MDP4ANILMZ`W~64+!*k%A8# zD|?^USgt4p6}y!%iQw8=3QOQiI!1L%M=}ejH>!|{+j&f^4d_Xo-h*3=VmB>U(%n@K zHk&I`h90P1F|JmBJ@^gcd%AtVjI0H43t()AbZn6H<{Ul-roz0`ES3wzDRgcM`m}h3cEb7~M4roLt)UPs+jM!RC!7@iIwNLuwCv5qXkqA?h zk6VcAnTyM;g7Yu^{feS8*sDUgKmIY$uQ6%W&M!+XLuw}MDq-st`};=&9hnSix9*%AhIV%_6qO|~4`8gMaR>W2 z86D`jVt6|_h`zyR>-Q3cp!p(~dV~n*+~jn5jQ3kQ7Tn7cY|Js$+w2+OtZ*Hs)P?8R z?sutgZN(FhdEV3yGZdI=D)eg*-Fh+5*svNCZqyh(2_SC ztz}$$upGwd)GV|`{z>Q^DYRzg$@5~}gXgRrmmDj0j{`r4pVUf<#t5>UE)u-h9F^LR zh>|@Mc5L3-9$xMa<$aI{mC@+{04QzLUA1lb=Kbvx<(8Vk&~ABPK3ApBsHOs(Aj(c< zQVWb3$m3L8v*)I99>Ms0{77@f*l_itQJPI9c+XN+o=uOmaB9RRP3IbFl+D@ME$~rM zqT4~Hni3Py_8MXrG&s2(ap{xySMU9yNEm{LoJ!q6A@6Rxx|+40Op|>3eG?$vJXQRM zb3j>r()_lOp%&q)dC$4$^#n5)3N6FE+J+=wTeRt`O-3Lh7!%`+)RxV)8GfxBlHfVU z#PNm?-Eo4N?l`I_NxEEY=+|`E;xi)!4YhKv+X8(#rKCvnbmK-qY!rEe6!yj9FCj%> z@-sl)lHBU$UD5NJU<@fBA%^r*-FOvLD79Tmdo5myA(DM^Jg4w=`%I8$R|sdcB}uJ@ zWV3e%&*46iJ|u`e@`a_8O>vr%O{R=TZw-l@%8-5BCP~c(E5)yq6f4#$q!)heRbqKo zxfO=xgek@&e!ImTF+tZ>EjFDHwJ&T0F@lgy`%amNMArIXn~mOE(3ZOpmX2ivR3XR> zuqFXRTaZa`q0{!mOz}s|LitAnicGhHn7-Gh=>|F#WP%7}CefMxVPW%Kihod!Bv`-8@haIm$lW!#UueUj z!enRo+h((rlakoRYgbqMrIDhxPzJgAq*ikPZPyZt2V06AjXQ!72|G*^+`KGbm5^QV zm)tV$`H=t8dHs!k|M|k5{RIdJE?qJ8k9T*ytH1lBg+gferXsD26Umf$WyC^Zx4^9%rg4-pHYb~=t^*9b) zku4|{Xg_g72An_h4hBiN@HGv`{E(5HNDgS?Dy=(97+z%AQtiLdgO1vJyJ@)Ll+20& zNhg2NJ@}9jc#?7f0^AB?zb^&QV12BCqjQ~@#kdB1sQn_EfTDWO+1}xkbE*73Z8CO& zu8tIqyqda|)Mn|H;Pb1NUqS_}3V7r`qiIHUfn@pRU+)*@@I~9q`>)nDW;`gM^szLo zE&AX(7jGitAu6Z%Fu6R;OF#a5qQ z^g#K*o(bG*lNLtb)#;17`95I9R;ceId=hKNvbzTA^DUVm*OL>vW2QHt9A@@akQH2|Os66_vY;D{wNP4SfiT&1B^Z&hB0IbN9 zrvTRECP+J_u&*0ioVJ?7B^d)=8}OEfv}@?gTXYOB>6_+_)5sHyZF$VlZSspW>7PC{ zacm+1-TWR`*?{(Y7>OIQ#l2W7|HQyGL))O+;=URk5K4TahkX6J(Kf!_f)=)Tp2C>tqdQzjEVVP=kgu>N)8&JP z$ECm$g|u7R`9Zs)c%|%^r ziqbLGqlm=&=+ZXiaggth9hK-qxOmO(r}PSwF8&wex*2Zk6A(0>B2Q9EamKrqrofcP z+t8;M*&#CliIwM-#df`KM8gk_A>!+7rGXQYms=VhCE5Zn_p}(ezQRs(|}w= zT>T=KAD=t{=vgz!KnVbK@GD|qf3_{%T=@jq{AmEQH6PLQFPS&&KE4hk?}v`1Fha)* zX?hj``AV+*>va^Bvn??{3(pFY{JG8`^T0Ct_Ml)vpSZh~*3pC#}0mdlnGPIj`9;aKW{WzEdjfEJWpd7pk3QJ*Ki5P!N`Xz<(yLNO-Lv z_?cWzsk!m8MY!#5jz9KS6qVdk2MD*O$gBbgOextFo{w!aooMHLQw{kisu#f7N&uD` zGR8MDrLD>5EHOZ;$X;VRQ;4Y2CIHo0(B|EnJ3bi^LxB6?-xQ|ng`rzBe0`Gmwnan7 zCIOj!r3aM<+E&j@+_%&rqje)sE49rM?w9M~fJIZZd`ppw)+ugL!#&^Fdtjn`=*Wn( zANZ-=3921onq*0AT~$QJyd^cJfUfIqrkDtU(Y9_rlh##HEZ1RBB%GMqP^uLuyf4;M>@THWnbQ8U|3rty* zv#iJ07+t0CFwen+&iZYw8NB{VD?+=|;YZOMsa;IP1abKxRVEvcsGa<3BY763P-l`8 zqtlsqn|to*^!s0VuhTqRI*AP=D2KRh(ip{NU2J5RD%D!r9gR+V1L8$QLxJI7OBOms zRgNQ%01SRz*1BM|V7lN&yU9Lfn&0WRs>shVdE<5>mfyaooi+=7KHE_ga>v5W*uCyy z5WB(X>(K|)Ax#o^w(`L-psf&D^!a!Qlr-{pzl=tTZ|9>lw1ik-E6a1U%T;fHbGgl& zj=xxRck}?E`okI}aN)@5eS&#E7s?C+W|t)5WnTT@`Jr>w{~B=131dj6b5*smt$TtQFU!dIs!leGBe* zVA7=<8Y}`To4notfMnC&G&^U+#BK8(x=wPlHR?s4N4tfbKrMw^vw3E*@6fPhlJm5T zJyJ$u+viJwZ1cd?bn_F3+Fw)EdZR`jTX#4CEX@vCsxFOReXpaIp77RwsHC1qN~E(- z>STCz!husH?`885!f2obV_FB!a~})W(UcUe>2ti=dBLa5FwJAoYvtMmV{eHaH9Iis zyoj%g>GTw`r%Kz1pd5?Jt)|*3>oAVK>|XudH@5|fJ^;f30bZ!~F=sz6Kt{ydEj`9z zt-rNT%8@bAc!!RU@6!!t+Em9G5vPriZVjeP@#C=J{-cdIl;B$xWB|`9I_=xx%R*D* z;xz4f#^9F|@drA*XoU6RiVmhm7IQ_xG4Ec8VFf zuc$K)47cEREg62NS~oYc6C8@^fH@sZoRrs8Wl!~hv98EN=Qw?elu zMCBYW`y4waq!}tJQ-rpnk$*f*ymYrWi-r}-=K-&FOXLJTxR0vsNlWX~Vm^nsAGY~! z+vSSPOvHyJ%^e{_5YCL~=b+&Y-npmQzcF*!7CRQ2l)0buWGs($>M8mj-yV33V-nVh>nclY zhf+C5-?AZm9atz7B8f;k=2m`SM(03VL|5pYBJNfC+@LM`i|W078dX$E(fGPR=`&ZZ zFbNSGKphLX_qJtxY<7!GgBI%lHfj82ovXg9wE{%D3H3M8H*C4TIMeQyNsp%()lN1g zpfhr>N=}rzP`^ELcu_~JtiX&t+lfXW36@We9hp&5oigBpJAs|~w0qshS zrEsc$Rlp;P0^1EMtnc!wayx3Kn-wpP4_g(0aYX^2ZNxr*aWkds>XQ?MRuJ<;nY*!0 zepigsMQ23;lI8e?(j91+`B;7yGxR|D2iet^zyrVFJxu)%$#R16m>G5r@#XK0C0!XO z%(R-)hs7yt%8#JqJceVlKDq4FYbYUdMJ8JLcT6Xp+qUu+LFF_7Q`~+>S^*~V&U<-P zZ;O;#{{woHFLzN{M9Qu8z);&Kd(RW`TV>@as8P<*noT`#?WWgDH~s8E%fm#VuAbYt9Wvtm*js z)`f1Er^#;p6uFQ^KeAME+Zd4QPozctn&B?mP8!=BLuv?mY_rNLoKa3TpoA{n zN5O5Y(Qh_G-wG%qgWugGrYV^&Rr!Z$Q|>$M2y%SlYw%-2J_W|Q5zuG z`&?>v%fuIz2B-KG~Tfxvh@NL-#pW``-2bnUiR`5o3h+rOy5lIU`TuI;sNnmL}bT5-}Ya&iPqWXyytU3C<-5z&raeMfSw4EjYoH)$I6SO8@jt4>yIkN zEwc}Y)iBB9wim^>vS0Z8duCtk?hl5CEN#AP$%^LX@^s2ulg;1X54Zf#Tx{Jm*PFi5 zd|)<`d~eSD32#}m8Nf7+SJjl%jB}LME&TLN*D30G06bQDh0)gCXeM^W$+@XzC zwC48-=m^5dx$TbRNiB`9#W4lm^22@(_J#!U9q(Fc)eq-MESiPO)o{US)!_ii7W+^& z$6Sji0K#H(jpF~{J{$Se{(#0AB5Z~!6^SzAwH7~U@v8(sFY^CUQgo;A;1}$e>FY0s zNSWOO*hU8N-Vz`qeV`$+o5Zn@;F3eAKaSJjrxK!lHRorLO;}aY&=tD#CImV)hmhYNG-FxRC%Cy!d7T<4^Hd?DhA0ml zdQ@5-L9W463$q^W-!`bY4P-*2dOfmK%j9_8@FZ@H%SKAAe>U*PMeZ)qorh`$-3SYq zK6kFiwW@#8J~=yKHQyqujl4#EKY{#8*~+X`p$B8?Pct6oLrP~#$B4t49;X)rvt|u^ zL*&N3!QT5N9;hyRr$WfkwM^jCYd#$VmH)7ox|;Rqw&nyg*Bi!j?f6_^(BOj<5r>pq@xyE-?@SQ<<=YQ$L`2KF4UvN);v(ONVfe$yF()T9VL1JGG>005`e$@SJc z{iLwao<~gdPCEP~F5O4JNua9x8f-nr!mca_z{HC?3HiBtd@BLtZ;$(j1@}E;YWP4Vk1|8FVjtR_0xa) z!@|fWhr$*{F)6ovth|qUp;j#T?qPHdk=`&RSdi}0utpa0c_}^eK!I&7*pH9kcMnoa%EDP}n=U1lJor6LqeyT~DTa=g^eb0dO@veusy(SpZ`(a?^XDKLXIYfrVkV?B(S64iO-l<^&fVOPUL!PGs~^HNvFUlzOAIN#SMUBzQsm_b3_)u(k+n8wmI!U0qYn}Vn{?~7_0gExe z{UC|DmD<)Cqjr@EZbDS$P;K)smbZ(to4?IkQ6YhtD-@;XI@B`vf;LrmJ)c2`&#^O! z!f{=fDWv#iZWd@H6~j&|03E#SJsX?q4wU16{n2~g4c&<+*iI*S$ z=m+r6`o*MC`vNrPx_!-CRrGWZAK#oEy%S(2zCnMJS<+33;!!r~0`f`KlR>Jl0@~>@ zf)PUZ=WqG_=~V^Sb8G{K^+9oqo{r!r%-~ZPxGXKaC^BkKXN4`}cn3A;yAG_~%Y8{I zv^r_|lCjlFr?wW@?zj&UR7NylCfBOqtf*z3J@Z|&M&XP-q1;n!w|Fmx3>jdcv^=EG9&5yd~jZ^yafpx0M7H;4rQjog0TbzVNoq;$_y%C%*UwWLX= zkH4aWa}c|!OOZ8ktYu4|*)^3Go*j1mm4*n%o58dHa1^? zR?M*G2#g$->#$difbQDFOaC!Bme0>$;L^_UBw?B8tt$kp(Pg`tx><0%unCmL<8x94$sjU&) z#OW{K{`f4vlcNbFH?5k(T553Qca={FB|2HaBPo*wpO(f&6E{UK4<&rnj4@Tl1&1j! zDVRv;s+>G0KeSa(=>R-l^KUO*C*~6-vnD?f;=h~lPDxzvAhE1Xm!TDO)|Hd=fJNu5 zQ2%huTy0_PV}UMt`<+tg6^l2Yf5ykvkgW&*?Iw&?FB8(6rB0cAF|9{3s3j3 zzGH1(%kk2IkRPEKg?mJenZ9}Xs!WC)cdl0)z_N#?*B~X257uMW8B(LAoGD|G$rBm) zlntj&M`(Cw0H;kjGG1)P^L^FGv7~*82I%FKdBe8WA`$?8sG=(R+*gas-iG~dBo2_p zPcvvT?MVVHe+g{0QOF!9ID;27oa1jfmuIY)dP-RM*h}wEhlz~y?-hNt*a~0c4v>^I ztTwzlW*E^AlD_*=+67{lRX_Mxnhzi(DB5@@%F~W}?y)up)J@dvM@}L7q~2t2>v|KH zGKf$A4>s9i9U1PCGOt0;a5=k?xNOfwEVhPwwuIe5h zFV|!H3g&Bcep9n{^@mna81SE}7?L|%tP}_2or5w}3;Zv7Q^mq&CmfFznJNNaBti^Z zCRR+CD5MXR{J|k85{Y-wK~!FzT8cs{jo<2qs0bjF1bHm49(o=R6tYu_oQGEmkZiYi z$)3!OaF2iYp_fu`I_#4}WdmC9a~jb&+YuL_2o5Si0fM_eR^jx~QoY5LQF3GKGz8-Z zSq2Lf?!Mionz-Cdm*(nSKlZ6VOrVJ&po@isf-ppzr8F)Nd5uZmQ5> zF!jb&S159g-cvL&C55c-H$5uBYzGEiZ8KBMe2%rGn09qN^{>_&F0NiY+^a9YFpxm< zN9xEg3rU(XYwHiU0}S|lJRqmIHC1H`cx+D{9!tHVk$*w;N-)wtI7U`wyJILXMmG6$ zsT&VnplvtavypX=;FT+n%dFok;>g|OrS%U@M7MmTMtoR^I5)qf9>Yp-I}c0;S&f}j zZ9W(Z0-}t}H?9aNG|}tGuD23rmuT;D#S_odZ2+M-Hf1IYd7Z9<&;Mn03@o_$>r7So z-02j2EXR8i5Ei*vIQRmjsdipsbB;WHw?U`3Bv5(2U$HFh0DxOVP66_!r(@uNSO*MV zuZ9^LU>?26U3rhzNSLPZk)gtkRW{95u5P_-Di>H)clBD0}#>9 zsU@D%KFRykt`H$hZD<;nYCWQFVQ=E?_(?|(<1{L3QwueB`^b*aJ9Z*StW!JFt! z|5Yk?II>Mfd3(hVgGRqUc{^S7^o4$EIZ8&#w0vKdBBL)7(b|0BBT5l9d6hc@mVbUY zc$Je)&7HMiZyJPSAWe-i- z54+pFgws{VlDe@W!f$?vSARq;b#eQ?ITLL|zUP>;1Lj~4-cWv%vsxvnavCOi|9If$ zfWWRUFt}20f!!>jN~zuJ)F{kpU|8RHX-wL8_p3>G@>oX{YvvhkNr-rCuxRXS)f@5; zkFA1BZYjC0T4YesuKZFITr}FWVR7JB!|AY}Wcg1{R+F-peAHH80i1h)(`Z}9+oj{A5g6 z3PiLhOw~9H_4y3)D39sBiH-38pnIURvJhzFra)y-0G8xlwgm|wZczuQoiSv$C4qZl zB`XEGG#SA}W?cfT?axW|P$caOStK0uv{_vD9?&S+nsFN>ydaHZ&7oC!DUAEA$nTOL zC8>CqDoS?ghh}bCTfAlgs}si`f)TZH`_Kj0U$|HxFzF``>vVsb2M;g&YKaZ7JyUBF zIrpuWn;HDgREhEh!UH-y+U-*q0zsxeLO{k>26UQdrGwls)nQ0vieR(D7yHgtBMiWZ zd!}4*9g6+_>XBkONw3u&IZxT&332 zaVrcSeKSavfkVYMF7)hxS57c4Q+qe;Cm&!@-VF{E>4N5~6!Kg#dwcB>-%|&?S?Zbj zY7!g|ch34E7vhEg9v9q~JFI+XpnmcFco_X+9)(3@QR-SMcynKXJ zt+90ha8(ck@mp)i>x~L`#QyGh{_(}KA>k%MB>T;b`)HchS8H3Qi$w<}CCQHsfyk#LM3nW(o z<{n+Q?MZgPWe@wyKhv{MbpH$!um)>OzD7s@ip8y@CUe^;^8>5x8kE!F5&_VHQY|D- z^zSy+f?12s&uZNvnc2S3)q4Ajs!yl5?&VM}r28=OLOUbco+R~;&*I;(kkTIqO*v`2e6K6OJJ68~AT|3J7jNUyg(|ey_~jT* zwDRP8wi(CV)kC!I=Coru^x=YuEWY|E$0-$wf-sc zQbK2YbP+MZVdwkH`jv0(9sO)pX2;y;?|~42ichAO4(6X%jlx=xM<7f0Qf-g>LdXGK z74uYW*#4QfN^#vWdbureQRJWN?!Wh7%Y%CtR{0%ZLIk?-JuyY3eu-iGJ5v6nHqgOW zvZue=kpZ@J0&be&s`>5o{;Tm1*OFE{b`teNw95zQ79q>7l+-%D$Cf?qabQF4B^s4&;G>Y{7!1 zqy6@G9gmL9fi5ZeZ4sy$QFZgL+dYZ%+9~+xeENg3-Z`>Y<@8IedlG=3bq(OZe^#NTAk8t@{ z=+j3FX4n`CRYLx&!^$S4d?m3-vhf_++V2E41N8=@DE2uTV=~R})@b|tih$hrv;-1T zROND$cy4z9`Xx~HWl-%K;!?sSVQ~sS++L9rDlo7g@tqRfGYpz(?j0QPN+q)>xJR2_ z;FaEU@!ND!&YcJERt9>i+M~{^uLx1nElpbk#gGF!9~||6yv6=pD3ARva^hI+MqJ(g z#DGeSYJtQvVTIEOJ-XS~Nm!qUPq~i^ECzW5OX1xr207ZYaY+ja34V#Nz}cmiyhCh46PlLRfy^ZHCGy+*ofE*?SMdIGUcy{D=tCFF3% z!A9f{gGkE*_J?MJ0X7rmA=OQ zaGfWZKqokU$Gp8hLpAv|Yv+0dC7yx3VIA1eqV*gq%PwDo1_y$Bo_Mr*Liigz=M`@t za=_-zlY`>684EXK)2NclC*l``;D4wR?!Ov%ZU6Ov+Bk%(Znbq$Raq`K#**WQE+;?m zIqTRQeXMKynMu_e6jpPpH<*{yRU~Mx2E<${08xHY9%~sLs!vwR1vt~(^}O3{&I{0L zeoK`+z@O0?KwtP!@n#YhdES2RUw90+hZ^npP7GM8FPG`t_B(DA^?L*N6op9tf08Wz zd(V_K^=E#Wt|AvXi?levSktMe2rCovWU;;d`J4Rf?U>hv28FEnm?}jE%~;NU0R&sd zWZY^@=+CmOx2m|15?BxD#vuTNgm-?6RZ-*`Ecih6WL_;@epNo7pY=*E_zXw@QIK=5 z)=P+t@3UY6FMV75sfmkEq{_~Od@x#P1P<9h!m+A-`g^h&9;ZB{@JrTvTKF>FgT>oE z?^rw2cOj%oH9bvq=1rwrY0=~%9}ee@neni|?#u&FGx&KJEuVSFy@c=)|60Qb&De$L zYtK-1HkrMx0^jG}mG2@LR~$fUudJyb!+^ACs3?&!N!>E-#d+(+iI@EM8{|K|W_St! zkDq=QNqSNIr?85Og#Y)jiry>#IjmwRYMwXXv?`1ig%u3)uc2no+k2RMx~>_PIt^w5 zF(Hx%iH80GT{XhEx|C>VZVeN%gzzqFB%6YeT_@V>`f}pd3 zX=vPc2p=3gjT_{#wRs@?oIx?KP5y=nmhOt~0ZPa2U|x}By)B*v^Ne%y;Y6Kx)b_At)<}g`p^PBZ^=-HdGHT&WtGi^cBXLIz;BV<#IEsRi}hFl zc6Ily&Smw--c^WVNe5VJ-lZQlrd2QReM`~vijr7g^#le6?bRN)#cGD~)r_+_B^J4% zC;6Ij%c;Jr#g+Y`8XF~vwcUEq8LLEk89O&wHyll3hm*dkgj4@|S2!?7dgqjMAkPDB z2&R?WFKaxqJKe!k&^nK(bY2!pZ3#HX=%{s-O8j8x$8;yjH7sAfSYV!Xc!vM9sQ&$Z z29=8iM)|zu<90q6?mqzNS1vLHuLsK#0BP!X*XjTNiN07a7pPQG5-Hj(}tGuGkxZ_jo2 z9>E6o65D850Z=&h<<#rd`C`;J!ea9%3UzfgRr? z%H|W)7fhhlxUs~kAV_Orr(@pL&lD~ZT6V~@0#u{sz_A4chj~cHo;PBx{@B2#P~`e( zj{TW_S=FG5;Of8+uZAj@p$IWVre-PksG&b@302O?BH-RT#dHrAfW+?~ePVQ=ubqV& z&1Nw30OCIp@8SH_D#ttqfsIDez9=BKb@@El?;MXQ|HT#t-0SaS7%O91&i#+!z@=el z26;BRch>O?wYGu`cWOS7r5F;|F{m}P4jH$^kLV;*2!9#mp#Id0>E^CodGq+!%SS*u z{>yhW%KuD^{r6}NYoR}brk?!wIE_KFuQWhXGNkHx@VDQj5G_T}2a5Xy@y`vbmil1} zU)6zt?)wo`Paho9=TY#cmx+266tyMR8Ah4^;*5x5mO8RYTaCMX5Ai%^@8?6l4>gEY z3u3yZp zw>*#`AL&eCZ-)JjCZ+J-6Umzoy1L7I9(Bh-^NtGg(ip^y1N>y6r`I^!2#8re*V+Vi zh2L_HXUT-MQK_~8Mn%&jD*&vlFqoDgB~eQ{fCDj#=fq^n=RILg?Lq?0FYQS_7&l2e zQEp8>Fe%bBA@)zkpTi!b3c+mak~Yu-;3$Fmf*SAt->mdx^*@dh#g>ovUq7zt)M$Wi z4N``_e$3$?^O&^hrazUtt?@Ajk-^?qV6+|>r)8s-!V!;Mct4=XY!bVdt&>&8bu+dm zM0?|B5N=Q;IxH=s>N4GvwZ)$=!@jaAUduBeaX1#dr(;AaaR2FC&XvJ3rb22(+!{N4 z8ED6=WS8VHJ1k5puz z`=9PAx-Ttxtz^>4_#AdkwRb_M92w7j(V1Rj&+sgfBl<>sPW|NZfLgE~xce4X*`vC^ zqoNZV@b&egJ!rW(0Vw*@MrG*ZBk=R^RPllzYjVtzkG31n2c*f*6{{WVEKk$$=Rz($ zptbY+S65QeiRGA5sdlO`JP)SCDaSSzF>!8lm@ebf1AHz=o~(`6sgrIK0d+?=cJ4ie zP9d47fm4m7M*ZEg^HvJEP(h34U$P|p^c%&M&}UD3^<7s+$Mnee8V?M+oBS~s!n~H^ z`wwf+B3~>@LKfOQ=RYQDk9F~$-%l`h30ZJX-w2+8LN)dqqkXfMojH! zCm9oL4;>Iy*)J&-RRKmeLl%@dmmTy>f$^iOv(>37<;M*6ZH#50tq0Yuky33-Amiw$ zf}e6X;U-oi2Qq5Nr=)zhoSOEb$7XSw<%>Q$0NNfJRUt=2&L}F3t9>)UBRb z?O^TToRF9BK3LsEti&Y0tMPkNeW+hPZmx6vIu5tYYWp&Fb8|8sI{UJh;hrGy4{tH} zrAvA6pC~Q^<`hJjKy%Vb1sO_mqd2ysh7Tc4Q~?BR0QADf>e?Q|tnwtl;1P79x;j;+q+ z^tO&+%V>Y*sW&x_@4={P=kP3G^_+=1U!qR3Aer{VG(lFs2IU<#@Asu1p0zG*9=)TG zJI#mf_cfRUqi-Vs=E@stWZE?5I&P+jF!7jS?&hmCmc~r$97YOps-+nrTO|VVn>7gF z8}DWSX$IpCwI)Dw4XvEoTb?}J`Ftxgb$qbdb|}|%YvX{lD7|I+SnBC6O%#I&&!|E6 zy8n-OkSR;LR3e;HD@~`gdDJj{@EW1dX1P(CtHxndu}gDhz0>M%Gss3sZO3w|6T?Qy zn618mO=NFBJQ@V{b9m5npk3b0?`NGl2Eoi=Ea6kE(WCp@4Nh03cKU5a1x}m0o4Q5D zitEqaM)W{!eNt%Qye4&1w6WSN!}G{#{}X2A#gSTc^FZ;-%DSWv;FQ0%+3*Eipw2Qh z#j_0zN83&Xg1I-sINq||Pq|w?K&fo=oLMGjlH~hu#=inAY{`G~uR7reMLIzcu0H}S z!exO7dK}kn6q_iH+t$KsQ|;EC&}FxqadT8J=8e_9y~5I7(E&0|Ed%8PX*z{9;Kc?j zpECA%YY;#Z+{*cc6oq(^-DXrrb%Q-Rl#p$lQvONHRr4p&qXu49u(!DWBSEVor^Ob-~gfbt-UMzrjyE2oxL*3{+Q>l zeXc9k8e5*Gp>i4B+CXzVq@UEAgOkOdGZ4@Z_YUURmR5 z#V)Jg!GK+Fef3dbv@q#%Kd4r$|FQtEjNI*hfBr$`u!V-7n?gnwQe!!%9+q9cql?Lq z8GdP#z7$d6PZxZsk_kHSEG+^i*A}KAp{d9HHs|GTHmjErIMQV!cxq(Ji2YbTDpINs zftq{ivpJwRLe%tx{c835*x9rZ(B&n=nYB zOMI7^nP*18w!}!8lN{shJd%0X!~^Mo#~&Z*Jqx;_2W;*VvVF-*6EiPRS4~z*tz$3< z;?2GWeQuU@<4(TQ1OoJ(z?pyU)i2_*bQ zsCLhj>ovA+twn|85-Fpc?fBGB^dNOmrt@B#Qt}5BLJ1d>c&VC0;5CQS*N=z~kdMF& zPip1+3u5H>m3P%7?-h6y8F=3HYVJ{{J`C5@XJDIOMCHah4=R}uF)5_Q@j*UBi{Vsc z9dG;g9<1eM+L0Nnt4ZUw!|rR{p#ibG$S;V1;y@!JFXqRJ}A311=WUG3Feoz#>Wy^sIx++>@!DABbRqfQ{k860x*Vh7>>v zX)4lGl598oz-j)W)%sMSah;1@9Wr z`4cZ4#NwUr4WKF_b9tY@RW5-BK%AErpHZ#0yZxA;Vc|4Uq6st^aNvJCDQN_EQU`0JmTDdXMq=gCV-p^_aPH%8T(TX@6Q5o%v){f|NGG!JKXcEeuyCgD5 zTBmsGHKl-xT)X3{&UBehHZYTSiI)nF)$T?8)S$iuyWT*|)=k_p@=dw&7l|gxBjXZ7 zv7+K)*`p0Y3gtPzSLDtSNFyh8EwLHhXS-I)Pf|vT#`5ENkvagZ87|2Zx<3C#>&p2z z*DoK{L|*^CsaLakWxb;NXLT&?BJ5jnflgk*|HIT*hD8-_ZG#A?l!DTo3ew#O2+~MP z4MTU=5Ccdzh;&Qm(A}NV-QC?oecN-cbA9i>`MGCiKWnY$t|jOWRR;jUa81YWN1gc? zn3R9)GxWO$%y<4OgayRJ>$(Zi>%5KT#T-f#l;pHYtCdJ&H;J1*^?+`_d1X)Uh)GSE z{$7=!-RP<1)vDWWrsULY`G!jWFPf_B^QNnc!T2_kbR;0EP3dOk*?Ud~RBi6xB6Kl% z8~nzb68H2ELdeLscYA$}1O+09hDs_3+QCgSZ@g2#yd&5aDTesn(9UmYXk8!7NOGDg zGI!>n&LIQG<*hCGsz{qpb378FH$!vFI}GiKJcSu<*AMD}2Mg^yBOR}Br7SzT)Eyiub}IT9NAPUZ29l^GJC(>)zL6oqdPwIp~-3CFJ?!d z2lqy$kK*)to-WkdsACXvsns8{8s0C0{)iOLNHmw!c%A#xL*V^|a+R6`Q#Df}zSslt zf`c#W{Ah96aTvMPNcXy`t>>ie9y1cgG-D=#DUV4P>6l*qT9p4O?eH|)Jhxg?$9DP7 znE1=>u0dqs{X%u6neF5RVVN3C)2dV38_P%7Vs%wjT{p-1Xx_-ob#yRARU-ArzO1Kf znX=V#(_EMW1wt364hVJECFc)X7vIUl#UxqlGq_Flm)c=+bzC9zv9gN@<$-b(ZPo3E zZ>n4CAYCf*|90r9Cn#Sy6GL?ybTqc-ZgP=A@yLXegYnSR_9b1>DA z_63j>OJBNWNV*S$oi!C~%YiR_@>Y3H2W?sd!%I}8(_)*oOWdBtVlG#GF;ybXM+=+$ zXoTVLyW%nU<8OE5z1Y}+0tN;h>akCAzwKt*QFDJg+ep1fsJo6!>njQbet^3zykTvb z;yC1~8PLi2%$YR@Dy!+o_9`p)S}3Z3(PBGj%|65HSzUFebZKgL40cdtUiiV(D2dCe zw4!on&t(zUzj)o`{~y0<>!ths03z%0i%vl|=xyza?Z+sV<@%je7azWjF!oD4^|gu= zEuTO0f!0JwF8ahG?q}y)CxuCzHY%n+FlC<{R<9RMR8E@MwJa2cL?2H(t(|&F7*$5n zMmD|Lzr057@e$vQ`9n`tC%cS?sQvtS;x%=-$F7q{KO9r<~Ttflg%tJfEm z^!Db-o72}4t>Vr9j-MyczkuT>kBgzLCwz+#P?W%{fJ{a`OC#OJ2wi^}DNcNe9Z2*R zZ>OoQ-QN30n*!nD?C3Ymf9GfemBbEz(VF0vb#rHYJpfbog*D=D0)%+#w_5Z_tOU}O z>p1|cm^%BS^ryt`H)g^rYT;lyVRY!Z?UKqbN2QkFNv~h1HNU@T?&f%``^kgenTdSB zAX+MXI)SlK!#w-t-+!Z-uYQ@r3EuapHty^VP{ji&N^myS7h*@n-x{2;0u5>_T7I!C zv-9#pfWpFOQrFWjSEp1Ez4Syv7N;8>i26n|=N6;WST|l#vUSsUtHrXh>dy(sasI84So8w@TyaWy;$?XXvF_^bO zBI$MYTw2|T6totr>xn)few3v|U`kt<=bm}f$Q6Cv#N`^rw;n`gStEnXJm%>budjsb zu=03Q&`UZ}G6<-GN|+eEg2g|%Ha{$Vn2yY{Nf+Ap-vP0JtIek>2pbbXb(9l=UEp!l zTe<)S&UDY?9~-FxW)*JVA}LsBR9Yo4NVsI1rnejV_a<_Swrja-V;aKIiGddlRE5&+ z=+n5doRU>z{X8^zS7#8R;!=D1O#j(p7f{^X)EivtV>mW{2Z<#|ATmP}rd@AcxDdT9 zP7Va|+Bl5{3{}hZ{ez^R9xg@-CBlHQ9Jl`q>r% zPdz%_^ZHJ6a4Zd>t=bXna}9yw#{Kn~t{f49x!pi>MiI3`t375Fy)u+b7yW_vQ5aPw z%B9WcJ#U*2@eEx>-bA&93C8VVv5&UoK9_adf17Y1VWQPQ4RrC|OD}}eZKF|G*Whfa+D?WmfUQk9aiU5sc9Wu-> z+413}!)DJrW*!<#MBVx=sTO@4Nxt(Kx7FUL+Rb1uVNVu=zqL|Bk>a$XjX9Kl%5_~h zOdom}9kX$2M}Lu7L-G4T=Wpe-MSVf&M*7sumg`GZbz7(<2f3g5ej&>ttPV7vmzV@L z>M5&KI&PtGS{<|DU>#Lz77g79KNvm)lG>N;U)rLft^TsW%`(oVdPCH9H6}^+>E?|H zg6PIFzD?2MT0h;??)R+lXHej?Omi!=8Di?@c#?^NiLciI30ht$TQ&`#)ayRq+K-c{ zP2hP#czHFvZ}Nx`LJv~wf6)}QN+{^9r|TO~G+3mYhMa{Lgv{9Xhg8r# z0abI{&B~^s`UIxjOY9Ifrg^p789BQX8*Dxsv<82=vprI>h9;ue4krkSEjhT5x?*w$ zGN?D>*>%%6oxaGE=UIDsb?nY?l&!S^C+ev3Wz?urjQ#v$Tn%_uH}fg?qOkOq{l|3~ zdOEt^+cAxRZ8lZ~7dK4|7m*)GD42?z92r>b&O;hk;`i60g{7sMs^O#Rd?>~zo8AaP z;{{7Wb`w*1={x3Bd|TNYQ>k+1aAR%_3+9J&*n#ojZ$2H)LeFq!9X6k5bOi1GGKLki z(4Ts#ue{MDbTjrwy#-Y#**}98h$x3G8Eh5Z4-(oyp&%OE}>A@_q)$Y zA7RaA@z#fTk?}``Un~)gP@EhT1ii~C?Zn%kHHcL04oM}XExXUTD(b`od1S6&EQAx= z9@p>O)*!v*R=4%M80OxVxx=QB?)ogVspJwZ0=QnDzFVv>8ZP&12fLoO13>~4e&6#3 znOg@=ttRu|6>3%&#^I7Sc>E5sX?>i&e7%+8y8il&)i00mU&U+Y#HD@hmJ8S46Hu6H z<;E~gq8Ef8PN|%truBlPH#Ckerx|0*w}v}MMy~dOm16Z{e5l^{zm?@Nk?b4I#N8(n zP0|YDKL60mLZ|^QxxH>pBnG%46{8g|S&7506ol?nJOMhB@90y5mweTE7>KQvwd?k4 z=c!kfvr1ayMYXfqrYbD6B$?aGbO3RciFOK!5h0CxQE|eG5v zc^}xl?@UJ$KyE!ddFfE|Yb0P*J%`i7S?_)HSHGN&nIKt55&56z{VP%uQO<0U$Ft>~ zeQ&}t^)+k4IBRK&e9(q#FYo6}(ycfqrRw((>h#0K+G1#Adg5V^=RkHo*<~P!7J33% zNjzP;$FBnGrk!49=IvXo>Yj6@oWCq=ja3WP{qfC7CoT8OLu3MC!Gr@tk(@q#qtKDo zTI&wH4xG%u2sZ=$F_ZmzPGnxMA=UZ{_?JT2#PMsvbo5io@AaLZxQ3)ienp3OVp}NW zZt2)OB@(Ld^*M(X9WA)z131WX-ymM!mSk^j^i`gcY#6>q> zqLBZX4aHTB?MKVE=J7>#CEfp-!kG(PVAYVUY>_i2`KuXs_2Izl#Hkv(A?b=c`@c&% zQ0XU#Kfc+KWl~Ty{V8R9w4JLk&4^G60C|azVhGw5@jop?ldt&gNv%6x;`@_vSD@4+ zN3fuqHQR@5GVBHKNRnbpx~&7E`W?!;;2pYi6l+r&5+hMMBWay0S~!fN8A3FkY_^>T z8+&c$)ALY8PWUSw*Dc)r=6H!>I3-G#!_U?LC$L1-H1N_#?Hd`P|K*h3cA%C^+M}7R z%r~@n3Qt??@nquZr_C4z(enu+8j9w`ck?w?$&Y5_^4~!2Z#$+nDMaD$`Y7Goz{^#d4V&P3kKaLmEGQS zuj;Gmo05e(<6+I&(?dw8C68I2Y$|vo&GWdstPb2MImffl>wf%Db_>)gzR$}GakO&D zfnzs^SE4T;Av-(OKJdxnA9O!^l9{144bRYLgWXi#3(>q3`v%4f;LD=PK^@E&A0(QD z=5sSKU6wpSlN@B0aGtQ52bvF5rj5=A?<6i}4HP6sza=|AU$#aqUt(o}%4~ykP8PQk z%jzh^K(%%tuL~Uw_u7+(&y%G~opCKoNRb+v16i$xO(|~XXQQPyt+i)F+@6LTe%o<9 z!=ipNI!Nv(i59I(kFAOgt!a-v^N_NU(b_-THv>`Jj7t|t%R$odvYt=J22%5d{?U}+ z<$FEJpp}(5LzA86bhTnvZgXV-#WUV%C@y|#adeAenuLMW^0n*F+IiD+= z7*h^`Ra<+ye55mJ%njpE3S6+Z08?_FGE8RoTh(}+C-6F`X^3tvTp#iKNymLAk;to7 z_IJDX;L65(3BFt(6Cn^|_5haahAYO>tNY9I6(kG?!aLXv4TQu5-~BHOU}kr?UvZ)4 z#@`jM{>WkJ-}OG3ngep4oM{0oS(5=Z!!a_|b@zzILj%h=plLVDS~>SQX*NPiEhsK? z*&WL38f3dgp<-~EeZ^pGlX(GChouG#$3>Lnza!E6v*&|@7+TG4a`})8{-N6_t{~5| z?hm4x{Ia{iD`Fqxm;GF*-n#6kkihaurDVPuZ2z@fzgvuOGk1m$6qw^A7*-A-7rZL< z=dtg$*mKh$xq-S0N6s-CwUcX8>ZnO9X-f>H`Q~@hL``ORpEdAV|1ve~j*kM|iS@L5 zm=VDC;IM`f>}%u>@q)MBJeRFyrjMcCG%Tr$SKaRy!Cr?Guun5f4YBlSc8A1fP5URxa*nX*3e11Zz`Ux(PT`JwhAYfNJyO2$F)|5)# zUUV2FtoLi?L}wGjYlbp{TK?ovcuh9~xdB*%DmK91CJ*n+y`g{v@j0?#HWF zoCgaOO*+`bzROMxi%zyK{6HJ8WV4;6+nmOJqL}GqMSwaAXjinXe>+`hv()}(bdNsb zH_T#y6%!5&xJ`}r-#?!9rkCwu+r5gMh=%20^sOZTkQSEH?&)tR*;aoh3BQol`fUsZ zXRgO0Tj<UE;J%M4^6T#t3=#S4t+-n<1G)QniDnv(FV3=i-$jVun>_nw1gf^x3-TI`#(YVDB5calaclNvmVD$@XB5`j>^W76W2qeRH};NZN5A^ZQK`F8 z={vs*Beaj4OSTuP`pqcej;xR*QrXP=QP7{HvXd{Ag@ zGuH8Y`1X_g6SB1M=bn|r8skFuNYb9ADk+@qYN$RgvyOfXJ@)efl|+7og4280^wYFr z^XYo%^oi5u!GgNr^Wp_p9RTVTDzvstM|KuT9b^WQDPaj+D&mKy_saENcss+AZ3+pT zNx(3Zbk$m}`YC3JhDI)@ZKfw0qqe^8;o~p!(F`9~Dof@S_v`(fBn~V6-8g2gT*8&{ z+1vt%gIw%XYwMXqEO^2FnDtm6KDeEe4-J$h z_8JoAURI=%UBFu#;*AH{)lX|o447_FerE9>@sZWe+%=yD;LcBlX1)iWL|o<_pQ|?} zm}M7(>4>uc{Q5{H-jv*?X!T9Ec)co%O-@&+`O>2(Ec1YQdzBai%3wlOvo;fdDVF z&lfS1#Bo5#_;obHAH|9u4c9OkruTZVf36fbdWEg%&o5zP+wFMiTD8{fpf5Pnf4(|Q z6{(k|c!R=BpUp-y(xN|b1oeu4=dKc_2;If7!Eqj!qT7cvRS^nbf#cm)eF8bW{zbEq zucK{?RY|C@Udq*4>x9*UTA!qSEvW}gA9#-IHiqzy+$g{u5SUydTmQJYL({Fk4X6F) z$1FyFm>sKW=b9&7u1tKMDsVKy)Llc0&)^50D#=_oADeqvtiBYzO8P`iW(v%4rA&3J z9{mIJdtr>p!I1`Y67>aco>18LPFF~>NvDLU$^l-i` zZOAa}`SwM^Sx@Ywt}iZoRU&xQO;gF@_19bxs@Q}gSc^1}Ia%~Ut)nal^JdW@J}ze8 zB5j5}2_?v&>FEFzcyQK;2xHZ@$>**Z<_kgC?~eawTB*0>xaMz!aUvN`Xu#2;wBs58 z9V7oN7BKyGTIck@wxn4Nolx5NZwjrhvSiu`0lV>B*@Qg*@T3oOclTt0vewnny|fC3 zq9`5LW4`bvYZ9-k^D5%wUJ`*O72Z+LtLO2fPRDJ;T5H`}0shHab=a}AulA5bpz*wZ zw>*ZsbHafs(M8cr_W7adX~B4gdQU+LGHl)p?0&*XDpagXugkvWkCRr2~fICr=-R4D( z-Y(Pd#jEEl&JArqkD}l#>REg0zMqGdzXC*vtQU*Ao-4FBg2bpLd!miCGFOzJ@GH3{(lnRgs<`kupO;Lcc~CN{gFL8!qXH#kMa zQ?ZC6p-+)fn@1tlNsWMp?bTzGe)o93W`R;7Y)l_mK}nKD5hI!yIKsPQS%Pd>JBRk` z=CCVxV_2JM>SVekaA08HX4k=9C~ox?KfimL`FvIVYnLsg7uv%zz(!@oNWp8ru_vd^ zXvzE-dA|NhDUM0i61QqXKF26%t#C01{%9C$m4jJE7zFQ3w~btZT>X|{S#0P6ziK`9 zlX5^L+c5D+BRVg5f0DaeTaE8Cgx&*VuFYON*X;Pts}}-Fw1iavWeP_UQvr)7DprHbN#SwR1?B`wBDYK|eNG(Huntbbt4F#k zu=U}5b>%o2eS)C=exNgc)m%u^a?7KEri4W?$L)~z+TS{f>y_#Qq8#oPxwzlyse%gw z+e(4T7izs{+lsm z=cQV$vSCGzM*L|w%Ytx`eiaM|2BVp2;v}l*cKzXWN#%6VeHBCq74y($#@JfxPyH5w zyiw}@w$x+7iqNEHEsH6UUPlwB**=3?oj#(2Ksplp5s*mc){Rto$7W&@7MMiC3B<5+9 z>x1v#^u6dKie*p_Syju03ob#rj@Vmoa!*5>F)_^9FK{g=u5nk#00_c(g=$8}rDV=G z$g~(!FC0+!n#hEzscqYCI&YQ^G8N^21Abxl*Rb%%f!7`X2R>!{&$Zgxoim}|6-@~V zkByG7uI|j&h5wwE?I->w3i=xUnZbn^=36)J2o`9z!Egu$qwv6Q+r{E&8s<-^e4nst z{ThwdaQRGWFtrwGQ*kvh{>a#v6ZqlfGktLfBc1+4;TBc|KZr#5kmFDjfY(u+0*EFF zK5|$pn$?xJjuO`0`l#W&PsUwDufPyb7Sdz+#;s^mcLh%S(zPds=^KGW5s1Q6Wo0-=mIkRzUc(+=!;%;o_6aJD&_Y5&ohueT1c2taAtGBaTE&Sf3z1?K4}+|@bkBsf3VYVA1$T^v7K$9Iz8NZxp!3AXlu8K zY7m;H9gdFWQVAyI>Q|p!eK+Xb1%@fIFDFyk)p}#&uLxV&799ZzD1#^iD(H>P@LZyz zZsK&CYPI=sd~k;WNBmv&mkxleW(rd%&1I`99K-ED(0+_%pP%`5V7@?!)d8sDm&Sh? zUj%B&-p<8x zv;elD5@Ux`bDJIELTOXWx8l?Ng4NhKVCOky78(bq-S7igq`hyr7F>ZNe%b5U7uzqz$vlf-J{_B+cz6WTge((* zJ6YNM(x}_lC;j|`)poJYszB8-5QNTRluuHp(e#M59Q};Vna@0c!7lC3jpda6)d z?6IL~&PbBo`~)ZR+@Mh$kjlfFNJY(Ng4Wz0vM6-9JCAm4nJ7V=6GpNlZ`qbCF4uB` z@vKQKH)@>9zWw zL?WA}xzS9-k1^XV_x3YZVJ56i>PDZ>(jtw4Hnt_`RyeKE?=HW*_B)e%QB)@GGseUv zm5~Wh8XhrQnH!5kmb2g@A+IQ40uQHI&e|-xnZBr9!QjsnCQ(=h!wSh=Rc7p#LSY6s z&0(}S+otlhK1L`b4x`DDTvLg*8^FVZ1i zY%M{O7o-~loQD?DZo+burIv00)!MlnOlWGlDJB(}T8P3l&epP@M-FPVdK(S_;AO1g zq^pQIJmUz5-jtz@at>Q5&pwm*Wjx$Yxac;SsVh^IO|C42|M2eXee7v-V%+_sEYMhh zz3LYC>PV#zh2V}+HEH+!%5*NqR=?wmHMtnF5k`klz#1|Fu*q{S{2PQ21S{_GLZHH_pbJr!#?E`i0CfWw?m%*6`7%4za3i2q$Z9p-(8El05x^%BCpf zri|MgSL$Y|rylbNPxsa=Uiwmp((0x%Cbe~(ptV3Ko-(k*hC?zlI02%HzA>LOR|d`! z|B-C+jxqQ&#zpWR?_5Z~`KKCRwEB-qNVQB%^w84Yr918RyV{Y5u*sb+Kh#pIl`qf?pDOQ`m1RFV~@R&g6%Rsrm)vDekf77 zD}l(In}7&B#`C{tUFzN|c^b5vm)Lohv?G_-Qr1yeTAzv0iXhDZ(-L~zD}q>-cCz4R zF^g5v`?!0gM)7-%&YyNK7P{uuPUTlKqsGb#;wR;-8M{!la)d2e?$d7Pp1YWD87%K8 zvVxMCTMj>jQ2%R+ndf@mV#FwVx;vaUfr$5%V&c*;sPkk+7Y;L!4WL4 z0{XFxJ2b%b=706L&;#xs5NyU+?fofJyFY{gFD5HO>B`m9z{(?wKq{OLDf<@#HVwuM zZNtnbX;;cCsQ|9%2c^ur(+w-N49T+iB5bXihQR<(HmvV-J9X-rlSrW<&7oPdU6jIZUaV1t%Y2FqJ@ z44wSF>FnFt{s#5aaA;?J`jgO&gvj`iq$^RizBAT$Q`)t)4oC62l!JB-=h5k+C%luecp&(||`O<7(WvCODn z$`Q0TFMvTz-4KI>Z%By0JLJPnGi|gBA*%RhXKYD-lI$>QimjL<7)BqAuIl{h@f6aYV{A=ZC@yZo za;l;wTQRSIF&VsDKwF)!plQC!u*sCyYjOd9>1&jC@<K#L|}sROgR;LKlU5IFB73t9NvbB2K9WgCf%IDEi#K7x-M)N>U(z4 zsxUO`#A(I4c^O7*VTI0vt$S*af|;z zDXukrUt|c?x3##xF%n~nW@Rjh!m{8CQX*r!XKL9^R2(pU7%oCQOR79VlRqsJqMc7& zRwqzhjTK%0gzua{$;zSfpbDc*2Ej=ELFOuGy-gZ4Zc zL($K%iUV?ifmPtIBG?ye%fSVifN9szxiD&!YJlQc;&&^kp*qkK98+C-1>`Y2?k=GuhGGT#ZNFBd;EZa1_ zj~7`uY^2gkC16}GOBNl>jfeI!SUe2NO=q2vt$rvN1f+#3dvB8eGDh;rKzvfYL`qDX zmL3Pws(e&pjG3x0)^G$-{9AzX9whMEz3JW}&U)zg-8+sK#?q6y$7AzXF0bQj{!j6` zb1oH~nAjaN82YEQr+C01;;K0#?m4CLoyjl?fkeoOVNyS$2ZouXI;CY^kiKaQd~f80PpMXIM*5qy7jcJNyL>XYFmE|wXN(?6wF7q(RTqShz<-k3asER<` zJo{I-?p~-a3nQUoo*PG32!BAp(~C5f0L6k2Uax4!9M9TcoHr1RoT7?^tWf-k*L_Ib z74Bz{fi4sD*lRv58%|{fjjN)?=I1u_!QO-qJRdm!Oa@!@=UK5_Fa7 z@mK;ok6HDzM8s=v)acm)6^`gNT!<9I>o2~8fqj95A`|MSqIMYWNcQ9v`rU6z>}c`G zH;@Vb9DVCaP0vN(R+u@u4#j)FJswW>95C#)J@ms`1^*-UvbMY^@2hj9k-Dod6Cvqy zRc4hXGJ|ne58q@H5O9jrN=RdA)x>GHkI zk~|Vkn(Y11W<@rl)1{1Bauv+bP&=2|9tWbzWRdEuo2wHINx%*~Oe1eRPT3EAUk^Ku zeBl|%>{^R39@T!6dXxCgA2v1+bt=AzV~XaU76X^4tgO7)+>nY{4wEo$ldXU`4l>Gh z?9Pt-emWx+ZzSXD8eirx`Kz5Q$%jy?vSm?=F;>-9A07vZDc|C>PQN*b-wLmR{$SPy z=$HKSM6?ux5#Ap$1)PYQfqMpM-sQ#vFq}6V362Qb1p|GY=9}hF z@e7;cGiow1mbA+$AF!p|r4Dvn--eX&leEi!ukHhy^z%Y*hRtV=Dfr_vGQXpvx>pFF zfBPMY;iu*;g8+)&)1h+U_KY@fHPI)vyC1q=&Ti>o=7@j@KiDrgTnsy*w>Bj$KtR+T zFo0QahmQUln4c|?S;hQ66Pf*gCNirJ=!#IJT57N9m)==GNJAdyE9MHqx;E5)4A0eo zHuTrFGQUOZU8&m1tX5i<=zr^j0?62Sgbi^m=WqShq-nTZ>E5f~A=bY#u?Zn#dyUU< zs`9fMyXgZI+G?te3-)e&neK0epe+uFWqcH&)a#Oz9T_pAdYH%?dDycoa`=+?v5Prh zv_D^GzZ(~cGJim@MV$Wm`o&@gR_A8#wvZl^CAflx^lg0I9`Q}Bn#GzZ65hwA6%K^0 z6Z_p%vMX7XZ=7~;eKc`=UbE7zWFpKyhG;ihWoyd29BGFWPpnzwx1qnQPi)XHT3N?h z1uMQtCV2^8Iqm}fY%H1Di-{4c+tYIf2*@Vt_!_r_(sa?;(YZ9ir$usPhiaD{d9|>( zm3Ho7Ye8&z_nLellc(7^4>F$;zD~KAY`6 zeYGn`@;vDpMlbF9N7jTNPi}y6hNceH+Y#HY9A0?BiQWl_6voI(Y}FTg8Sb5kU0ra$ z(maw=Qp$4U;*5vf&d1Mx;w`e zJ_61MQVBYu?5@hbAmeXzo@+~na*oOi%^@h{qqG=Y-)6F3tiH(pFkHs+%h}ju1dB?> z#nRts`>ZdP>v#BdD8PNOVi8b7XyFRyA;wutf1;;zMVIR6yDhRYySz@@X>F>m8bSN+ zK1^}D%%}q7ttwmvIEc1(g75FL1V5!^Vvcf+&LqqBL85|I`2umPVYPuqQzmOhrSSLtnlybs3>6h zH`M8EYHV!YS)X87yg;|{khI`9qHPX6a0Lyz_K?;oHzJKhUDa%GOicbf#7OSl;6&u- z-P`t@9Pbk(a@xquZrURXxK}YQZK{@6V#7?@dc%(3IeY|!HYVj*ysWz zvRCX9f6QLTxUmHoLJd-nlf+kOtO;TKiFXW3XUY2xpX@)*oc6FO=gHSL&F^}gcJV2? z2BnY=vf%nTcZaxielt3j&s$++PZxRX>GuDX>28y zJTT9r*78OBe^b^=;-DU%Kem52Yf4xUv{Q6^9ublJ*yy~q9!6Wbu@>J7FRq4c_6|df z8QO__zI5OoY2Dswpb|Aj3Ff z)kA*oTI`1p?ud0uED!hZ$^jeGr(sL~F(TM@V6tuS1ls$nNUw*^TRWK)U5&&lR8rTB z4mqAP{l0id{Pmj^FE1j6ANZ!(9^=?d&`%&6`#BHbv-BM*v8^{FnWhxX$3&W4ZOX!tj=_3jheAZnVB>L%76vg(+bw~C#dL}4KTTygUN4{@E(KQ6n>5AJ zt17uws+j3zoW=89$a2~|2~bpD1AY*l6Q@!zet`u}V=pNA{92B!+T<*T1eF>M-h2IC6=W{}`K-u*_c8MJQ| zLu%Lc&U~A{(y}T1b`X(lH86qC>7Y;@-bA^~;=V9#Rj4^t$W=UR);&3HG+0a~sn+`W zYO!);p5+$U%yu??!Y4E{VjDZ4dblXQ7!rF@7^5IGN29E+W0x}?Q}Vj;a$IK0h;O9D z6OQjyxsX%<H;c=>YB4hxJf~>P0Jh{$8NV@V`|(?=>C#j z<_Vr3yVTJhBO-IjQ@`g+g?NUu9}c@)|c)Jqu;45dvskB?W6W%!LT=rDF(Z9aDH z#8rGmay7*&Nd|r_;KAg-C4Ur>quE-H+1>#;K)i<50uKdarL$;@xQ;jqfP8sZ!ut2t zN}dRRk~qwa>FwH)@$#u6hlujr#1zdkm2^DLzM8`?Yr_S0)U_U~Ytl?yl3b%t9(KiX zKkGD9X*RjG(2OOasx&%d5k8OSgsK!MnauLQHUJ8*@a_Vy5Lle4Fr0cH!L4bQsUA*r z6QEgXTr&Qm`pyjT$Dps5#ynL7kGAK-nejpI+VmO_hnkPZjP8}|uYtBBjZ_~Ve$I!UuBb2)t-3kg&JbjoPk(c>!E~bK$9x)gJP+COKTP6Q_OgY zw{O1M_9d>^upc`KryLfBl6gtSww^0@@cNvy9Ik+Ux)?^nFaJ+u>J>io{IOZD z@_=&Jx^B&l)8qE7l)hy_Cm>)foq)crCaVs>TAFc5=BP9oQ8XHaM_Rn%P?X&Z_j1aO zGl~bqs^iq~JS^H_?Xj98!9sx7xu-1xsHgEj)_nlLRi=_azsiXgDd`s9>ts~Tl_jV) z{hqDO=&0MMTEqpgX9R$84Q;CU$3*kkH1mT@H5NN7*6hG7&!S1-btkHD3}_@G`6T~4 zmCDtAy+inEiScmqo}GL^?$pmX z3IbmMZ62X8Hc>985Iu(FcfjkWq|@kJv&M9yKfLuTL)3pj+NLdkdpNmZC+&cyy(bP% z?6PQQzR@F)_?JdMVhTY5=W;!Cq$pR;#wn{r%R)tk@HAI{D|Y1qF&3QK?~xo+sROx} zB=ctQ95vb(u$M?jtP)>VhGdDsUl zrNXY((i1BQ7!rUi_3_K^gK;jiXZvx!jas#&^bAF~0GqmBZ{2UrPDa23_!7 zh|%$*a`q<+tUB%{Rs|oe$-su;RtrKEYtV@CoDtTF_M_UB+%(UcJhEV$gu#vf+yPSg z1aszVhGRc@piTO)*~HPSN;B#-u!IejU>zV#BS9rLk+(yOi(8=75)vY6ZQ_Frturr` zSTV+x0PP*8yYWeL?P6&>hn|cXd8KahA(y=i!0}T{X)kO|!LKZ)UegiVOc=uJjasEG z)Y=fE zc=}{=-yBet=aM}`Ado}XAW(ALz+fXhrA5vb+(I~- zvQTAe*Qm?vQcDd$AeJx4BmoGdVS{@LfIvnYoDTBUK}S0iA&VLRtb@tc14ok6{>50V z6L}*la3tJ~e|En#2YVwWoYlJt&A*pWXA&Gf(@}(@zp;0(zSXXu2Kr_eZEZ@{t=g5q3^gklyI$~n{?pOvzW^|3~#g-L9F`9 z1l*Z*Ip?$Zr=tjqUv5rQ2!LTKOC=`uQS;nXz3a3DNRlD0#q z4D;?x5zTa8z>`J5U|V)YKX8m>cueS&wo7Q1 zq=maTdAd8Dc;0BX^5n{=79Lw9<6+KPwEyu3CsU2O`Dg%hml{mRfZGm2YhyP1tr-yL zDUo;vd1fYEZX2?X&9=1?1HOqf?GCy$W!9J#59Qd_>?YTe#}iDF$^7W7;&eCpM8elB zyOZTHgsdKQnHxsmGewa-^SK9aQCqkamlU%ChLHl%Zp}x_e3E#;e}YXSe%wFtRi2#y z7}qM0{o(9OxmcoAqXd-Hnzc?x&%&>~mbKzOR4Y8E2Wi5S>0Zq+B}PMdN{;zaz@k_x z66P$Z+S0y~@2M_J&Ka~@Z+~022PcWYm;VgJIT!x$y~J$4o;m3e!{j5M+CS#pdx0>c zJMp20lF8d*;CFu^07r0H5B#pZ%C$JYkMOm^ta}^+9Pt*IbWy`^6*m&syF(?BZS8Ca zzZi2+CEL-ZI{wkDWx~^7s$yW28ea*;S}D8#G(cOBUB*IyY;?y4{VM2BD+Eg zFqFuEf(G1pZJ5>;j{;l_#&u9S{pHFOC;6T37z}{rWT;}l~}TqM5}hciQG?d_{)9y zcn_p}>~E32ufK}ejx#9&dawE2In7v~Y~6Hzc9j}-jPO>F)NdEj|02}oJ;CmZuQf0f zf2WUW_N$}|J$fK&BXg2{Ylh!=sroKABtwiJ;hb;0-$)=Z^zMskEyKJE*uZHX=bv(5 zin2UK8syQ2I~H${Gf;Q+4rkA#y-G~?+wU9IN|FjCBTXj1OOkw0s|B#12TbxDku~0v z4VM)i+IBD(8C@EnG{xCQwgsM_;gK}a=(=k5y=+(0{qcAZR+`e9MO6iMtOB;D+J!?} z=rl^l)m5C^hD%(?6!$MEum*O2OwvKv9LNVK2W*#%Payz|?Zc0H61>UW_VYhz%uM+_ z`H_oNV(;Vju=u?;f_C|)KQbC_VNZB+(w|2JZRB#=C})_~O-tOAHQVxQoSp)P(z?Yu z9lfv4*OnN+_|$)ORpYFw=B8=2U7Zr+90*E0bOpyudEQia762D3N26;%^npxsg4zBLf54%mWJ{RHB7 z8^!lGOz7CXa`>S+4~FS7(PDQ9-dKo#2wb$APCFb5e^k;2IG(O%x(TlI*KL$s0sH`i zXGu<`(*-&C^r98^!xdi1zoOlBz`horzIZ&Xd>sZnnBn%DXpr&`qDH6Ji~q;*@co~& zO`La20rfbL{QNClF~6u&N28hVvqeKe=q6~l zq(~SJd?20_NcvaR0V_QJ zsYhp{NAq3PWc&eZky<0uWbH~(E>=C?_gmj)%e#S~v-Pcd8M3;VR$SH}X-4aW-B>kH zT(_zP5qG)uP90s0W*%Gp-8)1aQ7o6e6Tcg*=320pt>+&o?rz@do3D)aM@F;&Fcd-o zqxUQXvMdDIP1wjNTki-wM{P_sYb-bLNVqK@ZeKg6O@q*Tv+-1~XLPlw!sL-^ElJ@; z1Ecqvf-N(rO4)r+-rRQMIudJX(uOpI=f7UqOhZ!z#rZbE6y<&h8x8M1QA(PeB&;72sf=OP@L^ z7r;u^L#8s z-zIAPX=b<7j}(J<+eA1^&E>7mWiI|rZEX0SDGs3v-rP^pQ2*HD_ILI^gY@Cjr_qoI z48&nfjG8jif$fla$-cE;qNyK$H^C5KZHIT(zICE1R?hn?np88~SR|Y1Alstpo>Omq zLFl=ayQ1JLfC0!Z6y@dhFRB+1uJhs7!*3dw(<&}e#hHG5^Ieb?)bQNbKXz=BP(uJJgYt8WPGg`f@xg*@LQ2Z!-997t_dDt_ zlj<@qYYu4<}qD)l8O-?krYs_Is6*HmCEp5ITmJ6 z-40u3i@YCB4!*vdQU@8#7a<};zb2I3U0jqZ8iHmyk*jHK2RC*49SRY5xiowc=vKx7eS1fA^fT&o|Dw_aBEt(eZm@#{0}? zK9lAgEV}(S=qdeVkCDI|*sqcN-fXWu!BbGKXmLV0kh4TDM=^w69e8Vq9q5-!-AH;v zwj{fn@26?PrjL?Sq*gDIj|UXrJMYo&X_YNH$+I~G^uh-B=D#QM<^NB@n%D0O5SRr` zF*5|C-g)Uq&;BCfcPeQRv%A=xLcoDI2KUP72ezXa_|aj%0=;LET#l% ztZ;O~u#;#m{i9tkq;O1yGxu-+x|?CRKNzC8u>b5Erqm+5_|sb11+DMp9U6A3lp3#C z)Mr--JQA+ZeL|lQ-8~JvUZGX?GLF!0*Pgx2qbLfx7n@nwke1NTc$d^a@xmI`PR7VW zV41N&4toW?p#6ox9KI(3&ER*_N+w~#1Gt85LRi}|(Q$(XZ>UJu=#jU7rw@MLCz$)g z^MI#$FH7w2ZuVBB>@n$#K~$Fu`vI&y-4`=IjR}NeKKsG9>v(NQYp8gd)0~$9tgD7l zHEuL#8qa!EbD8lbCokCg7i$1_L2}Zef077v(TfQ~koA)5s-?LdbGx6p8Mt~>yR^+W zN56#U#8J2p&^g~<%Aa*ZxIG744zCkEc3^EAt}XEZ$riQUNeis6_SdQgcB7ouF2z9e z(9iZ^Zx{lB`=iJMapL=i0lcKUx@d z-eQ$hRc+0?_G7l^a}Lcm`~pZ-=Lc}GsyePFsz0w>eAjvuD;#@=Gst6ap$#lrKE!3w z$CBai(JP7e&CVS;X-mm@+DpY>Re;)Ilh68?@o@HR2ZosE5a>B}-dk3&7_i6GQutBK z(^-B-qvwH9Z!}^U<7)U=Vl?|Y(JO36kpxeAmoeYMlhey*YovT^Op}M`D`8R(BQDCDw|zpLA^D?jROx8XHxuwg;J)~4 z_Ct1v$9f9jlq?KM;blAxNe#b^JRfm*3By#!cr8dSomyGrB(HJ=pvFndKm*9U)A7n<0;)Sq*vD}0rv(`VWF z-3e!FG4#F`W53R%Kd)1rp8wIYa0+kn7FA{5EjTc1EO`Mu7cXkAH!$TJ{W^xu@;dG}})Uo-N4gBtIA?0}^awLIk=n>U{Q6jX)hP z${E!X+?8@xJwoB2i8yqR1gQ`OzOQ5dGB%5NWvImKOz@i%8u>Z}E&B8Q*Gp^D}l zVP^wGsbnZo%F9GfqZ#^YCg!x1#n#idVykJkH;DkAr*p>uZT+SozP&H@?6R@$!_Vg( z-4UG5P5zaabZo4Txt2PhHpFQKh@864D7@#ltJ*ZcP&BdGA7VI0{Ewu~YaS)s;p7D; zluJ517PXfauahSMg>bP@0%iIN(s~%0Chr7!N4LQr4b%$e~Q8kW4mD)Ob-yWeV(B-g4<4M-?$B+9DRcw$XN>{ z=kz&Y4rldp`b9P(kyl*MMthm-_`UV_N}*C}(_y$YgGm#Yez~I1Z%WIIYvkpeVW7W7 zLqkw5QHZXZ)67i6^Ylr(#1C^S@#6RaOkwV4Pjt>{Ck`|33DlSqx9az%KHx^HM`n!t zE)eBU(9>j4FTKeB1y_GNE=%YmAY7`qbc1kzi)eRu1!V-N`b1CLEP;0U_e)2iv;f!! zH`8#`QjK4BlKoj_5+-lpVVKmz7Wo%`{HTNlPk!_Kjp3yG+Ansdw?jxIi=>+^Nha{Q~?Sw^^PYI@&6s>i{jwr_DPBTD0UC7eDe8ri~5# zCIz>Xgaj{5ZK`i7DL}0)XT$sE#-No$1U7qbjS-76pRt>kZ2S%+zj;D@xqrRr6`g?rOf610x9f>eY#KsxsA5U*D*~!xG^MQ=uU_fR zOf>ysC}1La?T(2K=5wKRq?KnwIB?G^)v9qDG~T&KsAtx0t!##@P@%CjEJ%4RmaP+^F@kxmUfny4@O6k*gwhY`n3 zt$7zVTyIxHnbBF`GYa6E9nLNqH(FAIxCAegW#jn<&Ka8(Cm|{2MjK-VLxKe*yHg*K zsGhMbbMm(uwydRaw|yUP2rM$jKY~$4d87U$u{Z!Iz$x|1bt}Y|2lvwj12r)kDj3Q* zR|H!Fj_<#<^mZ)Gfu>~=Nqj4kdM%N2&Lo2!FlI_s9vMI^QI0Mzk}Bb66A0$+mhqMyhF2lBx^&+r?tTeVbhL8KjraLQGQl7= z(M~TMjCaA=ni!G=&zNy*$@M3lm7Od)vAt(*t^brQ54edG(p4LKBBRPIw!E+58gPQ6%) zURV?_R`GEOiDX1)m3g@Ej4DG?Gl73qO;by8QejbYtB)qa^!6=+1MuHQp-RFncYf|W z#o09S`;sf3XSDsw3t(`M&pZu7xx;^wrScAAz^Ep-!slIpY8g2&Pw0B)a!(ty`fR(a zfV}ist&7DWCuIymlTl%r-GmHTENz<&2S>w>T~!nu5|`<|f4%Dlw-0JXvbx`-OY&EhFgGt6xLdFSxu!!%58z~BH~yRqXgSD2ek&atL-S@!v+D7kF&OzUb0xRe0M zUu2G^f?_^1u*?geyn9z_u>Q8vFn-j^@AKzT1lk=q{s&R56PGk(MlhW8&1RsU82P3L z+1&9-VfIMty%1G9<0+HuT-`S2ih9ncy(I(ron&Po_!jxMqcP4jTXKl;N23qa4(Ghmw>cKD*#pM|1jLd5Kv|Q4f zxV`)#L$~k3ntU5U~Q+}*EC=6ihFfzx>TaL4k&DKYn^4wyJD3!=N^Jc-| zt_zZcCDi#l)XNJdQ6&-NB!B!JzyQA7qkrTUnPiTR3VqY9l%a{036e)Va)uXrxML8LT7Bm6P zpnFzN2U3Md*dTf;X!bB7Kg}J2Qp@Wd0Oq3O<(IcBDV+Y@R%aN64`YVkg;a8A=R8Om z?qa=l9$W$1N@uU>kXz5BuiKk+KE_uH0)u7(n4`xICfMeyq$09H!2a?0;8n1CCZUbw zVN~wFyGr@u5wl%Ij5-*V$p-hWWDrx8^TjOx4AM`+c{YsZ_6dzOpSyPrT-CZQpWm98 zHPFVgK`ZH$dK29mHdti!PJeeCbq8$T*_Brr?)JiS=aw7}J4OvS8}WK%MFMqj-^|h~ zO;6dETt^r%^UefJS9OvyPv4716l*wSpuUoLmXZnULOGK#kr@EHY(IlHRt7R{(JLC? zFugCyu2FRTg^BH%cy%Ju`7gJjtow?8&Vl}j=muK+YSpAr37u9FQad4bRfK_CTNoU% zb)wy45f=GS(l9^7jPJvMb0*y^gyYqvC8zw;T>S+$oya7c$uOr`s=sSE>bHnmF5Mc- z8X+U_mOSy*-&{xkzj|%fp8leODZZ`c-O@io*~cWz0#XwVbTHh)sctrstz4NByfb`| z+_4l){nbhjLOFF34a*z-L>SxPX~s$m?n52o-fO7=(mz@NU5d8KpE7eI_7Q^^=jx&& zkqK_`ycYJ)keE>0C_j;>;?DZiQ$%G_Q$81F+n{^@QY`x&TAld|=bf7jN+W)4%e=<`}U_0dcliV6siXC z&oBqy5}xRJT*z;?Oznvs4Gv@2+}p}+Z$03V%JV0$Z$ZJA1SV~wRm%a=%v-Z^&-Y_V zwU>9{*?ieH~Y8!jYlKo6DmZ^ zW$iDRwL8Ncn#JO`Ny3F4C^? zaC^pVJ@th^-5oXoL=i?FMKi`1bz-?i-1YSaYi`P`Yeje&y&ZeJaEz0H zMu0_#_0XmLNcUG4UfyB7(Hq&O-kuK`&m%RupQ>i(V|ss20UHP(FKZL)s96<*~&^+M&Kim zn@DGdc#xK(E9+GnLE#ctAVJ)H8wE{HxPA{G6IG;nT&+%F?~M1@ORcGT3D)gj4DgdE zJt23hceryuD*fgoNmQi^LvSFYYB~aGVrko0{6wsNvMI1hd;^1Z((dcmx#>Qv2H#72 z_l^*F&O8A$sMs%z1^qTBf0DF&Dhyv%)NpuiL21ySVBP zKZEOi;!|THcO`^!V3N-0fI<9Ry~JgvtZR8~wM%aQEd0&LkMtQxN|VlRFX|E6>sg$(GYInX9z0^1$K zfZGA@i`a?40C7WyN%X0QZ+>cy3I^FH0Ph@fWLwmyDnOE=a#hI;lYyMdMd^3;vG}s4jvm3&&$fEW;Bo89Us0Sc6<;P_R^s|haSfOu|3b5P=GpUP>>DNP24GC4Q% zs$*_E{^+}OH*|To(?x=zSV4poQ$YAx-IuGaqMvb85+MMpMtWSg-2S2MA^ZM{{nuhm zo$8g(-9t8p(6LWTsg}jm)|TF{r1KsUFKMmoea2vQn>mZG_I(XqzY<>3=wNzo#9NN% zCChOCOBL_wPl2eS^C=CWevdf`l>)?P&L~$9ym%*9jENdA^{4*vwWnQLrnK&eEfym@@4%-x)M1lDG1SxB|Pp2iW7R)1M)A(QU9nQYk? z^E8Izx%<@Dsm&ibhlCkzKyUS13yK0LI(naz;Jq|2H(|E zu{x&XvM=IX#cL9`6{}79zR<16Eiu3KcWToNZeGRa-(=#vPck|_LQ$a~fPeMWFRpf? z)ShC}$xw4%oSM7o>L4lhl`(BmO!}FGH>Xj1E|)KxxWjt|pWo)iy$&>%u)FS|W2ZJd z9cVQw{@&(g1}n(MImf&Oz~cCOeSjji^hWR(m>HR?c9L!yEI)sdot$mP1T-*vX^^ds zElW%lDhfL;*!ArE+U7&%auOXuRIXp*P$mw_OEO~R{s~q=C*}~zDIF5Xu5r|S_+}D% zajQ9gb4Rkj7RRh7x+5+DNaKhvUM_hVw;BMoP<3Lge5Teb%Dar@{+FAMw6w%>gt?dixk!+b$|73hpS0XGrKb%NaXH8-z=K#+BL*7QiO%o@r@(T!`O#e zMyQSAoYxke>sZ$u0S3|T<@^Vg5uy2sQr$Oo$2_Fhe7et?@q#!%$a+fS$W15kE>CMe zD_&~RJH|J-CH61k$eO9wjE!T`nH$GDPie<5A=NT!d9Qug>?hD_I^=HJwvaCaAq`i* zzFx3A@Y`K-pHIHC-|bD=te#L{|CWYensl<5FGrUztiUQiTVYVT>S`;`$L8L6B(@t3 z&0xceT^z_x;v!euZ?n35IOsQAJ6!9CFB6Y52`%QNBa8d3}^h3T50i#dWCKICsiU3Y#}KqZS0|@kan!ISl<%vtn-kh!l+0e(@V0xg?n6R! z>iR;|#WqNaq-bV!evqU$rSe@7dtB?%l(S6`yk=%7?Kw@3tUdqUPW9ZC?FL z-^LW(luh^22&Iz(Snf~~t2k6-GL8K$(<$4L$EDMiK~$Z_S``8v`pGPzITFG5rRrWZ zh%YOpU@dpcGiG9ZnCzxqXhc*^r5GAsRHMcpPaVbDxRC-D6nB0b_OT%EQm!i z;z7dgCP0CipAD;6Y2M&yS&u8z_h$*n(5=ko<-f1*8z@a&7bUT%$axT4gdqvF%kHZ6ePBwd0J<{j=l%V{ToG-Q>Hd+fW@oD!T zBJU=jBhonAw$x1ustLlusJ}YIRRHI}Fj@8#7#_?u1Wt@$Z2xpI`ZTT=@v>AwC`Xhe zW4gpOR*1yh3gfANyI|gIgF|Wx_lH)YByUx6AL|Ol0Vy)qJfJT=Lg@9L@l#tF=1ZV= zW(t+L`3pDynej8Om&NMkP!+D?X!Z;B4K34KsW}*?{?{4nqaPRQx%Uk!CZGPeh>`10 z6`xOFJc`mcGPCrH8#J$)9@WRxMryjh*_#Xki4PT&w}vQMFsh*Fht7aKFI2zU%r{NN zt8bDHx?AL2M-N;~DO&E&+G$~o+$}%R`ei!{)D{sPPcUBQVHAZi%Iwu>;%pa74R)9L zc!E=^hF|7le$gt{es5t8bU7pj->;2c<|pb->jyu_-|xA3nk8LjDnGa>FrpMr%<0*| z5q)hjY*nuLeO`2^4V1zK8=Co?zBwkA+2zO()OY@|z zkc2eBNMktl$I%;!qyc4A(r z2S&_h=1{jwG%*ukX~b|%i$+b-wZVb|SjnY-FFyIgYD5WJJ=)=3deYv!mBg-AqVcjX zcMhn9jTuq=S_IM$YSfIdl=fg-OltzBv_i~b*?bN?c6`Y&7afZsGKIqi1)q;F*#Iw6 zg%pqk2c1+WR~FU;S-@;>ago9B`y2y_!xD^Y&1Zx&FGgz^0=&sNuJC<-w63Z>Vy-t< zll4o@+DT@tJI#oT&AAOmeRO#;=bDUYL>=?A7~Qa)M2_qE@fp5VcEW6!p&pSNq;}K~lJJ4$eLT zU~PWZ4E(rPX}pBs&GuUNfLoza4+eI89Ml`$Eu1!690Zsy8E29@>{s?!wo5&|^OYxf zQnvX7$%n}chRMSC<)a&<=NAT&YeMzlL01w5SeQ*C;&w+up)@fsx2qMzi$K=+iymG8 z0b)zQC-w>D8!H@4KSsArCKQ?27|<*69bH7@k?g$NcR9jtf{o8=U$|{QtM_Sw~arw9izSM;B!8-6vAJB1$t5rkYD+}f0!Qn9vFH2 z)V9HAScBX)>5X68-y9kRB4F&F!a~G8hYj+1Uhe-eZ9}*wJjONXwSsBT@LqHFE@=xU z$ilZ9txOC9k>IQlZby$v`!TvE_qMIdj6@2s#t0i28e@v~6O`bdC<}2}rZU1Sj>!LHi#jw zoy=_RO_YGwtDc%bB`%`+_&ep=a>jc~y9%FxCkXXeE&W-U5*?WyOYeYZsh-~@0+4D) zks!KY-hNO#Y+`DNyA~h%eK_ie!E)4cOP_sgj}8M4==uGLDVf=d_Z(0`%^d8000t46 zRa;z7eHY9V(Z)o4N{E4YWl129XdWpGq1dWCK@2Jeg25mym~v-4+W^BL7LQRlZe(WL zd~11N<`YX?WC2xa?F>oD==&L^!Vj(2YUF5MHa>*r@G!I8q8}SSe@~ATx|#L(AxEC= zNZ%&UX2cNPm}Mi^ih%gSWw)sCifo%MM*SOy`EAY-kB6wrJK7s+UD6k!LTk&s83he4 zuE6*hJG0-H2MEmowb-Ib<05y1*F?U%3eFY{OT7RM)fvX{Rl;=$X}Hm~1&TYFbe>JJ zmlHNUI}tIj0G$3e^D%+ccX~BNqIKk{ye(O+3snIGS-C8mPpSp%340b=+%9CR9#&`8 z7n{5}DBf3d!3@5772EGIl$KbWyl&NE;9LO?3Am<`&5CSRFU*PtQCf(RabpDe|HrtbIlijipnoA+ z_-fxWDbZ2p$2XG;(c`cnOJKT@8hOECc@QR``u)dBdf}lq;s!P*CuFypex;i88u`rE zPe0n29MP5N2lg6VLC}^|T5%<+uxq_Nm%)Cye(YzL6F)`DH@6T2h|>UMXbw)Cn3X9i z?3QIznXDV8J}63LLHTWY>L+BJ)K7UzY*gvSueer5qar>_XF%k1k*<`5s$Q2OAQo$^|Cdlt=o7f*kixew)yPD_ z_qJJ12X2y0^y*Recou(t0y>q$%KF_^-D^}~2R#FNwb7{GDE zD}~s0kRhuDyL1Lj*90Iuqq=sp>7aSrO4x^^-A|{`UkL8taka=Fj%&(PtFg=i!}((y zV$0D&hzxZIzqpxSfg-!%t6lqXLOgf{*K>&C7|>%w8QlGJJi30`w{{rZ1XeZe`kjjtD=HoRU$j zC5FVnCd-M=-XeWRV&qyOtfUVUV_Buu3tOkJMV|D|qha2zWF0;J&U|i&L+dKrfGtJ# z#aJ@k`k)cr+KYB#nfVX<<lC@TP`15-q_pQ`E_#6u_6gr2!OH*~;G zEG-I)9{lU_C}BYhR!=)N7TCCK=1R)iT0bu--H3BqPAXmOOf)T{V9G+rN@R)fVD-*C z?KD+EQcuwFyx@cmp?MdK-Bp8MCgJq6Y1tAKhYM_J`_FJ-M~j!;!_L~vTW_><>}6bk zb~bp`IPNt~-d>{)2?)7gzHtPU_;1D$eE-H~jD>#2j-5)GQktN9?MvO}dOl#3A-Ycp z7*@of9mAIhdo<2Uj^~P|gG{Db=2qQ}oB0$+n5&+e;A#V|KF{Mc!9#}GRhq|6S;)>1 zp3VfQkSU?yV&OvSi~Kpn7R0ECaG1_xFzpCC?LzgeKcsP!o{Y*S&)#Omp5}wC(N-W& z7GhZNXZW2D-(3)MjN`hZu^@l?cZ8nZ;)U_C8XO08?RriRMUqzJl4jBCw6yA8^Lo(-G*TL!^i zUg*hnE{jm;Z86V4Q+uE{!~5&TKw>eyO2Nxb&C3kn4@(+vPhVbZyF|G|?L^|!;~qDG zTgvneS|_9UxA*Kv0DtjZIK$20X0s$RbvM$OiruC#{AvOhy51h`gC=jx)w?f zivqRogfKeNq?4ya{p%YrH>@%fVe-j(AY44G4e_|hw^)!*gLp2?h{i8Jy&zIhej7ze z@uGhcCCQX$2j<<<^t!Rg;I9RS>w}Ui`P7O1DshGS8An0)(hKsLR_D3>_1jZ{a<{Hv z;XG0r3Rq<6<-iypxUvo*CwTB}iR0Pkkjcqv*99nKzv0S(n4poCLwxpIfz<;U`4d6q z!&(WibIB{^XVGdL3OfP9p4h4PkODn#GG6dbWI^yv(OavC$VhT(pLKW&AHz{v?1g*9 zq^t-WHjgUui)G>^y5Aej-ubutBSNNPeoc!9`=`Usx@u&%%ZTz7P0>E^3g~cNZDfaA zF89~JUS6v&eO%RZIrFgM56J7j|C@jJ1TWZ_Wi5ps!OXSTP^HLK0vCUbw#WekD=CaOAA%QmnB zBca2|)3FJJ>xLve7_vGQ-aNERl6Y#UaNEs}(c}v^>?q!yf3PYPzM$NsET03}nut?{ zSqu)gl2+0n=sgfW3tSl`Nhp|n&umXP3m3ylCD<$faAhd>=2<3ZCGW%#fEtyxT+SV0 zfUT^^4N0)0eBh}me6=atNgL{c60Z@3Yiz?;zDMg4N{QdoruQKex^@aXMyX;XcgUH9z@S8XFa_3;y`AvswH>35@Z>Me_uZP-qaG9rIhtIr5nZ5A--TtU^u_M33Z?! zU805?Ym!Q6a;WGV`=FH^e7Lg8%1ZmOeony(&JF_T9R`+KinUxv`WpP8!@Q? zC(w(VFGj;;c=3o^xbuQ4&=jJ*cp2#SV)+Ju!#&Ubb$tK2S&t|AKmIllde8S0#Tb@} zci?{j&(ShChOe6u>e~UMloE;%;%8bp$?Rs+ynHV_wu6(#@IgHkiG-UAstk4z$;8(R zsj0+}0^z;$k@Wg+bcv#GECHT;mAr*S7Oe-iohjO$E;M?)O3GG zQS|+!xz)-*Msjpj)OQNH3x}n10o!GfAC*Q@nyrR-(VR|KESA?}nw+&N;gk*E6qY*M(;S$bMcZ^lg70MUiNiK(u}w1zjnr{u+%6?rTu> zEFGEmZnk{qa0UoE3flUrlJ(}Ss*rha5E7GmmM3ZW)q5mE5D~dE3C0v5m}4WH)gJ5e z#9$3Wt50#CacEN1T0+Ot7LdwwiAvs3(r1);51XKI8+LdX4?GzY;)`dTT&LDU z|9rDJZI+K!uMZ>he_a9ee1RphFd{)u#7GP}RvFOkHrW}^2mGjc0Hs$5bgZ%+$gzvu z6C17sqHmNgYQ3tl7D`LcUI}5TsFa+EyWfthsDZ0APfc=QGVF~k3)VePi{`g|i%Uh& z!HebuN0qipv0uqP{^~bLvyFc{10p1YOjCvKu5wKHdPgxljrr~ej+EkXkN!}vE0(Rz zVq*=s`LOTet;W>Of0jZ6Eai&}<6jQzzn=?>{NqymfTe6A!OnboirNpbn|@4iWP>^r zeKTJ0QCjck8ubggd<0yHRMPHDCXn(x1P0G`7FpxAt>NV9gaH#Vt<= zB9+nrkF2PN3yVuSie?fS@q&+PdOP}?luy7?kl+*HC-Z~J?8O-LIVIaE*r|Mj=83&D zpM4qcf)#~LJ;3H^+dnPy+-iOS12(V_5kiy&;9kbeOVUePGb91mG5JX?Trml@@MW0O z&|=NFaLtHh)9Tzj%Kr(F44mB#JPFykvxVh5fza1((Q#|Jz<}CB7~23 zzfbh1e@l2z4;eov(N1tWXKtICzgCgN8%w%`B+E5W2s~C8duI_>1D+K~?hS?%2BN{H zZ2I6VA+Pn4^!}v9nIRpWSuhWpo?A~~_}rv?dTr0)ViQnb;cw!%)lt5ibo{f`EMOq+ zeIA$r9Qxlj{(tq`31CDOkZBYy_*#Acj1ILAll$9iK|9rI>EyAOCi3c+LAiv3+mTon z*}Sq~`-+W2aBz<#nS=e;*{{U|8DNB(ZzII+mUOgtxgR=*Da;VynD9Y@(Qn4Mk~nLd ziDER3=rG9%s1OYz%ZEB5)5%CeJXVQzM)(>^h#+=vL-}o3HDY7$uZSk)1X=yloRj%$4sDCMp~bd;U6u&^wCV#`bq0+t$!%vGl4aLv~eCsQljZK;`EPP z(hxFaa=!d4jjgwVB_Nw@6)~&V7*?i+F`?x{&m%*DPQ=Me>4)t+Y&kMJ^Ars!CAFtu z4(jI)7~(8XWBi2?yA$dMLF%Abo>K?J(#g;^E&(w6-AUzU)Ox^c750oE zy|9$NKhSBU_5eIO=;!qb{uci9WE*SLag5&vZfpLcoDD?n6RsBK?shn*T zKbw8kuwq1nBH(k7iz!4U*od?R+v+q&#qho7Rj!I*#PQdI#Kz>4XsMrReu92;MSWh~ zS641apb%V&BECjPj8EyCCq^T_nsgD(B{*_|)8Md4#qfn-2G)J{?LKKn(_0&+Jusx! z%I!onB0L=LDR|WGuZyLC23&c%&s94Ao8a*;lTmmN&AfhlP%dk=d3h2M5z!;n=ZK0m zLHJf*OwUq=8IBM$f*eu=JaA(t)k;{o$SfTXsL2? z{=yeT)%lg{MIa54H}j6I$9&W*Nqwp48-{*a=GBH-_Cn#7FR^a>M3Y&;%G=`*QrolRyxX8-cjvLK>%glLq>M4oYau&66Vs}eNg)tw>ejmEO zsHgm5_0?ri!I!SCH8cyX=Xj14>|2(5F(d7X-+%Q0x5;#MJahKE$7{LWcP9E zolB#AlnvWYZpdNX{gutU8qylfJ4fx-Jxr{lY?-gf@#fCSvVdR@Vh|e1YqdKi^};Yq z174~03Wfh3sZu%4Z)5a|{&UjH%A!PW5uw&~+ZWSCu`Y(&BN=WxKT&FWX_y<r_)s;57S;S1W+c1GFkttHsSz>Iv8B3Tk@D^-NbAj@b((?Z;l2q~Fg{9(PXP zsGu^cSkls7vtJ%AYOAWj<0KWpS44)x{n%=U&@w%x>NFgNtp+3`$`vPbqK$jrC5yHrO z-VxZ&aOYsY55!8w&Jw`5((Y}R0L$u+Am#7xSG5|54hgpXcibj~+J@g(&VROzXOFgF z=;{wBaHRIf(8%?t@j85!4E_pIs1c)ws1un7=h%e6pn76ILB|&QD0_uX@Qj_H)jau2 zPkY9#lOhkEhWv$lG=q*2c z^Uu-S_t915Bh_=gU(f&)57my^1DMP=2a|C)WVS9q=x3M+DTLRdnRleS|< zg|p>Cgs+=XEk^@2R!6y4Mtb?Q=-etdb9CKl4P*7(kCD2lm7=H-0xfW=Xn6yvBLw}f z!Z@DO85Um-MaPO)v-X*74q^MXwdvlh$$77`yI}GPldsRtYBZQ{q%671rB(e&0KWsz zbt@il>C1n-S}l)P>rCvIpMv?_&4mf@o&*LoHy!4F$l>e!ipC+?5G1ONdjPu3-JppO z+76Ey5qjdOd@j2qr6UP3D4C#gs8&1=Vl(7#a^^T5eY5ZfzCVmXrfq1Y$S_^J=vBR^?M(ii8&;q@K*SH$PWHmC9Jo0B`uMLCH z;mcz?YO|`Z=9Y#C-xbB*mrMw=b501?1j)6$T<%}7jcSh{!lrIA(_Js#qFvG$hK6|UFQ0JB`sz9|K76usc@;5fl+>5 zQ)m*_@w@v(gCJQ6DSuLQ&}C5J+%3e6mbSBG()=vPBL?{aUbuYH61m|`SRE)$cIG6L$w^bT9Y2Nv-; zR$}D-PCcMTCFbLjl#JE3yPVM!0_^d8okmYvT&y zxIMSt4z&OE${O?@2*hw>Y|$gqjMdVUDDz4FbRWK4e3diIb|fKfV47 zk?={FT1C90Tb}m~3teQ=tX1~mQ*us1z<(+oS_e?AzJ!Yz95e_9n$f*bR*fnYgt(Y2 zC1>MxPgsFBLSG?%>v^H6Wxn_A`nrG(llEd`qIgEcBtQ26d$Fo|R z|7fr`k1&T>fDdZv7{Hkr07mEZ19ddZ4gjT5E5+h_&V&H>ibG;Mu2)nJGDtydNPk%> zjY>|Ot9CoJS?9G&m&w`cCH#B6POwUWdAO%>dbY{=L!D5y0WBe`DhdrD|NWH)T?Q|r z@sRo1ab;vmc$3LfEyLu#4W;uey;DQ8;q+P!l`27X%VnxW*PpGPCiAs6k9psL_*c%= zzcN=?WVA@=%eu1W+aJgJ-{M01In?7;jG(|0XypJL$hZJh0%+c+euBqUEsE4Iil_>D zXEqRai0tjJH5)8m4hf1t=J&fYk55u5uAVo*4oo-P*w`$lW&RRd1b`a= za8qcnsdesl!}^08V-pes_g!4v%HYpg{WlBowRjE9naJ_sn7RSz7I;4t!IhauQznQZ z;VmiyultdJ@)jfYYKc-GlxJ?#ruN&>f^Ia{Kh}(l-@AX4EQe6g<>JM>jTC)#2VAcJ zD#>YH^M{n~S+-d4+ARnpa_<9r{KUcBc`p}sN8qjiAB)EmjQN%B+F{(HF*g7vb4x)7K;J`wSFFJ-|CM=_Sb%ZEXr7$D+E< zi;f$?1L_}LrQ&RCm}ma1Pj>!40UZ;uj~PZCQvGzfp58E^hV*hY z#0O;&doEkeC7>J0-Q(j3F?qxO7!7OeKmggxNJ(nMMbJH0Vv`F<3jKDB8JKv@q0lEs zYB|mh$Nt_a{$_n-7C=TtQEL4>F+$Q;Eg*vd;n5nV`(c9|xyV#jyKKtr4xCQR>&l@n zrU|~)`6Ce+Nv~UOr=HEax01Jo#w_T}1>)k)Ptdz$b1M#yD>cJQQ2@C*Y zL3>oVKOC|_t70?$rbyb;9}j-68D&ZJFV^OW8=B^EQI?vgjiY+sP;=b{%eUPN*w>Gf z%i~IyeTA6Xn1w-oKUhYHAF|8qEft-#wfuuUhH?gVrlK`0K zbfdy-$aMOZ6jq(9lp^FaHP&RrtUZs%os~7oXX5|k$_(IY6M?I=a#{n_Oa3QQ__)gr?ZH0ECH%_KSu^A-YFWg-6SSpNc~aHZF(`$lFFN~q{>;k8fbB9m{%=vKBm z$)0&xQuOx+m6yieLjVvm8Tgs9kcP{jZQc)}DaJ}L(eH4LaX;MAe@Yi$HcJ1rZmJ)- zjN)xMM&&wNPo*wt&jYp(&L{BWtx0Migir?(GFd)fCI(PUf>Q9r6K$OT4^Tm=544OU zBnDapQ8_n@G2?dNYCWHx9mO6>Q(~7}lx5mQwgAvtFV2-qf(q zWK;G5fREhmi6D7ui_VdR0zt8q9C8!XSYgagD8}K;5`FR~vsCa#wbA=cxNNe%{Z@o>(@f^(@t|5CgliFrtx14!KKqx^Z!R@j1XXbxcm(y&1V4&e$e z0LG?AoBr5ZwxNR8<)yeh?@i&`i44E*Q}ni6_t+W9;Bm7TLa>q?_VcmYn=aj0byQ^f zd1Uw>q(2jCBj?rPy|Y%#dFGl z-b&!ci`}&%l?PcFecM#J3d)r_!deuq+(MTMlkjkhift^C65<+GRJf_D0ok4)bxm2# zINn8k+4^$u2cpsEfr18s#j1Z&_dkE}KfOH)2p;{F?g44Ni~lMx6wU1>2PtdY$Ml8! z$Jb*-m6DNhf^e_SCHIN0h-Lw*kfx(F$V6f$Zg$c@vgtJwE1LC=qQ?#E+M3wf>jyQe zsp6IoKU@8HSd`*cK}yjJT(Yc&+8ww~mxCk~cp4i~SCwYfR)=Nr_eG@MH+7EKv1hD6 zvLE|>0eP|?cxr2UjlDF_Z~6C2TbvqjMnSfWjQ@UF{1^AdV)OXY&IPJSWab|~R)>X! zLCs|9({}18=E^{r!i!I@An(S+LEpQi$r`Dr`wSE@ZfN&y1cWYUi~6J$_e+TGYA7dV z84Z>BDI?R1GlOr{;%p3e|Nq~WYAN)kEZxO5I4&#cP}fiBCZIK7D(+obwzx*@5sAeH8UAFH0@NB%(ef2@;*j zZ=SDvTeGr~vJ)A}8A#21hm%S?xD$PK-ji5=2#Qv1uW=h{JpCE?)5wzd&jXx=1RB)8 zPksIS8T>B|Wg_%3Su6*NNdUsB+77hbG=C)!bBXt@MM?(|_<170(Q~|puv2BolI(5A zYs3|492jaYgzq(D^1I`VQc>gIB(&=&Hy^G1HHY{qV0I-*mE?~AgRi3d;?tfY4hNuc>!xQ`&>oJ#OTJp zo)L-gt6tz&^z%0*Ck~)Y!OFf|q096A^qMB|DNz!TT8$|0tG+9DnZULA&ydY_8+1dh zw`y*nk**BhyB&%2Nu!Z0gu7t5@bkX3dq|<~VfzLZZuaV5yPHM`?7RY+S<|2V>c8eB zX$y}gas9d-C>U*kLV^l%_{F&Wh3NSTN=~XwB^@C8@=UoGUBhXl5U>;Qw>fdw(gBBqL#Wv`LvHbx9&Rw>0H!N^2rChdn*^u;foS6w^N z1EH0qRX8FE!itj!FpY#Sfk_{e_a0FI4eS+zTItSL@Q+DAioQZnzbztqwM%+@RhS7XB_{@XR-KqGQ+mNn)-nsRLVqX}gHRZj)zxf=ij zxSTk9JD4q3)G*vD*zx0=LSVl5lmM$#9VD$-Q0KMwc66^CKbHx!SJ)r(blLW`BKTTa}x*VFG+zoQ7+^PUuwDUdDeyveLwcY>5%d#tTVKO3} zNc$2JoqE3?%Pu6Od(>WIIn<>ynElK5=bu_j`!Ur0lW8;jvF-nQq27=KR}bNL36^a( zCIGLMIxhnqGP+Yp*^aAX43ig)>6UyD>j^wfJ|P_m{3Xjz4IP?UxM1{ zOfBuS%t}Bb?&~+oq;?J(A5UxCULizUE<1Wc5WWLOJ86w_BGGe#6W7>D`G?uc zw^Vm)Jqh;^`*6LBuEYdl0-mache{! znHCX{*a8BQbB+>~oI!HVIW|p)f8pNlbMHC(o>T9=|5d#zin6duKfYdThB3z&vkrOP zWoo#@&hTfsll8MQ%(Ov``^A4m)<0kbiR=|r9 zVuHsIzpVvLaGZ}d0CLi|;~uy9C|AH<0Yf(K|(3@c~VLLT*j!K%NqXe z1@PZ*-l=22=tL#IFj4j~yaJpwKbAQzXi`5dlw0)I7II9mGkM<5tWV=CuelhIZ+`Wv zko5XMV^CaF^zMtIM??9|k+9Vt?avb7Y$H&f{yF(q!t$d`okDmO3&x~_EXYTa+7 z>y7d8^PNlYEtyYZ-E*AFFvRI>oUdH7wd3K{GUyvoGtaZ^ec{$56#tW4zu4vrY+guf zf4|pwYYYkdvg$s^yYjfR0=w;i8QYL%30Y(O_f^qFPjJ*vPCBLiKQTz@A6qk;TmIWY zitF~?#9lT*-C#do>!Ealzg{)ge-7~5tWCwMlZmqBMx7CuUbB%L?1Qn<6_!)MJ6$vOj7X4 z-=CipM_c{{9oAX#`3&5TlLAhQ56Vn(N(7ramWwRdL=KD2A|E{@I(^^d)h7`_>kp3i zriX<5I`7dsuoYWPFpG=JUkZbnkMjwlk5&NWyUQi*b?|;?=XgjDW~|vuRV5AooV52` z)2nylHuweLORY$*qGPV#c8Cjhle9D&xFT(@yAbTn_H%vpAF<*Vl~@>R@L%8)So6dA zbPY4bgR=oguyse+);gvAzh_$2@*K}dj3C_Qkk_&+gE<21?CfSBoj8H|s-IfZ?6Y8t z!nxtZ7sy=5bpiX`yLKO8`;3cWiCPb2mT$6An8vY2CBXr@F0Q`4*)Q>m+Vez!Cv)NL ziW947_J#+cB&oyb2E~VTkUW32oW9x3pk0|liS6NmF9ze<^Sk%XFVAP|p+U9Ky1zEk z8lYM`NBJYHgwXP=(chfsR=5PL|tN`c?1th(-+7;CrIc$~C*0+uM;fyCMvS zIUBH4*al{$brm`hW4A0!I2wc8$j11ixKo`vEozhwa^!DPI8T%`6XpzCR*yzgvG)#q zDSZDqbo}>lkxKEaX^8mMeKZC#Xq{wm|2%p!gYK?^rw;^2B_v|Lt2%VkwDlg$q?_Y$ z37sRS^l&=57o`IjGB_c1A)I<(XuEhvCxqV+Aczh&b96w5>RYf%()n#r zbbad}9%v-K-lT*@UL#yJf< zGwV+DnfpfR@dz+wjW0Lwb`xSfKxR1Rh92_(q_Up8R>A6#tWiPF2+3Ys%`7W5Ww@P0 zl4-&vpz~$4pWM)j1{M9|zW(a01yY6`_tR8~Dgy6+Ukan<>TLq$CQ~SFq+IREHN31K zNbw}lX@&W!eVaJ9qXdmtu)(fhurN~g3v2Q26@GT9w3ttLG3k56dKrV6ytEam0e`i@ z>MG#Lp3=q*yTg2=Gd))@D|XzG`uj?A?2yCO?JPU^(bu!$YlS0`Mb?8KC-7?%*IX)R zSO`iFYdlxr8&EZz$Nq=N%1n>5Hngk+baO;W<(!Hci04^lqx2^S-<^*sZ)UB|2jGsQ z?0FHGxW|40O2cDE6j3#9B6?DE?6taEyS0Jt_)h%6e)X5;!4BZp=yBMWiq95ial%#E z!84c_tG)1pE;YK<6Z(Wb2;uR|WxP=yVx*W!X5l0y_YP#s&)qkBWMYb9&UsAO`e%OK z@bA*?@0;S@K>VjUnuHgbQirsr?&ygB}~Go6uGXq?$C77ox+E+LQeuw zNsoPbnKnRN1uWHF3sszEX*eGJ1j!V{IL4Bmp3S51>izprx#w!sXZDMYo|?3Y z%bWCm6t{LS6b2yp5=wi%SQAsSM+JTCg&$&^ouv-Q7|dQ-eNcMsuM+J~hVEIuPM72# zWTh`Fx0<#;pOq?n?P4osK8V7kq4+is1k~V$tL>{APwT^N@>V4ojF#+EApj2~< z5{_iyNAd7{qHORf*v|Fm;HwPAuV3$w*r;@9q>FK9%VwzFRM4n&Qr^l_)2t0gw?S(# z{rP*AYP_jVE=)%TE=sv0arTPh8(t8;lA2b1n(6;^uJ8Ri*H*-OZr*G}*^3|8KAM<+ zmJ4ttH>Q)JRX*puKjhyUu4koa6E0!@Sjc0VG0TW|W%nLo*I1QRFmF(Hj9l942B5Wk z9{owC)SyAk5fxQW6NrLiFElh8#ldX!`hs$KtENq_a^b?%uEUnp+WQ_5&_8~-4eOxY zZc!o+0b$!|BdE{$cNV!Jc^t5tov&Tnsj|!`;>T3&CJP8`z!oZ6!I*N{lpZXrj=kwP z-==zEZ_Ax4YyY90#||U{j5LZ;dITl|!YZ7`_Oe}gCeTfyP$E2f9Ni?ty)vL5yY^+h zb`J!X!+h9b%lLup2e-l*us>(TrJWMKDA00V6qcd2Bi?zKyk1rHW!>xOu< zsH57m5uq+s8Eso7Z(_T*PJupxhE@ zr%f)`0{MWdKQp%NoJp=lA=`D>iy)mXt(XZ+TIc0|p2;q*r*vge+I}Kcd>AfE+7u!q zJ>YNAaq^kauq13X$$aMJvo{gi<__W)q!uG9hoT%)K|gHM8O{VC-SOiFWI!t2{FsZk z#ttFQ`^S*^4zN zzbNNNafcG^t19p(el<{VrlXqmbCy_Ls%%I04aUV6_&|w%_+y-5=?CZ?=URm4dQo^^ zgJ46nkHtr=s%5$=CP|`gkUC!c1aq+9siSp}DxyLf-x_r6pa_@dPC?K{c7)$0O<{>l zd}9Ygb?)fvM!LN%AjxJ;`aVNf<1ys}Gv;@3n-^+*R)fiCRv%#g_bqM8$zLVRJwS4% zvHh8!jIYQ28Yo}*uLI?_&NrJt#t|pB`ygoXQ?8I7Qqy1DDSamw1>?86`2?a1*dn_~ zO)_1KP*_aCWDNC527i)Nl9mM0+78g#fQhm%>h42|y9Je3R<|tXyN3Lg5&KIhowl`b zd|ooEV@D@6fggDU*xD<^de%@2j*j0^@y~{KB<*XP%hwUM$?~Fj5b!%xCwE&6zRN+} z?;f}|P#)~_VNUB&dTe^NG)wPylM3R9uE(N|MrA$%USwaX2k>%XpA$lr zWO6+$o_8Mn$jHGz;1ZJvv$d1NE!8|yR1!Vd-*D?heMI4YDjn>rU!TMvDdAuBj+V6s zF)r|df);($PHZ{rQQQO%p#-W4b?LgfJx~(ihIEzRILH4VN*kwNrABVoesoM*%t zv)%`}pEFr%{z}BpESTSM_h|4|Q$&=aW_+g#VqzCHWuNE9{bu&b^7ZnS6?R(S2>kds zq`Pxvv~s-4k;>H{9cj;Ipx6EX0*YYt-sxb@a1CC0=TMyp(0_+XI3@4hYd z5PU9^Gv7%D7ZT`jFWx1Gqb^IUayq#RPLIO$h0lS%Z?ypvO}CFGO;5>7_wB}XUM>>r z5Zva%=UB(G;C6@wi9yYyoU#;{V}H8CyeUL?qt+3PoAeOzvBI5C`l?nlT>EEq1e&n6Jy$lj8ddLA*k=UDgwmni5IaL zQ%7@5$0DnscCsF|Ea#`$3*WT7D$FJ8-e2U$o~2-3i1Bdra4w}TIk7H zh?e^kF6;T-jT~Ak*!w|!7k#(sZ94sNYBODo*l#H2#vXV+6{+5|%4`qrfcQU?$&}`MxbEZJJL9S=Uc=Fd9J9~xywDPa8?oE3PjhK1*N z7Exf{o=$Wvoz2taGt2aX4z)^=v}O*DDZW~keqL|F{u{4Az)9NzRW>n*@&!Ec=ksj*xZcR9H!L!BSwrOq zTE%t~2AY}EzTQeF`iTDllaYZ>QtsPrGljztVW5FT5e|>am00jKv={@}*6?Mw=J>kqea>j$34IzWjL02I^|9QP<0N2a8u;{-hA zM?=Ei#OfSB5FJYr4m;P@>@4l^hYR7plC$5WN{F&q$r%3rc>VtA!(WNzt~^j?S%P7K z4~p<7*jw-?mBFtxb7{Dyxp~sUtZYQ{^}V)p4y9C<3NsDT_}%+97}^*QoZIZHWSQuz z%c+W4;?mL{?@xT71<=9Wuv?ce$`oHvP4G+hQ<1bU3#9j;xXQT70ECn6NVl$q6R~OQQ)|JP#y>ut(@AcVy2(K43xCuHVCyCIDbfY_xZRrME@E% zZ76gDS8F4K3{TozkkEW&4g!}x?vYP^S}%;#EcV}@wy_$3s+Y%rpk zaa+6IS#m+VMn`%(6uJKpT-dQG3Kwoebe%;jXr`cUkp`HiZOowI@JIoAS&L9Kx}@ro zUJQrJKLGBzw5!I{UKjFGJS){+yEXR#Mpc&@}WIH&^n?%_bGDqTbIr!xqsMMj>dBjnP zR$qm#?L>9b=1`pswqEoA%Lm>v+xjusu>F=nvIej05Bwo#K%eBX=Dl$YsUZ1}YZWS; zW^m+)t0qqi@PU(hM9KL&2MkLEa@_k{Thlc_$*;>yQdy1Z&k3hQpxNhAVqWrZxHjuT zxA^drl;e+bE*`SsBTBHwZVl|L2GvJn8_snFh-;&F|KmHqdR!qt=N@x-2;{JUzXuo$ zE)CyVa=OSB&iQEi35yiU3t4nzI=+5{rtvEF6FVa#!~Ra(rT+o5csFNgy>uC%G(<)L z0RUI_>JKxjFde4}DU;31ssUYmDq(kSR1fjI7p}g*DcWd?qzZyJXxnBn$1;J2wwS(p zHHvXbjlwIouhXq}r}oV$v*r*Mv%>%l`2p8|1V?@l9P8&KUN}|Dseq_gTvAmigG zZhWc|Yx`zXbv|(?RtV0CSuyU_zq(uqx)utB(xb4m699D(h%#E4&~q8RX*mYroZ$YUSqqy z@867ae-W0uU}4nFeWju99pqAyj0_Z$-|>*IOkB;1BL!2@+|JBFVoLOhk)!99%=^~6 zLqJU^@q$w(ujH0GLmr(|+BXH8?GaXSN)LY6Z2naw9CKFNWJ}03wgV^)TU+|AD=MwF z|H{Nyj%TLNYfnWiKzp7O|I(Qt-TOMj5rl&*rM2%h+O9h>6WY?4?i&82q!{Zqa2h2e zu|GTUjoVG4)oC6m37siWvkbNb8e$Vkvwx73-YW(BY+Hp;hnc#Pj=H-qi1@1!(sMj& z8|%0BU2GSezZCt{ZhcAAXuze0jDn?m9y9MvKBvN-94^6=Rx&*zQF!i5p@HxI*G% zk>8?2cP>v3gCSO#>sVOp0cFi0(~Wk6YHV;^?`i|9)~^$A=E|#@9R|t|_*0!4wR@)s zBro?)z!1?vo`Gzm?aO8YP=y1%tzcTKc<8$L+<7~+m&3Qyl*gquL_p1ByEmPnO_ZG~ zgR`6~%7Hu4!SvmiF0~F;J8Nt}M*uyrbpzXB7e3c25Ze{l4o-3dn`FgmzDooWHk&lJ zVo121LORnX)X9y6j?R=TT`|!6<;bv^HwB#wG}xV97Ysx^v*z@aaFbd!rsRz@^q3V4 z-ui3K@b|C(@|z@3pgG;T7FKd)Qr6Mi(;CQy=D`25Y8l-{GSzxV?E(w6$bPq=8AOU^ z_={h<-(9Z;)+%aghbYD@dLG%_S%LwAykUpAMs`%ShclQ`DdFE5vq85X#>a3jMc$D|!V zb1(N$>T~RiSCuG^7? z0pNtpNlcXGNsPoTL&$(4$1(F3?sxI?KOElAN|R5I#Cy++jy{^WB;z7Zo%Bm0J!>h@ z&7g3iQ5^kKZGX`(QOHCEwhx$+m*y-K0NcnFb4~^lz|C8p(vU(SG|cJXZ)^mFIlV|m z2t(0QXIp%C#@JZGmZ4J;p zcU1sf+IFY5ku8zy1JCf8f~E*jxtrFjvr{uBvzJ%5ip0@*yLr62t{{6@ngvJ!QU+tY< z*{MOG7i+2WA^%l^)qQ;txmbG}S}51eJ|&lW0kR^w{9ZWm`s)WTg1;NLKYZu_o^IBj zdT=>>m~{yf_tfMEJB14E3P}q9Jl}CV?=U7wx$|Ljp>~KSQhfTF35}A+`sZ->t-*J` z)+qpTWByRNt7c<$BUNd-7h*VFt|YH{a&TFAr3C@;K&H+8hGuJD9it!=S{cW_F@MW3 z`u)>~0>20fl|ZB09wVxCau9Ix(hW$aG|mjOy;jsax6erOrHhKXGsyLteP)uDiHgDN z2VnCt0(_@7D8fAv6_VawjB(7hcqAeGv-2VZvLPiKO2na|RMK%bw^!0*Rs6ds3)QI)|9GC*M=hnR!k=lT}#-!{0c=cHlr^(BmT*2?b(*Ami%U2;X z48qgw$KShz@|rpoVEYYMk(i<00+)ex3XQY&^4k4p=5je^HaJ;A>@Ly7oGK9pO3Pz3fyZ5FG~mAJC)#VJ%#Vn=LwEon(v(^JVc< zep6>OV>`8%a9Pj*gM{N5k28C^?S0+*;-`j_Gt(NQ#f!Anc}1pw{*nNEWA;nA-w|D# zxiY<}Or{Xq$l86OsMIy~%6Yagi4@NBdbax8jA#cmUd)81`Jo=@`0zuN%wms@cJ6|K zQ$eP7QA&o#BEL~l=>NVFfP9SdEia(myz(>Kwmb?85!G9@Uk-xda#~vJ(%s#{eW2S zudY*-7+g@UxA{{49xnu!L)H1$74QaE0IWg$2&jYMz-+L}$~%#(CFqR5FotuWTQJUf z*ivJsfq9I^F?;_ta6C|ALy1pcw=$25pEXyp!EixvG~zE(KK05-jlk(%b$>J>oArDa z))4(hz}cKhX{a&2-XZzq$~hZq_RbcqdybP!evW)IpMI1o+aRnUx<03)K_k0D7i-hQ6Xj}W^$z_U1eXNh=SAgtn zHn$uI#Vs5E9}ww*m=6HueA>C6+u|fj0zLz(lv+b{6gixh-FklULoR#1tky?iA;G9E z`x1Wh)waGbN*O+N5mME&rfM%cXx3;2v%d3MB&gB7dYpUyt42j6GZljAi#QRFO+%NT z6V&(mYJBIO@QOduE7=SO*>tE_6wcqNc{O9+99!|BN`>}9cnkKgo`r4`Mj|)|(jS|#MKHshL zRV6i?HZh&AW4KPccX23eV%Bi?822$II%`1 zwP9%MN$uv&yBF8qY@H>k-o0`amliB_w5t@WfKUWlGQ_wMxbHAxJs|K~2KTeLb%#3O zhU1@6^xbjn%q7(|{0}+ep3&`J3cu6~CkOx3_bs!OcAW-_2FJHoN#T!QE3|d9DXd(W zy5L->Ol>YmORGJQ!3y#*JZTHm)ozcrpK}(SX|d zJN_kE|6gXGFM4#59;33yv~4hk8HDeuJXO*Tf78UxAowCMQL4_Pu(F~1Y}MoKpBA6h z0t|R?Ut9gef}Gr+hwS^a=FL6)QLnX8t8jvdo5-PSd6g)421&)Mz!qyYLwiY31J-a= zy6Q<-y-*LKYyG>mZkW59X;d$}@Yk3Mhp9^th`>mRodECclUfJ!As3wg%;${B>;k5_FwTTmu+&IIshyI%m#)Ccgjv_^1cOPdl}3XbDOrsxLmWQh){Gx z;{C*zyz>uWg&JF6e0D6Ew@5L^q|)1`X`R*+XQrSjy*W&D{{i!9;AEm8WJ3+(q?Zsm zlh^RYdHja-fNgt2gW@?a_06ob8 zLb0qTaZ+C5vT2Kcxk*>*Sht?WpwMj%@}I()Yz+z@_O)LI{NP!8PD(>ei7?cfHR0YP z8qyH$0Jc^3cMq6_PUQi8=-EqddgzN$v|(@)T?x0Q-7*Y+s|Q$37Z(6-YS~8!w?g^(7I!mAH$26CZ)~ii!XK@HC3z|8poh7B=Lnfz^;8 z!#({~z_$Iq6ytXJ}S3U@w4iSy;5e>SV#g`FGt(cGla zPEygsD{b!3BXihS7m4qCn6-;U#m1&)`5e2hnGI&^1LUi}O6bYRZ;l5v@f7$7(1Ybn=NP>+^|4l zi!BD08V|JxnLx#}HsCALM$De_Ac5Gl83I{p5L)oeWVB_K-hW(RUy^x8nNO&UIe>Ln z*F;bFaGg6%OtL}r}D^iU8i=I7oJPnd8*8Ck<|Ht0plk~4? z%`*T>C>Q>gT7bImT6Nt!5t1tmn9tYVF55(POHCmkkxSSwhF|O!G`66EWYIV-KV2}E zIn?U|61n1Y4vb5XtP91v7FR_rzKOCE@zYSNQh$`A^^`KnY{Q96J6tqzAc>wkZ){O0 z~pX&VThlC zNb5o;7NigOU8+{}JuWYZF~+FU#dLb?JB}R;z{enx>zeBx2NkFwyFG8zlC}*p@+Vkq z{3yG8c^Tuu3I?tR`1ekA6O*3jk&PC$+bPPEzVWr~q6CWrLO@Qqb@oq9g6s<*`y1Wx zILJc05n`E&y++uGId=qR-z5%XPJ@x+j^>f%{I1`hKS@z&OT$#BoQ6^I{EL#};(JhB zd^^E5X%Z9?LXVH9_)nv2)+!oc2_ty3MCuu6&fbT0ll}PGd^y4+=-Ol*HTw#4AwtE} zCd%?-$^~`-A0bn&caX=)U7fDYq5H(L49pOC_ym!S)|b81s-U^M(MqO z`8)losm0d@Y>O?QmEL?iOvrB?*NhOT*(~kYUQ#2-9gfuCpRvtfMgrktNGrQPny=KTzrnS5)df`NM6U|Rt@=pHHFmN#76GKB$z@%TdWOspvPEy zeAluI;vjr3suMdwYtw5cqygSOMNOm(;jreh^yVAN2**yT5*Vfz70VCl7VJE%T&VgC z+w_Wz+yUz{^xWpSLKyA-uCV5!{MF{u|H;ixR0vG>BoC%$O4NIOryl5p6E5t(KqhL` zA*J%xVlSF2F7J1Cb9BqF3rB(W9Mdbxl!_mUjj9$ZS30N3qvidG^s2bRX8&Y1Bk~5v zJ95ICQ)k@+1RdB4TkigJd^P@FhwX+`!QYoS^~|cCzBJyp6%eY*MAhu}Ugj`NhPP%jy2p@%tZX5q|1lXPRa3 zC3E-H+^yhBE)^qVEyv7}s)7T+d8&!nTOp*6C&F)6kENjz6R!`e^ZrCW~rSEwab zT6VgIUlghZQvv(kBNEv5jX_ zAJ#U06DXaW0t$7OJym5p*ZLK^9jJJ`Hxh0G=Ry+Q*5x3WSBFK0Py<{%-bVoD{PxE5uUPcd?;>WR`RT@?V|&H;9-;+_8^Wc# z&c4_~HZHsnA68W%!s@tod9msc_;3Ry)n%DFMbmw-B(6n$DNHv(?XX3wT8F^)qBmvl zcvOn|+|fMouKBdbZW2P{7eN!Ke3^^7p5kgY&Tc^uA5U~;U8DoBKTu%&D|Upvb6lsM zg97u)BJB$nxo0rqICg`sW%1?UBYs-kpppVa|y04}P_0n|cft5p8O zG-`=zP)2+^w89>DnakJC+kX+WrU(@cbuxK!QKB(7m7==OI1WDV0lb$zOnSqj0!w$* z41vZONdL2-h%rjCl1RFYf!EZ3H=}pgQ>Zy?x5Fcq?mS-HZk2iJDt}?79#UO-?0Duh zRy~SaUx+;1Sy21IQu?*^neMSl>HoqOR3z57554VH8m~pb;lZD<-72@Q(@x9 zM^<&tL~#Sbp6BCz{*yPN9GS1bLnLqKA#J}R1!rH{t%=c(%$SL2u)W*QRIkEEA`S<) zKQ&8M9}jBv3@|+t;#P;ITjEw9n$#m|!?irh$EP;^)v$okXU9_Jbii};&Ud#7UE!Uq z+?j$Ms}ip5aiCg1;Yf9NV@?S!)O_RG zP;KdUIru%-Oq2 zz4ExeufomE&6G5E9Ei}$%4bx1JdLnm>#q-61e?fK!(-q2DT}L=5;9*CEHIPGgrSuw ziV56*sAFs8FQr|jMzh@Gt*+kRu@0?phkC7J%EC`7v)av7^<~KQktJY z-E_;`d?I9s#w!OA99;kE1%QlZ#^Epbrj^%i8T+QrmX2DUJ8tbEG4JCA25EzQMaS5iDi9}ft2~hUm9CG= zW>_{{3v;ck6%;{%195U;fWid!CkSxs1KiHho}gaI0MdJeO|g6_C1#n$yt(-x;xzfX zCZXtlwa`H{#Nb@r8yeWbyvZx&Y2D=lpx9<|1nHsr=+uwy4SaoEE&5^F-K=vR-xn?V z@~c+!OOD5E4EfEbKM z7#iZra7S3t3Bu2D*bX8h18mkX>zo-MHl)M}V-B!7GmkSTfGl7+ZbVU0aT)S32>Du*2C*bY7876ZHC(Xhr`hfB5k!HeqT z67+=25x$`MIzgZ+*>PLk1Gh54J%L+yY5i$|(&&&OU`_GTAMkBcJ@}Gd%n`^x(>1RX zv$&q_oRvXWgB1l^-wo~&a%SR_bT?OM;(=w#2A;^$7zfYTgV?tJ#B??y5S4}=?e+)X zk8R|Wl2vnU!L3pG@;UBlnNceB!WQ8WU#U9+{8}pTGW)s{80V@$t{TEv z&zL0pW{&!Xa>48lTQNGLS8plv*3gE5PgMmA<+Q^oRv7 z_i*0oM=SH-MZW|bh74yH0Th!A{O46W~Q<+5cKn(1?luG8K26 z+Tb~ajsvHW!5Yz46;gBs13o^WCh*5ZeJ(OCswT|;L|_y(V*68?+DmMM5g@L}kiS3} z&>8A-;naQcKg>en7!5nLk6aK}+}~ei6gwoZ{IATFUaY6D*y`$x#npJ$AN5U!-oQn@ zp7WQBI+Y9N1|)G^F;Bj@kbL%(U*cwwrM6s3I2ez4L;Qq9<A@jxTzpNu({bM2Vm!`mVcaphY`%qC1Y?hGw+lHBwiRik!S2w2!`CYV z!pttCd6t0*ruM}YD)`PBT zEGhMesYwe1AB%z|B?BAXA}czP;TQF<*2@<9Fjqtl)EO@Q6l?~^z4C?!R%&S{cNpkX z=|jY(H@hla)P$2^s$zW(RJ;eHj&?(4kz?vREH0z;BBQUoo`h}osjD^b^zar977hQL z{8r%u-KY}CESrxu9xZ+Rqx!>V&yHAIbwI##UkNVFTA-b(BNsT{uw_DHOm(T7H6tw! zwoPhQ!qE7x;UFCR`jXfsHLU^nvF+0@n^{UIQ&ApP7s&Y3P4zn2CoF(isAOu`I)}Gn zji;WPS@LK#?1y?ss^EsQN=8DCKyU_cq~G+Hun@Hj|0`dy^$>nCS}s+->WQtfT#L@Q zI)AXtDs^!VY>5oXA?$>4(^9{qAqp9DnGiMz3wbypWT|wyxaC?#>V}^Zi<3MIfz_E; z2)Sb(t}#I37evKUjahCrQ}{X@9kLOfQ?>8#V#N7Jol^4K@lKZsxDw5?IM?YPQ}`pu z!yL<|O{pS)8%zZWsh$VJ`QH4O4eKA(Rms3&Tss~8rLRdL{?qZKJ~(gEoK*3J9G~)W zUK`E|z#;jvasc-BO|PsP{$LpVS~Q>|gxxQ(@S)Sv6D%5YU$K3&5Hh4NQRb$ihL(Y$uyFJ(`xg+0beGTs#0>~KN zCZ*VIzmu?a!uz#@Ccy@e+=R_US2(ZKs-Y6q~ zqUBKq-)SG5nfUH9eYF13bq$*4+EFQT2z6Rc<7#%ybr+9pbQ`uU(Vw3yrknH+^Ne^_Fn; zju&M-9->vppP7XLOXO;S)KAHLuzPYj_%Le7x+)V60^zUG};*gt-fJwX4)s z9gGVxJAD6UmctS)C%j?Y2;cnXTL(6lJzZh)|LmHPReUeUM_o;d9qc$1rhi5H$&vQP z$$$RR_9W4+?Jo@rCoe5;KrGMUISwN3zliBNYfl*|vOe_+6?oHjl+vmjV3f&TiE1KD zfdWk?aviv?Q3lg5$|mQWf;B?af)g^)=pJo{rVqKHIZu(g=R8!nRG)ukJ{7do`+S!p zH$gz$Up1|@Z20i5TrNjb3*2%V{Rjq|tzJ}*i~Uk|<6XnW!$H^&%b6z0k;}WQV+^g& zH_rZk(l;rbMklp;x8p92FFdUkwi!CyYMvyYK?a8P_yUxzLXo;wW+wd^gueIoPFrs; zGFqWt^fXS)5R)W;`iTx@F{bhFMDk`8nqb;Q-L_{rnm*$;>k;AdOdnSsc%50J(aLs} zBKwMu(wv%78a8_%e=BJ^Ku^cazccufZQ=bZ=;^b2!0kObT+Tso(7u_4mO^TGQYT@L zT{4&p1v9xoq|Zzhy*Zblo*H6VL{YqZ^?Fg?ll$_yKh0xO-0_e6gKfYB1mZ(`HU;wY zuy%se2QS>B=>b`3Ecnp*C&p=Se=a~uc5u2!*}{^-?vaC>;F zw&j*xm9QWdh-V(AKv(m0FVvpD{%)<*v~zQ}x06G#Wvzse{6dR&qjTlA7r+$;t{%;G zVMPghi0kCH%^64zgzC9Q*sh24(ihqfetvGRSWJ>-vneyLDoo?*py{!-4_7I~jB2_{ z>`>g?t8toh#>~|^B`;}n90k;~Fja3az5wez@55THO!UiNQ}}su%*vh_L3r1YfVq|ZNUX>;hcG7~+DupP zZuG>?9jv!ZB6%5UvU+pN&aHi7;h@(k0xGY^g+kz?bl9#{A>4O|#2Rle#7-n@&t*%& z=v_Iody)ymZCraRh7iVglr=oU_F=)Dl9e43u$}h0bJX)HqGONxG`g76-6)0L**a2N zu1GWNOpiW{zQt3OP4&z{nkptIS9UGD@j`DI=_k*B`MR@n91UhV&J*$XptojvtIXH! z96H}aeS0{%)h-PI%G6%M&Ns4WlyI1iVOHMhK zw>cuO&tCvC)Ej}BK` zIm}=n#)sohr>qjF+%&-mUYvpfB}^UIfps(HMS2ginxw>e%n7-hImG{Rqcrg}5jUr% zXW33i#q>3aiuSALKB$zzzQ2dhAPyZ9UK$-dLiyCJ#W`$*)}*8DzaxZ zPfU@21GuHeirbt_-As*~FU5V5d{DH|qvEIom|>g7Zv-x4FOy%wkFcwS4;je?flq_& z^5#z?FO+v6KSnM<4noKTk)_%9(#wnS)nZ`RkW*1Hwl3ugbFP3&74(1{>!-RZv4OR= zbkPgXP%>)0uPHNi77L25SXb$@gZa?yAE_Ts_%y*d1xU$Wpay}^;sg2(0Wh55S9)Zr zTz;Bqed*72J^z#@gBgMKpXx+ZU#sHR&N_24lqTcDH>i90iH3E zg?7F<%SxqPm9E!f2n}{K6xrX?c=^&Q%=68LP408y%bH2u#a}8tI&ZJUa!Xh8ofk(> zp0c)Oyw5&C80uM{i!{7nmlY_0H>EM-X%ZgPV`z^3B>y(E&ZjHvHK-g@y#)F)MH)n2 zy4}WZCe;OtQV1B7fQ6S2*}jjy+bHABF14aj)ztaHTcY)B!y;bP-j_m3Dj*j_&&C?x zIu6~4A+{XKmF-%#cS@7=A3Jl&hHCAq(zmXlO>q9{wQdaG_7|mUd?B2REqbKt7t!f! z&HFYHMS#WZvc!HOkqx=My!bjK!k>td_@T_v&jEYR`iaxT0vyGe^71V$fnUH7GFhYI z2`BVZuQd<S zz2VuRKtZGgi;H_~^`scT-73($P_4gQF&8nF5IY&s0pgla)+0r?3ApbU4Js#TZNVT9 z&6jK}5&oL$a!b~Wr-{7prUy(*&qIpOqMMT89<1i5hWEsLXiuwv_)@WiY7 zBKxA0>&hxmq-w?;2*iR^2sNrxJY&uyYg< zcFIoNrR8F*m_VCL@GZPlPRJb_X{6jRc3ciEtK!t zg^bHIEL1-M0)Xjs6D~Sk{s;pol?8hbze=WR)1LoA%fuZii2N#`;wv6t0slS(`U>iEtCKT;~Xk5@GxFy1g)=xZx>2VMv+*TWvz+_*jI z>D7xoBDu&4-%XG$ymA(Hb=;v9)!6Ske$UY~#LbHDtj8B=(3*Wf&)OlNSp(NNX()0X zNOd#v-je9X+T(XP1kY#qSK=|eKJPghF0@geWH34LX}MKH+QM6*{vA#bUUN}2dV%vN+9BgwJjax=jG%$>}bUhpX)1` z@TlN+t&r6(+6GtasMKL3u&8+OyzK^=NM$pGEWD;si+6j6m|61 zjL!!`A~ghDnORA?PgN{OM=a*W*p* zblElC?XGmleNi%L9T1)w$m;(B#PKAW!0BM;HPYn!`>JWpPpRQf@Wq50)eI|p!ZcV= zoLyvV=h1O72)&S=fq%NPr!`<1rKs<_l&)D@gxzjc5Zp?-@2RtV(@?{Hx}m1M`0eKo z^)$~6i%#k8g)mFbdj`J2Duj@X1gEuf*>Z+P&ESR%k+}^>u{O3B#V;W7bdXiEME2v* z`v#~>yYS$B-k`hyR<=&bImfRXQj)H(+Ue^__)xIzynNl;Y#eeNO8K6=TxA9Kh88eJRRnmqT4SE zZV5`JlrXsv=0~dmv*Bn;%)A&BYItZWY1(LG-cP>*&#eJG0!oY{^{u?MZ_Uco6+9v5Eq?kS^L-uVnq znJ(!@?X5{%CM6nooe9_BZN_d#!l#ivYE2r5;`3UDIE(WF#k+~d9wep9!*7H88wLys zT$X03AV!GhI(+;PFPg#ot>U$U@G3gHuFN!0rg-rAr7SCTxzl=%nCjR|IXUI=>ikAV zm*g~Oc_M!S7H`S%?;HI6h<6&SmqSafD0Q>*h}6nEqOYy9Q(9o&%?Z^j=>OCyt?9* z=gZ>kT6#Fo^lc9O;*n!S6crc)nM0?q{3jVig$+Co5A%17g~c_)+4FSzfgmHaC7E(1 zr^fgb5C>g=Y0&eBhdi#zw&oF;R(!S)>R>s21X7RP`(gz1jn9Y+I`O~;MZrp#_iT24 zOUwOHv6#C)@38J#mZ!6YIxa>Rx6Vm7fKFL6b6jiLVYg^e7C>C1 zEy$wLTF!X_S0&a9FK*y$lB1Mj*2-l1ST_dUD9s(V$`~Na+If0y5(Drte_kbhl;#iF zbB#wSd1*>WR7%!$YGZxppPWnMYQoYBO+~5EVl<^hhQ+k(KEjO}MsNp;1UD+0ITR`fH7ddbkamsi&GDxu8n{wbdnD=oMb~Ol zyw1c<>k(ZG+PUNK&X)gEV%%+U+P2f0(Hyu!-Z`_EcX+B{8HT`LA-@~@eJcUYB-fFT z88uq}flyVF;QB|m&UM_a3%#`Q7N>i4rRVPM6P~S^X(b5!Ldm&UIB($t8BD$gbK(i_ z1K17oRaWS#f%EBr2llN+qMD@~C|JkpI6S#9xZ5%{?n80w6GJ>Z3~r+;Hua^H?0fi< zj2wQyL~D+1E_~>+-rZVR*~+(m$$I4*)n})RO@uSTB)7kxDk^RO*+@DPtn?kWEK2mE zxP61HF@!gzR@0P(b!grW1%G$kM@z*i$?NzP-Gi|jS|)3RQ7x|)_%=CK=n8sx87#F}ATYJ8ffO-{%2>zAhr zyowzY3}lF|h^HSxK^(*C8n#uhE$`ba@3 zxoPBXx5KJ6Y~LI|wUmlVD-BLrec)Jy;8D!9|o^o(*q{bPEHn1(?#hnfbh3+a9-Tbg$+Rz7e|XzDqa&(&mWMr%;FX zL!O=f&~StXu;N2DlWZO*&ML(G?y!2K-JU(tdUJA&h}R|}AS|z&nR{@L)qL-+x6v1@ zorM**n~}s%VEFTmD4T{qJNjQc#@e@cK%vwW$4RU=y22=A{;<+wG`Z9_sG1Z<1#jsl zy$`kpK5*x@5xd9KEM?ZhBo`+*dXykll8U^&hUVb8y7uvYay3Wa2LYS^kF~dsihAGP z#}9}~NT)~$3|*ptG)f3VhjfD|EiK?sN~bWCNGl>DDczC+A}uf=F*Jxco^lwmd}q5M|sMQowW`F&$yB<>pD^=94q-(hgna_A{@D#<5szQHlue?T{ys!=-3JlScx8TODowaN$b# z!C{hhK6kNYwXdR^c-pUY=EEkc z>_<4RqTg+JrL@q3FK4rIByJ6(McK5!@G;@#!d}sRRfXy&n}{k^=cf-H#v%~Qi^frp z-FRz=9oO#pe3m^$-C4t!`UMEouOeMBYw{zr3AE-uqCYT2qIy8LwvH|yNvWE0X;80S zPUqe5?Eg}S57Rew>#XF@kJ<6?9)@y;oFkpKFeCoFqR^V}=v`+C=>4cEluJrIxFq#l zbBMf@=U8Y)^b%Wu5u`T9Oc5m-?m7RMyS?_%28eRHCh|<^qrU23FmYvbzX)u4BY3=7 z^?-_>^d0+j-^u#P``uyHg0Y?L=Eir9c+Q7aoHg^tvM{td%3qA-#AB|~e(Qn@-8y(H zX1FDonf6Ds(yW9zj-La~cn8QI9DF^9GLepZA4Ej=SFQ1@=-?;|A}^D1OqMH>>Kob=P;T>E8M@8%Ki20Br(IOHoo>u6mJ2PnKv`g5xExW1WGOT!{c~ z`1avo33~V@`%Cn#Syud7uGMAulf|wiw-U~$=Xxt|#L1i=S9mj$8gIq0*emX}4^N@GM@|wWE?L0z zPd<<~XIFPR0DYvgpT4O0**cKRedd{w4n|FIvpOt8!UV*nH=}zKHl*P$U+Zb^CkK$F zmf^`a3ty|j447eU@bI3JUD-j`m>J4zfz@iYW06r3b z;6$)LtUADc1gdg27k)2$zhR2jTZZZkCMBLxvbL_Z**?<{q6rilbLDDVDvu7t)Y!+e7*!x=fs3~n<>l<2&MjBf<{?r{PWhTr0j?_aJSF#FS!ab#xB~#&wW;$+(|JJl zOs&#HAi2nQ@aXbuuwDWe;X2dS^QqpOh{7WM z=5~^nn5h$K6K}nWE>l$koqnmEo=Z%PCZ=`Ynti?pP#ClwIS#Q0k9kj>NSS(#)$p!R zU+|)O3rt**i`Ve=xo`lV6v7kbIo%m`#aeu$EF)H+$^myAVrE z={o5h%9?B`jaRz)9~;SWoAe6&f#lTC0I$;6L61I~uN^dHiYZ zM|*r!Q66#4|8Oy`+!Q$RZjU-XHgEH1sg$pOpkU;M**>~6Q51h2L}8`pvlfHg+7B+- zx_>?E4r_*8a%Py|mRXXz;6-ujZqhrEYo8Z0d+%wG>bWGx>vRiRPglo7?BSX2kws+* zj0@zB^>!~8Kj%1H0qK^&Zs!rh1Y|{@04b0%bsX-?dIUtw3cJYbIlsMA+d*17Qf z`EYrN+@z8vfYm%J#iH2;(`cL;v;ih7$I6v8?O0XyI-TqE)_PSl=<>rYn;1W6IA3mRc{QBPQLy0LN|3SQ-*Vqu)^(#r`{7*M_l(B z-gz3n+#og!F3Pau%vNBxTAKFpUvg9Fi>209dm+m2TpBft(Z9?aTP(p#z@j|)u*Dy# zBEuQJGthFCu<^6{RQb{rk4y8RJ`T$#P(WWH5ns&7ai%da_s##&dhVdtOs{TcU`cy+p0Wz@On9KKa0t!Vd4mFrrwv+6@wp;Skp?&#p( zcMw}QWKHoD?pP9xpO~1i< z6UgyNhU)Q^ZG^lbFCI3te7y%ZlivpX24_^`Sw=^j(}1cqQ7;gfA>cQq4zse!0MpnY zt3+I;(Vm*?gYu*#je#nmvHqCdc;sj|J^LKsEgD{uZ3YSNVNN;hMbyNAuzt?3{;yN< zcixNUH(VN5k?#;t6_wj`zkaNG9QG7+b|zDR&Q5s-$hr!)v(rj5&PT;NDc>OPlh|6) z#~m3=zAkI(51x3=mfkfR1~(DXbqK7Fb59YeUivD-`r5^(I!b(wtd*3eCzXzENw(c$ z$+pq5y$q1UR8j@w?O0+jb_8@g{}je&%Q&%YYwgBbhkA%Z>-i@sXE{Sw7UVeN>Y|pk z%s1DYO*@5Ru|(c5t1@A6fQhu_7nL@1FnD}I+2ixpmL;m%V}LKA?QK!X^K_8hQRlXR zWTz|9_=XwK&1>OK`ph6?7({s!CWjDVQM9SHooj_6SBT}C+(LSiF?3REXmK+L>*H>Z z>&B3>TF0EqZ`hd;*2Guzm5gkY$3|98bb<-@cT8Hn04o{-9NmSlWlZA8@NR$HpL$3; z@U_OoXHC4q8PZl?m${rAIbT3nLwSca=Rir7Oehi@4Q9nQYgl&`o^s*GyQXq~?N7+Il#%x!%8ZZ^{P4 ztTL}TjDDr=UL0puu#V_VdTSf*?{9szzkvI^>7mDSxFh$#%XDAsf{ud|U`@Xo^>l_* ziOJVT0{9dkx%Kr~;oSaCBq#-UiTK!@-bjyQFp%Ysl_Z|)hbp-08YBii8@p_juU**e z!O`Hbz05N=JYCn_{&)k3*qR59BvLCU^XoKQT1tvcVtC}c9K2( zT9kxsrNZK&7(zKFStha^ayaIL5&w}Z(={>>O!_@k`*rrY$7AJVV#gyTX`QAEgnAYu zELM6huX?Vhomvmx-1oiZBr-pJQM8UrwY+R4N23JY(H4KK%{l)RJ<$`6GpUQ&Iu{}Qj*iPlGYU>_W-(2{r{pDh;wBNCC37)V}iB{Ep z(=nU7{0$()YA#eKI=(CSM$o_pbAq+gTwRLY#_qnI*NSB>R_=If9P!?J#&^837<{wR znKIdZ-J!JR44=hp?2O&Qn42cU;?5inr)JHGqXnC5Kk3M{oHqs3i?Z1M#7oD1D7Ai! zQQ!&j$U&42`M_ZAgNrlrFqX%=L*a5OpEHG>N)~~uKp&Cf2slXAzL8#xQ^aqth6znQ z7WVYK-DidMc`e^S@>*l@48AUi#*oVRJhV19_%tk|KRD@JBR%p6S}kY#Aaid-e5uiE zYo_=baJoF6H4&CN*@atu^$N^rP6gJw*!cq4ukXr=UgsQmfN61UeS)&gH4M%s-f7jV zi${D#+vVSCbgI6Um2Oq#917lhJQ1s89pZT5#AMV=tup)mFs;6K z48Io4p(maH_CD~%DM$IXL8?GzU;XjaEJw$)y73{hlh`r?2(J&q6-MlDn3>F9EhJ(|WUE>)EdOOCMIFVCof6 zNuTW2+%7$MH>LOwhy7aceT|>R>s5l1=-R%2}E%N;v zw)8gIi#Jp8ud+}F*l~_09N9`m%BVMwl3bZguqi-K@W^Z)*NCFT6Pz9nH#|IBZMsig zM)i^OS1AC7_u!Ur$V-kh2rA>20M6mOegd+6w<9u;2+Zhz7j-UAu)_j&L9rGEW(!(Y zy8%0rCjtp<6`Im}6HZeSsOND0&rE)+^TO4DngO=CCx0EF)%~LM4EOMZ0AO zGmpPi6sp!<#i1E^%0FueeZ%rIOpkaNI+b@Kj}HiG%{<*EJO(BW6#aJkZ!YMknm~qV zWZ%B`x);xMB^=aYw$<0X2ng3H#YQ`ws&5&|GkF{?rAG6vNg3~pbb6)#8hpKWzIpNVgNh`+LdV-26B76@pt} zww!qMjj!nwkq2L`tHku}<-X~oaswefyq14De_h45>f5!Fe?Q411)8Kz_PtHNb$BBZD?An7!_>@{0G0sM5y6#* zjrLJSw7LYlh)R3P8Xp)J?CfY(P;UIuXTo+K!p8gKhBle^>bjX46x}8VD_(9p&Z-JZ zGlMyt4_Dx%c04$#`t3(OngI;Jdb%&Q$dFof9fA~7a90^?4&))Ib!jki6?PAlZa-D}@EDj1x-%`oGfv7gS9zf&E8YPqZs!qSRrm+|@2S&E64EtZx=kvP$ zw_yFtZ)9iwlk`8lby?p7qrO5=2m6bNmz%T{!Up+`{#=sKPkR znVpUvjcO~sBHfD_e=vcaZ&=dmDd*lpisH=llr#2Ay%2%}Hjdn%*4X^ab;nq^xI&w! z>tkTZgG;gzprp&U=e^^<-*k3*5tldq$N85)t#>pfHaOPC ze3rMFek&8zo~6S38JN+6?L%{Pn3LBj^o9n$Ja0jFdaoVDnb%Z~cVE1cUyo-R>+jEf zr>?P_l@N9+S>pb_okTJeC;;5$UvETRAa`6uQkvU@Hzl9gGeX2N<0$Rd0B_xHZ+Av&H3?mg(x8wHuq(o#|2bSR>jS5smw zX_smKu`q8m%g2wpRp01zXB}_v%+nuC&1PkWbN8|-#l^LK^4B@3Tgf5>gby!f`-#57 zlzjo?!qH-49yYBo=-n7#wbY;R8kcTEqYhs2b4_Y!P1)Y((4#FPcb!)=anV^8=}`$# z6_^ZjuzcJC466Loo+JH*0m#Vi(5EDC{ZBwv$q&|(`Ek<{uzITF_skdYCk=fQlPqp* zJ6h=C*TzY0--NFAIzDv_%wmH5$SoT;Kf=RHE(?PC+kbgy1htfKoeM(Wbd5%C-CU>@ z0M61t60D5w?y(SCRm1e|C(cTa_9T}#^BT(@iGt(Vn1gTB9`P35vUA*T_by14_cvs= zN4JWD@nq~{`@q9K=e75Qfd&b8a}28e z4!UxwYwyG{T(0-tOg}xOiG8-K&|AlR=lM}dQofCKD%tn<&o*kVxHBGpt1ajg``*A^ zppJngQ^U)7Y+j=2;{zgvIyenrou4+KVDoT{TMoh7Pgi>(m{AQ4%dUhs=WgA^*VD*E z1(#D;Y2P=^x?$ctT2j7U?Cp-Y+Z|W#s}?(dfmT*!cT@HnVpNLs(97lD6+1@{KzDj0 zF0XZKWigw4^8)r{KH$e&>s}?GoKee08O9<(8K=yNe zP)hpxsn40c9~0o=pxN@|<_SI;5pHBhNv|;>MEEjf!KjQRNE!M^J8AU5Rb}bg5(R8gDaMyXf16@~Z>ryD!R!49VcydRtrUW~7Kv?kVTjU(a#$7!{4pVvdp{6imP`HJpt+`QH#Qx0Yu`lnxca>sekh&fy84iE^w z(eGe-7m`x0@a8>}Z5{v;PR7e!FjX$lJ~{nh_U!6a0SJmI5SU_Zbr!M0J%P)p)*38^ zQBr{L&OxG4=h%C~r-bL5L=Prx4t{`QEDSii*_t%#y*6kj(%~nBhps2Dan_LcUX=zvzKe^+>l@U_I}_}SvLG`aS#y>`P3cOAM9=qaX%0r zuvO{)U_cUdv#tl*VXhA4;*^{wxA#TdSnKoUbSISkez@&y+mlOu*@52sspJ2-+ z;9SfMne}W#H|_)&^vPFkWvk!{WH17T1NT!Bh|go5Sw^`rUgoB@p0mt_si(vHy|{>^&=^u8Ql zQ1uqMtpq=QJIzK9L<{5KB5;_YY#q}2B;O04c?8Bi))^Ha6n1+?C-|b#>||XxPWs}> z;&yJiUD92B7$QQjNoPjTVz;MY`3)+%y;k;Zs5*IpX}biy5dO=zJgANj3G+fjS3lmzi>cxKdh#9xTk9n_v}89Afinuq?2XX ztoy=O$l1QD$?>m8$ZN>@+tnU@Cl4idGdjNj42)1-H8anl&YstaL5`qyRh2QSS^&m# zVkev3wVQ4HFy}^8*xJSWktGo?3LHSDoCD~GG+M5@foOL7b__q#;WoZ-^|U*Y2(7OO z1L1-MVXC>GFP%i?{qxNFYLaKi2-$SURbZgkcCxJo_Sid2nkgrI=BYV3GQsj9pM*&TU}MZ{?-vGnkkqBhH`*R z=9I0U!Ck}t#pztdg=6B&6&4gLZ^UW2#=4bkK5kIDT8*TQ(=PPo*RkY1vuGZ7%dA~{ zZ9*s%fk9_=KYlhgye}}BMRi4g3oGjNG|GqXyGb^Li&W}s!~owKCt+K&+UCL6n=WxB zl77w=>(f@@j1-|F1(10*BtOM$F_yMMn@g}c)y`iiEZ)rpH>>E6n-%Q~%&WcVpBD?s z^xG6yg#&9*M$_^3j`s9;_2|2|7;w}Xz*ddT#7+L1OQbKHtL-xv49jEnARcZkyrS3{ znD(kI*(XjL6$=}Z4{R@vjeI0jd-tu2$3Ug-jlsAKCLPQWI&&6KAT2zfEdzc3vH0Oq ziaKV2Ib4z4HT&-V(?5aT-_^idI{@SX=jc;BQ?NHm^~|;3g?+jx!8_t{M^caYDqEqN zfEmRmg>Ru+T&(-|{vVpp7c1esOb5k_siI?%rKn2Bcgw7sl%jPXRXsjDpm3ePc2n7W z;VFl53oe%!E;pi#g=`5H%8w|w)sYx|E!2@q8k~xB9IoW$=5VIC&z&mh-Z{|iw&M=C z>RioPoOzS@3fI3f7!~$55xymA(bN~V7AYi^J?8S4aT<3ytX&`6M#*pI#RhD{YF93L z%ecNLjH|BiWn`=M1MAfDPY@*Md?Xgl#zU&*K?5>Mn>l1 ze|FT@wYeDZEQBb(I)BeWEGh1=WYqVh3A66#wo#fdUjUTJe{#v&vXM20&aPJK9y`Xy{4bfLMTy?U?DkoFzw3Ra-{Is_A>&H2-fJJm3W?!q zbb|<|$Nb3$70^n17Jz9OY76p2ZuAQ1WJa>8HCcT(7l)+JL)Wtb& z)Zx21Ra0b)FIpfZ5=Y%)*}G$H``#Bd!%p+WwR*q5CVDJ`XUVCvb~W$pO6VI${p)TG z|8yu?VLxqttvgc}4pQ&LGi83C^@zW7@B)&d!`QDKz|6=`?hgtP3!|1vSJ_yZu0c-8 zssxWgPJYS&vkECi*hbZ@uf9 zHzG-Qh2j)ig0u`6oT!**D~n3d5$_k3P)n31zwydc)5ixzpSf%TD{;o7enOiVk6%TU zodlMXWi)v#`m?OEo56$3y>;v?T0Xf%^KMca)d6?gt4bdW172&Ek~`>;^BV*{)qerE zU#{ezABd!Jh-&E{MX}G(i#Xg}MN~Ojo)_@E{qAGDsIoEZt|AY71oWH^QWp|$CWaU- zPN=4aoD!HNV%BV=2$++~J4yWE*2AUOMWYm-p9^$okCR{E<^-iX9X#pAb68IAC9o>7 zK%>nZdYg`|T<>&|?j>|llwR{Qyff@nCooDg8);M8;W2nDo^Z_RR4Q{4y}}{6^6USq zE|2vy&O4O;{*(S}AXn^sXK>TZd9)P}>})cL_&y)LCFt_(Q-hIM;y=C2pSOKfeXc=Z z&bkwOaJW8Yh~M~>F2ei4VeGA*@n(h@&H9uT&R0^2T)x6h8q743&Etg7M)Tq3(=l@s~; zv)wJp6AJ5|$PnGSCMWjSI?UA-27HJ2wjrIRh5korM;+N&Y3`lRNRJ)#u3>y|)Uu?+ zcjItN(2LDp-+n#CEjU(H?HNRr|9q}nH-L#|yixM@xT%Mk7-rQ*x7DisGwHbt9a|^= zB+C9_JpY6b14Eit{S000F}rKf_`BaLb2jWjkId>sxlOJCPZc~UnxCp%zO_@VI4C(f z2hy4cmZ6C|FRo_V>1w=4{ASxXjd~GXcTdnc8AHu%5v6H_N?y=KEfGl`^6JmEMRfc| zl0O}Mp@$@VcckQ;Y$fyuy9vUc%_=$;wm~qWB!0ksrOHY^uf+89BlX33+8uaM(OFPt zdtl3D_yx=_oRiaoEhg^SZBG0|J~_`R!LzSv3<4BP56tStKS~4r>AyGbl(gcEkIa1xYl^|y@6QbJcx#*nG#;<&M|nVHeE5$ zlZd9lbGg)sCETS8LEa&ED|MGGI|V%NP#6|6$_}&I>j`2ODIXt>(jDe!qTY^_zCw@M zE0MiMS0uZt+g8T|wcaqAng98`K?I+iLHO!-&f93~FS+D-Xg>QY7*!oDl zHB@6|%)mn3I5#ZAbyo%ek!7bMSD-(*FMfo~Iee}6a*r+{a8B4&izy&Jd8R**r{2bo z7!5yX|C~-UQLs`OJ^$=Nq$z#=be4B#cQ_K>7bq~T1H&wmGQUzp66!(6A)KDqZb9K% zjGPdJN4QR8f+IzRo|b!ZWWo{XWaDji>hZ7uo>KX5p`^$W4eOX{t#3CiwVY}~c!N=Y z!VzI15Ps9?%D(<_9R7|@{_Qg#8D6s^Si&_MAlZ0!dgS5hk^;olL9jv1*oJ*>m?jFp z_LXX)R#Zj^2^7g6qPH4;PhQdsQ9hDej!v3T;dPtWJ(+;Je@N+#%0)-Xm$*&5krt04 z-JO4$1hSO9Ew2Qmr0v$zp67hkySfIlBx`KiUwjZ^Ke(+@tqbEbgrZ7O=sZmnirXTp zG@#2)rcMy^;8R*citWZ^gN2Y1O!5!yBZxql5&Kwi#nS)NV~PEIEPz(oOY+Vp88UM~ z4_cU>fmziTLs+f|HZM^;s&bmVzE@*6#A+WpNZ|I2%o3~$DCnRAvJS)vl9HDdUAZc6 zlN8;ujq;T}70J5ppMNq68gvRPtc7HId%D4>cI&#=a&bb|JmQH$o4ZBv72kS9Zuh=| zG5C+>-?ypayA9_Tw|Pz_6j9*jz&WmBl7xCbpeh55#)km#lh63BWDa5}?}j^7VVS>J z!doNQAiXw$c>f>H;@{t4>l698297yD%vwRTVg|im3Yjgiwfj|tVMkyIyG+*(Hv1o8 zDNsmr9rfcy$)M zGfeVIs$L2Z3Cto2SlA&Nd95A|mdJK8j41qjN$2hKC$aK>;lr;~jr~ye8#%g!pq44{ z7JBz`99l+)SMMTIQV7&uxZ`qjeWv5=?zQg@ zbE7ct(P$`X)P-PEOQ2EC zMxg-{QF7fsCO=LfGNYVfHMdfP)n<@!C_CPkTJYPC+bz4QF$QMzoUw3b7=?Ym&D> zU547gAB_e*NbRGAy6u9G_xO+53j+QU2d-l=?qy@i-!bm5pa0{B-y4?8;CdRZq2X=| zU7=t(LO7VH&4EMhjGv=y7e06iDxAFHpwt4{Ou&rHJ?vU({!t(yUjNDz4Vs(*_}=dG zIn13>u`#(kfXHHHygCI0befKR&x$I>>?GDPA35+ZQ13R+lZnLDmPrIJl| z95J>5)PzfCsFkXt;){{VaWZx%$WdqJaNsGWv%9>jeIn4?iJ0v7{1^ z$-o&QV3hF0FE**sAORC=X<1YCp}aP^EIP6h>?FH)B+3TP->tOKO}A^06H7wzN+O2X zxn*pqna@BH)rTEJKXulQ#s#S+o02Ksx?q{aS!M6Oo19{Aa~*A2f!Fyc;98i%i(5Jz z+!t)9E&Lte>Mo_%tJ6ooqy>6llVviPqko39T==V{qY`@)jGOm=72N+VvRPtZqSZ=a zMi9~0A*{)u#^q}pGFmW;ArA@`Al^~V<5_p$Ow}SHPQWu+9~W~!R?SwBy}0S{l9@T8 zB55@BNE_xvWnt4ZrXgTP?HhFlx)1}@$=DgLCMG_)wBp;6G58s>`jRg^Mla9o2`^?T znvP!S3a>l2{U!K_p;M$HD5?^d4b5#dkrrq_Cmfv1n_=_z37ZCj~!R%lD zXo-WZa@#fZf#DMrJ+Jtwh8Pnnk<@-H1g{4PwOx#*&? zo~n0Dfvh@4#{ddvVQ*Uy&wKB$@JFGBUgYua_WO`v|nQF z79%uKcA=1f#9Ks7WZo2Bg%+R#%CI6gwt}L%;-y-)FtoQE^cr5V^;D0F*NCh(y~^QC zS+^WYypZq6N+U!&L})6OpK#7bJ<i8CFPd-gGPXG}Eb}D@ZNf_U zwSZ}$#g6o{16xRj3PQ4!C0G$}RJ&i*?ExR?z;v<;xqie5pmre2dUlW7SCVmbQv4FEhB* z^|AC=C`)vCfDY7iY;)E`o&TlhYv192d0UoPAZWEx1m2c38LmLJmJ_Hjas?BAi^89H z6Bnl}!PdK)a91fPbS6R~GJwLF-?&m)0uovA$}zF{_}NP{Yd%p3f{OWZCtE@MxmZe+ zN9^7CBjCqDr<2gTMtKmtq06|Kc*Du#1J&ke&vQ$GvSG+tff={p`}!1QUk!#@_JHk5 ze>?+oRH@LSb`H&J^%pdL`|Cvfp^tvWx4{r>#FMM_cK%-;sP*^b_ZIs=gK0uGSX-4` zUkX25eph`pd{sA2L-`3`$K7FhtM=Q&VxG_>kuV9H!J9)_QzJ^5-mpX}xOeX>9SaJF z9$L|DeiJ91D<)jlK|+}n8cR<-%4w=Wi$shS>mtMU%M8&(jv~%H@8iXV(a&`KipXmi zDii<8`715k@NV?+&Hxr7ED)MX76cqi`~o?`{MZsBrL^gPDlvXG7*6=|aL&om3WEx8 z5bHJoUy__DJAa~kr3w#avILTgLL9@UU~Ct6uRy5M-b-L|q)W^_7HVCznhIhZTF1;5 zv1B3|CFoDN3F+c{5)}PJLGx0Vy^Gp&QR&MUbYEw>?Ycb!QDS$=X0;%bPAv*G0jJ8Y z=+fb^>JApvN3d$&2dtoGTlTlLBP{X(W`0J@{uR1rvoqf3f5WJeSd6M*x%uUP!KlH% z$8iIIQ6*kt!O#BYR5*KzVIJ8XXoCV?FBqwq$P_8l1uC9uiB~apM41%EY+YI$-FIx( z`ns>hoog^HP3qQyt-ZR}C-!YnSUV+$kDwO+<8Mppm%79TuVO^35cdj9kvvZKx_yds z*aO!!aavG?=w0pmi7~pc$zEVH{%DR`gPTpWUMHx<>@icF&fXl*ZvLy{7beEOs<5J_ ze`v+|6PW(OtbB$)5$YlKRY?kaf1CKdSRW>0Y1GMM&LqDWSxEvzsBXUj@tv|UT) zx)CRz{<1MX09a4i8+#XeO5HJZ;j;ZtB?xA>q5cVAU_Olr7c%H}AzO+FIf9@h03l-4 zTVa#YThYmEOOklp7p{*?1fEmt#Kq{0U#3&w&wF46%rqZx1y=vn)c1|+zd)W}zv_Ph zfH|=w){)D0Ck7wP6(Ilx`fa%e1tTO^ZzYsYG4r}H>o$zR8PcVa-C>w`>>zc*fYxGO zSX*hm=*Q8!>tR_cQB5Bnh@gI-=4hI`?kE9y*BdKrbYaBe5~fRrG@_UzFv*@ox@S>UxLW0pMBVpxibZ#uR=FYquIpZd?3opuv^yXiMG7(4%mvz6nE<)*Aw z3KD@~z!kt^1>IrB+$(bbe>u&jE>ql+<2fGGC}BJ3^P%uhhZQo4R*afT~z7X(`{n&`!m%k%G_TZ9=|z^G4mX6eaKOo^=@ zVBf~IRQw;(4~Nc9vIiZ?X>$9K{O!Z40_4WkZw?csQ{^UN{~I#@tIQu9bk@Q=eTEX=*z_`$Q3B)WM;_IzZ{nNF6p5>t03S^AvC6O*(?#p9Ve`ozlpxf z*IV&Y-G7m1LC`r@`P^qnP;aL}<%l3lO2%~|_4I%Yme(K$tPxzxl8Lp_Nm^3cpCHSY zIHi)Mbr4E%qwk}e)cw4II$X&P2lKdY?yf%#>g)OQ?OB?GFzslrm9;~MUo&&EnmrE> z>`(LHWU|M``2L{QVdqr*&6bv=P}BZ7Qy;=#hx6Y*ED;#C>Sd|sf59f`+rSBP3D_5i zqxq{1hw-7BuNa6aYz)Wr)TP(gjy-4AuPI)lu}jtHbW~ zM`{b99X|?Jaw;1JyC*z1BCbcuRKY0?+XU9tQsi;Cc!xO1X>1AVldz_a(!Wd{QJQ8p zpnQK0zU!$#%gRDurrm!dmYi**19#&G+LI1sq1i9!H~JQ^Byf&6+1z8Rf~6Fa*|U}} z{Z`;ZHK_bu4pyxU&NHH(IXY@-YhXToZ`9ud7Xm;lxK1(W zgfxY)PjJfHrS3iRf5T&Gyx0Is*QJ76f=w5oGba?J3)aY-S714c!t;!C{*+K#_q9Yj zrF)?z%C_!KNh943WtTw$I7B3E_->iPuD00{o|A6RAy|lZm&nbkNq&@(VW4F6uLD&?%ce;pvSirTbI( zI}BN)CBsl(ywcfybMq~)43ZCt1q#R=JZff>Sf$pz?+sgB)U_8n+-Bs+@9(h_)vmLR z!Z27#*8K6_n6(^W1uhkpR2yqQ`uSMPv>?GQ(;jZSwH&X@&L>BXL=PxctT#%T#8qjJ z{T!Oar-dhj>3*P{hJhA~@0_^peczPpqY<%ab@ZyY{%?42Cm5T>o|*&Z++p+$mTU$y zOX_oI_>Eu9Hosy=o|g444zp^%)@laT)!x+Q6bTxojc8!Dk!S%yi$(P?jtu-@4ni8K}yJKB++#_@c{?S=DD}ytd z_$2?7DqE(r+dOh5=P>Y(gq&-TecI^(&)nI@bH^Fie^EkP@8ytsiBtVK(|3RLr1i5J zEk3PJHK47}j5$vBdoAm!K*M*6&kPckZyJ7{m7Qp;j2I0&tcA~Xm{qdxVTE2{vZK>gQ&muI+LicE2=pa&7T4*VXg&95e z)^ryv)VcA06h$3H+`1sg><^M*E}1RluIgD#CAIV4t*4({okQ;Jyf3a6ST-#pvmh;A zn0ccr_+HKM{`36yioO8Z-HBI9tAO<^zWJzFsQ;Zcj=>E{maI5}v|G2q&BX1536^2L z^gV1cabz<0Euta8DpNGBxJ&v-W1G-@^H4_|+0v}$|Cn3(_V&x(z10HJyjVt1QoQR~6*O14PdC<0p0?Ua_m3r$2Fc`OtZKpw;W@oD4x5ZM! zU?Mh(b7D#E7wI9A48xiYB*%jsA5xv{3t~g~MYoGN)tHy23!Fy7h$HLW57`VDLL@(F z;+CAA^CmevxvxgQ8Xkp5!vRLmG*j1mm7-1iy!e`ShjT5?PUq8X;-RGl?xOwq{kSE| z?i^C2AkyjpIFL;7JaF&e^tANH_wX}5jzMf(avxucswcvx)v{}3J`0-%?JMt_`La}w znE9wvEUKOVxT^n0vHM#n`gw)v?=*vQi~kv(sWYMyn$7~oon!)G^2oGXL6V*o!JgII z-DfT?N^u_=ofHouPm4+ndrv9Sk-;BOWPH6~+queyul?073f1|L`VK9zb`65^WCr_7 z&M^zmirpvQ2uw9*x{Zn}N0p{I6nt)^vhZLr$RouWPvX{<13k0+a};TQ+gtTPsy>+A zP0G*GTaCN)cTGI{_~#s49(3%0OhX0&je_;*iW7eqjg5-AzbXU^^ZC^9R1D^=qYbO0 z{@LsO2W=aCsQ!}!2nM-F$fheqBU2)j9jW0sOb8uM8jrjqDaV80_9(Nam0%-yH!6@x zwNUw%)_*%v8oIyE#wjEd52s&viq!3*vae^DjEGRV=M&T{oM%nR3A_`ZfDNR445`b2f~^+<&v`nmw{Zhid+b zRl8j2Ow)bGhXTX^45r?g_XYPq37a*NJ{}jfh*=q<4+5L1YfGEu8p;f#xB6QM#D5OD z5ylA?Y{oqDSt?!&UD@Ktv{)5WOHz5!{-mSX zB4{FWUJbAGqj9Ei8G0?lpxoEtlL*UIY$FX9R$d(DTH3GVm64&!Ha+#2PeG1w2BNR> zQy9Easpk;SeTt)!9R z*i?pEx8OXrZeTYhP?IJlY6#lsOtm0X1(PhDsF(uK^JN1w@^YrhC96|jHD>LXA7mMg zzAym;7nZ&6NMYdzcm!3*a^UH=4c({#?N9fc^d#~JEO!F$X9Z&;!Y655*ujEdLB}KY zl1Km9zkmhrEdZB}mEF*Sw&wFwk-NHSrX96Xs3gGc;66lF)EJh@L5)oBZ=QC1GVImE zDyHbWviq-0%knF%xtfvB92rC%G~>cYrAh%pr;`HFkyphfD3-0FkMSPC}A*%85a|PP@j^ z2o_v-y3X)|-W6xCXI|0av2=;t{<6tK>J#9Qa5r@8q>lD8pYx5U7kO)k$yPk&{8qL= zqG%Qh0N#0haW-HxH_ioXPYRDeTx1Su_}=(4LzoGI$-4ccEr|7^{8J2*A^#?5P>F4v zCBk~Hz?y0HHqulR0n}PKG``G~4~xM+Szx7mi&I}ue{QWQOwkw9XuaS0B_bjmi!GXz z8*3|8{}D_O(c*ke>SPo&a-268$QS!Bdu zgXY$7iSZt`*(Aenn|nTPbqh4Az8xzd+=?x(p5Zw@?ByM!dQ0uvw7*`I8`yFh%&(Xn zCwW?1HhX$hME{xIPrr6IQ8fxPuf)Jaax_*N{O>Nu-Srnk9@QbV3y-!Dt!Y9^879k!3l7gE?CI}@)aztT41_hJ<;?VA? zz=LxIdtWRBLB9rz)ect<)@_z1i{%Prr~4GgQgQeA`7B6wVZW0)_-H>)ihphx{yngz zQ~vR)pEKhMc>czBb>#m@+j0WCw?}u*eWg61a2N__#9T=9RI7xSrRqnTHtVe1Jc(Ip z<%FKv>ss?cQTfSv>ZqQ}MRkKU5qPGT6tsd9IAU=&DQvg}o!d3wAMU`fre%?BzLI({ zJX)>`TL%uMa;^<7=e`q%Qz_cx3dWgA`;ojL$6G?(!sN0c4tPdjAkWf%KaLw1ZS^1{ zz^@j$%^OvC@NJCu(ouU^UP&8pMzuG~?`v1h9JfUa5=wrrwK0;!3w!!#MqKTMM6pxg zjF{_Sj_c=#1KjCgG(nTJz0T@L!9z59OGJ+60<+Ix@cgPx9QU!7odeD|PtiMy3tRQ7 zVkk7_I!v(S$4lxq{+em}6eI8F#yd7uB{EHZSntal{m1#evDz`+4yM>}xD$@WsNs+6 z-e7ccnnRcRg0td(&T1wD_e`PfALpR{UgO^KV9j})O4RpIcn7$;4jF(^e3jynoO~-F zIy-dmb6=VCp4Z*=7)&jlV0YFQ$jKv?rVzJ@$d&M8N8BxleO>{1}a zDN+fz+a*SojVSr~Dbqxk@N~2?gf!xkN8*SVAdQKcFqUc^n3IUUEmHflM{Is3B)fNw z6JXHy_s^HexScP#q_(~*-^5yC`b;l-jM;7gv zjZ)dEk@>x}%RDBF7rZ}nW6CJRX*GQZlHcf{h zd3!kPkRt`?j^wVwQGE}N@2qaoA0SJKWGY>kQYbNrZkNL5@UD&U}$ zK6jM2ha<0P!=5>2bUo`M^=F8RWKQm(ZW)cgRc1R4tOm5+>ywgkNBWZ~-I$WpK7#iX zqHaa%UwErEso0#h{1+!7$2wPhJ*XZEl>)w~dfRcbg8eJXYd^a-Z)6sZUg@N@P;>SZ zn`=GSCe+PTwC;51e=w7Z_hibcL0!jT`GQj<`h9VrzN(nllAb|6Kbc1Z7_7>g;f7dK zq%2)yi<4qyV5m8J`K}`+Hll5xsiG!b#~h5A02X}`|Ak%?IEMybms3mo{(M`s0ME>O zMJ2vZyg1{z;fypj$x@9z0r+C1lDmV~kl)EWJ!wpw%6|ZNf2eJ$S+(6%WjBWva9k^% zfRv4EV!9l;(FI0h)1PuSkKdg1gg5qq9`j&dHGouoFEz%wVsx&;{~s@)YO9EKM+7i0 zA3z2Zg9w`_5K*Q+p-C}MWPk`~Tw}eoW?uu&H9dK zT5WoL(XIiZFZe#z8nNslx0`?KhOuEY!|I{fO{~U9{$o$$XBF}fCHc>gD9njl|ER9) z_|6S5HZ^154}(a-`N!@!wEq8M4!NvqE#=I!;)NIzUTiBhZOs=#r&x6Lg(HBO2b1&) zu42M9{3eLvww2m*=qmIL-xcxKX8XXZ6Y1UimRE3-mr+T!ItuzZI1|Y$ARg(BA$KWs z1}%G5+lxK9k7iGYkS4#`2QfR4ztQZd%89J;ara=IGX|p~<+7Xo7lt^?lIJsCgZUf+ z8Lrc)&L3vpU)eLnJ?*r!!AQf^@}Vxp%!A&iq_Rl@Vv07>*sr3vr?g?lZ$9kGLwq0}`V8qCr_th;5}h@jF(tn<@< z^3Q*(VE-s-a>U68oBBeRZl)gsUz?^7P;dsp=#a`#Rxc7^Ifm8r!AnE0ua^c7OZY=} zm5rTMB_QsJFt*{uE@=6x0mCGZOm&ojM4S*qRQziwt8mwUaIwTeez{nvpLr{YblhdY zP+4r+yU$jxoNUXtIQ;-lWf8$+wmH9*%tvywr%#7rCt5dyRagb?@GJ8^Tr*0cbY;13 zeD`5*>6rz3aY1vqSHn$2f>;$ajg`>3H1DNo+0W|7`1GHEITXWR0(6lo4@X{W5Z!p0 zT`OXrCT4G4OkH+iv(ZEBDC2!J9sauuBy@(Of#`PTu!1b#`Zor;T-2`RC#)uN=8yYD zI)5bV8*@+lO=j+@9_q_7M;|bvZneNP8}((|H-=uEhoS83RB;4Mf=xpgS*cAA zc%Pl@Yi@agrRtP5Mhsx0>V$v%S4Zc%w5eKP$Gf%#3L}xN=LS)41kbNq{J-6ZmjCO^ zDWJun@ndnfPp-U9L(jVRQWtsa;j42;rneL&Me`#?zeUJjZmD?5XqJe)p^rk9qU#=Z zc4v2(#;Af_RCjyMYvbMf?T)X`3l1d<`{$w@Pf0mcwO}h3ZImksAhwCt*Yr_i1)`IS z`#d&9;{Lz}X$3s#03+aVlZa|~QF3u2c^HQ>YSjNf=H3G+s&wrZ9x);!Q9wXivPiO( z92zAf0wNijAgz)_BuYk-^{cs_w0_ ztX)_&!`}PdPgu`d>-jpP4R$V#H*p_V0sQj0wb+Sz?@mQQUh~rQ7SPME5Au#bQ}d7M z?Ovg=xX`QXq|3Qi^Zs6fYPBseLGhHhC{&V{MV@)%8txsK7ho}k>cfUUMQR+k%GEo| ziJuQ0RUahi42BfJ9jD(JiO1_z_;ZEkBSkiil~Zv_BCioz2i5+qRYQMHid`ZqVz4>j zs4d53PkRCmFp&Q$&mW388R6*}X{8>x$p9SLyg%ZZ9Kmefxr^$*T}}P)m#vS<;ZNXCp2}-WD$|k>pSVMO=59oRRJgcY2;b?&t;4uY z*S*O%DT2wYta8gUWy5P6M@tTFsgsQjr4D+>QvmnRlDFMH(Q=KncL9X$yYc5&r=hm< zU8@ZUvDaiU_Y##)z!uaA)KvAyW44%hI56A z+`5-sGDe1mD&8@eGTmlkK7F~t`crUT3rikUUEHu+Gh+1oCo5$M%Pjhj$|@J4RX8fU z65H7+MJWj(b)&UXTpoNP8P9gV3NrVRk4C`o*O|wuua9#+%d5iU`n)|fRON5o0@La2 zI+_oUo)~>i#MLV#BxHywn6o@O*orWtUKwdVah8@i$xr5z6=`o2uh}ENyC-^iHT20K z_D6g2d+hoh+MH$YXZ$GfRHGjlA>?e&v>vHkE$M9a9Q2l9cbziR z4Sz=F5?ZR+_> zP)ZzLPESwI`Z*~Z8J>dkvuD}}r^W*Exv$uq0eUuDniHoqd#H z8a+_^59Bmd}9oq!gh~5m#;}@DsuwmQG0u(ZFBMX!LpP7 zoCez{!`afVi(>mL#yTH0J6$)vkv+%up@AMD_bVfnccVMOMn3tvq-uF<0n35CrH8tt3Yn>4}eFcoX0kAJkhxHuR<=5O^r zl|)wgSwKqQjfg;A$(w!=%bSj?SBn_91xr@cob@F3KDT%VYGTk(4VM!k+;-ZQZgV6r zZW*<5j&}s>XIy>bU*Z*I@BeM^@`>I|MF%wwu*E01V^3_w-F{DaIBt61Nod}Ov9n4{ z(0NaIza5aZG!_!tgLBQKA2#mr%kDp$h>lY6nifq^#upuQFTqH1r5ZnJW8q_&+5lxtBq z{t%1ii|gqy@@w`b&H`-*B|qx5R^hkLe?x)05qWObBBFLmILh%{N!uyFl)9#^t=+*$ z-YzY>&*Tmg)PCfxa9terZS`Rwin?+Y5ugyow6Q%dfe3__v2@F%qN%Mh8AxvHB?3tH zTY0A|31lU*jSQ460~Z#U!k+sXOlNgo6E|$WtU)0znM63AOHCajv!Rs)tLRCWxwxdX z@oqv!bW;X#uhW%ykb~3X=GwGAaqF|@ceMK*7I;1-#wt3PE#W750^mz=TyK||c+4%D zu)kI70^bNbqQtEdEKAlunAd>5*o;}-1UsxC{6qVhR&hjJF3ZW-SPQpL@C@?jsA5Vw zN6j6JEA zIq0CQij;)kjN>=g-e0TQ&rcEEtvYD)o)|eg7-`}?-22|jNIugX4~gGhPi-u5zVGm{ zUmq+owCu0vYSP`Mb=#5G_iGY!aF|;&s+*v3+twH3n4tsZ^92q7@1F^Oq2Ilpa2r-T zRqOt}{#cjf^U`hD*Td0(~1Bv-~*CjhhP#9W>iSMI&7F3v3 zdk8@V37_+viC;Ynz2;4F?hGa8IEb({HMUfj*SFhM#>UpxoaH6M0ATY4;@7Z1NZFN> z6>8Y`ts#NFbzTtOMg?*jH5X?ljA0fv`daQPNh`Gzqx8nw;JFg@EKQR9nHKJObCuS& z-^{nk(xj_5z%IACPs2MobVwPGw&vntQsA3;|J6oj^fSLw>*?^(sOad4aQzW#1qFpE z>etUCO1ahCuUfW4RfG@Po1Q!%M*FXxkdd_?7XvgJl`j-1S4n7_{1{ZBJz6E(yLTJqvfjpNHHe&0=N@2i7t@>v8=ZdXCl{^9dgDs9)N`gB*f-}#Av(11; zd9K~(qsHde{`VJ_n_5N@O(HO?3;|`RH4&)3&x8Za=w#EUT+`kASL4T4$8K*;4C4xQ z$!alx8T~0R`#T~;WVHdq`zqaw5zEH&pk^oXc5EwS^>`@4A8hAo_VWMr6PNf7(I z$LvKxLgBzdFE6hTI#-cBrfjb_uv9NfHgsyZs!^2R0)+BN;=|@Ssjhvt67oMnTY~-o<(`MvS?TWvrSXx?w zn(uPRvKYJeyPR8R868KxOp-y~CEk8fWVb|ya@@!$dDdVnDk&!rW7Wup-LQBnY%-6k zr}LjUTvyUU{a5P2W8i^EMF24oa|4ek6A*UQGktPOK-moY}Q9<_l z>L&m)s3;amT<0=+0J%2oUHG_>vSL;WwOz(MS7pLUw-+qtucBvr_g*}dF^E&Kx6$)4 z*bC(MqH-eF5IbIHg}e*ZF z($U?4#<3y}F+FPDFiNv@K2bt9s}K!`RqBP_Tx1x#1_kT$*!V@ZFWjF9-G@)X4=Nnu zVjJ-lVv;{-T)P<*tIYT0z93VCvKh<*5|We4|)^hX@@;cK<=Oh-+_*2)1U zbVJLU!hkE;6;b_teJ!W*gYM98`fci;#U!X>Z0-fSWQ^Pj`R17_Cr;uTrptUn1ZzZy~ln zrn!=IMeMtU(J6SBw5(lA|I7!nxya7p^=bY(8Q5++PY*$AH`X2<6m*eOGv)o~w z00t&s)kVMuLuCwRUxYl^rQS|&Jcq8`+RtGc+yNtEB@d=D=11(t%qH^K$TIvIVmU_} zP3)iIeS)~VA37B8k!)W1O)Ic?;l#nx$DWb)#jnG5EGf8GNGl)C;fqhk@}c%gWD=1$ z;%Wskq8ZHK(4ynqGzgxHXsC37r=qVQG++*^%uyubCBU_>8gHrhT2MiVZHLqw62*d< zRDcP&`}^V*UXGD_e|2%-hS{nLx8)_+Dx)5&Fboi0QfKF2H z(3w&P;9**CT1Q!vc~GiM?L&^R5G=pj0iA-1+mEiT9}!qD>AI^DAGCZh1jxSqAL4bSW(yI-^70L9QJLx-Y~zE&Cq1jJj_xin+45TJKpHy43HIw-TiS z6PB#e%@y+}h?wmJ$M0r(WRz7K;{x+(Nd=1_W4>1e zKz;_2V8yr0 zcyk)w*56}Cd7`&SIH%dCGe4XnRmYYBIY0QK>LB=BItqn#xHK`si9CQ;KGov6BxZk6 zVDzN`Fhg#dDS_oqs-0RJ8ECx3Zul5G(&~XFGi>Z)6LtNv!P;$EPe+3k-PN4i&D41o z^qL4J(7dy}SGo6{fX*6hfs{GJPjpDNYqM1)uC=w)kI=%U0lWfSJ?BT z3dAFX#ATHwgKII>8=d;YBw}UXQ%bh?ttVD$Su~vdH$e|F`?~t}QTYObo$r^L;BTO25$4;Qn^Uyn@O=B61Z_quV*N6u3m#!Qwydc!*T`^_&5kURA|arr@;56GytiuInM>|< z{Dag+ajPA%1Dz+E)aw(n3l9QrXu1wBkzYOgo9A~y2jr#46_rW--3ALlosJI|5xo#g zoX9p86q%$H93+QW447-DZKooWZ!*_T1yVFdx14wL<~gG8bvq*A0dryg(9!}gu{Dy| z*x2YodcW(M2wGmn*V){6nJg)+B~>QJ$1T0c-@Ne?$?9BaTq9MgO=;HH9b*)8+*gI@ zcN@jZv?<4vl?XH&W3mLLHaSyYCX2fQ_%2NlG&!b0eW&jkv;hW>*-AO@@!?vi{oHb{ zB+g|MiP~&PO|+JHvB+D*h6(InB`E!#{1FVF-XCoF%8x*cd0tpJ3eh<%`u17GTS84A zjj%peXB-{J4l0TClPG2B=uevaxNOmVo543k=IBx$t>li}t!k~D+P5BGk;o@2@f*=U zh&J5`cers5-+64|=#o!fi^$G)h7|l<6~)nFuUz#;kbg^N{}5q#{0rVscUXTTf~5+^ zm1vGGGWnSa-2mVl^&=|*-Lhd4Q^+6JDfLl7y5bznj}ZercENz6p1V4C z#-~1oimy)7VG>ES@h(JZ!#aTig=Pz<+PT%T^?9OSJzM)yrxC-b)h&=OWpVkE$-MWb z`)4UIx%s^2IxFFBrPJRw?-FkFHNa%!-W2L>6S~1?I z=lOv2xq^uO(e^@di(mYH>k>Bl(;+{dtBpCdnkF`ek$CamgMErQJAXz2CaR&U1}!XU9}Da*qG zmHbOY3I;30Z|voTGo;bX*lLLWDVQVCi;I;PCWEr(LAxey}eA~!kW&cA-*t5?SCs4EEZE!yVtv3K+>{*sO| zCC!9ZX5`wh%cJkd>uspriU;;NQkE?4d}+`-0VaI~ib@a1jlcGDM4Z2&j!Lb=Qk~=CnF##SGQrOAX7)%D@+vKmC>6xoGgL9Y3f)2XNwz%>docr_QkB+WJ=E zB%;#;$`vr$b&cwc*rP*}LHM~6M@+HP%ri+u@zj(pLX3L%_hHe+SMW>tE*&L(?ybxha6KAr zBvVx16;Pd6B!{jAw_Bbk_m7=ODXL;~Vk2KOW zK-6Eqt2;<={0&&kI#_`ZFw&TEPak%R0}@L$zhWPmaeg#3h z_XW?V-79I{F9}@k>*(kRxo4J^3YvIq)AIstjOUog;jTG>>d#pZLp=72)k>fH?`|{}1vz}v=r7R6{cu9?O2q)OZm;tX}k7iVo zb1E6|`m3G=muKYK_Iyd${g|J!yKObKSJM)uI5tpXiQv#J<9X5&r_m!Hjr9l2*=B%O zs#&ACKx)Hv>#t|B+kZstUG`D!(%trPn@r*HsroCI&!G+=JZsJ)uoyEBvwZMefL13;c-uCZa|g5p=@cY zs|;Qa1it5Af(`$49@|YYUVckyk>seY(R;#dM3?r;!l!X1g148Ea+5EN3%wy)H1UVy zFFMx8*IEN>iJIsVuCZ>h+>pgrWgn+D#!~d1X=?p+XP3fJ2jrZ8`eTa&6MAqThRe4N z(&wC7ADM6v7ywu1_9#uf+sL3PGaWB(QFqEmoFeco=SiuT5shM0Tu3yEjf?5}Qg}bh zBuD|9#jfrIBnI(7Vo-4(NDO2ng+FA~`Sbbco>m1C1GDY>K9;UE6bsuQ*>ts4F4*SL zuRL%ukFw?Mexy*tvC$}%yXycqGBV22L@_*RiE0`n#1#}LWkD!9;j#39<;E9W18qM{ z>~gIwXntetJs3kQgXcXDDPOGR&>mXq?i`SM$jeb{!c{?47N zMb!K$Y_RR`Yfdp9-5@i(t&a;(avA#uVvDt+i&l(l2TFAQR_R*Y*@=ZC6jSz5w|*R@ zcR>KR3&-enW&0bF`0E;IH6kp9>{;+Y>326Bzx~tG1V88f*8|nrAby@8R|eKSBfv-* z3V0$Pl*cQXVrmp6tUb2x5^}yRP#`r(P)ba=QzLzWZ^tAsjv%_=-eeLgXWKbvw?kws z*Pm)#iPU^7lh+hjS+tzT&~tOp$enw{b>|WSt%1gSiCQ$NuamEQxQO>k*LFqO#VS9i zbe^##5vH(lITOa8w!3|u?nE!JDFK;gn!?i6gW>DoJ%jh>;Jf_GfwoGbYT=*um${L^ z(yuti2}j^`#$ojK!#Y16w1LLCk`nJ${hbO;)b3k>%{uS8)3+3R&68o2&np%bIuVT@ zUOV>j?krWvcgksf9T7QN6j=4lzA2@Tm%}Vp#W~>WD35horo%RDRj_UL?YgOiey)2t za_49hQbnyxQ#N6nd+0APHB}$_grMXuIo*Yac*3NX-SXw9J3vr>cCM;oxa>EO2O$o8 z-q;O#qA~KI;uIW+;QfF+{R3G^+i6}No)629KQN2ye}IaP^goAUSjNcBj3b!7Cf3W8 zF|8}j20zjep>4Rs<&2dW@z7O3n8c>lMFOQk9Dw~ZJ~NVEx-I_7_$dofSEPYCsn|5n zez&Rzm2dWHG^2F%7Z-A+*5>io6*uGO5h^bG-6dz2s*;iz2flqnfT`J3MMLW^2=BHz zPAWr_BOIazIZv(wa_T3rJ9F7Z1730CyZ!*3Ooj2?a+6`L<2X^5n;(C;!i;^jNI5w2@T(x*Yt`8P7GYn%&@JlLlfVJE!!O|jTeeSW*wp9@n(mh<@5Qe}EMn#89i@Gi+&_JPbN0HhLkXcRCt?zW4hhHN5nj}B4u7VpfRnyrJC_*3+FLtmE*g%RjzXlQWgSBg9#$IBU?E@IyN^0RGw z{{+_nULMFGTaa+aTL8fUEV!Fc61l`b;%XtX|Ah>TE(@|TUmRB5rz=@i|`uv-T2B=@Q9jZ8D7go&sW}MTM2&B3&T9MrS^tz#W8*ORrf1P9@i(y@L`6X0)12389S2* zB69a7vX%$hX7J&AOQL)rvi2^7J1ueV4OZ2c1+~nG_@TH@P^Q{hI#O04Do0O$3#wfz zyp1YZ)OBKf^k7j<{Q9gxf|LpyogeJm zg{)%-JdvB?xzblo!P(Wbe6;dsw5pkJ91oE}A@d%CJA}~D>mA?_ih~SgAcM!{YPR24 zoD(=QRK;;X=djBj6c_<5mX6W^W#!=rw)&%*%lQ)NONqHkmAT7gC0v|}qmC&8 z?hBz25VBk++atx%U9_0XtsYoENjLZ^=CU@T+eI zI}ZF^!xGEAKR=7VRKWM%7yar!mUHy*a*B$IB5`9>UfwWm=DDc0vk6xW6_aFS>x2+o zii_e#OzvSlz9AHHsg4g-6!*happ8vJ*eHaCipz8s<2ee}y zYJ_4LqcHpUSyG#2+@#Ty!dC>|akX7ODReJCXLs_xi{n(Qr%nb^Vdu*o8s(V#VKxeP zU%CImYc6gb+@{$|c9&T?SK*6>)EsY$bezOSL-y`!a;r5sw?rsP!L(MPKq^sj%gw=^ zx-ua82+;r0_Wa#3%!#%*a&exia*HbR6*&J^_3?yd-*VM{>ILh&)2W!`Z+55-Zd$TKjp#r83p>sklLk(KV3(sRgO1!Dr_{Q!!x*rp#w^B1WveO zQ@ikbN^_*{_qT(%YV*%Og*X?nr9Sm&Es(1DY_R}a8eEFM&GYg>Gn{Ed@&q^n@OqOPAQ!)B2g8AOD_*Ia@CJnbp z#g5}bbp3lTWmSO1PBNX7J|36i;rOW=18=!aIp^cAe7jhq(Bx8SWAn@h={#-LFoT{z z2E3c8{HWwc1KOwzMjVu*R&3_<8<6_Ki(gQV^8y$UniT*MO61MQcL7}@MaR_GSXP_f zMjXy_O4Hb{jg91WxKErH68+$-^;-(QN{PlgeFx`ftX1Qe5t#+IG@SKR5Z#7u0V+X+ zG<@U}oMetMBr0rgW3=kIXb?M{X0HQG9BBEbALLtVhre%#h|}bgBAjPaTv!(}@rMeo zxv-t(Go0gpHb@1$Nc=D7Pm`Axr}eB@1H=Ir%>lfFvmP|9FByqfty z%dg||*NfV?Ulr3RsF=20jT?fQpXu13vpYa)z>uwNfScJ^_vEY?yHe z6s1_Jug&Z@br+LuH(vThPQ|sS%O^R#vfx2hI!qKbKu|;i)cHQo&$F6SpY37BJkT%o zisyTcvcH|qR~1%Vlq358S(8Sthx)1yHG2md|)&CN~mYTn{O#DLGwC{caN z6i3gEO2`&M0lr5bfFSLFuG6h|e}#4K6vxsfOR_3T*zR_S9NHEjHg}Pn`^(H#iz?Ng z`bNE8Oo`(!zE{)-`ilCEm_T&*9%1)J!xxXUlfc^gItZoh%d*uQ_pp1+teyv(!^w{| zYvY`lP+Bs|))N?osa+?ocUQA$SyH zHH3TO^Z2+Y-n~3X^4ACb>nFAEem(JT;E9)bgT!WRZms~Z-?vQR;^&x$9&kn0w0Lrg zq2vb=;kWCk9hn>r(-H(7nR|HZrB&j49{~$P=>TmmCPoOM{(O7zOM=%Fm(7yG5a;t# z;>54ty*VDLDY~#t%sLjfA4-4H5Tczpkk3!eahzL&7$ zvo%&$8izf_vK}ME`&R@y{<(NC5Fl+E;ab?Z(wy@|8;n96lfZ6mJ{HB8$Ww6RfbENN zlv_T3dMx(fJQneV7gn2{cG@~ai$6xN`0koE%H{6%sm7Oe2&nCvwsu`n7BRfx63a{< z8iTJ+`m~|+8iw%#cC4n-q%-9KR64*zec+lkUl2r4)jKfwwVtJ4f(G4Fc!nHZ;GA03 zP2_DG8yhrW6^`3>J|VaK7HaOm`7fNw4rexG$Jsg)q5wG`in!)1U=N6+6DZamsTW(F zmMiXilC?buV_Tx`O%Wk15fVnSw zBNuO-VXS&7R%xf3wJ>`x)nZBCr)v---8hJQ!uHztogq}xZ*VRzJTN%4y5=m?35mmj zETD%1%PQX->kNiS2NI5T2Dbertbr(!CR$xmQ51YOVcl5Lu&C?aVdkxHjkW(8I1bf^%@)3Cw#^p zxbP@UY6OMmXJ(q+x_GMT#0m01hU+hH*_p=(295&_IJ?`vjUR>GzR$zh33OVzP@k&) zf{C?Gul1)@g9xIX%bAs%Qm&`qxJ0UDJ)L^+Z%y1LuJ;g~I8<-*#@iwK?_L`B2@L?g z-ir}{0)AEJH~&9?X zol(wKZh^qZG7iYgG%Fl!E%AB>RnI~|Jo>XXa38=4wu_uI8*+$F`~CN1Q5zWo3JxEj zsKEet1aMz0_zEP{^u8I9X0dwWoIH{s_T&gSuFA)I#QNK2KV&_d$idscDw2Uj&a;Q> zEv$E_wWsb54Gl%JB}(H-K6vovtw=FD{=!o{8U&z?1=`~0>Fs~$ySIN9APr$DiEKiu6~W z`}5+pFUWR+@XDn0)R&osg}kETBts+$ta=HQ!3O8Ei4i?*q&VnHPw3jyRp12)Av_>~ ztqZBiyP{!fYWUVVAJ-#zDOGhV5B%&6ZEGsBo}7ZZzbW_7}9zNp#dw915`EO z{zB}}yO`B}eS$ZY3$d|Hnt5=|+c~%b7aaY&J`-d>Hj{ajRDSs$CB^n)p@@PjG)oD&Q?rkks-#&J3i{p;>W6$lD=Y=z$WgZGb^8dH9^nVbu+2&U1{&` zE`0X~-+Ki{ua3y8zG+N;4-)T2duVJ=!Km}uo^C5A4N9Vvdu(e-5o5VOiKTn2e-caW zJ;oPH*Zdv7by-i^{j1x+S=*V`+8TWXR1w4f@~Z=o6V5Y|E}?I55I*nE^m6M>vjr<^p$FVN`)uhh^tS;wax)Lm@)xq1K;V|3IMdD8s$O|X}8?z|O1j|I%oVVAl zEe1<0Z=Io#y=#S^cCLkh?Q&(QfuHU4`qLYfnkFHAS{hCDF*(V{#LF3n$)tn!5Q&XT z68h)55-Tc1QxxJ)bB4Y6#m&AifvYu%pM|AwB;0=Z-}8a#(z3HT0mPexLP0AkW~1AP z9;zUJ`bUn{N~zG6F=6~3Dqh%S>9KZu`c;dSRe@K_=w9Ymu=v<&ENO7Hjx`&5PKx$9 z=GvGlU5tMrz$Bv?y#m{;*^rJs#sgW;Bo`(dCJGb-HW@6b_`1UbdH;qxIBEN@_x8UN zQ^Y9?o{!ZSo0#|lJCo4y>n3lzlGHjP-A;Zbk!hc8htPM3TQiB(<)w6%PPS58uKNKq zNd|6fLzBr4IHD&^2bKZMBo}xLrLT?}UTr7)%+wrvIX@+uJ`%csemIe6!uS<61?|&H zJrm79=N2`8OPvEj?Fye9|G-I&FjR#I2Rg6T_Y4hPArf7`|20aKyD0W34E}Gu0weDI zom*7=0D1+_|GxGTN@A7|M|3b%8_&<3mP0K8#}*Jwj4vHnfeJ zq&AWcQfJtN@R_LL?q#3iRn`B+Nh1vf4jiZP@8>p;-orcnu-8i~B;L_CbLA}rD|APG z=aJIs;%QZvrvd#;mKogoQ|~nhcQRpoJC~3?_waK1t*7fD#luNfrN032wEv|~Z>ep( z&L6BL0VCo$Ph!3FhcZTJDMXIf?el~rhwDD6ll7X8%owz#oOS58Jo!{f?lCnzC5LVV zW03Q}S!?Rju#g>}oSd9h5JmC-<=LzTDp|Wld)fcoOjc|_4 zR1QgjulKEKV#-#U>$~P>XMI2_&wEKA^b;+*aRU@y)Ko18=~mw=*c(S$SH!-rG)yf& zKJYC@;!5fZr}3OGPR_(q$6wiTn0fM#Ls$@CHvj=u!*;p4N&j$_?!>HX+qEB)mXjwa z-A<;US~SP6VY1|?>SCa75-F_{nn@(=E~F@)DK!y0E~_unxWC^U83x1>xHV(dXm_+U znyqr{@YSNBvYKJSCi$lj+^>svXHH|gz1C>AClfikYvTO{E9O=FMH=g4q%Y1-q|#<2 z>1|*&V6oLxGS|fGntwEdXS{Gs_1aP~weRIsqH(TI{BJ{!k}h6>FwztqK=2P59v(Z` zQ7xY0d*&$g-PORhv{`h^{toS0jqlVT=;D8t27kRs!&#waFjfKfq2egejF2eEz3_N; z&ILG3P$P`)A*X#Xk(%1iI)y5z?WlLGn^i5Wmrg7NVS@G9*i-YFS9TCVcG@RWcegWO3!s3x zyP-Uu4KKa<+q`dk>6!;Gzm#dx5dl`hsxW2c$fiaO$8>C5VMc%X7?(A z4vj*V1-C)h@X99-&AW}50+U51iF?fYQ=NpwNCoIqKh)|M2xR^ipmofMa~k@pa6ng$ zVwMpHyBjF5Pbm^cb|NDBXXjUqbFenMdTlEg6II_+mmw3!5gRSTi-}hhOgo+o8{pNt zS1&^x1$r!Ixhx*noN%i9ycfv+AK$R?D+(?+6lG{G)3m%1c%VL9s=)jpsE4&)A3oMxmbp~tUfLu3zLYN@cR%z# z1BaveOR~by2s(Po!!kKA%j(f$^qy~OiJG5i3R@-+HWTv1DNj%~a~+X_PI_A0<`{0= zVLkrCi^H~?+rF!gCuh?67cK}np;wKebkOPJ$RzRZ52VkOGRonb5nSb7Y@UAQ9Ayy!iQD?35MrGnRmGh%&76ixf0__O$65(Z5=!LYx67 zXWDmXMa8kQz0ciqTR9^BO5?|TZE~ zv;yZjsq3^<2z6MUq!M+s>A3b*t%hxpheyUIw`)5Z^?!%Y@h2Sfz6W=ddB^70#CFlU znw8VonNxgV(CxBi>IYR|OtNg{Y#nwD3OTkjGax1&y`{I+*(xbBgR$RlXwj@n*c1F@ zDri5_=e9gOljZaq3(o3O^Ei^={1*$Q>cSt>1tE6=-TM*}5=085y9{%Fvpdl@BMKBr z6;WPxay1-|&L8B(k36{K?CPv3C*NPJ+)l8l$w@&KD0Ufsm8x`B+P)6!9wqTRf0h0Y z4`0Yx(|dV*zJOYLXnI{d0Ij~$Op>H93G+*xd4m0{_fBa8l@2>J9elkx(%w#jlOVZF z$E*%d&iv|6-t*y}1!3<@v~4qD!LXZA2{ytLgsVo}@5mYah+QPTFrVc`tV>`fv~+M4a4jGD`8cp zY^>3#>4)L{MZF@dJ2r@UH3`8lnJT4u09meEooYfz(~n+%_DshR`Rn)mf#JIh`wIG+ z)zzAHF1xe}zazsXpX#eut7j@3&Mr-a6rcI*G{*Ul8R;dy2yP=y>*J2z#!aAW6SoA* zV&$sqMm%lt)VW>-|3M(UOYhh-+b)bsiR0znX`)mhb+Cp;>?daj>uxk8?*^#piwdgg zm#(N(GL3dj-yp6|4rjgpW?$AP)>fAsq40`(=VJ>sp}upd4u3$PWt<93yVe^6uUKu* zyja7%$$FwUrgWx0UkCBv{a?ltL(IOP_(jPw>0EC1SHOah`LA<2`^x;uO zBI@C{BVD!Jijth4dF=0k)jDq4F`V|)Et~%YrS?_)5=_A55FQCq9X2v+YSF{eAYWS^ z$t-!1u=*x_QP{CzBUmISsmE(*(wMpHSDUiy&|>wKk=*jZ)fQ6uw;rYF`>RQ*z)Ojt zE>D`4k}t|}$CzuxIaXjA&eN?FGA_07)z*{}Hb788ZA<(-8^>vDjx#zDQT-EWbf?DA zJuxp|C_8$<&En?+f^vXKi=~Rl+9JinL$15aJh*_JCy&3PWr?KRmkXfoCq_u~V_=AA zj=_OskJzvO4Aj4;z#aXddGI#P&CPLv3WVkBg?IOdsG5m)uR2ciIC`jN-I^XpA8(U0 zi4`z;Ym-6AH-*+0yp&X)1)A`NQhQ~W={{nQ^h#%Pi32+1{jdB|4EV*wQt1ZCxBVVH zoH%CyDCAl_^n7^N zC4@x%dGU)iLjq5A+$2#_;VO`w91A|9DyMG<(Xf9rP{cbLlca=6n=~;IKw@aM-#+tKF#g{uSJtpW`54;Ee#jHXhepFjHt^YJx=YpO%O_ zc`Y%v`!;OhF{C{kg(Bm;#ZDG}h_;0>J-oQeKH8I`PZ~d8(~rY(ZUQ%uZ$KNgC8T4ga$M z;Qm<`pk?hhsH1AOUHVJe09Fp2h8H3hzW%Ctesggw!|1Niz-4t(9Pt%wo+M6^4!k?g z-qUu5eo`C~DtW&y%F#xtkGae6irD&Hp1DZP)G_XC(u!5433XvCeDVXEn3*ZMLseg! ztw%LJPIKw>w{u`2gQS3G2w&jI1yV$MF1%JL`m;>*`^aZLw%Wt_Cez#LFzar>J_xW? z%b9X0bo=gEUUwknYz%j<0S9#T4H49?)%&Nf0)-v*RkUsNHfF1h_rJE-U)WJI31& zkm114xZsN>O*XAcB<}|K1La_nRP?-7y|(~P+v6VjOZcdrTVB>4dYv zV512ie#@V%Zi9r?0>Yx%?IbETE?FR0`>o#Ft!oTCE`)D@JO6X){NMc z)n;DIYT{p>l2B3^Zq$onn$Kiot-vuc=fM)UxlB=&7m`??KaJH|PO;+`O~T11NW8Y6 zKO6x*8tGJw(&Fsqp@KB^NZO2A>4rPG0(EWdM0{M`Oi0XnhWfp?53m1qls@6u;Ge=%^M9SY-{jW|3ddDMr8%gTKn)=<`9>o6wmjZ-8+l`ItFcSe zj6IK&$}oLCkHHeRI8Cng`;I&ez+NnG1{E{z2@%YbuaYdE?hs&8boe5tfd5rs@$QZ< zq`kkt^qq$TA}8>pqSd9u8N)!J1?e%FXOkw0!b~Q!rS2AJmJ`c!?a!HPKZizCIrfCA z*gj^IdGX>!7HD`|qG6d|BZB{Jg!CteQu}w}m0#^Ul{hZLd~cptsFv~qSd*l@ygbf} zP(Vv^wckXDG#Vjk!UB8y< z9pCrQpL}JpA){`R@zsi`S~W-lfQR))SW%!=2SB zD558(20`IO*p7`(vrfUnbQXP(NK9qp zXW%r6Q6=~^|3za1t5(q{U|6CGQ6Sq1W1L!?pC1S~`Pu6BA5uv^=SKr{X^a$;O3)9s z8zEw`iJn))3^iv2pr#oY`MP@@2L^jK26IIErX*Z38M!WRAt!o2K5jDXiPUZO^8yeV2ZdA%FeT8L{J3i3F+A)XdD^myA^!s1)z|{J%2Ci~Wr%`qwzwz!>L4 zQnr;2KL4_$(*zV~pwdUI&$hGCM=|k88GA5g80OeI;up3N%jGeD8lP?8b|JOn>H%9m zX?;F+J!)D@gTXR#H661%_Vx#2n;%qeoB`6m9WY#cdSV>==j!8Mzxdx? z7@Yevm}P?5Du~4(_m?q7DVB?KGkqr4rpII@Fyq)*6*l+#CSMnw6QkZ`be^@%2;cVs zOWUZX{nU`$sC9ToZb%6aYq%HED%k-A*B3>`s2Me%Kikm$Hj)^HFwP(%|JcA0WpOR!wd_8GEGPqDz!EC0;X$N;cip!jvI+8OH9^5J zR#1VO*+Vnyp;4gvViuk$~;AN=F{;RE+0PKG1MfvJET^1dWH6E@_O_N?bh zNSeIeTnMp2gEue6bh{A=?y9` zk6%3V`D%rNK-)_KTx(SCS(}S+dsNHQJksUmVL{I4OS{x%!UPM%x{ZP$y#0_ssKVZz z>Ove?!+-S3zG&s&W*+~|$L|Q18T>yzdh6Eu4NK-%Ec2o`j%8K2+c^uQ5{%^0(b4iQ zZ%^GEN1Gr~i=(GzLaL>XUz0gY(&Wiah^c+S;RLkTet zqT&;8O%|EgN;1hWBgqb7MRp272mH|w`&4!KdcG*=O*NQh=~uzPJXR=}1HqA}?Q&kWWhFkOvgYni!t_k}q{~Iy@M38Vn2rCXv~nJ_*w~&L%|iI_W(X zK4LHZw{k`r_luHfrt<#GrGLGdUq7LGaC}!wxVvikN!G;m%$~{}T*~gKX=CpXGBwiW zPXjj6BrrZjZEOj=3|>%Cm|tCZJ#oFKevU??Sz4vdgH`5>Vmt}~%-4WE<2>nmz39*H zPMxpGAQ^@2$)#S^aCy4QPDcW^2LNvd zq}a0xnJKG(&2?#Tfz2y3|36vCc7gNwu({$6n{a_Wb{s5Z0|>Muy@!TrU;Aat_Q*{7 zH{uc=Vxr@0JJ4`FU#KO#gLaBH4PGi2Jd>jN95=%z?GipzNoS_q0~+=QBA z^i|N$0mFq0;F~_yL#gt6H zMUCh+3rAxtf7RT7e{o|LH&7YU`6zm#_tj~FM8Jn3elGXg1FX_UD+g$W-0%}b6iBW+ z(306nd$WDL^?1xI&c4fj28&kyage72!E^%3mekuS59n7iqk>@W)vGe{CuT zn5z`T>2_uR@?J0JJ{55_{#Ox%T$vA|Hz;9HyS<;a?zkKe>6CEQDyl z=zU`;*gEqYJOoS*JivdX`{5G!;Qprq-jh!j7@QNvk^<{PE|Y-k=Cl4KA1o3h_yd3QyOipGAIx`C>ELu%%nUZ;<-N}y*&kbc9gtN@`tDQqA`j$(WT~j+D_2vjgkN)rVxNXZy|FB6 zX}J7ps!SAE#)iNz>mtjAe`HrLEmUlcn%*YK-2Hl~v%5P?aWsn8NN+5E3YNG0%zSRO z+wy?>8Nsgm)6`fS_`O&WSV~a<h8h87#?xsSfGBRr__-X_DJ#dmo9f+we5ebf)t~)bDX-*LCqYf7SD@c zuGzHI2==xCIomb~4c}AQ>+CU>s>-yHW`U=o%xbqAmGGHs5_``GD9by{kywr8MlxB}nh&xCDsJh97I6BY!yz|WY z&aC&G@1I$-X04eqzrFWeuKT*L>y1s@QCfzRq-8=D{$#_DpjCxoLZ#4hsT`B*px4(N z*xKI?O+bBi4mg*?Nboog%uNSB?k(EUiNlBC04n~sUFNM$HegVk<*TE?W*o~FqsP1w>ZQJg zy%Xt0pwJFo_BTxWzcyAYE(b!RSspZx`qEcdH>xOSaqx8yGE}c>W!lJ8{asp=yW4Jy zjZVNnooS>v>7gQ69|j=PehADsIhP;M+f<}m}xO^5vQhvX&x(Zdmr z!i;_Lcb;UIRTNs5Owk{oQO{Z7kJnSfu;)F^2_Q zb7Abcw{vAn?pkkjfSZCfMz~tN9mnsu#2#6X-<;b)0+SKo?WM6d;fYRDE~04E2!IR; z#a5v>&bubl=mM0-B;es z`=?>1TkxHlDChp(Xi03gDDNXDblXr2s@QDQufR&a5HA3i&0Wwb}>9e$L_RSt`tSdY%5GEZj>>M z#33ni%wGTLwMaL0}PrM_+Qk|9V~3lRAe8i zO$%{f)=zFBDoZ==9PCT+nKriCm>d3%Uw3@EAha4!=tWG86ENdx_b>!1_=Pb-aIxxH zWvV$3I;&A@B(wFHsjlkSq8o0FUU=L_KGm7~)S=2M1M!ug#8939JE=@RIHR~p`I-ZJ zpEZ{y@n0Opzxdi7qkyVC1|w3n|7}ls%hFFYh~+>FSue(TsUJASp=PpKAQbtZWt&l- z4K8If5_w&&4bPPKB@9Jpfes_*X+yu{JGEMRmv_5*PHS?$(^F#&K5<^55-t#FS*6Hi z%M-PTxQkA-n-wcO0a@|Z2@?B5UG+sr{;Txg_zMl->*NilRqom&7+kV6CWZywzuTka z-tH`T0&~V{)TIMv-T%=re0WA`VtB2BmGfFl!^+7NrD&Gw(v_m_y^kHPLK*?Iu|N^y z-LloSP7)rWmtU83A;JWF;}(nVUX{FOPcv~LW|25n+RM$($e=o=0r?@c?ZbQIV3@gT zEpzQ}=9V?2_E3^NmmQ+g_Wx!%nR4{z|D)yPmi09k+DF=(p3*gTYwKsN&{=VNY09Xt zWGt7*C$imEOsyA<5fPhXznk`F_(fJPcl1=NFP}Pf3LPzO5rSlKxmvZ=z>A@ysm3-0 zbyek67BD;Dt*r;2@m`%{te80FP7_HF^-O&dS7V2r^g&Yax_oS{+|G8xq@&J4D-%_R zpK4_Iyb8e0?Vs25#Y9C#lhIPHHIUlNgOcr3T(LIfctO$+ioF|_X1#iJ5;wNj{tHI= zi@$m50MtnwsEFFJKqKwPNY%3M=qFQYO*R;<^Tqy7s)enq{cIz83POZ^FawuRDDAxT z&PSe+&Dr?9jeGx-crYZ*#+O>jV{$nmqDHL#v}vJPckf<1{V7GkNRftd$w@l3e!h@m zH|=s|WA8Uxkbs})R&6=)^mS}r+`dGHQAbcG$z5)b6R%c#AtR0WsRb|&W7jHAf3*}Z zd9aHeF_elVaIarC-Oj)+&lR=F%Lri?RjU{w``_f6!+}gMe^$w2v(4D>L};-Njd?@9 zN}nXUNvYo3($Ox<%BUJEC@AkHoO}R7TAcA8 zUrrvdb8#f{sMXvQ3j9 z{#@6G+1ZH6t)9BloX=k_xei0XH%+-ZV%dxX$w=_~b`1LKaGwa!BahHDBF%aTjZ2hdK%qPsiYp)Wob zbT*qL%gV~WZ=1RD@@`nsnF>_{>g?l}uaH}q9UrS!?MyHEwEX(`&b`nS&H#;xvFbeE zSCx07g__t#2cC1tdyI_ZBH@a0qOr#OD={%mA9psL_h;3shBsZ}!>${)`^@cZZ63dr z#rkmPs}AyDD@jVDYGWq*<;d9P*iM1or*>(<5=_5li$mN&@3w2*^$vx7Jbm>8!17dc z8g(B8TY%-*Al-wY4OREu$kw6?1&_ z7=G5K;Y7BP=|MB^femgvVzqvKQc~Bd;Y682JNpF>vWuTyE#3T$`KGPpna|Uo;3D7l z2dQ|DjF)@jhMWy)-o7GbyKsc!&JB`(``cL>4}7J|gQ}zjV#22;D~jo2YJC0XDEh3a zk>_cf1S%8R2W=WeLILX!LP5bikx&51q;cISX!JZ>{FZm?@Agejb_0vw$zbvO`-vha z>chovgc(@;{w}bzP(H9;r&tG#{-kE%iy7?6H||HvyUwP@Yi(h|_tfPj_m<;bF7iUD zf`WsENU{oJVN=498rj~D3mv(%bn&ktyz$trxt3XO@u6gXRUYmP=7sHcsok)RS>ei3 zW&4%n$cW;qmCRTtm}5uzxVFwg*?>bt+yQJ-_k9{G^cZ1sj_`o%LF-t5 zmbT{Do{MEm!Af;+%vHOun{nfW^Zt{(gbnSP?;URTDao3@VQT3sb6}OLtU#(exZ}Ae z#F*5^eWP8fG(J^){4q(^uw`|n#7cQp`SNh_nwuzx<_#r9Mo zJEw%n=GP%{!aP;WX53B%nQafx5sJs8XRMxF+mmSZd2OcuK$2wa^eO<(laN=leu9Rvy2e{9r0;YMln&($kvB zl2v|fADjc1By%%*Liu6#Ls%@<11P>&C{Co+6f}x%=wClFKqh$|ZSA}x({-&HUn@fb zS@z96ZO|v3ky@`wUc`~^QY{A48SIjf+;oZChQ;pm`a$E=BzL?!lpgTCIAO}Gu1x4S z*p>PiVew8G*(o>=bcW2~tG4l6ky;hbuSJ$T-S-D(T&i|lhO{>wCqC&-kB{gB0d$*fQNu`ai|V8czoW(&0Z1oo^CH`IaMYTi}NqKvav34GEWZv%E{ zi3AcODz%X9%R~YRvUn9Gqa;7JDhUWA2zIFJqQ1QA;%!v#N;Dvl=xq9aRcStZ@o@}= zB8^$5t#Y6o!&IGjY?$r5as4f$J{|$75Bb*kZ|}s+-ZO3a$)9xHc#68Gu<`tU{NAV& ziQZg$>`Y3u#g&foi9`-SY|hLQoJTczJ%(WC`(|1O6!*WCL1C*I6u?_Wb2?#0Ad`&7 za#C1byFcV*IW{q%d5$n+8=JR=tHHJO#1ppKV~#*?!Y~z^!#j+&EHd9vw6@F4rpkpM zX{=&hx4+Ne5phyaKH7{}BO?bYwgq?cs~3VSuek5EJJ|PAOPTLs`@H2&5hle6ITb6J zK8j45LrhRdJN+fPOA0`>pE~qlf5rVl+_1zwzEgaCCwR&$@JM&OTtqW%{8oKll~cdj zXxS$0?W?6Xvt51%>r@A7JSFR|U)N+=;Kkj(%j*nXG0rCdcaqQep(Wi&<6($JWfQ5^ z2n1@@7xH2{_g(gGpKj~})IJ1zW48+7KJFz5rFmP^3m&gR+w2|9jf4w!WHWU)SCMX3 z6xcE5k%4~ku>TZh*{(&BPp^%70;zjoiA8jNFpRZRNk{n}y7nb#5MBE)gO1q-fkA4s z^P%&8GtyK~OmB5^JATgLfKv-ftP zh|@57(*kUFzM{MmpMU3d4qk52p5lNuD!nFeDcC6p&n#N0L&GM;!fbl5+`;mDk-4T5 z!8=`icj&Y2Jo348+QRXYMW#oO}+#E(o zZ7#ICBNjh*fY)cK#MHtVVlhn}EJSf(byOh^EHN zM=O9kbpNaGA$Q1z_8b!Gryk;d$Q=SgB%?*EfIE~zIqIb+GsoVmsfezas@gF5!m;s`^V22Y6kA{BGtr zA+x=L1;o`H*F}irlXkP-^svGcQ5w4VT6!@KmZon>=X$`~VmhK){4`MRs@sNg{QcA- zsS)QA6jor8xbh1i5Bo&8~}GJ)!5{sR$^hdc*9dqW7>VIu1;HTB#u^e)y)YStbZ% zJmlzCYa;vU4q!jQi0mgvzg{kYFZEn1ggNCPeei+GQn*V%a_+ok zMQ(|bCPR#uZ@67EL#H)ZxE%a;p_ojpe#y94;3Ecy`Ikq(5^PA)f z*Be73;+#!fx}Ojx*ddx-LM zeFboJ4|iEDMF@mAayyLMsZO5BDtMBv67G&g$k_Im??{C|&CsmD(7W$uZ2&VS@l@!R zJ6?)Vf^XLx>sEK^Qo`SIsyjd4`B5Acj{sL9$s(JzWy{=s@HWbGWAeg|zElY*e2sF| zbSd`ke=940p4$g`(v6+fn*bmIDv&|vg(Cn9Hhgk&a(l(|w-d2st_Al*fn3AG<#`B@ zYnZ96rX$KVIQ)=nuq4Vgyx*%&k=#|TZjarYP8Z}{5hLLVy_S0H;Tg79m@)(I=(>K` zi=ei*o^6lbk6>g^1{J<~eqa8Sp0ZR?MgwBIgJFDmVa#QXTikxxNO3}Axc{qRR^dmw zM}4~~G?rgWwwH=uE!9Ex9ynomE6X;!tJh_DuUf);qK9_Lq}IP~q*rfnF%K)@=MJ>o zaHpzAKS~Wg1t&)JQo7%B<%oFgH^_mKluB0R_7KG?9*4WL>04)8jS}a`7zndCa^_M| zhwJ2KVT%_UQiWokF}HNpGz{t~7V+lF1Qq1#D+E}!Wt=ij)g80C0SY2*UZ(}aM>Uvg z$?ct)5!;T;9*0KvZG^kV81{{@{p|4)vCB+%CUS^z?CO2FdQK3>%>G#%^ImuaWI{Q+glea<;{ zV`NIAJK|z%f~5B(Zok|4rc^NxZI*&BD#xCI?9R)zIL*Zm5RapXyku~$MQ1P1X6DT) z+9EipCc>43LS&}n5GJFqxfDroa~=CFk5^|p4wgGw&b#5>ep~TzpO$MDKiG<8K3Ih- zQT*d_ zlx`du*!qaMatU%g)cv0vgK~}F_3Pb|L@f+%q85h#)8my#h*}r`j4N~n6uYTk6g%5A z6}+z>kz(hka7eLBjSnli4k&g?HietB)SfuLP%k~ssNZ684Pr^p>B~RT3zJx)e$5xc zklr316vm2adN@}bAqwNh_$5$>;lEp&tPU4vJ24IS+kBNxN1N@>4Tbz!=2^tiG=#A@ zsFdPsn;_i61`i^i<&|mk$i3X_k=j+BSxnDf?ZxBlAY6v=uJ*gzP*|yebff)#pn>80 z4)}Kdic1;_d%^SjrHQ>kU>HYOYH_#k9+liw@3`W=tLiSA8q{F%_3XisQj5)tU5_0u zgwRb>dm10iK;853vzGfWQb48t@zs(N0UOeyIR>An_Qsc2;g3Z|0t4s77|aJ`!2vb< zY)`tY(t-0YE4-oL4?l9ZTiE4574< z+V+&M*;$>aDjNIvADUrM$Cuu^03eq4Yest)C#Lpak9i)|ASV08H=W02YrL7;j$Gp0 zlGY0BIy)&7@aoDX?pZW44sH~tW~dl&n}Ye6>7aU&9nw%y8#vgp3*qhtV+*#4HJV5+ z1DP|U$C;T%qwnOKgK8+!%zC6lTAYM$<~Mmt9yqP;z&E!X+h?p1eAcbXQZ-WnvHc^u z#1gF(8(OHKRW2~+cAw*OQ~*g<^#QJ$S86B!pm1}qdN0zwRAP5HUP}l2noG=-7xyuq zGuvs!RBW^ETh1rEPGRq}z#ru^h84A)${ zE7P|2nf4d~U*)(qxJqFhqFM22Ki0N3F)WUDy>i&Lp6)-Q72tqaZ~S>cfC!o3#Q42A zoD0+eiD&(>oFv>^(pcHvvo2eA$#bUa7*PUn6p}$x;O+vt!KaZ?|D{4|h@xMi#sxZa zTGwrFDs-3N!+@ww8xs1v>eIEN(a)HXX`@c#==a;`&+5}?KZ)CXnc}*|!0f0a zM0{>oETn+VA`N-YZHpDcosIR@y|Z}E)hiKdWtSuNwk8m~3PIEzh)pf%QePi-sUIz* zid-yrhk}aF+|t62Id1#Qg|i3U;97|u$E)m44HOv+Z7WH-sGk#?twER4o>X+cSF>ZG zgpShskG0w>(%{qof-1F9lVl~!M@9f|^{OP}sd5%G<9WYCR=prm$u63PU~awi`K0+K z?=kZ8Ra*u1`T?hb5Q)^Ic&wO|{j9*0sf!6s^nSbPEp8mer#nJH3|I7D=QQ}#-|aOI zSU-L+1l8Beos&V z|0Kvj{qcLfhzKgT`Rw5XY<&n})E%QbGoX906w6LPZ7p=TrDR4ntineDx*Zg^IhYT{ zYaVot!%N^h4(<+*3Se&Oyk#YDbb#)125=(uXQrcMyB1Axc_Ipyttffsx!gYR59(Rj zdB0LT7P}(x^uTx4p&lV&(QtI{{y@o0ig>fR!^)yptm8HIh8=DvufBah?aL8b!Snt( zb}Eda|6@=7SBByMIFs&wLm&F06DH+)E*7TkI`cB)$ZcsD;rCAfBWPHpb zj{WnZ>L{7BH6V*W*1;=FjaoOkyzy48*a)8q&vrII+Lw3|afXB5%@(TtPAb^b?`vkH zYJkmTfiy%0GtZQExV3x9u~*GFxFNI%uUj75fW3xe2 zrNxyI%9g~eJDl2Wo7WD$y7Q8E8V$=8M~?5cjbByOwtIr~@gT{f5Q(|-w4Vk%Oc$Lf z_~mcGd;615L77W%*sC}P2EER6?Rl74anGcyFpSr%SQWo&P2bI~ov&stYun7e=l?EN zCWQjTaCB|W=*4jzDN-%CVF56wzkdDtBVtM$JHE%UB{SHaMC*Uy1mBab2Ux2v8Xq1% zYrPM&o>hLBA;@{#{-(R~3jLthvz7f4u7zcDfTN8E9K9}4is%PgrBP-zXn@0OqprI> zUm6O9nHHD{35VKk^jfP!Ib8fiPHLJU8yQQRq9yEtw9DsLrvlX8r5Ep z_tS7Uve%x690VL72$RY)t@-WETRAvzY|M&ZbzR#`n>#A-h8n7bQx)s}T+M<9FBPEg zX){Egr4x3_SM`^gJAmsNGlZaDR7I@^+s+MH$*?<-<=au68{ETov=4lWazBWcUGb;tBcn!H^`oN)4YIS(hYW+_Rvjx_W2dp+IzxI{z~Pr`=!r5T#1{61Mzx!(I$&V9T)rCy8N_;<2&rrVHYe)WYf`-tiI!w^v6sElMWe`m?;jEL2FofvSpZ-MMjLhSU)$e=M+(oVpFSSJpBRI1awOt%UEaxuX>bshT&DqrlX zNy+Hj)$DIO?YN97_h)OWx*Z(g_U)e>8F*Zv6C-FI?Ftsqp)zA|bvJ>#+*iDQ zOB0f}eVb#e?SMX!T8&xwS>^!kF|A4tICj@?*kxzkAq(*zt3ePQCy1G>e0;o%X{f92 zJTVNm`$Dr~tsBo7fJDLk>~Vqo2sNs;i&8ekD+oKtkQ9DHv!0<#<)vKxwUm%J5(s>W zp}%B39dpkvs28fc(!xL_TsIBxO_TC)2src5Ovc1rVD!$XtKOnkourk5+rC!WXc*&= z_z=b2Avr)5&uI4ft zVc4ssDAO!XRS?i9By={12Hr>Rw|azSaxhTpcT*i1=+D$_p@PkouCPkyH|)L4%1EBu zN;8CQel!?p*H*t$z3#92UUh#eeaH#GX&wW6v%9(OxMFwBv7NY`h-~-_7c+Vqkd}{! zxZq>Q_eb-9cBNvKbLZg;BNPjV*u#f4$5kZp2~>p#abcbZYOV+TaSz9~T`akXs7Gm* zQ}0xMlpIg@87uG5O41j?M~(shIHt+x_41c-2xZwZE$CHsHI{t*!|!9ycFK3gRJR2N zs&G|ZTKM?iSsuO#c75)WMh7)j==1$PT>tqLv&((;LEmrPDO?j%!h@9xiraO4cp>dK zQMv_@S9KoDQZb*t2NmAO#<|W^Su%-eMDFGynFje$tBpGLf>7_ipo$O?tcz3sF7r;D zc6rN~>-gnyBR8tJ@e$fu5fO>JU2S+?Bg^24Ao#Qb>SbOm%4OJ zB5w5tOu8FwowCJp?kJBNnF!_}; zg}f_@MYBSevgB&fV^iQ@? zrNyBb`MUFZ6wQv^r{zvIE8lGwlIvFzeO3~96(-s<>(FNz&g*8bY1lr|WXNlJOP$Q^ zW7aA1PZlHAa&qKPh8glh!b2pTUcX(65MSjUwkSSwr>nRb^(u~kGYTuXgydR{Ktd~MY2 zT29K}ynm*BB7WuOF2}FTh6DVQ0f|ymFm$^xAuV-Fro3K+sBk4qRJa=F>l(1m=<*Gc zCy)&Gma)j=y-fk{wZsjXcnnl^1)-!~`CzWD`3;~0h5ye@sc@cAs;3FUyi zM~5zbslcU=?T1UBuFYq~Jy1aH+K>!r0V^Dd)7Iu=WhmeHdb`=?WN$g4?%@}_9u^=1 zLSM9viCck5Z;crkMS(bY>5n-0wGJ4PQXN$7rf?opE|qguEOM?@58*)yR7>@n12C&t zNIK8Fc;q|2UBj^Y-~(+AOZn781II3WKQ?G~I-S?m^`-O(N+ni@j#uJoHouljoq~bc zj)!udny&LAy3I}+IkTi`X|6Q3c=bNt1a)|NyNJQ-LOQEwPeU9=#dRz!>#glHx4+Ov zA=OxPd6{$3pm1TyJzxCxZ$3L9=l_Vht!H}OC`xQdR9O;yjjoijzLc2{OVn>>5Z8AW zkOPY~-6op-3q3hK-*in=IHC=yj3Tdd(ChC3wXLj-$qx9~;NT#^%r}vuodFp*{Pip3 z?wNn__VYdT_M1y1dizDRIp9F}b;dt}jQ1M4j#s&wyDCl$5gTwLOcV$1$T1zwZxEWd zH+(>GKzW=DeCLzYpk|Y~V0b}6@(kM(;>Fhj>OB%u)E*Lq)4BcaXc%q1;)vzWf<{K0 z*DKSGDqOQ_c6I8e3#XHDOiIJr7Yr+ny3_>@%^}|=N_=QXlj?}vkTFycp%p8Me$U0S ziJi%|43Qs}N)=5FK(cmQRPD!IcU~G@5s{j(?zRp9slYA&tlrGdi)HeHV2I?_<@zXA z`|ZI>%YL~i@V^#C6QGXImh6bvTxUFcm;EmZ0EgB7(`&y<{rPQ>uxRQHoOZgmO5`MKa`XMnb+lY2t? zWxf6$hbgs@9S91WV>Y#+vdnzS%MwvNhn#>Q%357h=q8lix-raUN@6n$i$IWBRf^=+e z?$H=7t}3j?FS(nUy3tE+9sDM0`aN}~{&q!pzqV&349(}G_HvkZ$5*b^^w!gWVWg5| z9(4@2j>uyhU9{+{%L4D0OT34`^QEI|NZJr=^DNb^V+vY_~RQ-!U%S9;5J`JBy%Dl3a;F1&9 zMB?Rkwr{`lbNKR|0`G;B=^4GPP)j&TV2@e=d4M&k_JW^M)*x;4h&sZM+ZOMu;5zGf z4gv;f6B?DX-Hmgdkw(}-Z~{lc>}FRH6tgd)z$^I3vDdjdBXjfm)?u;5g^SA21@Al> zxud|d8rA9!@2J|Q4#*X(z8-;q5BqOBG-klGj?gD&xbF`YeKy6d_GGHvy7T7K)gaoe zs{Q4om$=iaUmP$Ilh4Umr_?k1l;CC^%`;mD?bw#n*@V< z?N~OqF)*pq3_sg0l5&}{HUIYO*8FF1RHPU6vo6D!rn50<3wAU zSt;Fa%u5=ZIZop5LTnwEV#QA+78M{fonN{n(rtp$JVf2i#3fH1j~nd(#Za}An(p5f zLyEtOA!k6xF&`>O1@46fS9K~%&fb(2_loo7gVFDCXf$qhvF8SVJFfk(aSQty*=Vc{ z;jB=obq}cxd`5&HHENgnVJg9{n`#bFC#B_oZs7 z%O4u|-P<>d!W8sA=dR5FV~F@YyOF^`weMwirlpRUp>4L;gUf(HB?B%uv)<$#5}FU^ zhy~3X)cxn6Fr8l9@$vNGnkX|IShbO7y^|Av z9I#lx@_kYIK2*6=wb8fa@NyYLp*8Ep}v(9_=} zUSDbS&GtR^8)|TvSy*cEls?tz$-k!zx0|ulId*?VUb8<@B64o|ZX3n3{8UiKubSzhbbi8Ke-SVy<}ZTb^A1it z>f@z;z{~}59?ig@aENHy2c|U&oor~>!88Ec^77fTP<@ z=0nRq7&pr3hh-loZe0Pc=_z-ag4c*iFi-Q;4O3}I*=W_|wZsx;YO#IvvWvEr{ znK#T1FHKH@?#gLHe~lL|UE=*J-9ic8+MV}wzVl!SRa9;t!7a>8^BK+1(4#1s1uu2p zntBd}Taz$AJ(4fJ7B_C1x{p`}Jy@rcR}x7UC!g_OeAYkVlGe)}aMd0nP_>u>1}{Ln z&SJET2vh-T=HOyPqUBW8X_e#zzGiQ#p+ut)wfL(%ZoM}x-#gA4gL+W)9@v<ghS5f$Zi_oRg5Vtpd&$Tf%J}w5ZGqLQtTocVig}iVT=$!{d zg*=Sb8GY{8+1MWnd7A0k`+4!btimw)~&OfKC?>QJp)m zR$Ks7!{hcRClY{%-1)BVws0eg+#cHY80>uQ@aj-sjFH{^%d4wSDaW+%RlC^-d_(wl z=lPxHvxxY|BCvFeWzYT3+%fKEPPOXt{3~0)_n}}_!ZC^tLd(+UTWDd-(sKu8TNef? z&tP(CO*n8MTN=G|odvRs&1Zp4zU0NTeBqpMz90q|dw&yY`QhTNqB`WaANjyO!rC^fOFWBXn>A7j0dVG`FLHR|gxi}yy zt`E8vWfJRPHGj5N);InT*s0tnH0*B#r%H0Vx{=ULZ2wX{-&|s{o4B#t^H?Xvm0GAv zf>IJCNfsb)MD#^!rM=>M3UbropB2Ud-Z%0U;+-VqI88T*pHxq3`u0n1uFj!@UIieb zmr}|$$Izfb(5Cfzf^98$6%eCoS(QKHJg4}^9JMoG5F(bqBwUfRUrB$nzl}^*4J~T> zopa_hYW3hlodsWiXKu(<+^YCGZuw|zM#EkG7?Fs^q;ql+aU+r{*G(lJ*$iOgKtr#; zA{JtJU%BQi&Gz44LYiNfFz*lU2QXiF4@8R`3hu$>JYSHzo`wM}L+LC1=WMO@=*5!A zGx8L*3hs#ZozS$IijVQTtJ4o?9Q~!c@Ag`AFOtjeW7*#9(Xu3{S^D3iwz%kj@2iE! znWjOt=!|px2w-G<9+9mHS4*N3%xnB0cQG`iu=gu3w_wxxc#G;-afd%pGY%CcI+vdu z+y7R^65n*t%Gj_(==$u)ZA84(%lll8&1)a=92y7h11Eq*WEla65e~21Vcx4O$WOTY zyF4B5<+%(AbD9>9WOv-&_AJY4{1RV_5;p*{1dKlOYB{t@@`tj5{=fT4GA0j6p?9k|FbiSTbQZ~yMboTg<~p|0PjGFDp-(Sd z;Ew(#A*-HEdz<}syh6RO>;iwv?O0Y!YS_^B#CR1o9F2ss;A351bJHp^59gtR z>%Hu-_AW#HEFo5bbk>VH!}DrKBg&rFPAoKzqd3eBq%6+WwWo7oU9>a#=o_HigA*DzsMr zX!RB(iP@>_7N{Js&u3w~JXTqL4)UQB75L$b-&8ATWEqh0lINe_Pei5aIn_!GkWhtPSIZHk=8@YOHGlZMWjk`meWtZh*A3&79<0Jvo;@;3uD z1q*p}hVU%owpW%eH~RW@UO8{j-iT(ETg-WA z(+TC_+iLO*;u35M<8xhfn4|Co`6wdVqAXQn?R7v@iA-}*S%m)26MI1%KYpCqwaNq7 zip|M?@&hSKz@SI9U2G{s<4DPMMa!j=HM=)JE;66lrO#TOHVxa8 z`2!p9hy##bA3vbH#!wxj_=gN&v>WlU5yz(=rQF@PKIxr0a^}>^>8J$Xltsy<`N%|= zf8{Aj2Hm+!y0csJp(c~6+!Oa)ZJ@m9rgwH`sUh6lVyWA}uPx>255Kljzd%%2eFjqM z(624VY0pB_0r<5k1HZQFUZp?$+6>HhR!70un0qF%&y+Dl=C`5W{)ew6i?&_g69b?W z33%dviaHhsI)&JEBVRE?aT0?l zpz4?!f2ish1Y{#rvP&~Yv!#Bfg?Shl(^VS6OU{Cw2g3gl`M2`)pX6VnSKI%N{2Ktg z+U%K+sB#ou@PAD@@whm{z;>_rw7kkUA(!rLpmFL=vqfY?A-0!r4iyap zg+`?TpnJ4YXqgU+5kbr!0b-t;_>*SDW0wJ<_Te9{>y#zgE%g(3d-Jbq6nt^TeYz{H z>~;Hc;+0u-M92d`YbMpqg$BpryP(hJ^kAlgO&*uIxQoP;7Exh8d9+*R`;{&`tB5;9 z#Yb77_&5~zL-8@}?VvzEYe{XKR_`66;$wIOgHYt5;-k``;-lXW#Yf^u&znAb;g$K( zKMS(|(y3DZlK=vmv)i|a0H;noai*SYOPczA!dbmmMvcUTgoL6H%Hx{wPP$1s8Fw!# zSH(Vm2wxXFb)7^mpgcyzabav}RA=kE*Y9T8k4flRN!<>8a8;J}6@O7i*adyFyZ6jO z4PnyPW~uf2O7pC3K1+%&Y7JgTAd)5d1oT3sa0+d%xb1La|8s&zBgk-R?ax#u4^o-s zt|HV0q_P+PG?fwgt2{tm^77_fhov2GX}k1qE^V?m&c37D#Of>kaA}kM>C#q);z#hH zwy=PW#wG{Xz=6?{TZ~%ZQCQFoe;fS*GcPBz4C~h_Qz-E#zg*h4HsokwIH|F-ci3lg?Lm_*T5@qzwF}LT}=1MNEzCBf3(n z_7`eMzFJP9+88?xe}lN70q@g}2A&y++l|wAUHiYpV|$@;+mU;%=p+tY5?_je6nTk| z<(L*v<+A@qTjRjbWPD={(A5@UsJhIzRL9Vef4K7jR3eG8lQwuX(m_DM$SWr~0qP&@ zD>&Q5XTSn`RIkz{*A;f6k{Z}I8yC`XO6T-<;_tXlDN70c$sz>k&bZQV=f9;;%NX2$ zaO*L(Ec?S^?piLqNqpeoT2kjm>-fZSzDDk_I9S?U{T zw^}H$YU?6ewY~q-s*T7I7yIm+muTv5xzU-VeTfdjXqp=0zSyOYl1AOy*I?~yss!co zK7-l?&L-ARmr964yZ+alKZ$kv}wx(Hf<5VY}yQfOLL_ zU=H~&Hf@iHHf?BR5!lDDsXHb79>7K#l(7eWWq(#&EX0b7HHYe=If$Gu|5@Y&LX%+k zZ6=Vv{c-?3?<#pxqW08&y$En=>jExql0uD6|HY*(zFse#=+c(m&($aRNJ=afOXCBH z;%KCPUr3aid@D(mnxv?WJN1kCH1&h|L?`iqACt@XBCI~y4IbtxDL56sH#jvQaVhVt zm3H22-bSY9&Iheu*wfY%>Xaxpp6AcF6H5mob#eOE=z@C_tAwf5Z)J=oM;0 z&A9e9oXWL*$0|hp>roi3{<0RMNKHcjkeUo-wd+Pm5}G1uOMn>XW3wNBP7hY%2>;zAT;vI1 zWofvj3P(vX4RN1MYDqjM<3pPkLb`YRDHt1XtVLTc_CmzAKWt1R{8DcI&AMMOr~Y!_LKjmP1Fd|zxjI6r zPLb6;^JA1*9PE>J^9QZKg|Gm=(!4iPn@;-r`nddy{v0CuO#BvPWbSMa>(yJS72X8| zAkRIzAbn*cM=?IVU0&jprqK9`j}m?!=orA2<1wISDa1HkEH)oj;nAo}X>yx5lT-Be z&kFh+F?z~~uhb8OjOnbFIb_f}>@^|74G^(|;Mdidv0Za+(Vm$VUtKX2O7@y2?uk!SZ0Yqsl%Ise8l!@!!2YmZ~kDD2BeqBUD6mtEqs zMIET2312Y8G`Gv}J{Z*dUwwO(BE(!(4f1$$q%N#sp=h?N9bj(Ic^Gl;JX=UJea4bG)Z3mAzwY~%+r`gjazDg ztn>Gj;5H3$gVXI|Fw>7HIWqvbw1OAzLNc%@7%3!4wtBQ&;b%iTMhvgwMO5szJNjql zsF-_VUc5{Tc?7?FEog!B2oOXG8B^I_72g_Eg2WFhPjf{6=ilqWLfp`R)r0|q4>I$S zl3bXFsiR{_A9;e^lr-1lfXqZ@>7II7R!K>W^Kx!7GX8|Ps|_1n(4)rG4h>SBjK1w@ z>6Z5~=)3re(Q=1kqVnW@pgd_9MEcRN4%^5}!CITx0hA}X4wWb4quDGM4T19HXSZb_ z-BG250m_pR$|c*&-<1ywxvJ@I#Y%hr{{~;m+>`jusl_&B?GI(HF1Z@xK5<~Z{xht5k2p`z8nY>d4wrnaj zvb94AZA18Pzvm)u__My%I|Vt;m!&kQ$E+(9&SmPCKq*A3lNzs(9~TjoA^Ra*vUFa# zI{5tg^IV$67TomNI+~OQfj+O_?m}YY{BOY zk^RrCT75Qu@zZ`{Ru?=z5;=L!SD`>2{BGGsGgk|6qHa!<4bTXpQD^=CeQy6FmO3kd z{wkY7ssQg_!onz=v?p@|t>Rvy`Q&d%9fx4m0y+kq9kKHO9*x_iJTGqoS2bFJyYm5w zT!|rcoEivngqmFWnP+q`$u9N;cj?G8E>oo^Y#xy5;yZ<(DYb}bKu!2&FX>i7;k4uZ zz*LRm&{R#C?8SYnAEs)?oYME}RWNPTVG6yHeut)NW3jxL++<0D@rcZJ^&eT3r@~QT zZfwf%=S1aaMgH+yGwO`Ph`rKxhw+5**cX?wMcJ+?lfDUtrGTvptW7gT9e;SY#NQra z6_JSs+akV93ecWr1qKGb_dY>iRF*s+{Vh1>%Bi4-JfJO>b*bNbZjDZ&bWW=0SCWZ8 zQ~7A|T_l|~1FH89WQA5RF9OC+sp&#OPf7mC>f3EieN@e1#AT~Z9g?b|R&ID>iC5+l z{Vu_cp=zbv&#(>U6^@V;4E3xK4L>mqLJ$Bg~Hjn^YwhJ`~7jh<7TMilAoclL)}MZbSK%v z*hP(BZ3c5jF>Uq3vd~Zsa_6N`wjHVzHz%uPH>=5Tm(15}(e>hgsHn$Ym)K;yVb^c{ zB%lz#YN}Ppn8#)F(b~vezDC;)^vlci*S1m3(0C#IYNQSrUiWKjS2^BIzKr^-F9tU! z9d0NGh{pf8PXG3o7G&51s-!dq+aBtl@k>74QTt)^j-lu=*dlW}GNvV6HuO;qcK8+) z?C#{k(B?;x7UciQx8fDz2cTq;db95=$Ha04D3$MYKUyFY8w(@@^0SCjl7 z!u_8QB5)gI%c!wdp0L+gCrs?3@#%6w=2IKF1kWPwG0z8huC1ybGI36!wQ$BOcuF!nn3ei)-ffh?lu0|7gUV@aY!Vz6}D zE?jh{IphGSeKCY6`FF2s^M9Luk)@76VS#Tlft!{o4H*Y?DT{=$|9!E|1fRV!(euuuR13S$b?bHaXy z8v382hF7QqEvM9`8Q@-8Y2?(RTxszRR=P5-R?I3(P4cq4O7nGMe0<7)QKijMvhbmU zuG#coz^%;4U(NV`uYrGFjUYPkq{(~gKp#ia_;eNoA~Lqw=9}#5QcNe8WI;&XfBiNY zKNhe^FtSq00;ayo9-0ENHhrHX1-AyI?6T z8}`7`fY#Y0U|J#m^1b9fOJoGJz44Wr2ZfFkY>v%p~ zp>(s6x)m#3Qc9HCzws9#L>PM{P5o`ZKN6zTBgte2sq^O0zd_jkUyvwcY#16Os@{|HNC z?+A_5X?Se_HM`WipR*9<8gllhh^P1oi5lO|DIrU9`dI9wG@cQps@@NNpm2%z9#{!c zp9Aq{IVzx=t=s2O`rDT?Ns}_7>TDBr@1+_C4fi7IGQOrL`h5r}VUq6@5<^HikXO%0 znuHyonfdgVxUvordGazHDCDc@>1jOqiLw$wk93@#Ysdcr;VXwe{;R9{_raD%|MUUQ zVVSmL3oUHfcK{p$Kyt%?t}CHd5RX3XA|I*p&keFJGb!9~;^;Tr{0fi#6bB?(F5rK;RR^g++&gajG{{Qv`lZ)mH z!w#jefIZNIyCUA*MVLV4XZUR`KgjLYP!e(&C^p-2Z0XAfbEHwY_2FcJh`L1*PooCN zhR7d@p+@ux-(eS}ao=+5@r6Wx7Z7{Y=5!Q_M;&O}7@4wOWZR_M#Lv4}x*>Di`!yvu zh;~xBAA}37B9pNRfVe;gEa?_q$cpvyp;Qi>v{P+(r_WfYDn4UA*x_T`U`oWl98@LEIL`NDs6xk zdP!v|=@o;!Re@krQ`6qGxCIS(e%22-0(zZ|kv*(*xnxzFO`Iu)x=q1X`vv6#qS8Fs zck;)~)+U@x73fwrZ$PGdJFC72zg}*nHoucTpxM7R0QNure3MXd*r^kD(VJh>`(J=X2BOHTtKN4&edjyEf~Ud!J~9?RZ!$GEJ8!^!|}kior$R`IJ5Q``+>&G@dqTdQ(F09=`;PTZCXy7YfLRF50qSAAD>LFB z!zeUjS#~xb9V33gW5vpD9~5E60OF;@6o~8dCGk3=qp1Q({~#`3_ zn1XoaXCBL3ik7)k)tlJOLMcjlIUX@lFU5hYi5*SX`48CC6rK6kt~As4_s_y``YbS@ z3Wr_e0@c*|lrej1Ct*=QQA%61(xBpy;moXPIbXQY{j$HqvN19oS;& zQwWQtzWklb@iRvA?TqL5^q4L*Jmonfpw}vN;a=mXF9>GGenwn9z}$#sqh^6Fg(h{p zWw&-xUn0HF$h@CF-aArku5-#hpGfR;D8l^p9RGLDgrUAqMMq0HL-ol&>y)q)|0kW2 z8x;Sa>6Fa;1=q=fb~5-(^shqlZ*ToXD(J6`oj7}50#>^OFw9_OQ^_)+Pw-J@ol3zk z=pvY;e4?__&2pp0kH|QnXCsha&!n5_YZE1aJOa9TzlsUn>^JgIEs#SEQi>s<0}t4Z zI)JSwlYR)nyvaLT8paqHW1CvaSJk;e2Q7RL6~6CIMlWUKdf|Zwz6!2ZFWu8RX&^>< zkZXGCyPmI&x98etf3#+?j+?lc{<_xx`}>Z47AR;!IJDG*AQ*H|@`b=FMLehn-Nd<# zB0|Y+Nl-uJ?E_XPs|5Z!={usC{R~q0{nw)C(-d5m0PZ2}VyYkq%O7_H8T;_Ui?f3~ zu+)GHem=JoQ<;{Eq#WMrtcG$$*S(|X6^b_GYjH9YfZaJ#@{E{~6Pr@gJ3)MLi>1b@ zHB`J@)t9Thza(fi{HxnrxC{!a%1I;T-}F=0J(B!Elv}LS#!E?;iyV6D(FfJAD-FTn*d3WAoyLZvF)Nx=(bminwY%X^Gx--u|BiY#s%W z*2i2$$z=>+kP-Rv^6Ex;9TEMpY?7HXbu6XR{tD%PTAJy3DcM@E152}blT%BxFp)*I zB>nu-kc`ljpjIKSK^b6a_EZ>aX*M>KX1p>~n2rU11wEFx`sKBwe`SwKuo{tG?9vXj zVgEIO{MX9G!sg0px$+8R#tsHcbk-(Uch6onfN&zVV6E~174vm zL;ORF30xvubRHP8=(P~M7FVp0ZcOM*5SmF1Yg#0Qz$d1*C$pq2VC=e|4GQf}^mPDNqcC}|ZRMo`x zlBFiP&*^KK^b(YXTxV+Ieh)(6O&*v4O5pr}a|?uCmq6z0_D_Y2P2F~xg1X3eJ+49y zzrnLk28fl(hmzi4^MAWqzd;w;imAO|GM1O*GSw4rPD|Ajw}aXq!VD@vs#kv%W(!zK zcC?T6Z%z%UN1HFsQp)<-a1J!(0sZ82pbXce#~9=?h-ZDRG&FR-Vsmq|gOTi!xT3LP;~@SrS#a!* zNrdH*Ppd%Hj9#0R3})v0Bh5|SIB7X`t8Tq)J*xS-Vmc*b(BbRb*c7l%yy-v z?jv~d5E`LU3^Pv=yi`e?f6AFMGBTb!qr&shF#IZ% zrXivbKPiG+TIPXHQ?4{4-vJZsRdck%isp<@AogeRPQ+DVN=)Q*w7^z=TvTi&AIr1V zrYpM7S3kCs1XPmRbX9ZsnDc4Q*Q8MBf2F`^wk;~ftIs?Vo8z%kq_3WN7>fc}_tq>f z2Ymv5SiLzB^Vs8LtS~gETWv7h=;!p$5U>um0{^M5{JUR*mfw{~7BGb`XgYc^B&IC{ zbzM$S@caJ@HUi#dSe_i=skjh18hSC?O8Ov~cs&-Kt-C>fc8XFkD)5egQ%T5Zsth2b?*z5{t<*wMt2sAA=V2 ze#(RYy4af}_m9P1-*;)wu`z&W>Xy+U9nZB7C_#DRdHA1=Hp!QfjEKii`98_%u~5Oj zp_z5eUOSlh>M8|tMy0F=}1#U{R;B5KB%54!i}| z5*B=aBuT&m+krz?&=-f<N~9KP?w(^0z;fZAaVwD=wyU79!eX(&m=FzLP*65QxCwd}YA z-S%?lfOSEn3f`Lcr*>Z~v5>z@Xgi5~D0zJw|Jzl@Dh7%_0`$!7M~+hY14PAhQV7M; z6wLYoKOCXf3#P);z4Pal=*JO^j|ZzOhL}5`taU53L-Ca-dT*gjKRPr^3$9Ns znbB9zSpN=z)xk4YHYBtCn3A* zZ+ouuVW*{6p3;R9J`<#(a;AD;9M+5#{CLBB!Sz4wP1;KkE=~B;A26@HqJl0zU~kl% zN#FA_pBla-Hg3_cdUZZ*v`EBW=@d>W*^uG z0D*aDRl%U-7w0sgJ?XRBH}4)|rPq$LLxey6*V632Czn&&Y>%EugF9@R6OxVWr9I?nesb1c^#!F!@@1+YL5HJjj@e*md-|4&&9>-wp|70gyP*Yr>olaw=#V zTEjWb&uK1rSm7wMzw!HnK=|N>Q~yG@aPFtL!UA*?r5uT)F_+3wQl=k(0KyJ{z_O^I z5(G?@s+4QO+I6qLX3La+{}~-}MR>WCwNV{cXH!3x_gWQDBQv{7JuL)x$$Li>=y))b zbmG2Jd7&isxodIdR^`nbqyh{EBDxk?sUChljH=}49$9_(Bd9R3Kdob;Yv2scH`Bs+ zf$O)QFKHHjy2K)pakjrjk=zpJ^7}JnEKJSKT|*U}$4u3+wtOrR5ABMW_R6y0*@c+t zp}l6o-7>VT=%VL_|2EhRd@=cI)_&M(=mEqmRD6$JL--;_ufo+o|MtXCw}MHN-8oHR zgCr;p3DOpPfOfHwRR1|ygB0#e4?48+U2a-nKS{xglLdSSivhDe^J%Q8XCzv^$&2 zvkD@=PuDhmkBL|z)fjHp>#ToxV%Ot>=nyNmBM!~K3-1Cz77){Hoj6h=vpCnr(Kec` zBzwEqG8WTIntz-WUG1_N-U@`%q(ukjA$z5Hj@xrV>%J^8ii9E?H63F9^+b>gk$Keo z%kqKFizT}U^tn2UIL;rz{TKBcHu&vxyMF-zb9IQw0E&|Zh{pGTPxC#?DMXO+tukhm zgrPT*JA(MBF1)=yP-`K8A;&Ma!Z5@towBNzNsKo%v<%tYN#`zoklz$^{mwCIs1u5Q z^J2q+BAK5B!INj#>Tl{= zN`4d9Z!mg)k7KyBVq2Svh_LoSB;T^`N2MBnffV*Ya@%Y(QQ6Bkb`#GZ=W>5Z zw6?vexz~Uagci029f*wl1&{n~pwHO@gX%(KNDu9WlC6tUxSHKJrC1x<#J$NjDe7*c z?)%nu&qqIqGs{IIA;`r-!(d z2{3##+c|nbUjt!NGPcpk{|SCFo1e}a4rG^Bu}(+3UEC_at21AigRe9maQl!1=2zF) z)$+cyMe(LvU+6&Q>S<(N5xPNl9!%kB7e0QMkU_LvXNKL{Eqq8oFZ4$J==uDB+Y(DW zZU!Jq0sVp-WP+SZuZR=(4!oHC`zH4{1nJX`1P53?P$^4`qJuh{!{yBA6 zWb>>d>a)%k4BjE9k&&hr&&InE(pmw^_c`Xo<(84!b8@Sh-*~5J%B5fEP*~j9a$H;N zWCw?_XLoT(r*b0u+KmBY>A*~IkQyi7K@C#v)+{rmQ7kQI7%(Dci-DfJ@-DvbI{m@? zV|c|(!)$mpdN$~>&B}CBFy}g^$sVYaZu-({P?Q7x?Jh_9+ve`W!$aduGwX(NVy;g6 zDZ#D7GHPG1@V{Sqzr#o>5^3}&9QGtX*u;FKz6ovE zv)$d^u9tM#Y&^<(D<;Sv(uQBPW))s;W5NN1frhbd&FVC~=(k~SOagpm)-eqfz`5C~ zRW6Q^LlujcM$euE(o+vz_W~L`$N{1n)3Nl&-X))$-5|qU4w86vNPqxCLf86hL ztUesiKAPhPKMb{=yB!XX2W_0(w^kacsC8sCF)=!$vI?@^+16wFjn~rRHuF|}ds#+O z-i0R^q7rwtJeyahMgz;#lRuK^_EWd~b&e9Jr->RW*Icu$kO|&l%h}acM>&q{)5&tt zLT;D{cC(LZquI|!)Xq>AzqBM(cALM|M*eoM`s8?cfCaMwh1_9tD@#0fmFvMK**ofa zB`eh@7%tnn9(mEi>yqhs*-)1WVj>eXCfSvi2`6*y2|>w5?B)`8ON!Wjvph1U)LJ7~ zy-AUMtaqenCxpoTi=Ja0X`Et*=(=ZYB>@n++{G%UA5y7H{O(>&1Yx!BvyLx;Gkl_J zXqbA5$DH&2_LZL~wr=VOCh$u^|#4bHlB#8(PfI*Ns_RIMl2R+NQOn30!z z8h(k0$h^|SSljxn%DH6QgWMk6T_6G4pi@>Na>$8EtoPMfaCg`%Z}DwUKf_%zyQDP^$*T^(vNV6MBUSW>^w}Kt=%SGgU*19A`d_t$(n< zLC`A%%c?J<*WqQNgr7JVRV;;Q?M<~ zGnhp*EtJ>#zudga z_tg8yYKQ@}w6cJHGll35|G0~FN<(;+i{<3I)b7UVAmJ)a*PTAv0XChTmaVC|Fz-=M zck^H~v$`qUSSon+4*Tq)g1b}E>InP9l=N-w(Wc9qqtkCW9VFCjCKH49kx&{9F^sQ* z%`X3_jgsKpf_I=p;AFK6#yY9W$g+KjcNXalsW{ep?BRcM+{&nJT*8gR@xaJ^=V(6V z!J!kh1EO2!6~yk}>Atp|nZxdE)_2gaA8v=yez88c=>ru@Jlbx8#C_~&8~+1sm82>S zv{es7Mm4}&YIlVfx|E7mM+z~U-IGFKE z68!t=-aq~B%DF!aXiHE)1AsQ{K9OhvxuKN!TeAzRitH7VI}sbw|m}!07{(ww`)Np#YnqHS1~o5m);vp9ZTc(XJq?onHzu zHxZvSEHan-UQYmXKt@{Y!}hk!-2Lm}>IiObpGn<#bQ|(1x9fD$`RpK#LZj!7Eitw7 zl|`xa=brR;Tr9yTYNkMT5L->mGeaQMo!G6pqAP_?;`WP=;=|q2UF9YWMLLYl>V(Qm ziP@$Xl7cznF)Q#q(|NPnACFjKp8+FBYiY#G?Y?ZcLXqiL!{=ToMcJ3SZ9}T5?Dv6% zk#ZdHOt#(i>AI4%YG@I9mETXl0;SK%#_7D@nm3w8T{5C z!a)WeC0hy5W3~Mq;H$&se!v~i0p;hn)2G=(HhqfM+zvHqbsh(*UNfY{&+j29(MTc ziVu`_XoRDJ4TGo5LyKnz3RA;Hxy!z&qn{I${D>b)lW{Xb1aTg3>OWxVtCA$vyC#h* zb=R0Mgfqkz_VlXrloB5OS>fdsZu`Ts?G4iCxHb{QSNDT^+&RmJV(f3 z$WV0FkaTyF$V+1!w(t%2X>LjXh^qhNv3Y~#YXK#XbBZzz2#SXnIj0D_g zXP0JAY^6$jV%K`t_RB4Rb!?c<@mBb1T(CYRJLg_$r>l@NB`7)9u!ZEFMS=G}8WK<$$ItvGh!ZvxL^ZZCG@GQ0InF0jj81a`S2sM1b%xlwiT zV!m?ju%2w;V464-v|RkS*U%U&0h-@6PLRX(ruhSy-rD%9OZoEd9g;LV#NHd~<+bNhV0I>q8(*_^v^g*bx zoGqx>@#oKTm`$~$O6iT4%uvr3C>5WuJJiIBeZHfe$CS_kPQ?sMH|4J@`1t!%!AdG< z9d?6Wn-}PoXybFA_S#quP8;Ch7~DZoYyu9B1oWdfT3!5YY{Z%e*wV{MHk--;`ljwy zJ@E&NIs@|VO9{7{4Oj6??&c&ATVLbO&xV@#)(%uQHtGuScz?ZBxa>`HzUcMK_J>4P zJ&-CSiBc0>&ZNTzw80;#%}Ns5Xf=_$HyWQj2D+s$ZAWtR?WsTcbCxD<8#M~&y-q*0 zb-@q2a%a^L6rI(#h@2*f8Al*x2Thp=+>PKghND$T;+%%;B%Vy&8$WT|V_WXeYPCa{ zKH+ri_HU&Ge%(Ptn-mOLw1Hm(6&LqAo!y#T5ya4s?ix0_@M@5;%!5N?rld=S7;xW4HO+3t7NbSyY(gsi;a={Pnbfd!`m~}^68J>2RVbB zf~8`KEc&w8Owk>5d4K9WYK0FUN5W&&#P)qxr?U7#1vRVIo_>=SduOms^d5I%;_pu< z`1Eulv3JJ40Js`keZS%T@d7Dx!MScGAgK3*{16$**eiLTtXBER&|j5X339+>lH2qy z{+dtTy{Yu&FA%QY&+b-{dhnpE+gy5l08@C&OhqQnM1GE{!PwpJMX;iu?Zpq#9-?p9 zj?$!vjPm9urLzKNEH-9HWH`@T8*y#l^?5|dCDIF4jGcCt?!m|2*o~h*v}8Lou;$XP zTP$E=-#BqTWb4~{*jXZxoI>02nw^zu7dyxM)@%bo(tB)_3POutw&M2UdM=Dp zolybboc^fGadtD<-6chOFYz$Ue8?F(;UGwH^*_#f}Of@h%nL8OR%Tuqx{)dN8W@o@W}KqT?yc{ zyZADYQ>s~R6A6e?^jykXYm#Yc(vh{q!gefM_3)rQXVpPi_D8tLF%_+~>$Xw=Fe8ME zEvwD8!z%^Xh_``*w+0K>@6-+jx+Y7uN2ArJ$tnY8v+O1%s{+Mwdj_j45Q*U_y}IS!m=9$ zlEfC1P#Ld>7b~w28QVx9?lOG#d+6^vwV6UU#I&+P)y;YX0SH9YNx~54gS-yeJEejO zMoh^&{KXR{H}LgvBB+>teB^BWE`e9 z){DoS`J{Su$!uQ@)O(Tq?z*7^QAdXOsHZRcT8GM~y$9H@olZ)<>D|zokNJyx!n{S$ zwT#-jXsr1S)`q>eIwkpA>kjk6*n;oOfOrz&@zOvw9|Lo=nMc1Xa0LdL zbn|3@T;-!6OJ{S@M%)0H7@71^XP_$`+LGwBuDsQ+I0OcvZIR`o?r>bqb% z%eE5sGb-CgNGnhl*tyv?LDtY#NL_Er2m_ayqwQA9Ci?Kqd~jM=FP@>JV9sy9v;f-0 z*;#&v4O)2rd2%M$*%a>SY$`@D-}NnndV)_pLzg6_gysXSO=!H=A8cGmRrr-?fqr!2 zqZZjaT$fBT0Ot)Nbkn3z{LT>bT#WzKtt8__O3|j7^BjJ#nHvJ$wel~#lxVy}?WCjh z<2?rguQ<%UM)oioFMWaV9k4)-(?YhtLY$`-n)k0}Pze&@WMPH*l;mC2_q9mNvxCV8 z#uYiLX8h_#M1!0WD^^F0K`VUgsH*Tn`-3aO#3lJS9FHrv$g^4FkK5qF&*`^8iA>}^ zQ@^?{-h{jZ8t%?ucg%bj{LXcj} zzT5`N@OZV7N8jk0_;7CF`cY+zO$TfN^XVY$@2>KXz zw5IQZA<$vX4~~g7g}aR!>u6y1-?*=>1Pe_0Y&8&^WNr)lO@mR^?RnRY3i(TtWjF83 z46|JlZZxP}=f)|BY67?MyX*0?wh9LtdCoNQmQu>6#hzqxvrX6ru#K7}dS#3P%Ol84 zY(J$OL-C6>`?vJ?5>LP*2b18EZd}cyVpm*EFe$%yGjJEIAT_jRDX(9bh~_k>@U*OJ4-J$#mCLeRp>=U8x>utIb&srP*e-` z;^ZQePcYN*Qb7!Gsf9*!J`V1Rh!?3}PW*zH-IOI_%Y#@y3T zjcAAC2{5xC&%<(k2Z6WxK*e0)tV;EfzT~yZe#_Y-ccJS1P8iP_%7Mem$w2cvM3CLd z*$Gb~4(!Onu~iLDsXZA{E38&+*E|3n(SEy5N`Laeu{{#boB=Ar_Go@p1KNA(8L!N0 z)%glC9Q&p;phw!3ySCZvoz9qT=*()sYk#lsiiL(*FgAm+*w=Yom~9WtSwZRro4$QA zplK~9c)~azuHX*LAg^NLj+U!kb43;;h?bD5M@RDzP9k?C7bAMB3C-T_NF<1Qzq@z1 zM1N9J>9`Cmh^a#k4{Ge@!Gtu?rj)Nd&o z!gPNEb<_Z;!@6T-E6&ti(koPGDrA?z=lg!FY-P!a zWJ2ztn^wNMFJ#=OdV;Cwi3%4x+v2*@utfvAz+J_UQ^bnIn*5KsV8+1HeYcG!heEac zj@t^=PSkMW4@lv(!bzDtEY&|g^4elNje+*p#!Ly8PO6#fuc|xSlP+X1{8*|ABsg4D z5VcI93RHH6HkYeALv781T~%;3QG)B9^d@G0LWj!i`&yIsDb5=NuH6kfx6htEJDR02 zS`+4;Uwm=pUVz=9vLt3}u#-clY(Zww&H!_F#=ca~guzd3lN>mo?jLXZ>Zc%z=6hDnmN)!Y{wCA%jk9$PjD|slf$m{H41k zOx_-1XO6E_wJmt%aCgZ*Adl5f6@nzRKBQhE!tp5!H=i_NG$)C$?NSA@xmgX!i-eDD>L&5o zDy6K|UVc;oGsD#Ns6%Y`8Z5_}IB7PA9^k4IThu0Lc=fGTvm0bPE|=2s^Da|Yq_&oz zmsM#15OfqE>~v>8=HgrYU+d=aPbizQtfh zdWPdH*8*NIbH`(B9Q)XG!amx$O`N4y<a%g4D38mUm3!pk&ZA2lNl}+Z&AUO zNUGizG2@lA*a%c`)dgYC7%u!0)d#4L%(i!pug$i;Z@VV!h<3Oti0|xTOX#+Onoyh} z?R@Co->lz$J;+;qq@dx2oczHwT#<7V4H|@JSkK;j0w*8yjxpJMHu3vNHA`jot)ao_ zJSVks7074EgPI1ls>9LsPek#138zcx0PXJBMDz1^jTG6|g~}W1WPZP_DSQo7nMCm? zAzKr8q9qlJa^|;B_S?;ivdLuEdS5BE>hKgB$GROXa*fVaICM{0)dEY@s=?kgyrrIc zLP&GoWI7V)wcu|)`SWK4ylWa7;(ZxEZ?K@V{up}@pzs}nqtQwYy|X9z*; zG0b<=QGKYj&Viq`6kT~bF2s&NWBMu*H$P| zx6=Uo67vfyrZ`#a+LdKTdnZR(M~jn6ttH2pFU1=fzhxiis9Zs!#!r;0?AxRA#^aCT ztq_&TtK{R0^NSswQ7vF4~dhX{_a&K&RXkNdx-VtuRZZbkheM~I4rQU%x^d4Ew zvNvvcQkuBFN1G4KvDe&>n(o2ZV&sRS`ixs_2eeeytj7;OmXGaZ(H>^qaodg_FUY=p zyp!$LS9M}5og@z6xbU+S{28SQ*CQnF*lpC}oz$+n0rSR>^d}2V`u!Pd=ZG~L-%@HL ztKQr@WQj-5Y>n+zat=S4-)X<>l23oHT$J*R&oW2()K=Z{RnSNOJh1fa6US2h<3=ka z%CjYwIe492B>lJBhAZT_X4=A$MD2#v}s7IINMX?+AY zDq3oS&3wFT#m;(=U1OMv>{eh3vPC`4XrA_+OWmCWhN*&e>18@g28~d<9V^1!OGYWo zhrsjT>vQ>#w);<)4f_T0?V_53Mez(`1-A0!@9d~<-+c<m!2A?j`DWzBv^ zpUeT2dbyn`o57Qs!X5H=)1cPc+U|b7sE62=~<5i++|ZZ;IXXTkiux|3IOkMSRb|tv~;qxwp;JHo#f79yhrl! z5O@BQ<;3ZDI;WTzjZui^S2I0WxB6aC9#&3s*D@Q8_3)TIpXE!+QdD;1fl@bZ0<~m3 z8Ld)3T8%qN5SGIn{^Sr~;5D6}-7+JunZ|PishueGj7TMa-a;5-+;Ie05jSu4FpQeX zxX@OnWpem1!6zTd7?nstl+FD`!s}UYZAVN>mWZZ1ZWB2zo&Yzp%bKJ}AsqxC?( zbDE6q-;OX<;H|n7><$nIJjl$A)pgW&pUm>@4&m&W)4+=|$oZgGXvxTrA^Eu*%A$62yP1fA>?eqK;{Lh9M#XP;6N#`NYy>_# z5d@Xf@6aWI2VhY;wKdCNXR?0#%4MyVPPg6stw5QoCmfZiAH=@!7)JxgS^}NBb-OB^ z?rxDH`>(f#$1z2kc7yt-jYd-^eNQK*72bN^!2Gy)(6R)3!=+!ClUZbr=cFBN48<3= z5k|Z1S*0|SIyH9I{T@fr#HrRQPSDKXO5P>7J|>AMEDkueSURmlz^n#~rk@H5wHdxw z1%g7fv^{Qzs{=-H5lI@b4y6-Kh9Sw|2V&L;jovmP(dPCjBuYW-;HFiVELV!VQ~x2@ zI8l0Y>-|{+ITGXZRmjL!z+=gour>6226ql1jtjlXYMV(>K5CX*MMmc8E6|hzN`fF* zr&_(N=}92}3RdJsbaXi7(5}%rnwEX+J@URVzYsJyzHe1n*V6Bw8TcOW!ai|rad2}j zH7Ur*{KwR~vgn$9{NblL>Dr;*tbO54`;(15eG7{XWwFa3ZLH(31mbWQj-vhNL}#l@ zO3&E`m(wUF(^uG6q*vIVkYxPYmHr3R^e>;`E-lXYm&(U3%k3I2%V~I{X(QWacx%u9 z0NG=z`j80d5Ay$+KkyT%CM4Jp0rL1E&kF7vMmb!aVM#7(qSrB)a@^nsz8c-E`mq=! z!$zI*p^`s$vH?)}G^l@fIkUy@1y0Y$KX!AUTtB3VKq9`rc%a%Q_y@nyR}OATj;ZaN zY0;QmJpdm!1+yRf&Zc#~rPnZ<94fKY!@Ax?@}GQ^uim|TxB%Ug(;U5O7F_c!ys*5} z5jqNl-1bAK_iQHLoSPLM$H+q`1nyVa2v7>&wtgHbKbfmu_AT}}zm0GBX%xemFS!r%pOLS#Orf{6SgL-vNlPu%x(6@Fd zp%3Kp51Pqyd@w`AHR>ex5v1>|qGJvV#Jk?RhV9tcStDcrAz?1Dfxf)^94dReBm_R& z5~e>kQI~ftmh)gGnp={sv5?K&L?`xpplTCs`D&qe@wQz?ncc!uXPqirHkyb|;q?lu zeSMAne0Sgnt43$n#&u_JG1qQ&Xp4RvP%7r4;y;d$xmcH$I%2EqWZBrK25k{)$(<3} z2K?EOn7g`7*=)jK*mi3`%U)}+;*~YEJ9^SPoF&del8WDKz0}Vt9s`{UudXLXMg!{8 z-G1I|CC%gf@q%sIHScMU-?Ge|q+bu*>@Xag%Hyx(%YD}e6zikDe3c33JMf^&G?8FMO?-!7^|cC=n~IE^!M8E5@dwqhE(eV+Vi_J1Ba-lrt4xvf(!8sLkxU; zPQV-KO{lE+sDPN?`|o0JZuk3Se?RxfGI}_ahknOn6AvGQy1{&$7ASg%g2qT;$*1z} zRWA-mqg}9CHekX5=tVQD!`X^n;Xk!Va#-+JR&lcK9`%_I6rbpj)l>6_Ou{b}H1^=k|WdEeaOS+(eTBDKQ+`M$zgLH3ceH6S?A8yLDWT@p2QG*UE z5bS(={YkHH`)NyLS0F=dz(opHnGaZO9&NJ3)8FP@xPQlTA$kM;k~WjHQgvG~TZ}Zf z+1z>KVgr-nd#3Z=X{7ngg5FF)qMqmgo*OK%^n=!r(EGhy&G5Na63^;#Z7d;ViW^NR z2;o1>09{2}WbxEZ^!iPO9O-)9<<1!@mqS?Tb03boh+bmp8s zkGy{F|CyntF4)b7ikjPr#RMb(Cb3+@52+gdr6lyG&yN-rGEwkYOk`RlCQV9nsSqcN zh7j+92$ih|)6Jka=-l}Psv`U<5`S81PgU4cVV$e=%Vh>I7~{KIG3zC+6rwuL4&b@- z=50#YxM}Mv(&L{P&cmN>6Pa&+dwrO?_;Iifwded^8*j}tXBx1=(qF&me8F7R&!r2! z?xuNl*7(gEkrj<}V0P?;IkSTJ%odj00Ns7c&o)wCRPXas(8lr3o zLj~q&K90k@r8y{01d8#a<6mvB`L{km?2cz*JUl#oR{T`>-!5aW?9M5lLTANMMV z8M}cy>7gI5sU<`KzY@XS&ccRpZM;^^1^ z?|&VJHub&Vy=$qd5oenKvq9J`FU4;5zBjjyM9@pr<%#Uy&OJkRF>;084_@hJ(`}`r zXS5y-<#oDwUXZHreSp&?*kY3*@a=)UjPd3Jrv$mr zL5?2DSZpeb3-yl;iHh9he&_97JXXV-U5b@P68bBIvH%EZ2RB{ne-J`dPD3cadYR3u zNIp{_&m^hm^^TQD{7+|*x1vKyhG83e3MQf~?;=CWMy+`sp*kPR&7qpYF{r@CG+{n? z@_NJ^xo74_Hpx`n&=>~v&_ps-_FblTcqgFi753w@Vkl^l7__#SN(~XC`FO3ZS%%Ph zX=3`3!qUt37|f_G4h(Fs%wh#=SYkzrn}@SZ(w$2`{Vefc>|rq~XGis4!lnOVX6t?l z_W+np0cS};RM&kC4`tkE3!l0O`|8+uq>Hc2*F9vh{NSF6A>{F3ch>aWt7Xy>D$g0gJdO&g-EB88k%lbT6K23D{$JO}XDZL#&FD46Rce2>Emyh2pQ z%yS=^cmC-f9sOC+r)I-`guam>Lp}wGmXA4)7DJJMIDK5U{eAM0JC9tiLSWI{#>NH( z&O`Y>a9GdF{doQ2NKnA}d^_VO2EI+iECu@!BE&Ox8L<#4hW-KB-L)8ADTLT=u)I6S z=z+{9is57}XO(AN;t(hl&Hn2te(E53{{AU;d9Y>CJ8-WHUiGwmc@#R79q_QX38TZaq`5nJdh z5hNNu#F5zXVfU^-C19o2>b`osdT_(rgZ;W1_YcnzR4``|qIXk`G@5(Vs+D~ftPmMu z%W*)!`nA^sW~)H2pIztolhlWw>2a}R)Bj3O(xH|kiDKZ9Bz~S794jcv&hvoSq#<6! zUmi>fM*&v0Fjf1rc70CuyeKEU}w4biWk?Jwo4?hS}65quCGkj zH(pk6R#*u#Sh`-6$ieI2Bj+~CIA7c88LZhqldEv@hs+%}>Fr~z2W(5lK0$Ov|IA-1 zXMfr>vj38x{k!=J0Gh?FEO@^rkn6(sZEcaWFKq~t`kKaTT1p2=N_ENvh(uFZN2$*ZNEx$Jx3#PpaQT*|dt-fd1y@?2 zK?11<|Dv`l=r9Ttj|hE4Me~y75A>4Ux4`0{pw2-)@TG|fu8j)WzCNK2rYVB6y`XvE z%_aO*IXM9kTxFeV__y02U|lupw3G@0ctYg8um2ZuUjhyF{=Z);6k!mGjHOUnlbs=Z zk*!T+oh%`16b+M*-6UmaLYA^l_R5wqC~HkjR2Z&ZjIA-Y|9jlj_y7C-?!A4#zyCS^ za~x;xx%b>NAD{R8wLGuq^*lVc2LlhEV>`r;I7sC@yurZ~bEbc&9oahpwIdyI>8vfa zBgJIYB4DEo!#nxvmUD%x6=oBGyn)ye_q#lYq%QOv(b7C%d|{vWs=#Z3qL|iXjUmAp z-ZYI7CW#2rb*COawu4m#4q9v91Wle&-F z?dM(&%i?PL(^TW^RnL+?e2TDeL6m|*A>sM6cj;GY%U^UJy5l4)w4UYmri0Ickw%;Y zq7tj$t(YiNfjIc^3S5{O$}C7{gDUQ5K&A2WL?DO7dAefN*s@VZZctpUg#4rRcF_oVkEeru;$ z@_64-_mU3Y8KXr2L!nUKmfkIgx;Ye&mT8Za*b50&lP7uRZ-?bCo%Kd7q705>Mj)X% z;oiG}VO`|?BiA}?=yTK_&W+U*SQ8Y8$8A}40$jV!){y(}_dDgN!g{FlP(v3m4b>rj zfLalgFKYt-(-j5-vCUUAN;&aAai)L!ddzfz{cp3Ky&!>`)v&zDXIvYPy3I8$&7zyZ zFOYtabb)9J^h%SJ(;Z`+pc~_l5(QsBU(I#}oH=8OG3(AJK29&7(#p!8eM1EH=sF#4 zSEOq&SO5q|eF2+}WlwlEuQRXqWUjU=@hsyiqu)uB$b(=xMUfe^lxzvsr^NCv7mM$! zdNTZ@wV0+lwJ$R|yxOh{{~A5BHe?-7xa<4_S>hXvpxryeIu({>3XhbGP;oBPZ1d)o zrLFE3js>{J$naQ(HiG(_)=#L1>>JhztN@Imcl>-h`aT<#@6idq=xxNLcXGqveFga? zKSsgbA}A5~U|3=oN*oN3e#XK}1nIofNTP|L|H)ic(z68aDny9D1u%i9=7T^Ls)k7V zkPGMb{r(?Xy6s0iL-XgP?e(^yMVGKv^COvno;JrAa8&K^VA>!(C!J^IoTJ@8#^{*v zB8S5n6bZss^lGqG}JlRYPIbayL*?wr9A*`P{xdP$xd)0SmD8Vi|GDBIlx|&M zwlc7%e-gmDFE%$;E2$zwC$mo5MhAp@-_&27skF-XwT*ENS1>#$ktw#QJ0h*~TC2U_ zL)_g>B8`G|&k>CMU}Rbn4&s9uD^b2)uei%x)3iWv z{H=a~Qxp0#J|^v;`7$;(Wn(&ydS^g;S~d7c$bRa3{p`=)`cLE2!pFbSpGs`?r_5A| zOSi$~Q`b%MA?j1upi6li=2}X@IpLwF18kk{tdZ=5(&<#aoQ`ltoAgYe#Aqa3%2ms| zPG)hAe1DL zJj^+zee9jy1Dgl{6Ijh-gykHt$PiC>?yOhbSjM*N z_*<{-yr=3Pb_VGL2RqOZhi-H%0Bz6`i5plUDDY{QaZcv0;*j+Pt6}y(ia)htYFi{@ zGxd)I6J6_0Hfm69eRz~gZ2_~)@q4(K!%FIL!L=eU1x6iXGrc2#&{1DDeQ9ENxcJ_6 zwwF)Iam?49xp*6f#YVaIWcwnB5dni zUi{}6yBJ5UV8??w#LO;$Wrw$9(y;j#lf`o-YNn3^aU#r8RF$4LFf&Wyc+gjom1$`Z zf{Pyo;O#VdaEdA?fl3dG;F&Wr2Y}`^85m+Hu zjY(Xi^n2u#>#BoAoZpIV(g#7AycF~5x&6${3Dkw~HsIgep3rYec)Z=osr>1FAhtbD z`I~N{76M*HYCT`bw99m*t&YNjcsiuF`O@B@{RI2ovjPneJ>y`1tWh}Jp0DC; z#)!2biVk3cwl54_ZV01Pm<8AS&n-ZdRzLS?>36(IJq_J`6)4P#1}zvG1G@&WO171g zsm?pVuHm;K9&E`UjR}}}`+pXN44t`R(`18OMzEIifu9-dm$X0)# zwz(G|_rG*!IB5RA>CTXURMh|W*auXQG)3bN1s>T_Y1OwGYz|N|u+|Q!v?}G+YhQ>95?g299`h@?I+R>yulca>8ZkU#FpDvRV}rLNeZGE@~39Q(+I|% z)@GbWJN>KoCt&uT?^RduZxS}}`h|-qbSj`Cg&?WsQ|-wz0K8aGa(G(ttF-|#Fu(xn z(l*limumtK)atfcn;yp>A=B=2mB-9wsFIJ%mN`SC+MnhO3Xb842eH7Mp_b$N(4XcE zYkh|6Bc-_B83***ONX9`rWMml86c?E1$2oL_X2YU^}VDbnLt$J*kYC&axk_ zC{WWAm9FNA;9b*uq=GS}{$MI@zmoCF`>7gE(V` z*1TrE_<*QO^&x`VJqnKBlW~NTA4JX_)3)5_fHPq9g;*XHFK02&R>c7BP(ZOBR0k_1)D$HDOp{cHy6^3IDBX!Y>Q39pZt37VuX*rR^9t zzhn1)wq*Wb6GE0s1Q2sr#`bvGf_3A56`eTE%_#ge10)!#4LGL0gnQWoDF;g_!r5wp z|4GXsi%U>gJ)h^13Y~Dwp^3)R&l*x+k4OTY!Suza20d*P0~W%3)O{Y;*Cd?h`&O@% z*E7J-Ji&Q8@A^nkw;pN#|+IdFALt-x4X-cTs7vN%p5~uAQ^ccCvSkZl|lp3#2EVW@KK)I^g1y zC%B<9R1OQkFfOK_bSODrEH?S`YW#co7)UEiyrOpfUZZU%T|ZY{0taX(`>r28{H2QEcolw`t*Eq__pjlHY6;olH?nvx4CF%Z{3V?KT)xtTlUdbJpmdwO&7W@q3t01 zK+TW}TkO3Q`5UlB@mAOKS6l3S-v7MC{z3CEx7dLrxhOi-z1B~W zEz}2u=k>SrC0z_sz@Rk+)5X#R*v)h`#=J!5odDLQ3oqIcBv2>3wTNj({U+Drk+W@?^WeI>*&uHSXD; z_xXqNdf`9rJ^*-_iq=QY`u;y!vn{r&3t%|S#a7?O7n_5S(q?)CgSmWu@^}sV%`u0` z_Qa$~P$&UtkIC!!6Gn1WF%wX0@?L7>7Fd68 zi}%ox`l(hu*8ips#4+Q*8xG^ki`s;_qfBYWE*Ze_5+elrbLODC|K_=8+=ma`>6tJT zT}_QVgfWh^#KyGlzsla!5*PH41#%$s1cH$jBklN5e!1WkH~-w*o#BS4f>u4GOW-|~ zJCsuU!Q$bGP&61g^nt?!%qk2NmZ-9s^Zh&it4XS}&35AW>wK{oz4a9TGIB_pjnSsJ z(iTg8!(nyPXd1LTINtqi-igD_I%4+PWx69^8Da4}`TZ_)3f!T@;c39y#2Iml&>EaN z_h(Uy>*?YGp5W(LYq3W1Aus)TQr~RtSw^C&=wG}SUJnoFij)abS%-HHeK=9O2&N~D zU=?+XJ(E)EyXP`P(~r!phN3plQr7Q&<5Dnh1z4)zH|W}^s~Cqf7$SD;W5ixV#fTgd zu;*PoGady7K&M4_4Nx`fEZC$lu?d8NqzOZDUq%=28=jf5Z<-ri^O2f4UJ0Heiu=``S{gNcI#`{_&A3#7*5&O|^%y!)7E z)G;s2&N|ZdSitl|QZnH^`Zh&p_>mdbD9GP7{Q3<*B)cnr?4kcFM;MD~G-yvBH+!zZ0PFWo|RR$@4_6r-6qjERy z=U?201hzr5|6ZSW8E#=?3}(P~0EkT5Cn@`S=JTt|v5T45mz}-R7$##lJsu{|a`q|$ zEBG=~+>m%O*Xl%t6Qx8r;dJ42DbBJN7qju4BOcONFGstRGcqhoHwP^4?tX#8@r&TB zqtlcT%27PQ{2K9~YIt~mzZe$g4l44gK{%nZypxht z$rjr%yQfHd7jI?X>4PKLU|WewwLhaf%3tMuYKmvKQfQcJd$?U%l`Lk(8l4(eOprD~ zb1~f;KfZ!xLC2;~Uy*KcXipH1|Ex?dH7NW6F>&s>+U4=1h_Y>OY&m2BakkeEwit<728_R> zJ<3sdn{(0QS?`6Da~ExMU_lCsd3flD|2l=Z9igM&)E39ngC{=Ix-#)t-bs2g5r1aC z?F2diONX#cTo`mX$6IW46=NGxY_vOKn~oexm4nlGazpTM$Ur{;5*1xgn~MV!A8?zf zbx1x`y)jr^r0>Wnt?mPM`#Hc|w4j^qk7ZF8e3-}y>537_IL>x<1wgZmt}84c+#Zks2zM-}59Nc~mzUmD27%qT!FxhpQ_LZUex*Sj&@;^v%(jV`fAdJ|TSHPx z7T6;KVE(P$rZy}d7j~O2@$NUKoth4Btu;>#p$$(bbPHf`@h_8}MczNQ+V({y^Ns+l zb`jUJ5Ab^hv?DZkgpiMg*2h4hf?CcV2c(q4o=sMBT#PkL3o8an!#a~WbY9rY_+cJK z;=_0PGpT{8i*^?1EJ$8?u~Dit^UiHjI2Z^~WiivAxcuz@{`;}oK1$P9wnEijYN%2e zd7$wY#QlnW>4*G{fSQqGc$kI*R`F$SSaBjLOGW@@IF1nxl|OYB3?X1LSEPk2)8U4^ z(v)mGTqwON%1;%uBQ?WWKZe(hci{*!xN0L)KB)I4I`8igJ0~ zopzW*tHQ&$jfrOcHmWQbcNHyX>U;bEMI~>09H;x_-=0QDgJ}eH@tn%uE#%EJF9^{V zp*e9%qZ}>6?Bj&7zosqsn8#k5m^kGhd}ZWCj@$QCvo9*)P1@~P$vD*Rg$v-@f*;0!Hl_w(0YbZc3DA#Qd+zURt>NQ-fB$sZS{uI zwL6@rs}=HNn&Npz>GM5VTw0qGxaLh%AGDk)Ts({Hcx3skAxcbeb@V>QbA72d!8eHE zT@O@8;3pP1et^n^6>zrrjckFUW{a>)s#TSJN9q+E3Oe8v)pa04#&*!*$%#I_9{Qywr<8(#KO^1tDo3&8@1L1EyW!E03 zUVw3cLO51G7isP4ITih2pQppgHfYmNToMjDYXa7Ng4bRM#qznEUJTj#Dlij7|Za$ z!>WpclhzJUi}%!W>I-DqF+Hz=FVwW`ED+xCs>xwymi4@C3qQPmfofp9_mtjgO(Sms z7!xi|1E+1EdA?OR27J1t5zIk@OX2@KOhC`Yzin zdc#9_68?!i@dT}J_&MbYEdS&i!)W@77C7{d*p9}_y?Ts3v>3c0(gj$sfj&(>7kEsE zNNv9b)_)tIrSkGAixY()g|lQHD+9vi%o$hSo-@PZnK9+o`=GvzH_wt;(WXvK+WIQ* z>s|>dFwVD}32^$Opj+E}nZC+VpC(AAgXcwm!Y&|4dUb4%_7`~>&lY^K^HXst^3+R( zo5WY^pQIO5@?tH4tO$U^!5E^nf^K$AI74BO_xSK#_HiWj>Vb# zJt6NdRwm!!_NY#{bc>Buc<0h)l6*`YvoVb2$b)->8fqfp@9ggJ@ne0apWn;zQ+4k3 z>d1TS|J>klXVGxI^i%KA)ZrPqvDt!}o~!xVGis=Pff?oLg9%-6GkC^|>;1^FE{cfqsplgC3*GP(iI95AvVrQ0mgPVAv9G4Bkk z70{za#X`8*DI|{<7Eoh zT^1Y0xXba}oji%0a0FIPcw^-0-6^oSkdgpfr90rh5}6x#}eTkY4d{+U}Rna#8zP_LU^=P{2>P zDbGwBiVDAdIw!>e^%R(NjFuU|qNnBzMFN%=kX7yGdwbQdsoL_hS1#eN9{n((1$o)*$Fu$Y0W&#XP^E5JR!#FT`5mEs>lL;M%p-wU4 zmalJL$Uo&Z<+jdR5svzz5C}iVW*U=*BJ04xS(+2O9JceF^=iXTSgpG4A0kLUNE1Xu6N?r!Y7IR8$<%@RRsYNsOF#1jz(1qU-Pg~1e^5kDTs^gjKVwDZ2vs;+1c=>RzoZ z>Y@8P>~ye1JnHA+3X%ect07O!GQsZIiKjJ2 zJ~eIBbWVempY35AYUbkafx#(*Pvn^4O=ib%)(_*%j_!LK*1(yDA;USL+@WyWIpdgp zRYoQ}b|-lti_2mUO+t&~O0>rA&FS!bkV}v!KY{NgPNA4hiG9S#b}4^mNfsBLwY^OM z19xMng4L0y3)Z8yBa{4*T?gC`Km6j^{2NytTfZXd&b#Mo!Q$h~mY;xo07DAZRqL6C zy3RSsl6pW2$CCDB*9VD2*k47ma2CTVo8mHipyywKiK?#wZ=TiOZ@iE}p^n=Pq@jR5Pj& zyLufe2I|Yx+*r3ylKX9HxK(cE|D8~Utn}LPsz!R$IRCbO=f_x= zvb6W6!1TJ7>HNG22jkF)ktg*GO8)EdE3S1JPM0UH<=oJt*>N56@SIIS%(dkuo2Y=% z9f=5o9Z+GNREEl<@jUcW;}A2ZVNyd;bkB;>=W;Ql{?}lCGG$cbDg) zp0}tz*55mC)l$^+Cb|r~ZNDgQt}Ud1?G5OynFsb!VCK{T7?23pS|A&sT zAERW(+D@YdB+U>9yy6A`)%=v$9y4L7W$lvZ@|{ykEvnB!na?C zyd?EW5(nS^-jgV7-5flv|H?b7uZXo_sMSVrX2|(69uBJ^2dL9%;vs>$>d0h)O*}s- zDjKfOQ;R>!KN;V!Oy>jgjEAIliw5i(E<7;(^&lI(h@qb*w}1CwSP&bF?haO?#G?=V zSRwBc8_x`es;XN`Ikv+yI29481%6)r#9?d`Jj&9A)Y>ZNZd||gWj5f}!uzoe_awdT zRKrKh)Ty@TYUr4J@XrAEcOP!!8B;Is>^)KZ`UUk4$z3kCtjVvBP#19u$%AH&w)zPy z_M9-*2>!AQ8Cl)M&*841tpinEh~ribj$b1VIy0@MCDdY1G6&0#y-g%!-(?V{t)O|u zvQ$Q3xv{t;Oy{>IFPiB&PtMSp)5vi(c0pPTa)w+j3-g#n%B*{stR zbwb#~l6uRLrmtGuUrZm6*wPLgNK zJQ}EVp4MEl$rNfPTmW4mbBLPV42wHSr#Roqg&T~Fl(1!jw>AYnk=9mSWOuLGx+|M) zW8VZA&3}b9E@}i|EVkRO%l___gas~K8&n3;v($V^HG8MBH znc&v)CZSJ&;hAG}cA9^k$~(p5Q?ZT^+g33coM|d4j13A!L^sHK4bm-#a06NZE=)Sq ze;0jnlkpMk{g~ZC*@S)EiVLP;AC zcb)Z~Vn#pQ6GMJ=1$7v|q%(jc$*MaF~$IgK)x4}&EUXPO;y4^&_ zp+^j-4FzTbcE!hW?pBf&l4mGrxz6NXo`mA?&}Z`Q&_PII1c}sw=wBVi#H1DmV`uFg0Sa+Yi zUaub`v4e2r9xSuiU&vY%W^hP#zDocn5u^n7%$JLam%q^w?lxkwMq88s`%Y*6dU#S{ zru;{?WZC6FjbIL)*AK$~;$8eGtN;ABgRc+DqiDn@14Rb?zEzLO8Y+{pCZ*Q`*~>NP zVR#9toS2qF0%lCkiHoO02P0W@JmS5LCLNbBbsaJcFR;C#mqcASJTe4hK9_NVI?*@f zjmZ8oeS0a_xGvAOYey;vBSr{o()Y>Fvt&3JDQ~CYUc{02mk-x2LOdK8WpNR(!SnUr zfJM|k>pv-d;n9Q%_s{pDM!ocW)!DzzuUc2(*o}@T_T5bU*F^@@nzJ{9zA?l;JkO$GAu5uvY&H`ns*v*pi z8OjSOy}R_kEck=A3jVDdA7=>jz0ez+{*phkAYMJscmZpASZqm?!{?xe1-tBS?iG83 z^{%1jM6St4Q7PV+CKsDWcfv?GV%CjggSL0s3W=uNerjED^~H+<$KYlNQU;1%x$dx@ z`_1L>6d3lT56t#qzx*6n)FEPp<(6mUqHX{g=~)*T$cu8#1DhcZzk;v`^?k6H{_&eZ z_|JA8N_l&^_64=j_gNHX@4mvghkH?>;NqK()9Wndnmj$nhIF9SfJOek_kN80)5fmW0$?jGm^AYuZGPzkPwgA zkPeusB-gHfd)2=z51O`Av3oR((A|ea*|bC3c_Tsx4MGXREcdeA#e$nl^QCa^e0(C`wAZm(7~`%ktp&w&lCfbAFd+>v4|S2 z1;zfmD1FTbao8(H6e0E8I=0NFW-hZ}u6@tg;Rho%tf14_WJA@tt4|ab%a78kVyO)m zHTtgaZ3=lD@S{1Y&$4+!Q>4@ACGsdP45y@!Hnoe$d>QFoc()M~63C^z%As$Q5;vGqzN1X?-RrW^qs;yu4wmy1`2ih`)op9UIA%molbpK+ zQ0ZG(MXyZDwtq9PZ%O#sWbwoV?yF*IzLE5s(Uxl~+M>v`MVywmZM?wTCW}T?;R%c$ zv%@(?>|v&sqr#lAgH*f+{z%5~6OO$Ir^K>;vt}%T%WS4%Fq5-WK_0p$J}1mBW2&!Z z%pO=*i<7O@+?j~j9X%EO8R)KZ;o`c*HwbgTtP{v_LB&fFC zimd8t0W@)J@a)e-z`F-j@GAS_8~^tF{H(fk-fh*2Y+GRpMhZ7{5eF&@coAbL*2V&| zq_OzSDzi?!Hk1C{%cJn?5NA|aQj-~8NC6jGTZ@Z8N%%97o|y~e`i5n=71UK96$a7- zY{4}A2X}@w0JNnsoZe+82Yi@R?xx2p$ue)=6%s?jHut_JDB0?uV!J zS|R-xCK6zk?bYUNz7KzXy+$e`F;peywOy~8f>>M(p&p0kOnlex6q8XoiV=onlaAtdC#5GJ@mtrVx9 zS5zE|63R%^GCtxx{pQR)=#H|<=%cjOwZ@T`q?i>E3M{MRtEXrr~y7GCb+|C>}^OjA@Gu#}(TknU^0fCZ@F0TW}1V8Gxo64sn~;6Itj zG8x7)J!0XsxrqNlthjE%2sIt`C-Twl+`!fiPz5Q{%{*XZWE`0XtyupiHBV`>DX2>l$?|_wx ze9?7YRrB5HFR@Z&gTwy2l>(x|%hTT~3N1=^C}T}NoQkXq`_4!EifnDI^oGb?b%9`e zL3c-D$YpX@?jM8w4XMnrSrY$ekZM{Zdzk`AD` z7^=G#z$1a{LT#>Gy?Bb9lhppDQ+xyJEV_*Hr+*i@emNJNg)@;Ee7>9S%c%bIBZ45YI!F2$Ta)CKJscI=ypUyo793-@e+c*)G-paF*0@= ztYan66m2eSQfjukh*a{CpIC;b79gi)}C+P{`Cu=1t-aWn6$chEb(DwSpGXm)bsme_IH5qy*|%)Gv*u zxQRENx7wui%0V~D%>WLYOclw@^l7y{J{g*K=0)vw4wLTY-g}}q@Q3+v&*h4%!%AtL zC{sF-X}70R+Uz2k{rmUaULAI10_7t^hVFgAP+LA2#YUsJ4sIr#^+kS({G`zp=8x&_ z%|Ra-FSbNBml1V|uV!msRRh(y(OVl+v##P+&+amGY=<)WQ&eCjd1(IkfR!wVL1Rw$ z^>H25KB`a1LNstBT9_{FbS(lhWcUNdP>|)-V-KiDMjsNmHZy#i!)~Zc%?1*!M zC=c949MR&CF9G*&nN96gNVv-GKBU>rey?=T1$oJ3^O6z}3v|!ApJ;IjZ z1#6v_ko~8d6L0q&CT{YgTpa4YOliSMg99yehW`} zJNL*#5M?9>W(#&7%EmEmuVFVBf{R;YASCvD9rZAz%mVrU6y)aArp-b(YU52eBHZw2 z@?>hHB1S{y1wSv;-+gdTXH=e~DXRSH=e!UEU9(=`M3OlF4Ay!60Gc9YYf0D$Z^#y9 z)QR3L;>CJoP)%Qr5yNi2^K5s5qJO)d(&{MA5aAi=#@h_=@N}4OeW)_2y}dUNpkM== z%+!XdiIdYxa{J(g1^y>F)SD``Q#`xA*15TM-)+z&j|~i8I5I9dE*DC?$&r8oF+JvT zUG{rd@=q-cY524GHl=Y9o~6C`+Ir~NTtQ^!MSL9m*dR^R8{yqLLV;|yCaDvh0)^Mn zPgaSovm;F>g%bn%IjSDsP1|*NMIkj`*5f(^(K@@f!WMCXsIuOG{<8MActb*m(p0?- z9kcABqt=;0U1sn9E~NdedgL!}#Wqk0m;;}hc?WjzZjhurwMc;z&i4x-$pb!GVyxv_ zWql5qcv75xWO>+7iNP7@f^EuIxGV!k=4Ea%KJ4HL`C9RPNVp@ZSsc>QfbnX)jG&A|D1D9%8ymoeXC-OI z5BT`4_pp}AgO1|IdHeTANPpg=jS2L|go(rA;s-+sv8MC%-k?fjHj8-jja{$1GBJX3 zWI6&ql{lw0m+L0>&~LaTC6tH0{A>cCK-kVT8~C&NPo+jR;`m`p`lI~4dl;(d`7o`C zEcd>`8tD1R8M#{Hovo&2A^U3-7PF3`0*Lu?s(uKb4=;5=$zx6#gbX)GEEL|*`s%is zuz6qMKZlOz@))W>?OcpppW=?Fge_(;A3k7)xjB^}8lkQ;006$20=wi8OFVBzbCD?u zoA{alJaQ=?psEO#MQndF8soQ?3V`jhzHsw>RgzU)l!(21Ssg2cK0^EZItVnP9Pog} z#n!+tXSy#(!3&B>F}Zc*3argof-e=M*j&F;S9f$V5ixycySA+VM4b_T@-oBy-U)M~ zp0Hk2z+zT=Z|!n*Ti-`;_?KZxt+LkM%LxkyTGR>)4* zz{hI1$=tNp2AYg;$A)HCgH}FN02`Wz{4%EL`YQ0ZEUw$2j3#V0Z(d*cyddHD{AYJB z&q7T;VTAX%zb&7)8#;xP?sY)5{PR$uc_pvY{WXO*R;%S!N)g!{;}V(r3z8D^=}T&a$zppxV~^wBdk$u$`4F9jFG0N` z&#bP`B9WzOUq)5e$2Q?pzE{6!U;R}kR8TWg1tMN-`)>VhnedgF@pJLrDQaLC4OLwm z(m3~6HI}Sbx2UHlx}?@}xsLKNd&guWbYt#5&2guD_B%OYWE1IYX>4NZHtZW^;{_+) zGed7;&9B)Nh{;MhK+_aHa>MluoYEah5Ogh^l%Sf?5=>uVv`=_xn-$g?+-yM>E`hXlpNXoP&~yx)1VG^35zQtDPx+TGTdkzX#2s9=_A zUpd}5)AegYD@~1o(ixav72n?_sJU9(!GJwi5#~K$hD|c^+Mo_;eE~EWZ#s$midblG zzg#>2c)wq*|GPILJb8O<^_|7KrwySLJo}Xe&Hb!MCkRHUmB)6_d4HT~kGfQjD#%et zT!uzhxM3O_c|@|;r2da}!fm_D7*5{!V5JhkgEf)=L*QddvndYy{yAKK8V`p7UOde*;MkB%q+I&?(6Wo`PcySaKlaP@$@l<|i8SLfoIWi_t= zQWK|K-5f(*3D#(~5pA;ujAARs)BPr&W#@!tg5ed5nRCQk?xnCxHHyyn9WfKq&X3D7 zvQVh<^VUhb){YTB9LEZbCKh@%!bqg*60v}n=Q7wcvmRTHdnAWkAj_Y5I273#1=(!{ zk8bD;vC+Ziq70z$gMuSkTuMOL#dZ;H$$l$|t)DqyE+|`Zwh}pZE5Uc_)sb&HKf`L0 zBnYcXU8cWElD~_ux2>eylWD|-*2a( zMqAYSGpHdiuZOkqRS>k{r@MDX&hK>b1u%=_2QakuLyMfEup0*ht`UXUuz8 zVmpZ<6s(!x?sOUb@p?>83)dn~5AQ+4_E@RW)50)+FLSnRw4Y~k3J1hWrIx~mq)sU; zOy4)`xR=HrLoa(X>gevnU>K&AJNppf?3ICa_L3r$u@ze~nvH2GXGY7HD6FwX5Ln!? zC+ie(ZnZ0;^XINgAc%1(R+Mb3uiDe|q7A^Kj|nxYtsMe z!*{V=%x3l8eIZ6{nxvk}+NHvF9aTzqJ9S#HSa=z~mmj}+_2tcpyt!~i=wu)Z(E$i4 z-5}dI=%+#aJx}Hox80_Y$My8uA>_vfr~f&mB8E*!Q?fIO%weBJmXQ8GYs zuM6eXj>RzYC`WJ4%AA-LC68@jCF#TKk-@1?(@wW=Ub)5r_bIC^n%;9$4P=@w69WV$UMQxH%2~sjj?8YRq%LEpNf-sEQ zJ{2E-N6dNQVCGB-zjeGc#{l@!Mtawn)-g$RNUW6q0=!hB*2j}?eC%q2;3y4J-GfBf zsQq{334*(q8A)zz*8yQwu8xww8L)s&tHV@V&a(as1?&!$U#K$C%Jo~Vz3OAe*Hp5R zcb;ly0EmfSKOul?(C4+8fsL8_fHd^7@PqFfsX5^#G^`uN!GHe{Z*4LpgKW5`BeWj>WrV6R#fBr+V-T*qhrUhjzV(pY)!YnZ{%s8q?p=`*La_6~9Mx&Lifh=cuy^X> z8)d}vhN?BbLo0@0_D*V=;Yngca(jhdN6K{$zg7H~R=GWgrl{lI-({ztSD4(}Twk-V zs$eREBXk!=HdJa!V_>D@mMkc=aHFdOn;WC8!syS4xge-A1t;bd$TDw~plK1~t-=Ab z(dggl z&9hHVY-*~+?kjmR3`Jp;@@)ugV6MDuvEO>M&a5(~+rb#iHib6E3+=?EpyWy62cU-) zDv*~vy}-s=ySZCUdE5H@;}a>lXg|L@MCEc{7xS50ORf3uTD?fb?CcuPmA9k2^gMct z_@b0YuDP-!#i}?flwHQA5m(-Q>#Y_O?O!G}f4ACbDz@lv@*mvws;+ZIx_?QmPGk+{ ze)Xv~jFFQgbxtLeShrBzY1NA^svEnrS?w`}PFNiXO@IC3vsbmS;8k?>r4unXy1k%H z0~~2SW=sp``d@DrEm2bFl!ye5w5kf{y1C(jh3o0uX~^c)0U3#T8C8c54wLJjKNYQ0 z)|OTl5XocO=sFnkDtElY@J#rSjNO2D@B(djGe_D+g|jL`Y13!5y7e6OKS9V+*1oLQ z-TiK%L;lQXdCR4H!tK@a6y?KG<*MO#Xc0qLZ_Ky4FGvN>mzzGD7FL|Et!@{Zit`Nj zNiBU-a&Zt}lW&u|VS#+P;qH2KeS%V2D}K8su{UW#dI|i`dIKzw0e(ewYpoiS)&bwf z0$i)z=3Z%%znC~{L^Cy0!N3(@b^LmKg9P35Siu#_4IsQ0fX$=WK$+GZJ9AW{FZOgG z`({i_IgY~H!La)<9ajZeFkK1jDUXv~xN=wPwK^2ZL`sSz5Au`4Bft12>P#yL2~#Ev zElHRZFVdHXmF6?Dk#T$(k!IhMb_Y`4>%?EX6_)5zpT^?Hse=wTlGK9o3)g7|bNM@< z5v+j{7~YN~DSrfsAGpHN1DS6`+g@5Pxc<9JukPHcNDiw-a=4qN*)(D90JH|7k5~*# zeJ_{pv)tO+@OjKED&weJ^`cfY*J&Nt?!yb92dKkc(>E|9roAF#opVuPASg3kBbMI3 zGnBG$iadfd+>89airVY|Z-V+a^w}KxN?8AXd-KCa*81hu&baTJGj+E*l~s_RH&;-1 z^g69nkel(9Azs;^yy5&98e+uf{TZ5cf*PFHS+kE36=uC5G zcRJ^|*W$*r?}k%ef$O`*nhKDEYp3Tf2AF+Sb*~j{TMrnkb5^{*PB`G-%6z$Ru(S5N zm4f!{f})~(S38Upwg%T|8{$%`B}!?JIwTW?Rc8qY;kh-`A+{yhd}+)u;K7afymoEX zDGEn*US)$3OAVSA608N$WS#qZz1xcmu0#rxzF$kWzNfmNujD^J z(zW^4x&Yc0fcCky-=$oYvkEArH!?Pr16EySF*nQ z1LKNRn|n8l!1;f^3kpN@5=tNL%gRp?&0+-U{7^~o=7aLsYEX0`Hhx~kuXwc8*5Wn;zZs&_WN ztv9}S_H|?MWqtQT@3(=?q3p5FP~^tV0lQVnRp!ofUXqron>Jnp4)1)UpoJKn5SaPl zH-stlSgprMk^rrut%#Y4+?ZGK7%Qp0P(qmT@VtSd;mNjPL z&Vwje!!oI~Bz&(vE7|8bhw==0N=F>aWv0n!cC(Dq5fAekdJ{RQht|rZL&L~@!mtfi z8>RIYRA*{XV%hR+NS&ps{AjjTTPd#+=Mv@p@sV8vE7F&HJ6|^33K$`MpG;0gy>64@ z!rpewx(K*vs`Ht{iDX=+9CXG^wHXXSWXALx4qyIbex3td=)x~C0V~MNz0gL6` z$G;$7Z59ovmTx+4c7uDSvx-`V&Zx%J9lcj`VYT?{=F8k1Z^Id1spe_SQg(6S`mIiA zDzh&2?k%mA=hqFIU0-jyo~}w>yM3-^V2M-Jzqi*)vOK&~dhYXP@&JcR@#f;k&Yn~P z#N+x*P~+@?yk{mG+O69&V5Hu#p;u~S3KLK^IN=-_BR`*?)tSz$vXH4dGyYiStDk>o893 zNq{M&F$XMTk{T5TBhxk36p*&<*BKQ?15sq#?uV$xfjz$Llo6KmNVCX+k&fzvN|pl=u4E2fAA8f~-NWO)c;sTpZ#lvoilM7bI+mseq zZar*~!W4D(#2NC81r?L0VB`;-rgNk;ThX--a<1S4Bd+$ooP7ypN57{2?XA#tAY`Rn z{HCx#82~A~laj79+w=u_YqfeA%3QJOy!mmXbp6)q?DD`&9rcdb8@Bp(E$C1WH}57K z-Z?1&u^k{vWE|1gxp6iyF3deo>;L1}l;(YP1Rw zsSE;%)`41(wEDKF3=vS#0wP3+K$7bW$Pkq(AVaEHsa1){ERd@*iC`k41epQ}Bw&CL zLdbmYe}ZrS@B5xSPrO0E$8+vpd+oK?**Ar@dA;rvmQwR1Qu0+-Z0mOH5&B^gx8dz_ zH}ermxxDgCM|DY^E7|wyIMpsqpwZ-Cq9wzxH%fAv>wGwzV3)7?GjaML`v)v|d!r=C zd@?ncLA_@)_6j^kI^)3BoPF0aU!?!ED&~T!ey{NI)TyR@cK^v()Q}ikA9=CiUI7bd zdy%K`+u}$EmLY~sNoY6Vlt z11Sps8;QJ|{_aM?F1q%pabDTRy46E(cQ)Hs{>336x;s5W1U znaZ#-q03+~KHRhwMFk_;Vkwz7^S)G`2ZIcu%?|xaJ)1W>Z?zjf4jIw5Dep?<>8P>D z!~y!g=`?LgHCqTj6_Q4kI4-^iWt=|BK5Cr%JQh)MzsgMz{HXYteu=BcG<>d;7Vn|F z#NlSq^(C4cX7nReSDf;1_MyqQS9(hKTTNPB(+o}ZJIpl~V7M+VyOJ?$fJD;9R-Sn5 zg$ruB#E~8MLXyajso$Ou$r3QJPpKUg(T2XScbvJnWy7R#_M(wvVe2lpV{g@MZSeS6 znFW=B-nX}VF>N6h68+zJfhGVbTC3I=M6Z$#vFozxMj6c%Y zm)=IX7TQWwNRQ;CYefC>>haYl{-afFgEa{9aius%ptKN{Ch`x_qtf{~Ljnz$Kp>}3 z#@}8suB8j2mTRbm(?AsY(uWQAEc`=;m0l5mz^IDf2SAD07&?dUHe}@J`HFzM`Uo|J zO2sPKK z?U0F|c)Lc{9Zkq;O~~Cv9|>T;4K|Ou7wlDSS+`~H)5WZX zzmRhb`A&0VbU}etSfa8{2%eI8EZ5APSu&77xopq1)?633h?7&7cY!YTh6Qz5+%>Or za_SF)DiHVePZqbkZmaDDLFfe44i{&JVTaH;-yn@VB^s|YG1-n`l9FiBc(L8pX z$~{ORZr52&uwXyE9*fJ4eOUkm`g130EL5(JUH4yMlsU8yoM*I%M2}y;d(mZMaqn5);_f5uL zcnZ-LXpL3!J*R}tMz(b0Wh*^md`WBVkSf(g`b3KiqdzN3`W0aGK}!pnK0?>xLD%(( zJpvSOS*z^RbQneH;^qtQc%fedB05>OB~KH@7=HiPal5wD0lx<%E))8BibgTgA7r|u z6;DBkXTM0%1?Byz};9VI@lb!$lS$Z<(LxE`dC#AOLw=Z;o~ zyvU%jTAH*izljlRbFe=7&}xy$m?l?Y;VW zXqT!0qK<*Lo(xKTJp z_04!KV=0jriq0Ra?XxK7BE{B%ow!JOAF}eXN-kswKEzwUwd!zBSWi^ENjd1T07x9c z!7bH^joykSqUR@iSA-JjAKSibxNC#W9KdETx5oq<>Kej3%dAQ;sP7%$^{;uPDroq4eO_n~2Q9 zQ@j;8<$ga!5l6XV7g1^9iHppgd>Nf5$@4=?sp(1cSEnTw3E4NTv*>G z%@9BCL`vlYxI%N6mdE>KUu4DI)QWW#WxBOx7{;>dXoV%BuA6+9V5bb_nf)b_Y}sNQ zM1O6T;lQ7yF)eTuNlId!c8sV^upY@t*M>=}hs3VX1xdlLiF-aI zvGUG^=bY^A_>e_5ROYQaqo2vnN-#9!V+AoHGKI9(AwyG!@8`P}!x)@ZyZBB{sHPDc z<8p)6r4jm@_3gT`(nV&dQcK}4+K#Dc9CI}EI(3@v@~k@QtC}m}dd?KZ58U@<=$JOR z@w{L!Cu=(KSH9D;*>tpBN&6oKGhI+QAM^>PjR;gnyc)wX%ASsXsqEkD3p^Ca+t5Yo zA-z9TK_f$YBHDS6&4(Pk-MQB)N;+zgQ{~6gf*$MZe$QWr*-rEjr8mA>r(Wye#84#t z`Z@s&gqG|k5FHJ+DL;^?|G-$Hqa?i0)N;2Efl^tpb6;@AN>$-}iu5G#NYyD?9P}MP z#r%4~tCz`^<|$7$w1qTrjW4gxSe1N__2Z04UE57hoJ#jiLI6F?f=!GGPAd8~*-{$h zZB#f&*3w7nTE}X^F?2sxCfiQlQ^c*!|P@AzaBx?+Axr|-jE>6z_NK=CLb)N)u_>oaC z27QPdy+2soudg#zf}PL^(r?mV2!*LNXj}w}v?5g|(rk*D&)P>)j+(E;3I=w$p|<iH_U`CcLEP~{(NId0tm%3`Ih zLHImc=6H1J#(u8@bvwe=zj&|;hux2JPf~braNm0G#TgX!Cn)sjzWg>;bshCOW--ML z+i>o1_wq}X4vx(E-N+V>%Xn?0v#y{XFHP|k2hYXSFpdab9Vv$ss)(EWT=7~bj!R-A zt6R5qZw|(G4e?2WW95T&_^Bio&T$+dlYNYxDBEMfWL@(9P&;xae zlOVovxzXkH^mc%C@8w7OpG0HjYL=-=Q6sTx1O{3OfT_>gWX3KNMUEs52_fc$5SA(( zjV@zaJw>f7=l@zVvQpSAXUC743iJhQa(pMH+PwxVad7JFIAd#Q{<^dySa{ukC}(@o zrk9!L6mJu(?bTMv7kbW#oS!bX;mX*t)$(^+osNM#S@|L}SXXx~@bsjWWR3S`#)H!$ zJ^iQ~vydu^CnmB;7YU3biWOwKG}*jsfI=4&Og2Opo3nL0{tSwmO#E~GQ7<87Mv=G4 z`sn@Q_BnG!(o07bm3T0M7-Tym*jm$~by?3JNlrRlc(8idRcY_hz@rvIBC$tWRwEK; zG)%Ovmi$GqV+1Wz4f&Dq+B=Y;NqS_3D~dbZNeKcsu9}1)6yK-C=sd(jWcEH09tqrYx`8Erzv-1qzTg3 zwPP?y&c?yG_n=l`saN=NY|~uGe~gh#ICd6Qebb7F`+KLit=_%V6dmfrWdXjcs?_(w z|J^svVp9%xZ-L?I)XltSl*V^K2WXME*(5csL_Y-?xYcM|0Wv76Pxdq>sAn-b*J3TZ z3Vt;hLzP1PigbPvkQMYmgXnACS*otzE+6*n%U&k+zb$5YbAqx8yQx4}4bmOF+nA5 zcbW|%2h!}^81Z2l(Xc{JKbgx`$W+arQZP{CjGQ`Dq2*V8&@D$smZxyNqRP-HEC1t6!t$I$nkTl`t zNFo8fc)^Q(UnI#Qy_)qUXaHuJE{@1KQl!Xq-7an9N(pKKMrU|QJeJEYLT^8_EGNBY z5uRwe;dj8sV%9vumt}8TJ@lF+hx%G7`;z_L1X8#0T+LAZTEXUtDD%RkL*~?e)=`gy z$KuvtkCeH%RoZ$QuddCbj%KX0D9?knO~>6B%Fqxmwy<>jnISTLB*>LCC8Q#gi%06( zqAHlW*R#QC=$T7reZ6DThM0zu87?j(Q;Zo~u#T6L-b=?bSR96-Xx|)Xy9Q^)3RkDI zpHH>gd=AHRceiko+gQtA3b);~@CuuVB+;Y#$W~hw{thmg$(0HVp(?l$Q=^frE3ntt zXzn?&A{{WAAw23iK9vwT;LFEkD?jediPMSNJX-L?&}BGEWk)Oyt;P~vaLd^p<1`R6 za)V4+-j!%YiH)f#B;hH5@tU}6e6@>I`2v}90joZqQnY#u;91GEsMQvK(v;n~Hiu3x zr7=qYcOABFR__{fsE(*>)KTW?U{ud&K?s$Dl*eJhYA_9}v@4qnI9=O%k>6$CZ zKPK&xp@zx&oc@}8DN9URiN{W>k8%Ki%cXPJxpR9U3-QZXiIndq8ED_ehY!!)%7!)| z_6b*h?A7PEs!3C`>ncg#p2(B-*#PPkmDyPBz=~}7SlQ@HJu(T+}wL8kv^Uny-H`{ssO4XGm~{U@`KRSTiy31egxsR%l{3CN>He_9!ZYPb`koNBvq@5R3mTSLvZIkKv&W|z0k7bx z+OW6lFwd!AD5T$~g|i}TUC0s^d&$#g47^N5wNgt;pf;Azyc-qFZtA(nxpC7-N9 z&KgIN;;xWrG#u@(d1e$SF8vp9Uxx+ipVSDIL^3s3;*lYc&yXEXO)L5gAkn@2kDR85Z^@iHm zw2><0u9Hw_z?SRr1Dwe5NJlkRsP8# zF*Oxw+lbtb$#Q?OE5)$b;OFp!G11nD3)2<9O9s|$`@MerI(&wVMwEP@xW^tUFg(Jm z_Ze`3%7uP2_AO=1TC}9oLq6->jq~%x4yw+R%kb+XFJ@a*-A~*%GQtT?iRN~m8cn}M zBwATOx+jXFN~S*4N(ml$qWJX$4rd}6QHe9r*M7yBLsGZ8{A~%ul0;-uk);`0#CWlk z;zgCau^6fL!aAn{`+*&GZ2bB-Y9Ne7{5bab{&b)DB*X=~9ZieyqMu$$@-!v?v&Nnt zNW1x4B_aSaaF)OF1#=F!njhz1^y_r(uD&w`HKLCa`9G?KJ=EX6DDj=pnf+lPrKBs* z*NEM))jqs3Pyj~o7PB3kBOd(SSO7jvbFsedf1V@s>)wIz!AtAAf%YnW6K1L@`>Z0_ z{n7Qmxf64oOzG>4^@adXXFvxHUEo8w^Qc_-{Kkr1kJY$N#yw^L)Xp53G!(N~m7}gc z4Vs7e->g(+pOXg1ttc1ehD8ZKtlMoB1r&CAYZfi7{(dPdmq^|Hg6;BlPx3;FF0nF% z(w!x=(mX8xh{M^REM3`b@FOustcp1tMM*c=E)31-+Zt?^(Eiey_ce}tcpq+kh3yR2 z@3>!I54LMKgoLd=pOVD3SRA~{gGv2qj%Hr)#CgtsVSPUjqsYYvUpXfY4LCcGDGF8& z1h3MZIZB!jNmk!>Hu#e)HBYBhx>oSqIZ-pIay;Ef`P91TZEaJ(PI1r=7Yu}fgxK){ zIA^o3u?`~$rq zlxyaEkV3Ro^8a;%*(x(DIiUwKt?=*YU~l^Lw#YH=P!3|8CS`ABC*@Ea`tko%G3uV# zOUDTDKzaF6$c$y1uII`@{5b2?;IQFsV*dWYR?G zW-Ei3M$n7J#9T)9X$nIlyOD26+Lq`$s$_d{9UkZM0xvZf2{MyYDg5ijN3cVL|Ey|y z(3kIBRYdhN$F6CWZ0ogmSr+woIm>@R&E-P$0 z1e$?hJDuo~^8>gc#PFv^lYm2W0WtgA#LxVv+rSEDm$4jlrZ`jV08A&4L(0C2o)%wq%s$qHgO(6T4_eo8^Z&&~j_791``B?Sd8^F(0AIC043h zfit}*IpQ=G^shAyN#$wFC^g#g0#>foHJ75*WttnoI4)6>-dr>~FhBQPXX?yg-8}(& zxw$}7=xJ@49%9{avnx8&H|)s3tEud)<&N{#eDa!?2>+;C`j!1^?7*?{ujVc8b{iTG zN%5-T4&@G&fVLKy4h4dOTa%ey5gicx;nKdx!MehQs~BgIn|^TRsa*BVW1tb!JU_M_ zjDqtNx`|xZd($ORBt&sMZ(wyoYzuf?aE{rbHgBP-jb^9Y60>mNhZh+h3Wan>O8wr= zE{pVSX$WY+&jX-E*$zs`Xyd1z#^=b`7-T{WlNel&933O{Q16w4?pzl%mIw6>-Zw)3 zmVwE#^xC)H&;O7>gVX38FrH&6QYN1<1}%wTTh-kJezN|8mgwzs4R0M3Mfr1Ssbuf8hqNak ziQrim-)jGq9ufyT2|#FGJPpoLNCGsP%a9>9aoQL`qoAflq6&C#lxh$;qf8%RYNIsj zDI{!wLnoA14H_vuUwT*yE1?pSlT1qQG~QeY`Dv;($IKKX$@~M;f1tX1oOSFxJXSKSxz(&51bXV7R9x_wkD?>r^dt&qnfd!->wM(mXznLJI)TN#0I z*|Lt0i_`i@YvKXCEb??`ejeY6Da`D6yN@Z|rfRuV6j``9S9XtO4J@Wcmk16)Kc3`6 zwvPICpf`c_wzAE`?~$hNiQ*Gl;T=?$BlCzDOCm*UHqZ9+3^6-q_RHq(-(Ee@~NaSeDF- zyIlR)mmXcxmnh3wZ|*2K9w1sIK3TM%q}SY_rLw#ukS}ZdJJK z{AimyicvmRyp23!7>=N97T}nMc<-~wsHMpd(GUXy#G)c*O~9@yByS9H(munmdeAgA z&eTuWW&OFwR3`SveKMBo34)ot*}jDfOfVByspEqBw5EPS) zcy6WEs9ca*L3(i_N7GBNv~Gx<(u|>%=0U;nZ5eITnPpeL zz!y*(Slww&aD$++JL+UWP*W3qa;KA`35*%w^&IM|Bj?WLTlTpI_aODGMC0cgP5q9Ph0}#%b8I&Nm!luc32EsJn3BeI#i4l1M)O zP?{X1jw&Q7d<5uSg7^o5CXf(v(;d;`gcn z{WUpQ8WkB^&atZnp!%sE3~7oq?MAHss7dlNm5*+GAOi=6B=L=@wfY|87$l0f&Eex5 zGW4w2(eIaUrazHqYM8s05(gTtIzQO+G?wHv2aF_;9ej6VCT~5L7~~LRE6H;Kr&yM^ z&RvybzaBf+`7s-~u1S+a?e={|%O}B%=rsRJ)GW=>{>If@=D<=4Zu~@wrm#!fFa9QR zo%Blh1%5cT|MEh=XQ!bpCtiJ4;lC2?KDGF()Lo4~q&Nst8U@b2qVdRpyc9_*tH{y# zap&^q42=U5$5m2SNsfZtQpMbo>+mFUGIcgpsB0CI?WB9Gf~=2hnQY~2y$qF1>Yu^9 zhBjdat6H-mCD$QNEYLJ$W@ulb-?07aK8J9@cPx%yf}}Vthg6trm^A8q6oH}GtB*9K z!uH!4Jb13&pavRzn~Fw5LY5H~G;uH{g-H2ol* zNju0Amh>m*^5H%E2I?>`$A~xVE;_D{g`Zm_SsTz5w^%~+PDx#cTcF6oRxTRpSet0SmAVK|jFCP-0yI=)AliHY%r^MC zm?3MtiqmGV>Ri+KO59K1N$83f(~<+B$A|^4H-dVbD-Q zDlsAUR4h%zUi*E+wrdG2*~=4d6{3e!rcSS&kwJ{ByRD);KMVXK=958vPEwYCc3eXX z#{PC}Ya=AGsO|SVRgd4hco%%i^%O%FBtWO_^Z7Go9bLaJ>!SUfML2x8=NjzMAmilX z%-6?ZG>JQ3ymu6^*vh*s z(i&pqWUJg4M(X-xy86;}jddZXsm7GWl8Y^Vg~5{b1Y(I*!}+_t+ZGYHvGsWKmTg2t zmc2i=Fbw#xfOwck>hOqVO^YDB+0&jyava+IZvi(7QzPxZO<^?b5SR#6 zMfr%yZ(8j*iS!HG_1Lk6pzqX8Sj1U8b&9MsT)?Qa^gU2ZIT5XfMr)eaeK-&#!Sg>5`Le$%XD{B-FeTFe{1fJisPCV?kk_hUFuU<{P|thhEON&q@xy zx&H2;?*l7~T{z0_B`x*mzJlAf2cF%0r@J%6TzTD>E}cn?*}cj(b`qFz;RR)+6NSYu zXk#V#{^b3exLmy^glAP4zRCt2$kwDBCb=YS!^DC4pb+ITg+4Oy!_#DPXbLrksQD+m zNaL{n_ROMfSf%SiuI%nI+2--4Wrz_32CR4c(uJkcp+V*O*Yj;fs*8%6LbL-2h{hTr zQmcFjB80-(Hj2jZgZ&}~FE3XpUscHDO?=#V8&KcLYPJ{+cjm12a|O4(gKJD7VLG>4 zf178a?Cz%rc7t!iNM{7Oa@Lv1R}4Ce$W(#7yS_+~mHNiPSbo^QoLB{nT5MA6Z;Hd} z%_OK>>|Kmj;t)_iT~fZ1M(BvN)~J^FqNPSEj?~*xuj|XGm4uca{Q9yelKXY zB3B@}* z`M9O3BwFMTzVM)rh~6E@S$mbK`PPCevCpgg zwl0_=c5U!*Ejs9ZiEN#we?l==M5pmUbB!2am2!7aO2$f&ab2jxi9$;DlhAd&l}9aV zg`lB)GM{`pY_h)KxSJv=G9_Hp<}}xsJ}$5iNdozO8G-;40}i|GP5t3qP-&ZlDZ>D1 zqD9YQSMKVDOrCj}QXpl8E=Uk$0-I2RvXYjul1LbZcoOaOcKq7~2?vhRX7}Hw-3UdM zc27OVK@ZVHT<1t%#cS1Ak&9^yOuo|EcrTNh)f;STcfpS%uV)umqc`>6vq^OCSB(-^ zU-}}syev6NUn_hRI<5mUu2i@!*r_4n&o%9p@3t;aut!=Nt;!@(%%P912OMk~xRynU z0`KHR4>u8gD7~wlIK|Ke4SD1o;)Q=MNh*&pI%F`6E8<_njz@}ae{J_-^VzL8;B!{P zHeMHx%}ZauHyhD-^|aK0!r^@2=9tDHaYB#1HgghqP|U;Zeiwm-7bm1ezni;@eg=%* zUf6cRiYYpOA(6#mgz-LAYwiGHL-G<6=*12$#JNZ2ec#zK+nQk>mh$$B`C^tmLuzA9 ztlR#8Rk2)W!M3j)$Krav!L53R5xR`Ic{em-T$U0;cX%HG9YVggRa>tA$&<4%M5UE0 z1)u>n-5=DeDW-bCw0tI$B3}I(NaX11@y(zE4!Ehuzc%Z+>aWe^MO;r%^nGc|n%r9F zB8G${oMqt*-t!kwyl^8ypJm(3N%|4! zwLH_MkJIb2A~;~OZ>5K@=v>1+59v2e;kk*<125;^{gn*nO-NqxRqs9InZ&tk*eUgA zY&)cKq01dJ*JlmFQ!ItixTx{@N&jR`;idN2o6?iH%$XTqonPbdu&Fh;aj)kB#^u`) z|14SLdOjtUed}09(T$mrVaYt_BlN{1yl_!)dBp;pxuVs=hUf@7R^UKNSSx!rx1ua> z)={3y73Uk)Czcy>A1Ujwu1~b7ZC87vE0|$cn(qo%x(8WlQ-Nylc*Gu@!i_sEDT?NX z(jz}s0Tp>_SO29I$XInED&`B_P*aaQ+UU}vg1@YF4^(MxTIhZyS|=cm-xgc z0)7N4vM=^&Q-YZ8x`wLd5z`X6gU`QCT?!q2r8=*hHLEB72{f+FrnkFyi+x? zZ{2?S*}4%|6gY|!>ePnJ%wkX>(~wnTfPTs~*;us+rA?<`+Emh?^_)W3ANnNcxywgr z(=LQ*B|#JN{rMIVUm_)~lepY4z(TW#`p-q zoXm0+=@fhTy2T?_6Ic8xf>d*_$vg;KHve?+x7UBe-@J4F_Kq3DHYp)Nle!zbNcd9F z%NS{9Eu_~SQUY@nCTRv1hyCn!5>E`CMJF#Ap%PP?u6WUdPvv45f@HL0KNy8Ci75ma zc&SKRz@qwfrP?&4|A3PeM+DSmcBz(J;#n&1Ni#K?w^oznS5EjR;7J`8Y&U#=Eljn? z*lyoVkEZqv_%#lxpK6ZYv6();!9|o=BT5>bG&HSR^FQ^XRj5hL`-qeqAwKDgVh749 zE@bl9PWzl*s_n{%m#B>KPj}UD6|^)8w-85J<&}?9$M{^`dGrb#qFRlK5xshum#4e-zvlx-#iofJiq5E3fA0BZuLroqjrQ6$l zT#39Jw-rmJy8~c%Gg1Su@wT(1pMFxc4a23Tbrd~xSe{$i;<@=ATv4VA6kxi#efip< zOQ&_4Uv}Z5o;Ntm9i2Xp{UE>CcHa=SqaZqJXm-2#{2}KJ^X{Yz_F5UUu+aP*rtS`f z9-L)nCh*32P11`$J|1`Abc9x`EK`yQ4PTcTFT9QZ>8a&s^%DwRaMT)@7}8qVYk}x% z#Vy1ktbZoUV!||HX`q!ZiEr7;;&LaK8Qc`>iMnlIuBGJuwgR2YoLv-MM~+SKz%OD~ z>8d!50zJtGa-BFdn2i>aOe(h98>5G*4j9>W>&q8L5b;96UN%YVXC=~3TXephtQoWX z_aFvFm|c!`8ucDuEV$iZo`svMqViAG`18BWv`>LU9+Z_&-v3+N1*}9$M@bdD$c4N8 z#QD#WBpQhxx@Nqq5iN<&4RO~bU$D*!){9mq=gr*dq!fD^=f@SAePDaJI?`KQl-DED zhGlBBoEG7EbHwr4)&1D_dXl{Rq`;?=xorDyQ~Mm=pJchbT@(9t_s;c~X4vFE5+8ue z0+?GX&Tz$;U3OR2@$KS1rfZiXn!m|*MPzLn!T(%6uAF2Y6?oqU77N(j1>-o}vBGXC zboX3p;L@l{!dDNOSN&f2;14ac#J<69-dbFW$-U?>|;yYvi*eG0_S8N=!6qLi8K zg9W}gZCE0uYtZL}I-O)a@jjhxoyAtbC6t(B%^H}CzD3)Grh^z=5UhffBu>W~)CJXt z8;Ui-3W11UFLZ?r8bb!!p_R*ae&DfPp{bPPQh6>+LwdFGri)y>-;*o6?x4TlxMy@| zsZxF}iH3BWE^tQVxl$cEXUY)B#~}n15#of4U9T;xpW{@DsEk8ei%OaTzv`jJAxj2L z)(ibe;XmWWpSw572W>5HeLB*;lH?bjLCVoIoxl?(1bN{2`J>d9L6(E-!0?a_0sR#T zE1<%hNilyp{S!qS^z=%Y9#V~X`FP6@s>R12^5GX(CNDlb=%wA4xp@g=K={|df}4Q{ z(kEMLYpd-RrS-djLKhOZEgJUiX)CqM!t2E+e%@p_z?R!Epyd1Ja5M3ilO+0L<)D&mN zE7UyPli6Ax#T6Pe)F{1ziQ7UK@9rfz7&W}7NC zgTt!ceS~vYdNfV-6m3#=S~a&|;pZ({Skpvt?Vw~&ok_n@yKgUZl%B>88=mmtD%;(T zq3P+HYqku2Qe?1pGX8)s27SBmMaDnmYrFjq2T%s*?9Q{Z@*&tAf8oFR*l@@nQ8SO8 zv!H5=3Cyi;6q}renptLK@pG_nag9)y=mOqdTe^)|G26TI(WXXk3}+RIpmD5*p4o}fD&}QVM{~^MgLak6siN9I`;-XQ+s;4A_zmgjiagoP?`45JY zurc7KFLtQsu{l`F7^GL3FqQl;=SJ2j>J7P*iY2f{s;HlIWlsr zxyh&k1EA)XJ-4qC@vllXfkT^GlU$L|gM;K67C|ka5qkg3%ReHZhS&N7TYu}q4<&eC z4f%0&J?6yKCIZvQ-T_d^_Qgmt00utq+=swQ(N7QNuX%*|jq>v|-Th`upCOfF;|H-5@tDu0frR}B3vEJ`S_%{})GDQnn<}In3DCb9gGq9z3kpC$qn>XR8u$W=UoPrzDAI%~uyB!vst5^r zpNk@N04u?uOIdHa`gWKb1qk$lQa7HEniG)YPbEtZ8Szh4{;}OW_2Xo~`J3oN|L+_ax2 zN-($W(L{=nGm*fyr5VIRLpkyB!}gC~fLtH=Xd9CK%n@mR!ZphtHi`iX}C`ZWa_ zjw*1pq_7NljY^kuu~3=!Ko`Wd-hKy|E|nxDYzmc{JknAMAcck|k{tk`(Z|n~jWTV# zK0m&;RLY4*s!ez`bukyFz@%$`b*+r&RSMb6Q8jF67Rl>{V|VL?$uJf|`D{|RubqB` zpNHPiw`v=!HXh4EgzELf&1jQ7<&lpNK{f7;(yCtq@r8%T2BopK5zlIq?!yz(St| z2Ms^FfoJ^sy~imu6b{4mXhWr(T$szu==t&kF-V0pRpxO^nLC*0Tbh7Wi3xPL zmQ62v6yjk3f5n5HYso1IN731@b zwg)(Jlz`~m*>o!7kH35qZZXfXf572NDei-K$Wrkz#K#cmCOcLoB2P_FYRFm^_6p+t zC-&;s8$-@NOSO@@cLvd*Dss+F!H-b0w>qcG2vHc z_{a5s70|U!TyY4;Gj1YO?~f!qAsjiRgu(GgIbSdAA(Wxj23G9rgmBd8j?x5e;NT`d z^_JkYCoEO5iXJ$TbQxaXyy z9b75}h*iymY;W61H}&A?e>n~}95kU*wBSu1sL}wAp*2b=m2A9a%VH}tok>Fr((S6_(fEy6pos(C`LeKTOX=8EqcwbcK||BQnS|T-9JavQO%7cqEV4v!|qL+-*Nx)*Hp6MoQsZv;Wpp zd^p(h*XwaHl`+r%8aVSCH?woN9UtMQMRg*0s_ls#t<}uI_2w@=<_80QnhRO_kmKcR zTUX29^d>*5`NL~F)&d2L{!oFNc*A!#6$I-W8|{C5zSkko`d;Wf7si2(kD+aOz4b3C z@z0#c+fGGIUeS672unA9+9HOd_=*A++kZ*n)2JmG=)obe%?iuOM>4qLP1B20hW-yU zDZI5sf+odlxsB|e$nTk>3un5 z3--bYuY|giwGycw+qsV6gzzDVk9G-!T2yp-GQv1fEM6Za6brE4iYspB&bs1KV&&Ap z2RY@#fsBE|hT5{T1G>VRCj7x%W(@Odi2h&vqi#cjhtEw|jB&`>goAXS{t2K2Ka{7j z{pNGEDE)$Gz2^^qaDJ(A-u;xTTe;)v?}8ZFYu!!N@&8_Wen9N9ObOOv;MUq!OHuE`DBU>$aAYVl?o*l1ySQBOV{Dh>v zo!S4AF+(5cWAFg#&|t*C9Vao4K$r5Yz>7O2=uo`!0T z2?`e<92n-uTXW?P*RwXW0^-wss-AO0XY48oc^Va6af_Xqfk!qa7oY9g6#vyf`#AgU zj^|fzHP1Qbw?DIKwaqCG6Ym%QygzzIXv%($#!e*cl=x_yej2{&jtJ(Qfl+~1IO1#L3sEqnmObk0(a-eq zX4H5RmF4|DcEs1T+=-+zlv#hSXH$=jNuxYsQO_Q|+bMx0&_vZBP5AW0>EB1!Ism=X z^~-jMIP@QodpZ+%wAYFF0*A4n4b*4gPNzlEv^`EHRv*aTP)aM=`@gmSvI(2m*ExT4 zl>!bMp5RP~iX;aEAZjy;n2314oO~=jVa3&sF@FP&Y;c-$f72E9KmzTc_}y<=3m8fA z!~#cpQ$xnWk4>*OBIkeU!UGv#ptS0{gq>@B`_ea_;ulsFZ*p^UtZ*6zLM)mIQkd)H*FH6y~Q?u z-haYk-XleS5J~^jCoCx-JZd79;#=l;I|Q0?VyZNQTkeny!=y%X;ZoS}`H^R5o|0u& z?g>%7rSXO^9&`Jf_k%v%Lww-yRU1jsc94!i8U_o@s2GM_XdaQYrJjIo zzISClqan~OcDDwtcFB~!MFpO0Nw7(!kA7;DHnYlsxh)qk6yr5?Ib=9uCp@ z+L5`pra559JQMM#{30F5wY7Qhh}ILf0aF5GYK}Y9r7WL*W99=>gF7@bvN_=M3SVZi zbn}F6d$3&FjP?K{uF#(=Wi!xr@1)0*DR8L@0b^0h~C>%oMxz={%*q_yM-_4iH^2Ia$j#b z4VSqFj{FznV{GD#c0TlKs5`;-d$U(X8N_VrV%D*9Q%TJ3H}VFuWBg4*0j-gfLV^FV z>UAw^CKG`)Q~Mveq`y}o!xYOmxiHAcfVjYnyyg)MM4vN_=yRuD2Ku(r<)3aHJdurZ zE;alsjY$ERB)bpPuNq7yaYb>|C~=Z2Us#B_>zqTkXKLHcB`T&liFLFe51rePuB2N9(X3-`j$|U zoTQ4rl7VhIakYTM%zS^)+&s6PRCT|ZT%e#ZqjaZxE9}sM7magUMw)muL+5>0q_dEL zCAjt~3e1WX>1|^NxL_K|%HfYODk7zC>(3Vtq<^^l%e8UI{9F_bIObg&<$Tl_kLgg*|63%S_5eQwu!VO3mqa@?YQkQC)xkm}t zHEF)5ITc#4L%8-IBO9czTyUl7Ss-Zqfn;;E+xC6HXCxCuQK?-azh&nSarfjDdipVq~HQtMcw6mH+#N#_%lpAKhRnQLi= zktl!W_9n-xXX22c1*xEA7L}CigSj1-nacKy2|%!K1e)644U&ya-2w4IZpEinkYy)Z zfl`R)(ZWl2zdCsTZ0e2!q)&ER8K;ijf0}2xfcNv(11kO-98MvozQm;e7(J*PZ1M}s zS(4X`+4Y@|xfr^L`z?9uw&G!%Cku zq{))YCY$~GEl$VXe>?l@%-Q$6=Xt-GEwGo$JoAvPmW10I?J}@eg~CaJKfsyq0*}dL zB*%InM{}c(-W>2rNx1+8AI2Aonf`BvnrA`f2cJM5YIkX1?|%(0i38o}Nsx^;y8{9e zY5WYkBghGi5Ur$v&Y=$`&)|PhWONvfRVOtbP~sSE`@JfWD&qB-F#;u#=}7EvrHZTC z77JHhy`Mz7<+1zc3-$9S(t1b!jY@^dMbMJ8Z;O2A*j^>xDEUNu`Yrvnd9TFnUniQa zk4q1F&zTvaq|v$POI6`%*{3?nG47!sL(UJCZCDlSOmTJBCT`Q(^jWHUq<&&z8Gpy^ zOIB8BQic8a`lvynFEuqr!$IyAQp4OXGbdQ5VBStuJ8dv7p?XmFMQP75F!XM-xJwW# zF9u0so(T|Ivakd^GdaybCf?`Ar2wS*jL+k6zfJQsfsIU09< z!*pp?$({b4n^x1GtrkW1RbmA#&{o*&6SuV!dM?6i446%dOITg?cRX#^^tlh=Xo&xK z?3Lw}N48*Vcl)}xI^G_TD){A~!Rh#fZoIjrE=0|nvt>If?3YunpPGwrG^B0fMr3Ec zuFJ+E9adP+^B3xlg)fl0El|i!rw1LC5b!(Tjm#V zf=)i^nx?{NTAH<0G$`GcKl-R zb^9Rp&w*To)UR4(3Zu6~bmFo#GX`S@$DOI8p zx_84;Y5M}0fvBRWR1xTLjiAs#8pE2N$a0MvnfTi>Fapx2!dx4S|s5Hax7iEK4GxQ;=qbgbL(DDQrO;oIFuSnJPoM_CoU=F|t=)===3j?K<%F&PT-9G$Ag4n!wUr}9n~K5`)Bz0UO!5t;;TQKmA@cdrsXPEMV$&saA7 z{?F!@*BW!{5d-;&BZ}oxqUzBN)4<;hiS3#R#w>&jyU^K zzTW61w_i+bk;ws#p%RTcViiC5oTeX#vXM6lW$54nMJSeb+K zWt9Gp%}PiJdNUrkFXnLWi7r-FyT`G9WsOuNjy?vQge5JnOTMCKLH#uoK9b+Dw2VuS i9aH!S>Sodz5L}UT?$=GhE5~1e*TxM=amsZ&5B~=cPF>9a literal 0 HcmV?d00001 diff --git a/content/en/docs/21.0/user-guides/configuration-basic/img/vtadmin-tablet-list.png b/content/en/docs/21.0/user-guides/configuration-basic/img/vtadmin-tablet-list.png new file mode 100644 index 0000000000000000000000000000000000000000..828d033f5a0006e57eea6afea6a76b1d674c9c51 GIT binary patch literal 455633 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

    H&w5}>>E^GMYDu17ay_VTQ}rs4ZC=FLQgS>` z=|7Q{(}d{?k28A^UKsAe%HVLL9fKng?S-(5*poc18mvEDS5LM9x*-(6eeW0OkP%w{ z@6rjsrz-zNYOhNGTqKjz&f6s8ln!nN>k#^r`7+n3_`q)msn@CWvF3QY_E|*bgh{$9 zmtMHyhk>8$&?Y$`&rd&9)xn3~wbaAcs*{AViA0Xi8Wl?CNN+*(;xYpKr5(U=!Etu;R6X%OC!+71)BjpPiy$2cXxSC7BGL;wnM2_z0j6XW3~unda4ngQ zQihKpdxhn)zFZ`d-n%Xsf_OqLvypnIh|))3-Fthcj-c|Ts2Fy(VD18cz5BvQElwfe zhkVv|XyecI+V;1lM<+8)FZrxI>K<|TC^w{0J@5KJKv=kjiSUu1D&vV)@!VGSuL z8JO3v>C)5Fx)_f6Jg;M!Zh|tN1JETficG>D@tLX1x zL?D2R7@q))Wcmh?Jx3lA)MgqOQ~R!uG~hgL$rM&;8R2&sem+ zTHvvnAN=SD;!$c)oW6G~5nyA+NMj(9_dLbgC&YPTy9=5fFvh!s5oG-@O_iPtiyg_ghGzkDC3Q z8nsu8$F(;vZ?;zrn#4mRBjlA$PX6TVrJJOOFEcQoyxP31#GC&0kB9s7DgWg~f9MhM zTmS%vba!{_Adv~SF@*=Hqbd${G#OzVR=O1>o!B%)RijQ3K!D~@A1Ktf!hS|dSlREP z#>U2=qW1i!dykw7A7*-0dCp_AD5@_kG17Ok38vjju4X;ZIls857K6RHQ~xnO0Q37R zN2xyvDxF#Pa6i27zh8}Dp>nX}E%CpA#bV1VE46UqK7|M3J}OGtpZp-OujD}7r~mz2 zdFpzSma4!oE9A0&sdhI|T++U3r2kIg$QhqSj4CJ3BDN|~nkLh8N2iB15LT+;Z`U(F zIx&&9#6QQpqtI9SW9`9mz-sKWS%UoK1N-wI=9&-)iiogFXuKF7FMbd;Pbe=@SgAPzB4zDL`SF6Jyy!dMZN!5B0G`njxS@pUE$hf^Y@sS|YQ?Yz9aUbgz* zG`zLX)xMT6%NFy0XYT-EJVO98q@K6Y%0De95&T>wA0a45uAIjQj}27`FfzyFotMLB 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≦6VLFt(VH43PiRm5T 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

    !*HvI>xp(#+e-TSk=-2Wy?D$aiG1G#eF%f z(PzkrJA>Mg4I2jpikhJCQkt8~jXeIg<6qMnPg^QA0{B5YUf<%#3wEyv@!2ba!isJE~e&?8~slb6)Z1smja4 ziW%|+r~(*XZYkiR_wxcYIvJ&454!I2EWGb9ViF^Y(r7@Wrm2gQ{VE7NP=+H7X-PQS z@qyL=b9NdWQsU>L&kIDRIU#mZRH1C6v!1nEN>zD1(6%(a$>s}Wb9i9z^kP;@dg<}T z8xsdkP1pSl=p!jOq;m845v`WTF-75P-W#`|n?W41TYy`!@;mwVPP)kUSIjI1(uVZi zb#!5d-t#P0~d4=0)+FkWjgL<6a%v; z%rSzmwU$6ep|`M%zHOt(QBGi^iLw)9|BdjC#5?8CeHSr>03GCzEK5!Oe%Zby`oOWk ziZqqom>2c8$WJL|=AsqvebRZ~_INyMUkr8UDeDDO-A^)*9wcBeq#gyG^U&hc8IqUd zzF!79yGqDu4YXAi#eFd5@q&b%Xa7CZ{+`F3O31N#-5|Iql)fGH(TLP64R)ft-7Ior z_=nx6V-a2Wbumj@+M~rHtaz-A?Sn{FUM;5UE&M`KzHB<`q)9REkvy%sBVd}@t~R2j zVk@W3NvW!7N7Oxa8pLg4LpYY9vNQF!}S>LiY27fZ|lw zI9~j9+_&Ep>S;w`t{x*c5hc~D*{m|`Bo%*gGE2{7@siDZBsK<|hnG#f-TiO98Jiaz zy?L9}LUi`bZZ5~CQylS2VLE8PYR5p$| zsNCn`M$2|_^8T$9r{Kv4fx^+dm4LdWbw~6p9ae?bJ5-IaI|XMrAI#~i;C3TfxXRK2 z5{jRxYUeJ{srVxETo*ii3khQklF2;ukXe!(Rj3?}qR#wbKj_i4jzMOmtI=M4)bQgw zjrsLROksYZAgiPD`Fo`n-Y#{Mrb@mF0K>+e`k*-%RZgV^yH_3yxS5DDaF?P-0(CYz?kikBn5lOe6sKul?=N4$HI zr+4MsSt!=Vr1!S;;4uMTCk_A$4=%UIUD$Yq|EW0()g`o>%5hxMDmrVH1s{ls zaG8g^i{GRgI1o@i<Q89Y>mXHGfQc_wsnOysTsOiEd%s|v z+4UO6A?Xu=sXfTqzP?irU@zVuiz8|fejt48L~w{bRzdiOM^6ut;_(>A%3`Y(tSxh; zuSm#%g`Y;;3rlqM0}O$MM$dpJRnm4@i}mYpp6YSq&ErA{bikoG61Py<%2VcXjH;m= z8l4Ys7QccPd=*w6ymZQI|L6wEF z>nz)<%J{bo1z@k-M4xP9De%gBTfT-P#=3?D23ykhSL0lqo~c#v0|ZdN+`x947Z=55 zFZk|lLiH{2+eHhy8cy)J4WCoJ%V*l%T|X79wnLUXa5fE=<2LbeYl&xGic4%BchreX zPSfJwd4=*FfPo9eA!XA&JP>5IqWC_~B01lIKYUTbaX!?4&dWWt- z+@coaTT%7J!{0RgU_g%JR@lpI95a_Z?ahB9yJBGbS$jz|K}mLveSrmBP*CtH;dQ_# z`S;&4=s^L*MO`WfkHx(-ZE`pNVYF8GP21atl-pp32~OWvhM7cg|3pfwpIyvZy}z6T zsTDq%QDvFwC!Fqtz$&#!T*JLSrn~U~?9duM(`fJ_0Q0?$Tj0WN*>$#JazsS)e7CsTg>Z16+fi<(l?74I9P2&y^wcfO?>l$?RE>?^KJR9_OA z4WKe6ooj_HId|TVpOG>$Jy&o@*5>Ri>Zt!5jaoUZ#S<*>37P9r+^Q=8xtn;IXnrNv zlD%&2$4TauA2>nR21;hnC~8mYKE|~`-Qpsoe6#T&n4fd^#p<#0h>R+MAj*1AE`yK*-HM3&AhIxo)Wn<8dv>F~zbw`YrslLrY?3FT>nvzLchbnM+_8Z!yD z!4SB+XK<(-^4s@nAcpsMoL#C(f2JIaeOw_iB(wa?PE~ER@15SH+&#~+kQP+Gw6f@% z_5zNana}0IDM)tS47YV;>)7B^CJo~4Y#kl#2?=N9pR*i&+X*9%k>OsZAmgA@_6Ab{ z0lh+r|110Kcv9}3tIxnX(RSu@ZYyep!`pg>hoY5j%#2E4A9~X#X5_@HJ0sS`IfhNRTGEcKng^*$4MBo7%*7vck`z$CtUdspk=5$q(ts|dl8j)B^C zUAf>i_B2O+PElIR^efAB=i*#4#f-yx%A2&NQ{oOlBwzc})-Y-^3;B%N@AY86wd#1( z!(-_6Q7dS~f}aoIoU({Qm#S5#1vw+hh3F$G_?W5vV5>o1m1+W`BPqnUYV9W*aU}%; zh!OYpPK<9(mSRh0F(PGi+?L5Xdw@DQj{nUyxbs|4a>i}ZkZV{Ds%oS|}znJ%`64>EKM|@~j^-F$^SBmtc zV1_HM;$UMNV?;~&vA`6-=R0aHLtbv;Ft$Kr4y7J`Uyh!h!IP86Kh-#f2sSU0wKv)@fBv|BAh0Al5H+91-Mr@B9rv|( z9qQ2T>n5*!qotQ5N@vW5&(HB-S1Jj?UeO~`*XgDo0&VwxHL#Cw%Jra;{FgAlh!17`(~_pzWw?Gwuyf7@?<$5}Vam@Lfi$HK#>#kAhQU3TND zI=w>d9%`p^bO#uvUev9a4+wC?h;Dpn$lD#$>iv1#^U+#%BhfU`%mgcQY2X;@qe9RQ z`C!QOQ^VblZim7DYl=NZyY-OWPeC6j`<0Sbkbk*CxctOX3YRR0ghS-JNsS)I$L&En@Md}O!~D%N$feI)%X|Ao0V9|N zI+^gyYq}_W9MR?lS2K9>3}Z3?G+{moiBHRC%GSl!(-IfxE0-7yWE;^Q++Gi#)C!;5 z{%+UU0IBu$?g*(ftnRyz;g*^9w?)ztO4-xXFmlMYTQY0Nz<@zn0=9_XE1fxdxL z=hpY23GN`SYedzfvX@*(C7lhvN_8nw$dkMHSJ~a1)n<{(Ljn2Z+gg7#y2$(kHmltZ zjW{2B{EXao#4?g32fTs^sd#Ta7@O%BIg3ubUi;GFEsZ+!8+Y+*_#7q_HGZcrdE6TM z)_uyNXp@)O2Q5znBQgwFtd6$cKx_N4~RT+n0Q*hQUJv;8E=cjOpIc^(_ zUj59PSoTcBm&4NWeex|m|4$j0^;*wC^gBetr@GVsPzsy6RSGj?|6hc{cxC>BP}nCl z&^?BP|l*o6WJKk8eX{xfQBd=dYF_{l{tuBOsTI{ z$%Ala4P6vp*i9v#<{)=^#Yuaj=w=7Z0YCXw5im-r0cI%?!KYV)2(5e9$A7Euc{1Be zJ1nPH<-^=|dQlz{;pe1!+6EF)Oc&%u%og5=5ah;I(q+NV3p-tB4QG%14jR^@O$J1i z@wd}ml=6AF`2t+Se?SBum+E3SRhzXpo|c`+)M@dN)$8}xE**ze9~n;*DDc9>j5kTX zEYCw%>}-E(xb7x_KEGGT;O(sUpHdmRnp&CgffH-fEH6TWRN-OXxZGzcjiTNQWr+B) zD>HVpL{*Q22piD}P^4xFeW<41(-7iTg2I&zy z+u9+XIEHGfaw*Iyx^)liT2yt&v;L5R1p)6AxP`S$R-%2A-r*sir=|`&=W|ZvF4k85 z=aqwP^jqxGz`K(sfQq^b^8S4DuA0T`b=iihQXnCyFFq8tdB9e?Z7p0txosLh8ei53 z#MJ~eXl=vVvmnZ+>1ZiN6zu7fWK62S^l*POE31pjgl`SEa%9c~(q;vJKF8IKgkeI*S@&&Lx61D`$~ zwR@)Hw^A?N^2JH7CFip~+?&bB1_Wiu%IbwoJ;P@(6_-{ZM-*le?1UPJpUGMz`XJ~g zwR4~5xjE@|gkfxumXi#x*D(Lo(BJ;CIm%Pr&Vv)ld9#!VJQ9RS3peNTl6rI9L`HA4 z!uH)_kkMj2i;qg$NC8cw#ZIJgG0RAju-DS&eqc21_4V32iCisi=;S#6<$m*R7Dz-{ zq!)5Y@?7kKkQLv!W5nKiBWX@we(jC88ui_4nND0*+jRGT=jkOAWB=MG6#j01pg{-j zv2eY@YD8Ci@mA;X^iH(Ujkws(2Z7-A7-2!_FA(#eQ~o_EX_ zWKS3V(s)3C`?vr(GKD=qwOc78pe#=%L>k)3A4+32X|}(8Fp3;*z0{L zO^R1&X4yvz2}gX-L~X;idnPkQFT!@QDiH=>Ck~W6y&*2Sa{&?b+;fmou6qU5h3VvO z)UA78x#*1N_i@W{Tv=!|@sjG!Ua~!qqu@zMD7@ON9-ivdx39EzzL&22#eh`7IbbO0 zY0m-k(7Or3eYP!{-9d3=$emaH$Eb72TCl38%{AnXwYW^Ix{c$9nnq7uSdY|&^_`FW zL(wj<#Y-IT!_%hEqv%jLES_ah&vcnkVH4kpprrIA*&bw5fGat$@5&Nq4I<2`{s^=! zVvZT(u_jpmycIl%=4B3)Z+|+7?~|LU^B$*dIy&}(3T-j@E+4@WB^{9l2;>Cf0^Bc+ zJ--LAhY~CW{&?`fLS;2wP0PBc69SdfSJtYIytwg0T4GPzi~;+D`=pjvcLSm^3kKw$ zI*au+ZihAu9rm2Ak{-lBkxYoALEe<>7g_@M@^`d!X3YIo(D3V>>UOFHx^%I!r01d-Kk+;%oR z_@{chrJR)9x_PgN3qONWK`YB9#cYJ%VDA|FeWN(zJ>URAzFM-FD=;+YbhTNoCpMOo zD~uP7iBDClY9uluA*QhPIO_RZI%}h1G1?arhrU^53o$c%3bjnh1HH5ZdJ;5Nvca3qqsHU0f$Pv~KbSsrx?qx<=oWahR=qXz z5czcLScCkGu3{C`fM1ZrQyF!MDRC|-3Mf~JkLA6PBkWVN1ss4ih$gmDJg zu@k&fd_ooeK2Pooy;SPs&q{=^Q{~_l=VHF!Ezk~pMu)&Y!Pg+$W?kmxo8_B7RTy1t*MPG za#W+f18!&MG6}h}J1$KdMOJQMG5Nh}fPM8#FD-6KX`P;p_ttJ<=d`v_hT%TGc*VvV ze}=bz?dAPnWpA5;<#h@`meRfEh+8Mn@Ap-wR;8)GTn5aFQRKdfqD;6rCV@J3aWPce zvon}2G)?-y_nMihwVkav_T#;8X5bfdAj)|Rosb9R3;KK(g`caNl-Al9agIJ{HoZ4U z5HNol$OUG|ukc?w(;50cD`M9sI}AyL_HM#6y-zPlny4uXV21k!jMvg^new*X0CTz} z56A!Uqs)VToWwa|^X!4+N4gUzPcX6WBwH^&u5EW*xV)`r0I9n#lGU)K?If0J@;hq;g;RkdE zXRYDMu_EK=a1~Cmr!Je-86?;RD6d(DQ|Y}l>m)&wo48}T#XR$8^4$iU2B{w~H!Zn(6PJ9QOA#LyKOP~(>eb>iPU?3* zj-30$Q;*f?7%X%QtTE72>66!5JG>w46DFmLUwq2Z+k*>LDm zO=rpU6E8k1{1W(5I4(_l!={Pr&Pq zrn|Y8>8EguvL-{qzCV-=fmt~ zPz}%SVmc9b2a$mZJe19-(<<)C`toygGjSSe*$VTo_37PjK?X^k>S@gCDTJ*<% zX$*U))O~7aWRaMqN^KR15(<6 z;b(GCh5A)gG=JDEHf2uBFD$*iIHj<<7V>a6+L~34VM2P=t*=pPi>cCwsl;^C90f`l zsc$n1(9DSTyjVZKRz06A2tm}ScYP+1bCsj;jpQP=1eSvl_thn1V|r@p-&q6Bzsr0p zjn&&_i}jcZroM)OMThmv+z4p<&2VNXQ<5POp7_RRyJnJv5LzGB6X8Wmu*Y$x%oHYqU#I*{XihZmdXI&pP3`7j2%Q(J&)JTng(8(> zi*v(foj%%EPKx>5HrFBE)qa*t4Rx6BP=o8v2PR#9rJL25dvXf%$|G=DLDVPWnv?{` z9!@RCmQxFIK`Y~#t#B;PLG*@?0@ttDPor1JX4SUuJmLs34sUq-_2dsvegJX126G?+ zG(4(8a0ZeLo&Zge4QWrL zzl4}`)sGC1^A8VSu_=8fZQJUPjBDr1>?inS;Mo}q)sjb7PtQipmzNEEQi11xsbV4J z2s*yl@{8UyYg)NN?=vhgXX=08WP`@?Lp+0*&-~FkRH7#%b*Ylg_TXaWuQ(1*@F{c( zfd_UAe1>1>MaC{FWIsbsr#+Kw zTzv9|I%@D3f0oqmDtG<=V(zS?qFlSbuZR*NjWkGyAR#3&ASs=a!q6eDG{YcBOGtN@ z2+}DfE!_fxGIZAv((vBnIi7Q#=bYd3xPI??*Lv6T59A2zK678!zV`m^eSJR*9dEJM z?RHT_r*JMEcNP+NR3)14HkDp}oN`fTal5IzHx3R1w2a za!2xshb^wBXapHdIe%+%67Fub^kv4>#*34CYSBiwCQf zMV7{Pf$JW;(;y_y&b3L;^Qv4)OTq9FEr5)E4Ht+yoRywxM!?QhYY2+Pu z%$l9I&yyBH&CHaOUzF!Nh`fl)r6Z3HFLZmLHRIq(_-G9MjSglM!EmzOSo6T>qEZrn zHhQqoi`yNt0`S96(JcB8oVUwqgs`NSvA8V>VaG=xtcMo;vP{uM6u(G08+%#u<>URPU1Jp>99*7_tImD*7LF-<(D2F^ zcM&FfB?95Jl3O0dZy|hacX4)OZfW8&x<&!M+nCiive?TOz))0^^jFIQL{Oz znnsstP@XotxP|HMm8~x6!x!bKw^|L0$|gJ|m=5F+7rW0Do(={Nogew6VNK;e2$T0* zqv(EowoRrDY6Y$%sd%9D6Djnk@Ct=+Ul9)SK2YdtK*trp?p*Kf)IF~A-I;MDbwxen z9;mulixaBQrr_}AFfW@kE$r(GqMa-MK=Ao?3}(F2#7m~pcTn}Hy5LQ_)5bvMxiS{p zFaRW>b{h2f%uHOWQ}}f3jStp5w;vWd*EXKA_Eo6bg zn7x00IiRR3{iMc)X0v+q%i2r6D^fY8E^Wxni?nd^5*x;QD2k5)8NofBsOray@p+5; zR-aqIADls9MYZP!sa!Alwli0r7q*j21mu$6p0ew9FUxhm;`x3S~=$vZg#5qlCZYKjs`UF58`&(sJX2iif z!R+Lu@u-W!w>wW%CZ~0!Gd`f_y)P`3Xog;h$3M_7?^8)(ihmNaARbO+B~bwwwq2~s zOfCy1!lYuk$e0k(;g5nlfX-S;zDpQQ@v^cn3!@>fboc9)%0gvvCf|E^RaMrH@!tww z9zSnLLoGuRr_#`E6P7cJ`MA$R$@w2(<^^zRL&z22k%MC?6CFojhbomX-@aOs9Z`+%BF_icnN2X`+Qxu}}9LFM_iY_6UuHHMus;Sn-hvJV2j>O$S7fDsqmqzX)s2J2E&TJG%+(>xdMxbrz1C)-4VWH@0j~WQqS928ZuHuTe93gO1G%(R6U~k$b6xlOdh`& zL&Ht#Hk1ZaVCX$8V-)NxVlul@MgMpk6W7C;cDL6k#9*_IZTcgwtkqhZ4P*iE9+)CKuD4MLKtc3M zlWTOqEs0nP*M$&SW|y@DUC3?88L%@mzHqkR#%wyk5!>tfu-Wx?#k*y1Z{ULr(n;v{ zyB(5jGbws$w~ZHJB5_PVlOep##L)m#k~Ej*&BXb@1i8Q4f2@uDJabCl1J4^TIuJyBAWOX_l>aQ zm{)5D@3iYB@%i>#4gSgl-1(O`p3Xf&J-6LT7E>S03|3P|Rd3LG(7gRc0juBQNlBGf zL`na6)NFJzL99+(tv~6i?h6AOs~OR-3(&~R2S+E@maR7T3Deck^MXc42F;Bp6|SMA zc+-y3@OK)gc#_}`KISn^>6&N6GLvEJn;rZ5vL_d^L-)Oj_JL1|=-v5q$c|eduf;%v z+rU#NS(Zu`Nvlpu#@1;ZW-mM&@v(L->Jt048*!!+d< zppCOM0axl$w;`U9z>NAM=Ehb=LFat&AXZ|7my&d?iA_%(EN67f0al*zq> zIbrXj6J!y`&@SdB84>TMBo~Yl9>AV*DU~p2wsK$P9!5%~V)_FGmU=>=7D*3Ue62Ov z*%CD9duwU{Sdz-EK*?>W@;#5%+_NGNGjEm_-e4G_;ce<6Mq0Q8iaW$oZ@7y~MDrl( zo5R8#qX-deFi&ntt}n|n+2I#Gqw`|~0&UlCcgF9iwJ70RC<9`K^1{yTqH3b*_FQQj z4i53ySiV_K_f8{J348BC|tp5cQ2m6wMh`t+41TuX&0m zt8*1Fsf?=>H*>UGQ3dtOn|*WjHY|vMnXNyNNXREz@Z2JiUhG!`C{RQ+8}j9laixOrPZo~v&X&#ooVe*&n-fism$;FB4J^U%>Zv^6r)m- zlh@;GdkinFsGbBd{I;kTu7)sC{LH9SEQDfRul)_%>*gk{VG~noy1OHLE_(Dsge_w+ zR;od`_Nz|=YQ(YcyYAd=;xfH*xY+eJZN5p4ukZmp&UC>@FE7WnaI_5a+*G-rTyVbE zEcyl`Z{vhoc>3r_jC!ZD?3NRcX9oQAC{}`k&Y!)9q`{kbgT96EE=bS z(PNatdS95Zix|i~o=?wppZPkb;WaJdGa+sAWyr$C#N->C4}<5BA}P%a*yqPlTmEJr z1-9P}YKBf2f4}U(MofBl_rE!=UTh#)NIt!^+C0K5D-A$ZKd3o?T;odGbJt~UA>6Mz zs7NH?BXFaont&6;e~EKUOCm=nuc+USDC818l3R`gzo=nYiIG2(<67^ZQ;y-cXtcyQ^L5XkY}ML0f;OO(O#D2-VtRN;8VR>qf_U#M z*~*yaa1Dh6`qU^tjZibJ6%qyy3URxg`j2yk$+{j0{NK`LyJhU+AA4uih z)Llm3^t`8m#WMJ6lc+;==RBWLpE}d~JeoR?KuNf4fDJrld&KG96NROoF6GQ#LJ3GM zdAOu^BCOzcr=yCpZuD0HJwOzsg3Pw;elQ8QvP`;lmInQvI8>-r(uekV0#EgGE}Mpq zOwleBX1&wc+Rcto?GphU8v8#PC3^1Z=4H6f#*E74^tI7 z)9baUyiPlqXDPJ~+VR)CTrWrBjFQ>;!_jgmd8AnPnY5o+HFPkN`+0vo)0VRsC}$yQ z#oHEqb`SgdvCDj3>e-}P*h%DadNrsLL8 z*UpcpH;0+PSjwHzQe#}<1l_kPO&Z>|bx>@tHm#P6cI?2(u8&`O?xbwlsVnE0-ngrU z%P`}9Mc_m5h~y=0!1)MYvj0}iOy!p-wz~@K0o5sl4S81-9FXoktMzeBaH4YX;0n9^ zVX5$QU_a+IVC(H&ymH$~OyIKan+&ch?_PC(+YzY{Vaitt3>L;jhyg0a=J-x=(Lj@H z?T|a5o8-b)~`*O)I8(XofCPnmYwvA=V;`-FGOPKNd)a*~SH2Yk}5>8(y?xOPm zJ+Xayy&=&ZPuh?L>$tc1VJ6?28Yi#=DM~%@#UiUnhOd8lYZ$`tl^vM<9pYrGM#D z2;swWMPbse6)EHUA1aNH*SCdo;GG?vi_^NN$&bqf;vSQ<;OBCOH}k{Y8aa7h#8fT1 z$#OBrFT1zhQbn6$Jea;m{RX~&o_=E6I+BkR3349=b|wIa*lw!e#lnHm$v8i};P7&( zfpBWR>Fyv0k$JJnGx>oxTvXOQXZdAt8Qw@TVudOo6zuaX?N`PChnmfr#X~Net>jN; z6Epar6dvBk??UC9(wt#j&I3=0>DnFpsO=l*HeinR>?7{$MKqd8o=SBwJ6;31qEu4w zulE46zD>GjAK(gH0pfH3On8a?JRF$uu*DJi{_JC2f|>X2uyK~A%0qLb{H+>=6$s{8 zW8(oT3~+l58v`oX10sgDnCEc_g*C^=iM))2hhG$!$hpNx!{zMd*gRH##_=?>g0JKX5y)l&tz``KD_|6Y2s)4Km;Cn9kx%n5c0?^~l zPY<{rNI^COJ=^M2CK?N{E(UtU6cYpVqhn~)kc{Fe(}eezFP#N8`W{v!$m_YECgw|& z%rsixIooZ+X^Zu)<;M8*IrOPzL(Sz;zUUpe;CDTL{TV(Vv#4umo+oBFa&^&5cNLt2 z;EoipI0nsI#`aF&3nU>L-_zTj+O%tG8;FTB9u1EsIL@DhClttiQQ>1f;iMMr6d>)z zq2I=zqi5>%8n-whU~_jw?Rp)Zh5P2lS6(um0ogLrHYpZKsvMc+aQHGAQ^zPbq+%t& z?wepf!Euo_JfX_Z-K6Xr{5$$voj?XA^UiYl_@3IBrJfI$UM<#Mx`Z5#GGBGA4~n#6 zw4a}{Id*rjD^2nokgBe`Q@iFKWY5w3 z=)t2iE7)*n9F)01As}Udp<|FQ#a*| z*aipe`Jw#fgkCInRB?#U&D$4Vg;Q!NG&^=TJ#(W|DSPzj((uF}Zf_G-r@o38pJO#p zCcy%I=wLD&^Eqf?`zhU#F~51`ftxH=(tg8~D70%Zx#ph34UClsx_h1mXY(VdN%F6j zJ_xwn8}*EMTA%+?Pce8rW#9Ouw%`3~v5Uj@VqcKDwDL@66&^LX+^P+{CN%=ffk#Vf z%|~?@3DzjW0-}TEZmXQSqXNqdWY@d6Vq@?7Kb^N{Zd$O-Wk9OqxTJu9HWUR}C3ai% zS3dE$tO}(LFbvr-oRN12A5c~30)Q7Ib!@+-8x)I^*92i? zF?*Ax;n0!WzL=eAOm3p*g)Z6|MoxSSi?*uyrn+MHLAwtnQy?cdD}`tKLc6=lWIPdXhSl>FFedap zZIAc+y|JmiH2C`wC&Ve#;ew~D(&i2|7?4ZU<&Nmlb8Ys(SUt{;;L7mclbgJN=#A*n zb1~V=UJu!@>))=CA(S(dBaV7|cD@YeKH6+NjviR=jRK5udQ{I#E#!81}UQ^4`1o!q!8S z#Zq0$V$anIC7t*>Xn*Cw`C`OO-DQWXp9c&w9pCN7q$TD`$2nL%7Ctia0M0gfw z8{6WNZEFvFk~mv^3mC=9-~7d6^phGv0{O$V%gYG5a)#vY=TE+93_Sc|aaUnnrgICp z^!;ytdhva#?+_ zw!!7}F+DZI`L#q`LW(_q*v%%qvJEvP5z0&*#-<51#`ja(i!N~q71*12X0vjJ=k)`u zOCikGKW=cvBU2kQ$oTYgm_~zWXzwAfd4FO}S%UoN;D*JH$Pp$mz|tMC1vJCw2HOhN zKUNi$WsCq#v_y+E3<>`i880v#^RP&J!|gB|Zc32YF(C-t7W_fnOX32S?CF8U4$ zqY57igt#x9siD^h8NkC?2HnBG1@LpYH3Y7M?}KHRv*xu1$fk#?*$W8$Fix+2Ud`M2 z6#O|hB}TXN$gZv?+y1h!GaOM&WmAtYy+_M+0BMoh0CMu77Ii#IVOj#`83fMC~i>j0Vi0$vG__^hx^2-%l`b{-wxGUUi?${)vkk|a^ zn=4NI)m+G{z0w3;)`XC$6u>?x>CV=d4|>NF`-9_nc#Wct#*_B&i`Fh`@063f1Pa4- z-O}V;RXP@C&-SLX(Wg_o>%B9o3;*^UQQDflPpl6PHz7niR zea~RpF4-38wxUkGQv&=XyHnWUlsQVTpikZYa^T>+t5m@UpsRw75Ye1+%vIZYQP>3x zvyMmBtot1aA8WYHPsMNa>5z6nyC~fqq9X{_Q7y$^10na7De<2+o18w<7=3S=i3iX6 zd8IC@VduAvh9-_!Ve$5rhOEkM&VTurzu8Fon8p5xQy4$u6uoQYEJpv^P=?bXJfj1X z#00CdU0Dx|LnJTlu;HGZZD^!e2(({O6k$fh)}4PX#)-Bz!?f#Qs2Z>o2EjgxDoF%j zW0DEceP!dnsK_jeaPhhr4rAE`+xN06!|m>Abz{QDq$X!Acn&*S_Fcoi>bg-wF1EB=fpbGr{p%cR368fHq%4|+Hn|cLGauA^BeVJ zno2DiU9p;2_m`U{iyx=g|wuZ>$YyiC9To#j=^hG%)(m&J`XVV$yylD_jXP7JZg zaD*oMmWok5WSFjd_wh?f>VU}*K`sp~im+&D7SV97zF;$7mRt8cM%qz3NPf62D`W*P z#dDBKu)%ies@L5`VZpNGT%->HO8M@L=Z^pN*KwvdeiY!w(G4i z^1?yutGl1uaI7s)9STC^&z!fvK2k{Fr17MBA#f4;uvL~RJx4K~v9yoCPzTf`BxkjR zuYma0@d9Go0@z&KzUnwlZ+qw3=^qdF6vDvQ$#YGu@(AGQtl!m>*mNCbcQu1sC)+ka zC+!Lq*Ws#1|H7#d6F~*KFau}l=;;FqM9O}}B${B`*wQuW4gac%A}=}}kv8>x?|cOu zSJ7S54n@t#u1rH@DUV3ZLNRXZBz z{p1H;j|5a%kS<_jG6wMVL@#?RbIX94Nlrm3OSkc-RDHH&+ z>JjNwsGll{bEjp>`oWwY7vP6Uc*hYl;5WkGDM0x9n12+OTZ93O_rwE(zQyuIFnIS>M_n5Zdtr zVCF>5JEJwqla5`KZQ(*&giQ_m16ET_;$8d(-XbYS75nRKM>3l4S|kGeUS1xh9CQM$ zo8(sIflEg+gLK0XB~)mB3PjHBysWEyqICJI@f-Hm-AFpMTg+7jrlNMWbDa*rki5S# z=tQz#r`ywf;+xBDG%7bkf!&N75@u#*Uyj-rl>PLK*FU0BdvNw0J4t^@D=D>^LolV` zeur6?Y_`$EcRpgUZJ_oT8b$h zQUGA>M{;BD0+x3NT+MZ&vX_y12@yV#V~&M0-ZCbMTNFATdTd2uyEP2rm>XH)wO7CD zYAAN|3JsTEb`G`Adg^(AUReC``6{0LjHzN3Gob>Pxpa&A;J6kJxm~RhyQ-S{!e^Wo zYU5&@g>tBfrXD+Rv@#V@E%2E)47!1$85J=r=DDGThnu9DJ9Qq~CjGo4gO~A54ItIi5Rr|TowlU4tN)=96zaFXRYe6UNayvVd z%U%zl!0A2p{(NTf5BvGwKg%I1^hyB3a>c~0@bu|Z2KHON3{;k&A>2%vtQgh&W))Qb z=61E9oIU3g);vgXE*jS`gX(iOFRRM}^?b%$!aD+ZV$!L6ccSFp@SPNzhBD@ZL6wNN zVj*gIWd|mqiKJ3=1dIy1QIO_i3F8+nQ*c=`>kFMPzz*wZ*$4I(vf$|l)8StQ|8h4ulO&{kD(mODB6 zP0xGZq@gGHc6MVi{cSq4WKv70?)I++%xE+il59g!4SPQNIUF{Ju|jT z^kU{E`GPu2W#57^@+(VmKY4+I97=VS*ki*zb$te*z-u9?qa<=vp)HdbRjLC>J^`f= z9~RXMZS7jOnZ?P0ONAt1_VbIhE?s>df9>^+v#q;dbWN&Uq`xWyAQeL$`cFqFSu8zf zEyptwY`HtlW=839RXD)*4ar&fFY)rX2r9OZfn0Qh(Dop_OyzV?re2MmEV-Xc&_)ry zqT`(eL55S>b<3c|c%~=hNJr=s>nbvdU>1;bM_h!Trp*yvfp%kFCmJ9Yu7|?!O|pDLm$WrWJ&V^u!Mw9*>sw4M1P|&h@H{Ba&y_{ zzLzwAR>B>Us~Kdb$8$RmHt#(?*!`DU;&0XR@9)Uaoo+}IRh>>IT!AzXnE)uD`}3jq z<4zc`FvQJ!OQ!NE1Sh^54WI&?{;Tlhb#nH6?;Gy}SPV9~j-hiRAk)@wzvc5LIB}Au ziq2+a0524+Q}RG{z9g`7j*f=Nga8q0!tgA2W@fPi*LkSgckq= zawuS!BfVAdvgd)6J``WUs$rf5RE98vQdL@ChIB_Wag2lmIOOhoisCHU#n786qTbLX zu`R&VSJXD9eKa~|SFUU~z64eM2HKrFy`3luo2mUjK1)NLdz>60dB7%*{ZdJ^5bxB* z9QS;~9Jp0-g>!cDE9Wd5&X0XCfUn@ZHo~yxkIQf5&ZY4@$eTV*T$vt^5K7`fJH9{9 zWEDyBMwWu%aZJ1Vy80K^{&cehW3}L<)xO(llX+lU1vyIZs^N&?E(viKxzmJ%kDXT7 zVKPoq4T%pe0)h#c0JlXXbZ`Af5#qka*`%xIU%e7z8g~@Ur|a zkRqFHiOygA3Pr&(;>XiBDg!wbFk?BDg6P>LdfC zS4Fw@QHCMV_0_kgA%oA_`;UG^DZD#DNeMwR2IuY9s`o*guTYi8#`F2kNxS$iNF1$3 zwIP+!$21A87T-6ge!!52-Wm;qm0NOu*C@sqIlUhfE_UvaH0jA%L5L%tKF=kxj`^G$ z+Q`;bZung1a>ot+4-x2ZO9^)SM?&Z=6;LqK=m`ut)iWX)lKwv!lFyD}KLzux#gi~m z!^Q%agS1B&=DOTq1=gTWmHc+CeJy~FYKwQri8JUEzHmWUYF4=HVhpuJI;!&V`aEy0 z3q8kMTBVsl5Ei`dg3+H0$qe-ClIo_Zr)T9 zilUw#bAK1%s1v|K2Kb&3&^j5vDwiz45j`i0aXDx3$Vx5SLgXg18~l)4-EtPf8r_r1O9~5hY{EEzAp>60!_j?AhnDT(}V(y`#AJF zc+!;pcmYAOz(Ez9K9;uyk)`O&mdYxwJy8>62reW^hvX|HMioR^zI6!3s8SzeaOioH zIr$iJz|1GzdxA$U+L1q?G+cr>hMcbD8${u}{mILx zP^wG4^HW04mb~vrV=Df}&m28F;vOYGcF z)#9zBLZzzAs^q<@1v+qSWdWr(tgPWl2wyc3)1!9L9wp#j+d^m9?Hgz~VW4$qtDjG# zq69o+>@OqaN0FKu0Czmxn&t;M%M2op7^y?IS(0O%o*WqA3(UQ4dh(GDhIkxJPc26Z zwb_4b#{w^zj7e%X-dpT`!y`tC8kG?&_TDOv3>xp7>loW!Bhh zlIQX7LKsef;=hs85Z9OGex9M}?|?_27X+5pz6Hc^55V{6eU>h)XD_SvW+BPAm({~#3_~hhq6Tl1`$;pi%s2`&%^h2?}$i_y~(?&%11qR-B8s zaZ}kbU!FK)8)5_4=>fhyRcP^2l97 z0x5w)!yiD_nTazxNm=^28L|$u%LeAm9>})kMDbx{T1udHJabniMBaG_U3i?nj?9<( zM+Am_@M1nvVbZG-UR18ph;9*b(fg^Ts!3Cuyy-~fwfco9n?Jl$stS$9L~n zso0kGs7T<<`z*uvFINToH+~JCSx={;uTOb;xIv7p2+9Rz(kqppPms(%zobuyT9ti`ajzxjl-`LJy?2F$*%^ZIgwh+rYoP2q2`CWq%6@$P zxv3h{fNex;t>Z$L;d9H-r~7_U6@Pj4VF0JlOk(5HubfScL)+;064s|{>>2;$P`*QQ zDBqQrb2AvUrt<}-UVB15O>eFy>?B8$3s@%R%49|S+Ynkt!&^D8N+TdUO$|Pfq%R(c z{shK3*O&ky5o=}%f~KD`1pdmQTtadv>wc9(SxJrZTRM*`W`xf!8!xHHH5~0Ehp#r* zMRFj8FT$k+jR|?pu|KQaEpf_FWd(eYt&bD4#xgPR#E0{)RjONvD=Lu({M(34x$+!S zOHBM?q0xHt?;q6=8E^tUztfZU*QUka(yTvHF&OANk2sxl=o8-pWUj@Imvj#!Z3v5K zJ$f}e3||CKegoJ$pvY)2C=ZrnZ;ah9(G61NW~@>Mn2=wr%b(zppamyaDyl$uYD>Xh zF-ej_>|mHx+oCdc8H?Fe6y$XPEuMOX{7+5ShZ~6<33Z@^{X!Y^2^B`_1CYcmG=$7ocUv*HRliV1C2R>s}x7OtdrR=qi>UFY0?R5!D{{fcd zbS!l&al+hGLr!Ok#85Racdl4Jb<`DED>TxQvi6SEHc@+g+2O7zNZ;dt0t^C1zZMCc zH(b_dD_tM|ki1m{k-IrOm+n`Jn*=dWCSW(G#w~6D8TAMu%R@qjfG_BcxVkh7C`{{> zOBXphtzhVTb=JFH_-3-qvG&=@j`#C`{NjZ=-m@$wjKoO{l!`DsEQ#Zs)JRKABf{u= zF;VG|DwFoe=4E3cxG10=a=L6zaysmm^2GmT6Q={8=aR)H=^u;jKYfwWh)cp{EQxH4 ztpa?|5h@xDacaLAboMAJe6bcO024m1+zde&CA&}^X9}rdosUVg0l6ch<;Ou2)`Kb) zh^mGa^(ineSo{Q#@S&t{d1h2b4j)9TT`4C==@unS@W5zA2 zUy~Dj!`>nzB=r6hs$sHAC)X`?wsX^C#B8uSZLM(^q9vVAjtV`mGnAA7sU&>=L7e=V z4lN;xlaGFtI9bVo0$iyEl$^i9CdY11FX_pDtrU+LG~jyy_a402)FW9Ny6 zA=iI{P5##YIIuQ8S(5K${sEf=n*gxMt@a!xh0Z>}O{n2$#?$CiMrQ5rI62^b>iPgL z`NOp-_5W}#|M{Q9gzmipz5Do4Py;xlfnCF-sL~Zq8Ey9@iB2v!-p{Z4T*8>iDgud* zyl8Jh%YNV$eTvYMz8|It+*6f*5mg#|&)*rAAco^>iC<-fM(>+7_OFURC-nRnxehnG z>6v~)Wv>%3lOxNAfG<9OoZbI%C4R#r0mehL0lghSwXXUM-9&uCl(&i-q9OWTpeWAN zDSwXv++j-fQ*YnMX}D?-5;oPf(a+%;e{b||@<%5QG~(}C@pJ%e(`!A&d{ zk$FipA_aL24Gpbp9p^Zg>o1`hcTf516UzIZl2g$mk|(Z}Ak-P7tOQB-P% zST4}`5aueFtaXtf`*JZxJ@R|OQ9lnEW>MtZ9-Msm=eql!3U%Q7VxBa}=*X?$yanU+ z>uc(EG9332;8L~ez3*gzuh$P*4#xExDtHtvaGdE*fGIXG2< z#6R0ljqFK1WIT>o1dsD(STs>}g(CG27UPNgy9yk(Z~W$c3Balx66nC^CEfpX^Ylm{ zGe`$#jbDpE_NYT>-#j)xWV-ImWCEZdSvo&E^!~R1B3`+yUqYM-GQ?IuDY_Q6m&J5a zNbS9TJR30^g5O50t^kWRWUcBHO~ReSS7Np5BGh02C7f$$b^D=b>WHD_=tc504%BEB6;I~r@bOysXMwh=ToZU@SoJ)KmITN@r$j&_LAP0!VRB6GrB=)~ojzCbN zMlRE?FOk0%ltl2vaQqB`-?N9p(ynp_13>is!hhSl2Y}{B?-drd$d~# zs7f(dBlI!c>+4#dPWD&wQ&okUj)#@W84zxU_y#P%o{BYmKAVx5*_mwc6Cs=+_6P&` z0F^$5+y1N{{;@Ce^P5|5UZJW3qw=yIH0_Go23QQV_{y0~QRtYWSR#?@F*X}M*uiBa z&Zi7PQEqZxJ-YtNA=y~!3aqLGl2V7jvVWSje5vw6? z4=o0;2$+M|2qd(FxkGm>PGM+ISg zh=h^!@_C)OoDNeuZ%&rQHOT_~oPunLC>GF5JbpNs%d96xis#<*s7V$MsPVOFcWM_g zU#9hSb@IzllVoVilu8Hv0 z7%#QSJN5a(llys!$<;x(1W6XW0ks_Bc1Wi=&7HNFaO78M46BisMVDS_BKP1%HyzYXauQ z$>{J1n?@d}GJ$ZcA{V>(oT=7Lp2Zo3NGk}n_@SqgWU#5Ox8Zo-1jwDiX_gjjLcXf` z=>jmH))V^ov~7gG1;|nYk!r+x{osEotWx6LL;fD%swIOLUMnC2Sq2Z`8jTH87zHJ0 zWN}0t%i6*Q;@gdcb?Mhbk~wnKqiRDC-LAl4naCP^3nM;3MMz2?B_FV#plp|kFgB@7 zp)NzHL)JG5FUTSW^V6a03@6vDeu`_F$kg|K>vxSmUjBdjVyF{iF@ABOfL24C$xk(l zs1=txQ%d}y->{5+Q)ru(@qLW6%6^jIOrG$vgZr8wJI!=HTNv%Fd(hT*51-I7!rsw2 z(Y}QtB1`08W8tD(+6MGeXaqf&RxFrU#h>9yDgrQP{yCpbmo!5zD$t3V|%67A08PB5bKf*q6?TlGT8o zMw+mD~RP2!TVsh!ie^q~CqQ&&ai8E?S6F==e0pbv#r2z%P#EVOx>L=5H%1h3U zCx1NmI_*jCNm((txB$3^B9hTojmgd)hK$S3)$$>^n1Qo5T;DG7$QIqf=JGS241F z*12Md$iv9|6ZU^qe}ORqOM=pg8A!erO28|r#Ae7(oKJl!?3HIRG3rtA-8If6KU_vj7Nk*Mt~Tyi3%JTNDZQAonAjm zQmr8(_AnR}oV*$z9z0P8>v-zRav+T_IvgTj3gt4SZ4`vKuZs%315q;MHy_n1rP<-En}VJnr8EORzh+uV_XUu6v&;N2z13>wbJYMG`qYBPRmh`dK*#}Iw!(0Ot7#h zQy`Fp=Dpmz5kHoPTuEqVA!>n)lIT*&s4D+2l+p|a)FDE{RUEfUixxtPy;JOJTgK8N z+}Vpq#_d7$3G1*b>k)j!Wh^i>ta5oMp9+dy4c69G7NkF1JL%@2R<|AD=L%fTG)-qF zjfMfoJJ|-WP7Znz&RrOwoL2KDaKlSLa*A20aU5HfMtk`YlQHEsvQ3XA++7Q&es_$cnFD1tX`=M@z&ci--P+#`P>4xuzVET=Q_{$kW$2{{DZ9b zjqLF+SNwN--VKI;I=1+j&ZLKnixB;;cLPW(i2cVki_tfZtihYy=*5*fC?jM~Mu8wk zM~!a#J$9CT!&!@YCx4K$lFxV215Uq*FIM*9 zV<&6eDXwnj%bsPXHp17qQdUeP3Y0R8*&68}H_Ld3kXd1tt$Pc+akUBOqd@2FA0*ig zD#E3%`ad;UGUOQ>ke!WG9X{=e89o+Ra5sR- z;9cFjvT?@yejIjcFSYcnMQ?of@oM@0&AFrWJDH+q$zVbibHn+U)&o++$UA?dHs|{z zFSVO@FcrfQbBj`Qu{EIEJE35b%ZE_a$>-TbtzVK|&^J1?A={IHv_;0ai|C@xPu6@C zJpDnhCLr~jHOf}#wFv^y`EDC9#Y}*lqXZ_6$J^EmOVZZ2usXPpoa&1AzvyM7$bUH4 z{w7q^@Z!kKj=E8z7tN=hN+0*Z#|Nzbm^Ky6aUVCmg@`JvxB8Em*fC{NK=rH94Og%S zG*qlSmR(n-N^Tadt)*wxl&y97ntZDpN(9<7=uhZrzWLr%zx>eH&=@d1da0?UmCta3 zJf?Z1da$H|5m0FkKTY)LPr-t=?xI$4yYcDkF(Fdvk~)=K58%@2^P0dQ9m9vlKmtnC ztTD8(>M5Ek#9a2DYBaUUD&Tv*SW<_1W-*vX*%?krehZtb)8Wsw;yx}Q_7dIm#02iX zxya5Y1`qmAT%Jjj93lL65nm$+UO#2k!nn{}Bj*FZ94$53+0qN^ojkf5@aBq#qv4T< zQG(t}u>9(9BQ3=04fb56y$e<<&+c4>3`I0h^fB8It| z-sSOdVUDjZSH3ng@N}Ii`nkI(g`?0%{L@!#Vnt3H&+wq$nr7Lqd2O?;)*A-1v|nzi zIvv(m+-Fbfd2O42_|0YdAuw7iRFx*OLW&3aG1pmd2X|PEl<`Y-ftAH6Lrq@a;lr*l z@9#+x*s0y?x!?8XpmD_iROI`yoWS|6QKm^(c%rh=((ytw<#xkE87ubEU0G#GWn-_d7y+6GGn$GM1BS2*J4S24(3r@&QA2oaH9?#)4muw3z zO_nXRh6_O-Rh3kINt%OSK|w-R&$`?l+f-#J38>s=TXesDt(z_+X7lj>P^A4xYiq21Tx(*1$@ybU_|#db}bGW3PZhuRK4z&>*L_~dCt^Gd3#oyS#={eFK9 zCg4LeYTmeXdA37d-1vQ6_hJY504AL$MAXRB;|E2KoMyA0a-A(umtc#YO`RAa{VV}X zIXSNQvCgm^VuRxi0L#e{IGo)z_VGbw%Pn%r?ZDhY!2H;jaYzG&UKpB0_ON zCr+wv%dvy4l>o2cJ99!3QH8{}!zZSAk08P(s%|3Yp=6B$XPTbG3LU+Z2$En^N<}ZT zsge(PZ|`1Dy^eD`@7&zdx&%>u0Fe$QiG*&r0`m@50l2IPs%7D8U3(r+u64YOzbo5x zJjwxvOy;GcK_PdUZ$Y2a-35_s9nU8BM;L}koB3wl;EKkwxTUstkFzOB7+xZ~w@^Sp zO+(c5ex>Un6KNi2++u|xYv%6HD$$Y`h;3D5&y`I98(AfE2cNZptFHukgD3A=EWT!| zN9m;gZ=Pvl1HayM_)2jGez+7ZrXFFU^`@%~t+Lf|6Sy8i zI3Tc4q{~^C_NgjB+;cG!E&GXMwr)Q#a`Z%Cvy{%dinkIG;eF0)(|qAl^-Om!@%86j zK%=~~@nJ#~@K#@_n!h_eTep`|$GAWL<_dG8s6uHOa8YCG+|=F49W06foeDq>hGo_S z?@T+^7aXVSazQm39!fvENU z<=MHz;TEsx{B(uk`V@1P(0*uynl<7J$Zb*~UFIS#D)5?(qTVv)K zK=&(lqu;C$^<$3%#w5ThXDUTaw`t}mA^8G!_2;zeX>~XvNcT@fY`b6$kBJspYI2QmTPM1 zlBv0HB}<>K7x|X#I%{gY=IS@X#R4xz9^7%rDtrO+?DgV_C6mVMl*;;s%Q@pVeBumk z2Aft1f2NP(t8Sal#SufF07F9f=iFy}Knp`W*Yg#1ve{ht_w!Y`*}ndV2z1UviVunD zaVpO?qCXF;1KX=yNFRWsje$ZTOsTIj=QOEo6kJOojlF&?PkOmm$OQ$y9mOgaTTs(+ zBSQu45}E7L7noQKp;CtDF+3Q+CUYWHS`8yudCTM6i|H~2k_l8a(X@AnIZTONCI{rEqxK; zXSNZ!%)chpG>+udv%`F=EI@O@(|o^Qdd79uBM#19tG0V@n?3`}~XF68MIG z_O@+sZAI2lGcFNzbg8~+Wzxhi@JAIPL z3P`1iQrdZb2zU)W*--ap?s8d}D=oBndHg3C>tESY?r&vula_)41F<6@W(u!t^ykg`nBI~flu`a-tC?w3#bwPOlL z2XKs6@LwMan43$QC4V_z_#VY`i9+-ik(@y3?#9{Ei-HAnH08zuKtYO1N)(JdxFwb- zrJJ~Ati$>LItzBcs(&gBtM3PIl<0#|Ph=%L zgh{{Dc*^L|py8!@4EsqH-H7TC{T1noknz_3?nL^0R>2}NmtBcV5X|H8DX>i60v`RA zj7!`pjF>81znw+qrxE*3&q0&%sxHwxZM1Baa{Sn=++=VoD>-M+X4k@~{1ZH*ic#t5 zyIRryU#L18E3fl?4*OYKgk-PV8@K5MW@u`Rny|EWY=@cTW9CpeJZ@)bIZytu8t_uy z#ioJD#&e#89U=_rz>t$m@bH__mb1_QO<*S@Wu7Pk^Z6LhBZusk$2oS;tOTebN;hBL zFw#ENkJE4Fhr2JY+90>@0mpdIdPe1I4Fc+o*y-;F%0hvxd}VM%orf{j_pAbTtN0p; zg|3^fBv1(aCm3($a|`uve6h|OU^vWKH4l1-`nvny{MU6N@ykrCHvFN&r|teGSGCA# z!jP;pj_rLPCl5Ya6dH_m`dXkZjRfMx)Ebi;GrtFePgW+j7ppdF^4n%7@2!(G;WY+6 zl6G@SZ*yr*-+Xplt1~l8Df!Cty=@_RLPeJBnTi z@o-=z{}o1P_dK9|jb_`z^UkWOzh`|tgrbP2b?yUjMw?Drb(8teo~pan+Tc%KIQ-kj zwsp&qmA*!LwfkMP_um;irzoCJdr$vnW>C!NIsRg-y4S^_#fm`ZGD$5SeT%EaaSZ$_ z`IM%jzs&@S7&}K(8f}Dto_;1?e;;U3+kwqn^s^?R+m^N{!k?w^}f9y8n5y)`RcLe=Xu~wZjwjCMK-I2rAVD> z)t5?>OueGw>+$iv*|4F__vxV6X`E3^MGCkgxLQu3V1^sO21!q9Cw}zX`HsIVO`Hi- zt;t?f4IA5EG~4jP^5s*4)UtomKdMxa*(K)U=j-0-^28KPZ)W$p+{>x>BD`Ad@%U#V zUt_XoXERBGy}RMByvF89fg2*?sGno7a!um-me-1GrgWtJ^ZXg9bX1>lO+Dr^+KAdr zo!C#3^QY7_5g+WoGshL*hLJCteKkh6w|nbbAF=xmu*XPr*lX}?x3*7Kk3-(7PZrRj(p&hVqbO0+ zi<;~j!`SydsBdG*Qvtvp+_TMKd?(`a!N=VX-{+?xi_hHQ{9i;@O(2ucu9mI1^Zy5a zULx?UN~w8OG5VCV{9KhkYohb%2)v}zW{*6{#NWuJE|}O=?I3g( znW7gLK|3;;0^)h}m;DNG5q#uqvuf=?Td(gR>og@HXybo4t`AzDNP`8{^{}8j5`xQj z>Z>d=_}_<Y82+Dj(1;m<(*y0_bC=s@2W1he8p~bR)@M;0tN;F^(|IGJ%W|z?= zRpY@IDg(3L=srL3Ej7kb#g71zmNt@8V8cuBz=nt44U)Gb6&vt4Bm1QpUQqf)-<{!o zdeoOo6Az~^Jn8TR$1iv^Vz-mT5l||I(a6;ZDpEo*#K>C@`?K&atb^{Gm72C9=8}P4 zrxtJAxy{|ripW{Xx4|#Go*|C?OQ#aTpTR>e%Z*a}Pl1s#D(SGB_0$W&pvetaK#{H3 zgWqGJR4r|qH@FdtF-$h<30pmDx*pmT3f8YZ!a9d$_w2l1n%%LX5f*x8aKvH0MvT#h zr~#q+kD>=nHFjXMZo?q>?4#FJSoWoW)Zx9fR?vko_1TK#pNv+I1**%wnc_4(KaAP4Q;Oa7>f z`TGOgU#mL+V?`HM_#1Lzc0G^1ZhQAq{m$KSV}$tvVC-A^GAhwL?=XQ{e8~9TuZ~M^W-o_2hfN-&842J3r^(_0zWOE1Dle%JxQ0 z_UYoP0bV5kM#YyVjm)nWKnlM7$kD$vjMzj$@0}Ees)G+T2yUH73UXNu{>3}#Qp~lB zQ6e{=>zPaywjZZA29r}3Q_psK^*0*oHCo3xEHwZi{?Y>;_Zr%w;**$Rt3k1CdiFRw z9@6FbNd`&Gz0Ioy_@EZoU91uQN=`kO$>!7B*O@`)XTqsg32wLp_5s>x;0H8Cs^S`( zd3DHH^!vvvKjihu2Uy5W?&e9m!F5jD(rDT}o&Q-V!EHX~Oy9X>CqUU$ z8+G|k@|S1Pyz*~pv+@oa$CG$hE=-D{m>qbF6P(3Uq(Pfgqv`+GTwynb5xWBpNULy)ZLmqd$o(3DbDKhkqB?H5RamY2Wid9wCbg;q`{=uo;KUs98jt z?AvqeqH?Ln*rPGOL*A>`%x~YeHQxX!eb4YUsZlQiABrHJ%n`lwQu1;2saxc#rmv*; znqW<@u(uyE9@i7y=lfHpwf}%J1V06aok>dwA1d&EJ;CpE#XKPb5ArNNCd{F75HL7E zJXuX0!(sLXT`Wp-wjayU`MRvA;9-Pi4NcY_&5Lh@I3O&o-{q&i128M+L!UUc?(!g@!s+(X71s;GxjdMmAzb<5rAmWMe$RCZ1XQGAX@vI?Em z8L;}3JZ{ph*|xVgbm4O!%uz= z#5c%ZYz?l%(<#atoqg`T>S6nh^WV-}%j#?q+zpj9yH}DammGY5U@TE+Y&CD5x1$X^%B+N@$U^q6(CCvPvw>wSIfX_>We?qb>?d# z%kC4F<&+FFU?ax66Wvu&!uNwoQS+)`h_wdi=j|tb+ou24b@U9Bl)RZ}=+2E4CfEjEWN@6?3a-z*F*YU4;0EGe&N|9X;u~`uOE>i;v1YyO-)q3X3{CW4!lgJx@8yH+if;q{QH}7g+a3Y4Q$6LhGe7SDer567fHzt zWj5DsQ|n^%szwOI*h)M%q+fhy#lrX~o&=u_+|IX`rFs&3l~3nrDFwYu3BmFd$T>kDV3Z;zI486nHYiN(5X$LS-A zTkg+{ro+#a5O~*4FP5P19GB_cz9ykJ|K{yLh0IWewdEpGp1e4?J(mYb<0LYJ=-BtN z0i9)W?p~`!qrsrfpt$U4N@qi?y!9*-&mPFekByZ25_#{#9Pj24!sTZQs7U}JuvW7~ z8z*WS|M8Z{(7`o)9*7}k3a9@f+ql_BEKQ5*kCqdgK%2E&9-E7Rqx9n?Dq1)-0uG+E zgp8`cG{@^$HGd=t8SEhwXjmK{d&JlEepo)yTzVo$xb)8~=k@9P-GNMj3^>?TxC3tM zLaC_gZv5x8o*4^J7YWF_R59FNzEtTqPwa2cT)6){J`4N(yyW#f`Vj~X=I9cmcrPrA zyVFIauIbv7y-oJ{j(&PFJX(%sHLPH`&2xw6X!|fYkk*?HAF65ayzzSr->~{ui;%O4 zgSPec2M0ROML{TLrq5>M6WrjGq&&Q55XuZp>bC^UMSX{d)wAMHA}sO*61NIa13QSNgv8s16K| z&ww~v_%6h}`cC|j%^0yGMZxbMuc)W=Z4 zPQ&YYd5G%X3MY=ODpvV4rh&VGE&??>DWEO-Ik+vg)|yg!^|$ulh!Xi_+RPkMg52$+ z&&7KE?DW{+yzWPbO_ghE#&ab;xU|8zM5=lqlP5;sBGLR7eH}!1mckHicK6y_B%5ul zw|1{*!sc(UBks0W%$}9^a3L58flA35*!PC(_?83<0P#Oy3a@$V|BPbC$H$kME}5o& zR*ko5xgwx{HS~*cED)=pthJE^_w`ENhhN8(fv_|o*F>(7BDM0dWRCK2=JKCL&>1#* zT8J2QDo_4oB1?iTx!lC}?pp*EtM%L|Ye`-g;PLP3e0$$8l|;5dqL2NLPpR0kF+8IpE`k;xu;mbt{OOeFc8F6&p0IJ*aJ}ADGTfrf(|D!e7{&+4i-2B- zz}(zioJc%v-)Re8!w>Zz-k+ibm=&uX4QZx{j1PpoAu<+;t1$53>hTf|HB)!&^?++v z!VF=!3duMmM<)Xc8FQstUHP^WE*GR=H=1CVs$O@mX8w%KPW*mit;3=U93GeKCqY$ zP|(Q4qah9VT$PL;U6rEbyp4~#L#i@6$K#YA(UWmu0-!q=XHYGK;<`k2p$NUbdoQ$0|U+*$s8E|kVa8& z%b9Kfb&*#}dz98t?!~0qPK0RvBRSlQU*`P&6-|r4ucPsP6Jl{h8>TY7TvHDkgR(Xg6e`_w)=P)nq?AK;hKU-kvn`{D9f8E8L#2({O z%O9_W-$2%=J`EEkWP}r<9w%c7rJCv?i3jeB2rp0(`~BcH{~kCS@iJ@kdOtAQV>aZ zhmgn~yFmQ+?yBz()VPq3e@&5h@R_IrivgX|`2IB5ajqr&vBrw`emg01m`m*^^NMNf zvxk6k8gGWwwerP*AzBwBR^D6Q=3k~G>5<1f0v6i?eAto?9VBm>CvIcwK^krbLdHET z`?I5)cLVg2cU5$TozyfmsD_a)rNtz2-S#vkKBXFP1{AmK= zN%agL!d<9TvVS5ALYbkJ@2|%G9%Q3ndz*)dou68XgvE2xEmTS=pPpl0O6d8= z<^iihb7Lh@s6Aqn@Zu0(4nVN(jU*^Q^idbWC5EYg;qN#hND7yDb6-y7_HkGX}y z4eT(FVe6Q+K6=Pl_hiYjQTosb$06?bIps)dvBWcFBZ4s$C?s1o8Q(M_2+Gm?tUK4TOBq|ZFVIdEho>f=Q^jDHAJKnTm|wp zQ%VsSoV$5iYx6%Mk%O0_;B9)>AL5cfo1zU$m#=aNa?q!@Ud)v)rX8N4pWmg;GZA{O zp3$vZi>P?Zx&wzom_%asZ!ZtN3?&iLt6#qgc+x~}%qf>6H?dr7sPPWx^GKS#+)`WU z?_;l3GVGy$8b!3`dBulPMd+_0jVzO+6{9sbaVwjF@@5`%NOpKETeDYM9#Z@8)HAuvK4Q4f2aAw9 z=c?x`C^-L~qF3s+aMA)+bsZ_$d5vm$rm!a@J4TWvj(Y#@jQe!8Uo%|a8QdZbxPHQT zP{8=8bV{uHjnVxd6GC&NDw2v*cQS^iici$z=v|WyAF&G{?xvK=8T(YuP+fgL1mtvc zzu$sh^{%&?+=*=96$aGdy&_^6N^&HBDkZvW;#4J>=S9k;#i8-}UwjVcueB^Z_0cZH z+$2#o+%WjkW^=LNt`4saI#*VnxL5y1pRKIaTx~~@NCm-Sr(wI>{SX)qoA7|aoaMbw zgbje|~_lGcFN%>TDXna85 z11lyfRW#wB z@~U5IdKVbMT_%f~(0I0~n)j+mf$Tvj88I>BP#Tcvxsux9k9uIilyt91+Y}8xG+y5f zw$7UG3-@uF)mJ{;=f4P}QhGzoIfT_h`#S-P21sU+qVQr*dxh>c!)CbOa#K)olP<9X z-`N>nO{p;E90yit6Jx3{vgz?>hG}W#^~(pbZ)?_bQgUA&-Z6^Ye&x&5X`GtxoVKDj zxZ=9#@IAAdubKc{m3t+nWe%kl0vVLiUrvmdPdB`wN#OT+Ku{Ei->Fa`@u-#fsps{) zUvpINb9*1X5|y;sI&=k+K`NF0G7KcGTo<^XK3Q*%yHK@lh9U4Jvp#Tk~m- zyY2bY4GAJzZ^%d(ol-{+B?d}(MV3~{l6V9Gt2lnhTknupnB3Ph^nNMYksp@%)FPPbggX^KG&oPzUHLE zc_)0fdgyb_@0%{tdT~UtJiJNClIhjVw22)1&hQ;pJZEs^>D$v0kRl_{6IJ1bs!@ud zO1u*dTz<-?csCJ`Q?MZgUeusL0K8m0o0kA1 zQ_uJ^t!uVI+E z4aQGxTXr`Wb;mX$@z(mjE451=yi6l4`aHCmZ1FWCAAr%*C1VR{nmX5S%DA!*EN08- zrYqH{*zj1t1eUelTTJ?#Z^Nh&?-7Oqa;~_OaKZ4Q8+T+97!jy2zrkMknS> z76n9F7`d~PXLk66h9&M7pAJziM7BpWGs!)F7tZ3XSAOdXRVyfyjgsBHgJoV=$Vz}T zu(7cZnRZMkBhCJvx&@j2Arq`FEp$cy#C25oy=sRwRd z1PM2f4<~cP0Sl-sR~W<#KmADsv{V%QCv16{%E|YqoefA6niV)Dj*)@eh}dTUS)a4i zAVP)Qt*Aeo%5(d8rq(|B8rjeS{`^Gxs)E<|)+bRaWh4jir@TeL57p#nfZrc{G85(W z)udcv>?@`YC7sCaHC8vt+2(WF=t2b^9KhS)QS9d1qnyo=PKaBQq`@U{5o^h0%mqYlsYRVtW*PKg3b~!G$)qG> zrAHe{a)Q*cxAOJTA={-wucAG6B{7eRq|iL8VkMh#bjJwwsg!E0rV}^dJvbthg{1s$ zfui8*aF?U`%-_s9Rni=db@KY})ERxNB1;395W;^@uf2Y$$Cso2^0UHDu%#A~*py`I z%D>6BP6q7G7fkS5u=fGO7hkkLiaCcr*!S*;=u6cx>GrpB_Dps^ruW1n*@uY^jDR=; zy1RKsu1_Vj{`x&unY0yj>YORYiw$NT7QvoCL{hP`)6eB}%IHhh9->-sE0)fM>v5Da z2eGk&YI+&e30rPIdHRAe)ErK!r%TdPf^Sft6(u@|Kl#a1P9#Xt{=4z=Cdx*(C0 z=H1OPMh47)s?LldtqU)+>?nVn{GhZJUFhv3zFr$K><6 zNPBk_N8AFd-^he{$49ntYgQt|g}%U3sg?V|IphW2NM)*GJfj4Ve~bZoLB&StMJA~$ zaf*(!qFZbI(Crot+`|2OlT)|~H9CXq?ylIo zN5Aa_li2W%s%@sx2n%~Z94+Wr01c~dExPx`@Vi3q_8+jh(rL{LxbySl=GcN$F6QS=;0KsnQsneSNg(?)-+%@LeS= z9SAo}tw>7Fa?6v_X;w(E;f4X}G2k2^ufuIvtW1&-q*1Y2XX{I!HO!g!7swYL3tSH1 zW8yR12lxQPC}(nYyk=NO1VqeyEGq^TwIq@6ZHNHmZoneQjs_Ul|yY(u9+aFfp{e3nXHIl07D!}RTA zARP8@hRtrD{JoY>vEw&sbiMX4zTwytkW~FLsf_jSM8=`}J5e>@*nqyJyR4J`u>3)X z7g(G}$=_h@?}cAf_ztYAfvVA}I^H-H`2(u}7|-8;L0j~oTN#}#w-01}$~x@~I5>Dt zlx}>??s<%Z2qe2G668mcp*Ya^>TCn2pJZq3K@#JXzj)VC!@nm9qW=_j%EvguN{PqH zkIs36NW=E@71w9zjX%}0QHpx z3PgAroo|;Rr|f?~D5tTf49v$)x|c1OqZ1EcH&HU(+mEy|x4xq5jyM~`p{^oQZj$>d zTU6?Iu_@m-uxv3k>QRCim|_5w6UP{FQ&f;Y+-KR|uf!lN<%1X*Ef%N!M_k2Z53lcd z)_0o-T8tTCD{l|suZ1k-$`88)%#{1Y*D90c?Yu01=YYoUy-Cb_5(TIvHl7uZicHTe zs48n5PmuS|t>Pr8l}f zyjm`~@gauGX&+~Am;z#NE%X3E;GffZ{a$XlesOVXX430k7I^&XR#%b>R5D|;@ULZ( z{j+N$S1;|?fzY-~SY}(QfYnlcSU-ZUk{q)yc|n1) zXC}nQ<44No)hyTyQrgIXUe4%ucLLXekPkN=yFIj{o9?H>W}802d;%8 zIi)A@sai6RWi3^9micrEKB;MGGbZaF1vXINxo9oTYVQna+}kSa7TTou=ZiB4Njh-d z>!hXMKtC=VI4L;)LAk?ee7QhA@TfthFfFaH?frU)vVoyM%cm|`Douckz;4-2Y}|Po z23|l(AcL!rA@dM7g1yGD^OeOyb$$wJUkPRO9WI^Hoz#be02y(JGx7#dt)pY?e9imK zn;nynN~uN58K3voUHqQ3D`pRp#Ms8-XmUa+tTp7X!&mZUJ~al(D_+aGg8FBFiHZ8r z3K;I2(kqD^!v)gCpqh-Q)%G#M22VB%4iHhWPvp#V;7t!CvEWVBSRAI_wH@8P3sA`< zzkX&AV))s;k(5Z@zu7=SnYwM3c&c%vF!cNJ0-q3d|HwSkV~>8y7{5myil?e7uLxSx z$>6ahNO-TGT4gqRj0FiC3Uu!9u82-<=ZO`(lp(fu5n1RE8c1YKTgR2asfttfkwl5NCR2LR!wx#1pm!ci3d<%#SS*Tb9gC6Ap#W)& zbx8dHt}fM5-Xon=r{QR^(Ko(>zi-C;qUaCq3#aP)8)F5Nfnv);MKT(J7|-@XEafcH z>3E7IRSL}ynQ8nzdQ{D=9)6gFaR-qaZ@QCsqzkK3wA@505sKywDE4knnn_K4787F?H2 zoao=j?w1a?4fW8r`K`Cnm8QD0Z_+^9QELJ2a~`~5y+?bD@v!r+s2a(zml(s?nI@*+ zHycsxZf^c-IgbP$E^w~ba~!!1Yheo^qQ@1U*KW_XVd-XL@O_*V^bQR7gr6be>No{I zOaX3T^6~EV(1illPjP89X&lAmSo?){qbBv@5i%3r$y^GMb?Wmm#3W~MgS7r{#!l21T}zY)hmG= zSyM~W?|&28-AXT{A8u;fcvWgzKuCU}!j0qYDwvvy=+i%nxNhy!Q*@~LqeY=%JLJ#d z8;|&25+@5fr64qwo5scMmItmT?6Lzv14`Ppzkm>?OJd^@Ps!+oHKGMfI#jHiB| zKUGisHE#diJA`m?EKs`G=q#cu`witiLx=@G*o$j(SW6Happce>AFs+^U+!X!5*lY5 z_bcdsxua*kP3t&0jM+219zxoisc8o$LUs$O=8|X``15dnC)hELQt}7aH6a`TXz~}r)T~Gqq42M{k+}c z&vL7{C`og^R{Q0n=b7a{AyuB9_veo$aT!aCh`bw?As;Crzq1NspRwgEpi>YLPmu8% zvGH^XUmBMCxgOVhr+;rQ;EFQui_V_PA4Ci;nkrDX^mw|eG?fDb_x*Z_-W~nL&l+%B zVUbE^;p0aYIkkL+guJVRwzG-2+Ny6YQs)w=qqZcx%^5yVSA4h-EUE`I{C8W^tJ)I( zx)=FX=i)0-Ue&3S)+Q$Fg-bFXa|aaVjQcX}x;%O%WY3Yx&T{}X3_WgZ!zJTCWovn? zf<3PD+_|A;(<-eCzl_CQS-d=$4e88ieH+0ZwAXisem7m(mgBHJKt-Y$&yN2Z=Z_pE zLI==QJfJHV@UJC&|1wG*eQMZus7=kNJ+ii!2C|7X5$B> zH5MH>U9f=4z>6jlaNzz$ zCN%Pc({$+j{#dqm^9#Dfe~nGu;pYXF z#kw~05LYI*lyio^W~2Y%>84mLSVk(e@1b~3pUMrS{@e*L=V_G^aQi$S&{NDt{WoVn z)#lee=(wBxxIwe;-x(I0Xu07vX0tLY_Jy~Sems|Fy8X?CxWek&hAM*Rf&*QX z4sZHcIlIxs=FZxhbmj54RiQ^(oF8e8;Hx~k;X5jmg0GV2{RCAlN>nUhJ;TSmC?PFq zJP9^yAucN${+tCq>*U1nAivJbv(n2K>i?OeUOR^*?ktdw;hH!iPLiJ zmY$!-?f}smd;e`PJ2LXwITD>y7i~-kB^x4Tl!W06cXKH+q}r?qPJ+1~7)Vz-sv&22 zWZ$BzC_(*oo;NlYD^)y6IH#|Mb>tt!m}K-6itWEe7`A<1s))f;zQ229W7ICwGjMi! z`Max*zIjj6aMjBg>Q#x#2waaQa;R@5rw0Z*2C_1{}pNURpqj~ zwh`fCRQ2eGZ|>fm^PK|ZKS@Pg#-j&Y=ba)gmZDSMR^DLO(I&DZduFl-$d->@1`@ne zqs6_dXJgi4i3>YF?PO`y&);NtKase~HrA6lCnM;2?Jx*=A}k`Y#a)6D?68Nm91nir z)9jOOxGR;~YXkH$ov*i8QUHZ6Mp9kaVq)SX1p=!3e7vR!Q&xndY#~4^Ad8=qEHN+D z*TY;Dsy#LZ-u6?`XKOq)4slocp02-|SS6U^IS+Xe%5#(%o)hPF8M^odM#W2vibg zV~Vwt!A}?Nqz4C<yXl@D~SBe;A1zW(~dW2twDcr%UB$}<|; zYHyY?q?z}XzO^^ZHw{{=&?7-90MejjS$0qqS!nYW`-d+AB;7YCxI4(f2wgD0t0KHU-Z5$Ui2KqMxZo4(ENFT32 zCPtT|g^bomhnT&Keg+ElKVNtM`MH=HP%X2zS5bt=j=}O)@64Puo5mQ0r1#w`RTyK}M?$-2y`GbRI}lhe7p#Pp@k$F|Z6rV-Lk3l- zrV%829+y-&QiR8M)HnXKgz)C@S6{zOauH2;5 z?u{TRv_JMfk6}&{tc2t*ykICxzecX|=>>U#c(TQEt%%CyM8dF6zs~=zmjfe;#zv*j zOsSW>tYUZGMK!>`++wvhneK@n9s8JLKs)PeZTi(Ad^RP$Z$h&Ml$z}aXGumTzti)iN1k8yO8Fg< zezt^DVNHlE+}PENdR_J0xJ3r~AL5~rj0Ex{vf*;^vyg+-u|(sC6kVI6Z+}zR{Vxk3 z(OKdtj_j}60+%4EeFBs7h(Mdwm!vN*NcKjAtzT z)cpo?in|WPR1+ z`!}RAK~dXULz%5Jg(^s~0qn?IqR+P)z@(M*a-6XLWnd6Kb88NePBnhE*}HqXPP21| z^9=JdNnisT48$>D;&O+NZ}sE0@b*NBJ$E5RHlYiAU2f$0xOh~zDlhg_-R&jt@Nlx2 zZkB5U#S5jJ1%tbVnUAJRQ2^()cyDl<(#6i7@5_x>m7q_4SOsg?1s^l+5B(T=qCY0G z>JDLM7_XWQ&HS7?DInI%4BGyBu1vd{Hd78sIsS&JY9qhP#l46TD$J(xGh10H z9Ovxnu|y$gh&vJfcg`WSUsL~;!Sfg`$wl#iK}y*3_I;;P1+)>}gFAf%f-7|^*GXu& z|3d79q;vG;+3&+C;^(>8N%$=yuGcM6f49!o(D7Xs6-r@#^3c^5;tIuMnD(*tca3TX>jz+(s+pd5J_~JFljTw$AD`>$9$k6L@OcF!l26AMqCw0Z=bR zv5Wc8hc3c22jz=NzM#^Oy&_}Z$LxxA$gImX@7c`Z-)idz9KI1s*SV+Pyp<)t$^_7J7UADJSNl#hWpr+0oZCG z#mG)v7vVc7UXNtGz)+?6H&L$L+lD)Oaw;Ds_&c9AGd03G<{Lves@lX z#Ks>D;Lc+tqFzXTw6ENs?_kMF*P;Cn_iBJHLX*=#UtzU(LxAIY{@Y+8Zlr*_n4xVL zwG7(D#aiT4izgpF|4waMx|aiX0sB`y7^#_L5+^WpoX8=(>D8_@qN8{3Q8o#<6FRYi zl4sF-z99x=dq)e-Q#r^vzR^_RyK{Crz{Y*al`85TJTH2SwUP)Zh}043ZFsCb*rtDf z?zEX`rd}g_xkyqErYp@h4`A`hoTuF)PW`sf|K7kkatF|=dt&I>i9W{la4M-o|1yK~ zSeFRfIw{ONjWGRZOA#`0)=YBmzQWVdU7*-JZl{bYh zn_8*E#OPG7=1kbTgM#Jxlq84XGj4NycQ2E53ZqsW9P!n=!Bzp;xSb4V=vxJ`==~lM z5}Rf}`HX@++?VS#YtJtfi$EHF!2^nNa-wuf`J>)yv+sP64x_!sUX7#Pv}5Ht2nX~9 zZW5BNszx@$p0xS864}g8{v{?(=H?WRE>%w8^awd!vxBS zJ)VFUU?@R+FGs~IudrbCFxEjq32McdudyVov06^-<DSXi3_fD{5p?sGi@1mKR+=JH~KccpI)P8EXFM7x4Sw)+I7wfPqRljJ>^vk&b$2{srTF z)(OrYL!*ts$^YYfJdVHn+90pjpHS=A%rM#{8#Bbz5!97}rW|Z!&Ko9t}p^h2Y`F{PefsTqJxVp#j&Zc0>N~nYAbARi&lxw znMBP&w#Oby9Y4=Pj%eGhIs+J}YjU>Xu{*-!bX+)0Z#Hv1gYoj-eEw-+#jm!$%FQW% zFn3$7$))$vqsZH;o@dDkx+XnGf$DyV8Aa@ZZxGuI-)SHEclCvwtc_V+4V4`U?sIpb zf~lnt$@tIxG(pG@@pLg;si}2$XyXV~YL+r#eX=@N$mwk?)$k<~%Rnp~THsQ#% zJ|P!+B1?L4;C6oQQC$F*(oPbWepizRO&&$GEi41xrL2^m*vS(>Vlc<3NGc_<9|Q?9 zf_QV;l6{K*$kz}zcxa7J%GAomSfGd(LQc$*gnO?f5YDf{GXX6n+@GDN;~~I_+>N7b zwz+^@3o^oGC6>Xjx5Mp9T)uG|Z^%l%6PE10ew_X(^C(rZWX4y!)OCP|p-zGF(0b^8 z(TDj>JXgadLY?#~w7|mgTK4;9V5HvjGp(J$`wA@QiA{>objQ2j-$a(X790GLSQo)w z)I>P}pq}gxl99geCL_p0-Uh@32AQIERnBZ^tQJ7vF5j2UYyqJ%*LmOnKfQ|;guy@` zhy?hqhR?b;BiqClD%oYwN!-SREa*AkvbM*jh?^|RD7rogr9(x0A69^F6M`H|Fe@;Z zn#Z_LC}Toz5+?iIh!nsqCIrB;6t2f9_Ha$FCy?%>x&c(DmV zOsE#cfTHNNy!GSDKthO|ZLN_#hc+(jqthdr)14vy^~^Pz9;k*4nN<)%$b?XyTKPP*$wHMu4F&jPp=L* z+F8oaQ;kTY%>p9kxeN?_x4#Tx! z%*p(wx9)GL}j@SSx*ELa`?W3eCbB3{{lHT1t_*`u27?n-j`$I~0{HOi(X4lg3&#zTfRP?gj zeM?LaHov@3ytF@lUDRRB{{lY4+fM#=4fAGq=fTZa_&y^CUuWKw^1W~j?f7_Dv0&i1 zJ>MhZy~uUE5F^jP=z)hQK1SEle_L1JHgB#Q|4^>3dpsY(k8T2$hB~_eo9W~4SJpg# zo(8)vaajyLme_l}h%zcOLV6@1ZBOMg#AA|4?ZM=>FSPrGp$}A^eHkvf-{JQK^F>R2 zt>Nb$%|!-*STN3x)40aK>hzF8R}Zv~%}qIONH^hY5cfKoUe}R>*c^I0ZDz#4zbNWh zpUuDB9e+2}XEHTrVvvh-WOrJ0x!1q|R#fZ6P=D7)PID*^Q(D)$=eqe{F83c7U!hk4 zD+5B%h~86Na0b=-yRlfGPS&DhWE57kE@tt93HAvVi_jdc8WWL< zffG3<1o1#U-6;j3%IF&O0P>okSBcR8IV52a<99WO?Wh{ioTMEyMzF}bCB2cHOK zO;X*xVNlJY!ZpA~rI;=+{Vj0;pp*oq#yIl}fgQZ-LaDT~G@Ks6(JCF&=B8>m%8FYe zJ*lb!`Ervh#W}$yy<0V98ep*N?cb*5iPK;v#ruB|2`8>_Gc@SHF7qe zRNf|<)czp(OMhITn7}CET`jV7fuM!mHl$&S!hYj6H@nm(3a+oNNj+MXN=zA@tnp~8dUscdqwKRQqv%tU%=YVTNEFmC^=O_x>+&6&qRe^U zB!Q&)bOp};WU2q@d)siVENm4CLJ-U0YTl?F(ETf!in-mZ0$p7Y0}Xz0*6TV%1YlIx z3^+ERU+;u@@c^q76@7D&1;AhU;wJJhy3MjdIR{u|YA)9Viq-hL*93Yms*>*C@KH{| zAtTgOijK#&CT3malw5rgTV0y)~;uCZwz|EDT!&Dta>lLw}XWP%nuy(@q0&0n~bd6 z+J{sN`eTFEce*a2t=?{5$8rNh7(N06G%kDa=_Sh{;W)6eYR_&D7lHbN)Q0ZemE{Rl9=s5>3kwBRJ}YZGA>^kNgEs=XZOsfz?!o*(xn4bM)FR+cZz zkAsOk8@C)=qT9_HN6K{wvwcpWvIC#8;P61>8wN(JV}&c-VF`7ZHfx{(cHhorQINxK zZ)0*2sRdf$UlRu=IbM|9)Bmf>msp3%mfs&5kg#Q0mt`waA#go1vimQ<9PIX5t^sI(uw?0AHiC zP`z=ZV0#VGieOQm^Q5lQwWDyMm=5a098??df91s>GcI6GFj53-urb}&R0jOMRwljT z7$osyoiREuSGBe}=qOZ8!GSElUzr9kE=10?u;VG@ZeMq|L?l0*76(+8K!c*ieZ!{9 z$h2YU8q0WWryubAQy64yzQU7$$1=t>CreI_{tCba_`fH*g8yUW?M)d7{%Xs1i}tSG z0sd+TvtKNCnc;I1?M$)Zsklr$=G3{D!QgLRL^HNdy|&RYP)^hKl(*+K zDuGp)wS~{32B~B5XfB(n7?&GIsSfU_rZiVrD|_3XTuKBikiJ(Bx7yW}C0uhDEbUTG zKDA6VI@_wN3&DAHXyvmum-hJ0iz1DrS6dQ3i#8PGfmBcA=Mb)e>zJc?%UEsUP==6< zY1>)vC0EmzGZ|7Drm*8Jtc2dpd(#u8>Kv3aNJ`p=+L}ZI;VXWe)|)d762)x*i?gV z6V$LluJ;lMl@W>&pb8v}mM*}7D5P-f=Ru&>nxUE!(LwN_1zInsSd2I&6O&`cgaWgh zl6x0-F3HVr4Bbqgny`Ydn@Se1Y3!8SU{&YFqc*7<7Maf!LEELWAq1f33YL%y1K|Ws znpbd+YZY{Ns&OSBe2Lr^c>7e9he?a~R;vi@e7tr_ZJd&4`xtvwb@}`-zOZ9!FL};v zgn-+!xyNW1f5&dEn8PlY!%StSNoG}7u5w7ptv&kSS0V16HrJo+Um64w$GmRhf-6(Y zS%o1?e(zTIu?yREM6A|LL(t(z~W(zzzIG2M{wc4tyE4o}#=RBMv2sMWTQq|EYp z);M6-$X$PKE!%l&mNO5q|L>Ncr;DZSxy-Cg<>L?kv}rf=y_0Eb&ygJ)kW^B_Ri<}F z|6o0zU+310-)T<3cQ>ZfOC!=8b|2861ZTYp}WHAteC)lL`}JK2-(Bbwp% z%iZniN!r^xEA1qV8Qz|@X+mz{h7H05vK|lfhnP~P>+kEbsYi)$zc;yGYMj2m^?A$n zTJ<-r=B$^qVK1bO_sZVBYLAv`^tzCWd~|k_rzHN-lY;RUd9nuG{)!0ZCE>eLL-n$G z^hXTRGsqjXA+vq2RGOhOH@8;m%=KF(Doi_GBk>cQ-~4D{ZZ8hNC6eL*>htQp*=q}l zo#a6Wycth%;`HuuMlNODss8_-S&{&id|5yTXhrvFivC3q{x9#~H(^-CSmdAtcDGG- z!%)dnPQ#}FxiZx}a= z>5Z{qBfL0N1mBuIAX(ORiW!h`A}q@r6jaKD&FDdt&4I3OY{9;HJ7D4!DGl8#2a|HN zhiE&y)ky%IxK+L)*D)wieRRg^kB*YUBrB&hHQwm`A-po>e}OUSE04LZsKbQQpgUec z+d*;1mXUFlMdlaZ-CRSzd+S%}rEfh2mC4+Yl_|wHl1ui6#be(Cvpfd1H(L`p+J#4v zY{G{@ogzzZ2d!&*T$b%J5A)VEFPqjQtWA0i<_Q6*+Zy}FZX4RD_6LKc3&ycEH{1~S z_1WeCYQ^P>};7LTnjH%U9c8oIhtcD|h0xj7`sya7lGPc`CLb-Z4c+uD7& zQzf}nG@Rxv(LR~!;*+Z9Sln&H@Y$?hb`=Ke(lLmP1u3#wh0~_?5bGh&d5Wz1n<;WT zS+y78EFI$AOUe-(>~o|`w`TzPCC6GLn|s{Wnz3(1F0%+c+`r3-U~W`YvQr|gLFvs> zhG|F>7a_19)u? zV<|07iv~*`n>*%&^)xmhqvp;epTlU`#RJe*tY#`g5PxnFmdj^s`6<@;a>%HLHMtEt zRa0KR6!dgKc>(*4-Wd*ViSAZ$>#eitM(2rE)dy8lEduL>xw}9u>b)`ca#iyh_x00Z zFiYZ7;p|P#{h9NOH`d!_w!vXEUd-{s%1VdylB~l-Nt~e?Uf=7-xA8_8Qug9ZXake+F^OEdR7L=lzj5y=t- zYAqj4K7k*Wu)-S75FFR{J&aSgn|+oX=AaXpjpll8Xd}2UtXiRi2YFq6Tc$}4{YJrW42WiQ#1h(4+dN4;~lNy2&K<>MHGtY*H zvWnOJ=vbJ+{o5B{$CT#x>5gCqm{Uf4;9CA7RG|=INBDlg+wCQ5hv{8=qYlLjwqDXQyk7`r6Y})*)G+o$(QQtJVAY>bkA;idpQRLfDXCM zqK3og+%^--7N?K(lVbxEoS9`kTFH7rgj5+qp{BYAkEW3`bXMuWGcIheRdt*R_0`q2 z09akd5BXD(z4f<-6ARiOPZu_GIE@&FN`-_F-T z%?gN)aUd)!&6FFT;19o`QICVx=M2 z_2kgG&pW?2YQ>z{dNb!S%!?q2bF9H!+Tl}cD&+#2jDD*q{r>*gwHhB>H?LXj;!58T z5)qq40&kC<7LmmsnoMtxM!Dk7B!5}Y7uTP=SCj`4kCQ_ROYdbGB8wd$&` zKKA{4lZiZAZ}-RFm=dUP^?RhZ=ZjUCJ|xQpd`+!yB*sg<+~|D1nPKEo;0Mi?2vn>srW37?-Hc{u83y5HELT@Fy_d zQ1}lh0#8+I{5h-RfIx+v;pOZl{|H0`ET@{UOO@PwCEwgNH&AG;MuBu02XGim123;A z=#et6NG${k1Zi$Vg78>0aw!r=$&l2v!Ii|0&xhddj~1<&Rk&9)KW)Yc0%8_Ud^D}*-*JWc)+@5Sw8d7s@%TzefoO4sjhO8Am{?;2-kiWVhj++ zz1?2XBJnb9nA;2YFYg}6z3Cy%DiCv=R$-j3F9v*b$^9q1rkayL%hNEL|2wEOjYS0F zUm{PakUl+KHLCLSEgsZPS$nlu!NPyhd3xg&Xg!zsee~8ber+ac|Fz+sj@M!JoXGaZ z^GqR`o5MG%u1KhToZmNE;y@3lNk%ANlv{AUGgbiA&Y<+<>ejo@d7JeLhhAg_Uz+wU z$gHuzalA>F9%<$Trqs!uIaTueQe$&&)+3kqhFwN3IZti>Yi0P);*kvuwsYarj15%O zn()DQ^)y1)PjF*@-XIYpP=nHADRqx00zglK0sJn?jBbLtfiG-u73OGLf@v0#)K&6r zl!W>i-wm!6R{mv33!|@I?^Qc>i)m|11To7|HzE9PPg{T4avzsGBx|7OI-az*9C02SC>mpDLXc>nozMBR-vx z>6C}KN&xae>i$(n>j|%O(Ja5n=fSFuA{|C)NpBN#H!9!yojcEdN+v1ZvS1dEJ}(&+ zPk!)XrtL~x{|?ICc}JFfPSY2LXK6tI9AXcWd!1zUhccRPh-qgNKVnKj3O73VwmidK z`a+EEw-ZEwp3k?d>|>SMru^}fD<*1&=?(V^r%(r5pLIpcC!GfS8=;1Gu2kjzct7)m zK*#f|*i(Ud~lVf?Cj(!;8bTCF|Yu| z8&;#w40ru6PbiW$u;2fh%Os|cpT6<{%;uVI@!+qwqe^eI=12q$Jr+JyRn>9Op}Qyq zsy;cPp-%jX`^*yEDk7xNPLq}jhF6X59ePU_*wG+8kEIvCs{+IT+=BP1(nx>M^ve+} zagP05EiS!Xm1VG-n#a6vYZ)-&TJJC+@`GA;ml`T& zMvnKsX1Z(@dyglyJ(RvVK&IpRp~(?12Zp#048f z*ZnU;$#0B89HfJAY#(N&>H0zPY+sKZX-#J9MP~s~qgOtciQYUBO&r%IGXB*xOPZOQ;(2{mn;V!`Xp2>17~JsdiUqsGT?<|J5zVYo+mHy5+pueAnEcQ>cROCE4o294TtmR?tppQ z{vVree-~;H)Y$1USnY}~0GltpthZ|d_*;5Lmj(I z=*#p4<{m-Km$=CR`7pLLRC1nVG49s@TROI8Tm#h`2~1|gWJ>#;G>&uLuFR-&n-MEs zf8D6ukNRQ$vn2vd4Y-H&E`)yVc|7D9&_#Q*icjm&*>-XMT7&>@ zmHx#w@o%g?l8in#INGGAA_SC(dSz=?257~$xXI?jp2^_}Cz^M<2ydCfRbH;Fxf&_jxlA8m+O3xO&fu|j?%wg4Q$ zxbBY3Cu!zVR>4P7Pvn1W;A~E5T*=`dgn1q*YP1&(o2L2|30*k*>v?E1@LCh*&eDtC z)j*$6P)t}XIdHS!Aw5*+6dLz((#IMeCop1b~qnV=l4-c%4zoTc;R7E52#UA?#>3*v}uHq z%XG9IY_{y;RSkhmt#G=4iswqf96xDsx?}qkL&w|lD{LHB)5IQOkRtOE!NZ_Rb3ghf z!;c2|U8|P;4KGJ?pI|u#vqDawDrC!{kaS0> zGQRa2afYsT%vb&?{L+D!)T;(Z@ZDd-m=ECXp6D8aogVzjG8)YJy^3FRVj8ZO=t(ULhF}<&B&2vh#;LmLR z?@mQwO%ZF$oux|~)QftTj0&>a3~tYZ2>q8jn<41%%n>{$Vu5hf5qS~rU46j@vmlFh zD-Fpq=l8iVn(V&9#(%;Ns~jO^_3h?ZyJ)S+!G9s35yFmIDqvG%4ApcXG z&6a?BTGV-Ci%gxc0XA6b&K2)?g!<#ABipj*17iqbizFx#D`g zW_-;=32W>aL3f61AB5sfJ!|3eJd-?;<>%U)d)3(=@7dQs1$6(9F3J{}N^r`lu?BnP zvg?Hb=1E20zjn-MG7tZpzQee)G@yDRdwtQk825KhFFcpvu^|@r8!XW70G+fEU(^qF z*}s!bmoKmEqfMMbUI>$qQAXchj0>>D$VA^6eRexk>RY5j0C^?(bRnrh=zDdGyAjc` zMS8&&???01`MXLou8vqej1M3mgso^?BPP5?h>VKQObhWi9@j$In7A zC4RJYT))m|k3-65S6=fz2293%GxGT-gV5K;J6rN~w_fTNV364@fmZ-m?tgb1{(pCg zfML&xa#^nlNh1999K==O17s=E9+leyNnmz*2tkl7&6a7@fVOT2&|GqN0UglhVPVjUoZ41dQ=2HrX1$^js2j<_PUMm!QB%`I{S2u-J4VYLMaZo zWpH#@2(r}@*My+2TH6XI3>AH+E+Sf*^x?cYq1Pxy7v&XtHycu^cy-y{z5s7P@SW`p zq`7IM`6*gdh^-zVX)4K@Dr}TD~DR zklieG;?TM|FCq*09`X0ff%Q46ei!#&8XD)Gd5i|9OA>4H{K||iKP=y^pS<;PnD_JAjF+ux|%?r5IHR%uro#~7MFYmH}CuePOBZzHkrV|Ao(4wg28& zhburZ%5XD~#Ii3&DL%F;Ph*WGfH*yUohBLqNJ83E&u)7V=qlX`ux|~dBB$_F105W$ z{NYM;{1O*J|N{sJKw(drBhS03#y z)z;VD{@mfZdk76Dc%x=Qd0E5F;giCo2^Yn3w{C`vc0|XtLd!l=jB~->nPPs_=PJNuwjuJ_C(MWgGLc;bevQ8 z2d07-k^!@a)BzN0m=26zUZ9lyOE0VjOfp1vS6y~Ti0K#}L)k3k_a5L?`SNfsu0UQY zdB#hj3B3qh;qJ_J&^c(c3*Z=2)IbeZ?tjg>i1Tq}#ZEcJVXFD^B-f=etbBQ7_zS>m z(O~vHBx96y!MH5FRt0pjLNMfbw0_b&dHs8uh&}ne>Ba%N1Alxe!;0zp%-UO&{*jMg z9DQHk{z5J&j+~^KY`E*AIGi!{;ALu}Z6V$axSZ`3Fk)+mA^sWr&D%pqXI#NMi-U@) zL^L@Iz;<_pM1S)gS8XozW_R$uZJzCcmUlc&01#)<%&>4Vo@Aceh^2le#h*-a4#!$_^B9d!6jMeu#4ToG19vsI+xF z_|^7Lov{+=Gqi-PXRd?0iMev4(xtAQjgOCF@8b!N8uvux3~IIi*cKnmtRD=rh6iiB!EkuzamGc0ReYFAPAc$VR@*h=%gfhL^2ktD$v z*74gHtqBR|m!O&}T#H<20xvo&FJi(A{aTmS;MKV1i8U{nT;U~s0aB5i8(e{jxFDxI z7bpMzq@t++|2ekmqrdF^2`knZrOfAy4p+vVa#~>kU@S3OKb!YLw?z;R6N|@>xzMs{vn!=L3WJT1^!0#$_m5!jK%5$0br%B8)<9TbIp)12dW2H z>>Y4jYv~C60dQo**u-2F2-w}~pmL#*P*Mt3Vq)3B=t3Ur-JWENabIOaaIFw}K)v4g zv6>-9mFc{A$AbN$Ly$&FH^^yWDx9t`e*G~#*_8&*XLXjq(Ia_OLA zHos~GH$9qOK7oWuPL0&PHF+=@IrqGUyy!$J|KfiQ&bV;GR9<}7>7RLN#HwACx(R6i z48(wrDtc}#;pnATspH=w6e4j<2+UZg9>pblG{XfIV*@M^i=3qiwV7Qc$AJ-;*7x;> zb4X|t;c3(+K-XkEA1Hy%lj9|#Sok5F>BK=$C3R{`UqlA;U1i;Mwir~d`LXhHcNhhI zJgGw2-@)QQ=wlFCkgfv=d*f$%fxCH4Ki4LoU7+Gid9w`poN~gl@yX-ywAdXDK(ETpt{&3X_woBAKW{O>CB|Ma!- z*w}OQ@SX?vkhXS<;|T=II7n)iM;el{73Gy$$I4hNN18zKE-o(a))Hm~vp@;q4E+{6 z!f|u`^GMCXgB3;mzE%c&4b{a%h0JeH*4=BOjQ-LuT!mj0l1N;qh(r^(!B(K7glo4(p=a zjKCua2`P=3=$Q01Dp9b=rpWmANxkmD8~KT~EIgxyqB~Kqw<(J4R#HkiW~ca%}qn)>wNN(q=$qVQ`{$^YD!e~ySX+#wkC z#}gLuzN`Zha0#0IfL#46`Va$QoNodE^p6Y?xViPRKhPB62G~tPjVc6l_>8UM2~K`M z)Hr5=`B-DayDp!JRfX5EahJ^&1GG>mG2al@y9JSQ{kAXyj^NgUm6%S&EG4F9jnQZ+ zG?p7|m*W3tNodcIxXz7v+8O?(d<>TBU!V+X@u-lB85cOHV$*FO6N4J0XzM{_96|10QMg*|Ge|5oOX7}8XpWgCx$&_ zDRpIjIIOpiiwVwSbT7v(S2!mul-;=>qeHdiJnEGlHK;>%?G-b{&y<2k%Zv@-hQU4@ z-}%dT=5|xJ6L>1Ml=-9%p4IprRBCr|cBC`x9TZBPe zzDme6SB65*t@dTn5UgY7=*6#-RhF)x6GtJm-K5Ia9aO6F9KjgB887!~>xd{DqjyNA zC}?6qscQPY|BVFSu@QfHdHIlE#E5@fVly9mJXg4%Pcvn)YMinX*IVSxUBQMX8GuW> zhDf1*(rXu~^=n1`^XHr3d6!7|xsibAgLfH+Q(I?G&QjM36hnG+X6`2yrpeh}F*En| zXq7JHi-&6oHx{-ekL$9i6+D^2;GGk1?x;X<*!YXV8R&OH$Hi+}&J5@mUem&-=q zOqdRR8U|5|W}rJI?=-r3^JWp*{OMEkyhhG7T0i?x$^>@=zfZ#`8!90YniVg2`~irk z?rJ4qvYY4oOOFgYDV4YaU~))}K!nbEdT^R z08*)?zL5urpA-pa8)7CYR#PqdmH%~c7E)TrHQy-#W&dx3DH^N~E`PtU`F-8Y8jQYO7c17=i9Uwao1ih4uFZ?n&&R#GIJ?G|#p zbo}|_XU__!CA!C$VQG@{+5-N-Ys05r2~lF9e8x#A-w)*KJ8yjj*s>n34lgoYihr0v z<2GJYENzy=`Cz^At^PG!@|3VOeps#Z}}tPEBUiNZI0$P9c_3;(puZMs|u$M zQCmIc2QfOT2BDP#7=v_Z`G6z841Ev@O?mv^UN7j;Se-^&pW1{w6ET`A7(}d6 zwhH6LcvodG3~9Ajt9v2gJ(Tj$?wMf1&T5O0rhRIOR!q0V3Au&+nUO#esR3*J!m>eL zYpka4p}+>8YG#-#8@b6UN9d$##@cmdUtizmmlNB8!H5S5!?(_7yq~}H?&46RsnWj< zE?dT)_&Yglgw$9(f30skRcZ`9dho7}^mai&InyQgnEEFywXA~kWz#p3x!eoZKDFK9 zHIIK=c2na0zrT}zU)LNJf=GH%?vK`l*pwWj@vf-DGzwW%F@lB4Ia1LQF-oyOsa`76 zEkwGVXg0<_P<(z3v8R!mjA<|yN;&oyx|vW>Nx8_YE~vYznLv-(;52bi+0Q+jRVM(+ zJTTcmQT5lKGr|PMj60AHX1)B4RlR^n$zh8qiHeGrT9pCy^wK8;+OZH_yI{gS)b3oq zif;F)_ZUm5?jmLK8)Wvb_N!bku4@$Rwg!*P&CLz&e^3qYhG={!5JQEH&UX3j={t~L zzFu>`5^C7WzU89}lWnAdM#@Mf=M4y#V1IBe;*|8`3M zIL3(t*scl;1CszJQ1bLCTHI0zD@aUZp0iHXYz(QNyn;$uG<-T=C>@U#-mperZnmau z7xWsLp3PW9i{a9Yuo7^?NsTn{^%6|N7$TO7>J$Le(@XF;^i8^o!LBoc`9bx|36Ndb zu6(0N$k1N+Zfh?7Yme-t!GW!3)VeM7>nndb>3{jDzX7M7xp^kjz$8$ZH8L#7%;gfS zQ(FldA+#o!(CBH+)L1#?*6%Z~Ex$`1qJs+|lgZ@MjM3|8)qhaC$hwZf?^(#QWtu z|K;L-eUXa_2b{sta+9j_A>;Mx1W6TEz%Lm&pk@h`&SBf7gCc6>TG24aeJ{4hq{Wm(K`GS&rxoDtc$ zhDgGWzf6!q%ef=}sP~Zdw^p|@0vUmTXA)2f+Mc%qI7O6&qF0pFF)VgnLW1M0a|t5q zYss|XSJ%806MZ7%6vF-1=ym=GX1{+nD^T4>TjN0!l&M z2v2<{7eC$(+6D{066&36S)<*p9pN6DN2&}A2SXW8OfM>5rPMhQOa?>?D)g*O$wEX^wHc1IyFg5E5x_sv{o`$>Ab@rv*n(Aw0k5S#2k}x^y5dFz0*v!aC zEFU#cD@Sy4?06aFq&CJWH>?U^q1k`&@(#sKvY!;>HpP3 zf*(*AfGOY`85&af{@9Pw$&@NgW3$JMz*t=4`Jl4o$#tk*K_*+`dwjd9>jtU}0m$ip zp2B-~ZK9M2I&mW{7McRH1w(l6`9u~*A%o+I(mJPX{8l4HaKXa2 zUsHHrK*F`a6QAF4bN{VN!^MuXF7TFLGQKJ=kCjS{<$C;U0$K9wtaNV2M5=n-TD(CT z+?FO!UAV7Eu`j74t2jpWWWTmFF-ab*b%Lqj(7E~0Ba*1)ddhD^auiz%9yTIk^AhcO zPibudY$tP5V2SNWWuWjcTTPk$7}v1p_B!3~9Y!MpBNLNiX|&ts2g#P3D!R1OER2~U z9MF$?xmMwRt}3*GWhmsEhSEy5#9maj9oRa(S-T8x-xDyq3TYm zVPp|V&hv1{JApUx5Ks(e!8>!l_e$CR78L+k^a$o91 z#?TC>;~oEIxPY9~&sMProzo&k5TW}VI< z;zgbj$*|=W6O-q$cwy-j!Zq+CGBL7$|_VNEIwuSO9WEAc;nUB{+{6n}UX(jrcMd%|@5h_Oy9;^E@JD z%yY@mZz(>Mu;UAVx|G|R(q%LbrzV~~xh9?49?#s#(f9G5eqCPY-GzJvGY!XFlFOXo zQ;1<;2yslWo%g-JEqMi%zm1TM~sZ&`VH{-d8~`q!?dLbDLJ0+flW?y8VinL643dZK#hb32|;`QZ2L zxILLw$hpT>TYjBscp59B8YHceE7>(diJHZbUL>1l?M32cACEA^X*DC}X=AdRzt|GH zY1)WBnyRxOr=HIVR75*Yi~vJwJ;gbvnOy7THy?+D4+pKcx^BNyO_0uw64N1gTjlSi&YNMCS5^Tdlj?y1YLHkbBV;v6!(Gq4m zs@S?+NbGjjU)E>`)2(`EbJqpx7q5#{{iD>QSc91x2G0F-M8GAwp|zh+u?I7b2)P&qb|d zPNAp%UIhm{aIA2%?y)bd%!0Ijd_J#={iZ`}1)>+z1+0}a1U&7=c1R47lz&H(aZs?8 zH(u!6|8)rdjn(<{wy~?^6curR5Q74Y)6m4#CKt~oi>D2jQeQ;rLYREK#QOwv~D8mw5%LS zD-j64c-;*j6jN`$YF=gQk%1I@SUGKW@4I*JZj~Vz$oT|wsa4H!id$*Jamn+`n*^m^ z$9(8U%DYjkcJxvRKlp-X9>CZ5Wf$w%K!`R?)=>O=xeSR8{1JlrdAJ@l6Q&k+g+RF< zLk%5NG4rjFh>cKaGpK0r->l(E-DJ#?4gYO6<7RK!l?fKdxmEf z1`H1f#BTl}n?ZgtDE4D(V(2oY>iRYrRxSJs8(zLMuJ3t65QfkO(p; zdUBanTG@I!Wpf-3YBh8Ag;a)ZN;eziYF{7DH|t14Ce5SOd^wNJ51v0Zp4-0vmN36i z@cAEQ7N2wDm|b)GKP9WbB6k6Q0~P_m!F=!YeK`NlWM!$J1`b!963DCvOY&t|Nls&< zr}7iuX}AGeVp0U{G`S_JygK}Ql>Un^sUoBPo%UJ$rXUKrPD-SGBm1V~Y zPy*q&p=5$l3nelPb3{oYI`eetIg$<$n640l@TQ$SuIV&&zh39jV()99deRU@!AOfL z{c6A(mbcPZtmS;2QWAkN$OO$d+w>t}z`auqD7Cha>}~ujAH=5MVmi-f`rf7fUOqGN zXFkIoP&zm`h-O2?QKYdDcTxmf(zEsyFb)vati%C4Zdpnudi)v|OYRkd0cO5_F#Lrj>D3X?P+s z@=yDCZofxIq-uV1AN|+X)>Z(F)X3Plutf@$jEJM0X4^Pc$?n$P)#}5XY4~9$S`oIz zb?Y7q_%N(;ZX}%0D_fk~aD?}m6}g5$A;{4*y0*PEH8Zc08*pY_jhfVsZOP4LX(RIi zrP9RvfGa8JcXFsAASyHP)>GNO+VbyYAzTe)HhH;jHoxa=Byk9eybm@rp+yKIB~FAt z!pq_GGovMLKcl_Rd zlKAWAs})M4Ssr&Gu7kwT@!{*M}{AW9=3CEW}}LQ(;x z8|fZOgGdVuMY<(NPFh;JL0Ui<-6h?lx50q(;$6S*_d4hE{&=o){@ca=VB6~%_x-3_ z-Qx#*SEF6-s_%N3cslwQCNcF1XuNiwPdfc~aQCWp?PB@x@+)uylK#kU5RN5e) zp4a2!6}RXid$m~k;)YnLSp{oeon?Uo(6d~vIr1mwI*(g@^GH(uUUOf5T=iFvO>+N1 z_5STx{76Li0WXLF4J(EMDW6j@LrDcqZqY(5GW`5ZOHOW?1LZf;Y^^HwEG@0vLWIT%V0cL zXwnsXb5%Q(TX{hWxBmI1>|}twQ3c*m{O2$K_Cj?N3#h(_8PIjEJ4x0d6?`O20b|&W z1bTG94Y-Lqa2(uf^9tpF3OfstN-J zFOmYhOx_80I??H)qnDPSo#n3GA_Iyp1<~^mrT_s5_u>FG+a1S)&!Ob^BzW8395O&# z^HRU8M?DL94q&J6K0|es(h%c}=>3uI$fyvV(Zi+080s9LSS&YTfAJ3!V<~ur*HT)m znEzIdNS$;o=~2Y86wfFSMyI&v_eQpp(0e_I2TMtZ`HdclWUG#CYDP0>sR@I-Mc*F83hJeEXax^O-M(#3X3xjydYAdhdp>i zNRnOL@HRvUL;iHVP0(hn5DK&cS9o`Q;*%f$A8tHAkogiO?mfhS9=Mr~yV!bH!76@$ zj`XCPC7pPQDN4QY-DCV#)-Yl46J?iX7_#|3&JByD|kCp-~GykDWFL>(lwiuA^=HSmdpXQTWgdv zmH6L%0rZ*URbyq))NlV=noeeos;{sops&LJO9z<6WJj)H%X#yD78887%j9 zq9XdGV%psr{e9U^2MJBv-*%&#w83B3I&^w69gn~vx&4^em6esaIPpJ%JLtmbRVCT( zx0mRkWq;}{%0Zcxy!;_kN1tPskUwHzfx;d_bq-etf&2QNc}R!#X+Nm55afx2jU`x8Ck&V(oiv3QbQK*b19Aa|Udq7EWmPE|+ zBn)VZG#UKtvHPNqq=-}oSEC1l$)Cs`5VJI@869Q09}}w>o-$!+hqVQD#1aD~iF{*s zD6@2pbd)>>8lBI0TO(zYJ(1wLCgge8irKwR`sK_*V39j6b#@GxvIy+rMZf&#N=PDt zHZNp8jtr#gTnN2E%BtCTBl7$T(!ab7=Xqd zGR&TG>Yy6bZn9s}t=oC(;0b@-qUlMD^!n!_{b z8HCw)D4ak>qBIsY$^xLEpY=%HY1U4H-90Bcrs<;2?%TER7=#nLx(g(5xW% zzd@#4VUVyH)RTB}u4qT>oS-~lpO%8VI-^V(qTOdDH{t+$Zm0<2%qnx9MV zC=H|~PqwXiUf;jfeYGpUJiQ?*xLSPMjIAhqO*2>e$&1OspT2n!C&b6+ztwGg&u93K zr*U=g0JLrHLk6pmyKYgEPJa8d->{TXDCGxsgi9o!RJ<)CelQslITD$xjeCWqE6WuE zaJqoqlq8jNR9HKaXm?k}S1{4jm97Dn7UEI^a;AO76f)U76((=;Qeb+y!Yu$%$5Rod zM&NE7z0}`3Sle=Na4U_C_qW^((}>g_{)3|`e0(D)`)Ee@bto$oYVj~5FXGJuMVAWL zS47v}HO{|Kli#tl?q5HW6r6JhvqKkU#c|>X$kG)ulF#}A65P+SA?i8)iOWwwR9hk>7p5Y<#9zCm2tmv@cMdn>==-~3IZ@O4;aCsI={?otynD-pWj z01TJ*Fb^h>!5PMYW>$m}T*(+KKc1_>&n0A?FOe zs1|_;An>7i!4;46?2G`lo@w6I@&fLEl303NuE{tpQrzgeB-L=7sof0dM2a91#3es| z>rstq{-I^aRe@bWLhP2&H8|l>?W!YB=~dp-?~)qNsiZ=}KVygJSS5Uofhp)Qb`0k9 zXNz~f7E%1wUV+Ulz21IphbUWoF-Th-)2?vj2P@^o%2bx{sQA!|X3RGWWW&;s3WPzI zk$4(&rtIFh9oxF)8CAvH0(0(5K(%Y@{9yl>!vaR^HtV7-&;|lszPd;8n9-&l;G0zq zZX6#z99mOzw9u{H79D5j=+Wlxwth0@n>V^1_$&MO_SHjWpx7c%blDhU8YQC(ljQJ= z4?^hiZdyk0NGq}rlF4BhVN>X6(J+}%X+w|0Y-f2QZC>&4qN1WcO*tV(12ajkkUA`7 z4`5L;zSMRCJEzdr25UezIYS`fEN@nSCW=RcuGi+fz6YM#!CW^bqP%{$fv>oJw~qYm zWI{F~;%6NoyGh$UasGb&PJ3w=HKoXI4R~x^ixj|;L$VH`&$e)W8tpz94t0&polpl~w#9|c4A)MVDB>CwSzh4Nkp#F4bXskt|(mG@hd}wV&rSvBhJg?))HfKV-e)c%AG2D04ve@{_ZPI1yGCz zf2lIP=-J_}d^DN9xv^#xF4!3sS!V?(NtfN58;a%|^|u?lzE4;MUhkH2*_V1kJDl_$ zUANUP97?lLL{VMWp~q8McP`yP^IQFnjuXzeHqBbFvZM0M7T8e zXbF5B#nZ`#pN%C${~SK51C!aF~EzZEqbRj<#x z9ZuLkyF!%d4?#s`^oQJB;~^-J&?Tm3WmUf{y&>{89u;{Y)q6|Z@;-t6evue(D+-7A zw6trnh!;GB90Ol^hziU)58Ep0YXV|G+>n0L8$~QUC8iLsSWywJ5hL%V9rwLoEa0*2 zr@cypHit@!%jq(V%`#fbPbysxFa@j*^@auU^?UTUfF_Lbo3hPsZ5O6LnDtWhYO)Mq z0s$yZELBVY0pE3^hf|i3K~fS~;1kwtes#keZ1O8~0afkVL+p8dI%ef)LdC)0Z#W-g zh>coRmb|ZjXcnC z?&y^SGgJ_vhgzVl`w{XLJeJp`#Ml;lD=*Qh)kW zzMcRmWq{sV@khH`t5;y}U;1_IfiAai|5?9Y<(P4kfz8EGo>7hD9OcZW97-SPr<$+P zvkta(@&HcJa#Ja>=@fYtOClGC%``l*7IWq< zLHPA}V_L9k%DNXdVj9TRlF|L$U@1GnD1`TtI_4)o8~Ud}ajtfWQ8z_aBfzKQN9@kl zuVo|{d7l+kn;oqW?(fzkm?dDy3?NZ`f^m{J3%x_f{ijV%#!mcM^=Uf%(;RM2TJ47!Yx!h|8nov2BXtJiY7mdfx) zodbdY&^e1iqnJFCyL2Sav0)@xEm#T|MpF{+DY_7xeGQ^OwXQt{^ElyXvhYm&%%5wp zs~+QzN|5?<5z~E6V1r>NT(};3?@uLzGd0TEy2s&9Uk7I*36$)rjI`%#tU1w(TFXE7#kDbp>a2P zpuq~Q+dbX7VLFn>0wY@Lii9s}nig54c)ax5nQ_u^$-?x-xy?X4y%6>D3V!;-$y*V# z$O$p-`fak(*YqaV{RcK8t5EQwn-9uc6ulhdI7QY(&iCf0j@ggfl(qz;{0!jwohpSh z`;zB_fr+0AJ6Q!x>{JXZN0!5% zdgh7F0n{U^rGu<%T}B3UT;7i$a`!qeFb@CZgb2^>v$;%C`a9L2_iVkj$7LzyJ?zhfU>dX@^lCV!}d&3LPIK3ENK3K zhO2U!_xh(N&^j!Q&6t5;Mk-it)<`fDoy%hIsQWBd?Gb|H{_D{@HzLX>d1dGJ-i^^IP<_XVzT5G`i! zPG7*@g#?IDbJhtd)_1a&iv3L}Vs9NB(O*CO9tc!^dz?voF4QODU^JZBd2o|ZDV*vR zF>>C`7_*ts+~dZjwuTw-kvR2ffl7ic^1a1N-A;A6w{431;1Mv>^laEZ@$FmnA(id< z#4Bv|N|V9@A3g3LE@i%eXPC`xWL|oRUz|^rZ;)&i*DGV1OCYY!-b4?hMt|JUC za3*fwGJBqHb05$d0W!5N{D;v$m8ym+fX%q;ZQ?9?G7`%6^|=f!QT@({rt`={-=f57 zeh>YJoJQ>r?>Wq9 zBM)Wxsy4b_v*?Ik>+#218XPzSZNEjYf5&=!BlBgrd?lc4=6Qk}6rZKgI-asFC(MMC z7X-d{N*|m?o+|_tI`JMsxy#WIIq^RQN6KoO1Af@)du-Psn~Gn%_f6ZQ70fs`IiW&v zo4J}a2jypYjzo%R*(MH+9Eqm&UaQ)|1pFL$nDNC$0H@y)@?_Q~cfw^sAh9Gn?iCmG zy#V2(RH4OoAdSX8hRLCBBgb(yp(z$SOj#aYZ9Akpu+Z4Bw(E)2)zvLzz3WrbBz(%! zwb|`nA_h!%E^P^*>@@P+VRF+GV3D7qC)78*tftHWZbaQ}Tu=i+P{W(PlsGhjyCLcr zw_JeK^^NfQhnt_MM|k?z8+Ib5%fScg76%81%R&wFm%B*o&OJhg#kGWUQ5y{_dpqn3 z`>z-J&Rb(#;r`d_b!WZDXO%jKgbuzk#4up{P@iVE^FnjIe}(R&mLe@mXE@A?R`2l+ zx8X|=b-~_Zh|IXf+bmMi*)^caZh6<$M2k+hCZr+%@WF@klSmw5X7i@{-C7aXDXZK< zCI5MRU^+@fWpwH)LFJ^d_{Y=Q!wjhKq;C0Ydo!&Mcbd;eI0gPFkeo_fYfbxbVzeeP{-+HB^*4AM|q z+8p=OA4+V!fCA|;RWNjhNxMp`=7}ptWWPH3lEx{9TF*Q+8iYX3I^`}uBp=Z?D@v_q zda6&!cRDz@?+^D8pFPie%PBM9y<=mn;Pz&*Z7@Y_@B2;1Q!WjY?9)YU!1B9z_?8r!D3L+1xv&$$fFrv7ca5-0ihy{1%epc7fK_ zCv|O@a)5c4XKtc8_BXdm@yf^*Zt08L9DS34WbW>PRvE8)&L7C@8 z?b>1un2dJq$F8;mv&hSRv~5wT#+Zf5Q+`UW=Z>13PmQNQcL6F~&H{3=JCO3H-HuUXuRTyV3mME{TpkdTcYW~iN-_5EF(<{~ z`_h-fYIodq34aaEn7hSW7<(~@r6JnP$Jr=Elv7;~O1X%XiheXC<#P3Q(Ry+=9rrnO z07X%f(lme*q3p|S1}*R;yn-)qK{b!;n>JQ|O1S@6K#i^>SnR}W-hClgzgwk0leUdL znlkHidG5HnVPS5#9orru=RqlIsVaItGMrdYOC2}jF_zFD(md~3l9cy7n7Yc`-)2dt zA&F8ZuU@Ve&T4?%lo?&Ks5;$$*A_ zqRwGfP9gsTJF|TVqn#ey;@~iNztdN`KM@1!oWKb;qlj3e^!jN=*gJ$O+HO$jt*3{~ zNeM>O@j|>iNcZPF5nP{rk@qFPKL2!we}huM+){MEoj4JZ+s*67lICnSW-phm8tdGd zXu)`+2*EE>@zyP;sCrJA2DSD{$;?d!OS@8o3|CP6Y!cpCx6+4*Iz}yB25TF8Fi}c8 zp3JeIKR@Z4^0zq~(zWP#F<;BN1=o%cJB2PxJew@jAt~O!d@1n|dpQ0LHs#Z_Nca|D zdI1Ak(!7QJwq;gn*Tm>!m5Ar&Zp96=NM!S!Rvz(7kLhnRkwQRqyyOJCG&qvotQw*p zpz&oRT=6KM?w{^#IYZ1bx3Voa#&OMbtJvtw%I_OD+pKI>Jt_G;Tw2lOKEt2(vaZ|g z>z}Ul9?Xpd^Rs4uddo7o!lM@l!elX71{F*_tz9(@DqAKISAq}C(q{zJj9IZ!&+U9y zz=V2X5BzvSG?DkJN|l_%b8%I z-&a2qtOq3JZ;k2O2Nx7Ku+IUUqsNjMvPJgvr->Dd?Yr^291jLxKf8o#IV zf#{jg!{~XsDYF0~?2q_HK=`kw$@eA!TZa=4n_@3Ww@13T@reH;9NgEhBd^ z3u5iR*F%2My}{qT%5&w@07$B%GaW2dFWRuVAcVF{`dO6RUp_m>|Ln87W5%3_r5tO( z$gCB!cE&FU5p_9WsCcAxjB#Hz4`c&?cOZJxH;+SuMxyDf$7kiKN#6udTJlty!ErV; z{bfB_TGb3;L8gg(=&IOJg7n_uA?$+Fvw5I;{^IO~%e#|oTlg&Us?0O)tJyi3Hmja> zgHLhgk%UBZpLM*>`;c2(+DoihiaXqLhk9ma-~oE#MJV{z>mptKbQ5dMch2*3-Gq=n zT?H(SwNy`|8P}~Mg?noWxFVA2_mm*RPY4USlz3hcO`NZW7sYlleeuM)lxH>tEtC>&40od zWewGjH<5o1b_yJr~OaHHAr=+3G&tKk4VmRe-CL8HauRE|zc_NQ?3>(BGnuJ^rN_)a9$9tO| z(h4FZiLo^6SW)PV!liXw))J!)gr%TCHDiTF% z&m-RbR$P#I?^9&M;i4}t=*Luk!@&WE<1(SlR|+mdMK)9;axT=^=p?jezmsxBz83^L zUqOvkH_x`Oz3gK6zVC5J^xUr0ZmjU>ezL@<`LJ!{t9kNwwudsW-aPNk(`3Y71~wDs zyOA==deW|C#2O9W&-izp#b585gfo07&b-P@INl-ygpPU4K}tG%3Qp2&`_c9U|9{A~ z-ZR49Wj|*+8G86@DALEn3sZyH91ykD9;RF{; zP&z;Ch0wIgg#DN*%By%|XU7CJ)2`X6nyl*HRk;*A9b6yIg%c?>?~F|^0=;Y>rif6{ zYJj$+j-4Cb&1BtKT)*?6dfw4<%rzTKwBQCgSBE52u245)rt}@x=4rdtcWbBd94A^} zKc+a;^Asb*RuXHNlW%F*9H_u;eos?68hTX{YbagM4cIs2se8m-_$~HLFv0-$Y&kPF zLiPq*2Rq9-b|%ke*r3oTseb(SP>g(`a~92YsI+2G(mL3Y++`NK^os2<+b8U;!I)!n z>4YsF+~8OwZ_`=)23+1(fgn^8mg^5MSDfBUaiE6uei7BnHJ+?aFqa=AhWVc6I~+1M zt?=uKAPx>Hb1vsRcf-38iV?u1kfv@zXaA?W&4?zU!!SNR!LCuU^KCxevz9xwVZ*>u zFH~Cj>jqwRi%JxBu`UFF2c_81zaE44JFIy((5Z4&4h`jT5HJo;sLo|89-UOM=P_uZ zat_=V`ZzhL83#U-t)s&dm$15x&IwOMhd z^=BR|Ia}iO#OJ|W?aYP8PE{FYt_P|mtPWo5Rb~^`WY)muKr-z6{^sUj{D5~Qo(2L% zlC5tJh{-be1z@MgILjS5$|XzFF7b8_tV$ZUbH8e*gJy7v`OEjI2`Qid%tQAQmHv>t z!Jo(s2twM)qY&DZv|uZ6NcwWCibTQzo0eprS27h4cq13NEVAoIw;|+}ZCM~+Q<1;A zV&V1oY2B0#T+5deR%@x?P_C*VuBsXOIyVFj)%Xeg&LzdTp{L!u4ea5sl+>029KXs?g=i%z?PtnU3!p`Zw04v|D?`VjCy8A$QPmluRg2fj>j zO^V%pk$2CL2?>Qe_2lKYt8nW!EXA4`x{BVwjb3}%hPlPz1qSYuRp?1e*b!f)Q8o9V zSgo*Io_u?a(^A_8U#9)k5p!+z`Z(Xqd#8%T#x|5ITgAj%oJ6G6uG^a=4lN^_N5gx1 zzxQbSm;t5A`RQ?JNJxn09bZd1VTL1F%V6`74G_t5LQpA5U8I*`X-}TcMrVtnGFV=h(kNA{xlXPvy#^Qb1 z+EvF5yp^i(*fEk*rh(LE03VfiEga5M{{~>0vu_BRB>{Du{wt%SPHt20v*Yl{2VNu& z&F8L)uqK_6Rw@RW(RKisdLgWjL$IJDE=H#3Sx=-`X>M?(6pC6BuT-y>+NW9)YKkxc zbTodj3`EO+x!C0szK1}XE9!`s&RGA*NBUD=c|iGf?_46lRaRy#U2gGEpB0)xd;iAE zdkJB1|4vnSXlbm>(h-HaDC92#I8V&mQXxMzEP2)!Ja(9nxXAXfOqie5P`md3w1CG1 z&c5!9pr*W12Ia8M;$P$waTn!#ct})g@l^H+Ot;fs9(Aq5wk3gn9>Bo&8xh{1O>3Lv zE&D|q{1y`8cLocBO&6E+gzN%|K33tQay%Wo4uL+We0e<9R$Duh1r`RLvo4PCS+}m0 z<~q^)Ho+#=R_MJ;R5YwTFE_2OkO1kzbK{Ws*9>Mk@f*E>D`wgKIJ|U!zMA>TQ&*MR zF(c2S^uhX|1I4w3Go<6$)oFd@bL zO_sE}BL(bY@?0JHm3F|#Gc>pSf|%ZbUN##t$eJf_#?z5k9Nj_pp$8OHY7o|<e{~F3qN`M^#3Yf)@cW8n<5w(Ie5Y#WIpu-%I1Y}NO+O}RP zC6#K@b!1Q`8!^n}`wq{Q{nYB+_AF3kk^_^KA;r0+b!`zMjAkit0KRNX{z|A{9;%_> z1|3=smgSwy+t{o*j1U=~9a)Aah_G}K(s=(Ij^h8lN2Y zE_SMAmKk%R(1o<_1J4~NLEN~mp$}uIW|7^?*b;?LTQra7^Opb^As7IGL`ju%KGu>! z9I0K71|0#+pglrl7rNzGsfk_qlUu_~Q^L)t%*NE4Jw=ig2qV%ci!pdb|JGWQi^Kkf zLfS{_*KTa&0E3u;z>4Ji$2a#MURXNZu*ChAU`#nYr%^J5cAc>=aE4g%Yi*c`*5Ysm zK2uUsI@%oNsAFUaNWU+MXz|p}U=!~eVH>1Ug?FtC^F2r<)bquh8G~7QS8|JILQL_{ z!5n7`pYR_!-{-P|LwOlG zG00|KKEgM4DM9Z6iBrtPx2^y#3cU)b8?#CT!0xvL2?FG^V_WednF8`y>i#nK9@t&y zfI??;I-A4<2-B5<0ajP$igG?b9(QmNICx~99KT(2{3~!6+;}_|+7}Jm?@YFhz9_SG zk;Gr;!9tx&fF{G=x>SWMn}!h-WI}IgP_M9Toc))r@G(N^+0^YGZ6luo@Vsry?9R8H zcpyAyC!h~Y%i>06bhyrhX}*57eImhKJAx#-x#n1}i2p9ajm~TVM7X>Oo6csOvJgL| zBQWDqYf$$8P~lSjkH~>1_+W)Wtv{qh`XLhF`EnfS_cEL(KaB~1ORaU&a*Gjv{J>@U zO>X|^$_3E78bXMS0{>g{`n?QWHu4#IlhPqK{bn`ow?aA_uX%-%3&F;~o$AR9we`=I zd|4YhOAh^l19X3jcHNsZNEe-w|3$RhfiXYhQR_3l)s;&6zE7K=dsFGD`=fhgka6 z7a<{nPV-0*uRS;^$`^pwD+8Bu{zj-k319@1+G_u=7{8tDv#FcFjFHBt0(}PTzIi)U zyD)3MtWis;Lgm*t?3ADR0#t0iCdjV_r#CeH3ELtw_mMQwbHc!Vh<2(v!bcuL%Y*l4 z`hj8|ezVz-=#*)Q+;OOX1fcH~I6vTJb6H%;q#bT$jLpc349>GjSsnOC-m4tJM(Jn5 z4jgPif<4!617d!MJ4uq$W&78iPG(9w)%OpKE89Gu))2C&jt-E(YL;CUh80ulTXYwU4&{)h3v@sYI| zeK8Q8fMdA^*16UV^{YEwW-!9dq-6m85uRWUq|umdZf$|Dj0ffuL5xP#3x7s~ebL16 zN)f%cT68;uElrIySjW03Ydh#oi>3@F?=M3Tf12CoK`zwSPnTxKa|dwG%b*O#NYgM~Vma*NUAQmN58 zfUfPzF)p-jLJ-X49v%5Ytt+VI0K6Wv5Ug_^oiQSLaD%OL4ZQxp!WH%dMQ$zq5xd9g zctezLwa=Kd!p?z8^clyPVWEjV0zC~D2ZV{A%GUnN338oShvLQ%#TTxHGLxR9kT?$s z58Hk0J>5p24F{}AG6!4eOX3P5(-;PJSlPTvDI2Y@hwd zyXNC)^0S=^e_q#vMF!`Jsp40!OLyXJ@^pz-8UljI=5;XMwih|biO04i`*m?0@!krdv(ZnsH!QKT=$`3+f88?j4npT#A@~7d5l;X8vlozbq~r#Tp1|pg za{VkR<0q#fZP>~tzC|Ru;vLokvLo_tf3P})xci@^!sreuAlRWT@N=lnxi9^lKZ6}) z?zwPF>yiWFXDAQdl@;6y-Igl3|7S|ZvzH5*k>U{n%M`7LSl@kq_i@HU@HemW(b^ff`QK z!Vl9PSpjW&S2i3>Ei&*#MO6S9-e_fR9XTEgJ}RQ7ywl zrTw}BZ~)Dv3^0k%wn8oPs#ehh>9Q7dhr^TjIgEVH!;eCFA`CXhingrF9)rM23~vz( zxQk^rMA@nzccOx_AxMeTyA9O!=>AxL#{e~~L8o9<`MqhfZDW=WkwdeFgmU&jk>q^ZAya-{O88^+@RN9fL8+vI8C5Vu*t_=b=vyL+t6~r9c*a9!6(Wa7*pM zyl7*?3!6dm1nQXY77}Ov?t3jh0=2b(mtXp8g-4mve0 zPOg2>v@HYL{|;bz#zh#eK5~nH@^N$nUJ7bLnHe~CI4sg$y7Qbx&Y%9;LkMB!gtot_ zbOaH$#iM?T9}O@#9(3ojd)2O_y3JL!uUQooRfPlIL340oIZ#z?AUNBf2U5Lzo8mka z#0mnz&AtM;sB|Z@$PY*J#r@)Eg{WOOKw3I)u=FdCR_+~tF)~o1LFnB3YYnyA3=@E@ z=B%psGDM&h4ZM$G$w$qAoYC?7^}sCgv5OInNI=lq7n*c|>XPWfhwNpp19Itx)6Gz& zgJsGTl7nH`g=m`3g+CB{QL1ziZV!Ak`5GAXovuUU@j;t`;K$cQP*i^x@9AWu*=b=A z1s_?bj}eA7r%#7Gn-!WAvyJD1Xu}EhYdg}#U5YdB`dUr4)AVZ7m#s-%xv5F{g0uW* zb&QAz&vkDQW25gajSC*n2co$=~a^5j;3LLr%RW zW4{;+6AsNVUJ6cp>XZ|?d^77$7w(rASOiL?TO%@n9q_g7&T?YAy?PKZ5*9FCcfjfp zlYn6diiPssNV}XPqy2gQHgULc-s)V)`nyF4cZwwT{xJ+5iXY=+-cjeu9qMr(H`Da< zTkEx=@el>jHc4FeF|BI?y4*1rry}4x{9=Rv8E(X>Zf5I=n=?VZiBVY1z6=#@K8eT9 ziD!yeFU}6mfgCR2ZiqQY^h&er3t11JCUJn6L(Qx;k;BE$3|3cZ6^|Vf zgaoH;hiiTXY?%d8SHaCRC#`Y~m(G#7Iek(@rR_gH3w|w-3pUyO))pb_jW2ezK;)aJ z0y!8?G}#37&-@hig||h_ycdbj+5>5oBLT9>q}GfBi(vlp0)Hr0a8@%0o8`n<>pe1# z=VScEQ`b++@KTwoHrUl>JVmVvHqS1zWPn7Hgkn0|@GtpDl~&JzfATiPeUZ&${P7mx z?eN^LU87MltC}#|V)o5rP7QsSY+L3?zj^wKJ*@}nb2=>39tvtA(YGCx0Jh-efnncR zt@dsrLO#v=qVx_fxZ%cu*_|@^bpM8_I&ycbBR!CY zh|J)vkwC;<-@Nk^5!OTRHIaGy6F1K5+J?uu(u${Tnmos+TObSY0ci~c-D@m2R*FK1 zoZ`tkVp3>)FoVn34-iu<%-s4a3(4K{V3^lRW;BT+=}>-?69j{f?`&>QC^Oj%mX<~q z8TW@OfW8Jbx^egU^n$z`V$CS+t^*9`V&+fzeeVTNBR=fq$YpQ`W-?BK#Vqzzl)-$F zuMfsHDq~n0#t=`wX>e4~M;@I1B%<_4YjJPmD512(rASt5Kd!%}&=JIJO zHcZ-+dap}eDW*Z(T9jm+3G&mvdFp7nGjTvXHudSdQpwzdNJaOGR~pnK7MJ98=Qu?V zhldu-rGm*J5N}0TBaeVyGbdy(E@VRBY5%p-k@e+?Vuedl&}1d=;`iCH2-=h_yBxiq zQAg%$ACWoSVTkkha-WI3ci5n2Zn=nyy7bA}bO4qUzKpJIA@nM1L+Z0sZI^2)=A8>& zT&&CRilFCr$bEC`i}N*g0CCsIluttCaB5ba){FPjzcS%0&E^j#xu=V%6IkkBP0A;H zz|sI%VR`B6<5`a;93efiY*)xFb899Lly~HeSpi*A%1}AF6YCHu(&0TrwauR~tE5o@ z7L|EGORv2McyszMybpfzsi?Thp&>E*Pf*BSV9h`245NrSq4wP7b)2#?4g#(X{yC4e zS!w5eS$6I}e6Kfqn=g(dpZUdAH<;YLJV(w`ZqI01b`UA@!f7wwzQXJUN+{<7o(cW< zx?WO|C4i=F`i$wCl$LdTtEnvr+Lb3pXJ_FQ+WSPj7;v9){4|8XtD1+@qfW;`ihjPH zIg4KawKx-O+%0-GJWa(_u^uEu6frw@mkR`~LoHqgr@B7WAs@;Td%F;!u-(Ae0^mfn z6l*Xaqf^g2=>wh!rQqhvb40g`&#C9F(xIF9Gvmw14hNsJGgP+=EK1ePlYcqYX$M7b$%uxsYhv$Q;CnyDhJ|Op!vl# zi5SkN#5q0@EXes58Ka2R4l!V4k~;9r;RYzU@n$2+Bhp>xS3(KX%-=+T3<)k~^A=5p zP>vWwZ-)k-rdt}J^ADMHhutKGnB4>OUMjtmYohQPE)csOvAl#Be)Xzbf{2MZofrnj zQieLq9_57>2a(HfLygSCJ1JA84SeFOyn`V^FVFKIzqeiRF&~7t zXX9{&elL@j53>OQvj&h{LGzKeI-BYVEKtcKm&Ng|@_qlURdM*4RYrq>`MhwEsJN5K zl7uBNy5Q9sa~JyldJI*)+sh6j5n0mR@5cj`;g_;G``iklz#`YTuYD0lbBA)zU&c`E@F%g786(t8FoDd-y-JQYJU8vV@Ff4r%yv-YR>`H!drfWey^FKU&%50I z_@yIp+85mCGUHzNy4<~YonR^#;ZBgUg3-iodydN(gt9bQIFP%8S)6|yDSEJ1vzl~i zMP>bQjJ9ZSN}06yG11J_A-JUOJ7tGeUqniu~uKBWL7`lsRN zj<++wKvuzibhv|;cW^4K?0eS1(J;InSkwu1kfTi6b_$D>c!W_#6FpE|#BL6P+cdX3 zN;9cG>RI*zTU$};L-*i^t&(O)8SZ>#>Dg{QX^!l)ms=L7CF%aRVJy9?(BF$)I}>ov-ZK`Sc4^z2m;8!b(m}` z`q#r7-lF(lA~iuWVm)+{?doJ!4ns27k_X-X1ZmISMJso(ZXN~VACP~!ckMm&TH6EX z&lxnY$*=W18XyCvk5IY%SXv&tI6ng>(C+q#VE2TRW8J%P`}(I3&%Zw+Fu=NJ%3gz- z(hU?0U}!!t2=Z9>$MsXiVP=&^t=oRg)j8@dB{?~Hrn!GGpg8@U_OP|0mX2C9T9PTm zU$w~+POE-~pR4-BGlJEywVY}R-|xN%RsZ3|Zi}%xD?Lc9wwK_+uySvCSZ@BP;L6oE2K5}N;am8HektmmR<*61qo*A(^mC9xC917nbNb`j`Zij#u3E!r z(^bTW4)~%}1Ui@q4q(8aOTgkBb;@PhUi02`BU=T+_xEBVjno7`yjAtb zC3BrueB;N)N^kJ${4`wi2fJU()Hl;qJsna8AkQHaEztAqh-9bQsRz zvP8_$YECHm&5yijJ!rW}EE}r)7=n>z4(ii@$Jk9*ef{=DxsDYX$m8#NFe6#hT+%$Z zyzeF5DA+nu4i}dJ$WZ?z`e0v9>-I+kidba|(4NhQNyClb`+3t4X()~t9)?`%tbQS- zcPxw<)8I51S9*WtRJrVohB?g?p8{!_(=n}TTGm#QvHpn5?&f6obA05ZE&un%%INLI z;Nu1jAHIm0%cn-4SXhL@j7v~v|ZQdBj9=UMA^YAqwj*oy* zkW$chMYr@^=%GS}(gRbXEvAbB_(I=SA@tc)u zoRDcI=h^%c8s#MvH`)ZYu(xZPxhsA6hJXkAj~)8)5d$!q@A++^K8%$SfxD>{y&al6 z@j|qZ11sqRt7hXn)?);f^0;Q{e2PCZU@d`hVD2WHv$&mcOs*P(_Pm?jMyn7RmSYUbgZNBOl%}vYVsVM1TBjrbv-)N z%&~U);$sa@lrc$Ky)9{Q7MqWZxi(yjN!*@=o9DX2;aJK2Qh zooEqxlK2Jjj!DXDA@u|noJy?`FG4_G4!MyUCJ|SZ%toXOWqv{(!$tXiiSIH?z5Y)B zz9~t@1?FDO7M|xpNE99Wfg2)QjzaELol;D51)=5GnQi>FZw&L_ucbAE(?nFd+)L+_ zlSc3|36TNQ+$mdN9U<}PfW6BqpCQRkUAxyW_4E#PiTYNf@Gh#l+$=;cOT3TL-dY>5 zgdGjICLY^S7c`GQN}D}&Z)m-{bgf&Vi0Al=>F z-6e7!_q+FbzvsI4@0{!R9}E}p#AmH_uY28Vtt4tc*Ka6~>5A~ulsiZeM6MS+dZ0c* zvsUq5v_@WI4`cBphml<2rr)<(9#Kn-oI=?X_%XGrXM^kIETx}hovQqfo)Ctlhy z%93507eh5SmLWXU;1-7otb^Mt8c3_jr}4j*Ua@$x!tZzc7{L*wZtZ)s@v=tafLF=| zif4v~@;sIkaW>tB8c`_5?Te|tHGUFI4_?s^v_=S9yDQ^HxD^%~= zL!x(D13!FUvTQ*AO;8|(^mb&`YJ;iw_KmEh8jQ{JcZqQWSEAO#E2xfu!|(aaZ_NvO zs;Sbgrf9#Iz&Bq*tOS1!ePm3f@nc7M>iAao$i30ZQucb};=Hj1R+PRQI?|1d|KhF&ZT4D~@4j=-hCcWjPx)cc zYv+5xwAjbdC|mcFbxsR|6DNYEuLAM@maC~c<;$}0*6J}%uPpayu9p0 z-|$k8sa{fZhvhGGV&W>bN@Y5xFv_Rm%mdRX~{r&6tTitLU zxkqR(4f`=szKs))PdE z&_1pt?%NY!8T$$@6+Uygt?-WfsO5G0=!gq1>$T?oH&(-=$9j}0S1*HnoC-Ww@FE`L z=HxYM#9iLSiOj=8(cN&jlyds07lZfF_?|v>{_fkgnBhsag?ouWOO>DxdRk>2p6$6t zUO1<4ljetAjZ%$=@1R9dDU0D%@z& zQL;E;3C82b2vG={=8%$M1ECJ!LN0->{Eo;eiYP{W96mh@p)?p zQFkkMd9|5}Y3{7&Vaul=gen6yBOa`Kdfrgw0pYm5d@SXwisx;Hpp{e{VR-sG$)$Mj z#LahTFeJ^Q1V2TI`TPADmz|xfgt0RJ<=Hbm2{^ z>CO2#RE`>nHh?U8yhIl_>4%T(oN`jRw$9b!T=vgcnypuah;g9RSB02edwJOZU}E(d z;_=T8ZO6Sw={&(PljZj*-j|Jr7i1(?B7|SwY2PHWsPmoV;%5rGgtP}g$>lXSVtk=v zyZ9Kz_D?i^7Q#ZEEG1*`)hfw!g^`;GTI_R0{q5a?H@m?%)`P{Sv9%)=+`iD`EYO*4 z5->RC)Z>a-XP=0DX!fTmf=DK_`C?M^h1cmAu;`7KeV*>pT`mIz5%oA+-`XitetW*H zV0*lbksq$~1Vvi5l?DNCvA4NZ{WTC8ThN>$W$IhPNnR!MqJpAL^lLX~^w}^-;+t8L zEjEG8#8!C?_c$^1=(N+56W3(K^5DsaJ|@Q&H?&wMPwZT<;>xd%L%+;4X+zdOT~&j?}@eVjpG%O_EdOlqf8B+xwyYB4ZijSWAHp1u(x6DYEx+YisX~(?eYq4kUV@x zGidTP_T-j@FZ4)V6;+QZGW0_2}M%nE^-~B8JXW;g(WVz=+5QS-IAY|p?`MmJp zUyQg^l1FFM0Yhwz}&H?D#{*+G=NC>h)R9UdkLQI7P;j9-mHhg`A>!EQR)w^AO&pNKNEH zkeE)r4eJ0kMcc};j7=~0mTmiY3ly@QN0+n6n6M|7VM~h!nQ|^4nOU{8-~Y@pFKHCR zb(^4v4~=nW6;eso|E%$JhSSq287c+y=%lD;=+r)gxqtO2%mN?Ubu23OR{bbz@jThV z;1a#`i7>aRn%Mtr$L>=U6rd;&*3LTdgjW!bz%ygEFI!2U*^qxLn5pDf_vMif zU)ENM+>g`MX}^V2t-x=Dj@RJLGx6rTBKvn@m%l-F2HbupGj@GOTR3P>-o6lQ#b!j8$n--a0x!j{zOljU?143Co*EL!SPddx{g@wC3QdQSo z0}2pYW0a&){w(aYBgfjn6GuzxMnQgbxsB%F|KkNtp8d_kT+6Rt3vG0_66=Z6^zIf+ znad2`We(kWGTR$#grlZB!U{hE@%*ZW9A-%A~VH=47cnQygCP{7|2F%QYv1hNvh{oCh-fKIQzu+ zJqewqV=_siO**A|Nsg^&mveK&L65j=Cty5G`6ZVJqE#4$1N+h?qCT$9!6iYb!L;C< zZ1)3^QJ}Kcf zc%is71n~MMf#$JVkB8ytar=QUd8Y{eIAK;a~ z7kg8A9!q{*2C4waNi0zHd3jLQimJUc`k8NA4;#P`ekYyi?3%fZ6J>_6c;8(P=V!o- zZ?^=FpGz~L(+zhSOyRDOJRZA_ESn88)Z6KP#!^fd!toX9QYFsxow@mG zQv`fo_lMz`7WbtcajN^%b)HzK{WDD0IPt-?FJ zQ`hr^iJj+g9BeR~iPF(YFMxXUxykb3_dxt{-5#c62D@1rlCh8#=lmZI=+hquB(>6S z_J%YYHv3&vpHm{Ba+z~JqlOnGeD$0cgKml4bdZtx9XA?-F^Ng~qCvXc@y{v?14iQ2 zM0>o<{TEs7`}{?F^oQGv;vr6;Mghud-0EQU^yn1-tjfUqHth08=~B}HZ}H*}y&1Cx zkFC5+nL{qt<;hDjHVGXTLOV;wELFWq&As|x;UkE8c^@(bnG=d%o%=0@Ih|9JRj8e} zZCvfM(6go;338nBgub7x5=<>`5Q)lyR*1WwBKb7mW|0gl6RkvhU*_j&{M#o2z zBje>zXSpt_@}aOAjQ&PsI>1ys$Y|n!S$ddsK&BR+d2*IT(Lbur>X5)YrN%-B4?M~2Wd3u`Q zxYVeZsSIY`q4<<}DbJWT-J;@f>-2Guy6p*QEFSMomdOGvT)Ckx2(pT4)gChR#eV9r zxT2!@HUS{R%Ul7lV7E8v@I^KKd+`vH%G0r$sY&g{&&#%bJ$cc0R^ZKqm$Y~**J!P| zVzE>-%ay*7BrPxV6ePxKYnLLlGbyE3&0VyRqC7bx( z5TanAnXg;MU^{Pv2pufGsWALJo0)3Cakn@7_T!CS&vB`Y6!j$bOMLGR1i^ajD>)2k z>MSxzq0Y0xKqBC_H_1-90=1hg-P$QGDbH7zyw^K8X#GYAwL6^m>fIx81&~r4Fi$_G z6mSO`_}y4g_6B$q;t2bBk7Vpg$@W5&k%wSZUdl`mjL{lAsDGQC$w0>%P#d4T7qsVt^+ z^Woj6a7YNx#!#Wz?5`1b+14XIQEJ1tuBnsSm|+_Q11zWtVq1_t_FHwGe{(X0^d1l9_@VN zk$6uZ=`jN}b-}FLc86c2d?NY(AnL$>h&s=0gpc+EixEq9{rABVF?`F}mQ>-Ux%ZPWg$Dm@vh30$ZOCEl|_{cA(1flR^ zy+seLEb*qd+Vad z{(AaR;!b=K7XX=K<+a={Ypnn-h8XQe|Z;#C3KAG8&2Xl|)2ryA8JF2u6E4N%N@c`a~`xqk&};GF?614kCxm30bAo zof#6`_NJR69t^awqSemGu}Y}yIM6le6B9#ypCtamPYI;*$ab=nt?9H^2KPvdbqEV; z*Pl|gPrS?YA`c+4?1(vg@d5VEDSa8{3s5l zPdIm0?zo7cSZlj;KO}vUZ{zGH(e#VCIE}8W4N^h`Q;!|*w#w#XmAH-3oOi`uJ;+Hs z{KEFWUQrlt4uo$FWoI8Ye#Q0?+g0!;1s5f2vw)RSA+yC31K&JP`pAj_AXc$>G2Yx1 znc{i6&USk-Wh$(_Y_Oq^6&->@g;+0A;QOW!Nc|BvpChh9ZdnO??Vr8GrlMiERv>uj#e#`(tAjr7A5aLM>{{aHC_=y(Myn9TPMe`P%+k&8Txo0z3 zHDgSHfK#z2TcsXj!L0FY5b#W0Hq06f0wTF`=`RFYNz~Qq5~)%N1&^W18vHw*uvXyN z!$aBdKGDh;5SS43!sM7N5$ZDRa_rkH}5y{8N`H$J;@C!cC zX65F~=u{JgX|NKavMQJW$)SWR6q{`~zAGR;S$j7=f@(V8iftPc+6!Ap9ew$~DRf6D z9uKT&d8P5)^M;wMEqc1^>JdAtaJ70bpO07aY5sX@wvr8F?*>Q(I(#WQQyT(!vMGUqU6L*oEDllonixCVY{GLUm4*BBoz*F}REuUdL8$@%oBsS=&I zis_;j6@$YX4l}fO*X{Azg}_sXEAw4v5)_#f=X#Detw6(#RQ*<#e{XQJ4mS|bfQjL} zH!J*>G6GjC##kl=v>=FXj*M55hj${6fe?O!Wnc0;eo+KbqkdZnFbJFI?LxhNJSG<- z)NZNS&vh-Db3Bb>(y(gM?n%u?Gjbv?2&mdXwyGv^K|YuzugYG*6g;&F+aypGBVxq` z(z40Oa7lMyY_L8K{n4?niPO?p1S7!I%yarA5`=b0#5WXA8*<*)LJQvZ_AJCYi`AC) zIAb?dKA-HAtEyDy>uH^W`on!@zQ2uBU%4I@YJjm#mGng6;r74$-&kJSCb%Q<@9G!bKNSVQV&hlzFca&cEj4ErnpbTO*>lqk;|%+j z%8VMGs~*z0mqPE;#GB8W1!`9O@jh~MP+wbuLwJ}JQ;5!t6oK&ds+uTFlU5v4n*I5C z*+C8s>nNNKY#GvAG-L}}7Oi*P(UMQ;P3F!{J6gTtfU)$ycWcH!{gO!3f{bUN?y0E7 za>eFdugWHC2)d2)k9!SP9C?{^#)dN3(5RRbD5j^uJjD}XZyTjukt~uw8vfY8RWpV! zY&#Fg9J1+z{gm*m+)~JBa0NCzB4+_?Icl47z9t z^iq{D5nc7>rlAc-p9yv!0zp^AcnO4l=aet&B2}MSAXt|1P>GqUuzz;@0((g@e@eGr z0@5^Z_!t7z`vlHzo6HnlzyBQS$J!C@g8JnP#gKOeb4_}Nl<_Ti_&5Zz7I3%VPw zEXi8R7g`)EKf_yLbcSwC@z$;YAos5q%FHZI3~clg8NE1fF8vN&A~~5%{x-x8-929_ z8b54veVsgARlpP(GF+WHm`?f1uh8em?ux;b+v#`92^ad#oy)Qn5|GOtOk~u#BoNyhp((q9SAMq!-`{KOOTP%FZ zyR3=B=X2=-=;JYxt}dCOH+anF4M*<9)`aJCHG5yO0-unN7ZP(UURojYxbR>_z!F(a zpvrYE`3fqkk6H=o(>=X-npUx ziG3dO!+>}W&;|P6i2F&BX4_>KC=lQ*W%8xHf$TuHs3iN(s){JCG2%=cC?sc+x&v z!nj}4+|8r%iC46Wf6(NV0+jr|3)IosStolMNWlnW&d19{d!!a0HvWMp_(-_!aQii~Ax!?2he7vWSDNklL5 zT0zga_M^zJR$vat3Co<0^g$mKn_w&fa7q$Ul-T1EVu=lK~i-GcVLyn!l zlpb0lLiYoe&msDHCM7#)+B3q3E+ZAqYZ zZHe*P!p!#yg^Pjy&f_%Bh41>-xv9{Wd3UpTPtJ#gr({0!yJit%mRPf7cED514?kVw_FI-PnxDlG+qB(dw{b2lGH zomV3vQOzpJNo!yC`>o}@6d$C!ep=+#i7VlmygObuXk2IwfE^$Y!8}-cA5ac-_cPB?;6SWRGvu%<}~fEb?(BKMjj&2|Q&ViZB!e-_I%w$ME@i6*a^ z@bAx8A{6>&MN<}h^#%yH+tOhlX)`%Ze}BYkz;Mudg&3c6;I_sM;L;kWaOfC$_&wF( z6flsskS|k8j({`B6(AJ;#&_f)uB#Q=yQh_VQtf`mr&?2UzeImsZd_WV{dPvV@5ErF zoo?VX5rQcbVdnV8)4{tNbKd^)p(1#L7>}L`9;pq@m}&vo=D=3Sg4ryE!eKuDe%sXn zzf$jq>64E~jUt5ff-9eC{bvD+T4^gfTlt0%e-xIM_MkRfxB!pV!k*oUV?XUbY%Fa8fxYW)+_0y`l;E>8`^&u8z-Z-#eC^4Lbb{A3(92O|X;vY6Qr zgjy`|^7+NYGPb`x)o~%mw2#!a=zrrCRGXvT<4}^Q`{3qlER?j{%yvIRp+ntz(EuxI zQ|}xr&(_*5=8&;n6xt$mH%O+Qxltk1>6Tiq3Q=;j9W%wHa&g+BtGwBMYEW%&EA_5X zAzHLZdS(yx_1-c!+xQmmRM8z71O1mv{>wL=wYUU3oq~knxD8|E2m1JN(xeP^1jzQa zHKUy}HUPx|mz=F(HuD%0o@gghlxbEhv&(UP%YSzi_pOB#6Y};@RN;sS9ZVp`@!D6Us-Dvi4|nfmnE?*Sksb^zN{JwUVFOmQAOBJ=Bin;0@IPxNC{W7~ zYFo_PE#ex{m=--IhYpJVVF4lOLy=AoeNh4kPhTG9N|31oby{_PTa!-t&4qU88Y9) zu%X`L7@k(QnXbfK5si)WCP0`6xFD(mx}&S#;Aju_W9^^<=) zSD%$l8xttC$q0CKSQOh3J4*HBMr3Hwet8b`O(T_Z*`aXXUACOZVnQbbXQ%eYC$Mf8+Rm}PU zx839NU-V6oOLu4HDAk<$u1`(w>`@=eF){^_O&J}j{dOjkfVU_E7%9q5b*k5g zKNS!JHVO({kYF4;QrC0)cCQM{j|@Si!Q)&-hettCB6CX2sv$KX*!i4D3)DQcj184| zJTir>QLwjSAf%id`d!AKz_9k`{8P5xVKr{q%;_gLYq*!lJt$1tt+ZNR!`=L@`Hw%u zwRHzbMai(xDu+|gexjawt#JOC+g{x02ep`IoQV6S7$%D0e-kD%JP-~_2oEu(5!8({ zJ0tB|YmM!7Z--(8+g9+2#q+3G0p^kQ;POicXV$D$%7iYZ+n9(#)RqE`GjHgNP5&vG zFwc};oEbJe0iI2^GeVnz0!H@E^j#He&#RAsQ)eCGg4&U<)kQd6blN8`2)%Mp%q{X& z#v>3Ek5Eo_{0-ipO|PDhl%hqXqKQQH%v@{R`8){MY|mBrne4VL4(?m@_n)2L#8}j% zG=#|-lk!VuaU4~;fB5<7{5EqebeLg z>J5kK;ELo+h3Vbd=uWsXIY%p_}Ds!Kt zhl3w$+70f;H6}BSUXX}rx1BG_eRHQ995&0X7}`6)AdY-4W1|ib5%9M(epo1#o=$6h zv(aSs_XFG&Qm10fOInse^RFm+M~i+lk@E_!1N^#UEZM&6BQH{5Y_8)i4@kGmACl}G z(CBzdbX$Jrz25`IfeaKVB^L0I74i5K&h~WV=bZnfaNr%`wO_e56Vw2*q9AKA&u;t0 zMlxW+S}HKf5+2C&NXEX*z)gp=qyMKp2qHD1NQ?J3X~(zNF#Y_dVqf)#?E(+^-KXax zisxlJFHA6uI`;yP1zIfZh=|QAv|i2p7Wes(wR?)53BiN}BF4OrZZEjIv}{i!w`{Nc zlTo9E&FOb`dk0%Moi$(%x-qe2JMNi|S48(Rdvl zSeVYd*M$#7C7J6pfKfGFU*KeivgQ&rw=Ywy7?>=Rhl5Bk^O?6-gS|(Bsmnj(czZq# zd$NOJS@}pD)SJVw(Mt`2uo9_j*dXyGg5Wt}MBJ|E#ydt8$!h19-R%-#+QUhWi`0II zb|N&o8-SURh607#zcqJ`ZGRC4(oI)eMC3w?Zm&zH4!nxgS$wL4#z6iSv0&8c=Y$rX zOOEvyFMY1YK}jxCVJ>1z^rM2YsM79OuqRQbV$;Xt2~T;wN`3XW9^q|^D!F4qRAv$f zeJ}G-Q`@r2?Y?%El!DZ-aMG4&h1@0squqw=H5$NcpL$}CO}^b0 zzCBQ%dL5F~kvBK|u%&;bGc|?@dF7zA_(t!om3vuYEQ+n*SO2n$|D5)VvtO=G^$N-( zBw9@6W!a(Iq}6a*=x9IQ@k?L>&g;mhf`o`(;%9nN!TTJVxv)?rQxL=kSF}?1$2%(T zhkIf>KgeTX0R%U*PAOzBqrv@cA-#NrVv@pa#gh0p=M6iZ7Qefv5mDd=$=zt4;F>Y- z3-Zw_^Olh?{Mg~~qOm07HE1uYiA($kyzZhiJySY60A;;hxP4OdZXp8D>-6O5S7JiK zK91BnK}3eC3ih)EsXwe>i$7bMt)bD1rEU^(-8uql<&g2hp@mm&6;lB8TB*ZKAiR7F zF!VojFtU53QV?b@qrIbg$|5If1>XIF7i$;27JVt3QXSk$bQ>u33Iv%kmQ7rVPV>(a z_=>?u`8YhCTItcLHKSN~xiLEid8Yq|yl4rGp(0q3)QW9ryb1cyv>#3E))ua&6%@}c z_GT@$e-ftj_9d4p8tfO+A+pH~6WFq|fd~)CG_e-HNTm_h87k9}VcLUeTsbFc?3MEsa&*-S=F&LV?04k9#~) zyegK6ASllFH4>Z15A3#3=f~QQ^LWcOW87^}@ePLw1F20&A8S1$?~VqDZp9N6=q|vb zjBgAc&L?A&R+(%4B`W<-z8~}SmSFm^rj$3R-qM+kKE+bhYUaUTn@%++tw z(L8A{o&~WK9U2}BCmJKhd&Y{!6T1SBWp#hTMxQaq$$4H~XF}h|vSb$?_#_tT<=_Pg zQajLn;d>$QsE#~P(1W}1NvP!29<{@>r4$j6ciu`<)?)yi(T| zA?v1KQ~F~Fm0q~q-AAIU1}@!06m&!0Cvm|(i_I*-A~k~k>IMMzSOtqa9Kwxn*E;jXg%lz;zv@Nc_;GobIqBB52W zX|^PkjkWoDRmOWY+)2C9(`gm8q_~U@>?LKx8` zD?2FtVM_Ie=dHG-dieskGzO3mzC7 z?sUJr0A3tFuc^#w4#mio^%K>Qy5JryhLjhNY?tV9pByGh2tK89*rAoUt_{VNddh|; z<1iSZ)zay9|Fw~NBDAUF!GF|Eim{NOfM-)`xoD}uIP0ch+-g}L0WDX!g^j&c&3x~1 z-)9mzm+!^d{NaMy%8wzL86|~93ict63IUh2C@6)kC#ox6@da1z{vc|>Nn(6|6`&R%V;EQV34 zHl839>j`59byO=W+7oGi83sD(921eJ;^OiYC#;Xer(ZUG3p6&$qZEh_RsD7Y%p=-K zHucZJ$*h+d2m^H4|4?QmNXW7&SX|xHHciPSDm+byoo~oM#&w?t)ee$<9LNKsxs#+( z`&`kiTJSL%!5Y#&we5V(n*EKOaOjLVmt052cDxB+yC6T(7AF5uzK?KcfS>F1wkh*W z>xaOONh!)-@uZGsA=BfDdzGK*569w;D~dMi!73i-Q|)565P)(;rieCM1b&He4V&NEpI}kf13lT#`kkuxHgyjunMC&+#K6|a!w81GXE6XGbxM9;P+F*M#%_3jcQ0(;~^E_-+ zxHQWLJDm51gl;X#l{qAgmy<6Yj&bfc4pw3DL<`=&RO{(u&c*Uoe_hzw? z>0suoE^*+Ci62J`+J%E|cE-;4w?o@KEG(?C*T)hUJB2h5fM(0DQ*QD~2|@r%R;TB{ zsH^S8hwh6Y2xyJps^9#baRWGsJ!z-9kLzoRb262fXPB(d!l&{=aB4SN*y5oGz@1x! zNU5cD(f^uzA~>(eX}Bm?W>AyQQPKFPUaYFAsrgIvS-5!Zz4B4>odnRrkPYnh;nukt zQ7CyH=K-*-*C%T!`+Dshk3oB(1C++>uS%7zhq69ri66ZlQc>U2VUHDwx|psqhgpvm zsAd<%`H&HfVKF|V5wNXf39_cla??+eA}o-SuwS?ZM4JF(`9*G98>SJg{Y4{CHV)@A zz-_AP8sWDuR>zF}zQ+J2)`ac=ec-?}QcfZ8&g(A#M86IWz;pKnLL%TeXqIdB_lvwJ z9yF|qOvR)AXr76uA>NGY(388H4%4DB>QfC&jM@X zR6db@$611BSG9wJ7i7CO-KYKJvVc>diWwu`ek#dpC>mrYfs5RQRIv|a{JWgJrebag zqHZl(RZAV9s9O?7cK<+*?5k^TZqCNc{BmHe4HF9&SGSRFg_4f=G$D$_@>Zo=tr8;! zznt#1>@HLx3%47)MQJyOo4PE&49HHU>6N=9@$IQIbJa|E=ra{l7oT2K(s5@BJrak@ znxVR}-T`f3+s7;I{tHHdWQ_bzGWNn|Aw(C*lx8YeM)h&LmB^NNQa}^F#MrdrI+znSqETx)5gX?GD`1EC zNM!_i#4}Mo#YJNSsgq3T@jF6(fS zOFURj4~KVWFyBfsXI9fnd)=N{p}sHt`bJFh5pY%hU!5iE08In^TzleRL({t%Kdx&r zY73M~{$IHh4RB+_2EM|F3itYgXC8Dwwv0s$Z1}Y;2C2|0`TjZ~HyL*wzzzo3-=w{Y z3YFv2RU&q*x9VA9MPiC?7k?$q!Ap&mk;9Oxswy-;D-(b2&a`@&60};XKje~91_-kR z5%9Un-OAM#BKK*y#)%!8+2lhS8yc*d2P}rtAVu9IJys?MU#T`u(U`l4rV8`^FqX(N&ywg zH)y-H@=!QWumpa!!_O$|q^w40tkPvF9|akHt$TNmCKLVScLmVn{W85<5?H8Wpbd%UE{oAfWrXmp{r|OD%ZV!mUnO z38LE@ZyA>vazU2q|0zItUc1PM^?q>UJzpEv6`z$ET2tkVKu5*)7#_EbsXMD<5!%V# z-{M`NoWl3%xGBrag!xG3@sho6pXg``dBL0H&Of#SB~OZd%rkk&1*g4?i|;C3?EFq9 znZ0a0->Xw>b2NBj?L7HjX{BGR7$)KfQa{(5g1glP8lPz;8;bW>+n5taZS~Y~;hKHn z0EkVjGm)L17D$rrotHU%Q7`f1>Ug8*fPU2fAPF@KJFm41SC=tw={B`13rnDfBXF8@ zAmv7UR!5zj=JV@aAa#Dm%mVF3`PBFZET24Gn6K{Rw<*bs4tL*i8 z@a#&P5;};8R^~P01G*b2C7M?q{x&lsFFn#n8fo@scpfTOB zyM=OD>nlC&;QvG0^|!e6f+uRs`s_6!{OWP01?p!ToGIOwkiIpop4IZ36b19<>kCiz zfmMi2!{z7Ux)-a&1vbRWp`!~_r&@%}n|e%m7KKvNl`-}YD@17|$%+kEg|$j%xi0$Q zc(`gEj9hCuCjcX8FiE!rY3SjJ@=sc}Fqz|^iS&mlD`pY^AI~QXj=~AOo*X=e zVzH9;VEyUnFmo8qXG7zD7RQq1nGp`UDr!vP33lsBNg*vZsNvHoH%e7Pn%J2%ba3J> zFMf&Rpck7V5aK%}jBYB!_OZLXG{Db8LHBe5LR7{0Tp$X^kB}(ae}#pSNEhXW0zuxJ>M8Ks}l+ z;HO08>43f}mqO6a@v2d!qPbqqPa=#mR|O1ygwr<#pZ(tSA-nM6f;~|XBt-wo2h~G+ zlzmp9Z>`p9ZHPS0YBtjt=#=3!%#>4zIWw^p@lc-7wMZbCEZ?1*m1s)>D%&voQIyQEr!-YX%{_QkcaKL?V%jfJc{Bc zOh|J`?->hYHXV3lutnZQcM-qU187_O+{_xK@UxXPnG=q+C#{9svv*d^i-_8=&1?)|ve}lOn}(>!wfew^vZ^ zFYp=@BVj;#-5(>qgZ;aC-i|}!^ZvO9dJv8Pftd?UA!sFp$5DqJ_65&R?NWN4ph$;v zTvK=I%#HH;{W(Qw4u`QA+*B+JD`z}K-QtdYS|jjD*pI3kyCG9?)1!sKX5T^4OJ<1W zZ!tVB{Hug)_0u^_vFWmzl+E%%wYHpo5|lJq2;>bO2n$6oalYXS14X~sqK80wr=9dq z_scI?q|j1)_oIpywPFx)XCz79AB9w-D%s5ue(U03tmJPw>%k07#xVk>2*~eWHxGA# zsraO5q=8apIZ%r8sU^sCB)(7ms^n2_<0gc*<^Go*2DQDs-b3F|Y)Q56GVj|t9o@Pw zr!#GYdntv}*hDxqKfiupHPg%01Ib&s+HDXrlVXbnu3YK9sMttaMNJurPkqlUK_;jy zOpUz4xcnZ^Wafm2|5uOj;aw)c7BwjH)UHo|ig`3TuFB_cdL2Na`@ zjUX_&#`z$NCPAQuzpfd3R1=pjX9@s1r5&#k;&jDMuKjS;W4M{hY_8GH{SC{}s_{)FPMUc3Z{~jtMJV5xj z8`Szng!jL_0{=}A|K=3`$ru0nmX-np`hoNdwGjZ9nT`oh^i&~$RPry8F?GQyAYMPS zMHwYTTQc?Z4hpb_9eoEJn)h*-9ELajGKCVwdax0b*L1Qw>xVFj(=WI;zzk!p5e-E( zQpzw*4WeB53%R;&WwOV4oaaytvJF0a;c`ukbjLz$QE$oab{v^2Dj~-JOo(wE_Spvd z;D2dvx< zMY)b?28KqxJE~j;1qz}K#vO;k#DeV`KQT1Y`%ZnP^!64$r_JTQ7*;U3R-rY@$=s$V zPG^0PL_$J(cxY+V!1!n4`+gHVJ7<-U3r0u+(+`Yh~V;P)jPyo z4?g(ZBf*uRzM9bepcd5Qs zSvQuWV5`1MiHfN+(JkREpXRNbCTssQ?DKn(!m^4AhkQyd1_p-Dz(QF{F;7PsRmtF6 zfN?SBuYz|J0zy<1@#s?h%VL0rJUeVKxZ+=zmeg*+wL+*H^6e!ZPqZ>sC; zH0H`L-`C^p-~#?|;i3z_tI+rF-=TS!GVEoMxR?<+WK;Jw^4d+LesAQW_n{`{hwqL3 zQhA}+dZ2x8&?D^K$QU7tuJj>K%zli(#l^+y*PRj77Ci~KXAztpNe!DrU=7s;sJ#|7=et>7=5h(_5ewiIUFtcO{eLc5aZfRC9jOIAZ2omlEk1=)0XCErp=Ad48Okt z!&bjWJ}0VTt0p=M6)=at>6c5F@XhyB+F>9;A$Eh*7F&MleVZH0>&(PFs6{olv?NIo z$cCz#8jhj-UXJZ43mFL$0Wtqc9barpn09}UciCCELQ1hmiud8!o>+g)pSSqe_5461 zD%kv3F~juttNr&&PZ35oLR0n)P6ehX9cu0K$)~D7caz_59bAw%g56k3sxU(-{&O2M zn8##**b4`8Emte!82pbmJ=im%zr#i09sScGR=+xy?=wR}i<&+@J_m&O3Nau^)Y#^c ztTH5lzFBy2a%xIY215&CQCRS+1MM)KS4;}VGE1gHbK(Uo;axA_b_ws1<->(Wq_nlQ zRRg1EPfNFcfr+z!m~sBc8^pC55on~OsnlaZXhl^J$u(@;AgfB9TkSm++LN>p=58|)&taz@n_E~kb1{v zED`_7vw5QY?y)Fnl*~TBhuJ~x+JAEN#u&R@<#P)fjS1VfWd38fl#oHneDM{YOtk2cE+0Rs-^p3v2x)#va=dM9$E9(92 zfUMM{pmv*&2mY^i9oITf5H=KG*ve0VAW|1g4}!RKu{#fGf20pZ5D`5qBnRf=7&dvk zHMMJ7uw>-y(+4Zag+t^-SBbJOKU6T{Zy0L5I~7%7Ri;YzUe~GD}cO zx9n)a@F2>!n|4{0S+cxX8Lro77!i~m8rxgBu@_-E1Ho|l6~$&?vP+qf$C~9Kj}GC9 z{NG;b>W^2-s^a*^P5t{#@H|JkMu%U6zA}O1zv`sr9(h_6PG%Ozcu1Tma9}|c7|b7f zz@L8n_)%(5Q|#*QKFOuI&I~m0YJ3x>=a#@fVxiW&t+N($p_j&|@CX;UsavIIit(8> zA~Ro{#(}tMo#H(U+wOqv6D0AjhN)}ahR2@ENxFCe!-#+OBx2YYb88U;V{5?1@6U9A zs~g^`>AIY+_NApxVrD|SGUZ&+X8Q4>KS&Im{%NN zs_3YDmgm5bR+$uoY73?NRQUiPMySAK<#IBI_z4Ju$y-=YA-B#;r9JJwMvSvPbERu+ z^5w7nspbF+cW0!b!cW%Y!Ic*cB6PE0rH)H6N*w5M@?U4>y0Jaeh_aU81;kyKiV{)= ze;@ZVMc@QcLmS}#7SsPRYAKX4`T#?zR1Rpwyh36DX}Yp>vCPNZtg>7lenZBA=hUGv?7GL_!xz@(Zyt*a<^0o`~p}T2;q>iH_2)O!p7J&A<0*ae-7x2N z{!GHdrvDv}Z-FCJFf^F@k5T{oQR>G9D)`Ftu$e_@@eNl2gWAAmxz>QSW{TZtrC%`~ zu;o38L-*t1;o)sOgUE^SOUK*}+1JmmJmotyxRi5kCFq(u~_!8QOzc*#=MbOAd%jwXzSy({WI zjK4WzO{#%#fP-NdMREaD1(T)v&zZq1==|LCx$_Dkz2ezUF~iDGdA$RcA&LwHDdf( z;ERDq0=*W0zq;$y$Ub0Jqy2kU6r$`kPvvp8Z%(mc?KHi-KI8o>%A!F;ZqB@ee(NQ* z%5~OURpxsPVBWCl4w@v!*G{wWf^m4LVo;Q(b(Gh7?hBXAY4M+l*=}BDKf^W@o4rGe zD7ZQ98+M5jn`_(0^Y!-O{|R57X()g|K^ki3>ybs)&L4hWM zNrRb?@`mlbD`_8&<}*b}ekY1>jNm+qOqns21CYqQKb1q$~ zIbWyHBIYM^|1nD-`38^!nWXjq12tcvtv+8Sb7TVphveQNlLMUGI$LAk2lOwiczAd; zl|UNv6}5b`zU~p4$ETCVcER4me~T%=*nXqS`RB&U&?ww)ILO~V4{g+Md0Id(Zpnw4 z0)GFKUL+p2c9sAasA9}l6{||k7L-0*Sy{P_9!{<~joX>~YOOv~ZK+cCd-D%aPv90wa@7%%A8f$=sAL@ zUR}M*Iz1W?{P#fipHEpZ0@A7#FCQl7iK z_nlnN_j_M|;>S7r+T?7UDSm4I}iaA2Fe{?&Hm;5^y$zQK}vPlW6pa6 z?Xp)y*_l(Q0;L3~R}SkRg&ha$5k6i5gQ81hTxSy`2k9E&Vx{C_{qns@HI2ZRW%w$K!t9|@n&2)Q1{9T-h`yB3 z$Kw7KIiSwWz7ZCYD8&w3d!IWZycT6kb>pQX;j%wZ(IO%L7N|z2?k=p=H(1xKAO_Xq zEhG1KvTZQQYxvw|ZR!x4-$aLaVZZF0XXex7&{ZKZG>nJ3=aL^FkbTM68FYmv4W2L% z{l-2-O9UZwaUu6ox2@L3%lNoPGNcAoq7N=IYOfr4ne;s@=Lc*#%y+pt*zUI_NGqAX z=UQS@H?&kXj^xy(+r0!#Pv-#&TW;o>MaRHAP3s2bA0_B~5}|%$WqJrC8|MT6`pr|m zYI2|qwz`mW%ShR1smjOie2O@bUrR>X0X79d%~LStMRJl2}5W5mJV)@A6_rPCH#v9wqAYaBbZIQeMsyk4m9RNF5K%a=E=yHUjMfxhRt?21mm} z%jCUg2eQ=!+E`3Kwbz+3n{<8w3Ol{jday=jPB27<2wt6Y9ltkc#G-obZV7R^_H2BM z8&jAJy#GNV`uX$crT{+xgG(&tI&zIN!UD;gB%SBavom-NcoIg-!9=IJW^H_*XBP@T z_|kNF1tlo$x+0LwxPqA_>*tj_hWWgcnZ34KI~w%4-rR1#U42Tw(z>=_Yo)3d=Q{qu zap%5Dm%^@WvA){}NlcD_xAl`^>tmW@O}FLwFWn0bdoQucyUFkNwUK<3T-1otA-low=Vme-@qp=~RlcU!XhL|4aqgAePyU(7sgZQ}y-rrmZ0t zvubN=kL^@~mAzhUytI#S1afC3Alr|1Yok^ z?&5EJ)t@Gc*o;Mt4i4{~?cLxTNK#Kc4Aw?wPbT#zd=nxRFq%e7UCQy7z1Kb7U=)n< z&ji2!c`7em08Zt}I&_kUO!H7&qmR{n{3l<5gPp(P%3^n-$<{n=$0|JEcs1IAx7YF` zumSCIrTWL^Dx8xJOLC34E$KpVyPtbk-|bNcD8twrdPD-5in5_hn|vH%Z-@!)y6q+nGd-43}RvYx7dB{RZU$ zs&jdt;KnyXSwdo08ujMmy}utW3Zwj-9CL_U^Cjh(U=XOArjD&EzUS#ZuMnr`jSdau zKp!e#Uc#x$oWJdfdD0=b4MS%f(a?D{7b4~(84FfG~hKDL$aC6My-$^u4LW%0>Z(mff(NLyPJy zFq2p;W=HycT;tNwf#YtGEXG|=HcJKy?M#*xDEM^zgPzh2CH^?n=!(~<2x6-#` zZE8(Cx5JTVOoy>#UlTNr(Q=LVWBFGED5@T}ewJg3C_0`=6^~5>?Z!NKgPVkTKe<1& zcWxzsX!!3e84?`){2xnpneBmQaiMj5OqeDa`r0kjf)?r=$5 ze0X5!es^p%Y#$}a6-t3eM>bK|?z!#H>NObX7FWGHoK-0T8LvK-lDNFyYjr!kqFNn|}xQHiy?| zQU4RE!$8|G7GU8;7ZnwalUUl>71yUpfQKUDP6am1UmW9JrQD64>yU8A?)teLW`|Ly zG8T%wr_J8G6M1!9X<*z;v&}JrEi|)OGS0zq&N2jw{G@*EoXHlzSjw4j`C=0z)EeQH zfp*sD4h3WXkLt-a37W$LsmG|}YqnNC>lhv$nnwqL?6)Zk*4MH}@gF?9Q~W+W2)T_= zcAtERG5~Ubm^f`GW|7VbB%|HYf$z?T(t7+Vc7V=6m+5I^3^=(+$XWY3`G2k@zkj#s zJPA^)Nn9c-klX8gC=uZ63;1O40!rch@Hw_mMaRs6bx#qll4?s5Wz^}&K!&!(T z=oQj>lX_GVg^j*X?`;5)c0dzf?3w$|g5C(FNv3$>;=5(pg@^RFMEhdA z;Fu58E&8k6p1Z4s;d8Y+qW#+O`S878)#(rTRe~3y5MOfu1do@#TMZsvYjyMNS+xbC zgPcQa2D`2pE7Z7t3NEufE=Oj=Vf*untF55#Vce)L{+I{D-?&e<-PpnbsfoLC47jvD zOFihf8}g^Y)5=&qQNLf4S^KnHun6ju~nPM|On#vsyfyfQqg*m`*nX~<%-=u-@bf-4RW?3>*;#$=|vQ%B{ z4Q-#EV)2W5O(+S0Ow_}}qm7Ar5$-P?ov~>jxyQgN1|aw^9F7w&1=1JM_~1o@T;}r2 z(Hz2@sWHf?=Npv`4Gj_WI(*2MYj-I-kZdz4$H>TMAS%)D8zs&I`Nb8fo^2hS8=iAd zitZ%JFigG&FmT7CHeTgMFxGGE*Jg4eVEG6)Yri~VC{g3SjjsXDb+txMl0=yF){-gy zsLQc&m@d3JKQH>h&ti((RtKBFIEs{SW{bT z1rA1`h#_I%l=M`xa4thlFE$+9YKI!E#;S>!;oaB&xPZ}ExckbM|?)l!t?rm|H4sMMJ^)jE_wr;|{cgR)6 z0#e5PJw40eK6z}Qzh8y9xxMYU{%Bhk>KzznUr`5Zs2=Cpce^&)yhK)s0~I##7Od6B zHi>@IHL^VRnTB4>25r4h;18{<`^Qu`15iF-=OL7I zap8eXq}{2@zmoU=w6fDg7n+16s8wWMif#bI8P)lJWss(wk?a*$0)XD4T_!iEr95vV z)B=5hy=dQdu|@Q@zopMvk)VXg!}2I;VamcP&LSINVmT{YFEjO7pctY=$_B;*O~uFD zmXYGXsK0n+KFMG-X!ENHxm|+D_3PJxfusC-dbK=Z$~xOOyF;6`$u8ItQlg|ZA|PK} zsx`~}#(b2Ya3ipFcr|=w#U{&9y{`kv(tYK2@<^cstif)-jA8_@=5ef}&Mmk8?p&Dc zT#@Hav}^Ivy=rvPF&34A&A=$h;qI82T(8t|9Q-onY%qM8TityY-5uq7D7@X+NLB7? zpPS-|7waC>`E0Z_T3~X5LVILJG!+-%xEL;DX&q+pc53rOc+A@5u-+~=p|sSupFHk%4Ms>W{k z)@L2Njzy*vIT}^yf)8dL50bxhPuA{e9k$C9)_SPHx@$f-MS$+y5E8kN6v z$yHZceWQmi$ye?Ez@$!vII{yAj8J~jH5?W$$&%}>IlvZCB?VJ6`SlObloa*8^<=ct zMh-{Fa9NM$gsJ}!Fa8yMN-`u`_XCK+Ei@p?q6;8O5gIfxM1M<@UL9hUxc9SJD%16}s5^J6>SbuPNJ!OIC$XT`P5J)p|XaqD0b~hbE5h9cPX&KKZiS;M;R11&eHt z$pI~HfRWy7eGQI;D`Q-2>0r3A;I8jR|AWd*nVF67x300XC=D?0!^+9~$2-h&P!%mj zJsSBuGTwa>qvfs~n3U1dvGOzgfp1OT#NJr(5I)xALg(TPMRlhBQ5a{8pwIpn%y{E| z94o+<&)?OSHdM{3+kOuN#R!@Fra1p`ajO}fqRb|QRv2+Ld>}dvyThXXqf^}MOQw>T zaG>v|*pv0qOy;)sTwa*zD39@y%$QM#0;`ztN1Bu>a~W?wNaEg>uv#bJ=9z957Wl;6 zaHQj(Tg6^qv%4>5Tc$UBe~&kb&wt}Lg*hKidBq}@;u}&{_w_fBZ?lA)jjNdZ^Uvk` zf^F7nYm+M8<~(IyptU%>V%0vmJJdYvzK~)-I}!T0RrH$Pwoa{l3G48fxgbASuN1Ms zNYDG5AEyUNY&j%6M@|@v4czP(w4<8byr`6GEipI=e!Jx zjyyzCq8RL!mzS@kozCMfg+hIdPwn>7GhJ<_UJ1(z-;<$7(>M;sRU_xFy$%vm=$W2= zL?BiWpw^4oSn6^Dv~B-_dRp41|K_&$bzF?d+I3nTEo>xH55^tlF-5B#pCCRY!1kx- zzv?%bazYxy56~*Mwzh^4nn~#+jG6WbE(rz7q^~X4n)!_ljlXu&_fb~QvQxHu;hvbw z&VS72xUu|xg`gxLKN~MUORT<#PP2frNQx~8(ayl{36MH7WpXQ;@`;(y81Jrp(IbO0 zbn4ky+Yb?%P+&%M)l-v7S-uwBu5Q(%b967%V?~|qV-E9)@*y?-wMwSA(3DDoR z7`}fvbEcDCX;#Jcm9*JFJEob+htiO07x@uUK$NAZHq=YsCL%tiwJI8ZFvsEwY&9sf z)aMEq`_knlsS3oBze7Vtk&SzahPIo2Mdk#0?)HmxK|405&9k|1bb4=u*AH;Mv}NcM zetB5rBC9AZFvIS(f zmiyhzJX005{^V?$Y%H|$_Y8m^>td$-jCG%o?5_!3tR^w%s#Tn!)SRXHbk{6>`htR+ z<&JRBag|aS<(Gs|5b3{nmFXozh|0@O*dRHmKK9)s;&PHGGwAh)d^nv?3(7(*cxK=DTp|7i$)F3F!S; ze#S}X4GZBM)&7{Ka+QRN2;$YEBrul$CI3#Tv0_+O#HH4tC#SrHw`GEXrZ57ZQ)7B%r4_ z<@{!5w06ER;t!L<)ax>93(Nbb?V3AxQfRW(DpP~|S^s?Gp>a1i6+u&HzBipO>jnFF z1cU~N${U5b7{3NvKQ8#Eu5;&bkMzhCq3cZjDwV7JH4PjN8V^=uQKZr|(D5Eb#dpA9G%>|M9V3VQ5vvu3DwmJH}yDAK>(d>2BaH>gQ3>^h-3eRSO~ShZxjtm)@c(fpMS_ zkd6~@mg^B*D>4^=#x2W(Pjq=9UM<5rSL<%cbIoFJ4pnzV94qQDbiM~>X<*Y5FJvQ* zVZa^qM*ILHPXhJb?R<`DNu`h3$v!AzI(~Krqa$c2Gr0)vNwoR!q;ivSqsc{a`ua5? z3GJ@wk5zBoL>dc=`YH#U6ZUFJp`4p`3H=;@O%M}RBSI`>zx_a%$@!Xz#u%SjXy*V@6?o`5{Cob@gD zLBZas{d;Bn62Pm=JJdSA!V5HtzAo(4IgOh=&79UA5xsk=?AD_Nfd)=9)rQxd$`Wz?W}hu@GGkd>;@a3jlC#G*5dc#4Y@{=b{2i9|13h}J_UH(=jhPJ<6aYK} z3Xjr=HL7lJMCU>+&`gv;a?vI`x#-JTjJHChs)J`hSRMVW2~oiJYa6(C<*jeqE3?q% zs6J6vbq{9ipm%PI2MZ{Rnj@Q01kfyM$g;l)sCh-!#wTQVsW zO>F+qK4HZRt?scka*mf|<#bHgUH8p`FWnhTQVr~rpUfp${HVc?Q1;xXJrYdnGG2(?XgV!ut+0_b8< z?S`XkeEu^=tDwAo-^D8!GT5=%$0@6$tyGWO)nENLSHEND2J?e^v0LSLV@j81D;+UVIz~yM-jp%gBr|E0_SA@quQzPWWArN+xZ-(` zVUnMST-GkVUU!$9TBu$m3+jU5d;LnCc0cQV(S*vl_4;F%1s}?oJh61xHaB04blBX_ zB}rW!Qe4?}4?mx9!$EeX*eX2Mi{1m=0w% z1gFYgT}ewh3h_2|HEDnC+R%^@o3U!sXB}2Ss>bZ50+z&2EUHiz?oZ+85soO!oWyD# z)TCo>-Jxs2iU&DeVBV{Dp!+22$sG<}qTI0K`82HOT7G4`lzx73W$EGJ5?8}Pd5oP6 zNPFkJ+2eAb@o;`V!5ZWFboO>EG!vMWS3%XSs1hbh<^%P>(NYvMLtSRpf46n;_(TD_Hh=U<6018_-Z4us=YKwg-_ zQx=l;1$J&5V($7L5L%2cY~ zQK>T>tp{cmY<5WQC_c(2$}bKs&AA3v69*2aghm4{`3^>Mcs{TenDG zk^`ck-Ao;FH855F$~o>S4KSwq-3HahmV(PEO798tB#=zjki+Y*q2WmSBg*1ZAAX3~ z^T^=2EhlzOXl55Za5X~jaoMps>P!)BR0pd__X|l#+*=cJUNKKuB!^!7Xu{Y@H=ieN zvv26Wdrs~FO3f6U*Q4T{zb4dLjOGM6y=!Q|86X?$%HYo11$rrmdx049;s@G&#ccVV z$^}B(5pv6Xsdf90+z-Z&FillK*KcfdGQEFShh3nHLu4pY7w)gB#@EzRl^o9%@5CkM zXOMF8u7s-WS9jA5gD+qWwcHxTy>O5Ao4^!9B6_%RU3{yZGvq?O1novK$m@-Do_t}( z#StHUcGdd1vCyv8m?qN*0D-@0$uRD^g{sdhYN1RaE9h6)Ec=vnFygu<2;0N$nJ*`x zR=6e&dV|q+t}f-h673tsQnjKq*=BJ$V}GoM+3Y!}33RRc7MfEu>;qbLY&aIpEI}VC zXL+94s&>JUEo5DGf3ys;lzd}Ie4s(1KXQamw-GonP0Sy z8{cUi4F62)*ucN(t?8X5usYByq6YE)$ZnXpe#66+uIn+5jTgz5CQbAE2Pm_+CHRZl zU|O9zzV3`HGn8p2jJpLc_8#4W@8hzD5s<>H*Wo1@B+yj+QW`ea@?4UE=c;L1ODFS# z73=NT(Q-OA4rN$H)Cd_2Y9lDtIzW?ci)&89zHmLSm)dQjzM6lWa6UUq(rfNe@V2aYna=(d;jslDv-=CKmCZwkSQoLs zv6qX8>;pVJ0j?L&e9duz+xxS~%$yhVW*ra9YU7->sCQGmL{^LxbIKO&&H#%!+JOi6?nL0P}}Os#Uv3Q z6cBt53M~rGgchTuv{r2?6H_(^L%Tv#oxgcSkwCw_+l+*v^jvhMAz3mO+x`HS!=D>I z{Y6VwT3T`CGCi~Jj3{jkouP0IQ*$SCgZWmy@4hrEHA39;>k%ywyV#a3jv7}LjIFoH7HPhMtYbxw(L zH1%1&EPj4zA(8LawwR6~e&-02I2;ib4VDGsTd#`wajm|0>oC|wt#UqZ0JtUc4>P^g z{>B?QBpNAvNMO<0Y6NgtDntF7xs^L5nzfTM%=m!(Tilq5oGLJWXiibiyHm+)e48A4 z-i-3>6Y;3B18vcNBg9}eN@}Y5KNG|x0KE+0f5!1bbb4eWi=)jOjbUT;uKIKC3(L}7 z`Jv$rjOV4<3h|%)ut;XZd$BOL#}ibA#l934yV#`)r#_bMUDI{CZxSs6(cPiMyq_c^Gurwmpe#U$I^o8gu#eOH$+ zHDA2(J`HHTWY%F-TTH;KC1t&^W3_h5c65Dy$Ud$REi#)3n>1wF{K3O#5cWkmBm202;DYu(I zp#pen4Ga(K*fj*42)shGPx3yPH-&0NQQauE0m%WH(j?+q9qgN!>!MG;m@@bo2dG!r zGIM2!qMlH97!O^t>eBva-j7k(o*A62l^)B3*#`WTwqs=ucg%bJS_az^z;2FdphtJ$})0 zw`yr)Ge&!R0)N9HE^oxEu$iWI**=MBpG&3YOV`2Fgr-LgcrCHGa9~uWfU&Ts$feRU z7EPJm;5w@4?od&t({*3g26JS$!o>(~m<+h5@@RzQo5eT#8&^8z)+0`1`i_@!N0ql~ zYjIw-s7_ZMQ(C>LX?2i~Q8hM?%-mTo*9nN?=yo&mKkss&e7pJ%uua4%He{*9ji_n5 zyhzWUzC1%VL#oLl@hQ9b5}i4G51FN!tRJS(6~ZXW#DE}c`-<;%ecO6({l{~X1;u&I!m;WAm9P&n=7Ier z1C%Y@gVuj8TV6HgseIQP+$%|c>gqbWN|{dObD@D!K&yyYqi(QD5zd~nfuw4YJ<>0MuN>u!1{5#+^7T^vSp9jv%jp;bGv%^W=>RiXHFTtVBOl&`Lc(3 zzU|-vH$1>gDHnYE2&`+KRL!yl_G6>>&Lej;46&Mhw+}39am#(vila-daQ{JIUgN>s z2W$>AL;nX&zwozMi0;lBGq>+S-Uj1mCQZhOUA&L;tVcU9q~2um7#rcs)c@LfRDVcU z0H3FT>6EK^SFZlFl**Xj@BTHRFF-$+1A@6VW=dMJAvr9ZSawa#oekFU;5U4M|EYP* zrA{VYMaCOV#4OuY zkF)OcJhO9K>GpR}25N>9P?iM zLF~q4nt)VsVcmNvwc`5-z(w6@#Sfbn9=@hEoaFg-M`1y4`DhBcjnIqF2l-%Z*1o`w zXHc9$E`6nyj>AyeSo1@9_V}kv%W#IcrVZ+wj&B>t%?e+w-P~T5(e}RXx^{`1L3aPO zAOjET^Yw;~=emMijYpxO1%e%~`MY$5 z+1Rp#gpHwWTy16cvk78Or5Q91b7nG59o@1=bD64Y^XCDX8-N|f{B=ceSFs@^3Rud1 zpVo#_&$T^UlQl1Ib^!yK>UjH>9Ew;uAN-zx>S0k9-=ZzA`S$t;Zc{6EwdK{n z-2_~{=ifPcv>JN{gK3l&fbbWN)U4W2pUE~Mf!gJ{8(3u};rfJslXSorPS)s~IHpikws{~`ZN=4&blr5paa75!MbQhH(>)B=V zeo~hNXfTLZzx%)tKKHyi0t1;cT3SZsxwv~QuM<%&l~6p?C^}wLz6` z^3L)dtqKskXtWfb&$`C+fYDq0{{Dm>c?@a~?O?RzGpwfVYq+8~%-2qpeVi_ZSjzy4 zE^fIa6S8jg<*nI(E(s3dvj;`1wk>F08cE1AfKT7PHwALG*DkA)N0Kq z0`sEQgJxNOLxTAk0;Xx$-`P&qlmf#)aDbc1)w-(!%2tf#BoukheBPAF@yxe)N;*5G zf;DNzdphgNslQYLmhQMlwFO1lQ(O`8uM+6dGhF4HcY_(3n2MNVLB_8~^~2D+Zt+O5 zGrRx;R)3a@zXIHu58sIt6LKm%fbhssF^|q7TCFX*+G7$Wsxb}sXKZnxk%xlli4gKU; z*&qk*OM@K(?1L`=V8;xrL#wKB*gnm?eSaVfDWHSA2614H<8~ggNRD$D>A~52d2h#j zO(@j#7VV>3q|^!M>YVWE2`JT_UIjU{erMe0V69$HM*^+}id-A-mw_7P&(1`6LFFRX z^n87*yfz-9wfYNuY#sKC<$N-yhx8=<1-*JfK9g--+5vevdew%Sn54IdBg}urJ#3I_ z*fEtWd3V@M#?i*45^p(~wUoa3rK@)8qb4omJ}rl504vUCarXtMqMDtDj;H%m_7{+x zbxPlsFG1a^!0;08{ydjekBu_3N?vux`zj|+c`aNM?RDPY#Y@~fu8TYYP0?MM-$~~+ z+o|r{m88Dy50k zE=&GA2eFpPnnS9vxXus2ioesYMxRI#v)m%J!HJN4^@#lC1;8Ck>kU`$P2%fwGyaMW zx%%%6EMHAgNkbz`3kw*5!Qrv0K$rCJwFh;0V8OXn3`TtFdcE@+J0>jXC)76j9cp`9 z<97Hw>WohoaIVX)LF&K04(%cnkkj&a8^xVAZQ*P)C7D-Oh&Mh*`0e^6ryXR4UHyti z{lnfF7#imQnPIKJK%cesaE;bnFD)WzMt1Guv#+=shql$EQ|` zWqp1rw<)?HwKTVGt2$~S|FC0;g2=@zJ^Za4cH=aLaTMX?IRd4N!EYpWZZb-KVIqON zY+98aMm$G1nn4qXf;|pkYl0N_>faoGrQqjMiDTF&JF2i_=JCb)ou)p{e&;!H=OLop zI#b5X$zfYK-n!64O{Vh{&@Cxt4i5i2t)TdSVueke8K6Gn$^~ASVVn7@f)pBtrqm3c zQT`y_#W1dViPv2u+(CKvNtw?>7z{=HAtK350?BoXRoRr~2(Ai)daxKJmp^#>FKjUL z>8}mna|m%mO`L4xT9s@3?1D&?BM%wWcgODtW0HFL=v~wFAy6{Q;VO0Gb;e(!GY=>j(^MyQ%tvdxrN`e9Fqr^^bGws<6q*L%5;dbKSn$(hutwb`dn_ zshx%+%o^S%soguaa=0BKn>}tCQup55E_3UtPEwx@FKYa0Zr$<9LAUzhdNVe&U689F zPB6Ff-4)NRQmb9XeN>~geuJEczqzc?YnmINmRO=}@FSQrAL{0vS29z4#Xg(%)fvS& z5rE0nUko}pWR$4IO@eDC4EI00w@cld!GAc%&()|!f)M4Fje(3ggfO?aALzv=blUkj z{kg$<)$c+RMa^o>au*iUO;CER5YPNIbH0^1M5a|%PoC4*K6XG|-zy_~D|#=CT0N0| zma-_98>tl;b^IVc-?Jc&FStrx!xG1>l#oELJUgJ)>rbrFd(K#Z&WTG#9+&&?R5r$( z?^HHbbM)$#RSFj{v9r+APVPhAs*v;G0!1upfAa{O`M_IqJMG?Q-O4HF-1B-ZhvO__ zlP(KY62bsf89W#D^l)5-E{;=oR@3S=@Mgg)qXp6vA-)8J!}c>vKxJ@`gXS~i>9%A6V`lY13z^#!npBvx{N1+iFVQ@F58W9*n35RvtN zxM`HsyvVnCw#1liTV1oY#(-iBsxl+UZsY5B^7tUPW_s5?!;ZI|!1($n#gEfq`^=%s z=rY625r$Wc+?U~R;qdZ5CAJim-Nz5Y2QcH4W@FJi&@Lhn>YfS4ukg8jI zXY$K|g_&G}kdF6I7jvDbFMvKE`p_25+M>QzS7w$dd@AZeJ8zwPJV|=a`hBnzulkU- zcnM1AI{5SLRVzzP$l5{YBvSgmmqR{z^< z4h}zHM(HTPNcnE^(fn8QrI617K{OHEr!JP43RBz6!r?zCaNKQZj$sjPcAJlMCqtzq zOMM>t`r?Vj*-{{8vwj2NpXK=iAL~aeYX4Uj+&*({rvji&!w7vT&Z!ZqXmmUPVd1Au z4V=p-r<7|fVh{N3c#HSOS~1sl%?~QI2uY)9yKF|I36K&_t#|EUKZE(WP*vL+?szcy zkTaGQT-flgux?H=v>VOj{`90tezP{>fE)vVcM|VEYJux z$g+7 zY^YNwvn)6TnziRSVOUN*HXhthaX0o6Wm4|zXa%4tYc4~wyM}_vL4H}4v@5^?0^An+ zF9Mv7{?z(-oS*qrS0|8GF7&d}PwpQ@ID%1%^#|SFydM@C7J5@YHx*;&ZCFj;jGtLJ z$x9dAcZp%q`R%TrWB}&ih&5~N-A%Wh0ZpaTnx~CScmfyd3ye!viXxg3+6&s?U<0?~ zIhoHf3#$fMRI2%`A_W!wk_FM5JU-?+?Q7S9?z0Io6Xo}ka5BhBGFvgNT~-VzV}~)W zjXO~m3yINb_x>R4{;qKJ6OFnVkOyes$LVg{re8PBeFc{ZR0q^55~Lu_@u7)@<~zm$ zfj7{U=`8A|e6_li(1lKNDBtBgxL@`96F!LaX6fB|R)Yw; zM~~i2_#CWY?uZ){3F&MA8~%~RjJD(&2~%Vo!=e88R$7Z*WeDVApa83Yk$ z-`^n_-31!R1j*b#8=}b5Olh!j=x1yR$9c9T9EG77EA(m~Txe1F?ugQMM_I{dHrNjF zetUcS?*yfUrFJitCLHXjrlx@)>Gh8D$-iWxu%RMf{rt78V<=TsfpFpo<%hu`N? zMaSt#7bV*Qf{mvKaGcNIXtT@`ziSyH+=T>fDSa!q<>W0=fTaTkAfta+qs%Zw@ETG% z^yC0?Z4+`EOJiW)A{eFbetq;zi4CzH4Ppwp!5#^9A~&H-3C5&rEZj=)*KX4iy?f0C zkW*9;1U1t6CLa*GwpC{2{Wqn@(>Fi+j_xpG>}>b8>QtZ|T5(5PSs4G#{@3lU%UXo3 z!@;TH%^&TVkG__t{zA(;Jl0et+lOJkbG--ZeKs&JFH%J9&u5XUO8nH`?NLKd8-55t zbq!!YWT|6Yg{LvI!10ydqqpe_##RXeQ475$Aj!a@u{a)1sU5FW6I&zv`<(c4x=AH(1$j1vGsFdkmkBcWZJbu$9V>KH=K_ z{NO@sL_mY7J71>&AXu353nKE@)by88lzTYoX~Be3W6UiDK^Y;i2-PbiK%p;Y zPr^IJ#*!Eoz_zoIsW&KE-R7ywJa=uw=T2w-5W;h?3(4qrO{G=Kr5EEucqWr=0B!F; zyTppr#cZ`&<~%#aKR+&K7=eh!bV`#%J^1!ZUin*(n-!Wbr3>AaF6m*tQK}P=Ga!3V1n8a4{OG{K3dKXY%`yruAay+DhN5=R!e2Sw`X0WFwd;fMg$dKECni zRzOlG5%4bv%IaFrEs4}%wY}S8sys|oCeg%d$Z5J(>GV|kq)enn&V_bay}GPHAkiC9g+qQmt1UvJv zNH_je$d7H4E&r@Ix9b!Cx%}e9=jRI6;<~CCXDna$>X|&;maTbZW%TgAc4ybHtIc-( zFqPYjNnr0A$=Rcd{tQ0Mzasc1bhpw0ezyV!4-W27zOfIS<<`vk*e1(D?#tEwO|xC> zha(DQ%fCCK1WZTE^Qk2cL?>V`D7^wi@515w(Pn)Nwe4=$G69Mn`VxS_43Heqrdhsv z$;Jb8fJmJt^rs`1-xGpM2ki~cKLd6*Pw^A2`vN=53~&P0wt57!nk% z9oA~3tO}Fo!o7NPuYg;@A=P=HUq+y9z?LBK_~P~aB&pJq1?6-_&9K2ZUI%wBNBIEd zM5#dGd9_&cwW<0FA?L}LakVYl&+h-kyyoKp_W*{|H|qbqetlQJOEIl@jPe14v>wWk zIe-&-%PsvQa}byC_Ra0vd?2l)OyQZuceU~iCY>MLlGq4raN{x+9e&8Q+mr!&(QhCe z5?CmbtF8174cUOYDnsCnz+**SXYh8UdzfZ!;{Lg_XS;wtaW{b<+6?#->9pT~O&H}X zwN(CizDH(6YG9+KP1qM1QLev{$27@Mxox$K^q?)BYJtJY|L%BF1s>ammvpFxwVO1{ zDf_0}Xr^hDZCUUmS$=%BUev5)f*JCRA_^x~MoRRikhLHmtu>s|9&KsMX z938SUGWv~_xKdpv5pU0(Z`=fn210voti(#YF8}#MLz?Ud&)k0M1maHuYSK$hPWgXc zZ8N{7MGgqSQ+0&IhvWuu(%d4IgWn+6s!Ky45FTju*~QRrM25I3bCc}37HGOgyJDy1=s9`|In1y2P=Z!2%@KT`m=!^NE9@l?=(%UD%xqx{YEkV&} z8Ar^?)lA)|QILwH_a54lXDFnj;5O+@tupJ|YPBe|{`@pwk9VnqD2 z4%KQ-ZsFGxQYpeqe33zFd`DZFRQ>eTc~D0-)QgvZP=AWmDlm`r_2-{JTD$=8dKV*| zQvUpU**+>0SciZi$;?>=i}dX4>|9Cd(P6BRR!PgY(nM`9*7=#Mn!!q{h^@i6BxDZ2 z^>2MdYxK%RRI*lGEXwq4b(FSCXu2A9E-RajgW_UA=t00;XQLo!y7_&L1*MBB1LaYSGuI7cu zf4*H6-`sk%GF|~tYzQphkDP!i-o543)gqs8JIt6;J`c%$gW_%q(wu)a@!t$RM!QvU zfL4&3R{H0P4ia2T_^s9cOh^V&`)j{|AcEX!mspcTju=Hu$E`=irG->b=GzG4jHO>) zTwozz%+2NEYQ-Ry*l;N8piA<@Z!&|C-MA|Hhz*MjIxPjRuL4Cmy(hq zJOijo0$FkE!Cb_u(Za76-|f*XaG@j8g0m)R(g)g;h_%87`@FC@_WM~9eeITunMASnOgV*2EG z>Sq$i!5PMM`i!d&KXLr@hR78Sms$=dfkHYQJlL*r2f`^6S#AlZ1X7Q_eI3P^70fD* zetpMqb&-?P#!xs0im9(>s< zxhW9&IARNPlI51>!vEH#;ZGiS-(%;aQv^$*7@Y#$VIb(7o;l;7`CwT>#Z9r$WHIzB z@{m{yuBtY2D=ht^nc93-^5;rMX_ui89mEjpGb%Vq9{itt6mUk1tg-IBtr9-rK}!12 zcPt3W9(IHXK=UNjhyXXdwA4gzQfx7_`G4&S_hYA8{8P8>AC3m;&^k6Rwjw~o?>^NP z&3t!tM7`(k2pDT{@Yql+*MRGn2$|0R>zk70pIO z)~n2f6(onbF`Ap5(~zoKH162r==k{fL3jG|t5lgEvjwA!pL~kj8|vwt4dZ+PDk267 z@7LWDfdr=#fcwVONvAyW<7V@#<^+PxZkWNXzi~=P{eVXLh%{t-Yb&hYG?SBbRRhu2 zqSSoF@?ti9J8SxdmKcA#Xvy+K5nb$KCUi7%(CmmH->39vmE5oo)+D+c-6fBsPHf2D zl5duJQgP2pZZ|9<3ccGgs2_Brzv+{A;td;~QMbS{C`ow4gRG!D}`pc7624g9P*P!6|>TPmx=`z1EY;n$dELK1HC zu}dx%2jlRIH>tfX1E6dQJSi&1`s8kEd1)m zWbV>*TlZh1Pj9SR|BQ-kLezwNCT&6g@7yy=zxYUe_e(Qfp4$hlhq0*65Gx>>1=C;N ziLNpez^#Y9dNa!-oFX|CJ(rU_0f%32mHlaq%}o(W(wm$~JezVGvKl2+N+Z^pSc1F? zVUJ}%I;6U933KX>e*F0HD>?MNKHztNP}V_~(+1}0vP}KV&$HEm5RUtn^ktaHIp6@-N{URktMWP$sUwVi8ez!=iG-EL~Mbcq4KET=b2l)omj4!Hax-&i|qi z56*fO7D@#VN!ZhW4Ti|`%s;Ll*+;TMN?L}3?2Ll)G~uE9|5R`SD!N5#puz!3oBvwl ze^pBVYrh2jQ#P#)eRcbVF@qnRtUcIY1=;HTuc~ReY8K5;soP&F?NFe|bD`7ny_tNs zlW$9-m8yL4$2g+_bv}o%L9i-FKp9yumo8ZHJ#V~iL@M-;bQXB1a~%S|6WRaV!J+~G z3emm^{(l0|Qg8oq3H*Bwy@X|)hFpDyFCz?N?qrW6xBv;yaEnl%Uw^?OJaahMbM zfF@HUHbI!Q1h6?T2;>G#UrP#BQ?@WKtfV+s-v1&P`JsUr4=Ml)5^ z12RCSNu?Ab71%0rSDK z*M!BCyd(Or=ixtBFc}2=2pB2@+y)Ve_Ag39X_zS4)hKNqbC8m22IQDAJADmLMADZO zR)5X-sBS&dWYqP;>d~Dg7#@+KcvG6}<6Uc(lPh5g&sgY6CY&O|=}C|Dw@M7#s=-|Z zA|!zrRaA!?8=m}Hq`Uo0@Yi$nTms4%$valYe~yny4*wkmJqd3xle1|P<)or1afq{s zO63*Mnyt#|jS-%Ixgw;%$xiXXKUfXYA)tAQ6|u*bmAa>>z9kxWF72aPl8pPak!=>8 z5`wC>EcKv{2Om*uFii5xJ5=$JE(tI#fJZIr&xp!&7)KL1lo+ZK%a?b=g5=V_rq9B_ zLTZ!5N=gN_JWTIUU+nfSH3lgkxN$@~$5AGy{ z;1(dbyEhKOgF9&?I0S+R2^QQXxH~lN?_-~{@4ip&9ryj}K{sRc`g*OZRW)l?&Cdk{ z_2E~}Rse+|IZ;x&lkQo+#K`BR@q`>VQ6mRM9)|9#*t8#O1p^WsnOB{A3(buHYiGyo zL1A85DdO+E&ru%m+BR3Iy8nYK8_$0u)~m@@l1>nU@v01r5{piRZWh{3yx++gJ>ByT z7#}>8-lLMzt13nsYJX;d|HMX2>M?7~!R*ww&TCi+p909qIOl zk0VaVyA%Kj;bS`ZE$i+NGkxB_&mbatKOL~W_4$@I|AXz-`VSDZvC(JsLBw+kky7dm z%8)?daVUd;na!xHp`wc07BDIn)ar+#A}Ojt(DnwGQ1wM93IWplwg9T|Y;F`pvG6En z#fAg|ad_4txubhsed8ZGR|tfwb#cM+WTW}++{N~Azm7}X2}xh3NfsRk-5LyeErxbW zy-c1%!M{WshOLIXl@qDxChyWX{f2o}dT*|d?Jd8|lc(r8=)tsX_~PWq9^y6P88O8M zY)nkOdsLw+!|~{lL@b_sJ(;(l-islT2bD%_Dg`EE4B{e2q;Nm#Y!D;T@*7cf_2oD3 z_gVga=ieXvcQ5W}kNPrEQO@|VpX61%b`kk6Oc^UpN`>XqkVstr7%w$&dpvX`p7WZD4Vhlysk`h5WniFSkf2j+F1d3u!Vc9IgG-E@ z&}@vdj7&Bl9HL$@IL{a~_m%)rN)%TG8F-<(1u+^j-xBYF{<{VKAD@Zpi5YD4r)U(Z z(J_ChDO|<@hJ5NkmYE=gVibR9w){nC4bNjRrexsaG2+a%*@0Ct<$Uh&%WLl=D--mzx?1G>2lLbi{ z^juQy=nFK2)*wgmwL)C3Qm9Jd6LbvYnS90sQ?kddWAk{gPX8xpe{9l+5&TuxOz|be z!^H)5Oz?$L2&_Q3a&Q@`;oz2qJwW$sh1;+=ek4{nmH9swC3*=~Y1g={c>DYRv7-NK z?V@@T2G^(C1izt0fY2DPw2X|>(o-=}w}5QD*OIx$q?b<`mT1r!dKKOH2Xq4{W;;=5 zgW{ncYo>x*;YrLA$w;^ua#X@$aZbTiF^bAA3@pBRm~9(iqvFSrbCy-*er4L7Eg;w8)g-x_j>rM2cv~D9YsNJq5Pm7@ThVb zni`w8fo2yklZfIKu#W`J|H(J{%;rmV=|a%_iU+zd!j`}qTbGWFDC<3$ysK_;-tBY&2 z*Rvoq9RQ0NSWs$9Siz3?>YFTstbk#`Kj8o5*U*oDf@m8Wpxq7Lr9U%!-Z! zd9|>cJ{Y=0Yg&_oO}+3nrdza%M!YO8!>`3^IKHVLA}qY%mfY}N7meciq{e@;%s-Eo z`3LmP`)^zQx5@q&FCapscD76FRs9^!6qY?5jT;><IK{8K6v9y_@YCB82~TD*k(-fDfGUulk(x zKeJCQDTF2@(CAs({a|su&cs9ehgVp>PvUFq$?HEcI90hLA=*Jd_9q*H)PpdIcyy@K ztHs@r%zEyzX`*>#+Ze>ng_a?*X?_eIwTeafKKNZR_Ay3EG9%sNlz z&OfK>|MoJ_r-(;bCUZwOAC2p5GET%liZGCVs9RR%D&;2{XD7ovdQkyf5_}~7+hYZd z67XKvNqXTKce`-OwMMM=1iQ~xx^D4!Ex6aq9ti%Q^D7`{h4^X1NlnM>L2pQqqk87L zmc9FU=&frRn2w(XX+%co=7UFKWzoN3np(&Mz8xsrsWxI~{0PZhLVbPrmuG)GChd`a zc(C@T6{(t!zW%>BIREkA1pYBp2tJ5BN6&cfD}PP*vp|bxH#J>7`zzf^Ac*gx7?B{7 z2%C)J@VBKO5{-TM2>_JLYQoXdDj07CSY8KVK8sg~z_In8m;JdGEd*Z{W-r7*wARa(voA`+RyKy)6 z&U8J?-067T%_qHo-BgdO7Y_lRM?B=~2etp%^Bh4Cd;);SxvQUenxF|%|2`P;stLo6 zJ+1yot`t^*jGzQ0Xi2B*f_Tv^6r3I-olzQ6WtSj{;~jKMTdVR+ z?b*)o5HM_TI%>Mrw>3vsOjbr&+@zhB9ib0Q9B6>YNsV})lVT}5=NDUB(WHxE}M#a2LhPnt^)SdbH3J;exZcChUKNnLdK{Xo71YHk1f$DAz?sjnLt^^92`KvFGfNhYZPd>)wkr*_|)h^n&Mn6KcH-F|DG71 z0!9VuEr2pT3Hs-Dm9SSEDB`&!_wqxR#Xar97zzr^LE!h zX`C|qxW?a$1u-DWC1Wr&eA52=oqsIge=`zJaf638joB)$yXv;wAnL+*12rLOBr|-^ zXYpr-I%gNhGQZE>jBio9%~V*9Zt~tIig&N57im<2inU(a8YWR-mGaGj!NLJ{-~{%> zHk4(n8>FrKHD+Yd8&!@(9BBP0qs8us#VR}%j(5{x8rRP1;q`Ayu7rXH z1sK}*BnFDFkZK_}=-OHR&doZSISR<%8%Do_>GvPQA<;|R*A8o-yZal;4aJ3ULKYQZ za^rl&@ckQQ1%>>}OSe3=d>Pye@v2tgSs2I!4ax0Gh1n2=k55H>ZfxR4@0ruBIfZ_P#j1yrLWDY#IOV zN#i+ebYDWJwR@9i?_@#WBm+W&qwR$TK{zcS6Wv^&oyS=^p=ke?$0Al03Q z2Sd6U%KDAds3bx}?dSN4mG!gHU;5l#x0F$lk=%c)bMH~_>?!srwF`-pQ1j%IyR2RN zH65kplV7il$X%1R6R^_eLYs)~H#it)O#*RABzN{&%tNqdtX2q4RdD>VfOvp+66oY8 z0KCJGO~Zu$%|ATaSUYMd={sZsf5Fc`;TbGjb-ujAwKM`-GAp=&Z;lIBG)mpxHWccR zfBH~wUkj-@%OW6s@WHeGlP(^{pxg1~1*w?g&PD;^Lqxv0uE;>Gan6&B3{d|KB!#{+ zgWJ~L80TTCmg>x0lYP$h{Ckn?>9H4)Dtch+t+|G1=Sy%2YNVXg&|;=rY%<8>si19QYxiw&f`AMv;GnTQOPU-5aA2IaEk+bk&v|nJ z?fBf4UlCu&;=`9avT|kP7dUoPA8xDP76;0)H55_+GWP5p!oYmxT-Sw^gq(#W{lVoJ zG|JKIv*+ehWx5pC(@ANzEn)nw2PWr3c_Yk%M?V8kN2IfoQ#p*^s76z`eke^HU;(Y= z-%JC@_ULc6R`ErzlTv}vATl(;z@N@}roVR!<&%^)K2TfBv_AOYⅈSEiMDAjU;{b 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�zoulw1d0J})(m2;NT< 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

    bR4jg0>282Sa&B&y0i=2!Nb0(-AYgWo9q)<&v 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 Ksr-QN&Ho3@l5(&B literal 0 HcmV?d00001 diff --git a/content/en/docs/21.0/user-guides/configuration-basic/img/vtgate-healthy-tablets.png b/content/en/docs/21.0/user-guides/configuration-basic/img/vtgate-healthy-tablets.png new file mode 100644 index 0000000000000000000000000000000000000000..b0ac5e780d7081ece073d11747c916989ef6b5e2 GIT binary patch literal 34360 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 O0000*>$>a(RSTY}*82hvGM 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 literal 0 HcmV?d00001 diff --git a/content/en/docs/21.0/user-guides/configuration-basic/initialize-shard-primary.md b/content/en/docs/21.0/user-guides/configuration-basic/initialize-shard-primary.md new file mode 100644 index 000000000..717de8b08 --- /dev/null +++ b/content/en/docs/21.0/user-guides/configuration-basic/initialize-shard-primary.md @@ -0,0 +1,34 @@ +--- +title: Initialize Shard Primary +weight: 9 +--- + +A new primary is elected automatically by VTOrc and no user action is required. + +The InitShardPrimary command can be used to do the same operation manually. However, it is a destructive command and should only be used by advanced users. This command copies over the `executed_gtid_set` from the primary to the replica which can break replication if the user isn't careful. + +The command for `InitShardPrimary` is as follows: + +```text +vtctldclient \ + InitShardPrimary \ + --force \ + commerce/0 \ + cell1-100 +``` + +Until this step is complete, you may see errors like this in the vttablet logs: `Cannot start query service: Unknown database 'vt_xxx'`. This is because the database will be created only after a primary is elected. + +If you have semi-sync enabled and did not set up at least two replicas, InitShardPrimary could hang indefinitely. Even if it succeeds, future operations that perform failovers could cause this shard to go into a deadlocked state. + +After this step, visiting the `/debug/status` page on the vttablets should show all the tablets as healthy: + +![healthy-tablet](../img/healthy-tablet.png) + +{{< warning >}} +`InitShardPrimary` is a destructive command that resets all servers by deleting their binlog metadata. It should only be used for initializing a brand new cluster. +{{< /warning >}} + +{{< info >}} +`InitShardPrimary` is deprecated. This action is performed automatically by VTOrc. If manual action is needed, it is recommended to use `PlannedReparentShard`. +{{< /info >}} diff --git a/content/en/docs/21.0/user-guides/configuration-basic/keyspaces-shards.md b/content/en/docs/21.0/user-guides/configuration-basic/keyspaces-shards.md new file mode 100644 index 000000000..09cc4a162 --- /dev/null +++ b/content/en/docs/21.0/user-guides/configuration-basic/keyspaces-shards.md @@ -0,0 +1,14 @@ +--- +title: Keyspaces and Shards +weight: 7 +--- + +You can create keyspaces and shards using [vtctldclient](../../../reference/programs/vtctldclient) commands. However, they are not necessary because these are implicitly created as you bring up the vttablets. + +The canonical information for keyspaces and shards is initially created in the global topo. This information is then deployed to the cell-specific topos through rebuild commands like `RebuildKeyspaceGraph` and `RebuildVSchemaGraph`. These commands are implicitly issued on your behalf whenever applicable. But there are situations where you will have to issue them manually. For example, if you create a new cell, you will have to issue these commands to copy the data into the new cell. + +There are use cases where you may want to experimentally deploy changes to only some cells. Separating information from the global topo and local cells makes those experiments possible without affecting the entire deployment. + +Tools like [vtgate](../../../reference/programs/vtgate) and [vttablet](../../../reference/programs/vttablet) consume information from the local copy of the topo. + +An unsharded keyspace typically has a single shard named `0` or` -`. A sharded keyspace has shards named after the keyranges assigned to it, like `-80` and `80-`. Please refer to the section on [shard naming](../../../concepts/shard/#shard-naming) for more info on how shards are named. diff --git a/content/en/docs/21.0/user-guides/configuration-basic/monitoring.md b/content/en/docs/21.0/user-guides/configuration-basic/monitoring.md new file mode 100644 index 000000000..c42e91225 --- /dev/null +++ b/content/en/docs/21.0/user-guides/configuration-basic/monitoring.md @@ -0,0 +1,407 @@ +--- +title: Monitoring +weight: 16 +aliases: ['/docs/launching/server-configuration/', '/docs/user-guides/server-configuration/', '/docs/user-guides/configuring-components/'] +--- + +This section describes how to monitor Vitess components. Additionally, we recommend that you also add the necessary monitoring and alerting for the TopoServers as well as the MySQL instances running with each vttablet. + +## Tools + +Vitess provides integrations with a variety of popular monitoring tools: Prometheus, InfluxDB and Datadog. The core infrastructure uses go's `expvar` package to export real-time variables visible as a JSON object served by the `/debug/vars` URL. The exported variables are CamelCase names. These names are algorithmically converted to the appropriate naming standards for each monitoring tool. For example, Prometheus uses a [snake case conversion algorithm](https://github.com/vitessio/vitess/blob/e259a08f017d9f1b5984fcaac5c54e26d1c7c31d/go/stats/prometheusbackend/prometheusbackend.go#L95-L116). In this case, the Prometheus exporter would convert the `Queries.Histograms.Select.500000` variable to `vttablet_queries_bucket{plan_type="Select",le="0.0005"}`. + +In the sections below, we will be describing the variables as seen in the `/debug/vars` page. + +The two critical Vitess processes to monitor are vttablet and vtgate. Additionally, we recommend that you setup monitoring for the underlying MySQL instances as commonly recommended in the MySQL community. + +Beyond what the tools export, it is important to also monitor system resource usage: CPU, memory, network and disk usage. + +There is a [popular mixin](https://github.com/vitessio/vitess/tree/main/vitess-mixin) contributed by [Slack](https://slack.com) that is based on how they monitor Vitess internally. It can be used as a starting point if you intend to use Prometheus and Grafana. + +Beyond the monitoring variables, the Vitess processes export additional information about their status on other URL paths. Some of those pages are for human consumption, and others are machine-readable meant for building automation. + +## VTTablet + +### /debug/status + +This page has a variety of human-readable information about the current vttablet and contains links to all the other URLs. You can look at this page to get a general overview of what is going on. + +### /debug/vars + +The following sections describe the various sub-objects of the JSON object exported by `/debug/vars`. These variables can be found at the top level of the JSON object: + +#### Queries + +Vitess has a structured way of exporting certain performance stats. The most common one is the Histogram structure, which is used by Queries: + +``` json + "Queries": { + "Histograms": { + "Select": { + "1000000": 1138196, + "10000000": 1138313, + "100000000": 1138342, + "1000000000": 1138342, + "10000000000": 1138342, + "500000": 1133195, + "5000000": 1138277, + "50000000": 1138342, + "500000000": 1138342, + "5000000000": 1138342, + "Count": 1138342, + "Time": 387710449887, + "inf": 1138342 + } + }, + "TotalCount": 1138342, + "TotalTime": 387710449887 + }, +``` + +The histograms are broken out into query categories. In the above case, `Select` is the only category, which measures all SELECT statements. An entry like `"500000": 1133195` means that `1133195` queries took under `500000` nanoseconds to execute. + +Here is the full list of categories [expanded from the source](https://github.com/vitessio/vitess/blob/e259a08f017d9f1b5984fcaac5c54e26d1c7c31d/go/vt/vttablet/tabletserver/planbuilder/plan.go#L79-L102): + +``` +Select +SelectLock +Nextval +SelectImpossible +Insert +InsertMessage +Update +UpdateLimit +Delete +DeleteLimit +DDL +Set +OtherRead +OtherAdmin +SelectStream +MessageStream +Savepoint +Release +RollbackSavepoint +ShowTables +Load +Flush +LockTables +UnlockTables +``` + +The numbers are cumulative. For example, if you wish to count how many queries took between `500000ns` and `1000000ns`, the answer would be `1138196-1133195`, which is `1`. + +Later below, we will be covering variables that break out these queries into further sub-categories like per-table, etc. However, we do not generate histograms for them because the number of values generated would be too big. + +The thresholds are hard-coded. However, if you are integrating with an extermal tool like Prometheus, it will have its own thresholds. + +The counters increment for the lifetime of the vttablet, and all values are updated in real-time. + +`Queries.Histograms.Select.Count` is the total count in the `Select` category. + +`Queries.Histograms.Select.Time` is the total time in the `Select` category. + +`Queries.TotalCount` is the total count across all categories. + +`Queries.TotalTime` is the total time across all categories. + +There are other Histogram variables described below, and they will always have the same structure. + +Use this variable to track: + +* QPS +* Latency +* Per-category QPS. For replicas, the only category will be `Select`, but there will be more for primary tablets. +* Per-category latency +* Per-category tail latency +* Per-category cost: This value is calculated as QPS\*Latency. If the latency of a high QPS query goes up, it is likely causing more harm than the latency increase of an occasional query. + +#### Results + +```json + "Results": { + "0": 0, + "1": 0, + "10": 1138326, + "100": 1138326, + "1000": 1138342, + "10000": 1138342, + "5": 1138326, + "50": 1138326, + "500": 1138342, + "5000": 1138342, + "Count": 1138342, + "Total": 1140438, + "inf": 1138342 + } +``` + +Results is a simple histogram with no timing info. It gives you a histogram view of the number of rows returned per query. This does not include rows affected from write queries. + +`Count` is expected to be the same as the `TotalCount` of the `Queries` histogram. + +`Total` is the total number of rows returned so far. + +#### Mysql + +Mysql is a histogram variable like Queries, except that it reports MySQL execution times. The categories are "Exec" and “ExecStream”. + +The vttablet queries exec time is roughly equal to the sum of the MySQL exec time, `ConnPoolWaitTime` and `Waits.Consolidations`. + +#### Transactions + +`Transactions` is a histogram variable that tracks transactions. The categories are "Completed" and “Aborted”. Since these are histograms, they include count as well as timings. + +#### Waits + +Waits is a histogram variable that tracks various waits in the system. Right now, the only category is "Consolidations". A consolidation happens when one query waits for the results of an identical query already executing, thereby saving the database from performing duplicate work. + +This variable used to report connection pool waits, but a refactor moved those variables out into the pool related vars. + +#### Errors + +``` json + "Errors": { + "OK": 0, + "CANCELED": 0, + "UNKNOWN": 0, + "INVALID_ARGUMENT": 1, + "DEADLINE_EXCEEDED": 0, + "NOT_FOUND": 0, + "ALREADY_EXISTS": 0, + "PERMISSION_DENIED": 0, + "RESOURCE_EXHAUSTED": 0, + "FAILED_PRECONDITION": 0, + "ABORTED": 0, + "OUT_OF_RANGE": 0, + "UNIMPLEMENTED": 0, + "INTERNAL": 0, + "UNAVAILABLE": 0, + "DATA_LOSS": 0, + "UNAUTHENTICATED": 0, + "CLUSTER_EVENT": 0, + "READ_ONLY": 0, + }, +``` + +Errors are reported under different categories. It’s beneficial to track each category separately as it will be more helpful for troubleshooting. Right now, there are eighteen categories. The category list may vary as Vitess evolves. + +Errors/Query is a useful stat to track. + +#### InternalErrors + +``` json + "InternalErrors": { + "Task": 0, + "StrayTransactions": 0, + "Panic": 0, + "HungQuery": 0, + "Schema": 0, + "TwopcCommit": 0, + "TwopcResurrection": 0, + "WatchdogFail": 0, + "Messages": 0, + }, +``` + +An internal error is an unexpected situation in code that may possibly point to a bug. Such errors may not cause outages, but even a single error needs to be escalated for root cause analysis. + +#### Kills + +``` json + "Kills": { + "Queries": 2, + "Transactions": 0, + "ReservedConnection": 0 + }, +``` + +Kills reports the queries, transactions and reserved connections killed by vttablet due to timeout. It is a very important variable to look at during incidents. + +#### TransactionPool\* and FoundRowsPool\* + +There are a few variables with the above prefixes that report the status of the two transaction pools: + +``` json + "TransactionPoolActive": 0, + "TransactionPoolAvailable": 20, + "TransactionPoolCapacity": 20, + "TransactionPoolDiffSetting": 0, + "TransactionPoolExhausted": 0, + "TransactionPoolGet": 0, + "TransactionPoolGetConnTime": {"TotalCount":0,"TotalTime":0,"Histograms":{}}, + "TransactionPoolGetSetting": 0, + "TransactionPoolIdleClosed": 0, + "TransactionPoolIdleTimeout": 1800000000000, + "TransactionPoolInUse": 0, + "TransactionPoolMaxCap": 20, + "TransactionPoolMaxLifetimeClosed": 0, + "TransactionPoolResetSetting": 0, + "TransactionPoolWaitCount": 0, + "TransactionPoolWaitTime": 0, + "TransactionPoolWaiterQueueFull": 0, + "FoundRowsPoolActive": 0, + "FoundRowsPoolAvailable": 20, + "FoundRowsPoolCapacity": 20, + "FoundRowsPoolDiffSetting": 0, + "FoundRowsPoolExhausted": 0, + "FoundRowsPoolGet": 0, + "FoundRowsPoolGetConnTime": {"TotalCount":0,"TotalTime":0,"Histograms":{}}, + "FoundRowsPoolGetSetting": 0, + "FoundRowsPoolIdleClosed": 0, + "FoundRowsPoolIdleTimeout": 1800000000000, + "FoundRowsPoolInUse": 0, + "FoundRowsPoolMaxCap": 20, + "FoundRowsPoolMaxLifetimeClosed": 0, + "FoundRowsPoolResetSetting": 0, + "FoundRowsPoolWaitCount": 0, + "FoundRowsPoolWaitTime": 0, + "FoundRowsPoolWaiterQueueFull": 0, +``` + +The choice of which pool gets used depends on whether the application connected with the `CLIENT_FOUND_ROWS` flag or not. + +* `WaitCount` will give you how often the transaction pool gets full, which causes new transactions to wait. +* `WaitTime`/`WaitCount` will tell you the average wait time. +* `Available` is a gauge that tells you the number of available connections in the pool in real-time. `Capacity-Available` is the number of connections in use. Note that this number could be misleading if the traffic is spiky. + +#### Other Pool variables + +Just like `TransactionPool`, there are variables for other pools: + +* `ConnPool`: This is the pool used for read traffic. +* `StreamConnPool`: This is the pool used for streaming queries. + +There are other internal pools used by vttablet that are not very consequential. + +#### `TableACLAllowed`, `TableACLDenied`, `TableACLPseudoDenied` + +The above three variables are table acl stats. They are broken out by table, plan and user. + +#### `QueryCacheCapacity`, `QueryCacheEvictions`, `QueryCacheHits`, `QueryCacheMisses`, `QueryCacheSize` + +VTTablet maintains a cache of query plans, and instruments cache usage in `QueryCache*` stats. + +If the application does not make good use of bind variables, `QueryCacheSize` will reach the value of `QueryCacheCapacity`, at which point `QueryCacheEvictions` would increase. Monitoring the current `QueryCacheSize`will give you a clue about where the misuse is happening. + +`QueryCacheHits` and `QueryCacheMisses` provide visibility, respectively, into how many queries are being sped up by the cache or else have to fall back to the slower path of query parsing and planning. + +#### `QueryCounts`, `QueryErrorCounts`, `QueryRowCounts`, `QueryTimesNs` + +These variables are another multi-dimensional view of Queries. They have a lot more data than Queries because they’re broken out into tables as well as plan. This is a priceless source of information when it comes to troubleshooting. If an outage is related to rogue queries, the graphs plotted from these vars will immediately show the table on which such queries are run. After that, a quick look at the detailed query stats will most likely identify the culprit. + +#### `UserTableQueryCount`, `UserTableQueryTimesNs`, `UserTransactionCount`, `UserTransactionTimesNs` + +These variables are yet another view of Queries, but broken out by user, table and plan. If you have well-compartmentalized app users, this is another priceless way of identifying a rogue "user app" that could be misbehaving. + +#### /debug/health + +This URL prints out a simple "ok" or “not ok” string that can be used to check if the server is healthy. The health check makes sure mysqld connections work, and replication is configured (though not necessarily running) if not on primary. + +#### /debug/status\_details + +This URL prints out a JSON object that lists the state of all the variables that contribute to the current healthy or unhealthy state of a vttablet. If healthy, you should see something like this: + +```json +[ + { + "Key": "Current State", + "Class": "healthy", + "Value": "PRIMARY: Serving, Jan 13, 2021 at 20:52:13 (PST)" + } +] +``` + +#### /queryz, /debug/query\_stats, /debug/tablet\_plans, /livequeryz + +* /queryz is a human-readable version of /debug/query\_stats. If a graph shows a table as a possible source of problems, this is the next place to look to see if a specific query is the root cause. This is list is sorted in descending order of query latency. If the value is greater than 100 milliseconds, it's color-coded red. If it is greater than 10 milliseconds, it is color coded yellow. Otherwise, it is color coded gray. +* /debug/query\_stats is a JSON view of the per-query stats. This information is pulled in real-time from the query cache. The per-table stats in /debug/vars are a roll-up of this information. +* /debug/tablet\_plans is a more static view of the query cache. It just shows how vttablet will process or rewrite the input query. +* /livequeryz lists the currently running queries. You have the option to kill any of them from this page. + +#### /querylogz, /debug/querylog, /txlogz, /debug/txlog + +* /debug/querylog is a continuous stream of verbose execution info as each query is executed. This URL can generate a lot of data because it streams every query processed by vttablet. The details are as per this function: https://github.com/vitessio/vitess/blob/main/go/vt/vttablet/tabletserver/tabletenv/logstats.go#L179 +* /querylogz is a limited human readable version of /debug/querylog. It prints the next 300 queries by default. The limit can be specified with a limit=N parameter on the URL. +* /txlogz is like /querylogz, but for transactions. +* /debug/txlog is the JSON counterpart to /txlogz. + +#### /debug/consolidations + +This URL has an MRU list of consolidations. This is a way of identifying if multiple clients are spamming the same query to a server. + +#### /schemaz, /debug/schema + +* /schemaz shows the schema info loaded by vttablet. +* /debug/schema is the JSON version of /schemaz. + +#### /debug/query\_rules + +This URL displays the currently active query blacklist rules. + +### Alerting + +Alerting is built on top of the variables you monitor. Before setting up alerts, you should get some baseline stats and variance, and then you can build meaningful alerting rules. You can use the following list as a guideline to build your own: + +* Query latency among all vttablets +* Per keyspace latency +* Errors/query +* Memory usage +* Unhealthy for too long +* Too many vttablets down +* Health has been flapping +* Transaction pool full error rate +* Any internal error +* Traffic out of balance among replicas +* QPS/core too high +* High replication lag +* Errant transactions +* Primary is in read-only mode + +## VTGate + +### /debug/status + +This is the landing page for a vtgate, which gives you the status of how a particular server is doing. Of particular interest there is the list of tablets this vtgate process is connected to, as this is the list of tablets that can potentially serve queries. + +### /debug/vars + +#### VTGateApi + +This is the main histogram variable to track for vtgates. It gives you a break up of all queries by command, keyspace, and type. + +#### HealthcheckConnections + +It shows the number of tablet connections for query/healthcheck per keyspace, shard, and tablet type. + +#### TopologyWatcherErrors and TopologyWatcherOperations + +These two variables track events related to how vtgate watches the topology. It is particularly important to monitor the error count. This can act as an early warning sign if a vtgate is not able to refresh the list of tablets from the topo. + +#### VindexUnknownParameters + +Gauges the number of unknown Vindex params in the latest VSchema obtained from the topology. + +### /debug/health + +This URL prints out a simple "ok" or “not ok” string that can be used to check if the server is healthy. + +### /debug/querylogz, /debug/querylog, /debug/queryz, /debug/query\_plans + +These URLs are similar to the ones exported by vttablet, but apply to the current vtgate instance. + +### /debug/vschema + +This URL shows the vschema as loaded by vtgate. + +### Alerting + +For vtgate, here’s a list of possible variables to alert on: + +* Error rate +* Error/query rate +* Error/query/tablet-type rate +* vtgate serving graph is stale by x minutes (topology service is down) +* QPS/core +* Latency + diff --git a/content/en/docs/21.0/user-guides/configuration-basic/planning.md b/content/en/docs/21.0/user-guides/configuration-basic/planning.md new file mode 100644 index 000000000..8850080e7 --- /dev/null +++ b/content/en/docs/21.0/user-guides/configuration-basic/planning.md @@ -0,0 +1,69 @@ +--- +title: Planning +weight: 3 +aliases: ['/docs/user-guides/configuration-basic/configuring-components/'] +--- + +This guide explains how to bring up and manage a Vitess cluster. We cover every individual component of Vitess and how they interact with each other. If you are deploying on Kubernetes, a lot of the wire-up is automatically handled by the operator. However, it is still important to know how the components work in order to be able to troubleshoot problems if they occur in production. + +We assume that you are familiar with the setup of your production environment. If operating in Kubernetes, you should be able to access all the logs, and be able to reach any ports of the pods that are getting launched. In addition, you should be familiar with provisioning storage. + +In self-hosted environments, you are expected to have the ability to troubleshoot network issues, firewalls and hostnames. You will also have to configure and setup certificates for components to talk to each other securely. This topic will not be covered in this guide. In addition, you are expected to perform all other sysadmin work related to provisioning, resource allocation, etc. + +Vitess is capable of running on a variety of platforms. They may be self-hosted, in the public cloud, or in a cloud orchestration environment like Kubernetes. + +In this guide, we will assume that we are deploying in a self-hosted environment that has multiple data centers. This setup allows us to better understand the interaction between the components. + +Before starting, we assume that you have downloaded Vitess and finished the [Get Started](../../../get-started) tutorial. + +## External tools + +Vitess relies on two external components, and we recommend that you choose them upfront: + +1. [TopoServer](../../../concepts/topology-service/): This is the server in which Vitess stores its metadata. We recommend etcd if you have no other preference. +2. [MySQL](../../../overview/supported-databases/): Vitess supports MySQL/Percona Server 5.7 to 8.0. We recommend MySQL 8.0 for new installations. + +In this guide, we will be covering the case where the MySQL instances are managed by Vitess. A different section covers the details of running against [externally managed databases](../../configuration-advanced/unmanaged-tablet). + +## Provisioning + +Some high level decisions have to be made about the number of cells you plan to deploy on. This will loosely tie into how many replicas you intend to run per MySQL primary. You are likely to deploy at least one replica per cell. + +Vitess resource consumption is mostly driven by QPS, but there may be variations depending on your use case. As a starting point, you can use a rule of thumb of provisioning about 1 CPU for every 1000QPS. This CPU will be divided between MySQL, vttablets and vtgates, about 1/3 each. As for memory, you can start with approximately 1GB per CPU provisioned for Vitess components. MySQL memory will be largely guided by the buffer pool size, which may take some trial and error or prior experience to tune. + +Resources for other servers like the toposerver, vtctld, Vtadmin and VTOrc are minimal. They are likely not going to exceed one CPU per server instance. + +## Environment variables + +Setting up a few environment variables upfront will improve the manageability of the system: + +* `VTDATAROOT`: Setting up this value will make Vitess create the MySQL data files under this directory. Other Vitess binaries will also use this variable to locate such files as needed. If not specified, the default value is `/vt`. Typically, no other files get stored under this directory. However, many idiomatic deployments tend to reuse this as root directory for other purposes like log files, etc. +* `VT_MYSQL_ROOT`: Informs Vitess about where to find the `mysqld` binary. If this is not specified, Vitess will try to find `mysqld` in the current `PATH`. + +Vitess will automatically detect the flavor of MySQL and will adjust its behavior accordingly. You can override this behavior by specifying an explicit flavor with the `--db_flavor` command line argument to the various components. + +## Backups + +Backups will need to be shared across vttablet instances and multiple cells. You need to plan and allocate shared storage that must be accessible from all cells. Depending on the choice made, you will need to prepare a group of command line arguments to include with the Vitess components to launch. Here is an example: + +```text +--backup_storage_implementation file --file_backup_storage_root +``` + +{{< warning >}} +When using the file backup storage engine the backup storage root path must be on shared storage to provide a global view of backups to all vitess components. +{{< /warning >}} + +Please refer to the [Backup and Restore](../../operating-vitess/backup-and-restore) guide for instructions on how to configure other storage options. + +To avoid repetition we will use `` in our examples to signify the above flags. + +## Logging + +Vitess servers write to log files, and they are rotated when they reach a maximum size. It’s recommended that you run at INFO level logging. The information printed in the log files can come in handy for troubleshooting. You can limit the disk usage by running cron jobs that periodically purge or archive them. + +All Vitess servers accept a `--log_dir` argument and will create the log files in that specified directory. For example: + +```text +--log_dir=${VTDATAROOT}/tmp +``` diff --git a/content/en/docs/21.0/user-guides/configuration-basic/ports.md b/content/en/docs/21.0/user-guides/configuration-basic/ports.md new file mode 100644 index 000000000..a725b3eef --- /dev/null +++ b/content/en/docs/21.0/user-guides/configuration-basic/ports.md @@ -0,0 +1,53 @@ +--- +title: Ports +weight: 16 +aliases: ['/docs/launching/server-configuration/', '/docs/user-guides/server-configuration/', '/docs/user-guides/configuring-components/'] +--- +# Ports and Network interactions in Vitess + +Many/most of these ports are fully configurable, but we are listing their +defaults or the defaults we use in examples here. Your +environment may differ considerably, depending on your configuration options +for the various components: + + * Data path: + * Main query path: + * application → vtgate + * TCP port 3306 or 15306 (MySQL) + * TCP port 15999 (gRPC) + * vtgate → vttablet + * TCP port 16000 + vttablet UID (gRPC); e.g port 16100 for UID 100 + * vttablet → MySQL + * local Unix domain socket (if MySQL is local) + * TCP port 3306 (if MySQL is remote) + * vttablet → vttablet: vreplication within or across shards + * TCP port 16000 + vttablet UID (gRPC); e.g port 16100 for UID 100 + * MySQL → MySQL: within-shard replication + * TCP port 3306 (MySQL protocol) + * Control or meta-data paths: + * vtctld → vttablet + * TCP port 16000 + vttablet UID (gRPC); e.g port 16100 for UID 100 + * vtctldclient → vtctld + * TCP port 15999 (gRPC) + * vtadmin → + * TCP port 14200 (gRPC and HTTP) + * vtgate → topology server + * Depends on topology server, e.g.: + * for etcd typically TCP port 2379 + * for consul typically TCP port 8502 + * for zookeeper typically TCP port 2888 + * administrator using web browser → vtgate web UI + * TCP port 15001 (HTTP) + * administrator using web browser → vttablet web UI + * TCP port 15000 + vttablet UID (HTTP); e.g port 15100 for UID 100 + * administrator using web browser → vtadmin web UI + * TCP port 14201 (HTTP) + * administrator using web browser → vtorc web UI + * TCP port 16000 (HTTP) + * Metrics scraper (e.g. Prometheus) → vtgate web port + * TCP port 15001 (HTTP) + * Metrics scraper (e.g. Prometheus) → vttablet web port + * TCP port 15000 + vttablet UID (HTTP); e.g port 15100 for UID 100 + * Metrics scraper (e.g. Prometheus) → vtctld web port + * TCP port 15000 (HTTP) + diff --git a/content/en/docs/21.0/user-guides/configuration-basic/reparenting.md b/content/en/docs/21.0/user-guides/configuration-basic/reparenting.md new file mode 100644 index 000000000..abdd28b38 --- /dev/null +++ b/content/en/docs/21.0/user-guides/configuration-basic/reparenting.md @@ -0,0 +1,22 @@ +--- +title: Reparenting +weight: 13 +--- + +Once you have the cluster up and running, you should perform a trial failover using `PlannedReparentShard` to make sure it works as expected. + +A typical use case for `PlannedReparentShard` is to use it during software updates. The command has a convenient `avoid_tablet` flag that allows you to specify the current vttablet you are going to perform maintenance on. If that is a primary, then it performs a failover to another eligible replica. Otherwise, it is a no-op. + +You can also perform a "Planned Reparent" through the browser from the VTAdmin Dashboard. + +![vtadmin-reparenting](../img/vtadmin-reparenting.png) + +{{< info >}} +The Vitess operator performs this step automatically when a container is gracefully brought down by Kubernetes, which also takes care of the use case of a software rollout. If a container or pod is brought down abruptly or crashes, then the primary will be unavailable until Kubernetes restarts it. However, if VTOrc is also deployed, it will detect this and failover to another eligible replica as the primary. VTOrc will not intervene during a graceful shut down. +{{< /info >}} + +For more information, please refer to the [Reparenting](../../configuration-advanced/reparenting) section. + +{{< info >}} +A reparenting operation can fail in the middle. If so, it is possible for the system to be in a situation where two vttablets report themselves as primary. If this happens, the one with the newer timestamp wins. The vtgates will automatically treat the newer primary as authoritative. The system will eventually heal itself because the vttablets use a registration protocol via the global topo and the older tablet will demote itself to a replica when it notices that it is no longer the primary. +{{< /info >}} diff --git a/content/en/docs/21.0/user-guides/configuration-basic/troubleshooting.md b/content/en/docs/21.0/user-guides/configuration-basic/troubleshooting.md new file mode 100644 index 000000000..15b3c4ec9 --- /dev/null +++ b/content/en/docs/21.0/user-guides/configuration-basic/troubleshooting.md @@ -0,0 +1,168 @@ +--- +title: Troubleshooting +weight: 17 +--- + +## Understanding the Components + +The secret to troubleshooting a Vitess cluster well comes from knowing how all the components are wired together. + +Of these connections, the most important one is the query serving path: + +* The application sends a request to a vtgate. +* The vtgate forwards that request to one or more vttablets. +* The vttablets in turn send the request to MySQL. + +If there is any kind of problem with serving queries, these are the components to drill into. + +VTGates and vttablets connect to the global and cell-specific toposerver. They use these toposervers to broadcast their state as well as to discover configuration changes. Additionally, vtgates receive health information from the vttablets they are connected to, and use this information to direct traffic in real-time. If there is any kind of problem with configuration, these are the areas to focus on. + +The first step to troubleshooting is to have an established baseline. It is recommended that monitoring is set up for all the components as directed in the monitoring section. When there is an incident, the change in the graphs will likely help with identifying the root cause. + +## Query Serving + +Most of the focus of Vitess monitoring centers around the cost of a query. Although not always true, we use the following rules of thumb to get a rough estimate: + +* In MySQL, the time taken by a query roughly translates to its actual cost. More often than not, the limiting factor is the number of disk IOPS. +* In Vitess components, the payload contributes to the cost. The limiting factor is most often the CPU, followed by memory. +* The cost of parsing and analyzing the input query has started to become significant. This is typically driven by the size and complexity of the query. + +Let us now go through some fire drills. + +### Too many connections + +If you see an error that contains the string `Too many connections (errno 1040) (sqlstate 08004)`, then it means that the maximum number of connections allowed by MySQL has been exceeded. + +The remedy is to further increase the `max_connections` settings in MySQL. The other alternative is to reduce the pool sizes. As [recommended before](../vttablet-mysql/#starting-vttablet), the `max_connections` value should be set about double the number of connections allocated for pools. + +### Elevated Query Latency + +This is one of the most common problems. It can show up as just an elevated latency with no external impact. Sometimes, the problem can be more acute where queries return errors due to timeouts. There can be multiple root causes. + +#### Approach 1: Validate resource usage and remove bottlenecks + +Check vtgate CPU usage: If the vtgate CPU is too high or is getting throttled, it could be the root cause. Bringing up another vtgate to take on additional load or increasing the CPU quota of the VTGate should resolve the problem. + +Check vttablet CPU usage: If vttablet CPU usage is maxed out, the immediate solution is to increase the quota. If the vttablet is a replica, then bringing up more replicas should help distribute the load. If it is a primary, then you need to plan on splitting the shard into smaller parts, or reshard in the case of an unsharded keyspace. + +Check MySQL resource usage: If MySQL is resource constrained, for example IOPS, then you need to provision more. Also, you will then need to add more replicas or plan a reshard or split just like in the case of a vttablet. More often than not, MySQL will run into resource constraints before vttablet does. + +Check Network packet limits. Some cloud providers limit network capacity by limiting the number of packets per second. Check to see if this limit has been reached. If so, you will need to request a quota increase from the cloud provider. + +If none of the processes are resource constrained, the next step is to check connection pool waits in vttablet. If there are long waits, then we know that the connection pool is under-provisioned. Restarting the vttablets with increased pool sizes should fix the problem. + +If latency continues to be elevated after increasing the pool size, it most likely means that the contention has shifted from vttablet to MySQL. In that case, it is likely that MySQL is the one resource constrained. You may have to roll back the pool size increase and instead look at increasing resources for MySQL. + +#### Approach 2: Find the problematic query + +Typically, resource constraints are encountered during the early stages of a rollout where things are not tuned well. Once the system is well tuned and running smoothly, the root cause is likely to be related to how the application sends queries. + +We first need to determine if this is an overall increase in application traffic or a change in specific query patterns. + +Inspect the per-tablet and per-user graphs to see if the increase is uniform across all tables or is to only a specific table. + +If the increase is across the board, then it is likely a general overload. The mitigation is to increase provisioning or address the root cause of the overload if it was not expected. + +If the increase is on a specific table, then this data itself is sufficient to determine the root cause. If not, we may need to drill down further to identify if a specific query is causing the problem. There are two approaches: + +* Inspect the `/queryz` page and look at the stats for all queries of that table. It is very likely that the problematic ones have already risen to the top of the page and may be color-coded red. If not, talking a few snapshots of the page and comparing the stats should help identify the problematic query. +* Real-time stream from `/debug/querylog`, filtering out unwanted tables and observing the results to identify the problematic query. + +Once the query is identified, the remedy depends on the situation. It could be a rewrite of the query to be more efficient, the creation of an additional index, or it could be the shutdown of an abusive batch process. + +The above guidelines have not required you to inspect MySQL. Over time, Vitess has evolved by improving its observability every time there was an incident. However, there may still be situations where the above approach is insufficient. If so, you will need to resort to looking inside MySQL to find out the root cause. + +The actual identification of the root cause may not be as straightforward as described above. Sometimes, an incident is caused by multiple factors. In such cases, using first principles of troubleshooting and understanding how the components communicate with each other may be the only way to get to the bottom of a problem. If you have exhausted all the recommendations given so far and still have not found the root cause, you may have to directly troubleshoot the problem at the MySQL level. + +### Elevated Error Rates + +The analysis for elevated error rates for read queries follows steps similar to elevated latency. You should essentially use the same drill down approach to identify the root cause. + +### Transaction timeouts + +Transaction timeouts manifest as the following errors: + +```text +ERROR 1317 (HY000): vtgate: http://sougou-lap1:15001/: vttablet: rpc error: code = Aborted desc = transaction 1610909864463057369: ended at 2021-01-17 10:58:49.155 PST (exceeded timeout: 30s) (CallerID: userData1) +``` + +If you see such errors, you may have to do one of the following: + +* Increase the transaction timeout in vttablet by setting a higher value for `queryserver-config-transaction-timeout`. +* Refactor the application code to finish the transaction sooner. + +It is recommended to minimize long running transactions in MySQL. This is because the efficiency of MySQL drastically drops as the number of concurrent transactions increases. + +### Transaction connection limit errors + +If you encounter errors that contain the following text: `transaction pool connection limit exceeded`, it means that your connection pool for transactions is full and Vitess timed out waiting for a connection. This issue can have multiple root causes. + +If your transaction load is just spiky, then you may just have to increase the pool timeout to make the transaction wait longer for a connection. This can be increased by setting the `queryserver-config-txpool-timeout` flag in vttablet. The default value is one second. + +It is also possible that you have underprovisioned the transaction pool size. If so, you can increase the size by changing the value for `queryserver-config-transaction-cap`. Note that it is risky to increase the pool size beyond the low hundreds because MySQL performance can drastically deteriorate if too many concurrent transactions are opened. + +Another possibility is that the application is unnecessarily keeping transactions open for too long thereby causing the pool to get full. To identify this, you can look at the vttablet logs. Every time the pool gets full, the list of transactions that were occupying those connections are printed out. Looking at those transactions should help you identify the root cause. This logging is throttled to prevent log spam. + +Frequent application crashes can also leave transactions open in the pool until timeout. Vitess tries to detect this situation and proactively rolls back such transactions, but it is not always reliable. If this is the case, the log file will contain many unfinished transactions that were rolled back. + +If you are starting to see these errors due to steady organic growth, it may be time to split the database or reshard. + +### Errant GTIDs + +An errant GTID incident is one where the MySQL instances of a shard do not agree on the events in the binlogs. This means that the data on those instances has potentially diverged. Errant GTIDs are often introduced due to operator errors. For example, someone could use DBA privileges to write data to a replica. + +In Vitess, you can get into an errant GTID situation if a primary is network partitioned and you make a decision to proceed forward with an `EmergencyReparentShard`. This will essentially cause the old primary to get indefinitely stuck due to transactions waiting for a semi-sync ack. The natural instinct would be to restart that server. However, such a restart will cause MySQL to go into recovery mode and complete those pending transactions thereby causing divergence. + +VTOrc can be used to detect errant GTIDs. You can also set up your own monitoring to detect this situation. This can be performed by ensuring that the GTIDs of the replicas are always a subset of the primary. + +If an errant GTID is detected, the first task is to identify the GTIDs that are diverged. If the divergence did not cause any data skew, you could choose to create dummy transactions with those extra GTIDs on instances that do not contain them. + +If the data has diverged, you have to make a decision about which one is authoritative. Once that is decided, it is recommended that you first take a backup of the instance that you have determined to be authoritative. Following this, you can bring down the instances that were non-authoritative and restart them with empty directories. This will trigger the restore workflow that will start with the authoritative backup. Once restored, the MySQL will point itself to the current primary and catch up to a consistent state. + +### Replica vttablet not receiving queries + +A number of reasons can cause a vtgate to not send queries to a replica vttablet. The first step is to visit the `/debug/status` page of vtgate and look at the `Health Check Cache` section. + +If the vttablet entry is present, but is color coded red and displays an error message, it means that vtgate is seeing the vttablet as unhealthy. Once you fix the error that causes the problem, traffic should resume to the vttablet. There can be many reasons for the unhealthiness: + +* vttablet may not be reachable: troubleshoot connectivity from the vtgate machine to the vttablet, make sure firewall rules allow access, ports are reachable, etc. +* vttablet is reporting itself as unhealthy: Fix the root cause. For example, the MySQL may be lagging too much, or vttablet may have trouble connecting to the MySQL instance, etc. + +If the vttablet entry is absent, then it means that vtgate has not discovered the vttablet yet. Check to see if vtgate is having trouble connecting to the topo server. If there was a problem, there should be errors in the log file like `cannot get tablets`. If such errors are found, fix the root cause and verify again. + +It may be worth proactively monitoring `TopologyWatcherErrors` and `TopologyWatcherOperations`. Alerting on errors can help identify these problems early. + +If there are no topo errors in vtgate, check to see if the tablet record has been created by vttablet using the `vtctldclient GetTablets` command. If the tablet record is absent or does not contain the correct host and port info, check the vttablet logs to see if it has trouble connecting to the topo and is unable to publish its existence. If there are errors, fixing the issue should resolve the problem. + +### Read-only errors + +If you see the following error string `The MySQL server is running with the --read-only option so it cannot execute this statement (errno 1290) (sqlstate HY000)` while trying to write to the primary, then it likely means that a previous `PlannedReparentShard` operation failed in the middle. + +Re-executing `PlannedReparentShard` against that primary should fix the problem. If this operation fails with an error saying that there is no current primary, you may have to issue an `EmergencyReparentShard` to safely elect a primary. + +If VTOrc is running, no action is needed because VTOrc will notice this state and fix it in a safe manner. + +This error can also be encountered if a new primary has been elected, but the older vttablet continues to think that it is still the primary. If this is the situation, then it is transient and will heal itself as long as components are able to communicate with each other. In this situation, the older vttablet will be in read-only mode. VTGates that are trying to send the writes to it will fail. + +Eventually, the new primary will inform the vtgates of its existence, and they will start sending traffic to the new primary instead of the old one. The old primary will also eventually notice that a new primary was elected. When it notices it, it will demote itself to a replica. + +### Local TopoServer of a Cell is getting overloaded + +This situation can happen if a large number of vtgates continuously spam the local toposerver to check for changes in the list of tablet servers. If this is the case, you may have to reduce the polling frequency of the vtgates by reducing the `--tablet_refresh_interval` value. + +### Global Topo or Cell Topo is down + +Vitess servers are built to survive brief topo outages in the order of many minutes. All Vitess servers cache the necessary information to serve traffic. If there is an outage, they use the cached information to continue serving traffic. + +However, during such an outage, you may not be able to perform cluster maintenance operations like a reparent, resharding, or bringing up new servers. + +### Topo Complete Data Loss + +In the unforeseen circumstance of a total data loss of the topo servers, a Vitess cluster can be restored to an operational state by performing the following actions: + +* Bring up a brand new set of empty topo servers. +* Recreate the cell info as before. +* Restart all the vttablets. +* Upload the VSchema for the recreated keyspaces. + +If you are in the middle of a reshard, make sure you restart the source vttablets first. This order will ensure that they get marked as serving. Any shards that get added later that overlap with existing keyranges will be marked as non-serving. diff --git a/content/en/docs/21.0/user-guides/configuration-basic/vtctld.md b/content/en/docs/21.0/user-guides/configuration-basic/vtctld.md new file mode 100644 index 000000000..ff2c6b8d8 --- /dev/null +++ b/content/en/docs/21.0/user-guides/configuration-basic/vtctld.md @@ -0,0 +1,41 @@ +--- +title: vtctld +weight: 5 +--- + +vtctld is not required to be highly available because it is not in the serving path of a query. Nevertheless, it may be wise to bring up more than a single instance. Typically, users bring up one instance per cell. + +Even if brought up within each cell, vtctld itself is not tied to that cell. It will attempt to access all servers of all cells. You can bring up vtctld with the following invocation: + +```sh +vtctld \ + --log_dir=${VTDATAROOT}/tmp \ + --port=15000 \ + --grpc_port=15999 \ + --service_map='grpc-vtctl,grpc-vtctld' +``` + +If the TopoServer is unreachable, or if the topo flags are incorrectly configured, vtctld will fail to start. You may see an error message like the following in the logs: + +```text +F0426 11:11:40.363545 14833 server.go:223] Failed to open topo server (etcd2,localhost:2379,/vitess/global): dial tcp 127.0.0.1:2379: connect: connection refused +``` + +The `service_map` flag allows you to configure the grpc APIs that a Vitess server exposes as grpc. If grpc-vtctl is not specified as a service\_map for vtctld, you will not be able to access it using `vtctldclient`. +Similarly, if grpc-vtctld is not specified as a service\_map for vtctld, you will not be able to access it using `vtctldclient`. + +vtctld is usually not very resource intensive. But you may need to provision more if you plan to run the `VDiff` command. This functionality will soon be moved to vttablet. + +## vtctldclient + +Since we will be using `vtctldclient` often, it will be convenient to configure an alias for it: + +```sh +alias vtctldclient="command vtctldclient --server " +``` + +{{< info >}} +We intend to move these arguments into an init file. Once that is done, there will be no need to set up the alias any more. +{{< /info >}} + +The next step will be to create a cell. diff --git a/content/en/docs/21.0/user-guides/configuration-basic/vtgate.md b/content/en/docs/21.0/user-guides/configuration-basic/vtgate.md new file mode 100644 index 000000000..6d0357958 --- /dev/null +++ b/content/en/docs/21.0/user-guides/configuration-basic/vtgate.md @@ -0,0 +1,104 @@ +--- +title: vtgate +weight: 11 +--- + +VTGates are the primary interface to the application. They do not have any persistent state. You can bring up as many vtgates as necessary. An application can connect to any vtgate to get access to all the servers within a cell. We recommend configuring a load balancer to distribute traffic between them. A typical rule of thumb would be to bring up as many vtgates as there are vttablets. + +It is better to bring up multiple vtgates within a single machine rather than trying to run a single instance that tries to use all the resources. This approach enables better amortization of Go’s garbage collector. + +You can bring up the vtgates before creating any keyspaces or bringing up vttablets. The advantage of bringing up the vtgates last is that it allows them to immediately discover the existing vttablets. Otherwise, it will take up to one polling cycle before they are discovered. The default value for this flag (`--tablet_refresh_interval`) is one minute. If you intend to reduce this value, ensure that the increased polling frequency will not overwhelm the toposerver. + +VTGate requires a cell to operate in. A vtgate’s main job is to forward requests to the vttablets in the local cell. However, vtgates can go cross-cell in two situations: + +* vtgate receives queries to the primary, and the primary is not in the current cell. +* vtgate was configured to go to other cells in case no local vttablets were available. + +Here is a sample vtgate invocation: + +```text +vtgate \ + --log_dir=${VTDATAROOT}/tmp \ + --cell=cell1 \ + --cells_to_watch=cell1 \ + --tablet_types_to_wait=PRIMARY,REPLICA \ + --port=15001 \ + --mysql_server_port=15306 \ + --mysql_auth_server_impl=static \ + --mysql_auth_server_static_file=mysql_creds.json \ + --grpc_port=15991 \ + --service_map='grpc-vtgateservice' \ + --vschema_ddl_authorized_users='dba%' +``` +VTGate uses the global topo to get the topo addresses of the cells it has to watch. For this reason, you do not need to specify the topo addresses for the current cell. + +VTGate does not require ``. + +For sending primary queries across cells, you must specify an additional `cells_to_watch` flag. This will make the vtgates watch those additional cells, and will allow them to keep track of the primaries in those cells. + +The `cells_to_watch` flag is a required parameter and must at least include the current cell. This is an [issue](https://github.com/vitessio/vitess/issues/6126) we will fix soon. + +Going cross-cell for non-primary requests is an advanced use case that requires setting up cell aliases. This topic will not be covered in this user guide. + +For those who wish to use the MySQL protocol, you must specify a `mysql_server_port` and a `mysql_auth_server_impl` for configuring authentication. Predefined auth servers are `clientcert`, `static`, `ldap` and `none`. The most commonly used authentication is `static` that allows you to specify the credentials through a `mysql_auth_server_static_file` parameter. + +The `vschema_ddl_authorized_users` specifies which users can alter the vschema by issuing “[vschema ddls](../../vschema-guide/vschema_ddl)” directly to vtgate. VSchema DDL is an experimental feature. + +Here are the contents of an example file that shows the ability to specify MySQL native passwords as well as plain text: + +```json +{ + "mysql_user": [ + { + "MysqlNativePassword": "*9E128DA0C64A6FCCCDCFBDD0FC0A2C967C6DB36F", + "Password": "mysql_password", + "UserData": "mysql_user" + } + ], + "mysql_user2": [ + { + "Password": "mysql_password", + "UserData": "mysql_user" + } + ], + "mysql_user3": [ + { + "MysqlNativePassword": "*9E128DA0C64A6FCCCDCFBDD0FC0A2C967C6DB36F", + "UserData": "mysql_user" + } + ] +} +``` + +For those who wish to use the Java or Go grpc clients to vtgate, you must also configure `grpc_port` and specify the service map as `service_map='grpc-vtgateservice'`. Note that the MySQL protocol support for `VStream` feature is currently experimental. + +You can also set the following flags to control load-balancing for replicas: + +* `discovery_high_replication_lag_minimum_serving`: If the replication lag of a vttablet exceeds this value, vtgate will treat it as unhealthy and will not send queries to it. This value is meant to match vttablet’s `unhealthy_threshold` value. +* `discovery_low_replication_lag`: If a single vttablet lags beyond this value, vtgate will not send it any queries. However, if too many replicas exceed this threshold, then vtgate will send queries to the ones that have the least lag. A weighted average algorithm is used to exclude the outliers. This value is meant to match vttablet’s `degraded_threshold` value. + +A vtgate that comes up successfully will show all the vttablets it has discovered in its `/debug/status` page under the `Health Check Cache` section. + +![vtgate-healthy-tablets](../img/vtgate-healthy-tablets.png) + +If vtgates cannot connect to one of the vttablets it discovered from the topo, or if the vttablet is unhealthy, it will be shown in red in the `Health Check Cache`, and a corresponding error message will be displayed next to it: + +![vtgate-partially-healthy-tablets](../img/vtgate-partially-healthy-tablets.png) + +You can verify that the vtgates came up successfully by using the MySQL client: + +```text +~/...vitess/examples/local> mysql -h 127.0.0.1 -P 15306 --user=mysql_user --password=mysql_password +[snip] +mysql> show databases; ++----------+ +| Database | ++----------+ +| commerce | ++----------+ +1 row in set (0.00 sec) +``` + +The `show databases` command presents the `commerce` keyspace as a database. Under the covers, the MySQL database backing it is actually `vt_commerce`. + +Congratulations! You have successfully brought up a Vitess cluster. diff --git a/content/en/docs/21.0/user-guides/configuration-basic/vtorc.md b/content/en/docs/21.0/user-guides/configuration-basic/vtorc.md new file mode 100644 index 000000000..cdaca04e1 --- /dev/null +++ b/content/en/docs/21.0/user-guides/configuration-basic/vtorc.md @@ -0,0 +1,46 @@ +--- +title: VTOrc +weight: 8 +--- + +VTOrc is the automated fault detection and repair tool of Vitess. It started off as a fork of the [Orchestrator](https://github.com/openark/orchestrator), which was then custom-fitted to the Vitess use-case running as a Vitess component. +An overview of the architecture of VTOrc can be found on this [page](../../../reference/vtorc/architecture). + +Setting up VTOrc lets you avoid performing the `InitShardPrimary` step. It automatically detects that the new shard doesn't have a primary and elects one for you. + + +### Flags + +For a full list of supported flags, please look at [VTOrc reference page](../../../reference/programs/vtorc). + +### UI, API and Metrics + +For information about the UI, API and metrics that VTOrc exports, please consult this [page](../../../reference/vtorc/ui_api_metrics). + +### Example invocation of VTOrc + +You can bring VTOrc using the following invocation: + +```sh +vtorc --topo_implementation etcd2 \ + --topo_global_server_address "localhost:2379" \ + --topo_global_root /vitess/global \ + --port 15000 \ + --log_dir=${VTDATAROOT}/tmp \ + --recovery-period-block-duration "10m" \ + --instance-poll-time "1s" \ + --topo-information-refresh-duration "30s" \ + --alsologtostderr + ``` + +You can optionally add a `clusters_to_watch` flag that contains a comma separated list of keyspaces or `keyspace/shard` values. If specified, VTOrc will manage only those clusters. + + +### Durability Policies + +All the failovers that VTOrc performs will be honoring the [durability policies](../../configuration-basic/durability_policy). Please be careful in setting the +desired durability policies for your keyspace because this will affect what situations VTOrc can recover from and what situations will require manual intervention. + +### Running VTOrc using the Vitess Operator + +To find information about deploying VTOrc using Vitess Operator please take a look at this [page](../../../reference/vtorc/running_with_vtop). diff --git a/content/en/docs/21.0/user-guides/configuration-basic/vttablet-mysql.md b/content/en/docs/21.0/user-guides/configuration-basic/vttablet-mysql.md new file mode 100644 index 000000000..1f5b25e38 --- /dev/null +++ b/content/en/docs/21.0/user-guides/configuration-basic/vttablet-mysql.md @@ -0,0 +1,219 @@ +--- +title: VTTablet and MySQL +weight: 8 +--- + +Let us assume that we want to bring up a single unsharded keyspace. The first step is to identify the number of replicas (including the primary) we would like to deploy. We should also make a decision about how to distribute them across the cells. + +Vitess requires you to assign a globally unique id (tablet UID) to every vttablet. This has to be an unsigned 32-bit integer. This is a legacy requirement derived from the fact that the MySQL server id (also an unsigned 32-bit integer) used to be the same as the tablet uid. This is not the case any more. + +In terms of mapping these components to machines, Vitess allows you to run multiple of these on the same machine. If this is the case, you will need to assign non-conflicting ports for these servers to listen on. + +VTTablet and MySQL are meant to be brought up as a pair within the same machine. By default, vttablet will connect to its MySQL over a unix socket. + +Let us look at the steps to bring up the first pair for an unsharded keyspace `commerce` in cell1 and a tablet uid of 100. + +## Starting MySQL + +`mysqlctl` is a convenience wrapper that can bring up and initialize a fresh MySQL server, and isolate all associated files within directories that are tied to the unique UID. This makes it easy to bring up multiple MySQL instances on the same machine. + +The necessary arguments to a `mysqlctl` are the `tablet_uid` and `mysql_port`. Here is a sample invocation: + +```sh +mysqlctl \ + --log_dir=${VTDATAROOT}/tmp \ + --tablet_uid=100 \ + --mysql_port=17100 \ + init +``` + +### my.cnf + +`mysqlctl` **will not** read configuration files from common locations such as `/etc/my.cnf` or `/etc/mysql/my.cnf`. Instead, it will create a separate `my.cnf` config file using builtin defaults. The source files can be found [here](https://github.com/vitessio/vitess/tree/main/config/mycnf). To add your own settings, you can set the `EXTRA_MY_CNF` environment variable to a list of colon-separated files. Alternatively, you can override the default behavior by specifying your own template file using the `-mysqlctl_mycnf_template` command line argument. + +For example, to override the default innodb buffer pool size, you would create a file named `/path/to/common.cnf` as follows: +```text +innodb_buffer_pool_size=1G +``` + +And then launch mysqlctl with as follows: + +```sh +EXTRA_MY_CNF=”/path/to/common.cnf” mysqlctl \ + --log_dir=${VTDATAROOT}/tmp \ + --tablet_uid=100 \ + --mysql_port=17100 \ + init +``` + +When specifying additional configuration changes to Vitess, please keep in mind that changing the following settings is unsupported: + +| Setting | Reason | +|---------------------|----------------| +| `auto_commit` | MySQL autocommit needs to be turned on. VTTablet uses connection pools to MySQL. If autocommit is turned off, MySQL will start an implicit transaction (with a point in time snapshot) for each connection and will work very hard at keeping the current view unchanged, which would be counter-productive. | +| `log-bin` | Several Vitess features rely on the binary log being enabled. | +| `binlog-format` | Vitess only supports row-based replication. Do not change this setting from the included configuration files. | +| `binlog-row-image` | Vitess only supports the default value (`FULL`) | +| `log-slave-updates` | Vitess requires this setting enabled, as it is in the included configuration files. | +| `character-set\*` | Vitess only supports `utf8` (and variants such as `utf8mb4`) | +| `gtid-mode` | Vitess relies on GTIDs to track changes to topology. | +| `gtid-strict-mode`/`enforce-gtid-consistency` | Vitess requires this setting to be unchanged. | + +Support was recently added to override `sql_mode`. However, we recommend keeping `STRICT_TRANS_TABLES` or replacing it with`STRICT_ALL_TABLES`. Without one of these settings, MySQL could truncate values at the time of writing, and this can mismatch with decisions made by the sharding logic and lead to data corruption. VTTablet ensures that one of these values is set. If absolutely necessary, you can override this check by setting `-enforce_strict_trans_tables=false` while invoking vttablet. + +### init\_db.sql + +After mysqld comes up, `mysqlctl` will initialize the server using an internal script, the contents of which can be found [here](https://github.com/vitessio/vitess/blob/main/config/init_db.sql). You can override this behavior by providing your own script using the `-init_db_sql_file` command line argument. + +### Disable AppArmor + +There is a common pitfall to watch out for: If you see an error like this in the mysqlctl logs, you may need to [disable AppArmor](../../../get-started/local/#disable-apparmor-or-selinux): + +```text +I0429 01:16:25.648506 1 mysqld.go:454] Waiting for mysqld socket file (/vtdataroot/tabletdata/mysql.sock) to be ready... +I0429 01:16:25.656153 1 mysqld.go:399] Mysqld.Start(1588122985) stderr: mysqld: [ERROR] Could not open required defaults file: /vtdataroot/tabletdata/my.cnf +I0429 01:16:25.656180 1 mysqld.go:399] Mysqld.Start(1588122985) stderr: mysqld: [ERROR] Fatal error in defaults handling. Program aborted! +I0429 01:16:25.657249 1 mysqld.go:418] Mysqld.Start(1588122985) exit: exit status 1 +``` + +Disabling AppArmor once may not be enough. Many software installs or upgrades automatically install it back. You may have to disable it again if this happens. + +### Verify MySQL + +You can verify that MySQL came up successfully by connecting to it from the command line client: + +```sh +$ mysql -S ${VTDATAROOT}/vt_0000000100/mysql.sock -u vt_dba +[snip] +mysql> show databases; ++--------------------+ +| Database | ++--------------------+ +| information_schema | +| _vt | +| mysql | +| performance_schema | +| sys | ++--------------------+ +5 rows in set (0.00 sec) +``` + +The MySQL instance that was brought up has no identity related to keyspace or shard at this moment. These will be assigned in subsequent steps. + +### mysqlctld + +`mysqlctld` is the server version of `mysqlctl`. If the target directories are empty when it is invoked, it automatically performs an `init`. The process can subsequently receive commands from vttablet to perform housekeeping operations like shutting down and restarting MySQL as needed. + +To enable communication with vttablet, the server must be configured to receive grpc messages on a unix domain socket: + +``` +mysqlctld \ + --log_dir=${VTDATAROOT}/tmp \ + --tablet_uid=100 \ + --mysql_port=17100 \ + --socket_file=/path/to/socket_file +``` + +When starting vttablet, the following additional flag must be specified: + +``` +--mysqlctl_socket=/path/to/socket_file +``` +## Starting vttablet + +VTTablet should be brought up on the same machine as the MySQL instance. It needs the following flags: + +* and . +* `tablet-path`: This should be the cell name followed by a `-` and the tablet UID used for `mysqlctl`. VTTablet will infer the `cell` name from this. Example: `cell1-100`. +* `init_keyspace`: The keyspace that the tablet is going to serve. This will cause a keyspace to be created if one is not present. +* `init_shard`: The shard that the tablet is going to serve. This will cause a shard to be created if one is not present. +* `init_tablet_type`: This will typically be REPLICA. You may use other tablet types like “RDONLY”. Note that you are not allowed to start a tablet as a "PRIMARY". +* `port`, `grpc_port`, and `--service_map` `'grpc-queryservice,grpc-tabletmanager'` + +There are some additional parameters that we recommend setting: + +* `enable_replication_reporter`: Enabling this flag will make vttablet send its replication lag information to the vtgates, and they will use this information to avoid sending queries to replicas that are lagged beyond a threshold. +* `unhealthy_threshold`: If `enable_replication_reporter` is enabled, and the replication lag exceeds this threshold, then vttablet stops serving queries. This value is meant to match the vtgate `discovery_high_replication_lag_minimum_serving` flag. +* `degraded_threshold`: This flag does not change vttablet’s behavior. This threshold is used to report a warning in the status page if the replication lag exceeds this threshold. This value is meant to match the vtgate `discovery_low_replication_lag` flag. +* `restore_from_backup`: This flag informs vttablet to automatically restore data from the latest backup. Once this task completes, vttablet will point itself at the current primary to catch up on replication. When that falls below the specified threshold, vtgate will automatically start sending queries to the tablet. +* `queryserver-config-pool-size`:This value should be set to the max number of simultaneous queries you want MySQL to run. This should typically be around 2-3x the number of allocated CPUs. Around 4-16. There is not much harm in going higher with this value, but you may see no additional benefits. This pool gets used if the workload is set to `oltp`, which is the default. +* `queryserver-config-transaction-cap`: This value should be set to how many concurrent transactions you wish to allow. This should be a function of transaction rate and transaction length. Typical values are in the low 100s. +* `queryserver-config-stream-pool-size`: This value is relevant only if you plan to run streaming queries using the `workload='olap'` setting. This value depends on how many simultaneous streaming queries you plan to run. Typical values are similar to `queryserver-config-pool-size`. +* `queryserver-config-query-timeout`: This value should be set to the upper limit you’re willing to allow an OLTP query to run before it’s deemed too expensive or detrimental to the rest of the system. VTTablet will kill any query that exceeds this timeout. This value is usually around 15-30s. +* `queryserver-config-transaction-timeout`: This value is meant to protect the situation where a client has crashed without completing a transaction. Typical value for this timeout is 30s. +* `queryserver-config-idle-timeout`: This value sets a time in seconds after which, if a connection has not been used, this connection will be removed from pool. This effectively manages number of connection objects and optimizes the pool performance. +* `queryserver-config-max-result-size`: This parameter prevents the OLTP application from accidentally requesting too many rows. If the result exceeds the specified number of rows, VTTablet returns an error. The default value is 10,000. + +Here is a typical vttablet invocation: + +```text +vttablet \ + --log_dir=${VTDATAROOT}/tmp \ + --cell=cell1 \ + --tablet-path=cell1-100 \ + --init_keyspace=commerce \ + --init_shard=0 \ + --init_tablet_type=replica \ + --port=15100 \ + --grpc_port=16100 \ + --service_map 'grpc-queryservice,grpc-tabletmanager’ \ + --enable_replication_reporter=true \ + --restore_from_backup=true \ + --queryserver-config-pool-size=16 \ + --queryserver-config-transaction-cap=300 \ + --queryserver-config-stream-pool-size= 16 +``` + +### Key configuration notes + +* It is important to set MySQL’s `max_connections` property to be 50%-100% higher than the total number of connections in the various pools. + * This is because Vitess may have to kill connections and open new ones. MySQL accounting has a delay in how it counts closed connections, which may cause its view of the number of connections to exceed the ones currently opened by Vitess. For example, in the above example, the `max_connections` settings should be around 800. +* It is also important to set vttablets `queryserver-config-idle-timeout` to be at least 10% lower than MySQL's `wait_timeout`. + * This is because MySQL's `wait_timeout` is the number of seconds the server waits for activity on a noninteractive connection before closing it. So if the vttablet setting is not lower the MySQL limit will be hit first and can cause issues with performance. The defaults are as follows: `queryserver-config-idle-timeout` defaults to 30 minutes and MySQL's `wait_timeout` defaults to 8 hours. + +It is normal to see errors like these in the log file until MySQL instances have been initialized and a vttablet has been elected as primary: + +```text +2020-04-27T00:38:02.040081Z 2 [Note] Aborted connection 2 to db: 'unconnected' user: 'root' host: 'localhost' (Got an error reading communication packets) +``` + +Starting the first vttablet against a keyspace and shard performs the following actions: + +* Create a keyspace and shard in the global topo if these did not exist before. +* Perform a [RebuildKeyspaceGraph](../../../reference/programs/vtctl/keyspaces/#rebuildkeyspacegraph) to deploy the global topo to the current cell (cell1). +* Create a tablet record, which will allow vtgates to discover it. +* No restore action will be performed because this is the first time vttablet is coming up and no backups exist yet. + +The vttablet will be unhealthy because the database for the keyspace has not been created. Visiting the `/debug/status` page on its port should show the following information: + +![unhealthy-tablet](../img/unhealthy-tablet.png) + +The next step is to bring up the rest of the vttablet-MySQL pairs on other machines or different ports of the same machine. + +## Tablet Records + +You can find out the current state of all vttablets with the following command: + +```sh +$ vtctldclient GetTablets +cell1-0000000100 commerce 0 primary sougou-lap1:15100 sougou-lap1:17100 [] 2021-01-02T22:27:11Z +cell1-0000000101 commerce 0 replica sougou-lap1:15101 sougou-lap1:17101 [] +cell1-0000000102 commerce 0 rdonly sougou-lap1:15102 sougou-lap1:17102 [] +``` + +This information is extracted from the “tablet record” in the cell specific topo. You can also browse to this information in VTAdmin either from the Tablets page or from the Topology page. + +![vtctld-tablet-list](../img/vtadmin-tablet-list.png) + +You can move a vttablet-MySQL pair to a new host after shutting them down on the current host. Bringing up the new pair with the same UID will update the tablet record with the new address and ports. This will be noticed by the vtgates and they will adjust their traffic accordingly. However, you must not move a tablet to another cell. + +Gracefully bringing down a vttablet will remove the address information from the tablet record thereby informing the vtgates that they should not attempt to send any more traffic to the tablets. + +If a vttablet crashes, the address info will remain in the topo. However, vtgates will notice that the tablet is not reachable and will remember it as unhealthy. They will keep attempting to contact the tablet until it comes back up as healthy. + +It is recommended that you delete the tablet record if you intend to bring down a vttablet permanently. The command to delete a tablet is: + +```text +vtctldclient DeleteTablets cell1-100 +``` + diff --git a/content/en/docs/21.0/user-guides/migration/_index.md b/content/en/docs/21.0/user-guides/migration/_index.md new file mode 100644 index 000000000..1a3474b3d --- /dev/null +++ b/content/en/docs/21.0/user-guides/migration/_index.md @@ -0,0 +1,5 @@ +--- +title: Migration +description: User guides covering data migrations into Vitess +weight: 3 +--- diff --git a/content/en/docs/21.0/user-guides/migration/materialize.md b/content/en/docs/21.0/user-guides/migration/materialize.md new file mode 100644 index 000000000..88fda7149 --- /dev/null +++ b/content/en/docs/21.0/user-guides/migration/materialize.md @@ -0,0 +1,403 @@ +--- +title: Materialize +weight: 3 +aliases: ['/docs/user-guides/materialize/'] +--- + +{{< info >}} +This guide follows on from the [Get Started](../../../get-started/) guides. Please make sure that you have a +[Kubernetes Operator](../../../get-started/operator) or [local](../../../get-started/local) installation ready. +Make sure you have only run the "101" step of the examples, for example `101_initial_cluster.sh` in the +[local](../../../get-started/local) example. The commands in this guide also assume you have setup the shell +aliases from the example, e.g. `env.sh` in the [local](../../../get-started/local) example. +{{< /info >}} + +[`Materialize`](../../../reference/vreplication/materialize/) is a VReplication command/workflow. It can be used as a more +general way to achieve something similar to [MoveTables](../../../concepts/move-tables) or as a way to generate +[materialized views](https://en.wikipedia.org/wiki/Materialized_view) of a table (or set of tables) in the same or +different keyspace from the source table (or set of tables). In general, it can be used to create and maintain +continually updated [materialized views](https://en.wikipedia.org/wiki/Materialized_view) in Vitess, without having +to resort to manual or trigger-based population of the view content. + +Since [`Materialize`](../../../reference/vreplication/materialize/) uses VReplication, the view can be kept up-to-date +in very close to real-time which enables use-cases like creating copies of the same table that are sharded in +different ways for the purposes of avoiding expensive cross-shard queries. `Materialize` is also flexible enough to +allow for you to pre-create the schema and [VSchema](../../../concepts/vschema/) for the copied table, allowing you +to for example maintain a copy of a table without some of the source table's MySQL indexes. + +All of the command options and parameters are listed in our [reference page for the `Materialize` command](../../../reference/programs/vtctldclient/vtctldclient_materialize/). In our examples to follow we will only touch on what is possible using +[`Materialize`](../../../reference/vreplication/materialize). + +Let's start by loading some sample data: + +```bash +mysql < ../common/insert_commerce_data.sql +``` + +We can look at what we just inserted: + +```bash +$ mysql --table < ../common/select_commerce_data.sql + +Using commerce +Customer ++-------------+--------------------+ +| customer_id | email | ++-------------+--------------------+ +| 1 | alice@domain.com | +| 2 | bob@domain.com | +| 3 | charlie@domain.com | +| 4 | dan@domain.com | +| 5 | eve@domain.com | ++-------------+--------------------+ +Product ++----------+-------------+-------+ +| sku | description | price | ++----------+-------------+-------+ +| SKU-1001 | Monitor | 100 | +| SKU-1002 | Keyboard | 30 | ++----------+-------------+-------+ +COrder ++----------+-------------+----------+-------+ +| order_id | customer_id | sku | price | ++----------+-------------+----------+-------+ +| 1 | 1 | SKU-1001 | 100 | +| 2 | 2 | SKU-1002 | 30 | +| 3 | 3 | SKU-1002 | 30 | +| 4 | 4 | SKU-1002 | 30 | +| 5 | 5 | SKU-1002 | 30 | ++----------+-------------+----------+-------+ +``` + +Note that we are using `commerce` keyspace. + +## Planning to Use Materialize + +In this scenario, we are going to make two copies of the `corder` table **in the same `commerce` keyspace** using +the table names of `corder_view` and `corder_view_redacted`. The first copy will be identical to the source table, but +for the `corder_view_redacted` copy we will use the opportunity to drop or redact the `price` column. + +## Create the Destination Tables + +In the case where we are using `Materialize` to copy tables *between or across keyspaces* we can use the +`"create_ddl": "copy"` option in the +[`Materialize --table-settings`](../../../reference/vreplication/materialize/#--table-settings) flag +to create the target table for us (similar to what `MoveTables` does). However, in our case where we are using +`Materialize` within a single keyspace (`commerce`) so we need to manually create the target tables. Let's go ahead +and do that: + +```sql +$ cat <}} +While this deletes the `Materialize` VReplication stream, the actual source and target tables are left unchanged +and in the same state they were at the moment the VReplication stream was deleted. +{{}} diff --git a/content/en/docs/21.0/user-guides/migration/migrate-data.md b/content/en/docs/21.0/user-guides/migration/migrate-data.md new file mode 100644 index 000000000..752248093 --- /dev/null +++ b/content/en/docs/21.0/user-guides/migration/migrate-data.md @@ -0,0 +1,71 @@ +--- +title: Migrating Data Into Vitess +weight: 1 +aliases: ['/docs/user-guides/migrate-data/'] +--- + +# Introduction + +There are two main parts to migrating your data to Vitess: migrating the actual data and repointing the application. This page will focus primarily on the methods that can be used to migrate *your data* into Vitess. + +## Overview + +There are different methods to migrate your data into Vitess. Choosing the appropriate option depends on several factors: +1. The nature of the application accessing the MySQL database +1. The size of the MySQL database to be migrated +1. The load, especially the write load, on the MySQL database +1. Your tolerance for downtime during the migration of data +1. Whether you require the ability to reverse the migration if needed +1. The network level configuration of your components + +The two primary methods are: + +* Dump and Restore +* VReplication (**Recommended**) + +## Dump and Restore + +{{< warning >}} +This method likely isn’t viable for most production applications as it will incur significant application downtime. +{{}} + +The simplest method to migrate data is to do a data dump and restore (AKA "stop-the-world"). For this we recommend using [`mysqldump`](https://dev.mysql.com/doc/refman/en/mysqldump.html) or +[`go-mydumper`](https://github.com/aquarapid/go-mydumper). To execute this method you would follow these steps: +1. Stop writing to the source MySQL database +1. Take a logical dump of the database +1. Apply any simple transformations on the output if needed +1. Import the data into Vitess via the frontend [Vitess Gateway](../../../concepts/vtgate/) (`vtgate`) +1. Repoint your application to the new database via a [Vitess Gateway](../../../concepts/vtgate/) and resume writing + +This method is only suitable for migrating small or non-critical databases that can tolerate downtime. The database will be unavailable for writes between the time the dump is started and the time the restore of the dump is completed. For databases of 10’s of GB and up this process could take hours or even days. The amount of downtime scales with the amount of data being migrated. + +## VReplication + +Vitess provides the [`MoveTables`](../../../reference/vreplication/movetables/) command which allows you to perform +fully online data migrations into Vitess with the ability to (temporarily) revert the migration if needed — all +without incurring application downtime. + +An ["unmanaged Vitess tablet"](../../configuration-advanced/unmanaged-tablet/) will be placed in front of your existing MySQL database. This tablet will then be the bridge that allows you to migrate the data into Vitess. This unmanaged tablet ([`vttablet`](../../../reference/programs/vttablet/)) must be able to communicate with your new Vitess cluster over the network. + +This method uses a combination of transactional SELECTs and filtered MySQL replication to safely and accurately copy each +of the tables in the source database to Vitess without disrupting normal traffic to your existing database. Once all the +data is copied, the two databases are then kept in sync using a replication stream from the source database. You can +verify that the source and destination are fully in sync using [`VDiff`](../../../reference/vreplication/vdiff/) command +and perform final testing on the Vitess keyspace before cutting over your application traffic. + +Once your testing has completed, application traffic can be moved from the source MySQL database itself and switched to the Vitess cluster's [`vtgate`](../../../reference/programs/vtgate/) instance(s). For this switch, a small amount of downtime will likely be necessary. This downtime could be seconds or minutes, depending on the application and application automation. + +Once your application traffic is going to Vitess — while your original MySQL instance is still serving the queries — you can prepare to fully cutover all traffic and query serving using the [`SwitchTraffic`](../../../reference/vreplication/movetables/#switchtraffic) action. This will cause the Vitess cluster to start serving all traffic for the tables that were migrated. At this point the VReplication workflow automatically reverses and the original MySQL instance is automatically kept in sync with Vitess. Once the switch is complete and you have confirmed that everything is working +correctly you can complete the migration using the [`Complete`](../../../reference/vreplication/movetables/#complete) +action and the original MySQL instance can be shut down. If for any reason you need to reverse the migration, you +can use the [`ReverseTraffic`](../../../reference/vreplication/movetables/#reversetraffic) action to switch back to +serving data from the original MySQL instance before later attempt another cutover using [`SwitchTraffic`](../../../reference/vreplication/movetables/#switchtraffic). + +{{< info >}} +If you require transforming your data while migrating it into Vitess then the [`Materialize`](../../../reference/vreplication/materialize/) command offers an alternative to [`MoveTables`](../../../reference/vreplication/movetables/). +{{}} + +The remaining pages in this guide walk you through an example of the key steps for this native Vitess migration process: +1. [Moving the tables](../move-tables/) +2. [Materializing data if needed](../materialize/) +3. [Troubleshooting](../troubleshooting/) diff --git a/content/en/docs/21.0/user-guides/migration/move-tables.md b/content/en/docs/21.0/user-guides/migration/move-tables.md new file mode 100644 index 000000000..331646dfd --- /dev/null +++ b/content/en/docs/21.0/user-guides/migration/move-tables.md @@ -0,0 +1,831 @@ +--- +title: Move Tables +weight: 2 +aliases: ['/docs/user-guides/move-tables/'] +--- + +{{< info >}} +This guide follows on from the [Get Started](../../../get-started/) guides. Please make sure that you have an +[Kubernetes Operator](../../../get-started/operator) or [local](../../../get-started/local) installation ready. +Make sure you have only run the "101" step of the examples, for example `101_initial_cluster.sh` in the +[local](../../../get-started/local) example. The commands in this guide also assume you have setup the shell +aliases from the example, e.g. `env.sh` in the [local](../../../get-started/local) example. +{{< /info >}} + +[MoveTables](../../../concepts/move-tables) is a [VReplication](../../../reference/vreplication/) workflow that enables you to move all or a subset of +tables between [keyspaces](../../../concepts/keyspace) without downtime. For example, after +[initially deploying Vitess](../../../get-started/local), your single `commerce` schema may grow so large that it needs +to be split into multiple [keyspaces](../../../concepts/keyspace) (often times referred to as vertical or functional sharding). + +All of the command options and parameters are listed in our [reference page for `MoveTables`](../../../reference/vreplication/movetables). + +As a stepping stone towards splitting a single table across multiple servers (sharding), it usually makes sense to first split from having a single monolithic keyspace (`commerce`) to having multiple keyspaces (`commerce` and `customer`). For example, in our hypothetical ecommerce system we may know that the `customer` and `corder` tables are closely related and both growing quickly. + +Let's start by simulating this situation by loading sample data: + +```bash +# On local and operator installs: +$ mysql < ../common/insert_commerce_data.sql +``` + +We can look at what we just inserted: + +```bash +# On local and operator installs: +$ mysql --table < ../common/select_commerce_data.sql +Using commerce +Customer ++-------------+--------------------+ +| customer_id | email | ++-------------+--------------------+ +| 1 | alice@domain.com | +| 2 | bob@domain.com | +| 3 | charlie@domain.com | +| 4 | dan@domain.com | +| 5 | eve@domain.com | ++-------------+--------------------+ +Product ++----------+-------------+-------+ +| sku | description | price | ++----------+-------------+-------+ +| SKU-1001 | Monitor | 100 | +| SKU-1002 | Keyboard | 30 | ++----------+-------------+-------+ +COrder ++----------+-------------+----------+-------+ +| order_id | customer_id | sku | price | ++----------+-------------+----------+-------+ +| 1 | 1 | SKU-1001 | 100 | +| 2 | 2 | SKU-1002 | 30 | +| 3 | 3 | SKU-1002 | 30 | +| 4 | 4 | SKU-1002 | 30 | +| 5 | 5 | SKU-1002 | 30 | ++----------+-------------+----------+-------+ +``` + +Notice that all of the tables are currently in the `commerce` schema/keyspace here. + +## Planning to Move Tables + +In this scenario, we are going to add the `customer` [keyspace](../../../concepts/keyspace) in addition to the `commerce` keyspace we already have. This new keyspace will be backed by its own set of mysqld instances. We will then move the `customer` and `corder` tables from the `commerce` keyspace to the newly created `customer` keyspace while the `product` table will remain in the `commerce` keyspace. This operation happens online, which means that it does not block either read or write operations to the tables, *except* for a very small window during the final cut-over. + +## Show our current tablets + +```bash +$ mysql -e "show vitess_tablets" ++-------+----------+-------+------------+---------+------------------+-----------+----------------------+ +| Cell | Keyspace | Shard | TabletType | State | Alias | Hostname | PrimaryTermStartTime | ++-------+----------+-------+------------+---------+------------------+-----------+----------------------+ +| zone1 | commerce | 0 | PRIMARY | SERVING | zone1-0000000100 | localhost | 2023-01-04T17:59:37Z | +| zone1 | commerce | 0 | REPLICA | SERVING | zone1-0000000101 | localhost | | +| zone1 | commerce | 0 | RDONLY | SERVING | zone1-0000000102 | localhost | | ++-------+----------+-------+------------+---------+------------------+-----------+----------------------+ +``` + +As can be seen, we have 3 tablets running, with tablet ids 100, 101 and 102; which we use in the examples to form the tablet alias/names like `zone1-0000000100`, etc. + +## Create New Tablets + +The first step in our MoveTables operation is to deploy new tablets for our `customer` keyspace. By the convention used in our examples, we are going to use the tablet ids 200-202 as the `commerce` keyspace previously used `100-102`. Once the tablets have started, we will wait for the operator (k8s install) or `vtorc` (local install) to promote one of the new tablets to `PRIMARY` before proceeding: + +### Using Operator + +```bash +$ kubectl apply -f 201_customer_tablets.yaml +``` + +After a few minutes the pods should appear running: + +```bash +$ kubectl get pods +example-commerce-x-x-zone1-vtorc-c13ef6ff-5d658d78d8-dvmnn 1/1 Running 1 (4m39s ago) 65d +example-etcd-faf13de3-1 1/1 Running 1 (4m39s ago) 65d +example-etcd-faf13de3-2 1/1 Running 1 (4m39s ago) 65d +example-etcd-faf13de3-3 1/1 Running 1 (4m39s ago) 65d +example-vttablet-zone1-1250593518-17c58396 3/3 Running 1 (27s ago) 32s +example-vttablet-zone1-2469782763-bfadd780 3/3 Running 3 (4m39s ago) 65d +example-vttablet-zone1-2548885007-46a852d0 3/3 Running 3 (4m39s ago) 65d +example-vttablet-zone1-3778123133-6f4ed5fc 3/3 Running 1 (26s ago) 32s +example-zone1-vtadmin-c03d7eae-7dcd4d75c7-szbwv 2/2 Running 2 (4m39s ago) 65d +example-zone1-vtctld-1d4dcad0-6b9cd54f8f-jmdt9 1/1 Running 2 (4m39s ago) 65d +example-zone1-vtgate-bc6cde92-856d44984b-lqfvg 1/1 Running 2 (4m6s ago) 65d +vitess-operator-8df7cc66b-6vtk6 1/1 Running 0 55s +``` + +Again, the operator will promote one of the tablets to `PRIMARY` implicitly for you. + +Make sure that you restart the port-forward after launching the pods has completed: + +```bash +$ killall kubectl +./pf.sh & +``` + +### Using a Local Deployment + +```bash +$ ./201_customer_tablets.sh +``` + +## Show All Tablets + +```bash +$ mysql -e "show vitess_tablets" ++-------+----------+-------+------------+---------+------------------+-----------+----------------------+ +| Cell | Keyspace | Shard | TabletType | State | Alias | Hostname | PrimaryTermStartTime | ++-------+----------+-------+------------+---------+------------------+-----------+----------------------+ +| zone1 | commerce | 0 | PRIMARY | SERVING | zone1-0000000100 | localhost | 2023-01-04T17:59:37Z | +| zone1 | commerce | 0 | REPLICA | SERVING | zone1-0000000101 | localhost | | +| zone1 | commerce | 0 | RDONLY | SERVING | zone1-0000000102 | localhost | | +| zone1 | customer | 0 | PRIMARY | SERVING | zone1-0000000201 | localhost | 2023-01-04T18:00:22Z | +| zone1 | customer | 0 | REPLICA | SERVING | zone1-0000000200 | localhost | | +| zone1 | customer | 0 | RDONLY | SERVING | zone1-0000000202 | localhost | | ++-------+----------+-------+------------+---------+------------------+-----------+----------------------+ +``` + +{{< info >}} +The following change does not change actual query routing yet. We will later use the _SwitchTraffic_ action to perform that. +{{}} + +## Start the Move + +In this step we will create the `MoveTables` workflow, which copies the tables from the `commerce` keyspace into +`customer`. This operation does not block any database activity; the `MoveTables` operation is performed online: + +```bash +vtctldclient MoveTables --target-keyspace customer --workflow commerce2customer create --source-keyspace commerce --tables 'customer,corder' +``` + +A few things to note: + * In a real-world situation this process can take hours or even days to complete depending on the size of the table. + * The workflow name (`commerce2customer` in this case) is arbitrary, you can name it whatever you like. You will use this name for the other `MoveTables` actions like in the upcoming `SwitchTraffic` step. + +## Check Routing Rules (Optional) + +To see what happens under the covers, let's look at the [**routing rules**](../../../reference/features/schema-routing-rules/) that the `MoveTables` operation created. These are instructions used by a [`VTGate`](../../../concepts/vtgate) to determine which backend keyspace to send requests to for a given table — even when using a fully qualified table name such as `commerce.customer`: + +```json +$ vtctldclient GetRoutingRules +{ + "rules": [ + { + "fromTable": "customer.customer@rdonly", + "toTables": [ + "commerce.customer" + ] + }, + { + "fromTable": "commerce.corder@rdonly", + "toTables": [ + "commerce.corder" + ] + }, + { + "fromTable": "customer", + "toTables": [ + "commerce.customer" + ] + }, + { + "fromTable": "customer.customer@replica", + "toTables": [ + "commerce.customer" + ] + }, + { + "fromTable": "corder@replica", + "toTables": [ + "commerce.corder" + ] + }, + { + "fromTable": "customer.corder", + "toTables": [ + "commerce.corder" + ] + }, + { + "fromTable": "commerce.corder@replica", + "toTables": [ + "commerce.corder" + ] + }, + { + "fromTable": "customer@rdonly", + "toTables": [ + "commerce.customer" + ] + }, + { + "fromTable": "commerce.customer@replica", + "toTables": [ + "commerce.customer" + ] + }, + { + "fromTable": "corder", + "toTables": [ + "commerce.corder" + ] + }, + { + "fromTable": "corder@rdonly", + "toTables": [ + "commerce.corder" + ] + }, + { + "fromTable": "customer.corder@rdonly", + "toTables": [ + "commerce.corder" + ] + }, + { + "fromTable": "customer@replica", + "toTables": [ + "commerce.customer" + ] + }, + { + "fromTable": "customer.customer", + "toTables": [ + "commerce.customer" + ] + }, + { + "fromTable": "commerce.customer@rdonly", + "toTables": [ + "commerce.customer" + ] + }, + { + "fromTable": "customer.corder@replica", + "toTables": [ + "commerce.corder" + ] + } + ] +} +``` + +The `MoveTables` operation has created [routing rules](../../../reference/features/schema-routing-rules/) to explicitly route +queries against the `customer` and `corder` tables — including the fully qualified `customer.customer` and `customer.corder` +names — to the respective tables in the `commerce` keyspace so that currently all requests go to the original keyspace. This +is done so that when `MoveTables` creates the new copy of the tables in the `customer` keyspace, there is no ambiguity about +where to route requests for the `customer` and `corder` tables. All requests for those tables will keep going to the original +instance of those tables in `commerce` keyspace. Any changes to the tables after the `MoveTables` is executed will +be copied faithfully to the new copy of these tables in the `customer` keyspace. + +## Monitoring Progress (Optional) + +In this example there are only a few rows in the tables, so the `MoveTables` operation only takes seconds. If the tables were large, however, you may need to monitor the progress of the operation. You can get a basic summary of the progress using the [`status`](../../../reference/vreplication/movetables/#status) action: + +```bash +$ vtctldclient MoveTables --target-keyspace customer --workflow commerce2customer status --format=json +{ + "table_copy_state": {}, + "shard_streams": { + "customer/0": { + "streams": [ + { + "id": 2, + "tablet": { + "cell": "zone1", + "uid": 200 + }, + "source_shard": "commerce/0", + "position": "5d8e0b24-6873-11ee-9359-49d03ab2cdee:1-51", + "status": "Running", + "info": "VStream Lag: 0s" + } + ] + } + }, + "traffic_state": "Reads Not Switched. Writes Not Switched" +} +``` + +You can get more detailed status information using the +[`show`](../../../reference/programs/vtctldclient/vtctldclient_movetables/vtctldclient_movetables_show/) sub-command: + +```json +$ vtctldclient MoveTables --target-keyspace customer --workflow commerce2customer show --include-logs=false +{ + "workflows": [ + { + "name": "commerce2customer", + "source": { + "keyspace": "commerce", + "shards": [ + "0" + ] + }, + "target": { + "keyspace": "customer", + "shards": [ + "0" + ] + }, + "max_v_replication_lag": "1", + "shard_streams": { + "0/zone1-0000000200": { + "streams": [ + { + "id": "2", + "shard": "0", + "tablet": { + "cell": "zone1", + "uid": 200 + }, + "binlog_source": { + "keyspace": "commerce", + "shard": "0", + "tablet_type": "UNKNOWN", + "key_range": null, + "tables": [], + "filter": { + "rules": [ + { + "match": "customer", + "filter": "select * from customer", + "convert_enum_to_text": {}, + "convert_charset": {}, + "source_unique_key_columns": "", + "target_unique_key_columns": "", + "source_unique_key_target_columns": "", + "convert_int_to_enum": {} + }, + { + "match": "corder", + "filter": "select * from corder", + "convert_enum_to_text": {}, + "convert_charset": {}, + "source_unique_key_columns": "", + "target_unique_key_columns": "", + "source_unique_key_target_columns": "", + "convert_int_to_enum": {} + } + ], + "field_event_mode": "ERR_ON_MISMATCH", + "workflow_type": "0", + "workflow_name": "" + }, + "on_ddl": "IGNORE", + "external_mysql": "", + "stop_after_copy": false, + "external_cluster": "", + "source_time_zone": "", + "target_time_zone": "" + }, + "position": "5d8e0b24-6873-11ee-9359-49d03ab2cdee:1-51", + "stop_position": "", + "state": "Running", + "db_name": "vt_customer", + "transaction_timestamp": { + "seconds": "0", + "nanoseconds": 0 + }, + "time_updated": { + "seconds": "1697060227", + "nanoseconds": 0 + }, + "message": "", + "copy_states": [], + "logs": [], + "log_fetch_error": "", + "tags": [], + "rows_copied": "0", + "throttler_status": { + "component_throttled": "", + "time_throttled": { + "seconds": "0", + "nanoseconds": 0 + } + } + } + ], + "tablet_controls": [], + "is_primary_serving": true + } + }, + "workflow_type": "MoveTables", + "workflow_sub_type": "None", + "max_v_replication_transaction_lag": "1", + "defer_secondary_keys": false + } + ] +} +``` + +## Validate Correctness (Optional) + +We can use [`VDiff`](../../../reference/vreplication/vdiff/) to perform a logical diff between the sources and target +to confirm that they are fully in sync: + +```bash +$ vtctldclient VDiff --target-keyspace customer --workflow commerce2customer create +VDiff bc74b91b-2ee8-4869-bc39-4740ce445e20 scheduled on target shards, use show to view progress + +$ vtctldclient VDiff --format=json --target-keyspace customer --workflow commerce2customer show last --verbose +{ + "Workflow": "commerce2customer", + "Keyspace": "customer", + "State": "completed", + "UUID": "d050262e-8c5f-11ed-ac72-920702940ee0", + "RowsCompared": 10, + "HasMismatch": false, + "Shards": "0", + "StartedAt": "2023-01-04 18:44:26", + "CompletedAt": "2023-01-04 18:44:26", + "TableSummary": { + "corder": { + "TableName": "corder", + "State": "completed", + "RowsCompared": 5, + "MatchingRows": 5, + "MismatchedRows": 0, + "ExtraRowsSource": 0, + "ExtraRowsTarget": 0 + }, + "customer": { + "TableName": "customer", + "State": "completed", + "RowsCompared": 5, + "MatchingRows": 5, + "MismatchedRows": 0, + "ExtraRowsSource": 0, + "ExtraRowsTarget": 0 + } + }, + "Reports": { + "corder": { + "0": { + "TableName": "corder", + "ProcessedRows": 5, + "MatchingRows": 5, + "MismatchedRows": 0, + "ExtraRowsSource": 0, + "ExtraRowsTarget": 0 + } + }, + "customer": { + "0": { + "TableName": "customer", + "ProcessedRows": 5, + "MatchingRows": 5, + "MismatchedRows": 0, + "ExtraRowsSource": 0, + "ExtraRowsTarget": 0 + } + } + } +} +``` + +{{< info >}} +This can take a long time to complete on very large tables. +{{}} + +## Switching Traffic + +Once the `MoveTables` operation is complete ([in the "running" or replicating phase](../../../../design-docs/vreplication/life-of-a-stream/)), the first step in making the changes live is to _switch_ all query serving +traffic from the old `commerce` keyspace to the `customer` keyspace for the tables we moved. Queries against the other +tables will continue to route to the `commerce` keyspace. + +```bash +$ vtctldclient MoveTables --target-keyspace customer --workflow commerce2customer SwitchTraffic +SwitchTraffic was successful for workflow customer.commerce2customer + +Start State: Reads Not Switched. Writes Not Switched +Current State: All Reads Switched. Writes Switched +``` + +{{< info >}} +While we have switched all traffic in this example, you can also switch non-primary reads and writes separately by +specifying the [`--tablet_types`](../../../reference/vreplication/movetables/#--tablet_types) parameter to +`SwitchTraffic`. +{{}} + +## Check the Routing Rules (Optional) + +If we now look at the [routing rules](../../../reference/features/schema-routing-rules/) after the `SwitchTraffic` +step, we will see that all queries against the `customer` and `corder` tables will get routed to the `customer` keyspace: + +```json +$ vtctldclient GetRoutingRules +{ + "rules": [ + { + "from_table": "commerce.corder@rdonly", + "to_tables": [ + "customer.corder" + ] + }, + { + "from_table": "corder@rdonly", + "to_tables": [ + "customer.corder" + ] + }, + { + "from_table": "customer.corder@replica", + "to_tables": [ + "customer.corder" + ] + }, + { + "from_table": "commerce.corder@replica", + "to_tables": [ + "customer.corder" + ] + }, + { + "from_table": "customer.corder@rdonly", + "to_tables": [ + "customer.corder" + ] + }, + { + "from_table": "customer@replica", + "to_tables": [ + "customer.customer" + ] + }, + { + "from_table": "customer.customer@replica", + "to_tables": [ + "customer.customer" + ] + }, + { + "from_table": "corder@replica", + "to_tables": [ + "customer.corder" + ] + }, + { + "from_table": "commerce.customer@rdonly", + "to_tables": [ + "customer.customer" + ] + }, + { + "from_table": "customer@rdonly", + "to_tables": [ + "customer.customer" + ] + }, + { + "from_table": "customer.customer@rdonly", + "to_tables": [ + "customer.customer" + ] + }, + { + "from_table": "commerce.customer@replica", + "to_tables": [ + "customer.customer" + ] + }, + { + "from_table": "corder", + "to_tables": [ + "customer.corder" + ] + }, + { + "from_table": "commerce.corder", + "to_tables": [ + "customer.corder" + ] + }, + { + "from_table": "customer", + "to_tables": [ + "customer.customer" + ] + }, + { + "from_table": "commerce.customer", + "to_tables": [ + "customer.customer" + ] + } + ] +} +``` + +## Reverting the Switch (Optional) + +As part of the `SwitchTraffic` operation, Vitess will automatically setup a reverse VReplication workflow (unless +you supply the `--enable-reverse-replication=false` flag) to copy changes now applied to the moved tables in the +target keyspace — `customer` and `corder` in the `customer` keyspace — back to the original source tables in the +source `commerce` keyspace. This allows us to reverse or revert the cutover using the [`ReverseTraffic`](../../../reference/vreplication/movetables/#reversetraffic) +action, without data loss, even after we have started writing to the new `customer` keyspace. Note that the +workflow for this reverse workflow is created in the original source keyspace and given the name of the original +workflow with `_reverse` appended. So in our example where the `MoveTables` workflow was in the `customer` keyspace +and called `commerce2customer`, the reverse workflow is in the `commerce` keyspace and called +`commerce2customer_reverse`. We can see the details of this auto-created workflow using the +[`Workflow show`](../../../reference/vreplication/workflow/) command: + +```json +$ vtctldclient Workflow --keyspace commerce show --workflow commerce2customer_reverse +{ + "workflows": [ + { + "name": "commerce2customer_reverse", + "source": { + "keyspace": "customer", + "shards": [ + "0" + ] + }, + "target": { + "keyspace": "commerce", + "shards": [ + "0" + ] + }, + "max_v_replication_lag": "1", + "shard_streams": { + "0/zone1-0000000101": { + "streams": [ + { + "id": "1", + "shard": "0", + "tablet": { + "cell": "zone1", + "uid": 101 + }, + "binlog_source": { + "keyspace": "customer", + "shard": "0", + "tablet_type": "UNKNOWN", + "key_range": null, + "tables": [], + "filter": { + "rules": [ + { + "match": "customer", + "filter": "select * from `customer`", + "convert_enum_to_text": {}, + "convert_charset": {}, + "source_unique_key_columns": "", + "target_unique_key_columns": "", + "source_unique_key_target_columns": "", + "convert_int_to_enum": {} + }, + { + "match": "corder", + "filter": "select * from `corder`", + "convert_enum_to_text": {}, + "convert_charset": {}, + "source_unique_key_columns": "", + "target_unique_key_columns": "", + "source_unique_key_target_columns": "", + "convert_int_to_enum": {} + } + ], + "field_event_mode": "ERR_ON_MISMATCH", + "workflow_type": "0", + "workflow_name": "" + }, + "on_ddl": "IGNORE", + "external_mysql": "", + "stop_after_copy": false, + "external_cluster": "", + "source_time_zone": "", + "target_time_zone": "" + }, + "position": "751b3b58-6874-11ee-9a45-2b583b20ee4a:1-4579", + "stop_position": "", + "state": "Running", + "db_name": "vt_commerce", + "transaction_timestamp": { + "seconds": "1697060479", + "nanoseconds": 0 + }, + "time_updated": { + "seconds": "1697060690", + "nanoseconds": 0 + }, + "message": "", + "copy_states": [], + "logs": [ + { + "id": "1", + "stream_id": "1", + "type": "Stream Created", + "state": "Stopped", + "created_at": { + "seconds": "1697046079", + "nanoseconds": 0 + }, + "updated_at": { + "seconds": "1697046079", + "nanoseconds": 0 + }, + "message": "{\"component_throttled\":\"\",\"db_name\":\"vt_commerce\",\"defer_secondary_keys\":\"0\",\"id\":\"1\",\"max_replication_lag\":\"9223372036854775807\",\"max_tps\":\"9223372036854775807\",\"pos\":\"MySQL56/751b3b58-6874-11ee-9a45-2b583b20ee4a:1-4577\",\"rows_copied\":\"0\",\"source\":\"keyspace:\\\"customer\\\" shard:\\\"0\\\" filter:{rules:{match:\\\"customer\\\" filter:\\\"select * from `customer`\\\"} rules:{match:\\\"corder\\\" filter:\\\"select * from `corder`\\\"}}\",\"state\":\"Stopped\",\"tags\":\"\",\"time_heartbeat\":\"0\",\"time_throttled\":\"0\",\"time_updated\":\"1697060479\",\"transaction_timestamp\":\"0\",\"workflow\":\"commerce2customer_reverse\",\"workflow_sub_type\":\"0\",\"workflow_type\":\"1\"}", + "count": "1" + }, + { + "id": "2", + "stream_id": "1", + "type": "State Changed", + "state": "Running", + "created_at": { + "seconds": "1697046079", + "nanoseconds": 0 + }, + "updated_at": { + "seconds": "1697046079", + "nanoseconds": 0 + }, + "message": "", + "count": "1" + } + ], + "log_fetch_error": "", + "tags": [], + "rows_copied": "0", + "throttler_status": { + "component_throttled": "", + "time_throttled": { + "seconds": "0", + "nanoseconds": 0 + } + } + } + ], + "tablet_controls": [ + { + "tablet_type": "PRIMARY", + "cells": [], + "denied_tables": [ + "corder", + "customer" + ], + "frozen": false + } + ], + "is_primary_serving": true + } + }, + "workflow_type": "MoveTables", + "workflow_sub_type": "None", + "max_v_replication_transaction_lag": "1", + "defer_secondary_keys": false + } + ] +} +``` + +## Finalize and Cleanup + +The final step is to complete the migration using the [`Complete`](../../../reference/vreplication/movetables/#complete) action. +This will (by default) get rid of the [routing rules](../../../reference/features/schema-routing-rules/) that were created and +`DROP` the original tables in the source keyspace (`commerce`). Along with freeing up space on the original tablets, this is an +important step to eliminate potential future confusion. If you have a misconfiguration down the line and accidentally route queries +for the `customer` and `corder` tables to the `commerce` keyspace, it is much better to return a *"table not found"* +error, rather than return incorrect/stale data: + +```bash +$ vtctldclient MoveTables --target-keyspace customer --workflow commerce2customer complete +Successfully completed the commerce2customer workflow in the customer keyspace +``` + +{{< info >}} +This command will return an error if you have not already switched all traffic. +{{}} + +After this step is complete, you should see an error if you try to query the moved tables in the original `commerce` +keyspace: + +```bash +# Expected to fail! +$ mysql < ../common/select_commerce_data.sql +Using commerce +Customer +ERROR 1146 (42S02) at line 4: target: commerce.0.primary: vttablet: rpc error: code = NotFound desc = Table 'vt_commerce.customer' doesn't exist (errno 1146) (sqlstate 42S02) (CallerID: userData1): Sql: "select * from customer", BindVars: {} + +# Expected to be empty +$ vtctldclient GetRoutingRules +{ + "rules": [] +} + +# Workflow is gone +$ vtctldclient Workflow --keyspace customer list +[] + +# Reverse workflow is also gone +$ vtctldclient Workflow --keyspace commerce list +[] +``` + +This confirms that the data and routing rules have been properly cleaned up. Note that the `Complete` process also cleans up the reverse VReplication workflow mentioned above. + +## Next Steps + +Congratulations! You've successfully moved tables between into Vitess or between keyspaces. The next step to try out is +sharding one of your keyspaces using [Resharding](../../configuration-advanced/resharding). diff --git a/content/en/docs/21.0/user-guides/migration/troubleshooting.md b/content/en/docs/21.0/user-guides/migration/troubleshooting.md new file mode 100644 index 000000000..05e880400 --- /dev/null +++ b/content/en/docs/21.0/user-guides/migration/troubleshooting.md @@ -0,0 +1,288 @@ +--- +title: Troubleshooting +weight: 4 +--- + +## Overview + +Here we will cover some common issues seen during a migration — how to avoid them, how to detect them, and how to address them. + +{{< info >}} +This guide follows on from the [Get Started](../../../get-started/) guides. Please make sure that you have a +[Kubernetes Operator](../../../get-started/operator) or [local](../../../get-started/local) installation ready. +Make sure you have run the "101" and "201" steps of the examples, for example the "101" step is +`101_initial_cluster.sh` in the [local](../../../get-started/local) example. The commands in this guide also assume +you have setup the shell aliases from the example, e.g. `env.sh` in the [local](../../../get-started/local) example. +{{< /info >}} + + +## General and Precautionary Info + +### Execute a Dry Run + +The `SwitchTraffic`/`ReverseTraffic` and `Complete` actions support a dry run using the `--dry-run` flag where no +actual steps are taken but instead the command logs all the steps that *would* be taken. This command will also +verify that the cluster is generally in a state where it can perform the action successfully without potentially +timing out along the way. Given that traffic cutovers can potentially cause read/write pauses or outages this can +be particularly helpful during the final cutover stage. + +### DDL Handling + +If you expect DDL to be executed on the source table(s) while the workflow runs and you want those DDL statements +to be replicated to the target keyspace then you will need to use one of the `EXEC*` options for the workflow's +[`on-ddl`](../../../reference/vreplication/vreplication/#handle-ddl) flag. Please see the +[`on-ddl` flag documentation](../../../reference/vreplication/vreplication/#handle-ddl) for additional details and +related considerations. + +## Running a Diff + +In most cases you should run a [`VDiff`](../../../reference/vreplication/vdiff/) before switching traffic to ensure +that nothing unexpected happened which caused the data to diverge during the migration. + +## Performance Notes + +- VReplication workflows (including [`VDiff`](../../../reference/vreplication/vdiff/)) can have a major impact on the +tablet so it's recommended to use non-PRIMARY tablets whenever possible to limit any impact on production traffic + - You can see the key related tablet flags and when/why you may want to set them in the [VReplication tablet flag docs](../../../reference/vreplication/flags/) + - You can further control any impact on the source and target tablets using [the tablet throttler](../../../reference/features/tablet-throttler/) +- VReplication workflows can generate a lot of network traffic + - You should strive to keep the source and target tablets in the same [cell](../../../concepts/cell) whenever possible to limit performance and cost impacts + +## Monitoring + +It's important to properly monitor your VReplication workflows in order to detect any issues. Your primary tools for this are: + - The `show`sub-command (e.g. [`MoveTables show`](../../../reference/vreplication/movetables/#show)) + - The `status ` sub-command (e.g. [`MoveTables status`](../../../reference/vreplication/movetables/#status)) + - The [VReplication related metrics](../../../reference/vreplication/metrics/) + - Note that in most production systems the tablet endpoints would be scraped and stored in something like [Prometheus](https://prometheus.io) where you can build dashboards and alerting on the data + +### Save Routing Rules + +The `Create`, `SwitchTraffic`/`ReverseTraffic`, and `Cancel`/`Complete` actions modify the +[routing rules](../../../reference/features/schema-routing-rules/). You may want to save the routing rules before +taking an action just in case you want to restore them for any reason (note that e.g. the `ReverseTraffic` action +will automatically revert the routing rules): + +```bash +$ vtctldclient GetRoutingRules > /tmp/routingrules.backup.json +``` + +Those can later be applied this way: + +```bash +$ vtctldclient ApplyRoutingRules --rules-file=/tmp/routingrules.backup.json +``` + + +## Specific Errors and Issues + +### Stream Never Starts + +This can be exhibited in one of two ways: +1. This error is shown in the `status`/`show` action output or the `Workflow show` output: `Error picking tablet: context has expired` +2. The stream never starts, which can be seen in the following ways: + 1. The `show` output is showing an empty value in the `Pos` field for the stream + 2. The `status`/`show` action output is showing `VStream has not started` for the stream + +When a VReplication workflow starts or restarts the [tablet selection process](../../../reference/vreplication/tablet_selection/) +runs to find a viable source tablet for the stream. The `--cells` and `--tablet-types` play a key role in this process and +if we cannot ever find a viable source tablet for the stream then you may want to expand the cells and/or tablet types +made available for the selection process. + +#### Corrective Action + +If the workflow was only created and has not yet made any progress then you should `cancel` the workflow and `create` a new +one using different values for the `--cells` and `--tablet-types` flags. If, however, this workflow has made significant +progress that you do not wish you lose, you can update the underlying workflow record directly to modify either of those +values. For example: + +```bash +$ vtctldclient MoveTables --target-keyspace customer --workflow commerce2customer status --format=json +{ + "table_copy_state": {}, + "shard_streams": { + "customer/0": { + "streams": [ + { + "id": 1, + "tablet": { + "cell": "zone1", + "uid": 200 + }, + "source_shard": "commerce/0", + "position": "5d8e0b24-6873-11ee-9359-49d03ab2cdee:1-49", + "status": "Running", + "info": "VStream Lag: 0s; ; Tx time: Wed Oct 11 16:49:02 2023." + } + ] + } + }, + "traffic_state": "Reads Not Switched. Writes Not Switched" +} +``` + +### Workflow Has SQL Errors + +We can encounter persistent SQL errors when applying replicated events on the target for a variety of reasons, but +the most common cause is incompatible DDL having been executed against the source table while the workflow is running. +You would see this error in the `status`/`show` or `Workflow show` output. For example: + +```bash +$ vtctldclient MoveTables --target-keyspace customer --workflow commerce2customer status --format=json +{ + "table_copy_state": {}, + "shard_streams": { + "customer/0": { + "streams": [ + { + "id": 1, + "tablet": { + "cell": "zone1", + "uid": 200 + }, + "source_shard": "commerce/0", + "position": "5d8e0b24-6873-11ee-9359-49d03ab2cdee:1-49", + "status": "Error: Unknown column 'notes' in 'field list' (errno 1054) (sqlstate 42S22) during query: insert into customer(customer_id,email,notes) values (100,'test@tester.com','Lots of notes')", + "info": "VStream Lag: 0s; ; Tx time: Wed Oct 11 16:49:02 2023." + } + ] + } + }, + "traffic_state": "Reads Not Switched. Writes Not Switched" +} +``` + +This can be caused by a DDL executed on the source table as by default — controlled by the +[`on-ddl` flag value](../../../reference/vreplication/vreplication/#handle-ddl) — DDL is ignored in the stream. + +#### Corrective Action +If you want the same or similar DDL to be applied on the target then you can apply that DDL on the target keyspace +and then restart the workflow. For example, using the example above: + +```bash +vtctldclient ApplySchema --ddl-strategy=direct --sql="alter table customer add notes varchar(100) not null" customer + +vtctldclient Workflow customer.commerce2customer start +``` + +If the tables are not very large or the workflow has not made much progress, you can alternatively `Cancel` the current +worfklow and `Create` another. For example: + +```bash + +$ vtctldclient MoveTables --target-keyspace customer --workflow commerce2customer cancel +Successfully cancelled the commerce2customer workflow in the customer keyspace + +$ vtctldclient MoveTables --target-keyspace customer --workflow commerce2customer create --source-keyspace commerce --tables 'customer,corder' +The following vreplication streams exist for workflow customer.commerce2customer: + +id=2 on customer/zone1-200: Status: Running. VStream has not started. + +$ vtctldclient MoveTables --target-keyspace customer --workflow commerce2customer status --format=json +{ + "table_copy_state": {}, + "shard_streams": { + "customer/0": { + "streams": [ + { + "id": 2, + "tablet": { + "cell": "zone1", + "uid": 200 + }, + "source_shard": "commerce/0", + "position": "5d8e0b24-6873-11ee-9359-49d03ab2cdee:1-51", + "status": "Running", + "info": "VStream Lag: 0s" + } + ] + } + }, + "traffic_state": "Reads Not Switched. Writes Not Switched" +} +``` + +### Switching Traffic Fails + +You can encounter a variety of failures during the `SwitchTraffic`/`ReverseTraffic` step as a number of operations are performed. To +demonstrate that we can look at an example dry run output: + +```bash +$ vtctldclient MoveTables --target-keyspace customer --workflow commerce2customer SwitchTraffic --dry-run +SwitchTraffic dry run results for workflow customer.commerce2customer at 11 Oct 23 21:23 UTC + +Lock keyspace commerce +Switch reads for tables [corder,customer] to keyspace customer for tablet types [PRIMARY,REPLICA,RDONLY] +Routing rules for tables [corder,customer] will be updated +Unlock keyspace commerce +Lock keyspace commerce +Lock keyspace customer +Stop writes on keyspace commerce for tables [corder,customer]: [keyspace:commerce;shard:0;position:MySQL56/5d8e0b24-6873-11ee-9359-49d03ab2cdee:1-51] +Wait for vreplication on stopped streams to catchup for up to 30s +Create reverse vreplication workflow commerce2customer_reverse +Create journal entries on source databases +Enable writes on keyspace customer for tables [corder,customer] +Switch routing from keyspace commerce to keyspace customer +Routing rules for tables [corder,customer] will be updated +Switch writes completed, freeze and delete vreplication streams on: [tablet:200] +Start reverse vreplication streams on: [tablet:101] +Mark vreplication streams frozen on: [keyspace:customer;shard:0;tablet:200;workflow:commerce2customer;dbname:vt_customer] +Unlock keyspace customer +Unlock keyspace commerce +``` + +
    + +#### disallowed due to rule: enforce denied tables + +If your queries start failing with this error then you most likely had some leftover artifacts from a previous `MoveTables` operation +that were not properly cleaned up by running [`MoveTables cancel`](../../../reference/vreplication/movetables/#cancel). For +`MoveTables` operations, shard query serving control records (denied tables lists) are used in addition to +[routing rules](../../../reference/features/schema-routing-rules/) to ensure that all query traffic is managed by the correct keyspace +as you are often only moving some tables from one keyspace to another. If those control records are not properly cleaned up then +queries may be incorrectly denied when traffic is switched. If you e.g. were to see the following error for queries after switching +traffic for the customer table from the commerce keyspace to the customer keyspace: + +``` +code = FailedPrecondition desc = disallowed due to rule: enforce denied tables (CallerID: matt) for query SELECT * FROM customer WHERE customer_id = 1 +``` + +Then you can remove those unwanted/errant denied table rules from the customer keyspace this way: + +```bash +$ for type in primary replica rdonly; do + vtctldclient SetShardTabletControl --remove customer/0 ${type} + done + +# Ensure that these changes are in place everywhere +$ vtctldclient RefreshStateByShard customer/0 +``` + +### Completion and Cleanup Failures + +The completion action performs a number of steps that could potentially fail. We can again use the dry run output to demonstrate the +various actions that are taken: + +```bash +$ vtctldclient MoveTables --target-keyspace customer --workflow commerce2customer SwitchTraffic --dry-run +SwitchTraffic dry run results for workflow customer.commerce2customer at 11 Oct 23 21:23 UTC + +Lock keyspace commerce +Switch reads for tables [corder,customer] to keyspace customer for tablet types [PRIMARY,REPLICA,RDONLY] +Routing rules for tables [corder,customer] will be updated +Unlock keyspace commerce +Lock keyspace commerce +Lock keyspace customer +Stop writes on keyspace commerce for tables [corder,customer]: [keyspace:commerce;shard:0;position:MySQL56/5d8e0b24-6873-11ee-9359-49d03ab2cdee:1-51] +Wait for vreplication on stopped streams to catchup for up to 30s +Create reverse vreplication workflow commerce2customer_reverse +Create journal entries on source databases +Enable writes on keyspace customer for tables [corder,customer] +Switch routing from keyspace commerce to keyspace customer +Routing rules for tables [corder,customer] will be updated +Switch writes completed, freeze and delete vreplication streams on: [tablet:200] +Start reverse vreplication streams on: [tablet:101] +Mark vreplication streams frozen on: [keyspace:customer;shard:0;tablet:200;workflow:commerce2customer;dbname:vt_customer] +Unlock keyspace customer +Unlock keyspace commerce +``` diff --git a/content/en/docs/21.0/user-guides/operating-vitess/_index.md b/content/en/docs/21.0/user-guides/operating-vitess/_index.md new file mode 100644 index 000000000..52b1bb48b --- /dev/null +++ b/content/en/docs/21.0/user-guides/operating-vitess/_index.md @@ -0,0 +1,6 @@ +--- +title: Operational +description: User guides covering operational aspects of Vitess +weight: 5 +skip_sections: true +--- diff --git a/content/en/docs/21.0/user-guides/operating-vitess/backup-and-restore/_index.md b/content/en/docs/21.0/user-guides/operating-vitess/backup-and-restore/_index.md new file mode 100644 index 000000000..4305c3607 --- /dev/null +++ b/content/en/docs/21.0/user-guides/operating-vitess/backup-and-restore/_index.md @@ -0,0 +1,5 @@ +--- +title: Backup and Restore +description: User guides covering how to backup and restore in Vitess +weight: 1 +--- diff --git a/content/en/docs/21.0/user-guides/operating-vitess/backup-and-restore/bootstrap-and-restore.md b/content/en/docs/21.0/user-guides/operating-vitess/backup-and-restore/bootstrap-and-restore.md new file mode 100644 index 000000000..009ba66a5 --- /dev/null +++ b/content/en/docs/21.0/user-guides/operating-vitess/backup-and-restore/bootstrap-and-restore.md @@ -0,0 +1,101 @@ +--- +title: Bootstrap and Restore +weight: 3 +aliases: ['/docs/user-guides/backup-and-restore/'] +--- + +Restores can be done automatically by way of seeding/bootstrapping new tablets, or they can be invoked manually on a tablet to restore a full backup or do a point-in-time recovery. +## Auto restoring a backup on startup + +When a tablet starts, Vitess checks the value of the `--restore_from_backup` command-line flag to determine whether to restore a backup to that tablet. Restores will always be done with whichever engine was used to create the backup. + +If the flag is absent, Vitess does not try to restore a backup to the tablet. This is the equivalent of starting a new tablet in a new shard. If the flag is present, then the tablet is seeded by a backup, as follows: + + - If `--restore-to-timestamp` or `--restore-to-pos` flags are provided, then this is a [point in time recovery](../overview/#restore-types). The tablet auto selects a good full backup followed by a series of incremental backups, that collectively bring it up to date with requested timestamp or position. The tablet is set to `DRAINED` type, and does not begin replicating. + - If neither of these flags is present, then the tablet is running a _full_ restore. Vitess tries to restore the most recent backup from the [BackupStorage](../overview/#backup-storage-services) system when starting the tablet. Or, if the `--restore_from_backup_ts` flag is also set then using the latest backup taken at or before this timestamp instead. Example: `"2021-04-29.133050"` + +This flag is generally enabled all of the time for all of the tablets in a shard. By default, if Vitess cannot find a backup in the Backup Storage system, the tablet will start up empty. This behavior allows you to bootstrap a new shard before any backups exist. + +If the `--wait_for_backup_interval` flag is set to a value greater than zero, the tablet will instead keep checking for a backup to appear at that interval. This can be used to ensure tablets launched concurrently while an initial backup is being seeded for the shard (e.g. uploaded from cold storage or created by another tablet) will wait until the proper time and then pull the new backup when it's ready. + +``` sh +vttablet ... --backup_storage_implementation=file \ + --file_backup_storage_root=/nfs/XXX \ + --restore_from_backup +``` + +## Bootstrapping a new tablet + +Bootstrapping a new tablet is almost identical to restoring an existing tablet. The only thing you need to be cautious about is that the tablet specifies its keyspace, shard and tablet type when it registers itself in the topology. Specifically, make sure that the following additional vttablet parameters are set: + +``` sh + --init_keyspace + --init_shard + --init_tablet_type replica|rdonly +``` + +The bootstrapped tablet will restore the data from the backup and then apply changes, which occurred after the backup, by restarting replication. + +## Manual restore + +A manual restore is done on a specific tablet. The tablet's MySQL server is shut down and its data is wiped out. + +### Restore a full backup + +To restore the tablet from the most recent full backup, run: + +```shell +vtctldclient --server=: RestoreFromBackup +``` + +Example: + +```shell +vtctldclient --server localhost:15999 --alsologtostderr RestoreFromBackup zone1-0000000101 +``` + +If successful, the tablet's MySQL server rejoins the shard's replication stream, to eventually captch up and be able to serve traffic. + +### Restore to a point-in-time + +Vitess supports restoring to a _timestamp_ or to a specific _position_. Either way, this restore method assumes backups have been taken that cover the specified position. The restore process will first determine a restore path: a sequence of backups, starting with a full backup followed by zero or more incremental backups, that when combined, include the specified timestamp or position. See more on [Restore Types](../overview/#restore-types) and on [Taking Incremental Backup](../creating-a-backup/#create-an-incremental-backup-with-vtctl). + +#### Restore to timestamp + +Starting with `v18`, it is possible to restore to a given timestamp. The restore process will apply all events up to, and excluding, the given timestamp, at 1 second granularity. That is, the restore will bring the database to a point in time which is _about_ 1 second before the specified timestamp. Example: + +```shell +vtctldclient RestoreFromBackup --restore-to-timestamp "2023-06-15T09:49:50Z" zone1-0000000100 +``` + +The timestamp must be in `RFC3339` format. + +#### Restore to a position + +It is possible to restore onto a precise GTID position. Vitess will restore up to, and including, the exact requested position. This gives you the utmost granularity into the state of the restored database. + +```shell +vtctldclient RestoreFromBackup --restore-to-pos +``` + +Example: + +```shell +vtctldclient RestoreFromBackup --restore-to-pos "MySQL56/0d7aaca6-1666-11ee-aeaf-0a43f95f28a3:1-60" zone1-0000000102 +``` + +#### Dry run + +It is possible to verify whether a restore-to-timestamp or restore-to-pos is possible without actually performing the restore. Run: + + +```shell +vtctldclient RestoreFromBackup --dry-run --restore-to-timestamp "2023-06-15T09:49:50Z" zone1-0000000100 +``` + +or +```shell +vtctldclient RestoreFromBackup --dry-run --restore-to-pos "MySQL56/0d7aaca6-1666-11ee-aeaf-0a43f95f28a3:1-60" zone1-0000000102 +``` + +A dry run restore looks at existing backups and sees whether there is a path that restores up to given timestamp or pos, but then quits and does not interrupt any tablet's execution and without changing the tablet's type. If there's no valid path to restore, the process exits with error. \ No newline at end of file diff --git a/content/en/docs/21.0/user-guides/operating-vitess/backup-and-restore/creating-a-backup.md b/content/en/docs/21.0/user-guides/operating-vitess/backup-and-restore/creating-a-backup.md new file mode 100644 index 000000000..d7934cfd3 --- /dev/null +++ b/content/en/docs/21.0/user-guides/operating-vitess/backup-and-restore/creating-a-backup.md @@ -0,0 +1,139 @@ +--- +title: Creating a Backup +weight: 2 +aliases: ['/docs/user-guides/backup-and-restore/'] +--- + +## Choosing the backup type + +As described in [Backup types](../overview/#backup-types), you choose to run a full Backup (the default) or an incremental Backup. + +Full backups will use the backup engine chosen in the tablet's [configuration](#configuration). Incremental backups will always copy MySQL's binary logs, irrespective of the configured backup engine. + +## Using xtrabackup + +The default backup implementation is `builtin`, however we strongly recommend using the `xtrabackup` engine as it is more robust and allows for non-blocking backups. Restores will always be done with whichever engine was used to create the backup. + +### Prerequisites + +A compatible version of [xtrabackup](https://www.percona.com/doc/percona-xtrabackup/latest/index.html) and [xbstream](https://docs.percona.com/percona-xtrabackup/8.0/xtrabackup_bin/backup.streaming.html), if needed, must be present in your `$PATH` prior to running the `Backup[Shard]` command. + +### Supported Versions + +* [MySQL 8.0](https://www.percona.com/doc/percona-xtrabackup/8.0/index.html#installation) + +### Configuration + +To use `xtrabackup` with Vtbackup, VTTablet or Vtctld, the following flags must be set. + +__Required flags:__ + +* `--backup_engine_implementation=xtrabackup` +* `--xtrabackup_user string` + * The user that xtrabackup will use to connect to the database server. This user must have the [necessary privileges](https://www.percona.com/doc/percona-xtrabackup/2.4/using_xtrabackup/privileges.html#permissions-and-privileges-needed). + * This user will need to be authorized to connect to mysql locally without a password using [auth_socket](https://dev.mysql.com/doc/refman/8.0/en/socket-pluggable-authentication.html). + +Additionally required for MySQL 8.0: + +* `--xtrabackup_stream_mode=xbstream` + + + +### Common Errors and Resolutions + +__No xtrabackup User passed to vttablet:__ + +``` +E0310 08:15:45.336083 197442 main.go:72] remote error: rpc error: code = Unknown desc = TabletManager.Backup on zone1-0000000102 error: xtrabackupUser must be specified.: xtrabackupUser must be specified +``` + +Fix: Set the vtctld and vttablet flag `--xtrabackup_user` + +__xtrabackup binary not found in $PATH:__ + +``` +E0310 08:22:22.260044 200147 main.go:72] remote error: rpc error: code = Unknown desc = TabletManager.Backup on zone1-0000000102 error: unable to start backup: exec: "xtrabackup": executable file not found in $PATH: unable to start backup: exec: "xtrabackup": executable file not found in $PATH +``` + +Fixes: + + * Ensure the xtrabackup binary is in the $PATH for the $USER running vttablet + * Alternatively, set --xtrabackup_root_path on vttablet provide path to xtrabackup/xbstream binaries via vtctld and vttablet flags + +__Tar format no longer supported in 8.0:__ + +``` +I0310 12:34:47.900363 211809 backup.go:163] I0310 20:34:47.900004 xtrabackupengine.go:310] xtrabackup stderr: Invalid --stream argument: tar +Streaming in tar format is no longer supported in 8.0; use xbstream instead +``` + +Fix: Set the `--xtrabackup_stream_mode` flag to to xbstream on vttablets and vtctlds + +__Unsupported mysql server version:__ + +``` +I0310 12:49:32.279729 215835 backup.go:163] I0310 20:49:32.279435 xtrabackupengine.go:310] xtrabackup stderr: Error: Unsupported server version 8.0.23-0ubuntu0.20.04.1. +I0310 12:49:32.279773 215835 backup.go:163] I0310 20:49:32.279485 xtrabackupengine.go:310] xtrabackup stderr: Please upgrade PXB, if a new version is available. To continue with risk, use the option --no-server-version-check. +``` + +To continue with risk: Set `--xtrabackup_backup_flags=--no-server-version-check`. Note this occurs when your MySQL server version is technically unsupported by `xtrabackup`. + +## Create a full backup with vtctl + +__Run the following vtctl command to create a backup:__ + +```sh +vtctldclient --server=: Backup [--upgrade-safe=false] +``` + +If the engine is `builtin`, replication will be stopped prior to shutting down mysqld for the backup. + +If the engine is `xtrabackup`, the tablet can continue to serve traffic while the backup is running. + +__Run the following vtctl command to backup a specific shard:__ + +``` sh +vtctldclient --server=: BackupShard [--allow_primary=false] [--upgrade-safe=false] +``` + +## Create an incremental backup with vtctl + +An incremental backup requires additional information: the point from which to start the backup. An incremental backup is taken by supplying `--incremental-from-pos` to the `Backup` or `BackupShard` command. The argument may either indicate: + +- A valid position. +- A name of a successful backup. +- Or, the value `auto`. + +```sh +vtctldclient Backup --incremental-from-pos="MySQL56/0d7aaca6-1666-11ee-aeaf-0a43f95f28a3:1-53" zone1-0000000102 + +vtctldclient Backup --incremental-from-pos="0d7aaca6-1666-11ee-aeaf-0a43f95f28a3:1-53" zone1-0000000102 + +vtctldclient Backup --incremental-from-pos="2024-01-10.062022.zone1-0000000101 commerce/0" zone1-0000000102 + +vtctldclient Backup --incremental-from-pos="auto" zone1-0000000102 + +vtctldclient BackupShard --incremental-from-pos=auto commerce/0 +``` + +When `--incremental-from-pos` supplies a position, you may choose to use or to omit the `MySQL56/` prefix (which you can find in the backup manifest's Position). + +When `--incremental-from-pos` indicates a backup name, that must be a successfully completed, existing backup. It may be either a full or an incremental backup. + +When `--incremental-from-pos="auto"`, Vitess chooses the position of the last successful backup as the starting point for the incremental backup. This is a convenient way to ensure a sequence of contiguous incremental backups. + +An incremental backup backs up one or more MySQL binary log files. These binary log files may begin with the requested position, or with an earlier position. They will necessarily include the requested position. When the incremental backup begins, Vitess rotates the MySQL binary logs on the tablet, so that it does not back up an active log file. + +If Vitess finds that the database made no writes since the requested backup/position, then the incremental backup is deemed _empty_ and produces no artifacts, essentially becoming a no-op. The `Backup/BackupShard` command exits with success code, but there is no `MANIFEST` file created and no backup name. + +An incremental backup fails when it is unable to find binary log files that covers the requested position. This can happen if the binary logs are purged earlier than the incremental backup was taken. It essentially means there's a gap in the changelog events. **Note** that while on one tablet the binary logs may be missing, another tablet may still have binary logs that cover the requested position. + +## Backing up Topology Server + +The Topology Server stores metadata (and not tablet data). It is recommended to create a backup using the method described by the underlying plugin: + +* [etcd](https://etcd.io/docs/v3.4.0/op-guide/recovery/) +* [ZooKeeper](http://zookeeper.apache.org/doc/r3.6.0/zookeeperAdmin.html#sc_dataFileManagement) +* [Consul](https://www.consul.io/docs/commands/snapshot.html) diff --git a/content/en/docs/21.0/user-guides/operating-vitess/backup-and-restore/managing-backups.md b/content/en/docs/21.0/user-guides/operating-vitess/backup-and-restore/managing-backups.md new file mode 100644 index 000000000..0b4f8182f --- /dev/null +++ b/content/en/docs/21.0/user-guides/operating-vitess/backup-and-restore/managing-backups.md @@ -0,0 +1,44 @@ +--- +title: Managing Backups +weight: 4 +aliases: ['/docs/user-guides/backup-and-restore/'] +--- + +**vtctldclient** provides two commands for managing backups: + +* [GetBackups](https://vitess.io/docs/reference/programs/vtctldclient/vtctldclient_getbackups/) displays the existing backups for a keyspace/shard in chronological order. + + ``` sh + vtctldclient --server=: GetBackups + ``` + +* [RemoveBackup](https://vitess.io/docs/reference/programs/vtctldclient/vtctldclient_removebackup/) deletes a specified backup for a keyspace/shard. + + ``` sh + vtctldclient --server=: RemoveBackup + ``` + +You can also confirm your backup finished by viewing the files in your configured `--_backup_storage_root` location. You will still need to test and verify these backups for completeness. Note that backups are stored by keyspace and shard under `--_backup_storage_root`. For example, when using `--file_backup_storage_root=/vt/vtdataroot/backups`: + +```sh +/vt/vtdataroot/backups/commerce/0/2021-03-10.205419.zone1-0000000102: +backup.xbstream.gz MANIFEST +``` + +Each backup contains a manifest file with general information about the backup: + +```sh +MySQL 8.0 xbstream Manifest +{ + "BackupMethod": "xtrabackup", + "Position": "MySQL56/c022ad67-81fc-11eb-aa0e-1c1bb572885f:1-50", + "BackupTime": "2021-03-11T00:01:37Z", + "FinishedTime": "2021-03-11T00:01:42Z", + "FileName": "backup.xbstream.gz", + "ExtraCommandLineParams": "--no-server-version-check", + "StreamMode": "xbstream", + "NumStripes": 0, + "StripeBlockSize": 102400, + "SkipCompress": false +} +``` diff --git a/content/en/docs/21.0/user-guides/operating-vitess/backup-and-restore/overview.md b/content/en/docs/21.0/user-guides/operating-vitess/backup-and-restore/overview.md new file mode 100644 index 000000000..d7ac333d1 --- /dev/null +++ b/content/en/docs/21.0/user-guides/operating-vitess/backup-and-restore/overview.md @@ -0,0 +1,332 @@ +--- +title: Overview +weight: 1 +aliases: ['/docs/user-guides/backup-and-restore/'] +--- + +Backup and Restore are integrated features provided by tablets managed by Vitess. As well as using _backups_ for data integrity, Vitess will also create and restore backups for provisioning new tablets in an existing shard. + +## Concepts + +Vitess supports pluggable interfaces for both [Backup Storage Services](https://github.com/vitessio/vitess/blob/main/go/vt/mysqlctl/backupstorage/interface.go) and [Backup Engines](https://github.com/vitessio/vitess/blob/main/go/vt/mysqlctl/backupengine.go). + +### Backup Storage Services + +Currently, Vitess has plugins for: + +* File (using a path on shared storage, e.g. an NFS mount) +* Google Cloud Storage +* Amazon S3 +* Ceph + +### Backup Engines + +The engine is the techology used for generating the backup. Currently Vitess has plugins for: + +* Builtin: Shutdown an instance and copy all the database files (default) +* XtraBackup: An online backup using Percona's [XtraBackup](https://www.percona.com/software/mysql-database/percona-xtrabackup) + +### Backup types + +Vitess supports full backups as well as incremental backups, and their respective counterparts full restores and point-in-time restores. + +* A full backup contains the entire data in the database. The backup represents a consistent state of the data, i.e. it is a snapshot of the data at some point in time. +* An incremental backup contains a changelog, or a transition of data from one state to another. Vitess implements incremental backups by making a copy of MySQL binary logs. + +Generally speaking and on most workloads, the cost of a full backup is higher, and the cost of incremental backups is lower. The time it takes to create a full backup is significant, and it is therefore impractical to take full backups in very small intervals. Moreover, a full backup consumes the disk space needed for the entire dataset. Incremental backups, on the other hand, are quick to run, and have very little impact, if any, to the running servers. They only contain the changes in between two points in time, and on most workloads are more compact. + +Full and incremental backups are expected to be interleaved. For example: one would create a full backup once per day, and incremental backups once per hour. + +Full backups are simply states of the database. Incremental backups, however, need to start with some point and end with some point. The common practice is for an incremental backup to continue from the point of the last good backup, which can be a full or incremental backup. An inremental backup in Vitess ends at the point in time of execution. + +The identity of the tablet on which a full backup or an incremental backup is taken is immaterial. It is possible to take a full backup on one tablet and incremental backups on another. It is possible to take full backups on two different tablets. It is also possible to take incremental backups, independently, on two different tablets, even though the contents of those incremental backups overlaps. Vitess uses MySQL GTID sets to determine positioning and prune duplicates. + +### Restores + +Restores are the counterparts of backups. A restore uses the engine utilized to create a backup. One may run a restore from a full backup, or a point-in-time restore (PITR) based on additional incremental backups. + +A Vitess restore operates on a tablet. The restore process completely wipes out the data in the tablet's MySQL server and repopulates the server with the backup(s) data. The MySQL server is shutdown during the process. As a safety mechanism, Vitess by default prevents a restore onto a `PRIMARY` tablet. Any non-`PRIMARY` tablet is otherwise eligible to restore. + +### Restore Types + +Vitess supports full restores and incremental (AKA point-in-time) restores. The two serve different purposes. + +* A full restore loads the dataset from a full backup onto a non-`PRIMARY` tablet. Once the data is loaded, the restore process starts the MySQL service and makes it join the replication stream. It is expected that a freshly restored server will lag behind the shard's `PRIMARY` for a period of time. + The full restore flow is useful for seeding new replica tablets. It may also be used to fix replicas that have been corrupted. +* An incremental, or a point-in-time restore, restores a tablet/MySQL up to a specific position or time. This is done by first loading a full backup dataset, followed by applying the changelog captured in zero or more incremental backups. Once that is complete, the tablet type is set to `DRAINED` and the tablet does _not_ join the replication stream. + The common purpose of point-in-time restore is to recover data from an accidental write/deletion. If the database administrator knows at about what time the accidental write took place, they can restore a replica tablet to a point in time shortly before the accidental write. Since the server does not join the replication stream, its data then remains static, and the administrator may review or copy the data as they please. Finally, it is then possible to change the tablet type back to `REPLICA` and have it join the shard's replication. + +## Vtbackup, VTTablet and Vtctld + +Vtbackup, VTTablet, and Vtctld may all participate in backups and restores. + + * Vtbackup is a standalone program that restores the last backup into an empty mysqld installation, replicates new changes into that installation, and takes a new backup from that installation. + * VTTablet can be configured to restore from a backup, or to take a new backup. + * Vtctld can be instructed to take backups with commands like `Backup` and `BackupShard`. + +### Configuration + +Before backing up or restoring a tablet, you need to ensure that the tablet is aware of the Backup Storage system and Backup Engine that you are using. + +To do so, use command-line flags to configure vtbackup, vttablet, or vtctld programs that have access to the location where you are storing backups. + +__Common flags:__ + +All three programs can be made aware of Backup Engine and Backup Storage using these common flags. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameDefinition
    backup_storage_implementationSpecifies the implementation of the Backup Storage interface to + use.

    + Current plugin options available are: +
      +
    • file: Using shared storage (e.g. NFS).
    • +
    • gcs: Google Cloud Storage.
    • +
    • s3: Amazon S3.
    • +
    • ceph: Ceph Object Gateway S3 API.
    • +
    +
    backup_engine_implementationSpecifies the implementation of the Backup Engine to + use.

    + Current options available are: +
      +
    • builtin: Copy all the database files into specified storage. This is the default.
    • +
    • xtrabackup: Percona XtraBackup.
    • +
    +
    backup_storage_compressThis flag controls if the backups are compressed by the Vitess code. + By default it is set to true. Use + --backup_storage_compress=false to disable.
    +
    backup_storage_block_sizeIf --backup_storage_compress is true, backup_storage_block_size sets the block size in bytes to use while compressing (default is 250000). +
    backup_storage_number_blocksIf --backup_storage_compress is true, backup_storage_number_blocks sets the number of blocks that can be processed, in parallel, before the writer blocks, during compression. It should be equal to the number of CPUs available for compression. (default 2) +
    compression-levelSelect what is the compression level (from `1..9`) to be used with the builtin compressors. + It doesn't have any effect if you are using an external compressor. Defaults to + 1 (fastest compression). +
    compression-engine-name + This indicates which compression engine to use. The default value is pargzip. + If using an external compressor (see below), this should be a compatible compression engine as the + value will be saved to the MANIFEST when creating the backup and can be used to decompress it. +
    external-compressor + Instead of compressing inside the vttablet process, use the external command to + compress the input. The compressed stream needs to be written to STDOUT.

    + An example command to compress with an external compressor using the fastest mode and lowest CPU priority:
    + --external-compressor "nice -n 19 pigz -1 -c"

    + If the backup is supported by one of the builtin engines, make sure to use --compression-engine-name + so it can be restored without requiring --external-decompressor to be defined. +
    external-compressor-extension + Using the --external-compressor-extension flag will set the correct extension when + writing the file. Only used for the xtrabackupengine.

    + Example: --external-compressor-extension ".gz" +
    external-decompressor + Use an external decompressor to process the backups. This overrides the builtin + decompressor which would be automatically select the best engine based on the MANIFEST information. + The decompressed stream needs to be written to STDOUT.

    + An example of how to use an external decompressor:
    + --external-decompressor "pigz -d -c" +
    file_backup_storage_rootFor the file plugin, this identifies the root directory + for backups. This path must exist on shared storage to provide a global backup view for all vtctlds and vttablets. +
    gcs_backup_storage_bucketFor the gcs plugin, this identifies the + bucket + to use.
    s3_backup_aws_regionFor the s3 plugin, this identifies the AWS region.
    s3_backup_storage_bucketFor the s3 plugin, this identifies the AWS S3 + bucket.
    ceph_backup_storage_configFor the ceph plugin, this identifies the path to a text + file with a JSON object as configuration. The JSON object requires the + following keys: accessKey, secretKey, + endPoint and useSSL. Bucket name is computed + from keyspace name and shard name is separated for different + keyspaces / shards.
    restart_before_backupIf set, perform a clean MySQL shutdown and startup cycle. Note this is not + executing any `FLUSH` statements. This enables users to work around xtrabackup + DDL issues.
    xbstream_restore_flagsThe flags to pass to the xbstream command during restore. These should be space separated and will be added to the end of the command. These need to match the ones used for backup e.g. --compress / --decompress, --encrypt / --decrypt
    xtrabackup_root_pathFor the xtrabackup backup engine, directory location of the xtrabackup executable, e.g., `/usr/bin`
    xtrabackup_backup_flagsFor the xtrabackup backup engine, flags to pass to the backup command. These should be space separated and will be added to the end of the command.
    xtrabackup_stream_modeFor the xtrabackup backup engine, which mode to use if streaming, valid values are tar and xbstream. Defaults to tar.
    xtrabackup_userFor the xtrabackup backup engine, required user that xtrabackup will use to connect to the database server. This user must have all necessary privileges. For details, please refer to xtrabackup documentation.
    xtrabackup_stripesFor the xtrabackup backup engine, if greater than 0, use data striping across this many destination files to parallelize data transfer and decompression.
    xtrabackup_stripe_block_sizeFor the xtrabackup backup engine, size in bytes of each block that gets sent to a given stripe before rotating to the next stripe. Defaults to 102400.
    xtrabackup_prepare_flagsFlags to pass to the prepare command. These should be space separated and will be added to the end of the command.
    + +__Restore flags:__ + +Only VTTablet can be configured to restore from a previous backup. The flags below only apply to VTTablet. + + + + + + + + + + + + + + + + + + +
    NameDefinition
    restore_from_backupIndicates that, when started with an empty MySQL instance, the + tablet should restore the most recent backup from the specified + storage plugin. This flag only applies to VTTablet.
    restore_from_backup_tsIf set, restore the latest backup taken at or before this timestamp + rather than using the most recent one. Example: ‘2021-04-29.133050’. + (Vitess 12.0+)
    + +### Authentication + +Note that for the Google Cloud Storage plugin, we currently only support +[Application Default Credentials](https://developers.google.com/identity/protocols/application-default-credentials). This means that access to Google Cloud Storage (GCS) is automatically granted by virtue of the fact that you're already running within Google Compute Engine (GCE) or Google Kubernetes Engine (GKE). + +For this to work, the GCE instances must have been created with the [scope](https://cloud.google.com/compute/docs/authentication#using) that grants read-write access to GCS. When using GKE, you can do this for all the instances it creates by adding `--scopes storage-rw` to the `gcloud container clusters create` command. + +### Backup Frequency + +We recommend to take backups regularly -- e.g. you should set up a cron job for it. + +To determine the proper frequency for creating backups, consider the amount of time that you keep replication logs (see the [binlog_expire_logs](https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html#sysvar_binlog_expire_logs_seconds) variables) and allow enough time to investigate and fix problems in the event that a backup operation fails. + +For example, suppose you typically keep four days of replication logs and you create daily backups. In that case, even if a backup fails, you have at least a couple of days from the time of the failure to investigate and fix the problem. + +### Concurrency + +The backup and restore processes simultaneously copy and either compress or decompress multiple files to increase throughput. You can control the concurrency using command-line flags: + +* The vtctl [Backup](https://vitess.io/docs/reference/programs/vtctl/tablets/#backup) command uses the `--concurrency` flag. +* vttablet uses the `--restore_concurrency` flag. + +If the network link is fast enough, the concurrency matches the CPU usage of the process during the backup or restore process. + +### Backup Compression + +By default, `vttablet` backups are compressed using `pargzip` that generates `gzip` compatible files. +You can select other builtin engines that are supported, or choose to use an external process to do the +compression/decompression for you. There are some advantages of doing this, like being able to set the +scheduling priority or even to choose dedicated CPU cores to do the compression, things that are not possible when running inside the `vttablet` process. + +The built-in supported engines are: + +__Compression:__ +- `pargzip` (default) +- `pgzip` +- `lz4` +- `zstd` + +__Decompression:__ +- `pgzip` +- `lz4` +- `zstd` + +To change which compression engine to use, you can use the `--compression-engine-name` flag. The compression +engine will also be saved to the backup manifest, which is read during the decompression process to select +the right engine to decompress (so even if it gets changed, the `vttablet` will still be able to restore +previous backups). + +If you want to use an external compressor/decompressor, you can do this by setting: +- `--external-compressor` with the command that will actually compress the stream; +- `--external-compressor-extension` (only if using xtrabackupengine): this will let you use the extension of the file saved +- `--compression-engine-name` with the compatible engine that can decompress it. Use `external` if you are using an external engine not included in the above supported list. This value will be saved to the backup +MANIFEST; If it is not added (or engine is `external`), backups won't be able to restore unless you pass the parameter below: +- `--external-decompressor` with the command used to decompress the files; + +The `vttablet` process will launch the external process and pass the input stream via STDIN and expects +the process will write the compressed/decompressed stream to STDOUT. + +If you are using an external compressor and want to move to a builtin engine: +- If the engine is supported according to the list above, you just need to make sure your `--compression-engine-name` is correct and you can remove +the `--external-compressor` parameter +- If you want to move away from an unsupported engine to a builtin one, then you have to: + - First change the `--compression-engine-name` to a supported one and remove the `--external-compressor` + - Once the first backup is completed, you can then remove `--external-decompressor` + - After this all new backups will be done using the new engine. Restoring an older backup will still require the `--external-decompressor` flag to be provided diff --git a/content/en/docs/21.0/user-guides/operating-vitess/backup-and-restore/scheduled-backups.md b/content/en/docs/21.0/user-guides/operating-vitess/backup-and-restore/scheduled-backups.md new file mode 100644 index 000000000..13caee869 --- /dev/null +++ b/content/en/docs/21.0/user-guides/operating-vitess/backup-and-restore/scheduled-backups.md @@ -0,0 +1,103 @@ +--- +title: Scheduled Backups +weight: 5 +aliases: ['/docs/user-guides/backup-and-restore/'] +--- + +{{< info >}} +This guide follows on from the Get Started guides. Please make sure that you have +an [Operator](../../../../get-started/operator) installation ready. It also assumes +that the [MoveTables](../../../migration/move-tables/) and [Resharding](../../../configuration-advanced/resharding) user guides have been followed (which take you through +steps `101` to `306`). + +This guide is useful only if you are using the vitess-operator. +{{< /info >}} + +## Backups + +If you are not already familiar with [how backups work](../overview/) in Vitess we suggest you familiarize yourself with them first. + +## Scheduling backups + +### Adding the schedule + +{{< warning >}} +Please note that is not recommended to run production backups every minute. These schedules are only an example. +{{}} + +For this example we are going to create two schedules: each will be executed every minute, the first one will backup +the two `customer` shards, and the second one will backup the `commerce` keyspace. +The backups will be stored directly inside the Minikube node, but if you want to backup to a cloud storage provider like S3, you can +change the `location` of the backup in `401_scheduled_backups.yaml`. + +```bash +kubectl apply -f 401_scheduled_backups.yaml +``` + +After a minute or so, we should see two new pods that were created by the operator. Under the hood, these pods +are managed by a Kubernetes Job, and their goal is to take a backup of Vitess, as we defined in the `strategies` field +of the `401_scheduled_backups.yaml` file. + +```bash +$ kubectl get pods +NAME READY STATUS RESTARTS AGE +... +example-vbsc-every-minute-commerce-ac6ff735-1715963880-4rt6r 0/1 Completed 0 31s +example-vbsc-every-minute-customer-8aaaa771-1715963880-n7cm7 0/1 Completed 0 31s +... +``` + +### Listing backups + +Now we can list the available backups, by getting the `vtb` (`VitessBackup`) objects in our Kubernetes cluster. +We can see we have three backups, that is because the schedule `every-minute-customer` takes two backups (one for each shard, `-80` and `80-`), +and the other schedule (`every-minute-commerce`) takes only one backup (for the shard `-`). + +```bash +$ kubectl get vtb --no-headers +example-commerce-x-x-20240517-163802-97ece60f-8f2a3d47 111s +example-customer-80-x-20240517-163812-70e40ad-78a0d60b 58s +example-customer-x-80-20240517-163803-729301e-02e8899b 111s +``` + +Since we are running on Minikube, our backups are stored locally on the Minikube node, we can take a look at them like so: + +```bash +$ minikube ssh +docker@minikube:~$ cd /tmp/example/ +docker@minikube:/tmp/example$ ls +commerce customer +docker@minikube:/tmp/example$ ls commerce/-/ customer/ +-80/ 80-/ +docker@minikube:/tmp/example$ ls -l commerce/-/ customer/-80/ customer/80-/ +commerce/-/: +total 0 +drwxr-xr-x 2 999 docker 220 May 17 16:38 2024-05-17.163802.zone1-2548885007 +drwxr-xr-x 2 999 docker 220 May 17 16:39 2024-05-17.163903.zone1-2548885007 +drwxr-xr-x 2 999 docker 220 May 17 16:40 2024-05-17.164003.zone1-2548885007 +drwxr-xr-x 2 999 docker 220 May 17 16:41 2024-05-17.164102.zone1-2548885007 +drwxr-xr-x 2 999 docker 220 May 17 16:42 2024-05-17.164202.zone1-2548885007 + +customer/-80/: +total 0 +drwxr-xr-x 2 999 docker 220 May 17 16:38 2024-05-17.163803.zone1-0120139806 +drwxr-xr-x 2 999 docker 220 May 17 16:39 2024-05-17.163902.zone1-2289928654 +drwxr-xr-x 2 999 docker 220 May 17 16:40 2024-05-17.164003.zone1-2289928654 +drwxr-xr-x 2 999 docker 220 May 17 16:41 2024-05-17.164102.zone1-2289928654 +drwxr-xr-x 2 999 docker 220 May 17 16:42 2024-05-17.164202.zone1-2289928654 + +customer/80-/: +total 0 +drwxr-xr-x 2 999 docker 220 May 17 16:38 2024-05-17.163812.zone1-0118374573 +drwxr-xr-x 2 999 docker 220 May 17 16:39 2024-05-17.163911.zone1-4277914223 +drwxr-xr-x 2 999 docker 220 May 17 16:40 2024-05-17.164010.zone1-4277914223 +drwxr-xr-x 2 999 docker 220 May 17 16:41 2024-05-17.164111.zone1-4277914223 +drwxr-xr-x 2 999 docker 220 May 17 16:42 2024-05-17.164208.zone1-4277914223 +docker@minikube:/tmp/example$ +``` + +### Cleanup + +Congratulations, you have correctly scheduled recurring backups of your Vitess cluster. + +If you want, you can now clean up the entire cluster by running: `minikube delete`. diff --git a/content/en/docs/21.0/user-guides/operating-vitess/upgrading-vitess.md b/content/en/docs/21.0/user-guides/operating-vitess/upgrading-vitess.md new file mode 100644 index 000000000..7533be294 --- /dev/null +++ b/content/en/docs/21.0/user-guides/operating-vitess/upgrading-vitess.md @@ -0,0 +1,48 @@ +--- +title: Upgrading Vitess +weight: 1 +aliases: ['/docs/user-guides/upgrading/', '/docs/user-guides/upgrading-vitess/'] +--- + +This document highlights things to be aware of when upgrading a Vitess production installation to a newer Vitess release. + +Generally speaking, upgrading Vitess is a safe and easy process because it is explicitly designed for it. This is because at YouTube we followed the practice of releasing new versions often (usually from the tip of the Git primary branch). + +## Compatibility + +Our versioning strategy is based on [Semantic Versioning](http://semver.org/). + +Vitess version numbers follow the format `MAJOR.MINOR.PATCH`. We guarantee compatibility when upgrading to a newer **patch** or **minor** version. Upgrades to a higher **major** version may require manual configuration changes. + +In general, always **read the 'Upgrading' section of the release notes**. It will mention any incompatible changes and necessary manual steps. + +## Upgrade Order + +We recommend upgrading Vitess using a bottom up approach starting with the vttablet instances and ending with application updates. Upgrades and restarts for vttablets should be handled one at a time, in a rotating fashion, with the primary tablet being last. All components will need restarts after applying upgrades. + +Please use this upgrade order (unless otherwise noted in the release notes): + +* vttablet +* vtctld +* vtgate +* application code which links client libraries + +## Canary Testing + +Within the vtgate and vttablet components, we recommend to [canary](http://martinfowler.com/bliki/CanaryRelease.html) single instances, keyspaces and cells. Upgraded canary instances can "bake" for several hours or days to verify that the upgrade did not introduce a regression. Eventually, you can upgrade the remaining instances. + +## Rolling Upgrades + +We recommend to automate the upgrade process with a configuration management software. It will reduce the possibility of human errors and simplify the process of managing all instances. + +As of June 2016 we do not have templates for any major open-source configuration management software because our internal upgrade process is based on a proprietary software. Therefore, we invite open-source users to contribute such templates. + +Any upgrade should be a rolling release i.e. usually one tablet at a time within a shard. This ensures that the remaining tablets continue serving live traffic and there is no interruption. + +## Upgrading the Primary Tablet + +The *primary* tablet of each shard should always be updated last in the following manner: + +* verify that all *replica* tablets in the shard have been upgraded +* reparent away from the current *primary* to a *replica* tablet +* upgrade old *primary* tablet diff --git a/content/en/docs/21.0/user-guides/schema-changes/_index.md b/content/en/docs/21.0/user-guides/schema-changes/_index.md new file mode 100644 index 000000000..dff08fa87 --- /dev/null +++ b/content/en/docs/21.0/user-guides/schema-changes/_index.md @@ -0,0 +1,113 @@ +--- +title: Making Schema Changes +description: +weight: 11 +aliases: ['/docs/schema-management/mysql-schema/', '/docs/user-guides/mysql-schema/', '/docs/user-guides/making-schema-changes/', '/docs/schema-management/schema-changes/', '/docs/user-guides/schema-changes/'] +--- + +This user guide describes the problem space of schema changes and the various approaches you may use with Vitess. + +Quick links: + +- Vitess supports [managed, online schema changes](../schema-changes/managed-online-schema-changes/) using different [strategies](../schema-changes/ddl-strategies/), and with visibility and control over the migration process +- Multiple approaches to [unmanaged schema changes](../schema-changes/unmanaged-schema-changes/), either blocking, or owned by the user/DBA. + +{{< info >}} +It is recommended to use Vitess' managed, online schema changes. +{{< /info >}} + +Some background on schema changes follows. + +## The schema change problem + +Schema change is one of the oldest problems in MySQL and in the relational world in general. With accelerated development and deployment flows, engineers find they need to deploy schema changes sometimes on a daily basis. With the growth of data this task becomes more and more difficult. A direct MySQL `ALTER TABLE` statement is a blocking (no reads nor writes are possible on the migrated table) and resource heavy operation; variants of `ALTER TABLE` include `InnoDB` [Online DDL](https://dev.mysql.com/doc/refman/8.0/en/innodb-online-ddl-operations.html), which allows for some concurrency on a `primary` server, but still blocking on replicas, leading to unacceptable replication lags once the statement hits the replicas. + +MySQL's [Instant DDL](https://dev.mysql.com/doc/refman/8.0/en/innodb-online-ddl-operations.html) brings a much better experience where supported migrations run instantly and without additional load. Where possible, these are generally desired. + +`ALTER TABLE` (non-`INSTANT`) operations are greedy, consume as much CPU/Disk IO as needed, are uninterruptible and uncontrollable. Once the operation has begun, it must run to completion; aborting an `ALTER TABLE` may be more expensive than letting it run through, depending on the progress the migration has made. + +Such direct `ALTER TABLE` is fine in development or possibly staging environments, where datasets are either small, or where table locking is acceptable. + +## ALTER TABLE solutions + +Busy production systems tend to use either of these two approaches, to make schema changes less disruptive to ongoing production traffic: + +- Using general purpose online schema change tools, such as [gh-ost](https://github.com/github/gh-ost) and [pt-online-schema-change](https://www.percona.com/doc/percona-toolkit/3.0/pt-online-schema-change.html). These tools _emulate_ an `ALTER TABLE` statement by creating a _ghost_ table in the new desired format, and slowly working through copying data from the existing table, while also applying ongoing changes throughout the migration. + - Vitess offers a built in online schema change flow based on VReplication, and additionally supports `gh-ost` and `pt-online-schema-change`. + - Online schema change tools can be throttled on high load, and can be interrupted at will. +- Run the migration independently on replicas; when all replicas have the new schema, demote the `primary` and promote a `replica` as the new `primary`; then, at leisure, run the migration on the demoted server. Two considerations if using this approach are: + - Each migration requires a failover (aka _successover_, aka _planned reparent_). + - Total wall clock time is higher since we run the same migration in sequence on different servers. + +## Schema change cycle and operation + +The cycle of schema changes, from idea to production, is complex, involves multiple environments and possibly multiple teams. Below is one possible breakdown common in production. Notice how even interacting with the database itself takes multiple steps: + +1. Design: the developer designs a change, tests locally +2. Publish: the developer requests a review of their changes (e.g. on a Pull Request) +3. Review: developer's colleagues and database engineers to check the changes and their impact +4. Formalize: what is the precise `ALTER TABLE` statement to be executed? If running with `gh-ost` or `pt-online-schema-change`, what are the precise command line flags? +5. Locate: where does this change need to go? Which keyspace/cluster? Is this cluster sharded? What are the shards? + Having located the affected MySQL clusters, which is the `primary` server per cluster? +6. Schedule: is there an already running migration on the relevant keyspace/cluster(s)? +7. Execute: invoke the command. In the time we waited, did the identity of `primary` servers change? +8. Audit/control: is the migration in progress? Do we need to abort for some reason? +9. Cut-over/complete: a potential manual step to complete the migration process +10. Cleanup: what do you do with the old tables? An immediate `DROP` is likely not advisable. What's the alternative? +11. Notify user: let the developer know their changes are now in production. +12. Deploy & merge: the developer completes their process. + +Steps `4` - `10` are tightly coupled with the database or with the infrastructure around the database. + +## Schema change and Vitess + +Vitess solves or automates multiple parts of the flow: + +### Formalize + +In [managed, online schema changes](../schema-changes/managed-online-schema-changes/) the user supplies a valid SQL `ALTER TABLE` statement, and Vitess [schedules and runs](../../../design-docs/online-ddl/scheduler/) the migration, based on a specified [strategy](../schema-changes/ddl-strategies/). + +In addition, `vitess` strategy migrations offer [declarative](../schema-changes/declarative-migrations/) changes, where the user only needs to supply the desired `CREATE TABLE` or `DROP TABLE` statements, and Vitess computes the correct migration needed. + +### Locate + +For a given table in a given keyspace, Vitess knows at all times: + +- In which shards (MySQL clusters) the table is found +- Which is the `primary` server per shard. + +When using either managed schema changes, or direct schema changes via `vtctldclient` or `vtgate`, Vitess resolves the discovery of the affected servers automatically, and this is hidden from the user. + +### Schedule + +In managed, online schema changes, Vitess owns and tracks all pending and active migrations. Vitess schedules migrations to run, either sequentially or, where possible, [concurrently](../schema-changes/concurrent-migrations/). + +### Execute + +In managed, online schema changes, Vitess owns the execution of `vitess`, `gh-ost` or `pt-online-schema-change` migrations. While these run in the background, Vitess keeps track of the migration state. + +In direct schema changes via `vtctldclient` or `vtgate`, Vitess issues a synchronous `ALTER TABLE` statement on the relevant shards. + +### Audit/control + +In managed, online schema changes, Vitess keeps track of the state of the migration. It automatically detects when the migration is complete or has failed. It will detect failure even if the tablet itself, which is running the migration, fails. Vitess allows the user to cancel a migration. If such a migration is queued by the scheduler, then it is unqueued. If it's already running, it is interrupted and aborted. Vitess allows the user to check on a migration status across the relevant shards. + +### Cut-over/complete + +By default, Vitess runs automated cut-overs. The migration will complete as soon as it's able to. Optionally, the user may request to [postpone](../schema-changes/postponed-migrations/) the migration's completion until an explicit `COMPLETE` command is given. + +### Cleanup + +Vitess automatically garbage-collects the "old" tables, artifacts of `vitess`, `gh-ost` and `pt-online-schema-change` migrations. It drops those tables in an incremental, non blocking method. + +In the case of managed, online schema changes via `pt-online-schema-change`, Vitess will ensure to drop the triggers in case the tool failed to do so for whatever reason. + +## The various approaches + +Vitess allows a variety of approaches to schema changes, from fully automated to fully owned by the user. + +- Managed, online schema changes are the preferred approach in Vitess . +- Direct, blocking ALTERs are generally impractical in production given that they can block writes for substantial lengths of time. +- User controlled migrations are allowed, and under the user's responsibility. + +See breakdown in [managed, online schema changes](../schema-changes/managed-online-schema-changes/) and in [unmanaged schema changes](../schema-changes/unmanaged-schema-changes/). diff --git a/content/en/docs/21.0/user-guides/schema-changes/advanced-usage.md b/content/en/docs/21.0/user-guides/schema-changes/advanced-usage.md new file mode 100644 index 000000000..31abdc054 --- /dev/null +++ b/content/en/docs/21.0/user-guides/schema-changes/advanced-usage.md @@ -0,0 +1,190 @@ +--- +title: Advanced usage +weight: 20 +aliases: ['/docs/user-guides/schema-changes/advanced-usage/'] +--- + +Listed below are recipes for advanced online DDL usage: + +- [Duplicate migration detection](#duplicate-migration-detection) +- [Duplicate migration indication](#duplicate-migration-indication) +- [Near instant REVERTs](#near-instant-reverts) + +## Duplicate migration detection + +Two migrations sharing the same context and DDL are considered duplicate, and only one will run to completion. + +Consider this DDL: + +```sql +alter table `customer` add column `status` int unsigned not null; +``` + +You can only run this change successfully once. Once it it applied, the column `status` exists; any attempt to run the migration again yields an error. + +Sometimes it is desirable to be able to retry a migration. For example, if you apply a migration on a sharded keyspace, where one or more of the shards can be down. In such scenario some shards receive and apply the DDL, while other shards do not, and are not aware of its existence. Attempting to re-apply the same DDL will generate errors on the shards that have received and applied it on the first attempt. + +`vtctldclient ApplySchema` accepts a `--migration-context` flag. By default, Vitess auto-generates a unique context per execution of `vtctldclient ApplySchema`. You may supply your own value, which can be an arbitrary text (limited to `1024` characters). You may search for migrations with a particular context via `SHOW VITESS_MIGRATIONS LIKE ''`. Also, any `SHOW VITESS_MIGRATIONS ...` command outputs the context value in the `migration_context` column. + +When Vitess meets a migration which has exact same DDL and exact same (non-empty) context as some older migration, it considers it as a _duplicate_. The new migration does get a `UUID` of its own, and is tracked as a new migration. But if the previous migration (or, if there are multiple past duplicate migrations with same DDL and context, _any one of those_) is `complete`, then the new migration is also implicitly assumed to be `complete`. + +Thus, the new migration does not get to execute if an identical previous migration was successful. + +Usage: + +```sh +$ vtctldclient ApplySchema --migration-context="1111-2222" --ddl-strategy='vitess' --sql "alter table customer add column status int unsigned not null" commerce + +$ vtctldclient ApplySchema --migration-context="1111-2222" --ddl-strategy='vitess' --sql "alter table customer add column status int unsigned not null" commerce +``` + +In the above, the two calls are identical. Specifically, they share the exact same `--migration-context` value of `1111-2222`, and the exact same `--sql`. + +Notes: + +- As mentioned, the new migration will have its own `UUID`. +- The new migration does get to be scheduled. +- It will only be marked as `complete` if one previous identical migration (same DDL, same non-empty context) is likewise `complete`. +- If, for example, there's a single previous identical migration which is `failed`, the new migration gets to be executed. +- Continuing the above example: if the new migration is successful, the previous migration remains in `failed` state. +- The decision whether to run the migration or to mark it as implicitly `complete` only takes place when the migration is scheduled to run. + +The context may also be set via VTGate: + +```sql +mysql> set @@ddl_strategy='vitess --allow-concurrent'; +mysql> set @@migration_context='1111-2222'; +mysql> alter table customer add column status int unsigned not null; +``` + +By default, the migration context for an Online DDL issued via VTGate is the value of `@@session_uuid`. If `@@migration_context` is non-empty, then its value is used. + +## Duplicate migration indication + +You may go one step beyond [duplicate migration detection](#duplicate-migration-detection) by explicitly supplying migration UUIDs such that duplicate migrations are never submitted in the first place. + +Consider the following example, note `--uuid-list` flag: + +```sh +$ vtctldclient ApplySchema --uuid-list "73380089_7764_11ec_a656_0a43f95f28a3" --ddl-strategy='vitess' --sql "alter table customer add column status int unsigned not null" commerce + +$ vtctldclient ApplySchema --uuid-list "73380089_7764_11ec_a656_0a43f95f28a3" --ddl-strategy='vitess' --sql "alter table customer add column status int unsigned not null" commerce +``` + +Normally Vitess generates a `UUID` for each migration, thus having a new, unique ID per migration. With `-uuid_list`, you can force Vitess into using your own supplied UUID. There cannot be two migrations with the same `UUID`. Therefore, any subsequent submission of a migration with an already existing `UUID` is implicitly discarded. The 2nd call does return the migration `UUID`, but is internally discarded. + +This feature is useful for external management systems (e.g. schema deployment tools) which may want to control the identity of migrations. The external systems are thus able to own the UUID and can re-submit at will. + +Notes: + +- `--uuid-list` accepts zero or more comma separated UUID values +- If empty, Vitess calculates UUID for the migrations +- Number of supplied UUIDs must match the number of DDL statements in `--sql` +- Each UUID must be in [RFC 4122](http://www.ietf.org/rfc/rfc4122.txt) format, with underscored instead of dashes. Examples of valid UUIDs: `73380089_7764_11ec_a656_0a43f95f28a3` and `28dc5ebc_78e6_11ec_accf_ab29e6ca1002`. +- If multiple UUIDs are given, they must all be different from one another. +- It is the caller's responsibility to ensure the UUIDs are indeed unique. If the user submits an `ApplySchema` with an already existing `--uuid-list=` value, Vitess takes no steps to validate whether the DDL is identical to the already existing submission. + +## Gated cut-over + +Some migrations only make sense to run together; or, rather, it's desirable that they complete at the same time. This can be true: + +- For multiple table changes in a single shard, and/or: +- For a table change across multiple shards. + +The user may submit multiple migrations such that non auto-completes. The user can gather information as to whether all migrations are in a good position to complete, termed "ready to complete". The user may then invoke a `COMPLETE` command such that all migrations complete closely (but not atomically) to one another. + +Consider the following: + +```sh +$ vtctldclient ApplySchema --ddl-strategy='vitess --postpone-completion --allow-concurrent' --sql "alter table customer add column country int not null default 0; alter table order add column shipping_country int not null default 0" commerce +29231906_776f_11ec_a656_0a43f95f28a3 +3cc4ae0e_776f_11ec_a656_0a43f95f28a3 +``` + +The combination of `--postpone-completion --allow-concurrent` means migration start sequentially, but at some point all (two in our example) end up running [concurrently](../concurrent-migrations/). + +A `show vitess_migrations like '29231906_776f_11ec_a656_0a43f95f28a3'` presents the column `ready_to_complete`, with values `0` (not ready) or `1` (ready). + +When all migrations for the relevant UUIDs show `1` for `ready_to_complete`, the user can then either: + +```sh +$ vtctldclient ApplySchema --sql "alter vitess_migration complete all" commerce +``` + +Assuming these are the only migrations awaiting completion, or, explicitly issue a complete for each of the migrations: + +```sh +$ vtctldclient ApplySchema --sql "alter vitess_migration '29231906_776f_11ec_a656_0a43f95f28a3' complete all" commerce +$ vtctldclient ApplySchema --sql "alter vitess_migration '3cc4ae0e_776f_11ec_a656_0a43f95f28a3' complete all" commerce +``` + +## Near instant REVERTs + +A [REVERT](../revertible-migrations/) operation is available for `CREATE`, `DROP` and `ALTER` statements. Both `CREATE` and `DROP` reverts are near instantaneous by design. An `ALTER`'s revert is fast, but not instantaneous. While it does not need to copy any table data, hence not proportional to table size and migration runtime, it does need to apply any changes made to the table since migration completion. This means tracking and applying binary log events, and the operation runtime is generally proportional to the time elapsed since migration completion. + +It is possible to preemptively initiate an "open-ended" revert, such that a new workflow prepares the grounds for a revert, but requires a user interaction to actually cut over. + +The use case and workflow is as follows: + +- A long migration runs. The user suspects there might be a risk to the schema change +- As soon as the migration completes, the user issues an open ended revert, preparing the ground to undoing the schema change +- The open ended revert keeps track of binary log changes via VReplication +- If the original migration turns out to be fine, the user cancels the revert +- If the original migration has negative impact, the user completes the revert (thus undoing the schema change) + +Consider the following example. We run a 5 hour long migration to drop an index: + +```sh +$ vtctldclient ApplySchema --ddl-strategy='vitess' --sql "alter table customer drop index joined_timestamp_idx" commerce +29231906_776f_11ec_a656_0a43f95f28a3 +``` + +As soon as the migration completes, we run: + +```sh +$ vtctldclient ApplySchema --ddl-strategy='vitess --postpone-completion --allow-concurrent' --sql "revert vitess_migration '29231906_776f_11ec_a656_0a43f95f28a3'" commerce +3cc4ae0e_776f_11ec_a656_0a43f95f28a3 +``` + +The above begins a `REVERT` migration that is open-ended (does not complete), via `--postpone-completion`. We also request the migration to run concurrently via `--allow-concurrent` such that it does not block any further "normal" migrations on other tables. Note `3cc4ae0e_776f_11ec_a656_0a43f95f28a3` is the UUID for the reverted migration. + +Finally, if we are satisfied that the `drop index` migration went well, we issue: + +```sh +$ vtctldclient ApplySchema --sql "alter vitess_migration '3cc4ae0e_776f_11ec_a656_0a43f95f28a3' cancel" commerce +``` + +That is, we cancel the `REVERT` operation. + +Or, should we have not dropped the index? If our migration seems to have been wrong, we run: + +```sh +$ vtctldclient ApplySchema --sql "alter vitess_migration '3cc4ae0e_776f_11ec_a656_0a43f95f28a3' complete" commerce +``` + +Which means we want to apply the revert. Since the revert is already running in the background, it is likely that binary log processing is up to date, and cut-over is near instantaneous. + +## Inter-dependent migrations + +It is possible to submit inter-dependent migrations within the same `ApplySchema` command, and have them complete in the correct order, even if they run concurrently. Examples for inter-dependent migrations: + +- Creating two new views, one of which reads from the other. +- Adding a column to a table, and creating a new view that reads from that column. +- Adding a column to a table, altering an existing view that reads from that table, to now read the new column. + +In the above examples there has to be a strict ordering to the migrations. You cannot just create a view that reads from a yet non-existent column. + +`vitess` offers the `--in-order-completion` DDL strategy flag. It is the responsibility of the user to supply the migrations in a valid ordering, and it is `vitess`'s responsibility to _complete_ the migrations in that same order. + +Note that there can be scenarios with impossible ordering. Those hardly make sense in production, in the first place, and it is the user's responsibility to supply a sequence that works. When in doubt, it's advisable to submit migrations in stages: only apply one migration to completion, and then apply another. + +An example for in-order submission: + +```sh +$ vtctldclient ApplySchema --ddl-strategy='vitess --allow-concurrent --in-order-completion' --sql "create table t1 (id int primary key); create view v1 as select id from t1;" commerce +``` + +{{< info >}} +- `--allow-concurrent` is optional, but is likely to be the main use case for using in-order completion. +- in-order completion also works with `--postpone-launch` and `--postpone-completion`. +{{< /info >}} diff --git a/content/en/docs/21.0/user-guides/schema-changes/audit-and-control.md b/content/en/docs/21.0/user-guides/schema-changes/audit-and-control.md new file mode 100644 index 000000000..1a33080b8 --- /dev/null +++ b/content/en/docs/21.0/user-guides/schema-changes/audit-and-control.md @@ -0,0 +1,806 @@ +--- +title: Applying, auditing, and controlling Online DDL +weight: 6 +aliases: ['/docs/user-guides/managed-online-schema-changes/audit-and-control'] +--- + +Vitess provides two interfaces to interacting with Online DDL: + +- SQL commands, via `VTGate` +- Command line interface, via `vtctl` + +Supported interactions are: + +- [Running migrations](#running-migrations) (submitting Online DDL requests) +- [Tracking migrations](#tracking-migrations) +- [Launching a migration](#launching-a-migration) or all migrations, if explicitly set to postpone launch. +- [Completing a migration](#completing-a-migration) or all migrations, if explicitly set to postpone completion. +- [Cancelling a migration](#cancelling-a-migration) +- [Cancelling a migration](#cancelling-a-migration) +- [Cancelling all pending migrations](#cancelling-all-keyspace-migrations) +- [Retrying a migration](#retrying-a-migration) +- [Cleaning migration artifacts](#cleaning-migration-artifacts) +- [Reverting a migration](#reverting-a-migration) + +## Running migrations + +To run a managed schema migration, you should: + +- Formulate your DDLs (`CREATE`, `ALTER`, `DROP`) queries +- Choose a [ddl_strategy](../ddl-strategies) + +When the user submits an online DDL, Vitess responds with a UUID, a job Id used to later track or control the migration. The migration does not start immediately. It is queued at the tablets and executed at some point in the future. + +#### Via VTGate/SQL + +```sql +mysql> set @@ddl_strategy='vitess'; + +mysql> alter table corder add column ts timestamp not null default current_timestamp; ++--------------------------------------+ +| uuid | ++--------------------------------------+ +| bf4598ab_8d55_11eb_815f_f875a4d24e90 | ++--------------------------------------+ + +mysql> drop table customer; ++--------------------------------------+ +| uuid | ++--------------------------------------+ +| 6848c1a4_8d57_11eb_815f_f875a4d24e90 | ++--------------------------------------+ +``` + +- `@@ddl_strategy` behaves like a MySQL session variable, though is only recognized by `VTGate`. Setting `@@ddl_strategy` only applies to that same connection and does not affect other connections. The strategy applies to all migrations executed in that session. You may subsequently set `@@ddl_strategy` to different value. +- If you run `vtgate` without `--ddl_strategy`, then `@@ddl_strategy` defaults to `'direct'`, which implies schema migrations are synchronous. You will need to `set @@ddl_strategy='vitess'` to run followup `ALTER TABLE` statements via Vitess. +- If you run `vtgate --ddl_strategy "vitess"`, then `@@ddl_strategy` defaults to `'vitess'` in each new session. Any `ALTER TABLE` will run via Vitess online DDL. You may `set @@ddl_strategy='gh-ost'` to make migrations run through `gh-ost`, or `set @@ddl_strategy='direct'` to run migrations synchronously. + +#### Via vtctldclient + +You may use `vtctldclient` to apply schema changes. The `ApplySchema` command supports both synchronous and online schema migrations. To run an online schema migration you will supply the `--ddl-strategy` command line flag: + +```shell +$ vtctldclient ApplySchema --ddl-strategy="vitess" --sql "alter table product add column ts_entry TIMESTAMP NOT NULL" commerce +c26f3b5e_6b50_11ee_808b_0a43f95f28a3 +``` + + You my run multiple migrations withing the same `ApplySchema` command: +```shell +$ vtctldclient ApplySchema --ddl-strategy="vitess" --sql "alter table corder modify price bigint unsigned default null; create table sample (id int primary key); drop table if exists some_other_table" customer +d729b47e_6b52_11ee_808b_0a43f95f28a3 +d72b644f_6b52_11ee_808b_0a43f95f28a3 +d72d230d_6b52_11ee_808b_0a43f95f28a3 +``` + +`ApplySchema` accepts the following flags: + +- `--ddl-strategy`: by default migrations run directly via MySQL standard DDL (aka `direct`). This flag must be aupplied to indicate an online strategy. See also [DDL strategies](../ddl-strategies) and [ddl_strategy flags](../ddl-strategy-flags). +- `--migration-context `: all migrations in a `ApplySchema` command are logically grouped via a unique _context_. A unique value will be supplied automatically. The user may choose to supply their own value, and it's their responsibility to provide with a unique value. Any string format is accepted. + The context can then be used to search for migrations, via `SHOW VITESS_MIGRATIONS LIKE ''`. It is visible in `SHOW VITESS_MIGRATIONS ...` output as the `migration_context` column. + +## Tracking migrations + +You may track the status of a single or of multiple migrations. Since migrations run asycnhronously, it is the user's responsibility to audit the progress and state of submitted migrations. Users are likely to want to know when a migration is complete (or failed) so as to be able to deploy code changes or run other operations. + +Common patterns are: + +- Show state of a specific migration +- Show all `running`, `complete` or `failed` migrations +- Show recent migrations +- Show migrations ordered by most-recent first. +- Show n number of migrations, skipping m rows. + +#### Via VTGate/SQL + +Examples for a single shard cluster: + +```sh +$ mysql commerce +``` +```sql +mysql> show vitess_migrations like 'c26f3b5e_6b50_11ee_808b_0a43f95f28a3' \G +*************************** 1. row *************************** + id: 1 + migration_uuid: c26f3b5e_6b50_11ee_808b_0a43f95f28a3 + keyspace: commerce + shard: 0 + mysql_schema: vt_commerce + mysql_table: product + migration_statement: alter table product add column ts_entry TIMESTAMP not null + strategy: vitess + options: + added_timestamp: 2023-10-15 11:48:29 + requested_timestamp: 2023-10-15 11:48:30 + ready_timestamp: NULL + started_timestamp: 2023-10-15 11:48:31 + liveness_timestamp: 2023-10-15 11:48:37 + completed_timestamp: 2023-10-15 11:48:38.232430 + cleanup_timestamp: NULL + migration_status: complete + log_path: + artifacts: _c26f3b5e_6b50_11ee_808b_0a43f95f28a3_20231015114830_vrepl, + retries: 0 + tablet: zone1-0000000100 + tablet_failure: 0 + progress: 100 + migration_context: vtctl:c26e658d-6b50-11ee-808b-0a43f95f28a3 + ddl_action: alter + message: + eta_seconds: 0 + rows_copied: 0 + table_rows: 0 + added_unique_keys: 0 + removed_unique_keys: 0 + log_file: + retain_artifacts_seconds: 86400 + postpone_completion: 0 + removed_unique_key_names: +dropped_no_default_column_names: + expanded_column_names: + revertible_notes: + allow_concurrent: 0 + reverted_uuid: + is_view: 0 + ready_to_complete: 1 + vitess_liveness_indicator: 1697370514 + user_throttle_ratio: 0 + special_plan: + last_throttled_timestamp: NULL + component_throttled: + cancelled_timestamp: NULL + postpone_launch: 0 + stage: re-enabling writes + cutover_attempts: 1 + is_immediate_operation: 0 + reviewed_timestamp: 2023-10-15 11:48:31 + ready_to_complete_timestamp: 2023-10-15 11:48:35 +``` + +```sql +mysql> show vitess_migrations like 'complete' \G +-- same output as above + +mysql> show vitess_migrations like 'failed' \G +Empty set (0.01 sec) +``` + +Examples for a multi sharded cluster: + +```sh +$ mysql customer +``` + +```sql +mysql> show vitess_migrations like 'complete'; ++----+--------------------------------------+----------+-------+--------------+------------------+---------------------------------------------------------------------+----------+---------+---------------------+---------------------+-----------------+---------------------+---------------------+----------------------------+-------------------+------------------+----------+-------------------------------------------------------------+---------+------------------+----------------+----------+--------------------------------------------+------------+---------+-------------+-------------+------------+-------------------+---------------------+----------+--------------------------+---------------------+--------------------------+---------------------------------+-----------------------+-------------------------------------------+------------------+---------------+---------+-------------------+---------------------------+---------------------+--------------+--------------------------+---------------------+---------------------+-----------------+--------------------+------------------+------------------------+---------------------+-----------------------------+ +| id | migration_uuid | keyspace | shard | mysql_schema | mysql_table | migration_statement | strategy | options | added_timestamp | requested_timestamp | ready_timestamp | started_timestamp | liveness_timestamp | completed_timestamp | cleanup_timestamp | migration_status | log_path | artifacts | retries | tablet | tablet_failure | progress | migration_context | ddl_action | message | eta_seconds | rows_copied | table_rows | added_unique_keys | removed_unique_keys | log_file | retain_artifacts_seconds | postpone_completion | removed_unique_key_names | dropped_no_default_column_names | expanded_column_names | revertible_notes | allow_concurrent | reverted_uuid | is_view | ready_to_complete | vitess_liveness_indicator | user_throttle_ratio | special_plan | last_throttled_timestamp | component_throttled | cancelled_timestamp | postpone_launch | stage | cutover_attempts | is_immediate_operation | reviewed_timestamp | ready_to_complete_timestamp | ++----+--------------------------------------+----------+-------+--------------+------------------+---------------------------------------------------------------------+----------+---------+---------------------+---------------------+-----------------+---------------------+---------------------+----------------------------+-------------------+------------------+----------+-------------------------------------------------------------+---------+------------------+----------------+----------+--------------------------------------------+------------+---------+-------------+-------------+------------+-------------------+---------------------+----------+--------------------------+---------------------+--------------------------+---------------------------------+-----------------------+-------------------------------------------+------------------+---------------+---------+-------------------+---------------------------+---------------------+--------------+--------------------------+---------------------+---------------------+-----------------+--------------------+------------------+------------------------+---------------------+-----------------------------+ +| 7 | d729b47e_6b52_11ee_808b_0a43f95f28a3 | customer | 80- | vt_customer | corder | alter table corder modify column price bigint unsigned default null | vitess | | 2023-10-15 12:03:23 | 2023-10-15 12:03:24 | NULL | 2023-10-15 12:03:25 | 2023-10-15 12:03:31 | 2023-10-15 12:03:32.012778 | NULL | complete | | _d729b47e_6b52_11ee_808b_0a43f95f28a3_20231015120324_vrepl, | 0 | zone1-0000000401 | 0 | 100 | vtctl:d7288b41-6b52-11ee-808b-0a43f95f28a3 | alter | | 0 | 0 | 0 | 0 | 0 | | 86400 | 0 | | | `price` | column price: increased NUMERIC_PRECISION | 0 | | 0 | 1 | 1697371408 | 0 | | NULL | | NULL | 0 | re-enabling writes | 1 | 0 | 2023-10-15 12:03:25 | 2023-10-15 12:03:29 | +| 8 | d72b644f_6b52_11ee_808b_0a43f95f28a3 | customer | 80- | vt_customer | sample | create table sample ( + id int primary key +) | vitess | | 2023-10-15 12:03:23 | 2023-10-15 12:03:24 | NULL | 2023-10-15 12:03:34 | 2023-10-15 12:03:34 | 2023-10-15 12:03:33.701212 | NULL | complete | | _vt_HOLD_dd2164646b5211eeba7c0a43f95f28a3_20231016120333, | 0 | zone1-0000000401 | 0 | 100 | vtctl:d7288b41-6b52-11ee-808b-0a43f95f28a3 | create | | 0 | 0 | 0 | 0 | 0 | | 86400 | 0 | | | | | 0 | | 0 | 1 | 0 | 0 | | NULL | | NULL | 0 | | 0 | 1 | 2023-10-15 12:03:25 | 2023-10-15 12:03:25 | +| 9 | d72d230d_6b52_11ee_808b_0a43f95f28a3 | customer | 80- | vt_customer | some_other_table | drop table if exists some_other_table | vitess | | 2023-10-15 12:03:23 | 2023-10-15 12:03:24 | NULL | 2023-10-15 12:03:35 | 2023-10-15 12:03:35 | 2023-10-15 12:03:34.710144 | NULL | complete | | | 0 | zone1-0000000401 | 0 | 100 | vtctl:d7288b41-6b52-11ee-808b-0a43f95f28a3 | drop | | 0 | 0 | 0 | 0 | 0 | | 86400 | 0 | | | | | 0 | | 0 | 1 | 0 | 0 | | NULL | | NULL | 0 | | 0 | 1 | 2023-10-15 12:03:25 | 2023-10-15 12:03:25 | +| 7 | d729b47e_6b52_11ee_808b_0a43f95f28a3 | customer | -80 | vt_customer | corder | alter table corder modify column price bigint unsigned default null | vitess | | 2023-10-15 12:03:23 | 2023-10-15 12:03:24 | NULL | 2023-10-15 12:03:25 | 2023-10-15 12:03:31 | 2023-10-15 12:03:32.034889 | NULL | complete | | _d729b47e_6b52_11ee_808b_0a43f95f28a3_20231015120324_vrepl, | 0 | zone1-0000000301 | 0 | 100 | vtctl:d7288b41-6b52-11ee-808b-0a43f95f28a3 | alter | | 0 | 0 | 0 | 0 | 0 | | 86400 | 0 | | | `price` | column price: increased NUMERIC_PRECISION | 0 | | 0 | 1 | 1697371408 | 0 | | NULL | | NULL | 0 | re-enabling writes | 1 | 0 | 2023-10-15 12:03:25 | 2023-10-15 12:03:29 | +| 8 | d72b644f_6b52_11ee_808b_0a43f95f28a3 | customer | -80 | vt_customer | sample | create table sample ( + id int primary key +) | vitess | | 2023-10-15 12:03:23 | 2023-10-15 12:03:24 | NULL | 2023-10-15 12:03:34 | 2023-10-15 12:03:34 | 2023-10-15 12:03:33.701214 | NULL | complete | | _vt_HOLD_dd21768e6b5211ee86cc0a43f95f28a3_20231016120333, | 0 | zone1-0000000301 | 0 | 100 | vtctl:d7288b41-6b52-11ee-808b-0a43f95f28a3 | create | | 0 | 0 | 0 | 0 | 0 | | 86400 | 0 | | | | | 0 | | 0 | 1 | 0 | 0 | | NULL | | NULL | 0 | | 0 | 1 | 2023-10-15 12:03:25 | 2023-10-15 12:03:25 | +| 9 | d72d230d_6b52_11ee_808b_0a43f95f28a3 | customer | -80 | vt_customer | some_other_table | drop table if exists some_other_table | vitess | | 2023-10-15 12:03:23 | 2023-10-15 12:03:24 | NULL | 2023-10-15 12:03:35 | 2023-10-15 12:03:35 | 2023-10-15 12:03:34.710280 | NULL | complete | | | 0 | zone1-0000000301 | 0 | 100 | vtctl:d7288b41-6b52-11ee-808b-0a43f95f28a3 | drop | | 0 | 0 | 0 | 0 | 0 | | 86400 | 0 | | | | | 0 | | 0 | 1 | 0 | 0 | | NULL | | NULL | 0 | | 0 | 1 | 2023-10-15 12:03:25 | 2023-10-15 12:03:25 | ++----+--------------------------------------+----------+-------+--------------+------------------+---------------------------------------------------------------------+----------+---------+---------------------+---------------------+-----------------+---------------------+---------------------+----------------------------+-------------------+------------------+----------+-------------------------------------------------------------+---------+------------------+----------------+----------+--------------------------------------------+------------+---------+-------------+-------------+------------+-------------------+---------------------+----------+--------------------------+---------------------+--------------------------+---------------------------------+-----------------------+-------------------------------------------+------------------+---------------+---------+-------------------+---------------------------+---------------------+--------------+--------------------------+---------------------+---------------------+-----------------+--------------------+------------------+------------------------+---------------------+-----------------------------+ +``` +```sh +$ vtctldclient OnlineDDL show customer cancelled --limit 1 ++--------------------------------------+----------+-------+--------------+-------------+--------------------------------+----------+---------+---------------------+---------------------+-----------------+-------------------+--------------------+---------------------+-------------------+-----------+----------+-----------+---------+------------------+----------------+----------+--------------------------------------------+------------+---------------------------+-------------+-------------+------------+-------------------+---------------------+----------+----------------------------+---------------------+--------------------------+---------------------------------+-----------------------+------------------+------------------+---------------+---------+-------------------+---------------------------+---------------------+--------------+--------------------------+---------------------+---------------------+-----------------+-------+------------------+------------------------+--------------------+-----------------------------+ +| migration_uuid | keyspace | shard | mysql_schema | mysql_table | migration_statement | strategy | options | added_timestamp | requested_timestamp | ready_timestamp | started_timestamp | liveness_timestamp | completed_timestamp | cleanup_timestamp | status | log_path | artifacts | retries | tablet | tablet_failure | progress | migration_context | ddl_action | message | eta_seconds | rows_copied | table_rows | added_unique_keys | removed_unique_keys | log_file | artifact_retention_seconds | postpone_completion | removed_unique_key_names | dropped_no_default_column_names | expanded_column_names | revertible_notes | allow_concurrent | reverted_uuid | is_view | ready_to_complete | vitess_liveness_indicator | user_throttle_ratio | special_plan | last_throttled_timestamp | component_throttled | cancelled_timestamp | postpone_launch | stage | cutover_attempts | is_immediate_operation | reviewed_timestamp | ready_to_complete_timestamp | ++--------------------------------------+----------+-------+--------------+-------------+--------------------------------+----------+---------+---------------------+---------------------+-----------------+-------------------+--------------------+---------------------+-------------------+-----------+----------+-----------+---------+------------------+----------------+----------+--------------------------------------------+------------+---------------------------+-------------+-------------+------------+-------------------+---------------------+----------+----------------------------+---------------------+--------------------------+---------------------------------+-----------------------+------------------+------------------+---------------+---------+-------------------+---------------------------+---------------------+--------------+--------------------------+---------------------+---------------------+-----------------+-------+------------------+------------------------+--------------------+-----------------------------+ +| c919678a_6b50_11ee_808b_0a43f95f28a3 | customer | -80 | vt_customer | product | alter table product modify | vitess | | 2023-10-15 11:48:41 | 2023-10-15 11:48:41 | | | | 2023-10-15 12:00:26 | | cancelled | | | 0 | zone1-0000000301 | | 0 | vtctl:c91857d2-6b50-11ee-808b-0a43f95f28a3 | alter | CANCEL ALL issued by user | -1 | 0 | 0 | 0 | 0 | | 86400 | | | | | | | | | | 0 | 0 | | | | | | | 0 | | | | +| | | | | | column price bigint unsigned | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| | | | | | default null | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| c919678a_6b50_11ee_808b_0a43f95f28a3 | customer | 80- | vt_customer | product | alter table product modify | vitess | | 2023-10-15 11:48:41 | 2023-10-15 11:48:41 | | | | 2023-10-15 12:00:26 | | cancelled | | | 0 | zone1-0000000401 | | 0 | vtctl:c91857d2-6b50-11ee-808b-0a43f95f28a3 | alter | CANCEL ALL issued by user | -1 | 0 | 0 | 0 | 0 | | 86400 | | | | | | | | | | 0 | 0 | | | | | | | 0 | | | | +| | | | | | column price bigint unsigned | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| | | | | | default null | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ++--------------------------------------+----------+-------+--------------+-------------+--------------------------------+----------+---------+---------------------+---------------------+-----------------+-------------------+--------------------+---------------------+-------------------+-----------+----------+-----------+---------+------------------+----------------+----------+--------------------------------------------+------------+---------------------------+-------------+-------------+------------+-------------------+---------------------+----------+----------------------------+---------------------+--------------------------+---------------------------------+-----------------------+------------------+------------------+---------------+---------+-------------------+---------------------------+---------------------+--------------+--------------------------+---------------------+---------------------+-----------------+-------+------------------+------------------------+--------------------+-----------------------------+ +``` + +Note in the above each migration appears twice. For example, `d729b47e_6b52_11ee_808b_0a43f95f28a3` appears once for shard `-80` and once for shard `80-`. The two migrations run independently on each shard. It is possible to coordinate a near-atomic cut-over, aka [gated cut-over](../advanced-usage/#gated-cut-over). +- `show vitess_migrations` shows the entire history of migrations. +- `show vitess_migrations like ...` filters migrations by `migration_uuid`, or `migration_context`, or `migration_status`. +- `show vitess_migrations where ...` lets the user specify arbitrary conditions. +- All commands return results for the keyspace (schema) in use. + +#### Via vtctldclient + +```shell +$ vtctldclient OnlineDDL show customer d729b47e_6b52_11ee_808b_0a43f95f28a3 ++--------------------------------------+----------+-------+--------------+-------------+--------------------------------+----------+---------+---------------------+---------------------+-----------------+---------------------+---------------------+---------------------+-------------------+----------+----------+-------------------------------------------------------------+---------+------------------+----------------+----------+--------------------------------------------+------------+---------+-------------+-------------+------------+-------------------+---------------------+----------+----------------------------+---------------------+--------------------------+---------------------------------+-----------------------+--------------------------------+------------------+---------------+---------+-------------------+---------------------------+---------------------+--------------+--------------------------+---------------------+---------------------+-----------------+--------------------+------------------+------------------------+---------------------+-----------------------------+ +| migration_uuid | keyspace | shard | mysql_schema | mysql_table | migration_statement | strategy | options | added_timestamp | requested_timestamp | ready_timestamp | started_timestamp | liveness_timestamp | completed_timestamp | cleanup_timestamp | status | log_path | artifacts | retries | tablet | tablet_failure | progress | migration_context | ddl_action | message | eta_seconds | rows_copied | table_rows | added_unique_keys | removed_unique_keys | log_file | artifact_retention_seconds | postpone_completion | removed_unique_key_names | dropped_no_default_column_names | expanded_column_names | revertible_notes | allow_concurrent | reverted_uuid | is_view | ready_to_complete | vitess_liveness_indicator | user_throttle_ratio | special_plan | last_throttled_timestamp | component_throttled | cancelled_timestamp | postpone_launch | stage | cutover_attempts | is_immediate_operation | reviewed_timestamp | ready_to_complete_timestamp | ++--------------------------------------+----------+-------+--------------+-------------+--------------------------------+----------+---------+---------------------+---------------------+-----------------+---------------------+---------------------+---------------------+-------------------+----------+----------+-------------------------------------------------------------+---------+------------------+----------------+----------+--------------------------------------------+------------+---------+-------------+-------------+------------+-------------------+---------------------+----------+----------------------------+---------------------+--------------------------+---------------------------------+-----------------------+--------------------------------+------------------+---------------+---------+-------------------+---------------------------+---------------------+--------------+--------------------------+---------------------+---------------------+-----------------+--------------------+------------------+------------------------+---------------------+-----------------------------+ +| d729b47e_6b52_11ee_808b_0a43f95f28a3 | customer | 80- | vt_customer | corder | alter table corder modify | vitess | | 2023-10-15 12:03:23 | 2023-10-15 12:03:24 | | 2023-10-15 12:03:25 | 2023-10-15 12:03:31 | 2023-10-15 12:03:32 | | complete | | _d729b47e_6b52_11ee_808b_0a43f95f28a3_20231015120324_vrepl, | 0 | zone1-0000000401 | | 100 | vtctl:d7288b41-6b52-11ee-808b-0a43f95f28a3 | alter | | 0 | 0 | 0 | 0 | 0 | | 86400 | | | | `price` | column price: increased | | | | | 1697371408 | 0 | | | | | | re-enabling writes | 1 | | 2023-10-15 12:03:25 | 2023-10-15 12:03:29 | +| | | | | | column price bigint unsigned | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | NUMERIC_PRECISION | | | | | | | | | | | | | | | | | +| | | | | | default null | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| d729b47e_6b52_11ee_808b_0a43f95f28a3 | customer | -80 | vt_customer | corder | alter table corder modify | vitess | | 2023-10-15 12:03:23 | 2023-10-15 12:03:24 | | 2023-10-15 12:03:25 | 2023-10-15 12:03:31 | 2023-10-15 12:03:32 | | complete | | _d729b47e_6b52_11ee_808b_0a43f95f28a3_20231015120324_vrepl, | 0 | zone1-0000000301 | | 100 | vtctl:d7288b41-6b52-11ee-808b-0a43f95f28a3 | alter | | 0 | 0 | 0 | 0 | 0 | | 86400 | | | | `price` | column price: increased | | | | | 1697371408 | 0 | | | | | | re-enabling writes | 1 | | 2023-10-15 12:03:25 | 2023-10-15 12:03:29 | +| | | | | | column price bigint unsigned | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | NUMERIC_PRECISION | | | | | | | | | | | | | | | | | +| | | | | | default null | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ++--------------------------------------+----------+-------+--------------+-------------+--------------------------------+----------+---------+---------------------+---------------------+-----------------+---------------------+---------------------+---------------------+-------------------+----------+----------+-------------------------------------------------------------+---------+------------------+----------------+----------+--------------------------------------------+------------+---------+-------------+-------------+------------+-------------------+---------------------+----------+----------------------------+---------------------+--------------------------+---------------------------------+-----------------------+--------------------------------+------------------+---------------+---------+-------------------+---------------------------+---------------------+--------------+--------------------------+---------------------+---------------------+-----------------+--------------------+------------------+------------------------+---------------------+-----------------------------+ + +$ vtctldclient OnlineDDL show commerce recent ++--------------------------------------+----------+-------+--------------+-------------+--------------------------------+----------+---------+---------------------+---------------------+-----------------+---------------------+---------------------+---------------------+-------------------+----------+----------+-------------------------------------------------------------+---------+------------------+----------------+----------+--------------------------------------------+------------+---------+-------------+-------------+------------+-------------------+---------------------+----------+----------------------------+---------------------+--------------------------+---------------------------------+-----------------------+------------------+------------------+---------------+---------+-------------------+---------------------------+---------------------+--------------+--------------------------+---------------------+---------------------+-----------------+--------------------+------------------+------------------------+---------------------+-----------------------------+ +| migration_uuid | keyspace | shard | mysql_schema | mysql_table | migration_statement | strategy | options | added_timestamp | requested_timestamp | ready_timestamp | started_timestamp | liveness_timestamp | completed_timestamp | cleanup_timestamp | status | log_path | artifacts | retries | tablet | tablet_failure | progress | migration_context | ddl_action | message | eta_seconds | rows_copied | table_rows | added_unique_keys | removed_unique_keys | log_file | artifact_retention_seconds | postpone_completion | removed_unique_key_names | dropped_no_default_column_names | expanded_column_names | revertible_notes | allow_concurrent | reverted_uuid | is_view | ready_to_complete | vitess_liveness_indicator | user_throttle_ratio | special_plan | last_throttled_timestamp | component_throttled | cancelled_timestamp | postpone_launch | stage | cutover_attempts | is_immediate_operation | reviewed_timestamp | ready_to_complete_timestamp | ++--------------------------------------+----------+-------+--------------+-------------+--------------------------------+----------+---------+---------------------+---------------------+-----------------+---------------------+---------------------+---------------------+-------------------+----------+----------+-------------------------------------------------------------+---------+------------------+----------------+----------+--------------------------------------------+------------+---------+-------------+-------------+------------+-------------------+---------------------+----------+----------------------------+---------------------+--------------------------+---------------------------------+-----------------------+------------------+------------------+---------------+---------+-------------------+---------------------------+---------------------+--------------+--------------------------+---------------------+---------------------+-----------------+--------------------+------------------+------------------------+---------------------+-----------------------------+ +| c26f3b5e_6b50_11ee_808b_0a43f95f28a3 | commerce | 0 | vt_commerce | product | alter table product add column | vitess | | 2023-10-15 11:48:29 | 2023-10-15 11:48:30 | | 2023-10-15 11:48:31 | 2023-10-15 11:48:37 | 2023-10-15 11:48:38 | | complete | | _c26f3b5e_6b50_11ee_808b_0a43f95f28a3_20231015114830_vrepl, | 0 | zone1-0000000100 | | 100 | vtctl:c26e658d-6b50-11ee-808b-0a43f95f28a3 | alter | | 0 | 0 | 0 | 0 | 0 | | 86400 | | | | | | | | | | 1697370514 | 0 | | | | | | re-enabling writes | 1 | | 2023-10-15 11:48:31 | 2023-10-15 11:48:35 | +| | | | | | ts_entry TIMESTAMP not null | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ++--------------------------------------+----------+-------+--------------+-------------+--------------------------------+----------+---------+---------------------+---------------------+-----------------+---------------------+---------------------+---------------------+-------------------+----------+----------+-------------------------------------------------------------+---------+------------------+----------------+----------+--------------------------------------------+------------+---------+-------------+-------------+------------+-------------------+---------------------+----------+----------------------------+---------------------+--------------------------+---------------------------------+-----------------------+------------------+------------------+---------------+---------+-------------------+---------------------------+---------------------+--------------+--------------------------+---------------------+---------------------+-----------------+--------------------+------------------+------------------------+---------------------+-----------------------------+ + +$ vtctldclient OnlineDDL show customer cancelled --limit 1 ++--------------------------------------+----------+-------+--------------+-------------+--------------------------------+----------+---------+---------------------+---------------------+-----------------+-------------------+--------------------+---------------------+-------------------+-----------+----------+-----------+---------+------------------+----------------+----------+--------------------------------------------+------------+---------------------------+-------------+-------------+------------+-------------------+---------------------+----------+----------------------------+---------------------+--------------------------+---------------------------------+-----------------------+------------------+------------------+---------------+---------+-------------------+---------------------------+---------------------+--------------+--------------------------+---------------------+---------------------+-----------------+-------+------------------+------------------------+--------------------+-----------------------------+ +| migration_uuid | keyspace | shard | mysql_schema | mysql_table | migration_statement | strategy | options | added_timestamp | requested_timestamp | ready_timestamp | started_timestamp | liveness_timestamp | completed_timestamp | cleanup_timestamp | status | log_path | artifacts | retries | tablet | tablet_failure | progress | migration_context | ddl_action | message | eta_seconds | rows_copied | table_rows | added_unique_keys | removed_unique_keys | log_file | artifact_retention_seconds | postpone_completion | removed_unique_key_names | dropped_no_default_column_names | expanded_column_names | revertible_notes | allow_concurrent | reverted_uuid | is_view | ready_to_complete | vitess_liveness_indicator | user_throttle_ratio | special_plan | last_throttled_timestamp | component_throttled | cancelled_timestamp | postpone_launch | stage | cutover_attempts | is_immediate_operation | reviewed_timestamp | ready_to_complete_timestamp | ++--------------------------------------+----------+-------+--------------+-------------+--------------------------------+----------+---------+---------------------+---------------------+-----------------+-------------------+--------------------+---------------------+-------------------+-----------+----------+-----------+---------+------------------+----------------+----------+--------------------------------------------+------------+---------------------------+-------------+-------------+------------+-------------------+---------------------+----------+----------------------------+---------------------+--------------------------+---------------------------------+-----------------------+------------------+------------------+---------------+---------+-------------------+---------------------------+---------------------+--------------+--------------------------+---------------------+---------------------+-----------------+-------+------------------+------------------------+--------------------+-----------------------------+ +| c919678a_6b50_11ee_808b_0a43f95f28a3 | customer | -80 | vt_customer | product | alter table product modify | vitess | | 2023-10-15 11:48:41 | 2023-10-15 11:48:41 | | | | 2023-10-15 12:00:26 | | cancelled | | | 0 | zone1-0000000301 | | 0 | vtctl:c91857d2-6b50-11ee-808b-0a43f95f28a3 | alter | CANCEL ALL issued by user | -1 | 0 | 0 | 0 | 0 | | 86400 | | | | | | | | | | 0 | 0 | | | | | | | 0 | | | | +| | | | | | column price bigint unsigned | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| | | | | | default null | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| c919678a_6b50_11ee_808b_0a43f95f28a3 | customer | 80- | vt_customer | product | alter table product modify | vitess | | 2023-10-15 11:48:41 | 2023-10-15 11:48:41 | | | | 2023-10-15 12:00:26 | | cancelled | | | 0 | zone1-0000000401 | | 0 | vtctl:c91857d2-6b50-11ee-808b-0a43f95f28a3 | alter | CANCEL ALL issued by user | -1 | 0 | 0 | 0 | 0 | | 86400 | | | | | | | | | | 0 | 0 | | | | | | | 0 | | | | +| | | | | | column price bigint unsigned | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| | | | | | default null | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ++--------------------------------------+----------+-------+--------------+-------------+--------------------------------+----------+---------+---------------------+---------------------+-----------------+-------------------+--------------------+---------------------+-------------------+-----------+----------+-----------+---------+------------------+----------------+----------+--------------------------------------------+------------+---------------------------+-------------+-------------+------------+-------------------+---------------------+----------+----------------------------+---------------------+--------------------------+---------------------------------+-----------------------+------------------+------------------+---------------+---------+-------------------+---------------------------+---------------------+--------------+--------------------------+---------------------+---------------------+-----------------+-------+------------------+------------------------+--------------------+-----------------------------+ +``` +The syntax for tracking migrations is: +``` +vtctldclient OnlineDDL show |> +``` + +## Launching a migration + +Migrations submitted with [`--postpone-launch`](../postponed-migrations) remain `queued` or `ready` until told to launch. The user may launch a specific migration or they may launch all postponed migrations: + +#### Via VTGate/SQL + +```sql +mysql> alter vitess_migration 'aa89f255_8d68_11eb_815f_f875a4d24e90' launch; +Query OK, 1 row affected (0.01 sec) +``` + +or + +```sql +mysql> alter vitess_migration launch all; +Query OK, 1 row affected (0.01 sec) +``` + +#### Via vtctldclient + +Launch a specific migration: + +```shell +$ vtctldclient ApplySchema --sql "alter vitess_migration '9e8a9249_3976_11ed_9442_0a43f95f28a3' launch" commerce +``` + +Or launch a specific migration on a specific shard: + +```shell +$ vtctldclient ApplySchema --sql "alter vitess_migration '9e8a9249_3976_11ed_9442_0a43f95f28a3' launch vitess_shards '-40,40-80'" commerce +``` + +Or launch all: + +```shell +$ vtctldclient ApplySchema --sql "alter vitess_migration launch all" commerce +``` + +## Completing a migration + +Migrations submitted with [`--postpone-completion`](../postponed-migrations) remain `ready` or `running` until told to complete. The user may complete a specific migration or they may complete all postponed migrations: + +#### Via VTGate/SQL + +```sql +mysql> alter vitess_migration 'aa89f255_8d68_11eb_815f_f875a4d24e90' complete; +Query OK, 1 row affected (0.01 sec) +``` + +or + +```sql +mysql> alter vitess_migration complete all; +Query OK, 1 row affected (0.01 sec) +``` + +#### Via vtctldclient + +Complete a specific migration: + +```shell +$ vtctldclient ApplySchema --sql "alter vitess_migration '9e8a9249_3976_11ed_9442_0a43f95f28a3' complete" commerce +``` + +Or complete all: + +```shell +$ vtctldclient ApplySchema --sql "alter vitess_migration complete all" commerce +``` + +Also available via `vtctldclient OnlineDDL` command: + +```sh +$ vtctldclient OnlineDDL complete commerce 9e8a9249_3976_11ed_9442_0a43f95f28a3 +{ + "rows_affected_by_shard": { + "0": "0" + } +} +``` + +## Forcing a migration cut-over + +Applicable to `ALTER TABLE` migrations in `vitess` strategy and on MySQL `8.0`. The final step of the migration, the cut-over, involves acquiring locks on the migrated table. This operation can time out when the table is otherwise locked by the user or the app, in which case Vitess retries it later on, until successful. On very busy workloads, or in workloads where the app holds long running transactions locking the table, the migration may never be able to complete. + +The user may instruct Vitess to force the upcoming cut-over(s) of a specific migration, or of all pending migrations. When Vitess cuts-over such a migration, it searches for, and `KILL`s all queries still pending on the mgirated table, as well as all transactions that are holding locks on the table (by `KILL`ing their connections). This has a high likelihood to succeed and to allow the cut-over process to pass. If the cut-over still fails, then Vitess retries it later on, and keeps on `KILL`ing queries and connections on each such attempt. + +Notes: + +- The command merely marks the migration for forced cut-over. +- Actual cut-over expected to take place within a few seconds of issuing this command. +- Normally, migration cut-over intervals have an increasing backoff intervals. Once marked for forced cut-over, the migration ignores any such intervals and attempts at the earliest opportunity. +- It is possible to mark a migration for forced cut-over even before it completes, or before it even starts. The migration will still run normally until the point of cut-over, at which time it will attempt `KILL`ing queries and transactions. +- Not to be confused with `COMPLETE` command, above. This command does not compelte a `--postpone-completion` migration. + +See also `--force-cut-over-after=` [DDL strategy flag](../ddl-strategy-flags). + +#### Via VTGate/SQL + +```sql +mysql> alter vitess_migration 'aa89f255_8d68_11eb_815f_f875a4d24e90' force_cutover; +Query OK, 1 row affected (0.01 sec) +``` + +or + +```sql +mysql> alter vitess_migration force_cutover all; +Query OK, 1 row affected (0.01 sec) +``` + +#### Via vtctldclient + +Mark a specific migration for forced cut-over: + +```shell +$ vtctldclient ApplySchema --sql "alter vitess_migration '9e8a9249_3976_11ed_9442_0a43f95f28a3' force_cutover" commerce +``` + +Or mark all pending migrations: + +```shell +$ vtctldclient ApplySchema --sql "alter vitess_migration force_cutover all" commerce +``` + +Also available via `vtctldclient OnlineDDL` command: + +```sh +$ vtctldclient OnlineDDL force-cutover commerce 9e8a9249_3976_11ed_9442_0a43f95f28a3 +{ + "rows_affected_by_shard": { + "0": "1" + } +} +$ vtctldclient OnlineDDL force-cutover commerce all +{ + "rows_affected_by_shard": { + "0": "4" + } +} +``` + +## Cancelling a migration + +The user may cancel a migration, as follows: + +- If the migration hasn't started yet (it is `queued` or `ready`), then it transitions into `cancelled` state and doesn't get executed. +- If the migration is `running`, then it is forcibly interrupted. The migration transitions to `cancelled` state. +- In all other cases, cancelling a migration has no effect. + +#### Via VTGate/SQL + +In this illustrative flow we also glimpse into some further control over migrations. + +```sql + +mysql> set @@ddl_strategy='vitess --postpone-completion'; + +mysql> alter table product engine=innodb; ++--------------------------------------+ +| uuid | ++--------------------------------------+ +| f9e4dbaa_6b54_11ee_b0cf_0a43f95f28a3 | ++--------------------------------------+ + +mysql> show vitess_migrations like 'f9e4dbaa_6b54_11ee_b0cf_0a43f95f28a3' \G +*************************** 1. row *************************** + id: 3 + migration_uuid: f9e4dbaa_6b54_11ee_b0cf_0a43f95f28a3 + keyspace: commerce + shard: 0 + mysql_schema: vt_commerce + mysql_table: product + migration_statement: alter table product engine innodb + strategy: vitess + options: --postpone-completion + added_timestamp: 2023-10-15 12:18:40 + requested_timestamp: 2023-10-15 12:18:41 + ready_timestamp: NULL + started_timestamp: 2023-10-15 12:18:42 + liveness_timestamp: 2023-10-15 12:18:52 + completed_timestamp: NULL + cleanup_timestamp: NULL + migration_status: running +... + + +mysql> alter vitess_migration 'f9e4dbaa_6b54_11ee_b0cf_0a43f95f28a3' cancel; +Query OK, 1 row affected (0.04 sec) + +mysql> show vitess_migrations like 'f9e4dbaa_6b54_11ee_b0cf_0a43f95f28a3' \G +*************************** 1. row *************************** + id: 3 + migration_uuid: f9e4dbaa_6b54_11ee_b0cf_0a43f95f28a3 + keyspace: commerce + shard: 0 + mysql_schema: vt_commerce + mysql_table: product + migration_statement: alter table product engine innodb + strategy: vitess + options: --postpone-completion + added_timestamp: 2023-10-15 12:18:40 + requested_timestamp: 2023-10-15 12:18:41 + ready_timestamp: NULL + started_timestamp: 2023-10-15 12:18:42 + liveness_timestamp: 2023-10-15 12:19:02 + completed_timestamp: 2023-10-15 12:19:42.347196 + cleanup_timestamp: NULL + migration_status: cancelled + log_path: + artifacts: _f9e4dbaa_6b54_11ee_b0cf_0a43f95f28a3_20231015121841_vrepl, + retries: 0 + tablet: zone1-0000000100 + tablet_failure: 0 + progress: 100 + migration_context: vtgate:cc06e24a-6b54-11ee-b0cf-0a43f95f28a3 + ddl_action: alter + message: CANCEL issued by user +... +``` + +- `alter vitess_migration ... cancel` takes exactly one migration's UUID. +- `alter vitess_migration cancel all` takes no arguments and affects all pending migrations. +- `alter vitess_migration ... cancel` or `alter vitess_migration cancel all` respond with number of affected migrations across all shards. + +#### Via vtctldclient + +Illustrating yet another flow where we can control the progress of migrations: + +```sh + +$ vtctldclient UpdateThrottlerConfig --enable customer + +$ vtctldclient ApplySchema --sql "alter vitess_migration throttle all" customer + +$ vtctldclient ApplySchema --ddl-strategy="vitess" --sql "alter table corder engine=innodb" customer +075088b9_6b56_11ee_808b_0a43f95f28a3 + +$ vtctldclient OnlineDDL show customer 075088b9_6b56_11ee_808b_0a43f95f28a3 ++--------------------------------------+----------+-------+--------------+-------------+--------------------------------+----------+---------+---------------------+---------------------+-----------------+---------------------+---------------------+---------------------+-------------------+---------+----------+-------------------------------------------------------------+---------+------------------+----------------+----------+--------------------------------------------+------------+---------+-------------+-------------+------------+-------------------+---------------------+----------+----------------------------+---------------------+--------------------------+---------------------------------+-----------------------+------------------+------------------+---------------+---------+-------------------+---------------------------+---------------------+--------------+--------------------------+---------------------+---------------------+-----------------+-------+------------------+------------------------+---------------------+-----------------------------+ +| migration_uuid | keyspace | shard | mysql_schema | mysql_table | migration_statement | strategy | options | added_timestamp | requested_timestamp | ready_timestamp | started_timestamp | liveness_timestamp | completed_timestamp | cleanup_timestamp | status | log_path | artifacts | retries | tablet | tablet_failure | progress | migration_context | ddl_action | message | eta_seconds | rows_copied | table_rows | added_unique_keys | removed_unique_keys | log_file | artifact_retention_seconds | postpone_completion | removed_unique_key_names | dropped_no_default_column_names | expanded_column_names | revertible_notes | allow_concurrent | reverted_uuid | is_view | ready_to_complete | vitess_liveness_indicator | user_throttle_ratio | special_plan | last_throttled_timestamp | component_throttled | cancelled_timestamp | postpone_launch | stage | cutover_attempts | is_immediate_operation | reviewed_timestamp | ready_to_complete_timestamp | ++--------------------------------------+----------+-------+--------------+-------------+--------------------------------+----------+---------+---------------------+---------------------+-----------------+---------------------+---------------------+---------------------+-------------------+---------+----------+-------------------------------------------------------------+---------+------------------+----------------+----------+--------------------------------------------+------------+---------+-------------+-------------+------------+-------------------+---------------------+----------+----------------------------+---------------------+--------------------------+---------------------------------+-----------------------+------------------+------------------+---------------+---------+-------------------+---------------------------+---------------------+--------------+--------------------------+---------------------+---------------------+-----------------+-------+------------------+------------------------+---------------------+-----------------------------+ +| 075088b9_6b56_11ee_808b_0a43f95f28a3 | customer | -80 | vt_customer | corder | alter table corder engine | vitess | | 2023-10-15 12:26:12 | 2023-10-15 12:26:13 | | 2023-10-15 12:26:14 | 2023-10-15 12:26:23 | | | running | | _075088b9_6b56_11ee_808b_0a43f95f28a3_20231015122613_vrepl, | 0 | zone1-0000000301 | | 100 | vtctl:074f5fd7-6b56-11ee-808b-0a43f95f28a3 | alter | | 0 | 0 | 0 | 0 | 0 | | 86400 | | | | | | | | | | 1697372782 | 1 | | 2023-10-15 12:26:22 | vcopier | | | | 0 | | 2023-10-15 12:26:14 | | +| | | | | | innodb | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| 075088b9_6b56_11ee_808b_0a43f95f28a3 | customer | 80- | vt_customer | corder | alter table corder engine | vitess | | 2023-10-15 12:26:12 | 2023-10-15 12:26:13 | | 2023-10-15 12:26:14 | 2023-10-15 12:26:23 | | | running | | _075088b9_6b56_11ee_808b_0a43f95f28a3_20231015122613_vrepl, | 0 | zone1-0000000401 | | 100 | vtctl:074f5fd7-6b56-11ee-808b-0a43f95f28a3 | alter | | 0 | 0 | 0 | 0 | 0 | | 86400 | | | | | | | | | | 1697372782 | 1 | | 2023-10-15 12:26:22 | vcopier | | | | 0 | | 2023-10-15 12:26:14 | | +| | | | | | innodb | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ++--------------------------------------+----------+-------+--------------+-------------+--------------------------------+----------+---------+---------------------+---------------------+-----------------+---------------------+---------------------+---------------------+-------------------+---------+----------+-------------------------------------------------------------+---------+------------------+----------------+----------+--------------------------------------------+------------+---------+-------------+-------------+------------+-------------------+---------------------+----------+----------------------------+---------------------+--------------------------+---------------------------------+-----------------------+------------------+------------------+---------------+---------+-------------------+---------------------------+---------------------+--------------+--------------------------+---------------------+---------------------+-----------------+-------+------------------+------------------------+---------------------+-----------------------------+ + +$ vtctldclient OnlineDDL cancel customer 075088b9_6b56_11ee_808b_0a43f95f28a3 +{ + "rows_affected_by_shard": { + "-80": "1", + "80-": "1" + } +} + +$ vtctldclient OnlineDDL show customer 075088b9_6b56_11ee_808b_0a43f95f28a3 ++--------------------------------------+----------+-------+--------------+-------------+--------------------------------+----------+---------+---------------------+---------------------+-----------------+---------------------+---------------------+---------------------+-------------------+-----------+----------+-------------------------------------------------------------+---------+------------------+----------------+----------+--------------------------------------------+------------+-----------------------+-------------+-------------+------------+-------------------+---------------------+----------+----------------------------+---------------------+--------------------------+---------------------------------+-----------------------+------------------+------------------+---------------+---------+-------------------+---------------------------+---------------------+--------------+--------------------------+---------------------+---------------------+-----------------+-------+------------------+------------------------+---------------------+-----------------------------+ +| migration_uuid | keyspace | shard | mysql_schema | mysql_table | migration_statement | strategy | options | added_timestamp | requested_timestamp | ready_timestamp | started_timestamp | liveness_timestamp | completed_timestamp | cleanup_timestamp | status | log_path | artifacts | retries | tablet | tablet_failure | progress | migration_context | ddl_action | message | eta_seconds | rows_copied | table_rows | added_unique_keys | removed_unique_keys | log_file | artifact_retention_seconds | postpone_completion | removed_unique_key_names | dropped_no_default_column_names | expanded_column_names | revertible_notes | allow_concurrent | reverted_uuid | is_view | ready_to_complete | vitess_liveness_indicator | user_throttle_ratio | special_plan | last_throttled_timestamp | component_throttled | cancelled_timestamp | postpone_launch | stage | cutover_attempts | is_immediate_operation | reviewed_timestamp | ready_to_complete_timestamp | ++--------------------------------------+----------+-------+--------------+-------------+--------------------------------+----------+---------+---------------------+---------------------+-----------------+---------------------+---------------------+---------------------+-------------------+-----------+----------+-------------------------------------------------------------+---------+------------------+----------------+----------+--------------------------------------------+------------+-----------------------+-------------+-------------+------------+-------------------+---------------------+----------+----------------------------+---------------------+--------------------------+---------------------------------+-----------------------+------------------+------------------+---------------+---------+-------------------+---------------------------+---------------------+--------------+--------------------------+---------------------+---------------------+-----------------+-------+------------------+------------------------+---------------------+-----------------------------+ +| 075088b9_6b56_11ee_808b_0a43f95f28a3 | customer | -80 | vt_customer | corder | alter table corder engine | vitess | | 2023-10-15 12:26:12 | 2023-10-15 12:26:13 | | 2023-10-15 12:26:14 | 2023-10-15 12:26:34 | 2023-10-15 12:26:54 | | cancelled | | _075088b9_6b56_11ee_808b_0a43f95f28a3_20231015122613_vrepl, | 0 | zone1-0000000301 | | 100 | vtctl:074f5fd7-6b56-11ee-808b-0a43f95f28a3 | alter | CANCEL issued by user | 0 | 0 | 0 | 0 | 0 | | 86400 | | | | | | | | | | 1697372793 | 1 | | 2023-10-15 12:26:33 | vcopier | | | | 0 | | 2023-10-15 12:26:14 | | +| | | | | | innodb | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| 075088b9_6b56_11ee_808b_0a43f95f28a3 | customer | 80- | vt_customer | corder | alter table corder engine | vitess | | 2023-10-15 12:26:12 | 2023-10-15 12:26:13 | | 2023-10-15 12:26:14 | 2023-10-15 12:26:34 | 2023-10-15 12:26:54 | | cancelled | | _075088b9_6b56_11ee_808b_0a43f95f28a3_20231015122613_vrepl, | 0 | zone1-0000000401 | | 100 | vtctl:074f5fd7-6b56-11ee-808b-0a43f95f28a3 | alter | CANCEL issued by user | 0 | 0 | 0 | 0 | 0 | | 86400 | | | | | | | | | | 1697372793 | 1 | | 2023-10-15 12:26:33 | vcopier | | | | 0 | | 2023-10-15 12:26:14 | | +| | | | | | innodb | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ++--------------------------------------+----------+-------+--------------+-------------+--------------------------------+----------+---------+---------------------+---------------------+-----------------+---------------------+---------------------+---------------------+-------------------+-----------+----------+-------------------------------------------------------------+---------+------------------+----------------+----------+--------------------------------------------+------------+-----------------------+-------------+-------------+------------+-------------------+---------------------+----------+----------------------------+---------------------+--------------------------+---------------------------------+-----------------------+------------------+------------------+---------------+---------+-------------------+---------------------------+---------------------+--------------+--------------------------+---------------------+---------------------+-----------------+-------+------------------+------------------------+---------------------+-----------------------------+ +``` + +## Cancelling all keyspace migrations + +The user may cancel all migrations in a keyspace. A migration is cancellable if it is in `queued`, `ready` or `running` states, as described previously. It is a high impact operation and should be used with care. + +#### Via VTGate/SQL + +Examples for a single shard cluster: + +```sql +mysql> alter vitess_migration cancel all; +Query OK, 1 row affected (0.02 sec) +``` + +#### Via vtctldclient + +```shell +$ vtctldclient ApplySchema --sql "alter vitess_migration cancel all" commerce +``` + +Also available via `vtctldclient OnlineDDL` command: + +```sh +$ vtctldclient OnlineDDL cancel commerce all +{ + "rows_affected_by_shard": { + "0": "0" + } +} +``` + +## Retrying a migration + +The user may retry running a migration. If the migration is in `failed` or in `cancelled` state, Vitess will re-run the migration, with exact same arguments as previously intended. If the migration is in any other state, `retry` does nothing. + +It is not possible to retry a migration with different options. e.g. if the user initially runs `ALTER TABLE demo MODIFY id BIGINT` with `@@ddl_strategy='gh-ost --max-load Threads_running=200'` and the migration fails, retrying it will use exact same options. It is not possible to retry with `@@ddl_strategy='gh-ost --max-load Threads_running=500'`. + +#### Via VTGate/SQL + +```sql +mysql> alter vitess_migration '075088b9_6b56_11ee_808b_0a43f95f28a3' retry; +Query OK, 2 rows affected (0.01 sec) + +mysql> show vitess_migrations like '075088b9_6b56_11ee_808b_0a43f95f28a3' \G +*************************** 1. row *************************** + id: 12 + migration_uuid: 075088b9_6b56_11ee_808b_0a43f95f28a3 + keyspace: customer + shard: -80 + mysql_schema: vt_customer + mysql_table: corder + migration_statement: alter table corder engine innodb + strategy: vitess + options: + added_timestamp: 2023-10-15 12:26:12 + requested_timestamp: 2023-10-15 12:26:13 + ready_timestamp: NULL + started_timestamp: 2023-10-15 12:30:09 + liveness_timestamp: 2023-10-15 12:30:18 + completed_timestamp: NULL + cleanup_timestamp: NULL + migration_status: running +... +*************************** 2. row *************************** + id: 12 + migration_uuid: 075088b9_6b56_11ee_808b_0a43f95f28a3 + keyspace: customer + shard: 80- + mysql_schema: vt_customer + mysql_table: corder + migration_statement: alter table corder engine innodb + strategy: vitess + options: + added_timestamp: 2023-10-15 12:26:12 + requested_timestamp: 2023-10-15 12:26:13 + ready_timestamp: NULL + started_timestamp: 2023-10-15 12:30:09 + liveness_timestamp: 2023-10-15 12:30:18 + completed_timestamp: NULL + cleanup_timestamp: NULL + migration_status: running +... +``` + +#### Via vtctldclient + +The above migrations are running again, but still throttled. By way of illustration, let's cancel and retry them yet again: + +```shell +$ vtctldclient ApplySchema --sql "alter vitess_migration '075088b9_6b56_11ee_808b_0a43f95f28a3' cancel" customer +$ vtctldclient ApplySchema --sql "alter vitess_migration '075088b9_6b56_11ee_808b_0a43f95f28a3' retry" customer +``` + +Also available via `vtctldclient OnlineDDL` command: + + +```sh +$ vtctldclient OnlineDDL cancel customer 075088b9_6b56_11ee_808b_0a43f95f28a3 +{ + "rows_affected_by_shard": { + "-80": "1", + "80-": "1" + } +} +$ vtctldclient OnlineDDL retry customer 075088b9_6b56_11ee_808b_0a43f95f28a3 +{ + "rows_affected_by_shard": { + "-80": "1", + "80-": "1" + } +} +``` + +## Cleaning migration artifacts + +Migrations yield artifacts: these are leftover tables, such as the ghost or shadow tables in an `ALTER` DDL. These tables are audited and collected as part of [table lifecycle](../table-lifecycle/). + +The artifacts are essential to [Reverting a migration](../revertible-migrations/), and are kept intact for a while before destroyed. + +However, the artifacts also consume disk space. If the user is convinced they will not need the artifacts, they may explicitly request that the artifacts are dropped sooner. + +{{< warning >}} +Once cleanup is requested, the migration cannot be reverted. +{{< /warning >}} +{{< info >}} +The artifact tables are not purged immediately. Rather, they are sent for processing into the lifecycle mechanism. +{{< /info >}} + +#### Via VTGate/SQL + +Per migration, request artifact cleanup via: + +```sql +mysql> alter vitess_migration 'aa89f255_8d68_11eb_815f_f875a4d24e90' cleanup; +Query OK, 1 row affected (0.00 sec) +``` + + +#### Via vtctldclient + +Execute via `vtctldclient ApplySchema --sql "..." ` like previous commands, or use `OnlineDDL` command: + + +```shell +$ $ vtctldclient OnlineDDL cancel customer all +{ + "rows_affected_by_shard": { + "-80": "1", + "80-": "1" + } +} +$ vtctldclient OnlineDDL cleanup customer 075088b9_6b56_11ee_808b_0a43f95f28a3 +{ + "rows_affected_by_shard": { + "-80": "1", + "80-": "1" + } +} +``` + +## Reverting a migration + +Vitess offers _lossless revert_ for online schema migrations: the user may regret a table migration after completion, and roll back the table's schema to previous state _without loss of data_. See [Revertible Migrations](../revertible-migrations/). + +#### Via VTGate/SQL + +Examples for a single shard cluster: + +```sql +mysql> show create table corder\G + +Create Table: CREATE TABLE `corder` ( + `order_id` bigint(20) NOT NULL AUTO_INCREMENT, + `customer_id` bigint(20) DEFAULT NULL, + `sku` varbinary(128) DEFAULT NULL, + `price` bigint(20) DEFAULT NULL, + `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`order_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 +1 row in set (0.01 sec) + +mysql> set @@ddl_strategy='vitess'; + +mysql> alter table corder drop column ts, add key customer_idx(customer_id); ++--------------------------------------+ +| uuid | ++--------------------------------------+ +| 1a689113_8d77_11eb_815f_f875a4d24e90 | ++--------------------------------------+ + +mysql> show create table corder\G + +Create Table: CREATE TABLE `corder` ( + `order_id` bigint(20) NOT NULL AUTO_INCREMENT, + `customer_id` bigint(20) DEFAULT NULL, + `sku` varbinary(128) DEFAULT NULL, + `price` bigint(20) DEFAULT NULL, + PRIMARY KEY (`order_id`), + KEY `customer_idx` (`customer_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 +1 row in set (0.00 sec) + +mysql> revert vitess_migration '1a689113_8d77_11eb_815f_f875a4d24e90'; ++--------------------------------------+ +| uuid | ++--------------------------------------+ +| a02e6612_8d79_11eb_815f_f875a4d24e90 | ++--------------------------------------+ + +mysql> show create table corder\G + +Create Table: CREATE TABLE `corder` ( + `order_id` bigint(20) NOT NULL AUTO_INCREMENT, + `customer_id` bigint(20) DEFAULT NULL, + `sku` varbinary(128) DEFAULT NULL, + `price` bigint(20) DEFAULT NULL, + `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`order_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 +``` + +- A `revert` is its own migration, hence has its own UUID + +#### Via vtctldclient + +```sh +$ vtctldclient ApplySchema --ddl-strategy "vitess" --sql "revert vitess_migration '1a689113_8d77_11eb_815f_f875a4d24e90'" commerce +``` + +## Controlling throttling + +Managed migrations [use](../managed-online-schema-changes/#throttling) the [tablet throttler](../../../reference/features/tablet-throttler/) to ensure a sustainable impact to the MySQL servers and replication stream. Normally, the user doesn't need to get involved, as the throttler auto-identifies load scenarios, and pushes back on migration progress. However, Vitess makes available these commands for additional control over migration throttling: + +```sql +alter vitess_migration '' throttle [expire ''] [ratio ]; +alter vitess_migration throttle all [expire ''] [ratio ]; +alter vitess_migration '' unthrottle; +alter vitess_migration unthrottle all; +show vitess_throttled_apps; +``` + +**Note:** the tablet throttler must be enabled for these command to run. + +### Throttling a migration + +To fully throttle a migration, run: + +```sql +mysql> alter vitess_migration 'aa89f255_8d68_11eb_815f_f875a4d24e90' throttle; +Query OK, 1 row affected (0.00 sec) +``` + +From this point on, the migration will not make row copy progress and will not apply binary logs. By default, this command does not expire, and it takes an explicit `unthrottle` command to resume migration progress. Because MySQL binary logs are rotated, a migration may only survive a full throttling up to the point where the binary log it last processed is purged. + +You may supply either or both these options: `expire`, `ratio`: + +- `alter vitess_migration 'aa89f255_8d68_11eb_815f_f875a4d24e90' throttle expire '2h'` will fully throttle the migration for the next `2` hours, after which the migration resumes normal work. You may specify these units: `s` (seconds), `m` (minutes), `h` (hours) or combinations. Example values: `90s`, `30m`, `1h`, `1h30m`, etc. +- `alter vitess_migration 'aa89f255_8d68_11eb_815f_f875a4d24e90' throttle ratio 0.7` will partially throttle the migration. This instructs the throttler to reject, on average, `7` migration throttling check requests out of `10`. Any value between `0` (no throttling at all) and `1.0` (fully throttled) are allowed. This is a fine tune way to slow down a migration. + +### Throttling all migrations + +It's likely that you will want to throttle migrations in general, and not a specific migration. Use: + +- `alter vitess_migration throttle all` to fully throttle any and all migrations from this point on +- `alter vitess_migration throttle all expire '90m'` to fully throttle any and all migrations from this point on and for the next `90` minutes. +- `alter vitess_migration throttle all ratio 0.8` to severely slow down all migrations from this point on (4 out of 5 migrations requests to the throttler are denied) +- `alter vitess_migration throttle all duration '10m' ratio 0.2` to lightly slow down all migrations from this point on (1 out of 5 migrations requests to the throttler are denied) for the next `10` minutes. + +### Unthrottling + +Use: + +- `alter vitess_migration 'aa89f255_8d68_11eb_815f_f875a4d24e90' unthrottle` to allow the specified migration to resume working as normal +- `alter vitess_migration unthrottle all` to unthrottle all migrations. + +**Note** that this does not disable throttling altogether. If, for example, replication lag grows on replicas, the throttler may still throttle the migration until replication is caught up. Unthrottling only cancels an explicit throttling request as described above. + +### Showing throttled apps + +The command `show vitess_throttled_apps` is a general purpose throttler command, and shows all apps for which there are throttling rules. It will list any specific or general migration throttling status. + +#### Via vtctldclient + +Execute via `vtctldclient ApplySchema --sql "..." ` like previous commands, or use `OnlineDDL` commands: + +```shell +$ vtctldclient OnlineDDL throttle customer 075088b9_6b56_11ee_808b_0a43f95f28a3 +$ vtctldclient OnlineDDL throttle customer all +$ vtctldclient OnlineDDL unthrottle customer 075088b9_6b56_11ee_808b_0a43f95f28a3 +$ vtctldclient OnlineDDL unthrottle customer all +``` diff --git a/content/en/docs/21.0/user-guides/schema-changes/concurrent-migrations.md b/content/en/docs/21.0/user-guides/schema-changes/concurrent-migrations.md new file mode 100644 index 000000000..aabf08cf1 --- /dev/null +++ b/content/en/docs/21.0/user-guides/schema-changes/concurrent-migrations.md @@ -0,0 +1,70 @@ +--- +title: Concurrent migration execution +weight: 15 +aliases: ['/docs/user-guides/schema-changes/concurrent-migrations/'] +--- + +By default, Vitess schedules all migrations to run sequentially. Only a single migration is expected to run at any given time. However, there are cases for concurrent execution of migrations, and the user may request concurrent execution via `--allow-concurrent` flag in `ddl_strategy`. + +## Why not run concurrent migrations by default + +At the heart of schema migration management we are interested in `ALTER` DDLs that run for long periods of time. These will copy large amounts of data, perform many reads and writes, and overall affect the production server. They use built-in throttling mechanism to prevent harming production. The migration essentially competes with production traffic over resources. + +Generally speaking, running multiple such migrations concurrently increases resource competition substantially, and yields with overall higher wall clock migrations runtime compared with sequential execution. However, this depends on the _phases_ of the running migrations, as explained next. + +## Phases of a Vitess migration + +A `vitess` `ALTER TABLE` migration runs through several phases, and the two notable ones are: + +- The copy phase +- The tailing phase + +While the two interleave to some extent, it is illustrative to think of a migration as first copying the already existing rows of a table into the shadow table, then proceeding to tail the changelog (the binary logs) and apply events onto the shadow table. + +The copy phase is generally a heavyweight operation, as it incurs a massive copy of data in a greedy (though throttled) approach. The tailing phase could be intensive or relaxed, depending on the incoming production traffic (`INSERT`, `DELETE`, `UPDATE`) to the migrated table. + +Running two concurrent copy phases is, generally speaking, a very heavyweight operation and the two tasks interfere with each other. However, running two or more concurrent tailing phases could be lightweight, depending on incoming traffic. + +## Types of migrations that may run concurrnetly + +There are valid, even essential cases to running multiple migrations concurrently. Vitess supports the following scenarios: + +- Even though a long running `ALTER` may be running, a `CREATE` or `DROP` can be issued concurrently, with little to no effect on the migration and without competing over resources. +- There can be an urgent need to [revert a migration](../revertible-migrations). Vitess can allow reverting a migration (or even multiple migrations) even as some other unrelated migration is in process. +- Two `vitess` migrations could run concurrently: `vitess` will make sure only a single copy-phase runs at a time, but as many (up to some limit, in the dozens) tail phases may run concurrently to each other. + This plays well with [postponed migrations](../postponed-migrations). + +## Running a concurrent migration + +To run a migration concurrently, the user will add `--allow-concurrent` to the `ddl_strategy`. For example: + +```sql +mysql> set @@ddl_strategy='vitess --allow-concurrent'; +mysql> create table sample_table(id int primary key); +``` + +or, via `vtctl`: + +```shell +vtctldclient ApplySchema --ddl-strategy "vitess --allow-concurrent" -sql "REVERT VITESS_MIGRATION '3091ef2a_4b87_11ec_a827_0a43f95f28a3'" +``` + +## Restrictions and eligibility + +- To be eligible for concurrent execution, `--allow-concurrent` must be supplied. +- Any `CREATE` and `DROP` DDL is eligible for concurrent execution. +- Any `REVERT` request is eligible for concurrent execution. +- There can be at most one non-concurrent (regular) migration running at any given time. +- There may be an unlimited number of concurrent migrations running at any given time, on top of potentially a single non-concurrent migration. +- But there will never be two migrations running concurrently that operate on the same table. + +To clarify: + +- `gh-ost` and `pt-osc` `ALTER` migrations are not eligible to run concurrently + +## Scheduling notes + +- Multiple migrations can be in `ready` state. The scheduler will check them one by one to see which is eligible to next run. +- Migrations will advance to `running` state one at a time, at most a few seconds apart. +- A migration can be blocked from `running` if it operates on the same table as an already running migration. +- While one or more migrations can be blocked from `running`, other migrations, even if submitted later, could start running, assuming no concurrency conflicts. diff --git a/content/en/docs/21.0/user-guides/schema-changes/ddl-strategies.md b/content/en/docs/21.0/user-guides/schema-changes/ddl-strategies.md new file mode 100644 index 000000000..3dabe4915 --- /dev/null +++ b/content/en/docs/21.0/user-guides/schema-changes/ddl-strategies.md @@ -0,0 +1,195 @@ +--- +title: Online DDL strategies +weight: 3 +aliases: ['/docs/user-guides/schema-changes/ddl-strategies/'] +--- + +Vitess supports both managed, online schema migrations (aka Online DDL) as well as unmanaged migrations. How Vitess runs a schema migration depends on the _DDL strategy_. Vitess allows these strategies: + +- `vitess` (formerly known as `online`): utilizes Vitess's built-in [VReplication](../../../reference/vreplication/vreplication/) mechanism. This is the preferred strategy in Vitess. +- `gh-ost`: uses 3rd party GitHub's [gh-ost](https://github.com/github/gh-ost) tool. `gh-ost` strategy is **unsupported** and slated to be removed in future versions. +- `pt-osc`: uses 3rd party Percona's [pt-online-schema-change](https://www.percona.com/doc/percona-toolkit/3.0/pt-online-schema-change.html) as part of [Percona Toolkit](https://www.percona.com/doc/percona-toolkit/3.0/index.html). `pt-osc` strategy is **experimental** and slated to be removed in future versions. +- `mysql`: managed by the Online DDL scheduler, but executed via normal MySQL statement. Whether it is blocking or not is up to the specific query. +- `direct`: unmanaged. The direct apply of DDL to your database. Whether it is blocking or not is up to the specific query. + +`CREATE` and `DROP` are managed in the same way, by Vitess, whether strategy is `vitess`, `gh-ost` or `pt-osc`. + +See also [ddl_strategy flags](../ddl-strategy-flags). + +## Specifying a DDL strategy + +You can apply DDL strategies to your schema changes in these different ways: + +- The command `vtctldclient ApplySchema` takes a `--ddl-strategy` flag. The strategy applies to the specific changes requested in the command. The following example applies the `vitess` strategy to three migrations submitted together: + +```sh +$ vtctldclient ApplySchema --ddl-strategy "vitess" --sql "ALTER TABLE demo MODIFY id bigint UNSIGNED; CREATE TABLE sample (id int PRIMARY KEY); DROP TABLE another;" commerce +ab185fdf_6e46_11ee_8f23_0a43f95f28a3 +``` + +- Set `vtgate --ddl_strategy` flag. Migrations executed from within `vtgate` will use said strategy. + +```sh +$ vtgate --ddl_strategy="vitess" + +$ mysql +``` +```sql +mysql> alter table corder force; ++--------------------------------------+ +| uuid | ++--------------------------------------+ +| 2015f08d_6e46_11ee_a918_0a43f95f28a3 | ++--------------------------------------+ +``` + +- Set the `@@ddl_strategy` session variable to override the value of `vtgate`'s `--ddl_strategy` flag, for the current session. + +```sql +mysql> set @@ddl_strategy="vitess --postpone-completion --allow-concurrent"; +Query OK, 0 rows affected (0.01 sec) + +mysql> alter table corder force; ++--------------------------------------+ +| uuid | ++--------------------------------------+ +| 861f7de9_6e46_11ee_a918_0a43f95f28a3 | ++--------------------------------------+ +``` + +## Choosing a DDL strategy + +Different strategies have different behavior for `ALTER` statements. Sections below first break down specific handling and notes for each strategy, followed by an evaluation of the differences. + +### vitess + +The `vitess` strategy invokes Vitess's built in [VReplication](../../../reference/vreplication/vreplication/) mechanism. It is the mechanism behind resharding, materialized views, imports from external databases, and more. VReplication migrations use the same logic for copying data as do other VReplication operations, and as such the `vitess` strategy is known to be compatible with overall Vitess behavior. VReplication is authored by the maintainers of Vitess. + +`vitess` migrations enjoy the general features of VReplication: + +- Seamless integration with Vitess. +- Seamless use of the throttler mechanism. +- Visibility into internal working and status of VReplication. +- Agnostic to planned reparenting and to unplanned failovers. A migration will resume from point of interruption shortly after a new primary is available. + +`vitess` migrations further: + +- Are [revertible](../revertible-migrations): you may switch back to the pre-migration schema without losing any data accumulated during and post migration. +- Support a wider range of schema changes. For example, while `gh-ost` has a strict requirement for a shared unique key pre/post migration, `vitess` migrations may work with different keys, making it possible to modify a table's `PRIMARY KEY` without having to rely on an additional `UNIQUE KEY`. +- Support cut-over backoff: should a cut-over fail due to timeout, next cut-overs take place at increasing intervals and up to `30min` intevals, so as to not overwhelm production traffic. +- Support forced cut-over, to prioritise completion of the migration over any queries using the mgirated table, or over any transactions holding locks on the table. + +### gh-ost + +[gh-ost](https://github.com/github/gh-ost) was developed by [GitHub](https://github.com) as a lightweight and safe schema migration tool. + +To be able to run online schema migrations via `gh-ost`: + +- If you're on Linux/amd64 architecture, and on `glibc` `2.3` or similar, there are no further dependencies. Vitess comes with a built-in `gh-ost` binary, that is compatible with your system. Note that the Vitess Docker images use this architecture, and `gh-ost` comes pre-bundled and compatible. +- On other architectures: + - Have `gh-ost` executable installed + - Run `vttablet` with `--gh-ost-path=/full/path/to/gh-ost` flag + +Vitess automatically creates a MySQL account for the migration, with a randomly generated password. The account is destroyed at the end of the migration. + +Vitess takes care of setting up the necessary command line flags. It automatically creates a hooks directory and populates it with hooks that report `gh-ost`'s progress back to Vitess. You may supply additional flags for your migration as part of `@@ddl_strategy` session variable (using `VTGate`) or `--ddl-strategy` command line flag (using `vtctldclient`). Examples: + +- `set @@ddl_strategy='gh-ost --max-load Threads_running=200';` +- `set @@ddl_strategy='gh-ost --max-load Threads_running=200 --critical-load Threads_running=500 --critical-load-hibernate-seconds=60 --default-retries=512';` +- `vtctldclient --ddl-strategy "gh-ost --allow-nullable-unique-key --chunk-size 200" ...` + +**Note:** Do not override the following flags: `alter, database, table, execute, max-lag, force-table-names, serve-socket-file, hooks-path, hooks-hint-token, panic-flag-file`. Overriding any of these may cause Vitess to lose control and track of the migration, or even to migrate the wrong table. + +`gh-ost` throttling is done via Vitess's own tablet throttler, based on replication lag. + +{{< warning >}} +`gh-ost` strategy is **unsupported** and slated to be removed in future versions. +{{< /warning >}} + +### Using pt-online-schema-change + +[pt-online-schema-change](https://www.percona.com/doc/percona-toolkit/3.0/pt-online-schema-change.html) is part of [Percona Toolkit](https://www.percona.com/doc/percona-toolkit/3.0/index.html), a set of Perl scripts. To be able to use `pt-online-schema-change`, you must have the following setup on all your tablet servers (normally tablets are co-located with MySQL on same host and so this implies setting up on all MySQL servers): + +- `pt-online-schema-change` tool installed and is executable +- Perl `libdbi` and `libdbd-mysql` modules installed. e.g. on Debian/Ubuntu, `sudo apt-get install libdbi-perl libdbd-mysql-perl` +- Run `vttablet` with `-pt-osc-path=/full/path/to/pt-online-schema-change` flag. + +Note that on Vitess Docker images, `pt-online-schema-change` and dependencies are pre-installed. + +Vitess automatically creates a MySQL account for the migration, with a randomly generated password. The account is destroyed at the end of the migration. + +Vitess takes care of supplying the command line flags, the DSN, the username & password. It also sets up `PLUGINS` used to communicate migration progress back to the tablet. You may supply additional flags for your migration as part of `@@ddl_strategy` session variable (using `VTGate`) or `-ddl-strategy` command line flag (using `vtctldclient`). Examples: + +- `set @@ddl_strategy='pt-osc --null-to-not-null';` +- `set @@ddl_strategy='pt-osc --max-load Threads_running=200';` +- `vtctldclient ApplySchema --ddl-strategy "pt-osc --alter-foreign-keys-method auto --chunk-size 200" ...` + +Vitess tracks the state of the `pt-osc` migration. If it fails, Vitess makes sure to drop the migration triggers. Vitess keeps track of the migration even if the tablet itself restarts for any reason. Normally that would terminate the migration; Vitess will cleanup the triggers if so, or will happily let the migration run to completion if not. + +Do not override the following flags: `alter, pid, plugin, dry-run, execute, new-table-name, [no-]drop-new-table, [no-]drop-old-table`. + +`pt-osc` throttling is done via Vitess's own tablet throttler, based on replication lag, and via a `pt-online-schema-change` plugin. + +{{< warning >}} +`pt-osc` strategy is **experimental** and slated to be removed in future versions. +{{< /warning >}} + +### Comparing the options + +There are pros and cons to using any of the strategies. Some notable differences: + +#### General + +- All three options mimic an `ALTER TABLE` statement by creating and populating a shadow/ghost table behind the scenes, slowly bringing it up to date, and finally switching between the original and shadow tables. +- All three options utilize the Vitess throttler. + +#### Support + +- VReplication (`vitess` strategy) is internal to Vitess and supported by the Vitess maintainers. +- `gh-ost` and `pt-online-schema-change` are not supported by the Vitess maintainers, and slated to be removed in future versions. + +#### Setup + +- VReplication is part of Vitess +- To use `gh-ost` strategy, the user must supply a `gh-ost` binary. By default, Vitess will look for the binary `gh-ost` in the existing `PATH`. Otherwise, the user should configure the binary's full path with `--gh-ost-path`. +- `pt-online-schema-change` is not included in Vitess, and the user needs to set it up on tablet hosts. + - Note that on Vitess Docker images, `pt-online-schema-change` and dependencies _are_ pre-installed. + +#### Load + +- `pt-online-schema-change` uses triggers to propagate changes. This method is traditionally known to generate high load on the server. Both VReplication and `gh-ost` tail the binary logs to capture changes, and this approach is known to be more lightweight. +- When throttled, `pt-online-schema-change` still runs trigger actions, whereas both VReplication and `gh-ost` cease transfer of data (they may keep minimal bookkeeping operations). + +#### Cut-over + +- All strategies use an atomic cut-over based on MySQL locking. At the end of the migration, the tables are switched, and incoming queries are momentarily blocked, but not lost. +- In addition, `vitess` offers a buffering layer, that reduces the contention on the database server at cut-over time. + +#### MySQL compatibility + +- `vitess` strategy supports foreign keys using a custom built MySQL server, found in https://github.com/planetscale/mysql-server, and using experimental `--unsafe-allow-foreign-keys` DDL strategy flag. Otherwise `vitess` does not allow making changes to a table participating in a foreign key relationship. + `pt-online-schema-change` partially supports foreign keys. + `gh-ost` does not allow making changes to a table participating in a foreign key relationship. + +## Vitess functionality comparison + +| Strategy | Managed | Online | Trackable | Declarative | Revertible | Recoverable | Backoff | +|----------|---------|--------|-----------|-------------|---------------------|-------------|---------| +| `vitess` | Yes | Yes* | Yes+ | Yes | `CREATE,DROP,ALTER` | Yes | Yes | +| `gh-ost` | Yes | Yes* | Yes+ | Yes | `CREATE,DROP` | No* | No | +| `pt-osc` | Yes | Yes* | Yes | Yes | `CREATE,DROP` | No* | No | +| `mysql` | Yes | MySQL* | Yes | Yes | No | No | No | +| `direct` | No | MySQL* | No | No | No | No | No | + +- **Managed**: whether Vitess schedules and operates the migration +- **Online**: + - MySQL supports limited online (`INPLACE`) DDL as well as `INSTANT` DDL. See [support chart](https://dev.mysql.com/doc/refman/8.0/en/innodb-online-ddl-operations.html). `INSTANT` DDL is instant on both primary and replicas. `INPLACE` is non-blocking on parent but serialized on replicas, causing replication lag. Otherwise migrations are blocking on both primary and replicas. + - `gh-ost` does not support foreign keys + - `pt-osc` has support for foreign keys (may apply collateral blocking operations) + - `vitess` supports foreign keys on a [patched MySQL server](https://github.com/planetscale/mysql-server/commit/bb777e3e86387571c044fb4a2beb4f8c60462ced) and with `--unsafe-allow-foreign-keys` DDL strategy flag. +- **Trackable**: able to determine migration state (`ready`, `running`, `complete` etc) + - `vitess` and `gh-ost` strategies also makes available _progress %_ and _ETA seconds_ +- **Declarative**: support `--declarative` flag +- **Revertible**: `vitess` strategy supports [revertible](../revertible-migrations/) `ALTER` statements (or `ALTER`s implied by `--declarative` migrations). All managed strategies supports revertible `CREATE` and `DROP`. +- **Recoverable**: a `vitess` migration interrupted by planned/unplanned failover, [automatically resumes](../recoverable-migrations/) work from point of interruption. `gh-ost` and `pt-osc` will not resume after failover, but Vitess will automatically retry the migration (by marking the migration as failed and by initiating a `RETRY`), exactly once for any migration. +- **Backoff**: if the final cut-over step times out due to heavy traffic or locks on the migrated table, Vitess retries it in increasing intervals up to `30min` apart, so as not to further overwhelm production traffic. \ No newline at end of file diff --git a/content/en/docs/21.0/user-guides/schema-changes/ddl-strategy-flags.md b/content/en/docs/21.0/user-guides/schema-changes/ddl-strategy-flags.md new file mode 100644 index 000000000..29207c877 --- /dev/null +++ b/content/en/docs/21.0/user-guides/schema-changes/ddl-strategy-flags.md @@ -0,0 +1,64 @@ +--- +title: ddl_strategy flags +weight: 4 +aliases: ['/docs/user-guides/schema-changes/ddl-strategy-flags/'] +--- + +[`ddl_strategy`](../ddl-strategies) accepts flags in command line format. The flags can be vitess-specific, or, if unrecognized by Vitess, are passed on the underlying online schema change tools. + +## Vitess flags + +Vitess respects the following flags. They can be combined unless specifically indicated otherwise: + +- `--allow-concurrent`: allow a migration to run concurrently to other migrations, rather than queue sequentially. Some restrictions apply, see [concurrent migrations](../concurrent-migrations). +- `--allow-zero-in-date`: normally Vitess operates with a strict `sql_mode`. If you have columns such as `my_datetime DATETIME DEFAULT '0000-00-00 00:00:00'` and you wish to run DDL on these tables, Vitess will prevent the migration due to invalid values. Provide `--allow-zero-in-date` to allow either a fully zero-date or a zero-in-date inyour schema. See also [NO_ZERO_IN_DATE](https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html#sqlmode_no_zero_in_date) and [NO_ZERO_DATE](https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html#sqlmode_no_zero_date) documentation for [sql_mode](https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html). + +- `--analyze-table`: for `ALTER TABLE` operation, and in `online/vitess` strategy, run an `ANALYZE NO_WRITE_TO_BINLOG TABLE` just before starting the migration process, to get better estimation of the number of rows on the migrated table. + +- `cut-over-threshold="`: set an explicit threshold and timeout for a `vitess` `ALTER TABLE` cut-over phase. The default cut-over threshold, if not specified, is `10s`. A `vitess` migration will not attempt to cut-over if the vstream, or replication lag, is more than the cut-over threshold. Also, during cut-over, table locks will timeout after the same cut-over threshold (aborting the operation). + Normal values are in the range `5s`..`30s`. Too low and cut-over may never succeed because of the inherent async nature of `vitess` migrations. Too high and table locks will be placed for too long, effectively rendering the table inaccessible. + +- `--declarative`: mark the migration as declarative. You will define a desired schema state by supplying `CREATE` and `DROP` statements, ad Vitess will infer how to achieve the desired schema. If need be, it will generate an `ALTER` migration to convert to the new schema. See [declarative migrations](../declarative-migrations). + +- `--fast-range-rotation`: when the migration runs on a table partitioned by `RANGE`, and the migration either runs a single `DROP PARTITION` or a single `ADD PARTITION`, and nothing other than that, then this flags instructs Vitess to run the `ALTER TABLE` statement directly against MySQL, as opposed to running an Online DDL with a shadow table. For `DROP PARTITION`, this flag is actually always desired, and will possibly become default/redundant in the future. If all conditions are indeed met, then the migration is not revertible. + +- `--force-cut-over-after=`: applicable to `ALTER TABLE` migrations in `vitess` strategy and on MySQL `8.0`. The final step of the migration, the cut-over, involves acquiring locks on the migrated table. This operation can time out when the table is otherwise locked by the user or the app, in which case Vitess retries it later on, until successful. When `--force-cut-over-after` is specified, then counting the time since the very first cut-over attempt, and for any further cut-over attempt, Vitess will aggressively `KILL` queries and transactions that are using or locking the migrated table. + + For example, say `--force-cut-over-after=2h`, and that the migration takes `7h` to run. Say there is constant workload/locking that prevents the migration from cutting over. The first cut-over attempt takes place at the end of the `7h` run, and fails due to lock wait timeout. During the next 2 hours there will be multiuple additional attempt to cut-over, and say they all continue to fail. At the `2h` mark (`9h` since starting the migration), give or take, Vitess runs a cut-over that `KILL`s existing queries and transactions on the table. This is likely to make the cut-over successful. Should this still fail, Vitess will continue to forcefully `KILL` queries and transactions in all additional cut-over attempts. + + See also [forcing a migration cut-over](../audit-and-control/#forcing-a-migration-cut-over) + +- `--in-order-completion`: a migration that runs with this DDL strategy flag may only complete if no prior migrations are still pending (pending means either `queued`, `ready` or `running` states). `--in-order-completion` considers the order by which migrations were submitted. Note that `--in-order-completion` still allows concurrency. In fact, it is designed to work with concurrent migrations. The idea is that while many migrations may run concurrently, they must _complete_ in-order. + - This lets the user submit multiple migrations which may have some dependencies (for example, introduce two views, one of which reads from the other). As long as the migrations are submitted in a valid order, the user can then expect `vitess` to complete the migrations successfully (and in that order). + - This strategy flag applies to any `CREATE|DROP TABLE|VIEW` statements, and to `ALTER TABLE` with `vitess|online` strategy. + - It _does not_ apply to `ALTER TABLE` when using the `gh-ost`, `pt-osc`, `mysql`, or `direct` strategies. + +- `--postpone-completion`: initiate a migration that will only cut-over per user command, i.e. will not auto-complete. This gives the user control over the time when the schema change takes effect. See [postponed migrations](../postponed-migrations). + + `--declarative` migrations are only evaluated when scheduled to run. If a migrations is both `--declarative` and `--postpone-completion` then it will remain in `queued` state until the user issues a `ALTER VITESS_MIGRATION ... COMPLETE`. If it turns out that Vitess should run the migration as an `ALTER` then it is only at that time that the migration starts. + +- `--postpone-launch`: initiate a migration that remains `queued` and only launches per user command. See [postponed migrations](../postponed-migrations). + +- `--retain-artifacts=`: set an explicit artifact retention for this migration. If nonzero, this value overrides the `vttablet --retain_online_ddl_tables` value. + +- `--singleton`: only allow a single pending migration to be submitted at a time. From the moment the migration is queued, and until either completion, failure or cancellation, no other new `--singleton` migration can be submitted. New requests will be rejected with error. `--singleton` works as a an exclusive lock for pending migrations. Note that this only affects migrations with `--singleton` flag. Migrations running without that flag are unaffected and unblocked. + +- `--singleton-context`: only allow migrations submitted under same _context_ to be pending at any given time. Migrations submitted with a different _context_ are rejected for as long as at least one of the initially submitted migrations is pending. + + It does not make sense to combine `--singleton` and `--singleton-context`. + +## Pass-through flags + +Flags unrecognized by Vitess are passed on to the underlying schema change tools. For example, a `gh-ost` migration can run with: +```sql +set @@ddl_strategy='gh-ost --max-load Threads_running=200' +``` +Since Vitess knows nothing about `--max-load` it will pass it on as a command line argument to `gh-ost`. Consult [gh-ost documentation](https://github.com/github/gh-ost) for supported command line flags. + +Similarly, a `pt-online-schema-change` migration can run with: +```sql +set @@ddl_strategy='pt-osc --null-to-not-null' +``` +Consult [pt-online-schema-change documentation](https://www.percona.com/doc/percona-toolkit/3.0/pt-online-schema-change.html) for supported command line flags. + +The `vitess` strategy (formerly known as `online`) uses Vitess internal mechanisms and is not a standalone command line tool. therefore, it has no particular command line flags. For internal testing/CI purposes, the `vitess` strategy supports `--vreplication-test-suite`, and this flag must **not** be used in production as it can have destructive consequences. diff --git a/content/en/docs/21.0/user-guides/schema-changes/declarative-migrations.md b/content/en/docs/21.0/user-guides/schema-changes/declarative-migrations.md new file mode 100644 index 000000000..3fceb8307 --- /dev/null +++ b/content/en/docs/21.0/user-guides/schema-changes/declarative-migrations.md @@ -0,0 +1,117 @@ +--- +title: Declarative migrations +weight: 11 +aliases: ['/docs/user-guides/schema-changes/declarative-migrations/'] +--- + +Vitess's [managed schema changes](../managed-online-schema-changes/) offer _declarative_ online schema migrations: + +- The user may indicate a desired table schema and Vitess will make it so, whether the table exists or not, or +- The user may indicate a table should not exist, and Vitess will make it so. + +Declarative DDLs are expressed via: + +- Complete `CREATE TABLE` statement (make the table in desired state) +- `DROP TABLE` statement (make the table go) + +Altering tables in declarative DDL is done by issuing `CREATE TABLE` statements with the desired state. `ALTER` statements are not allowed. + +Declarative DDLs have the property of being idempotent. For example, a user may submit the same `CREATE TABLE` statement _twice_, one after another. If the 1st is successful, then the 2nd is a noop, and considered as implicitly successful. Likewise, two `DROP TABLE` DDLs for same statement will each ensure the table does not exist. If the 1st is successful, then the 2nd has nothing to do and is implicitly successful. + +## Usage + +Add `--declarative` to any of the online DDL strategies. Example: + +```sql + +mysql> set @@ddl_strategy='vitess --declarative'; + +-- The following migration creates a new table: +mysql> create table decl_table(id int primary key); ++--------------------------------------+ +| uuid | ++--------------------------------------+ +| b06475e5_8a74_11eb_badd_f875a4d24e90 | ++--------------------------------------+ + +-- The next migration will implicitly ALTER the table decl_table into desired state: +mysql> create table decl_table(id int primary key, ts timestamp not null); ++--------------------------------------+ +| uuid | ++--------------------------------------+ +| b7d6e6fb_8a74_11eb_badd_f875a4d24e90 | ++--------------------------------------+ + +-- Next migration does not change table structure, hence is a noop and implicitly successful: +mysql> create table decl_table(id int primary key, ts timestamp not null); ++--------------------------------------+ +| uuid | ++--------------------------------------+ +| 110574b1_8a75_11eb_badd_f875a4d24e90 | ++--------------------------------------+ +``` + +Consider migration `b7d6e6fb_8a74_11eb_badd_f875a4d24e90` above, which results in an `ALTER`. A look into the migration shows: + +```sql +mysql> show vitess_migrations like 'b7d6e6fb_8a74_11eb_badd_f875a4d24e90'\G +*************************** 1. row *************************** + id: 19 + migration_uuid: b7d6e6fb_8a74_11eb_badd_f875a4d24e90 + keyspace: commerce + shard: 0 + mysql_schema: vt_commerce + mysql_table: decl_table +migration_statement: create table decl_table ( + id int primary key, + ts timestamp not null +) + strategy: vitess + options: --declarative + added_timestamp: 2021-03-21 20:39:08 +requested_timestamp: 2021-03-21 20:39:07 + ready_timestamp: 2021-03-21 20:39:10 + started_timestamp: 2021-03-21 20:39:10 + liveness_timestamp: 2021-03-21 20:39:13 +completed_timestamp: 2021-03-21 20:39:13 + cleanup_timestamp: NULL + migration_status: complete + log_path: + artifacts: _b7d6e6fb_8a74_11eb_badd_f875a4d24e90_20210321203910_vrepl, + retries: 0 + tablet: zone1-0000000100 + tablet_failure: 0 + progress: 100 + migration_context: vtgate:38368dbe-8a60-11eb-badd-f875a4d24e90 + ddl_action: alter + message: ADD COLUMN `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP + eta_seconds: 0 +``` +Note how while the migration statement is `create`, the migration's `ddl_action` ends up being `alter`, and `message` indicates the alter options. + +You may add `--declarative` even if you otherwise supply flags to your favorite strategy. For example, the following is valid: +```sql +set @@ddl_strategy='gh-ost --declarative --max-load=Threads_running=100'; +``` + +Vitess notes down the `--declarative` flag and does not pass it to `gh-ost`, `pt-osc` or `VReplication`. + +## Implementation details + +The user submits a declarative DDL. Tables schedule the migration to execute, but at time of execution, may modify the migration on the fly and end up running a different migration. + +Consider the following types of migrations: + +- A `REVERT` has no special behavior, it acts as a normal revert. +- `ALTER` is rejected (migration will fail) +- `DROP`: silently mark as successful if the table does not exist. Otherwise treat the DDL as a normal `DROP`. +- `CREATE`: either, + - The table does not exist: proceed as normal `CREATE` + - The table exists: evaluate the SQL diff between the existing table schema and the proposed schema. Either: + - There is no diff (exact same schema): silently mark as successful + - There is a diff: rewrite the DDL as an actual `ALTER`, run using relevant strategy. + +Declarative DDLs are [revertible](../revertible-migrations/). Note: + +- A declarative migration which ends up being an `ALTER` is only revertible if executed with `vitess` strategy. +- A declarative migration which ends up being a noop (and implicitly successful), implies a noop revert. diff --git a/content/en/docs/21.0/user-guides/schema-changes/managed-online-schema-changes.md b/content/en/docs/21.0/user-guides/schema-changes/managed-online-schema-changes.md new file mode 100644 index 000000000..8497a6799 --- /dev/null +++ b/content/en/docs/21.0/user-guides/schema-changes/managed-online-schema-changes.md @@ -0,0 +1,247 @@ +--- +title: Managed, Online Schema Changes +weight: 2 +aliases: ['/docs/user-guides/managed-online-schema-changes/'] +--- + +Vitess offers managed, online schema migrations (aka Online DDL), transparently to the user. Vitess Online DDL offers: + +- Non-blocking migrations +- Migrations are asyncronously auto-scheduled, queued and executed by tablets +- Migration state is trackable +- Migrations are cancellable +- Migrations are retry-able +- Lossless, [revertible migrations](../revertible-migrations/) +- Support for [declarative migrations](../declarative-migrations/) +- Support for [postponed migrations](../postponed-migrations/) +- Support for [failover agnostic migrations](../recoverable-migrations/) +- Support for [concurrent migrations](../concurrent-migrations/) +- See also [advanced usage](../advanced-usage/) + +As general overview: + +- User chooses a [strategy](../ddl-strategies) for online DDL (online DDL is opt in) +- User submits one or more schema change queries, using the standard MySQL `CREATE TABLE`, `ALTER TABLE`, `DROP TABLE`, `CREATE VIEW`, `ALTER VIEW`, `DROP VIEW` syntax. +- Vitess responds with a Job ID for each schema change query. +- Vitess resolves affected shards. +- A shard's `primary` tablet schedules the migration to run when possible. +- Tablets will independently run schema migrations: + - `ALTER TABLE` statements run via `VReplication`, `gh-ost` or `pt-online-schema-change`, as per selected [strategy](../ddl-strategies) + - `CREATE TABLE` and `CREATE VIEW` statements run directly. + - `DROP TABLE` statements run [safely and lazily](https://github.com/vitessio/vitess/blob/main/doc/design-docs/SafeLazyDropTables.md). + - `ALTER VIEW` and `DROP VIEW` are internally modified to allow quick revert. +- Vitess provides the user a mechanism to view migration status, launch (if required), complete (if required), cancel or retry migrations, based on the job ID. + +## Syntax and supported statements + +Online DDL applies to the following statements: + +- `CREATE TABLE` +- `ALTER TABLE` +- `DROP TABLE` +- `CREATE VIEW` +- `ALTER VIEW` +- `DROP VIEW` + +Other DDL statements, such as `RENAME`, `TRUNCATE`, `OPTIMIZE`, etc., are not managed by the Online DDL mechanism and are executed directly on the backend MySQL servers. + +### ALTER TABLE + +Use the standard MySQL `ALTER TABLE` syntax to run online DDL. Whether your schema migration runs synchronously (the default MySQL behavior) or asynchronously (aka online), is determined by `ddl_strategy`. + +We assume we have a keyspace (schema) called `commerce`, with a table called `demo`, that has the following definition: + +```sql +CREATE TABLE `demo` ( + `id` int NOT NULL, + `status` varchar(32) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB +``` + +Consider the following schema migration statement: +```sql +ALTER TABLE demo MODIFY id bigint UNSIGNED; +``` + +This statement can be executed as: + +- a `vitess` (aka `online`), managed online migration +- a `gh-ost`, managed online migration ((**unsupported** and slated to be removed in future versions) +- a `pt-online-schema-change`, managed online migration (**experimental** and slated to be removed in future versions) +- a synchronous, [unmanaged schema change](../unmanaged-schema-changes/) + +See [DDL Strategies](../ddl-strategies) for discussion around the different options. + +### CREATE TABLE + +Use the standard MySQL `CREATE TABLE` syntax. The query goes through the same [migration flow](#migration-flow-and-states) as `ALTER TABLE` does. The tablets eventually run the query directly on the MySQL backends. + +### DROP TABLE + +Use the standard MySQL `DROP TABLE` syntax. The query goes through the same [migration flow](#migration-flow-and-states) as `ALTER TABLE` does. Tables are not immediately dropped. Instead, they are renamed into special names. For a while, the operation is revertible, after which the table lifecycle mechanism recognizes that the table is eligible for destruction, to then slowly and safely transition through lifecycle states into finally getting dropped. + +### CREATE VIEW, ALTER VIEW, DROP VIEW + +Use the standard MySQL syntax for these statements. All queries go through the same migration flow as above, and are revertible. Like `DROP TABLE`, a `DROP VIEW` statements does not immediately drop a view, but instead renamed is for safe keeping. + +### Statement transformations + +Vitess may modify your queries to qualify for online DDL statement. Modifications include: + +- A multi-table `DROP` statement is replaced by multiple `DROP` statements, each operating on a single table (and each tracked by its own job ID). +- A `CREATE INDEX` statement is replaced by the equivalent `ALTER TABLE` statement. + +## ddl_strategy + +You will either set `vtgate` `--ddl_strategy` command line flag value, or will override it with the `@@ddl_strategy` session variable, or use the `vtctldclient` --ddl-strategy` flag to control your schema migration strategy, and specifically, to enable and configure online DDL. Details in [DDL Strategies](../ddl-strategies). A quick overview: + +- The value `"vitess"` instructs Vitess to run an `ALTER TABLE` online DDL via `VReplication`. This is the preferred method. +- The value `"gh-ost"` instructs Vitess to run an `ALTER TABLE` online DDL via `gh-ost`. +- The value `"pt-osc"` instructs Vitess to run an `ALTER TABLE` online DDL via `pt-online-schema-change`. +- You may specify arguments for your tool of choice, e.g. `"gh-ost --max-load Threads_running=200"`. Details follow. +- The value `"direct"`, means not an online DDL. The empty value (`""`) is also interpreted as `direct`. A query is immediately pushed and applied on backend servers. This is the default strategy. The migration is not managed and is not trackable. + +`CREATE` and `DROP` statements run in the same way for `"vitess"`, `"gh-ost"` and `"pt-osc"` strategies, and we consider them all to be _online_. + +See also [ddl_strategy flags](../ddl-strategy-flags). + +## Running, tracking and controlling Online DDL + +Vitess provides two interfaces to interacting with Online DDL: + +- SQL commands, via `VTGate` +- Command line interface, via `vtctldclient` + +Supported interactions are: + +- [Running migrations](../audit-and-control/#running-migrations) (submitting Online DDL requests) +- [Tracking migrations](../audit-and-control/#tracking-migrations) +- [Launching a migration](../audit-and-control/#launching-a-migration) or all migrations, if explicitly set to postpone launch. +- [Completing a migration](../audit-and-control/#completing-a-migration) or all migrations, if explicitly set to postpone completion. +- [Cancelling a migration](../audit-and-control/#cancelling-a-migration) +- [Cancelling all pending migrations](../audit-and-control/#cancelling-all-keyspace-migrations) +- [Retrying a migration](../audit-and-control/#retrying-a-migration) +- [Reverting a migration](../audit-and-control/#reverting-a-migration) + +See [Audit and Control](../audit-and-control/) for a detailed breakdown. As quick examples: + +#### Executing an Online DDL via VTGate/SQL + +```sql +mysql> set @@ddl_strategy='vitess'; + +mysql> alter table corder add column ts timestamp not null default current_timestamp; ++--------------------------------------+ +| uuid | ++--------------------------------------+ +| bf4598ab_8d55_11eb_815f_f875a4d24e90 | ++--------------------------------------+ + +mysql> drop table customer; ++--------------------------------------+ +| uuid | ++--------------------------------------+ +| 6848c1a4_8d57_11eb_815f_f875a4d24e90 | ++--------------------------------------+ +``` + +#### Executing an Online DDL via vtctldclient + +```shell +$ vtctldclient ApplySchema --ddl-strategy "vitess" --sql "ALTER TABLE demo MODIFY id bigint UNSIGNED" commerce +a2994c92_f1d4_11ea_afa3_f875a4d24e90 +``` +You my run multiple migrations withing the same `ApplySchema` command: +```shell +$ vtctldclient ApplySchema --ddl-strategy "vitess" --sql "ALTER TABLE demo MODIFY id bigint UNSIGNED; CREATE TABLE sample (id int PRIMARY KEY); DROP TABLE another;" commerce +3091ef2a_4b87_11ec_a827_0a43f95f28a3 +``` + +`ApplySchema` accepts the following flags: + +- `--ddl_strategy`: by default migrations run directly via MySQL standard DDL. This flag must be applied to indicate an online strategy. See also [DDL strategies](../ddl-strategies) and [ddl_strategy flags](../ddl-strategy-flags). +- `--migration_context `: all migrations in a `ApplySchema` command are logically grouped via a unique _context_. A unique value will be supplied automatically. The user may choose to supply their own value, and it's their responsibility to provide with a unique value. Any string format is accepted. + The context can then be used to search for migrations, via `SHOW VITESS_MIGRATIONS LIKE 'the-context'`. It is visible in `SHOW VITESS_MIGRATIONS ...` output as the `migration_context` column. + +## Migration flow and states + +A migration can be in any one of these states: + +- `queued`: a migration is submitted +- `ready`: a migration is picked from the queue to run +- `running`: a migration was started. It is periodically tested to be making progress. +- `complete`: a migration completed successfully +- `failed`: a migration started running and failed due to whatever reason +- `cancelled`: a _pending_ migration was cancelled + +A migration is said to be _pending_ if we expect it to run and complete. Pending migrations are those in `queued`, `ready` and `running` states. + +For more about internals of the scheduler and how migration states are controlled, see [Online DDL Scheduler](https://github.com/vitessio/vitess/blob/main/doc/design-docs/OnlineDDLScheduler.md) + +## Configuration + +- `--retain_online_ddl_tables`: (`vttablet`) determines how long vttablet should keep an old migrated table before purging it. Type: duration. Default: 24 hours. + + Example: `vttablet -retain_online_ddl_tables 48h` + +- `--migration_check_interval`: (`vttablet`) interval between checks for submitted migrations. Type: duration Default: 1 minute. + + Example: `vttablet --migration_check_interval 30s` + +- `--enable_online_ddl`: (`vtgate`) whether Online DDL operations are at all possible through `VTGate`. Type: boolean. Default: `true` + + Example: `vtgate --enable_online_ddl=false` to disable access to Online DDL via `VTGate`. + +## Auto resume after failure + +VReplication based migrations (`ddl_strategy="vitess"`) are [failover agnostic](../recoverable-migrations/). They automatically resume after either planned promotion ([PlannedReparentShard](../../configuration-advanced/reparenting/#plannedreparentshard-planned-reparenting)), emergency promotion ([EmergencyReparentShard](../../configuration-advanced/reparenting/#emergencyreparentshard-emergency-reparenting)) or completely external reparenting. + +Once the new primary is in place and turns active, it auto-resumes the VReplication stream. The online DDL scheduler assumes ownership of the stream and follows it to completion. + +The new primary must be available within `10 minutes`, or else the migration is considered to be stale and is aborted. + +## Auto retry after failure + +Neither `gh-ost` and `pt-osc` are able to resume from point of failure, or after a failover. However, Vitess management can issue an automated retry (starting the migration afresh). + +- which `vttablet` initiated the migration +- how many times a migration has been retried +- whether a migration failed due to a `vttablet` failure (as is the case in a failover scenario) + +Vitess will auto-retry a failed migration when: + +- The migration failed due to a `vttablet` failure, and +- it has not been retried (this is a temporary restriction) + +The migration will be transitioned into `queued` state, as if the user requested a `retry` operation. Note that this takes place on a per-shard basis. + +The primary use case is a primary failure and failover. The newly promoted tablet will be able to retry the migration that broke during the previous primary failure. To clarify, the migration will start anew, as at this time there is no mechanism to resume a broken migration. + + +## Throttling + +All three strategies: `vitess`, `gh-ost` and `pt-osc` utilize the tablet throttler, which is a cooperative throttler service based on replication lag. The tablet throttler automatically detects topology `REPLICA` tablets and adapts to changes in the topology. See [Tablet throttler](../../../reference/features/tablet-throttler/). + +- `vitess` strategy uses the throttler by the fact VReplication natively uses the throttler on both source and target ends (for both reads and writes) +- `gh-ost` uses the throttler via `--throttle-http`, which is automatically provided by Vitess +- `pt-osc` uses the throttler by replication lag plugin, automatically injected by Vitess. + +**NOTE** that at this time (and subject to change) the tablet throttler is disabled by default. Enable it via `vtctldclient UpdateThrottlerConfig --enable `. If the tablet throttler is disabled, schema migrations will not throttle on replication lag. + +## Table cleanup + +All `ALTER` strategies leave artifacts behind. Whether successful or failed, either the original table or the _ghost_ table is left still populated at the end of the migration. Vitess explicitly makes sure the tables are not dropped at the end of the migration. This is for two reasons: + +- Make the table/data still available for a while, and +- In MySQL prior to `8.0.23`, a `DROP TABLE` operation can be dangerous in production as it commonly locks the buffer pool for a substantial period. + +The tables are kept for 24 hours after migration completion. Vitess automatically cleans up those tables as soon as a migration completes (either successful or failed). You will normally not need to do anything. + +Artifact tables are identifiable via `artifacts` column in a `SHOW VITESS_MIGRATION ...` command. You should generally not touch these tables. It's possible to `DROP` those tables with `direct` DDL strategy. Note that dropping tables in production can be risky and lock down your database for a substantial period of time. Dropping artifact tables also makes the migrations impossible to [revert](../revertible-migrations/). + +## Noblob + +The `noblob` binlog row image is supported by the MoveTables and Reshard VReplication workflows. + +**NOTE** replication does not support blobs as part of the `PRIMARY KEY` in `MoveTables` operations, or as part of the [migration key](../../../reference/vreplication/internal/keys/) in Online DDL operations. diff --git a/content/en/docs/21.0/user-guides/schema-changes/postponed-migrations.md b/content/en/docs/21.0/user-guides/schema-changes/postponed-migrations.md new file mode 100644 index 000000000..dc267c907 --- /dev/null +++ b/content/en/docs/21.0/user-guides/schema-changes/postponed-migrations.md @@ -0,0 +1,342 @@ +--- +title: Postponed migrations +weight: 12 +aliases: ['/docs/user-guides/schema-changes/postponed-migrations/'] +--- + +Postponed migrations allow: + +- Postponing the launch of a migration, and/or +- Postponing the final cut-over/completion of a migration. + +In both cases, it takes an explicit user interaction to launch or to complete the migration. + +Normally, migrations are executed by Vitess and are launched and completed automatically. For example, an `ALTER` on a large table can take hours or more to complete. Vitess automatically instates the new schema in place whenever it is satisfied that the `ALTER` is complete. Or, a `DROP` statement could wait in queue while other statements are running, only to actually execute hours later. + +## Postpone launch + +A postponed-launch migration will remain in queued state and will not start executing, until instructed to launch. + +Add `--postpone-launch` to any of the online DDL strategies. Example: + +```sql + +mysql> set @@ddl_strategy='vitess --postpone-launch'; + +-- The migration is tracked, but the ALTER process won't start running. +mysql> alter table product engine=innodb; ++--------------------------------------+ +| uuid | ++--------------------------------------+ +| 62cc734d_6b59_11ee_b0cf_0a43f95f28a3 | ++--------------------------------------+ +``` + +Migrations executed with `--postpone-launch` are visible on `show vitess_migrations` just as normal. They will present as `queued`. The column `postpone_launch` indicates that the migration will not auto-start: + + +```sql +mysql> show vitess_migrations like '62cc734d_6b59_11ee_b0cf_0a43f95f28a3' \G +*************************** 1. row *************************** + id: 4 + migration_uuid: 62cc734d_6b59_11ee_b0cf_0a43f95f28a3 + keyspace: commerce + shard: 0 + mysql_schema: vt_commerce + mysql_table: product + migration_statement: alter table product engine innodb + strategy: vitess + options: --postpone-launch + added_timestamp: 2023-10-15 12:50:14 + requested_timestamp: 2023-10-15 12:50:15 + ready_timestamp: NULL + started_timestamp: NULL + liveness_timestamp: NULL + completed_timestamp: NULL + cleanup_timestamp: NULL + migration_status: queued +``` + +### Use case + +The use case is specific to multi sharded environments. In some cases, a user may wish to experiment a migration on a single shard: + +- To see how long it takes to run. +- To see what impact it has on production traffic. +- To see what impact the schema change has. + +Postponed launch migrations make it possible to launch a migration on specific shards, while the migration remains `queued` on the rest of the shards. + +{{< warning >}} +Completing a migration on a subset of the shards means different shards will have different schemas. Do not do this when adding/removing columns, because the table on affected shards will be inconsistent with that of unaffected shards. This feature can be useful to experiment with adding/removing (ideally non-unique) indexes. +{{< /warning >}} + +### Launching a postponed migration + +Launching a postponed-launch migration is achieved by the following commands: + +```sql +mysql> alter vitess_migration '9e8a9249_3976_11ed_9442_0a43f95f28a3' launch; +``` + +The above unblocks the specific migration on all shards. The migration will execute at the discretion of the Online DDL executor. + +```sql +mysql> alter vitess_migration '9e8a9249_3976_11ed_9442_0a43f95f28a3' launch vitess_shards '-40,40-80'; +``` + +This variation accepts a comma delimited list of shard names. The migration will only launch on the specified shards. the rest of the shards ignore the command. An empty list of shards lets the command run on all shards. + +```sql +mysql> alter vitess_migration launch all; +``` + +Launches all currently postponed migrations on all shards. + +It is also possible to use `vtctldclient OnlineDDL` commands: + +```shell +$ vtctldclient OnlineDDL launch commerce 62cc734d_6b59_11ee_b0cf_0a43f95f28a3 +{ + "rows_affected_by_shard": { + "0": "1" + } +} + +# No migration left to launch: +$ vtctldclient OnlineDDL launch commerce all +{ + "rows_affected_by_shard": { + "0": "0" + } +} +``` + +Postponed launch is supported for all migrations. + +## Postpone completion + +A common requirement by engineers is to have more control over the cut-over time. With postponed completion migrations, it is possible to: + +- Invoke a migration that postpones completion +- Manually `COMPLETE` a migration + +This lets an engineer observe the change of schema at a point when they're comfortably at their console and prepared to take action should any issue occur. + +Add `--postpone-completion` to any* (see [supported migrations](#supported-migrations)) of the online DDL strategies. Example: + +```sql + +mysql> set @@ddl_strategy='vitess --postpone-completion'; + +-- The migration is tracked, but the table won't get created +mysql> create table mytable(id int primary key); ++--------------------------------------+ +| uuid | ++--------------------------------------+ +| a1dac193_4b86_11ec_a827_0a43f95f28a3 | ++--------------------------------------+ +``` + +Migrations executed with `--postpone-completion` are visible on `show vitess_migrations` just as normal. They will present either as `queued`, `ready` or `running`, at the scheduler's discretion. But they will not actually make changes to affected tables. The column `postpone_completion` indicates that the migration will not auto-complete: + +```sql +mysql> show vitess_migrations like 'a1dac193_4b86_11ec_a827_0a43f95f28a3' \G + + id: 1 + migration_uuid: a1dac193_4b86_11ec_a827_0a43f95f28a3 + keyspace: commerce + shard: 0 + mysql_schema: vt_commerce + mysql_table: my_table + migration_statement: create table my_table ( + id int primary key +) + strategy: vitess + options: --postpone-completion --allow-zero-in-date + added_timestamp: 2021-11-22 11:23:35 + requested_timestamp: 0000-00-00 00:00:00 + ready_timestamp: NULL + started_timestamp: NULL + liveness_timestamp: NULL + completed_timestamp: NULL + cleanup_timestamp: NULL + migration_status: queued + log_path: + artifacts: + retries: 0 + tablet: zone1-0000000100 + tablet_failure: 0 + progress: 0 + migration_context: vtgate:a1d8c5e0-4b86-11ec-a827-0a43f95f28a3 + ddl_action: create + message: + eta_seconds: -1 + rows_copied: 0 + table_rows: 0 + added_unique_keys: 0 + removed_unique_keys: 0 + log_file: + retain_artifacts_seconds: 86400 + postpone_completion: 1 +``` + +```sql +-- The migration is tracked, will start running when scheduler chooses, but will not cut-over. +mysql> alter table another_table add column ts timestamp not null; ++--------------------------------------+ +| uuid | ++--------------------------------------+ +| b7d6e6fb_8a74_11eb_badd_f875a4d24e90 | ++--------------------------------------+ + +*************************** 1. row *************************** + id: 3 + migration_uuid: 3091ef2a_4b87_11ec_a827_0a43f95f28a3 +... + strategy: vitess + options: --postpone-completion + added_timestamp: 2021-11-22 11:27:34 + requested_timestamp: 0000-00-00 00:00:00 + ready_timestamp: 2021-11-22 11:27:35 + started_timestamp: 2021-11-22 11:27:35 + liveness_timestamp: 2021-11-22 11:27:39 + completed_timestamp: NULL + cleanup_timestamp: NULL + migration_status: running +... + postpone_completion: 1 +``` + +### Completing a postponed migration + +Completing a postponed-completion migration is achieved by: + +```sql +mysql> alter vitess_migration 'b7d6e6fb_8a74_11eb_badd_f875a4d24e90' complete; +``` + +This command instructs Vitess that the migration should not kept waiting any further. +{{< info >}} +The command serves as a hint. It does not synchronously cut-over the migration. It is possible that the migration is not yet ready to cut-over (e.g. a long running `ALTER` may not be done copying all necessary data) +{{< /info >}} + +After issuing the command, value of `postpone_completion` turns to `0`: + +```sql +mysql> show vitess_migrations like '3091ef2a_4b87_11ec_a827_0a43f95f28a3' \G +*************************** 1. row *************************** + id: 3 + migration_uuid: 3091ef2a_4b87_11ec_a827_0a43f95f28a3 +... + strategy: vitess + options: --postpone-completion + added_timestamp: 2021-11-22 11:27:34 + requested_timestamp: 0000-00-00 00:00:00 + ready_timestamp: 2021-11-22 11:27:35 + started_timestamp: 2021-11-22 11:27:35 + liveness_timestamp: 2021-11-22 11:29:32 + completed_timestamp: NULL + cleanup_timestamp: NULL + migration_status: running + ... + postpone_completion: 0 +``` + +In the above the migration is still `running`. The scheduler has not determined yet that it is ready to cut-over. Continuing the example, two seconds later: +```sql +mysql> show vitess_migrations like '3091ef2a_4b87_11ec_a827_0a43f95f28a3' \G +*************************** 1. row *************************** + id: 3 + migration_uuid: 3091ef2a_4b87_11ec_a827_0a43f95f28a3 + ... + strategy: vitess + options: --postpone-completion + added_timestamp: 2021-11-22 11:27:34 + requested_timestamp: 0000-00-00 00:00:00 + ready_timestamp: 2021-11-22 11:27:35 + started_timestamp: 2021-11-22 11:27:35 + liveness_timestamp: 2021-11-22 11:29:32 + completed_timestamp: 2021-11-22 11:29:33 + cleanup_timestamp: NULL + migration_status: complete +... + postpone_completion: 0 +``` + + +It is also possible to use `vtctldclient OnlineDDL` commands: + +```shell +$ vtctldclient OnlineDDL complete commerce 2201058f_f266_11ea_bab4_0242c0a8b007 +{ + "rows_affected_by_shard": { + "0": "1" + } +} + +# No migration left whose completion is still postponed: +$ vtctldclient OnlineDDL complete commerce all +{ + "rows_affected_by_shard": { + "0": "0" + } +} +``` + +### Supported migrations + +Postponed completion is supported for: + +- `CREATE` and `DROP` for all online strategies +- `ALTER` migrations in `vitess` (formerly known as `online`) strategy +- `ALTER` migrations in `gh-ost` strategy +- `REVERT` migrations, including cascading `REVERT` operations + +Postponed completion is not supported in: + +- `direct` strategy +- `pt-osc` for `ALTER` migrations + +[declarative migrations](../declarative-migrations) will remain `queued` when `--postpone-migration` is specified, until `alter vitess_migration ... complete` is issued. This is true whether the declarative migration implies an eventual `CREATE`, `DROP` or `ALTER`. + +### Implementation details + +The two strong cases for postponed migrations are `DROP` and long running `ALTER`s. Both carry an amount of risk to production above other migrations. + +Postponed `ALTER` migrations (in `vitess` and `gh-ost` strategies) are actually executed, and begin copying table data as well as track ongoing changes. But as they reach the point where cut-over is agreeable, they stall, and keep waiting until the user issues the `alter vitess_migration ... complete` statement. Assuming the user runs the statement when all data has already been copied, it is typically a matter of seconds until the migration completes and the new schema is instated. + +For `CREATE` and `DROP` statements, there's no such backfill process as with `ALTER`, and the migrations are simply not scheduled, until the user issues the `complete` statement. Once the statement is issued, the migrations still need to be scheduled, and may be possibly delayed by an existing queue of migrations. + +## Mixing postponed launch and completion + +You may use both `--postpone-launch --postpone-completion` for a migration. For example, if you wanted to just see how long it takes to run a migration on a single shard and what impact it makes, but then only cut-over with all other shards, you would: + + +```sql + +mysql> set @@ddl_strategy='vitess --postpone-launch --postpone-completion'; + +-- The migration is tracked, but the ALTER process won't start running. +mysql> alter table mytable add column i int not null; ++--------------------------------------+ +| uuid | ++--------------------------------------+ +| 9e8a9249_3976_11ed_9442_0a43f95f28a3 | ++--------------------------------------+ + +mysql> alter vitess_migration '9e8a9249_3976_11ed_9442_0a43f95f28a3' launch vitess_shards '-40'; +``` + +You'd then wait until `ready_to_complete` to be `1` for that specific shard, at which time you'll have gathered all your data. You'd then: + +```sql +mysql> alter vitess_migration launch all; +``` + +Next, you'd wait for _all_ shard to reach `ready_to_complete`, at which time you'd cut-over all of them: + + +```sql +mysql> alter vitess_migration complete all; +``` diff --git a/content/en/docs/21.0/user-guides/schema-changes/recoverable-migrations.md b/content/en/docs/21.0/user-guides/schema-changes/recoverable-migrations.md new file mode 100644 index 000000000..2972e2144 --- /dev/null +++ b/content/en/docs/21.0/user-guides/schema-changes/recoverable-migrations.md @@ -0,0 +1,32 @@ +--- +title: Recoverable, failover agnostic migrations +weight: 13 +aliases: ['/docs/user-guides/schema-changes/recoverable-migrations/'] +--- + +Vitess's [managed schema changes](../managed-online-schema-changes/) offer _failover agnostic_ migrations in `vitess` strategy (VReplication based). + +Normally, schema migrations are coupled with the original MySQL server they operate on. A `gh-ost` or a `pt-online-schema-change`, as well as plain direct migrations, may only complete on the same server where they started. Any form of failover, whether planned or unplanned, either breaks the migration or makes it obsolete. + +`vitess` strategy migrations are agnostic to server promotion. A migration can begin on one `primary` tablet, and complete on another tablet which was promoted as `primary` throughout the migration. In large part this is a direct result of the nature of VReplication. + +`vitess` migrations will auto-survive: + +- A planned failover (via [PlannedReparentShard](../../configuration-advanced/reparenting/#plannedreparentshard-planned-reparenting)) +- An emergency reparent ([EmergencyReparentShard](../../configuration-advanced/reparenting/#emergencyreparentshard-emergency-reparenting)) +- An unexpected external reparent +- As long as no more than `10` minutes pass between failure/demotion of previous `primary` tablet and the promotion of the new `primary` tablet. + +## Behavior and limitations + +Whether by planned operation or an unplanned failure, a `vitess` migration's VReplication stream is interrupted while copying/applying data. VReplication's mechanism persists the state of data transfer transactionally with the transfer itself. Any replica will have a _consistent_ state of the migration, even if that replica lags behind the primary. + +When a replica tablet is promoted as `primary`, it notices the VReplication stream, which is meant to be active and running. It sets up the connections and processes to resume its work. It is possible that some retries will take place as the stream re-evaluates its source of data. + +The [Online DDL Scheduler](https://github.com/vitessio/vitess/blob/main/doc/design-docs/OnlineDDLScheduler.md) detects the running stream, and identifies it as having been created by a different tablet. It assumes ownership of the stream and proceeds to follow its progress till completion. + +The stream must be no more than `10` minutes stale, otherwise the scheduler marks the migration as failed. + +There is no limitation on the number of failovers a `vitess` migration can survive. + +No user action is required. Immediately after promotion/failover the migration will present as making no progress. It is likely to present progress within 1 or 2 minutes after promotion. diff --git a/content/en/docs/21.0/user-guides/schema-changes/revertible-migrations.md b/content/en/docs/21.0/user-guides/schema-changes/revertible-migrations.md new file mode 100644 index 000000000..71959cf0d --- /dev/null +++ b/content/en/docs/21.0/user-guides/schema-changes/revertible-migrations.md @@ -0,0 +1,231 @@ +--- +title: Revertible migrations +weight: 14 +aliases: ['/docs/user-guides/schema-changes/revertible-migrations/'] +--- + +Vitess's [managed schema changes](../managed-online-schema-changes/) offer _lossless revert_ for online schema migrations: the user may regret a table migration after completion, and roll back the table's schema to previous state _without loss of data_. + +Revertible migrations supported for: + +- `CREATE TABLE` statements: the _revert_ is to _uncreate_ the table +- `DROP TABLE` statements: the _revert_ is to _reinstate_ the table, populated with data from time of `DROP` +- `ALTER TABLE` statements: supported in `vitess` strategy, the _revert_ is to reapply previous table schema, without losing any data added/modified since migration completion. +- Another `revert` migration. It is possible to revert a _revert_, revert the revert of a _revert_, and so forth. + +## Behavior and limitations + +- A revert is a migration of its own, with a migration UUID, similarly to normal migrations. +- Migrations are only for revertible for `24h` since completion. +- It's only possible to revert the last successful migration on a given table. Illustrated following. + - In the future it may be possible to revert down the stack of completed migrations. + - To clarify, it's possibly to revert multiple migrations, even concurrently, but for each table you may only revert the last successful migration on that table. +- `ALTER` migrations are revertible only in `vitess` strategy. +- If a DDL is a noop, then so is its revert: + - If a table `t` exists, and an online DDL is `CREATE TABLE IF NOT EXISTS t (...)`, then the DDL does nothing, and its revert will do nothing. + - If a table `t` does not exist, and an online DDL is `DROP TABLE IF EXISTS t`, then likewise the DDL does nothing, and its revert does nothing. +- Some `ALTER` reverts are not guaranteed to succeed. Examples: + - An `ALTER` which modifies column `i` from `int` to `bigint`, followed by an `INSERT` that places a value larger than max `int`, cannot be reverted, because Vitess cannot place that new value in the old schema. + - An `ALTER` which removes a `UNIQUE KEY`, followed by an `INSERT` that populates a duplicate value on some column, may not be reverted if that duplicate violates the removed `UNIQUE` constraint. + + Vitess cannot know ahead of time whether a _revert_ is possible or not. + +## REVERT syntax + +Via SQL: + +```sql +REVERT VITESS_MIGRATION '69b17887_8a62_11eb_badd_f875a4d24e90'; +``` + +{{< warning >}} +As of Vitess 12.0 `vtctl OnlineDDL revert` is deprecated. Use the `REVERT VITESS_MIGRATION '...' ` SQL command either via `vtctl ApplySchema` or via `vtgate`. +{{< /warning >}} + +Via `vtctl`: + +``` +$ vtctldclient ApplySchema --ddl-strategy "vitess" --sql "revert vitess_migration '69b17887_8a62_11eb_badd_f875a4d24e90'" commerce +``` + +Both operations return a UUID for the revert migration. The user can track the revert migration to find its state. + +## Usage & walkthrough + +Consider the following annotated flow: +```sql +mysql> set @@ddl_strategy='vitess'; + +mysql> create table t(id int primary key); ++--------------------------------------+ +| uuid | ++--------------------------------------+ +| 3837e739_8a60_11eb_badd_f875a4d24e90 | ++--------------------------------------+ +-- Wait until migration is complete + +mysql> alter table t add column ts timestamp not null default current_timestamp; ++--------------------------------------+ +| uuid | ++--------------------------------------+ +| 6bc591b2_8a60_11eb_badd_f875a4d24e90 | ++--------------------------------------+ +-- Wait until migration is complete + +mysql> show create table t \G +*************************** 1. row *************************** + Table: t +Create Table: CREATE TABLE `t` ( + `id` int(11) NOT NULL, + `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 + +-- it is now possible to revert 6bc591b2_8a60_11eb_badd_f875a4d24e90, because it was the last successful migration on table t. +-- it is not possible to revert 3837e739_8a60_11eb_badd_f875a4d24e90, because while it was successful, it is not the last +-- successful migration to run on table t t. + +mysql> revert vitess_migration '6bc591b2_8a60_11eb_badd_f875a4d24e90'; ++--------------------------------------+ +| uuid | ++--------------------------------------+ +| ead67f31_8a60_11eb_badd_f875a4d24e90 | ++--------------------------------------+ +-- Wait until migration is complete + +mysql> show create table t \G +*************************** 1. row *************************** + Table: t +Create Table: CREATE TABLE `t` ( + `id` int(11) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 + +-- It is now possible to revert ead67f31_8a60_11eb_badd_f875a4d24e90 as it is the last successful migration to run on table t. +-- Reverting ead67f31_8a60_11eb_badd_f875a4d24e90 affectively means restoring the changes made by 6bc591b2_8a60_11eb_badd_f875a4d24e90 + +mysql> revert vitess_migration 'ead67f31_8a60_11eb_badd_f875a4d24e90'; ++--------------------------------------+ +| uuid | ++--------------------------------------+ +| 3b99f686_8a61_11eb_badd_f875a4d24e90 | ++--------------------------------------+ +-- Wait until migration is complete + +mysql> show create table t \G +*************************** 1. row *************************** + Table: t +Create Table: CREATE TABLE `t` ( + `id` int(11) NOT NULL, + `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 + +-- Let's try an invalid migration: ++--------------------------------------+ +| uuid | ++--------------------------------------+ +| 7fbdf1c7_8a61_11eb_badd_f875a4d24e90 | ++--------------------------------------+ +-- This will fail because column `id` already exists. + + id: 11 + migration_uuid: 7fbdf1c7_8a61_11eb_badd_f875a4d24e90 + keyspace: commerce + shard: 0 + mysql_schema: vt_commerce + mysql_table: t +migration_statement: alter table t add column id bigint + strategy: vitess + options: + added_timestamp: 2021-03-21 18:21:36 +requested_timestamp: 2021-03-21 18:21:32 + ready_timestamp: 2021-03-21 18:21:36 + started_timestamp: 2021-03-21 18:21:36 + liveness_timestamp: 2021-03-21 18:21:36 +completed_timestamp: NULL + cleanup_timestamp: NULL + migration_status: failed +... + ddl_action: alter + message: Duplicate column name 'id' (errno 1060) (sqlstate 42S21) during query: ALTER TABLE `_7fbdf1c7_8a61_11eb_badd_f875a4d24e90_20210321182136_vrepl` add column id bigint +... + +-- it is impossible to revert 7fbdf1c7_8a61_11eb_badd_f875a4d24e90 because it failed. + ++--------------------------------------+ +| uuid | ++--------------------------------------+ +| c3dff91a_8a61_11eb_badd_f875a4d24e90 | ++--------------------------------------+ + +mysql> show vitess_migrations like 'c3dff91a_8a61_11eb_badd_f875a4d24e90' \G +*************************** 1. row *************************** + id: 12 + migration_uuid: c3dff91a_8a61_11eb_badd_f875a4d24e90 + keyspace: commerce + shard: 0 + mysql_schema: vt_commerce + mysql_table: +migration_statement: revert 7fbdf1c7_8a61_11eb_badd_f875a4d24e90 + strategy: vitess + options: + added_timestamp: 2021-03-21 18:23:31 +requested_timestamp: 2021-03-21 18:23:26 + ready_timestamp: 2021-03-21 18:23:36 + started_timestamp: NULL + liveness_timestamp: NULL +completed_timestamp: NULL + cleanup_timestamp: NULL + migration_status: failed +... + ddl_action: revert + message: can only revert a migration in a 'complete' state. Migration 7fbdf1c7_8a61_11eb_badd_f875a4d24e90 is in 'failed' state +... + +mysql> insert into t values (1, now()); + +mysql> select * from t; ++----+---------------------+ +| id | ts | ++----+---------------------+ +| 1 | 2021-03-21 18:26:47 | ++----+---------------------+ + +mysql> drop table t; ++--------------------------------------+ +| uuid | ++--------------------------------------+ +| 69b17887_8a62_11eb_badd_f875a4d24e90 | ++--------------------------------------+ +-- Wait until migration is complete + +mysql> select * from t; +ERROR 1146 (42S02): ... + +mysql> revert vitess_migration '69b17887_8a62_11eb_badd_f875a4d24e90'; ++--------------------------------------+ +| uuid | ++--------------------------------------+ +| 9eb00275_8a62_11eb_badd_f875a4d24e90 | ++--------------------------------------+ +-- Wait until migration is complete +-- `t` was not really dropped, but renamed away. This REVERT reinstates it. + +mysql> select * from t; ++----+---------------------+ +| id | ts | ++----+---------------------+ +| 1 | 2021-03-21 18:26:47 | ++----+---------------------+ +``` + +## Implementation details + +Revert for `CREATE` and `DROP` are implemented similarly for all online strategies. + +- The revert for a `CREATE` DDL is to rename the table away and into a [table lifecycle](../table-lifecycle/) name, rather than actually `DROP` it. This keeps th etale safe for a period of time, and makes it possible to reinstate the table, populated with all data, via a 2nd revert. +- The revert for a `DROP` relies on the fact that Online DDL `DROP TABLE` does not, in fact, drop the table, but actually rename it away. Thus, reverting the `DROP` is merely a `RENAME` back into its original place. +- The revert for `ALTER` is only available for `vitess` strategy (formerly called `online`), implemented by `VReplication`. VReplication keep track of a DDL migration by writing down the GTID position through the migration flow. In particular, at time of cut-over and when tables are swapped, VReplication notes the _final_ GTID pos for the migration. + When a revert is requested, Vitess computes a new VReplication rule/filter for the new stream. It them copies the _final_ GTID pos from the reverted migration, and instructs VReplication to resume from that point. + As result, a revert for an `ALTER` migration only needs to catch up with the changelog (binary log entries) since the cut-over of the original migration. To elaborate, it does not need to copy table data, and only needs to consider events for the specific table affected by the revert. This makes the revert operation efficient. diff --git a/content/en/docs/21.0/user-guides/schema-changes/table-lifecycle.md b/content/en/docs/21.0/user-guides/schema-changes/table-lifecycle.md new file mode 100644 index 000000000..0da438713 --- /dev/null +++ b/content/en/docs/21.0/user-guides/schema-changes/table-lifecycle.md @@ -0,0 +1,102 @@ +--- +title: Table lifecycle +weight: 5 +aliases: ['/docs/user-guides/table-lifecycle/','/docs/reference/table-lifecycle/', 'docs/reference/features/table-lifecycle/'] +--- + +Vitess manages a table lifecycle flow, an abstraction and automation for a `DROP TABLE` operation. + +## Problems with DROP TABLE + +Vitess inherits the same issues that MySQL has with `DROP TABLE`. Doing a direct +`DROP TABLE my_table` in production can be a risky operation. In busy environments +this can lead to a complete lockdown of the database for the duration of seconds, +to minutes and more. This is typically less of a problem in Vitess than it might +be in normal MySQL, if you are keeping your shard instances (and thus shard +table instances) small, but could still be a problem. + +{{< info >}}MySQL 8.0.23 addresses the issues of DROP TABLE. Vitess changes its course of action based on the MySQL version, see below.{{< /info >}} + + +There are two locking aspects to dropping tables: + +- Purging dropped table's pages from the InnoDB buffer pool(s) +- Removing table's data file (`.ibd`) from the filesystem. + +The exact locking behavior and duration can vary depending on +various factors: + +- Which filesystem is used. +- Whether the MySQL adaptive hash index is used. +- Whether you are attempting to hack around some of the MySQL `DROP TABLE` + performance problems using hard links. + +It is common practice to avoid direct `DROP TABLE` statements and to follow +a more elaborate table lifecycle. + +## Vitess table lifecycle + +The lifecycle offered by Vitess consists of the following stages or some subset of them: + +> _in use_ -> hold -> purge -> evac -> drop -> _removed_ + +To understand the flow better, consider the following breakdown: + +- _In use_: the table is serving traffic, like a normal table. +- `hold`: the table is renamed to some arbitrary new name. The application cannot see it, and considers it as gone. However, the table still exists, with all of its data intact. It is possible to reinstate it (e.g. in case we realize some application still requires it) by renaming it back to its original name. +- `purge`: the table is in the process of being purged (i.e. rows are being deleted). The purge process completes when the table is completely empty. At the end of the purge process the table no longer has any pages in the buffer pool(s). However, the purge process itself loads the table pages to cache in order to delete rows. + Vitess purges the table a few rows at a time, and uses a throttling mechanism to reduce load. + Vitess disables binary logging for the purge. The deletes are not written to the binary logs and are not replicated. This reduces load from disk IO, network, and replication lag. Data is not purged on the replicas. + Experience shows that dropping a table populated with data on a replica has lower performance impact than on the primary, and the tradeoff is worthwhile. +- `evac`: a waiting period during which we expect normal production traffic to slowly evacuate the (now inactive) table's pages from the buffer pool. Vitess hard codes this period for `72` hours. The time is heuristic, there is no tracking of table pages in the buffer pool. +- `drop`: an actual `DROP TABLE` is imminent +- _removed_: table is dropped. When using InnoDB and `innodb_file_per_table` this means the `.ibd` data file backing the table is removed, and disk space is reclaimed. + +## Lifecycle subsets and configuration + +Different environments and users have different requirements and workflows. For example: + +- Some wish to immediately start purging the table, wait for pages to evacuate, then drop it. +- Some want to keep the table's data for a few days, then directly drop it. +- Some just wish to directly drop the table, they see no locking issues (e.g. smaller table). + +Vitess supports all subsets via `--table_gc_lifecycle` flag to `vttablet`. The default is `"hold,purge,evac,drop"` (the complete cycle). Users may configure any subset, e.g. `"purge,drop"`, `"hold,drop"`, `"hold,evac,drop"` or even just `"drop"`. + +Vitess will always work the steps in this order: `hold -> purge -> evac -> drop`. For example, setting `--table_gc_lifecycle "drop,hold"` still first _holds_, then _drops_ + +All subsets end with a `drop`, even if not explicitly mentioned. Thus, `"purge"` is interpreted as `"purge,drop"`. + +In MySQL **8.0.23** and later, table drops do not acquire locks on the InnoDB buffer pool, and are non-blocking for queries that do not reference the table being dropped. Vitess automatically identifies whether the underlying MySQL server is at that version or later and will: + +- Implicitly skip the `purge` stage, even if defined +- Implicitly skip the `evac` stage, even if defined + +## Stateless flow by table name hints + +Vitess does not track the state of the table lifecycle. The process is stateless thanks to an encoding scheme in the table names. Examples: + +- The table `_vt_HOLD_6ace8bcef73211ea87e9f875a4d24e90_20210915120000` is held until `2021-09-15 12:00:00`. The data remains intact. +- The table `_vt_PURGE_6ace8bcef73211ea87e9f875a4d24e90_20210915123000` is at the state where it is being purged, or queued to be purged. Once it's fully purged (zero rows remain), it transitions to the next stage. +- The table `_vt_EVAC_6ace8bcef73211ea87e9f875a4d24e90_20210918093000` is held until `2021-09-18 09:30:00` +- The table `_vt_DROP_6ace8bcef73211ea87e9f875a4d24e90_20210921170000` is eligible to be dropped on `2021-09-21 17:00:00` + +{{< info >}} +Starting in Vitess `v20`, the table naming format will change. Tables will be named like so: + +- `_vt_hld_6ace8bcef73211ea87e9f875a4d24e90_20200915120410_` +- `_vt_prg_6ace8bcef73211ea87e9f875a4d24e90_20200915120410_` +- `_vt_evc_6ace8bcef73211ea87e9f875a4d24e90_20200915120410_` +- `_vt_drp_6ace8bcef73211ea87e9f875a4d24e90_20200915120410_` + +`v19` supports the new naming format, but does not generate any tables in this format. `v20` will generate tables in the new format, and will support the old format. Support for old format will be dropped in `v21` or later. +{{< /info >}} + +## Automated lifecycle + +Vitess internally uses the above table lifecycle for [online, managed schema migrations](../../../user-guides/schema-changes/managed-online-schema-changes/). All online strategies: `vitess`, `gh-ost`, and `pt-online-schema-change`, create artifact tables or end with leftover tables: Vitess automatically collects those tables. The artifact or leftover tables are immediate moved to `hold` state. Depending on `vttablet`'s `--table_gc_lifecycle` flag, they may spend time in this state, getting purged, or immediately transitioned to the next state. + +## User-facing DROP TABLE lifecycle + +When using an online `ddl_strategy`, a `DROP TABLE` is a [managed schema migration](../../../user-guides/schema-changes/managed-online-schema-changes/). It is internally replaced by a `RENAME TABLE` statement, renaming it into a `HOLD` state (e.g. `_vt_HOLD_6ace8bcef73211ea87e9f875a4d24e90_20210915120000`). It will then participate in the table lifecycle mechanism. If `table_gc_lifecycle` does not include the `hold` state, the table proceeds to transition to next included state. + +A multi-table `DROP TABLE` statement is converted to multiple single-table `DROP TABLE` statements, each to then convert to a `RENAME TABLE` statement. diff --git a/content/en/docs/21.0/user-guides/schema-changes/unmanaged-schema-changes.md b/content/en/docs/21.0/user-guides/schema-changes/unmanaged-schema-changes.md new file mode 100644 index 000000000..15e83fd5f --- /dev/null +++ b/content/en/docs/21.0/user-guides/schema-changes/unmanaged-schema-changes.md @@ -0,0 +1,90 @@ +--- +title: Unmanaged Schema Changes +weight: 1 +aliases: ['/docs/user-guides/operating-vitess/making-schema-changes', '/docs/schema-management/unmanaged-schema-changes/', '/docs/user-guides/unmanaged-schema-changes/'] +--- + +Vitess offers multiple approaches to running unmanaged schema changes. Below, we review each of these approaches. + +We assume we have a keyspace (schema) called `commerce`, with a table called `demo`, that has the following definition: + +```sql +CREATE TABLE `demo` ( + `id` int NOT NULL, + `status` varchar(32) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB +``` + +## ApplySchema + +`ApplySchema` is a `vtctldclient` command that can be used to apply a schema change to a keyspace. The main advantage of using this tool is that it performs some sanity checks about the schema before applying it. However, a downside is that it can be a little too strict and may not work for all use cases. + +Consider the following examples: + +```shell +$ vtctldclient ApplySchema --sql "ALTER TABLE demo modify id bigint unsigned" commerce +``` +```sql +SHOW CREATE TABLE demo; + + +CREATE TABLE `demo` ( + `id` bigint unsigned NOT NULL, + `status` varchar(32) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB +``` +In the above, we run a direct, synchronous, blocking `ALTER TABLE` statement. Knowing the table is in `commerce` keyspace, Vitess autodetects the relevant shards, and then autodetects which is the `primary` server in each shard. It then directly invokes the `ALTER TABLE` statement on all shards (concurrently), and the `vtctldclient` command only returns when all are complete. + + +When applying a new schema, where all statements are `CREATE TABLE` or `CREATE VIEW`, you may supply the flag `--batch-size=`. For example: + +```shell +$ vtctldclient ApplySchema --sql-file /tmp/create.sql --batch-size=100 commerce +``` + +This flag only applies for unmanaged schema changes, and optimizes total run time by sending batches of `CREATE` statements to the underlying databases. + + +## VTGate + +You may run DDL directly from VTGate just like you would send to a MySQL instance. For example: + +```shell +$ mysql -h 127.0.0.1 -P 15306 commerce +Welcome to the MySQL monitor. Commands end with ; or \g. + +mysql> ALTER TABLE demo ADD COLUMN sample INT; +Query OK, 0 rows affected (0.04 sec) +``` + +Just like in the previous example, Vitess will find out what the affected shards are, what the identity is of each shard's `primary`, then invoke the statement on all shards. + +You may apply the change to specific shards by connecting directly to those shards: + +```shell +$ mysql -h 127.0.0.1 -P 15306 commerce/-80 +Welcome to the MySQL monitor. Commands end with ; or \g. + +mysql> ALTER TABLE demo ADD COLUMN sample INT; +Query OK, 0 rows affected (0.04 sec) +``` + +In the above we connect to VTGate via the `mysql` command line client, but of course you may connect with any standard MySQL client or from your application. + +Please do note that if VTGate does not recognize a DDL syntax, the statement will get rejected and that this approach is not recommended for changing large tables. + +## Directly to MySQL + +You can apply schema changes directly to the underlying MySQL shard primary instances. + +VTTablet will eventually notice the change and update itself. This is controlled by the `--queryserver-config-schema-reload-time` parameter which defaults to 1800 seconds. + +You can also explicitly issue the `vtctldclient` `ReloadSchema` command to make it reload immediately. Specify a tablet to reload the schema from, as in: + +```shell +$ vtctldclient ReloadSchema zone1-0000000100 +``` + +Users will likely want to deploy schema changes via [managed, online schema changes](../managed-online-schema-changes/) where the table is not locked in the duration of the migration. diff --git a/content/en/docs/21.0/user-guides/schema-changes/validating-migrations.md b/content/en/docs/21.0/user-guides/schema-changes/validating-migrations.md new file mode 100644 index 000000000..f6cec04bd --- /dev/null +++ b/content/en/docs/21.0/user-guides/schema-changes/validating-migrations.md @@ -0,0 +1,64 @@ +--- +title: Validating schema migrations using `VDiff` +weight: 15 +aliases: [ '/docs/user-guides/schema-changes/validating-migrations/' ] +--- + +`VDiff` (https://vitess.io/docs/reference/vreplication/vdiff/) is a Vitess tool that performs a row by row comparison of all tables associated with a VReplication workflow. +Vitess-managed schema migrations (aka `Online DDL`) use VReplication workflows to perform the transformation from the +existing schema to the desired schema. Since the Online DDL is also a VReplication workflow, we +can use `VDiff` to validate that the transformed table and original table are in sync. + +`VDiff`s can only be run on schema migrations created with the `--postpone-completion` flag. You should run `VDiff` +once your schema migration has its `ready_to_complete` set to `1`. + +Here is an example of how you can run a `VDiff` on a schema migration: + +1. Start the migration: we are altering table `t1` in the `customer` keyspace. + +``` +$ vtctldclient ApplySchema --ddl-strategy vitess --postpone-completion --sql "alter table t1 add column extra1 int not null +default 0" customer +a2994c92_f1d4_11ea_afa3_f875a4d24e90 +``` + +2. Use the `Show` command to confirm that `ready_to_complete` is 1. + +``` +mysql> show vitess_migrations like 'a2994c92_f1d4_11ea_afa3_f875a4d24e90' \G +*************************** 1. row *************************** + id: 1 + migration_uuid: a2994c92_f1d4_11ea_afa3_f875a4d24e90 + keyspace: customer + .... + .... + ready_to_complete: 1 + +``` + +3. Run the VDiff command. The name of the VReplication workflow is the same as Online DDL's `uuid`. +``` +vtctldclient VDiff --target-keyspace customer --workflow a2994c92_f1d4_11ea_afa3_f875a4d24e90 Create + +VDiff a35b0006-e6d9-416e-bea9-917795dc5bf3 scheduled on target shards, use show to view progress +``` + +4. Monitor VDiff progress/status. +``` +vtctldclient VDiff --target-keyspace customer --workflow Show a2994c92_f1d4_11ea_afa3_f875a4d24e90 + +VDiff Summary for customer.commerce2customer (a2994c92_f1d4_11ea_afa3_f875a4d24e90) +State: completed +RowsCompared: 196872 +HasMismatch: false +StartedAt: 2024-03-26 22:44:29 +CompletedAt: 2024-03-26 22:54:31 + +Use "--format=json" for more detailed output. +``` +You should see `HasMismatch: false` unless there is a bug in Vitess, in which case please post on Vitess Slack and/or +create an issue at `https://github.com/vitessio/vitess/issues` + +## References +* [Online DDL usage](https://vitess.io/docs/user-guides/schema-changes/audit-and-control/) +* [VDiff](https://vitess.io/docs/reference/vreplication/vdiff/) diff --git a/content/en/docs/21.0/user-guides/sql/_index.md b/content/en/docs/21.0/user-guides/sql/_index.md new file mode 100644 index 000000000..67307d95a --- /dev/null +++ b/content/en/docs/21.0/user-guides/sql/_index.md @@ -0,0 +1,5 @@ +--- +title: SQL Statement Analysis +description: User guides covering analyzing SQL statements +weight: 4 +--- diff --git a/content/en/docs/21.0/user-guides/sql/vexplain.md b/content/en/docs/21.0/user-guides/sql/vexplain.md new file mode 100644 index 000000000..a677d5da1 --- /dev/null +++ b/content/en/docs/21.0/user-guides/sql/vexplain.md @@ -0,0 +1,253 @@ +--- +title: Analyzing a SQL statement using VEXPLAIN +weight: 1 +aliases: ['/docs/user-guides/vtexplain/'] +--- + +# Introduction + +To see which queries are run on your behalf on the MySQL instances when you execute a query on vtgate, you can use `vexplain [ALL|PLAN|QUERIES]`. + +# `QUERIES` Type + +The `QUERIES` format returns an output similar to what the command line application [`vtexplain`](../../../reference/programs/vtexplain) returns - a list of the queries that have been run on MySQL, and against which shards they were issued. + +## How it works + +Unlike normal `EXPLAIN` queries, `VEXPLAIN QUERIES` actually runs your query, and logs the interactions with the tablets. +After running your query using this extra logging, the result you get is a table with all the interactions listed. + +## How to read the output + +The output has four columns: +* The first column, `#` groups queries that were sent in a single call together. +* Keyspace - which keyspace was this query sent to. +* Shard - for sharded keyspaces, this column will show which shard a query is sent to. +* Query - the actual query used. + +### Example 1: +```mysql +mysql> vexplain queries select * from user where id = 4; ++------+----------+-------+-----------------------------------------------------------+ +| # | keyspace | shard | query | ++------+----------+-------+-----------------------------------------------------------+ +| 0 | ks | c0- | select id, lookup, lookup_unique from `user` where id = 4 | ++------+----------+-------+-----------------------------------------------------------+ +1 row in set (0.00 sec) +``` + +Here we have a query where the planner can immediately see which shard to send the query to. + +### Example 2: +```mysql +mysql> vexplain queries select * from user where lookup = 'apa'; ++------+----------+-------+-------------------------------------------------------------------+ +| # | keyspace | shard | query | ++------+----------+-------+-------------------------------------------------------------------+ +| 0 | ks | -40 | select lookup, keyspace_id from lookup where lookup in ('apa') | +| 1 | ks | c0- | select id, lookup, lookup_unique from `user` where lookup = 'apa' | +| 2 | ks | 40-80 | select id, lookup, lookup_unique from `user` where lookup = 'apa' | ++------+----------+-------+-------------------------------------------------------------------+ +3 rows in set (0.02 sec) +``` + +This is a query where the planner has to do a vindex lookup to find which shard the data might live on. + +# `PLAN` Type + +The `PLAN` format returns the vtgate plan for the given query. +It does so without actually running any queries - it just plans the given query and presents the plan. + +## How to read the output + +The output contains a scalar output having a JSON description of the plan that vtgate will use for the query. + +### Example: +```mysql +mysql> vexplain plan select * from corder join commerce.product as prod on corder.sku = prod.sku; +``` + +```json +{ + "OperatorType": "Join", + "Variant": "Join", + "JoinColumnIndexes": "L:1,L:2,L:3,L:4,R:0,R:1,R:2", + "JoinVars": { + "corder_sku": 0 + }, + "TableName": "corder_product", + "Inputs": [ + { + "OperatorType": "Route", + "Variant": "Scatter", + "Keyspace": { + "Name": "customer", + "Sharded": true + }, + "FieldQuery": "select corder.sku, corder.order_id as order_id, corder.customer_id as customer_id, corder.sku as sku, corder.price as price from corder where 1 != 1", + "Query": "select corder.sku, corder.order_id as order_id, corder.customer_id as customer_id, corder.sku as sku, corder.price as price from corder", + "Table": "corder" + }, + { + "OperatorType": "Route", + "Variant": "Unsharded", + "Keyspace": { + "Name": "commerce", + "Sharded": false + }, + "FieldQuery": "select prod.sku as sku, prod.description as description, prod.price as price from product as prod where 1 != 1", + "Query": "select prod.sku as sku, prod.description as description, prod.price as price from product as prod where prod.sku = :corder_sku", + "Table": "product" + } + ] +} +``` + +In this example, we are executing a cross-keyspace join between two tables. The `corder` table living in the `customer` keyspace and `product` table living in the `commerce` keyspace. + +# `ALL` Type + +The `ALL` format returns the vtgate plan along with the MySQL explain output for the executed queries. + +## How to read the output + +The output contains a scalar output having a JSON description of the plan that vtgate will use for the query annotated with the explain output from mysql for these queries. + +### Example: + +```mysql +mysql> vexplain all select * from corder join commerce.product as prod on corder.sku = prod.sku; +``` + +```json +{ + "OperatorType": "Join", + "Variant": "Join", + "JoinColumnIndexes": "L:1,L:2,L:3,L:4,R:0,R:1,R:2", + "JoinVars": { + "corder_sku": 0 + }, + "TableName": "corder_product", + "Inputs": [ + { + "OperatorType": "Route", + "Variant": "Scatter", + "Keyspace": { + "Name": "customer", + "Sharded": true + }, + "FieldQuery": "select corder.sku, corder.order_id as order_id, corder.customer_id as customer_id, corder.sku as sku, corder.price as price from corder where 1 != 1", + "Query": "select corder.sku, corder.order_id as order_id, corder.customer_id as customer_id, corder.sku as sku, corder.price as price from corder", + "Table": "corder", + "mysql_explain_json": { + "query_block": { + "select_id": 1, + "cost_info": { + "query_cost": "0.65" + }, + "table": { + "table_name": "corder", + "access_type": "ALL", + "rows_examined_per_scan": 4, + "rows_produced_per_join": 4, + "filtered": "100.00", + "cost_info": { + "read_cost": "0.25", + "eval_cost": "0.40", + "prefix_cost": "0.65", + "data_read_per_join": "640" + }, + "used_columns": [ + "order_id", + "customer_id", + "sku", + "price" + ] + } + } + } + }, + { + "OperatorType": "Route", + "Variant": "Unsharded", + "Keyspace": { + "Name": "commerce", + "Sharded": false + }, + "FieldQuery": "select prod.sku as sku, prod.description as description, prod.price as price from product as prod where 1 != 1", + "Query": "select prod.sku as sku, prod.description as description, prod.price as price from product as prod where prod.sku = :corder_sku", + "Table": "product", + "mysql_explain_json": { + "query_block": { + "select_id": 1, + "cost_info": { + "query_cost": "1.00" + }, + "table": { + "table_name": "prod", + "access_type": "const", + "possible_keys": [ + "PRIMARY" + ], + "key": "PRIMARY", + "used_key_parts": [ + "sku" + ], + "key_length": "130", + "ref": [ + "const" + ], + "rows_examined_per_scan": 1, + "rows_produced_per_join": 1, + "filtered": "100.00", + "cost_info": { + "read_cost": "0.00", + "eval_cost": "0.10", + "prefix_cost": "0.00", + "data_read_per_join": "272" + }, + "used_columns": [ + "sku", + "description", + "price" + ] + } + } + } + } + ] +} +``` + +This example uses the same query as the previous ones. For all the Route operators, we are annotating them with the MySQL explain output for the query that the route is executing. + +# Safety for DML + +The normal behaviour for `VEXPLAIN` is to not actually run the query for DMLs — it usually only plans the query and presents the produced plan for the `PLAN` type. +Since `vexplain ALL|QUERIES` really runs your queries, you need to add a query directive to show that you are aware that your DML will actually run. + +### Example: + +```mysql +mysql> vexplain queries insert into customer(email) values('abc@xyz.com'); +ERROR 1105 (HY000): VT09008: vexplain queries/all will actually run queries +``` + +This is the error you will get is you do not add the comment directive to your `VEXPLAIN` statement. + +### Example: + +```mysql +mysql> vexplain /*vt+ EXECUTE_DML_QUERIES */ queries insert into customer(email) values('abc@xyz.com'); ++------+----------+-------+-----------------------------------------------------------------------+ +| # | keyspace | shard | query | ++------+----------+-------+-----------------------------------------------------------------------+ +| 0 | customer | 80- | insert into customer(email, customer_id) values ('abc@xyz.com', 1001) | ++------+----------+-------+-----------------------------------------------------------------------+ +1 row in set (0.00 sec) +``` + +Here we can see how vtgate will insert rows to the main table, but also to the two lookup vindexes declared for this table. + +Note - MySQL client by default strips out the comments from the queries before it sends to the server. +So you'll need to run the client with `-c` flag to allow passing in comments. diff --git a/content/en/docs/21.0/user-guides/sql/vtexplain-in-bulk.md b/content/en/docs/21.0/user-guides/sql/vtexplain-in-bulk.md new file mode 100644 index 000000000..d4ea29475 --- /dev/null +++ b/content/en/docs/21.0/user-guides/sql/vtexplain-in-bulk.md @@ -0,0 +1,217 @@ +--- +title: Analyzing SQL statements in bulk using VTEXPLAIN +weight: 2 +aliases: ['/docs/user-guides/vtexplain-in-bulk/'] +--- + +# Introduction + +This document covers the way the [VTexplain tool](../../../reference/programs/vtexplain) can be used to evaluate if Vitess is compatible with a list of SQL statements. Enabling the evaluation of if queries from an existing application that accesses a MySQL database are generally Vitess-compatible. If there are any issues identified they can be used to target any necessary application changes needed for a successful migration from MySQL to Vitess. + +## Prerequisites + +You can find a prebuilt binary version of the VTexplain tool in [the most recent release of Vitess](https://github.com/vitessio/vitess/releases/). + +You can also build the `vtexplain` binary in your environment. To build this binary, refer to the [build guide](/docs/contributing) for your OS. + +## Overview + +To analyze multiple SQL queries and determine how, or if, Vitess executes each statement, follow these steps: + +1. Gather the queries from your current MySQL database environment +1. Filter out specific queries +1. Populate fake values for your queries +1. Run the VTexplain tool via a script +1. Add your SQL schema +1. Add your VSchema to the output file +1. Run the VTexplain tool and capture the output +1. Check your output for errors + +## 1. Gather the queries from your current MySQL database environment + +These queries should be most, if not all, of the queries that are sent to your current MySQL database over an extended period of time. You may need to record your queries for days or weeks depending on the nature of your application(s) and workload. You will need to normalize the queries you will be analyzing. Depending on the scope and complexity of your applications you may have a few hundred to thousands of distinct normalized queries. To obtain normalized queries you can use common MySQL monitoring tools like VividCortex, Monyog or PMM. + +It is also possible to use the MySQL [general query log](https://dev.mysql.com/doc/refman/8.0/en/query-log.html) feature to capture raw queries and then normalize it using post-processing. + +## 2. Filter out specific queries + +Remove from your list any unsupported queries or queries from non-application sources. The following are examples of queries to remove are: + +* `LOCK/UNLOCK TABLES` - These likely come from schema management tools, which VTGate obviates. +* `FLUSH/PURGE LOGS` - Vitess performs its own log management. +* `performance_schema queries` - These queries are not supported by Vitess. +* `BEGIN/COMMIT` - Vitess supports these statements, but VTexplain does not. + +The following is an example pipeline to filter out these specific queries: +```shell +cat queries.txt \ + | grep -v performance_schema \ + | grep -v information_schema \ + | grep -v @@ \ + | grep -v "SELECT ? $" \ + | grep -v "PURGE BINARY" \ + | grep -v "^SET" \ + | grep -v "^EXPLAIN" \ + | grep -v ^query \ + | grep -v ^BEGIN \ + | grep -v ^COMMIT \ + | grep -v ^FLUSH \ + | grep -v ^LOCK \ + | grep -v ^UNLOCK \ + | grep -v mysql > queries_for_vtexplain.txt +``` + +## 3. Populate fake values for your queries + +Once the queries are normalized in prepared statement style, populate fake values to allow VTexplain to run properly. This is because `vtexplain` operates only on concrete (or un-normalized) queries. Doing this by textual substitution is shown below and typically requires some trial and error. An alternative is to use a MySQL monitoring tool. This tool sometimes has a feature where it can provide one concrete query example for every normalized query form, which is ideal for this purpose. + +If you need to use textual substitution to obtain your concrete queries, the following is an example pipeline you can run: + +```shell +cat queries.txt \ + | perl -p -e 's#\? = \?#1 = 1#g' \ + | perl -p -e 's#= \?#="1"#g' \ + | perl -p -e 's#LIMIT \?#LIMIT 1#g' \ + | perl -p -e 's#\> \?#> "1"#g' \ + | perl -p -e 's#IN \(\?\)#IN (1)#g' \ + | perl -p -e 's#\? AS ONE#1 AS ONE#g' \ + | perl -p -e 's#BINARY \?#BINARY \"1\"#g' \ + | perl -p -e 's#\< \?#< "2"#g' \ + | perl -p -e 's#, \?#, "1"#g' \ + | perl -p -e 's#VALUES \(...\)#VALUES \(1,2\)#g' \ + | perl -p -e 's#IN \(\.\.\.\)#IN \(1,2\)#g' \ + | perl -p -e 's#\- \? #\- 50 #g' \ + | perl -p -e 's#BETWEEN \? AND \?#BETWEEN 1 AND 10#g' \ + | perl -p -e 's#LIKE \? #LIKE \"1\" #g' \ + | perl -p -e 's#OFFSET \?#OFFSET 1#g' \ + | perl -p -e 's#\?, \.\.\.#\"1\", \"2\"#g' \ + | perl -p -e 's#\/ \? #\/ \"1\" #g' \ + | perl -p -e 's#THEN \? ELSE \?#THEN \"2\" ELSE \"3\"#g' \ + | perl -p -e 's#THEN \? WHEN#THEN \"4\" WHEN#g' \ + | perl -p -e 's#SELECT \? FROM#SELECT \"6\" FROM#g' \ + | perl -p -e 's#SELECT \? AS#SELECT id AS#g' \ + | perl -p -e 's#\`DAYOFYEAR\` \(\?\)#DAYOFYEAR \("2020-01-20"\)#g' \ + | perl -p -e 's#YEAR \(\?\)#YEAR \("2020-01-01"\)#g' \ + | grep -v mysql > queries_for_vtexplain.txt + ``` + +## 4. Run the VTexplain tool via a script + +In order to analyze every query in your list, create and run a script. The following is an example Python script that assumes a sharded database with 4 shards. You can adjust this script to match your individual requirements. + +```shell +$ cat testfull.py +for line in open("queries_for_vtexplain.txt", "r").readlines(): + sql = line.strip() + print("vtexplain --schema-file schema.sql --vschema-file vschema.json --shards 4 --sql '%s'" % sql) +x +$ python testfull.py > run_vtexplain.sh +``` + +An alternative method is to use the `--sql-file` option for `vtexplain` to pass the whole file to a single vtexplain invocation. This is much more efficient, but we have found that it can be easier to find errors if you perform one `vtexplain` invocation per SQL query. + +If you choose to use the single invocation, it would look something like: + +```shell +$ vtexplain --schema-file schema.sql --vschema-file vschema.json --shards 4 --sql-file queries_for_vtexplain.txt +``` + +## 5. Add your SQL schema to the output file + +Add your proposed SQL schema to the file created by the script (e.g. schema.sql). The following is an example SQL schema: + +```shell +$ cat schema.sql +CREATE TABLE `user` ( + `user_id` bigint(20) NOT NULL, + `name` varchar(128) DEFAULT NULL, + `balance` decimal(13,4) DEFAULT NULL, + PRIMARY KEY (`user_id`), + KEY `balance` (`balance`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +``` + +## 6. Add your VSchema + +Add your VSchema to the file created by the script: in this example, the file is named `schema.json`. The following is an example VSchema to match the example SQL schema above. + +```shell +$ cat vschema.json +{ + "ks1": { + "sharded": true, + "vindexes": { + "hash": { + "type": "hash" + } + }, + "tables": { + "user": { + "column_vindexes": [ + { + "column": "user_id", + "name": "hash" + } + ] + } + } + } +} +``` +Note that unlike the VSchema used in Vitess, e.g. in `vtctldclient GetVSchema` and `vtctldclient ApplyVSchema`, the format required by `vtexplain` differs slightly. There is an extra level of JSON objects at the top-level of the JSON format to allow you to have a single file that represents the VSchema for multiple Vitess keyspaces. In the above example, there is just a single keyspace called `ks1`. + +## 7. Run the VTexplain tool and capture the output + +This step will generate the output you need to analyze to determine what queries may have issues with your proposed VSchema. It may take a long time to finish if you have a number of queries. + +```shell +$ sh -x run_vtexplain.sh 2> vtexplain.output +``` + +## 8. Check your output + +Once you have your full output in vtexplain.output, use `grep` to search for the string "ERROR" to review any issues that VTExplain found. + +### Example: Scattered across shards + +In the following example, VTGate scatters the example query across both shards, and then aggregates the query results. + +```shell +$ vtexplain --schema-file schema.sql --vschema-file vschema.json --shards 4 --sql 'SELECT * FROM user;' +---------------------------------------------------------------------- +SELECT * FROM user + +1 ks1/-40: SELECT * FROM user limit 10001 +1 ks1/40-80: SELECT * FROM user limit 10001 +1 ks1/80-c0: SELECT * FROM user limit 10001 +1 ks1/c0-: SELECT * FROM user limit 10001 +---------------------------------------------------------------------- +``` + +This is not an error, but illustrates a few things about the query: + + * The query of this type will be scattered across all 4 the shards, given the schema and VSchema. + * The phases of the scatter operation will occur in parallel. This is because the number `1` on the left-hand-side of the output indicates the ordering of the operations in time. The same number indicates parallel processing. + * The implicit Vitess row limit of 10000 rows is also seen, even though that was not present in the original query. + +### Example: Query returns an error + +The following query produces an error because Vitess does not support the `AVG` function for scatter queries across multiple shards. + +```shell +$ vtexplain --schema-file schema.sql --vschema-file vschema.json --shards 4 --sql 'SELECT AVG(balance) FROM user;' +ERROR: vtexplain execute error in 'SELECT AVG(balance) FROM user': unsupported: in scatter query: complex aggregate expression +``` + +### Example: Targeting a single shard + +The following query only targets a single shard because the query supplies the sharding key. + +```shell +$ vtexplain --schema-file schema.sql --vschema-file vschema.json --shards 2 --sql 'SELECT * FROM user WHERE user_id = 100;' +---------------------------------------------------------------------- +SELECT * FROM user WHERE user_id = 100 + +1 ks1/80-c0: SELECT * FROM user WHERE user_id = 100 limit 10001 +---------------------------------------------------------------------- +``` diff --git a/content/en/docs/21.0/user-guides/sql/vtexplain.md b/content/en/docs/21.0/user-guides/sql/vtexplain.md new file mode 100644 index 000000000..5025608a2 --- /dev/null +++ b/content/en/docs/21.0/user-guides/sql/vtexplain.md @@ -0,0 +1,307 @@ +--- +title: Analyzing a SQL statement using VTEXPLAIN +weight: 1 +aliases: ['/docs/user-guides/vtexplain/'] +--- + +# Introduction + +This document covers the way Vitess executes a particular SQL statement using the [VTExplain tool](../../../reference/programs/vtexplain). +This tool works similarly to the MySQL `EXPLAIN` statement. +You can run `vtexplain` before you have a running Vitess cluster, which lets you quickly try different schema/vschema. +If you're already running a cluster, you can also use the [VEXPLAIN QUERIES|ALL|PLAN](../vexplain) command from a SQL console. + +## Prerequisites + +You can find a prebuilt binary version of the VTExplain tool in [the most recent release of Vitess](https://github.com/vitessio/vitess/releases/). + +You can also build the `vtexplain` binary in your environment. To build this binary, refer to the [build guide](/docs/contributing) for your OS. + +## Overview + +To successfully analyze your SQL queries and determine how Vitess executes each statement, follow these steps: + +1. Identify a SQL schema for the statement's source tables +1. Identify a VSchema for the statement's source tables +1. Run the VTExplain tool + +If you have a large number of queries you want to analyze for issues, based on a Vschema you’ve created for your database, you can read through a detailed scripted example [here](../vtexplain-in-bulk). + +## 1. Identify a SQL schema for tables in the statement + +In order to explain a statement, first identify the SQL schema for the tables that the statement uses. This includes tables that a query targets and tables that a DML statement modifies. + +### Example SQL Schema + +The following example SQL schema creates two tables, `users` and `users_name_idx`, each of which contain the columns `user_id` and `name`, and define both columns as a composite primary key. The example statements in step 3 include these tables. + +``` +CREATE TABLE users( + user_id bigint, + name varchar(128), + primary key(user_id) +); + +CREATE TABLE users_name_idx( + user_id bigint, + name varchar(128), + primary key(name, user_id) +); +``` + +## 2. Identify a VSchema for the statement's source tables + +Next, identify a [VSchema](../../../concepts/vschema) that contains the [Vindexes](../../../reference/features/vindexes) for the tables in the statement. + +### The VSchema must use a keyspace name. + +VTExplain requires a keyspace name for each keyspace in an input VSchema: + +``` +"keyspace_name": { + "_comment": "Keyspace definition goes here." +} +``` + +If no keyspace name is present, VTExplain will return the following error: + +``` +ERROR: initVtgateExecutor: json: cannot unmarshal bool into Go value of type map[string]json.RawMessage +``` + +### Example VSchema + +The following example VSchema defines a single keyspace `mainkeyspace` and three Vindexes, and specifies vindexes for each column in the two tables `users` and `users_name_idx`. The keyspace name `"mainkeyspace"` precedes the keyspace definition object. + +``` +{ + "mainkeyspace": { + "sharded": true, + "vindexes": { + "hash": { + "type": "hash" + }, + "md5": { + "type": "unicode_loose_md5", + "params": {}, + "owner": "" + }, + "users_name_idx": { + "type": "lookup_hash", + "params": { + "from": "name", + "table": "users_name_idx", + "to": "user_id" + }, + "owner": "users" + } + }, + "tables": { + "users": { + "column_vindexes": [ + { + "column": "user_id", + "name": "hash" + }, + { + "column": "name", + "name": "users_name_idx" + } + ], + "auto_increment": null + }, + "users_name_idx": { + "type": "", + "column_vindexes": [ + { + "column": "name", + "name": "md5" + } + ], + "auto_increment": null + } + } + } +} +``` + +## 3. Run the VTExplain tool + +To explain a query, pass the SQL schema and VSchema files as arguments to the `VTExplain` command. + +### Example: Explaining a SELECT query + +In the following example, the `VTExplain` command takes a `SELECT` query and returns the sequence of queries that Vitess runs in order to execute the query: + +``` +vtexplain --shards 8 --vschema-file vschema.json --schema-file schema.sql --replication-mode "ROW" --output-mode text --sql "SELECT * from users" +---------------------------------------------------------------------- +SELECT * from users + +1 mainkeyspace/-20: select * from users limit 10001 +1 mainkeyspace/20-40: select * from users limit 10001 +1 mainkeyspace/40-60: select * from users limit 10001 +1 mainkeyspace/60-80: select * from users limit 10001 +1 mainkeyspace/80-a0: select * from users limit 10001 +1 mainkeyspace/a0-c0: select * from users limit 10001 +1 mainkeyspace/c0-e0: select * from users limit 10001 +1 mainkeyspace/e0-: select * from users limit 10001 + +---------------------------------------------------------------------- + +``` + +In the example above, the output of `VTExplain` shows the sequence of queries that Vitess runs in order to execute the query. Each line shows the logical sequence of the query, the keyspace where the query executes, the shard where the query executes, and the query that executes, in the following format: + +``` +[Sequence number] [keyspace]/[shard]: [query] +``` + +In this example, each query has sequence number `1`, which shows that Vitess executes these in parallel. Vitess automatically adds the `LIMIT 10001` clause to protect against large results. + +### Example: Explaining an INSERT query + +In the following example, the `VTExplain` command takes an `INSERT` query and returns the sequence of queries that Vitess runs in order to execute the query: + +``` +vtexplain --shards 128 --vschema-file vschema.json --schema-file schema.sql --replication-mode "ROW" --output-mode text --sql "INSERT INTO users (user_id, name) VALUES(1, 'john')" +---------------------------------------------------------------------- +INSERT INTO users (user_id, name) VALUES(1, 'john') + +1 mainkeyspace/22-24: begin +1 mainkeyspace/22-24: insert into users_name_idx(`name`, user_id) values ('john', 1) +2 mainkeyspace/16-18: begin +2 mainkeyspace/16-18: insert into users(user_id, `name`) values (1, 'john') +3 mainkeyspace/22-24: commit +4 mainkeyspace/16-18: commit + +---------------------------------------------------------------------- + +``` + +The example above shows how Vitess handles an insert into a table with a secondary lookup Vindex: + +* At sequence number `1`, Vitess opens a transaction on shard `22-24` to insert the row into the `users_name_idx` table. +* At sequence number `2`, Vitess opens a second transaction on shard `16-18` to perform the actual insert into the `users` table. +* At sequence number `3`, the first transaction commits. +* At sequence number `4`, the second transaction commits. + +### Example: Explaining an uneven keyspace + +In previous examples, we used the `--shards` flag to set up an evenly-sharded keyspace, where each shard covers the same fraction of the keyrange. +`VTExplain` also supports receiving a JSON mapping of shard ranges to see how Vitess would handle a query against an arbitrarly-sharded keyspace. + +To do this, we first create a JSON file containing a mapping of keyspace names to shardrange maps. +The shardrange map has the same structure as the output of running `vtctl FindAllShardsInKeyspace `. + +``` +{ + "mainkeyspace": { + "-80": { + "primary_alias": { + "cell": "test", + "uid": 100 + }, + "primary_term_start_time": { + "seconds": 1599828375, + "nanoseconds": 664404881 + }, + "key_range": { + "end": "gA==" + }, + "is_primary_serving": true + }, + "80-90": { + "primary_alias": { + "cell": "test", + "uid": 200 + }, + "primary_term_start_time": { + "seconds": 1599828344, + "nanoseconds": 868327074 + }, + "key_range": { + "start": "gA==", + "end": "kA==" + }, + "is_primary_serving": true + }, + "90-a0": { + "primary_alias": { + "cell": "test", + "uid": 300 + }, + "primary_term_start_time": { + "seconds": 1599828405, + "nanoseconds": 152120945 + }, + "key_range": { + "start": "kA==", + "end": "oA==" + }, + "is_primary_serving": true + }, + "a0-e8": { + "primary_alias": { + "cell": "test", + "uid": 400 + }, + "primary_term_start_time": { + "seconds": 1599828183, + "nanoseconds": 911677983 + }, + "key_range": { + "start": "oA==", + "end": "6A==" + }, + "is_primary_serving": true + }, + "e8-": { + "primary_alias": { + "cell": "test", + "uid": 500 + }, + "primary_term_start_time": { + "seconds": 1599827865, + "nanoseconds": 770606551 + }, + "key_range": { + "start": "6A==" + }, + "is_primary_serving": true + } + } +} + +``` + +After having saved that to a file called `shardmaps.json`: + +``` +vtexplain --vschema-file vschema.json --schema-file schema.sql --ks-shard-map "$(cat shardmaps.json)" --replication-mode "ROW" --output-mode text --sql "SELECT * FROM users; SELECT * FROM users WHERE id IN (10, 17, 42, 1000);" +---------------------------------------------------------------------- +SELECT * FROM users + +1 mainkeyspace/-80: select * from users limit 10001 +1 mainkeyspace/80-90: select * from users limit 10001 +1 mainkeyspace/90-a0: select * from users limit 10001 +1 mainkeyspace/a0-e8: select * from users limit 10001 +1 mainkeyspace/e8-: select * from users limit 10001 + +---------------------------------------------------------------------- +SELECT * FROM users WHERE id IN (10, 17, 42, 1000) + +1 mainkeyspace/-80: select * from users where id in (10, 17, 42, 1000) limit 10001 +1 mainkeyspace/80-90: select * from users where id in (10, 17, 42, 1000) limit 10001 +1 mainkeyspace/90-a0: select * from users where id in (10, 17, 42, 1000) limit 10001 +1 mainkeyspace/a0-e8: select * from users where id in (10, 17, 42, 1000) limit 10001 +1 mainkeyspace/e8-: select * from users where id in (10, 17, 42, 1000) limit 10001 + +---------------------------------------------------------------------- + +``` + + +## See also + +* For detailed configuration options for VTExplain, see the [VTExplain syntax reference](../../../reference/programs/vtexplain). diff --git a/content/en/docs/21.0/user-guides/vschema-guide/_index.md b/content/en/docs/21.0/user-guides/vschema-guide/_index.md new file mode 100644 index 000000000..c60d42ebf --- /dev/null +++ b/content/en/docs/21.0/user-guides/vschema-guide/_index.md @@ -0,0 +1,5 @@ +--- +title: VSchema and Query Serving +description: Configuring VSchema for serving queries +weight: 1 +--- diff --git a/content/en/docs/21.0/user-guides/vschema-guide/advanced-vschema.md b/content/en/docs/21.0/user-guides/vschema-guide/advanced-vschema.md new file mode 100644 index 000000000..0d7e87422 --- /dev/null +++ b/content/en/docs/21.0/user-guides/vschema-guide/advanced-vschema.md @@ -0,0 +1,205 @@ +--- +title: Advanced VSchema Properties +weight: 20 +--- + +With the exception of Multi-Column Vindexes, advanced VSchema Properties do not have DDL constructs. They can only be updated through `vtctld` CLI commands. + +## Multi-Column Vindexes + +Multi-Column Vindexes are useful in the following two use cases: + +* Grouping customers by their regions so they can be hosted in specific geographical locations. This may be required for compliance and also to achieve better performance. +* For a multi-tenant system, grouping all rows of a tenant in a separate set of shards. This limits the fan out of queries if searching only for rows that are related to a single tenant. + +In both cases the leading column is the region or tenant, and is used to form the first few bits of the `keyspace_id`. The second column is used for the bits that follow. Since Vitess shards by keyrange, this approach will naturally group all rows of a region or tenant within the same shard, or within a group of consecutive shards. Since each shard is its own MySQL cluster, these can then be deployed to different regions as needed. + +Please refer to [Region-based Sharding](../../configuration-advanced/region-sharding) for an example on how to use the `region_json` vindex and [Subsharding Vindex](../subsharding-vindex) for the more generic multicol vindex. + +#### Alternate approach + +You have the option to pre-combine the region and id bits into a single column and use that as an input for a single column vindex. This approach achieves the same goals as a multi-column vindex. + +The downside of this approach is that it is harder to migrate an id to a different region and you won't get the query serving support for routing queries to subset of shards if only the first few columns of a multicol vindex are provided. + +## Reference Tables + +Sharded databases often need the ability to join their tables with smaller “reference” tables. For example, the `product` table could be seen as a reference table. Other use cases are tables that map static information like zip code to city, etc. + +Joining against these tables across keyspaces results in cross-shard joins that may not be very efficient or fast. + +Vitess allows you to create a table in a sharded keyspace as a reference table. This means that it will treat the table as having an identical set of rows across all shards. A query that joins a sharded table against such reference tables is then performed locally within each shard. + +A reference table should not have any vindex, and is defined in the VSchema as a reference type: + +```json +{ + "sharded": true, + "tables": { + "zip_detail": { + "type": "reference" + } + } +} +``` +
    + +#### Source Tables + +Vitess will optimize reference tables routing when joined to a table within the same keyspace. Additional routing optimizations can be enabled by specifying the `source` of a reference table. When a reference table specifies a `source` table: + + * A `SELECT ... JOIN` (or equivalent `SELECT ... WHERE`) will try to route the + query to the keyspace of the table to which the reference (or source) table + is being joined. + * An `INSERT`, `UPDATE`, or `DELETE` uses the keyspace of the source table. + +For example: + +```json +{ + "sharded": true, + "tables": { + "zip_detail": { + "type": "reference", + "source": "unsharded_is.zip_detail" + } + } +} +``` +
    + +There are some constraints on `source`: + + * It must be a keyspace-qualified table name, e.g. `unsharded_ks.zip_detail`. + * It must refer to an existing table in an existing keyspace. + * It must refer to a table in a different keyspace. + * It must refer to a table in an unsharded keyspace. + * Any given value for `source` may appear at most once per-keyspace. + +#### Materialization + +It may become a challenge to keep a reference table correctly updated across all shards. Vitess supports the [Materialize](../../migration/materialize) feature that allows you to maintain the original table in an unsharded keyspace and automatically propagate changes to that table in real-time across all shards. + +## Column List + +The VSchema allows you to specify the list of columns along with their types for every table. This allows Vitess to make optimization decisions where necessary. + +For example, specifying that a column contains numeric data allows VTGate to not request further collation specific information (`weight_string`) if additional sorting is needed after collecting results from all shards. + +For example, issuing this query against `customer` would add the `weight_string` column while sending the query to the vttablets: + +```json +Query - select integer_col from customer order by integer_col; +Plan - +{ + "QueryType": "SELECT", + "Original": "select integer_col from customer order by integer_col", + "Instructions": { + "OperatorType": "Route", + "Variant": "SelectScatter", + "Keyspace": { + "Name": "customer", + "Sharded": true + }, + "FieldQuery": "select integer_col, weight_string(integer_col) from `customer` where 1 != 1", + "OrderBy": "0 ASC", + "Query": "select integer_col, weight_string(integer_col) from `customer` order by integer_col asc", + "Table": "`customer`" + } +} +``` + +However, we can modify the VSchema as follows: + +```json + "customer": { + "column_vindexes": [{ + "column": "customer_id", + "name": "hash" + }], + "auto_increment": { + "column": "customer_id", + "sequence": "product.customer_seq" + }, + "columns": [{ + "name": "integer_col", + "type": "INT16" + }] + } +``` + +Re-issuing the same query will now not use `weight_string`: + +```json +Query - select integer_col from customer order by integer_col; +Plan - +{ + "QueryType": "SELECT", + "Original": "select integer_col from customer order by integer_col", + "Instructions": { + "OperatorType": "Route", + "Variant": "SelectScatter", + "Keyspace": { + "Name": "customer", + "Sharded": true + }, + "FieldQuery": "select integer_col from `customer` where 1 != 1", + "OrderBy": "0 ASC", + "Query": "select integer_col from `customer` order by integer_col asc", + "Table": "`customer`" + } +} +``` + +Specifying columns against tables also allows VTGate to resolve ambiguous naming of columns against the right tables. + +#### Authoritative List + +If you have listed all columns of a table in the VSchema, you can add the `column_list_authoritative` flag to the table: + +```json + "customer": { + "column_vindexes": [{ + "column": "customer_id", + "name": "hash" + }], + "auto_increment": { + "column": "customer_id", + "sequence": "product.customer_seq" + }, + "columns": [{ + "name": "uname", + "type": "VARCHAR" + }], + "column_list_authoritative": true + } +``` + +This flag causes VTGate to automatically expand expressions like `select *` or insert statements that don’t specify the column list. + +The caveat about using this feature is that you have to keep this column list in sync with the underlying schema. + +#### Automatic Schema Tracking + +Vtgates now also have the capability to track the schema changes and populate the columns list on its own by contacting the vttablets. To know more about this feature, read [here](../../../reference/features/schema-tracking). +This feature tracks the underlying schema and sets the authoritative column list. + +## Routing Rules + +Routing Rules are an advanced method of redirecting queries meant for one table to another. They are just pointers and are analogous to symbolic links in a file system. You should generally not have to use routing rules in Vitess. + +Workflows like `MoveTables` make use of routing rules to create the existence of the target tables and manage traffic switch from source to target by manipulating these routing rules. + +For more information, please refer to the [Routing Rules](../../../reference/features/schema-routing-rules) section. + +## Foreign Key Mode + +Vitess supports multiple foreign key modes. A detailed analysis of these different modes can be found on the [foreign keys](../foreign-keys) page. + +Each keyspace can be configured to run with a different foreign key mode - +```json +{ + "sharded": true, + "foreignKeyMode": "managed" +} +``` diff --git a/content/en/docs/21.0/user-guides/vschema-guide/backfill-vindexes.md b/content/en/docs/21.0/user-guides/vschema-guide/backfill-vindexes.md new file mode 100644 index 000000000..c4c03bc29 --- /dev/null +++ b/content/en/docs/21.0/user-guides/vschema-guide/backfill-vindexes.md @@ -0,0 +1,114 @@ +--- +title: Backfill Lookup Vindexes +weight: 11 +--- + +Creating a Lookup Vindex after the main table already contains rows does not automatically backfill the lookup table for the existing entries. +Only newer inserts cause automatic population of the lookup table. + +This backfill can be set up using the [LookupVindex create](../../../reference/programs/vtctldclient/vtctldclient_lookupvindex/vtctldclient_lookupvindex_create/) command covered below. + +### Manual Backfill Checklist + +Creating a unique Lookup Vindex is an elaborate process. It is good to use the following checklist if this is done manually: + +* Create the lookup table as sharded or unsharded. Make the `from` column the primary key. +* Create a VSchema entry for the lookup table. If sharded, assign a Primary Vindex for the `from` column. +* Create the lookup vindex in the VSchema of the sharded keyspace: + * Give it a distinct name + * Specify the type from one of [predefined vindexes](../../../reference/features/vindexes/#predefined-vindexes) + * Under `params`: specify the properties of the lookup table + * Specify the `Owner` as the main table +* Associate the column of the owner table with the new Vindex. + +### Creating a Lookup Vindex + +vtctldclient supports the [LookupVindex create](../../../reference/programs/vtctldclient/vtctldclient_lookupvindex/vtctldclient_lookupvindex_create/) command that can perform all the above steps as well as the backfill. + +{{< warning >}} +This will not work against the `vtcombo` based demo app because it does not support vreplication. You can only try this against a real Vitess cluster. +{{< /warning >}} + +The workflow automatically infers the schema and vschema for the lookup table and creates it. It also sets up the necessary VReplication streams to backfill the lookup table. + +After the backfill is done, you should clean up the workflow. More detailed instructions are available in the [Creating a Lookup Vindex Guide](../../configuration-advanced/createlookupvindex) + +To create such a lookup vindex on a real Vitess cluster, you can use the following instructions: + +#### Unique Lookup Vindex Example + +*Continued from [Unique Lookup Vindex Page](../unique-lookup)* + +Save the following json into a file, say `corder_keyspace_idx.json`: + +```json +{ + "sharded": true, + "vindexes": { + "corder_keyspace_idx": { + "type": "consistent_lookup_unique", + "params": { + "table": "product.corder_keyspace_idx", + "from": "corder_id", + "to": "keyspace_id" + }, + "owner": "corder" + } + }, + "tables": { + "corder": { + "column_vindexes": [{ + "column": "corder_id", + "name": "corder_keyspace_idx" + }], + } + } +} +``` + +And issue the vtctldclient command: + +```sh +$ vtctldclient --server CreateLookupVindex -- --tablet_types=REPLICA customer "$(cat corder_keyspace_idx.json)" +``` + +The workflow will automatically create the necessary Primary Vindex entries for vindex table `corder_keyspace_idx` knowing that it is sharded. + +#### Non-unique Lookup Vindex Example + +*Continued from [Non-unique Lookup Vindex Page](../non-unique-lookup)* + +Save the following json into a file, say `oname_keyspace_idx.json`: + +```json +{ + "sharded": true, + "vindexes": { + "oname_keyspace_idx": { + "type": "consistent_lookup", + "params": { + "table": "customer.oname_keyspace_idx", + "from": "oname,corder_id", + "to": "keyspace_id" + }, + "owner": "corder" + } + }, + "tables": { + "corder": { + "column_vindexes": [{ + "columns": ["oname", "corder_id"], + "name": "oname_keyspace_idx" + }] + } + } +} +``` + +And issue the vtctldclient command: + +```sh +$ vtctldclient --server CreateLookupVindex -- --tablet_types=REPLICA customer "$(cat oname_keyspace_idx.json)" +``` + +The workflow will automatically create the necessary Primary Vindex entries for vindex table `oname_keyspace_idx` knowing that it is sharded. diff --git a/content/en/docs/21.0/user-guides/vschema-guide/foreign-keys.md b/content/en/docs/21.0/user-guides/vschema-guide/foreign-keys.md new file mode 100644 index 000000000..a09ef7115 --- /dev/null +++ b/content/en/docs/21.0/user-guides/vschema-guide/foreign-keys.md @@ -0,0 +1,171 @@ +--- +title: Foreign Keys in Vitess +weight: 8 +--- + +There are several options for running Vitess with Foreign Key constraints. + +### Vitess Unaware of Foreign Keys + +You can run Vitess such that it ignores any foreign key constraints defined at the MySQL level. To run Vitess in this mode, set the VSchema property `foreignKeyMode` to `unmanaged` at the keyspace level. This is the default mode if nothing is specified. + +It is up to the user to configure foreign keys in MySQL such that rows that are related by foreign keys end up living in the same shard. +In order for this to work, tables related by foreign keys should use a shared vindex. For details please refer to the [shared vindexes](../shared-vindexes/#foreign-keys) documentation. + +#### Limitations + +- In a sharded keyspace, the schema has to be structured such that rows for tables linked by foreign keys live on the same shard. This constrains schema design and sharding key options. +- If using reference actions for foreign keys that cause a change on a child table when the parent is updated, e.g. `ON DELETE CASCADE`, `ON UPDATE CASCADE`, `ON DELETE SET NULL` etc., MySQL does not record the updates on the child table in the binary log. They happen at the InnoDB level. This can cause problems with [MoveTables](../../migration/move-tables/) and other VReplication based workflows because VReplication relies on binary log updates. +- [OnlineDDL](../../schema-changes/managed-online-schema-changes/) doesn't work well with tables that have foreign key constraints on them. + +### Vitess Handles Foreign Keys [EXPERIMENTAL] + +{{< info >}} +Please note that this feature is experimental and should be used with caution. +{{< /info >}} + +You can run Vitess such that it keeps track of all foreign key constraints using the schema tracker. To run Vitess in this mode, set the VSchema property `foreignKeyMode` to `managed` at the keyspace level. + +In this mode, Vitess will handle DMLs (INSERT/UPDATE/DELETE) that could cause changes to child tables "correctly". Vitess will generate and execute DMLs on child tables in the correct order so that all of them show up in the binary log. This allows VReplication to work properly, thus relaxing one of the limitations of the previous approach. + +For more details on what operations Vitess performs for each type of DML, please refer to the [design document for foreign keys](https://github.com/vitessio/vitess/issues/12967). + +#### Limitations + +- Currently, Vitess only supports shard-scoped foreign key constraints even in the `managed` mode. Support for cross-shard foreign keys is planned for a future release. +- [OnlineDDL](../../schema-changes/managed-online-schema-changes/) doesn't work well with tables that have foreign key constraints on them. +- Some query syntaxes like `REPLACE INTO` and `INSERT INTO ... ON DUPLICATE KEY UPDATE` aren't supported. +- Cyclic foreign keys are rejected by Vitess. + +#### Unsupported cyclic foreign keys + +In this foreign key mode, Vitess limits support for certain schema patterns to prevent scenarios where the planner might enter an endless loop. + +Vitess employs a method to identify circular dependencies among foreign keys by creating a directed graph. In this graph, each node symbolizes a database column, while each directed edge signifies a dependency between two columns; specifically, an update to the origin column may necessitate an update to the destination column. + +We apply various strategies depending on the foreign key reference operations. There are three scenarios when constructing the graph to check for cycles: +1. `ON DELETE RESTRICT ON UPDATE RESTRICT`: In this scenario, no modifications are required on the dependent table when deleting or updating the parent table. Since the presence of the value is the only requirement, no edges are added to the graph in this case. +2. `ON DELETE SET NULL`, `ON UPDATE SET NULL`, `ON UPDATE CASCADE`: In this situation, any modifications to the parent table columns involved in the foreign key relationship will trigger corresponding updates or deletions across all related columns in the child table. Therefore, we introduce edges from every column in the parent table to every related column in the child table. +3. `ON DELETE CASCADE`: In this unique situation, deleting rows in the parent table will impact all columns in the child table associated with the foreign key, irrespective of the specific columns involved in the relationship. Thus, edges are added from all involved columns in the parent table to all columns in the child table. + +Once this graph is assembled, the schema is considered unacceptable if a cycle is detected. + +To better clarify, here are some illustrative examples demonstrating unacceptable configurations and pointers on how to fix them: + +Example 1: Consider the following schema - +```sql +CREATE TABLE `employee` ( + `id` bigint unsigned NOT NULL AUTO_INCREMENT, + `manager_id` bigint unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `idx_manager_id` (`manager_id`), + CONSTRAINT `self_referencing_key_with_cascade` FOREIGN KEY (`manager_id`) REFERENCES `employee` (`id`) ON DELETE CASCADE +) ENGINE InnoDB, + CHARSET utf8mb4, + COLLATE utf8mb4_0900_ai_ci; +``` +Because of the `ON DELETE CASCADE` in the foreign key, we'll end up with a graph like so - + +```mermaid +flowchart TD + A[employee.id]--> B[empoyee.manager_id] + A --> A +``` + +To fix the schema, we should change the reference action of the foreign key. Any other action other than `ON DELETE CASCADE` will prevent cycles. + +Example 2: A similar situation can arise in a multi table schema as well. + +```sql +CREATE TABLE `One` ( + `a` bigint unsigned NOT NULL AUTO_INCREMENT, + `b` bigint unsigned NOT NULL, + `c` bigint unsigned NOT NULL, + PRIMARY KEY (`a`), + CONSTRAINT `fk_1` FOREIGN KEY (`b`) REFERENCES `Two` (`f`) ON DELETE CASCADE +) ENGINE InnoDB, + CHARSET utf8mb4, + COLLATE utf8mb4_0900_ai_ci; + +CREATE TABLE `Two` ( + `d` bigint unsigned NOT NULL AUTO_INCREMENT, + `e` bigint unsigned NOT NULL, + `f` bigint unsigned NOT NULL, + PRIMARY KEY (`d`), + CONSTRAINT `fk_2` FOREIGN KEY (`e`) REFERENCES `One` (`a`) ON DELETE CASCADE +) ENGINE InnoDB, + CHARSET utf8mb4, + COLLATE utf8mb4_0900_ai_ci; +``` + +Because of the `on delete cascade` in the foreign key, we'll end up with a graph like so - + +```mermaid +flowchart TD + A[One.a] + B[One.b] + C[One.c] + D[Two.d] + E[Two.e] + F[Two.f] + B --> D + B --> E + B --> F + E --> A + E --> B + E --> C +``` + +The fix is again the same, wherein we need to change the reference action. + +Example 3: Consider the following schema - +```sql +CREATE TABLE `t1` ( + `id` bigint unsigned NOT NULL AUTO_INCREMENT, + `col` bigint unsigned NOT NULL, + PRIMARY KEY (`id`), + CONSTRAINT `fk_1` FOREIGN KEY (`id`) REFERENCES `t3` (`id`) ON DELETE CASCADE +) ENGINE InnoDB, +CHARSET utf8mb4, +COLLATE utf8mb4_0900_ai_ci; + +CREATE TABLE `t2` ( + `id` bigint unsigned NOT NULL AUTO_INCREMENT, + `col` bigint unsigned NOT NULL, + PRIMARY KEY (`id`), + CONSTRAINT `fk_2` FOREIGN KEY (`id`) REFERENCES `t1` (`id`) ON DELETE CASCADE +) ENGINE InnoDB, +CHARSET utf8mb4, +COLLATE utf8mb4_0900_ai_ci; + +CREATE TABLE `t3` ( + `id` bigint unsigned NOT NULL AUTO_INCREMENT, + `col` bigint unsigned NOT NULL, + PRIMARY KEY (`id`), + CONSTRAINT `fk_3` FOREIGN KEY (`id`) REFERENCES `t2` (`id`) ON DELETE CASCADE +) ENGINE InnoDB, +CHARSET utf8mb4, +COLLATE utf8mb4_0900_ai_ci; +``` + +The constructed graph looks like so - + +```mermaid +flowchart TD + A[t1.col] + B[t2.col] + C[t3.col] + A --> B + B --> C + C --> A +``` + +Changing any of the 3 foreign key constraints to use `ON DELETE RESTRICT ON UPDATE RESTRICT` reference action will prevent the cycle. + +### Vitess Disallows Foreign Keys + +You can run Vitess such that it explicitly disallows any DDL statements that try to create a foreign key constraint. To run Vitess in this mode, set the VSchema property `foreignKeyMode` to `disallow` at the keyspace level. + +This mode is for users that don't use foreign keys and want to prevent accidentally introducing them in their schema. + + diff --git a/content/en/docs/21.0/user-guides/vschema-guide/img/vschema1.png b/content/en/docs/21.0/user-guides/vschema-guide/img/vschema1.png new file mode 100644 index 0000000000000000000000000000000000000000..f85138de27cbc334495d934e05b05214e7a3111b GIT binary patch literal 501742 zcmYIuWmud&(>5*cv_Nq$?(R^$=wij)-QC^Y-QC^Y-Q9}o;;=aVXz%wqK7K5FZLTCU znaP=%a}p{mBZdfv4F?7WhA941SRM=viV6%292o}c;}^+4ksqI65cY!NiZCC49xw(W zAJ140A}S6F)#`&P`rAx$-3z(Gc0M$x#_$9BRY?IB5(MA#H+f+`0<8yQ`Hf2*C|Iy0>HoZ_?Q z6mQ{QPBcH@GtTb3bgXV%R&%d*tX6M#I;G{JVFAm4iG0ycHo*8fxn5g#NqZis4gYML=h0GFZS^JvUR_N$!kBC7QzbjX5JMEa7|o4aHm8r3 zbnk3vo9G${ZwC!i7fWB?f#;1ciqq&chn2_va|PanVN5+?a{fgAseNYIi2s-CnI85Q z*bV?$X$s_K{)$0K@I?j~bA7z_rFg!*JHvDsVga0Vhn49p&{a?_YD(kAGQTZ)z>R2> zQD-`{ZA<-Wp2cRe1^(>-Vcc$k6yNxLe|_dSS;b4mb57{V@DSsr6r$uvw7&+!#!Lw} z9fP5sn~gp9ed?4Rf|K#!EB}{^aams07{e((kNPi5_;MpK%i68;-Ye&4O1ugz!}fI+ ztMlSY5zri};O)~H2gkr{6ITONLjkSpn-S90`xVdz`k*J~v+r}4(&hsZux*70SCF6=rYR9duUV^Ds|R%g8HnJ-~D zcb9|J<2`SlZR}OdKHa2g_ZJU4#cBBs=XW`fbKCWI$UwMnGJk$9*}KU^)DC=q;nGeq z|Iq`qz+U6n*wQMMcUEhoe6)EENkJk2Zboc)2_k(x(OiHRh-!C-)9#bo zS_(TgA|Rj`=RdTf@CfQ(G`{t}x^&G%`YFYaQu`kC%-hvr=(w?&Vnrp&!Ar6Ur90$X z#8tPNC%8a}$iNMKOME!^lrA!5P;%WQp9Gs^MnqzsG{L1El3A4?{%#+ld>~&$UXd`K z;c6dn$AV)#8P_|impyO?|I1B48^k#eu+Z3FPy}Es{KAYXNA&C3$Qhgg82c+oY8Ua( zN3VvSkdG7bPNoY{C~wYoSlmq{+K=!#sp1;=(mP)?oUVPFTkfC?NHB*uhaABg@cLBh zR^tYnly-nPrIjY+io<_|EmqY*>p4kJqZ(ZIdN37J4PCYyJC=DeepXoqZKR(ce7Aqo zdq$toZUErSe_iJv&+=%suhRh(n~^1TYal-c8J}oGYyJ5;L zW7PJElWzm34EPSL$Ys7+a~l~;9%>K$ybtw0$vZ8cm{xs0;gHJ8+G`U)?(7*?@V@77(8E`_nMYcTS&Duef~ zcte%pz~tPdFRDfdnBq}>iy&H|bLAe$hy*nqe4X$(RN>C6@z~T*uD2ep^et`A9cC zM_#=}k&Tpj(a3unH@DmW83kHnM|p={d@H{8v3o^v>gZh;XSDi6AKY;GY%7^GB(8@& z=KWLKi!s^u*Dr38LV3ryVPB8dz9sL{OCeWWvuS!~0^ekzHHnA75>^FSeC1%Y{TtFz z4c8E+Z2ly(zUhM_sNiR+MX`6%Z2Pf;>4_-u0G!Bb>+SRDBS0O0vggl3pYvAnGHuZ7 zPbOzUvijXxb^uqoa_(8ZM~Kt6n@_5TGS#)?JkYRdIt}0FO%xdTTkvs;xDo1Zp@1Mdczr&VCy0TfT;UhP@v)ZjyVj_brk03JX1P ztc_xURFUAhi}75VUAK`>W;=IE8H{~9ubur+LV8EU#i72+KVysk8CFw_ai7ksn0Yms@q(jTpoh0 zZ&Uc5*U>t^O5$PMXDRf{b#h#^4;)SRb|hI`CVy4;&Rb$AgHID%ohoXh?JK%&o*5 zsjV?R9#4$l>Jn#oVTq1wV>nFF3Ik{d0VyS~#v`YWFiT;<-7dtBCT*6b3Pj$UXTBD$ z$!4gDm_s^Lg>WAz1>~Kh=c)ysi^W%K-YJL7d3Zcw5^#4LVzzfBk?h zo8GxdhDd1Ebhl;V(R)L5ehF$+*K>zy*OH4k+il6)mea+GYz`XwO_LjLuZ(Uinv)_h zD_H!6ITz^An$R7_T94WmL#HJR94Me9KP!~{X>ETf&dH2EH(yih88n{cH#)RBxS*&& zL1HQ)j%r{E1<2ajQ>fx_AUe2%j(2T`WsVKIG0Z}*8NC_j)(uLaH?C1kaornV<%uK= zXLg?{z~YZQpJRF$D~VEz8%u0Zxc$PD5sSVwDV;PvWWpedhj z3v()xT=~7`?hE{!68*#rtHbAd{E>UXgeS$l$%8Vj<6YzmCulpfRpqhhM4T#5HvXg2 z;8cFiRKLO`P2KpN1pcY2x{5M-qfe<$O*i?a2EX1@EXw)YXv($fe#H8XW?=7Piq?;U zp1+T33?`7nuY`$F$ip1;8Hm*D9jGS_zDF(67bh61U@)7-58BNISZ5eY$1GCwFP6Fu zmZ|{y$2ID6Ywh-5l#@I~{+PuFCQZE&Kn5`ashvY}9 z8I_HKZZ*n?Y&O7hN=-y9xT*C&5 zyX>_0Z;yJb+R37tCsDQ z&Fx`Ms#eYYO}8FTB?_(DJIeBHm(2t3GMfZuy7F65aTcqT9Tk199)xS+sc?H=rs$f` zoUmeUkf)I15JvfA_84?Cpw>B%k}OnV1f8B!tDgKP)A)(p7*X%cKd8D$V`814Pw^ljQKqddk;~;w_I4XNmE&S@ep;(*nwGJ5>?04SM8n$)HUCpwpE~k z0=W7+3cyq}^$$#Q;ND~WpVlW%odZBgwJdM(_px^w_N;tA5U`ygc*>KQ-*`|_Zx6@yfk(adkzP0yu7!u5H(k{r0hwH$S1y=1Z63@`&Ljki4qyQ z%IV8i7crR}?gALbvIkg7>j*T)l>g2=_ zK%#g2P|{G~@U)f=`=?fKL6uA0`$Uw{)A;=lN_8hkreqa*h*b%phf>1yr!QxrF*i;Q zQiX1Lq4CNVr17Z)k>kkAGUZ{}0O`hxU_?hxIYoxz&z}jG@?{%QZiiPFo&C08%I+iMzH|A4Vos*b zM}t0$tkiB2|6~gZWMc1F$O7i-`Smt5zeEe7&{x$TUvDD7GHdGIoI(&b>U&D{WR*S=G<>D%r!!PI`m z8!&y~q+kKy3?HitcUnI*)h*1u*&TMa>(;v;w~1MNOIqxvG!Q-|2(*Q=7E?6}iZfKU z*;5o+Xk9S%*fH|x0~!E?)a;yU$J>Y(6Y5l}>Wl-K7M~KvyS~@k7KFb@?Pcw?AY4B+ z8H7Ce=Tw?P3z!$>6qOy_xD3f}aO6%MDaW6&W&^~b*!k)WL_8Bu^RG5`Q|z8l%d;1* zOxaYQaEq?(C=P(rh6Hh(gzoYq)3G%N!yaBiiGoRqld&r~+`I(pZt2 zdu=r6XQ5=@c$66r5;T4IHKwBXUJz=IG?)YBgJvey@01t9fBuVWsTSdtW#+ zr8Ux1tE}9+hc`uXH&r6=dl8rN`|fRHnTK>Ir0U+-dPhYbfAcSds^3cPN;VJeD-kWY zN7rsaIL+4w@RHU>l(j{HJX9HJxtOss?+xKz4FIF_Y^@10{xl`JDlJp;xfodo4 znVUEHd%2bbKWEb#^>)VNjls8U5)+jo!ySRAGC4R`Q`9e&t^EM#e9NwF-qLw5&v&3Ew%w^}>r zh2jr9&2hbT7|K;?ogN~dLUlt1vm4mU6#nzd5}&Biq2#Di0jyfqTV4}ZY}0V99f8R- zyO0*lGczh?s{mFGI99TZPKVMCNKe}KS`QVwl-ULjf8^e%CDXv&9U~2CEV#eXu2BIi z9fABFad*dDtDSKrnK6Ino9ux&(UH(q#WoJN);Ia8cdFA*^V-UXVih2d^67DG@^Na- zM|4IhZzCktLxo88=(#Mr&Y3}i8YfYiRyU&k;W5Nzne=RP`7V~)teS-Kha}CxXX5?g zh5ooyO~ce`or-sx`@r#-)hKg6nnS=5zw%=CPkQx2xBLnE;-pILI0JRhU8+3GK>R-r z`c3*uaD_B(N*tXP%L$Yasny!LrKmBc0zg6f^nZ!5N)VUcJa~&uXhEd`gw0lN) z)PNQep4`muCH26q3HSqX0IN8}GDZiuT1LsuK=RSC>lA;BHQ)Q_Hp2E+>j)!d(*8FW zK$32XwWAdam_$4)!|K~l1Zk8m(OE9o%EZe}F zkw1<><2M^Bu zzr#d`Z#2;jc>%)h*|OmrtOot|1R|Ses}o<|y%_J}_e<{V-T2A3qV=AJ`7qhD z3CFLXC3WlyTjs5uIotRlB6|&`u^Yh0izpC`Ut3Bq+&&=pAEmP(sFJ|=VZH!8U$w7} z_?_#~d1WYplXbj{tt=VtL`Oz2lWjwP9{yN~%aFl-4C+TH%0Q0o6{-Dtx;(UZg_7ez z7u1?Z;NmjrpJFR?aYZfhpH!cpqK~5TPZE_=g(4He=xbIusQcYa4{AKaTb+|Bz-J}x_o&%>P)jxmvtE)hS zr<(Vlrt4_SX6Tbv4u_rztnB_u?Z;OJbMgPCW#YU~R|W%9OM~)^iEf3M5?H*bO@mqi z7rbr{U;y9-{6^{cs#E5*#refcX3iMu=u zQ~0k>HBPAy88L>`Y$6Z@H~tEc|AIyQYC(`cr+hEx0nwfTL+ zB{i3Vf|5V~b`IL?mBxw}{E4S8k9qE{0)R`&gf4L<|2HQLkwr8tpLC(pf2%=4aLXG% z&mj?^N;FX7ld{G`IgpUF@fAYg`3^G}iAl`4i z%jbW>uP`cu*&(mq;Q!B+(vI~M!Awt6&^lq>487sM$1 zv-F4M?I8)9Eq!sz|MMb0S^eKu8e#XOE=mDgq(8XJm){#z>p5@ zs@SXBwSSEKC&nmRT=yOPWdiDMS@8r8c4O2%Aa_xk zT;q7CBf#a$3H}W^03#YAmm6|_fRg{&BH{ogUNGw^N8ke+h3!IdKir3hGGGO5cA#LJ z_rL@x?VoG*`8*WJ7P8n7|5L_BIGK!G@fP9G)`v+n@I=0MbWW1qe*FUAvYTyH6+2)=7C2Q&x3h# zZX#^x$o!cxI|qJpanU3~e?{c46AWDGyDA23v5zuR8BB+8vloZH(X7D_|&XOXbnynTS{pLV1|a zdTemH)8Si6-9i4fFfkGb0Io-)V|bKOs{`Yf*;bjiiM|c|HrYzxmjZNL<16iqTKMMK zH@yoy$=c2$+UHtTYiMjFs~+~tHt_H!#az}PU1hyoW7)rZAp~kXpZKn8lv6a2$k@j_ zl(e7>6a95mo}1$K$nItzdsziv*q|GfYOi5X^YNtBR11t$8fY_?3rBue;fO?R0h_ z6$rcGq-gcqKdrttJ2&47xk$53G%-1maqC`JY6M4j48mvR?QFsu0O7HkL_a}<24xBS z#ad$QiWRLs8EGU&>Ym|}kAPx-!R=|V-MGL>_VE6x_t^{CgO49frPP;TH58lBAX#@= z-*9C5nuxp`q1`E|pWsPZ_^VuUBf%;kvNuW{DqEQOaP)F0xUk>PZ(sD~VY1M#hYGg6 z7(O@MIy_!;ROC`hj@qX6J z3g>c+uMccHI_lQPx3Xeqw=bwoZq-lQd<*G#Eyi3D?B|0;b%Of`WXGTXB3UfV#5s%f z>`ehfx6E~m=}LAetQ*w7lkA}e6CG|EZl!r~g5iOoxj4;oNQg%@4BGHr!%7m4z{6|r zK6IKq0%dz#+}CQLCWp?PzU~b;nKqoAUQ;Qdc8ZhAZvBpp%TeaBpdqnNk1H!ozjP&f`G`oQqh58onXV>4D3`{vCIN$DYh+A~m|Y zdOZ?D9h@$5KD=s3!a}x9X~Xtlkw&x9rMB(sB4VYD zxwJnR7uO0tDd!U@%a8AI5-g0AkF8L}3z_7DKSSicymfBY=&}{bqzAQfx3nM|XZPfp zdZg267BquLHln*YY<}I~_C~VG;zd;`o*bC8KioSTXWtIKKc`y{0aG*oK=8iST#y^x zg=W_${tCbk9SNeDhS}&1F7Gd0jk%v2zdZX_9hw2P{wkOmiN##3I|SrR={Di)QkR2Y z1S~e)lPs?d^?+wht1wpV|XY4(6Vee$WJ&A46KOQi()lwbZj|&>>$-#2z+LP-V-13}8t^?(#+_LNUQOB8)MfHI z55AirDe0d1_PZ3MyvbXt6FiFedszYefAkyCsA&d*2*LJsdiRE}F2^-4))#Puk$-2o znWp_c*Dw)lt`|c>f#{3Owg?n{9O`!t`JD$GYwA(?MRt%`ZbtMHeF$!T=jbY34X756 zi;+`FdnIO^QEh3#*9-IOvbf{hQv$;}52_8g{NYJ^tR+Z@Z zat9x=C*~|ukRuunR3-6|wZ(tBI8dU3wfu-5r$u2HFnrwV-j=|6)HQ-$i~|F7a86GT z5{bb+BbL;Iyzg=iRK+9c``l*eq~w48ZsPGpe8E1a=KhSh(%})#Ax`vKgR^r)`PpQp zV}nm_`x-{)xZ=UUC+8{5|GuWWH=@tqX2zHWXm&nrbw(o;kX( z@g@?F8r}yJfXpvW^ww2rhNtwaLG)5})(fQ^KY^UGfbB~rN9&OQk0R|8bQ3|}A@44D zv)GinGrXBuTEJqs*}B^fd$LgS)26WFFnSy?~U1LxmND?~1Y(`#2> zu^{a@D|BbHX-Jd@-+Us0B&zt8kC2excTE55-s*L`J9eKtyu)og8Zj>|KxeT{VptOy z_r!AO0$O>Uj8gc`&!l?Y?-$OQ$aEy;u+$yGzX1F~_ZH?OM>BCM4q^G`@++dQGOWwe zf?rR@sK8A{$>%;8u(MFAz~QLJKQ{3|{?5eX+V}W6;A>|^YVl=E(pXhq-I29mGJWQk zw!f%-M7)Au9pp8T=0wPARR)*i8CQnK84bE=E11V>VO~qwpX}uPm-!$lMhqOxg~7A8 zf8|fZ^-F(rb+6yaT!?I5vnxT9awcLY%Po=j;2sA^`*Qou{^;smy}M_JHE<~``or45 zs;}hcb&^hc%B`%we4EN>SC%)z#_(Qd`iv-REHCxe;bK~#DuXzpc*!g4Y$?pGPqZ>P3_ZLI6k;7)rY|v|v-tR5ccjN={lVC4 zKy!BAh)1vR(PyMm*OQPZ{6E{lDJ%)rwT3cz6AlnWWHkE9{az<^*X~^}2J9uP!>{u4 znIlGJ@I^KQvWM1-wTG&RFJ4^_R9bbu9VS{2`sR1{P+MmXzZ^~NY~EgOCm!JotSeg*x>AVnKI|N&JV8Dd3K;#aYY*jg;PIeSg5z0 zq|8odars)_R^-QKl2|#NkB-{%*AgJu#Iy6Qk0bqq3{{id+1QMz067JR>4DX7m-Hs!z)>S4->_9zu0;ZN7?ehVvqAw8NQ-!!~W^f-}jB+iG zw5+FK>*2zzx|Ao%e5QE zgf%!iq|}Nq=+92BbSR{uP!D<~2jw7wO)cdYx#GZ8FbZQ}pQiO3QjW=e9kxR2dcp6H z1qTLt3CJB8l|PVl&W?ZEwii(!ApEx{sfiyrDB5qg7=5s#AY_LDY%LyqbXhVAb5G z*?~Mu1GNW~_RZk{P4A$pl5V^OL-QlYtQW20+dpXE*bN}m`@Z#&MjML^fIp2M#m;nz zIa`ZG6O3oMVS$nc!#DC0SK7Pq?{NUcFoY{xeoi#@4%69MUSQKe<1J@MkwJ>l2c6kD zp`m_j0BYG8ca25iI9q-`Qeu*^Hs2CHUxZkNCtSw}tyVZWGQ{kA5B}ckCSr-@sfc(9 zBWk9^>&PVR+tQg>@2=(J!{GYDvZERMTWgDW?9;CFOKqb*GZLF)f4p{(W_yO^_pd+f zf1#(pg7$Mqnh;6;MjR2}?`DpF%7~4WP>vbznzWjpGrPD}p0*9T7%aOj&~ND8o$;QV zTtaLwR8On<7e}S3!-G>$2wr#a=;XG(*|1}m;h<1x0`0Dan9ItftG$sAEqVROm+b&e zuB0yeS6&VqjcC7e&m(b8(|q&tX6QNcu>Ke92t#%Y#nT!EqTt~C)W=5y4%c*|;rKFA z>E-6289p7x?9*sf>?JF*C8=D@kF}#RjX;LGzEnuq}s;83{IajB5xH_}-Sv|tco6_l=%D0-gR#_fy#Q=!QXKP=*X6EhBV8B!JEc zcA4xUZ~l6Whjv%1i@%w|mY;~bn&4X)wCll{oapq%U%DbBNLun(!WB5bs1{COtsQJl zs}|yZG(FrIo}{xFwE4lI>}owi&)^w#>|7raDdR60B`$es212;B1UtMw9H=N5rO@NF@(Co49)2^clCz@2{P-AfhWSGoCC1p`wUE2Eyn=E6P3N==tR2J!kr?^1CbH6C z4vDR-9H>N?E%JtnBlls8+G1FwQ!tml-#Eeo=rgt z?gDy8PyRRw0raL)RQ{=b+46^oLi6L3YEI$F_tS#@{3ymx{5QAuK4kg22u=<;I50Q~ z>jn9l;jXqISeguwaDX<%?EE0F+)-t3mGr#|ei{OdQ`SH)ExD~tF!IywSgqZgS^~z= z5aX9@3Xc)(S^_c95H|cj+9?R$%Ql!2d`T~wQ5xEey?W@djEz!hSGA#$CAW+0oq8Yr zpf`BtshxWU9ZUleiL2%4NC%beHzQ&?$y-q|H1FYw*knrRKYAf#Hrze}Zbe@)1RotK z3+*OLuIKo^1T02f4aq#$+!)+U-R+Y@PFECU_!Kp*m@O03ryWop0#s`#JSRm3d;o9v zCUrqq1i@3FYoBx0h6jgR8rk;RDyjSRgnhLBdB@4dk$^+DU0Ko!|oUI^@D_Umx7ZF5|V=3f!5(i&=iOeC*t>r{;b z>dZLeU?B|6Ou-_yVu+kY?=A-q zCn5M3Cs7WXrcc!VW#|q!%WHet#A8)D__D8Fmrk06dPD^{=we1zy0yeOM};c z8{3!j@{FV=MsNJ=en2aYJ}DUhc}n;7(62bbq*EvDJl%&$i=jH41N{tF?kAWm%qqn+ zrCF)YWb$ay2=b3C@Yr}(;HN{2Yg|+`so`qQ51ec2yr7e+s|2}yruN*g`iBM|wXSVW z1vE@m@KMTQUC#H!)cAh(4D#oVSY z$V>q+n7rFZBpPi*Tz8{N&+uM@xc0AqY^%^B+m-d7P-$WEprv0xJA*giE!i7?neUJ< zp-?&$cim>O!T#fE=_Ue!~Tc_x>Z9d2Pw{~6EHq=G+yms_QxFNKc8qW;8p z_}q_o=V>*#qmM@zj`h42k6G}4L2d-m#!$%&3nG>k8R?Kz1RR(TLE*t|P3I^~!rG>6 za9Rh_w-x4YG(*Tz+3^tmSv&|73n6`VFlv&n^P{UnLT4@?S)PkLX~16TU~R|K$&dR( zUJg@rHdJBBL8I4}JFM4A9_82?a~uPV1U*9mN+qjvLH$J|i!FQHa{;i;VL7?^sKK() zxPn~~s}r?^BV}Cx4wyrJVIdwx5loHnjm|l3xOlHYJulQprRMyce8fWv&K`%NW~wJH za5TJDQrR7cMmy|;y5^xrLPcSI%VPgqf{vjp-g|2hH=P;R%*N0gm)Hh~9=Fw%^NO&6 zRYwL3M6e#T(q3S(p;(8oE|H|Go`aRh-K66jSxZ${d_suCRwdorUqvuzJ}&1{GPq(@ zTZ|=r-t$JOLh$1+Qy05KM*fHgEyX#wMw$pRYEU=lhO71ZqeWAX@7*ynMcemA%_Uo3 zJmsPk{=`%{q2Hg3`|4`y<1dCq9TJUF`;hEYx}r};bVxWmPB1XR1-;#>7)8(b>F^eaxh;9WtC zzI=o<0M1dL(&JRl+8g5-t_4&C)8M?a7PmFzUsC6X?;4}6vAvd0+};uZ>BOTR?2lO1 zMCKC}WkahAW~|0N(8SaZL;b)Xb+6PhX64`zU>-|?YGVDv(U4WkBI<^RkN=2a#lLF* zqVFG*Z%at`tg~)#bF&gifK17Y*VeAduK?M;ri;@BaVjV0oTN$8jq+q8ZbcL}F+8Ay zV}`^=osHVg)z-(uk2L*1_@zd-SGEJ&-Bk~{MdbRZ{{{3^%1gm*#p^k^D}s&C39Rzi zD-kwKeg$*6k<&^mLx&4g(HPSjfmR3UJo&H7ss0W*JQVFvX~p}kR_71-+O#v+al@3d z2A%%VUIxd~5DdlKiDy!^6-63;(HG~4^rG&xsCS#Sw?w4}*l`1HHX^pOP1b7|xTk@1 z?F(PeT&g$2m&SgzIPVC4P<`BG>8m=m&H1qRv_RS<`Y>8W3kSsyO08P=eu#FZ=GnZ( zS<`YQH2!L!nS@F}n7HIRuGi=;zO=Pm3)fi|(mf=h^xiKeIe3;|M)qXxrnipv^0(Iqk zDJtt3{y_fX@>t7MI(wHdDwCrNK-`J3KokOYfU%J5xY`So|~ z7O0goH)}|4-yp;fh5T1)3`vyuYfyfdML5nwn@RpHR>nqHW=jvUrRAe|A)r`@2?=q3 z?)>D?u$13Mv`~C>NHXmvw&mx)j+{4}VS4;gIytxUFdxlgm@fWmjI6sjhxlk~37(do zKC7bc8=PeIL$lb`2bt86R1WB+5r95^Bb47wxQ0|YbhFuLf_N9CXfYVxp1gPFOxxEc zF{sz9i~WDWtu3j3wA`ly4}YkS%F{7n?+2yIF@Li-DXu(G1j`Vz}jXN6{4A`m)p0x zIirR>|7FUe1;0p|L%TSu-58w?eYWvp7^>zl!Rpr6zMI;yZfz^@6(hdEtS zEYmp;RL0t`(8sBP+IHGABwW0!wp`cj%UodEVqR|M*_q+K0#lppMAS&vBH zsD>Of)suAmFCnrT{P2*L|8KX$2x8?6$_RbjTIhfd+!iM)Mlt3QbD!-Pvd;j?is%C|Vuq6xpy^s&M7uEP9CJmdHH zvb6|2Hm1QptquJvl$6$p5T-T21Pp%034D~Swa9wTWp-}kOc@(`<9^T=>2lGK#bpse z(6QX9IUoabF-p|`vtvmSvgEj>9-s*zP&%f-Phz&FT}rwF&))gpeiKl!F0OEeRE@&S z|0ruS27TN`0PDD|X$f#w*i8*KEVPaI@m1LAnvKW%lmb-Mf*e?Hw|(ofeJw5a?uWkO ze#e*~iVf>_Tl3fh+wpp*ucFR|>^kpx5A7QGpgTBKY`eRlpfVc$8T@{wt24^- zDWUtbJG;1h*-_=-yL6zAJv#T5Nn=B(0?jfM*#7Rj=J3@`Y5#|@5N>aZNrsPnhxdG~ z-S`d@D|@$!0Xr*OUk4Nfx8^ck>?S|&KY3hzWP0~6&3Oa&IxFEFuRKYAhM*c|C}MvS zgD}x$2MS{LG45JqqtI`Sh=##?_JpP?Tq)FRzmaaxIQ&)7-mkG< zko$f`?$yq_^ep(IgEiRJz?k!Ja?E$wqWUON_buAXSDUZ#EBj!JvgSvR*Wps_?Vcq& z8kojVpH(uxh_~s?zT0**OFbt>eAh!XEw5+W3VLlHk9vaZ#~9{vltOB!-K$Uq7bY%t zWE_!nkp7uxeazmi?sEtFO1HTx+POV`*oxLy6Yf>C1Fy-y+%%&`%^-nAyRcLKA=d><9p2g--VO2F{Q@%z$TCF2r$1v5QN6?yr9bSHw{jrq4A@b^<$Prr zgEJ=jSi<3W|C1+p*{*vAnT(a_!CEBgSJKC=Pz4UqV?RZDa`Xu&pUbu{xiQxbMuPs? zhoZ^Zs?o%*B7+Q(ssGjFTH?Nd9%>G;I8xKSeToFyt<<_M$WEJ5KBE>H==)iJjlzB9 zt7>(VkYM6o6ZgL4EpT)up+)g=I*Ge>eyU5{-4!9T|4l-R`22W1^t;7&=}(M-=c@~X zbPAZ~jRC^pzRpPYb7+d3^qJMhOC$LV6xbDEwFNoIidM+h3aEt-L3GRhdo>~|>cRGU zFI;H^Hi@fwe9jldvag!UT?Dkb{7%o*nac4#u~W;)=m{AE8YQ3Mds{}}{{6qZ0BCE2 z;Xl3qc$$EN|2PJmT{ai{`zJ;Ce#+_2_MHA>Wi#_A^DK3C2@Q6vsyf5W>{~%|jD_{X zi0rO{CdtSEv-ECNY%;j^W!2dR_6I@L&{6U`Ygc0p*gP4)=i**4o1yo(d!pNRPu^VT z16_B+c2BbZkbB)+PVd^~Ag3XjGZGXGdY+_W*O3|QX8*Y+usOrv%QkBat%dn7zRZsy zcyEE5UiBneZX@`I9P&`Z^?a$m$;!d}0d*_!WJ53O&V$xlQ3eMv%!2dtbL6?m2J%e>{B!R9juJHByQfcZZ_I-CYY5 zC=_=u5Tv*l_oftzyHniVB~aWc?!n#lUB36f|E`sgWMz??b7uDJ*)wyKdvd)vA!haN z5*a5{Z74R9;zrDkP_ISPOhw&&s|T6--E;=-nyCiA$LAz+Y!nrg3zLPEt^{F5*|SeW zGzqn+1kn)(H>-Sf6wS>)uh+w5?p18}M(e8W*Qv~sX z<_yBJZ7cfLri)*nN&!#14$8T<($WU#U;BH?G3Q|vrVcakxW7^V!uWstPXhEDad%+O z=5_;9q5VbQ`7fMka}1h;hvy8XW=krFad0ZyLN70%>SdbU3VKW9kW{zV6x zr$e2*moxBy2kFC_T!^i`6g}_jp_xqZGJJoF`{BGNcXrvR+_ej~EgquSz zlb3`$Td%^cV4@_SCJ+=oRT%qxy*R+{{5H8z1?({vPL(+pxya7%%H+K}I#5a83@X0M zvKNgn@yopz7FkA$PS3Ev#AMCw1Z_ge^~85x_%gdv0+GxQi^HZ->Dn*S1zg zOr~GxgfL2Y#g||qi~=PN3s`luqfM|nK7>Ovw7mIaQtx=7QrGy_U_Wmhm!+|BKN{MS zkMp0I|B8vYIeI<$l^jf%adHTHo_KXu*Q_=DSSl%BBIi^vd0;3^R}z#pKZ*g#`#j&0tg%K@4(?c;`>4 zu0E$b&e{xes#}kR5L8*_pQr?(GGmt*qT+yUcTSB{`mDV4v6%uZ%HeoWw)-%dIPSj) z>dC}ey1Q2nt<9^R{!8YC}(ixaTv92|e9N#S*RDlTo3~FPW6(4AgyjmFCv<6hKRo z@wcQT+?}mAtH)rTR~ylE=HfK+L`WVP8L+Vrb=#Y))c1b11ixeF+4sHUb#ufxv#(fN zQo&1CQ_*ar?Lstyrko6?l#D$mFexPX^BF2e!-5+%__3w==ktoUNrQJ};xON;^iHY+ zoE%s;^J>|%kmIWpglw0MsT(jhg%;7*HHA-*LjZ(NQOiEO(AmYP;aN@d_B%RGL+_D! z;+i%xfJqci1`(+pBqyz*A8_#4f32=?qqKvrld6&K^qTs%ET7_?QnraMu z%Q4l+qg0Q0Usi~?ndyb{x}Li3?iw9r=Xc}o&~!ouX6ctSf!z!&|rYiCA z+L`&8V>&?7AGSp%$B# zguAazXchq2lljyA+<={3aA6e|QK1U`k#6&xZR5?VBm7&3R;(btCF9ax4@*#Xj~;Y| z7FH|~0NSxch^LyHqX|%;V>C}sH`(c84v+rN!knY&QC>@!KT21hXSEsB)L>x<8~5lg zN7AF(TaG1Hwc1UUMqfp@Vw%ZQ+vr?_b~~lojQTe1k8d*)jd(T7>65xh?8RS3_{@y2?P$W!qlx+{Ku&xG0BUn=-Q@a@l5XED zY!AHx`yOoLCz;il;woLFV1W+K4NUVnNts&133T`@GTucfTXm$_|ysb3ri zxX(RwRHia7SeWBg?@@#C9y7lvtvuSoEt5m&1xd-G0u0Y&mMoDQ@YiVPO} z5kuqE8DWPQmx?2?1f3jiJ&v5g&=LMA`qv+q|}(crTf&e+XQ}mPfN$*6{Oe zRxio%l=5e6z?xP^pSE9OPrlqj z@(dJjyjaHiyO#9PlvC-HWC6%9&70GY<0iva01%fDw)0LQ8X(rQ|01G)yfbSV6nkRK zo*VW#;xTW(CO(bJgn_w-4od+1#1|Dm%i(w_*f8p~`wbhF??)hMZlI^O`7WkWU{#`a zWHS22bguRGK(POlmXgQgS$GNQl|r0jaVu$8HRq-8o?=hl^1Lx6F4Ez~{tOJvm?B%3 z_a#IB%#6S@-BAw)$Ja&P=!XXXo!@@1Tq07oKgo#>Fyg)+_aR7nN(LET(VWNr>Z5TTY{lv7s%pWk{?{j<=AnNcd8dX|lB5GvEPDZye*}2c=+1QHfE&BOnmob`!9(oAvMN zPVkfF<(r(|A8>d)UG1MBzWwQWU%MXgZ`P83{`qsG?h}n7exwGwk_)$iCijtZCnK6~r8E9ZNi-hHJ2XRg zGFFjGOx7}OSl^{alj-BXCIir(zAq(?cLzq0V0c9K=Rz^pr7`EFiQHGp<)g0?k&RV- zPXlnFr@Omi&7j85$Rw%V!s4f{&UkT>IOgfDD8}hM^3(u7{}04(GoP6ESKk@<@^~pK zPWVI9kw!DYR2^c-#Mshym;Pr_yDu9A0eBx^U;sWCU260~48Y4Nsn`#I3^}@H)QZF4 zyd&!lmI`xhDn&~q_tS1-!TT>@6K7#0FXASVA2uZ9KqMz%^?(i`OpRZdRQhBzfLe}Im6{D@A#H-9>IAMn{kw@zeh z5p~rxqp2n);fRk5Qe1uJW%YYl+~QFJ)-w-=OBR8kMAEF7ltf5s3CHHrTf+lPE^}R= z{DZX=-qTZ-9h$Eg1EW8IX$^^TEgLXsBFsI&6Nf3QbKPaoj(E5Tec6}t6BAvof+yg! z@4YR|=)RQ-`{}kGc+?0mlwO{jr692XInE^k9(qR(I~{#156|iB98Fs;JO#f;ATS&i zYe0=ljtg8wKombj2qQ9fS8d(%&LZ0XTmguB`Y*C$eWtnV|?L zS64zUt*~~XliqySgK_VZw%X?30H-IXj?R?b4|2NqJ~8Ru1e-m^(x^SzTc4X>F1r#0 zq7vksC>nLIq4T|0=)scJ;<7pLR;{gmLu0|u!~dE$D#IVMNjke?;>DeGjmEgIC#*i> z>lA*XI^gSY;<<~TU5<$Wi-ex3h(;)`-o0Zj*OkG+f8_`4)ZQ9J!XM^unOIus5iW`_ zCr!rUg<8i%qXu6d{7dK=IXO@N<$^bER!0L~PM+VXi`@t)rSqa2tt=sB5wMk~MifsK zgggVoBwqF>yW(7b8Y;RUg^s)T$siLPb^?)!tlXOR{d~}s(2&()aVf3%j&l7#q6B6A z1tv5pQ3}zAWA}-t)YY|fcnk)x!ox0&ew{h8=;O_a$wM=3qx-SlQfnS(G4Bnz*pEYW zlAq2HvPQ3UNhN*{%ssN)!uSY|$U}uL&rkgM3G^Y!z_^?XR0C-~U2szLnNS^QomEd@ zapqCT26U65D1yznAeFU3qp3CDJBwSlW9iZ5o3MofSz*DjIx}@ERtbxE(0X`Y3Hc(y za=@KpL)M>Scr{s}MpFfsj-3oc7j8}2nF@3u&1Ee&i~;-KtGl#a;fvl4syH^al1jzV z%eCsha-Bi{r@6*`l2ykguUH_Cg-7oxbdl%Cc;<-^76O^NPbwb`bjZj}L}B91S|-X1 z3c(MtuuPvT&i*H;zv(#*xKqqQ0{gxvR>nb&#;?@`x!nf>udOxlJ(gD*jazd~&-tV? zCnijFm0bL$tYKqg^_fNVc~9jG3iL%zjQRfytAbtC<)&yD&4`jCi2-}t&aLnKb7uFSU=r3<19MHBn7>vcqlwJHD8H=` zQo#e^z`$elSB}Yn*9hmZRP<;MAmv z?173pccdU#Z(vk7YgMqxu5O`ZU#ufnh6rHRE*{?eiz!>mdhkJd9O}qAu{8=hp?HP` z7!&fUt*`GXXaQ^kBLXAb#9>K^2IQdYo@X*1`vgh6f(v^{tfF+c%|FuL;y|Bj3*Z+)Q_aVyev2tDK z(Tb!Jsq-_4GxAb})ISa%$#}yIY_g=TLglyybAQ~*MYjw$f~Q^Qg^^Oq;r7l7V)(|p zd1B=o=@AP=P2H2ijZF0WZv?Xz(bvgfrg?7`zXzoeI+`st*m=##gHxw5042wy z=)|gh$)73Br?@8ZhEBn-UK6c)X?gN*y6!F}F4|6rZo0vK!GK^R@b>St=o4<-T)E73 ze~j7@=ru+IeYz=toUOz0K^89VWygW~)8}0r`i%`KjO+*Z4k=^E)2#|&9PXu(@B&AF za~TXd{As=|dFLQBqi4JN6bEz9|Cy`&eus~vDu?=B5h!p6u`6I@7(<=x4BHUcepvzI zj=gwD4F*l7eiHLy(o;X_93EhS(YtxZFMIMP8|}V-%g}+?9{`Xd%HyuxivS8gq7qpc z|8lT^qKD7G$fuO%+%S{M8Do1^QLk$qnyjMUHkgdnO0o*!Hr|~!$=vj`pRP3F@g}m? z({~ATX{GF2j<6BY)9vY*+iI}93g`#xLOkSn|7>TCyR)VA4Q1{fI>-ng$SNjM?c^rjjbLWqR;=vPS=ao zfs~|Svug8C35P`=3gjUgfUim#4~_36av@u>r^dpbGfW-;t$4|7BpdqX%up-D7%cxe z5oB@l3?BG|%~xy%T3dTww)3J+MtV@-LD<^*;{dy$Ak492zLYl+58fWY6^J!vG z9%y~p5aFu(WdnVuSM8#ra-W-^tt#U(>uBXOSrZZ2b;L1xCqL-AFM2=x6!+C)!Xq&B zCsV9!XuL~*SdpF!*|qZY73uPS5eg#rYt$P>Mvj1$qUUC6B|jJCX3R2EMrjz1gt5{H zw)+?8bz+$LFq|vvbapi-aC6*J+t=^r!Lm9=$D^D0O)QWVB*|Tq@?5qXJ5uTlQa6h zqcqI5zpTvdiC>u47&yxOp_xt8GQbSkp$* z)#*7zEzx@9qD>z2ikIT5!hv_3WuogqvJDPAnaqg!l!<$GvCIg`xI%=i*vv<+t3RRm z&!`#HW)xbgY~CkvM3dw6C{J;EFg1kR7@?nxy621aJ}fp=w(Y74W%iK_ovv#vi7gy7 z>-fHEq+V|^oGkHItImyBC)-lpFir>SZtYu4*t86!!9(+a>@aD|@56@-uN z7_?_v$<3)aqp+*!jZslRG@zp{k$fsT0TqSG?RG-8cGN?;kZ8<@_+%pCIzIwnd_uoL zM5=WKgKr~Tfh(cr+_F&oGX20;u7rpQ)zfoO_&8Z`aKe3=nW)49CPV&4JTCO6@Cbza(1fS= z(dS0}yUCm|)Lqz;s^w3Vhv$lteI&3s9C1m4&Q!K2pq>qwYg?F^nVHdFDzRt1h?Hs- zJd6=F-ZzuCLq>s@IpEPu%}~-m}0iAo8?3fVJMieEB-g@J<*p6cIV)s8>0>3m4>nsn!h_Sf)Sl5 zh%XdSfY7VE)Q;iXWcpysC@Xs#g~!-1k*&N9XzcZPR7tm1kpJOozDHQ{fmSXgI5@Z$ zFU-BN%xt;lSKLe__R>%Q|LocNzshvcpPWq76h3QpWfsT!%sruZ0$p@@x~NFH)Q9*f zEKha#;y4qZzW)69jUq+1*j7T;jOBMeLMaPNp7AkVy+vVT{v;gX-`Th`$9MU4E3>M; zAiV9qFYyEfm9$5mD@*K<-1pM7i%^S7bCnqHn1g#_rjNEo3@pZqD?WzHwJEq`BtjSk z)KIEpW)_HmuR~rzPSWG=K3sg^uKKbe1xIwA<9+upZBd?F6b<wPo~T!_^S6 z_9>)k*ak14a1?2+DDSvPS5YBXiELVeiYnxZh#aAaq@s+H4DDG`&+P`&Av|+4>d&>+ zMZ!t!DzXI(Zq+??*Mm$)p2|0%|IFFUjNiN|n-$9KRvkzm|h8&&M| z^4*j|RZYpyk6ed@x2iShVYh+J)bh)3EwNt>wegdYUxsHYtjZua+D7UUPJRe|2#X4< zm2m{>zE>zKfm0jX=}$}7tuEDkWoDY*aZmkHrDF_vIe-0r1D}dIZ^)gvU91LsG8gTY zt1hlrCS!fGYbafucb06$4%n@f-=mp32qh|HT(X0^5=RGS$O08G_5*#T?nnp%lbPcTT)cFi0G`-z?e!TdIT>b^MQP$ zDh97HwDKP)F%T*HB%~JJ*y_ICm8X$zV3(S^wolHz7PqpNogeOorV-R4X;6#L9%?fOhl6^(cN3FRhTV~fR9Cfoge zh%Rcs7ua40Q<#n=dK$NM>)+9_6V?6E2VpdluC^Y;{SPSrK2IC^NQ!LRe?kGbZC6w> z6!y~4!B6$FW^-lxad$atoxbC=x&$D8W zm~0d_FF3Q!0*v|`pOYKne;@gR`+ zY)VSYELyR_tyWyogU-(MA1^Z7>JiEK$1%!cfByX0c!^oYLBJxHIE-@7kt_Lp)WFbj z*Kh0H17zl8LX6+Z!4Vv$+(0sB%V^N@QzqmHDmdND&q#`-#%}?4z@VGbMU6opLVtzl z$vmtr5dnU_vp$w&qYpW-Dyld-Kzp=bNDdq+cjgLtlUhc<5MYz&+YU0|5tLJ4fQ^~m zdBS4yD9DdZ7uCf+zdw*(a)g(P`$gylA=Bq^rh7H_w^o*%yHGK?7Hg~&JkMdiu9NSD z>=!{Vtr4pF(fd(ssv24}7e#JVuZL6q=5&!`c?;|EP|}Asx~fyE0VeX}^*chCq>%v; zQasJ%=vh7cuh2aHYF=OIW~@#bN~Og967RU)T1BcH-&jQx=He)VxMV`*;HuE`N7C7? zMf5CPlm^_-iGmOj8$QAG;jJU21p)H{`Z!DytCog<{c4|CW?cn|-&jS3wOL3{X#%`G z$eE3MalPy)X>!R%OeZ){nMZcY%Zpin(;g9;WE|PKG7XQeU zQP^TokhEn(9v2IiWy9>LRWK+lIaTsC-QnNXdz&m!eykz(JARVC4@n_=yL zn9r#B)%s13O;c~+x?9k4#OeBHXf>(k)<1eG?%q)Y88=O0WHp;2q231pMV(qTms*mN zbM3gq!4_1XM3&0BpSPFHoa(ul`+peO7&f2T@iuzVla{tbz|+B?)c{>JyjI=jOUnXoohFltQ_IEzK<|M>UZ$Z0{`SK9q( zIQ~%O)}dZo(&bOv~L_p4+K#^7}7hJbZMpn*ym7n z${5-o%6rCm7O&xOS`!dNnSLgRq4#i_Bk9_*_`_ayx{qw{p07&sP!UfxIvqDN{%;1u zD9XvWlyK~al>hKPLD8!u_c3lb*2zR@WCwZA-<*YIfEm95G+R=BZV)zw0Me+%;P}GQ zYz?CSD}eOAe4&3wspTKOoc?Fwz-L~3yeP{bRn=)I!0?+}#t(s1G0PuwSJTq8=D*Uv z$gfZJ5rUvvoREB$(XZGNI1!^9W_Tmfr6a=w`;`+g(n|grpaV;Ra+1WK(#$hTdbV7C zHXryk;2Bvj#0>7rr;AHGT>Z#CoDWUN^~N=MB}Yx=`l8LW46u~07lD1x_iZ??3dJ~* zRRIs+soF=i^=Rz*Y7!BSnNHjjW=6yTcQFu~Bp2N&Y$^>y%;KbA=1;jubE7XjUT%T3 z#7&=NfF3!@3LhYOLS|t_%vBJkb#+0ibwEgPbg*Zi#a)33IaQN4pBXI^CIMPJUiwteA6M3fgj!mMJ1Tib<_Y>li(ES#(Qp?q;d4mVv>_6YYo_aZY>E zlKf2Vl#*<2hf9Xge=h9y#qvB)OibKdkj;LCu5Xs3m$sLBda1t$;ggok5QMt#v5|q) ze+Z->l7+FteNAzM5`~78hf``gkHW=oY~8pgsxA}hioXsM^2s55KfnAssP>An6RQg6F;1%R7J9h?Q_f`S-fFR5eCb7V?^Szl`eB_>H&@ zj8P}&hnXK}KSO`+&410}Uj0gubyhjCfi3^>2mSstMRomBxHZL=dbRK<$J;rAZS}2F zNoh{^o_Br@e8%B4RE)p**Lf|WuCj^QLT|=LFU=1AxT-~8ERc=_5@@QOxx8ETbImxz zcjj|g5WTLdL1|oVpU^;#%D`M5GEWM_fZ&qFFbWda99cyE=s&E8Zg?dfy|m#q`UN#< z1!cocZQVGdYkGyU2%^DSuyZMD^KFTN2b5cj;Tw(q|pGU=tuCU&8ydUhS15u$1DbZ9jGD~3x_7C7J0|)z+ z*4{agaXcml!L2l7u>24;*TPfwpHJGOEt!`i%XP>Ky(oS0BmpVHoCROvlIy--*5Y#5 zmO}^`*j%wpqLr=ANXMQP6+dg@M|kqe1y=p~#VMk4?{X+E{h2sI_vS*q078R%ShZ}$ zT)aolQ|ziR98SQ%iU%%o{}7}tp_csQK>0I%r|j&F?&qmru30r+ipGap8v!qfD)%qww@gjf#s9Gcu~JzQMrVV2y<4HT*}c|I9g^E~;F#c;aTi z-i}v2Syq&if}cG-g{c*n(uhy=&I~TSdv9NhNI&gZB#D9C4nk4>NGEDh0^|MwLp_D> z{m;5+Q~T%dkHVG+E8b&UilU(#!*mkJwXQQHp|cx zp_^@uCiBIz#b-5bD{Pm+i%-N?Uvp}-MYdl~n_*^48u?|)ky2a0o%uWeu5>z@mV+gZ zo?w`^Z_4q48ZM?E!jXd1fHd}u-_T6YkD|L&$E&pZKprzDEVaosmc_~}-R3K_FXDY) z9MTrH%zhEZ!>{e4tM42`^S2k5rC?Au^c}jfBJDk5$)fXIlM9npqe!91n<_*v*^n<~ z{oMAXe{+vLHG=%^)ma~(PPD)LX?FtappQ7@L$ZLx;_HCf*BGkNn?so_Va0(Nu`mn}%1=Ylly`T4UXj&I?XZI=( zoTztCQyM6{m4_#kWhagtjPp*S* z=X0#7_6cNFAN05+P^+_ILBzbit{sMk^+Bt)meSUGH*7Ybw25dY(J1HsT(RM( zAc=5+PC17~G^3uxK8vNit=sf}jRP(jt#XYsZrdzl2)IaNwpzd<_6;pNB@fegfWb=a ztrsCJH&$Vg;oWACVmVfr9m&#Gu;>rmPabP_M$qcWSTJKs%=gK~xVLv4pFnQWbq;|c@FO+5ht22P@d8II((~CoM@Eco zmALK<36ra1L^z2H8gQ0Q^E60roIaDCpC+jJ>VU(@*L9V*QyaR2J8R?Xk^O+ngRCPo zPmtad$>WKu`H%d#--{`duR4z(oLI=VIpc~dzpEJI!2nU0Ax&c~! zY#q+xQl@uyOXBk5`Z!ybkf8>KH@dE`)S&T~(+R(#B?8=Cle0BG+x5N}ObR|Ln!eO~ z;9xaL`)I;>V<9HU2vaH{!9A8Lr|nk1=yvsR!gbq)*mS#K`^3%ah_&+;%@3gg79>Pg zpXy7Qb>?0wd+@paZ}@~Yo9&tj{8d<}amQkEyBfJr|5`K}F1c^;zauV#{S3!qJCFBlV2HtsKEYqD8xH;!teOv^SN_cJ|buBi) zo35$r`3RRGBPZE62F#{9B>cga2M#puQv3CK4_l2!>o04?Y9?ZR$^>?6HX1OsOa5Y1 z{&!J}^;y5Lrybft*5$0Ql zk1-(;T8>@{LP+supgQ;?7tpEOVXp7H+^Rk|WZ&Azn+(AlEhj&HZ^%#*T|Gf8=g!cy z8i;RrYx$2Xctj*Y$4*d-=QP8@#s<5AI~mBy>6K#P;!Hu0Vt3*7$$Ndv6xR1zk#I+n zlZ)IBPw&YPpB`4x+KzaMHOq4D0ub-ZVaYf8U0ttSgt1P*%|9^CB2tQ`x9vWSY*?#N z-Q9T}GBFqS7eG~OtZ0cadW3`sTxhUW#g8~yD=vg|R8`WWC=AF3x>~bb@A?s_`}+kE zM4mF@#?LsOqT7u0;?KAdc-*i~5%SCt=*p-Yv%a5N4EfBlQwSyW%S6FVzWa~%lbvMO zd57Bizl%!cy0lOagpoV&;yk{V-~x8iPK zQRMD!jr7AB0fVGynKF9R7y0zl8_%`8U7g`RkMWV|oCZ0BTr?blTS_){lSHSvt&yihvk-nl@K`N3q1ibeMQL zoky5Oj0Xc!FBtclQhwumU%cpc^ouqL*r^y)k6(oZ_kU4H5i+TvzuKs9!U~df6*crx zlJ^iEIaas%{flztQ+~@#mNM@%xyRO6(>87M228ZZ;Ie!&?$6&ThIvaiupb2&0N~ml_U!eoyZju)^xh(K0j%fQqzlCI_@kgmN+|V_>nj~enq%3n#Jz~ z*B60vdfYNv9~L$x=vkda?Y$XO+XqpMrAvfk#aL;d%5yYwKR|-(?Gt-Rrn*@UtN!yB z^y+^jZ2k%ZwiRlb=|}Es(=^j+(lXzRzFFtx)WY?Urb95R-}&#x^d}NIwZ`H z3pZkFmr=Wk1r#w})t1IYrJ|BD1YuE?bn-SasS1djC7VfI&PrQqrPyQF&`P}-5od7J z%Z-0}V-f%ld%X_K1S3QDoF6}!go<^!bb4KKt$f8*3_d2Xr`dja7O%li0fE$~r?W~+ zr9CehP!>M}_vaVTmS>$VC(%^ifX@mCuZ+iyq)hAGnF?ck9Wxp!%TeiVtl~wA#(%7VC%^Dq@0+jbYtUv$ z|F~r?&B~6MUKRAcUtqH?&8zOHE4T{t@PELsCm`Q<@o_pOamY#+TebBr`6Rc==KpU` zZ?T5iM(i#)DwWqHNwjSWdQG>p-t#q8n5d`rEBDJ5J-6r+_mzOa>n`v=oI!lt4+-xh zQAVFODfE4wT#08(v%juOqTQ@0+DgLhnDmIVp443r5EEmHJ||TY7@40gHSL<35v9Zj z1AWxUo=>hCMn14~>J`f>ISr?=Z>?@<`Tt%Ba50k}loNe(8$qTZ#$7p>e~A2U8WFzc zBN3qD1j1Br4a>{tuwD^vur6MqO6YxKMeGM!_o{Ey!tPc5)pM9i&+hkEX{T%;zn3=1 z0LrATq1XK&^L8wbkzs!~TOTqZHFLZTu0=L4_YNr4hV&JeAAj0!O_}fYu*y`ARUBm< zJ0N7x>zFtmg2_>cI2kH-Q886esEqnZ$oO{%S_IBTo0++^Kl{!)9^*IiLw1w%Ox0-d zs5SM6>hHwdk-r;%h`1hw7-eHN9)(Vf$pxyxy007QbhrM+ZK{ft5btd?m(}N+{Sv<$ z)R%h#t&yaztjs60?8Zid6aAAZUV)U3SZcWh%lF93^^B$p5zdjHW^haCS9@f8R27cz z;S#@hdSH`AMA=|tn;F<;v25XbEsD?lK0=7M9v4s&q1g@z@xW&+XJyV>IzjNVwDOv& z8-~|$=A!a{Ad!lTBf6Y7^GnAq3wrDPT-LxY=gxVcp6krm@CDo+B(ErCK=vauIIB;2 zL7lFL6fcB>Hl#p~BLDfO1Nx}vkS*qd^t9fSwpteziuZwi$(wD*wtP?jL7yWT2wLAO zU!IIY^YWdpZqLw0hu>e0`ODs2%^7rLye5#+bFoc31MuuJ0tds+vwVE^#-)_vU12Z+_P6VkCz_M-mRiw=#co z4}(p%wwVpO(r*?d6Xs!R&Qkb~;6+#rV2*a&(FL7!P<)XI88e&qzRp^yL7YnBASCw+ z-?_Xr#Qd!l$H^Bn5Gc$sU)CO9M?^GjZt;t_EW5n=`%;=P6Rgc&#$hnEZ`Fkz$c}je zm!`fkv{eQp+b}^!xAv_W2qC0NV5|P-#HPr6ZZd@VZv`E%FVPS|VJvPw0@|)(B;z+C zbnoAv91Zw1KWk_Vrd=ZKe^6vBj4*a53_zIjh24j$Nr>y0+>ozs9{LkoE!dSwb9P*0*!9=@$f z9}!uOZap3^Th~M3{bfTK@JR1zl+RX{kA+q>m%I`lG z6*hBcrlpy_nB9^uBvZ3q8!8KgSh)7ek^sf896{ASlkpz_9CqVZ;! zNA6tR3|FPzJ5NlI*IrOK$BST$Raa3WB(^BNuhg3=j-N;SEqadYUtHZnB_~p*iV~?W znxTJMNoTAwv+o}-SoakE>gr-%A4$zOfE_!9?UHB~yFC^`+U3oErsjSD^@yLl?=y(; zGz;}|;)wCuc^HLl<VRZ<=0;_hi!v@RP;qY)veZm8OQ(AK)^?T_Lfl#U#^WM0;g^>BG ziOR5I;qipr;m(Yh{s1d!HW`j(Wxk|kJw5mu9=wFUXFqFy*!_xKD!>#OI#cphyG=K3 z{9k)|*5u@;bXyxp1SZn3np#qBj&<9eWrgowGl;6@mu!AFv~4Y;?9!rBp{_-p!0QwD z2X8=xA{dfcc8O~QX7PZ`L!>!OTFY@J&vDSFhsU{_)nWn%ghGHG4Fm9e(+L}amrvsjgJ=<>PDKb$ zRtUG~s%{E!eM9+-u31R%E7mBeXs9Y7TEwMGOd&fBs`Wy!Kx>3=TOS?!~itr~+yz{N(2;p2e+& zi15F)WsJ`m(g5{)>B7F@{zLNaA{LXPw51RPwbnt!KO)v6o4z+nq3|W1N!du0%@Hv~? zUo3Zc!bEeQp6DuO-Eb;!uI!A?YkSr;)GB|;R4E)@mMmb$xt#*7`VhCTWnD($0thuJ{e&9|%F3AE7xN|z}*TzZx3N&47R zFjxsin1}H+Ss}o{W05AVJCQELmWXi?^nhMMIeuGWq}Jl^U-+>B`QbVnXt6ZVCk=v* z(%zowbgJhEVdL|-&7Fcndu|Q=#os4k`YB}A{ z8LR!FwN=Od@L-7o%;e#~rZZUQ&*ISgy6f@g%cFil--df0fPZwgxN%rN`?yq90RS(! zooB7Av~}3=q6{>U{fYxh^O8BK9%xZ*vxwNUYsSQyrCDw-e!7-p$CdG=`W5uRV!Rc* zrPMO=W(nFEq1lSzQ}w%0ravyA;+)L1z*0EBNFDgJ_Z3`b){nZVoj98j^R|25Wfr6t za&t8Oo_Tfp_)Zd0B6>gmODn$^`6@mEl9^eA{SCHA71t3g_;_)vbL3B#aPx^w=;N-O zzK99jLScqvo40$|Clp(Gq?jnbkDsEAojt;D=44!{v^2^jHqQ$yN^CnSEqvReu5u$z zZ&|N2G+P$DWtoQFP2lm!T@&EAIQ2MNS? zn9qx=IjO?QR5eyO)fS2kb)2up{N9d#KRU?DGGuC%l2xco4VIk1d0F^-WoU>Kz}S|A z56c1F6x)_xC39s@zIR13wKgr?+x@4AyWp7_4dxq6?%kE(_j15#>n~R`Mt$<-DfgP&s3_F4YIW3 z)Hz6qHMRXUZ2jKl!ZMVO4m%+|rgSju8}BK~DNN_T7u5}&u-e2*D;=Mk)tAqJg_lJ{ z_&Vo`=c)n?a2W{?$GPhb9oyYTFOlszfl&^v5}R=U^FU} zjvnWF$vLNI(C#=NgK9leOGh*_1^0N7ECsjGTD8$!sWBny+eq_;{x$th5d*9J%5c-o zD#Y<-ne1Jy1qg%$%*tFB7d8s=CIG3e-2DAj5uofZq0cx8H-p$t9={Up4OU6ZTK8Jn zNx!ce++$v>O>BGq_)ccb_$Qj&;&*i%kb+}@nrB^UThvfSFY!<5XGeO=ZufHu* zzwUP%1&EHT^GVViX`-JbpI5 z?D24v_VTbQ(BVv9z+oo1stwR8WaL$kx6Wv#Oaq2M#4Yl^vl#U|g=I-+_Gh-WlWw!Z zNHKaz$yQL1Uh?5upwFP>=1a_ac|_E4u7MB{f39|~2I-{qJWogi()bbb?2{Rr|48%& zcKb2@zV(jXZ8*5092?T*Mxung=eB z5|e{Bqn7@;H}tNG%pB2LLANc)SI=N<4tPEG^>rbkL{9`7FaJ>T`Q!!M=gMP&XMPj@ zm)zjxZ?ptkD9=;Zv<>YkEI)b#vw5s1tgRpW*ovOU{H=Yi{Re!U@V-`IS#x9c7K*7{ zFO_di$;PdnjuI9#u!7`*6jgL$YkG_51o3b5Blssdah7)^g2~^a>V9ETlYZvwSYK-Q z-R-yyY)&-HvA8}QwNlV#e)BsaN2eKgIZpxYlM220f#wz&zr}xE>0>;X_cMS?cb3O$ zrtPrla38B`w)}zAJQ!^f^AEC>-ti0P<)5y$$?KK(%tEO^vTJuksP4k89ECseZPgdn zX6AQTYkS5|7Cj`-Bc3g*v3rqGVp1i8QJhE9BMK00wKz`d=suJnE&+2!DAZo)cCwnk z!`UkA6Pk`XPW6uE+05jI$6#toRz5O%-mkuLwV3lxEbI61+qz zs6_Lky+9LWTZsV-7Ph);lvQQ2_l^F>$O8jVzKwfN0ae zeZuYOY8huE?&mIRD0W8M(et|pp1xxBqIcx)cY82^a-W*d11Qm9hSQr@Sw|GPUnFKT24$7eUFW9!JV zQ*}>6Fkm|-eXnq`r0WmDPwRf-;Ygk5;_Qvk9;MZY7f%E51F;Zr*#J`1cQmuso_@4! zYMjoK5&v>AP<-A7Z+92JB(9-qV)L6nx|K3z&IS>^z;3-KlZRjCTr|E_XXcon?>K{7 z=Z12k6AfgpC4Ikr0H%-^@5%4&b&evgF`-gb2AexnT3uXP2EG^=+@7DGf4Yei4F%9b zd@9(UH3u>DlFzd2?DE>w>6H34vWBUkQnl1kO1gQ$>mEw zY=!k`94%n)G$MAhBE~)&E>95}lNvWh2=CnvV3aDRJz+sQ?xpq-$g2O{VAf)5s z;BTJ}(u&QGQT@E5RHH#!>%6TUY?Ysq!PgOPI`Rjif&B2wO9BW7C zpjo}o(?OnK3QI1Rq%%j8ss;)EIB8jaTHF$SGr z0+9Q4FBB4qWG2vX0Pze6x4?m4ZS?JoVVD8h{og|w3?`Y4Woc>`A%I{`yZ`B=U{O~n zvSAg88q-;6ibEH1VTCx2qLcCW;C#-7@`u@P7r6c+&L4@wwDtx?0QnVpqBCpH_#RUWcO7+gB z^4|xWrMQjW-XGXrGCph*HSl>{;wuw02~P78Xg{IBnSvR58{+stdkSYU$4pLZ(7Sdw z$QFm3=j)Ll5e-I+K&c@i=G?5SCcn?lti(Oq8n)L~F0-}v1!lOSgZQv!LfZYk39Zd~ zH;~Xx@vaZmZO!{fR0c-?K)-#FKf^MdGNP486<+BLO4QXgu94`p7kpi&H~QJnao*`T zfL#w;f6=$!2*d{fg&ey|;MF8$O7Z*xG{jJ9Ehqpmi+0h9xKnFfyY5^u4G@GW)O|SogOeu1Nx3 zzUqKW^{_?)ru0b!fg(ti^@|y)e-E761TfWp+*i-%Q!{VwC(x|QpLZ*kIjnZYBMC8p zyhk!a5U9TaB0%$n$_Jb+6~!PS0f-yQW_L;!^e^gZaDbjs8jI&#Iiarh_W5nOyaQ)v z%|Z8Z3l2o?UM8*gcx*y0r7E^NIoz+ruL{t1?T(0iwfkkN5~~E(t-NnQ1Cto@trG)7 zbfi?Jb~M=!;54^<;G{d=n7adT?H?VY>*})HU(9DMJE)HJ^z zj0Oz6FAs#LOFqxIAHS`(`3od#fR(=;BxIygKO~v%|7|D2-PH8ds-?-+%USJ=`iY>{$0E$xNNTtDjpD`*n;$FCchrgX6pYHIRSg`=t3HaDUcX;&yku z&$)p7Zo;yWM>40Q``qY(-oPcasi{o)`*AKJYNyYql+zsxXygYYu=(sR@rntBoa2-B zy?{nG^X`6yPCSD;jwS}cKOnzYpd%~N_>5KoLy6?eyb3a200UCE;R3g}p!M+dR!WWx zFauTJ(Y^IA|6b|4Sk_r$((`lnw@a14y3RHa`M!38?H){oh$TGGN966;UFkGbySMnN zOP<7%W!r40yU@bnt~Wf~2(97U@0sg~@xt%LMb^*#%Go}WCCJ_p5uG41wIJVdWykv- zyT?7M%T`Ck)e(eh2v+R>=VcH8Z@6EjZB<<_z2L%7cu3>W&KvngtA!=O{j#N2$N*57 zF7hfxW-Cc$Ys(`N788CYXi~+}u5|Fs=ft7}Ez_QvFsrxZ;rUJB)vGZwFXYRKYamc(p(6c2UV44MKZqChP z;%g`qW9)p2MfMrsWYo47e;yL3MhTqM{G{Z69ydYcA>iyQK&7OA0=@S@V!Xfha&7z6 zZX@Vbfy`D#bVg6nsqW>eQcgAqc(R~?Qe<5nyu9q6Nx+)O_44cR&Vb7YF`%rBBBTq$ z_$3Gtj_w1nmqNXNE$6?)qoI)ko9O<`_=)$(D+EPF4TJ|R8Mt|}(Ie=J1}6sHzg_6U z#+!J4RtBKaBO*E3C8QC!B!#s|d!N+*tIgCrF5Y6@yL3qvI7CRY$Nhsn?C(0&*)O#h zFi>A>(386G+ErDtF6c0#(8DZNuxL^&wtjb#L+T`z!4p>U3+iBSpqM(cD*FBT&M!xr zdcn28wZ5`YhL5kz$5-X=rws*rwjiqk?(_BTOI?P(U=Hg?l?%&pn@bcElie}rO{I1% z=j9hFo~NMLuK*)sB{0nw2EDKe3UuTi7|02LK$HYXWs&A9kn8oZ!2ChNcpdb&PpyKE zF1EfsK;cri9R34NpW^Iqb6Y*6Et%7;W1;Z!Rq;Z1%{cbLr|j@=I%sPD-By< z9X2FPP00O?XPVuxpZY?w@shY!vM~wV6zec{upRyii}kRYFC%MM3^)i1Toh{ z5IP`jxQ77h4;eY1?OWqr02{At+bxiC;P5G>0G{U0RJ3f-8Z}QQN5pFe9NaBstJi-us-9Q0D(^b4Jq%?KBklp<(Aw8s6104&4jmB9UqnRZ zoSY2gSoZQ9@8BhMJ)zK26aF^c$FgIEmwwXn{Qop@j=Q^YGzPHHMbyknNhjHj5%NvT zyIjYZK-zQSGq^&w0ktmW=JZo<&z&IrAtZ&{q2QZqt zJ6{7mTMN0Y@VFah8UxgjQ%9Bj{C@%Mjk;T%?wa-8T%!3%d%AQ&1{Vc8)$y_P?0hyr zBD{~WkhVVwmf9=}kfiXGYHI^Y0c3~k;cx5P{rQJMnWDUw`w=N3vb^TH{y;nvE80$) zL$G8B$3^QlBNg!7TGP9!|AgCTnHSu29iJ;-j^-Zf8T93)%1prnU4nduo1nA``fxS9 z_wWcdJFQnY1`07Z-|0kRAY>^!Hn6d->-_wz>0GkIjt>AXPY5^zEcwBZ-a79B_GArn zQ}G@TX@`NVHpF=2W>UbXtCdXp1K{r2y4(Gjzvvu3xAUt%u$?*LUf5FzEx?wt`wjUX zmsCi*U4aezK=c92CNd5K)fxX)$3_)^s)vs{0|No@8ZCaShYk)moQ?iEdJH43u09($ z^t^AbA)jw&B-4P!GjiXBPj#;O z*$H4Xf!P8;@`at}?QD8IjDZ8ZEdo%3e5OeREL;@d?fn! z!Q|vfCT0Rt3&Hh8(()Be>lJPcOaa4k!?Q!ckmwE>Km_=;??qyIOM{>giNZb$=^(K$ zNFnrsZl{%C@)7DNSd1i>Ix(V6!V>l@>tFIMtY!L3z39b8KKt!jfW@f zZHk5`q!ki?eFT&P#pK>v9%-8$AJ|TAZUF;oe1DAGFL{$a-fc#sqP`kseNuj#RUG8w zZZ6OvfRvsm8CfY6I6EMpcM-ks&kzOr!m)uH{#1N?s*2?^Wt(VxyerA$wwqO9i4o~z zpj6fR3ghaT8}fGCzW8RZSTug!xjjNVZ>GRQd<701sP)#Q$g`Ce1(sSWW<^^;U>E{m z`9B*{x5?pmAp_b>U{3HUiJ|cRf~2tY``kf>!xMYHX+@sXI;ZONjLWZOfx9KcLKtZ2 zj+-CBas|!v@pQVh|0Vi&I)Jx!UXAw(=E}+5)3IqmeqE+GnN^U0mZClg4KDvwTFfnI z<#4*9^+gdDzQ1V23WeV~)HwSJl-RM-RdUdMlQ)qtpk;lbTA99D*E>!)^w2k{y zIdlR-x;QN1^-zdFsqH9`Q1w~FG{#!7l4FSfwWpEWOjfb#Gmy7M1lnkwp+2C618f$6 zN}y_V+hHT9dlnWpTa(|kLO`d=*5+l;YU?n|Fg5 zeqm|p4k8ltci?Q80U$RN)P)Dw*w2y)Zyf_U{c)}^u%>yQxI>nayg3;751(L?w6gG| z7swg{Tsu}}@f=!#B(fcBzSID{p78JUlE-_sZa{M2?Qni7ONM_F2#;pjkv1QT6xy(6 zzjPF63zjrR8sGYKE9cw&2gpM6M>bSG5Hq(UTGK$;**2e^SxxWTup!vy!V(PlsCi_o zhXX>J?{J)+06Q~M&M1FjD(^@n`6V5|{IZdiGzA3`XjA%l?}uVYrBZ*pZ-WjalJo|4 zA(BLDHBN3&#U2uhPfcYr=!~Mt{B}E4mXX#N2EH7yn5T!Kf_~z}e8l?lwISD!Rq=D$Zz5n|)DQ()k=&2luj#>LePMuh!cwP;2aw8}B*icetSaSnunU z`FStz*I$+b`nGR4RovPV^OjdB4XW;|xOKF2+xIc1jOlcIjVhLy1YSgNB>|Qj6fgwC z=diaW@2tLyS2NOV{MnP{aIaAZ`}w?m*;dN=v#+frf`QB>G(YWqTuDlhUt0Lv>5&#F zZK;opq_u!d8C)NPC@=<_axb`2w*W5xMb!PBQ+sL2cX!Y384HlI1cwL3#)_4P%HaX? zD1_`A>n;(Q(a}Ke#G&)<*Ln+%XR~px!2b_e4wMXWSm(W3b4cT!%bo%XfSf%q2&0xQ z|8-M2p6xst?FanLVv#M`^ofe!%xj~ik@&t~BIw9#{PT;4fj{MeW}rL&R}QNihLgE@ z=N&B(dxStv7pF7hzDy2n7*3e}t&t3p+bk)atkkpCf2*$ZkDXln?-jM!U#$ds^3=lN zkv_WXEWYghtpqJ_qMi;4W&a;`hs3PCS!d(mE^HDjE&JVwyL-r=uCIEjZ#>n>P2F{*?S~)c|M;t zKrK~+DL6R=45ajj=RH*o7(HD@(6o4R0?SSj63#@rwfMUcJ#l7#A) zSs>Y#Yf=S=1au5J?hhIO*PA9PXAa=^KxesJ-cs&>sZ)jb`m#}Yb0gF7pqW76B2GuA zlT^G^Lvyt8`!m2rq#K>Nh{A$@>sI0MIQ$SWFFS0k?6`Fva2aTaK`mcAZCmfmo?-LD z0?Kh{wq*hAfFFJIMv*ozzg}1W3-7~EIgsPBic&RTyV>#a3+U?k@y`HA%I@)B=gMD& z5`ip(h=jTG(956J_1`g&E}1opSZ{mG!eL%qmX>O^Uuq2d&JM=yny~&^PT8;7)vntj z<`2afw`_rn>kiyMaVZ4+fPbDA16rsGKFkezThcK&9`T!2C*|5@Zp)OrBSivF`A<6Mty0yg!_@LEt zUPA(hpL3grTbNcDG(aZY2e5NZ=l-9IQt(!5Ua-C`cVfUULn-GWSC(3Zkb&i3&I7)QE zTc;k0h*a8mijB;h;reHi=OgGCKt{-EEImRe#gqvMR!68l+oE2`0={i%>LZsXd{Z-9 zRz@TyCLMcg1?1qJ0U*`mL{h?wR{1tkF;VAxatAv#ldhz?#XcJ1WkMrO5yIT(8UnsnXF zKIOHwJ@}j2ft|qHr^?s&c8K2!xG30;BKeotau}^q3S&?{;6g~ND~Kv;g*KUhEG?hW zof`W-hIEASwqOA?9QY~B@X;wN7He*wBD}?ByYSH9e@x`Oz%UF_VF_h!CVlkiY&h5> zCpPN+Lv5YivwQb?n{WGb@e1>2Wpy**K7TdD%L~A0bYU8K-No|k^=$WG5Dv{$Z~pCp zOfU(RdEazqlx~iX<)6!xrV^@3D${*Ok(&Ri3g3EW3()E9F1#!v4y|HmT)yObvWNg2 zBb*UU&bH`eVI&h{=KCd|cX05}`%_*`r3I1)x-j&epZxWUqBO|^p%A9-BJjrv2-W$-v2k(PAUi3R(y6Rllk7*sitqLFRk70ustInCI?vKKY;XE|jDm)w%e9{T*AuWP_b97R3QG$N5skz@42oBOu z%F|)#3RQqx@Z6SiHt18x#Kh>9=LrwaH)l>A*R@!^0$@(nz^0kq`bvsS5)ffjt}YSk zV;6LgwpHf(UQ}yU(GH8;1LkcGG)#*sD+Z`{a@tgk+}sV{g)X-`-l(!X-fK4A%r|DP zcImi294_%jGd6}^&mP^~y~3*gte{^kz>@HX6Z8L~scLKs+F? zh@RjL2D+oBIcP~rrK zQgu#tf>~sHetC7|S2=a>j z=+Mv1{jO`>P;nBhe<+QSK%Hm2&RCqT!F$Wo!M|W~?NmDY7Y`u9A)R($zXRZ~;|FOp zYU{k+OF_VmTmty7_5myB4d$K3uO7HTVrdo=BrgDtjUN*qpBWNPLTC2_WW>lI$~fK6kjuyNYkjEOyLrI}e2q;SfF(erI6mpA9?QAQy_T3++ykykVR zkkJUV(nFXxhc~3-Vw452wjy#okOYiV2!*B_&Csbt?p&=#Dq0*fMC(hHMcfq@xMe?P z{ufu_3T63#Ml>04f9tlkhFoezPZ9#HFKtS~hvOc6!sakaqt8nTJI4Y@k4biYXxIrZ zp-VMO_}6~S!uH4PH5;S?Da80RiNlX~8vk0xWWbiazA>C|@ifd8S6tQE9=Wh(cd z-e{A)qB_~5OSoy^bd#B&5dXjj_1En1?m96QEy{Nvh*}lvriXe8RUy8^gqC@fa(#36 zr#*8u+jz~>i)V0j+w>C#Yw*iiuY^YDRU!2?AJb%^ z@ZA43iGQ2V*~NGIwS&XYt<+p3nSS{pOU6iUSN8y|FVIln;dhy40NjQ&04`i#Y6lFq zY>y^UZ|F9k=|8@3mioKUjwbn79na!4w3VB2-QZ}78B>vZLQGZ~%nA#pJq};60rN)E z7jaR90e&c~lBlN{6x!~?7p&tAW2~1KgjPi}XHR+=XteVSvMTKX!`EE9mPzBs5}4Oc z;}id{1sDv)Y=oDlM^~n5uWJYD2-2@Y;C>V0&;tk!d&tQDU<#SoQ+e>eh6#p#fls){ zjsJ1xnKTHEhmrQ;qm;wz^Kmg6Q<;j@AsM_sDvqI8jwI&+>&MkRfh+*`LEQcc?O(QR zOkGd%eSdzMkilWwcK00W-OPCPwE+yI$%yj{GBS7W3+EUC8OInLcOU>VLjjRH3kG&J zznuUeimkd3T^#n4&LdQeJkO;5M>8$be<*(|yK#_lLX2!Ci)>Z@_@U*qle5G?ij{6vW50R-=EY|%9~l`Zp}2=opMV)8IkAskG%NKn4e_R72#=st z#lX?GPl+@s=!`3;R2%Cg_8>iT;*bC|MWFZ9$&V_U#lPr%{O~zpD8JAVUX(;M+qMHI z_9x;WLp9uHeyu0MAg%LTCzeG{ z&@li7hDy=e2OpN3xeLOj$`K^49{4jE+=ohDtuR-dX$;MVVfNOGn5tGJO9CS>|1XNL zj)8ijcFIA-(s+`eopR{S)!qrM;oBISVSC5LJ6%EU<1YIGcK($nES1*y3r(x%_Q$){ z{@bZxw0ZSNf=XfxpO)AN5;%|5_jNl||CaM@S&^W)k?ef`%<`!bnLj{3`uRga_EK-I z{&uW%@PjNPP*-O-4rv@wl#NVqt1!{VE5+E~kgYsYQTh>C{0n7zqo#j=p*vnpP@$eZ zu1C~b4c8Bz(nN{1-|!;p>Z_zG)@!q83+z5fQ6jquNKt9UME$srw>=T2-|Wu?m447# zAq>@lF2zxd@;F91NxdbvA+nAmU<5zGX#K@wLbfp>@0r3OsBwR^3j3>fr8BDaO0ZAk zK2=41s17nw?h@&juqD>%h$j1O!x=_E8($l+RadIFJQ#j^kTSw5Q+SzTTLu@%SymaB zwEJd7_tyY+pUD)`*n;>}h=*Vo&g0TK{j9S=lhUAYms9DTs`mo(%3#202L0gG?zM4$ zi_fE)^NhBF$bM42CZpR&V&3N7Xh|z&;`y~ny6^A@yxnmk7BZl5a4gUL=YGG;cf343 zlpkJ*X8MHk1sX|4Q6?u6(j6>#FbQW--P0RVCUcz*-MPuoeh?fYh?MjnN6Ih8*pQCb zJVs$UzZ3P0#CI2cfY)q_j@hZ_zAS5iq@c;Tbt>?N_w%M`YHI!14sivfY1+$`U%kBr zxrjes@lo+XK#uQqdEpk(na&pZa2%A=&G*ZXHD_L8B z=pjRR!#*bO&W3fJD}PvD1^J)XlOtPKoCU(!XuI)1oyKb-4Vi87rJe?QD^8cI?|Ei2mm=T3e_ z2aiy2|J#}#7Z`{D-ZFF;isU;S{RasT{`E=S>33h+&F8x?$C{ni!%&-dc6arg%OV~X zNq%vH69?RUb#tCh@d8b$h6(UfHDPFyRJU<1YkAMmFC{U<%`(#|tLrv1Q`G#=PZ-lf zt{@^>Y+&|IL=nN(2211wSY^E5?UGiTZOK^HU3?{9>}@bz&NYX_#L7Mvx+(RBPlY=hlk8IV;IHQj2fSfSokHWI&dE&)51bBqMOZd9IAix(has$_K# ztiRek>ujlLIl2`^&Xu#KD(Aq!)W>F~+7|u!FZ=Z=8g1(Ck~mk`?irFE8{Mob`up>y zWyLXBn#(didJ#do~G9(f+b|A6(APE6HUo=M+l3X8%2Y%&EYf_Mlw`P^>MvaDr zZ|s{>C{^Ltcn)B$SQTVAur;MZ=IRswPI<}iNEx0_uzDQxa+A+$ev|4dPqy$Su@h;ey)8a1??otySaJ#;1$q`XuH@;93qL!9o>y+&h(^ErT zaJlwCKUG$-9W`3#YQG2lxpx!gW4lqw2F?R3%8Qedy82(WRvMStEtmGwE0E=<509SH zn9NkSUe_D+n@@<^!kku{W}nVW$;=04G*TO>wRtKL-4yWI>ghIsqOGA!bu7PC$0WIh zOWo9(UD&~f(9SN5F@ldKnX#GU$o^86R7B!7faC3QC)uYlx_jrql(22LXJ4(aH?mGVPfXm8J|1ilt0pN zNJ0Bv%c6KKy|2pMGHt<8p(EjplV?|^tKP$JX#?Bmbd>Ed>TG5u0l4Ed+)bCw#_hAM z$EYcl>PSe^*_DN@c66t_Q_PVpBg!`3wp~oUShI0>XMH==z6EXERMOHPLhTU#XL?fj zqB12>z&C^tC?$%>fN0EZgy_=>a;NUc(y|KO;YX>PC~vT zL363EUAaH4WTvS@Hlp1+=O(F)T<{s?K{lp+^s4lN((Im*7Q-g>WmPfrfjd})Q;y|j zc5etM&7dtHLnBR6(rS#=%tur8MAW=mLT_Ua z={k3Pq>kiJ3I~@!SX_p^@M3f=&4yW8+m3;42l9U6{0baG$gd__XB7)Md~m=H)G4;c zRV)y1`aM2K%n>On#t4>xL?wrye4br9apl;lo+0IhQ~oqj^>}J2rp*tOewHp>%6MMJ zu>z&0CrUfNq5xLI9Fx5)e)U-QRN`KbGQ}~6I6|Cmi_o(vB0ZejnO${qem>fzF}ba1 zTQdN<*Q>Koc%WkZhO39)^r(#=`*>3^0shwGt|W1x^y;;Z*cICW?bccM6e zGcEjDckY~svCTQSVP9r$zw3$`ziMdPh>xv^+8hsdtS{G+>rcS$KL$4q^TX!l$vLGg z@}m8J_N_{LdfPkc&uthqp@5nM-{TSF>qWOLd@Edo+f+U%~rtZOqw(co!TSy6gDF%{FY8x~J$mvsYfL(qM3*={V8 zQ)Gk0tOKKrmX_H2mWjPf>;eO%4TV0Yo$Y<1$V25*9m~pMef^K1Kt>LI-JE*godIj~ zu#J&b4YBd%A3>>%4|Y@eT*4`UKgn+psa&U|8)9!XWONZ1BV&3Hx5JYZ+Pvabean{k z=N~Tt%JLWv*8Nw1uQy6i-L6p1d8WM{>+fwDWm-zW%yVgpp|Z2;qF)-~r--!S>c+Vw zG|U<27NnJI6G^TS(=P1QnfEyA%vNW-;c1!Uu7ownI|eJms+5GTaLRJbRHQ9(bP7&Z znN&2oo!-8ponP^q{yYK=^brm-@ewUQ56nAot1-u?#M;gBPcvRipW6!>_K zo1t)#eC?9TJ`2EIz)IDKYEx1iwF9kdsJS%Nx>5bg78vSLx-=N};NkPtFTLl(KJv$< z&I*Q6*{Z0dN=R(#GG%=bBNn%2mou*TN;JhwXFdjI`^>~>nu4CidA3j~$Zc&FM|IkM z{g3%w7EaoN@y6&0=ZBhI<3nHe7DSN){`yThK=9UIp@F=2{TQrZ;pqpwqn zs?m>-|Db!Aw0edFllbPX1UB5lebx1?@X+Uja8=|C4wv|?frrn1KXl-};47~CVD?yw z)5p^RdU)8KJsoWlU2s3a;K0Lt@w(gxzgyZZQbO|oOgNq`U}TVAB)lXN%om7 zs(HalkwU`1$KUm{_i4l))p*R*q5J5L?lC^GJ0p43f2wb#WwbRyJ;ldxj*wy>lkPb&Up( zTi7U5VT5YzTojy}=QQE;U3SL25#HD%p#2%?3Zjdtpw@8h*upAFN-`W(Oqv<^@Aa5- zgJJpc?dk{j3A<+|9yKzm%ZqGGV>pMiYVNo@)N?ZFx}7hJ`hpNy=O#w(KL^&t789pJ zahkDA=DO;RPJILf^>C(#N%fLE^VrRY-T|&V7beY6O6ATyY>w6WiIVd4=OMSC&fnsg z%$Hl1?mZ9_++rQ7Tn1`|oAt~n28K1eVp@OPuXjhIz+JWqD=Qo*yWr(3g|i3ByY!+i zAxKD~N>Up#E}dg8Gtkr;-{^coTj9UN&piD+kRoKc-#)Yj-Jnoq6=S9f$kTe2(s zhRf8{chAf+10+{|b2YKP-w&`{A`R5#ROE$vzn$r-XZHxGpmweL*el`Naf`qQ5h$eX zCN4bRs@~%0S+*!1j55m^WQJ$#?h!w=trrg4z{m#v=v`zH>{B&FW>ZrSLtAhv3CORe zTD_q6+-ur96|cN7$}K8QY}WMDOka~TVp9DI`m5>1z8Nf&xIzrg(OxP`EVA2f)PVi2 z?vSG(-)A-`4Y!}!Bvpot=k>A&4oV&IU7dnr-}yfM^jaUqVr8F6SmrB#0MX6s4v#h- z+fs|UDW8J`PEt89G-_hYF&Sy0bwg3U_t2ue_urbfJex?o#WO1hwY7q0l?+B`^JV=WSv-Xrv6zqrPJs^LSbwZ&niBluyq9}`b?Tp zTR7Q9Y&9uf13HU_0wtj?#RNP*wEZb8C*2c76r|RUdl*-F4T%k0xEt?;Mek9w`uFoz zcK!T7&o9p`hSwb_@s%Ks9!NW9{w(kP+pw68SBsdGaB#R89-`@g1dD6(#Kqdib-~0d z%5j8J31kHXgBv#2#9sc)eQNJ z+SOGNHm3C{nNCdDS&Or@_ra`Z-K4IO7cf2l{u)aT48BZ_zZJxj+W0KCQ ztKqR<*-uv_l#9JTx1hOmr>nvmOy~<5Jl@)WQqlJL(>>E<6>ein9~(|#H#@hrKTUU7 zxWLhkL}V(T)86|>4?*Rn*qHSRs~{X3kLTC&(+&&s)uVgctd+r}O!Gl4pGvU!a{t!B zdv{aAgw^|4$G>Aw@VvJHJ&PRc4#n#pu|=n0XUp+)?S>ro#St#T;0c)XAKULP7y5c# z-ZJfT{1rRsQBZ&sGh=hqhQyfl_6ymR|&T&9WE?si+lm^vTSe7;=6(N-{R02xand0;|J0*1<&E&kq^y$$>R{Ia2P znej0c?Q)J^TmHk}Ki|QV8X0->sisyfL);pmeaJb7o=#$Ox>K+cN`~2N=9}LiC5;8! zikx`*RHLj=llafuO)w-=GoL$|qp@_l#D&h>YjwPgCuLOkV;dl+aykEb?vP~c%m$f= zGKv~9`&EU#xf~mIgvtd9DA)!De2k zB(jFX+L^VPccNh7oz0zD{1Z0L;(#xjhd<};6XtxpMu1#4dveO<0~Tw791|w@1@S|( zEiCrT(h8gmNtE$d{nKkN{?W@8eA_JYMM0naH+*)#Y+XaAGxHT-z6aEv_py5TW9fL-KUD;QC~O%xS1>=IHXkI6o?kn`kpX#IxemQ$yM&@|3z-xeP+tX!i3g z-MLLrxVSt-P*8MZX<%>?PEDsC<1+>M>*WqcfbW;-`tG`F9csecg$`n1iEY(*E-OBU zn-B*?I9=iqCvdT5>cKiEg^%8e4_@^aw16edY6g|?wy~$LmzO=NYuhHGMNc6oPASlG z3R}=B5j;an{(bC~V0Qm#+Um^MV=N~X;Es~^=iLi2)%l!g08TGzli3TVw~PX~_%0V7G z@zbhS-UUJP!?L}{PPWs`y6hRNpcew1ik~ z`d|7+!KZ2z#6^V~PqyUD*j?g14mCI1UcXV^>^rR~T@}EzvNQJj(G1uGxaBE*#HJF3 zL33b+HA#r&tc{=nlG3_o$8tvaCv`@T7~|%0zh)b695#BMoI6xsrgf0(Fyt{GPw|x1 z=-tvKF=Dj}B(N*JNjv3`(9fH7cH0@mDL!4b`9paejhG6|izuq?ozex%roKvWEz9Nx zNR4K2Y6_EAje>u#N!vIC)3ugw{HFuKmMTXN+1X2^DpLG$zBy>zsgSTO)RU-8` zZSg2_zcmpVIm%Sq(^{R*V<5JKL+~43^#)l-pLHBO@+0VsmfGE#oMyG{0j!Z zzba?YkVr2DbF@>hNnz58iSg;^J}(^AS3~e`Py#}1$(R9`uQwKIAYYMA7F|lexhOcg zx_*OiGZo>{v3Y#3n>?ac6_AeBatmGi0b$D-1O&X$qd>z8_UxjPnEGUku5dj#eACq8&ZL|hVxdXC>V z&jo|vX+gzgPXYd`X>KmNUeH=6+QwYJU2fWxax*^*x`6l*?`ID zS@HtEt!!fHnv6N*I-CE&`j+en!F$&=xDjo@lAeG#=`@%@&*i-zah}&2E_Sj?m*?3c zP!3rpeQ)QT=!?Jov1xMJkG4bB?N=mZ0306cDn?nlqv1T!vO(*@VO@A;G4GaE5h1Ny zH7{{ksaI0s34V_jx0b~+qs-^vMvhY*d!A~IkMWc;E0)=Gd83S9?U_5Rhq&88l$jnY z#+LYDm=!6_e>bH*U=t`6+OyggPoF|Ewz$O0QWSnBSGS~rPlRmM+U4XnUG4Nw-NBS{ zF=fj$Gq8Uun};C$?ny``(n{DBvW*yAAQ*+Gm^$-o%Mcd?(^{$=G_{oI?-yv3r;a_QHQca+~n z)3zHm0sp;rex4mW{|{DBj5JH%PTlGgq}#_6Rrmdc;rfKfIbD_H{D#!xgqqV2M@S>I zv(+Jt`GI-aIk3c)NfVAH8ZE{_No>1tnx7-i64egaZYZyxZHeUstCJy^z?z?Y-7P-p z-04~h9XIX_7< zXtY87Gy|knLAKFaevuG!S~w7wn=dr@yU?=^>cl)t2*GgM;c=P@ zR8$d$tkB$xPM}rF;r8IT(pDfM@Kl@%|E8Uq-wyQ`A~sF^#z)Uz$Ivsq${SGdLt%%% z@)W$mj*z9X;)aPpZcfs$1NNGqsVIE20A07?pwZmYg-{CR;HnOAHmh-FGG)$>k&_mc zaH$}@>HD3*YKED>pG}CIEhEprYslU6n(?ZK0lwQUK&LGUJr#r{CY6db4IOgQ zpktAJ_n8q4s*B8tD*53ojW!xeQ(#Cgw_`A7-C?5ar{ z3K|x~C~|`czQwW6(J|}Bprjq%Glwh#K8DFfcZ=zl0D?L-OKkmjH~NGbehHU$gHYK>4NYHw;h(jG`c*WP%?#4QT#a85 zEf@j1Ea$_?okB9++WlGRG9aVpTo;Ig=l5e-w7qSR+Rp9^WiKaj)eU0-or|vGUxgk@ zi#X)%J)=Y|g+7va>bqx;sr@nTH{AOjT(Nf;n)XBH{E~+?mLLx8Y`)Tt-r^yLIV}QN zr_(-Er{_z}bGcs#J7P=6gek)u`Mf+K3RzZ3lsVA~<7_{@K*NTADI*D)L^DvJ`p64i zmW@$I=1w_6DoP+*Bgm!3!MPPURN}XJlGv5qhO=jhQBcIpr9Y1dWy+Fpl#sKp{Im5r zHOuMAN~e(CGi;i;prh-3q#Y11m2y3<;<8xr`FMAD@M$((tUa}7j;~uvFZ-QJjB9zD zgV;5=-G??ZeE8z=5%FHjSn=(ccoX#UrOV^z)BcI(czj_0Rw2_&{+vj&I{>jefUD{# zgi0PTKfKBD6Wwf1p*r2wEj;S-HBGSDVD z$P43*oe3cd6tnZnBTrEj(bCp3b6jLa{yvvfl8hsz4{sj~fki$Ym;A*oY8%nAVuXAJ zR#3#*ig&Fyo%(~lnSp?)?ZJj}6=gs_o1)5=px0Tq#FnZGyf0~v zeXS@o);K*D`Y-oK1iC^-5u^rX21;k!yV_VHH4ucg?LjR@1E^4z6$0YWufSz}7XsP+G0Z}+QZ`x|3 zA&S>U`$@fp<5ac^+R*G@fK;0S$gS2}gd1F!?^#7dC+%NxU4J`@K;6LM?hpIGSu;_< zhzSqQLePl{_%XzvKC6`Cr2N_We=R^r@CrX01+h8>*(x~&Kd6v<=r=jswQ+0cSdn3< zLA|2ZF!_9EdriS#(O3`?*k25s*;};dn-vA&b!!MHalRpY{nnF@b=mjtR;4#jGZ9RX z_9p1>X^2@FJUESBZ~)c5MuG*frQ?@MgN#Gxp~3KPatvYY0Vty0s!Vy@V?fIw*zA&) zfh4-;iw(J!<~Dv~hpl%u?W2pO-M@Ik8x}th(_)Fa>;lIg=M1`CJxpdDmbx;){Y&GI z=?)7z4FlbO0E8`@yO5Y7-@aOsEjzlS9LLX3>ctdbOXFpz%K%D-A7qZ{qhy> z2J5Q3;}A!&iQ|GVxz2xxbNoq8absVNG^6lQhS@n2nMs@;6 zfKuex3}d#7-j^&o%Aid)vuDPk`8!R zWE6#^F58*=-X;*m=R~`pCH>y!m%lleEO4c3kam2Kg&ttCS>m_*(^Al^2+F!u}F)&{gyz%`9p0Hsl>px;ExH@gu`>2Xg|4sRia2TN7g|JzO3> zzM$nL8=THX0kJb2`i1qeeA%|zkJb=(F77~K$6x$Q(EXWsx9HxQ9%+3i3xpo$Yz^i< zAI}xKSmwDo^`0*!`LfWP*ghHWjJSukXdag!6=#Y1ggv7#OB2f1PZNm1Y|eC;mC0;& zId0fpef~??9piJh#4#2SVMN4)pAiSkm2nxMBEerk64OB_d=~b-atF0 znIyD@^+VRP);!;(Aph#0yrar98@a(3_#z`Lx0;v9g(KR+?ZO52k=j^vlYRs1%Wp%w zGs0A8Q@J zJs582kobtFQug*Cai5X_keU$V0k0e@*~KPO^-mJ#Jvf*SPuS%M^SfZbrIF}fS=XsV zUZg?fU_qzfwn9Z(DDw`LwAC1|q&Iuq;j*gp7aKLM342pz&5KQ(lshPaH{E^H>WboRxfJra%hmL=MaZQNVsO_{)bLTl_I+fG0%eD_0840O zd|ds8_PkuU23!)b{XN2|7&U`1vH*L})r3RJV$JNV&FnnW#DlA8pvJI_dKix9H4!T} z4vBzkcwPH1))01n=yz|SqT<9KKukiQX1HUBN&oD&bmyDIv=punc-?}dd|Ewd1SG>s z(9oQUEn@g_SAse4h=?{d5l|KEQHV2!a$~LT%vPhVW86&qQK>G82Q|S)^TtIbWxNa1 zx)SdU4^!6vD3Ve)XDu)f;_&QMVfg#W(Q7vOgl*3W1HDnulFqR*IvqCj-+>0Tb!ULf z0$05W0XXH(F?Fh)o>PPOr_1zk%z8qj;@@7J6m1rLEcQSK_0)lD;OX3+MttMqRi7w0 z^{^paAMxRzo(4VcC_;JO>3Ue!A$ue9B{N6os|$pbq->%P_@ApIGqtA$a%={9m}U|S zKkE)2%_rux#5Y6orU3u-prmeur))fGd<*ewD{ZV7addF17m73UT_hr8>>VTb?bO{u zw5v{;t@D8D^PjtA(cgshdYW%-bur)X|ihlj5q;LsGXm!TP}^FxYHtH)VzNFIKc zoW3SW3Zo5yq(y^#xr$huPhmDs_L~yN_1F17n!W+J&hGoVjcwbuZQD*`yRjSFZfx6W zY&&UeyRq{<@9&%c%zZM+WHLARV4rpNUVAMQX28@@)9tDWf-c8zjZ_+23tdxO8TpQu zw!OgwQj?X1h|2OE6E~$0Bu;iD0O(<0fI&<_^NWpy79udQ3t0p;EGaAoRh3ANnq-?@ zhgY`8NLAZ+EvZQ8yqQQx*ohw!_N@FN$@^q) z?N>5c9cXn+4p&##k)CkHTC3Ufeo+6~{LJIcD^F)9VIdI(!~DxL>5^L38h`muA5~}U zkO%!MT(2|gtwM_S{)f+JjkI`4^2F3kDII(0&5jQ~HJ|uYf?otpDLQVY(@v%SVtlLZ zQF(-J10fIxj>p*l3VejyOR7kbd-lelop?84E|V~D73$H8*3Mtb5- zp>r(ZNya?)Oa4J>!!x?j3Uzj{pz0mf*SvQ_+9oXGf{Jh(KMFj*JYx1Y&cTe}HM^&s z=^P2e=Y44*eCmN7JhbFmRoudgj4WkUu8YLk3YIbzQ)=2mu15qcc+AGBncyyU4^pcr&&UjSXAP1SpL~=V^-OfCOXPn^9QPo|1HIE*H=D)Gwhsi)EUl{BNK?3|zL?ne~}Ri)$zG zLb;xeaf7Y(YZqSeXg5>q(v3&s`9BCAUWrN;r0_^2_6qB{0{1TYY@R0kt!bvWTUrw4 z46bAOJnNpVp}4>DzI{3xTiuE58Q{qrkw=N?V9?NBzUq}Do+Yh++$DUyD1!R99bk~f zCWolNryuvG$@H>hrQiEH`eF)2P{!ihO;-TCM1dgvC`IYzO9_z_aOH;Y>V;_D!lymY z`KM79rc6viX`&ELV+`6c}IYq;lw3r)UN4r({&C$S17f=}m)8MA~8ej9u8+j41 zPdy6ELUaJ!Da$*ZWm^U}OexgRh~;_j_P5gopA)0=zzsd1pOUBMQsw2&d#he%V>!i?!gMZD+{4D-S9z{G~p-{ zy05cWQk11l2);J7)l)Hi+K!AFl3Db}!DR4Os4@|8q{53xD;p{j=0C_|rmCA-&aA2? zNu4zp4m{jDBD%iz6 zp$?XfxnU*qFCN?NCUj_c*(Js0tIi~G<7#)g!N#?EHGs)AU2TiU49td0bhQRUM#(s? zDey01r0rVo%c-X^v1v9~UGi7yXG&X{{4tqK=b1ZQ6OU|T3Q@7HL}>83bAxfSrS!ct zC&;DFq4Lk`2gt14T(r~|V+7OVFzz1{ysxY*B@XdgFH`~*HAgb`H6xb;6KQvS8Lan} zONBXGJM8mYIRFGdXW{@6F3WJ-PzA^Yj-sd--GfqvhaccaVJpyU+HRN!cD_EMd z#-J9QlaYpvizU?^qqb{072wICTagQJV^h3Dv!hY2eVnG?-=sk8+N@?ojP z*^#C?^7AxrA;I0qgTY}C<`2W?qs$R^WJq%*VI(lRUS*qh^%Z=%*+G{)?hm=Ib3uZ-f3e%ND%IIQ>R#(l{MBom^$C?8Z=gPVQl^2A z9XKs;JI5fXm|xA2#E(0+JNSH6zJN_LgdAQ#v!~CK_$y~)L;KpH(w*AwzbMwGoo3)< z-H*J*#-;?fAlLhn zEw>!{DboRd+_B1xcCZ7Rp{95gi$7`_Tzl~QJ7tcS$cN>e9fbQrYH$f4En_QE3pL(a z^{_%h+Ag8dYEPml?ACj+c**9lvAjBVq6WCl-Yu%hC)+T z85Q2icO>|Tl}6~dA~SypZsMfMm4Qc2OD4;U8Pb+$%(sCFT%YQR6}QH&TzPI4bj^a= zOCu`u<<;6RspI3nel;E221jo4s?M$lfgdrrK)UDgp6rSQCTPqCeiBSHFj#C#0N6HP*@eGbdDCbj9r=0q+!zD9tW!GFp*u*V5sc$*a!umOa zDK0UmaJKe1YYY}`w|Lc-wuTQ9Xo%7L?Yh8rLW4wsJ)XW|nXUP{ROui*LhahDmIg%1 z+`S#*17qELNnO?`<2UOeiLWtDhnPD&x9$Z(Fa=F3r*gzE5n@9Q9P&sHy^6>&PMM}N zqS!m^^|JEooxbPO(^e)6=);ejfjFnWgvH(Qhr^vJEW$~erKT9Cn^;~Zfk&($nL~h6 zdNeiQ_{>BR6IwT~68QDls{Diq=<4+&;0KC^)dhzbeZC)i@*O4>eH_X27^;1UCp08M zCW*6_^98`U(mg=h1?L_S{6?@Z9ZR~}|E}6tZX6y3V*A-caOtM8N}*1C_>FPh1Xyvo zFW*?L8x=7wlkHb!)Wfh(g#K8-uJIF5p+T8by9ejVk*m9)9**&@R?a18Z-b_va_dVR zowC^6maaT5UlFMy50wKAGMPz(@0(?=x^ru5jgM^jMTS|7+OscrP+t7RjGaPKvQfBS zdzR0rH%K=#nJqi^_}(K`Cr~6`$qBMWoScrBNzQ(KOAyj=CaJ`6&8;;%?s$9xppRG3+6vo?)M#-tuEes7qF~k8_3FPXFhBJgS_3C z@(LZzFOwo}tqseg>oc~Zp}4yYon^Fqs0sJGz;4l2Kq_oXaD8`5B37fGRo2>$Zo4JU z_R>7l_Pp?L$8DLw1yhm#&pfqK)^0=wMPBxRM3@|fiRmB<1bd6K_%EPOAua*Fbu^67 zghYm%CMAi4f@f{tYmard?Ia^|F&f&`T>=&V@{nGgOj%7|I5ccqPHxyJHmyq3s|@x} zmq^5Gzy&o-G?i`~-!uD-D5HH%9pPtu$m%Mp3W`r0)N-0yd~q^hco;8|fAf14JEbM< z)(%>V>(``2nzWQqhPsh6*px5W*QEp9kH%q>_y0^b_KBqGI zd0Z}`ye`=>e9m?0ezYR&hG1^E$2+Qc9F^3ijc}*7F%%0&&T&y+ysu*XU3g}ODUjmz ziB3#DQFZ|d;ClF;GwQC`8Z{;``7aSo;t*1mEM6BV$VQ-Iw%snG5Ui)}sB=Kq7g*Or z_o7M;k)7-vBkd_!CC^)6Rg;ifah$IokX_Z3h+KYbq70K9yRL`Vhg@{UJ8k4zb?@0u1_d)mePB-B_GBEVqO7bh5}5``B_@eVFGN-s zfZXl$N(9^e55C~4BZ_=%3`jM_-1L0$+JA}W5|QFR)6McJ`-;>E5#yBhF^PV3@I9A) zg82MKvcCEd)C%OcdE`XY24xWh6EO;Wz14eC9E*rd=w=f!Jpk0|auew?tNa`U`FegA zYRfP_h6J9RFsD}*&QsOSdbARw%OwBM%W|7+c~7LgI(puv!}J~iPmo5#-#S*XXH+!3 zuD3?)7XCZnJSLx=K@>7a#lnD=u%NibFYQrPbfcloY#$2~hB?ukmP}|u8W}yXlw5`y zt^xJy7m1E^qB-U2*p{DX&A1vF4X}H`i{nSHLQRq_6T_p>kiftb>Y>Y8E(>>UK@lmu zc$2c8HwrsFN`4nqxsnY^6aX^DXkx<@`CBbR8&)cej6 z(*KULuXn`juPgU-4tqRxEr_p&TDtewzuKLC{C#$I)9@q;Fp%s+T3KjryVHZ*)Of@H zVOZn%5$ElHtXVv2!4%@sE=3^1NJu1w$|aUm6#@ep16Ds8E=i;&`KP01@C&4p_TpOu zNfIs1P|hF`9M3MO9~E@QB8WV%p>qT^f+?h>oB9PX$@2YnkVspi?gk zFCr>A-O|lmq)hW)O1jl=D>vdtRFvUau_%F+lY1-k@~F8ft7=J9l4&q&>x)d^M#JO? zzTt(*w&cr1Hh-4XeUv0F9uRVkMU}cG@sUp`R|Jt+J}T$1%X8PyISq1$v-8Z(2+f%M zN7!twYa{dLO4~m!`vwJcQ-OH<(t_65t`CR7!zaliC61kZjccB~4G^|H-{mg!SSW zyXT}lOU+g3XR41*K+lyVqK;CM>AI5+adtB7KPEBLsWW|V!^3BePBPLgxs=3~JHYk| zNUM1oND|wE(b&YpxSSuko;+{G#`l5v7m68oNvfGGrq|TWpZuXeM#DXv(I`3gxHptM za(o-rNLjv8LP5=us7_35N^QS$a{1)=nJV7N@~x|v8sep-1_jU^0+ZWmwStB(HYnUR z*2mXW@XOtmK1X#TVt_s50u)<&Bh8PumRp;NWv^ zUt1Z<%Dka4qyxtHJcn_|?A?i4M2zMJt;7UZgk; z6h7U+T-{JSKKc4;dlYs69h>{so|x4wTN0+yBE#2lO{Pt6MvQg`ihozXT{Nz(>$!0X zrKxEw95hfSNX@mS>$K9p7FB~U*N>Y!Ou4ASKf?%*Zb1<}F34`2ZWQ$$PHNUh&-h!G zmFCvD9&Ue>lrmQks)m%e;`=TUz#z7)bl}h^;qy$)W!Q7FLlF2kq$YJ>dh{II)oEqf z4G-CkTq1Fo1a`7V;8b&Vh%crN#+?fBKDbVgYHehVUS;{|(NG(m#PWuFJR8OFe**O? zO$__het=4=_wv}vT(0&xpJOHVYi_i&G{<-=ffP)y^Tf3$U)SNVaDN25<6$`icY{4R zAD#C3q*RdnIYkp{y%o_2EvzQ*uQL=^*A2w@fWuyOyb>cCS^@fh*DtycJaj)f)5`3b`3+oVBo%)pOCq66mV786LKq@ZxIa4g2yEf55B zfa=O)UJyH!QGGO%DRx%MH98e62^CQ~kv5ZX15qFdc=Q=tx9hR`zGkQ^MQ`EusmI0|GLR+c*DdVl)Vn4AA(XGL8tmW8sIA$fmng<|YvIwgvl zw551n(uDSVP;a#pt*-|XGAwww6OMX#Q4yR^|HlOYRt?#JY#Iw5t9QybzezhVKt~7c zN1Kq6CT2i(Hb7@CarOM{oT+7RutWyBnUU`RbaLc<)yLuh=tm(Ju11tt!#3-i=lzf8 zuZj_IG)T*r%6GK80GSa@yWV1?QXcMcBP{a6Ys@aKH=nq_`^#5kI_tkW_rTWL?>7Lp z351YASq9}zlK7Kk4YNi^{8R(;v_T<1HM(k8bwUv=fdmSVJTzt|%2qYGT;~1~5J9w> z4Tf)Sfj_*b_67QCJNpA2e4}=C?RSA(y)^K9Qdo@18!5r=|G@7NP|?fp`FuF};5K8a zF*kE6Z}ZSWYmLK&(5yMwWAqbt)WzNPe)3}1G5dA4=UvscG65})28ppL=b#kM>ajB} zz59GYP~~W&%7h~sVlxS3O!<2E0&sk1F+RYzotwz0TC z-`%L!An2F)pTK;GrnU39gaqtX!bQU|ak2E)(K9jIIw{gUw;8Um4Bp%znZH)kLIeQ+ zeT{A>{@kGKb$b;IJlT1MzUlX2L>miJsCYy~U}Mk;&|r|kNGNEL zNJLDGRB)a%mn5kIQ7Y z@=a)Tf)RCoQS2u7Q%p)XQ;`cSsH0M$zG@g!WqyGdXQNmq8-rF| z+aM}dN@0I>L4S@>RGE7++x~J+0B@$j-98-Z)B}%~Z7!G@1dcnw@*H#6>efgQ5FR|f z00Cw1cc=f>W9=Jw_XEZ*IeBne@@$VMD@8NTU0OF=5b4J=(N1Apd@dhArOi&J?SuUv z8Z?Px2An5YnL6SyAy84CXEjs^TO4x#zTt<5!0me%>7VT%BXg>>GvSElb>T;_RS*qi z+l(4JeO7)|TB2;2w#HhqSi_rIt`o*iR3k_-AAK!|8_F_JvL8;dcjG-LPne zGA;;uWPI+@-XrQ886NQTNH0JQ?J=Q64ScIh{~8k<`G+zAdd$j56+N5x5)3hA@k5C# zKj03kxjK`OP1EWQh#dRhoiZu)9;gw~(SZ}(mw8wrTox~tmYa}TpHzTA_&dLCb<8wj#LV$NI&pZ7bkXvm$#r_1Nn(f>ma(o6 zB>pUvh)2*vqpo-eSt4AfKmT9 z-C&EH`c!8G#5m7MDK#`rz|F1F;EM+Xv8cl@n(%1GpWv=sbu`yIwhjA`xAWZ~YlcSa5wIEJwOPW8!2K|GOx2-!VfIW9tu@5y?zc>6kN?JP)Q21l$w(%m zC8c!((jSD$Bq$~PYqHCsiO}zv*)P1Ex(YgAiy6eD|yRNXO2j8^}y^<-ev$eRVbcUUP^0V#VGQoHzoWua8Rex z9!<=N6nV#AnpO#h26vzoJSwUjFAsv@Rw?ZxTjfFvjX(RLjzYp-#+rQLL`@JXTXKh? zh{%*bRX|twt=N}=l9~wKgkVXB+K%9tG(eyiJE`^OX9(l@_We7Y&k<|7I*r`d=QZ56 z&)q%3Esl_(JLj!xX}sVaT%Z5vT^ngEX%wdOAz+#OI^|#t4V`hM{3AF0DarszWw2@9KZSD;h#|C=f`!h99~I)U7`hw{q-D{ zqPqil$zA5h;HJLZRZHst`rLs*)sOL)4uD|Y=%H3%V3mJZFjs2qv&jjJ6!zHhy~P2lMzpaZQN#)o{`-C4V46IBz6eu=xd_KvFy zLhh7l+{1wM+!~4F zhE#Q@93JH=IP!4oCj5(VVY)`B=Mk2$i;U<;t(bz2VVbK|(ZtF9gpjs;%z_;(L6u$$ z^#n=to~{g*%`15_S2$T&De87Q9~_Gx5p8;-nrr;ua{@d}fW#MWXMBbnSZgck+X-pl z`a1OMgaOp&xdF7#aW-_eh2_i78v9L|9*LkKQHo~5?vP2_qs3ttw%RV4=bIDX?QK|? z-GAcDiy_;+b#kGUv60HPX1Qn=-cb}0|J{9l{#Q(zY1@tEjrYAzFx~v4uTM}(|DMhR zL=)!Uf;)wMh%ciXVSVocnxPaNUoSX)-$DAmYs{bg2VcKy>{-5T6MrXOw)@_vz+%0= z9nfHSUeD2R`b~SM$}cU#c#vf>eh8-%tKq-JVo8cX*pwKd8;aEe$HHZ6Za6sEJNgZD zfMU+#F3Yl(91%(!xgowTUR*4gP6YVwW(Rx}^n-u<;|6pvAkye&t#~Yu#4-Ks&i_a? ztt(01fPwDdRuoZsS-eI^+%WEGiwD3m0srbpN5C4@ssq%xR2mt=03eivrqXBb z_WcJZoWDN`4ZUG*g(6$U1WP`p*kO|$7Tq|jJu|m5H`!vR0lsbXfHolq8nqX^kMBTE74KXE4F=-6Gb#Vs!{$b$-1NlY)2t&@kRIynj0CuF1_D=@Kpvi| zubJH3`xmAU z;p&e^K%{tU9=t)InMf8|&S6JxVSik`Au?F2rkFX)OHhVD@6PBq!u0LKflqhO?RNr9 z`Rgf5j2=Emg4^EzaDmAWL#(^Nfq2L%N;b#t7*gVBqSc4ZM@AtGsc^dZ_+RD4neZ`i zE8%1E>5>pwcpTgy*hl%5de|L5wtej{+tH)&6FZQ-yvSUJhO}YwsYRh4=p=FFeDicCJKD1Ty?AWKk04Xl5vZf0_$h0vooId;lRgX zRNN?=-fv$c*;&!+nDJ5y!|aYk1lgmh+m}j}<$$x^8=yf8Xq2n5oLN826_RcJgk7T5 zG;Y7{W+*EXB052!QrbyXR~er@BLKZdyMaL-LqZb zOI2Ap_i-$E0$jD?fBwxA=2BJtAm!Ykrsje~800tnHa)>$GqYgX>4(XX2dKs?tA|to zGS;oz1+Q1UwYIN=5fYNd&0vahaLc;(eQqQ8EB5W+al+AM7cv#6&|qo>hBf zPnu~c)DzD_VJU)Hg2MxtQQ8??;l6Vb!Z~P01n4a7-#~?_U2Aa8 z@Yxr+E6QCpRIkfQrnP0e3M=%3v^mm38XqXRbp87c%;zZ*^Zo=6mdT!!;tEAe6ip)C zIL@#<@No*5Oe}~j98YBAyJy>kt&B_wi6jsm z_l_4P!;Zw1kbn|f;dYm9gPu{du}xsn;VFlL}Ef>OtXOat|A%?Pp! zgLN@P63h1_3SqbQ0h7|@s|TubXAk+sb3FA$9-BHYn~#`Z%PMA!rQ<)Q-PsL5w(`=r zX~3P;SfpQNBbM(!mA3;06yj0P;~*Osrc+UKHo!0Rt)S)8Z;Pi`_?S?3O4xm z5zsTClfYgzEy`H`jq4_$42yxf|}(A^W~ zNhC6ONqwe#t(IH;jeQ4Rk4#)&=I6bkN?|dzJy;+?oTBt@fb6Blr{Aq=V)p!T`?_V( z-osy~AFk?+ZZ;VlG3kQu-+>W8ukG17|Dfu?QFLLeIkD6$FUNO-0|cr$!*^L55nwEz zOW`G!VMsI6hgzL0>SDuL9HUbH^^W6=Bu!f_u?Jg z7k6T@e8r)SxL~g3XcQU6p*y3Z=N)|g`JcX$Xn@cxy2nDo1TF1B$<%#Wd~6&1s3CZu zeWXqd;1_1QKcd>`!wtkuwvdoA!LJP)rVqfMWIFfyOvjBX)%$wLX#jo&uvO3|jRD&X zn`M*Rf^^Jh2>t4C0V}L#fA6@^t%;4d|F+|0!~Q2yaDVdzOoIYpuWWfXyn%$Rfu7(x za2P2vvV>dLKM|E(l3V}DF7pY!R<^%Lp6th8#3YUcF1w!4WML5DyKv=9;B_+78xKqX zJNsi4d}Kr@Q7CD{Pev3CP5z?x8{dpIgmNu>m_p8ArkXqh}`_q$##`fpebKm~B0>+()2&=Sz0?ae~$MB|L%A6Jm zRHWoV=ujPyHH&KFPZtrEP1RLZWS;?$Wq|XeH9%Zvc2prc0d49l4E&WyvQbE)C%t=D zfdu7+RFjMbL@XxHh8{WXAF)SKjGX~d17XU5wc6{!7=cCq9tRFE`RK8-+S+RZTTNd7g$)Y( zl*S}d(cXYbwhc`b12Qw z7YoA)$g>+PiveD6OmMep-24bMwq|-wIi(w3Ily06)f|tN2Ta(p+wy4(b;`vTs1@$7mcn2=6M@fD&qq`1fu z=Zvu9M3ijpz??W1=XgdXI~vkmTA;`Nt1s+nBLr5k^Bt8&f<)fK1! zglZcfzM8%uCj^3Mn;Szt(NGWh9!SLDY_i-d;n{_MhenCHS8)oa{w^Te?3f-!dt{(y zKgr)7e@b40v)C}!(JoICqC)m*MS`?*qq(KvjhvQ$_Iaf`Ka>K8Y{hCoo0kQ=BrPnLj7=OB^w12c+Ra5GC+AiIm;#7SZr{$7}J_*Eu0Slb&tt@k#@KzfgBwQ45fKj|r z?{0_%1o-^d8?1WYg-K?>aDnvVj-T}>{pn%NG z7to9Bn`&h@`1de0Q|7F}>CH<{^C}K+_{#|C10K{nW6YKMMOU+tXMNJ7mQIX~lQ*^E zeTnaO)cR+o>X=?-=_St~ z4D^<}DQnbZ?HMJvD>$b$Ke)IVBJx)ju^eGx#T^!1{Mww!k(~qt1)ltfy}qWo#gn3* zC=lVycx5%JEQNoO3@1))5O8_MPxi*SUN8gOUkutcJifn!|6CQA55b&SO#c6|j~%{N z4p=M{Ax8CAqJ0+*H&l!?G!qZTQ{iuNO88?5*VyPT*BM-DL@kA1^{uTq&L;&j)Jq&&|#6a=~?zsrRBYy02?v=6?*H zg=#4y1NUcl8wRT5Hp8D)3V4Iy#X25pP4V+Fs#tfX1l>iF)U2&{V~yCI{9iIh7q=;A zqiZ+ljAktru=SheJPj!TGH!Ibc1mx_048Kxaz;b#;I=YBbyaPdsSPJWbnIfcvpD^|0d$d<)O!$2RYz}HGk4i(Kl+7F>64<>_v?%OoQprA zVq=N#eN+Y^dByMq1jEfW#EW0t*4K-Cb;M4Hcs=KbwE41*y+fbLuuj&*a0;zf`a4%(Siym!^9nuy20Lp{iT;^oAX8_Z7*TM!%TLt@+XOxd-Ikg*&f! z9*PCn#_y#wglY$|l+9b7j+^oo*saS(B)>`%odkHW;Z)>$BaEaoV-fmq*x(Tc_uG#= zKkr)#JpVdVuM~T=4#-O*ekik))7}-PK9?3&dMyp-F7mSG+m>)$b%H^#H5r<*H+fH9 zI?!-+1qvitC4$t>{M5Nrg9 zjTO^BZ~nx+8`mnXnW&lbg z&Y?7C!bcNb6biLCNrwHs5!pm(nLK-r>hz?(oz6$CBll_M%8EtGXc4Dut0RqE^>gr= zKx^P}DTQnhQEWAO|6Z&DwsDO1l=?}?A@7p9f4o7n&RCb=r-80)jvY=&D%yaVUM^e0 zABc~1UDXmN*Zvr>auXbWzm%>lU-GYmJ6OVlXs+}PEaW*^dE=6A5#SxUk+Z`a6FXH@CS%$TCbd%yc2uXw4l^DOQZ zSjVLcR?HTGf91xU(QH290sw`S+3Wm}X$hr~+?e4SYh1IG{2ZE{XUmWk zYCFjl&lT3Q!N!U|3v|b@s-~Z+Z~6!Mmu-SktI#a=M!gg0sq1{*r&D!6E?jpGPjQDX zjgt6!OBxXxdf<;p;54V&?jd}8>Zbgo=lskRkwjVe`FgHUlL4G}RA^u9E~owN?#sLXP~s&Y1_q1DEAtsAm{|`n2G^HsZ8YJ&uUjMm)_6& zzJ8jtOMJOZ;h7KyGp}v3^)$)IapsPH(*5g$KSBs^M$2oJHPl=V#vXj4B?ABK_!P!W zl@IrNSY#(GZZVk(KyizM^HV4p-P2ILH^K*i_*%Bl**+e>F*fJyb}iI$S`+ax9sQ&z z73h6>+m=rJoY%mYB(j7qQNHsq+djs7^FZ|P^;mSOiVUVvr6Zu0*w;EMrv_m26iuRf~p!6tDUez zpB$I}TO$Jr+ccqi}U&|raXlxoVvg;h{df>h{!W5Mo_yP*}4 zMAtA84F!}1oC!R}B#70%0otOzA>;?9gs0;=&|cIe4@r4T&-1s)N-AL9Djq55NHt~O zM3T|BJi*ar;J-52f}w+IEKKxRVkOj^AX=jU9qa+00r){cMVZ798QR%e35SqWqOo;i z6)T5;yu6Wix$pjDQPE3I*vii3Xb~bL2w7EWrmEJYWmGK_GOc zGMQYY0z-D9(R9~Hue_amjo6k%NM<3<7T?-&#_e$=k7xe}*g1KPvmfUMgM43|MH@9r zOzu0bS(@h`!jbj~MnX+?-jv9bP2hn)f>fk03&i!_*SCS|mJ9~%*;#llchZUGkJG^a zM(2_2|3;^2ys+P)cQa|Ol+{fvuTNc1MMM!Bk>*5rv`Z;cC?t>jIdD`M1}1_sB)UO_ z_zCaH;~gf7B__4_gJB;sNV0Ls1G+{6XEpNG%Xqnp*lH5X*#C(axekhQ(4aTG)niIXl>e4zaLK%^ZdAj|UBT)Gw;!1% z9CrWCE-5y@6-19-cM@s!w0!o|fM_CieAeWz17f}``lrhDfmqDkq-2`2v(AS#?##Y1 z_%|$;+*aAU)ech*_t<|q`#TBy?f#$ETMUm^>pEEj6LFI}%gh7Vd}JAY1ClJCHLG;1 z>9SVAI!6pRt4brL5Q?i(PEH7njJKC2P@2(rGud}(jqLp)P|^nbie07@OWUlK1D20| zjh@F(dlEQ~%jE@Fe+82w(zY&GiA*sncq~#v?p_5=-Mtc(gRrp)BpCi>&I}R*eipntL}4? z+*LOk6c6OXaV~1BVL;IaD4*Nu65bpxDEMYIKiyhO7i_|-^sHpvrWfrY;2~f$OLQud z7PV5E)Bik(y5r{VcL)X|{AboD4(7UZ?XNdF-dKFD%x1echu3|dRZC?>U4T>{k)?sD zpORT|CrALDkxXRhPOv}Co!%qcD<2}AVCj6rbK-*Gr*(b41=yWJAO6;v%tH+fytNw)P*9^hu<6CN_G5Ow6qE$hz&CC@r>cv7E0h7 zjGY-d8s3UTUx2>t#si%0vVukWf#leDf~#|S*Pc)rbWL@1Vn3)YEnjboU8Yu>8>nK; zd3u)W1Iy|_@)FDAMvITeMvA<$qxeK@QmYNPXL~!{k1UDDg>!1Ctwjw9<-Q-0Fpmw+ ze^pv+b4J1?{L<})GSm6XM=lGj{~lA? zhkC^YXqqn{YAe%WbiDdc^rhB4=7y7p)f<0=W_gk=rsJ7RAYlHeE!~Nz;9LV8{nxsm z#J@H{=2|Z0{|o;H{hq64$rcu6)pty6Azl0K@P zOp6Ys+v3T^Rty8D?x&tGdB}o%xl4$}mepo-jsh}|rpt8DmtqJd7vE?J;LpVn49Fe8 zSM+4VA{Vw>$l}N0@GK@MlPHS zXEtTeZk@Cov|J2v%hJBnzTLr-jweCG75_tEHe9$WUq--l^4W0I_}<5zNF;tzT&LW0 zE^W@KK9ZP66q1XkqRQKSev|2XM=l)sjiX`$=M6#U&ejGS$Pu6>HWo#a#f334_yvon z+raW51N#qJ@D+JH3X^=oE%WtGrKb;NMxsYeo#+HAxIkof#4%G&?P4Q>oL1JY{i^pn z3Sd0G)b5ZagjtW9eMSJ9J-|05+K5~ z3Air>(YEGvNMP|^Dovw>A_YZIxvzovTc^~`vEpfZ)AXQ{|Gf6TA=g=AkZQH<5i2c!sjt!*)c@uEjV+Yc9}Hf(((s1=XuI7zZ*>}gJiP>7<>Q5G
    V^sFx?Aq5M4$ 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 ?p`b zmRlHlm`!%}=)j7a>#}iIw$Jbr#~1fc&p(Rqr`j{lNn9XSsHg5nQpY?-0sCKmUYd8w zifr?Fuu89Ov=e&cG6*WaS+X%w^6sz%=2LeSf;6XglmTU(%`U;+*%0YI{w6C)-`&^pu+)7K z*uX(M;xD2L6XA!W6o^XCoA2nF$0t)|K~>xbvC$@P=V!BeoTM$KA9*=E4ISb@o7l%B zMq>gTbT%|!4ZI(4fy5MDC|+hOFaWUsMjv@RnDF{r2>vsduPOClA_08Qv4FKfzDY!- z_a36b)b@d>d&NDS&7@wPrkk%8PXGPOX~r}1cX9Bq_j{tqY|)N+yAZI=^smto?8>lW z$*7=wpH>R?)tzchVFfn?2SADhCuFI10i2afo27sF|4&MveJ@p;(;7_{DOVTg;T!0E zJ?+-H0F=BNp9p(24Gm5_cu74gf6I(zunvpMYa9^F)XakG!iV(~wwb{CeC!>ob?qZ7 zRX5wvqHLGjYOhvRk!KR~Ox@mhP0X=;b#FvBF|x^#NHgl;hT@5zuL4VdJAfBCb;(~}jC>Skq^&n{r5?Gbww8VUc?Klg7BfUg{z zkf>dQY1F#?=dj9?FRlJVyBC)5KR8oIEVe!xf_%iRXul=ak%~9#WZ5s9A9$t#7>Ql`E3ij~~{!cX=Vsg>r5xAahJ4<@P*eJnTT z>N~;T|GdiX?%i>WJ+O{~!-`y;ZvUPe8gj1S$tyy5sCIRU#DZ>Z-#!2n5Q13KzxLIA zQat0K@j4r2f)`!K_{55dzOHc^VM4a=1({=Fp(^8_(E)WI6;038skDHWAC?fQ3s(#^ zzQUh04prO{U!O+Sxl+TBcdwh(KNWQqb!``g(%#WW-`jLaZ6>LfUPAr%y?VUed|Yym z6}1T;`waBn9O)uo;jh^0Kut{Ef>QOO?+rd5M2QhqY%75`L&MD$`pN0sxJ4K9O5c-J zn(CmCszkQizYIPYyqK=tdD!*=U(#IUUc-q#CaFXqg;}yFcfHoc9bm(n`(#7*WX|P| zI-bmCW87X4e49@}?TPW_s>Mg$$d`dz8ke};WHS_jw+iDbdA@Hmw*1ll4LSej|^ z=ExKD0{J6)9Vk1y|6dXT0(G11X;#L%*EuEWFwQa-Du~Zbd==zE&^4viz9L}pg^JR; z?YAR_H=tGh@Fps!l|gJ?YJXvG#6$yPMSYwfXIfvJU}YvOx7|xi=aYP3UfR|)QB&Ka zQ*FX)rhE6jpsB}g-T8o(SUHnJ$urQ`&+s!viQpc-pr(n@Mky1D$Jstf$8O2nn#3&q zh~W5yA79qPj8qIcRG`m4qsJX4dbAv4Cg6W_AFRS|v0Vpk@cGdnh8pgz1SDn+a}~lp zeNSDXbNypkMC2-gx8``U+-CH6_!ajg$HBJ=Mcb%J-%XWdJ@n?&qx_&v06+9pvAcu| z{ufzX2ROC$P~P(CZUPtdahc%aVQ%u~T@Y8E>tHwhJXFdmP^G@QYx~FsIXqviZq@avWay2;%EQ;`C;qt= zDk-HWFE^RYrD$0WB}dm!dy?}3SG4B56K52dZKr_C9TpIC@bF?EG*qZOb48Dan%!>e zIR_>0^oB#WlTDk=SrBL)`t~JN?Co@ZfWo8S!v=q#gKYI3{Y{CzKP+6fqq1ulONs5Q zMWyWyygqlkHx0p_cQjV2S7cPN!w}ZA^|e~5lH5|#PnWZOaUR9$|GRQcllMT>Mep<# zpW(1V0jBqV^Ct#>mCy~6GsLHT0!F)D&E8pYo;k0-m;iXu&$k(cSq-JV!!4F?E?&4o zxS9i+p$J;^2b24UAM}WZXXcOs;9;7tOIkR0Viq=1(FJ_%%QTgTB**UooQqEJ{qt-6 zX}bfPfyxfmGSpv>j<3Lnu@)Zt>Owp%!h>j z-nj|ut`RN!pzP>!+mSaHan9%q_*}g7otBoaD3u8gIcSFb+Uw+V$+e+~qp zNa}cJ67>o8!G5dgUbywCjBEPRf@iSjZ|m7V1J>WbDyw83pf2t_exBq#M&W|~L=fzg zbFX&-+&H0o0(awp9$=^?Y6=Iuc@bcZ(xFFgJ5|P{fg4ij&CW$5#pN;>8EF^lYg~qO zP+j0z@Hmdk&mAkgf!&W~Y!fU#8(YBcSW#06Gk;v5?b_>85kbp}7J$Y>!dN`l@xC@j zCNrhE1vueg)!>Ob?9LUXMsq8+a^UGth9Chy#=;G-U5HN%H$Mmbi94}D6YFhjKuDx4 zi6MfWosFTc5E{-y>(`AY5yv~5<`-h1fz-Vs#dcZ5#%?oS?wEogVoVtl~V;uAnW_i%Hm(ev0pBmb@x#!|Y5S1^_mpoGsoV6r~^g-}6Gpq}F z3I^MK%h@CnF~u0qWtKZlxO@AnLEnsG`Vq=@+xtbg1LAFm zDt!B*|FIlth4RNUeC4ZMGV`Nd^gh;#7d$+QUq0(=#vAdry29_|Yt1K!o6!e0Q@!d? zUtqiXUvJyts+TVN30r9dC20q7;$uJ;mqmFm1sz~n_n81qkx*o^lE3Eheq{!NL8fPZ z;Rf>%BvDea$9}S74@J~Xs}DIHGgO6mor*@QB3>O1wU%Yvh1HjH3cTe>{(;ExRDMtrbPdQylW37j}wjm_RGp zi7d^W6JpLTO>-zfL~(iL`vV-Y z=ckIhy4c-LipfJtY_aM-st}7X5Ef1cZ|n_|lRp@|1Ltau0QgSCbGY^8wWxLYYZ&7q z+Mzp^zl%!l0|5hx_kSuyBTBZ(a*EbbBq=%4`(Ux2E}0t8!n#^Fck zY38nGXm2L$lsN{@#;3*bv`Esj#c$Zam)iO4=yv;qol4AI>y9I>(en37DpQ^SiMsi_ z-k|&7N>M*j&85H@!x3TulM$>iF?(|oA zl*geKqzPb^s8<*SgOLNvJ?RoGI&#Y4Xl3>$TniLLTHK5SWjOfGDiN$=wBr9AWT<^= z(5Rj+6*n)R&t-1@%|kbb=5536+(|90qlnZo62^8rE=FZC?07N5WdU|5-19}LU7Iwc z;w-*4NoBBqGY~^Pj7fAXliQ1VMRAt(T|d_m*RZU|Qe!XvF5Dvra-1Iee_Q~B^ADme zYNKQS$n}#|1_AV{A3cHNnC68A%ngO^R;?})xgTR&yj?fR{1OqfqV4#Z*cQ`sXtkq_ zG#?2BB?{7c4|h=T2)2YxUSOR0=W#5T(f^BH9=X}K-}Se~to490tS!zEoQbcUUFZ4i zO4Q2MY-fm^ywar<6VvkY_zcY6yi1qfPsqECl<^!%1`395WY85__2L1IDQjKoJD1#I zkb#b15O$xnV5&~0be}en#W1tBlF0B|RKp845bgclPEefJcIEy0djjfiXGF|}|AKkh zx)P=WCKCR8XObSHKXI=t>s?jJSW|e9%D?J-m1%C*U+N9#s(1CyLK6p@$*$ZAw6Mog ze5zN)-SWQcm@@ghj~q`UUb?7$sQAvmqwP~!Q(scel_c#Zx<^x0!VTSG&7+1E9!x~P zN8V!x=Rc`p&(d&h78NOnN5X0Eys~XwYXR$Qkr*B%TUE`}IW|Lz$F)TscH}okFU*A# z{_nlUDw|AC1fMkT+oO9W@32wg%_u+JX&z#`-W!b{jFdHt*3JsBNQb!++sLWlsS>yA zP-o#x%z5rde<=mGX!; zYGtz#c5+6=HSY@=9FqW!uAzDv?H=m1kjQhOp zB?T(FBQUIbNsSb*y&eE0;&1v3gq`owJL|4A%53b|j6(Y{Pb$UR(6zxKku4s%Woy~M zcGN}p*Aiou!lF>D_(UM2XA}**Db}vV=i0hv&eh0ZSRciPp;bUu3ppq>{c|n*ghXTY z%C7J#DF7U>ELQc({Jwd_oisJyBr%tNv()VDE)`Ps-M#U=>^w37bRs7ai?|kK$eha3 zSQ7ZDO(@{~oaCKdSwQrr8Dd)WW$M6=q3Im?Mt)xd0*0r~z)DPh1rUqV_=$yI^eAU- z(@SITj@4c-^1I<)qJOnK0=QrFYNDygbojb3Uc;yjT^>kJjC_q?vFPzu5x&E3F6YTc zN9j!pFg{`;Dp!ifwaY>}-U7=@|9B_QCPx#qW&-&^-P zW3=zS0sAc<^k|$<^(Y6rk{8y3ST-?s0Y9zf0rt1VSQ-r0DJ+`z8z-7d?0ng-RFyLY z50dh&Cu&Ry!o^#6bZx)AEi|~%HDdkK+D*=pTSE~0wWQtuI=2x7%j=h)lgV+D5h_@G zMJ5I{{z>sVem`5rq?^$#mQ~B!-f@V#BG0%bLDy}{UiW=4p_-=EWVY9xt;@ItNJEyX zI05vG%WgrG9gD)g(hN^a>VzkbO!G-6q7mvA#QYl!$tcsmq13PBbD5Ra@F70mPJ4{W z*sAZeB=V!)1-FH0mgg_Q$Qj?0m+@|*2{rSY*eM^Hc*sWM6qvf_dNbb8?4UO|Loa)= zq!oSg+XB>n%gy}(-06q*|9M$>6&E4COWXw|W5M8~b|AGEiVz^xECzfV*eY}Z#X{j9 zb{LP4)7)~&Gr7AKaX!!nF293+$<*GBSKOWph&NsL z3pza!;ep#9Ky5B_a@rj>&YOsXJkJyNL;7cBkvofwm9Wes;PAFcO$l9&o5P=y}N9kzA&6=uL~XEM4~8FP4EV!smH z0mQ)p>oo|ipi6@fTpN%@Q^Dp;iGxLaz(p`@3*?#)5a}??JnXa92SwwL26%Q(w`$tC z+xCjoo(PRnHX*y8^~GHOk);7FdWwGg*~~x}`I5F!>+4gfHGWIwZD* z!u(0mXt;T@wCKjOx@sSFj3LnEu<_u%k^e|!FAUNTtKHbrdLiSjb@2vY%2x%O<8McN zeX637$?}V`vy+J()YKH2pX#6XI5d9b?Xf{P@wRqf&8cd~U)H1RUOBvlkM=MwV%?e@ z;@$sj8|8NY&>!*t18Ed;#gq;?Z9p%S<8}g!$QfVMgI>@-Z+mZR&!NZfx@XJ(+x=tS zBIJcA4>(y2SmFDKX8gB#WBVLkJ1TR9uYK_#doOJ}AOWuh+KF7`DOaR(zthR|1LauC z?XkCtE;=BVFis+q8haPSylSn5gLe%MUyOX8j*sp?u<_CB?bozkC|XeKFpgT>y1J%9 z`#zfuw>bEU#($zDi9Yo~Z!Xf@O)z30y#BvB8^9G-H5|(4Y*{^mHQ%fjgf{RwFmYs^ z{Whfx%%3-;{hKWpaRZT+Qy?z3B&FPk0aa-qEz8Vae$#RKFdW*FP`nqKz|DD6Z21x& zhnr1apY&t+JuaFIutIX;1}HV{r=B6t>*rPy5Epji0n1Ea@;ImJ#xFo z>fCy#fjbvZ<+u%c3;sqnEi;1a{2j6OVDt<~E9q7^o`O6?j-E$@_g2ips z?rb6G2T8JrEYIfkZljlS)tVN`@95TUKeVe^M~(yT6Yye&Be8mpZ)_`T+AHWb3s1ML zDnp1a`goIS6vrJOhk+-e=(&NNAAt{F0-u!jyP$S_KCp~QO`Mf~P$$l1h5yS%nLFa7 zkf-3CtYrFYN&h3c4PP?+s9LAk6ex^;YCkN3b++71?#8Ypp{LC;k`Cs997o$S;7=vS z$dmQA3##lvH;h7pWE`)Qz z!mDEy!V_QwSE*|FjoHeo#MfIL5?I9WJw#|ZH6`8y*@Rbbk)-FvJ+7Jf(W)yU`BNWISqo(lXtdX zZq$TyPGLB9lj|><#G9|z^BwOe(7Fsw0^8&n4VV9iQloFb}j zDd1oxEVJD(@qIDn4(?bUwjmg3X*b1OZ%V$Eq3bagU`;}SK5N^vS)UH{TRY)?Lr%}G zgT0;J3Pqmf3mS(A_#fszz2Xe=uHMW}Z@q{0_J6Q`8R(;AmnuDSV>Pq< zy+MkUfC=X4A`&x}uZ130lkIEk&m5U#SsEWTrl3tk?&sNQ1YGP!=3v4n%I}B;PEnH1 z{JmyA?3asLp$_n=cdLBM>dxUCNGYVh-Aw_VdMo2g=^B~Y3Ap$>M6N@${MWNf`||-m zL0vcUNX7lz?6<6Rfs~@m@=T{=s{syv;X>s1tJDX;lS5NrGB155+ zv;3wW(`ibBgH;l@H$Uu4bI{MUKe4%?`5JUlOOwG}D)TL5fB#Vt*7UF$MhDXE`)xht z8EMFSnF3HtpOoUb>p^{lKPa^5O$Zm#^=5elszwUIkvUJvL%pwYph?xNeOY&Lhp|$x z;QpYSh&$B}?G5u6`LBW$BROIyA#;4tpmgO@yZnwSD7kOMoU~y9)tC;1SG!A5io09p zYjlf3lUdF~_(@FZi2r9tq2C!v-7lxrGyZsXVKOkOQ2K$(UM5p-J94jW-rP$2#Qutm z`c2I);pI5Eeg%Tp{KA9ut?#SWYp2qouWNM925)|wc09u;G^Xay5m($VDYWQ3@*;Fd zI)p>!RtA60XCTXrxw%j<{l+5Bd!gvd`hJ>4P+1o3jdTH@nNS)_S&-Z8sQe*~-%|EB z{ZdW!Zcg5Nl+l@N?ITd>a7XNNv^hc~KRN zRMZc^3ii1QX4~txKX>bM(gE8Is5SAPtIr42rZjBqq^6}8u`ts0+G#jer|@X$MWDNq zE^J2rAs+uqqNwHuI$TeI+^d37vuaYSDJ8brXs{;6oW9`C;MzkYEM>fiS}luiohWVK z1wyd`yBnbU2Ehh1(+OH%>NzKTQ(rbXwg9HJC>G&I#V?U-ixWrJ z)Kqp_GHr_WF`gFXSC1ANi%M%Fh=r=bK?n7tOy8ymmAG!w?t^-rS4T&zqpO|-J99h} z2AnSR(ZY+|!ATJCc}$>OZZ-5#i4UGuGU}m2>(VW4iU<&Rzf)9PH@+gPGVK+j6jg*^ zzD`wQ6#)bdO_$Qf3B@V{F|}sMW~*jAIhto|L;J;SDv$A~`K3U=Uv$6P4#hSN6-MZh zh(%S%Z3)fbf;WuZmq_!lBG4W`Zu@^_7Dl4EV{t26vEFm>`>_~0a92pyk4%9!bE21- z+h1M<{=yt^R`Icv$3cwzaT8y2xd490rLjKFYwRtE7rsKqbSP>gH*)OV7+Y&-F)9Zyrn1rpnoPR_)?HF z)56%*7VBnD@esFK34<*j)-Q^G#vH`cP~%2>%5WU<>ekQ^rvC+t`LXWk|GMon`#&Vj5kI4RV}%Fj{;qn?A;x7!@#6!RgJF2`bhhSUru30;hKWkM zz)9J0L5$d5-b#FMJl(3vM> z)EIO|@%_XVyz#$wWI@~p;KwgiF@0A0c`jy3ULf}p*|QRj z5{hESvJ%owbgCcYI7*}qq20w)Ki^OCn3b0-J@Tz~oeVhr(G>@yiBD@krbKdx(htlw z!?W&c>Zcyu1XW!~6aQESZuVGtw_4#o5ZL{p82HSR|5@1uP=2q0E=sZ^`P73IK3};D z@HimXfYGL2#wW<3_qzx9S0U~(a&l%>UD5@CN)o`@XCC%g|12e3kFyyUmYUm1%|(sd zrkiWxrVBn|np!ueCZpZjP9g?>%-kc^nFFEU!L!+;3Ima(sXyr;Sh5Ae$?P-4XW6{m9nQ_$$M$0^vVrOGoW!Pf z(wa0EZlbXrzil#D4fEkXK(Yl7n>0v2P$@UVUC==U+K{YPi_mY1TP`KbF9>xT+vy#w zOVtfMsNb=JG!6?PY&!SsJ?8H3P8BFqj5sBXN=(DJ&LOM=;5;J{GsUNm-~Krl_z0Hq zzX`Ft0^`tzKhMMZbmvB2ans72Xu`+~=dbvU~2B?^Dn8N!4&Db};C`aB8DcYtcONASNJs>&cp*`wb26w2403pXi@;e~St6#YJ^n zd9gA}zaA6XWk3Q4FN^YAXgG$!_D|%qE=thU0&qac((EvKSp0Ndbysoi2`niWWPa1$ z2pJ;xJ3b9k{u|m)Dt-y#{ycEJ!NNPn~?Ensgh_T z5tNB`RhQblycIX&y_K`C<6|@gId>b$c;WM=l-)4WUn?ayY9&5*Fd&F>G9-2XzggOT z-M-Yn`Il3D@a22JLq!&T==7&cN8@v3tKH{8*T=^y{dHCAWmNXUXg*c>{%D_;f8K3v zle5Xy6R$PvIU3~_=ZBmT3UIA|axIw|m8St|`@#liSw+JGID*#Pq<793qeJtWMsFt_ z*DjZv9rUlnN|g{yr(iB8+z;ixBy8W(2YZ*Ii94m}CH*40sc{j2pBW2wtH?;gnlrjb z43ZV1w}IUi+e$%|4~u7h+tBL9a)UBoCM^MP(XPnLI0}C~<@PR*niF|N?-}$vyoun= zSujl=6A!KAVW^(bTvjfyZ!&9#EbxDgi#G5VsF-p#rk;oQhI2t&MLWzz(nL-z+mA{W z;jUC61nJ_8haRcmYoHxYj*omsj$Xq*(+|Ulz*}c={KcObjhd#K_kNK^J-@-`$%2?i zK(cbw9R+fU6j8Ih{W|sZY{?6QX5j>viklDDL=6@M`z&~JDE=-h_Y1+NWcISB*CvMc zdrM5&mw=TL=$~#PY9NfB+vMcstK{)rXO z7cYF@I>|`eNG%EX^rY=;&-_D$Yu{l#j{)pkAzRfTw=-{&~4^MjKlP`4YP z9&>ODMCY@V&|}xEro9joGrvhtEz%0n&5b{0*?M%7?Na7)@rvQV`)2guhciI~MZ;QF zLS5g}^r`9*)PfRtZe3Ii`D6T6@<_|&%pI0+aP&#LB8V@YmBx1(BDhVLUq!-*=kjV^ zd8&NHZ?XuH(8Ard&;-C*C>LmOt%P}*AoEeX0IJG8-@CYR5n?~6e!*GO+_Gcdf#e5w z%1}Xi6Ml(7zGc<}Mx=3nr;k%%T)CpmyW(uB%sDRBmEG?%@>{e2;~4_y9(y^&$u0ZI zoGyWfuHD-bqG*OWyY63%S+08m566m*nEt_MpxbA7;anN*kt-a6gq(v^~C5w*o%9M&{0`PW*$GS}vDh&L+jj!6Mb zU#CipU|TIcJP!5o3VkL7SGP_MEPzmJK&}IvaIqZuT_@h*+DD93>E&z*2VCdWxy;Rw zgXzNuF>KT~c5*zgfo!aQfV@-ey)qKM>AY%?3NEBHy-J^$sXsTCg4gG=AYz`wKHT* z-J>6CyK_^oDA2+9X(Hz;=Df5*16L-N99Cn0X!fEswS5SuHHzDgsi6pLP4Mduw|5i} zHN&pI8GI)DS9>d>9R?Xjgt+ymLRuzvkMLfrRWd@J&7KOs`>j{be1Vhx-E^9bkBTWn zOr>7sV0so)_JR`M5Zh&XzL1leI7C^8=8KtQ7v8xxNZ z0^wPcBfdNur^(Yb|KUCpgkTa-)&r|$6fX{qx7lxfW1{T4aN(LpkQvK?FqLrdY_Pzo zxIjlHMY-X95W2q3+l+fEqsj+pU(rRmKN6Fp{n#ME>U_}W0I@orw+}2hpY7}D^T(K8 z6P;%AAIii2%b4E!brE$2$}gA$?lM4RqCi}?f`-Un5KWO{XnHaT+j?XRN2Dq{i?-_? zI_qTe<8$pqSaDa)gZTJki&FYRUfw3q;YG9BZ<>)$=)t8+y;_+$-474LwrJB z=6+_aAd}#7)Y#q$8pe33>B~0NBYG*={3iOQ}sL%_hGWx zLy6T3DM2a_QvRltRK(O3uiLC8@7L(@Gd4E+j`L)CcmcCz+kRJ=q zj8uZ(<8jpTp&YY9U$kWPBzBIm{ir&L?c&TH^X`^7N?vI)t{-wZ_l!rfzAcwzpEuLi zed(2wtj<9B;8QHU**H;%-vEHl)Dr%?fxb%KXdZN8_5;QEvnAMlEXU zep=fd)Fk^}j$f|GDgi49H50^W?lPeL7S=@{=w}P{|89Hm8ov1DlJ-!YY%%^T8dgK|#IWYV(#x=^4ze z+}+hOl69k5ao}kL6t)Wv)KgX2ijBrq+l!CH*=_n529~?*UYtfo+U~RM^uDlmBcLQd zxVjKZ+Eq_Oe0~S8gLa4G$q7%=sTVPZMNtmZ6<`=YB%p)7uh1$sajUptLC^w!bYilK zla1GwP}D7sD!-8;7r=zc8I})f*=Zh^QD+E0Rw3Ct@dBABy!oWc2JE z_L(k5h+awt`=8mxExmuVDV)`~c=DipY47spOC)g-%t1%zr3WCl;C;O$T;q+!Dpj>h zM;`QFb`sqj*Mrxw6((sx{>yLY8un(>9f%pa8L0Tf><^IW|B2K|gJKA3lwHkHR2XbC zZTLf@lB+l+$M5K96D#l4kj^|1Z#IBhS%v!eT-}r98@;%gwzzg}q@Q+zgxN*@`PeIW z_|-H&d@T2Yt$8IoG(UWNWL1v0VmQj)ygV$&B+bZ^M^3D-sQ}f)k=j(lO2EAG{Es~x zUW~x%xjt3D5EB9(6~QgVzoYRnPEg;C@Z_C#@+)H%ACUJvvsE{yzn!=Vu>tWMT-kDX zU{*pKzQ>VF8=4ciGAqhB;rQCzJs=%<4Y4+;*pZ}76oHDC_q=hIy;WT@-qc#u^`COu zf#k{7YvT_l18@m^ya!E51D`gyAyYbn5;CLe7)k72$_0k#3wTBbN1oK6f<`CAmIsn% zQeFjru%d+g-q8-DJU{xU*q%8>UFh^wHD8Z6gOHhgof$__zt&^q87@d^7Dgag-Rc0S>h<-gl43n; zudFY?u!0N{FAM6%9{j=R9gD%53jE+KV_+-CjEx>-#71XDVy&V_C`IqG1*1>d8#u?SuEO)=Eu6t+@sO9^U{YihzGTiTBzS|@ly^h^HFAz1! zvk;fV+w5~eHG>lyEno6v7X8#Mk?w4?ty8NhV%;H3Em|cqwroD9YYM}Zi+Fh$p~Ppf zRrv%pkkala!&9^z^wMo_GafKHZ}jP*atsUR6BD4k@?@~qQav%xV9+hSbdCF*qCpDY zIemR3t6*j4Gq9m>m}52cWB;(g>!UflIK=`NMnDG(+Aalek*VgNp(y{#V9y-6s@-oAHchUSo}@zhaOg=5g{4PlvaeZ;n5{Z%r<-D>0FhJg1r`)TYwZehr@dq{6)y z+K}G%58o$zIhf;h(|;2Hb9^_Vj4XJTV9#Vf5QiRm+%*_dl=#_r z23y-$jB0D*8dJQK`SI1cj*WyZVVsuc4_02+PSfy&x^E#NY=KQX>- zVob@X_t;q5wGF)a(g4ud7rD_|Us}(tp&s+QsO*Tgy)*nk8y6Rk^Si!IsuS1nTW_sq zS+OjEh|~2Em;Cp5yLzl#C#r?s46PdI-wK=UcilLCHZXgj3tX>nhP9a97que`u2sjSH)c(0+{YO5ub3334 z9%gQyr!`4m6YIomh9;~|d_;E33b!(`Y*37_I@MECNRz;t%?#kI6cRJWYG zIITtG*Cn-o?T7=rd+x^{X6F?-jY?M;F^dSU%k0%HdMs@;SA4@0~q zDWq|k$>K~@GqhO=4k-A3<0|%&kNLi7LvTz*q4_9F=F1Q-ES)N{R2PuIzI@H|O|t&0!}mdNK^#zHhM{=d$nw*?{=zw-r=>(UQ@29Ol;w@<`uUUO@U|N^N@fz@tf~YtF@oElTP6IDyG@V>o)28{P%L`S%tLFyIQ~W z{`mfTuUT{Utn<&+w{QN6i&?Zw<-U6G{Or4zFOtJ`;xDH?E4M31y!@SN(z=`=T`py3 ze)6i;p*p>zJ`lZO?vfrz8ss}gn=%}-wVd+n_Zz_w#+l}eX@Ojsl*-@kvpGQ`g%jsU zvjUW=Em7y=k1J^%$wN*HGW)y$FX9nn8_FGx{5PX>KnVgDQS)Ib=n*D7D<79FM4eR~ zR-V=MkoHmC91Z|Opt8u|;i_mE2t*d=oL5__5(ma?D)$JXA3Y)r-{vVMs%QGsfNp*z zneaD{xV9R%1)`NolUahD+kBU~rJ^peue{5oOtR}HXocc6pIfr%{sDvZirtOcdS1F) zDd~0@K%0AvBI_pp{PKvAFy}fKoR4;pnM_H$YU;-7ldizs7P^anOZFyIX8hbw&9Sg! z@k{Cdbrp7{(EoF>Zx@mYnJF@O%?}}7YvY_cr-rMT`+P!S@CAE@md>jL?`!^9w!5pf z@Vc*xCJE2I>`~^IA)#n25xhYQAbS{rZYtCjNX2xTKl1znzM*;k_LN**MYF2Ez#R3J zgmy;pr{PXm#wegH<&s3fkGpz%(t_s!CwhS8e-d{O#Z3<+!>8F-D4Kdb1}cx5Gg~M! zBaY`J=*F{ux&^IU_6r>NeL?=Br7)Vx=h#>qFRuW-zfs+#O@HcD>>lBFtNbYHlklm! zl$jqUA35xnkPSmD0Px-}8Qag^csXg3cCpk2+mpsqUIHWT4LqpblcV*QTtLiv6Z+Vl&#`*Vjz|f=pab?K?X z4BndMXIZn~RiCTiNX1$ln_5hv8U-L`Ap*zqFJsDJCvU_ru38*# zc-mx6mg}xJ`IV|y8%$MsimMD5|5}?Y;}vBY6pG^JPdz2vd}`PE1GwljQ<5p9L;!NYD)e0bfu<) zR#AYlKV6{YSDBH8Tc7zF^Axd|^g7OHAdzqMxkbK&G}a07cv}u5-rQCj%GWNsTOJLO zZ+o=j_h4RHAA80LZc5_%hgMl;&4hh>At^g%c`0bK#mUwY#M$k(egDJkS~6n+OCUc| zJPwsPedN)PpN^^|I#QArWrt>-KQlo;6yG_}5g&eT01#>s|8+v-z}{YhJNU%~60t^>Me?XbF9JW3p$a_o}1< zN9H%JiBnO^#DiR(rBTU<2R>C|H4J&O9Q7*J{Y}nbyX8>ujC{v;by1lk#}_U=9g$GH z5J7IatH|qX7U2;edwc6VW1zu!JW&|2m1N!39EU8*^b{^N%K*Ip_wb0!1!rVvdu$Yj zvuED8tg-uilG(Xt;(q}-K0WPS@Kd{Jbz^^Dq5gJ3t56EsG~j~5YqmyP z3*Y$x?~H9}L2-I`7V#sKN+X_<&OL;^;NxCu43v@aEX4hExo0IxF0L&vT^F^?|1qK} zulV-o(v>M_pzzXr+Yw1FQPpwI088z=UGFYhD6tVMK%N1W?qy z05|T6XTbxo$VB+zAaw1x_QHC}QbZ5UTSfdLe84}VUwI>OGe21Dr@5*G2joI#G;q_{ zLq8~Er8H~spzZYOAF&of?J}}wAb(MU@za$V;WKej)5R#qtZY;oCP7gcni|o!$bMd* zy)o$2C-h-t&Klc%@2lZ7%46-!% zjc++H)r>}xD9B3)EM>a826ik#?jC+$+9C+R+^2eTZ>hsA7BAqQYn6fs%JJydCVH}D zLh+l==!o6N#YKP2+maO}s}*=mwWm5p0=hMO-yLoNPt>y+2%ra=p>fgjr^GJ${5da>Q%W~>!oy0%^VpT<+I7%_3H<%jjiDZ zTe(f&8JwzUs^f_YVbCm}WtYyAkBR?G^`6f$eyUi#Iz5(SRNq@-Hs1{y5~-=xW1OVT zeUo(4$jJYp4D8G6lU$qaHWlJ)(S}!9CPjaWi5bZ1rOxs6-Gy{?qGBFJLp@9?u1C8u z1+*$n$CnZ>ip0YlUVtGtC7iG8*Q#<5Px*6?V|~en@HnuspN2H+PVjqC+zJRfC}bJ-A##Fs)v!2;|R~0h{$LzC7?Oy=K))le!IViY-dAqlQYfx3~W_uQ}C? z#&Q&8!Y%_9gh!&%8x42S?Q2Czwl>gn_xG5nO)kTK7jVv z)~>v%IYt@G7=X)F4}uxxpZ8>O!C>S9s^&Q9CQ-;^(m3esF5*!5fS_R{(UB{Suw_IrI0GI7@?ip%F064EW5-^>I9(uO~2+RgES-!hUnNXqE6?5K1y*1UT(SE zE-2TUz>yLSIsX7jS)IA0}Ep1H6Z_ZPOW z1I{s<6}oI)IR(o$N`>hFLbjjJ3@}eaSQ*dbyH5jZ9>d=4n05#1yY&flDV8mXi)f~ z@cESiP~UIyK=}gSDN>v>=N4!H@o-K)$b6=oV&_P*TX~aj6(glOY;f{XP|;{!uvy0& z*Ky}`!J|~a9eP`dvN2qBd6MK4;@vz(! z03mz0Qlw{A>FoC$iFKP(ZVj~8Ix4UCqQ#iCK1i!)^2dFNUxmg-^aZ#4g+;NQJaSnn z@&Iy>fr?DbG?g*SMR@XFolyaMcHvvU9UhB6DG}^&896w|t)n@>_@>i|Xq|{sY|Z|7 zM-ACexaT?t?L0`e(OlnO2G6btE!W>vEqV}Gn#cR$(`P_zx)^ATF4#N)cS-YLM)8>A{o6r6ARl1$=@}r30CS$ zjZw3!q|VtDY4qFNdrCIxU?DA9SJO4-t1=JAGH0flM89bM*mfsyMuPyJj>dgbkTL#OF4 z51?#)Ncj^F&wmf3S)%NmfL-5Kg?`cs%^vA_AKEOvb%5M$-4l4o9 zY&*sudnyTv56EsAAB{t2@%@1fv-HEuXY*;v{Y>&dzvY7ubr((;45@|S-^%!lEBEdR zc}wwKSh^S=4E?F4f=v$)x=1*BESpK8zmxVnW3=+JSogd^mVsphJt#+*s&b>>2CLJ+ zyB+vaE8{9usaQjbtr?Qvg6rdH7TOCS9cjVlWT@?-yT>cXpO5eOY0jqTSfZ8>L_{+C z-aDqkB6<{o5ISgei?Z2eu5Hk_FDyXln?Q3~0?YYI@q;K%36k9J-_NoDn)gG8wI_D3 zK5z@!513)=;rKIGk$4FoE_ZiWQTd~ryl-EgPNQ+$DL|qw=x2_(=2=`d&Pu=R!FAk4 z?%j~F#EU=ay9P!t4%KE{8b~9A?svv;cN%+WBDsmxqy_UWh)Q$-I81`%jShkQAdHC= zJfsi5xj}xF7t5{4a5qRMxV8uOOATXo9n@@bwmU>Ku%{0&-FM`Mq&?;7~PUyKVRKEn5$bbw;X!djl()`YGi=Y> zG}X<}ieWe~O*%Fp0WPTNjI=*(x8mr*Rbljtd9A*J4{+t>cQO^HM90B){{85 zqQTT@F$lz8qHg+#rhd+Wabz+PjTV#w&6u^~MEE5~=GHMmpPkc{=3ni3CEW%Y3kicp zK;PT0pK#_y(hK2E4UUUs+9q<&D|_q}2J+ybrhh~Jrcs=9GIj7o=nA6f+)7-yA*5By z$BfX~K*2f;Vrm|(w?c8&l&B>;bR9@MQ02*6E#&x27;>8fm_PsDTs1V87)5f@;lD-l zeqtvSQ5(h;CPPY)X)doUvl~0;Y=OQN(8Wm&%(zfvRR{sL9rU-*6&AbX^qO8fF7 z(m}-4ulUqfgsNJ5Sx^v$(R-zDaN)p*pTf568UWrWNh)Mm7JXePx)D*>*R?&S2y*Da zE}{gK_F(4*ZRZDPS<_5j5cqXe;@@Xo;mE~L1wv2RUY;^{9MxK))NeD<|=i9n@v*<|LK1CQ-I)Z|{V zRSX<^31E2g4DEk4|H@+AJaC8|-D^zvGomva@258F3;D?oTjt}GAutR-7J$4UrI3AZ zlg6MlxkNHa{v(m0df{MS245{tHIIj00N-AxR_vQ?ESw7|HPoSd=Cz6v)avGFgWMyCQ}e_}=3Vj@ z)b_}lxC|h4%1gHO>2mBB^CKI}1vV(W=Es+UcYiA>y99BO#9ge`JOlV~n_vBv4^E~B zEE?P*h!j(BIyvA2_r2+wnGvBhjcVN&d6$&AUVU-Ran+X!37>BGP?=*;j;9y;ru3nP zksGgIQ6)OF&4qN&A<(US_%%K;0BB!*F4>VIBvcayQi2KHgooGukBDT)M`o%Kiqu?Q zc5jepq5+z`3b~jodQC<-E$P5spHn1q9ohRx1^YJ7_SHMfryLFeReye&sr-gUF5QmF zkYAD6x0}EhM3zm6SsJb+UMo45tY)IA0@C&fIX+*>oAUJrUT&#Ojqqs3>eavn`qbLX zzWB|9@k-Z@l$dMA4oz{y6!Jc}FAN*Q*)J3hlGUVZSuJ;+q#TZZ<3BT&AM7O41<@`3 z4(E=*t_PjYv<&CAln!Hm#CB=((p)dtgg!D!Ow30zOt^LwlqpC49iSax@l}-z#R|W; z6%IH*`Nzd7PVE_H$f@NC5U+jryuGc4Y<`$MTegscewM>vq^8N|^hKusdOUHlA{-x^!kY{#R#%l!xKEr`k(T+ zi4pW#uoI)ry$pWU;mEZ3*nmfeS9@4Ts(u6u=y9WC<$pOb$R`_N`GB^k3@+rB3*SYV zD?(2>qok!z(#m4AeuX`{r0(vCxcvur6>yUVCkxbU*(mK0ju_(3`6N@^msLx2XlATE zb77cw9}99I_8;9j`xDbhc)cg(LA^(;yLwIR&X2gmE~N~@c>R3C8fM2EYa-gAD}M#l zmWpxkcv_q6$$Oo(QW0oHG*OcSs&zIHN4YquEz6I9?i7zEAC=5*qNlNFElX-foUj?J z3N;(yRddtennp!NSot^hdO3^!6ML^thDaHm-nP%AxRnkrL%puANo#g{2U{#J|8w_j zuuW1N(S&rsTyM|VNYN7Ps;*|M9a_XLS6k5$X3@3|dnk67K;IV0B7_M~940$Ph!zrL z9StS8`_K_asVq^z|0zs*Q#wp#%DMhBzG_Q9)WW!PiDp-8C=Bj*BFs>Tff} zhi+WyuvnqC!Y2j?Bz{-;yDCUVS9OKr*Ra?ASAuYO14utR@>esI@GNrZWMS(Tx6s6S-%*?PNDQ=VsBOq$U`cp! zCszv}A1WhCl2xUDy;OA~*>?jGGxQri!W6uSPg?n8Z8DcL0G?1}724|R1*Vq&IQhD6 z(FR1_9XKteOKX0m^$(# z;=e9|d2)+hDxS@`V@*H)dd;IKL}I%C0deZsM?nyex^)uKXO@ncNPS*5YDKfR!l#h7 z|B@5zuL}lQkP7N7y?^Rj_ zD`ycs<8{%VM@bpgX5Bp>L{h!>(ODAmURAd0#8y>+=Q~jm;fDzE#sn9Q9DRuTL-F^z z&x<2u;X3;jY^txbV!wlLsLrYI3ho&ufKUq;EmWJu9KLAv;qBOaI|VVRF4FwK>P`8s zX65WJGTQ&;A}DejI&xKsNuM@kbTo%jmzGw?1|;PpKWeeQcgrj_Tq&&Dn8t`}-|aCC z{3f*_1ojQw;S!p}3r*Np@x z$?K(tD9@lKlu}&G8?*9m9NLDvS^JD`%S7A4jpNubq1z=QIke{+Vzw=w$96fsiX)pm z2?=i4UWFWG)0&Y<7@*hrU-73v+4VzY(8YH-(q7eX)8Cg>q_977_v!vL&sKPJr@+E_ z5-;zZUqGea%{g{TQG1SF)sF+?!e#7AMm0E7}z z>T^iS7IDrWiOH9tzF9x|2%HZU%JQgLre6^j(5JQm?iQ)H-Da<7QqgtW#j%cdPyV0~KCAIxPEdf>vVe2xm z9BI0pUdlIh;)FI+4u;B9MPrc2UXx5vzX?WZ`lZTEg_5BbW$bVe{|lAxbt2MXG0Wd^ z;@ch+-I;(#_b;a|WzGj^gNd@m=pSm1O&OvNI&w{wONqlk9!705*zil%9#e4v@xnx2 z$^@Q}Nr%#2R(>p^O?-b(++6Z0n6m!G-V44+zw#)tO4*FUWmNxiG4c25tMY*fk-L3l z@tz`lS=s>UUa)RrY#G@nF_P9{wR9TzOAyX=ivLDx-yz)w5_+P&FLc;?L$p2RdKWr| zL-FsiJN4ct(mc-WU3uz1Ut18=(U;t;-}+1ZawjCcTk;5*zj49DpIrx2T(@1oA`303 z_YYTAS^1$=)AkmnOFfUFlb z>iYA)LZ5v&44tMu$R#-OOqr-P$p+-STU4MTihkN_O!}D!grfmUCA}Xe>;(84)Ug%w z34g%;7M*605m*R}=rLCO1IQykD`&7^1NfvMaB0MuUA|36$U$|hJ%Zp_rAu&{UA(9* z;k&8pSQ;E{X8IcQKXi%SgM7SuhStjS5Z;E|wgY3ntMf7&Lkd%c3P~!1V4c(3BSK&7 zo?n15xnVIqC(87|pJB)ezJn!#e)ci9mGiS7Bw4|iG7}LC!36Q> zp>eyRROwghAb&H`w&Q-E($Zq4zLk`TqU8I{QTOf59(59$DVavgfPF4;WW| zb_u!PWfD0+a)K#zFKxdqGrdXLWn;IwWmQ~yab5w~NV;HgMdxK~fNeWB2?wC`Z<|ku z8T)U~m$K`-ZQ75|XqGnDC70K~?xSh0z7Rv>|FyuCnAR9+CS+!X|H0j-4|)H^*)@z= z4=v6hq)x+6tJRO}_a?7dEAKlu`!apam`uRc6oHypm;z$pBArOSdY4>=aki(0(xr_m zg@9?6;NNeftjhxU0?suPN>7H)ZfzG{c`v5QAtyE8v)Is7x@#OJ=OHKphYdRkA4gy`J{Wsr7 zLHqAB_v=S05!t$b=#6+g8}v~+V^~zBr|?QCWy?v*^Wkdg6Up)C1B|^v ztsCsO$46O#B`EFDD$}BJ2lS8RJK=Qq(9;e#=grr2=hywcs8Du>`Z@*>Bk(v(4hQ~E ziXSxY^!LvGnj{y={gGeid*jnPZ-Psp-4=gW&W5nMEl{>53Nwn_ovkXE=kx8<6n%Cn z0Cpn5olR95-zYX+zgyeS!3nG>HwP>4Ec*QFXr*cNqw8X)FBG=SDW#Xg2ZvM#k*Sq~ z2PZF7uArje%de$M=QWx6PXn|`|F!VaX7DB|eLGJ4^#S4#|Fj;r?;HH^hICqy=_@A8 z0({w<_a#S}r_9u&;`?HK&Xj>l((3-h)9`RN&zWaEri0DPQQDiZiZa5>#Gi{*_z_zN z$hyu$Io6Huwvq}5JJ-;?d<^36`vuUGoUqD{7ykR&lLjiNWQobgs!3tGgIIN%@MojL zkifUth7aR)N&5emXEI5UeDZj!$qNrhMb>f9&VA~E3|tWY={i}{oi{ilhUSCd0@H;q zZ*M%y)&V=yicMIw*cbV(yKq5~trdB-4p{9P%7T7%dAPe-7P7dF>kKbfh9t@&eXdt$ z`9nnFORp-R??AQQ%j)eb9Paw%3h=?O_EgHoH!9_z@bd7#1RWa@N0>UeUy>$;)D@h9 z3jbM(ZzhQfxyGzx)L3PN$m75#^fr1sFOSD_Qc;6m`;TQcw!2ciZ707NQ{VUqJ`K>a zi^W2#wOdG;XR-q8hc|IktWC^Ejfb97!4G#&HuQ#WVR6^h3i*`Ny>rwg&Wl<%unnGG zo1OJ;s2d;kEtG*UA?<>J)FL_sRY8!3)hT!Ukd0aM4a5T9M*%Uuvk>k@DJ|CJvdAN4 zfv3Tjp+gsVS7o>4mJClG>HmEYe4TX-N!t?CvApyK2o+*xlHK$`VIS3%6AF_PB4!*%gA+pZ~2s{|4*K|LU&M!Z6@O1 zlYTO(uwD;#o6`}eGpIMW)t*?KMmzqlN7qm`e(8xqj1UJ{(UTV9*!bKt z+#S?{5~Qa=1m_s_q9$I<$K=B?)z@5xPWlgQqpsUeWh;O-XQEO*l%)nxpJH{ag$59! zc{##7#k}qhQ@jiiPPo=XP8JcKinh-seX-T+N)I!*!UfFS zd939#u?b_+UCu>Io7|8P1i?h|z+tvwm_ouAzjIR}{pId7MzX;~kKR&=i~?E(?eYlz z8w97-p_YWyyx5*p(Og}%C!bqPnxo0OJMb!IF0b`<(k4Zbr+qg!qnY$3^DX(iAB*g= zyex=XFwQzNfo)Z#LAIo0`#{#tir40u=G`A8fGfqhpCUOx#QRc_^g+u#otjHmdWG|K zS_R}wbe~waXmQ+iGf)&Pqr}YXcf!YO_TQ1%htKQ!t@la)ctFPrf)k9ah2n<6^j#T> z3Wr(8VX0aGqklo%Rbpog{40C%><^?rV2Pe&^?C+(-fKN?FIXyWa@Mb*{3NaX!j`}^ zww4l*L+2Qpj#CwXZ$SO_IG_E=y#QXKPnhd_g^B>d0tPcR!1>|2&(?mP{kY~=Lw;L5 zcT_SKFebN+1Ch->LS?!digUa&3v3DYrY)(Yo7R0dQM^K~4NitB-q#6cgSnaGHn=oG zarE)-!V9GqTv)fm`8$=dWZ^kuq7Jd1T-NY2BKPyYS$oHY$)!-5AyLei=5kr#vp11< zRmWW~V#pDgQ|k?T%K3a?OT#aIG+NJN$v%4%IE4Wa?Y-_e4FT)J16?-FOig&@=6;Z z{E_7^De^X%31{LTxIH8UnX_2LJeJw*qTvKYARh#b(UbsDpUJ7uxDrX_b!K4xu5q(2 zH5*sF(zjCLBe@7)SDL?n?wDBnTIdW2r%U{kRYO%f`P7vN)2%_NZe5v2d zkfF=3@!n^e;m8Z<9&=db*UjjH=60-{*Zh8-SI0nASuar@2}z(V_X&gitt!4))G2MOn`?yp&%~_yirMv zZ5bzEB|*MgWy(j1c42_Kxq?X|d8<3==gc1Z;*AoM$h0P8@-dD@DKItmF{2l{!_zcM zrs8eYf2ityzWyOriO#lb5)Uj^A=O+qo77gI<*(D0s2RbyK7imHF72mTKO7xA zh5W`nOz7^)=2pB3`AlL*y{&Tcz;i!lVZ%Nu^A3SAUyx*_<$Pp^LLI~(?7CyIphW*t z^SvzXw%koCJr_1{h>-`**mC@ILKMk|9oczpk78@pqSU%|r+MH$^sk)2MR=}CDT9FW3-NkVsuV- zTAbSpk%8>3xD)OV3*qFXIt3b(szh)2?8_3>ZJ!9}v!3T*WaDVLFj+9M{9V3~2Vn&; zU_oogflGbyEKD^0hmwY#d>%rfl4L8x9vhE9gMNC1Anx@A4xs27E;k2;9nopv_iMB4C|6SvH7&rFR?S0Rt>z!RQ z_K4L-o-Za7MM`^K_K2HocK5DcpSdK_gMD@xBb>nsa6^RM68tjZ`2!|{C<`UsgUyKr zrp#o-_ND^b*dt|mN{lkv;397au_3F^I{^-dd|aC~-6J_hI&h&T*r(_)7bam43S2P$ z_?9{OKlgnxjK%aSN!PjBhVNg9IWU3FP*+BOaRMqo%Y&Us%N^0e&D{xR>rvaKRsAME z%LfZMfJ`A$bpH#jZz$3-ewrtjnd^UD%sn250h&$5yF+yiCHp_~0@lhW63w2p+LDwo z_w1X+xc*zXQQ21355pe|`M8|3KA)Uzm}7C2$)WBK6Ruh}WaeO!+DmVqf=?C1MguB% z{7){fVWYqc!R(X95YbEgkgH~(>jML*5M_w3^hQYuR#lqVE&bo z-;8yCSwf?bV+~*u`c+q|Y41XO+s*Jhe{$=T_`$gWDA0t2rq zb$M;;pv@CeG=wTexZnKem*LyYEv5fxYb!f6WKOrYNaE>rhMVoFNW}gF`ofah%Ck3? zP7JA0VKU`N&Qx}#01G~}VZSI1*B*ebI|h~7`eAi6+h*mktTt<)F|#b88O2!PCPpiIiaH<+j5jif|@ z2C@>W@;#4vs-tChuWX6coMb?HQ^j(x4@`9461#|}aU_h{zCl+qb2Zx20xPzp z3^9DMxdMB-0Ydt@7{`a- zj$;mEoy!QAzbap1cj3x(=}8O^7qG@m6wQk#@{xd*&*>jR3)sG7ZQ9onj|B)I>q2hirM1)!lDqKUde zL?e^)rF73y(uH$$O#PHITN;p{Q-+tscXJzU7DzR-J#`D!->xM_f1_2sPk0~|=f{sv zW_mvS3HkMHs@*3aQF%u z+yEHg>=4JAt!rgYEalp;M=&2ui126!vqyuPEH z)scGk`G{M+IT|hXcXq6nVZKFf!eL!|yGlKj1`X`(&^}RkS(+s5Pz)Nm1K@?`u|_@z zsrakS_YY9O!L$Us-H8ki7+TckXD%(y!ue7@kvl`e6o)>#+Gd!-)8kmBDrxzOn~3!Wzj@c2J0QAtK! zZq~mBtN0#6Yf-cVoz92=%uBs!du^qd5Ye~V51$5_8m3>DPb4W~SgQ>KNP#n*QAZNtpU-pN{^(4szS?RTK_3dAh zVqygT*DQ)yd~}xY=qmna-pl$) zxvX(}=3?9auZ~XEzPfJi9AS{CJ1=+F8f1wv8cLX`%X@nZ!hW}%Tkc6w&4km2gcPLW zJFqqn+~#^oA2_6mR@5kalu&yS*k-Z_W!I+~I6M}N04&CJIieoEALQo`SU7F#%S8tB z#tq+yGiiU>eDdMnF<40h*`P$_o><2Sk3M@A`DL)rCuM4qKdPb3Vk3=hH0qg5WtK~u zzk1WFfXKsYEOeavSsKo60Rn&C$}Oa{mbU#2xknFFb1UCkIc4B=zl`1ws54ADM3Cc6 zl&x&33A;f|xO0_uFAw_GvrTt}UR$oRE<`)@B3$fO>MOwKk0{iS;eb&_P4E)H=h8NA zyUOjBU_S7@l8#T#3NiwNyI$DdQMlf;Av3HWF@#g^+9*5U?`C|^aKEuGTWJ)hr+1nI z&vhdznH(ZVF=;`*Kh;wiGKh6!4lltaT2ghBfKx_R#Gclh^vp9UpK{UJaQSuS9WS2O z^DNNL7pFJZ6y88j!PU*JBzCk-9la2@H$fj)C6kfOW4)hz@-F-D1?<@FUozWzR#Y<& zw0Xd1VBRVLna9e2-VVqoO-CDIMU|iIsy#22Sn1wx1 zU@F&I3H|x%@aIg!-+e|Mp}37j;s{A$o@fAS8=B}tCx7^Wv$2$E#A3{{nKu)EN7n;1 z;j^NC#0*8U3;S);EbsJK_CRYZ^EQS9Y9{wK##R#6iBFU1*#O*sBOs;u{ksl(jk^6y z)%Zww<2zX10a`+{&EkTP_nA|1oqT$%k3l1U)j8$GD^1xxJsZ^6APihp`z<9D2oe~S zWxPgr1p%>CFFgA$_FibQMf{!$I!MJ9=G1t*^2kj0r+`M4G`pLZ1~@7LYn2gW&%=87}1v>a51jM;fYC z>HV#6=nJenT0X!JGD~+BV%;#G-&4O^S>Q=8_$pS^LzHzj&)!ex(riIBk7$Coqa0k; z3`PrEV&hkS0T3rQ9n1>DuUP-~U()+s3EC67S*77HaexnqAQodwj6fy)a-Y}f?Fv$j zkTklr`1i)KSIs482gsQEmFHn<_l4Vt!e8;z0l|w~_vYh+{xkU-?qOlcq`KE=@1h0a z1co*XLAh-fo{(?`0y#u8Kf)AO|* zZEIS6VfQ*=-2;igCC6&C*_oKjOkJPLv#Z=qPg|R0R&7fYeQWFram^RmsSHg-E;IKy zXx~^FzF4B2DxS?nr~ACKkZ=bECEx22|HuO!wZkonbi6LuwJRs!X zyaCF6&{ToTmcSp?HeI0sagXQW^5+#kfo5rF+dpL>WrpCNOW!QMh(mV#eWi9$NAE02 zXE^tb2r$Er#1q!DBTyuEa1zC%08#Kij=BNI*E7df)n<9o3r^E7PMzYFJJu{@n%LAJ zy8IjC4~|?K*qZ&8G)S8c%@J2-j&1he&?)`F_?FUq3|zoLGDo}f5k9qZadD3%A2Im4 zw3(=R(a(Pz-dm11l?$2aM|Mv8KI}r#s^~r~P40V@50pbaeM*Vc>e&%f7tP*IrmNxii_6I`wumskAP27wes$NJGZj&4TD4=A0n7hXi zb|pyd^1I|OD79y&n_Yxyk7?f%?S&4a(a3tC=^8T3Dsc1`T9GgPbDr1PQa?C*IfVN0 z3bF(9VAT9(vR0ePn&gUC${}!R=#-yz{BGJ;`3&0r-M7H(H_!;l1u<&o8B`c{A;s`) z4LIdI$`#~-a7OCE?UUNK+P)EtiQu?MYnNWgy6!0*8nlS7?+V+~vJH$$q5jyLGOwCg zUf!;BkkYfQw1hT=o8JN2^F>9@OX@20k-1T!1%V8}5a>2?4)rI{rriwGf;KzJoj!mH zb}=07F%nG}d-N2tQ*q^0$ubHMTjw{tpbr94#vB$qZ@>&?xo68?EYx%|MbQPdZrAy) z$F~?_8?=9oVg|gMWR)|C2Bh9?m$;Y}sSL4kll^-1^{h4yt~hazr~7MOl^$M?t`8h) zM?d^x3Aa`0A-cTZ*ROb$I27FoA9J@gFy4Z3{b$cXxpd+y=3~m9lZac7=*Z1KfWjvu z^nQye-V?0s0ASaR_HKB>vqAuuWk{=Gvm&+H-^75pm20q{*ZuTVQ^Uf!J2zJJ@n$Nd zi_7+r{_wWi#qL(#p@%^#8?ho}8`7r2zAgRC^G1yLXm&PsW&Mpy90NO_d|?gGsyr`% zrPS?ArM!#sTE*XM)Rey=EARWy%X+H8ulbYYzlOÐCjhtYmFyN_kgz;}bvz#2l?4 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%0A1|S-~fPt|5Db21&PN%@x=vaQ2g6 zTBi#_8}cE$mVS(G>0LPK^|3DF?O|deyJP7+=oi292T8w=Q_LZ6Ec2ZvL;DP?$Nza* z>x7`lz;u$W=^=o3<$aVVqg!@oed8@}DVC}1tn|LddVc)B{zMBdxt{XG@MuRhWcrN&X5|u9 zGHjGpL~P)G4(6`bOIt-Bflxe$QTtcO7+dPsJ74>?Aob-6yk9S>b(^6a{^$6~_cQpG zOM^13Xj1~Cgm{X{dXNb%*E@j>+?Q^b(gIBsCW?c<;GB$Zn^^j6zgj~J4ou5*0(jzy z=u1mCxd^e6uijPS+3+sHJp^Z^XKFZYzENzGx|C5{84Wsw`v{1YD)DKNmFw&@G`A2O zqd~`4xxJe(x&8HEoC;_k0tr35Kkk7H3Lw1JU6B-Qc*D&DxcnTbw&=n`>n7aYXi?gA z?A_fxi1uO*zNOJTOcDmq|sZWe3IXOWz4az z3&*^YVZi?F&J22qj2CvgdYexYl-Uqd#M-un?-9Jl%00BAX)yx%OZE+?VnN~GGSQ=V z>lCQvxe-;8 z@e4#pMNOjHmjWZ!r8yfm@vj_bxlQv!!vJ#+>H_u4Y7)`-S#9dt&f(V4%rhEXZN|vf z#RZ%1Nb|j}^*{IK=z!;#m$M+Y0m*pQCvAjCf;>kyX2;9ZsBLD;n{HjHoEnYT+pG1# zX0G8o4qW`JDLs*?12Xe$1Y&1N)dfBxIPfEZ(CpPMvjBRYU zgqC00CXz!NEu;XXjq8FY!0Bo@^p$DC><|2q;2!DD>>*>9v)C03(1F(HpTyc*bx?m0(BRiEFJ=;1tCeu)19rWl+oPjLZ-#(=-mBErSv z(q0WlaGsGV8M%Hic`47z`PkjM=pEQ}))mk_=Ym1-8HRX0?FV{v^HtVeRMz7Ddu+#* zSTu*vos}iRQgN6d6hwUf>ANEA}$>K6ug7|FGu-XKka@d_JKzZ)WJXs zxfMjqS-i~}^3^d{nr=2O?&P~o5ROh`J|{F-kTXxaM<#U5TkBSzS9Du6Hi1wjkmLP>Q&B0%3z^JNP2Qj3J+C5~&oPJ-8k!C8lsdqZ#jT}qlQv|qs78evK#(qnGFnPLWa^)!$~H{1{_84KB?m9fP6FPJ znnCZw3lI*zluYRUUI|@nLpITalI85- zoaWR8W=E$Hx`J`k{{}z?^Om8K*&}Y-@P9YRjW=rjK@pFKc8ar=_4ZaaA}Tf?gQ7I{ zaMg_d&$AcXpk;%J*1?C+M=Hv#X(<#1Y=&Jd%K zUZQBWee31}>)zv;LYuT7r}7s0ROztq$$O^s#+kn}khgHv$#0w=JnP(daC-1WX!q%k z$Hu{rbnb;-V7(*s?mm6WHNl5f8GahD%{R0sJ{mp+^<>8C-Qu!=u`FjkiM?9b$P>b! z-Qhj6Wi0z^#6s+@Um5H=Zfk_vH{5sbFsq*z1{@7EzH5K~E z)MMtTgeqR)m8Eo~emmpyUf2g9e|C=RbEuh>iPMOJRjB$`I0R z&e4BC^gXxH@#?rIv+d^5 zcNd(pcWb+hVHwE0h=6vozj(&W-oDzKu{=C4y%bxuGWyoaV!mz~_Q@1@_tn#(^E?g5 zKRH})x)rY(@-@BkJ$X46JmI2rmHCZmxL5+^$31g!C5ycJ5~j11s!}Wx>Cc(QXm_Xt zz^Yc~6+Tj{5jhJlo4Fl3*@S_K{q0rL|JZMb_P2{>13RU5`<7wK@-wgt#|_t(R7xgl znTalt=cqyGAH9P0!T)kTi$kiw$z9Oh-#T|STJDBiE9z}c4M{W5Xj)Rx7s}za8&s-{#u9ZvJG<`WQqwub7@ct{v-hqtijKxgg8M4z%J}c)#4jE++@m{!Z++|N>spew!4wuOyw|V zkQ@0wK$5-$l4sg6Io#7A{$+c3GnQ{K!5mFpQ3buXO0VNoA;Ewv>4}~bg-LawaB}Nt|ov^ z;0n=94sS0Db@%fprv2wr@$T@sG_VQ;JXiJO8^%Z#K`da{=o}eE(_Pj~C zi~&fkjYwuVks?A|%bqnw`V?NZn>h{dAL|pbpdVOuA`-ur=AQWNyf9EL|D_2}m~Xkn zb@(X<5H#_wqA9FTU{PErmQg|D7q&mhHRLqzW-tTzf_l9{vY@wV_iw+Z0_y``L4OeJ zU<{gk50)IL_tci>X31v!wrvUDjd>+RQtyO{AOo9)T#B_4Asgt?k2jHClq^yOOJB`j zoVH8{0|SRjU3^bJ5a$mqE^@iRGA}m%Y*mo>d5n56QP4BdH)@Q)YOUs-=MJ;k&~q6d z{(rP_CpT%F_SNTW6Ld)zcZI#ucBYlbT3iRD`DLZ;~3Rhg$ne^vUi`IVpNPpeNk5}Yn7o&u%5!4P*+Vng~O(goy}dN z_)e_o`=u1L+oJ~W^8;>)qeb-pr)cGw|Fd7l4mz%4BhjIPCi2(EgwmE*K|S`;)|bzL zvnO&=0&9NY^#b+o$XQ$R5_Ph?e}Kxu{`+oG&^Urh0eK>cXcTT9jb2Ur-tz2H3h~$` zIc-h63t_nzMp)P5qBbxlN*Z!1S?VF1XV}knu69&z5)Yx-!_0RheUmDIh9SCHA2WCT zCydIrCzbASYN^fxmUzyyFDa^&9nKv054UPJ=QQ!&yUy#yL@|r#`OR$fS}{d5`UgG{ zgwf^4Q&C32O`I^&?#rzFgq3~XupzIu#s+!@5-gTj6$rx>?F@@uT;#f~?AqIs;x)xg z+Ot{rD!AI-DY(luY4YXfG1Bo;{%rl->kNDLCD*m%Hpk8DNfo4^_;7u{K-|MU*n;Mo znFU7yes=d`FQtxT_sRxvY9I+~_=Moin3;JP+B}Op+zlmxJ-DNN+I?(s_Ora<_}k@3 zxBnfysNQvIqBS*hyrZFcS&xLOG(}!?!(C`r0DLnhIR0FHRqaU$ZuJPzn&tl(dVhJt z>7!eSqqLTkT=gfB%1~z(=MyVt;VrSNYXfJq87nmVw`rk|0}A}GHFX>%A&@H7C5>1! z@V2%?dQUi(`84&p{$cO~Ur+kDoueN(g<)kZ2!>dNC$Ocjkh>^sr+s(ajq|gkzL#Ia zC@y#i&69cBbyCv-xyEDz&vUj;?>{w3#m4=W9fnveHBaa#*LG1YdoBy4VYU^xpJ04c z{B9o6Htlshhy<}akzQ&3d~t?uMZBlyEE(x-e|KauWB&b}nHN6Of%5m8q|zzPGWztV(-3z-h5x$% zDlk3?LAW^|y=p30YLJFi|H=`o+HqLHe&MT|rtAy}87cm`+`sRaw#Md4bTa*_gzS+y z=Uv9jE-3yI2|Ts*C@SQ;2&4J}A8!+FQ`TwMC$-)UId-An&7Pa3$Qi|j$%?UL)HA%T z7@u@M_xqgA`hQNhAa-+9~bIr3uhoOvyEvYRpf5ffrU#FP#E zd6`&!@c+DS+Z>4pL#vKw38>Bl$e`zU{0u~YcfF!ARl&6@bic2TQTzVfz0rW(Uxt{V zmKg!6HPhVTS=#MP{PlmH@N?A}{2K9fm-gEdj7^An_^->sP|g;3SVRrSYV`FD8KV}O z0CtXbSz&ZJ4!clB_#y|mLQ>y5p6>f34?hP@D+JyRJY0iIZ5!Fo=*N<+_AorrVkUgVQ( zRrf6hM$~5L7Z5U~1(8;cVT7em26UkCK}0WYvG3<6sGUDMwX zclvtQZNksiyX!@ypqUo?85e9i_PsxJp>)V2Cd>7O-ONPjfy~3JbJv>MOE=B!vL`Oz_}IA9^_n9iX}ugI;HH#h zAW`n3RMytO8$z_Y;4Utf?p`V9jeBcV8)W;z;bdH)g$D8AP|hSwE#b-YY@R5oYU$E) zNd~uJ{lUs=siqH4>Bzlwl&6#}KeaKH#UNTgo0LLU^rqX}2XK255ZJyPg(`oPOXQ&< z=pgvro|V2QXXXIw#3iz*f%lMt-sIxagoM6!|{zy|=opFy?DNqGb2{$3go%+Q-W^y+P+je5+1@UxHE|rI0T# zs=n2f4F#o)eln;O?z{8?W;oMh-|_mlUs%vNS9|eY8xMS>3U%p!ZK)!1{}Q+pKz7V) z4EDIs&0jCNlC9mpW!d@FEHGF*agAct9;2m+l38?Bl2$E0n~4tFNj(ZQY;IRvf!rcrPU?FA<`2DG=mlf)x*$=E9^ z5T<&GkL%>QmeXT7~N2>jOYNw~^Lbk~CHY%NUsmIl6BnPs*t(}i6K=D21v=-7wC?Hg-TX5k9`en z>I;i=5IEzj)GCD({L;^Pr%5tz66!42k>UgV+dqz*>-8TU=@w-lbDMqe2ht^@6{Vp8 zD?a@(!1OqB`LLtNJNe&m5!fF1C8ose*Y9i3peq({a{kW?P+0e6*TUqH-Ha1Fq2B$i zrbd;U2k0rR{$bX_DGY5n;E(|^?56I~x-(^6f9x4AdDgHKGs5goa5b9w*j{PM0K0~c zpK3{Csvp6OE|hb4)+yaAA%uw-@Vgm7@TOee(bS5hjibn9rec;m!lX>R5M0(!*#B{l zL{a#*cf2KY)P4ihFS9!aYH9fiFjdWV+E;+3@oH{PW#F6h%d_i0tZL1F`LB*j93#hg zJ$roBH$f_0DSP;-MTUm|OT80CSF;N-gu^rjPo6AonK2L71I&jdpfen)o@F5>nv~Zt z8J1p3g58ur^wYMJqb-yF~z?!{yNkJ`%w}p7}n+MAF zl=VqV>08nIS*)AGZ&iEVs`ds6n}ti9<$_Pe$F0%kS; zo8{k>ijA?40{%+lo@skNTrlXEqluFJ(Qng#4`rjn?hApB9E{ZbSN^jg)b6VL8;a#G zo35S@POKNKg)jk}Td-qYtqAJqLY@ohDVN!{oYt>M#)=f}&<3^?I*Kn-J^On>)4J^2d1Grv;*?4lsWmrq||wS3r4IJEa=F}26tTKo@ff2Va8Vto`c2!-Rh~` zbT$23I|^aO_M)Qm_~*-djy|JZ#4GXI0jJRF1!3)?OxnuwM1*g@5O5*jnDg&~8)0ql zBhHqg5!q~d_^zr8aJkh4ub#9LjR1$8YS`^|9_&+HHr z{N5ifFl9lwfYdynJGGS=D(*5Anzv_KY__6HuPM6~+U30B+$LTqTz-Y<&9EILPMefd zLd=(qLB5>VMErZau7{itn;DqJqaUsnv6grao71>!!P1&^$%YJkV+&?`$C6Z#?;PhF z^3>$>+tE@(!jk`S$guA(`!Z)(z-s!4B9(bajd$&jI2%@t z2R1b+7RwjYqL<#9k+j5Bj{<9KO1<^QAU z%j21T{P;_U%2mlxjunX_N@dQiLXun|axF=enA@gpQZbUFBsrH<$g$klY`L%8$3l*| zhB-Ejo%Y-3`}_U=+T-!wpL_20e!ZTr=kxjcy|32^0?Gqi3k2}@1y{24;!%*op zF;$_{QzhZKOP*QWJyS5+uqt;;0PK((%Q?nUS$=V=NVELle|rSYgZ_ZL(jGt}ku2&C|Uw z(vy6#5@Rok@Fj~l6iTb`N&iV9ZrM#KS05$%PlO;tO?iNAWL2*|=nIqu8m{&$+&e!L zHsQ%L)dzcijSNR&T#FTt>QAC?1$6^;;dFe>5$LgLE!X>)wuZXmbmlJX9eo`(KBGI_ zbPCMBx=an}=JbuV9LoxwR7yF;8KJJ3(sPZ~GYwQep(l*Qzx?`@5F zH~Z$wqbzlWO)ZPycFxsrmCenK=SSQw;-B_6a}BrOg+d{SnU8^Y|50(7X(x7EMw2at ziwE_iuMU}GrP5$%b`@k7#^0w~)^G0P3<6OZQ5~J0F}b?KURUzwY!uF3n3}cCb(!0q zXi?ma@Rx2g1#BN{qiq4$+M=@)GXBPI78a|@TH&(fRHDH>NF!@7FoBHP?St*Iyf!OE z>uMc1b7a>DKqxP9I}AW0g^&>Px7O2(vA;Twv8`Ak^W%B!8`~n9yU~)!WQWBr3GYxHke=%{!@XB8tkrp3 z#5@L6ppWPoWO)V7*Q?!TbZ7Y8WG08a9i(IourmL+M}H1}CZo)BwvW#s{~GG9L%!&2 zYuJ!VI3|-pyCvJ)qlLbO2~|AaliI(y=M%`vSExgv$MN?oY&)hqwcGG~w;pex^z$B| zHFKnbpLn zf_^Pw-G=bN+`y z4imzh-x#y!b%zV_I>K4@Ac3n@vmyWD(Xs^AJnsM$#jex2E8t-GSF<9cHjpvS?pyou zXx834`tJfoUr4M`O?-`u*igXfA?^cO&@h69@+oZN=lLEHJh~UZKO2Nn#_{_#p>@~ zI5s8K>^POP`AiJ^GR+1A|+S^pjDK>P!}c8%3K-qgHfZZKjw zkgjoIQlD!$_9Cmf?+Ago-Qj_(qBsqFUqXi8Kx*ld*nU+|J#g(5OHESl5%UXDWQB$q zG;L_3M9jHb;)6M}*+x#{|tGvdpF%e?W^I&MTzf6UdR?h~5oDglpRsq?u4{ zFG#0Otas*$ydkUEV#9XC29vB7@3gwB*^2y|nm?oP|q(O08UGX}j zwEyop^@c#eu6jd-RQ1pBgbpXHVMH&7A9C#Cr2Ka?WKLO-od(n0Vk^4n4OSry)QPE? z#Rh4-Cvdl1!qEialX=Q7!rE#sm)W!IFbHW(8Oqu2ssPn)b`J`u?{tID68>!u_h|I8 zWXIc=fd4D&chWdIpv@^>==^-|E|Dj(y9wd6 zB<$&1t(L2rJ=4b9rSOy|5u1A63wm;!e5TH@?4R@WmhJ$0gtE20#ma9IdxFctP{lg^ zYadkCEl*&@f9quXtuG~AjqM8%p30YxxBqdVEwr=dxvho#1=yh(sJ!TAAl#vT`BgJG zPd(zreR(1fyxe#!_^ZeH$reT0fuBO*if3W_Nts!_Fc;XoTYJDs$$pZY?OI1y0qnc$ z1I(Wr>xx;*R6PxXC>YP^5sU7{Wo^o^qZz{)GS&lJlU^m8h%eBT2TFmT;qiW1Ch z{X8rl8}5fZhV{}a42LlVNcLmt0(L(1<1}_fq*;7{}%j{m?r0T z=yF96N_o8HwQy@%H{}OC;7~@?MYe^pP4qG+GTm5MyY9mr=D5R zzqCgEfvgexYA%wi)eJM)FwhW-A$u}#LAO&j4Yn`%3Q;qhc`2IJqi(YG*ihGX7P}D5 zvPGyRbaQGpDxgnh?jsyAzll`AnXXM!to;l5`+(LIIA4D@+f_SPvZi+(L28zIqrvBw zLB+3v4VDK;K@nZLM+-B^rzY223Gb>Z(61jPCA1eWTu+m5ja z#4Pl(7UOp4;CdXG)_aCg8+KMcAr2aV%7&ivn=jZg|G{mdn=L%8pEO8W1tp{?U*BFg-xq05g?g8$Wgp$9kt=`_?&;1nRLfwR}W}=(nCR6rFNj z3_2kHbue5z<>dJ&(8(-f-!q_uiQ$EW4Szm=3yZXDH9r{ez{BDD84zJ~_C306G$mmp zdvGu5RD=!MHari1^1dS0ut5K;<)gGnqWG!R>GXFWHZQfqV%lV1g$9xt7;1n-^d;${kc>U#?3z+RudjX6x#* zdu;*N3x4fj*zMqNLYeVuyVe_%Yb$PDjwU%T$U^Omr>Wis-@1x?Z6H~zy)yt^jq=*d z`j%4z=^PPrA>c#p^Ha=Kqd(#ibw_J!y7?=Jj*M-(`nslqx!*`d2dXg$6%kyr=$iom7i+rWRw*P{WjW)joODe=&HgY_zBOr*)6XPlf*TU;qU@F#jKt~VzWEMBY#b`842 zJlA4P@voRV1=*q7mv2=f&J@>e+BD{B7BfNus~NfMdy#yK@;JUPS!^6wCOUaAYz)m% z%2ZkIpDxu^s~;w-=T~txy8)?H;#tbI6#Et5#?v(Z%TsI?MqlS~H^#~|kcVM3eo5{A zUr8;A=lazuSYE!$VJ13GNjBArM&uaP)ch6BpYbgM-$W0U?3l_4^f&uDxcCqK6)7-( z4miF^z0-8-8ti~SZ&Jf7AsoGei&HR2zZrDvfmhN zNppj>WQF%#!X<2+nO_!?`6M>`i=KRDY&KCkRI%IK8Yd5zDw2-{^p0x-nUVhd#EAsS zQ2G)tZDySB_wFSwsNynaE!o!zqYmu(=izQ;-BtYn{tn4W>`~cz05>aVv1XlD>Pi%{ zMV^1Jp2YD9D(VN{UOCdn;I7(Xx|$yPy)lBhBAU37!GT)Vv;ujkSAfC0+tog<&*(e0 zxu*2ays&kG71*eDUu%hh%UpNUHJaYv40nCcS?#?Y8uwQgH0Db%WEitszkT!3d6j3* zCUvV(t(xm!Tdyfsr2v%VkKtiXdxStgO=ilpS4rnL(dq&4_{cnJ=-44yA!zBumZ8A! ztXSi_h+?ZSl}T303Hem)1FFB=GusTk1FNSB#vTj@a(|r%yjn(keC)EL$cCN$Ee9>K z(7^Y#G{ZwbxvY439~oq@M|w%66Vryvm-V%D{~(4p?C}4>k@4W|ag%L(n5NPhqR-#7jQhry-Jc{|xgk$GwDI(sa(4Y7o_D{5`$qyh> zwaDACguuu}x^u<4qc+i;R+|kc^hC$}m#~3f-teubfrB$m>qD>R%ndMq8O6+K)g6SFtkQuD zAY~j2c>kZZs|vNViktvi!zTD-x__T%<$4sogq(-OvR`d?71pek4bG$^^C^&OB4`H* zr3BZ1p|1wF1uX|5M=np8=*ew~V5F$%Lrn8tx_6g-dDb=i2?$+SCWs?00Uj=59iNr+ zZya*}+Tow_m+^F{U}@h^%Z1Jt>K|c0AbGoId>-!}PD{V~6O5r&Zi?clAF2W+ymsH# zyoYaPq=4bfds4hhdgOmCIm`D`4YLsf`FfGPF{g+b|7cPvmb&4r!GS%?=%Pb{(h@ z;l~(_FwW7EK-WP-j8{g353-W(wLJ{Bu3uGPTTZ`t3F#5dUGm{&}!ywlV3%H9lj$30?JAP>T0O@-}TkL z);=yaBsF3URY~8vsMIt=%1^1;E%?pF?;hsxO!Qwy>-)JqVzHF4m|k~L(*pH~(03o& zaPGL{B8@qlKgD7KZkyq_P1y&?q5mlxq^96z)KE?%BMvFSx!2RQwuK`*(a50L^iQl5 ziBLwuZm9yzNxjMcxC12?HUZ{Ph|2R{=^0(XrfanbtN0Is;D3+;^$hHVkGS&NL&h7{ z;qs-I{|8@h5a=BSiX}7<9!#OQ(Ht9aKf;PuQN^y+gF3m^p+9^SBpm%v!-6^=b^W3A4EEQ0~;Xd$32g-Wj43sGl zFp*}sdEDoKjYyAlr=E9)?4_;TX}bA9!Licx+_)X7-8(hlCr*5lSr z+sLUSuIV~6#uyagjAgSL{hxxfBA9!4qe&n6QFcCQU#aV;??axEGc**Erd#IZMeo16Xb1uR@2vE-foIS0d$Oz2iwUPZqR(w zMXd{v2{9mN2M}*Hsvg3E5Q(5^QcBdrUZBW*^z3n>-ygaQr3CS%w=SSUM`SR|M4$Gw zMr^`I{>=<4dPUFA84J7|4icTRmw%hQL+N&sVq-9Dt{LrGKXE;{gq;H5alEOsPLLOM z*s7)LDLXhPNDz15TET0+Rlo)RmyS&GEJqr#RVg0Km%&IDc4+b>A!RKI8M}V)AG4H zE>8d+#YLNIKTTp&G{}sHgog*zAR(t8XkXN$SsQRjAu~=yCEWWfP*n{%Mfh~OivK0o z1@9rmupwA~`m=UI`~>w=t5#j+kE4${3rBj3_~!TZjB*KW=I6wpjbVfhfI zpDO{89G~NK5QF2!3t# zw|I@C=@;SG-Q2cMiGK^4+Qlu6#oa|(9QR+fpULL|FBqL=cf5h6tQ* zN95ymb&wC<@UxdyBRHvY^}t z@8@9QauU<|eb0e40Rq{SlSJ@XR^GrwZO%)b0 zGdQo-&%$zU%Q)e!?={wsTB5{pr38o&m#$BIU)xx-?LSup_AA^S;2T{I|As5FOYUwP z?wEyX2j!LBxvh^#dn5C}U8t{m1=!1eCiJQ*j z900){BXXq!!FPsMwZ2>p2AuLM8^mbZE|p^V>~6Kb?IHF*i;CcUk2ntyNLNhg9UB2rxynzZ~o ztdN027|sqr2Ih;Vw064?C8D9I@r%`cGF@)?El@l7E_U|_O(||?(XRLY$iU$SZW4DO=Z^`sox9(8CFM9g)uh)f?_myKD7Llm6dc5-!fBt|yu)|a zKM^OnvEj!yZ7{4uegCgo_GMRy7HHZ+qwKhs#frA6=K|y$Jr4a7E)x1ATEw&pn?E_K zd`e2$9F4|b4ylMr>f!3q6$gZ!H`3&JVPcr+D=M0Ot)YV96`H02Ctbrm+f z2g!cTt`n~CR#`@mPbcT*E@TT#Npy0=yTHr(Q&bVhq3w*)^$SG~9YD zCwMyr3D82m9cvrgnZQ$#f#toWJ*AeRY;A=i!eXO^iF4~vXl;6k5q?l-yxnQyET_S6 z*!{C_s2I=Qz#d*YrT+wMjQW{76&h=qy=~S|PZ6(%3>YdbzixhtyezFO0NoW>-M1je zqMjY^gn{V~QZ!uWoBZ>|wKjVcu2ae+b$ue{-AMVOu@E0NsmmTmYdxqjVz?AV43@@R zUu%NZXQH3)eh-s2Xr6lICN%KsmW$-?M^k)nJo&l2FZLg!E1-~f31JJ6xG><+l{4kg znw&L8^u#cWz~==?TO%I>!#1np@a<-AC1DWrUZ`j+$AwPMIWFQ{e`uMAye7TUh7QnZP%qVZz7_5m8-Ws^w|W&zqlFO65s_qQUWux!qLyqMx;|zNvg1tO%l+RruP3);7wKkszb}6?XVT ze4BO_xUC?3eLXn^%8TCquVw~`){}2vSy!*T{{OWA-EJm<@w(*-8=Bu*SG)|biD9o6 z-Vxonwy{vB-yJ-EObqeCb2M$-N`lm0R_ zbVkhglg9v>`q*8ETI&G$AFCws3d7=cZF0KeNxWDTO(~HaAUV*XBe%=)(BbWJ&UDE^ zQXqAc5#a4402)Bp8Lsl%nN^h6mG9puM9wga6UxQt3u1!E4BbU8WZSqdp>M6unLrMP zP=HPk1W#o~(_wh3^1FaCb=}s;z=@^{dCTXtA&mOnA6T|$nG?rT zbMfa~3)wY6oP3Q(Pn7T`h`?yBl!^iW=^5XreOuSp;;(12#5>mP~?Q>mr) z>+9yp$0RWJk#bnoR>|nC+_=*m^H$|?HJDR%ME`U;O?ThQZfPSJcL*`3T1WWiu=}1- z3Zm%_M*<`RT;@n$Y3JZMJ2_2H16_AWADz2lPP$o)JwdqlD6`SK@;2D~soMl*lR@_} zEU|K+6~tCr%M(-qBKS$A;U>-k>N<`tPw-*jNhTKbM{>dgmm9`F_ryl`K$Cm+5mtk$ zHi->{tQu;?HgvA6TVr$39YEJmRdaO?)x!@+U4R^bwAuGrpvqmvc(w#v=PR!E&flt9 z2gA5-s2VB^G#hLsCz+)@r+!Tuv?4DG50Bk(foG9n9j+XrTW86oy>v z>ugHA>tvN8T(w^eE0g}=%(YF~gX7r}soqAShC5pw)k}NG`keMcBL?j67q?;B#?f*= zi&(FyztT|wpNFBYebhUKz?H33BKr0`sXv57e{)NZ@grxhIY%_G`3mi?Nm$-AuG2-0 zjv4MkPn<7bq%Pvt@YY-1DXtB5Avx@&ovDV{P57T*S_kfdfHjlCg*b$`a#Z(^qJx_m zhIMoPNnbcG@JEJ4I_mV%o^l&>!!|s4EF;Q$w~zWYpf#*a-h(m8mw=ZMYBSjDsAFw9 z0R#h;wp0xGKFZfXs=1ew&mtgMtx!Vp`uN5GEn1}a7cxSXb%$N@Z+{lWdsMK-GH42B za9)dTB|jp!Lg~94=Fqpi-=+0=S5V&IxGS;n<+WV?7SbL04q)!9+e5#|$Q{d?mU91& zoHQOnT>za6)~A(Ik}@$C&A6l0P6m}ghaP>lVR43(=p2e{nFPRJb}h0QynXXckM#n< zi<))Br_#6!i+i#{eSr7VLL9VcHDOyVwAKXOqRhfbDbT5Dk;FZ@M&9mu7JkT(aMSl< zlzd*Hej_71N0v+G{IVWY$BB=_NP6t~}x#Ei|I>9d586 zwN8%3{LVqFa>5k1-dIxlXI_&pB-m+*OpS!QMx+f*aKUY(Z>fHHrrZiS}Wzr=It(%}@v;cg2dZpibwaxhN1La-$X0_PNFsz z9-0*F((E6@6a{V$^_Lc1G5b^rb9x6t)bJvyif#yzMran;Qw(sav+J zf|jGq&+esiotCY)x$ydj$QvEzDW|yiTKzD%fO%HU%?p`h9#`l9?u~B zFVuzV%*r*=K?B=g@Vv#vT7Bbd0>e;VWU<(uIH&Nvot%Ewr|v6_foEr@?k6<9fcUcb>j zq)*%DT~1!PaEu><`uVp4SbNJbULx0sX_XuI59AK$7JTM@EI|aCO?kf#4>VYZ*|6RL zv!JJL+z0zi`r<0W%xP1=_e`j=!cw_ z32zd(Kl}93V37oMxB~uah(Nc@1U16le$5>aJkfGJ?njl(zR?XkdL^l7(1~ouIiwU4 zQ1Ylt24qC|_G+GBT_QUAaUxMPAnw0GJVc-Q8vNUgw+KikLitlV|JkmWoNl>j*?ZZj z$3IKbMKgUo;V(|Q_6uX%vlrJ2ySrQ4iNpgtpivR5?g`q_^fFm+`Lg_{?Iwz&*UVtH zN@q2-1G`k-CsO7KIA=U@97@&w(6-w2Z7us1HH9Cc^?pFuRF40e7C~eszzkp@>44Yv zmoRTqAcC{5@SR^JqV*2dg8aQD@js%;g7+l^$f<1lC7jBPUA^?2Q5OF_GeE_avJ~Z> z;2AY%O5e&J1%K>97$Ix+Xl{*LA+?=fsE_{;oszZ{Bh7nB6J?W@UkAdsGs*UCcJ&*! zZkwA4x?nU^yxs!K`x^_Jp9Sm#tP|L>Q@i%ib;{%|S)+lIo$PerlxLkYJ7}EzejKFp z&%_)FhkS7LwxFx9vw|CgUvIjGJ_FCOoZI4$6xQC>Jm!&l?N&XPbl7Bs9;~}@u?>RA zne>cRciL|XrY^q6Q65Iq3k?Hn7cUE|G>?fbD-JUX@GbR zpd)?E`ijXdgIjU736oeEycZbUo^Ye~7UJ;a48Z^*6PAstBXmhBdnCL z+$Stte1+vU%FdqC*SEQ`l|7sI8Bj{=zST|nWezlVv~a|d12Ghht2$!q+C59b_@x*e zCxdOfKaBSuU>nI4y}WVH@SmtXjJPS3P+&+f7HFen(iS)MdYWhu!yvzU#63bj_3XQ;Y9OEVhw17G*m;cT@J-=PGW8& zeUN8&XahFg#KTKZFi(>}caRh8@7w#>J_S{StXJ&Qux)+H9P-z;#O4YBMbXz(#Nx1^ z53O%?3yJgDK6Cn>O1%;o@N;K|K86-{qBv8W;+zkkF-UWoCr#d#yRex=J=7Q~bwGpG zCXxuB*P#6p28vbKqkgts-QC!r=swVT&M>6T!#5}%cz;Dxr3&%{UF9^kml1t2{rD?OElUudRevIQ3KmO@} zrQpxZI~Xbs^pD8?vK40-t~BAo58!u^J&jw)jcE&<@t(~wT;AJYs+k7%BImDx(kKmK z4GJD>1ZA8Y7U{R*9;M8x}qX-ieoDIC-+h!7qmM4_tknOk+7ESX#ZrTbc5DBl{B-!yTr-Mi|QV5#6N5=62)MnTf(CP1kxBHqLx) ziS3l(hp!gu&&2RPgwpfH>JinRs4n&lIlOr$71>E={*j{KS*`X{V?z@#|H&iR9(F_J zJJ3M7eh{ zWc$*OOp~agIC9F5_a8$QjmQSbL&_+`&)(E|DO>|En%w5<~ z9P^2fx_IbK!t(o?&Ct#q(3^w>Q{JuJiH#VOju=b)SMsZbt#O7BVzqLR9kaw~px(<0 zUJ@PXjs62z`aw&n9j&mO*YInp7>~PdO_>hEgss)E3PWPrP@-+b!}yPuK-cx&9hy5qEN|zq6CqAN9CyT-aWg4a z)Nt9FYqy?Tg{q|!f8btI+-fPD)Py_uBNrH7g!}*(QB%V?*<4%|%k{v+nIojdW6E5k+$tRw`KO>r~ zax3}c?ov-b*FVmqleD687P3ExRb5pxue;7{RTit#QVSMKlEi`(N8GAfo7}2|lY`+e zXX&J>2ZAE$6A)VjDYNRsj!ov{L%z9&y_-^clT4E7)7$~q&C?fnN@KrPthHvIeD($0 z6e$X9^}k_c#7!)Vt@w8wO&?aDYW0^+ZDZ+fk;gfZs%oc%Rm6Bk(b6^aCD zlydpFVyE52udxx~E02oZhvB#CYb?*`5HGu%cq6NmtjQTg7>n|nZR4uzJ3DJ1^gG?(%ZOfr}eAf=v;UWVOqTeQ6o+Z>nJyIAhe9w5$Zir_RP8Y7_19zwqwcc)yu~ zg$eEv6C(pna5X@8^3aJ2`G~F{!ferS@N67c%~}OIOpx&OTrZw#1T2M85A;01CIfv` z)$h9g>T&D4O|3#Dy!(^VIz)=EQo|hiuo1e_+lE@%*{cWmao|%Vd0fGhdkwEnb4sE$ zo4`lhwX9{zFJhP0)!rj*gQat3oGDQ5iMQCQ43yuG*SB5ZUBJ)R9@W{%xv!&MlWZ&JQe@95AdVo9yi zjPUk?MF)mhp7RxEc zmrS<%v~OoXkK6(xY>&6caE#w?B7YXmHDxvuR82F0(K3(>I?X$7ExGGk=`P4~C=zC--88_CzF1UMl)B7ODfe6fWdR3hXAG zcn!4Oy`P%L-^<^2IS$-ZX5^{APlzm7XaGDD&J2D@)u&`L615e7Ko^m*j0w@BMU2=In1x=f)+v+ z2EIY50cy@Iy=AY431`@!DcLCGN-vFq=7aUx8ev6d1>!}UAAi#9&G|&h-Y{l-6-~ze zPMMdOkU)&0_zCLj`j}+wCa4pIt<}>*G!OQGr7SnjBzB)%!vxPhk-MMGCLiswnZ@w$ zTge$gWe7OFWvFUaQOA|hX-^%%@@jEfd-b_8;j=k=gZ?*#TZzd%$sN5dYOE9Y1mqq@ zb)M=0${e*E$*z-gO^AAM>ch;M=nQiZ5HUH;>HZ~SxK2fUtX{SW zZ0W^)%2>W;#(kNqfs0-@=nvo8u~{d?CXi}GTfAE(c8N#5ge39S)KJ5K%E9SD@4C@G zS?;9@z{Z(KvHq7kCP-K|oCu&KinV;()qn0Jx{Qf2@1YQ#eSenY%69{qA2ZO5Y(n4U z$CgAwH*Ha;_)jl)H<$>na^)K)@ze`^(|Mf0^f+NhYZA%cx7^if*sU>Lu@s90_^?D% zq3p_~%|UEG2z~9`43cXI8AF#^nqqOTxL$YUHNm+6JI_;c0!wVyHmhLl;-lp!yzU+w zeESANd33@QyU+ToXjsgJ(?z8Gc*yf6#3)s zqI&3;f+2%hfu!2QG>9h0Z zI~1y>oK%B5H^WzmQEpc#5xMS3zvca?mUly53{@Vsd7tEs$*sgtB7bmLC=pw_XA7ix zU!(?A9BL6d9Dbf445<{Qpv;2R06xg{jug&+5+MmuitWF5OFsUN?l&3a3d-?jCb17GX(p#g;RQ)4@jferLXQl#}`u{XO>B#elfa-OR|= zqGlg@^TfV$Pp4!4eQ3USA{m5L_z+N;Xnv}z0RJoqiFYU&G@P?G`XbRFxvnv}=}J}E zQ}}%MR;)YnRUSO<&RK|U5Ub;;>ZkM2?9JalQm6n}F5)31#&b024gxBkqrO)pdslDh zCSIE6v(ZL3eWwaOHt$<4M`&mCwA?ZUy@M{xu$Njo8aY34kZ4FKr-wSqgwqnWk&EGh zD9nr}q2E6U<_A7+O;(2ANPnu8u)JY0pWor0PVW5rXu?mwJFKhNtX8^`R!YgRpb+Ek zW|jm;bJAWGh|@5`oJ7YZr&{PYV12$Xy3{F67jSWS`0V6A%P+_`h~UL?=1^<;%n$ue zdY9%v9^xuU4v?Y_x@d3%v_w+6t|xi|P~v*>eXuODK>795!H=lYSFm@L zwTViM4~+c?U1STn*7+>nq2cMCwCt01Ko2#1UY@8lIJ5VV$)OLwAqEmu^^`?x;bfBk-_wf=_?BgF9b&cL+Y0k8-r zHi6=d=AI0KEp$=ZBB~mdi~xB*dFP;7iuh`%E#2w6SO)AHcZhW!A>o>9sj@4}^?-Js zMbP$3_L*>-)PIFHQa_y)n74U{Mt3oW2e)Yca*Bw6oUchOPfhVx)#D=H0jHW@h{@fN z2W>)mt91$U1J(S;p&r`ACsd=t=m!_ymXAGsfd5=>X|GUu_WkGRG4*D(YvZ3Vc5L6N z6aHpjRg|B(`RsLYI)yv?;fvpgYyPGeW0eA}1&Z7PwBDM09P2&a5^-DX^N$;;6=8wr z6~n|!(xnL29>xT}!gE$eKawhc%>d^|#~{u%!Xbr-x}~?XM}hUDbNR-p3H34GfPsGy zuOP{S?g8d_II+ZaW7h(KHmf;JN*`MC7g{dn1d%K}_@YnxXA|>OCCKjtm#|-^u)-t#mc!yO9JKvqv6t1p3ahHs&Jgu5w-mXu(zK( z@>aXgMT$S~9u)w2IoW;L2g&}eL{FblppQF_7W&93c^Zu2eqRFd)mBot%DKf>>6ClV z-TZ#SK2r}MKK>P2CI&ggnBf6vm=VH^FN2~lUv4o>!JhE63%_{watG1vKIt0bJ5oYI z(p3M`*8~=NwLJU|*IYt)7ijIr9cnsd)`=|?U;X~H}h>g?V#@7Y|a z`s|`>)?JUO!ZCgEjPJ)x9cLxtdmoKFcYI%Mr&yzM_}Pt_nYYfz%@m$onfc^@&-o*) z99Q~RM9@#bI#2xABqK=DI?CR1R}^7{#o|JS1I{Xju4)|JD=;I*9SF znx)68(v>glnXawke>5Jxld1irHv*`1nh~dMVH_w_4Ftq!JoQTwGer%(eR@_h#&R=m zzoQvbpd;nzC9Y`Yz|N>-YPT8@%`i^x4LWfgl^h-oUu4^*dyH952FO;#Mi<18728=v7ZdvDQh_I?!Tm2DT z6#F!@V_1pG5rN<>H)AwZbA~Z{9)n;>!$VK)Lh>y>o#yzlZ;pXgFnfO{^nrv?+4f}n z@&PfWgv7s}foZ23Rv+~23yTO39N#)ndBalLJ2-k#r8$y}`q23Io_XTz6Iv9Esqgs% z%SeV@cI_^x*qhlRW1aGfI1E%Gg#>AQ>=i$B>BHd~#KD)fg^9lLwEVw+e97?Ilk(Iz zJZZ!UfXm-J4QU89Qd?JF@}TmlRZ7cokORgfzg`;fx_9eZ7i7jp|7&FH$(d@KF1al8v@$H-qR@OXzVZb}0W1uR$?V({C&s}{arHBO-&3P&^AE;d;r);$ znUYisJ+i*7g)n3!Rt($!tC$C5eLjr;e=Wef0z8j9R|4cs5ca9p{ef@uU+vDP2trL# zWeSgs|3oePL{=&lyrcS^V5^my2K`#p`l@x+81nDtsAORz-CUAQqJ5F@(tVRKBi>RJ zEk-kbQ_x>j{ari4|AW_l+UICz#Wa2Sibdm$1gU7Fm0J}#$aOjOrS2m-nCUY7bFK4P z@XZFsb3;TS*60W60oBo8?GZy{M_gjl@q}QUH_|*>@q^8-4JY4A6n&tj_nW=KS9g@k zv5OSVg=^3!pE=a#3U#$GJWg#$Z|E*3XR#7Qw$8g!f!7#8Vk+P@r@_(O>W+Jwy^$|2 zTP^PMz^w1e1!M&7?5I=i{#b7Ol)!jThAI^!c`t?>!@PIpI9NzesAOo}^RMgF;t^v{ z_{WON(4tqx<<0`pcov<+~~mE7jrqPq5y|s@q9P zK#qk^$5M)mo6Z!I{9T^ZxOO5OEpM}5c{b@vN{R0m!Vx<=zZs zD~&@a5@`gjJeeJQjGvRg6@5PAe(!CZ@H**Fe-+#;J+k@ABV6gAvU53jX6gFjywbgy z8O725H{ZpMd_O#SZ}U9k4teWCwUT9YQIqGMcKuhdw_%{=F~;>3^5jBQs|n&2)f(~K z%?!A-&w}st*kp+RyH1)`ot+i7LdZvMS5GP7r>efI-9{XlF=LsXM8?Oqm>E z7xsIJ7XhsN`Fu&Y8_}ZcdEANOwMKknNt-9mzrk9t{Ox!iySDr$)t-@4`-EzWI7-f3 zt$MlPUTdv?w9%XSs#VqF>S}>JWI(DN7FnlA4V_TPZwy4OQDC>Fve76&EoS zDH(goC-&;w=(87}7@v61f2d91U(@X2qN2rg4qxc1(*O1Ru`25!f%`+}U8h@jreDv^YfVJ_=`O%=#nUt9mEgH7cx3}Jk&`Q@~ zb_#!^-T1+2S1#%qSm7A_1f}uaTL<{F*Y#h~brSlr`5xKW5bq?a9?E)2IsIZy z?8}Sh+{6K+jtSPX>U} z^(}=0OMOczcbO6tEm|ghD(W{yp;&y-6IVN^bH;Y(3la<7&^t7kK3*%T$oQUWNzGB> zL~fTMU$gG~ar$+Q`D3PFQ{_b<-=OgUoK1+@CpFppu@`>auabCvHmXN3QjchPyngS1 z^*_vY|IOp(v&1lq*?vdQ;L|Cno_v~RQtq*o z?cq0{^A$w$T9s+CG>dm9*zG))0Ox${l|YQkz%=TD~TLAA``P!l1d2WW{!{?bDuL^a+4Ht zEtI+ME6wI!awW&y$K;%2Gsn#E^ZorEzrWz~_&gq;=jZ)?J)h6l^Z9o%>j^>txCc!) zXi*>Q3{rwLxdK=Hq}KCLn6Wr|{h}c)24akL59i$ZQH<` zCS&k6jEs04Zq-Xu1G2@}huVGSq;Juy%DsRlbiG>D+x4PU@DWHkP^0hys|GsVdM~dz zwNqy&E~v_M@8R1-5q`>joDrA1amUwK)+Fqid0Lra9mwzGLl#k+yUqGDld2my%QJUV z4&G@~lY?Xw+61kR%JlSRwN{2{l2M5YLPIA>rQ1e`@B=9X5dcjLMF~T3AiYN6|6pQ@ z*aB=ew_V{$(_(dLSX@CT_dX z`J;btFlePkv*K`8`Ejq>fV-M0cEDJCG!bLrYQ z9CD9gzeHL2dpp$Fnogdz`ZmI)XDhh=EPwjUNJi9=l!^tUq|MP_O)3|}^;07IuUmRm zEB|l$W}LEwIv38to{U~Ce&Fs(xdJy)&WxD{m3cvoC?km42c`(Ci~?OVd9#?MYq?q5 zkN%dH)I8g_2cai>WqIJzm*f5KHSo<3D9V;L$t=;GKKFk6oQv)`V0p~=@I!EUgx}^U ztP)wj)IXZOf1K@`M@)rk4srpo{z0`E6UfklNe`4{l0A<3jOhEPRm%F)b33Gp)Mt@c z0PCN=aj!;7yeOOIk1r#DFK_utDkjs-rLfcQ$e`mdtm%gKrR`=2oZ&UbWw=f8QqIb7 z21|6j_hag{KohGy#q6)MyIZG}8j|{1i?2A~7Lj?|Y~0-#lQ%!wpH827H)7GH|6KF% zReg=={75THf{v(;!+DQV+xV1V_XA}E1YLqM-2U;*ALe1&bCZW9d4LIj$$?~XltB92sku}PT-u;9sjS{RdeWio*VS_v9c|)+D(g1yiYc_SJdZ#xn{7|Re~Gelg?M;j!E+?{hxeV7oTzxwq9tNbF$L)WyzM zgFHWWCBEyY$@z#4h#2w43A{;`%66~23eLw!K(zRpjMii*=dU753%D^t3}vK5(cMXN z>xCeG47cvZ@)Q@jnD8(A_jEp+Coqb6emU#Nrd&mus>b%yN)-iocokreMSwc#z?0Hq zow{t;D(PlfZYNl^A+Rv0} zx@f(}#1^+wdmC9lYRnBMA*LR3Lkk@POm5@mVFX>9J=Z}2Fm$WXz?U&m!+lg&zRJ1B zQu!D3brsl*ZGmrHCnk<~?nd?R7lmJLzE9GO2N#}ceH0MJcjKL@_MabNO*2wiyVc!IJj=JeTmipQ7wN}GXHMoMKs~-N#V!pc1-`1 zRCVS@oYz+BFFqMI5Q51|f8%+3LI(aN%g|bb*~*Fi{~XWECJ=T(YkjZ&x4s(DAZSrlW{y(3>^_=>m|aSbvb-XeEpm4X<03gCoyol*}hF; z2N06Dlsy`K{jfA6sXJ1l8kSzl&jbO~-do-ZJQKQSYmF)@ zI7;&p0_u_{OrI9fDgk5IPdv4EL}k3?BxIrvExqN)TVXtWVS`*hE_046PSMyP*VA*= zjf+lisTYgznRZ%S4p@=68Z+Z17@E|2EiQ`NdnL;D+`F7Cgzu@v;h5P=A$KtMDbI;g zK~x9z7#ZR){WW3vw4H>>fW_AK1!N_zA(sor(^*tM&CB@Sb(+8HH-Px(@n}0B=9mm# zgtZs;vOWRtj~m9mOa{v5zl8-s?5N+7)FQ9NVyg6on=|dHK|!1Esy9Ckf&@zYDFeu= zTPd_}3yz4V<5v@x4y)vVV*4Eu$5=0fKUK$QR-1rE6{IPn3M#x4F;B@OLYq%h?;;nr zWHTZ$26K!4Zbdqs{Uv!7M{AAMq#NXWXgv^$xnd?EY?Y)T;V)$p8TGX_vqDMwQ?J$H z;7FJX?pJEN1;NP*owM3F^m%pyGP}pIPTDU(yxSS<6`R^DKs^z4JgD8N7@~eSmmkb6 zt~j3b*ZYiC*c>E==gDBhICWrvh!#Kq znH9$*-kMQl66G)m`m!GJK8pJiIfWjz1SmH~7-v1)b|AMkvIphCX`jgCFUF9|bg>iC zAHH^)3)mq|KS>ihVrNC|woz`~o$lofQ@KZ++wqmejtGe-(w!3)^}S@%cm-I|tMw7Y z>)^7!{Ghy$<>63bZ}H|yXs;mY)?7Y)V`_46;F^&5+~rXz@4p!z{_yjoWS5dsOT^hC zZ1%lKHM7xk+T%E}quXGgZJBa+8v~lp>J52p5pr$Vej>buVPvC%Sn;{fUWyK zY}QpHn2jZR+{bH^3z&*KKW-MwK%CCUS5uLXcH~;FzTTyu>{D37Put$?{cE67THli) z6Vw75g+Fb#knb>$wf|xAda?al5#*^dRGIyU;XrK59LEzB+PqR6pta}7=yeN^#s&FZ zOs$JnjPu^#Ruw+p!AT_^)3FDAr_+5^7ZV--HA}W;)0;;$E02ibdB-eD=^p?>+YX0| z@#a4Rw9eMMx1|K7Rsls&2(IH3$5>|~YU+LM4}gWukmL1@$r~4;(rULtF6t`g&J@iC zTGk@?ALbNCvFX-4%6dJd^Eb67=$qR6+3Es5@7TCs!~DNrrtzcr>N#y2&3O8n{QS@0ru*>G<|~)|t!t zW7?b9a^5!PK>O>_Ma|V%`ptH}cLdMQ*4lJ&xsQr%iamgru-Duts=>qDr_^jr-l)ls zq)RGuZ*0Hb^Gnl}&DSI8QqlzobGf-+5mCsM{SQl@owL86d+vWXon<}BH^h3;>K^iw zxi0h75fZ{|5^Xw=gvQ$@KLeL9|53C)fzpD+aW*u3y1!TVuK&Sm)H7G~N*(d^`9#Rko~L72uI=x^%PjJSmj);A9#)K@_qIJ8{uZOv%4>glnsq zCyUtZ&oRE|=`f-31v5A_C;i3H7bKz?ZUFPzf2WBK~${-@*FE-oYGBTSskh>w}&A zmW~*2 z1#R6(kt1HnS;2WCNA%m#)_BAAjP0A!Q({NN-h|!YL6BS_OA^`H`#n`sJ)YA9+`8r5 z?`euX^N7xc-Pb94*eqS^=_Yx|_Z^ zBXqQ^gcQ2DKjai%wvK-;@HhO~SWLqf;`^Z~jk|dNRL7kOmfdF^u)4|zCk&ch5Y?S< z$Q#mPde(B!&?fxHwCRpvX|ms;|9RVO&4YOMTJ<01ioNDq7?#s5g$%khwbrod?P%59 zUjuT7QrXe;-jjEkFB9wGjpyJVqh3g+tXO5`H>nOjoOVGkcJ}X4H8uMB2|sMEow(E5 z1lcaD-%M!Z5$Ml~Vc_3S@H54FN~SzZjAE4BG&IXqyW;t|l)L_t`KuYw3Q>ljYq55A zeKy+qYDz9p!C18TURkZJc{h7EvCuC_GKmv*Pq{q0AH=A~xTLWM2Aa2MKxCUC-j|02)F{AP8YL1CvL0|j6GmlmF*^m%_txvrXFIr3qHn;oFN7SxhB&VN+wfy^8mA>(y zycgI08;k)zf;($l*huS(-BcuRo%y3?b^Q7sv|<12_QyG>zN(YWQI5ayVXp(6-Y4Z$ z^G+a6rPlt(`=nL(tuDY zJm><$qL?z~WPa^@lmhqv zUg_~kq0yR@FNSU~LO92`(VJn_-&L3J^77v5EI<9^zipWAPOM^Il9Z@5s$s(| zF019?qcOxMfH6Ca!prSwj~JES2%b5~qAbur-G=q7ZM5u%jVn#GG?W_~1J0NA+G&tN<_;s){@fIUGGV1LXzqEr6IT7KABA*Qv zJYcRe6ja;)lbbNZ@SgOUSf|lVBIhD-o}xfaSY8V%pqWIy()jng|L!tIjA}V5ULHtA|F8x+Wv(Xk z$r{{WJM~VH@8=^AbqBKpmdKkiQ{;yF;AcNAzBAqoL>2hm^NKRtP3EJxI=!iXbRiUD zsa$eXa^b4$O(o>6jnUfjRc_Qh0Qx$mWZvxS1Bekb6A&3{yM&fbzka-W=8n8DEcz+` z0Jgl{Z@bOj10m+^!T12Ai%orx3H0QV+Z<$EX&E06tSHO~`?Y_+#tIg_-?L~QW%4}{ z16N@8;kSTo-98cRcLNtvV;P~WOR2GynVVxhC&L@#v3_Q8uy^nd4IPnxScIV-wvS`V z%vrnWm89QgpcpuE$_KpN2*8?2udcH5td7Y1EPH0F>94evI)?ZfA~JE2lDFz#)pf@o z(%BR>vKw8&X(|0@-)%)f{;1?L67B6KLXFwdX6qd?Ocwafy60=4y-`0`akhT^(*VP5 z>das1%kC@}jFL8QKOWX!VCc_#jh=dx%9lRV+TM*-skwyY>$ks#xa`?eJuOcN8U82J zq1)a6k$BbnoPTVZ(SOpC%}Xemb@8)Dl4po+rYuC`u`-xh@$w&yRDY%U>Wnsw=-cTL z2)=FH9L;f?6sdjXf+-LAU}kW3*}t#AGb zx(WM&9!>fa8Ny;s$lO5uR0v{Nes z@1Iv=O)>>QbY)fWE4;K7^zI~`jxHU2iFLLOUmujc;9(otfyj1P`~xDdOwsXqE{6Jc zYqMuMJ3A|uSPv@wYXjd4#cej8hK+%uZ-s0R{o@ivkOl9DiWE%vg2Naxh=q+Q^<3nY zhUl?m9(5m|Q@Zy#XaDrMkedz&zs;<6;2qhl_q`|D@Jg(98^1ge)IXPw-1Rh{s5p-9 zkY8jPI?jrN_nTLBI<5(YX^&QI*o$iZJ>$jhcm+>hrr%i-9aIO86RCHYHaj#|%W+KP zC8k#vag(8}oN8AcddHH}g7zh)Y{fg~vJNPdhi-?rdg2@jQ+p1Z?U^Cww$L|k+Y)EL zNY~vRR8Qmy-E3Y500*I>)0rJZ?Oc!bMO%JNza8E0K_WcD&@-1+|9}^`Tb~Hh0y1P445zFZvi=8kAe{ zMwvay4B}A;TZ(JfJ@`uN%GcrTV8<hUpIW(4rZf?afx*l z&cR^w>Ak5JnUVnkkZI><>hjmJrKTP{Co!S~^joC4GUysG?wKfW!^{c9BLuO9`Z=f` zLg6796CilQgJ%LK#S1c}yoA_h-NTu~eF54Bs`j`FRMUiKX(OoHQdTs0W-$wuss?9H zCdh8?H2wZO5j9ReBkPt0`Vo%V>yF}TRCNI#su~)J!B@0ol3}PF%F#6 za9{Or95cFzTn`Pqi_ikrLRzrvW|Q~^+~pm;;7owLI-il}^ebY17}^$J^R2g++%Tp( z7?K-@O=aEaZBXaRVx9Be%+D#$J29d|XOom%5BdAF8=_q{llkoTWiiUO>9F>oN`r{4 zmF)+9WkeofMK-9`W%AjW#96s#jrR~&De24FQNR%ktH4nZ#~ILjJTcb0k|qi%^i&Gp zU1Yi))MduF1p>vcdARrXIldjr0HKK$v~bBU$ZFLk;!qIPO|-$d1)aVbcBUw_eM zFPXQ;QC)67z5bPeahlOJ%V3QtehAF^y}C7DxG zhR$3^FeU9lowfybLJ|`%+JUm*U7s zJwmk3+-!1)w$o?g=@4tfuf({K*MIqzq1ee0)99P0j-o%=2a z($svqll-gFa%2pvN$eW|*GF{Y#6-?Pv-IcKqlaPZgGG1Tt*aZZ)5enNQV~bUri`%Y9Mj`92>i>9ah{cBRUqwiuHMbpUa!roqc_CF4|YU zDpY{8m#O)JZAcL7{RIVn$8up~N3XS3nR4Xqu6IMhzTZ1-YD)`f1sQFG*SF6_@*t!FKr-dNlqKQ-9fj-H1 z@fFd91FYTzQ0LbKrCNYy04akv{(ZKlv$WC;p9@(y=`eP@bQ@TB8K&}QfFqYNnW4V3 z^|m2&Z(uc$hRV(0^)9&!LuH07lAA`izy5g0tTOZC+*;FtCu1dg+kNT!j0lIk3BI}J z*Z+F~eh`oix?4W`Z?NZ9KVcu{+~-MVt#>4(?M3HDlv~-IBaVt6y8R23O;1k#0O;?T zU;g#rK#GN_hdA0|RR2CJvE}5Bv5q?(mHWWrd*9dLh~2ywHHP&LpqOjdJwN~Ijh=py zQ<8ZRIU`vqr(PQsV+a_0``7fHF5FZy7i6jNfe*)PTCA|`%#VNQC7oejMq`K-Bsetv5zmigxoXOH)t;8KA|SS0jIc zf0~y2b4q$>&MEogz_>o=^qB!Fm45fjiGraQ-frkUd_pKc2s1{mC3;N$IN9I%g0yxn zZ7R0qB|^YA=iylC@E{V_K-kTad{ z9tG%noE$JM3>hJhNU>NoLAMo8hk!mHulo-8|li$I}pk9a78f%I! z#Hx7$as^9L<3l3$c~N4*AY#V1n!H5dVsUuFUIK=?wZbaRWwsdAqQHJ0spSqi#UEh{S?Q0T=gnRS?42< z8)x08JUCmMTM_nX9~@?N|eGvoxNTV=G8|aw;hMit}$AQgVy5- z6e=P7Jq~fibz$ZgNJ1RnFs`|QPemb^l%G~B&R2>>QU)ngqgMlEl)RSe$<5=Or-$nK z!YPFEIqC9syw{nT=2@O&F=+7mO~$`k0vXir8NI0lgEX+boeTDz7xdnEnyIcD6D{Qh zc(pfQLZ2Ahvxyf_M6(JPSInJ+3r|v^?Q&2Cb2i3BEMy*NXun~b;xJC zzY#WC@sdvsyal#J_!Llqj;Jr4ev_9xzm}H|n(clK50cJiv;Zi-0Vw>Du9~C%zpv4S zZxiQlcO-V#b1J`@%QCb(KH4O9>29=;(}xAwQ2FXw@A2ZuThpIbYytt<`vb7K9grn8 zj1t`|$hPEWFk6V%-Rb>8{j%u>>_~)#azKNf(El_&+ed(yk-lzRXSJ1v^Ml0Bc){^~ z8}MEmaPITcUPf?_!&-CN{%WaC*@O<>s51u3w>7z_nm>Oh)jk+r9^#o-zc(3v_j_9s z!hO{Go4I#Jj7^@USa)xg@xS-6#c{u$Ie_Fsa@@~5v*wyvJnt}>vxHM0x4)G}R_CU+ zz8uymbU!g7UU^fhPm>>W;re_f;dD}VGf#`@1=h(UO`{z7Pk`$XA>1=3Q&ExZHn621 z&EXbTzXvj$l3jy3o}PfqQr5ygO4Nox%Ax{>ohzOZ8y_#RdbF+h(f2dVr+bw|j@LBX z`2g~LS%|x}{-BlzO2rsGh66MIfLVsgWkv0*E700tjhXAQR3BT-;}l%gvE?YG8SA;&9{eekNw{Zwc!$u{PxJD(b6ONzd<+&}RTfV^R-PuL3OA z)xG7fIJU-Ob?v-Ats>#h$jEvPc8UIq0P@pP@tg1mdT1n$&Nx^njdQ<*JPZB?`>^X8 zA)*0gw1tM;S$aL9`=CU$;@>+HMC3Ws8P&(Z{dKI7E|u>y=@TTdJjjSKFWps!TjiqRR@5yl&AG}|$#V#%7 z@~XBL&o(-jmcf78ch-P-5zyV>gz)A``M>J9l*2cc< zH-7sr*bTDlexi6^*O|G;9`XEwib(yR{3GwUIQ?AaS+1o8+!#i@_jv2k1gYhuKs5@Q z$FVf*M##ZYg55(xs&<~KOXHP%7?(>DJ^}G9+C1y!U9NUheM{sfkF6cG?gLgz?V+Iq z-2`?o_IZv~W&+6)-^sqcQ+K7-oy8Q6U<KH$l$R?Y7gC%p?>M~Z zLMA4^{lIITxO2#XpeMX7H3Zz0R?<+5SA=(mh4st2BNu}a(u=eA-N&TDwX^~rK%A;y zs$i>+jk@-nzl0UT1!M!}qVQ&cwgB9=6Iat& zROOF`j=*~|6yBprjy}%$cFa}>;L!q_hCl&+jh|IBNLe}q>r6}uvQvJsZL}0b4YpfK z-nxL9L+lJj&LCCz25b>xB5Z$=k@WIpOqm79fX;Q4j<9&8zfW02@#gl>y%0pXGfGQ= zDdBvGMZ})BVxkJN?#TKpQkUx1)OR?JCiMFWnAM35eQpH*TKHU|`J7r)wjuAAC7EHo z(WpvUJhBx?!ft2A;PD<-pS#GkOyH%pztiQNTg852beB`WeU?vJ+e|#l4}h zB^#YL>|rqZQGL-vm@ui)RdPPv&STOCLm0{F+Y)q=VTmO2-Tw>lB^CU&Y|5h$=Jn?J zB>r}3EMu`l|MFCy#wQZ(58w621o_2+GGPeucd5kWS*tVQx4<$AwMuLwr${bYrK_xQ z{oBxvyu!%3>A;Bc{AoSaYo*u9NhJSN%(G!Q+B1^LJnSNK;1jgweD}zD$Ij*_oX+kN zC&|adrg)+HJl2O|w6u5dsUxGqBpDYnjQe?5la97Nv_TxpcXOw{cC#q{UB@tHym+Q; zO&!H)e9?s3S1po@CmsN6uWYWMLvd{wQsxxh@^O#7rN4u=p=)|Dde{Q`}+ zx2c6P$!o)o+5cga7PkkygF(mfB1&svpuyG47w|IzX>CK_rZCp;hxZV%*i$e0t9?>W zS?#UeLj&{8N6p{+XGC6X9RjPpQ4S#-GX}UYe%v$w6U5He0=w5l>s{R0evn9AdFx~z zdaPwG@OBhy&)d0uCL!{J>WJO^hw5mYyOtW~Z?tSaI-jWdFSXo85vCHbddU;F6R@VC zg#8NqlaM#|X-43Myslv+1vWjCikT1FpFJGCk5Whnhk#FhO(0Htw~ue_dmMAa<^fD0 z1oS@Vs6QyWOD6a*B56|(EbLa{J-XP#eu1+*DY&O^R+S~pn`({_-7zuyL(spOgVl21 z4?(Pt0q5bip&ZBa5n8mh2nv;#>1(>l_T{N>mjPSE#}>_Qp!Ke1h2t{1!=O^Mg9Ccayd*w8AV=+eRmKL9~RE zB>PHicH$qC`^Tw$X8$GIU>2vMensJiAk^}(uuA4%81?KY`xmp(RAxKWU@!f?-%o5` zYSq8}s)l^L%D%~R#3$MVhAOUg{x_>1_{sCI15S<2EPs~a+JwUoIEr^paUY=kr#Yi< zi4Zas34a8wrgaXLYsR_#HoTsg6qq5v7yPN@Cn7thKR9bd-&P-h-RZGX#=%b(!H zsZ)}a1Z>%9W9b|I-#)4H2{S2Pc~<{_Ttc<~zzAPi^+@Cw7y^@9Mryy#7XGCNA6q|L zk1g??3LHGjFDZq!pcw<+`qXQfuP=1lJ2;X->tKCq`!XvCz|iN-ifRoE0;9uoubhy%hH z@d59MP(@+R<%7odx7(%J;BjW;t8Fx?SF?GTZ$aiTYN3Bar&%Xn$j){DX;M;COdcl@>Y1-lN43S|03id7}v2tI(l~Z*59`wYzVb@)SGETj7LI@qw~ZUe~4z)9{r^ z%00}ZbC``DGh9qHA%F9Ne&<%L`HbQZB~6{cyZPvUZYk;big`ejVA;^70V*T8d};;9 znh2?oLWUVohq%_l$efe(a?egQd?wF&?~7w$AgU>tk>#ky2K!;mD`~5)07y+PG7=XI8_SPPPc-~L_)eYh@fzjkT3VbupwVMyvb@ygKf zsH_#GG8w3axPI0{YOX}$B!)^I>Roc5HnE99I*Z-%!uZQ#qw81BdoirV9+EB$Uwr{v zo_8C+UH7_3@f#{@^?T^#tMact?MU)g$L^fM^!4e|B4F(z`ai2|2%yP8cWC#_^_k)J$m+r?#=Vst!I1l)}>b$jZemF!+V)2YJ&i7aeZbpu<$e^ zAZaA9!!a(_Y{rJTRYxX26pIUX?*3FYOh0wD-1CAhZToJ|UTAyJ=+TCY9_!)HSfm&* zfc6M6ta~Bcx=y0(mGpv~+ns%VVacu0kBNMOqPEf^zj*QlQD?mnpRl{GOxkV5 zsmq8j9ET?&t%(P_0<787ulmQU>*OBSl$}!iD|$?h_=S=cXdrC=Tc@SFIJWZeSV~HF z96BCKXXA|TcaZ*oFrHmIn2uE0o1U1XgjQs#B`@uJ%rjOZSmOUXg{d_7!Dic^c)yQ} zqEd-#Z3&7<_WH?M0sPNN#YAs-df*R5yY1}<+v&ZFZ#*+c5jJb2{y?na3Yq`mmGIS$ zUPp?zs@>Bg#ZVBj_Do)dLznd#NkRYUkJbGD#=d#FUF2y# z2-Q1%yQ#W)v}E}zrTF^1YD)W4(=){tDSRm%aH0J;2lXg{t49bU(d*G^7g5hmx?>zQ z?t~bbIG2V+=1ya_)GEJjC&AB!=Z+W;Sf>YjF%Vo+8q+J?ZKJ!-hM_@Acq%Iq9!E|GY3;Yo5uQQLB|X&)4;MtJR^H~!`_u3mfGcdxJ3QFGYHT|;*@Zk&->-0~@0K{#U%EFo9b>$|wB+i; zGuG?tqUBeST}7(kFtVyHo7&kNK4%H~QEVNek(s)%nqC?nFxY}S*Nn+&HAdZ^{oZ4> z9K3>@O96bwVZZmDs@~6YcMbb69Q0tn_%2p%kLMpq(D{yYZ02 zl2zvDe1E!ETG00tFTAt_-1S??$I?8L3)2_TZ;0RRd875;abNIce_@=@?q;G@4*FRN z@Mt3;gsM9Ua04W5=nG(K@UfDW%0 z9c7bKtP{V5?jihp;^;s3;5F0#=_FFjaPd?0$VDtnVZQLzxm z7g92hl-&Wf=gD_(zxrdkH(>Vz^)h=+b+z&QawGx*q>*XTe;?%TdTyjP?*@P{UmUJm>;-=%#Q z?2-Q`GaD9$iL@@N&6R!g#`L6z>NRJrW!NC>K)XHu->vRHpzVvwFRd5`;M`A zKjrnE*3mn;3$jEP-Hqj6$;gei#6~e@mrm^HZA1`d0Nb+E{%|ie&5e!!=Kj%)Mdll| z8<;9uQM)dL3Ru*TL zhtVT(ho6zQto}LK^^M?H8KA6x77)YQna}#fR4bSKjlxD-9w1sFXrx@l74i3|fyQ`n zP{>+6sA1b-Xb?V%eZvb!hjmwejI<43VG8uH&T1F~ue9cSms)^STP&xi8k`2JaU;IC|4@R4@z4+t8?A55CVICRF})oi$tlH+|r#w-PMKY*ovEnmoxwDvhqor06h*jW9r>)*eTK7PloT5 z&mPcJhVlmAGsSy5i1;^))CNYY- zVD%gd-?CStQS(Sk6zel^uDmzPqf4HaHN_UM)s`#L3V%OL0_!^NUwTj2v0GcX#dP8c z){4-smYxWAw>z<4dBZZQ3I^Uz^Lc}WtCM+XG9!Tz=yIF@g{`SAXsaW#;=_T$$*zhc z{#VyF0DZrLG-qFe2EKr}_tI^+;uPDLj-EAe6>79lY%neJn_}qdx=tjn*W*5bP8VjIAq`a{ zrEPtJ7eGP7Nmcd*o1pfQ$zEK0zzGD8?h z@vcb}0m7jdHo{6f(Fo7nIR--IO@=pVc@m^=7DsDOOgXqVzu?T-?~;_Oli4BSUA6oI z*i1Yr-!wtpOF^Pf*6_ZandCyZ$*~2t<}JzPK6!HK?&R~3`+h8#i^?oK(y=g#^2L97tirwVhq&4>1+N$^Sm5MyeT#p%jtx8WoUB zkbmA6GlxKkI;QjC9m1wr1XXSRrBu>)B+Jnr2%Ewo2`GEsGVXGp_ zkawww7WAPPBMLk6kCVHLT#;#@HU!LEZYi(|{oSZlWL(r-{*%8M~1{vtPaRIPDChcx!pN#04ztR7?1 zUt(CLoYM*`*sxxm&q>0vgiMx&v}F|HdQ8U4-+?mNVpq^B*hkHdhc_U7icbzdtvNAY zv1*sRnNr+&OQc)5!Rg6~EHlb>zjY4_I(w1{3*BoCw3lxi_dmU5u-bJx2;trdb`c*m zQ5h?jvcw{vAkB#XuI(m-!keJ+D=RVO>0h7;Qvl$-Nj$7pNOP0d8ht-tR(Y>sDxO}> zv5I#AbptLM#;>;?`}%PnPX{lS2d*)dJ;v4L?r5^By>B+u-L(fFnYPN7*l2H7ZCbsp zrR*t7DOVAWD_6d(e2FQ4tPzjOR>J92BCgj#_Rnkp*#JF_qmz{wAn-fKd|_c9@*;iv z8{=1?AQityY<@TSO~@P<@VXwHV&AJV=MunRy5F>tncZ2Fp&;-83uAKpU)m)2vA#hU zHRRxr%f^H3Y+-!P=}7Wl3a9U$jd0mAhd!_AzX*jZ5@G|gwP#JWB^2HQuIBcjbV`!h zQet_z%u3NzsY~1$&2h93>vsa#t_$z7g_qy2$NX(t3?ize=A~O?dq>}^0#V7 zAK$wn#wi3N^F?p+;9o0My@T+_CrRfr-S1NVq*`(WFrKG~#Tl?U^8HAA*D@`w2YM70bFlHhwn$o#&wf51)aE^9gkY%n-!!h+90VqsWh zXS*EF-aCQr41DndPS()R_D4o-);|w(0!4xkJCpszM)y(>wwx3~9BjN#G#fq_BSH{+ z0sVQ4NhSQ7f8zdy9c6lc={L2~?pCw8gQt79jvNka&iP;b;GgubzRPf|BpLCkw|E!) z@s#X7AIgrw8yF?m+a_wdFQr&hrhI6=qtjBZ#^d22oLeJ47<9fL&N`hEd@gb@F;73( zfDx4(Wa{mZEtb`#F%+HJaXys(%1o<8kBzN78g<>|KHi1qaauObY(WIlCRA$3(18xD zyz93~N$B%L>3T|Bglt_^nEs$1RZF-fj{4fT_MKXN9p$2)W!Hbd&)20>7@wHp& z*z<{3hcxf*6(MIHLP7o-Un&gCXa6E}P{bTBZn$gs##f-`p&5f0d7*seN?Eo6oj>*2 z`cIyUFg434IMIIa@7D4b8{PiC=?K4YVZM5a3SoK0r`=}G6DWEjI!^1;ew##kZ_~U* zfzUYU)KT!He}zMGBV5pmu+vURJn>RtgO}Bv#}6{l=uXPvPtUgN^(RUF{^64L;&@>A zMOLYK8}hhn5>3yB`{W>yf3w3QQ0u++yskHcW`yyxV^y1K z0whg$3cCwglJPnfh!=A2TP@SWgf!Kr^q~Am;Xz%%ED46;Lmd$n;xx~ojuE)qof1ox z%j%uVZ==rz+vbIHG)QKP&m`&N|ir%leMt^E*^@bOgxmwPb37;w8@ zEb)WQ?(;VtuPr~W;H%M(bk7_R&8&dV{=n-zu_aDiJ-NSm+M=%~)sB(xXKENIY^ZrF zl((9W$WmNO3`HqDme7Ok8*WYdwlLM?U*+8W{Lt8nxCPpG)BMoRCL=D0(d#(AftTtg-A=P-13G$YnWb6mO;HXZ?r&&pVe|S%Ku|DCS})gT1%+(MdT%mQ(Yd;Jm80+cqkE~> z%=WGo2NUQIIi<1aHdRkCJ9SfXzSGw~rYnzi!|Ud`L4%^mo0(4m2j}i!q_D93Gw_KN zCxiSv=Aoi3>^IqvO|nS7bt0&uqQ!UcW5Il%Y1mzlJg^4ODFaXjd|Y{CnGm^sCIl@Z~BY-Ax#Bq1Y4Ur z4BtoqA<;_xO!+Lg$gD1+LTw#KUag=!)3$hk()pb#IOgU|y7`f}-NfWzLIzv?tzNi@hnE$Lr`WXa50_kQ< zbD>TK@kl0ply3Sgb`>C{!N;EFU3UyYPqX1Y1*_oAc-wbA%nGl2|DJSLu zW)eatpc~4{TbI=0!BO|~SUFUc@roN3kvThA$k!u2B|y>J^AAX8^?ZqJQi~vm3N@Pk z<0gh`9ga~$tv`EqV=THi_91;iJLtudi`TY@q9gxp>c49N2yb4^Ketaa@_G)u2x1%< zT3cjAx-x1Bf%E!5xYyxVPAIG)R9#ZPaPR!`>w(?P5~gPPg!s5QwACgw5tb_5_A_k& z*sbt=|L(Yf+j6Y>iizb@sW90X4fQ2Q63m^_;W&++51i2T6<~cvF$#J+;zbTN?cgxN z{8|)@TV6ZsVl$~)ZuGn|C?IGd_FDha>G$fDX#(Ewg%Ltf9^6OQTH3>Ji$hsiN>6!%dHM_g-XSlVc2eawS ztxd3lt@9W}FlB_2+%a^Suds6!$M;<&EiI&4w<*TNZ?=&03G2RZV%_3+9GnbQUXWeX zR17qO27GEB9nBk9oxQO0-+XbI$mm!@0y9V)2&MdmDjGhvC9P76mF3Qo$FjaQE=l}5 zylXF=sJ;r3Qq-bcA1q>e=Oq+9lbo3whIk{t-?F~8`{VL(+yI+b3ha2t3}Z<1s%|AvmV4@~(W$L9&VI!s^NK?4@&DvXCSbr39jAU&>#V@a%x(*+ zEjRIaSNxyFcZqWr3-01+QWO8pm^Cr(XCaRNwbfI)uELz-c0$O-jk5xC7(V?VzGgVJ zKMh}BNys#^t5M#&w9j)BIqX+@4K>(T_^QdV+Yr-wImnBZ-e`k@pc!pn>E{c*6$nz& zc*7$q&UaviXGyd^gLp1l`-ajq0Dot)oVsb>KJQMe+_bMzrkczN?}!5b^8!3u#u=Y1 zQyZLXFf)E<9Xp=S`T8yUz;S$?HU0-*fHReSOFHf=_EhJ|R#s&y#1L`m8E_0dC#KdB zYuu6|)zU)Z)VxGjSctpk5>-l0fQb7~)BA?;hoeG6LLcbShVGP90JR^`1yyT6gcGAWmWRo#ztlXI zatPIvOTs`nM9hy()9n^{>GNLfyI%Zl3X*7 zc6Cr4yp*q>v$FlMae5(@rMnnc>QlS1()b(xmgMCZeDHsrx4kd?vI=%A(RNd2Kk$5^ z2yf75R*Lya4GpN=OQ(fVofxm+n|~8BiwZR3&7Etgjqm#u37+teWKo5aJTB5nIgP&e zVr((O4^}|^zes-chBA?u6RZTkcp&A|@{OfBEkh?I$|*$6qlhJ=j`DV)ZKd-E6A!qI z5Kp3%d^C+qh=(;UIL9RZi+`iv<__1(CFl@d(|EWY5??(`E`F>YsjtiJR{i&7v#GE z&^D$D@;r8re4TaPS{n&pmlEEYtv}MS2bUb2zV>nE!*O>8Gipn+oO5(=ZTf>SfAP@N zFt2tvSahI78ZBzU*|KI~5=DwK_!W1JqOnA<6Knh`tRH`2^f69DS^PX zZi@PbHSEn4!Y~Z)b)}++x2p{;J4HnKJ1263NjG-2dUbregUTZJiS4h$c1JQR1>S`@ zx4t%rs$A-J{@+vW%#O#lB|5jE{G77zKS7$&z>r1jW_l<5%>SOeB|OBX!*h+bk+?;a z+`v9-vTA}Ep?BMh=@ilIR(6Jt%UriJuZj4@_0XX(qSWyj#?f8OwlcadulGF}(7i-A zIZ|~-`fM?qS%5AboQv3;jryil{OnAqjjPLy=h`$^&^g4DcnTi=;;aogOah4T00z!7 z&X#x&O2*6a-k3F#rT{IT~Z-TO3h;Fs>pBZx_7JS_9In+Uff#XX*7YHnVlWS=@~TD&D92K;gfL1d@x z8f^ZA-TqMEE2x;!)?7G8w;b7Sz6>~Z!H-Wc^d^DaKhkLn*@KaGj>!y253zQZVoxzH z4Px3YOpyYT2fW)!f|=$Qc{gs>RZ8+<7(fpMGMvP|M()8?w>KF)0JO@|6t(S08M`&C zmAJlSKqpy&Z928$ktqfG&en2I7tE`(mcFH8(+w5vdNK|i&8K_LB!ATa&rCv{oCJ7Q z7^hDKQ~IV*+?d)Q>2jVJo#rhaowAg=WlKj}ks3G)|L*Udocs}k9!~v?K0JB+<)D0O z)I`iwfBc)_B44vBsHHp~C!?Gleixl%qZ?+Qe^$%gYQEqcD?Kkc)7_{pDN@|@LEU79 z7_n;tYyTLW9Miw@a7kyhaH(1l^rswk?$q3qi66e+JUU-XLqB~Ia&S>GN@YvR4|?93 zkv4ygpmv5Q%2B-FmC<8-eOILj7slpP3{n54&5;72eON7E^-2tNGg%!>^on z$g$uyZNjVIhX;-hcVl;v4s}rb^=gclV#)B}BP=18wzlgPH#p+Gq%!78D9%8XEJmXT z?rwGI=fdkslsSE3zW9iDiTgIM>LYe-#}6i{AOF>8p~pj?Mi#u8oY}Ri?1BO~coP|Y z!0rEvQ$TUWWi3Yr*V)>}bd6a&?Yw$?oVz0x#l2R>*sY^jlsAXh39vH6Q_W@Dw=LlE z6VJ1_L|`|UIlK2y@*$vA(wKHGLF<5v_y&xlK~W^9N--E`3q$Mvb)X9 zgSAC$u2}F|3b5Tu(P6fAz?OpFzcmyIoh_46Y%zPAVtZ(W;;9`TKVVQjZT2Ue0&$&mFX+H)cZ32A7X` zzNGQ1mg$Ew!ueFU4#{Q?5#iq3*E8RS42<{DSNl$*wR4d{OI*&7`8Ym|f4*EO3i)YB zk25LuJAl7dH(Xy29<+6pJmi$hpf#N1lN^~VE>Y&r)MgPLVEf6yw{2WvC~cgKqyaT| z**Fytj`lkbf*o5*PKpwz=t=%v_iay?S3jKdr)r8>0uEQ(-WoVoyhflSOM&k#PGh2<99fe-- z&twO*4SO3^77axFwMLI>?1(%LsqJ8`>d(y_E_*H45;06$(Kmc8>HQJz=4Ds|w7hAd z+;?v+EB^KP4~=*sA4fgC7#}p-kMG9d?)n7DiB`i^X}D*p?hx5v1~7_RR`08X5l!lW zte3B-XLgOD*V&qz4~YMkL;HwyD~lTN6TbNW3@EL)1CqkcYz`$I{=t2L8S;yo4dMIp zL&`zBnZFR4th{+erEj=vGH8-wFiDpMUwn4K*pI(t()d1KbK+TtVq^OQ|ISGSMcY<~ z8=&9uzdFbGanKRfb$eY=MF# z`xg1j_8}S46X(ka^5Iokr=gJd0aA)cUI?z4@k7HAgN#2P%2iLrJwp*B#eNK|zE>`S z1t&gm#_f9$nl@P`-W=y_B8FGx>)-6q$pgXYqCf@|Dq|2G)_W>31t-Hx7OMo3``cGHKO+5;dHWvi)dk z>;SKuEw4PC@n6UD*`Af%^JTe@jIQWdLV?%E7Cvpe;^)skvZ9Fa=nE4;i2H_T%V`m3 zY*C%Z$jyALpwMTa_SVqb1P`_E7R|Zwk|LX~KRHs5Qzt(sJT$)N>NixVjyVvyB@NAg zbo5w7mo%}a6i4XBqAO0`=#UPqVL#gP!LQV^7>?+;6e8Wj~9=65W(BqsVfVQNq=!QZVqK1q%DKrbJz%+_=sa?R^A&^3Ww z2W9Qp`aqFd`vUo#MqGv*IHES%m=akHe6OpEu{^Nb=O%JaBOXtKOiatn2JOxK#k_iT z3b!$tY`AG;CPMs*$-XDYrSXf-t;NRq$V0vF0Ben2iMH$9FpppBo-JIpb(BiIvz|5? zi#=qi%4-xMv16}9|pt} ze>P2)k8DXiD`3Yk{(7?O$Di9WNzs~;TK79m0^*`S#U0zHSjRX-+!e8~a^3BOW!p+P zWxt4YGY^ixfHJka@HOei+u)$#@L(-t(=X3>RkL3|?{r&`ay!!>89w=Ts(b`2JG9T6 z@`LEy&f=81tar_OFTsC zhTjD$53|_P901D*@^@}$<}~k8jqN4ZW5UQqFJ&VSqgq0I%b)aEtiC^Rnk>w?1T0(q zQtIGH@|_umYI@$|F`bH51C%5lBj(N<4!BmZe#1&MGIY+D-2;7x{V(IAc`=6B{vW}N z`nIPkZE4Kx*D(c}J^8?Z82JHLgz|uT!BAa4ZcCu~O2|!$V2F#3n3a=NQt_z7k>gf0i3*W;XJ@!){EmiGeEY9MeshZ>o`AxH4T{kvjbp(-8O?h+XEBg z2q)x7uUg>|@R}iWr2qWMX-)PCUa2f|;r1xhRkc6_1Ti`RY7B^?j_a?H^@dy*Ah}|? z#?z?FmMt79cr3rg#g%eRk#j(qvg+Xx8g9wD7Inn1l2hFnkX*66G9ukT;6bG(c1O^&QU(m z39dD;yEC`Ot7``#xO=?aV{K3dR8O3AY6@WNREMsu!uN+*YhIMGMrf(PEKIBy!*SW3 z#3L5ub*YOQL9j9p8s@{2; zB4&4V;1O}Tt9Py>7;b*!s&^${c2%vjdPuMVRwK9>Ff4-ld3Wp{mfo~z-a)%3$`TkHYwLf>Yz6l+_AF&&RCFwSEO@y2GCRIkCd2^Oz zS%W%Dl4rpViZsS+Lrih)E2+SlG};%3Ag3iF*s6zBzEnWT`+oSHFZGR%W0HWbFpk@@g^<=5NVJlg>IVD zi^9l(zMiv3NS;73=^oov;q(DQ_4VK+x^?`cF$-H*BvxhhbK&ds2p(`FZ^2RncfH() z?+r-9pw#M~(~EC89`+8Bscy1?4yph6c?7)AtNn^+#?RkDRbP zSssdZAzIo;WnPU_4;Wnl2f-z3Xlk$L49kkp$?N5^Bi9_jNjGY{#Y?*!I&YW62K=v} zL-IHcZi(pSb!j~nChX)yNpUh;l@nANl zTy(R<@tET$^ghMyOmBDh*6gQ~d*I$WFc#RdE%?9r^%cG!z*uwK&TIf9rR%rvlSU0g zuWY3oK)CFw3ds7Yx9HaHZE^Tr%$su`j)dZlyH2t9T**Uu_=5WD`e%3sAPv-G$*$!e z4Uwc8)#}4<1E~^>9^=CIFV5G()`+ZY8?mTQ(>ep7n17f=g`y0t(_3Q7w z3DJ&8648h`Q--=0o(u#A9g7!Ux!~!JP1uO_5R=!hVT>eps}{U*R_YkvovBN`Y^s;f>Qy{gv<)S_TH8& zWY_~=gTZ!%ue+B-sXR6^G5lv`-hO>3DcgM=|9W$$YB!u7w#a%bihrZFM&Ivg7$Bsp zJj^c(rgf7VPRD%!l=e3`1I26slwcuMFrv;cSMOCpo@NU<7f@}deFN&Z-9Rph@C zdIT3Wg6))uv4(d|WZqNHH=p_G99WC2(30dT4A}cbj~QFkKZFfbbw<@Dd;Hmf)@7?? zy?t>hL0L0dm~kSycvwqY1J=?xAFv}q%%dlFHvMwFd-j5Z?%3btzo$0NXe_98nZb0< zA1z-@-;!`MLbPO@$i@qbQiPzP!Jke&;8FWOdd+y;$BBD<5So8ibFicu7AoK1e9}0# z1}7G?c=gmy%I;aOIgOE;zFU^A56f~h(O+h!^MhZY2EVReb($-M2Jd9=a;x^r{?5SG3$+8^?OWb!K)MVlS?tOZ=S;b?n z@nio&(G6o?snRWbfA@8k9LZ}>{Gl>_Ks&uS>{_zno5o7_h4wPg-T@_vd|};Ua${%j zvqC)D@=W&ApN_0>ed9Z#(LiN3o)#1fpwR|0>qjxyEVu!0Y7tKMbmem@{(dyleL&>y zJC|VT6nm5A(I8j)H#wadklLevsHgZXh?tpAR52aGR;x|4Eg;&E3-Ztt=&!Qc-%&-N zr+hmTEDI8d zj|x-s8-MHWl@%dx5hj(8^;#q$n>XOSb%uvj3*sYM!ZMJFZZl<0Kr zVS~mm3Hl&U5@mU;St0qroX)tdQZJY=LIpNTJl?!xq(ev@G!zCUR-qEh@tPdza}6^; z{=HAOIry>5xnW}V)0rpAxSi4q+b(6P<)ZKSAAHyC{rz&X>d}a_&>S~*l z6wgQm47+|_ImJDvA;Uc);)~9~9$iuiemENyOlY)9ea*Q37S}pPaKLIICuu(q8bY$l z4&*mW(U>Q)LwV`unr-i54LJVbQLq*9iguaL%NhOB#mYjHK&PLL4j@~1oOi`gUt=A# zZMQtu_>4orh2mA`r_Mg`?^>8|!5PL+;-cD3p#3gggJoexo_ZRz2RBJ|g8nsr2vMGL=O)62}@P!DQMw9eG~@HXALkXjEb?<+AcH+8-c zrK%+6b$uY+5NrI6Z}cVN!kMHavKAI`)$KT!*|p2ZFHQc!yf5!6l(7xDfe@Q6B+Bf4 z$OS#k{E|QpNH+{Pa~*Xdast!F`rIQan1eliqbgkqe1$={(#P5t3o!Opb?wJey|uCy z0=|HiR$xL9+YWtz?8b$M9QWgi^H)YldWnkeA6nDs|2HE~Qg5aPFq7Drh7gkE9u^_Q zn(nleQGsmUn*J@H8g$|~yg3`EB34osmwfCn`L4TtR4H@{WH0uQJUe>0P+Hd2!RsYd z$sYN$QDW5Sw5rXl3%R7L7K9_$7s|WrnZj=|@2@09Gan@;$%x|M|EQmj3547a=~i^X zG={t{AfdZ`(^6YjTDvHaQ0-OGuGBX#E59tqYA80xXc&Cy{YFdOdbd1vAI8W>#1e!EQAe#1PdfFjbnn9q z2pQzN^Vr@L#xaRFf<_opr4gUZ=8FX|>Gs^#POH_>nvxyE>VB%EapSKz)LbR?LF@32 zd_wNJMwe4aODeJR_2R*!#JdpQUP-WH9(c-C)iHnF+-kRXU_HJs>Ikjwl-Y&Hggh2M z0P9vLBEh9IvlCPAd}P!LmM)q>n+pNI_DYT4b|x}zQgR!;Rs*N;29Sano?0J>Ke=J` zW$9(nB#!pe+p##06E@H^`m1Icpm@0rUTfcTK*c)oHCuM0PNoiK z*a)~%gn7~w!&I57Kox~YziKw2f}f_9B$!S~B|w8_W6U?<8YvtSx08w4Z_)yCJ6u(# zkwA%Zj9eTJgn5-i4p>;RzVn8&44|nW#Q) zfL_EEB7Cq~tRs(F>jv}dn(*!FBAJ7%ju#hb6Yo!jofPUu(BJ20+pb^A(yg|$XPw!3# zBDX>YJNSY7RX)F87%#aS%UR}Lr`!?a|Gf(!|H1O}fCHLk`^ruKy7j|!E8xS2rv~g# z_rjm<4cC|FxBl~dZ`vOlQKiz%tTU+~nj@azKe%K(R?Up4y=@q0{%1EMWvCsSZXw-S zLuSj@Oa4^|U`neDoPYi97FAVk6=6t=JITYY1CHCD zD(qQ`8k9^0!p|9$mQ6`~=)yBhE#<`H1S1DDlF?%d#Hf+l$95!CmDBt4Sn(9YQum)k z&-oJJvdQZd+WF=?V_Qg8-9E@_jmeVZa#|CKgvW92@*B^gv&Tspy}d7_qI+wcL@ABl zqkeZ~pVWKwpnfCz>z#n#nM56mn`>n$av*SkiMA~72w~^eDVLf!ki~pGco~sJ>uevt zOxzkD{4FWJ;=$oc(hb;dT*&>aeO-0$s?_^OU#)*Rd@-RC zdPv2DKvLTjdc&$7^|0WIpGd#+ZaY$JGDu+G&*vC^!AdCdil+sar-up0s8v)1*ME@L((>yDaJeJRoQ#oguF!9^QG6S z;Hk)53%GI$hLHhbWnj+sCWahO0Pa>U&UbF-%GD?*xOcZZ1(h0BFLTKo&94`^o6Ta< zTxPi<3cMl@X#2;z(p86C6LETTQiRiKG50%!l*PA%sOG454e16hrH@maFinxZys5lI zJgM{Ht{gaC;y?_*`{8ZJie=RdxnUVCk?Kc^B(UGWnvVNU|6ZR!o}}pR=todLK#gk$ zylq(XLX~jcewLXp6PNuBJlD6NBki?xk9Ar>z^+fR4EvJLCfp_ie+7#S6sE7g0}+vT=>^5CP!QrGX2HCqnhVA#{N_=56_M zslf3~n!bGKkM^Jt-EwKytj@Zxk`2Fye*JduYm_b%_2a0a{~*7B50~GBMG-;mb>U&6 zP}vH@Sl%1?gxua=r9fFs^0AGM38TgfT|d?p zg0-A$QPr!YFHpTk&=+#5hZ4+JMqu^%450TNM7n6RG*lg?nw?{IXXUV1`F&Ptc4iW_ZKLC6mKH~1v<5nUuzD; zoz3qF2aXWaySJ}uJG~ax#?VUbko)UNKm@BYvFnqUv6vZ(@lYnD`&z(Sk41JoRw`j} z_)*8UcftH}5Ihx08Q1isZ5GK7G#JW4-Dfky!>_JTsK*CYY;T;XOS0`D-F?e>9t}Fn87h`7fO{srIN; z@p|$dcH6OZ{FlSU=7SAqJs*Neo^cBm<7JL0z@3U{J3WIE$4it9YaJvz zq)&odlpN>1Lwru=&Sc)U7!*6nL+4N-P--^&4)r%g4Zmvm5z?k%pj2C?|Bu&NV zuhRT7ffKHuEy6FM-U=#kv3B4istMbJ^FOGXotMyA9i^=GM$Pi!_pxCkw_crjSDwp2 zutNoBfr~U(!xV0QDH$?J)Om;9e$`&4u~EG56^?H@VFoF4Nmb0W)!uv=ax6X!d7L<@ zf7S|n%~R#QzR7PQ8U&HOSJOz)!KxG_(MSPhK^|xcQgG0Ft7w{`!B@~WRhXbit<>F+ z?l;a|z3>OpG^;e^k*!?bQ!ZsjQ`1m+U3F+k=fNwv3C<&(Yr3E(f)y6e#p~@*kF!7G z`MUKrzR2ADu;>}H{O%(5!E_Zq$5-8~-BuJ`NQ9t!a@onB6AZ}1JVMx_utb&fElS3H zN6=W7+%RR`7j~1CfBfbwb1ecw zPzeR3R5E%I3(Z=6MUfo!7PCmmC8j@4hyz^~?a|2F{He?25Q&%d9|SM)<+&MbNFOHG zUFuf$Zv-tPav+rpqVw)-d6CuQ2V&%ZsHdb-p$(aqPIZtUp#!>2{iCmA0kOz8^V|AQ zwtLAj=X~^IGGZmE!w2Ty|8_l%XfS@wx}Q~>M)X>J(-sJj7Xn>T6gjQV%3;JN2Os!~ zqI>xQBfA}=OlIUZ-K_y*^E&XLhnVDj)%FKCcOD-*U9ulD25OKK0wl&=0-Ca|OaIAb zU@Xt~kL(DdPK$Nt7ngT0)irzkkzW7 zS^A#;J71uUyLZ4lY38S%ZU&i;XsHj^P2!GK4_-tpE&Wl2Lr>u~SuLnL_WIxjo6V)s zPHS!HU4`gzeV~s6=eUemUeDKVxM`XR=P&FDZvJlF+j#GWlEVI8>UD|mBlg8_8=S1(~H?e;^ux5;P zSJ(AlFO~{=NY9*PD-*gMEGjs=_DjHTpuFohg8Y`s2i?g(8?uX3-06um?A@uI(igHL zIP)v0cI>W$v!`D9@obkCyhF?kVPcD@y#2j9C|K5%{D#?B(iIlXJ!e7qbe2gUsQ1rc zwhsN42Mtju!Och;P>}G=QIkK+9+qe0Kqu^ah@ASD%c8h(4alTzaQ{;?9B<+@-zhk# zhgMJMZ-UJzL5rT4H5+)%r-nQn5-KhXbEl?VxwA*Lr^h=66>kh$0<+tF965nbLs8g~ zDt{P8cE$_vgY%Ut8Gy_Uw|V_b`_rN|=Cz3|oyaw&)?808 zT2#{A{ZhcE5pt}e`9r+UY;>MadDlOl=pNCu@e)yMSP{H*%~sAX6UixJsIJZMV6StV z_y6xSiP+q$;MyWQMoIr~L0rCUJ`Mi$eE3~sf5FP16}}&C^Qwi>UvwmYI&cF!>Lj(g z0w=#3>$jBiO1KtlickGcUK_g*r&;;9ma6@2yeKR=!>VI9v)I%l zd&%Fm?vL|(047C~1AS)jB<1R5_QbEN06SmPX?`Jc1*P8bryXAfgrO^IXbr>MUg)oUHve6XX0WqMvb=j`mBJ!~#1lF?in0w_tG z)K@;N1R8fUyL$!c=nj(foe6**_JtaSce%pdeaPQBfjn%x*Eda*8Mve42} ze5}CgSczFYP5&|YC^MHJniV8bo>?2GNv&hgE+5c+cx=67P&((k?TtoNl3AB*xV&s0 z=^O3PK^0g-=3>1{@f)`sKp18rq}6%$?@6{)*ObED1RsSp`e&YcP^r{7F@hC4S`lb_ zHeEw=F6y*)nO52LuOYG^|sF2iHXZiaj?sO4zx8^OCF^aFea8;0_FdqxMS@lCttqyEl+p zh?{_N-;fD)zWlqSbEl^@Kl}QAh(IzGGq>G=k?ZBK#W|B$cMHVTUG6`P`He*Q@gVLf z$dyY5aid{(=eyevCS(T5?Q)jDgt9@{kv-?v!Xl2LN(sOv&HhBcX3Cw+?Qlt#eGS&Z zfUUWr%f4Z>;>wDk&7y%%*pxanbQfv-^8YSNjNA(;Rk|hk=9_J7Z<`YThtIADT@dM2 zXpi+c72|B^m3E7TD;{C*tc^W_JVpl7BT=ATZDUgn5l zyv4Oti|%EPnnKV0iUSxdtrKNp{8T2#&rc+JG^Piod!B1dl7O_=DJ)$UmD%_MNtXN~ zx|^XWs#@|+R)xz-q9?c8N|L{bTK|2dW4mUecj>dGBxN_l@Xh9X(-N2Re^i0jGR@0- zXD$=){zvW}!ZK2%-YDykWkmc5$@Epjc<{!k|L$mI|0dJZ<0y_G;gUIrQ``pG31o8C z9cGwxY*twRz7N9p|IL1T$t6$xvfu?pDY z?pXqFNAya?ax==$WgT18xczQ62dYZRGriaSR~h_?mXiQpS|>bgG_r(I&0*r8=&9dM zYi9xA?L?PDDIL!N2bZJxWz3`p>GSX8cF*5&JE)MI=RY1Sfq35o81qCf2QTTjQdF}S zUzG>nPfum$5RS$b0+Mx?$X>p|DME|HeAHu>FL#UeP)3D)puztR>ksri)_VG(41ZSE zRg1gRZ^Ei|d}=l%5j|b~h+}uP>?JDte8j2*($ zOT1i(39|irMq8g#=Qc1*m1#JeHqKSSgu7dW2#TyTPnR`sORRY#w&!(h`kQ!)5s2%v z7B-wwu|JIJZsC%V^FyNC0IGaOS&Iao{tg%|TsNyfd`ZU%DxOl-#I^~zu88L@P+N?*;i%`|k8wtDP2mG`1Y}QE+?SXTgZ+2A>9k+fL$)Hys z_Z8%0cuR)-(s%H}0$B(dcYCC;`5aKt`F!9xrhzy%@v|<8@iw7pWf*qU%J>CDl|!Rm zOVesVzwNW_x2QN4oMz#ts`!zyZ+;Vz+Ho3?H2aI8XxN|hMrl3 zqaWUe8gB?e04oqPstOD0R1JSn8h1aNBpTS_)f6D7pm88*xOm541AiZTliAV`=SmBw zTa_$dBqZLS{fPO~{51UpFf^-EUpbk`Ismu&x_wSGDgv2)J4a}=zeydJ{8nRS$nCt? zQ`pV4Qq0pLYb&)|1+_m+(ventsz(u=U#{tE(lu$A5b;_MVi z^3|^wLLQ&qwT>mYV=HJlq^u%$$HLv!0@iD+rZ(R?$d=h)u6b4N^@F=B6^)MZRgh|n zDF6`SKsE)g(Mm3xjOn0=%LNimDaPA71w>8|Mmh+|BI?pJNqj;=^ZR4SMHSseLR=-o zXfyo{2ig?qO7=)CJ#4L|y*3@wkJ$_JLCpS7aSeWceB$Zzll?jxr{+^$IP0ZuSiy$x z6dJwID!F|ftU##C$WZIF)t0=t9UnbrLroEqdeBrcsiCr?aM#p6#Gu53qUwevsv3W& z_ka_RX{1RBUp_8(%T1BDPikE{otmb|qQa?$ zu|MXgGb9DVK~H@j^*&oG?0;Vq%6yv+SbW#glY+Bdm;S3~F=8&ExNTWo^zXOK3vy1v z?1{NYu4=zzBL{RQPA_NZ%3)Uq-yDAJ9L^eUEsRX+$iz$G5;`z)go)A_8FM&XyO;sw z_;Lr0;SBIbBHNX{wDs8WC8P$j7c#$HknUAu7(W)2xfkeEjZ1b4`g#Uq)SWN#v(bfY zIvw>!_9|2fr{;i-&0~;s&S5I!AbH&TviXfN^#aP-PbGU{M_+@EYv%0dJLZt-x0GrX z28Hqs)od6u108lrwt_*Pa<>b3%`&HC@7b54e1XE-`JxZIWFx_e1}7}gXXO?mDknf8 z(cI5fT3MHMyyUZ#C^izD{PNKneanjjf0jIMP{a{O99mK|S4Ip)1I4~f>2{Q8>6pi1 z?7a3i%hcUvF=vE8uU_cQN)>_AgHvdpgqVR&+vM~gghD{~viMKH(oVwSEz^zXm@lEn zWzDRS8IZL#YfGkxeS&+{%{NZ17A=nRW{?HWWBNVh+_z!%fR8a5W0o>zOI{V*W~3`= z;AOzNaTku>v6^g`*h!Ne}aEevx7Xd{N$Ci`70N2~)T6B73Qs<}y_eUO)XQ`rDq-6yuzdG7ai z)mOvr7nR2U+12?-qUYO%DjA~Op_U_j-n|lQ$S#$N{iTe`O&tV(Z$VbRGoDeVL(nOo zh?xPYSX^d8zJ~zzYr!4aL1?ic=fjL#1q zjcWk3G5a&)!5zYi3)56h0F_c>M96r0Atmc@jK)-NtM;kElJ9Q48B=t>_9PuKrZmLO zMAIm*TuL03_VLu;3;FE+)457&;O!)4{-LS&Zu3{%ASofzms9NHl#*X4r9!hv>I&_lV`V))?>^pw2(gu~&U$jLcl$ zfmPvYvxYULPq443!{8$a=4)ibmNv7LN@hebH|>tU{d%b?P~iw4UT+6@H6(>%*>a zYq;D%t(cR*)sahoR-1?P6<;NeKKOKrqafPeoYO`TEggPUR_0tntPwv@YvghiG3;E5!#K~8rBxg3S2wW zkb}EDByr|N;;zCqa$oBmVN*)q#tuaKpCWPR_5}Q z>}AmFW=GVSOS7i#+|^g7fet8MPyW81tj-kDdiscrkpo6+_-XJ@OkiiP zgR{sg_$hBGs`M&2u~fN{-30lQ$U3SG<4~i!=QkO0Yn%neN-ho|+>755o)25fHA*m= zKQ>MkK)!7PvUrIa)V?jF2S`S$?qZk5kpx+vY@gmu_UtjP!>K6}_s|He4+}daFENM^ z8#(=#-SB49>sc}sii4c*D z+1wyanw&>>}^#zsRt(T$K=4JNEh_t)G5*f*!6}^mWcL+|KAHxdR#q3xpy2}cg?Wp;F7}iP8*_7To8ya>kKFO-mcpcrzm3$ zOd*>&vTm9NmqDNaWq(|nKN`vx=V$=nC|IJ=TYCgUKveswar(^&wzPQ9+$5`W$uJ;o zTOPgA&gh_CD(Uo<_^W^t%;%H*q#{zK<729obW|s!@z(~GCG77fW%>hGG5gR?#!p+u z69Qu0(_LYSR5r%^0IN^zG5UqW_ps#r;*wkeB2AzBUJ;hc)#?JW*NtU>Uyrc0CkN+< zH#4OmHX*Lm$nCQDsgMjwn`V)hS81=QBE-uSjWzG*c1l#TOI zDKRAbNQ5}PdBD1PQNg#Zr!#{Yx0MHVP&cC-rd;Bk-`Os z%7@tOW!-Fs0a7^65`r?peQ}%o%fYwVIQX$}v7v5ZeSeRcl$Ejl(%O3g zF-hgv8qPD$o!j>$e(L?c5+}pw9D?=JT>%>l7^GO}AKP<=j{Xs*G3mS`n?UbKlQ6t+j;nS%5*Gi&|3zIg$q_h)w$rm3G2UG~g%=I7#^-`pzG z0`QI_peB3_s9HNrlXx;q-;h%>hk`R%&OmM}IEf|G)!%JU@mW$E{Lp!#Ipa%RsO*;v z*_Te^(2nu4rWa0QW02|%znN=L`4W}?4A2Vi1rRay#iEvDc;cMz;{m4gaR~E%y%m^SxSz(T> zpEJZM_z;(=GY)!kuHEpVfpYUir2a?7OJv0Mdkw(yQ`&*REAt~_fv^yJJM;jkWcZur z4QzbV7eBAe=?{_J3#fKmHJ{S3*M@2mac&VVKJ;Kg;0erI@QSo$=wVh4#G~!4*p>9w zI}pBg@Dn#fd#Ng$2#S&2KlG&);sK%Tc1^=UL{tnSj z4P3!m>cIRH$!nm|$7x>O2QZERvz27evByBS7MIGG!T;rX^I)|$Ok^%zv12ehC%5l zg4p%r%DQV&G(G$3h+mhKej^4s`vEIJ__07$9?USTyipLF&3w8yxeURn)o-tZu>epV zzd_Ju7om0-vc!-i!FUX7q#d^!gX`CPED0zo6dYw0jud=^V3x4 z_o?VrJzZ{f-d0sqAY9P4h3r(%WXg_*V4c^xE<7?~Kg0L z%9(!4rQ?V%aA=$~ z6Ltc&ChqrQGUqmsjdPwqqc$>)p-wB+m9HIK1KY>?ghwA3a`9frZTUrKmWt_`!TaaJ(A5nv0iE9s~462i~@ z@jz_^i`WcmYH9(Ac@g#OJbw!c%P3u#y|WiN2pFuj2Ew{NuSu*g1E=tc#O@~kiSj{- z&~B&1^Lnz+G(_=xHK_t7GEj6sBKz=-?}Z1ul#7=^9D|>P}uUb(GH&T7`w#ytJ3gIUE3bekcqW5HSugA zFt)6m?M60Td7|KRunRR3K8Ar^;RW#Z2j_Ag#iz6-y2oc!ivWKxZ^T<+|6LAgWM9hZ zRJ`EdgCfn#=#$)3hq7g5_*LKgC2Tin$BZ#YM`jh#0~W-HmlluS&qjyjq4X&1u2TDi zC*yG!hf-1NsFGZL!9Cj*MiPFR3g`fJwyJrI|Nf0a)WL=K%=_ynz)@0wguP$gSy_ge zqe%f0)Muz)8}5iEmK3~+wfDQ;#8?>;U*3pn@hNiSv`FQ-<6+Jy&3gwr*0n$8TO z7pBL4XhMaWJ!eA+9;~MgY1#)W~G(KYKN-4_-v1uZHk=z!_ zHn!7@j?rMwgN__wp`+X^{i%yFR*kwb8-H~S-9Fo& z=jNd`Rlh^OsPzrPw>4*h1oQ zD1@rp=*P-|gzB!&4nJw07c+lJeM|EtL88}YeySCfYt5QUmV{UWUM_=+?-2J2SV|#| z`-npFgrB;j=1~)q170};7r&-yOjoDvyPOPU?H;`T5OJye7)+tRyiQz)>cmfY?`ysf z7R$r>4cAeyJ72cB=qaMIz}AYlIwi%ceq#%j4X&x+0gf;{NylGpwhyzzPHD#rpq+`n z3}r&~HX)&%qAM{+rm82^|3E~WqMi-qSnT;3L)`Wft(>IGlky%CGlVclHElsWYp;rD z>nP^T7rT$Y%a7m$NA69FoBrUiID|hyB&>U(46|5qDRVjFRKGBT(m^G>17SCks;o3< zaR}Viz2h-VD?OjS9)bK|ba4-OP`6mbMZ;UEokn)g6l?@GrJnPe;^=PVGLwJH{6T4?nZ4m44lY7701Llkn-dz6c z=B_iv;t_zRlRWgP!A5+HIQ6X8!bw)K4R>c9{RNU3=+IXraJ<)x$!|JW27vP(KzH-T z0w{~5i1Yst6$RRtrIRc9`8S_d>j-e!^stLMHhWX_(U}Q?y!ZQs9xK5P z_1GqkUrvHgY*u&gjoWpDE>@qsU-{(rPZ5roGek==YcZNQ^2d2u;`%SoN8XwE*w3-z zAv2N#;Q)6=s~y)i{az~04c&MpXij8-{%CmQN_ofh%b6EyCChoJAD`}GszG6t^Jqzt zSXRmegrUv8c7)%$mAgD38ZKw_DaQdi(hb!_)QN7yg;!F z#V)?fOt@&&WEp#6p!e(CLd9gsJF}g1$djeO$mWrGk2vBGMQ1yNZaz7cPVQOW6yJ{^ zPJUKNz5O>(nn&8xBFK^SZ29_ok{XuH(rmp6LMTFUFZ#Bsm9Y-1pzrkSkqgA)zW~d6 z3qScN_Vb&kl}V-)+a+N;Fcvml(DayC2|LbCqThn0m3M?K>yX}>OO@H&ohfL4y4SaB zzd2ZoROD>6OEO*1xw|B#cFnR|cwQHiWZ6+}!dzhtK;_;K2#T2$+#{!$ziS#?>G*7i z`lbk*x^Uok**;h+-qpWi$#qZsiB(crU9c?P>c9*W%4&X2fyBX|11)4Baw-a-jD2%Z zBGy3XG$Sek9)b_)A<4_8H`{_ZY-{5ts7=f4UkR3AP!$0hiPGLQwwe%N~=|Ca+@b z&e3ilXpEe1h_?h;xL*lvN?!LV4pghHujMl7WLsS?0C`O3g_r)$aB&uTGmc;Rz%CwDbIFz2^GlN{m$MWer^US!-yjb zyG_kcHV*Pt_F?VbB_B$t+ZX$S{{($_UgquosT zn5B=V;`+s^%{r^=wSl@&&RH*WOcM|@%o>(AzKUC{1}6Iz;G8SXxjlkjqrQuOroI;Z zP#2v&bOs+e&@r-WSssF9Xcg5IjhvZJu|G+ zemfbi8zdljG0M`QnI0ECiUVwIKBnhzY=(={5F6Mx;p_p>9W!;#6dMTpjF&%(2v;7^ zaJsV(ot0>C0Ui$0=HosFGfGNP24*{B$NbJjRM*6LxrpRNKGgK2l=;RiidlW{DAv&?H z$vkNg^PBa2Bn{>;v!ec843&A-z4-8}(k?w6DKJviE!{G9pi=eFO2;MbZ|u3^r22pz z|EopXnT!1q=f?HFIisE`o*y6oG?uK#SA#wm^(C^NcRV_v>sM;2;B2^OVU=&@SDapM zGR_Sz7UfmmdIQL&WjGL8s`e;qH(5no>d&HMR;Qs&AW`0*sm3$_xof~*EOu6;CUmr* z9t+0MMQpnHTCF1`#E`1aZYS;%)F;lH^>O>8x=Y31Rxz$PN6d=P=|Zj+PK$_CUO!cl zB^C|3&i%u^@&>Ew!A_R%)2Vw#sGw6B^`1u(@R)O(bll7uJ##h_T!87uj4!p`6$__~ z4h*Z5&sSF8PX&qLN7dqpp(oqY1H2lM`dVr%+A$W ziXe&;uZZ%m$qjHW0tdn_0iwCz?c}`7;#d>2ogZH|MxJf(YE?sWma^C;)kkz=T9*e+ zSL^ZX&nk(S(`cv_hOY~3*MG|-^)T@Ui}{@r6XlbpduznvVxAkkQ0Gm)ypn;?0KJ~H zxXZc}w;}y|t#;8@zu==U9nu;cV(c1i&14wT(8Jz*^l^w1gappLH3Q*PdUUPrcS_4= zn+hoJwhZGGIStnO>~eC%>plQhx9mU--t!4`oWoCpJ2I<6?YAuT%MXr*5`LR!dlQ}I zl@;$7Kl~VefzE?vR`tWDoqJ)WqbYjeQ-4}JbwMR|HVfE7=EV~6?C(Q>@PZ$`5au4F zc+YZrJ>&)-qwwA3BamJ!2Q{Vu-tfAty z`u+b}G~$;t5+?VqV4|JRIXro{n4hU|@&G$D8c9ell((CRc9pA2B6nw~S8M=%2^Jl&-3lsNB%@FQ8vjcg>Y^6`GL^-F;JQ0}U}gS= zqL=R}P$i8G%nU=S02?m<34I{+)^@2KXKgDDv7!m{=Xp#Vy}Z<)RxkHEr@bGiJa*hy z4UrBcU83B9C(c#Y?Y{4Bs2YDpT-b92Ufy?{f0q#v$_3tP>Zy?dibvRNJ)M$l(R^nb z!rN8@FPD)iauIdJsQ!kZT$LG7XIx#zZLP!`Tq;jcD(E zn-l)V-hKP%s}wD-MwdYy%k#xFe#`xcC8^;`H9)M)0Z&Yf1WJBB>_HXeHj$0eT5rl4 zJP^GJ`Zt$)t*vw#W@r%|=K*H2jKa0VyI^19yYPab#%(#c0`(33vidkE-$RB#gG~*} z?eE5f=%Op>zSE;XVxxXQbV2%?T2-6Qw)s_9+FCjRjl(LmDHD@!sL5lU4!z_v^H=Lf zsSS_C*;vVda5GTD%Dq=dGJ~f;-&7c644W{p311!C=|1U|ey8c(u>SOk&y)0sugr@b zm#3(h^48wjKrWAJgrwav_tf@0=r`tX$UrB6)jmPjK7m>X+K=qd#1k09u3poKU=4kZ z<@-po1fcypKodAuBY?zuh=kzy4qL<7MH&{)iD)pPtUjrY&v)^ET@s|-RYxGsLf!wP zwwBfZj(>Ea39iYpJ%K3srb9Vqy{KU{*;%<$xnIjY_ey1!_Jggn-!+m>NX#q%5BpD7 zJ@K`4UAhN<8?D$m8KqV!zp4GXz9x0tiXAsKecVmu^(FVuD)pmqBb}H48JwTZXUYd@ z=p|}FPI5vDg&!n1#bv?!`(x?5@g;+iKYHn>O)^676(4?N^W3L)nJDwk%m46cNXjwq zGd+x`tIgnZ%^1Ehth<39sPk4puG50P2nXcJ5DF#neMj=N4a*+@MpDB5)X?i zAO?0KtCux+rhoC8Ej8cj@SnJmCAfl~F<5j=+Yv{GW4{_7y$>09=SQF4WY-S1@U6qn z%Fn#)g$OW4?K2_r1BY+zi<84FXR@l^L;?P3;R&oN`AgY3CcfZRK{Z5IGeZvb{ ztn6P-4irE?JFHK>81r)LAj-93c*54eS>y3;(@;H`*=la9=4bZkD za%+UGl2G%_$b|QdB;JpR2#IYt49yp>0BBdlKkm@dIxEl!Dg?E zO6&hT{ostP#T$t&yUdG$4kvy~zB-w*cM89Cf7nAaG0!tO&CNq>K9F!-m>B1jd0ecw z_Y`v*eUN@&$^3h0LDxK=5(OCzx}{t$bYN-{B*W*jtXdiaO-DA$6^K@DPO*e+wblns z`j1Vmt)MtQO604d(87}eKS{_g- z-NH1LA*4vYI(D%txLRf%(=&KGp)I4LTPD1>!_TI5f&WQ1S-ncR*?t#zM^PUBml0h# zz`4tK+s*cj-uc!ycRwZB2L~wCiULSHv5T-oofTat3os3*?zCs@*5f(Pi*B*x(0x5O z7?lkRrLsQaTOzYR1(?sQA`p*lE6Gx%Q62|hs83cckKUEWPR4cESF+Sn@#)V*o>*h` zJMNZXY7gAd)L7l!s!@!l;)sft+PlhPfvr1-cllJ#RGnS_6MrrWZ$aQ0z29=Cyjdmw zJ;31a4ySNDnT@5dfqvJ2ZtY8rq(p&EgX43Ch1DVA=(ZHr9>ADTvB=#}56(6~DEV^9 zu`mNE`0*Wf(z~PaXa!$o~c@h|!rOyj8d&)Y$u~hG3@pk+86x^vEMcjoMo+0Na z$POOYX-~nOS1)+y?DV^jA8EeBbVu!h$;X-wY12dwr>Stlj33wLukF92?VqV1QcJmHeb%C%!1_T?nf^g+K0Lk5oNd zE2{#;KYer)odvx7Lu9LvLh$_7x;Iid80|QR%J{Ncy|Q^W+T+T#TmkKlq>!tu&Fr_5 z>jiwYuSHoXAs_!;tiN8b=qWSs_?^*|A^nGT_UqSt0YlK(F+K&6$ldrQyhzvTJr&Mx zcaZ@CTC=fH59mE3uQj{zVM*W@uRzHZ2gvJ+bF{ncy)}ysJ}17P5BvXG0FM4aJK`N_ z#Cm_rI-*&%0!YctfRAs986Eo&DQ_kf`Fxrx>|iZgU0A^9jnZ$gv66krw!GLuIQqgs z>Lsg|+&S?^>I8FrI15qF6R|I@MACZ0L03PYasekBWQU#qg;dO#cd=glKu ziLXVA{4BxP-+G}I)4yt58VN3QQ*J)hhpNNJxr|9kT@#X{E45(_B{xhRwI#S8U@ zAk)eFLj()!o|WB&9G!=YQEy3>n*&nemfc#+4`YJY0ups#cfCHF9wG3aO%4(Q-kWxN z`W{Vr^XKY9`7MzF=y;9|_D6TT!gdwUXAlKNVk2xpXCr}#y!wM$77 zDo^QQsDLsthrj`pj7{j!{kvDWHVn3Z~>>+(XcDP$|Q@rv&G;Rn8_LtY zjx=P<#ZG$l4$zIFwV}*%6rX3{W}}Kd?c5s)*(`s_0obN4krDCwHYo;F!K>!SG5i??*w|NEkM;`>DzjMA(^Zic9%hz{=7m2W7+hj#HmLkfPq zd^>~hnv0U7aAad&#*`J`;%3V2YXcj=N4L2oW3VPCozT z5r^uMwOpdkpx)GYVY>tT98-bExR9= zvp`&U0inKScIc1rCmo6PuNlyp$c^J+qgjn?*8R{1`-Bi{GW_XG~9Q2o!&f=2rcyOUXI^U?Xnaw`5R`Vq@5+nkW zcMTVOap-^Q8?~9NRg%xM)BYD;=JtURc6c#4=kIET!LpjEmsJXDTi>zshoA1>Tr?%> zhyXhkFTgz}LT%=Pm#L*uS9j+c?P_u1W^1w_cJ$*EvVLmH&jWj&aMNY zNFYmiY+ZS6DYm&q2~JWDj2z-H!Gy#D)Oxx`+2gLCtQJ27BDxI%lF+W+&z_YAcm;%kqKF3PSidw`l^MH`nnyLN`I z<*5AN)S+1RI*p%+G!w593UBs?UbIQlD~7_}P9tG#Vuufyg9GqY#RHzc`lb5lTF5EL zotX{w%NR5DiJs$kTy2TlYJX;@zBRofM($a!Y3(1}J>1@NY_M5ve)&wfEM{W*aM3s` zP7D<&3ppd6@0f8Gf3sB&tsq`;_@tk6LK*vUHP4oj9_&P`-2xO&++>|fe#xAsF%4Y) zqpfdENtS%Yi$PFg)d-(x;u67gI0*ES#eQg{Eho!%63?Yv%Qn{__#UlK3%NOF#h&oGsFI>#Te99T;W0dEy4d)K%= zDAJEOocO!C&C+vcjY6tf{w>|ZPi^MWf>p4y)N&#xHP9g=MN6zoy@^#<=Q?N2r{>vo zCtqS7BX)Jn$ZMw4L_W~KPxD3Wxd_OirA>m2XJawqi`U6!O+N{F+K-&J$$(K!#L0RF zaS&%NX!XWPgL%s;sJCqACT^%q*lRj|dNFHKK(Nv`H@`Bvaz5Fzf(Te4nGgXm`~ z{_n)T-~FiH^elm3Hwh2B>&|^PaucdFQf&T8EB)}z*no>p%=q2OMLi>JH{F~OAk1Vy zvusP?f$;y8DNi?fnd%ASAB0p3~HJ~&IhHpB8BV}+XHtrGvTytix-iC8GI4$crq2>`}Q1I6~Y&$0EOpy4?}LhuiDX5 zFc<8{+K%$#<%6f2R*$2^wnN$i+*8!X5)hOfxO&C%%1^osTzKB;1@RqA6i0Yp7U4D- zbaAoKBCe5z8Y47uT zTgd4pSK9ruV(WK_QQ`;R_3a-VK3!VGAA4~49QTzpJkneNuFh#GC9vH|n2}6N!R1`( zqjx6Q`DKrJ`cF_>8P)V~zdy;onWG`w%7l({UGd~}^&_j#vQ$*PJ4{8&cACh;G?|)j z^_^gxROKaEF%nb{c^wt*87&(jM}Wl{#>eEWp}*aYRE3LWKz&Ux!?w@BibPphXNMw| zZ%aJzDg60f7Vczp0d$=6mFYmG$Dx|6yJcH`qCqZGS!sRgy+)K9b2hI=BZ`<8T(Z7o zM?vdNDj&5rT`LZhxO3&Fq(>e2+YIlErO${LBJ&CuJ@X!)&iaL*bA5X@Bh0y_+axx- zGet3JPPd@K!PiCwZ^-cyA|3(mj<55K%%qCXpF9+jxTkyC9uI#?;oqON0OhOuz$*`v*F-z@xN2v6W%)+Sk&=&%-@eX&U}x-WQ|>>k${&&jKMmQ96FrEtN~NfN z1O!1UEF<(*10ke*->E2A7VwjxKrwW+e5>;5qCMym z@1%hmYpJCjz&304-cyH5+PEwrN40H|Ka9Kwp=llja~7=lsRx#G(6h;Z|7qFQvs)=x zx^mZ`P+PycP>elcXH@0aaw8@xUI&OJ5C+`V!uIaeaeIkY1~za*THdxj$F4DYDjF

    K8MUvd)fXP=<3aZiNJ+gXf;?$5s{%;{bz-=6OX@{9GG79f)#QF@NRjNP!1~$!=>C}Yi%r(0sV%bRErlq z+u^r(o1k3Q{=SoI0Lar^c~r%FMLJ$wwaZ!Ru+{F#HN^1wvn>Vqe6PxnV!2dLcjvn= zn4#X#ZC%UrATRpsX-@Gl8b#_=_64c%Vrm{ag4~L`Yw&Z&p83c+r--8iP*w2+^ewP^ zCyEMd@xanldmzJgk%F(Uv|&MK)($Tc!_-=KbjDI-Ag=rN(Uy%@Mx27km*LO$((n&$ zqp0P(rW-8CbA0I|$&&KjGU(ZSPJ_!w7mKT#mi1x?a$G_uvo<89sq4L^XXic^c_L(n z$gQ4=k4-^wd7|bifqO~;zrs$zSyBnENr3~qEgRX%~JI9v<=LKb?P{&h1aGo0~IX&Rx~x zD@aOJu+i$mJ@UPCI;EuYWaiyj_M4w(Ey%?z`%4^2$7A0E9MdqIKV|KxM3309yD5vu zX|~RCjFz_N+wXiic0^wdeuk$6yj7N?jmjD%Q~DcbZV)^qL$0ia?hLY0cMC2vx#o>W z;#z}mDGlyWFVLtiL^1&&U)pY;gBaGEm{NZ|paO4nyP8%-Hi zHb%LAv$$nSnSa(}>uSIH#ToM@;44dPz1r(Os2U9A0=?+I|84&7xWIR z;94`_^bx7DpBdnNk<5V6RTX0x!y%BA13R{bAo0xAa6lev+0U0Xd-afV5?J2WHJdxs z&joYa;ewjSOa3?8x#Z1evUN&2C64J&n#F3Fe-SkPxBQcOE;&DI}nDoSb)~=N2S*Yo}lF2dt zd3oObGsi?1 zx3;eE)55*^>|QK(&;C-O>$tdpYd|uk-NG`U6CizPXz##hml>G-h4M*Bd>iH*-jEKC z(gFcig32;y`V@;~>Soj7XChRGMo&;8qT!J{MfQ{4M!K^@>QAyeg7O~zfgitxs0z&< zP9_VY4JRygIVDz4MTgJxB(ggCYULr_CCN`MjYVz?^1_~GGDvGAjs2H021pw1MH`vm zEUIrpJQGUV?-AMi4l6r^Y_>QYqVcP4TRHEBzRo?kz5BxIV~rnBn-y=c<_*4j^=Y#@ z6sP;rTb&jdE|A~9OMD)<*dYl&r!&d(Q@wv@MTN*Inf*cKN@PwksT0KCvh2&LH)a=X z*?P|!OJ8SbWBuYS-7srMqf+YCvkK8#EHYCN(||&WcS&!blt!aO#bYb?|k8%@%A+9nyhwlk$_pi*AYDyZlo5 zpK6`-6$3yn-I`*2NBsP%5pg-=h;x;N6)FE(|LaA%i%)jv%4xPW*P6%neh+gWA+G++ zMAXuC_N@PW!u>prrV{gW)-g%5SF%H;x#(uf0io%2vnnp6tltU#n%dBN#M;@r_8&(s zpzBC>fp9z-dkEXx0M1>H*#F_@Kc6-mhA^8bskyQ2V3Jln=y_6yP?l^EM=x3!zNVfl z|LU#S)opB`dNWhfu7@Wav-G=91+({{MKcxgIvG7CU~QXZ)N9I33Wdr?N6 z`n@t4DTdQxhEh(}rXRVm3P}M#cd%4G*|X3ioMF^^i&WpBgyuCfpJvu(77ns3L{?BY z%Q)OK^8mh*gqYF*Nq{?(XL|uzw3eg*<=Bb#O=|nrp1*kS4nVRzCLP3Cek(MXUhp^S zM^M&=<%z2xvLb0#zJSu+#`4J(SI^i3F?Q zL%p*Gx4;qTCQn{a@Wf?xM?>Z?j;FIBXfSwvteKZ3xq7pB6(hlOImkl&7qbZv3?{{ldwfH!!69*A}x5 zTl^dX8A39=AA)<@d?j6K;(UDXJLCDxtcIUa-pgirOF}B%wX~dXr0LV`__Y^S81J_eYB|fo^JRl-)=qxldA0AA zRSxh|Pwy^i38|w+fZ5_XH#d#ew|1JMv;@oU41*pQlw@iq;fu1<;9L=%IjTb+#fGRy zFJ>Tbq|$VER7UTlf!|y==&2Z6;D`pL0ceV|9SVmn??x6*0nTO!exVErduLYTmB1UI zdCt<9Qn+0f7Y_V;@tMc96Um;$j0ZKndxJaQn|={TfI7cv5=rHDz9LJ>L*Y}hTxYop@4o?#eqQt$y{VFRQ_gIkbS6@Q@W(Nlqw zVc5c(hGIZa`ZMwvnW9!&5|yzvc#ai%I+arlmxNRwcI;KR^;+P}akulCj+zqyg5Pfg z`M|aA6EKy8W-xVltjd<BQ ztO6{hHsG{qVPF^1RFwy#Sm8K)JiNc-ZBU7`*n^Z}qG%`Lm+divb8R~EkxIo`dUZxG z=2enjU!GRPM@d};}C!-x~8Vj@@_V2Qo4IRMS?3-}D4WQ7k_jN=49 ze~%)#Of?mbfI#IHVg~!9wb9lEzry@lfuP^%gJ+;o^SgeH0dEkf5T+Js{}np!&`IA7J>KeJO4pleu_g*Wr5pCLq0V%I$6vHA=p1sTCAXXPjsCfA zTslB7dmvUw&&}-vaG7Vbc3LW*3ZCg?3M6I}2^`WdQ%36e4fRwoG7>onVRed(TPjbb z3#yDJbHjb$oS{Mi+~qU5@x)8`(>aQR8l8)bSp;>)xW9P`>z`?2FM&{tkqMIWS4oiA z>ZhIr7WiAQ?m1!|Y)*7?mwKA=TSl z!_QdPxkRc@CQoX*lbz6h3!o&yoAi<6MlY4-O~l^NCDl}Zh21qx31mAuy6HodIzj(% zg(ib(bj05p3K#gGB7=Gb%iXyNy;Ii;Q{Xdjhou3C+HqSy-`+a9ktukmpX>d+}s!HiMj~T8D?h=bE#W7_GU<_m(FJR%Kemyde zD+DWt(_xZyi2LFe9c7>pRroeGVD2VKTLiNSZaF7TpEJPAPQ7I=-vP%nJ;D3B1@6zb zzLsQE%sb7_sNT^BKeJvxoLdWux4cfjckj)T?q=CoD13{038}PbrX)FxxkC!&?x-ez zP3Oi_Z|@1#ZFuL3ifv3%=64F=eTOm?t|JI+J$nB0vMkW>E_MO3q77&xN~s@}LgV<& z0+zEFTu1&(K82CnRmgY{>wv@L;z65`dD;@28MATFcG4lm7T*s9&IatRS3{W1GvW9I z1U;<7?LT7GKKb%Squb2+6H$3n5rNg`BDaTnD8}NwcCL%ji*$CQ#JYFuz~i^$Z;u>j zlx>YtS>{~ik5?j5O&7Ne;nk!gcG)Jo--Ql5@WKaP$#Kr2?M=J2>WcegAlS=(d@HDeX@TADI0zIbTy|C&*#0j*Hzr~dM zOzdEDzICx5Z>d)JMpN9H4Oaq*`ONzCVR3R&X;_@vpLO&JnPNg=GS40bOTxSq%y}~V zHePFtDQPAyXju-Ox$!hUwSQ|JyXa+IL*Xv9%mF^hxwJj|4OzJO7&*X!y*D?wzO6v; zcA>W*RLj3_3NZROc+r&v=_?IPCX(wE0gEfrSy$pN<@d6X5xj&m7F)ZcXyb-OtU4l5Eobnr9D44gb?GZ24 zyhQNuwifAWHeNji#zs)M2&Erb3xj8iLTnK^f6%UnP>Wfy%>ct}Ua{EWng+ck({uGB zh(+q*Y~c|lL20MO+)FWqHpB6n_zVAe=IX!<2U*x08!;m}rE(Rv)t-OQ!o!h6vl3wt zSrw2|zA%$WaP{Tjez_VZ-tmVv6VYh^wc9@Yr$w)1?v*3Xrv4AyEAii6y43cpzedE= zEWPlY&l{KQyF-{4_$Okn$D*IjTRwQywd*hN7?$^{Pp@SrK*g4)zC&~uYFa2vvBlRf&}2HSRv(&SM*Zip)P5d zThSR$%AJ$_a>jqQXhfjuPp|*b%E=T5yc?AG`f9c3h6Vy)j`) zx1pomPJpInqb$yTwIhgRXah_=$(}0mlp$xvao0X+HdEXecZumbCaOd5x!(aF9ze&l zKF>YahyhP9;*YA7z3ued9vbXGwAB=iM10CQaX1FmsJLe(`p>N`IiN)gZhUOsK7zy& z+R8HifP=D(N55Owzx}ak4Ee5q+)vZ+n9l##0(6ajZP5P;9gwa5!tK~+f*lE--l#M$ z_%8REend2ZdjAvtM8Mj+TpeHfU5s&X2Vw)5An$7n~9!)Eca z@64iKdywgr3Eg5?s#d*df&UDmC*#&>#Ap0Rc^^6(!b0>{&`XHsONHf7j5HPtRW>>Ti$J&l}hVP^U1a_8-u) z;4oWUOe(-zl$S@4W!2W99-n=;(2yL=+o2@BTztiQxIHjZ^OulX=o=izvne;w#}v5} zP3^QwLOddwbik~y*%0HC6u^e5LNxu=ameMgt!AMg&i zQ}e}31_jGaJZqj5x?f9}H&RjRj9=B70d>hc-l&YwsCROo_I91e5?ed7b{q5>W%qrM zExmj#=8M{+!(TNDacK=3vwf`Cr6D3dFdUY#R=4XkJR1#u+M*1RSv975Ei3e+x8rb< z&K6#kwT#||YaYeS9yKuv@J8&4d+Z`hc=)d>e&<05Su!`!olOXG#99cDwFyd@^&}f; zUWkxK2}Qu^7|24};Bf(gqMV>_ahofKvaHN>Gb#y$!RdgaH;2Bq4vGX#3|Ab~!#Oc1 z(jD>R@Bh~(xGKD`Jn_TbdEX?%_Z}jBgj(G0kvmC$UsnBu!3M)tvE`mpJ$5y)+*>RR zxko!>f4^MW)Zj#%YM46C7&Q@5{(w~^r+94$^2-#<{>m`6LIlFwl?TdAP~*EoX-^7cvC#WG5{CEz5UG3Gnv9;ZVBAm>kiFZz9R>}XWpGtANaNuQ)+_wvaFyx zqZdW!qsy4+MeInff-H|n@DbK?yTwB%wMSMo~M+c z$#8j|dN0IE4;+tIP6oG>KgOMg4HmFUgafUnd|UxPRGky21tN!y?SL7a%IFRE6>gD2 zRKPrg2Kkf2xUNqf26Ym3Ko|e5Dezih<<^Fz690S8{{l)qSW9rk|A{W_ znZh$~!UhqHQ<5tG;UATwc_ih^q!|h2sEwM^sQMx<^Z&v~KYs=){V$Bvv#nE~(435T zddKTp)Co^sGf{!T$uXp=+xR=Xyavm9R|bUMxu2oQ3L|ZDPBQS6T@I~p5h@w;w%fSr z*BT68Ncdi4obg7io@LHY3)sTe=^4woT)aJdx%luW@x!*I$fT@I=z4-s$VXik7Pq`y z5#ANVmzW?dBAGe);sHGSrTg8HCZXUKnU2J?NU-T|ngN|~w=LgYm^dco=@-PT2TtKd zJ(ocX_1*CDPQ%w`>Yt^Ic7~Qpds&Gr^J-D0mH}*p;c_SRCI-s|4!|}2Epn>c91k9w z`F0gMt^W^*D_IkZ7XSPYh;v{8aex}G-qWih;l_tb1ijTzW==~04|T7o=XlOxmaF{o zJ1hNTjc4EA{e1RAqO_!%mUPlhBkp8rBV0|&#ahe1brE$+ocPVh481<<2 ztB851du@Mi?CJ-3Nc!dc(7X5U-+ah+>ZtdpyWZZa2O0?aObeD&(y~uOp|@!I^3=^6 zYx6;flz@%eQJcXD+5ud3DPYhPJfziQ&;SkJKRN+84^ph#yj8zPO=@M}uss|!OvS>f zG58?I?xBTt6-c-)X#VUd=wZ<1M?^q8@D9f{L|O}X2+ZfNX{aIIX5+n19d^Fr62Eok zcadxNevWe{IL_@RoOcX(607lKwoI3saAq6F>ZTOyLuv2&Rf#5_~`ur5g_6 zq18q2;!5Q71S?MDsMvKb%$v1ld zQz6wOgq;|pp0@Z_4joVxUKiYEj%E;42&}le0+uhWlI6OQDr-D}VJ*Bh1L#_^<61Pnu8}yU3|ktc zK;viY1yYsK=TNh(7Jdvvjd z=?5^;dNg`7M*KUoLMEdxhNw;?rCCYYqHCJu54%^?rcdiHsP1|GN)J^6iFo2Pa5;Vi zyGAszRUM;>ifi$(_K-js`87{)Mx)2t_q&>^L?Lou-Bo6Zki?*tj^5wNTAa|zj|tvR zh@gDPNWeUTk%MCS)BRMrMaIHfbP{kMwQ}0s>*>7kjSX~!rP$jE9s2`LG#7|eC*Bdq z0l+xWLa(x3uW0?$JLciWR#y&eK6N$pK&Q0&?!=)waxDUW97Jz&g=|NYAOqPNEdCEZ z1)0>@rlI$R$p<-s4S5DatDgC!U^rS~)SzS-pb`@2@jL=qcIj^b|D4`RkP$}5SE|NU zuVr)9=Y0L|;1<1LD?aRMMbM{g)Nl(W*D{=)ykPDIVZ}^NOI2HE7!;| z3}eGE*UZN3`tAMsem=iHUVm)=?4ReJ=i{JulX>P#yl&U?plbj5Lu|y9c#{P19wu{Z z4AagK36C>GD$|S<>_HU`oI-vt2x%T;K^|eWYdGPJHlGqzfG-_drDd^5`v?yOZijE1 ztZ$fXd;`0RVP$2>iSk*?VNPWfublnfCSonqg4dYFJ7M;xi1b!D zos5dHu9Pn5COZe?vYK6e)IF){v0|{3Z?Frs;ZD&wZ;yzT`V65oUM$v#ywF2z3Y6ar zRvPDxLgVZGJPr?Go`DSWC(YM)EJs|=Sihe2{xs-3^d238RtYi=r`YMy?$q{L?l6)O zLXu7xHWPi~?%={#Mx@&5#Mz}#J$Lw#A5 zI+O_>Zr7)K*iKICdlUUbCR}H&6yMSBUTM-L7BcEOP_k+m{g*eH(D7MoHLf}`tq!dC zkq*Vk-f6r%d?G!88fMUZPdLBUJU2@`;e=hD)#9YezLZ|w(PR9A`&ulwK~ralXJrAq z1z6+9&&$%RP7HzNhXH3PFZt#|nGtlHCpfzb&~`ELAMlYVPu>9);XD4jrB&AND9F;~ zqP0_kQ{3Okw3oAu$NH0_CuVTXpe(t1tq3oSzp>`!ZL5|9N=nCM6T}5lC|v&Hz=#>6 zA43h#TOY+06>Lv*b77%e3d<|J_kCW8TJ4^{pH>3v-VUQx;s2I^wuBAXl1gN zgnt7C$#dPBfHWw{Q7$Oea0hB;f8zau2%|NWqGHCP4(|vU-deTAC9?)X$#Nx9$^JpY z>S-I1M7{q+R=6Kt5rCi21=uJy940obsI09@H68~swyP-#N;l&$Te&0kt0#Hg2IQ9j zP>r;17zl{yLiv$%>;0#qQ>Lfl$Z?Rm>9B@v+T<%7R|4{5pN%kk2vWpt*8oG(1-T`r zMNA9rLz}XxWnF(4>yL~`L<1TG)`}|Onsm^r$zJeC!gNsATiBUCT zb8h{vaytFh0hxb-%)+{D|NXDU5Etou$b*gdk&iQLelyxO5gJ)rldJ8$^(!rtn++1K zylH?F9=q8q;Po1;w*C7~tilp{pk!c1sDSCezFVW|ok#)PjJT5fG9<@&@gy1P+EJXR>EMlHXm$en&7j*O%Sm+bho#O)ZeQ-i;RXXiud=h ze+$Ibtd-{PchjT1*3|~JsCK4A?pv+W-gj`t3@D&kYsovPdT4qZ+uknAjwfMzBX%0N zl1j-Snd9>}b)1oS%twi8`lx{u5(!-9jTu5TEVK3sb12U$AAjynH=kL^;Eg>InAeHG zln|Wf^zDdh%u07U+FQRvSB(b~gFm9`Nw6tRv#y0{GqD5#$3|OEcoAfQ|B`^M@f8b) z)hS+}yJd1tY(udYhGEbL{w-N*1mu2v{+FFseH$w&4i(BVBYC{Vj#4D`vQPT&daZRY zIG4+G&nNzlsak*L1x_zdxs-wPskX+Q39NgEVf*BwUGTUH<&*T0YHYCOr3=3YmN(4o zAhs)Eh_E;DcWWG2!JUNf0+aDt*q;?gY*?0KP$f2}e@(2mS_-B#rYu)fnIo@L1bxDnWH_lRbeS|6i3{uk zHPtuvG373(>EzldZy%ju1x+tasXXNb1p%UCusz2mf*C zj^e{=ZYXg+Ydvol+{jSXSM&+e>6>2Kust}R&9tjZm+7z`J$T^5#M*e;rn<|6n^E^l zdOm%bF}?;kt_|BkAWfG2Ms*uX+KZQD%nj(4dn3{#PVAI-{3jEcOPRSddY6^Bo)=Ra zqa~GWNq6eO95Qe}y^yG?!LcdJzq530w$02iaK*pm<-M#7oT3J-IlcW8*ZdB`<4`__ zC57mL(zH1Up+my-Z_@`vSjrh1M_NgPBn}WoO*(o@ zrT?iNx&Ic1JWz*$9p5~<^fOz-{r#LZKUU@$*QWLI#q%i|J$n1TCRii)z#<2q@=Ves zPK?jo3Sip^t(2Y-YJGzlrmq$o^G-G8K6m-&b6d^buZP590tu7aR=JK0?<=zRBjmq| zyi!HBY8ZQ0%n|J$+>fW5WVAtlmt*fG*Z-q{K9_r^zRB^(=La%ZTDtCg$mA&-K2gL< ztcKC;7+?5J6RY)#rZJf(nw+bt)sum8h%Ij$>i6QZj+Yz$<0)#w9ZxlY@km~RPm7|d zIUt@t6wY9-a?~5P@nvn#bt2@;M)_AFW4V>E?IRBTUiWVD83(O2dSnlXthf_>zDeIGJvLGcf*GFM#oh!;~BVu3(X}8(8DCX zcsQR(9U&r(l=!b9wtVFQkx>v^fET{q7;z@8^A{L+8_;#bwWgmDov$UhS?f9KI8PDNF|-5)z~ddXJ4Z@8WM)y24oV$ zS3PSF1ks=XV*WPks4&e}zi);MIVc>>uVpH3l0?qa9o|Rs*Ij%jz4w?B?;sJ~v{LGE z+K?nh^ilm6+!xNY&l&S+Sky;Ef)YgRLY8?Ku$)P{jCUD&D6hO>RZY-fx>NY2O#e2ru! zUZiw09JBhY@fi1wq3p`x??Yd_V==!}+gXpb|CuBdRx>Fl9ZPU8&mF@%qw#9U4ZUQ5 z9$O()NqwSPKAgQ`(t9F&Q%czWkuOp;8-0xT1~j7$N5+J&LELLA{0de7(Qg_}W^D0l z!yiRluiXJ1lk~FIhv7REwsi$FKXWhaCJeJ^41wKBvz-(|vP?HrO=^m%dsfgA2Gbcv zZ!AU}!i_>3rqzA=c#|Fus|(mgN=;)ias-fnXmRr(_X+5zfvkljxn2vKl}n(H=vXHh zAj(B1F3~!;eJ^xnqZs+mmquRZiohTLK2re)gcmtkbO=gOmZBoNT6aJfy0|gUy%yi# zDQD3js@;NUo2e}=;?$NZ_@%6keZ~IC|Fq6Lwc`zX*Y|`5RxZ|sYFY^_r)zVxM%~)_ zZ%UoXnib?Yw^SBAIXY0po|*_(XS)y<0&2nO3WvjI!mx|Wenw$A1Rk;9QH33+47a|N z!Kg%ifTQzQaHJ{vx{{0VD0SS&Bdg+Yv{4qFW~CDVcPDuDRWne zJue(AJJkAEVKe2IE!z}NU?M1vyj~+fT#lZ8uO4)#=<{^{=J-ZNOfldv$4;*Y*NYjs z!}Jc_Uwf@^s5vX$?u`2E^*`q-4VRa}P$gQcl4Ejim$GmZoWBWM zX>?uWM~2pcCDg;FACH8r`240?t5{BBe7K$Sybc`Kk7_03^Z)O46w+f(3UpgN*broD%ptZ=HnQJq_@}(@HB2@(Wu+)dJ;Ls#r2W#+`U_Y__-@7OP(JtQue$rx1GoA}wU;6( zwu`BLzWeZ3#8d21I{XdkDM=msIJsr=K&J5!w38sQQZIqJ12E&o8~TBy#A*)GsNcn} zBknO9wx}P>G&=M|BKaP?EnI{|qedO$o7|2aY^6{!^_~-`HVwB$;HCi<(IGXBZLHH@ zrP>VF$Dq~Z?c5%ME+UqK`^|g-KgwbRI$V>=>io?)z)!+r9ozF%Z`dRWnU_zU$rO^bCc=7+qz zd}u*s6G4_r9kFoXqvh3+_MFK&==kKwiXQWLD)CjO5pG-MzWq}ZT9p>g!sWSV2&aLT zX+BdU9(P8pIt!+>LavgN1CRy6?wKC0`hKn+=~ezOY%U`!^;G4$#@sXVQbY!>%+*n2 zQj>yPhIXFz&Fd)JtTBa8Xy0Oj(Q~u-xmvQ2;;W1MO$`U~_r?Pe0dM$pZYhiF{?=1N zlutE%wcioII;B`U2Xbtq&piJ;P|B-WgFf#YA^a!?PMPbmSpl68${77cR$*in0T^^e ziICxkhpMZX0hytecz49)=tk%Km<|aONYni0YaS`)0E+)M5j>b*rq{o_D&&*!=dsn_ zhR086A+cDy_|><3b;N)mCdi#jEeZi_k~Dpe1gg+iGQvPIct6E4H>u)H@{5oLuG|{P zzD`1SLvAZ61iq_!oN>!AZ0Y#>mqtXajBrEJMrxp3|4B!GF5VLuqnMy1KUpD4!%HSD zS6uOn@|!CF^(CZO8IG}=iWo;~vsdpl_16fWs0!yclrj#vb#e&jXeDrn5lMuI_8fkT zEeC9b_48*k^!;|I8~}$c1Y3sxXD|}%i7mK;a&q~BMLBBUjsD`cGxE?Y%3^xG?GSVq z^C?p3?d99=@b*GTMZaUaN8VFn;+sMH{v;HRX6LNv`GUO3x@ZV!$(*j#Ca*Ax8AnU`@C68HZOh!WGi-*OU?t-xC6nSiI399o9q4 z=jfAhiB}uvKGL*mBSZ^`&E-|jx6LrB&FUtLI!Dc7-kf|PqX?8vZ-4}1Z}S16cGYvG z^a7>9y6LTwI`J|)nRu_3VyUMm;iI1nWhJTwi5hQ%9JNlT>Krlsl+V(9KAGeC*ed9d zZ8O@);b<4VN zFYd4cA4H#A(oAl68iX?K%;di$U6Vd}U~qDV0=i`1ad_3EIyvU-FaP-dCG99~?gl@5 zOSF0b+>1C`|6Edm7#)SA04@$T_ZqItj;0^2N9DX~2jaRV`JJI}65PZNvdY#E~ZX6qtflrnf_^z8WeB9AS1ZA7Da4>yv*mH|2wY> zf+Z(+`7v$kbH|PzNh{W0pY!-}2mPAO&+#0jo3MvkReq+VQ55{JXmaxG3qrqR$Vk=I zl%?Do>2d)}ck5Mnb2PEG;NT^;WpXrn`G6wL;mq(4bl4#P$|xZP+dW$|FY%j>uZUVYTB6x zcVWhsx!Ekrp>EGOXtjmXHo~;FOO-*_hYfV)h60o5=hu80BO7&-H#5_)QhT^D5^&&q zq@gc`K#%Cz(&1blCx`B<4iJ4sjz&6h@k{c$7X<2!?aig?J`j62ywo55Del8&;Nt2N z|BNp>FV7j<6IveHI7scN+2rF;n}8w>Y5(!p#bseiY$9P<69XMYKg1>Otse|rc`p+#uJN{#=+klV9e!qc? z1ERJ^81>?abH5x7>lzito=iFBKma}P}IauM%H@`uSsBz3s%9KBgT z@7w?UkK=SnYi(}V_>s@f-`wv>)dROAW~x8YPUbzlHoDTBa8(*LEC~a9 z;U&<#`x0V>QKe;Jdk#>?yaK>mD(?4ccRg8e)6KVTnT~VVni3o!h59&(Iz+P)P7v%F zGnG;cM$z`^3zPqrBGkUy?Gg}}?%+FqV$QX@(%-gmxUR+A(En8iFI|Rd=)RLB{XZ-~ zd!|s)w9vU{`|<`czgEaQ{(tf3_k2x6CMvd!II0q#Io8H=TH*hS(6^BFUzvM77e`R- zF+iu#XISOqkt~@~C|=F5rW{0q|(!rRSk6G3EK`0NhkZ5tki z>JXH6K=iFxk+D_8YwH(XU!0GVok9u$dey-nAd3!gd-U_%MH$BrH>q0{$fra{0VB+s z`ebnjqv^v*qEYxG;raIdT+ zd{b_#JIb3E4T>LMml^jz(j@R?jM3SWvet?t$cebnR!?xOc=)fza)2rfFL*~sj9`Km z8&40lcRqLAXTyyUW-~mO#ESr9h^D3D=OckO_#RMi<02pqQoJe~1`aKtzDY!&xUT7+ z7j=3-e^N}yMGlXu?ci*M!isuoq0oj{n~^6gVSZ%!4d`O=xzmQrS%elSMhAyb3Dzte>%19Qcrfs zGq=5iKE&}T-lO#EnJ#_C{(-*c$|o=N9P-^+^6ub-l3#da8}DtJ#CyXX9ILe3#JhWp zPWg8o@VP3#B6VO+&kx!Psh!&IMXW&*!4WR2K#!~;Vbw)RJ)J_MudUxYpMTM|*FKlo zb7#76x{r6{L5Q}3OulhnXW%bVgb&l;9F44GX%sKQ)LfKVb&4ik)Dc0-wwO7%$ zA9T11dCjTJ)OGwdbo@ZKu9@HmjLIzH%k(o(B^bcSIm0YBhoh4YDKa}Vq0%;T_6_?y zGsTD#75X1%w#Pu~L&g$=-^Wi*(V4c2o2Ub^m(>|;CaaooIyxQ(Kd?c-7n+})4Jb$( zTs?<|D?9@mKdlAK&$$OM|4~xrDu&qdY~OISbVlfvMH7WR>6ax(V#hZ7>pTvd15b%f z86F?MUorD?lpcza{)CVgbJh8&7W_2p1a)D11X$-<5GRT9I$wUlh}bb zDC9@%#oG^9Qtg7$meme)32T&JV{GpT3iTf>K@G!l^rDupfj-vlH({hfE)v#G#|O+) z-o_(OVr9xuy;;oL3iybFA!Poo9ZfN1^)fcgkw@zelrBzTHD8bHz9ZfHpe$75V zLymJX_;fP+FNLS!8Zb!&8}&$7)(&YDif`$Td12T_TVg!YrqSN1h=vt3?@}Z6b$FBP zBywnzVk4LZHERgBaUCG|1m}y?5B}#NAsDGShN-Co4I^K@PNoo-0ZqlFL+9SP4oKT7 z(1G7aNQ2%4E!@wX)g0OoC{g5kskuQ~#gO1z2eDEckCEN8HPDTdlR#$F=utYu0&%q| zYbNOS9sK4K(a`emj>);V9I{sRPWoZ+@zKK35|>FWhTvW6?>UDWEj_pQ_4*TEU*06A z&CM-4>G%eRgx4PqqX^G=|B$YY~CSvr5RJYih>JWvr~?%V%*W1ZT>7- z8f*OZyvEdA)UoNghv~kA%5?H2i87y!*G8^W!(4jNBjccQ=nzTyzh`~};bYQDaA_S=6DcCm5id(K@&^=b_2BES2P>gPt?-SqL zy1`=S#xiOB%dfv(LhZ)c|>I>Dtsrf*aIsy>~Vhze};uDY_y=U?nr0{}87=t#dQnjck66Jbxw$D}Fwq z5v{loo*Qxf)so5groia%+18y(#*(>0nHN{25zb!A-m)pEuzSdvHGYsh`M4f`Z0n>) zM4+?E(T2pWGY0jhl=MBgP%r8tcFv|#GvY^l%T&Q4;MRpR$!dQie|4kk(pxgs4(CX(kAG5-@)PHQ^gw^pZGL5mNetnz1!Lzw{Kkuow;TtEyFoB?yc zY*J_f)-sDLScfBD8S6BP>p(Uyjt7(E81q?7{~;)ma!Yh74iSnW1Vo@(aqrTFVBnig zA+?%fg9(*D@TTInK7tzefPzW+{^VTSQUA5wx)P@Tt6aoBkWfPUb>zUJzsEhUd?|O$ z{`uEM;u1pqShbIEM+XDZym8ne`Fq0&Ectt*YkOJNfZUBMORo5!@cS5L_?}T$|1R@p z_XCzkbZ-11OCoXtOE~Jk@iqU(>%S9IM*p?d>B1dN>FHNLSXZ(4UG`Wcy3N@H-|(-o zI+j|QS9Lsj)F-6#(Q*n{pF|o#On!B|nb4J2I=`miV9{4Ru8`(zAchO|wv*O7w`&DL()3qfY^L71nyCEia{Yy{R`8VC@k2)4;gJbm^u917O77d<*kYP^2}2z6D#l z)55AHpeq_YnOA%5Iz7>wJ#}mJJO`V8{ewEW-{Zf~8%~-il!2StrCId8!PAA-SbgpJ z<4i|v8Xz`Bei3q{g(tJVw4Oq*D`xtku0C(PH`#&17zd9WQ~2<osn}UqlZ+7&P3l^cYKGd1qCz<&dto7IVYkHkqai0~w&IxXu}Jn%{e! z`%cfL_Ga+Qfj`D9;l(q*ZOQcYFPyGjz8YtG5tT4MUJp27;(O$l=}Sk&7-zl7%q@vl zVS$WrFNI3#Ad$KRcUm{oaT)x&>{lXFt;uQU?aPlqjj%P;)7qFfda?9M?|DZz2s&DQ zmSS0s)(y{Bye>@qAzBOV*2eENRSv4hmatq_v1rd_B ztPK7=h0KYzCw#CaMmbZ2pLo?cc5Pc>ff1-tTi00ZUgmBU zhL{UvQ@i1=RI;!`gBr;sfe7ILW^<~kaGK<|34u$QD(UIlUks3>Jb#9dl7VN`cr_N6 zSp{BCmmePF> zn!FCPQXi3hV8rDPw?||eE*PxM)e8=$D1iR-BIk4)DrCuPAAAcr&Jgn4QQydGgyDD# zgOedQImi6Syq%6fpP{DOg+ZE;kj+GfIgs+4ye0^x(vH}^=lyld?xFmK7($agnSCE- z*LwoT3`Dn3r2+CBUKo>Xxat3nQe=2J#5%&vIY6*oIXO=1w1-HU>#$p>{kredEVS@s3N=*`WrNBDmF`cxKCwWCkpXkJ+f8%m(a_v!%&D+9U+7SnZ# zJRW{tNw`SWg)Ox$I@u8Hji)=EHr7M26XSK6bvN`jG{oeKbFuZ|;SQ8G+4!XcjeZRl zX;^1|&-`&Z$R%R>N0!CL0s7tmH$ocpeW=f*62b&pUScEq-^Iph54XYah#zKv`RF&Qwnybit~&ENaxm6`f9db)~YV4>@4W1>+k(}lP-uAi&Fm*C)_ zDMjtw0TjQkwxriFE#3pUzs0czhW4Tkv4VS+Yo+9+q5o`WF3l~_FWNg@v@yDmONsE+ z>*=D0W3q;S{6YMEwbV*zFYAtQ1|7 zh-(uk!>`O7Wxm^ucZtTmr)-_6-MSjNtd0l>QDYx7I9EpaFnw4Rm9gCud0AMXG<(bj zvUkWA^;NZ%WG6D13+vlZ{R$XPxJ+EC2-Sxd1Q!B#$)5Mo5Z}9`>ClI8E5h9<<*N10 zn|{TWZ?*Gp7ScuHLo}7`*Y_o2;NGc$(DA@HqJ9{Jclq0DX_>V`>$(#|BtKaHOJlP4 z3BJ|6BUld`967T8;K$|Q+8_R^(6C&k;a^Te=F%~WZ|idSf z(Ja@LF7aPSZ=|ugeDxn z;Rbw-^7`OA-wJ_r%_+sm4}c);Wq><{?(}M!2;B^$crW^u325DWimk7 zx-Kd6;CvfLLpd~|=u_9f0T-Ej#>u>vI;E3Dd#5DWna*>ZQI zZ-BntW)>iBwW_xCNcd1>?(fJkJTd;@$^q$Z+r@DHG`rJ0t5`n0MLfYJq$ldZA<5t_ z3w8F%o$4!VZhKAwzyClO1Br$gqP&s7;gFK<6_(uBq@m?9U$^bo+K8%4*5d~a{x%WJ zFM_rip6pbIOw%Z8m<1y$Muq4dojydjm{1RXp76MDpVNziTnF`M8hAA=5m@^CH^KKC zcXZ9p{@>Ih>H_2P?gaNVc$xeocQy7%z`Z20@1mKt?(m>lpa%QC^@Z=Wv zdb6YwUjoaS*Oui)Ipfevty}6Y!N}nk=ye8H>-pzjEI+&^Jl)hb@P>TwSCXuc^*x>| zJ49O|6&4v0;gNJbeK+ooo3!p8q?KcO!k-d0 z7yF6sax**>r+0!>^0m{f;cC0e+~BSd?QbGqvlqJ*PL?aBte;uI=Nx=>|yUxdjIx!sDwkxQz>fH^pj0W-Ftgp>-HHaO3KU-^LEGS zhV9~9{E>2#K1$uPE^pduDPb#EF;m7U8fwOp6sy*~Sj|$&IIIdRafZ*&z#oCfzgfD3 zEe(b&SlTN^z8QhIBpxmFU1UA%nSL%=Njq{oG^^0po7tv&_LSf*3icayHQ~Hv!D^L& z$eUv}^M3opQGAcJ!3{Q9E+I+M=LBLq%QT`Kuk;De-P%YwIswr7UYSzSp_Q1aK3QJ( z(LO@<7b4m>a*QBw57kOqvWU(_-mzNF4YdLJ+gmMH$yXyHI;7arLpZjn#UM*dkaDDL zn$qQew%K!|jo|@!jpLRdDF84SyPSYqU*;4!w}QURKTW-$*QDlLiD~Q^7KY+x77aP5 zXYHdBhns$`p!j=IS0@zNvfo6)xdg^lhXBTmzRzo$S6+&IU+#@RH!5tXG=f$GqI!E} zv5IN-4pLD$GFy8W&F$3-b08NW_Ubjjf0pU_$g^V(pMyC3I4_l@@&D6ZLD`RVUH5e} zovX150bvHdlP4|Avwc^JYdkbJd)g)(>?OGOngwPwtuNb zy_%_e=P&>5uw%*Q4(@q;!wi6TlBxOG9^>$fWXLZ2I@dOP?cG7*)x|{4uJqR(1iy4t z3)S5Cw`?llZHn=$s~SFkROL`w3b$((GJ5#;{F#m7x($JH-haC>Uk*6=`WK$UYj#ZD=C)g3l^w}%GAZEPRMFHFN? zFv`>-VIE&Z+~Z6eH(iV!M^11sG}@bl4u4hH;h9WAS7O7hxy`tes1p02?8+4iGhMSrGI>Jx3d5 zpkR7P19CTm(&rbDOnhDlddgR46u4jTzpR&Q?3k9qzSAF}Kx$JHUkJ(@mu%#1?J&3D-uw*gIL&n>S8eiF@8lv#J*n_k8)Fy%>jqpC*A0~6*PNAh zxIr!UH-S5>{N=Akgx?DLbZ|Z9+(|rvyRVH-nwEZU*6<-ll^)mj@Y5Zi@r$TmUjbT; z^KD0;X^e#y0go8mkX7aew8fwgjnMeAn|6+%vjbXE->dgVF%;G-5K$F%^<$>G`H+IE z`4BgLqOSe^$0O3G;vuD)H+Wyk3-jS~H;)=rA&Ld={K*W2T)iQIrO$o-1g(e~B@taW z1abS#?)!;wSpQq`tlV?>a$dDE0^b8~&nuKzz41);S%y^pVXeo_E*5EjV`|&M+S$t% zzb(cl`tnM(-}O!2B?G^8MPx$9Hb(DZM?OQAgD<4Ncou8`8k<%HCYg zeeg@-Yib{demXS6wX?QRvAH`#%2GAuwOaZvT;Uh%SC2DvFls0Vxw6mU4Q-@AH|xpu zOGKI<8iG*NYM8NmM{LRwEaJY07SMw_w$&kcsF*XxTP8j`XNz00HRucQr#xzoQ7c^{VutlEJDO@7_Fc-KVA!owEF1?)ZCtiUDjI&{D{0S&5K$&Tl!WvxpL z_ITe?@IKMCLB*IzQ>h|n)r2sl2Q(yX7YCZCyCp0Jm&V7rR(F;Z7tKT&v)%IBN~BeZ z-_e4T>z7WbSDckL2Hjx&3dHD~2JjB>cM6q#A55`Me>rOytJ>$MM)d+@!*5(`c4^6x zh|3D+_O16LZa;tRmnmpFT+?y1*CHD5OCwsA|M!I47qx+-EXe_WQ|EPNf|)cC-$M+k z)ENw+t=-|X4e3F6R`?sR!NxoF8J#yi0l0Qf2UYV20~LzU;=P=M{Lb zd^?dbw3I#}+8qMP{L*{c(0)>3tv3{wXQ5L7j_q01e~>PWo_88B+nv5M6~*-A?s`i; z61w!txFu&IWllmXJxlqQZ0IEW=U&>a<6i1KS^c9D5{*n=SH;TK)TrE_^X^K+Jt(h# z44rm~thrCP30}~!Jv~qMPD8D&){n)`uchu~tN6PK!W&_CWr_Qk+WrZojqQizaRKQF zq>g(fg7s2G$944*$XhbpKaTlSmNPix8gmY32E5E#P`TSNeejo@+Cx&a_HdAfyUFrj{Wo^ zIq|%a%(>wL$S=joImfrplOqCQb5{ndqYqs|n9q>=8`bQa_-(3)OR{cDmP#Z<6^Up9 zmpZNmDB`dEV(Tj$3yrm^y%Tw;vCeWMcc*juum0OZ5H**-<9ws$Keiv4da83=Ib6*u zDKKOs_dZ|dOtj{qoYBJPP35(WS0J=w?noEo272={dqqLl6IYV?sg@5De1cVda6pD(lr#;T#<4f5?b;1GeTN>0QIW$!uA{A0(R%* zDIH&(yHi;=S+xU(VVS|U-4DTO=ls2H!R|+<(Z_D?|5P34Ep^zkKES;ZuMKy?X{TQW zWhK07*UE%ePU%R$`T2O>OX(!IG#6Iug0+{{mXic1u$$o$exc4Pb0XBkQY$~a*DY=P zvvuY14WwF#xzCO01Xj1T2=eeICG?>WM;GPU=%JZ;_UX^jHG3V?V^6C~T>ZL`gusOG zZb4W)S)^7HHW%o%LxYodAkDCm--;R*0#{RJwl3jJFxCEx?NvQd+6f)ZB7Bsg_x@6X zumZYs_IiVqM3ynIvA0V7CMy>bGF6MQdo=_xpKukv;5{1&zkgqM{L9Xocp`}et({2r zal=+{_SBta%)$uBSC5-N`#6;A{I;Wd+K>GKXLwBL*5Kd}AXsOokxP_*%WeXDqd-SS zErWGG+uPp)oduwGx3>4wA1}z!yY30gl^*g>gQ@cy`H0g`uK@ISNt} zpR0zD>FLaR;PgL zBtA3i(L6idf+P5p)*a=z zx7LD|S6HsDWq3F5W6KkOgP}mjZwUYo<@we8|Vnc9f+$~FZYI^ zqZ)jD5m*E{kpFt_m{P4>%@7ne!!fPt*B0^&)ut^;yz9y1eW;v+KCeLthhSE|S_0E0s;TY!SE) z7c|t_azDD&<%2L`%(S1Rr3=T3;m*+KbdFQ7MM+HJu9FEu_S_BUkg8me2O>P&(zqd< z_0&o1XHYtCpp=*i?LQv5YsXfdbhU7y9l+TTSm8jkxq~k&whfib_EL1JSK^2yTg%}V z$0C1ib7GZyW@{L1WXJ#$o`}IjW++>@;bnJ+&VM^`Z z`tkglW86y^6_$Pt!9r`NM}#!}>i<8AMkE_cp4#+(k6B4Lay;1oX#Z2Cw2{58TDxDI zDw-%L%Kxk?r9(MkM@;IP+Xwd|gVR405uSRnP8|J>2pxpIojCo+B{A*vt)MF(dqUoR zgIT@u>xsG624dXpSdZMSse;|_j%?;VwOtoKXF0XrF)>WL^EUO$zJR|Y9EsrZhSeP+ z9RBIpIE|&T7z4rx*{szOC?aWs3GO5?h~6+!v*bw`Q1`r~`ow=eoL8q`vHOP%>*J(zuGpIpkFQ9eGfH$KzT z4Sa6h6Q^MZ4?K^IN9_2d@_gq9(h9EbRi^$KPK&o_GO28b>(qX7fBM~tskXs(Iy9{%9Zw|8=FomK(39i zWSu->VBPXA7hmB_lX{v<9j}OdB>qCraqQ2pe2eLsch-js9t4$47qIkvq%X!_&ZLA! zuQV;*lqFE4voF4KNg*cPWa|a3JXoPDuvJ>yhI%{1*sodMA1i^n@G>?>u&?8x%b`sj z*e*36tU&x~90Qo!=39ckAUnT#;L%9V){s6hA8>qtADI+p`OYeFS-c|%i=i2MPvA`J z944P`Q)E6?FMc?=lL-lS(g`>vjm#u|G#RMygeQPEDW znBQ%#({+$@Z-QhX*!6d|4H%Uh z>k6gF$cT%8H9;!HSyu;_Kg>7+QH8Xy`l;#s@ihN&mx$3~sV1qkN7QL9y6p?W=!zrx z5v~3WX`(pGyQ5WN^41R#kb)VMDG`b%I=BVH00WG_W;|7 zYS;Z*JSHYQBJgx*oaU+Ep}>ab_tq*eRg_>(lJL)|`Sd}{b?e6xo-RAGcviLut{ zSoF1ZRas^V{#s!RQf-JGi*D&5ei3n7P^eQwyg5lH5vh*T8S;%CYIoc@IavlL^-ISN zFJHuxUp1l-Cy4d6+lr2iuCXxl8msfZS331!^C=H1UPQP5?=XXHKKb*{(Y`!2BE4bX zW!7u2tViq4B&_|+1-UHAq<~{K?n*T$E@rIcG>q7(6%b>xuVT{Q*z0;Ji5NdVzV!L^ zscMsaF>*=jMB8uQDWk!uUnlnjU*Z(cjwfe36*;bFr1f}IZ+}E?Tui?N`|$j%MyKq# zPts#;?w><}>X3g#UVTqerA0L5ir?}&phE;h&^nHwyw2?5YP84&FSn2Ud#t&baJb$y zeOw~M^*zp=15r1`rCv$IE{?V?N!`MO|sUo!Cf@ARAFn}9#~zx7TL^#I+CZ#{u8c(brP zx+BC=P}%wqGhvM0f3R0wkR>N9m*9+daxJO2fEQzSD_so0k~D?n_i(T6jZ)1QnsT%6 zul&%dMuoIXKag4qJ5CJ9Ty8s5eyVpyMSbnC>pE)v65@k#kgcNo5)^TjdoW4!RP9Yw zvK=)#9y^16l7Pj2H9aNOxUwGzI7STB$M)CcY!K9OBWJadmH#%a5Avk~ zaA08J-sX7aLi(!j$sndFO24HF<+Hxy6qi*lFZn62a^kKZxJEtTS<(&8eI1$ihKW7S zvuPR=JtisjhDA(wz4Gnqzrv_%9TwwZY}jP;hZ=QBaV4)OBY>76z_#<_3?wvAHh_2y zWt%qlGu31kmTY!o@$}^w6$ZxVlbr}X+VXq?(@clnG&B!fbBSEf-rPRM`ABqlF%cf} z0x#;E*G3ZzbqSMJKuSU?!n;DQdWQkbYHP{REDI0S>kW5PWYG6?AEoQ>V%E}YtR?E8 zXQx>2cPPeZm&fnErZvucxafT^L}nr40bV)KDRVFM>@6li>rjq$w*1vkbaj7YYzgBJ zEbp!KyZ*t{j?zSdN*A)m*kp&563Or%g>H;XNbDcsZO~VE(qi~!fVRr~K-x{O!vi}H z(`0&3Dg37)RpkGRO1Dhi5N*y&r9JHLLJwf<$5I8ScR1wn;X@)XKc9k$b>+AO+-g#- zdI0a7qSoX#HMT5>@9$b(edNy~h$$lGMN=Jy-8WAcMZ1L1wQLdt+Iqlj>!AZRx|RQr zsP~SiI?(^e$x39TLRP3$gffnONRf=ARLCCL;n)YqQDl#-$V~QL+2hzFJLA~fF^+wl z!{LnIx%d0IkKh02ulISrU+>p=4yBuykr^W(x2qZ$>aW%=sE1FL*MtMs8mgf&f?>iv zi?51F0#3U>HqvPtnSj@zxotLtY*Y2#>fQvBoy z?t-T%szz)KWx1uM|1MWXs7F`we>WdHx-+ff*2c(}(OufgDhHM^8vgPzJkolbM)Aug>^z(L=9VHs}y(fU0r~v>~g)SotQMuOz$`(g8ByK zZ#S%WMjr?EB0J){d+fuC$(G5LZn}GS-|!Cj-+|K-s4*pWGB>Hn2%?Pr(WtG&NE28! zW3-=ql1QC%t`2-GUKc*Bx{u(Kbql<6$kA9@cPu@bl*uJu6!?|UOT06Ef8Io=`^mhbry{6SehM^F zwx(m!AKkjaM-9eYbbuuZN9mZHpOxD$*+A2D>~IG$j`!?y=a7vnZ^Y^Bj!|dALC|fB zNtZvzH37e)m%}RG!`gdB5g2ahXTn8MK>HM!9X`EEka6HaG-#v9PP{@Gh7g}e)lk(t z@3bNWgDJf!(HNcm@_X)MUij9%u$ znMFd?T97SY%1o{g?-0C6%r1auTKl^3k_utsqRR>_zquvC6mB~-04o6K|x7>2ZJ$;+Q2RGm@fM@5MGATw+{LFN!*8>l|Qnbm~*5`I~a1&!8Y)=Y6TlH8?&<)zeB+Cd%4cq^wEvc&gJ!4>aUvlGV>m^e+iF@0|% zv*)%NB1;hPA#8Ql-+4+~J}@>^{l>d0K)vy4&+#^Y0aEN%#Ny`q6l|BdMxT EA~J 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 *fWcTfll9!r6^)zPiY@nJ`Q2C1l3PsrlQf^ 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�=HFEnB4%yRcm<*7(# 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ⅅ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

    _@QIK$JWxlWw!fj)ix#o)+Czf z%2|C9An8;rE-Vl-po-ppvBAxfj6JLpsmwURQSEbRtsCeSxp>0h8H3&j#Q|w*Zw`7%k9Crvq)KAW3vB~=pf;XTbs)D)*Nz`_ zKlVEIYr{L;<{k8?eZeLuylQR+jS#9B2r zQcBM7lrV2IJgzQL4a{yf&ugBeTZ_si+j|6h72B z9seB4_UiUn>neq+l?Izr^fJ-+x;Z8!cceS^Bv)rDUr*S7@~islafQGA+>r}pRg3)_ z)JZL%bIt!<&`{_92!1tcQ@g*ZeEwHL4fM85)ALU{GUV?h>1cQ1OUZwSRl=o{lj>N% ztkK`a9P{4*;lE?NzX2thfMg~38r_}IAY4~|HTH)U(9Sh3wfY z+=9RB`m*L#y7K{N+u`I)mF&zV{yLN_llkx39D!)q#z6VMgKf3W|2{A&cZ4k}*zTkI zap7CnMELRHy@rvx<7rto-$6$%^1RCpOn#;Z7E>}v8)|!}*3aSj`Ui=9Ey5S4onqB( z$8mkvMsi!ix8#-IO%|9ZwA`bagj~yuR-QK_-}JBk7EtiSjVaa|d&r3SoADB;5}3b3 z$@zM^WtMk*cCqQMa))}S@;#JUnk>Qg8gVJ_I9f2(M#|V}Qh!}Y>O*Y23=NUp!=llH zgS*0yBhQKa@za^h<+soZ!>!%nWycH#Lv-G+I#Kra>uvz8F=-su_|IsKI@M0N`2Sb5 zC0AtCjT;BxLG`pm1X}d4)}M;Qp*!<2;@nzFzlo!T%;nU!-Wz>Jk)Fefj>JB(asJ|Hsk8#^$$butOf`_SOfQSV07$(G!7GyEGb8Ok?%DaK2`xz9SL|5lAf zIk}A67!H$s9PIG?LJ^B%FJQ`?VOUZG5$xlAPnI!hYzVBjo7rgu_kLes^QDAmx!oB= z@$|0D*Tz?fV!W<%cz!+xjSRSzs%&Knb;w69IIxkV^bA5z%|9}jz&@@yS|pK^{^{cn zBifemKlCls(_-S*x1}TMb@PFXZfgm5QbdJ0SaCH25DgkCHo(i!zHD`3w6jm%0J^i) zW*(^qru@KgdI8Mh>>Mkudi1=0HZpYovvM?osQzUae+1z9oXmc*F0m7n!H&wAyPwf> zyap#p>c!@9;Rb+Q8XT-Y8oHR0&9u6R>3i}mo8Z zukj<4v!VPg3pqKuzd*@++V+c$>#!NaQ5jkjA;B%H@?iQ=(=zcm54B!4@F01AX>s;~ zcK|KhFM@Es(9n-IN}2C<7uA)rV-x=T;i0-7(m^w~;FbKbj@CcvM`w@%Fv`Tj_&w;R zP*2$~r+kx1PaZMa6IC2HX`#A2+7Y@{*86yz<-bd4rCUQEzK#-A<7^ z6}@STF5z|2?M6XSaWa!;8iY5@ul(aYxx{(Y0# zVCesMp783>mz`l|@M$?d`>6jbBWfS#{$LI)D*akVD%PGcW3(1F(o`Mz0#{|IT8%bd z?eT4v%~zP@k5WeR0cQ%z*y4+}Ffi@Q$M@5n1$-!1r>1Jp&%s|$ZToNln1XOzx-RO) z5ot_7(d)VcKbFQdvo$wzIgc>S%Hoh%GAoB59Ke2y5j6}(P^EFR&W206apmZGe8(s^ zn=XRw0B37~*&+IKWwuW5duyA~|I7ute=Oh3CH7@T@2r}B@7&!FJx>C?odcdpKN@aaPpj)sraLi6Kg={hVs5#^}_ms;U6LrOQ04 zyprJFZ&xM@j{CvxWAr@Vu$@BL1D*5L?aUsa6@k4>AOpM`cBqMmxthd{9u%xPYut%; zi!CCH=G%F7HYT}nmCT0dg^j{Ov+|YWez}nI=Y;}1_WhQ<<`w4479Q> ztlh!tc{)z5_>#pHqL)W$I2v!z{GX6*nShXZ&t^Bz`^XWrur(n>`Y{#*Wtd>7x3SXb zU{VJEOCAR_^M=6tC)`r?{|&b`|At$`?m!&Kw#Fqh4in1`@FEJ$TkyDxg)8Y|>#T_t z&rq~c(98ZdcD~>n;`@B`WhKBuqbrm>wD!wvNw`M#JNV65dAG7cg)>x*8y#=>)+2rm zt`~^1|1kF!P;qT(+aM7jxVwcy6WkpVC@i?Uy9akjkl+y9A-F?uclY4# z?(PBRkb7@;Zg+qEe`{vVn%OI>RwYy&D!a}(`+e-)avz@U8kv2g~&-GSS4V()zgReDQ! zm-Tf6WZxi4Ks$lb*9Tf!#7|dtaY8f+&NSj*8DVXff@h%1U}FK$(UD9$V`Ir4NNC=jalC!!;BPYY<25_zMx>rJx75#OY_}G$3YdD z&MpU5H2E0JVx&8#gG4LB2#Z^-Z&|KzCl^wab_prVmT2ZxRXysKu3HBruAnuxwjCPH zHb8+}dm{OV;XTC~MqP;nzS}kcc=;-RFzq`5_ zkq7l|_rn>GzKmI_Nf`ZL;ix4H-5&APxu!6JEW#uzujybkF*we7P40%Hc_nm7MawrXlRi z19VL6&EO6r4vMcI?~SqD0Z#a-eu#&|>$H+G8~kL>6$PT`6gvxq}m&yq`H4KHQ4; z%!&>?bhoDh&1zATec&msIi5DsGQz^z3KZ0J;cMji%L|Za$F?wYs&K~w`D8?E{k0~R z{}R>=o`kgwe`6Qu~lFiJv=fTAT2xeZoG+W8{B>P$>OR5DLjEomC;PT5Et^*_`8=pwjRU@D$AZbG>ofi2%@Q zo=8@F9jH1^mDM z7+jFv#7->#!Q-h-(emHKwkFSi^LT11i0m!zK>kO`YncMkgn+wJTS~3pcjDzB;P2c+ zdZ2$2yMBT-_HOxHACEi<@3bDVzWl;|AElJ1CI270I5U-LXlIvXM^}wGxoHI?5#6N2SuFqUEK;aK9=C4AjHjTi}~XS(>0{PqmCw{IVmrIYmzTt&?1$ zYcN~9GHBIrAr{n~$a~G!U4pf4-@vq6h9cw3lyIga+1z}+f`CI zYhh1>`%@B53|zs!Z-*?xV$&}OBZ8arIGBr!!pq4Se zSH=>i5vNjO#^v^{q<~Jv+_PF}2=!zHW;m6TXFb=Aflm^9@J)C5OU*L0i;H1t4V(P> zJy^XeE>nGY6e7Z-hp|rL;xzF}1-MNsz>09jGT(lHo~~41=itV2+mip!6e$d6@OF-Tu3kuK&)x~KT(oKDD%dl9U3=F*y+M38Z+EXGQ zD}Adsapw!)jy#f~W}@5pf~mA~`=-Ev<<<|;v{v=arJ!7q+~}eOntX9&Ak-~F*#-R6pfMNq>W%WkiWc+5 z`s15<7uDDV9Q?ZSM=ZOmp?maZilgmTtEPmI1*sEP#6}a&IKit;Az>@pW0UmY!g-SB zx6=CB%TJuA2WgEZfw>f*It6MS;$%;JFD~Xknbtyk5Tmireh$R_#&)QSG}Aj~5wvXK z>na5`5Cy$|lbn=P9+20)@w86Z;m%+ri{{zGLKRGEI^5)^S33h>h80G7Z*OOBUGBoy zqZi+#5CcL`&>mi2P$1mQOaKtC>7Cip*Gw}^q)!BXgxy$KmfvNWN!RpB#@r5YU@rcU zR#WR*aIer^u~fCqFDuKg0(0~5_FIj7xrpuBL`zbwEnVEmwG4`h>@trMV>V!+7)P4w z_RA3nvbj)w=%T=^C5cA3xIjQ48^9tN;|>Qp3#<-AM=MksoZiqGqB@lWm$mxNxO>V% zV&$m_wZV=2+k1lHvi?Ws%U8UYAp^#=?sK^{NA(XE9vQXg7Hbc8)z2Byd&bv!E)rQ2 z2NfS~o9B&I@x8P+ZX?6VAndZdA9!+AfZa^ zk5S=(R!0$mt1k=3od*bwBH4iXpnbND9~vL);lu%d*H z%Nm(j?%9up7BDs>(?Fxw@ihNsgFQ!MTfb z7HP4uuFQ+Nf&se|St*mfj{4d8!N;8DWVJobN1Vne?#FF`&jfPtub|xC4mRKWf!&`h zm)~Wa?RClXQ!vgIZ~FFFa&QT2EeV=C!%3uF?#KgKn?f1cDs}FiqTbXhQ+D8;semMI zcDif;2;<3IZ_po*x>U21?NDqNmx_Dr6IEGBp%3rNeIVeZ^a7&6+#v|OlVznu=vE(v z8Q{QoQXb|;9H7`73&v|s`cEl2_FpE!uvOs7fFYA=py>)baLby|KxY>}Q($@@Q<~kelLEVa+!Hune>u>c3{L)G~BNn-x z(n^lpyQUnjG?HNJl78z^ZAU1gA~U?Chd39Vj8)9 zU(%nWFubj#W@Skv1+BhNa&<5D>(^!OW)6@ElahD3HrY&IV8n4`Th~fsIK?ss zJ5z2JOqGQNFF6G?#KKo(#iTrKWi&KG*ThFoQmQ{2iA!sbMWD+ zKQh=ZkDHujllKG-npWpzM6T7mNJ>(1+y81g0tN5@SB%XZ8sxF-N|THv0x7?QdvKDh zXZ~a^c{)v1-#-Kr?rcucMTUb8ZQ(5}{8%IEkuO5rYrBz7dccVW&NSUPTv5|nh$KMI zX}W!!seg>iKIQTJSyCzNGN~xloI+(`Y+ec#IRCj#0a+=#9bTL`m9~?BzmfP&qFA>1 zya=PG$m!r!|If<(E25cw33>)Iig};S2(ysLXJapsdE4m+{J(koa%mIGnIOzpE#8_$ z*Fke9-#@e>$&3_S>q)1Ed2%Na9bN4d@N}Q9yARb8&L`-~Bg2Hhi;H04u0I^z!brWb zq>ONJYEFpmsp^kNVb%VXuGOq;MpJ~Mk&u$g$;xVU3NqdbG2Yr+nktg?yq<}#UK^vn z<&?bYW>Ur3*Ae-y=9tP=Dk2M7A*(Pp`OtX`C@j%cPp4~8V3u{ zR6=V{YsYwn_|wwPVsBN1&<%DBF#LCcI;gggXtXGT@)9%dl9!o^V@cO}Ro1~uW@Awp zPn3?gtc<nm*DhOlmHtyJO8i|b8vNbY zXZZOy5L5npYE9*LjP&>44FBQS^7i)1zF>^V!vPBNsl<31)A00F|MdO+>%qL0td?tH z3T$A8x&O#K0v}Stw*oOGwYhs_N8_e-Zf6^&DZA;9V?jVH+Bo&SaGHo~LGmBlN^4tqz2!WrWxYi|&%khMdRaYFQjV zQwRuiC;$kF{zQ~>u)T#GenV2vthembSw!kkG2QxKcoe z%gi6R;ujQBvk0)my>4q;RPN5S(7p2ytZow%Y+kmD zZzU8cZVLwsXONRi1PWzfe&g|bgT%yrjGcWk4zOL;W#74y^*8^|;b|XN`X%-VD{$~` zMp^oz33+0M7)XW4=V_JvIyB>ZR{>M1Q~&&FNZKoi<9tc-pmKqGK1)F1ty>(-UXvr? z1K)U3Qb{i2Ha=K9_H-1N;S)v!(_t;Lw@3(dBc_l_Va6u((IyPr8qbpp6LuOFQLtoU zWv%_vYfOszMFT6NtIGysB+`RIS~*!0?F~9LN*>~D!8wg&SgN=SU?>~4OK;6319>-= z=66nyt!YF~IwytpfBC{%p!pu0?|p%=k&~aqBNKF?!ryh%+nSdw*liOn#(`ciz~V`7 z@A8p3CIye()#Yt<6Js**seMK8_P%g=T#u9Em52{EDt1$g`A}4FRrMV^FJ?qz4x)Ob z{CG5FfU!r#J<{hF-GNhk(#N%PP>za|_^X}ol+5VVWaK&qFC5SBFtLTuv+e@lBAO@% zO4M+D;RgkDY$Q;fc04dGl=aODaLeq=&doTTj6_j+H;I5eQmBf=gRUGdp}{dIkULGI zfdZz6t3P+F6|0d^ZKVWJ$OwytlR8MWh!)XF!YHWP$#4TpaO(-QG;N8D5`=f;u1d@$bJIlc0f;J{A zERW{9xU`cw@)b&CP%D|*yKs?<^rNi0Wn(YWxtO$7ZH(c6_~Cu_=bxMVUb+?K1=391lU3OOj)1$Dp+_p$(<-q)X1@9 z#J+S7sg!EZDQ+bwz#sKw+3wwR-XOQf0HJ2Wu#f84=@SqfZI$oUIul+sPp}sLE$7oH403|$q-jMsm zdF!1VZ!Ilsc4T%A3;8*-a+oVGuVbs;Xc_ncQ?Kewg-cgd^$<3>+H9V2xK4ADy1o-j=#U^`lyL z!iiDhU-_i?l#3LllG`=QsI~B^UV3|dxCrJN&iTl&l=RVGYp}{^=3VdbyqrOouHB~J(XHQ1*qI|rIH^g$_fdsdq?*46IY{Mp#q(Qf z0MTtREGjPx1s${!V8<&29-AzHZb$taHnr+zR@&9puyWB1lVjs<;e8fV!(R-t3XxA; zGrZmbQ7@UtD89F^J~T%Be9`XlnbK)yWcl0{n9&%zXBw~US-BdYhc7#_q@L~dOWam+ zS(FpNbKps7hN8-huT^+zf9L!ec6sqqee#)v(+?g(l@Dnh)8H#@Wu>p3D55y3%E$pC z@R0l<6b4fSqWHKJV5TgHUAj8>;zUOP7&zc(h}YfEa$vIe56GL^HsNO+gMrKQE1*mOu~ipUTC0{`nP3 zIQtfy?VDaRKkUG>@SX+{_+i^>qb)Efa3Kyh08A<+8V*SwOIwzlx_gkE;Q50*?+o#y z+ya#X3d!2x*v;iV952t5;S}%W6q+VxqKb~h`DL;rd;~Z` z1i3orhib$SYB)KaV{XCyKKihYtR!$9ZX^V?9bQh##DHZn<&VKgTIu;iqXCiO^A!`& zm4Qu`-8)Sa8xcHN!V@I1x!*bEXmdsjtIihWSTH&2@28=OI6G-rKU+B1a>nWJbw&;Fmov*<>t}si^w3gh?N}jM9!%MX7!^Yqpj$xD zRcu$$9ke@G=LHJsUzqK(o+p&-rA7`f`=S10WMPuCBcjJRklF_1P&pXET@bxr4@Ta`bPF%?Vte97J3`EVrAE7qW#@1oW!J0a+@EGRrLykN>|p)vLA z_n(JJ4flXCfc`jIN=`E>0UXfMqQqul3@56eueG(2bNKH5 zgpV468}a`H3S}E%!r=ZL6>0~_cNsjcHGf0=r1h|(@YNVm$&@g$zPiSS4oG{S?D$FS zgqiE8&*(PxW;Q}*H|A17v@8WeNI!Q9>KW@d9c8OyD4;6fsS40aEY7S$v|{)J8?~q* z{=bh34>j0$ctSvbp)qsRzroGlB3FOMmR|2+mIdAJ@9HLYkodT~z5aTC!>i!mT!(*$ zlK?&&WcaAwuTbk_l=2tyJ(-F;O0c`kF_h<58 zNPG7ICJ#z@_sldk`#$-E**0K?Sf;5&4s&jP7}K))>3p(CApb%$5s$JJkJe-^RO`T5 z>T$&?ixF|+39){iY%SPyj4MkVqjQqPnaRR=L2T@z|6JH+dZx857zpms}bqFoyH zAEQ5<^1IPUeJ8c^`J6{BrJW=<@%XfM`fXc*Jw51`EjhS4KQh9|fWp6$6H&5k<;@s5 z2dsA7#Pk;4_MKODM@H8K}Bpt-!+OVr*=j)6SEX7l5zGp`Yyw z2%@E*`!n?r;)NDk6;)MnbpSmRH~M_c*-3aGiC|r7Ntig;AGOu2oo!|*N@XCX4F7WT zxN_#DDbVSq0bno)CxETcPS-`fTfcL5ubm`u+V>eVTNb`os2!Z1UdJWR2p7S2&sJ6v-MaJZ*tVuv7w;sEx9^GA9V(dn&=4KueVS?m@fceHVrqnZ! z&q6W&k_ZSA!kB1aQ8yvY_ndUC_0J%VID?D4{V364WBVt5{8&Dr4pTjI;zmF~pp6wv zlQ#b@qfpDj=Td6>NwJMn?M6z)4MOUD!)vq4Vzr3!rllV zRiXXVd~Ex~6Rn|h+eUXiReZ9qrKlT;rlXmm57tU`wUiQkf-w>>Y=?yK;q;3WY^erC zMR~<}wBK3}N2c`>hlMTSdT}>q>629Yb}7e?QpADq4FHi8vj^=x*CGut4NrdZf`1Wb z-*-eDDD|b_hm|!mR$_~7F}zx9_&dc!Vj6-%7L!8I!jY4L`W(pmMflO136|VzasmRCO%KG10LxTr?Nl!fqa-)cR!x6BUqW5X0O}AwelA zjic|73ag7%a1X{*yfq983dt0@()tNH4w9(cQ$IZMz|b%)7`T;pabr=v0shnI2t+VG z9TnY)sGZSMOd}_LO`k;4Df^3xdFa`&f?y7-OrDUC3bkZSJl)g%wV@T0L~rTdiSPbc z69?rDqesT!W7S>(5oy57M3-we*mTN~$>jP-psQqLsakdRF)DzqyB4utMtt9o;VNe; zcgz2fw&&zCJ*Ap0sfP{9NutDb-;0$IJR7&$qOz0i+QdC@yM>6lCD2*Acmwc(z@h4G#+! zX&tN=C1+=sZ$FYzLo}QLkA=fPR7agQw!iWc$^kEjUI9msM`92wZ@%i(Tv@RXmbjVi z?JF>~82W|OO@`OEajITE`h6^auUG;ENj~8;Y2zE&XXX0fH01eF;jx$y;2^yU9WjbXy13$4-XPW?>YFWtNn8nC(i? zUB2g6OT)@dGwLAJhDL?tI=dxKUco^j?~!JElLByBFNeB0udLU)Kg|6uh@#f$DUq}d@Fc@~yL{*ajuS&O6i zm6hyxG==>!p1PlmKeNlZM_+-P6!Qii=dHLm3O$`3&o3;tLaAuSw>d(`)CkUZYFX2OEPt4+eLr=R25egx zYgS1Z5$eb;nab;adu}qN&AwpH(}DH|ZV+-+Tg^;OtzZv!M|K^Yq$&`pRdsQTJo5}# zNoTV9g@8FxNPUOuXlUf+hzbsBB@zPVdwGo$6lAQB&Q)8~v*9&FzD@^oV>eV=++F4% zMF(jf9T5dlqsol3Le@uPo+v^<{CKK{Lw>7_Qw19lJEL zYqJ>=6P|h8=QJ-~pRMx1OFsK#6#cjImQ7yrWz*g6>HIJiz-kuL(e@j9?%FPivtVTj z0snpn4QB$EL&s`h752bvbK$}c02Xqi^{oSi`Nqi$4bX5yDn($Zy}P5QvyF4H`Q_}7 z%9iApC}eMBJ>|Y8C;42xd~AQ-u=nv-clS@#KEKzj2I0Tgtl_sG4JOv+0F?v%$lXa& zGTzyM@ve2fPu*TJoD;ed3PSnC6Mp`4{EI^IKbDNorQ$zfd2Ripm0klFxIzAPknjIR zh5+iujkuH);7j{+Xd?d>iTN)whqmgso21{=Nx{T4!hnWc~V7N=R!fW zYyuL^BD#m)n|h9WudS$XjRb~|{93%1Qr#Ijk9y{xX>EDB^Pcl!CfU;>ZN!qSAkINK>LrR!8^>l0r-qp~DmHiEiLTl9KCgAkJA!u?*> z7$N&MlHvf$cT2zNKCDl1-acQYyRq!KaxW`mGnkL6AFf_$j8EM* zel#R5AN`}0Wy|Tj9l9FkO{=Xn6NqHM2Ovyyp;{9Iz1{4_V>B$qWsjlgqDN=nsCjSv-0uo{xz+2u*S$TOo>%Eas z-a7W7-D@27yHO*?^UB`&Hi@OBy)5EFB;oY?b=WMdF$Ml9=W70KyXOfaY1#oI_CGYU ztgKyr>W`wKh(>3lAqdf+;OvJe&~&8`T8$+T*mKh2;m#JiKmtO@BwJK!zRe|=MzQnk zh^1gAl3Fw9Ri+Nf+QI?}imr(E_49I$NVMm%oGuhtfE*DY#V@8($NhIfAXv-PEDVE) zN)8QX&4{3>;TBfKvw$lG6yy_4#^O6F<9KBZCe@8{Hnhd0dwI)s>kbD`5;*EE7#6al z$FlPQH@HKTBDoO=Rn)dHrndk*2pK2G;GGNC-3w5^zn7hsNhk4zUXEYS^^c_NYvsvP zZBE5xC1>hb9c&OPk+XfBh|-a~KC#`UZ10EwEmRzcp%HJN?k7+#0=_3UP+GPazQ}Rwsd74dG*17Lls!zvM zc^);UW|KIswN(XQg}6HYNRCfSBWmaOqBIdU9pck3h&TqW2Vg-}0;fp>6-B{B9qzO< zcgmM9P_g}4(v+;zx%u-6p6PkEpMtxxz8^02rE<2>>^Asz!eX`8}$%n3T4 z37#(OK_#c5N817ip~zUUqc3BDS@}BYms>S1D0_P{BnvJ+7LIPxEgR;!J;JTQN;1Cc=fHgczXm3Ek4M)E~?TfBr7+RlJ$1GfJ-$hr-4Dq zKle#XUX~z}qx4VtINVR_%W3aybE0@$96W3&8rSHWy1;p*FT=3gh& zQjDU3(K@)j+#U1^3$h_ySt&-*(zhDA4=CjVz)=^XDtuVTd;?kTIQ1?f1faib#%Hw* z=`(WRBZA824tRKY@SYm7qi?XT1q^dRC!F@$%g`q?^As_p<+QrYpPkgg5k|(4omOL) zClAk}h>hAPZ6_IIEMb6@)Q!5xzyVI;>*aw|aM7faFZoYCYPsT}gi|7;1u>}H*?BKj zBqQyQW#t_8ug14T)91X2L_;ZkgUgHhDqv@?icV_e7)&|@1>zcGfk)|O8k~qn-#rTS zHEK4;13ZCmTD!rk{+kqB!!KhjaX?B~ZnEiVHzT!>1}me>9Gb~(;$L*beZMkqKuCc* zGPkdguQ$?xC5)rkm^igO-E;MMwTN{WB}Mw z3}8^GGNmc;5&b4i$3HeK!Gk_?#*Iv z8y}+6Y=APqLWpdn@0e4uU_x%|dn|Q7RySa3&^eeik{dPXIR0+#tW7O|F_j{E`$xK_?tQ zxobVkN3TrqAbjTn<(9%>l-6vu~>$+IQFC)L}Aa*T+#(uhVY=LKUyjb7TTPpJe6m zg1cPrUI1O?oj(LJGgnsV_OJ_^hZp{1D~j?CBH0Sw$PX-EUS zj>3D){r>6u?@R(BD9aiy=f4#M-DDPn-wYS#8baMIcw(ypEiXU5QOTNc#s#_TPoR(; zt=!hD)$@LjG3c`fIQ^ge4m)L!jLtar5T9~VDO21xfNl|e*|``I!16b6*$_60fh5!~ zDxa5Mpww;Th?QF{RQ!mpka>!l;I692w1glii*%$^jymI@f=YI52myhNGV+9IeEx}O zyd7AV|FU}F;Kv`24h{@#U$~4vTMk*iaItP_qJ}$(yV~QszvxQEI$C(o0{LoEbGAL^r^e@_riAGSYn99Ug2Tsy`s%vF7>l~A!MjKk1~>O@zrE_! z3VYWN4(~m7L$BqRI_GdUAWeb(AMP5}jD1K2WEIR;BCW;87imPUqF6-}jsO_hD9%QAs+~ z{mM)NF`91r&JhxHyb%vQ^TJ919s$k&*5CW=f9aG0ZVBeFPKf^q-~aJRp6)q+)b+of z0T0^$=9U^XaB;yE{PX9Z95Mgb$i^x0-|6?3L`c1VM*CUe{soJD3c+PB-pE&PV;cSo zcwMUjUb8}=H~4=-HjLZ`&$Z*5%WJK#YZlTeK&R|@iI9E^nJx%V41ELUzkK`4WObiW z8%iUp4z4FsuFi=b6yL5%BS3r_d;#bx8f%Vm?Dr?1p|SE2lYZD{Ki)kK4qIaTCzo6I z*=#9wUvzE0X>RW@u}FR{^Kn@}TBc-OSu$_9gp=dD!+=I^PARuqzje~0v8@wf{ZAJ5 zAG%Dt(fB#zhKc)#Qc?cg6jSFH>nEi_lB@fZ04i{HlWpn|K4M8VwVV65y@Io?Vb6`jW=yy3pnT-(!-6w+zLiOO z2nakM0L!t=p5}YE1{JSt&>{WbVbf0s^#G^UIxek~z{6*>z7@18@?imYXEoD&{QVP2 zD{9QTeM%%&m0hk3ePiXZDLLq)6UfQBUqi3kLkZM8If8}k**n_%H%tPv^r{E0AZ+t= zxa@SkGEMa99HDEaS;7tkLVngZf1;4-ix@I5KKOgm-s^3VjqotfMizQEnmA>Z3U*fu zP?;d;y#WAPV3pe1xPb4bJY7O^+OFD5);zdtDYxDRLF9h%d`$lYo-#a_7!(URCb>rbr}y?;~9!c6fh5 zZqEkJZ#FEkn~}x59{%n9tcZ--2;n=}8mX%w*EkVsdm;@4{n;?XQZV{9=R&`V8Pdu1 z_ZJY{;6Ln8DQoMm#ReZmN;h1l_Bp-RQTGq`xdnF-VZzO?EITK5xUNLWh|@clE3Jty zrt(uQQBh>v@=G2kix=$fCKqbH(^xz%y7EZ~A9nd#;2hxr)B_ijfB@eY-*j1jqfPhP&d#e&+;E4**zHmTwRpZ_#T#!gI1ip)aqd&9cgMEa(C>NgEMqfc04@wC@2ZJlSLu=cyB>#Ie}8aSzgsK7p0XnKxvXIECKw>z!Xt35nT zg_LTjO|usV6N!*SSQ{d3?HVLaJ&Q?q!0VU=V}c1PunF;MoyDZ{RK|gI%!HsJ=-=Q8 z4bOj73T~50Y&z`?)%m0RyTQB#HD%JGtKiq@NLQ8Bz@~H08A`DuE2Y@3CFX8gcr{#Z zo2XM@)M0EB7&(Bx?&&KepTEX6S>BzZBS?W)&0m)>X|yAUbC0Pfi>5skD?45GSIK}t z;izunq@l(hWoP2rI}uQ|b<2^c2!mlmG?Z|$P{Sv?=!T5wLDW8(Z-6{Ah+MF{yTk|5 z<ZZZ1`Xipj;`DcOX;3)qGCzhm!W@Ta(S65w_)btM^(2PTj z&xR*J++dXaeq{T|%@2f4G}8NWywNr+Em0E?)RN&kQLJT)`Q4;@`ZPUe!T;%Ii8 zR=VusUq%?*tSS>@qs!-SVJmkNDc7YiF^+DY=1p)5kfJj5@tfIC&c2jZk;w@fgmQ}{ zDdr3I(C#NeP2G`>r8hGSGE>rBH_2i#*k#%K;=g`JZI3kQs&lrs;2vJML@*c;$!=X` z;N~oqvgP44&}SySWiWDcqGG_EIYiUBr2mBBG#fjQr>lXcVh!m@>!hGMCU=&eE%dXn zhdhTHOb1j@?=0UMxxc*1(b1!|o6GvDe@i~2M`UbxFqO_Th*tpb>KN4~ZxDRJ%%YWP zlW5H`qw~LVHu?UWvx%h<+q}w~*l4Y{Uk1Q!I2si9sElkWu z^>)1!HoNEZsAtbq*gtZqMB+D>p7$scF9%Vwd=P4*U*%UP1zFP~dypdNjpOoiZ=m@b zd!%Pf@N}9)>1w+vk^;=v)g|AFPQ_^yx{0x=N#|Fq&?wW;zl$YE5lq&+sPS5J&fMhm z_!JcB)9d=mnJ-61hr0bm;Lod)iBc)PfKjIo_EwTt%4`gp4j;af3;Xd2KtL4wg+K5B zs~_FL`d5F=M~C&x!}fj|f|2CfnR-Vn56_i?lBV0;yTmI?jlJDE%m=&>5q%(lZRmqzmPy1B^5KFX>R$2{cb3tUJt55f&=;-m-nqqdQ4 zSb1J;_hMWTciQL^V{7d(uU$5GT5GEp1Gy@Gp|FT{Gpp15jb2%jV-Er8BK8DHQl;3}t9IiEkrwwPb)rN%ytb%l zzTao3*vjH2;pKJ<0W3;Mw$;fvAl-4l0nV5y`AkQ<>MBO+fKhic4C;|vDFX$}g!1_X z3kzT|lufSXZ>K;1JhOFZoNS0A6GcEtBZFF`4#U8aL=Ggq&K?wS@)7JxRwB?QSsZkUEdr2EV_vZbr zlxO3~R;Q~YP|&_k&$Qt3sNCYY_iK*stLcvYQc~A^v2f>nlS3nWpd$&7$D<@+c?=Y)S{7eN{J`S=*Aozz$&|0C{d^j0$Wc znSu>)C|Mv{NB|7bqV_J{v4R%K;Au?*Vi#;gDU5%~9}xddovE=RXizxDSN`LD5KbAt zW1s&TJ8_-L0wP7x2Yv<3`-iLp!TRFAdXFaX{uTTg3Uz-nyRV5#W^llVbh|2Qj7WYIoC&3Ow zlUp7QjQ40A-Mtm+s$YmT1hyhTj!aTB9g-^-J9BlVTX;p`PaHr^R`C7$tE43QF5g*} zHm_oK7s}IVa*W$yRN}$LNYcxUl~W!@i)L7Ypph8xs^c{84$elN8f8RR-&Eh2yKK*0 z%;QvS#`{lQr~wUvu5-1K%a+gMk&ll8KE_j!WqF3U$W;uSF;ZH}kTG)I1Bg7586&yU zlqt=k7S0o`XoJN%t;YHRBG?}_UJ-Ji%rwvO!BSaxk*rrB%hZx&-mA~8S@4RW+fOL5 zbW7T~xFEhwk4-GZoZEsbY41Qqc~W|Aa%i1~tu=ENT-qk1_$Kw8e#BO1W%s37?3}A! z1TJr2)=$WmoU_v)v~Oh-o?no9mDD%7HnrT=XMBhec@85$kCm3AUBHgX%(vli5wdHFcyhM3HAh$48GR|9LX2ui=YC`0T9{rX?ydLK)n~af zU>M$wt6Xo(p{{bp!ERqv4AqZZR*yq7^)A^ECP7u>3;@$Np{!)ptVJqPqA=* z7~FK3_Eurp+1Zg4Qn>I){Pbbnw!7nb-6Rc0nQyCc@DkPA^_fv&+KYo^^z>>2w?%Vs zd?$8T!ueZK!*{JBzN!Bm>V0H?_vO! zC*>t+kNmzFv`XbvGX11f{G?eGJ8Grca{^z5%>=$UP9An#v0;QH9-e45t@t728%|Xr zyUPp}as7sRS5kg>7+mKb3v!RaE z;w1ULE3oOcGbt7+n4pgjG<1Q0CRz*EEvQ@Nqo#PQ5(bPJkh2 z##J$W5Dui7sy8I!uA^Zezge3+KRD4ow@h*{FgUZ7V{$x%&79S$(29Nn1h+cmbt0rX zk)9e~W9tM?MTA$|JlB#ToN7NRx1P1hkuRdc`nGM@urM<_ai?T)5QgQXr2)*eg|RlU z6L4N%(alIu@{0=8$(g=X7uUMnEB=hZxT2?UOJiQI0J_@!)T24+wPH!;&G24t^+g}&O9@%R~wPAS3G@*nna2x>oPVcx!(=uE;l;& zfk=g~ags>3G%3#mmnQQE9KRs(P8?A-VGnVA+#rcgoQOm@+aUB*oYZjrXccNqTbbLK znPm-hAi#&#HeFZUEvs$B7>|z#jWTm^nUazc^0Ze{piSaQ$5!$SiJSF0$~eh{l*zas zW7<52H`nu!VWR!0H)_E%Lq-pp{C|i~0s_~aTgvvV$bo)$vvdCb;LmZ&!OFT(xMTug zb;ZLWzF;UY0w2elOe{0(1PWC5g(9O{rBEz`v`UcN(C!DZ?AckaIImsc2fXfk5wsz#(FpWKfE zY3Z|O>s?$$3<7uk3b>? zmA%*A&%5{YJTD*!A_Tm7c_z2z)|d5DzwfOZipS|iNRw<3=GcbD(yFbsy}>gZo{7*F z%I#1;L{wry%HW5fU(}vtv|KNUA|^}Rznb8^yO71fer?Lr<|aP}cb{h*ChMh@D(7cKlid3d^s7uG5PGd1Gm0(-1J%C*FE7F zs)y>>crrXb06vJ_gJ^vVU!6WgyHM((_I)uw)!T>DkB(a2*adc#ZEUFq11z><`%}-Z zEmPY54>Y!;kU-{Tl5rN@b6>IQYbCdnExGTmsKp5r-=EC$Y}%eG@Z`UNq66EbE_2jj z?VnZ3C4D*J-=<_i&z+oe&xyvurmsqqm!D*we88dJS^goA(7_uRC z?#}0oxi!8J&WTi@#7AUWDid&W_1RC2`pLT=v2{@`nnAiAh{4)dD;`wEv>3S&2f}W< zZLQQTG0(OB;Y*t8810tdQ?c^8;3~&E#nDkJ6YkMgnVDSd1}{-rd`>L9cErq{lBD(chOi2YD9o5oC+>9{6jG#M3K88m*PD)*AZ+GCz z4PM!Tf2^E*W&_BboIp01d1A!p+W_`8+b=D@{hYphsxrNGXlF|Ua*?3sW{hKG^#Fy_AjYNSla;^~ z{=wL^F6Yrjg8IBGQ~hpdP6R9NqJC>@5kzAM;n?ZoA!=b0a1FSQI|z8gFTr^t;qg?GE)q@aNv@5fA_Av2~IU*{)TA0Y5+h9C$F zg!4VzFWru3K$csXvCv_F+w<*z_@I^I!(;Sa1q;|O@d4*$f7Fg?0ffOnYj^Aa<*(3p ziir+X$4e7KPyKPtFa6mMo4GgQKV&yAya7GTpSQke?W;E%o0+-#*YThh$A4_}hgtU< z@y+C8#HqKc%jTKERQzYoKR6G^zM22cQ(p0C9*rL-#p^LJ^MD03P#PSysH@Xw7*)P3 z+>n#?lt2)%NbHX*FQi+IgjRFUz-z0|uehx%sDm|v&~DCwZ`-%{M!tXZs^45vbn|t< zA3ddMyumZhx#48#!?5`qF4_crvxCu{L64s`I0l+Ieno#~6YF2O=_I0XJD}VUtDGBx z@}dr@(&Gen69AtehovH=ZR=BeN3%_8UZ)cl)5tul{?i8n(zS=aM~+%1XERgiHCG&q z9zR&iQAS%@1|4MAq5E<4yMabUFnyQA!xLg?mOu?b8}S5$cXMn(RcC(LH|Sl!~X z9Jk}ax0Y2`d&9@=`n83xoi54!M1wf=PAFS{pN(MT0q%4#xPRf92mRqK+3TRwv9?|& zx}GbQ%p0_+wWG~fm6be4;$szY6kmkpoh0C^Au>yw9nBra54c(@U}~)a6lKAQ{_3La zP)rBIGDpty0D8BQpy0!&R*m9L@C(_E8vJKX}j?5b%kkC zVV?)(ET7|OFXY+piVx}1nuIHk#Z1}x_}vDvm+eB0Zd7(rE(T7{5)6)uM=dD?C=JwA z4tW#ze?R(cq()L7*h#v$Tjw=oT)E+^E`)c)#2yj|;#Qw2`LRG-{4mB)Ma$}VeTEep=HhZ>gYrL1$N3a?=)7xTfT8manJp?wFS3lkF32!3Y^fs>qx76Fi37th+UGC&Df3t%nDz)1bCuR;Z z--3&XGa{OjUN8FD2SFPRf6So=fMJ2>BkCAEhK2}_m z)6CPBgFWe(P-4N9oVs@m!+~p7#LJt>2A)4m00t+k0(;i+qj&9W#G2~yYL5`#CS%j_ z^VHxbMq+J2EQ?;%iU+`pCjiJu(C{I4yO|u;*J?@Ry2IMS6BCTfM%L>AsM$&dye~P~vcUnF)2b0jKarMbT0s=TzW< znHg;aKMb*1($CuI1HUHdR&+g0E75 z?fMv8{mNk_2_8BA1mc#f)*E*Cwik}`;c}{Soi_FR$&CZh|gdNYKGj zkX}?6Dr6yShgMw7$AHm0qf1(AW{swe>ZdF`f=z|x;lWp7LD2a0t`p4(@m1%Eq5dvv zvyDvL9uxO|qiSiVd86?5ixHAxlkXaYT(fIwCi+A!Jt*sQ(!Q$(*UJvcz$^%Ob2tXTqp z%4T5j?FC~KV7ZGWIVhfI6KlAY;xS=v-#hPKWEohsQCQ;>m}@0*;hg?;`+U`vi`?wJ zSE1UDQj?c*1ywDm-mL6N;>B``e<*i=G(DGxxr{4FfIw}tHGIe@LfutT;Uh2LZFr@O83;RjD8c#& zCS2j2C+3hxg~yyfwg_Xfw()q(t&3=*%P-Ho-C~R zs)c_2R0PYut94e`OPyP<%;@ad%s%CdztEAfwgXz=>fx;Q`FlV*J@aL3fcE&CZ(f(SX|Lgix((u$2JTiW<}0#kzvp6@^OoamnD+x`|rt+M-#Bw}G>%GJru z9^~^>*VgT@R^T7{DoXc&g|wOVhLoTn+-q%q+E_RxG2Nd`k&ob_POF``j%#%ktFrJW zS4dW_lW{gL1@VW8qLo2;0~d*3II-7~5>qhc{ZlivkP1`NhD6?`TZ6uycWb5T4zri} z8!m7kTiu5~Jg&rMPmJ#Z6Ax=h71d8Chs$H`8RTZ)eQcu6seY9|;~%XiGURlT?8A?5 zgfGaG$ER4+ukyx?V>x}qN5m9$44*n#PWl9ay4NL>SKD$D#7z4LAy2IotBh#7F# zg`5!rgIQ6FcT`lmJpmlEIwhGAw;@+LajCJG?D6Gt4^v6BW=aWQ%0Iong(}Ua;L7*JOE~`d6P){DSYRYxxPJT_5tO8ThxYcyYpZQ4B z=;H~ul;C;Ow$lo12~@+P-JV(C*XF5y)GG^wz}|AttpJKH^X&a`#>?USPUdN#+=L!^O|UaLN)N+XFC6oQX?;d9^}$J%o#~0Pea2jz%QE}7XgjgaoyB65;>2#;N5>pq zKTzhMLZd}34BD5BZgLqB%T)XU#3A*~8myqqw4`em>2 zddWnE1mt`RwK+Cy???Ka#jqbnYJY?A_0yZBCglOm_V+R&NcbU#?>qHxp#E>Lzc#W+ zDk%CZYIt)VvN!k6<9n3yy}UUONL~J{{>`)gQ;YvQeE2JI&_AvIb+GndU;qC{lT$}O Y?WKhYbZg%FV>?z`T@PIP+mo>W0r;ArX8-^I literal 0 HcmV?d00001 diff --git a/content/en/docs/21.0/user-guides/configuration-advanced/tracing.md b/content/en/docs/21.0/user-guides/configuration-advanced/tracing.md new file mode 100644 index 000000000..465726d4a --- /dev/null +++ b/content/en/docs/21.0/user-guides/configuration-advanced/tracing.md @@ -0,0 +1,80 @@ +--- +title: Tracing +weight: 40 +aliases: ['/docs/user-guides/tracing/'] +--- + +# Vitess tracing + +Vitess allows you to generate Jaeger / OpenTracing compatible trace events from the Vitess major server components: `vtgate`, `vttablet`, and `vtctld`. To sync these trace events you need an OpenTracing compatible server (e.g. Jaeger). Vitess can send tracing events to this server in the Jaeger compact Thrift protocol wire format which is usually UDP on port 6381. + +## Configuring tracing + +The first step of configuring tracing is to make sure you have tracing collectors properly setup. The tracing collectors must be located where they can be reached from the various Vitess components on which you want to configure tracing. We will not cover the entire setup process in this guide. The guide will cover the minimal config for testing/running locally, using the Jaeger docker container running on `localhost`. You can read more about Jaeger [here](https://www.jaegertracing.io/docs/1.20/features/). + +### Running Jaeger in docker + +You can follow the Jaeger getting started documentation [here](https://www.jaegertracing.io/docs/1.20/getting-started/). In essence you need to run the Jaeger docker container: + +``` shell +$ docker run -d --name jaeger \ + -e COLLECTOR_ZIPKIN_HTTP_PORT=9411 \ + -p 5775:5775/udp \ + -p 6831:6831/udp \ + -p 6832:6832/udp \ + -p 5778:5778 \ + -p 16686:16686 \ + -p 14268:14268 \ + -p 14250:14250 \ + -p 9411:9411 \ + jaegertracing/all-in-one:1.20 +``` + +Note that you don't need to expose all these ports, Vitess only cares about port 6831 (the UDP compact Thrift Jaeger protocol listener). You will also need port 16686 for the Jaeger web UI to browse the spans reported. + +### Configuring tracing for vtgate, vttablet and vtctld + +Now that you have the Jaeger server running, you can add the necessary startup options to `vtgate`, `vttablet` and `vtctld`. This will enable you to send trace spans to the server. The command line options for doing this are the same across `vtgate`, `vttablet` and `vtctld`. Add the following options for a tracing agent running on the `localhost`: + +``` shell +--tracer opentracing-jaeger --jaeger-agent-host 127.0.0.1:6831 --tracing-sampling-rate 0.0 +``` + +There are a few things to note: + + * There are other tracing plugins and the `-tracer` option allows you to select them. Currently we have `opentracing-jaeger` and `opentracing-datadog`. Only `opentracing-jaeger` is covered in this document. + * `--jaeger-agent-host` should point to the `hostname:port` or `ip:port` of the tracing collector running the Jaeger compact Thrift protocol. + * The tracing sample rate (`--tracing-sampling-rate`) is expressed as a fraction from 0.0 (no sampling) to 1.0 (100% of all events are sent to the server). In the example, this option is set to zero, because we will be passing custom span contexts to the queries we want to trace. In this way, we only instrument the queries we want. This is recommended for large installations because it is typically very hard to organize and consume the volume of tracing events generated by even a small fraction of events from a non-trivial production Vitess system. However, if you just want events to flow automatically without you having to instrument queries, you can set this to a value other than `0.0` and skip the following section on instrumenting queries. + +After adding these options, you must restart the Vitess components in question. + +### Instrumenting queries + +Now that you have the Vitess components setup, you can start instrumenting your queries to choose which queries (or application actions) for which you want to generate trace events. This is obviously an application-specific process, but there are a few things to note: + + * The `SpanContext` id you have to instrument your Vitess queries with, in order for them to generate trace events, has a very specific format. It is recommended to use one of the Jaeger / OpenTracing client libraries to generate these for you. They take the format of a base64 string of a JSON object that, at it simplest, looks something like [this](https://www.jaegertracing.io/docs/1.19/client-libraries/#tracespan-identity): + + ``` shell + {"uber-trace-id":"{trace-id}:{span-id}:{parent-span-id}:{flags}"} + ``` + Note the very specific format requirements in the documentation. Because of these requirements, it can be tiresome to generate them yourself, and it is more convenient to use the client libraries instead. + + * Once you have the `SpanContext` string in its encoded base64 format, you can then generate your SQL query/queries related to this span to send them to Vitess. To inform Vitess of the `SpanContext`, you need to use a special SQL comment style, e.g.: + + ``` shell + /*VT_SPAN_CONTEXT=*/ SELECT * from product; + ``` + There are additional notes here: + + * The underlying tracing libraries are very particular about the base64 value, so if you have any formatting problems (including trailing spaces between the base64 value and the closing of the comment); you will get many warnings in your `vtgate` logs. + * When testing with, for example, the `mysql` CLI tool, make sure you are using the `-c` (or `--comments` flag), since the default is `--skip-comments`, which will never send your comments to the server (`vtgate`). + +### Inspecting trace spans in the Jaeger web UI + +This is beyond the scope of this guide. However, in general, if you have set everything above up correctly and you have instrumented and executed some queries appropriately, you can now access the Jager web UI to look at the spans recorded. If you are using the local docker container version of Jaeger, you can access the web UI in your browser at http://localhost:16686/. + +You should be able to search for and find spans based on the `trace-id` or `span-id` with which your query/queries were instrumented. Once you find a query, you will be able to see the trace events emitted by different +parts of the code as the query moves through `vtgate` and the `vttablet(s)` involved in the query. An example would look something like this: + +![](../trace1.png) + diff --git a/content/en/docs/21.0/user-guides/configuration-advanced/transport-security-model.md b/content/en/docs/21.0/user-guides/configuration-advanced/transport-security-model.md new file mode 100644 index 000000000..ff48dd73d --- /dev/null +++ b/content/en/docs/21.0/user-guides/configuration-advanced/transport-security-model.md @@ -0,0 +1,761 @@ +--- +title: Securing Vitess Using TLS +weight: 60 +--- + +## Introduction + +Vitess has a number of different components that, in most real-world configurations, connect to each other over the network. Many organizations require, for compliance or practical reasons, that these communications +be encrypted and/or authenticated. This guide will provide an overview of these client/server combinations between components, what the encryption and authentication options are, and a walkthrough on how to configure Vitess to use them. You can read more about our [transport security model](../../../reference/features/transport-security-model/) in our references. + +There are two paths a data path and a control path that could be secured. The focus in the guide will be to secure the data path. You can read more about the two paths [here](../../configuration-basic/ports/). + +Note that the sensitive information mainly flows over the data path, and depending on your deployment model, you may not have to encrypt all of the the control or meta-data path. We recommend that you evaluate your needs in the context of your compliance directives, threat model and risk management framework. + +It should also be noted that while Vitess provides the mechanism for securing these communication channels, it does **not** manage the certificate management tasks like: + + * Securely generating private keys + * Issuing server certificates + * Issuing, if necessary, client certificates + * Certificate rotation + * Certificate audit + +Indeed, the hardest part of deploying TLS with Vitess in a large organization may be to integrate with whatever certificate policies and procedures the organization mandates. It should be noted that the manual issuing and rotation of certificates in a Vitess environment of a non-trivial size is impractical, and some provisioning and configuration management automation will need to be built. + +## Protocols involved + +Of all the data, meta-data and control paths enumerated above, they use one of three protocols: + + * MySQL binary protocol + * gRPC (using HTTP/2 as transport) + * HTTP + +## Encryption + +All three the protocol types above use TLS in one form or another to encrypt communications. Therefore the basics around encrypting a specific client to server communication is straightforward: + + * Server-side: + * Generate a CA private key and cert as the root for your certificate + hierarchy. + * (optionally) Generate intermediate keys to serve as signing + keys for your server certificates. We will not cover this case in + this document. + * Generate a private key for the server component involved. + * Generate a CSR using the private key. + * Use the CA key material and the CSR to generate/sign the server + certificate. + * Install the server cert and private key using the appropriate Vitess + options for the component in question. + * If required, adjust other Vitess component options to enforce/require + TLS-only communications. + +## Server authentication + +In addition to encrypting the connection, you may want or need to configure client-side server authentication. This is the process by which the client verifies that the server it is trying to establish a TLS connection to is who they claim to be, and not an imposter or man-in-the-middle. We achieve this by: + + * Client-side: + * Install the CA cert used by your certificate issuing process to sign the server component certificates. + * Adjust the Vitess client component options to verify the server certificate using the installed CA cert. This would typically involve specifying the CA cert, as well as the server or common name to expect from the server component, if it isn't the same as the DNS name (or has an IP SAN configured). + +## Client authentication + +Client authentication in Vitess can take two forms, depending on the protocol in question: + + * TLS client certificate authentication (also known as mTLS) + * Username/password authentication; this is only an option for the connections involving the MySQL protocol. + +## Walkthroughs + +We will now cover how to setup the various TLS component combinations. We will start with the data path, then move on to the control paths. We will handle [encryption](#encryption) and [server authentication](#server-authentication) together, and then handle [client authentication](#client-authentication) separately. + +### Certificate generation + +As discussed above, large organizations will often have established tools to secure a TLS certificate hierarchy and issue certificates. For the purpose of these walkthroughs, we could use bare `openssl` commands to step through every detail. However, since we consider this an implementation detail that is likely to vary from user to user, we will leverage a shell-script-based tool called [easy-rsa](https://github.com/OpenVPN/easy-rsa) that uses `openssl` under the covers, and hides much of the complexity. + +This tool has been around for many years as part of the OpenVPN project, and can perform all the steps to setup a CA, generate server certificates and also client certificates if desired. Since `easy-rsa` is just a set of shell scripts, if you require a closer understanding of how every step works, this is easy to discover as well. Lastly, `easy-rsa` can be used in production, and can easily manage thousands of certificates, if desired. + +We will use the newest `easy-rsa` release at the time of writing, version 3.0.8. + +### Installing easy-rsa + +Create a directory to install and run `easy-rsa` from, download and unpack the tool: + + ```bash + $ echo $HOME + /home/user + $ mkdir ~/CA + $ cd ~/CA/ + $ wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.8/EasyRSA-3.0.8.tgz + . + . + 2020-10-02 16:10:22 (604 KB/s) - ‘EasyRSA-3.0.8.tgz’ saved [48907/48907] + $ tar zxf EasyRSA-3.0.8.tgz + $ mv EasyRSA-3.0.8/easyrsa . + $ mv EasyRSA-3.0.8/openssl-easyrsa.cnf . + $ mv EasyRSA-3.0.8/x509-types . + $ mv EasyRSA-3.0.8/vars.example vars + $ rm -rf EasyRSA-3.0.8 + ``` + +Edit the `vars` file appropriately for your setup. For the purposes of this walkthrough we will just append the following lines at the end of the file. Please adjust for your needs: + + ``` + set_var EASYRSA_DN "org" + set_var EASYRSA_REQ_COUNTRY "US" + set_var EASYRSA_REQ_PROVINCE "California" + set_var EASYRSA_REQ_CITY "Mountain View" + set_var EASYRSA_REQ_ORG "PlanetScale Inc" + set_var EASYRSA_REQ_EMAIL "carequest@planetscale.com" + set_var EASYRSA_REQ_OU "Operations" + set_var EASYRSA_KEY_SIZE 2048 + set_var EASYRSA_ALGO rsa + set_var EASYRSA_CA_EXPIRE 3650 + set_var EASYRSA_CERT_EXPIRE 1095 + ``` + +Bootstrap your CA. During the second step you will be prompted for a password. For the answers after the password prompt, you should be able to just hit enter multiple times as you have already configured it in the `vars` file above. + +{{< warning >}} +Do not forget this password! You will not be able to recover it. +{{< /warning >}} + +```bash + $ cd ~/CA/ + $ ./easyrsa init-pki + + Note: using Easy-RSA configuration from: /home/user/CA/vars + + init-pki complete; you may now create a CA or requests. + Your newly created PKI dir is: /home/user/CA/pki + + $ ./easyrsa build-ca + + Note: using Easy-RSA configuration from: /home/user/CA/vars + Using SSL: openssl OpenSSL 1.1.1g FIPS 21 Apr 2020 + + Enter New CA Key Passphrase: + Re-Enter New CA Key Passphrase: + Generating RSA private key, 2048 bit long modulus (2 primes) + ...............................................................................+++++ + e is 65537 (0x010001) + You are about to be asked to enter information that will be incorporated + into your certificate request. + What you are about to enter is what is called a Distinguished Name or a DN. + There are quite a few fields but you can leave some blank + For some fields there will be a default value, + If you enter '.', the field will be left blank. + ----- + Country Name (2 letter code) [US]: + State or Province Name (full name) [California]: + Locality Name (eg, city) [Mountain View]: + Organization Name (eg, company) [PlanetScale Inc]: + Organizational Unit Name (eg, section) [Operations]: + Common Name (eg: your user, host, or server name) [Easy-RSA CA]: + Email Address [carequest@planetscale.com]: + + CA creation complete and you may now import and sign cert requests. + Your new CA certificate file for publishing is at: + /home/user/CA/pki/ca.crt +``` + +Your CA is now configured and you should be able to generate certs easily now. + +### Application to vtgate + +While applications can connect to vtgate using gRPC, the vast majority of Vitess users only use the MySQL protocol. When using the MySQL protocol, most users will use username/password for client authentication, although it is also possible to configure TLS client certificate authentication. We will assume the use of username/password authentication. + +For each vtgate you should generate a server private key and certificate. We will do this in two steps: + +- First we generate a private key and certificate request. +- We will then use the CA to sign that request to produce the server certificate. + +For the the prompts during `gen-req`, you can just hit enter. You will be prompted to type `yes` and enter the CA password during the `sign-req` phase. + +```bash + $ cd ~/CA/ + $ ./easyrsa gen-req vtgate1 nopass + + Note: using Easy-RSA configuration from: /home/user/CA/vars + Using SSL: openssl OpenSSL 1.1.1g FIPS 21 Apr 2020 + Generating a RSA private key + ............................+++++ + writing new private key to '/home/user/CA/pki/easy-rsa-178308.W6uc3G/tmp.Iqlvgf' + ----- + You are about to be asked to enter information that will be incorporated + into your certificate request. + What you are about to enter is what is called a Distinguished Name or a DN. + There are quite a few fields but you can leave some blank + For some fields there will be a default value, + If you enter '.', the field will be left blank. + ----- + Country Name (2 letter code) [US]: + State or Province Name (full name) [California]: + Locality Name (eg, city) [Mountain View]: + Organization Name (eg, company) [PlanetScale Inc]: + Organizational Unit Name (eg, section) [Operations]: + Common Name (eg: your user, host, or server name) [vtgate1]: + Email Address [carequest@planetscale.com]: + + Keypair and certificate request completed. Your files are: + req: /home/user/CA/pki/reqs/vtgate1.req + key: /home/user/CA/pki/private/vtgate1.key + + $ ./easyrsa sign-req server vtgate1 + + Note: using Easy-RSA configuration from: /home/user/CA/vars + Using SSL: openssl OpenSSL 1.1.1g FIPS 21 Apr 2020 + + + You are about to sign the following certificate. + Please check over the details shown below for accuracy. Note that this request + has not been cryptographically verified. Please be sure it came from a trusted + source or that you have verified the request checksum with the sender. + + Request subject, to be signed as a server certificate for 1095 days: + + subject= + countryName = US + stateOrProvinceName = California + localityName = Mountain View + organizationName = PlanetScale Inc + organizationalUnitName = Operations + commonName = vtgate1 + emailAddress = carequest@planetscale.com + + + Type the word 'yes' to continue, or any other input to abort. + Confirm request details: yes + Using configuration from /home/user/CA/pki/easy-rsa-177552.IsttQK/tmp.NA5kv0 + Enter pass phrase for /home/user/CA/pki/private/ca.key: + Check that the request matches the signature + Signature ok + The Subject's Distinguished Name is as follows + countryName :PRINTABLE:'US' + stateOrProvinceName :ASN.1 12:'California' + localityName :ASN.1 12:'Mountain View' + organizationName :ASN.1 12:'PlanetScale Inc' + organizationalUnitName:ASN.1 12:'Operations' + commonName :ASN.1 12:'vtgate1' + emailAddress :IA5STRING:'carequest@planetscale.com' + Certificate is to be certified until Oct 4 00:07:58 2023 GMT (1095 days) + + Write out database with 1 new entries + Data Base Updated + + Certificate created at: /home/user/CA/pki/issued/vtgate1.crt +``` + +Our certificate has now been issued, and we can use the private key file in `/home/user/CA/pki/private/vtgate1.key` along with the issued server certificate in `/home/user/CA/pki/issued/vtgate1.crt` to configure vtgate for using TLS with MySQL clients. First we copy the private key and server certificate to the appropriate configuration directory, and then tighten up the file permissions and ownership. + +This will differ in your environment: + +```bash + $ mkdir ~/config/ + $ cp /home/user/CA/pki/private/vtgate1.key ~/config/ + $ cp /home/user/CA/pki/issued/vtgate1.crt ~/config/ + $ chown vtgate:vtgate ~/config/vtgate1.* + $ chmod 400 ~/config/vtgate1.* +``` + +Now, we can add the options to vtgate to use the above private key and server certificate. Modify the vtgate commandline or startup script to add the following parameters: + +``` + --mysql_server_ssl_key ~/config/vtgate1.key --mysql_server_ssl_cert ~/config/vtgate1.crt --mysql_server_require_secure_transport +``` + +{{< info >}} +You can now start/restart the vtgate instance. Any vtgate connections from now on will be required to use TLS, so you may have to reconfigure your applications/clients. In addition, to avoid man-in-the-middle attacks, you may want the clients to verify the server by validating the server certificate against the CA cert. +{{< /info >}} + +Here is an example using the MySQL CLI client. Exact options will vary between MySQL versions, this is using MySQL (8.0.21) client: + +```bash + $ cp /home/user/CA/pki/ca.crt /var/tmp/ca.crt + $ mysql -u mysql_user -p -h 127.0.0.1 -P 15306 --ssl-mode=VERIFY_CA --ssl-ca=/var/tmp/ca.crt + Enter password: + Welcome to the MySQL monitor. Commands end with ; or \g. + Your MySQL connection id is 3 + Server version: 5.7.9-Vitess MySQL Community Server - GPL + . + . + . + mysql> \s + -------------- + mysql Ver 8.0.20-11 for Linux on x86_64 (Percona Server (GPL), Release 11, Revision 159f0eb) + + Connection id: 3 + Current database: + Current user: vt_app@localhost + SSL: Cipher in use is ECDHE-RSA-AES128-GCM-SHA256 + Current pager: stdout + Using outfile: '' + Using delimiter: ; + Server version: 5.7.9-Vitess MySQL Community Server - GPL + Protocol version: 10 + Connection: 127.0.0.1 via TCP/IP + . + . +``` + +The above MySQL CLI output shows that the connection is encrypted, and that the server (vtgate) was successfully validated using the CA certificate. If the server certificate could not be validated using the CA certificate, an error similar to this would have been seen: + +``` + ERROR 2026 (HY000): SSL connection error: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed +``` + +If TLS was not setup on the vtgate at all, an error like this could have resulted: + +``` + ERROR 2026 (HY000): SSL connection error: SSL is required but the server doesn't support it +``` + +### vttablet to MySQL + +A common Vitess deployment model is to co-locate vttablet and MySQL on the same host/VM/container. In a case like this, vttablet connectivity to MySQL will be via local unix socket or TCP connection on localhost. It is unnecessary to configure encryption between vttablet and MySQL in this case, since the traffic never leaves the local machine/VM. However, in some deployment models vttablet and MySQL are running on different hosts, and you may want vttablet to use TLS to speak to MySQL. + +We will not cover configuring MySQL to use TLS certificates extensively here, just the minimum. Please consult the MySQL documentation for further information. Again, we will also assume that vttablet will be using MySQL username/password client authentication. + +Note that when you are configuring TLS and MySQL you will need to be aware of what TLS versions are supported. You may be using an [older version of MySQL that does not have TLS 1.2 support](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_MySQL.html#MySQL.Concepts.SSLSupport). If you need to support pre 1.2 TLS [vtgate supports ](https://github.com/vitessio/vitess/blob/de7f133dbe2dd6a7910f13c682910a4f5c0ac0df/go/vt/vtgate/plugin_mysql_server.go#L67)that setting using `--mysql_server_tls_min_version` and vttablet supports that setting using `--db_tls_min_version=TLSv1.1` + +Generate a server certificate for our MySQL instance using our CA: + +```bash + $ cd ~/CA/ + $ ./easyrsa gen-req mysql1 nopass + . + . + . + Keypair and certificate request completed. Your files are: + req: /home/user/CA/pki/reqs/mysql1.req + key: /home/user/CA/pki/private/mysql1.key + + $ ./easyrsa sign-req server mysql1 + . + . + . + Write out database with 1 new entries + Data Base Updated + + Certificate created at: /home/user/CA/pki/issued/mysql1.crt +``` + +Copy the files `/home/user/CA/pki/private/mysql1.key` and `/home/user/CA/pki/issued/mysql1.crt` to the MySQL server in the appropriate locations, securing their ownership and permissions appropriately. + +Configure the MySQL server options `ssl-key` and `ssl-cert` appropriately to point to where you placed the private key and certificate above. You can read more about it [here](https://dev.mysql.com/doc/mysql-security-excerpt/8.0/en/using-encrypted-connections.html) + +Note that these options do not require clients to use TLS, but is optional. If you need to require all TCP/IP clients to use TLS, you can use the MySQL server option `require_secure_transport`, or you can enforce it on a per MySQL user basis by using the `REQUIRE SSL` option when creating or altering a MySQL-level user. See the MySQL documentation for details. + +Restart your MySQL server to make these MySQL server option configuration changes active. + +Now, configure vttablet to connect to MySQL using the necessary parameters, verifying the CA certificate: + +```bash + $ cp /home/user/CA/pki/ca.crt ~/config/ +``` + +Add the vttablet parameters: + +``` + --db_ssl_ca /home/user/config/ca.crt --db_flags 1073743872 --db_server_name mysql1 +``` + +Restart the vttablet. Note that the `db_server_name` parameter value will differ depending on your issued certificate common name; and is unnecessary if the certificate common name matches the DNS name vttablet is using to connect to the MySQL server. + +The `1073743872` is a combination of the MySQL `CLIENT_SSL` (2048) and `CLIENT_SSL_VERIFY_SERVER_CERT` flags (1073741824); which means "encrypt the connection to MySQL *and* verify the SSL cert presented by the server". + +If you just wish to encrypt the vttablet -> MySQL server communication and you do not care about server certificate validation, you can just use this vttablet flag instead: + +``` + --db_flags 2048 +``` + +Note that using the above `db_flags` will also result in the MySQL to MySQL communication for replication between the replica/rdonly instances of a Vitess shard and its primary to be encrypted, as long as the upstream MySQL instance the replica is connecting to has been configured correctly to support TLS MySQL protocol connections (see above). + +## vttablet data and control paths + +In Vitess, communication between vtgate and vttablet instances are via gRPC. gRPC uses HTTP/2 as a transport protocol, but by default this is not encrypted in Vitess. To secure this data path you need to, at a minimum, configure TLS for gRPC on the server (vttablet) side. + +Other components, as detailed above, also connect to vttablet via gRPC. After configuring vttablet gRPC for TLS, you will need to configure all these components (vtgate, other vttablets, vtctld) explicitly to connect using TLS to vttablet via gRPC, or you will have a partially or wholly non-functional system. + +#### vtgate to vttablet + +First, generate a certificate for use by vttablet: + +```bash + $ cd ~/CA/ + $ ./easyrsa gen-req vttablet1 nopass + + Note: using Easy-RSA configuration from: /home/user/CA/vars + Using SSL: openssl OpenSSL 1.1.1g FIPS 21 Apr 2020 + Generating a RSA private key + ..................................+++++ + .....+++++ + writing new private key to '/home/user/CA/pki/easy-rsa-209692.tdDNNt/tmp.hwhw8x' + ----- + You are about to be asked to enter information that will be incorporated + into your certificate request. + What you are about to enter is what is called a Distinguished Name or a DN. + There are quite a few fields but you can leave some blank + For some fields there will be a default value, + If you enter '.', the field will be left blank. + ----- + Country Name (2 letter code) [US]: + State or Province Name (full name) [California]: + Locality Name (eg, city) [Mountain View]: + Organization Name (eg, company) [PlanetScale Inc]: + Organizational Unit Name (eg, section) [Operations]: + Common Name (eg: your user, host, or server name) [vttablet1]: + Email Address [carequest@planetscale.com]: + + Keypair and certificate request completed. Your files are: + req: /home/user/CA/pki/reqs/vttablet1.req + key: /home/user/CA/pki/private/vttablet1.key + + $ ./easyrsa sign-req server vttablet1 + + Note: using Easy-RSA configuration from: /home/user/CA/vars + Using SSL: openssl OpenSSL 1.1.1g FIPS 21 Apr 2020 + + + You are about to sign the following certificate. + Please check over the details shown below for accuracy. Note that this request + has not been cryptographically verified. Please be sure it came from a trusted + source or that you have verified the request checksum with the sender. + + Request subject, to be signed as a server certificate for 1095 days: + + subject= + countryName = US + stateOrProvinceName = California + localityName = Mountain View + organizationName = PlanetScale Inc + organizationalUnitName = Operations + commonName = vttablet1 + emailAddress = carequest@planetscale.com + + + Type the word 'yes' to continue, or any other input to abort. + Confirm request details: yes + Using configuration from /home/user/CA/pki/easy-rsa-209844.f9wDrk/tmp.3rww6R + Enter pass phrase for /home/user/CA/pki/private/ca.key: + Check that the request matches the signature + Signature ok + The Subject's Distinguished Name is as follows + countryName :PRINTABLE:'US' + stateOrProvinceName :ASN.1 12:'California' + localityName :ASN.1 12:'Mountain View' + organizationName :ASN.1 12:'PlanetScale Inc' + organizationalUnitName:ASN.1 12:'Operations' + commonName :ASN.1 12:'vttablet1' + emailAddress :IA5STRING:'carequest@planetscale.com' + Certificate is to be certified until Oct 4 20:23:48 2023 GMT (1095 days) + + Write out database with 1 new entries + Data Base Updated + + Certificate created at: /home/user/CA/pki/issued/vttablet1.crt + + $ cp /home/user/CA/pki/private/vttablet1.key ~/config/ + $ cp /home/user/CA/pki/issued/vttablet1.crt ~/config/ + $ chmod 400 ~/config/vttablet1.* +``` + +To configure vttablet to use a server certificate for its gRPC server, add the below to the vttablet parameters: + +``` + --grpc_cert /home/user/config/vttablet1.crt --grpc_key /home/user/config/vttablet1.key +``` + +Note that adding these options **enforces** TLS only gRPC connections to this vttablet instace from that point onwards. + +This means that you will need to add the following option to your vtgate instances to successfully connect to this vttablet instance from this point forward: + +``` + --tablet_grpc_server_name vttablet1 --tablet_grpc_ca /home/user/config/ca.crt +``` + +Adding this option to a vtgate instance will require all vttablet instances this vtgate connects to to be configured for TLS as well. This is unfortunately an all-or-nothing proposition, there is no incremental migration to using TLS in this case. + +If you have vtgate instances accessing your vttablet instance after you have configured TLS on the vttablet side, you may see errors like this in the vttablet logs: + +``` + W1004 13:34:16.352458 212354 server.go:650] grpc: Server.Serve failed to complete security handshake from "[::1]:51492": tls: first record does not look like a TLS handshake +``` + +Conversely, if you have configured the TLS parameters on the vtgate side and the vtgate instance is still trying to connect to vttablet instances that are not configured with the correct TLS options, you might see errors like this in the vtgate logs: + +``` + W1004 14:38:29.383672 214179 tablet_health_check.go:323] tablet cell:"zone1" uid:101 healthcheck stream error: Code: UNAVAILABLE + vttablet: rpc error: code = Unavailable desc = all SubConns are in TransientFailure, latest connection error: connection error: desc = "transport: authentication handshake failed: tls: first record does not look like a TLS handshake" +``` + +In case of VTOrc, you will need to add following to VTOrc instance to successfully connect to this vttablet instance + +``` + --tablet_manager_grpc_server_name vttablet1 --tablet_manager_grpc_ca /home/user/config/ca.crt +``` + +#### vttablet to vtablet: vreplication within or across shards + +For vreplication to work between vttablet instances once the gRPC server TLS options above are activated, you will need to add the following additional vttablet options: + +``` + --tablet_grpc_server_name vttablet1 --tablet_grpc_ca /home/user/config/ca.crt +``` + +Since each vttablet instance may need to talk to more than one other vttablet instances for vreplication streams, the implication is that each vttablet instances needs to either: + + * Use the same vttablet server key material and server certificate common name for each vttablet instance. This is obviously the easiest option, but might not conform to your compliance requirements. + * or, ensure each vttablet server certificate common name or IP SAN matches the DNS name or IP it it accessed via. In this case, you can omit the use of the `--tablet_grpc_server_name` above for vttablet, and also for vtgate. + +#### vtctld to vttablet + +Once your vttablet(s) are configured with gRPC server TLS options as above, +you will need to also add TLS client options to vtctld, or vtctld will be +unable to connect to your vttablet(s). + +* To achieve this, add the following options to the vtctld commandline: + +``` + --tablet_grpc_server_name vttablet1 --tablet_grpc_ca /home/user/config/ca.crt --tablet_manager_grpc_server_name vttablet1 --tablet_manager_grpc_ca /home/user/config/ca.crt +``` + +### vtctldclient to vtctld + +The communication from vtctldclient to vtctld is also via gRPC, so the method for securing it is similar to vtctld to vttablet above. + +Generate a server certificate for vtctld: + +```bash + $ cd ~/CA/ + $ ./easyrsa gen-req vtctld1 nopass + + Note: using Easy-RSA configuration from: /home/user/CA/vars + Using SSL: openssl OpenSSL 1.1.1g FIPS 21 Apr 2020 + Generating a RSA private key + ..................................................+++++ + ....................................................+++++ + writing new private key to '/home/user/CA/pki/easy-rsa-234817.QW1l8f/tmp.REK9r3' + ----- + You are about to be asked to enter information that will be incorporated + into your certificate request. + What you are about to enter is what is called a Distinguished Name or a DN. + There are quite a few fields but you can leave some blank + For some fields there will be a default value, + If you enter '.', the field will be left blank. + ----- + Country Name (2 letter code) [US]: + State or Province Name (full name) [California]: + Locality Name (eg, city) [Mountain View]: + Organization Name (eg, company) [PlanetScale Inc]: + Organizational Unit Name (eg, section) [Operations]: + Common Name (eg: your user, host, or server name) [vtctld1]: + Email Address [carequest@planetscale.com]: + + Keypair and certificate request completed. Your files are: + req: /home/user/CA/pki/reqs/vtctld1.req + key: /home/user/CA/pki/private/vtctld1.key + + $ ./easyrsa sign-req server vtctld1 + + Note: using Easy-RSA configuration from: /home/user/CA/vars + Using SSL: openssl OpenSSL 1.1.1g FIPS 21 Apr 2020 + + + You are about to sign the following certificate. + Please check over the details shown below for accuracy. Note that this request + has not been cryptographically verified. Please be sure it came from a trusted + source or that you have verified the request checksum with the sender. + + Request subject, to be signed as a server certificate for 1095 days: + + subject= + countryName = US + stateOrProvinceName = California + localityName = Mountain View + organizationName = PlanetScale Inc + organizationalUnitName = Operations + commonName = vtctld1 + emailAddress = carequest@planetscale.com + + + Type the word 'yes' to continue, or any other input to abort. + Confirm request details: yes + Using configuration from /home/user/CA/pki/easy-rsa-234873.8zKYwl/tmp.zDGxDd + Enter pass phrase for /home/user/CA/pki/private/ca.key: + Check that the request matches the signature + Signature ok + The Subject's Distinguished Name is as follows + countryName :PRINTABLE:'US' + stateOrProvinceName :ASN.1 12:'California' + localityName :ASN.1 12:'Mountain View' + organizationName :ASN.1 12:'PlanetScale Inc' + organizationalUnitName:ASN.1 12:'Operations' + commonName :ASN.1 12:'vtctld1' + emailAddress :IA5STRING:'carequest@planetscale.com' + Certificate is to be certified until Oct 5 02:30:05 2023 GMT (1095 days) + + Write out database with 1 new entries + Data Base Updated + + Certificate created at: /home/user/CA/pki/issued/vtctld1.crt + + $ cp /home/user/CA/pki/issued/vtctld1.crt ~/config/ + $ cp /home/user/CA/pki/private/vtctld1.key ~/config/ +``` + +Add TLS gRPC server options to vtctld commandline and restart vtctld: + +``` + --grpc_cert /home/user/config/vtctld1.crt --grpc_key /home/user/config/vtctld1.key +``` + +At this point, all vtctldclient connections to vtctld will need the appropriate additional TLS gRPC options, or they will fail. Add these options: + +``` + --vtctld_grpc_ca /home/user/config/ca.crt --vtctld_grpc_server_name vtctld1 +``` + +## Topology server data paths + +Vitess supports several topology server implementations, with the major ones being `etcd` and `ZooKeeper`. Since each of these use their own protocols, securing communications between Vitess components (like vtgate, vttablet and vtctld) and the topology server is specific to the topology server implementation. We we will cover `etcd` first, then `ZooKeeper`. + +It should be noted that regardless of the implementation, no sensitive data is stored in the Vitess topology server, i.e.: + + * No data (queries/results) is stored in, or flows through, the topology server. + * No secrets (keys, certificates, passwords) are stored in the toplogy server + data store. + * Only metadata (VSchema, keyspace and shard information) is stored in the + topology server data store. + +### Configuring etcd for secure connections + +We will not cover setting up `etcd` with certificates in this guide. You can consult the `etcd` documenation [here](https://etcd.io/docs/v3.5/op-guide/security/). Note that you can use `easy-rsa` as above to generate your server private key and certificate pairs. If you do not require client authentication, that is sufficient, and you then just have to distribute your CA certificate (`/home/user/CA/pki/ca.crt` in the examples above) to your clients, and proceed as in the next section. + +### Configuring secure connectivity between vtgate/vttablet/vtctld and etcd + +The Vitess servers (vtgate/vttablet/vtctld) share the same set of parameters to connect via TLS to `etcd`: + + * `--topo_etcd_tls_ca` : Path to the PEM certificate used to authenticate the TLS CA certificate presented by the `etcd` server. Enables TLS to `etcd` if present. + * `--topo_etcd_tls_cert` : Path to a PEM client certificate (mTLS) used to authenticate this client to the `etcd` server. Only necessary if your `etcd` server requires client authentication. + * `--topo_etcd_tls_key` : Path to a PEM private key used for signing the client certificate (mTLS) exchange with the `etcd` server. Only necessary if your `etcd` server requires client authentication. + +As is necessary for your design/architecture, add one or more of the above options to your vtgate, vttablet and vtctld instances. + +### Configuring etcd for secure connections + +We will just mention the basic flags here for getting `etcd` to accept encrypted client connections. We will not cover the flags to make sure that communication between `etcd` cluster members (peers) are encrypted. + +Flags: + + * `--listen-client-urls`: specify an `https://` host and port prefix + * `--advertise-client-urls`: specify an `https://` host and port prefix + * `--cert-file`: Point to to a server cert PEM file + * `--key-file`: Point to to a server key PEM file + * (optional) `--cipher-suites`: Can be used to limit the cipher suites the etc server will negotiate (e.g. `TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384` is a popular combination). + +Note that the Vitess client components will negotiate any of the standard golang TLS client cipher suites (which can vary somewhat depending on which golang version Vitess was compiled with, and what libraries are available on the platform). It is not possible to limit the cipher suites from the etcd client (i.e. Vitess) components. + +It is also possible to configure `etcd` to require/verify client certificates from the clients; for that use the `--trusted-ca-file` option to point to the PEM CA cert that the client certs are signed with. + +### Configuring ZooKeeper for secure connections + +We will not cover setting up `Zookeeper` with certificates in this guide. You can consult the `Zookeeper` documenation [here](https://cwiki.apache.org/confluence/display/ZOOKEEPER/ZooKeeper+SSL+User+Guide), specifically the `Server` section. Note that you can use `easy-rsa` as above to generate your server private key and certificate pairs. If you do not require client authentication, that is sufficient, and you then just have to distribute your CA certificate (`/home/user/CA/pki/ca.crt` in the examples above) to your clients, and proceed as in the next section. + +### Configuring secure connectivity between vtgate/vttablet/vtctld and ZooKeeper + +The Vitess servers (vtgate/vttablet/vtctld) share the same set of parameters to connect via TLS to `Zookeeper`: + + * `--topo_zk_tls_ca` : Path to the PEM certificate used to authenticate the TLS CA certificate presented by the `Zookeeper` server. Enables TLS to `etcd` if present. + * `--topo_zk_tls_cert` : Path to a PEM client certificate (mTLS) used to authenticate this client to the `Zookeeper` server. Only necessary if your `Zookeeper` server requires client authentication. + * `--topo_zk_tls_key` : Path to a PEM private key used for signing the client certificate (mTLS) exchange with the `Zookeeper` server. Only necessary if your `Zookeeper` server requires client certificate authentication. + * `--topo_zk_auth_file` : Unlike `etcd`, `Zookeeper` also supports username/password authentication from clients. This option is used to pass the combination of authentication schema, username and password to the client to connect with to the server, e.g. with a value like `digest:username:password`. + +As is necessary for your design/architecture, add one or more of the above options to your vtgate, vttablet and vtctld instances. + +## Generating client certificates with easy-rsa + +`easy-rsa` can also be used to generate client certificates (i.e for mTLS or mutual TLS). Mutual TLS needs at least two additional parameters on the client side, and one additional parameter on the server side: + + * Client side: + * Private key to sign the client certificate exchange with server. + * Client certificate itself. + * Server side: + * CA certificate that signed the client certificate(s) that the client(s) are presenting. + +To generate the client-side private and client certificate using `easy-rsa`: + +```bash + $ cd ~/CA/ + $ ./easyrsa gen-req client1 nopass + Note: using Easy-RSA configuration from: /home/user/CA/vars + Using SSL: openssl OpenSSL 1.1.1g FIPS 21 Apr 2020 + Generating a RSA private key + ..........+++++ + .........+++++ + writing new private key to '/home/user/CA/pki/easy-rsa-144133.y9mHHP/tmp.LSLIhv' + ----- + You are about to be asked to enter information that will be incorporated + into your certificate request. + What you are about to enter is what is called a Distinguished Name or a DN. + There are quite a few fields but you can leave some blank + For some fields there will be a default value, + If you enter '.', the field will be left blank. + ----- + Country Name (2 letter code) [US]: + State or Province Name (full name) [California]: + Locality Name (eg, city) [Mountain View]: + Organization Name (eg, company) [PlanetScale Inc]: + Organizational Unit Name (eg, section) [Operations]: + Common Name (eg: your user, host, or server name) [client1]: + Email Address [carequest@planetscale.com]: + + Keypair and certificate request completed. Your files are: + req: /home/user/CA/pki/reqs/client1.req + key: /home/user/CA/pki/private/client1.key + + $ ./easyrsa sign-req client client1 + Note: using Easy-RSA configuration from: /home/user/CA/vars + Using SSL: openssl OpenSSL 1.1.1g FIPS 21 Apr 2020 + + + You are about to sign the following certificate. + Please check over the details shown below for accuracy. Note that this request + has not been cryptographically verified. Please be sure it came from a trusted + source or that you have verified the request checksum with the sender. + + Request subject, to be signed as a client certificate for 1095 days: + + subject= + countryName = US + stateOrProvinceName = California + localityName = Mountain View + organizationName = PlanetScale Inc + organizationalUnitName = Operations + commonName = client1 + emailAddress = carequest@planetscale.com + + + Type the word 'yes' to continue, or any other input to abort. + Confirm request details: yes + Using configuration from /home/user/CA/pki/easy-rsa-144332.6AjhHm/tmp.KWRj4O + Enter pass phrase for /home/user/CA/pki/private/ca.key: + Check that the request matches the signature + Signature ok + The Subject's Distinguished Name is as follows + countryName :PRINTABLE:'US' + stateOrProvinceName :ASN.1 12:'California' + localityName :ASN.1 12:'Mountain View' + organizationName :ASN.1 12:'PlanetScale Inc' + organizationalUnitName:ASN.1 12:'Operations' + commonName :ASN.1 12:'client1' + emailAddress :IA5STRING:'carequest@planetscale.com' + Certificate is to be certified until Oct 14 04:10:28 2023 GMT (1095 days) + + Write out database with 1 new entries + Data Base Updated + + Certificate created at: /home/user/CA/pki/issued/client1.crt +``` + +Our client certificate and key has now been issued, and we can use the files `/home/user/CA/pki/issued/client1.crt` and `/home/user/CA/pki/private/client1.key` on our client for client certificate (mTLS) authentication. diff --git a/content/en/docs/21.0/user-guides/configuration-advanced/unmanaged-tablet.md b/content/en/docs/21.0/user-guides/configuration-advanced/unmanaged-tablet.md new file mode 100644 index 000000000..1bbe25cb1 --- /dev/null +++ b/content/en/docs/21.0/user-guides/configuration-advanced/unmanaged-tablet.md @@ -0,0 +1,187 @@ +--- +title: Unmanaged Tablet +weight: 45 +aliases: ['/docs/user-guides/unmanaged-tablet/'] +--- + +{{< info >}} +This guide follows on from the [local](../../../get-started/local) installation guide. +{{< /info >}} + +This guide uses the Vitess components vtctld, Topology Service and VTGate which have already been started in the local installation guide. It assumes that you have an existing MySQL Server setup that you would like to add to Vitess as a new keyspace, which we will call `legacy`. The same set of steps can be used to create a tablet that uses Amazon RDS, AWS Aurora, or Google CloudSQL. + +## Ensure all components are up + +You should have previously executed `./101_initial_cluster.sh` in the get-started guide. This will ensure that you have a Topology Service, vtgate, vtctld. For the unmanaged MySQL instance, I will be using an instance running on `127.0.0.1:5726`: + +```bash +source ../common/env.sh + +# verify vtgate/vitess is up and running +mysql commerce -e 'show tables' + +# verify my unmanaged mysql is running +mysql -h 127.0.0.1 -P 5726 -umsandbox -pmsandbox legacy -e 'show tables' +``` + +
    Output: + +```text +$ source ../common/env.sh + +$ # verify vtgate/vitess is up and running +$ mysql commerce -e 'show tables' ++-----------------------+ +| Tables_in_vt_commerce | ++-----------------------+ +| corder | +| customer | +| product | ++-----------------------+ +$ # verify my unmanaged mysql is running +$ mysql -h 127.0.0.1 -P 5726 -umsandbox -pmsandbox legacy -e 'show tables' +mysql: [Warning] Using a password on the command line interface can be insecure. ++------------------+ +| Tables_in_legacy | ++------------------+ +| legacytable | ++------------------+ +``` + +## Start a tablet to correspond to legacy + +The variables `TOPOLOGY_FLAGS` and `VTDATAROOT` should already be in the environment from sourcing env.sh earlier. We will call the new tablet UID 401. + +```bash +mkdir -p $VTDATAROOT/vt_0000000401 +vttablet \ + $TOPOLOGY_FLAGS \ + --logtostderr \ + --log_queries_to_file $VTDATAROOT/tmp/vttablet_0000000401_querylog.txt \ + --tablet-path "zone1-0000000401" \ + --init_keyspace legacy \ + --init_shard 0 \ + --init_tablet_type replica \ + --port 15401 \ + --grpc_port 16401 \ + --service_map 'grpc-queryservice,grpc-tabletmanager,grpc-updatestream' \ + --pid_file $VTDATAROOT/vt_0000000401/vttablet.pid \ + --db_host 127.0.0.1 \ + --db_port 5726 \ + --db_app_user msandbox \ + --db_app_password msandbox \ + --db_dba_user msandbox \ + --db_dba_password msandbox \ + --db_repl_user msandbox \ + --db_repl_password msandbox \ + --db_filtered_user msandbox \ + --db_filtered_password msandbox \ + --db_allprivs_user msandbox \ + --db_allprivs_password msandbox \ + --init_db_name_override legacy \ + --init_populate_metadata \ + --disable_active_reparents & +``` + +Note that if your tablet is using a MySQL instance type where you do not have `SUPER` privileges to the database +(e.g. AWS RDS, AWS Aurora or Google CloudSQL), you should omit the `--init_populate_metadata` flag. The `--init_populate_metadata` flag should only be enabled if the cluster is being managed through Vitess. + +You should be able to see debug information written to screen confirming Vitess can reach the unmanaged server. A common problem is that you may need to change the authentication plugin to `mysql_native_password` (MySQL 8.0). + +Assuming that there are no errors, after a few seconds you can mark the server as externally promoted to primary: + +```bash +vtctldclient TabletExternallyReparented zone1-401 +``` + +## Connect via VTGate + +VTGate should now be able to route queries to your unmanaged MySQL server: + +```bash +$ mysql legacy -e 'show tables' ++------------------+ +| Tables_in_legacy | ++------------------+ +| legacytable | ++------------------+ +``` + +You can even join between the unmanaged tablet and the managed tablets. Vitess will execute the query as a scatter-gather: + +```sql +mysql> use commerce; +Database changed + +mysql> select corder.order_id from corder inner join legacy.legacytable on corder.order_id=legacy.legacytable.id; +Empty set (0.01 sec) +``` + +## Move legacytable to the commerce keyspace + +Move the table: + +```bash +vtctldclient MoveTables --target-keyspace commerce --workflow legacy2commerce create --source-keyspace legacy --tables 'legacytable' +``` + +
    + +Monitor the workflow: + +use `Show` or `Progress` + +```bash +vtctldclient MoveTables --target-keyspace commerce --workflow legacy2commerce show +vtctldclient MoveTables --target-keyspace commerce --workflow legacy2commerce status +``` + +You can alternatively use the [`Workflow show`](../../../reference/programs/vtctldclient/vtctldclient_workflow/vtctldclient_workflow_show/) command to get the details as well. + +```bash +vtctldclient Workflow --keyspace commerce show --workflow legacy2commerce +``` + +
    Switch traffic: + +```bash +vtctldclient MoveTables --target-keyspace commerce --workflow legacy2commerce SwitchTraffic +``` + +
    Complete the `MoveTables`: + +```bash +vtctldclient MoveTables --target-keyspace commerce --workflow legacy2commerce complete +``` + +
    Verify that the table was moved: + +```bash +source ../common/env.sh + +# verify vtgate/vitess is up and running +mysql commerce -e 'show tables' + +# verify my unmanaged mysql is running +mysql -h 127.0.0.1 -P 5726 -umsandbox -pmsandbox legacy -e 'show tables' +``` + +
    Output: + +```text +$ source ../common/env.sh +$ +$ # verify vtgate/vitess is up and running +$ mysql commerce -e 'show tables' ++-----------------------+ +| Tables_in_vt_commerce | ++-----------------------+ +| corder | +| customer | +| legacytable | +| product | ++-----------------------+ +$ # verify my unmanaged mysql is running +$ mysql -h 127.0.0.1 -P 5726 -umsandbox -pmsandbox legacy -e 'show tables' +mysql: [Warning] Using a password on the command line interface can be insecure. +``` diff --git a/content/en/docs/21.0/user-guides/configuration-advanced/user-management.md b/content/en/docs/21.0/user-guides/configuration-advanced/user-management.md new file mode 100644 index 000000000..f48c9937b --- /dev/null +++ b/content/en/docs/21.0/user-guides/configuration-advanced/user-management.md @@ -0,0 +1,23 @@ +--- +title: User Management and Authentication +weight: 1 +aliases: ['/docs/user-guides/user-management/'] +--- + +Vitess uses its own mechanism for managing users and their permissions through + VTGate. As a result, the `CREATE USER....` and +`GRANT...` statements will not work if sent through VTGate. + +## Authentication + +The Vitess VTGate component takes care of authentication for requests so we +will need to add any users that should have access to the Keyspaces via the +command-line options to VTGate. + +VTGate supports multiple types of authentication: + +* none - No authentication is performed. This is the default. +* static - [File-based authentication](../static-auth) +* ldap - [LDAP-based authentication](../ldap_auth) +* clientcert - TLS client certificate-based authentication +* vault - Vault-based authentication diff --git a/content/en/docs/21.0/user-guides/configuration-basic/_index.md b/content/en/docs/21.0/user-guides/configuration-basic/_index.md new file mode 100644 index 000000000..12898272a --- /dev/null +++ b/content/en/docs/21.0/user-guides/configuration-basic/_index.md @@ -0,0 +1,5 @@ +--- +title: Running in Production +description: Instructions and guidelines for running Vitess in a production environment +weight: 2 +--- diff --git a/content/en/docs/21.0/user-guides/configuration-basic/add-delete-cell.md b/content/en/docs/21.0/user-guides/configuration-basic/add-delete-cell.md new file mode 100644 index 000000000..786d197a3 --- /dev/null +++ b/content/en/docs/21.0/user-guides/configuration-basic/add-delete-cell.md @@ -0,0 +1,48 @@ +--- +title: Add or Delete a Cell +weight: 15 +--- + +## Add +To add a cell after a cluster is up and running, you start off by creating one using the same steps previously performed to create the first cell: + +```sh +vtctldclient AddCellInfo \ + --root /vitess/cell2 \ + --server-address \ + cell2 +``` + +Additionally, you will need to make the keyspace info visible in the cell. For every keyspace, issue the following: + +```text +vtctldclient RebuildKeyspaceGraph --cells=cell2 +``` + +And finally, deploy the VSchema with + +```text +vtctldclient RebuildVSchemaGraph --cells=cell2 +``` + +{{< info >}} +If the `cells` option is not specified, the rebuild deploys to all cells. +{{< /info >}} + +Once these steps are done, you can bring up the necessary MySQLs, vttablets and vtgates under that cell. + +## Delete + +To delete a cell, bring down all servers in that cell, and then remove its entry from the global topo with: + +``` +vtctldclient DeleteCellInfo --force cell2 +``` + +If `--force` is not used the command will error out if any keyspace was deployed to that cell. There is currently no clean way to undeploy a keyspace from a cell. So, `--force` will need to be used for most use cases. + +VTGates and vtctlds do not refresh themselves after a cell is deleted or updated. It is recommended that you restart them. + +Once the Vitess components are restarted, the final step will be to bring down the cell-specific topo server. + +If you had deployed a cell-specific toposerver, that can now be brought down. The deployed info under the cell's root (`/vitess/cell2`) will not be automatically deleted. You will have to manually delete that directory. diff --git a/content/en/docs/21.0/user-guides/configuration-basic/backups-restores.md b/content/en/docs/21.0/user-guides/configuration-basic/backups-restores.md new file mode 100644 index 000000000..7f537078f --- /dev/null +++ b/content/en/docs/21.0/user-guides/configuration-basic/backups-restores.md @@ -0,0 +1,32 @@ +--- +title: Backups and Restores +weight: 12 +--- + +The default settings created by `mysqlctl` set the binlog `expire_logs_days` to 3. Once the binlogs expire, you will not be able to bring up new empty replicas that can catch up to the current state. + +So, you need to take regular backups, probably through a cron job. Assuming that you’ve configured the shared storage and provided the correct parameters to the Vitess components, you should be able to create a backup as follows: + +```text +vtctldclient Backup cell1-101 +``` + +{{< warning >}} +If you are not using an online backup method like xtrabackup, the `Backup` command will shut down the MySQL instance to perform the operation. The instance will be unavailable until the backup is finished, the restarted MySQL instance is pointed back at the primary and caught up on replication. +{{< /warning >}} + +{{< info >}} +It is recommended that you also periodically backup your binlogs. Vitess does not natively support this ability. You will need to set this up yourself. +{{< /info >}} + +Once a backup is taken, bringing up a subsequent vttablet-MySQL pair will cause it to restore from the backup instead of starting with a fresh MySQL instance. This will make it catch up from the beginning of time. You should see the following messages in the vttablet logs: + +```text +I0102 13:06:01.379759 30842 backup.go:227] Restore: looking for a suitable backup to restore +I0102 13:06:01.379820 30842 shard_sync.go:70] Change to tablet state +I0102 13:06:01.380757 30842 backupengine.go:221] Restore: found backup commerce/0 2021-01-02.205158.cell1-0000000101 to restore +``` + +If a MySQL with existing data is restarted either manually or due to a failure, an automatic restore will not be performed. Instead, a recovery will be performed from the existing data files. + +Please refer to the [Backup and Restore](../../operating-vitess/backup-and-restore) documentation for more information. diff --git a/content/en/docs/21.0/user-guides/configuration-basic/collations.md b/content/en/docs/21.0/user-guides/configuration-basic/collations.md new file mode 100644 index 000000000..880a1fa1e --- /dev/null +++ b/content/en/docs/21.0/user-guides/configuration-basic/collations.md @@ -0,0 +1,414 @@ +--- +title: Collations and Character sets +description: +weight: 1 +--- + +MySQL is a Unicode-aware database, and as explained on [the MySQL documentation](https://dev.mysql.com/doc/refman/8.0/en/charset-mysql.html), it supports using many different character sets to store textual data in databases, and many different collations which are used to compare and sort this textual data. + +Likewise, Vitess is also Unicode-aware, and it supports the vast majority of the collations and charsets in the underlying MySQL server. On a basic level, this support means that Vitess handles gracefully textual Unicode columns and queries, and relays this information to MySQL clients without losing or corrupting the encoding of the data. On top of this, newer versions of Vitess are also capable of performing textual comparison and sorting operations in SQL queries directly on VTGate instances, greatly speeding up complex operations such as cross-shard joins. + +### Supported collations + +The collation environment (i.e. the set of support collations and charsets) of a Vitess cluster is defined by the MySQL server version flag (`--mysql_server_version`) provided to the VTGate and VTTablet instances in the cluster. Higher (newer) MySQL versions will enable built-in support for more collations. + +The following table lists all of the supported collations in the current release of Vitess: + +| Legend | | +|----|----| +| ✅ | Vitess has full support for this collation. | +| ⚠️ | The underlying MySQL (or compatible) database supports this collation, but Vitess does not. | +| ❌ | Neither Vitess nor the underlying MySQL database supports this collation. | + +Using collations that are not supported by Vitess but implemented in the underlying MySQL instance can lead to unpredictable behavior. + +| Collation | Charset | MySQL 8.0 | MySQL 5.7 | MySQL 5.6 | MariaDB 10.3 | MariaDB 10.2 | MariaDB 10.1 | MariaDB 10.0 | +|---|---|---|---|---|---|---|---|---| +| big5_chinese_ci | big5 | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | +| latin2_czech_cs | latin2 | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | +| dec8_swedish_ci | dec8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| cp850_general_ci | cp850 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| latin1_german1_ci | latin1 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| hp8_english_ci | hp8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| koi8r_general_ci | koi8r | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| latin1_swedish_ci | latin1 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| latin2_general_ci | latin2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| swe7_swedish_ci | swe7 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| ascii_general_ci | ascii | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| ujis_japanese_ci | ujis | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| sjis_japanese_ci | sjis | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| cp1251_bulgarian_ci | cp1251 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| latin1_danish_ci | latin1 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| hebrew_general_ci | hebrew | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| tis620_thai_ci | tis620 | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | +| euckr_korean_ci | euckr | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| latin7_estonian_cs | latin7 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| latin2_hungarian_ci | latin2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| koi8u_general_ci | koi8u | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| cp1251_ukrainian_ci | cp1251 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| gb2312_chinese_ci | gb2312 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| greek_general_ci | greek | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| cp1250_general_ci | cp1250 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| latin2_croatian_ci | latin2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| gbk_chinese_ci | gbk | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | +| cp1257_lithuanian_ci | cp1257 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| latin5_turkish_ci | latin5 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| latin1_german2_ci | latin1 | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | +| armscii8_general_ci | armscii8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8_general_ci | utf8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| cp1250_czech_cs | cp1250 | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | +| ucs2_general_ci | ucs2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| cp866_general_ci | cp866 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| keybcs2_general_ci | keybcs2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| macce_general_ci | macce | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| macroman_general_ci | macroman | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| cp852_general_ci | cp852 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| latin7_general_ci | latin7 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| latin7_general_cs | latin7 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| macce_bin | macce | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| cp1250_croatian_ci | cp1250 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8mb4_general_ci | utf8mb4 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8mb4_bin | utf8mb4 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| latin1_bin | latin1 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| latin1_general_ci | latin1 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| latin1_general_cs | latin1 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| cp1251_bin | cp1251 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| cp1251_general_ci | cp1251 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| cp1251_general_cs | cp1251 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| macroman_bin | macroman | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf16_general_ci | utf16 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf16_bin | utf16 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf16le_general_ci | utf16le | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| cp1256_general_ci | cp1256 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| cp1257_bin | cp1257 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| cp1257_general_ci | cp1257 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf32_general_ci | utf32 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf32_bin | utf32 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf16le_bin | utf16le | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| binary | binary | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| armscii8_bin | armscii8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| ascii_bin | ascii | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| cp1250_bin | cp1250 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| cp1256_bin | cp1256 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| cp866_bin | cp866 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| dec8_bin | dec8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| greek_bin | greek | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| hebrew_bin | hebrew | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| hp8_bin | hp8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| keybcs2_bin | keybcs2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| koi8r_bin | koi8r | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| koi8u_bin | koi8u | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8_tolower_ci | utf8 | ⚠️ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| latin2_bin | latin2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| latin5_bin | latin5 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| latin7_bin | latin7 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| cp850_bin | cp850 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| cp852_bin | cp852 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| swe7_bin | swe7 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8_bin | utf8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| big5_bin | big5 | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | +| euckr_bin | euckr | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| gb2312_bin | gb2312 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| gbk_bin | gbk | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | +| sjis_bin | sjis | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| tis620_bin | tis620 | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | +| ucs2_bin | ucs2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| ujis_bin | ujis | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| geostd8_general_ci | geostd8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| geostd8_bin | geostd8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| latin1_spanish_ci | latin1 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| cp932_japanese_ci | cp932 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| cp932_bin | cp932 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| eucjpms_japanese_ci | eucjpms | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| eucjpms_bin | eucjpms | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| cp1250_polish_ci | cp1250 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf16_unicode_ci | utf16 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf16_icelandic_ci | utf16 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf16_latvian_ci | utf16 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf16_romanian_ci | utf16 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf16_slovenian_ci | utf16 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf16_polish_ci | utf16 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf16_estonian_ci | utf16 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf16_spanish_ci | utf16 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf16_swedish_ci | utf16 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf16_turkish_ci | utf16 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf16_czech_ci | utf16 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf16_danish_ci | utf16 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf16_lithuanian_ci | utf16 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf16_slovak_ci | utf16 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf16_spanish2_ci | utf16 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf16_roman_ci | utf16 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf16_persian_ci | utf16 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf16_esperanto_ci | utf16 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf16_hungarian_ci | utf16 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf16_sinhala_ci | utf16 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf16_german2_ci | utf16 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf16_croatian_ci | utf16 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf16_unicode_520_ci | utf16 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf16_vietnamese_ci | utf16 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| ucs2_unicode_ci | ucs2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| ucs2_icelandic_ci | ucs2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| ucs2_latvian_ci | ucs2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| ucs2_romanian_ci | ucs2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| ucs2_slovenian_ci | ucs2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| ucs2_polish_ci | ucs2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| ucs2_estonian_ci | ucs2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| ucs2_spanish_ci | ucs2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| ucs2_swedish_ci | ucs2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| ucs2_turkish_ci | ucs2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| ucs2_czech_ci | ucs2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| ucs2_danish_ci | ucs2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| ucs2_lithuanian_ci | ucs2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| ucs2_slovak_ci | ucs2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| ucs2_spanish2_ci | ucs2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| ucs2_roman_ci | ucs2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| ucs2_persian_ci | ucs2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| ucs2_esperanto_ci | ucs2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| ucs2_hungarian_ci | ucs2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| ucs2_sinhala_ci | ucs2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| ucs2_german2_ci | ucs2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| ucs2_croatian_ci | ucs2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| ucs2_unicode_520_ci | ucs2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| ucs2_vietnamese_ci | ucs2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| ucs2_general_mysql500_ci | ucs2 | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | +| utf32_unicode_ci | utf32 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf32_icelandic_ci | utf32 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf32_latvian_ci | utf32 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf32_romanian_ci | utf32 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf32_slovenian_ci | utf32 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf32_polish_ci | utf32 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf32_estonian_ci | utf32 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf32_spanish_ci | utf32 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf32_swedish_ci | utf32 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf32_turkish_ci | utf32 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf32_czech_ci | utf32 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf32_danish_ci | utf32 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf32_lithuanian_ci | utf32 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf32_slovak_ci | utf32 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf32_spanish2_ci | utf32 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf32_roman_ci | utf32 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf32_persian_ci | utf32 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf32_esperanto_ci | utf32 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf32_hungarian_ci | utf32 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf32_sinhala_ci | utf32 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf32_german2_ci | utf32 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf32_croatian_ci | utf32 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf32_unicode_520_ci | utf32 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf32_vietnamese_ci | utf32 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8_unicode_ci | utf8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8_icelandic_ci | utf8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8_latvian_ci | utf8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8_romanian_ci | utf8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8_slovenian_ci | utf8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8_polish_ci | utf8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8_estonian_ci | utf8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8_spanish_ci | utf8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8_swedish_ci | utf8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8_turkish_ci | utf8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8_czech_ci | utf8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8_danish_ci | utf8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8_lithuanian_ci | utf8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8_slovak_ci | utf8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8_spanish2_ci | utf8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8_roman_ci | utf8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8_persian_ci | utf8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8_esperanto_ci | utf8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8_hungarian_ci | utf8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8_sinhala_ci | utf8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8_german2_ci | utf8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8_croatian_ci | utf8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8_unicode_520_ci | utf8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8_vietnamese_ci | utf8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8_general_mysql500_ci | utf8 | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | +| utf8mb4_unicode_ci | utf8mb4 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8mb4_icelandic_ci | utf8mb4 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8mb4_latvian_ci | utf8mb4 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8mb4_romanian_ci | utf8mb4 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8mb4_slovenian_ci | utf8mb4 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8mb4_polish_ci | utf8mb4 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8mb4_estonian_ci | utf8mb4 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8mb4_spanish_ci | utf8mb4 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8mb4_swedish_ci | utf8mb4 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8mb4_turkish_ci | utf8mb4 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8mb4_czech_ci | utf8mb4 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8mb4_danish_ci | utf8mb4 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8mb4_lithuanian_ci | utf8mb4 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8mb4_slovak_ci | utf8mb4 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8mb4_spanish2_ci | utf8mb4 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8mb4_roman_ci | utf8mb4 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8mb4_persian_ci | utf8mb4 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8mb4_esperanto_ci | utf8mb4 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8mb4_hungarian_ci | utf8mb4 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8mb4_sinhala_ci | utf8mb4 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8mb4_german2_ci | utf8mb4 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8mb4_croatian_ci | utf8mb4 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8mb4_unicode_520_ci | utf8mb4 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| utf8mb4_vietnamese_ci | utf8mb4 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| gb18030_chinese_ci | gb18030 | ⚠️ | ⚠️ | ❌ | ❌ | ❌ | ❌ | ❌ | +| gb18030_bin | gb18030 | ⚠️ | ⚠️ | ❌ | ❌ | ❌ | ❌ | ❌ | +| gb18030_unicode_520_ci | gb18030 | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_0900_ai_ci | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_de_pb_0900_ai_ci | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_is_0900_ai_ci | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_lv_0900_ai_ci | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_ro_0900_ai_ci | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_sl_0900_ai_ci | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_pl_0900_ai_ci | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_et_0900_ai_ci | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_es_0900_ai_ci | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_sv_0900_ai_ci | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_tr_0900_ai_ci | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_cs_0900_ai_ci | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_da_0900_ai_ci | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_lt_0900_ai_ci | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_sk_0900_ai_ci | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_es_trad_0900_ai_ci | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_la_0900_ai_ci | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_eo_0900_ai_ci | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_hu_0900_ai_ci | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_hr_0900_ai_ci | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_vi_0900_ai_ci | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_0900_as_cs | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_de_pb_0900_as_cs | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_is_0900_as_cs | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_lv_0900_as_cs | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_ro_0900_as_cs | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_sl_0900_as_cs | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_pl_0900_as_cs | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_et_0900_as_cs | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_es_0900_as_cs | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_sv_0900_as_cs | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_tr_0900_as_cs | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_cs_0900_as_cs | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_da_0900_as_cs | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_lt_0900_as_cs | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_sk_0900_as_cs | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_es_trad_0900_as_cs | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_la_0900_as_cs | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_eo_0900_as_cs | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_hu_0900_as_cs | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_hr_0900_as_cs | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_vi_0900_as_cs | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_ja_0900_as_cs | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_ja_0900_as_cs_ks | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_0900_as_ci | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_ru_0900_ai_ci | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_ru_0900_as_cs | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_zh_0900_as_cs | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8mb4_0900_bin | utf8mb4 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| utf8_croatian_ci | utf8 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | +| utf8_myanmar_ci | utf8 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | +| utf8_thai_520_w2 | utf8 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ⚠️ | ❌ | +| utf8mb4_croatian_ci | utf8mb4 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | +| utf8mb4_myanmar_ci | utf8mb4 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | +| utf8mb4_thai_520_w2 | utf8mb4 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ⚠️ | ❌ | +| ucs2_croatian_ci | ucs2 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | +| ucs2_myanmar_ci | ucs2 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | +| ucs2_thai_520_w2 | ucs2 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ⚠️ | ❌ | +| utf16_croatian_ci | utf16 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | +| utf16_myanmar_ci | utf16 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | +| utf16_thai_520_w2 | utf16 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ⚠️ | ❌ | +| utf32_croatian_ci | utf32 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | +| utf32_myanmar_ci | utf32 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | +| utf32_thai_520_w2 | utf32 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ⚠️ | ❌ | +| big5_chinese_nopad_ci | big5 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| dec8_swedish_nopad_ci | dec8 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| cp850_general_nopad_ci | cp850 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| hp8_english_nopad_ci | hp8 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| koi8r_general_nopad_ci | koi8r | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| latin1_swedish_nopad_ci | latin1 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| latin2_general_nopad_ci | latin2 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| swe7_swedish_nopad_ci | swe7 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| ascii_general_nopad_ci | ascii | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| ujis_japanese_nopad_ci | ujis | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| sjis_japanese_nopad_ci | sjis | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| hebrew_general_nopad_ci | hebrew | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| tis620_thai_nopad_ci | tis620 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| euckr_korean_nopad_ci | euckr | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| koi8u_general_nopad_ci | koi8u | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| gb2312_chinese_nopad_ci | gb2312 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| greek_general_nopad_ci | greek | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| cp1250_general_nopad_ci | cp1250 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| gbk_chinese_nopad_ci | gbk | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| latin5_turkish_nopad_ci | latin5 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| armscii8_general_nopad_ci | armscii8 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| utf8_general_nopad_ci | utf8 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| ucs2_general_nopad_ci | ucs2 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| cp866_general_nopad_ci | cp866 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| keybcs2_general_nopad_ci | keybcs2 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| macce_general_nopad_ci | macce | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| macroman_general_nopad_ci | macroman | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| cp852_general_nopad_ci | cp852 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| latin7_general_nopad_ci | latin7 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| macce_nopad_bin | macce | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| utf8mb4_general_nopad_ci | utf8mb4 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| utf8mb4_nopad_bin | utf8mb4 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| latin1_nopad_bin | latin1 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| cp1251_nopad_bin | cp1251 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| cp1251_general_nopad_ci | cp1251 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| macroman_nopad_bin | macroman | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| utf16_general_nopad_ci | utf16 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| utf16_nopad_bin | utf16 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| utf16le_general_nopad_ci | utf16le | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| cp1256_general_nopad_ci | cp1256 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| cp1257_nopad_bin | cp1257 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| cp1257_general_nopad_ci | cp1257 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| utf32_general_nopad_ci | utf32 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| utf32_nopad_bin | utf32 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| utf16le_nopad_bin | utf16le | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| armscii8_nopad_bin | armscii8 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| ascii_nopad_bin | ascii | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| cp1250_nopad_bin | cp1250 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| cp1256_nopad_bin | cp1256 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| cp866_nopad_bin | cp866 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| dec8_nopad_bin | dec8 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| greek_nopad_bin | greek | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| hebrew_nopad_bin | hebrew | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| hp8_nopad_bin | hp8 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| keybcs2_nopad_bin | keybcs2 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| koi8r_nopad_bin | koi8r | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| koi8u_nopad_bin | koi8u | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| latin2_nopad_bin | latin2 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| latin5_nopad_bin | latin5 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| latin7_nopad_bin | latin7 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| cp850_nopad_bin | cp850 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| cp852_nopad_bin | cp852 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| swe7_nopad_bin | swe7 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| utf8_nopad_bin | utf8 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| big5_nopad_bin | big5 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| euckr_nopad_bin | euckr | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| gb2312_nopad_bin | gb2312 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| gbk_nopad_bin | gbk | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| sjis_nopad_bin | sjis | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| tis620_nopad_bin | tis620 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| ucs2_nopad_bin | ucs2 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| ujis_nopad_bin | ujis | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| geostd8_general_nopad_ci | geostd8 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| geostd8_nopad_bin | geostd8 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| cp932_japanese_nopad_ci | cp932 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| cp932_nopad_bin | cp932 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| eucjpms_japanese_nopad_ci | eucjpms | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| eucjpms_nopad_bin | eucjpms | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| utf16_unicode_nopad_ci | utf16 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| utf16_unicode_520_nopad_ci | utf16 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| ucs2_unicode_nopad_ci | ucs2 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| ucs2_unicode_520_nopad_ci | ucs2 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| utf32_unicode_nopad_ci | utf32 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| utf32_unicode_520_nopad_ci | utf32 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| utf8_unicode_nopad_ci | utf8 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| utf8_unicode_520_nopad_ci | utf8 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| utf8mb4_unicode_nopad_ci | utf8mb4 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | +| utf8mb4_unicode_520_nopad_ci | utf8mb4 | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | + +### Configuring the default connection charset for a Vitess cluster + +**The default connection charset for a Vitess cluster is configured in your VTTablet instances** via the `--db_charset` flag. This flag modifies the behavior of the _connections_ that the tablet creates, not the underlying MySQL instance: it defines the charset that VTTablet uses when opening connections to MySQL. +If the `--db_charset` flag is left empty, VTTablet will default to an `utf8mb4` charset based on the underlying MySQL version. For instance, MySQL 5.x will default to `utf8mb4_general_ci`, while MySQL 8.x defaults to `utf8mb4_0900_ai_ci`. Because the handshake packet of MySQL leaves only 1 byte to reference the charset ID, only charset IDs <= 255 are supported. + +The `@character_set_client` of a VTTablet is automatically propagated to all the VTGates that connect to it, and hence to all the MySQL clients connected to the VTGates. It is a configuration error to deploy several VTTablets in the same Vitess cluster with different connection charset: it will cause warning messages in the VTGates and lead to inconsistent behaviors. + +**The `@character_set_client` of a Vitess cluster is constant**: it cannot be changed at runtime via SQL (e.g. by issuing a `SET character_set_client = utf8` statement). VTGates will reject such queries. + +Do note that, as the MySQL documentation explains, the `@character_set_client` setting only applies when performing character comparisons in SQL queries that don't have explicit collation information. For instance, a query such as `SELECT 'foo' = 'FOO'` will use the default `@character_set_client` for the cluster when picking the charset and collation for the two string literals, because these literals contain no explicit charset or collation information. A query such as `SELECT c FROM t WHERE c = 'foo'` will **not** use the `@character_set_client`; it will use the charset and collation that was defined for column `c` when creating table `t`. + +Vitess has extensive support for creating collation-aware tables and columns in your SQL database, using any charset, and performing collation-aware operations in SQL queries. Any of the supported collations and charsets in Vitess can be used when declaring a table or a row in your database -- it does not need to match the specific value of `@character_set_client`. Generally speaking, setting `@character_set_client` to a charset not based on `utf8mb4` is a mistake. We strongly encourage you to leave the `--db_charset` flag to its default value. diff --git a/content/en/docs/21.0/user-guides/configuration-basic/create-cell.md b/content/en/docs/21.0/user-guides/configuration-basic/create-cell.md new file mode 100644 index 000000000..4e4f92711 --- /dev/null +++ b/content/en/docs/21.0/user-guides/configuration-basic/create-cell.md @@ -0,0 +1,56 @@ +--- +title: Creating a cell +weight: 6 +--- + +A Vitess [cell](../../../concepts/cell) is a logical grouping of servers that typically maps to an availability zone, region, or data center. The purpose of a cell is to provide isolation. The loss of one cell should not disrupt other cells. To fulfil this, Vitess allows you to configure separate cell-specific topo servers. There is no need to distribute the servers of a cell-specific toposerver to other cells. However, it is recommended that you bring up more than one instance in order to survive individual server failures. + +Even if you do not want a multi-cell deployment, you still need to create at least one cell before bringing up the rest of the Vitess servers. If you do not plan to deploy multiple cells, you can reuse the global toposerver as the cell-specific one also. + +You can use the `vtctldclient` alias to create one: + +```sh +vtctldclient AddCellInfo \ + --root /vitess/cell1 \ + --server-address \ + cell1 +``` + +Note that the cell topo has its own root path. If reusing the same toposerver, you must ensure that they don’t overlap. + +The cell information is saved in the global toposerver. Vitess takes care of deploying the necessary information from the global topo to the cell-specific topos. Vitess binaries fetch the cell information from the global topo before switching to use the cell topo. + +{{< info >}} +You will only need to specify the topo global root for launching the Vitess servers. The cell-specific information including its root path will be automatically loaded from the cell info. +{{< /info >}} + +## Mapping cells to zones and regions + +Most public clouds offer a hierarchy of failure boundaries. Regions are data centers that are far apart. Depending on the distance, the latency between two regions can be in the 10s to 100s of milliseconds. Zones are partitions within a region where the machines are in different buildings. Latency between zones is typically in the range of sub-millisecond to 1-2ms. + +There is also a cost to transferring data between zones and regions, and these costs can come into play when making decisions about how to layout the topology. + +The general recommendation for Vitess is to map each cell to a zone. The main advantage of this approach is that it minimizes cross-zone data transfers to the extent possible, thereby minimizing cost. + +If an application must be deployed across regions, then you can create more cells in the newer region, one for each zone. + +Within a region, you could use a single topo cluster to serve all the cells, as long as their root paths are distinct, or you could use one topo cluster per cell. The decision depends on the kind of failure tolerance you want to build into the system. + +For example, let us say that you plan to deploy in three zones and decided to use a shared topo. In this case, losing two zones will result in a full outage because the topo server in the third zone would become unavailable due to loss of quorum. On the other hand, deploying a separate topo cluster for each cell would allow the third zone to survive the loss of the other two zones. + +If you intend to use more than one region for the sake of survivability, then it is recommended that you use at least three regions. This will allow you to deploy a balanced quorum of servers for the global topo. + +If you have deployed in multiple regions and would like the flexibility of queries that go cross-cell within a region, you can create [cell aliases](../../../reference/programs/vtctl/cell-aliases). These aliases will indicate to the vtgates that they can send requests to the vttablets of a different cell if a no local vttablet is available. + +## Checklist + +* Ensure that vtctlds come up successfully. If there is a failure, check the log files for any errors. +* Ensure that you can query the http port of vtctld: `curl http://localhost:15000/cells/` +* If you configured a separate cell-specific topo, ensure that you can connect to it using the parameters in the cell information. +* Ensure that the cell-specific topos are reachable from other cells. + +Open the VTAdmin application in your browser. Go to Topology > View Topology +Browsing to the cell information should look like this screenshot: + +![cell-in-topo](../img/cell-in-topo.png) + diff --git a/content/en/docs/21.0/user-guides/configuration-basic/delete-keyspace.md b/content/en/docs/21.0/user-guides/configuration-basic/delete-keyspace.md new file mode 100644 index 000000000..a83c2e296 --- /dev/null +++ b/content/en/docs/21.0/user-guides/configuration-basic/delete-keyspace.md @@ -0,0 +1,31 @@ +--- +title: Delete a Keyspace +weight: 14 +--- + +Although adding a keyspace is implicit, deleting one is not. In order to delete a keyspace, you must first bring down all tablets on that keyspace. + +Following this, you should delete all shards of a keyspace. In the current example, `commerce` has only one shard (`0`). You can use the following command to delete it: + +```text +vtctldclient DeleteShards --recursive commerce/0 +``` + +The `recursive` flag is required to ensure that the shard is deleted from all cells. If there are tablets still running against the shard, the command will fail. + +You can add an `--even_if_serving` flag to ignore running tablets, but it is not recommended. Otherwise, this would cause existing vttablets to get confused about their tablet records being deleted. + +If a keyspace has more than one shard, you may pass multiple shard names to `DeleteShards`. +They will be deleted sequentially; if one deletion fails, the operation stops there. + +{{< warning>}} +Deleting a shard also deletes the metadata for all the backups, but it does not delete the backups themselves. This is something you have to do manually. +{{< /warning >}} + +Once all shards are deleted, you can delete the keyspace with: + +```text +vtctldclient DeleteKeyspace commerce +``` + +`DeleteKeyspace` also supports a `--recursive` flag that loops through all shards and deletes them recursively, but also ignores any tablets that are running. Note that restarting a vttablet for the deleted keyspace will cause the keyspace to be recreated. This is yet another reason for ensuring that all vttablets are shutdown upfront. diff --git a/content/en/docs/21.0/user-guides/configuration-basic/durability_policy.md b/content/en/docs/21.0/user-guides/configuration-basic/durability_policy.md new file mode 100644 index 000000000..d87a2f68b --- /dev/null +++ b/content/en/docs/21.0/user-guides/configuration-basic/durability_policy.md @@ -0,0 +1,29 @@ +--- +title: Durability Policy +weight: 10 +--- + +Vitess now supports a configurable interface for durability policies. Users can now define, in the interface, which tablets are eligible to be promoted to a PRIMARY instance. They can also specify the number of semi-sync ACKs it requires and the tablets which are eligible to send these ACKs. + +The interface definition looks like: +```go +// Durabler is the interface which is used to get the promotion rules for candidates and the semi sync setup +type Durabler interface { + promotionRule(*topodatapb.Tablet) promotionrule.CandidatePromotionRule + semiSyncAckers(*topodatapb.Tablet) int + isReplicaSemiSync(primary, replica *topodatapb.Tablet) bool +} +``` + +There are 3 implementations supported in this release: + - ***semi_sync*** - This durability policy sets the number of required semi-sync ACKers to 1. It only allows Primary and Replica type servers to acknowledge semi sync. It returns NeutralPromoteRule for replica tablet types, MustNotPromoteRule for everything else. + - ***semi_sync_with_rdonly_ack*** - This durability policy sets the number of required semi-sync ACKers to 1. It allows Primary, Replica and Rdonly type servers to acknowledge semi sync. It returns NeutralPromoteRule for replica tablet types, MustNotPromoteRule for everything else. + - ***none** (default)* - This durability policy does not set any semi-sync configurations. It returns NeutralPromoteRule for Primary and Replica tablet types, MustNotPromoteRule for everything else + - ***cross_cell*** - This durability policy sets the number of required semi-sync ACKers to 1. It only allows Primary and Replica type servers from a different cell than the current primary to acknowledge semi sync. It returns NeutralPromoteRule for replica tablet types, MustNotPromoteRule for everything else. + - ***cross_cell_with_rdonly_ack*** - This durability policy sets the number of required semi-sync ACKers to 1. It only allows Primary, Replica and Rdonly type servers from a different cell than the current primary to acknowledge semi sync. It returns NeutralPromoteRule for replica tablet types, MustNotPromoteRule for everything else. + + +[EmergencyReparentShard](../../configuration-advanced/reparenting/#emergencyreparentshard-emergency-reparenting) and [PlannedReparentShard](../../configuration-advanced/reparenting/#plannedreparentshard-planned-reparenting) will use the durability rules while choosing the correct candidate for promotion. + +This configuration must be stored in the topo server in the keyspace record using the command [CreateKeyspace](../../../reference/programs/vtctldclient/vtctldclient_createkeyspace/) or [SetKeyspaceDurabilityPolicy](../../../reference/programs/vtctldclient/vtctldclient_setkeyspacedurabilitypolicy/). + diff --git a/content/en/docs/21.0/user-guides/configuration-basic/exporting-data.md b/content/en/docs/21.0/user-guides/configuration-basic/exporting-data.md new file mode 100644 index 000000000..17c9e7809 --- /dev/null +++ b/content/en/docs/21.0/user-guides/configuration-basic/exporting-data.md @@ -0,0 +1,72 @@ +--- +title: Exporting data from Vitess +weight: 18 +aliases: ['/docs/user-guides/exporting-data/'] +--- + +Since [VTGate](../../../concepts/vtgate/) supports the MySQL protocol, in many +cases it is possible to use existing client utilities when connecting to +Vitess. This includes using logical dump tools such as `mysqldump`, in +certain cases. + +This guide provides instructions on the required options when using these tools +against a VTGate server for the purposes of exporting data from Vitess. It is +recommended to follow the [Backup and Restore](../../operating-vitess/backup-and-restore/) guide +for regular backups, since this method is performed directly on the tablet +servers and is more efficient and safer for databases of any significant size. +The dump methods that follow are typically not suitable for production backups, +because Vitess does not implement all the locking constructs across a sharded +database that are necessary to do a consistent logical backup while writing +to the database. As a result, you will only be guaranteed to get a 100% +consistent dump using these tools if you are sure that you are not writing +to the database while running the dump. + +### mysqldump + +The default invocation of `mysqldump` attempts to execute statements which are [not supported by Vitess](../../../reference/compatibility/mysql-compatibility/), such as attempting to lock tables and dump GTID coordinates. The following options are required when using the `mysqldump` binary from MySQL 5.7 to export data from the `commerce` keyspace: + +* `--lock-tables=off`: VTGate currently prohibits the syntax `LOCK TABLES` and `UNLOCK TABLES`. +* `--set-gtid-purged=OFF`: `mysqldump` attemps to dump GTID coordinates of a server, but in the case of VTGate this does not make sense since it could be routing to multiple servers. +* `--no-tablespaces`: This option disables dumping InnoDB tables by tablespace. This functionality is not yet supported by Vitess. +* `....`: Additional mysqldump options like: `-u `, `-p `, `-h `. + +For example to export the `commerce` keyspace using the `mysqldump` binary from MySQL 5.7: + +```sh +$ mysqldump --set-gtid-purged=OFF --no-tablespaces .... commerce > commerce.sql +``` +{{< info >}} +Vitess' support for LOCK and UNLOCK statements is currently syntax-only. As a result, Vitess will simply ignore LOCK and UNLOCK statements without taking any underlying action. It is therefore *unsafe* to perform a locking mysqldump against a database that is actively being written to, and you should pause writes completely while performing the dump; or be willing to deal with any data inconsistencies that result. +{{< /info >}} + +**NOTE:** You will be limited by the Vitess row limits in the size of the +tables that you can dump using this method. The default Vitess row limit is +determined by the vttablet option `-queryserver-config-max-result-size` +and defaults to 10000 rows. So for an unsharded database, you will not be +able to dump tables with more than 10000 rows, or N x 10000 rows if the table +is fully sharded across N shards. Note that you should not blindly raise your +row limits just because of this, it is an important Vitess operability +and reliability feature. If you have large tables to dump, look into using +[go-mydumper](#go-mydumper) instead. + +To restore dump files created by `mysqldump`, replay it against a Vitess +server or other MySQL server using the `mysql` command line client. + +### go-mydumper + +Alternatively, you can use a slight modification of the `go-mydumper` tool +to export logical dumps of a Vitess keyspace. `go-mydumper` has the +advantage of being multi-threaded, and so can run faster on a database +that has many tables. For a database with just one or a handful of large +tables, `go-mydumper` may not be that much faster than `mysqldump`. + +For information on the Vitess-compatible fork of `go-mydumper`, see +https://github.com/aquarapid/go-mydumper . Examples and instructions +are available in the [README.md](https://github.com/aquarapid/go-mydumper/blob/jacques_vitess/README.md) +in that repo. You will need to be able to compile golang binaries +to use this tool. + +`go-mydumper` creates multiple files for each backup. To restore a +backup, you can use the `mysql` commandline client, but using the +`myloader` tool as described in the `go-mydumper` repo above is easier +and can be faster, since the loader is also multithreaded. diff --git a/content/en/docs/21.0/user-guides/configuration-basic/global-topo.md b/content/en/docs/21.0/user-guides/configuration-basic/global-topo.md new file mode 100644 index 000000000..75b6ea689 --- /dev/null +++ b/content/en/docs/21.0/user-guides/configuration-basic/global-topo.md @@ -0,0 +1,52 @@ +--- +title: Global TopoServer +weight: 4 +aliases: ['/docs/user-guide/topology-service/'] +--- + +The first component to bring up is the Global TopoServer. As mentioned before, this can be a zookeeper or etcd cluster. The servers will likely have to be distributed across data centers for resilience. Please refer to the corresponding documentation for instructions on how to configure and launch these servers. + +{{< info >}} +Vitess previously supported Consul as a TopoServer. However, it is now deprecated because Consul does not natively support the ability to connect to multiple servers from a single program. This is a prerequisite for multi-region deployments. +{{< /info >}} + +Vitess will store global metadata like keyspaces, shards and cells in the topserver. + +## Choosing a TopoRoot + +Vitess allows you to share the same global toposerver for multiple clusters. For example, you may want to run separate testing, staging and production clusters. + +To support this separation, we allow you to assign a root directory in the Topo for each cluster. This directory is known as the `topo_global_root` and will need to be provided as a command line flag to every Vitess component. + +{{< info >}} +In the case of ZooKeeper, you will also need to create this directory on the server. For etcd, the path will be automatically created on first write. +{{< /info >}} + +The following command line options are required for every Vitess component: + +```text +--topo_implementation=etcd2 --topo_global_server_address= --topo_global_root=/vitess/global +``` + +To avoid repetition we will use `` in our examples to signify the above flags. + +Note that the topo implementation for etcd is `etcd2`. This is because Vitess uses the v2 API of etcd. + +{{< info >}} +To be safe, you may want to bring up etcd with `--enable-v2=true`, even though it is the default value. Also, you will need to set the `ETCDCTL_API=2` environment variable before bringing up etcd. +{{< /info >}} + +## Moving to a different TopoServer + +It is generally not recommended that you migrate from one type of toposerver to another. However, if absolutely necessary, you can use the [topo2topo](../../../reference/features/topology-service/#migration-between-implementations) command line tool to perform this migration. + +## Backups + +It is important to periodically backup the data in the TopoServer. Although most of the information in the TopoServer can be manually reconstructed, it is still a painful task. This can be avoided if a recent backup was readily available. + +## Checklist + +* Ensure toposerver is up, and that you can set and get values using their provided client tools. +* Ensure you have the mechanism to include the correct topo flags for all the components: `--topo_implementation`, `--topo_global_server_address` and `--topo_global_root`. +* If using zookeeper, ensure the global root path is created. It may be beneficial to do the same for etcd also. +* Ensure that the servers are reachable from other parts of the system where Vitess components will be launched. diff --git a/content/en/docs/21.0/user-guides/configuration-basic/img/cell-in-topo.png b/content/en/docs/21.0/user-guides/configuration-basic/img/cell-in-topo.png new file mode 100644 index 0000000000000000000000000000000000000000..3d106ec19131002bff4c549bd102c829242b77c7 GIT binary patch literal 432242 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ⅆ5b>ajsCOL~ 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 z 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
    +fya4is;^gkeRIo3 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≥FHGxE6Qwn;f2Caj$kC5(4~$H@kS6@)#%~ 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਺ZTZHYs_dyzcpE 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 +If you run into issues or have questions, we recommend posting in our [#feat-vtadmin Slack channel](https://vitess.slack.com/archives/C01H307F68J). Click the Slack icon in the top right to join. This is a very active community forum and a great place to interact with other users. +{{< /info >}} + +## Get Started + +This guide describes how to configure and build the VTAdmin API server (`vtadmin`) and front-end (`vtadmin-web`). + +If you intend to use the Vitess operator to deploy VTAdmin please refer to [Running with Vitess Operator](../running_with_vtop). + +The simplest VTAdmin deployment involves a single Vitess cluster. You can look +at the [local example][local_example] for a +minimal invocation of the `vtadmin` and `vtadmin-web` binaries. + +### Prerequisites + +- Building `vtadmin-web` requires [node](https://nodejs.org/en/) at the version given in the [package.json file](https://github.com/vitessio/vitess/blob/main/web/vtadmin/package.json). + +### 1. Define the cluster configuration + +VTAdmin is mapped to one or more Vitess clusters two ways: + +- Add a `clusters.yaml` file and pass its path to `vtadmin` with the `--cluster-config` build flag +- Set the `--cluster` and/or `--cluster-defaults` flags when running `vtadmin`, described in the next section. + +When both command-line cluster configs and a config file are provided, any options for a given cluster on the command-line take precedence over options for that cluster in the config file. + +For a well-commented example enumerating the cluster configuration options, see [clusters.example.yaml](https://github.com/vitessio/vitess/blob/main/doc/vtadmin/clusters.yaml). + + +### 2. Configure `vtadmin` + +Configure the flags for the `vtadmin` process. The full list of flags is given in the [`vtadmin` reference documentation][vtadmin_flag_ref]. + +The following is from the [local example][local_example] showing a minimal set of flags. Here, we define the cluster configuration with the `--cluster` flag and use static (file-based) discovery configured in the [local example's `discovery.json` file][discovery_json]. + +``` +vtadmin \ + --addr ":14200" \ + --http-origin "https://vtadmin.example.com:14201" \ + --http-tablet-url-tmpl "http://{{ .Tablet.Hostname }}:15{{ .Tablet.Alias.Uid }}" \ + --tracer "opentracing-jaeger" \ + --grpc-tracing \ + --http-tracing \ + --logtostderr \ + --alsologtostderr \ + --no-rbac \ + --cluster "id=local,name=local,discovery=staticfile,discovery-staticfile-path=./vtadmin/discovery.json,tablet-fqdn-tmpl={{ .Tablet.Hostname }}:15{{ .Tablet.Alias.Uid }}" +``` + +To optionally configure role-based access control (RBAC), refer to the [RBAC documentation][rbac_docs]. + +### 3. Configure and build `vtadmin-web` + +Environment variables can be defined in a `.env` file or passed inline to the `npm run build` command. The full list of flags is given in the [`vtadmin-web` reference documentation][vtadmin_web_env_ref]. + +The following is from the [local example][local_example] showing a minimal set of environment variables. `$web_dir`, in this case, refers to the [`vtadmin-web` source directory][vtadmin_web_src] but could equally apply to the `web/vtadmin/` directory copied into a Docker container, for example. `VITE_VTADMIN_API_ADDRESS` uses the same hostname as the `--addr` flag passed to `vtadmin` in the previous step. + +``` +npm --prefix $web_dir --silent install + +VITE_VTADMIN_API_ADDRESS="https://vtadmin-api.example.com:14200" \ + VITE_ENABLE_EXPERIMENTAL_TABLET_DEBUG_VARS="true" \ + npm run --prefix $web_dir build +``` + +If you want to overwrite or set environment variables after the build you can use the `$web_dir/build/config/config.js` file. +For example: + +```javascript +window.env = { + 'VITE_VTADMIN_API_ADDRESS': "https://vtadmin-api.example.com:14200", + 'VITE_FETCH_CREDENTIALS': "omit", + 'VITE_ENABLE_EXPERIMENTAL_TABLET_DEBUG_VARS': true, + 'VITE_BUGSNAG_API_KEY': "", + 'VITE_DOCUMENT_TITLE': "", + 'VITE_READONLY_MODE': false, +}; +``` + +After running `build` command, the production build of the front-end assets will be in the `$web_dir/build` directory. They can be served as any other static content; for example, [Go's embed package][go_embed] or npm's [serve package][npm_serve]. Each filename inside of `$web_dir/build/assets` will contain a unique hash of the file contents. + +## Best Practices + +Now that you can build and run VTAdmin, there are a few best practices you should follow before deploying into production. +Because VTAdmin by definition has access to potentially-sensitive information about your clusters, it's important to ensure that only the right people have access to those resources. + +### Use Role-based Access Control (RBAC) + +VTAdmin provides RBAC to provide administrators a mechanism for controlling who can perfom what actions across their clusters. +Out of the box, having no RBAC configuration at all will allow anyone to do anything in any cluster, while an empty RBAC configuration will prevent anyone from doing anything in any cluster. + +It is strongly recommended to provide at least some minimal RBAC configuration when deploying VTAdmin. +When designing your particular configuration, it is best to apply the [principle of least privilege][principle_of_least_privilege]. +For example, you should avoid applying a `*` actor to a write action, or a `*` action to resources that are subject to write actions. + +For further reading on VTAdmin's RBAC design, please refer to the [reference page][rbac_docs]. + +### Deploy in a trusted environment + +There is no trust boundary between `vtadmin-web` and `vtadmin-api`, with deployment-specific authentication mechanisms being left to the operator to design for their specific environment. +As such, you should deploy VTAdmin **within** a trusted environment, for example, behind a single sign-on (SSO) integration, such as [okta](https://developer.okta.com/docs/guides/sign-into-web-app-redirect/go/main/). + +[discovery_json]: https://github.com/vitessio/vitess/blob/main/examples/local/vtadmin/discovery.json +[go_embed]:https://pkg.go.dev/embed +[local_example]: https://github.com/vitessio/vitess/blob/main/examples/local/scripts/vtadmin-up.sh +[npm_serve]: https://www.npmjs.com/package/serve +[principle_of_least_privilege]: https://csrc.nist.gov/glossary/term/least_privilege#:~:text=Definition(s)%3A,needs%20to%20perform%20its%20function. +[rbac_docs]: ../role-based-access-control +[vtadmin_flag_ref]: ../../programs/vtadmin +[vtadmin_web_env_ref]: ../../programs/vtadmin-web +[vtadmin_web_src]: https://github.com/vitessio/vitess/tree/main/web/vtadmin +[web_caching]: https://create-react-app.dev/docs/production-build/#static-file-caching diff --git a/content/en/docs/21.0/reference/vtadmin/role-based-access-control.md b/content/en/docs/21.0/reference/vtadmin/role-based-access-control.md new file mode 100644 index 000000000..6ea5ab0a9 --- /dev/null +++ b/content/en/docs/21.0/reference/vtadmin/role-based-access-control.md @@ -0,0 +1,270 @@ +--- +title: Role-Based Access Control +--- + +# Overview + +VTAdmin provides an (optional) role-based access control (RBAC) system for deployments that need to, or would like to, restrict access to specific resources to specific users. + +In VTAdmin, RBAC is governed by two distinct layers: +- **Authentication**: Given a request, determine _who_ is attempting to take an action on a resource +- **Authorization**: Given an actor (obtained from the authentication layer), determine if that actor is allowed to take a certain action on a certain resource. + +Let's discuss each in turn. + +## Authentication + +VTAdmin uses a plugin-based architecture for deployments to provide their own authentication implementation specific to their environment and needs. + +The authentication plugin is installed as both an HTTP middleware and gRPC interceptor, and must implement the following [interface][authn_interface]: + +```go +type Authenticator interface { + // Authenticate returns an Actor given a context. This method is called + // from the stream and unary grpc server interceptors, and are passed the + // stream and request contexts, respectively. + // + // Returning an error from the authenticator will fail the request. To + // denote an authenticated request, return (nil, nil) instead. + Authenticate(ctx context.Context) (*Actor, error) + // AuthenticateHTTP returns an actor given an http.Request. + // + // Returning an error from the authenticator will fail the request. To + // denote an authenticated request, return (nil, nil) instead. + AuthenticateHTTP(r *http.Request) (*Actor, error) +} +``` +
    + +If running with an authentication plugin installed, VTAdmin will invoke its `Authenticate` method on all incoming gRPC requests, and its `AuthenticateHTTP` method on all incoming HTTP requests. + +Returning an error from either of these methods will fail the request with an `UNAUTHENTICATED` code for gRPC requests and an `UNAUTHORIZED` response for HTTP requests. +In order to indicate "no authenticated actor" to the authorization layer, the methods must return `(nil, nil)` instead. + +### Available Plugins + +VTAdmin currently provides no authentication plugins out of the box, though this may change in future releases. + +However, users are free to define their own implementations suited to the needs of their specific deployment and environment. +As an example, [here][example_authn] is an authentication plugin that extracts a "user" key from an HTTP cookie or gRPC incoming metadata. + +### Installing Plugins + +VTAdmin supports two ways of installing an authentication plugin. + +For universal support, users may recompile `vtadmin-api` after adding their authentication plugin file within `go/vt/vtadmin/rbac/plugin_.go`. +If following this process, you must ensure to call `RegisterAuthenticator("your_authn_name", yourAuthnConstructor())` in an `init` function. +This is the pattern followed by other components of Vitess; [tracing plugins][jaeger_plugin_example] are one of many you can refer to. + +If you plan to run `vtadmin-api` on Linux, FreeBSD, or macOS, you can also install your authentication plugin using the [Go plugin API][go_plugin_pkg_docs]. +If following this process, your Authenticator must be built with `go build -buildmode=plugin`, and its `main` package must expose a function of the following name and type: + +```go +package main + +import "vitess.io/vitess/go/vt/vtadmin/rbac" + +func NewAuthenticator() rbac.Authenticator { return ... /* your implementation here */ } +``` + +### Configuration + +Finally, to instruct VTAdmin to use your Authenticator, specify its name in the `"authenticator"` key in your `rbac.yaml`: + +```yaml +authenticator: "./path/to/your_authn_name.so" # or just "your_authn_name" (see below) +``` +
    + +If the name ends in `.so`, VTAdmin will assume it is a Go plugin (the second option described in the previous section). +VTAdmin will attempt to open the plugin and find a function named `NewAuthenticator` that returns an `rbac.Authenticator` implementation. +If any of this fails, VTAdmin will refuse to start; attempting to use this option on platforms not supported by the Go plugin API will result in undefined behavior. + +Otherwise, VTAdmin will assume it was (re-)compiled with a `plugin_.go` file that invoked `RegisterAuthenticator` with that name. +If there is no plugin registered with that name, VTAdmin will refuse to start. + +## Authorization + +Unlike authentication, which occurs at the incoming request boundary (both HTTP and gRPC), authorization happens within the `vtadmin.API` layer itself. + +In each method, the API extracts any `Actor` from the authentication layer, and performs one or more checks to see if that actor is allowed to perform the actions necessary to fulfill the request. +We'll go over how this works in more detail, but as an example, here's a snippet of the `GetClusters` handler: + +```go +func (api *API) GetClusters(ctx context.Context, req *vtadminpb.GetClustersRequest) (*vtadminpb.GetClustersResponse, error) { + clusters, _ := api.getClustersForRequest(nil) // `nil` implies "all clusters" + resp := &vtadminpb.GetClustersResponse{ + Clusters: make([]*vtadminpb.Cluster, 0, len(clusters)), + } + + for _, c := range clusters { + if !api.authz.IsAuthorized(ctx, c.ID, rbac.ClusterResource, rbac.GetAction) { + continue + } + + resp.Clusters = append(resp.Clusters, &vtadminpb.Cluster{ + Id: c.ID, + Name: c.Name, + }) + } + + return resp, nil +} +``` +
    + +First, it's necessary to note that there's a shim layer in the HTTP/gRPC middlewares that puts any `Actor` from an authentication plugin into the `ctx` that gets passed to the method you see here. +The details of how this works are not particularly relevant to this documentation, but you can refer to [these][http_authn_handler] [files][grpc_authn_interceptors] if you would like to learn more. + +Second, it is possible to run VTAdmin with authorization but without an authentication plugin installed. +If you do this, all requests will implicitly be made by the "unauthenticated" actor, and therefore may only access resources that permit the wildcard `Subject` (more on RBAC configs in a bit!). + +Third, and most important: note that being unauthorized to access to a `(cluster, resource, action)` **does not fail the overall request**. +If a request involves multiple clusters, and the actor is permitted to access a subset of them, the request will proceed for those clusters. +If a user tries to access a cluster they are not permitted to, **including a cluster that does not exist**, they will be unable to tell if +(1) there is simply no data; (2) they do not have access to the cluster; or (3) the cluster exists at all. +This is by design, to prevent a malicious actor from being able to enumerate resources by brute force and interpreting the authorization failure responses. + +### Configuration + +Authorization rules are specified as a list under the `rules` key of your `rbac.yaml` configuration file. +Each rule is a 4-key map, corresponding to the 4-tuple of `(resource, cluster, subject, action)`. + +In order to allow more consisely-expressed configurations, each "rule" element actually takes a list of `clusters`, `subjects`, and `actions` (**but only a singular `resource`!**), as well as a wildcard (`*`) to stand in for "any {resource|cluster|subject|action}". +At startup, `vtadmin-api` will expand these rulesets and wildcards into the individual 4-tuples discussed previously. + +#### Example + +For example, take the following configuration: + +```yaml +rules: + - resource: "*" + actions: + - "get" + - "ping" + subjects: ["*"] + clusters: ["*"] + + - resource: "*" + actions: + - "create" + - "delete" + - "put" + subjects: + - "user:andrew" + - "role:admin" + clusters: ["*"] + + - resource: "Shard" + actions: + - "emergency_failover_shard" + - "planned_failover_shard" + subjects: + - "role:admin" + clusters: + - "local" +``` + +This permits the following: +1. Any subject can `get` or `ping` any resource in any cluster. +2. Any user with the name "andrew" or role of "admin" can `create`, `delete`, or `put` any resource in any cluster. +3. Any user with the role of "admin" can perform both emergency and planned failover operations on a `Shard` in _only_ the cluster with the id of "local". + +### Clusters and Subjects + +`cluster` and `subject` values depend entirely on the details of your particular vtadmin deployment. +Possible values for `cluster`, aside from the wildcard, are the `id` of any cluster you inform `vtadmin-api` of (either via flags at start time or dynamically). + +`subject` values should be prefixed with either `user:` or `role:`. +In the case of `user:`, vtadmin's authorization check will verify the actor's `Name` value matches. +In the case of `role:`, it will verify that one of the actor's `Roles` values matches. +In code: + +```go +func (r *Rule) Allows(clusterID string, action Action, actor *Actor) bool { + if r.clusters.HasAny("*", clusterID) { + if r.actions.HasAny("*", string(action)) { + if r.subjects.Has("*") { + return true + } + + if actor == nil { + return false + } + + if r.subjects.Has(fmt.Sprintf("user:%s", actor.Name)) { + return true + } + + for _, role := range actor.Roles { + if r.subjects.Has(fmt.Sprintf("role:%s", role)) { + return true + } + } + } + } + + return false +} +``` + +Note that if you are using just authorization without authentication, you must use the wildcard subject in your rules. + +### Resources and Actions + +The following table lists all current resources vtadmin has, and the actions that can be performed on them. +Note that it's technically possible to specify a rule for an action that cannot actually be performed on a particular resource (e.g. an action of `planned_failover_shard` on a resource of `Schema`), but this has no effect on the rest of your rules. + +| API | Rule(s) Needed `(, )` form | +| :--- | :--- | +| `CreateKeyspace` | `(create, Keyspace)` | +| `CreateShard` | `(create, Shard)` | +| `DeleteKeyspace` | `(delete, Keyspace)` | +| `DeleteShards` | `(delete, Shard)` | +| `DeleteTablet` | `(delete, Tablet)` | +| `EmergencyFailoverShard` | `(emergency_failover_shard, Shard)` | +| `FindSchema` | `(get, Schema)` | +| `GetBackups` | `(get, Backup)` | +| `GetCellInfos` | `(get, CellInfo)` | +| `GetCellsAliases` | `(get, CellsAlias)` | +| `GetClusters` | `(get, Cluster)` | +| `GetGates` | `(get, VTGate)` | +| `GetKeyspace` | `(get, Keyspace)` | +| `GetKeyspaces` | `(get, Keyspace)` | +| `GetSchema` | `(get, Schema)` | +| `GetSchemas` | `(get, Schema)` | +| `GetShardReplicationPositions` | `(get, ShardReplicationPosition)` | +| `GetSrvVSchema` | `(get, SrvVSchema)` | +| `GetSrvVSchemas` | `(get, SrvVSchema)` | +| `GetTablet` | `(get, Tablet)` | +| `GetTablets` | `(get, Tablet)` | +| `GetVSchema` | `(get, VSchema)` | +| `GetVSchemas` | `(get, VSchema)` | +| `GetVtctlds` | `(get, Vtctld)` | +| `GetWorkflow` | `(get, Workflow)` | +| `GetWorkflows` | `(get, Workflow)` | +| `PingTablet` | `(ping, Tablet)` | +| `PlannedFailoverShard` | `(planned_failover_shard, Shard)` | +| `RefreshState` | `(put, Tablet)` | +| `RefreshTabletReplicationSource` | `(refresh_tablet_replication_source, Tablet)` | +| `ReloadSchemas` | `(reload, Schema)` | +| `RunHealthCheck` | `(get, Tablet)` | +| `SetReadOnly` | `(manage_tablet_writability, Tablet)` | +| `SetReadWrite` | `(manage_tablet_writability, Tablet)` | +| `StartReplication` | `(manage_tablet_replication, Tablet)` | +| `StopReplication` | `(manage_tablet_replication, Tablet)` | +| `TabletExternallyPromoted` | `(tablet_externally_promoted, Shard)` | +| `VTExplain` | `(get, VTExplain)` | +| `ValidateKeyspace` | `(put, Keyspace)` | +| `ValidateSchemaKeyspace` | `(put, Keyspace)` | +| `ValidateVersionKeyspace` | `(put, Keyspace)` | + +[authn_interface]: https://github.com/vitessio/vitess/blob/46cb4679c198c96fbe7b51f40219d8196f4284a7/go/vt/vtadmin/rbac/authentication.go#L34-L50 +[example_authn]: https://gist.github.com/ajm188/5b2c7d3ca76004a297e6e279a54c2299 + +[jaeger_plugin_example]: https://github.com/vitessio/vitess/blob/46cb4679c198c96fbe7b51f40219d8196f4284a7/go/trace/plugin_jaeger.go#L32-L36 +[go_plugin_pkg_docs]: https://pkg.go.dev/plugin + +[http_authn_handler]: https://github.com/vitessio/vitess/blob/01eab00275bbd73855c8c92876f73deb7ef62259/go/vt/vtadmin/http/handlers/authentication.go#L25-L42 +[grpc_authn_interceptors]: https://github.com/vitessio/vitess/blob/01eab00275bbd73855c8c92876f73deb7ef62259/go/vt/vtadmin/rbac/authentication.go#L52-L88 diff --git a/content/en/docs/21.0/reference/vtadmin/running_with_vtop.md b/content/en/docs/21.0/reference/vtadmin/running_with_vtop.md new file mode 100644 index 000000000..bad090be0 --- /dev/null +++ b/content/en/docs/21.0/reference/vtadmin/running_with_vtop.md @@ -0,0 +1,72 @@ +--- +title: Running with Vitess Operator +description: How to configure Vitess Kubernetes Operator to run VTAdmin +--- + +## Get Started + +{{< info >}} +VTAdmin only runs in a single Vitess cluster configuration in the Vitess operator. +{{< /info >}} + +Please also read the [Operator's Guide](../operators_guide) to learn more about configurations available and how to use them. + +## Compatibility + +Support for deploying VTAdmin in Vitess Operator has been added in [release 2.7.1](https://github.com/planetscale/vitess-operator/releases/tag/v2.7.1) onwards. + +## Overview + +Vitess Operator deploys VTAdmin in two separate containers running on the same pod. One for running the `vtadmin-api` and one for `vtadmin-web`. Please look at the [architecture docs](../architecture) for details on how they interact with each other. + +Vitess Operator then creates services on top of both `vtadmin-api` and `vtadmin-web`, which can be used to access them after either port-forwarding or assigning an external IP address to the service. + +Finally, Vitess Operator creates the `discovery.json` file automatically which is needed to connect to `vtctld` and `vtgate` services. It connects to the global `vtctld` service and per-cell service of `vtgates`, both of which Vitess Operator creates automatically. No configuration from the users is required for discovering these components. + +## Configuring VTAdmin in Vitess Operator + +The VTAdmin configuration section lives at the same level as the `vtctld` configuration in the cluster specification. + +The following options are available for configuring VTAdmin: + +- `RBAC` is a secret source. It is the role-based access control rules to use for VTAdmin API. More information on role-based access control can be found [here](../role-based-access-control). +- `Cells` is a list of strings. It is the cells where VTAdmin must be deployed. Defaults to deploying instances of VTAdmin in all cells. +- `APIAddresses` as a list of strings. Since the VTAdmin web UI runs on the client side, it needs the API address to use to query the API. We can't use the internal kubernetes service address or the ip of the pod, since they aren't visible outside the cluster. The API Address must be provided by the user based on how they export the service of VTAdmin API. In our example configuration (see below) we port-forward the service to port `14001` and therefore that is the address provided there. This value is a list because the address to be used for VTAdmin web in each cell might be different. If only 1 value is provided then, that is used for all the cells. The ideal way to deploy this would be to export each individual VTAdmin service (that we create) in each cell and attach external IPs to them and provide those IPs here. +- `Replicas` - Number of VTAdmin deployments required per cell. We setup a service on top of the web and API connections, so load-balancing comes out of the box. +- `WebResources` - Resource requests and limits for the container running the VTAdmin web server. +- `APIResources` - Resource requests and limits for the container running the VTAdmin API server. +- `ReadOnly` - Configuration to set the VTAdmin web UI to be read-only. + +Apart from the VTAdmin configuration, the image to use for the containers also needs to be provided. Currently `vitess/lite` image doesn't contain the binaries to deploy vtadmin, so the more specific `vitess/vtadmin` image needs to be used. + +## Example Configuration + +The VTAdmin configuration that is used in Vitess Operator [end to end tests](https://github.com/planetscale/vitess-operator/tree/main/test/endtoend) looks like: + +```yaml +spec: + images: + vtadmin: vitess/vtadmin:latest + vtadmin: + rbac: + name: example-cluster-config + key: rbac.yaml + cells: + - zone1 + apiAddresses: + - http://localhost:14001 + replicas: 1 + readOnly: false + apiResources: + limits: + memory: 128Mi + requests: + cpu: 100m + memory: 128Mi + webResources: + limits: + memory: 128Mi + requests: + cpu: 100m + memory: 128Mi +``` diff --git a/content/en/docs/21.0/reference/vtadmin/vtctld-api-transition.md b/content/en/docs/21.0/reference/vtadmin/vtctld-api-transition.md new file mode 100644 index 000000000..b41cbbdf9 --- /dev/null +++ b/content/en/docs/21.0/reference/vtadmin/vtctld-api-transition.md @@ -0,0 +1,55 @@ +--- +title: vtctld API Transition +weight: 3 +--- + +The following table highlights old vtctld API methods and their counterparts in the newer VTAdmin API. + +Some methods do not have a 1:1 mapping from vtctld to VTAdmin. These cases include: +- vtctld methods that are split out into many different VTAdmin methods (ex. keyspace and tablet action methods) +- vtctld methods that are not supported in VTAdmin (ex. executing a vtctl command) +- vtctld methods that we plan to support, but do not currently support, in VTAdmin +- VTAdmin methods that were not supported by vtctld API; noted here because they may be useful + +One of the main differences between vtctld and VTAdmin API is that VTAdmin API returns results across all clusters discovered by VTAdmin [cluster discovery](https://vitess.io/docs/17.0/reference/vtadmin/cluster_discovery/). VTAdmin API methods that accept a `cluster_id` parameter are methods that will return results from all clusters, unless the aforementioned filter parameter is provided. +## vtctld and VTAdmin API methods + +| Summary | `vtctld` API (old) | `vtctld` params (old) | `vtadmin` API (new) | `vtadmin` params (new)| Notes | +| -------- | ------ | -------- | ------ | -------- | -------- | +| Get cells | GET `/cells` | - | GET `/api/cells` | - | - | +| Get keyspaces | GET `/keyspaces` | - | GET `/api/keyspaces` |