From c368a58bce83a0d9610c2af15ad826c1b0e83385 Mon Sep 17 00:00:00 2001 From: Yugabyte CI Date: Wed, 11 Sep 2024 23:25:42 -0700 Subject: [PATCH] [BACKPORT pg15-cherrypicks] all: Bulk port from master - 98 Summary: f5ad1fbf1f [#23855] Fixing the calculation of automatic refactoring count. eed826d77b [#22519] YSQL: Move ExplicitRowLockBuffer class into separate file 99a27e6c84 [PLAT-14522] Taking yba-ctl backups with prometheus HTTPS e2a84b02ca [PLAT-15044] Add preflight check for node addition in provider 7e40d894ca [#20769] XCluster: Dynamically apply cdc_wal_retention_time_secs for XCluster aa41478c1a [#23858] build: fix ./yb_build.sh release --gcc11 bcf7f4753c [PLAT-13910] Improve IAM credentials fetch logging and add retries 303a202966 [#23778] xCluster: Remove the capability to rename xCluster replication groups Excluded: 58fd26e7bc [#23652] YSQL: Fix TestPgRegressAnalyze.java timeout / database drop failure on TSAN build 31da65bbe2 [doc] yb_enable_bitmapscan flag (#23854) 798db14af2 [#20335] DocDB: Use MonoClock for write query metric 80779d8bcc [#23860] xCluster: Add automatic ddl mode proto fields afd763dfff Revert "Revert "[PLAT-14786] Add support to node_agent install to use bind ip and node_external_fqdn"" e86951a64e [#23841] docdb: Disable stack trace tracking in TSAN builds d6006083fd [PLAT-15244] Fix schedule not getting updated on edit schedule API call 3c0df096c1 [PLAT-15214][PLAT-15232]YBC version upgrade to 2.2.0.0-b6 and enable YBC verbose by default aa7372e0fc [#23478] YSQL: fix connection manager session variable case sensitivity issue 0d53558835 [PLAT-14810][PLAT-14811][YBA CLI] Support adding and editing EIT configurations ffa537ef88 [PLAT-10706][dr] Support retry-ability of failover and switchover Excluded: 5ae45580de [#23578] YSQL: Add HELP and TYPE to :13000/prometheus-metrics 3aa7459373 [PLAT-15016] Handle gflag_group changes for ENHANCED_PG_COMPATIBILITY group in 2024.1.3 c89356c684 [PLAT-10592][YBA] Changes to support global tserver/master service in K8s 7fc3b761dd [#3893] YCQL: Align 2 system_schema.* tables with Cassandra da6274e154 [23646] Test Stability: Fix PgMiniTest.FollowerReads 5fa6dc9527 [PLAT-15180][Platform][UI][PITR]Create Restore Backup modal be0d1d19bc [PLAT-15247][Platform][Backup]Create Backup scheduled policy List Test Plan: Jenkins: rebase: pg15-cherrypicks Reviewers: jason, tfoucher Subscribers: yql Differential Revision: https://phorge.dev.yugabyte.com/D37981 --- .../postgresql-compatibility.md | 8 +- .../reference/configuration/yb-tserver.md | 17 +- .../postgresql-compatibility.md | 8 +- .../reference/configuration/yb-tserver.md | 17 +- .../AlterUniverseReplicationRequest.java | 2 +- .../java/org/yb/cql/TestSystemTables.java | 64 +- managed/RUNTIME-FLAGS.md | 6 +- managed/build.sbt | 2 +- managed/devops/bin/yb_platform_backup.sh | 65 +- managed/node-agent/cli/node/configure.go | 73 +- .../resources/node-agent-installer.sh | 10 + .../resources/node-agent-provision.yaml | 1 + .../resources/ynp/configs/config.j2 | 3 +- .../provision/node_agent/node_agent.py | 47 +- .../node_agent/templates/precheck.j2 | 66 ++ .../provision/node_agent/templates/run.j2 | 12 +- .../yw/commissioner/AbstractTaskBase.java | 34 +- .../yw/commissioner/UserTaskDetails.java | 13 + .../yw/commissioner/XClusterScheduler.java | 4 +- .../commissioner/tasks/CreatePitrConfig.java | 12 +- .../tasks/CreateXClusterConfig.java | 347 ++++++---- .../yw/commissioner/tasks/DeleteDrConfig.java | 16 +- .../tasks/DestroyKubernetesUniverse.java | 26 + .../yw/commissioner/tasks/EditDrConfig.java | 17 +- .../tasks/EditDrConfigParams.java | 19 - .../tasks/EditKubernetesUniverse.java | 9 + .../tasks/EditXClusterConfig.java | 15 +- .../commissioner/tasks/FailoverDrConfig.java | 226 ++++--- .../tasks/KubernetesTaskBase.java | 137 ++-- .../ReadOnlyKubernetesClusterDelete.java | 8 + .../tasks/RestartXClusterConfig.java | 26 +- .../tasks/RestoreSnapshotSchedule.java | 142 ++-- .../tasks/SwitchoverDrConfig.java | 187 +++--- .../tasks/UniverseDefinitionTaskBase.java | 24 + .../commissioner/tasks/UniverseTaskBase.java | 91 ++- .../tasks/XClusterConfigTaskBase.java | 107 ++- .../HandleKubernetesNamespacedServices.java | 181 +++++ .../subtasks/KubernetesCommandExecutor.java | 115 +++- .../tasks/subtasks/TransferXClusterCerts.java | 2 + .../AddNamespaceToXClusterReplication.java | 152 ++--- .../subtasks/xcluster/BootstrapProducer.java | 196 +++--- .../subtasks/xcluster/ChangeXClusterRole.java | 88 +-- .../CreateOutboundReplicationGroup.java | 127 ++-- .../subtasks/xcluster/DeleteBootstrapIds.java | 2 +- .../xcluster/DeleteReplicationOnSource.java | 38 +- .../xcluster/ReplicateNamespaces.java | 29 +- .../tasks/subtasks/xcluster/SetDrStates.java | 8 +- .../xcluster/WaitForReplicationDrain.java | 46 +- ...ddNamespaceToOutboundReplicationGroup.java | 111 ++- .../XClusterConfigSetStatusForNamespaces.java | 1 + .../xcluster/XClusterConfigSetup.java | 156 +++-- .../xcluster/XClusterDbReplicationSetup.java | 142 ++-- .../upgrade/KubernetesOverridesUpgrade.java | 7 + .../java/com/yugabyte/yw/common/AWSUtil.java | 7 +- .../yw/common/CustomerTaskManager.java | 10 + .../yugabyte/yw/common/DrConfigStates.java | 7 +- .../IAMTemporaryCredentialsProvider.java | 171 +++-- .../yugabyte/yw/common/KubernetesManager.java | 36 +- .../yugabyte/yw/common/KubernetesUtil.java | 634 +++++++++++++++++- .../yw/common/NativeKubernetesManager.java | 66 +- .../com/yugabyte/yw/common/NodeManager.java | 6 - .../yw/common/ShellKubernetesManager.java | 120 +++- .../yw/common/UnrecoverableException.java | 17 + .../yw/common/config/GlobalConfKeys.java | 10 + .../yw/common/config/UniverseConfKeys.java | 39 +- .../yugabyte/yw/common/gflags/GFlagsUtil.java | 9 +- .../yw/common/gflags/GFlagsValidation.java | 30 +- .../yw/controllers/CertificateController.java | 7 + .../yw/controllers/DrConfigController.java | 119 ++-- .../handlers/UniverseCRUDHandler.java | 21 + .../yugabyte/yw/forms/DrConfigTaskParams.java | 23 +- .../KubernetesOverridesUpgradeParams.java | 10 + .../forms/UniverseDefinitionTaskParams.java | 6 + .../yw/forms/XClusterConfigTaskParams.java | 66 +- .../java/com/yugabyte/yw/models/DrConfig.java | 32 +- .../java/com/yugabyte/yw/models/Restore.java | 9 + .../java/com/yugabyte/yw/models/Schedule.java | 10 +- .../yugabyte/yw/models/XClusterConfig.java | 15 +- .../yw/models/XClusterNamespaceConfig.java | 2 + .../yw/models/XClusterTableConfig.java | 36 +- .../yw/models/helpers/CommonUtils.java | 2 +- .../yugabyte/yw/models/helpers/TaskType.java | 3 + ...XCluster_Tables_Add_State_Retryability.sql | 25 + .../gflag_groups/2024.1.3/gflag_groups.json | 13 + managed/src/main/resources/reference.conf | 10 +- .../src/main/resources/swagger-strict.json | 57 +- managed/src/main/resources/swagger.json | 57 +- .../yw/commissioner/TaskExecutorTest.java | 4 +- .../tasks/CreateXClusterConfigTest.java | 42 +- .../tasks/DestroyKubernetesUniverseTest.java | 35 +- .../tasks/EditKubernetesUniverseTest.java | 6 + .../tasks/EditXClusterConfigTest.java | 42 +- .../KubernetesCommandExecutorTest.java | 2 + .../yw/common/KubernetesManagerTest.java | 6 +- .../yugabyte/yw/common/NodeManagerTest.java | 3 - .../controllers/DrConfigControllerTest.java | 17 +- .../controllers/MetaMasterControllerTest.java | 31 +- .../UniverseCreateControllerTestBase.java | 17 + .../com/yugabyte/yw/models/ScheduleTest.java | 23 +- managed/ui/package-lock.json | 256 +++++++ managed/ui/package.json | 2 + .../src/components/backupv2/common/IBackup.ts | 6 +- .../backupv2/common/IBackupSchedule.ts | 1 + .../backupv2/components/BackupList.tsx | 42 +- .../components/xcluster/ReplicationUtils.tsx | 1 + .../xcluster/XClusterConfigStatusLabel.tsx | 9 + .../ui/src/components/xcluster/constants.ts | 3 +- .../components/YBTimePicker/YBTimePicker.tsx | 53 ++ .../backup/restore/BackupRestoreModal.tsx | 193 ++++++ .../features/backup/restore/RestoreUtils.tsx | 99 +++ .../backup/restore/SwitchRestorePages.tsx | 51 ++ .../restore/ValidationSchemaResolver.ts | 180 +++++ .../features/backup/restore/api/api.ts | 89 +++ .../backup/restore/models/RestoreContext.ts | 175 +++++ .../backup/restore/models/RestoreFormModel.ts | 93 +++ .../restore/pages/Prefetch/PrefetchData.tsx | 88 +++ .../pages/RenameKeyspace/RenameKeyspace.tsx | 217 ++++++ .../pages/RestoreFinal/RestoreFinal.tsx | 168 +++++ .../pages/RestoreSource/RestoreSource.tsx | 115 ++++ .../RestoreSource/RestoreTimeFrameUtils.tsx | 109 +++ .../pages/RestoreSource/SelectDBAndTables.tsx | 224 +++++++ .../pages/RestoreSource/SelectTimeframe.tsx | 248 +++++++ .../backup/restore/pages/RestoreSummary.tsx | 136 ++++ .../pages/RestoreTarget/ParallelThreads.tsx | 40 ++ .../RestoreTarget/RenameKeyspaceOption.tsx | 54 ++ .../RestoreTablespaceNotSupported.tsx | 215 ++++++ .../RestoreTablespacesOption.tsx | 88 +++ .../pages/RestoreTarget/RestoreTarget.tsx | 175 +++++ .../restore/pages/RestoreTarget/SelectKMS.tsx | 163 +++++ .../pages/RestoreTarget/SelectUniverse.tsx | 134 ++++ .../backup/scheduled/ScheduledBackupList.tsx | 133 +++- .../features/backup/scheduled/api/api.ts | 40 +- .../BackupFrequency/BackupFrequencyField.tsx | 4 +- .../pages/BackupObjects/BackupObjects.tsx | 12 +- .../pages/BackupObjects/SelectTables.tsx | 3 +- .../pages/BackupSummary/BackupSummary.tsx | 24 +- .../list/EditScheduledPolicyModal.tsx | 206 ++++++ .../ScheduledBackupShowIntervalsModal.tsx | 111 +++ .../backup/scheduled/list/ScheduledCard.tsx | 408 +++++++++++ .../list/ScheduledPolicyShowTables.tsx | 59 ++ managed/ui/src/translations/en.json | 109 ++- .../backup/schedule/delete_backup_schedule.go | 2 +- managed/yba-cli/cmd/ear/aws/create_ear.go | 12 +- managed/yba-cli/cmd/ear/azu/create_ear.go | 12 +- .../yba-cli/cmd/ear/earutil/createearutil.go | 16 + managed/yba-cli/cmd/ear/gcp/create_ear.go | 12 +- .../yba-cli/cmd/ear/hashicorp/create_ear.go | 12 +- .../yba-cli/cmd/eit/customca/create_eit.go | 131 ++++ .../yba-cli/cmd/eit/customca/customca_eit.go | 3 +- .../yba-cli/cmd/eit/eitutil/createeitutil.go | 91 +++ .../yba-cli/cmd/eit/eitutil/updateeitutil.go | 147 ++++ .../yba-cli/cmd/eit/hashicorp/create_eit.go | 111 +++ .../cmd/eit/hashicorp/hashicorp_eit.go | 4 +- .../yba-cli/cmd/eit/hashicorp/update_eit.go | 72 ++ .../cmd/eit/k8scertmanager/create_eit.go | 68 ++ .../eit/k8scertmanager/k8scertmanager_eit.go | 3 +- .../yba-cli/cmd/eit/selfsigned/create_eit.go | 86 +++ .../cmd/eit/selfsigned/selfsigned_eit.go | 3 +- managed/yba-cli/docs/yba_eit_custom-ca.md | 1 + .../yba-cli/docs/yba_eit_custom-ca_create.md | 43 ++ managed/yba-cli/docs/yba_eit_hashicorp.md | 2 + .../yba-cli/docs/yba_eit_hashicorp_create.md | 42 ++ .../yba-cli/docs/yba_eit_hashicorp_update.md | 38 ++ .../yba-cli/docs/yba_eit_k8s-cert-manager.md | 1 + .../docs/yba_eit_k8s-cert-manager_create.md | 38 ++ managed/yba-cli/docs/yba_eit_self-signed.md | 1 + .../docs/yba_eit_self-signed_create.md | 39 ++ managed/yba-cli/go.mod | 2 +- managed/yba-cli/go.sum | 2 + managed/yba-cli/internal/client/eit.go | 14 + .../internal/formatter/eit/eit_full.go | 24 +- .../internal/formatter/hashicorp/hashicorp.go | 2 +- managed/yba-installer/cmd/backup.go | 24 +- managed/yba-installer/pkg/common/shell/run.go | 17 + src/odyssey/sources/cron.c | 4 +- src/odyssey/third_party/kiwi/kiwi/var.h | 38 +- src/postgres/src/include/nodes/ybtidbitmap.h | 2 +- src/yb/cdc/cdc_service.cc | 2 +- src/yb/cdc/xcluster_producer-test.cc | 12 +- src/yb/client/xcluster_client.cc | 11 +- src/yb/client/xcluster_client.h | 5 +- src/yb/client/xcluster_client_mock.h | 2 +- src/yb/consensus/log.cc | 28 +- src/yb/consensus/log.h | 7 +- .../integration-tests/cdc_service-int-test.cc | 106 ++- .../integration-tests/cdc_service-txn-test.cc | 34 +- src/yb/integration-tests/cdc_test_util.cc | 8 +- .../xcluster/xcluster-tablet-split-itest.cc | 2 + .../xcluster/xcluster-test.cc | 34 +- .../xcluster/xcluster_consistency-test.cc | 4 - .../xcluster_ddl_replication_test_base.h | 8 + ...luster_outbound_replication_group-itest.cc | 38 +- .../xcluster/xcluster_ysql_test_base.cc | 5 +- .../xcluster/xcluster_ysql_test_base.h | 5 +- src/yb/master/catalog_entity_info.proto | 5 + src/yb/master/catalog_manager.h | 9 - src/yb/master/master_replication.proto | 11 +- ...er_inbound_replication_group_setup_task.cc | 32 +- ...ter_inbound_replication_group_setup_task.h | 9 +- src/yb/master/xcluster/xcluster_manager.cc | 21 +- ...cluster_outbound_replication_group-test.cc | 10 +- .../xcluster_outbound_replication_group.cc | 10 +- .../xcluster_outbound_replication_group.h | 2 + .../xcluster/xcluster_source_manager.cc | 16 +- .../master/xcluster/xcluster_source_manager.h | 13 +- src/yb/master/xcluster/xcluster_status.h | 1 + .../xcluster/xcluster_target_manager.cc | 5 + ...uster_universe_replication_alter_helper.cc | 51 +- ...luster_universe_replication_alter_helper.h | 5 - src/yb/master/xrepl_catalog_manager.cc | 71 +- src/yb/master/yql_aggregates_vtable.cc | 6 +- src/yb/master/yql_functions_vtable.cc | 10 +- src/yb/tablet/write_query.cc | 5 +- src/yb/tablet/write_query.h | 2 +- .../tools/yb-admin-snapshot-schedule-test.cc | 2 +- src/yb/tools/yb-admin-xcluster-test.cc | 59 -- src/yb/tools/yb-admin_cli.cc | 10 +- src/yb/tools/yb-admin_client.cc | 7 +- src/yb/tools/yb-admin_client.h | 3 +- src/yb/tserver/pg_client_session.cc | 2 +- src/yb/tserver/xcluster_consumer.cc | 6 +- src/yb/util/monotime-test.cc | 35 + src/yb/util/stack_trace_tracker.cc | 4 +- src/yb/yql/pggate/CMakeLists.txt | 37 +- .../yql/pggate/pg_explicit_row_lock_buffer.cc | 88 +++ .../yql/pggate/pg_explicit_row_lock_buffer.h | 58 ++ src/yb/yql/pggate/pg_session.cc | 78 --- src/yb/yql/pggate/pg_session.h | 129 +--- src/yb/yql/pggate/pg_tools.cc | 212 ++++++ src/yb/yql/pggate/pg_tools.h | 110 ++- src/yb/yql/pggate/pggate.cc | 180 +---- src/yb/yql/pgwrapper/pg_mini-test.cc | 8 +- .../cmd/server/handlers/api_voyager.go | 8 - 233 files changed, 10007 insertions(+), 2464 deletions(-) create mode 100644 managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/HandleKubernetesNamespacedServices.java create mode 100644 managed/src/main/java/com/yugabyte/yw/common/UnrecoverableException.java create mode 100644 managed/src/main/resources/db/migration/default_/common/V375__Alter_XCluster_Tables_Add_State_Retryability.sql create mode 100644 managed/src/main/resources/gflag_groups/2024.1.3/gflag_groups.json create mode 100644 managed/ui/src/redesign/components/YBTimePicker/YBTimePicker.tsx create mode 100644 managed/ui/src/redesign/features/backup/restore/BackupRestoreModal.tsx create mode 100644 managed/ui/src/redesign/features/backup/restore/RestoreUtils.tsx create mode 100644 managed/ui/src/redesign/features/backup/restore/SwitchRestorePages.tsx create mode 100644 managed/ui/src/redesign/features/backup/restore/ValidationSchemaResolver.ts create mode 100644 managed/ui/src/redesign/features/backup/restore/api/api.ts create mode 100644 managed/ui/src/redesign/features/backup/restore/models/RestoreContext.ts create mode 100644 managed/ui/src/redesign/features/backup/restore/models/RestoreFormModel.ts create mode 100644 managed/ui/src/redesign/features/backup/restore/pages/Prefetch/PrefetchData.tsx create mode 100644 managed/ui/src/redesign/features/backup/restore/pages/RenameKeyspace/RenameKeyspace.tsx create mode 100644 managed/ui/src/redesign/features/backup/restore/pages/RestoreFinal/RestoreFinal.tsx create mode 100644 managed/ui/src/redesign/features/backup/restore/pages/RestoreSource/RestoreSource.tsx create mode 100644 managed/ui/src/redesign/features/backup/restore/pages/RestoreSource/RestoreTimeFrameUtils.tsx create mode 100644 managed/ui/src/redesign/features/backup/restore/pages/RestoreSource/SelectDBAndTables.tsx create mode 100644 managed/ui/src/redesign/features/backup/restore/pages/RestoreSource/SelectTimeframe.tsx create mode 100644 managed/ui/src/redesign/features/backup/restore/pages/RestoreSummary.tsx create mode 100644 managed/ui/src/redesign/features/backup/restore/pages/RestoreTarget/ParallelThreads.tsx create mode 100644 managed/ui/src/redesign/features/backup/restore/pages/RestoreTarget/RenameKeyspaceOption.tsx create mode 100644 managed/ui/src/redesign/features/backup/restore/pages/RestoreTarget/RestoreTablespaceNotSupported.tsx create mode 100644 managed/ui/src/redesign/features/backup/restore/pages/RestoreTarget/RestoreTablespacesOption.tsx create mode 100644 managed/ui/src/redesign/features/backup/restore/pages/RestoreTarget/RestoreTarget.tsx create mode 100644 managed/ui/src/redesign/features/backup/restore/pages/RestoreTarget/SelectKMS.tsx create mode 100644 managed/ui/src/redesign/features/backup/restore/pages/RestoreTarget/SelectUniverse.tsx create mode 100644 managed/ui/src/redesign/features/backup/scheduled/list/EditScheduledPolicyModal.tsx create mode 100644 managed/ui/src/redesign/features/backup/scheduled/list/ScheduledBackupShowIntervalsModal.tsx create mode 100644 managed/ui/src/redesign/features/backup/scheduled/list/ScheduledCard.tsx create mode 100644 managed/ui/src/redesign/features/backup/scheduled/list/ScheduledPolicyShowTables.tsx create mode 100644 managed/yba-cli/cmd/eit/customca/create_eit.go create mode 100644 managed/yba-cli/cmd/eit/eitutil/createeitutil.go create mode 100644 managed/yba-cli/cmd/eit/eitutil/updateeitutil.go create mode 100644 managed/yba-cli/cmd/eit/hashicorp/create_eit.go create mode 100644 managed/yba-cli/cmd/eit/hashicorp/update_eit.go create mode 100644 managed/yba-cli/cmd/eit/k8scertmanager/create_eit.go create mode 100644 managed/yba-cli/cmd/eit/selfsigned/create_eit.go create mode 100644 managed/yba-cli/docs/yba_eit_custom-ca_create.md create mode 100644 managed/yba-cli/docs/yba_eit_hashicorp_create.md create mode 100644 managed/yba-cli/docs/yba_eit_hashicorp_update.md create mode 100644 managed/yba-cli/docs/yba_eit_k8s-cert-manager_create.md create mode 100644 managed/yba-cli/docs/yba_eit_self-signed_create.md create mode 100644 src/yb/yql/pggate/pg_explicit_row_lock_buffer.cc create mode 100644 src/yb/yql/pggate/pg_explicit_row_lock_buffer.h diff --git a/docs/content/preview/explore/ysql-language-features/postgresql-compatibility.md b/docs/content/preview/explore/ysql-language-features/postgresql-compatibility.md index 6c02d1cc9329..c8e954581396 100644 --- a/docs/content/preview/explore/ysql-language-features/postgresql-compatibility.md +++ b/docs/content/preview/explore/ysql-language-features/postgresql-compatibility.md @@ -52,7 +52,7 @@ Conversely, if you are using EPCM on a universe, you cannot set any of the featu | Batch nested loop join | [yb_enable_batchednl](../../../reference/configuration/yb-tserver/#yb-enable-batchednl) | 2.20 | 2024.1 | | Efficient communication
between PostgreSQL and DocDB | [pg_client_use_shared_memory](../../../reference/configuration/yb-tserver/#pg-client-use-shared-memory) | 2024.1 | | Yes | | Ascending indexing by default | [yb_use_hash_splitting_by_default](../../../reference/configuration/yb-tserver/#yb-use-hash-splitting-by-default) | 2024.1 | | -| Bitmap scan | [enable_bitmapscan](../../../reference/configuration/yb-tserver/#enable-bitmapscan) | 2024.1.3
(Planned) | | +| YugabyteDB bitmap scan | [yb_enable_bitmapscan](../../../reference/configuration/yb-tserver/#yb-enable-bitmapscan) | 2024.1.3
(Planned) | | | Parallel query | | Planned | | ### Released @@ -119,11 +119,11 @@ Default ascending indexing provides feature compatibility and is the default in The following features are planned for EPCM in future releases. -#### Bitmap scan +#### YugabyteDB bitmap scan -Configuration parameter: `enable_bitmapscan=true` +Configuration parameter: `yb_enable_bitmapscan=true` -Bitmap scans use multiple indexes to answer a query, with only one scan of the main table. Each index produces a "bitmap" indicating which rows of the main table are interesting. Bitmap scans can improve the performance of queries containing AND and OR conditions across several index scans. Bitmap scan provides improved performance parity. +Bitmap scans use multiple indexes to answer a query, with only one scan of the main table. Each index produces a "bitmap" indicating which rows of the main table are interesting. Bitmap scans can improve the performance of queries containing AND and OR conditions across several index scans. YugabyteDB bitmap scan provides feature compatibility and improved performance parity. For YugabyteDB relations to use a bitmap scan, the PostgreSQL parameter `enable_bitmapscan` must also be true (the default). #### Parallel query diff --git a/docs/content/preview/reference/configuration/yb-tserver.md b/docs/content/preview/reference/configuration/yb-tserver.md index 4e53c770ed24..2f81cb4bc360 100644 --- a/docs/content/preview/reference/configuration/yb-tserver.md +++ b/docs/content/preview/reference/configuration/yb-tserver.md @@ -1733,14 +1733,27 @@ Default: `1GB` ##### enable_bitmapscan -{{}} Enables or disables the query planner's use of bitmap-scan plan types. +PostgreSQL parameter to enable or disable the query planner's use of bitmap-scan plan types. Bitmap Scans use multiple indexes to answer a query, with only one scan of the main table. Each index produces a "bitmap" indicating which rows of the main table are interesting. Multiple bitmaps can be combined with AND or OR operators to create a final bitmap that is used to collect rows from the main table. -Bitmap scans follow the same work_mem behavior as PostgreSQL: each individual bitmap is bounded by work_mem. If there are n bitmaps, it means we may use n * work_mem memory. +Bitmap scans follow the same `work_mem` behavior as PostgreSQL: each individual bitmap is bounded by `work_mem`. If there are n bitmaps, it means we may use `n * work_mem` memory. Bitmap scans are only supported for LSM indexes. +Default: true + +##### yb_enable_bitmapscan + +{{}} Enables or disables the query planner's use of bitmap scans for YugabyteDB relations. Both [enable_bitmapscan](#enable-bitmapscan) and `yb_enable_bitmapscan` must be set to true for a YugabyteDB relation to use a bitmap scan. If `yb_enable_bitmapscan` is false, the planner never uses a YugabyteDB bitmap scan. + +| enable_bitmapscan | yb_enable_bitmapscan | Result | +| :--- | :--- | :--- | +| true | false | Default. Bitmap scans allowed only on temporary tables, if the planner believes the bitmap scan is most optimal. | +| true | true | Default for [Enhanced PostgreSQL Compatibility](../../../explore/ysql-language-features/postgresql-compatibility/#enhanced-postgresql-compatibility-mode). Bitmap scans are allowed on temporary tables and YugabyteDB relations, if the planner believes the bitmap scan is most optimal. | +| false | false | Bitmap scans allowed only on temporary tables, but only if every other scan type is also disabled / not possible. | +| false | true | Bitmap scans allowed on temporary tables and YugabyteDB relations, but only if every other scan type is also disabled / not possible. | + Default: false ##### yb_bnl_batch_size diff --git a/docs/content/stable/explore/ysql-language-features/postgresql-compatibility.md b/docs/content/stable/explore/ysql-language-features/postgresql-compatibility.md index 453efa7dd1d8..dd820aebdd61 100644 --- a/docs/content/stable/explore/ysql-language-features/postgresql-compatibility.md +++ b/docs/content/stable/explore/ysql-language-features/postgresql-compatibility.md @@ -50,7 +50,7 @@ Conversely, if you are using EPCM on a universe, you cannot set any of the featu | Batch nested loop join | [yb_enable_batchednl](../../../reference/configuration/yb-tserver/#yb-enable-batchednl) | 2.20 | 2024.1 | | Efficient communication
between PostgreSQL and DocDB | [pg_client_use_shared_memory](../../../reference/configuration/yb-tserver/#pg-client-use-shared-memory) | 2024.1 | | Yes | | Ascending indexing by default | [yb_use_hash_splitting_by_default](../../../reference/configuration/yb-tserver/#yb-use-hash-splitting-by-default) | 2024.1 | | -| Bitmap scan | [enable_bitmapscan](../../../reference/configuration/yb-tserver/#enable-bitmapscan) | 2024.1.3
(Planned) | | +| YugabyteDB bitmap scan | [yb_enable_bitmapscan](../../../reference/configuration/yb-tserver/#yb-enable-bitmapscan) | 2024.1.3
(Planned) | | | Parallel query | | Planned | | ### Released @@ -117,11 +117,11 @@ Default ascending indexing provides feature compatibility and is the default in The following features are planned for EPCM in future releases. -#### Bitmap scan +#### YugabyteDB bitmap scan -Configuration parameter: `enable_bitmapscan=true` +Configuration parameter: `yb_enable_bitmapscan=true` -Bitmap scans use multiple indexes to answer a query, with only one scan of the main table. Each index produces a "bitmap" indicating which rows of the main table are interesting. Bitmap scans can improve the performance of queries containing AND and OR conditions across several index scans. Bitmap scan provides improved performance parity. +Bitmap scans use multiple indexes to answer a query, with only one scan of the main table. Each index produces a "bitmap" indicating which rows of the main table are interesting. Bitmap scans can improve the performance of queries containing AND and OR conditions across several index scans. YugabyteDB bitmap scan provides feature compatibility and improved performance parity. For YugabyteDB relations to use a bitmap scan, the PostgreSQL parameter `enable_bitmapscan` must also be true (the default). #### Parallel query diff --git a/docs/content/stable/reference/configuration/yb-tserver.md b/docs/content/stable/reference/configuration/yb-tserver.md index 15cf2be1c97d..97a6bae6fc9f 100644 --- a/docs/content/stable/reference/configuration/yb-tserver.md +++ b/docs/content/stable/reference/configuration/yb-tserver.md @@ -1715,14 +1715,27 @@ Default: `1GB` ##### enable_bitmapscan -{{}} Enables or disables the query planner's use of bitmap-scan plan types. +PostgreSQL parameter to enable or disable the query planner's use of bitmap-scan plan types. Bitmap Scans use multiple indexes to answer a query, with only one scan of the main table. Each index produces a "bitmap" indicating which rows of the main table are interesting. Multiple bitmaps can be combined with AND or OR operators to create a final bitmap that is used to collect rows from the main table. -Bitmap scans follow the same work_mem behavior as PostgreSQL: each individual bitmap is bounded by work_mem. If there are n bitmaps, it means we may use n * work_mem memory. +Bitmap scans follow the same `work_mem` behavior as PostgreSQL: each individual bitmap is bounded by `work_mem`. If there are n bitmaps, it means we may use `n * work_mem` memory. Bitmap scans are only supported for LSM indexes. +Default: true + +##### yb_enable_bitmapscan + +{{}} Enables or disables the query planner's use of bitmap scans for YugabyteDB relations. Both [enable_bitmapscan](#enable-bitmapscan) and `yb_enable_bitmapscan` must be set to true for a YugabyteDB relation to use a bitmap scan. If `yb_enable_bitmapscan` is false, the planner never uses a YugabyteDB bitmap scan. + +| enable_bitmapscan | yb_enable_bitmapscan | Result | +| :--- | :--- | :--- | +| true | false | Default. Bitmap scans allowed only on temporary tables, if the planner believes the bitmap scan is most optimal. | +| true | true | Default for [Enhanced PostgreSQL Compatibility](../../../explore/ysql-language-features/postgresql-compatibility/#enhanced-postgresql-compatibility-mode). Bitmap scans are allowed on temporary tables and YugabyteDB relations, if the planner believes the bitmap scan is most optimal. | +| false | false | Bitmap scans allowed only on temporary tables, but only if every other scan type is also disabled / not possible. | +| false | true | Bitmap scans allowed on temporary tables and YugabyteDB relations, but only if every other scan type is also disabled / not possible. | + Default: false ##### yb_bnl_batch_size diff --git a/java/yb-client/src/main/java/org/yb/client/AlterUniverseReplicationRequest.java b/java/yb-client/src/main/java/org/yb/client/AlterUniverseReplicationRequest.java index c1e5fe65d15a..66ac4336d8c3 100644 --- a/java/yb-client/src/main/java/org/yb/client/AlterUniverseReplicationRequest.java +++ b/java/yb-client/src/main/java/org/yb/client/AlterUniverseReplicationRequest.java @@ -87,7 +87,7 @@ ByteBuf serialize(Message header) { .setRemoveTableIgnoreErrors(removeTableIgnoreErrors); if (newReplicationGroupName != null) { - builder.setNewReplicationGroupId(newReplicationGroupName); + builder.setDEPRECATEDNewReplicationGroupId(newReplicationGroupName); } // If all bootstrap IDs are null, it is not required. diff --git a/java/yb-cql/src/test/java/org/yb/cql/TestSystemTables.java b/java/yb-cql/src/test/java/org/yb/cql/TestSystemTables.java index 6d85bb7f5d9f..35318e9a560a 100644 --- a/java/yb-cql/src/test/java/org/yb/cql/TestSystemTables.java +++ b/java/yb-cql/src/test/java/org/yb/cql/TestSystemTables.java @@ -225,6 +225,53 @@ public void testEmptySystemTables() throws Exception { assertEquals(0, session.execute("SELECT * FROM system_schema.views;").all().size()); } + @Test + public void testSystemTableColumns() throws Exception { + // Table system_schema.aggregates + List results = session.execute("SELECT * FROM system_schema.columns WHERE " + + "keyspace_name = 'system_schema' AND table_name = 'aggregates'").all(); + assertEquals(8, results.size()); + verifyColumnSchema(results.get(0), "system_schema", "aggregates", + "keyspace_name", "partition_key", 0, "text", "none"); + verifyColumnSchema(results.get(1), "system_schema", "aggregates", + "aggregate_name", "clustering", 0, "text", "asc"); + verifyColumnSchema(results.get(2), "system_schema", "aggregates", + "argument_types", "clustering", 1, "frozen>", "asc"); + verifyColumnSchema(results.get(3), "system_schema", "aggregates", + "final_func", "regular", -1, "text", "none"); + verifyColumnSchema(results.get(4), "system_schema", "aggregates", + "initcond", "regular", -1, "text", "none"); + verifyColumnSchema(results.get(5), "system_schema", "aggregates", + "return_type", "regular", -1, "text", "none"); + verifyColumnSchema(results.get(6), "system_schema", "aggregates", + "state_func", "regular", -1, "text", "none"); + verifyColumnSchema(results.get(7), "system_schema", "aggregates", + "state_type", "regular", -1, "text", "none"); + + // Table system_schema.functions + results = session.execute("SELECT * FROM system_schema.columns WHERE " + + "keyspace_name = 'system_schema' AND table_name = 'functions'").all(); + assertEquals(8, results.size()); + verifyColumnSchema(results.get(0), "system_schema", "functions", + "keyspace_name", "partition_key", 0, "text", "none"); + verifyColumnSchema(results.get(1), "system_schema", "functions", + "function_name", "clustering", 0, "text", "asc"); + verifyColumnSchema(results.get(2), "system_schema", "functions", + "argument_types", "clustering", 1, "frozen>", "asc"); + verifyColumnSchema(results.get(3), "system_schema", "functions", + "argument_names", "regular", -1, "frozen>", "none"); + verifyColumnSchema(results.get(4), "system_schema", "functions", + "body", "regular", -1, "text", "none"); + verifyColumnSchema(results.get(5), "system_schema", "functions", + "called_on_null_input", "regular", -1, "boolean", "none"); + verifyColumnSchema(results.get(6), "system_schema", "functions", + "language", "regular", -1, "text", "none"); + verifyColumnSchema(results.get(7), "system_schema", "functions", + "return_type", "regular", -1, "text", "none"); + + // TODO: Implement for 'system_schema' tables: indexes, triggers, types, views, etc. + } + private void checkContactPoints(String column, Row row) { List contactPoints = miniCluster.getCQLContactPoints(); boolean found = false; @@ -405,17 +452,28 @@ public void testSystemKeyspacesAndTables() throws Exception { assertEquals(UUID.fromString(uuid), results.get(0).getUUID("id")); } - private void verifyColumnSchema(Row row, String table_name, String column_name, String kind, - int position, String type, String clustering_order) { - assertEquals(DEFAULT_TEST_KEYSPACE, row.getString("keyspace_name")); + private void verifyColumnSchema(Row row, String keyspace_name, String table_name, + String column_name, String kind, int position, + String type, String clustering_order) { + assertEquals(keyspace_name, row.getString("keyspace_name")); assertEquals(table_name, row.getString("table_name")); assertEquals(column_name, row.getString("column_name")); assertEquals(clustering_order, row.getString("clustering_order")); assertEquals(kind, row.getString("kind")); + // Note: the "position" = + // 0,1,2,3... for a hash-key column: index of the column among the "partition_key" columns + // 0,1,2,3... for a range-key column: index of the column among the "clustering" columns + // -1 for any non-key column assertEquals(position, row.getInt("position")); assertEquals(type, row.getString("type")); } + private void verifyColumnSchema(Row row, String table_name, String column_name, String kind, + int position, String type, String clustering_order) { + verifyColumnSchema(row, + DEFAULT_TEST_KEYSPACE, table_name, column_name, kind, position, type, clustering_order); + } + private void verifyTypeSchema(Row row, String type_name, List field_names, List field_types) { assertEquals(DEFAULT_TEST_KEYSPACE, row.getString("keyspace_name")); diff --git a/managed/RUNTIME-FLAGS.md b/managed/RUNTIME-FLAGS.md index 9c627fd7cc4a..baf6bb4a18ae 100644 --- a/managed/RUNTIME-FLAGS.md +++ b/managed/RUNTIME-FLAGS.md @@ -161,7 +161,6 @@ | "Enable SSE" | "yb.backup.enable_sse" | "UNIVERSE" | "Enable SSE during backup/restore" | "Boolean" | | "Allow Table by Table backups for YCQL" | "yb.backup.allow_table_by_table_backup_ycql" | "UNIVERSE" | "Backup tables individually during YCQL backup" | "Boolean" | | "NFS Directry Path" | "yb.ybc_flags.nfs_dirs" | "UNIVERSE" | "Authorised NFS directories for backups" | "String" | -| "Enable Verbose Logging" | "yb.ybc_flags.enable_verbose" | "UNIVERSE" | "Enable verbose ybc logging" | "Boolean" | | "Max Thread Count" | "yb.perf_advisor.max_threads" | "UNIVERSE" | "Max number of threads to support parallel querying of nodes" | "Integer" | | "Allow Scheduled YBC Upgrades" | "ybc.upgrade.allow_scheduled_upgrade" | "UNIVERSE" | "Enable Scheduled upgrade of ybc on the universe" | "Boolean" | | "Allow User Gflags Override" | "yb.gflags.allow_user_override" | "UNIVERSE" | "Allow users to override default Gflags values" | "Boolean" | @@ -233,6 +232,8 @@ | "Network Load balancer health check paths" | "yb.universe.network_load_balancer.custom_health_check_paths" | "UNIVERSE" | "Paths probed by HTTP/HTTPS health checks performed by the network load balancer. Paths are mapped one-to-one with the custom health check ports runtime configuration." | "String List" | | "Validate filepath for local release" | "yb.universe.validate_local_release" | "UNIVERSE" | "For certain tasks validates the existence of local filepath for the universe software version." | "Boolean" | | "The delay before the next poll of the PITR config creation status" | "yb.pitr.create_poll_delay" | "UNIVERSE" | "It is the delay after which the create PITR config subtask rechecks the status of the PITR config creation in each iteration" | "Duration" | +| "The delay before the next poll of the PITR config restore status" | "yb.pitr.restore_poll_delay" | "UNIVERSE" | "It is the delay after which the restore PITR config subtask rechecks the status of the restore operation" | "Duration" | +| "The timeout for restoring a universe using a PITR config" | "yb.pitr.restore_timeout" | "UNIVERSE" | "It is the maximum time that the restore PITR config subtask waits for the restore operation using PITR to be completed; otherwise, it will fail the operation" | "Duration" | | "The timeout for creating a PITR config" | "yb.pitr.create_timeout" | "UNIVERSE" | "It is the maximum time that the create PITR config subtask waits for the PITR config to be created; otherwise, it will fail the operation" | "Duration" | | "Default PITR retention period for txn xCluster" | "yb.xcluster.transactional.pitr.default_retention_period" | "UNIVERSE" | "The default retention period used to create PITR configs for transactional xCluster replication; it will be used when there is no existing PITR configs and it is not specified in the task parameters" | "Duration" | | "Default PITR snapshot interval for txn xCluster" | "yb.xcluster.transactional.pitr.default_snapshot_interval" | "UNIVERSE" | "The default snapshot interval used to create PITR configs for transactional xCluster replication; it will be used when there is no existing PITR configs and it is not specified in the task parameters" | "Duration" | @@ -242,7 +243,8 @@ | "Sync user-groups between the Universe DB nodes and LDAP Server" | "yb.security.ldap.ldap_universe_sync" | "UNIVERSE" | "If configured, this feature allows users to synchronise user groups configured on the upstream LDAP Server with user roles in YBDB nodes associated with the universe." | "Boolean" | | "Cluster membership check timeout" | "yb.checks.cluster_membership.timeout" | "UNIVERSE" | "Controls the max time to check that there are no tablets assigned to the node" | "Duration" | | "Verify current cluster state (from db perspective) before running task" | "yb.task.verify_cluster_state" | "UNIVERSE" | "Verify current cluster state (from db perspective) before running task" | "Boolean" | -| "Wait time for xcluster/DR replication setup and edit RPCs." | "yb.xcluster.operation_timeout" | "UNIVERSE" | "Wait time for xcluster/DR replication setup and edit RPCs." | "Duration" | +| "Wait time for xcluster/DR replication setup and edit RPCs" | "yb.xcluster.operation_timeout" | "UNIVERSE" | "Wait time for xcluster/DR replication setup and edit RPCs." | "Duration" | +| "Maximum timeout for xCluster bootstrap producer RPC call" | "yb.xcluster.bootstrap_producer_timeout" | "UNIVERSE" | "If the RPC call to create the bootstrap streams on the source universe does not return before this timeout, the task will retry with exponential backoff until it fails." | "Duration" | | "Leaderless tablets check enabled" | "yb.checks.leaderless_tablets.enabled" | "UNIVERSE" | " Whether to run CheckLeaderlessTablets subtask before running universe tasks" | "Boolean" | | "Leaderless tablets check timeout" | "yb.checks.leaderless_tablets.timeout" | "UNIVERSE" | "Controls the max time out when performing the CheckLeaderlessTablets subtask" | "Duration" | | "Enable Clock Sync check" | "yb.wait_for_clock_sync.enabled" | "UNIVERSE" | "Enable Clock Sync check" | "Boolean" | diff --git a/managed/build.sbt b/managed/build.sbt index 21390ab59f39..71d5b3f28767 100644 --- a/managed/build.sbt +++ b/managed/build.sbt @@ -927,7 +927,7 @@ runPlatform := { } libraryDependencies += "org.yb" % "yb-client" % "0.8.94-SNAPSHOT" -libraryDependencies += "org.yb" % "ybc-client" % "2.2.0.0-b5" +libraryDependencies += "org.yb" % "ybc-client" % "2.2.0.0-b6" libraryDependencies += "org.yb" % "yb-perf-advisor" % "1.0.0-b33" libraryDependencies ++= Seq( diff --git a/managed/devops/bin/yb_platform_backup.sh b/managed/devops/bin/yb_platform_backup.sh index 686bc261f4b7..01ea3c1161b8 100755 --- a/managed/devops/bin/yb_platform_backup.sh +++ b/managed/devops/bin/yb_platform_backup.sh @@ -96,11 +96,17 @@ set_prometheus_data_dir() { prometheus_host="$1" prometheus_port="$2" data_dir="$3" + prometheus_protocol="$4" if [[ "$DOCKER_BASED" = true ]]; then PROMETHEUS_DATA_DIR="${data_dir}/prometheusv2" else - PROMETHEUS_DATA_DIR=$(curl "http://${prometheus_host}:${prometheus_port}/api/v1/status/flags" | - ${PYTHON_EXECUTABLE} -c "import sys, json; print(json.load(sys.stdin)['data']['storage.tsdb.path'])") + curl_cmd="curl -k \ + ${prometheus_protocol}://${prometheus_host}:${prometheus_port}/api/v1/status/flags" + if [[ -n "${PROMETHEUS_USERNAME:-}" ]] && [[ -n "${PROMETHEUS_PASSWORD:-}" ]]; then + curl_cmd="${curl_cmd} -u ${PROMETHEUS_USERNAME}:${PROMETHEUS_PASSWORD}" + fi + PROMETHEUS_DATA_DIR=$($curl_cmd | ${PYTHON_EXECUTABLE} -c \ + "import sys, json; print(json.load(sys.stdin)['data']['storage.tsdb.path'])") fi if [[ -z "$PROMETHEUS_DATA_DIR" ]]; then echo "Failed to find prometheus data directory" @@ -323,6 +329,7 @@ create_backup() { plain_sql="${14}" ybdb="${15}" ysql_dump_path="${16}" + prometheus_protocol="${17}" include_releases_flag="**/releases/**" include_uploaded_releases_flag="**/upload/release_artifacts/**" @@ -427,9 +434,15 @@ create_backup() { if [[ "$exclude_prometheus" = false ]]; then trap 'run_sudo_cmd "rm -rf ${data_dir}/${PROMETHEUS_SNAPSHOT_DIR}"' RETURN echo "Creating prometheus snapshot..." - set_prometheus_data_dir "${prometheus_host}" "${prometheus_port}" "${data_dir}" - snapshot_dir=$(curl -X POST "http://${prometheus_host}:${prometheus_port}/api/v1/admin/tsdb/snapshot" | - ${PYTHON_EXECUTABLE} -c "import sys, json; print(json.load(sys.stdin)['data']['name'])") + set_prometheus_data_dir "${prometheus_host}" "${prometheus_port}" "${data_dir}" \ + "${prometheus_protocol}" + snapshot_cmd="curl -k -X POST \ + ${prometheus_protocol}://${prometheus_host}:${prometheus_port}/api/v1/admin/tsdb/snapshot" + if [[ -n "${PROMETHEUS_USERNAME:-}" ]] && [[ -n "${PROMETHEUS_PASSWORD:-}" ]]; then + snapshot_cmd="${snapshot_cmd} -u ${PROMETHEUS_USERNAME}:${PROMETHEUS_PASSWORD}" + fi + snapshot_dir=$( $snapshot_cmd | ${PYTHON_EXECUTABLE} -c \ + "import sys, json; print(json.load(sys.stdin)['data']['name'])") mkdir -p "$data_dir/$PROMETHEUS_SNAPSHOT_DIR" run_sudo_cmd "cp -aR ${PROMETHEUS_DATA_DIR}/snapshots/${snapshot_dir} \ ${data_dir}/${PROMETHEUS_SNAPSHOT_DIR}" @@ -473,6 +486,7 @@ restore_backup() { ybai_data_dir="${16}" skip_old_files="${17}" skip_dump_check="${18}" + prometheus_protocol="${19}" prometheus_dir_regex="\.\/${PROMETHEUS_SNAPSHOT_DIR}\/[[:digit:]]{8}T[[:digit:]]{6}Z-[[:alnum:]]{16}\/$" # Perform K8s restore. @@ -657,7 +671,8 @@ restore_backup() { set -e if [[ -n "$prom_snapshot" ]]; then echo "Restoring prometheus snapshot..." - set_prometheus_data_dir "${prometheus_host}" "${prometheus_port}" "${data_dir}" + set_prometheus_data_dir "${prometheus_host}" "${prometheus_port}" "${data_dir}" \ + "${prometheus_protocol}" modify_service prometheus stop # Find snapshot directory in backup run_sudo_cmd "rm -rf ${PROMETHEUS_DATA_DIR}/*" @@ -708,6 +723,21 @@ validate_k8s_args() { fi } +validate_prometheus_args() { + if [[ $prometheus_protocol != "http" ]] && [[ $prometheus_protocol != "https" ]]; then + echo "Error: prometheus_protocol must be either http or https" + exit 1 + fi + if [[ -n "${PROMETHEUS_USERNAME:-}" ]] && [[ -z "${PROMETHEUS_PASSWORD:-}" ]]; then + echo "Error: PROMETHEUS_USERNAME is set but PROMETHEUS_PASSWORD is not. Either both must be set or unset." + exit 1 + fi + if [[ -z "${PROMETHEUS_USERNAME:-}" ]] && [[ -n "${PROMETHEUS_PASSWORD:-}" ]]; then + echo "Error: PROMETHEUS_PASSWORD is set but PROMETHEUS_USERNAME is not. Either both must be set or unset." + exit 1 + fi +} + print_backup_usage() { echo "Create: ${SCRIPT_NAME} create [options]" echo "options:" @@ -723,6 +753,7 @@ print_backup_usage() { echo " -P, --db_port=PORT postgres port (default: 5432)" echo " -n, --prometheus_host=HOST prometheus host (default: localhost)" echo " -t, --prometheus_port=PORT prometheus port (default: 9090)" + echo " --prometheus_protocol prometheus protocol (default: http)." echo " --k8s_namespace kubernetes namespace" echo " --k8s_pod kubernetes pod" echo " --k8s_timeout kubernetes cp timeout duration (default: 30m)" @@ -730,8 +761,10 @@ print_backup_usage() { echo " --plain_sql output a plain-text SQL script from pg_dump" echo " --ybdb ybdb backup (default: false)" echo " --ysql_dump_path path to ysql_sump to dump ybdb" - echo " -?, --help show create help, then exit" echo " --disable_version_check disable the backup version check (default: false)" + echo " -?, --help show create help, then exit" + echo + echo "NOTE: If prometheus authentication is enabled, PROMETHEUS_USERNAME and PROMETHEUS_PASSWORD environment variables must be set" echo } @@ -749,6 +782,7 @@ print_restore_usage() { echo " -n, --prometheus_host=HOST prometheus host (default: localhost)" echo " -t, --prometheus_port=PORT prometheus port (default: 9090)" echo " -e, --prometheus_user=USERNAME prometheus user (default: prometheus)" + echo " --prometheus_protocol prometheus protocol (default: http)." echo " -U, --yba_user=USERNAME yugabyte anywhere user (default: yugabyte)" echo " --k8s_namespace kubernetes namespace" echo " --k8s_pod kubernetes pod" @@ -763,6 +797,8 @@ print_restore_usage() { echo " --skip_dump_check skip pg dump empty check before restore (default: false)" echo " -?, --help show restore help, then exit" echo + echo "NOTE: If prometheus authentication is enabled, PROMETHEUS_USERNAME and PROMETHEUS_PASSWORD environment variables must be set" + echo } print_help() { @@ -796,6 +832,7 @@ db_host=localhost db_port=5432 prometheus_host=localhost prometheus_port=9090 +prometheus_protocol=http prometheus_user=prometheus k8s_namespace="" k8s_pod="" @@ -889,6 +926,10 @@ case $command in prometheus_port=$2 shift 2 ;; + --prometheus_protocol) + prometheus_protocol=$2 + shift 2 + ;; --k8s_namespace) k8s_namespace=$2 shift 2 @@ -939,6 +980,7 @@ case $command in done validate_k8s_args "${k8s_namespace}" "${k8s_pod}" + validate_prometheus_args if [[ "${pgpass_path}" != "" ]]; then export PGPASSFILE=${pgpass_path} @@ -946,7 +988,7 @@ case $command in create_backup "$output_path" "$data_dir" "$exclude_prometheus" "$exclude_releases" \ "$db_username" "$db_host" "$db_port" "$verbose" "$prometheus_host" "$prometheus_port" \ "$k8s_namespace" "$k8s_pod" "$pgdump_path" "$plain_sql" "$ybdb" "$ysql_dump_path" \ - "$disable_version_check" + "$prometheus_protocol" exit 0 ;; restore) @@ -1007,6 +1049,10 @@ case $command in prometheus_user=$2 shift 2 ;; + --prometheus_protocol) + prometheus_protocol=$2 + shift 2 + ;; --k8s_namespace) k8s_namespace=$2 shift 2 @@ -1094,6 +1140,7 @@ case $command in fi validate_k8s_args "${k8s_namespace}" "${k8s_pod}" + validate_prometheus_args if [[ "${pgpass_path}" != "" ]]; then export PGPASSFILE=${pgpass_path} @@ -1102,7 +1149,7 @@ case $command in restore_backup "$input_path" "$destination" "$db_host" "$db_port" "$db_username" "$verbose" \ "$prometheus_host" "$prometheus_port" "$data_dir" "$k8s_namespace" "$k8s_pod" \ "$disable_version_check" "$pgrestore_path" "$ybdb" "$ysqlsh_path" "$ybai_data_dir" \ - "$skip_old_files" "$skip_dump_check" + "$skip_old_files" "$skip_dump_check" "$prometheus_protocol" exit 0 ;; *) diff --git a/managed/node-agent/cli/node/configure.go b/managed/node-agent/cli/node/configure.go index 51551c26d063..81ece0d96005 100644 --- a/managed/node-agent/cli/node/configure.go +++ b/managed/node-agent/cli/node/configure.go @@ -6,7 +6,6 @@ import ( "context" "errors" "fmt" - "net" "node-agent/app/executor" "node-agent/app/server" "node-agent/app/task" @@ -165,28 +164,22 @@ func configureDisabledEgress(ctx context.Context, cmd *cobra.Command) { util.ConsoleLogger().Fatalf(ctx, "Unable to store node agent IP - %s", err.Error()) } nodeIp := config.String(util.NodeIpKey) - parsedIp := net.ParseIP(nodeIp) - if parsedIp == nil { - // Get the bind IP if it is DNS. It defaults to the DNS if it is not present. - _, err = config.StoreCommandFlagString( - ctx, - cmd, - "bind_ip", - util.NodeBindIpKey, - &nodeIp, - true, /* isRequired */ - nil, /* validator */ - ) - if err != nil { - util.ConsoleLogger(). - Fatalf(ctx, "Unable to store node agent bind IP - %s", err.Error()) - } - } else { - // Use the node IP as the bind IP. - err = config.Update(util.NodeBindIpKey, nodeIp) - if err != nil { - util.ConsoleLogger().Fatalf(ctx, "Unable to store node agent bind IP - %s", err.Error()) - } + bindIp, err := cmd.Flags().GetString("bind_ip") + if err != nil { + util.FileLogger().Infof(ctx, "Unable to get bind IP - %s", err.Error()) + util.FileLogger().Infof(ctx, "Using parsed node ip") + bindIp = nodeIp + } + util.FileLogger().Infof(ctx, "Bind IP: %s", bindIp) + // Get the bind IP if it is DNS. It defaults to the DNS if it is not present. + err = config.Update(util.NodeBindIpKey, bindIp) + if err != nil { + util.ConsoleLogger().Fatalf(ctx, "Unable to store node agent bind IP - %s", err.Error()) + } + + if err != nil { + util.ConsoleLogger(). + Fatalf(ctx, "Unable to store node agent bind IP - %s", err.Error()) } _, err = config.StoreCommandFlagString( ctx, @@ -300,32 +293,20 @@ func configureEnabledEgress(ctx context.Context, cmd *cobra.Command) { checkConfigAndUpdate(ctx, util.NodeIpKey, nil, "Node IP") } nodeIp := config.String(util.NodeIpKey) - parsedIp := net.ParseIP(nodeIp) - if parsedIp == nil { - // Get the bind IP if it is DNS. It defaults to the DNS if it is not present. - if silent { - _, err = config.StoreCommandFlagString( - ctx, - cmd, - "bind_ip", - util.NodeBindIpKey, - &nodeIp, - true, /* isRequired */ - nil, /* validator */ - ) - if err != nil { - util.ConsoleLogger(). - Fatalf(ctx, "Unable to store node agent bind IP - %s", err.Error()) - } - } else { - checkConfigAndUpdate(ctx, util.NodeBindIpKey, &nodeIp, "Bind IP") - } - } else { - // Use the node IP as the bind IP. - err = config.Update(util.NodeBindIpKey, nodeIp) + bindIp, err := cmd.Flags().GetString("bind_ip") + if err != nil { + util.FileLogger().Errorf(ctx, "Unable to get bind IP - %s", err.Error()) + util.FileLogger().Infof(ctx, "Using node ip") + bindIp = nodeIp + } + util.FileLogger().Infof(ctx, "Bind IP: %s", bindIp) + if silent { + err = config.Update(util.NodeBindIpKey, bindIp) if err != nil { util.ConsoleLogger().Fatalf(ctx, "Unable to store node agent bind IP - %s", err.Error()) } + } else { + checkConfigAndUpdate(ctx, util.NodeBindIpKey, &bindIp, "Bind IP") } providersHandler := task.NewGetProvidersHandler(apiToken) // Get Providers from the platform (only on-prem providers displayed) diff --git a/managed/node-agent/resources/node-agent-installer.sh b/managed/node-agent/resources/node-agent-installer.sh index 532c113e6e4a..bd04144a6be1 100755 --- a/managed/node-agent/resources/node-agent-installer.sh +++ b/managed/node-agent/resources/node-agent-installer.sh @@ -26,6 +26,7 @@ CERT_DIR="" CUSTOMER_ID="" NODE_NAME="" NODE_IP="" +BIND_IP="" NODE_PORT="" API_TOKEN="" PLATFORM_URL="" @@ -395,6 +396,7 @@ Options: Server IP. -p, --node_port (OPTIONAL for install command) Server port. + --bind_ip (OPTIONAL if bind_ip is different than node_ip) --user (REQUIRED only for install_service command) Username of the installation. A sudo user can install service for a non-sudo user. --skip_verify_cert (OPTIONAL) @@ -544,6 +546,10 @@ main() { NODE_AGENT_CONFIG_ARGS+=(--disable_egress --id "$NODE_AGENT_ID" --customer_id "$CUSTOMER_ID" \ --cert_dir "$CERT_DIR" --node_name "$NODE_NAME" --node_ip "$NODE_IP" \ --node_port "$NODE_PORT" "${SKIP_VERIFY_CERT:+ "--skip_verify_cert"}") + # if bind ip is provided use that. + if [ -n "$BIND_IP" ]; then + NODE_AGENT_CONFIG_ARGS+=( --bind_ip "$BIND_IP" ) + fi fi setup_node_agent_dir extract_package @@ -659,6 +665,10 @@ while [[ $# -gt 0 ]]; do NODE_IP=$2 shift ;; + --bind_ip) + BIND_IP=$2 + shift + ;; -p|--node_port) NODE_PORT=$2 shift diff --git a/managed/node-agent/resources/node-agent-provision.yaml b/managed/node-agent/resources/node-agent-provision.yaml index b1d3ab7c6095..ebde97daf95d 100644 --- a/managed/node-agent/resources/node-agent-provision.yaml +++ b/managed/node-agent/resources/node-agent-provision.yaml @@ -18,6 +18,7 @@ yba: customer_uuid: api_key: node_name: + node_external_fqdn: provider: name: provider_name region: diff --git a/managed/node-agent/resources/ynp/configs/config.j2 b/managed/node-agent/resources/ynp/configs/config.j2 index 3ee6d6d81f95..fde8056d7396 100644 --- a/managed/node-agent/resources/ynp/configs/config.j2 +++ b/managed/node-agent/resources/ynp/configs/config.j2 @@ -69,7 +69,8 @@ ports = 7000 7100 9000 9100 18018 22 5433 9042 9070 9300 12000 13000 [InstallNodeAgent] {{ render_section(yba) -}} tmp_directory = {{ ynp.tmp_directory }} -node_ip = {{ ynp.node_ip }} +node_ip = {{ ynp.node_external_fqdn }} +bind_ip = {{ ynp.node_ip }} [RebootNode] tmp_directory = {{ynp.tmp_directory}} diff --git a/managed/node-agent/resources/ynp/modules/provision/node_agent/node_agent.py b/managed/node-agent/resources/ynp/modules/provision/node_agent/node_agent.py index 6c978a4882f3..6c3e87903de4 100644 --- a/managed/node-agent/resources/ynp/modules/provision/node_agent/node_agent.py +++ b/managed/node-agent/resources/ynp/modules/provision/node_agent/node_agent.py @@ -16,16 +16,12 @@ def _get_headers(self, token): } def _get_provider_url(self, context): - return ( - f'{context.get("url")}/api/v1/customers/{context.get("customer_uuid")}/providers' - f'?name={context.get("provider_name")}' - ) + return (f'{context.get("url")}/api/v1/customers/{context.get("customer_uuid")}' + f'/providers?name={context.get("provider_name")}') def _get_instance_type(self, yba_url, customer_uuid, p_uuid, code): - return ( - f'{yba_url}/api/v1/customers/{customer_uuid}/providers/' - f'{p_uuid}/instance_types/{code}' - ) + return (f'{yba_url}/api/v1/customers/{customer_uuid}/providers/' + f'{p_uuid}/instance_types/{code}') def _generate_provider_payload(self, context): # Generates the body for provider payload. @@ -110,8 +106,8 @@ def _generate_instance_type_payload(self, context): 'volumeDetailsList': [] } } - mount_points = (context.get('instance_type_mount_points') - .strip("[]").replace("'", "").split(", ")) + mount_points = context.get('instance_type_mount_points').strip( + "[]").replace("'", "").split(", ") for mp in mount_points: volume_detail = { 'volumeSizeGB': context.get('instance_type_volume_size'), @@ -127,7 +123,7 @@ def _generate_add_node_payload(self, context): "nodes": [ { "instanceType": context.get('instance_type_name'), - "ip": context.get('node_ip'), + "ip": context.get('node_external_fqdn'), "region": context.get('provider_region_name'), "zone": context.get('provider_region_zone_name'), "nodeName": context.get("node_name"), @@ -150,10 +146,8 @@ def _get_provider(self, context): def _create_instance_if_not_exists(self, context, provider): yba_url = context.get('url') skip_tls_verify = not yba_url.lower().startswith('https') - get_instance_type_url = self._get_instance_type(context.get('url'), - context.get('customer_uuid'), - provider.get('uuid'), - context.get('instance_type_name')) + get_instance_type_url = self._get_instance_type(context.get('url'), context.get( + 'customer_uuid'), provider.get('uuid'), context.get('instance_type_name')) try: response = requests.get(get_instance_type_url, @@ -166,11 +160,10 @@ def _create_instance_if_not_exists(self, context, provider): except requests.exceptions.HTTPError as http_err: if response.status_code == 400: logging.info("Instance type does not exist, creating it.") - context['provider_id'] = provider['uuid'] - instance_data = self._generate_instance_type_payload(context) + instance_data = self._generate_instance_type_payload(context, provider['uuid']) - instance_payload_file = os.path.join(context.get('tmp_directory'), - 'create_instance.json') + instance_payload_file = os.path.join( + context.get('tmp_directory'), 'create_instance.json') with open(instance_payload_file, 'w') as f: json.dump(instance_data, f, indent=4) else: @@ -223,8 +216,8 @@ def render_templates(self, context): if not region_exists or not zone_exist: update_provider_data = self._generate_provider_update_payload( context, provider_data) - update_provider_data_file = os.path.join(context.get('tmp_directory'), - 'update_provider.json') + update_provider_data_file = os.path.join( + context.get('tmp_directory'), 'update_provider.json') with open(update_provider_data_file, 'w') as f: json.dump(update_provider_data, f, indent=4) self._create_instance_if_not_exists(context, provider_data) @@ -233,13 +226,13 @@ def render_templates(self, context): else: logging.info("Generating provider create payload...") provider_payload = self._generate_provider_payload(context) - provider_payload_file = os.path.join(context.get('tmp_directory'), - 'create_provider.json') + provider_payload_file = os.path.join( + context.get('tmp_directory'), 'create_provider.json') with open(provider_payload_file, 'w') as f: json.dump(provider_payload, f, indent=4) instance_create_payload = self._generate_instance_type_payload(context) - instance_payload_file = os.path.join(context.get('tmp_directory'), - 'create_instance.json') + instance_payload_file = os.path.join( + context.get('tmp_directory'), 'create_instance.json') with open(instance_payload_file, 'w') as f: json.dump(instance_create_payload, f, indent=4) node_agent_enabled = True @@ -250,8 +243,8 @@ def render_templates(self, context): logging.error(f"Request error: {req_err}") add_node_payload = self._generate_add_node_payload(context) - add_node_payload_file = os.path.join(context.get('tmp_directory'), - 'add_node_to_provider.json') + add_node_payload_file = os.path.join(context.get( + 'tmp_directory'), 'add_node_to_provider.json') with open(add_node_payload_file, 'w') as f: json.dump(add_node_payload, f, indent=4) diff --git a/managed/node-agent/resources/ynp/modules/provision/node_agent/templates/precheck.j2 b/managed/node-agent/resources/ynp/modules/provision/node_agent/templates/precheck.j2 index e631022ec81e..972ce4d43cb4 100644 --- a/managed/node-agent/resources/ynp/modules/provision/node_agent/templates/precheck.j2 +++ b/managed/node-agent/resources/ynp/modules/provision/node_agent/templates/precheck.j2 @@ -1,4 +1,40 @@ service_name="yb-node-agent.service" +yba_url={{ url }} +customer_uuid={{ customer_uuid }} +token={{ api_key }} +provider_id={{ provider_id }} + +_get_nodes_in_provider() { + local yba_url=$1 + local customer_uuid=$2 + local provider_uuid=$3 + echo "${yba_url}/api/v1/customers/${customer_uuid}/providers/${provider_uuid}/nodes/list" +} + +_get_headers() { + local token=$1 + echo "Accept: application/json" + echo "X-AUTH-YW-API-TOKEN: ${token}" + echo "Content-Type: application/json" +} + +# Function to determine if TLS verification should be skipped +skip_tls_verify() { + local yba_url=$1 + if [[ "$yba_url" == https* ]]; then + echo "--insecure" + else + echo "" + fi +} + +tls_verify_option=$(skip_tls_verify "$yba_url") +readarray -t headers <<< "$(_get_headers "$token")" +header_options=() +for header in "${headers[@]}"; do + header_options+=(-H "$header") +done + # Get the status of yb-node-agent Service status=$(su - {{ yb_user }} -c \ @@ -23,3 +59,33 @@ else echo "MemoryCurrent is not greater than 0: $memory" add_result "Memory Usage Check" "FAIL" "MemoryCurrent is not greater than 0: $memory" fi + +# Perform GET request to fetch all the nodes associated with provider +get_nodes_in_provider=$(_get_nodes_in_provider $yba_url $customer_uuid $provider_id) +response=$(curl -s -w "%{http_code}" -o response.txt -X GET \ + "${header_options[@]}" $tls_verify_option "$get_nodes_in_provider") +http_status="${response:(-3)}" +response_body=$( delayFunct, long totalDelayMs, Runnable funct) throws RuntimeException { long currentDelayMs = 0; long startTime = System.currentTimeMillis(); - while (System.currentTimeMillis() < startTime + totalDelayMs - currentDelayMs) { + while (true) { + currentDelayMs = delayFunct.apply(currentDelayMs); try { funct.run(); return; + } catch (UnrecoverableException e) { + log.error( + "Won't retry; Unrecoverable error while running the function: {}", e.getMessage()); + throw e; } catch (Exception e) { - log.warn("Will retry; Error while running the function: {}", e.getMessage()); + if (System.currentTimeMillis() < startTime + totalDelayMs - currentDelayMs) { + log.warn("Will retry; Error while running the function: {}", e.getMessage()); + } else { + log.error("Retry timed out; Error while running the function: {}", e.getMessage()); + Throwables.propagate(e); + } } - currentDelayMs = delayFunct.apply(currentDelayMs); log.debug( "Waiting for {} ms between retry, total delay remaining {} ms", currentDelayMs, - (startTime + totalDelayMs - System.currentTimeMillis())); + totalDelayMs - (System.currentTimeMillis() - startTime)); waitFor(Duration.ofMillis(currentDelayMs)); } - // Retry for the last time and then throw the exception that funct raised. - try { - funct.run(); - } catch (Exception e) { - log.error("Retry timed out; Error while running the function: {}", e.getMessage()); - throw new RuntimeException(e); - } } protected void doWithConstTimeout(long delayMs, long totalDelayMs, Runnable funct) { diff --git a/managed/src/main/java/com/yugabyte/yw/commissioner/UserTaskDetails.java b/managed/src/main/java/com/yugabyte/yw/commissioner/UserTaskDetails.java index 6b655a79530b..0e7f02b2de6d 100644 --- a/managed/src/main/java/com/yugabyte/yw/commissioner/UserTaskDetails.java +++ b/managed/src/main/java/com/yugabyte/yw/commissioner/UserTaskDetails.java @@ -214,6 +214,12 @@ public enum SubTaskGroupType { // Run the initdb script in a tserver pod. (Deprecated) KubernetesInitYSQL, + // Delete Kubernetes Namespaced Service + KubernetesNamespacedServiceDelete, + + // Handle Kubernetes Namespaced Service + KubernetesHandleNamespacedService, + // Start master process on a node StartingMasterProcess, @@ -525,6 +531,13 @@ public static SubTaskDetails createSubTask(SubTaskGroupType subTaskGroupType) { title = "Upgrade Kubernetes Pod"; description = "Upgrade Kubernetes Pod"; break; + case KubernetesNamespacedServiceDelete: + title = "Delete Kubernetes Namespaced Service"; + description = "Delete Kubernetes Namespaced Service"; + break; + case KubernetesHandleNamespacedService: + title = "Handle Kubernetes Namespaced Service"; + description = "Handle Kubernetes Namespaced Service"; case KubernetesCopyPackage: title = "Copy Package to Kubernetes Pod"; description = "Copy Package to Kubernetes Pod"; diff --git a/managed/src/main/java/com/yugabyte/yw/commissioner/XClusterScheduler.java b/managed/src/main/java/com/yugabyte/yw/commissioner/XClusterScheduler.java index b7308cc70649..576f909ff87c 100644 --- a/managed/src/main/java/com/yugabyte/yw/commissioner/XClusterScheduler.java +++ b/managed/src/main/java/com/yugabyte/yw/commissioner/XClusterScheduler.java @@ -138,6 +138,7 @@ private Set getTableIdsToAdd( } private Set getTableIdsToRemove( + XClusterConfig xClusterConfig, Set tableIdsInReplication, Set tableIdsInYbaXClusterConfig, Set sourceUniverseTableIds, @@ -160,7 +161,7 @@ private Set getTableIdsToRemove( // Exclude tables that have no associated xClusterTableConfig or have a null // streamId. Optional xClusterTableConfig = - XClusterTableConfig.maybeGetByTableId(tableId); + xClusterConfig.maybeGetTableById(tableId); if (xClusterTableConfig.isEmpty() || xClusterTableConfig.get().getStreamId() == null) { return false; @@ -255,6 +256,7 @@ public void compareTablesAndSyncXClusterConfig(XClusterConfig config) { Set tableIdsToRemove = getTableIdsToRemove( + config, tableIdsInReplication, tableIdsInYbaXClusterConfig, sourceUniverseTableIds, diff --git a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/CreatePitrConfig.java b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/CreatePitrConfig.java index 75f29920ec93..ce52dd5ca180 100644 --- a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/CreatePitrConfig.java +++ b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/CreatePitrConfig.java @@ -44,11 +44,19 @@ protected CreatePitrConfigParams taskParams() { @Override public String getName() { return String.format( - "%s(universeUuid=%s,tableType=%s,keyspaceName=%s)", + "%s(universeUuid=%s, customerUuid=%s, name=%s, keyspaceName=%s, tableType=%s," + + " retentionPeriodInSeconds=%s, intervalInSeconds=%d, xClusterConfig=%s," + + " createdForDr=%s)", super.getName(), taskParams().getUniverseUUID(), + taskParams().customerUUID, + taskParams().name, + taskParams().keyspaceName, taskParams().tableType, - taskParams().keyspaceName); + taskParams().retentionPeriodInSeconds, + taskParams().intervalInSeconds, + taskParams().xClusterConfig, + taskParams().createdForDr); } @Override diff --git a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/CreateXClusterConfig.java b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/CreateXClusterConfig.java index e0d1b0008161..509e0a074911 100644 --- a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/CreateXClusterConfig.java +++ b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/CreateXClusterConfig.java @@ -30,6 +30,7 @@ import com.yugabyte.yw.models.XClusterConfig.ConfigType; import com.yugabyte.yw.models.XClusterConfig.XClusterConfigStatusType; import com.yugabyte.yw.models.XClusterNamespaceConfig; +import com.yugabyte.yw.models.XClusterNamespaceConfig.Status; import com.yugabyte.yw.models.XClusterTableConfig; import java.io.File; import java.time.Duration; @@ -50,6 +51,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.yb.CommonTypes; +import org.yb.CommonTypes.TableType; import org.yb.client.IsXClusterBootstrapRequiredResponse; import org.yb.client.YBClient; import org.yb.master.MasterDdlOuterClass; @@ -198,6 +200,18 @@ public void run() { taskParams().getPitrParams()); } + // After all the other subtasks are done, set the DR states to show replication is + // happening. + if (xClusterConfig.isUsedForDr()) { + createSetDrStatesTask( + xClusterConfig, + State.Replicating, + SourceUniverseState.ReplicatingData, + TargetUniverseState.ReceivingData, + null /* keyspacePending */) + .setSubTaskGroupType(UserTaskDetails.SubTaskGroupType.ConfigureUniverse); + } + createXClusterConfigSetStatusTask(xClusterConfig, XClusterConfigStatusType.Running) .setSubTaskGroupType(UserTaskDetails.SubTaskGroupType.ConfigureUniverse); @@ -208,41 +222,41 @@ public void run() { .setSubTaskGroupType(UserTaskDetails.SubTaskGroupType.ConfigureUniverse); getRunnableTask().runSubTasks(); + } catch (Exception e) { + log.error("{} hit error : {}", getName(), e.getMessage()); + // Set xCluster config status to failed. + xClusterConfig.updateStatus(XClusterConfigStatusType.Failed); + // Set tables in updating status to failed. + Set tablesInPendingStatus = + xClusterConfig.getTableIdsInStatus( + getTableIds(taskParams().getTableInfoList()), + X_CLUSTER_TABLE_CONFIG_PENDING_STATUS_LIST); + xClusterConfig.updateStatusForTables( + tablesInPendingStatus, XClusterTableConfig.Status.Failed); + + if (xClusterConfig.isUsedForDr()) { + // Prevent all other DR tasks except delete from running. + log.info( + "Setting the dr config state of xCluster config {} to {} from {}", + xClusterConfig.getUuid(), + State.Failed, + xClusterConfig.getDrConfig().getState()); + xClusterConfig.getDrConfig().setState(State.Failed); + xClusterConfig.getDrConfig().update(); + } + + // Set backup and restore status to failed and alter load balanced. + boolean isLoadBalancerAltered = false; + for (Restore restore : restoreList) { + isLoadBalancerAltered = isLoadBalancerAltered || restore.isAlterLoadBalancer(); + } + handleFailedBackupAndRestore( + backupList, restoreList, false /* isAbort */, isLoadBalancerAltered); + throw new RuntimeException(e); } finally { // Unlock the target universe. unlockUniverseForUpdate(targetUniverse.getUniverseUUID()); } - } catch (Exception e) { - log.error("{} hit error : {}", getName(), e.getMessage()); - // Set xCluster config status to failed. - xClusterConfig.updateStatus(XClusterConfigStatusType.Failed); - // Set tables in updating status to failed. - Set tablesInPendingStatus = - xClusterConfig.getTableIdsInStatus( - getTableIds(taskParams().getTableInfoList()), - X_CLUSTER_TABLE_CONFIG_PENDING_STATUS_LIST); - xClusterConfig.updateStatusForTables( - tablesInPendingStatus, XClusterTableConfig.Status.Failed); - - if (xClusterConfig.isUsedForDr()) { - // Prevent all other DR tasks except delete from running. - log.info( - "Setting the dr config state of xCluster config {} to {} from {}", - xClusterConfig.getUuid(), - State.Error, - xClusterConfig.getDrConfig().getState()); - xClusterConfig.getDrConfig().setState(State.Error); - xClusterConfig.getDrConfig().update(); - } - - // Set backup and restore status to failed and alter load balanced. - boolean isLoadBalancerAltered = false; - for (Restore restore : restoreList) { - isLoadBalancerAltered = isLoadBalancerAltered || restore.isAlterLoadBalancer(); - } - handleFailedBackupAndRestore( - backupList, restoreList, false /* isAbort */, isLoadBalancerAltered); - throw new RuntimeException(e); } finally { // Unlock the source universe. unlockUniverseForUpdate(sourceUniverse.getUniverseUUID()); @@ -311,17 +325,6 @@ protected void addSubtasksToCreateXClusterConfig( sourceDbIds, !CollectionUtils.isEmpty(tableIdsNotNeedBootstrap), pitrParams); - - // After all the other subtasks are done, set the DR states to show replication is happening. - if (xClusterConfig.isUsedForDr()) { - createSetDrStatesTask( - xClusterConfig, - State.Replicating, - SourceUniverseState.ReplicatingData, - TargetUniverseState.ReceivingData, - null /* keyspacePending */) - .setSubTaskGroupType(UserTaskDetails.SubTaskGroupType.ConfigureUniverse); - } } protected void addSubtasksToCreateXClusterConfig( @@ -375,9 +378,12 @@ protected void addSubtasksForTablesNotNeedBootstrap( ? CommonTypes.TableType.PGSQL_TABLE_TYPE : requestedTableInfoList.get(0).getTableType(); - // Create checkpoints for the tables. - createBootstrapProducerTask(xClusterConfig, tableIdsNotNeedBootstrap) - .setSubTaskGroupType(UserTaskDetails.SubTaskGroupType.BootstrappingProducer); + if (xClusterConfig.getTablesById(tableIdsNotNeedBootstrap).stream() + .anyMatch(tableConfig -> Objects.isNull(tableConfig.getStreamId()))) { + // Create checkpoints for the tables. + createBootstrapProducerTask(xClusterConfig, tableIdsNotNeedBootstrap) + .setSubTaskGroupType(UserTaskDetails.SubTaskGroupType.BootstrappingProducer); + } if (xClusterConfig.isUsedForDr()) { createSetDrStatesTask( @@ -411,68 +417,10 @@ protected void addSubtasksForTablesNotNeedBootstrap( } namespaces.forEach( namespace -> { - Optional pitrConfigOptional = - PitrConfig.maybeGet( - xClusterConfig.getTargetUniverseUUID(), tableType, namespace.getName()); - long retentionPeriodSeconds; - long snapshotIntervalSeconds; - if (xClusterConfig.isUsedForDr() && Objects.nonNull(pitrParams)) { - retentionPeriodSeconds = pitrParams.retentionPeriodSec; - snapshotIntervalSeconds = pitrParams.snapshotIntervalSec; - } else { - retentionPeriodSeconds = - confGetter - .getConfForScope( - targetUniverse, UniverseConfKeys.txnXClusterPitrDefaultRetentionPeriod) - .getSeconds(); - snapshotIntervalSeconds = - confGetter - .getConfForScope( - targetUniverse, UniverseConfKeys.txnXClusterPitrDefaultSnapshotInterval) - .getSeconds(); - } - log.info( - "Using retentionPeriodSeconds={} and snapshotIntervalSeconds={} as PITR params", - retentionPeriodSeconds, - snapshotIntervalSeconds); - - if (pitrConfigOptional.isPresent()) { - // Only delete and recreate if the PITR config parameters differ from taskParams. - if (pitrConfigOptional.get().getRetentionPeriod() != retentionPeriodSeconds - || pitrConfigOptional.get().getScheduleInterval() != snapshotIntervalSeconds) { - log.info( - "Deleting the existing PITR config and creating a new one with the new" - + " parameters"); - createDeletePitrConfigTask( - pitrConfigOptional.get().getUuid(), - targetUniverse.getUniverseUUID(), - false /* ignoreErrors */); - // We mark this PITR config as not created during DR as it existed before DR with - // different params. - // In Future, we will set the PITR config with old params if it not required by DR. - createCreatePitrConfigTask( - targetUniverse, - namespace.getName(), - tableType, - retentionPeriodSeconds, - snapshotIntervalSeconds, - xClusterConfig, - false /* createdForDr */); - } else { - log.info("Reusing the existing PITR config because it has the right parameters"); - xClusterConfig.addPitrConfig(pitrConfigOptional.get()); - } - } else { - log.info("Creating a new PITR config"); - createCreatePitrConfigTask( - targetUniverse, - namespace.getName(), - tableType, - retentionPeriodSeconds, - snapshotIntervalSeconds, - xClusterConfig, - true /* createdForDr */); - } + createPitrConfigIfRequired( + xClusterConfig, targetUniverse, tableType, namespace.getName(), pitrParams); + createPitrConfigIfRequired( + xClusterConfig, sourceUniverse, tableType, namespace.getName(), pitrParams); }); } @@ -519,12 +467,26 @@ protected void addSubtasksForTablesNeedBootstrap( String namespaceId = dbNameToDbIdMap.get(namespaceName); List tablesInfoListNeedBootstrap = null; + if (xClusterConfig.getType() == ConfigType.Db) { + Optional namespaceConfigOptional = + xClusterConfig.maybeGetNamespaceById(namespaceId); + if (namespaceConfigOptional.isPresent() + && namespaceConfigOptional.get().getStatus() == Status.Running) { + log.info( + "Namespace {} already is in replication {}, skipping", + namespaceName, + xClusterConfig.getUuid()); + continue; + } + } + // For db scoped replication, we will skip backup/restore subtasks at runtime if bootstrapping // is not required. For non-db scoped replication, we always perform backup restore here. Predicate bootstrapRequiredPredicate = task -> { + // No bootstrap should be done for switchover. if (xClusterConfig.isUsedForDr() - && xClusterConfig.getDrConfig().getFailoverXClusterConfig() != null) { + && xClusterConfig.getDrConfig().getState().equals(State.SwitchoverInProgress)) { return false; } @@ -557,7 +519,6 @@ protected void addSubtasksForTablesNeedBootstrap( } if (xClusterConfig.getType() == ConfigType.Db) { - if (!xClusterConfig.getDbIds().contains(namespaceId)) { xClusterConfig.addNamespaces(Set.of(namespaceId)); } @@ -623,22 +584,43 @@ protected void addSubtasksForTablesNeedBootstrap( } // Before dropping the tables on the target universe, delete the associated PITR configs. - Optional pitrConfigOptional = + Optional pitrConfigOnTargetOptional = PitrConfig.maybeGet( xClusterConfig.getTargetUniverseUUID(), tableType, namespaceName); // Need to drop pitr configs that may be dangling. - boolean hadPitrBeforeDr = false; + long retentionPeriodSeconds; + long snapshotIntervalSeconds; + if (xClusterConfig.isUsedForDr() && Objects.nonNull(pitrParams)) { + retentionPeriodSeconds = pitrParams.retentionPeriodSec; + snapshotIntervalSeconds = pitrParams.snapshotIntervalSec; + } else { + retentionPeriodSeconds = + confGetter + .getConfForScope( + targetUniverse, UniverseConfKeys.txnXClusterPitrDefaultRetentionPeriod) + .getSeconds(); + snapshotIntervalSeconds = + confGetter + .getConfForScope( + targetUniverse, UniverseConfKeys.txnXClusterPitrDefaultSnapshotInterval) + .getSeconds(); + } if (xClusterConfig.getType() != ConfigType.Basic) { - if (pitrConfigOptional.isPresent()) { - hadPitrBeforeDr = true; - } - pitrConfigOptional.ifPresent( + // Delete the PITR config if the the bootstrap required predicate is true or the PITR + // config has different parameters. + pitrConfigOnTargetOptional.ifPresent( pitrConfig -> createDeletePitrConfigTask( - pitrConfig.getUuid(), - targetUniverse.getUniverseUUID(), - false /* ignoreErrors */)); + pitrConfig.getUuid(), + targetUniverse.getUniverseUUID(), + false /* ignoreErrors */) + .setShouldRunPredicate( + bootstrapRequiredPredicate.or( + task -> + pitrConfig.getRetentionPeriod() != retentionPeriodSeconds + || pitrConfig.getScheduleInterval() + != snapshotIntervalSeconds))); } if (tableType == CommonTypes.TableType.YQL_TABLE_TYPE) { @@ -683,6 +665,7 @@ protected void addSubtasksForTablesNeedBootstrap( targetUniverse, UniverseConfKeys.sleepTimeBeforeRestoreXClusterSetup); if (waitTime.compareTo(Duration.ZERO) > 0) { createWaitForDurationSubtask(targetUniverse, waitTime) + .setShouldRunPredicate(bootstrapRequiredPredicate) .setSubTaskGroupType(UserTaskDetails.SubTaskGroupType.RestoringBackup); } @@ -693,6 +676,7 @@ protected void addSubtasksForTablesNeedBootstrap( SourceUniverseState.WaitingForDr, TargetUniverseState.Bootstrapping, namespaceName) + .setShouldRunPredicate(bootstrapRequiredPredicate) .setSubTaskGroupType(UserTaskDetails.SubTaskGroupType.ConfigureUniverse); } @@ -723,31 +707,35 @@ protected void addSubtasksForTablesNeedBootstrap( // Recreate the PITR config for txn xCluster. if (xClusterConfig.getType() != ConfigType.Basic) { - long retentionPeriodSeconds; - long snapshotIntervalSeconds; - if (xClusterConfig.isUsedForDr() && Objects.nonNull(pitrParams)) { - retentionPeriodSeconds = pitrParams.retentionPeriodSec; - snapshotIntervalSeconds = pitrParams.snapshotIntervalSec; + if (pitrConfigOnTargetOptional.isPresent()) { + PitrConfig pitrConfig = pitrConfigOnTargetOptional.get(); + // Create the PITR config on the target if the predicate is true which means the + // previously existed PITR is deleted. + createCreatePitrConfigTask( + targetUniverse, + namespaceName, + tableType, + retentionPeriodSeconds, + snapshotIntervalSeconds, + xClusterConfig, + false /* createdForDr */) + .setShouldRunPredicate( + bootstrapRequiredPredicate.or( + task -> + pitrConfig.getRetentionPeriod() != retentionPeriodSeconds + || pitrConfig.getScheduleInterval() != snapshotIntervalSeconds)); } else { - retentionPeriodSeconds = - confGetter - .getConfForScope( - targetUniverse, UniverseConfKeys.txnXClusterPitrDefaultRetentionPeriod) - .getSeconds(); - snapshotIntervalSeconds = - confGetter - .getConfForScope( - targetUniverse, UniverseConfKeys.txnXClusterPitrDefaultSnapshotInterval) - .getSeconds(); + createCreatePitrConfigTask( + targetUniverse, + namespaceName, + tableType, + retentionPeriodSeconds, + snapshotIntervalSeconds, + xClusterConfig, + true /* createdForDr */); } - createCreatePitrConfigTask( - targetUniverse, - namespaceName, - tableType, - retentionPeriodSeconds, - snapshotIntervalSeconds, - xClusterConfig, - !hadPitrBeforeDr); + createPitrConfigIfRequired( + xClusterConfig, sourceUniverse, tableType, namespaceName, pitrParams); } if (xClusterConfig.getType() == ConfigType.Db) { @@ -774,16 +762,19 @@ protected void addSubtasksForTablesNeedBootstrap( if (xClusterConfig.getType() == ConfigType.Db) { createXClusterDbReplicationSetupTask(xClusterConfig) .setSubTaskGroupType(UserTaskDetails.SubTaskGroupType.ConfigureUniverse); - createXClusterConfigSetStatusForNamespaceTask( - xClusterConfig, - Collections.singleton(namespaceId), - XClusterNamespaceConfig.Status.Running); } else { createXClusterConfigSetupTask(xClusterConfig, tableIdsNeedBootstrap) .setSubTaskGroupType(UserTaskDetails.SubTaskGroupType.ConfigureUniverse); } isReplicationConfigCreated = true; } + + if (xClusterConfig.getType() == ConfigType.Db) { + createXClusterConfigSetStatusForNamespacesTask( + xClusterConfig, + Collections.singleton(namespaceId), + XClusterNamespaceConfig.Status.Running); + } } } @@ -1017,4 +1008,70 @@ public void createTransferXClusterCertsCopyTasks( sourceUniverse.getNodes(), replicationGroupName, cert, sourceUniverse)); } } + + protected void createPitrConfigIfRequired( + XClusterConfig xClusterConfig, + Universe universe, + TableType tableType, + String dbName, + @Nullable DrConfigCreateForm.PitrParams pitrParams) { + long retentionPeriodSeconds; + long snapshotIntervalSeconds; + if (xClusterConfig.isUsedForDr() && Objects.nonNull(pitrParams)) { + retentionPeriodSeconds = pitrParams.retentionPeriodSec; + snapshotIntervalSeconds = pitrParams.snapshotIntervalSec; + } else { + retentionPeriodSeconds = + confGetter + .getConfForScope(universe, UniverseConfKeys.txnXClusterPitrDefaultRetentionPeriod) + .getSeconds(); + snapshotIntervalSeconds = + confGetter + .getConfForScope(universe, UniverseConfKeys.txnXClusterPitrDefaultSnapshotInterval) + .getSeconds(); + } + log.info( + "Using retentionPeriodSeconds={} and snapshotIntervalSeconds={} as PITR params", + retentionPeriodSeconds, + snapshotIntervalSeconds); + Optional pitrConfigOptional = + PitrConfig.maybeGet(universe.getUniverseUUID(), tableType, dbName); + if (pitrConfigOptional.isPresent()) { + // Only delete and recreate if the PITR config parameters differ from taskParams. + if (pitrConfigOptional.get().getRetentionPeriod() != retentionPeriodSeconds + || pitrConfigOptional.get().getScheduleInterval() != snapshotIntervalSeconds) { + log.info( + "Deleting the existing PITR config and creating a new one with the new" + + " parameters"); + createDeletePitrConfigTask( + pitrConfigOptional.get().getUuid(), + universe.getUniverseUUID(), + false /* ignoreErrors */); + // We mark this PITR config as not created during DR as it existed before DR with + // different params. + // In Future, we will set the PITR config with old params if it not required by DR. + createCreatePitrConfigTask( + universe, + dbName, + tableType, + retentionPeriodSeconds, + snapshotIntervalSeconds, + xClusterConfig, + false /* createdForDr */); + } else { + log.info("Reusing the existing PITR config because it has the right parameters"); + xClusterConfig.addPitrConfig(pitrConfigOptional.get()); + } + } else { + log.info("Creating a new PITR config"); + createCreatePitrConfigTask( + universe, + dbName, + tableType, + retentionPeriodSeconds, + snapshotIntervalSeconds, + xClusterConfig, + true /* createdForDr */); + } + } } diff --git a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/DeleteDrConfig.java b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/DeleteDrConfig.java index b94e8ec5f239..f5b6e2fc0e10 100644 --- a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/DeleteDrConfig.java +++ b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/DeleteDrConfig.java @@ -98,6 +98,14 @@ public void run() { } getRunnableTask().runSubTasks(); + } catch (Exception e) { + log.error("{} hit error : {}", getName(), e.getMessage()); + Optional mightDeletedXClusterConfig = maybeGetXClusterConfig(); + if (mightDeletedXClusterConfig.isPresent() + && !isInMustDeleteStatus(mightDeletedXClusterConfig.get())) { + mightDeletedXClusterConfig.get().updateStatus(XClusterConfigStatusType.DeletionFailed); + } + throw new RuntimeException(e); } finally { if (targetUniverse != null) { // Unlock the target universe. @@ -105,14 +113,6 @@ public void run() { } unlockXClusterUniverses(lockedXClusterUniversesUuidSet, false /* force delete */); } - } catch (Exception e) { - log.error("{} hit error : {}", getName(), e.getMessage()); - Optional mightDeletedXClusterConfig = maybeGetXClusterConfig(); - if (mightDeletedXClusterConfig.isPresent() - && !isInMustDeleteStatus(mightDeletedXClusterConfig.get())) { - mightDeletedXClusterConfig.get().updateStatus(XClusterConfigStatusType.DeletionFailed); - } - throw new RuntimeException(e); } finally { if (sourceUniverse != null) { // Unlock the source universe. diff --git a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/DestroyKubernetesUniverse.java b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/DestroyKubernetesUniverse.java index ec6609c2b1f7..83f2fb2327b3 100644 --- a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/DestroyKubernetesUniverse.java +++ b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/DestroyKubernetesUniverse.java @@ -35,6 +35,7 @@ import com.yugabyte.yw.models.helpers.CommonUtils; import com.yugabyte.yw.models.helpers.PlacementInfo; import com.yugabyte.yw.models.helpers.TaskType; +import java.io.IOException; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -149,6 +150,11 @@ public void run() { createDestroyEncryptionAtRestTask() .setSubTaskGroupType(UserTaskDetails.SubTaskGroupType.RemovingUnusedServers); + SubTaskGroup namespacedServicesDelete = + createSubTaskGroup( + KubernetesCommandExecutor.CommandType.NAMESPACED_SVC_DELETE.getSubTaskGroupName(), + UserTaskDetails.SubTaskGroupType.RemovingUnusedServers); + // Try to unify this with the edit remove pods/deployments flow. Currently delete is // tied down to a different base class which makes params porting not straight-forward. SubTaskGroup helmDeletes = @@ -177,12 +183,31 @@ public void run() { Map> azToConfig = KubernetesUtil.getConfigPerAZ(pi); boolean isMultiAz = PlacementInfoUtil.isMultiAZ(provider); + Set namespaceServiceOwners; + try { + namespaceServiceOwners = + KubernetesUtil.getNSScopedServiceOwners( + universe.getUniverseDetails(), universe.getConfig(), cluster.clusterType); + } catch (IOException e) { + throw new RuntimeException("Parsing overrides failed!", e.getCause()); + } + for (Entry> entry : azToConfig.entrySet()) { UUID azUUID = entry.getKey(); String azName = isMultiAz ? AvailabilityZone.getOrBadRequest(azUUID).getCode() : null; Map config = entry.getValue(); + if (namespaceServiceOwners.contains(azUUID)) { + namespacedServicesDelete.addSubTask( + createDeleteKubernetesNamespacedServiceTask( + universe.getName(), + config, + universe.getUniverseDetails().nodePrefix, + azName, + null /* serviceNames */)); + } + String namespace = config.get("KUBENAMESPACE"); if (runHelmDelete || namespace != null) { @@ -238,6 +263,7 @@ public void run() { } } + getRunnableTask().addSubTaskGroup(namespacedServicesDelete); getRunnableTask().addSubTaskGroup(helmDeletes); getRunnableTask().addSubTaskGroup(volumeDeletes); getRunnableTask().addSubTaskGroup(namespaceDeletes); diff --git a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/EditDrConfig.java b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/EditDrConfig.java index 8781d5cbd30e..b6a68a707951 100644 --- a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/EditDrConfig.java +++ b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/EditDrConfig.java @@ -3,7 +3,9 @@ import com.yugabyte.yw.commissioner.BaseTaskDependencies; import com.yugabyte.yw.commissioner.UserTaskDetails; +import com.yugabyte.yw.common.DrConfigStates.SourceUniverseState; import com.yugabyte.yw.common.DrConfigStates.State; +import com.yugabyte.yw.common.DrConfigStates.TargetUniverseState; import com.yugabyte.yw.common.XClusterUniverseService; import com.yugabyte.yw.forms.DrConfigTaskParams; import com.yugabyte.yw.models.DrConfig; @@ -114,9 +116,9 @@ public void run() { log.info( "Setting the dr config state of xCluster config {} to {} from {}", newXClusterConfig.getUuid(), - State.Error, + State.Failed, drConfig.getState()); - drConfig.setState(State.Error); + drConfig.setState(State.Failed); drConfig.update(); // Set backup and restore status to failed and alter load balanced. @@ -177,6 +179,17 @@ protected void addSubtasksToUseNewXClusterConfig( taskParams().getPitrParams()); } + // After all the other subtasks are done, set the DR states to show replication is happening. + if (newXClusterConfig.isUsedForDr()) { + createSetDrStatesTask( + newXClusterConfig, + State.Replicating, + SourceUniverseState.ReplicatingData, + TargetUniverseState.ReceivingData, + null /* keyspacePending */) + .setSubTaskGroupType(UserTaskDetails.SubTaskGroupType.ConfigureUniverse); + } + createXClusterConfigSetStatusTask(newXClusterConfig, XClusterConfigStatusType.Running) .setSubTaskGroupType(UserTaskDetails.SubTaskGroupType.ConfigureUniverse); } diff --git a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/EditDrConfigParams.java b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/EditDrConfigParams.java index cb9c7be7ba7d..892526b55dd2 100644 --- a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/EditDrConfigParams.java +++ b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/EditDrConfigParams.java @@ -59,14 +59,6 @@ public void run() { { try { - createSetDrStatesTask( - xClusterConfig, - State.Updating, - null /* sourceUniverseState */, - null /* targetUniverseState */, - null /* keyspacePending */) - .setSubTaskGroupType(UserTaskDetails.SubTaskGroupType.ConfigureUniverse); - createXClusterConfigSetStatusTask(xClusterConfig, XClusterConfigStatusType.Updating); if (taskParams().getPitrParams() != null) { @@ -128,18 +120,7 @@ public void run() { } } catch (Exception e) { log.error("{} hit error : {}", getName(), e.getMessage()); - xClusterConfig.updateStatus(XClusterConfigStatusType.Failed); - - // Prevent all other DR tasks except delete from running. - log.info( - "Setting the dr config state of xCluster config {} to {} from {}", - xClusterConfig.getUuid(), - State.Error, - drConfig.getState()); - drConfig.setState(State.Error); - drConfig.update(); - throw new RuntimeException(e); } finally { // Unlock the source universe. diff --git a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/EditKubernetesUniverse.java b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/EditKubernetesUniverse.java index b79b9eec4dc7..8aa41089337b 100644 --- a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/EditKubernetesUniverse.java +++ b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/EditKubernetesUniverse.java @@ -379,6 +379,15 @@ private boolean editCluster( for (UUID currAZs : curPlacement.configs.keySet()) { PlacementInfoUtil.addPlacementZone(currAZs, activeZones); } + + // Handle Namespaced services ownership change/delete + addHandleKubernetesNamespacedServices( + false /* readReplicaDelete */, + taskParams(), + taskParams().getUniverseUUID(), + true /* handleOwnershipChanges */) + .setSubTaskGroupType(SubTaskGroupType.KubernetesHandleNamespacedService); + if (!mastersToAdd.isEmpty()) { // Bring up new masters and update the configs. // No need to check mastersToRemove as total number of masters is invariant. diff --git a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/EditXClusterConfig.java b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/EditXClusterConfig.java index efe7ba3bbf1b..f60fe45edbe6 100644 --- a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/EditXClusterConfig.java +++ b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/EditXClusterConfig.java @@ -90,7 +90,8 @@ public void run() { createChangeXClusterRoleTask( taskParams().getXClusterConfig(), editFormData.sourceRole, - editFormData.targetRole) + editFormData.targetRole, + false /* ignoreErrors */) .setSubTaskGroupType(UserTaskDetails.SubTaskGroupType.ConfigureUniverse); } else if (editFormData.tables != null) { if (!CollectionUtils.isEmpty(taskParams().getTableInfoList())) { @@ -311,6 +312,18 @@ protected void addSubtasksToAddTablesToXClusterConfig( mainTableIndexTablesMap, taskParams().getSourceTableIdsWithNoTableOnTargetUniverse(), taskParams().getPitrParams()); + + // After all the other subtasks are done, set the DR states to show replication is + // happening. + if (xClusterConfig.isUsedForDr()) { + createSetDrStatesTask( + xClusterConfig, + State.Replicating, + SourceUniverseState.ReplicatingData, + TargetUniverseState.ReceivingData, + null /* keyspacePending */) + .setSubTaskGroupType(UserTaskDetails.SubTaskGroupType.ConfigureUniverse); + } } else { createRemoveTableFromXClusterConfigSubtasks( xClusterConfig, tableIdsDeleteReplication, true /* keepEntry */); diff --git a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/FailoverDrConfig.java b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/FailoverDrConfig.java index 66d53174c075..8ebb400ee3bb 100644 --- a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/FailoverDrConfig.java +++ b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/FailoverDrConfig.java @@ -2,6 +2,7 @@ package com.yugabyte.yw.commissioner.tasks; import com.yugabyte.yw.commissioner.BaseTaskDependencies; +import com.yugabyte.yw.commissioner.ITask.Retryable; import com.yugabyte.yw.commissioner.UserTaskDetails; import com.yugabyte.yw.common.DrConfigStates.SourceUniverseState; import com.yugabyte.yw.common.DrConfigStates.State; @@ -11,17 +12,19 @@ import com.yugabyte.yw.models.Restore; import com.yugabyte.yw.models.Universe; import com.yugabyte.yw.models.XClusterConfig; +import com.yugabyte.yw.models.XClusterConfig.ConfigType; import com.yugabyte.yw.models.XClusterConfig.XClusterConfigStatusType; import com.yugabyte.yw.models.XClusterTableConfig; -import java.util.List; import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.concurrent.TimeUnit; import javax.inject.Inject; import lombok.extern.slf4j.Slf4j; +import org.yb.master.MasterTypes.NamespaceIdentifierPB; @Slf4j +@Retryable public class FailoverDrConfig extends EditDrConfig { @Inject @@ -44,20 +47,21 @@ public String getName() { public void run() { log.info("Running {}", getName()); - Optional currentXClusterConfigOptional = - Optional.ofNullable(taskParams().getOldXClusterConfig()); - // For failover, handling failure in the middle of task execution is not yet supported, thus - // the dr config should always have the current xCluster config object. - if (currentXClusterConfigOptional.isEmpty()) { + XClusterConfig currentXClusterConfig = taskParams().getOldXClusterConfig(); + // Either the task is created which means the old xCluster config exists or the task is retry-ed + // which means the old xCluster config can potentially be deleted. + if (isFirstTry() && Objects.isNull(currentXClusterConfig)) { throw new IllegalStateException( "The old xCluster config does not exist and cannot do a failover"); + } else if (!isFirstTry() && Objects.isNull(currentXClusterConfig)) { + log.warn("The old xCluster config got deleted in the previous run"); } - XClusterConfig currentXClusterConfig = currentXClusterConfigOptional.get(); XClusterConfig failoverXClusterConfig = getXClusterConfigFromTaskParams(); + // In failoverXClusterConfig, the source and target universes are swapped. Universe sourceUniverse = - Universe.getOrBadRequest(currentXClusterConfig.getSourceUniverseUUID()); + Universe.getOrBadRequest(failoverXClusterConfig.getTargetUniverseUUID()); Universe targetUniverse = - Universe.getOrBadRequest(currentXClusterConfig.getTargetUniverseUUID()); + Universe.getOrBadRequest(failoverXClusterConfig.getSourceUniverseUUID()); try { // Lock the source universe. lockAndFreezeUniverseForUpdate( @@ -67,79 +71,83 @@ public void run() { lockAndFreezeUniverseForUpdate( targetUniverse.getUniverseUUID(), targetUniverse.getVersion(), null /* Txn callback */); - createSetDrStatesTask( + if (!failoverXClusterConfig.getDrConfig().getState().equals(State.Halted)) { + if (Objects.nonNull(currentXClusterConfig)) { + createSetDrStatesTask( + currentXClusterConfig, + State.FailoverInProgress, + SourceUniverseState.DrFailed, + TargetUniverseState.SwitchingToDrPrimary, + null /* keyspacePending */) + .setSubTaskGroupType(UserTaskDetails.SubTaskGroupType.ConfigureUniverse); + + // The source and target universes are swapped in `failoverXClusterConfig`, so set the + // target universe state of that config which the source universe of the main config to + // `DrFailed`. + createSetDrStatesTask( + failoverXClusterConfig, + null /* drConfigState */, + null /* sourceUniverseState */, + TargetUniverseState.DrFailed, + null /* keyspacePending */) + .setSubTaskGroupType(UserTaskDetails.SubTaskGroupType.ConfigureUniverse); + + // Delete the main replication config. + // MUST skip deleting pitr configs here, otherwise we will not be able to restore to + // safetime. + createDeleteXClusterConfigSubtasks( currentXClusterConfig, - State.FailoverInProgress, - SourceUniverseState.DrFailed, - TargetUniverseState.SwitchingToDrPrimary, - null /* keyspacePending */) - .setSubTaskGroupType(UserTaskDetails.SubTaskGroupType.ConfigureUniverse); - - // The source and target universes are swapped in `failoverXClusterConfig`, so set the - // target universe state of that config which the source universe of the main config to - // `DrFailed`. - createSetDrStatesTask( - failoverXClusterConfig, - null /* drConfigState */, - null /* sourceUniverseState */, - TargetUniverseState.DrFailed, - null /* keyspacePending */) - .setSubTaskGroupType(UserTaskDetails.SubTaskGroupType.ConfigureUniverse); - - // Delete the main replication config. - // MUST skip deleting pitr configs here, otherwise we will not be able to restore to - // safetime. - createDeleteXClusterConfigSubtasks( - currentXClusterConfig, - false /* keepEntry */, - true /* forceDelete */, - false /* deletePitrConfigs */); - - createPromoteSecondaryConfigToMainConfigTask(failoverXClusterConfig); - - // Use pitr to restore to the safetime for all DBs. - getNamespaces(taskParams().getTableInfoList()) - .forEach( - namespace -> { - Optional pitrConfigOptional = - PitrConfig.maybeGet( - targetUniverse.getUniverseUUID(), + false /* keepEntry */, + true /* forceDelete */, + false /* deletePitrConfigs */); + } + + // Todo: remove the following subtask from all the tasks. + createPromoteSecondaryConfigToMainConfigTask(failoverXClusterConfig); + + Set namespaces; + if (failoverXClusterConfig.getType().equals(ConfigType.Db)) { + namespaces = getNamespaces(this.ybService, targetUniverse, taskParams().getDbs()); + } else { + namespaces = getNamespaces(taskParams().getTableInfoList()); + } + + // Use pitr to restore to the safetime for all DBs. + namespaces.forEach( + namespace -> { + Optional pitrConfigOptional = + PitrConfig.maybeGet( + targetUniverse.getUniverseUUID(), + failoverXClusterConfig.getTableTypeAsCommonType(), + namespace.getName()); + if (pitrConfigOptional.isEmpty()) { + throw new IllegalStateException( + String.format( + "No PITR config for database %s.%s found on universe %s", failoverXClusterConfig.getTableTypeAsCommonType(), - namespace.getName()); - if (pitrConfigOptional.isEmpty()) { - throw new IllegalStateException( - String.format( - "No PITR config for database %s.%s found on universe %s", - failoverXClusterConfig.getTableTypeAsCommonType(), - namespace.getName(), - targetUniverse.getUniverseUUID())); - } - - // Todo: Ensure the PITR config exists on YBDB. - - Long namespaceSafetimeEpochUs = - taskParams() - .getNamespaceIdSafetimeEpochUsMap() - .get(namespace.getId().toStringUtf8()); - if (Objects.isNull(namespaceSafetimeEpochUs)) { - throw new IllegalArgumentException( - String.format( - "No safetime for namespace %s is specified in the taskparams", - namespace.getName())); - } - - // Todo: Add a subtask group for the following. - createRestoreSnapshotScheduleTask( - targetUniverse, - pitrConfigOptional.get(), - TimeUnit.MICROSECONDS.toMillis(namespaceSafetimeEpochUs)); - }); - - // Delete PITR on failover as standby is now the new primary and we have restored snapshot. - List pitrConfigs = currentXClusterConfig.getPitrConfigs(); - for (PitrConfig pitrConfig : pitrConfigs) { - createDeletePitrConfigTask( - pitrConfig.getUuid(), targetUniverse.getUniverseUUID(), true /* ignoreErrors */); + namespace.getName(), + targetUniverse.getUniverseUUID())); + } + + // Todo: Ensure the PITR config exists on YBDB. + + Long namespaceSafetimeEpochUs = + taskParams() + .getNamespaceIdSafetimeEpochUsMap() + .get(namespace.getId().toStringUtf8()); + if (Objects.isNull(namespaceSafetimeEpochUs)) { + throw new IllegalArgumentException( + String.format( + "No safetime for namespace %s is specified in the taskparams", + namespace.getName())); + } + + // Todo: Add a subtask group for the following. + createRestoreSnapshotScheduleTask( + targetUniverse, + pitrConfigOptional.get(), + TimeUnit.MICROSECONDS.toMillis(namespaceSafetimeEpochUs)); + }); } createSetDrStatesTask( @@ -157,38 +165,40 @@ public void run() { .setSubTaskGroupType(UserTaskDetails.SubTaskGroupType.ConfigureUniverse); getRunnableTask().runSubTasks(); + } catch (Exception e) { + log.error("{} hit error : {}", getName(), e.getMessage()); + if (Objects.nonNull(currentXClusterConfig)) { + // Load the xCluster from the DB again because it might be deleted. + Optional xClusterConfigOptional = + XClusterConfig.maybeGet(currentXClusterConfig.getUuid()); + if (xClusterConfigOptional.isPresent() + && !isInMustDeleteStatus(xClusterConfigOptional.get())) { + xClusterConfigOptional.get().updateStatus(XClusterConfigStatusType.DeletionFailed); + } + } + // Set xCluster config status to failed. + if (!failoverXClusterConfig.getStatus().equals(XClusterConfigStatusType.Initialized)) { + failoverXClusterConfig.updateStatus(XClusterConfigStatusType.Failed); + } + // Set tables in updating status to failed. + Set tablesInPendingStatus = + failoverXClusterConfig.getTableIdsInStatus( + getTableIds(taskParams().getTableInfoList()), + X_CLUSTER_TABLE_CONFIG_PENDING_STATUS_LIST); + failoverXClusterConfig.updateStatusForTables( + tablesInPendingStatus, XClusterTableConfig.Status.Failed); + // Set backup and restore status to failed and alter load balanced. + boolean isLoadBalancerAltered = false; + for (Restore restore : restoreList) { + isLoadBalancerAltered = isLoadBalancerAltered || restore.isAlterLoadBalancer(); + } + handleFailedBackupAndRestore( + backupList, restoreList, false /* isAbort */, isLoadBalancerAltered); + throw new RuntimeException(e); } finally { // Unlock the target universe. unlockUniverseForUpdate(targetUniverse.getUniverseUUID()); } - } catch (Exception e) { - log.error("{} hit error : {}", getName(), e.getMessage()); - // Load the xCluster from the DB again because it might be deleted. - Optional xClusterConfigOptional = - XClusterConfig.maybeGet(currentXClusterConfigOptional.get().getUuid()); - if (xClusterConfigOptional.isPresent() - && !isInMustDeleteStatus(xClusterConfigOptional.get())) { - xClusterConfigOptional.get().updateStatus(XClusterConfigStatusType.DeletionFailed); - } - // Set xCluster config status to failed. - if (!failoverXClusterConfig.getStatus().equals(XClusterConfigStatusType.Initialized)) { - failoverXClusterConfig.updateStatus(XClusterConfigStatusType.Failed); - } - // Set tables in updating status to failed. - Set tablesInPendingStatus = - failoverXClusterConfig.getTableIdsInStatus( - getTableIds(taskParams().getTableInfoList()), - X_CLUSTER_TABLE_CONFIG_PENDING_STATUS_LIST); - failoverXClusterConfig.updateStatusForTables( - tablesInPendingStatus, XClusterTableConfig.Status.Failed); - // Set backup and restore status to failed and alter load balanced. - boolean isLoadBalancerAltered = false; - for (Restore restore : restoreList) { - isLoadBalancerAltered = isLoadBalancerAltered || restore.isAlterLoadBalancer(); - } - handleFailedBackupAndRestore( - backupList, restoreList, false /* isAbort */, isLoadBalancerAltered); - throw new RuntimeException(e); } finally { // Unlock the source universe. unlockUniverseForUpdate(sourceUniverse.getUniverseUUID()); diff --git a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/KubernetesTaskBase.java b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/KubernetesTaskBase.java index b8b41bc9ce7e..633d2281bde6 100644 --- a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/KubernetesTaskBase.java +++ b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/KubernetesTaskBase.java @@ -7,6 +7,7 @@ import com.yugabyte.yw.commissioner.UpgradeTaskBase; import com.yugabyte.yw.commissioner.UserTaskDetails; import com.yugabyte.yw.commissioner.UserTaskDetails.SubTaskGroupType; +import com.yugabyte.yw.commissioner.tasks.subtasks.HandleKubernetesNamespacedServices; import com.yugabyte.yw.commissioner.tasks.subtasks.KubernetesCheckNumPod; import com.yugabyte.yw.commissioner.tasks.subtasks.KubernetesCommandExecutor; import com.yugabyte.yw.commissioner.tasks.subtasks.KubernetesCommandExecutor.CommandType; @@ -30,6 +31,7 @@ import com.yugabyte.yw.models.helpers.DeviceInfo; import com.yugabyte.yw.models.helpers.NodeDetails; import com.yugabyte.yw.models.helpers.PlacementInfo; +import java.io.IOException; import java.time.Duration; import java.util.ArrayList; import java.util.Collection; @@ -47,6 +49,7 @@ import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; +import javax.annotation.Nullable; import javax.inject.Inject; import lombok.Builder; import lombok.Getter; @@ -64,7 +67,7 @@ public abstract class KubernetesTaskBase extends UniverseDefinitionTaskBase { @Inject protected KubernetesTaskBase(BaseTaskDependencies baseTaskDependencies) { - this(baseTaskDependencies, null); + this(baseTaskDependencies, null /* kubernetesManagerFactory */); } @Inject @@ -151,22 +154,6 @@ public KubernetesGflagsUpgradeCommonParams(Universe universe, Cluster cluster) { } } - public void createPodsTask( - String universeName, - KubernetesPlacement placement, - String masterAddresses, - boolean isReadOnlyCluster) { - createPodsTask( - universeName, - placement, - masterAddresses, - null, - null, - new PlacementInfo(), - isReadOnlyCluster, - false); - } - public void createPodsTask( String universeName, KubernetesPlacement placement, @@ -217,14 +204,13 @@ public void createPodsTask( boolean usePreviousGflagsChecksum) { String ybSoftwareVersion; Cluster primaryCluster; + + Universe universe = Universe.getOrBadRequest(taskParams().getUniverseUUID()); if (isReadOnlyCluster) { ybSoftwareVersion = taskParams().getReadOnlyClusters().get(0).userIntent.ybSoftwareVersion; primaryCluster = taskParams().getPrimaryCluster(); if (primaryCluster == null) { - primaryCluster = - Universe.getOrBadRequest(taskParams().getUniverseUUID()) - .getUniverseDetails() - .getPrimaryCluster(); + primaryCluster = universe.getUniverseDetails().getPrimaryCluster(); } String primaryClusterVersion = primaryCluster.userIntent.ybSoftwareVersion; if (!primaryClusterVersion.equals(ybSoftwareVersion)) { @@ -278,6 +264,17 @@ public void createPodsTask( azsOverrides = new HashMap<>(); } + Set namespaceServiceOwners; + try { + namespaceServiceOwners = + KubernetesUtil.getNSScopedServiceOwners( + taskParams(), + universe.getConfig(), + isReadOnlyCluster ? ClusterType.ASYNC : ClusterType.PRIMARY); + } catch (IOException e) { + throw new RuntimeException("Parsing overrides failed!", e.getCause()); + } + for (Entry> entry : newPlacement.configs.entrySet()) { UUID azUUID = entry.getKey(); String azCode = isMultiAz ? AvailabilityZone.get(azUUID).getCode() : null; @@ -286,6 +283,9 @@ public void createPodsTask( continue; } + // If set of owners contains this azUUID, make this the namespaced scope services owner + boolean namespacedServiceReleaseOwner = namespaceServiceOwners.contains(azUUID); + Map config = entry.getValue(); PlacementInfo tempPI = new PlacementInfo(); @@ -406,7 +406,8 @@ public void createPodsTask( azOverrides, isReadOnlyCluster, enableYbc, - false /* usePreviousGflagsChecksum */)); + false /* usePreviousGflagsChecksum */, + namespacedServiceReleaseOwner)); // Add zone to active configs. PlacementInfoUtil.addPlacementZone(azUUID, activeZones); @@ -1077,11 +1078,9 @@ public void deletePodsTask( boolean enableYbc, boolean usePreviousGflagsChecksum) { Cluster primaryCluster = taskParams().getPrimaryCluster(); + Universe universe = Universe.getOrBadRequest(taskParams().getUniverseUUID()); if (primaryCluster == null) { - primaryCluster = - Universe.getOrBadRequest(taskParams().getUniverseUUID()) - .getUniverseDetails() - .getPrimaryCluster(); + primaryCluster = universe.getUniverseDetails().getPrimaryCluster(); } String ybSoftwareVersion = primaryCluster.userIntent.ybSoftwareVersion; @@ -1160,7 +1159,8 @@ public void deletePodsTask( azOverrides, isReadOnlyCluster, enableYbc, - usePreviousGflagsChecksum)); + usePreviousGflagsChecksum, + false /* namespacedServiceReleaseOwner */)); podsWait.addSubTask( createKubernetesCheckPodNumTask( @@ -1330,22 +1330,20 @@ public KubernetesCommandExecutor createKubernetesExecutorTask( Map azOverrides, boolean isReadOnlyCluster, boolean enableYbc) { - return createKubernetesExecutorTaskForServerType( + return createKubernetesExecutorTask( universeName, commandType, pi, az, masterAddresses, ybSoftwareVersion, - ServerType.EITHER, config, - 0 /* master partition */, - 0 /* tserver partition */, universeOverrides, azOverrides, isReadOnlyCluster, enableYbc, - false /* usePreviousGflagsChecksum */); + false /* usePreviousGflagsChecksum */, + false /* namespacedServiceReleaseOwner */); } // Create the Kubernetes Executor task for the helm deployments. (USED) @@ -1361,7 +1359,8 @@ public KubernetesCommandExecutor createKubernetesExecutorTask( Map azOverrides, boolean isReadOnlyCluster, boolean enableYbc, - boolean usePreviousGflagsChecksum) { + boolean usePreviousGflagsChecksum, + boolean namespacedServiceReleaseOwner) { return createKubernetesExecutorTaskForServerType( universeName, commandType, @@ -1377,7 +1376,8 @@ public KubernetesCommandExecutor createKubernetesExecutorTask( azOverrides, isReadOnlyCluster, enableYbc, - usePreviousGflagsChecksum); + usePreviousGflagsChecksum, + namespacedServiceReleaseOwner); } public void installYbcOnThePods( @@ -1546,7 +1546,6 @@ public void createKubernetesYbcExecutorTask( } } - // Create and return the Kubernetes Executor task for deployment of a k8s universe. public KubernetesCommandExecutor createKubernetesExecutorTaskForServerType( String universeName, KubernetesCommandExecutor.CommandType commandType, @@ -1563,14 +1562,48 @@ public KubernetesCommandExecutor createKubernetesExecutorTaskForServerType( boolean isReadOnlyCluster, boolean enableYbc, boolean usePreviousGflagsChecksum) { + return createKubernetesExecutorTaskForServerType( + universeName, + commandType, + pi, + az, + masterAddresses, + ybSoftwareVersion, + serverType, + config, + masterPartition, + tserverPartition, + universeOverrides, + azOverrides, + isReadOnlyCluster, + enableYbc, + usePreviousGflagsChecksum, + false /* namespacedServiceReleaseOwner */); + } + + // Create and return the Kubernetes Executor task for deployment of a k8s universe. + public KubernetesCommandExecutor createKubernetesExecutorTaskForServerType( + String universeName, + KubernetesCommandExecutor.CommandType commandType, + PlacementInfo pi, + String az, + String masterAddresses, + String ybSoftwareVersion, + ServerType serverType, + Map config, + int masterPartition, + int tserverPartition, + Map universeOverrides, + Map azOverrides, + boolean isReadOnlyCluster, + boolean enableYbc, + boolean usePreviousGflagsChecksum, + boolean namespacedServiceReleaseOwner) { KubernetesCommandExecutor.Params params = new KubernetesCommandExecutor.Params(); Universe universe = Universe.getOrBadRequest(taskParams().getUniverseUUID()); Cluster primaryCluster = taskParams().getPrimaryCluster(); if (primaryCluster == null) { - primaryCluster = - Universe.getOrBadRequest(taskParams().getUniverseUUID()) - .getUniverseDetails() - .getPrimaryCluster(); + primaryCluster = universe.getUniverseDetails().getPrimaryCluster(); } params.providerUUID = isReadOnlyCluster @@ -1623,6 +1656,13 @@ public KubernetesCommandExecutor createKubernetesExecutorTaskForServerType( params.isReadOnlyCluster = isReadOnlyCluster; params.setEnableYbc(enableYbc); params.usePreviousGflagsChecksum = usePreviousGflagsChecksum; + + // Since create universe is running helm installs in parallel + // we need to make sure only one enables namespaced service to prevent + // race. + if (namespacedServiceReleaseOwner && commandType == CommandType.HELM_INSTALL) { + params.createNamespacedService = true; + } KubernetesCommandExecutor task = createTask(KubernetesCommandExecutor.class); task.initialize(params); return task; @@ -2209,6 +2249,25 @@ protected void createPostUpgradeChecks( } } + protected SubTaskGroup addHandleKubernetesNamespacedServices( + boolean readReplicaDelete, + @Nullable UniverseDefinitionTaskParams universeParams, + UUID universeUUID, + boolean handleOwnershipChanges) { + SubTaskGroup subTaskGroup = createSubTaskGroup("HandleKubernetesNamespacedServices"); + HandleKubernetesNamespacedServices.Params params = + new HandleKubernetesNamespacedServices.Params(); + params.setUniverseUUID(universeUUID); + params.universeParams = universeParams; + params.handleOwnershipChanges = handleOwnershipChanges; + params.deleteReadReplica = readReplicaDelete; + HandleKubernetesNamespacedServices task = createTask(HandleKubernetesNamespacedServices.class); + task.initialize(params); + subTaskGroup.addSubTask(task); + getRunnableTask().addSubTaskGroup(subTaskGroup); + return subTaskGroup; + } + protected void createValidateDiskSizeOnEdit(Universe universe) { int targetDiskUsagePercentage = confGetter.getConfForScope(universe, UniverseConfKeys.targetNodeDiskUsagePercentage); diff --git a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/ReadOnlyKubernetesClusterDelete.java b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/ReadOnlyKubernetesClusterDelete.java index 910c24b2f859..fc51a77a5e16 100644 --- a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/ReadOnlyKubernetesClusterDelete.java +++ b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/ReadOnlyKubernetesClusterDelete.java @@ -123,6 +123,14 @@ public void run() { KubernetesCommandExecutor.CommandType.NAMESPACE_DELETE.getSubTaskGroupName()); namespaceDeletes.setSubTaskGroupType(UserTaskDetails.SubTaskGroupType.RemovingUnusedServers); + // Handle Namespaced services ownership change/delete + addHandleKubernetesNamespacedServices( + true /* readReplicaDelete */, + null /* universeParams */, + universe.getUniverseUUID(), + false /* handleOwnershipChanges */) + .setSubTaskGroupType(SubTaskGroupType.KubernetesHandleNamespacedService); + // This value cannot be changed once set during the Universe // creation, so we don't allow users to modify it later during // edit, upgrade, etc. diff --git a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/RestartXClusterConfig.java b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/RestartXClusterConfig.java index a54fbafa6c8a..20ba304f8d22 100644 --- a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/RestartXClusterConfig.java +++ b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/RestartXClusterConfig.java @@ -48,7 +48,19 @@ public void run() { sourceUniverse, targetUniverse, false /* checkAutoFlagsEqualityOnBothUniverses */) .setSubTaskGroupType(UserTaskDetails.SubTaskGroupType.PreflightChecks); - // TODO full DB scoped restart support + // Delete extra xCluster configs for DR configs. + if (xClusterConfig.isUsedForDr()) { + xClusterConfig.getDrConfig().getXClusterConfigs().stream() + .filter(config -> !config.getUuid().equals(xClusterConfig.getUuid())) + .forEach( + config -> + createDeleteXClusterConfigSubtasks( + config, + false /* keepEntry */, + true /* forceDelete */, + false /* deletePitrConfigs */)); + } + List tableInfoList = taskParams().getTableInfoList(); Set tableIds = getTableIds(tableInfoList); @@ -124,6 +136,18 @@ public void run() { taskParams().getPitrParams(), taskParams().isForceBootstrap()); } + + // After all the other subtasks are done, set the DR states to show replication is + // happening. + if (xClusterConfig.isUsedForDr()) { + createSetDrStatesTask( + xClusterConfig, + State.Replicating, + SourceUniverseState.ReplicatingData, + TargetUniverseState.ReceivingData, + null /* keyspacePending */) + .setSubTaskGroupType(UserTaskDetails.SubTaskGroupType.ConfigureUniverse); + } } else { createXClusterConfigSetStatusForTablesTask( xClusterConfig, tableIds, XClusterTableConfig.Status.Updating); diff --git a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/RestoreSnapshotSchedule.java b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/RestoreSnapshotSchedule.java index 5fb0a42c0636..239a823ada5a 100644 --- a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/RestoreSnapshotSchedule.java +++ b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/RestoreSnapshotSchedule.java @@ -1,22 +1,24 @@ package com.yugabyte.yw.commissioner.tasks; +import com.google.common.collect.ImmutableList; import com.yugabyte.yw.commissioner.BaseTaskDependencies; +import com.yugabyte.yw.common.config.UniverseConfKeys; import com.yugabyte.yw.forms.RestoreSnapshotScheduleParams; import com.yugabyte.yw.models.Universe; import java.time.Duration; import java.util.List; -import java.util.UUID; import javax.inject.Inject; import lombok.extern.slf4j.Slf4j; import org.yb.client.ListSnapshotRestorationsResponse; import org.yb.client.RestoreSnapshotScheduleResponse; import org.yb.client.SnapshotRestorationInfo; import org.yb.client.YBClient; +import org.yb.master.CatalogEntityInfo.SysSnapshotEntryPB.State; @Slf4j public class RestoreSnapshotSchedule extends UniverseTaskBase { - - private static final int WAIT_DURATION_IN_MS = 15000; + public static final List RESTORATION_VALID_STATES = + ImmutableList.of(State.RESTORING, State.RESTORED); @Inject protected RestoreSnapshotSchedule(BaseTaskDependencies baseTaskDependencies) { @@ -30,84 +32,84 @@ protected RestoreSnapshotScheduleParams taskParams() { @Override public String getName() { - return super.getName() - + "(" - + taskParams().getUniverseUUID() - + ", pitrConfigUUID=" - + taskParams().pitrConfigUUID - + ")"; + return String.format( + "%s(universeUuid=%s, pitrConfigUUID=%s, restoreTimeInMillis=%s)", + super.getName(), + taskParams().getUniverseUUID(), + taskParams().pitrConfigUUID, + taskParams().restoreTimeInMillis); } @Override public void run() { - RestoreSnapshotScheduleResponse resp; - YBClient client = null; - Universe universe = Universe.getOrBadRequest(taskParams().getUniverseUUID()); - String masterHostPorts = universe.getMasterAddresses(); - String certificate = universe.getCertificateNodetoNode(); - try { - log.info("Running {}: masterHostPorts={}.", getName(), masterHostPorts); + log.info("Running {}", getName()); - client = ybService.getClient(masterHostPorts, certificate); - resp = + Universe universe = Universe.getOrBadRequest(taskParams().getUniverseUUID()); + String masterAddresses = universe.getMasterAddresses(); + String universeCertificate = universe.getCertificateNodetoNode(); + try (YBClient client = ybService.getClient(masterAddresses, universeCertificate)) { + RestoreSnapshotScheduleResponse resp = client.restoreSnapshotSchedule( taskParams().pitrConfigUUID, taskParams().restoreTimeInMillis); - - if (!resp.hasError()) { - pollSnapshotRestorationTask(client, resp.getRestorationUUID()); - } - } catch (Exception ex) { - log.error("{} hit exception : {}", getName(), ex.getMessage()); - throw new RuntimeException(ex); - } finally { - ybService.closeClient(client, masterHostPorts); - } - - if (resp.hasError()) { - String errorMsg = getName() + " failed due to error: " + resp.errorMessage(); - log.error(errorMsg); - throw new RuntimeException(errorMsg); - } - } - - private void pollSnapshotRestorationTask(YBClient client, UUID restorationUUID) { - while (true) { - waitFor(Duration.ofMillis(WAIT_DURATION_IN_MS)); - ListSnapshotRestorationsResponse listResp; - try { - listResp = client.listSnapshotRestorations(restorationUUID); - } catch (Exception ex) { - throw new RuntimeException(ex); + if (resp.hasError()) { + String errorMsg = getName() + " failed due to error: " + resp.errorMessage(); + log.error(errorMsg); + throw new RuntimeException(errorMsg); } - SnapshotRestorationInfo snapshotRestorationInfo = null; - List snapshotRestorationList = - listResp.getSnapshotRestorationInfoList(); + Duration pitrRestorePollDelay = + confGetter.getConfForScope(universe, UniverseConfKeys.pitrRestorePollDelay); + long pitrRestorePollDelayMs = pitrRestorePollDelay.toMillis(); + long pitrRestoreTimeoutMs = + confGetter.getConfForScope(universe, UniverseConfKeys.pitrRestoreTimeout).toMillis(); + long startTime = System.currentTimeMillis(); + long remainingTimeoutMs = pitrRestoreTimeoutMs - (System.currentTimeMillis() - startTime); + doWithConstTimeout( + pitrRestorePollDelayMs, + remainingTimeoutMs, + () -> { + try { + ListSnapshotRestorationsResponse listSnapshotRestorationsResponse = + client.listSnapshotRestorations(resp.getRestorationUUID()); + List snapshotRestorationInfoList = + listSnapshotRestorationsResponse.getSnapshotRestorationInfoList(); + SnapshotRestorationInfo snapshotRestorationInfo = + snapshotRestorationInfoList.stream() + .filter(sri -> resp.getRestorationUUID().equals(sri.getRestorationUUID())) + .findFirst() + .orElseThrow( + () -> + new RuntimeException( + String.format( + "Restore snapshot response for restore uuid: %s not found", + resp.getRestorationUUID()))); - for (SnapshotRestorationInfo info : snapshotRestorationList) { - if (info.getRestorationUUID().equals(restorationUUID)) { - snapshotRestorationInfo = info; - break; - } - } + if (State.RESTORED.equals(snapshotRestorationInfo.getState())) { + return; + } + if (State.RESTORING.equals(snapshotRestorationInfo.getState())) { + throw new RuntimeException("Snapshot is still in RESTORING state"); + } + throw new RuntimeException( + String.format( + "Valid states for a restoration are %s, but the restoration is in an invalid" + + " state: %s", + RESTORATION_VALID_STATES, snapshotRestorationInfo.getState())); + } catch (Exception e) { + throw new RuntimeException(e); + } + }); + } catch (Exception e) { + log.error("{} hit exception : {}", getName(), e.getMessage()); + throw new RuntimeException(e); + } - if (snapshotRestorationInfo == null) { - throw new RuntimeException( - String.format( - "Restore snapshot response for restore uuid: %s is null", restorationUUID)); - } + log.info("Completed {}", getName()); + } - switch (snapshotRestorationInfo.getState()) { - case RESTORING: - break; - case RESTORED: - return; - default: - throw new RuntimeException( - String.format( - "Restore snapshot schedule state for restore uuid: %s is invalid: %s", - restorationUUID, snapshotRestorationInfo.getState())); - } - } + private boolean needStateUpdateIdempotency(Object currentState, Object requestedState) { + // This subtask is idempotent by nature, i.e., the rerun of the subtask with the same params + // will end in the same state. + return true; } } diff --git a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/SwitchoverDrConfig.java b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/SwitchoverDrConfig.java index c013a78e8978..7849bc28fe0b 100644 --- a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/SwitchoverDrConfig.java +++ b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/SwitchoverDrConfig.java @@ -2,22 +2,27 @@ package com.yugabyte.yw.commissioner.tasks; import com.yugabyte.yw.commissioner.BaseTaskDependencies; +import com.yugabyte.yw.commissioner.ITask.Abortable; +import com.yugabyte.yw.commissioner.ITask.Retryable; import com.yugabyte.yw.commissioner.UserTaskDetails; import com.yugabyte.yw.commissioner.UserTaskDetails.SubTaskGroupType; import com.yugabyte.yw.common.DrConfigStates.SourceUniverseState; import com.yugabyte.yw.common.DrConfigStates.State; +import com.yugabyte.yw.common.DrConfigStates.TargetUniverseState; import com.yugabyte.yw.common.XClusterUniverseService; import com.yugabyte.yw.models.Restore; import com.yugabyte.yw.models.Universe; import com.yugabyte.yw.models.XClusterConfig; import com.yugabyte.yw.models.XClusterConfig.XClusterConfigStatusType; import com.yugabyte.yw.models.XClusterTableConfig; -import java.util.Optional; +import java.util.Objects; import java.util.Set; import javax.inject.Inject; import lombok.extern.slf4j.Slf4j; @Slf4j +@Retryable +@Abortable public class SwitchoverDrConfig extends EditDrConfig { @Inject @@ -40,20 +45,21 @@ public String getName() { public void run() { log.info("Running {}", getName()); - Optional currentXClusterConfigOptional = - Optional.ofNullable(taskParams().getOldXClusterConfig()); - // For switchover, handling failure in the middle of task execution is not yet supported, thus - // the dr config should always have the current xCluster config object. - if (currentXClusterConfigOptional.isEmpty()) { + XClusterConfig currentXClusterConfig = taskParams().getOldXClusterConfig(); + // Either the task is created which means the old xCluster config exists or the task is retry-ed + // which means the old xCluster config can potentially be deleted. + if (isFirstTry() && Objects.isNull(currentXClusterConfig)) { throw new IllegalStateException( - "The old xCluster config does not exist and cannot do a switchover"); + "The old xCluster config does not exist and cannot do a failover"); + } else if (!isFirstTry() && Objects.isNull(currentXClusterConfig)) { + log.warn("The old xCluster config got deleted in the previous run"); } - XClusterConfig currentXClusterConfig = currentXClusterConfigOptional.get(); XClusterConfig switchoverXClusterConfig = getXClusterConfigFromTaskParams(); + // In switchoverXClusterConfig, the source and target universes are swapped. Universe sourceUniverse = - Universe.getOrBadRequest(currentXClusterConfig.getSourceUniverseUUID()); + Universe.getOrBadRequest(switchoverXClusterConfig.getTargetUniverseUUID()); Universe targetUniverse = - Universe.getOrBadRequest(currentXClusterConfig.getTargetUniverseUUID()); + Universe.getOrBadRequest(switchoverXClusterConfig.getSourceUniverseUUID()); try { // Lock the source universe. lockAndFreezeUniverseForUpdate( @@ -63,55 +69,81 @@ public void run() { lockAndFreezeUniverseForUpdate( targetUniverse.getUniverseUUID(), targetUniverse.getVersion(), null /* Txn callback */); - // Swap the source and target universe. - createCheckXUniverseAutoFlag( - targetUniverse, sourceUniverse, false /* checkAutoFlagsEqualityOnBothUniverses */) - .setSubTaskGroupType(SubTaskGroupType.PreflightChecks); + if (Objects.nonNull(currentXClusterConfig)) { + if (switchoverXClusterConfig.getStatus() == XClusterConfigStatusType.Initialized) { + // Swap the source and target universe. + createCheckXUniverseAutoFlag( + targetUniverse, + sourceUniverse, + false /* checkAutoFlagsEqualityOnBothUniverses */) + .setSubTaskGroupType(SubTaskGroupType.PreflightChecks); + + createSetDrStatesTask( + currentXClusterConfig, + State.SwitchoverInProgress, + SourceUniverseState.PreparingSwitchover, + null /* targetUniverseState */, + null /* keyspacePending */) + .setSubTaskGroupType(UserTaskDetails.SubTaskGroupType.ConfigureUniverse); + + createXClusterConfigSetStatusForTablesTask( + switchoverXClusterConfig, + getTableIds(taskParams().getTableInfoList()), + XClusterTableConfig.Status.Updating); + + createXClusterConfigSetStatusTask( + switchoverXClusterConfig, XClusterConfigStatusType.Updating); + } + + if (switchoverXClusterConfig.getStatus() != XClusterConfigStatusType.Running) { + // Create new primary -> old primary (this will set old primary's role to be STANDBY) + if (switchoverXClusterConfig.getType() == XClusterConfig.ConfigType.Db) { + addSubtasksToCreateXClusterConfig( + switchoverXClusterConfig, taskParams().getDbs(), taskParams().getPitrParams()); + } else { + addSubtasksToCreateXClusterConfig( + switchoverXClusterConfig, + taskParams().getTableInfoList(), + taskParams().getMainTableIndexTablesMap(), + taskParams().getSourceTableIdsWithNoTableOnTargetUniverse(), + taskParams().getPitrParams()); + } + + createXClusterConfigSetStatusTask( + switchoverXClusterConfig, XClusterConfigStatusType.Running) + .setSubTaskGroupType(UserTaskDetails.SubTaskGroupType.ConfigureUniverse); + } + + if (currentXClusterConfig.getStatus() == XClusterConfigStatusType.Running) { + + createWaitForReplicationDrainTask(currentXClusterConfig); + + createXClusterConfigSetStatusTask( + currentXClusterConfig, XClusterConfigStatusType.DrainedData) + .setSubTaskGroupType(UserTaskDetails.SubTaskGroupType.ConfigureUniverse); + } + + // Todo: remove the following subtask from all the tasks. + createPromoteSecondaryConfigToMainConfigTask(switchoverXClusterConfig); + + // Delete old primary -> new primary (this will set new primary's role to be ACTIVE) + createDeleteXClusterConfigSubtasks( + currentXClusterConfig, + false /* keepEntry */, + false /*forceDelete*/, + true /*deletePitrConfigs*/); + } + // After all the other subtasks are done, set the DR states to show replication is + // happening. createSetDrStatesTask( - currentXClusterConfig, - State.SwitchoverInProgress, - SourceUniverseState.PreparingSwitchover, - null /* targetUniverseState */, + switchoverXClusterConfig, + State.Replicating, + SourceUniverseState.ReplicatingData, + TargetUniverseState.ReceivingData, null /* keyspacePending */) .setSubTaskGroupType(UserTaskDetails.SubTaskGroupType.ConfigureUniverse); - createXClusterConfigSetStatusTask( - switchoverXClusterConfig, XClusterConfigStatusType.Updating); - - createXClusterConfigSetStatusForTablesTask( - switchoverXClusterConfig, - getTableIds(taskParams().getTableInfoList()), - XClusterTableConfig.Status.Updating); - - // Create new primary -> old primary (this will set old primary's role to be STANDBY) - if (switchoverXClusterConfig.getType() == XClusterConfig.ConfigType.Db) { - addSubtasksToCreateXClusterConfig( - switchoverXClusterConfig, taskParams().getDbs(), taskParams().getPitrParams()); - } else { - addSubtasksToCreateXClusterConfig( - switchoverXClusterConfig, - taskParams().getTableInfoList(), - taskParams().getMainTableIndexTablesMap(), - taskParams().getSourceTableIdsWithNoTableOnTargetUniverse(), - taskParams().getPitrParams()); - } - - createWaitForReplicationDrainTask(currentXClusterConfig); - - createPromoteSecondaryConfigToMainConfigTask(switchoverXClusterConfig); - - // Delete old primary -> new primary (this will set new primary's role to be ACTIVE) - createDeleteXClusterConfigSubtasks( - currentXClusterConfig, - false /* keepEntry */, - false /*forceDelete*/, - true /*deletePitrConfigs*/); - - createXClusterConfigSetStatusTask( - switchoverXClusterConfig, XClusterConfigStatusType.Running) - .setSubTaskGroupType(UserTaskDetails.SubTaskGroupType.ConfigureUniverse); - createMarkUniverseUpdateSuccessTasks(targetUniverse.getUniverseUUID()) .setSubTaskGroupType(UserTaskDetails.SubTaskGroupType.ConfigureUniverse); @@ -119,40 +151,27 @@ public void run() { .setSubTaskGroupType(UserTaskDetails.SubTaskGroupType.ConfigureUniverse); getRunnableTask().runSubTasks(); + } catch (Exception e) { + log.error("{} hit error : {}", getName(), e.getMessage()); + // Set tables in updating status to failed. + Set tablesInPendingStatus = + switchoverXClusterConfig.getTableIdsInStatus( + getTableIds(taskParams().getTableInfoList()), + X_CLUSTER_TABLE_CONFIG_PENDING_STATUS_LIST); + switchoverXClusterConfig.updateStatusForTables( + tablesInPendingStatus, XClusterTableConfig.Status.Failed); + // Set backup and restore status to failed and alter load balanced. + boolean isLoadBalancerAltered = false; + for (Restore restore : restoreList) { + isLoadBalancerAltered = isLoadBalancerAltered || restore.isAlterLoadBalancer(); + } + handleFailedBackupAndRestore( + backupList, restoreList, false /* isAbort */, isLoadBalancerAltered); + throw new RuntimeException(e); } finally { // Unlock the target universe. unlockUniverseForUpdate(targetUniverse.getUniverseUUID()); } - } catch (Exception e) { - log.error("{} hit error : {}", getName(), e.getMessage()); - if (currentXClusterConfigOptional.isPresent()) { - // Load the xCluster from the DB again because it might be deleted. - Optional xClusterConfigOptional = - XClusterConfig.maybeGet(currentXClusterConfigOptional.get().getUuid()); - if (xClusterConfigOptional.isPresent() - && !isInMustDeleteStatus(xClusterConfigOptional.get())) { - xClusterConfigOptional.get().updateStatus(XClusterConfigStatusType.DeletionFailed); - } - } - // Set xCluster config status to failed. - if (switchoverXClusterConfig.getStatus() != XClusterConfigStatusType.Initialized) { - switchoverXClusterConfig.updateStatus(XClusterConfigStatusType.Failed); - } - // Set tables in updating status to failed. - Set tablesInPendingStatus = - switchoverXClusterConfig.getTableIdsInStatus( - getTableIds(taskParams().getTableInfoList()), - X_CLUSTER_TABLE_CONFIG_PENDING_STATUS_LIST); - switchoverXClusterConfig.updateStatusForTables( - tablesInPendingStatus, XClusterTableConfig.Status.Failed); - // Set backup and restore status to failed and alter load balanced. - boolean isLoadBalancerAltered = false; - for (Restore restore : restoreList) { - isLoadBalancerAltered = isLoadBalancerAltered || restore.isAlterLoadBalancer(); - } - handleFailedBackupAndRestore( - backupList, restoreList, false /* isAbort */, isLoadBalancerAltered); - throw new RuntimeException(e); } finally { // Unlock the source universe. unlockUniverseForUpdate(sourceUniverse.getUniverseUUID()); diff --git a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/UniverseDefinitionTaskBase.java b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/UniverseDefinitionTaskBase.java index c806100e77ff..8c9cbe04d817 100644 --- a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/UniverseDefinitionTaskBase.java +++ b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/UniverseDefinitionTaskBase.java @@ -44,6 +44,7 @@ import com.yugabyte.yw.commissioner.tasks.subtasks.WaitStartingFromTime; import com.yugabyte.yw.commissioner.tasks.subtasks.check.CheckCertificateConfig; import com.yugabyte.yw.common.DnsManager; +import com.yugabyte.yw.common.KubernetesUtil; import com.yugabyte.yw.common.NodeManager; import com.yugabyte.yw.common.PlacementInfoUtil; import com.yugabyte.yw.common.PlacementInfoUtil.SelectMastersResult; @@ -88,6 +89,7 @@ import com.yugabyte.yw.models.helpers.NodeDetails.NodeState; import com.yugabyte.yw.models.helpers.NodeStatus; import com.yugabyte.yw.models.helpers.PlacementInfo; +import java.io.IOException; import java.time.Duration; import java.util.Collection; import java.util.Collections; @@ -1644,6 +1646,14 @@ public void verifyParams(UniverseOpType opType) { } } } + // Validate kubernetes overrides + if (universeDetails.getPrimaryCluster().userIntent.providerType == CloudType.kubernetes) { + try { + KubernetesUtil.validateServiceEndpoints(taskParams(), universe.getConfig()); + } catch (IOException e) { + throw new RuntimeException("Failed to parse Kubernetes overrides!", e.getCause()); + } + } } protected AnsibleConfigureServers.Params createCertUpdateParams( @@ -2809,6 +2819,20 @@ protected AnsibleConfigureServers getAnsibleConfigureServerTask( params.ybSoftwareVersion = userIntent.ybSoftwareVersion; } else { params.ybSoftwareVersion = softwareVersion; + if (processType == ServerType.MASTER || processType == ServerType.TSERVER) { + // GFlags groups may depend on software version, so need to calculate them using fresh one. + Universe universe = getUniverse(); + universe + .getUniverseDetails() + .clusters + .forEach(cluster -> cluster.userIntent.ybSoftwareVersion = softwareVersion); + params.gflags = + GFlagsUtil.getGFlagsForNode( + node, + processType, + universe.getCluster(node.placementUuid), + universe.getUniverseDetails().clusters); + } } params.setYbcSoftwareVersion(ybcSoftwareVersion); if (!StringUtils.isEmpty(params.getYbcSoftwareVersion())) { diff --git a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/UniverseTaskBase.java b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/UniverseTaskBase.java index 45bb1e1f813c..9ed0f58b4d56 100644 --- a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/UniverseTaskBase.java +++ b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/UniverseTaskBase.java @@ -62,6 +62,7 @@ import com.yugabyte.yw.commissioner.tasks.subtasks.InstallNodeAgent; import com.yugabyte.yw.commissioner.tasks.subtasks.InstallThirdPartySoftwareK8s; import com.yugabyte.yw.commissioner.tasks.subtasks.InstallYbcSoftwareOnK8s; +import com.yugabyte.yw.commissioner.tasks.subtasks.KubernetesCommandExecutor; import com.yugabyte.yw.commissioner.tasks.subtasks.LoadBalancerStateChange; import com.yugabyte.yw.commissioner.tasks.subtasks.ManageAlertDefinitions; import com.yugabyte.yw.commissioner.tasks.subtasks.ManageLoadBalancerGroup; @@ -140,12 +141,14 @@ import com.yugabyte.yw.commissioner.tasks.subtasks.xcluster.SetDrStates; import com.yugabyte.yw.commissioner.tasks.subtasks.xcluster.UpdateDrConfigParams; import com.yugabyte.yw.commissioner.tasks.subtasks.xcluster.XClusterConfigModifyTables; +import com.yugabyte.yw.commissioner.tasks.subtasks.xcluster.XClusterConfigSetStatus; import com.yugabyte.yw.commissioner.tasks.subtasks.xcluster.XClusterConfigUpdateMasterAddresses; import com.yugabyte.yw.commissioner.tasks.subtasks.xcluster.XClusterInfoPersist; import com.yugabyte.yw.common.DnsManager; import com.yugabyte.yw.common.DrConfigStates; import com.yugabyte.yw.common.DrConfigStates.SourceUniverseState; import com.yugabyte.yw.common.DrConfigStates.TargetUniverseState; +import com.yugabyte.yw.common.KubernetesUtil; import com.yugabyte.yw.common.NodeAgentClient; import com.yugabyte.yw.common.NodeAgentManager; import com.yugabyte.yw.common.NodeManager; @@ -211,6 +214,7 @@ import com.yugabyte.yw.models.Universe.UniverseUpdaterConfig; import com.yugabyte.yw.models.XClusterConfig; import com.yugabyte.yw.models.XClusterConfig.ConfigType; +import com.yugabyte.yw.models.XClusterConfig.XClusterConfigStatusType; import com.yugabyte.yw.models.helpers.ClusterAZ; import com.yugabyte.yw.models.helpers.ColumnDetails; import com.yugabyte.yw.models.helpers.ColumnDetails.YQLDataType; @@ -3653,14 +3657,15 @@ protected Backup createAllBackupSubtasks( if (ybcBackup) { backup.getBackupInfo().initializeBackupDBStates(); } - - // Save backupUUID to taskInfo of the CreateBackup task. - try { - TaskInfo taskInfo = TaskInfo.getOrBadRequest(getUserTaskUUID()); - taskInfo.setTaskParams(mapper.valueToTree(backupRequestParams)); - taskInfo.save(); - } catch (Exception ex) { - log.error(ex.getMessage()); + if (!forXCluster) { + // Save backupUUID to taskInfo of the CreateBackup task. + try { + TaskInfo taskInfo = TaskInfo.getOrBadRequest(getUserTaskUUID()); + taskInfo.setTaskParams(mapper.valueToTree(backupRequestParams)); + taskInfo.save(); + } catch (Exception ex) { + log.error(ex.getMessage()); + } } } backup.setTaskUUID(getUserTaskUUID()); @@ -3712,7 +3717,7 @@ protected Backup createAllBackupSubtasks( // Save restore category to task params. private void getAndSaveRestoreBackupCategory( - RestoreBackupParams restoreParams, TaskInfo taskInfo) { + RestoreBackupParams restoreParams, TaskInfo taskInfo, boolean forXCluster) { Set backupLocations = restoreParams.backupStorageInfoList.parallelStream() .map(bSI -> bSI.storageLocation) @@ -3726,10 +3731,12 @@ private void getAndSaveRestoreBackupCategory( YbcBackupUtil.YBC_SUCCESS_MARKER_FILE_NAME, true); restoreParams.category = isYbc ? BackupCategory.YB_CONTROLLER : BackupCategory.YB_BACKUP_SCRIPT; - // Update task params for this - ObjectMapper mapper = new ObjectMapper(); - taskInfo.setTaskParams(mapper.valueToTree(restoreParams)); - taskInfo.save(); + if (!forXCluster) { + // Update task params for this + ObjectMapper mapper = new ObjectMapper(); + taskInfo.setTaskParams(mapper.valueToTree(restoreParams)); + taskInfo.save(); + } } protected Restore createAllRestoreSubtasks( @@ -3751,7 +3758,7 @@ protected Restore createAllRestoreSubtasks( // itself is used for populating restore task. if (taskInfo.getTaskType().equals(TaskType.RestoreBackup) && pCluster.userIntent.providerType != CloudType.local) { - getAndSaveRestoreBackupCategory(restoreBackupParams, taskInfo); + getAndSaveRestoreBackupCategory(restoreBackupParams, taskInfo, forXCluster); createPreflightValidateRestoreTask(restoreBackupParams) .setSubTaskGroupType(SubTaskGroupType.PreflightChecks) .setShouldRunPredicate(predicate); @@ -5377,6 +5384,26 @@ public static Map getFilteredKeyspaceNameKeyspaceIdMap( } } + // This is used by both DestroyKubernetesUniverse and EditKubernetesUniverse. + protected KubernetesCommandExecutor createDeleteKubernetesNamespacedServiceTask( + String universeName, + Map config, + String nodePrefix, + String azName, + @Nullable Set serviceNames) { + KubernetesCommandExecutor.Params params = new KubernetesCommandExecutor.Params(); + params.namespace = + KubernetesUtil.getKubernetesNamespace(nodePrefix, azName, config, true, false); + params.config = config; + params.universeName = universeName; + params.deleteServiceNames = serviceNames; + params.commandType = KubernetesCommandExecutor.CommandType.NAMESPACED_SVC_DELETE; + params.setUniverseUUID(taskParams().getUniverseUUID()); + KubernetesCommandExecutor task = createTask(KubernetesCommandExecutor.class); + task.initialize(params); + return task; + } + // XCluster: All the xCluster related code resides in this section. // -------------------------------------------------------------------------------- protected SubTaskGroup createXClusterConfigModifyTablesTask( @@ -5431,7 +5458,6 @@ protected SubTaskGroup createDeleteBootstrapIdsTask( protected SubTaskGroup createDeleteXClusterConfigEntryTask(XClusterConfig xClusterConfig) { SubTaskGroup subTaskGroup = createSubTaskGroup("DeleteXClusterConfigEntry"); XClusterConfigTaskParams deleteXClusterConfigEntryParams = new XClusterConfigTaskParams(); - deleteXClusterConfigEntryParams.setUniverseUUID(xClusterConfig.getTargetUniverseUUID()); deleteXClusterConfigEntryParams.xClusterConfig = xClusterConfig; DeleteXClusterConfigEntry task = createTask(DeleteXClusterConfigEntry.class); @@ -5540,12 +5566,14 @@ protected SubTaskGroup createTransferXClusterCertsRemoveTasks( protected SubTaskGroup createChangeXClusterRoleTask( XClusterConfig xClusterConfig, @Nullable XClusterRole sourceRole, - @Nullable XClusterRole targetRole) { + @Nullable XClusterRole targetRole, + boolean ignoreErrors) { SubTaskGroup subTaskGroup = createSubTaskGroup("ChangeXClusterRole"); ChangeXClusterRole.Params ChangeXClusterRoleParams = new ChangeXClusterRole.Params(); ChangeXClusterRoleParams.xClusterConfig = xClusterConfig; ChangeXClusterRoleParams.sourceRole = sourceRole; ChangeXClusterRoleParams.targetRole = targetRole; + ChangeXClusterRoleParams.ignoreErrors = ignoreErrors; ChangeXClusterRole task = createTask(ChangeXClusterRole.class); task.initialize(ChangeXClusterRoleParams); @@ -5629,20 +5657,45 @@ protected void createRemoveTableFromXClusterConfigSubtasks( } } + /** + * It creates a subtask to set the status of an xCluster config and save it in the Platform DB. + * + * @param desiredStatus The xCluster config will have this status + * @return The created subtask group; it can be used to assign a subtask group type to this + * subtask + */ + protected SubTaskGroup createXClusterConfigSetStatusTask( + XClusterConfig xClusterConfig, XClusterConfigStatusType desiredStatus) { + SubTaskGroup subTaskGroup = createSubTaskGroup("XClusterConfigSetStatus"); + XClusterConfigSetStatus.Params setStatusParams = new XClusterConfigSetStatus.Params(); + setStatusParams.setUniverseUUID(xClusterConfig.getTargetUniverseUUID()); + setStatusParams.xClusterConfig = xClusterConfig; + setStatusParams.desiredStatus = desiredStatus; + XClusterConfigSetStatus task = createTask(XClusterConfigSetStatus.class); + task.initialize(setStatusParams); + subTaskGroup.addSubTask(task); + getRunnableTask().addSubTaskGroup(subTaskGroup); + return subTaskGroup; + } + protected void createDeleteXClusterConfigSubtasks( XClusterConfig xClusterConfig, boolean keepEntry, boolean forceDelete, boolean deletePitrConfigs) { + // If target universe is destroyed, ignore creating this subtask. if (xClusterConfig.getTargetUniverseUUID() != null && xClusterConfig.getType() == ConfigType.Txn) { // Set back the target universe role to Active. createChangeXClusterRoleTask( - xClusterConfig, null /* sourceRole */, XClusterRole.ACTIVE /* targetRole */) + xClusterConfig, + null /* sourceRole */, + XClusterRole.ACTIVE /* targetRole */, + forceDelete) .setSubTaskGroupType(UserTaskDetails.SubTaskGroupType.DeleteXClusterReplication); } - // Delete the replication CDC streams on the target universe. + // Delete the replication group on the target universe. createDeleteReplicationTask(xClusterConfig, forceDelete) .setSubTaskGroupType(UserTaskDetails.SubTaskGroupType.DeleteXClusterReplication); if (xClusterConfig.getType() == ConfigType.Db) { @@ -5669,7 +5722,7 @@ protected void createDeleteXClusterConfigSubtasks( } createDeletePitrConfigTask( pitrConfig.getUuid(), - xClusterConfig.getTargetUniverseUUID(), + pitrConfig.getUniverse().getUniverseUUID(), forceDelete /* ignoreErrors */); } } diff --git a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/XClusterConfigTaskBase.java b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/XClusterConfigTaskBase.java index ab55a44b8d02..c6bb2c8025a2 100644 --- a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/XClusterConfigTaskBase.java +++ b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/XClusterConfigTaskBase.java @@ -23,7 +23,6 @@ import com.yugabyte.yw.commissioner.tasks.subtasks.xcluster.WaitForReplicationDrain; import com.yugabyte.yw.commissioner.tasks.subtasks.xcluster.XClusterAddNamespaceToOutboundReplicationGroup; import com.yugabyte.yw.commissioner.tasks.subtasks.xcluster.XClusterConfigRename; -import com.yugabyte.yw.commissioner.tasks.subtasks.xcluster.XClusterConfigSetStatus; import com.yugabyte.yw.commissioner.tasks.subtasks.xcluster.XClusterConfigSetStatusForNamespaces; import com.yugabyte.yw.commissioner.tasks.subtasks.xcluster.XClusterConfigSetStatusForTables; import com.yugabyte.yw.commissioner.tasks.subtasks.xcluster.XClusterConfigSetup; @@ -31,6 +30,8 @@ import com.yugabyte.yw.commissioner.tasks.subtasks.xcluster.XClusterDbReplicationSetup; import com.yugabyte.yw.commissioner.tasks.subtasks.xcluster.XClusterRemoveNamespaceFromOutboundReplicationGroup; import com.yugabyte.yw.commissioner.tasks.subtasks.xcluster.XClusterRemoveNamespaceFromTargetUniverse; +import com.yugabyte.yw.common.DrConfigStates; +import com.yugabyte.yw.common.DrConfigStates.State; import com.yugabyte.yw.common.PlatformServiceException; import com.yugabyte.yw.common.Util; import com.yugabyte.yw.common.XClusterUniverseService; @@ -88,6 +89,7 @@ import org.yb.cdc.CdcConsumer; import org.yb.cdc.CdcConsumer.ProducerEntryPB; import org.yb.cdc.CdcConsumer.StreamEntryPB; +import org.yb.client.CDCStreamInfo; import org.yb.client.GetMasterClusterConfigResponse; import org.yb.client.GetTableSchemaResponse; import org.yb.client.GetUniverseReplicationInfoResponse; @@ -155,6 +157,9 @@ public abstract class XClusterConfigTaskBase extends UniverseDefinitionTaskBase private static final Map> STATUS_TO_ALLOWED_TASKS = new HashMap<>(); + private static final Map> DR_CONFIG_STATE_TO_ALLOWED_TASKS = + new HashMap<>(); + static { STATUS_TO_ALLOWED_TASKS.put( XClusterConfigStatusType.Initialized, @@ -179,6 +184,32 @@ public abstract class XClusterConfigTaskBase extends UniverseDefinitionTaskBase STATUS_TO_ALLOWED_TASKS.put( XClusterConfigStatusType.Failed, ImmutableList.of(TaskType.DeleteXClusterConfig, TaskType.RestartXClusterConfig)); + + DR_CONFIG_STATE_TO_ALLOWED_TASKS.put( + State.Initializing, ImmutableList.of(TaskType.RestartDrConfig, TaskType.DeleteDrConfig)); + DR_CONFIG_STATE_TO_ALLOWED_TASKS.put( + State.Replicating, + ImmutableList.of( + TaskType.EditDrConfig, + TaskType.SwitchoverDrConfig, + TaskType.FailoverDrConfig, + TaskType.EditXClusterConfig, + TaskType.RestartDrConfig, + TaskType.SetTablesDrConfig, + TaskType.SyncDrConfig, + TaskType.DeleteDrConfig, + TaskType.SetDatabasesDrConfig)); + DR_CONFIG_STATE_TO_ALLOWED_TASKS.put( + State.SwitchoverInProgress, + ImmutableList.of(TaskType.RestartDrConfig, TaskType.DeleteDrConfig)); + DR_CONFIG_STATE_TO_ALLOWED_TASKS.put( + State.FailoverInProgress, + ImmutableList.of(TaskType.RestartDrConfig, TaskType.DeleteDrConfig)); + DR_CONFIG_STATE_TO_ALLOWED_TASKS.put( + State.Halted, + ImmutableList.of(TaskType.RestartDrConfig, TaskType.DeleteDrConfig, TaskType.EditDrConfig)); + DR_CONFIG_STATE_TO_ALLOWED_TASKS.put( + State.Failed, ImmutableList.of(TaskType.RestartDrConfig, TaskType.DeleteDrConfig)); } protected XClusterConfigTaskBase( @@ -271,6 +302,18 @@ public static boolean isTaskAllowed(XClusterConfig xClusterConfig, TaskType task return allowedTaskTypes.contains(taskType); } + public static boolean isTaskAllowed(DrConfig drConfig, TaskType taskType) { + if (taskType == null) { + throw new RuntimeException("taskType cannot be null"); + } + List allowedTaskTypes = getAllowedTasks(drConfig); + // Allow unknown situations to avoid bugs for now. + if (allowedTaskTypes == null) { + return true; + } + return allowedTaskTypes.contains(taskType); + } + public static List getAllowedTasks(XClusterConfig xClusterConfig) { if (xClusterConfig == null) { throw new RuntimeException( @@ -285,6 +328,20 @@ public static List getAllowedTasks(XClusterConfig xClusterConfig) { return allowedTaskTypes; } + public static List getAllowedTasks(DrConfig drConfig) { + if (drConfig == null) { + throw new RuntimeException( + "Cannot retrieve the list of allowed tasks because drConfig is null"); + } + List allowedTaskTypes = DR_CONFIG_STATE_TO_ALLOWED_TASKS.get(drConfig.getState()); + if (allowedTaskTypes == null) { + log.warn( + "Cannot retrieve the list of allowed tasks because it is not defined for state={}", + drConfig.getState()); + } + return allowedTaskTypes; + } + public static String getProducerCertsDir(UUID providerUuid) { Provider provider = Provider.getOrBadRequest(providerUuid); // For Kubernetes universe, we must use the PV instead of home directory. @@ -315,27 +372,6 @@ protected SubTaskGroup createXClusterConfigSetupTask( return subTaskGroup; } - /** - * It creates a subtask to set the status of an xCluster config and save it in the Platform DB. - * - * @param desiredStatus The xCluster config will have this status - * @return The created subtask group; it can be used to assign a subtask group type to this - * subtask - */ - protected SubTaskGroup createXClusterConfigSetStatusTask( - XClusterConfig xClusterConfig, XClusterConfigStatusType desiredStatus) { - SubTaskGroup subTaskGroup = createSubTaskGroup("XClusterConfigSetStatus"); - XClusterConfigSetStatus.Params setStatusParams = new XClusterConfigSetStatus.Params(); - setStatusParams.setUniverseUUID(xClusterConfig.getTargetUniverseUUID()); - setStatusParams.xClusterConfig = xClusterConfig; - setStatusParams.desiredStatus = desiredStatus; - XClusterConfigSetStatus task = createTask(XClusterConfigSetStatus.class); - task.initialize(setStatusParams); - subTaskGroup.addSubTask(task); - getRunnableTask().addSubTaskGroup(subTaskGroup); - return subTaskGroup; - } - protected SubTaskGroup createXClusterConfigSetStatusForTablesTask( XClusterConfig xClusterConfig, Set tableIds, @@ -355,21 +391,21 @@ protected SubTaskGroup createXClusterConfigSetStatusForTablesTask( return subTaskGroup; } - public SubTaskGroup createXClusterConfigSetStatusForNamespaceTask( + protected SubTaskGroup createXClusterConfigSetStatusForNamespacesTask( XClusterConfig xClusterConfig, - Set namespaceIds, + Set dbIds, XClusterNamespaceConfig.Status desiredStatus) { - SubTaskGroup subTaskGroup = createSubTaskGroup("XClusterConfigSetStatusForTables"); - XClusterConfigSetStatusForNamespaces.Params setStatusForTablesParams = + SubTaskGroup subTaskGroup = createSubTaskGroup("XClusterConfigSetStatusForNamespaces"); + XClusterConfigSetStatusForNamespaces.Params params = new XClusterConfigSetStatusForNamespaces.Params(); - setStatusForTablesParams.setUniverseUUID(xClusterConfig.getTargetUniverseUUID()); - setStatusForTablesParams.xClusterConfig = xClusterConfig; - setStatusForTablesParams.dbs = namespaceIds; - setStatusForTablesParams.desiredStatus = desiredStatus; + params.setUniverseUUID(xClusterConfig.getTargetUniverseUUID()); + params.xClusterConfig = xClusterConfig; + params.dbs = dbIds; + params.desiredStatus = desiredStatus; XClusterConfigSetStatusForNamespaces task = createTask(XClusterConfigSetStatusForNamespaces.class); - task.initialize(setStatusForTablesParams); + task.initialize(params); subTaskGroup.addSubTask(task); getRunnableTask().addSubTaskGroup(subTaskGroup); return subTaskGroup; @@ -1216,6 +1252,13 @@ public static Set getTableIdsWithoutTablesOnTargetInReplication( .collect(Collectors.toSet()); } + public static boolean isStreamInfoForXCluster(CDCStreamInfo streamInfo) { + Map options = streamInfo.getOptions(); + return options != null + && Objects.equals(options.get("record_format"), "WAL") + && Objects.equals(options.get("source_type"), "XCLUSTER"); + } + public static Map getSourceTableIdTargetTableIdMap( List requestedSourceTablesInfoList, List targetTablesInfoList) { @@ -3046,7 +3089,7 @@ protected SubTaskGroup createXClusterRemoveNamespaceFromTargetUniverseTask( * Add the databases to the replication. * * @param xClusterConfig config used - * @param dbIds db ids on the source universe that are being added to the replication. + * @param dbId db id on the source universe that is being added to the replication. * @return The created subtask group */ protected SubTaskGroup createAddNamespaceToXClusterReplicationTask( diff --git a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/HandleKubernetesNamespacedServices.java b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/HandleKubernetesNamespacedServices.java new file mode 100644 index 000000000000..cfc1984accfa --- /dev/null +++ b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/HandleKubernetesNamespacedServices.java @@ -0,0 +1,181 @@ +/* + * Copyright 2019 YugaByte, Inc. and Contributors + * + * Licensed under the Polyform Free Trial License 1.0.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * https://github.com/YugaByte/yugabyte-db/blob/master/licenses/ + * POLYFORM-FREE-TRIAL-LICENSE-1.0.0.txt + */ + +package com.yugabyte.yw.commissioner.tasks.subtasks; + +import com.yugabyte.yw.commissioner.BaseTaskDependencies; +import com.yugabyte.yw.commissioner.Common.CloudType; +import com.yugabyte.yw.commissioner.tasks.KubernetesTaskBase.KubernetesPlacement; +import com.yugabyte.yw.commissioner.tasks.UniverseTaskBase; +import com.yugabyte.yw.common.KubernetesManager; +import com.yugabyte.yw.common.KubernetesManagerFactory; +import com.yugabyte.yw.common.KubernetesUtil; +import com.yugabyte.yw.common.PlacementInfoUtil; +import com.yugabyte.yw.forms.UniverseDefinitionTaskParams; +import com.yugabyte.yw.forms.UniverseDefinitionTaskParams.Cluster; +import com.yugabyte.yw.forms.UniverseDefinitionTaskParams.ClusterType; +import com.yugabyte.yw.forms.UniverseTaskParams; +import com.yugabyte.yw.models.AvailabilityZone; +import com.yugabyte.yw.models.Provider; +import com.yugabyte.yw.models.Universe; +import com.yugabyte.yw.models.helpers.PlacementInfo; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.UUID; +import javax.inject.Inject; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class HandleKubernetesNamespacedServices extends UniverseTaskBase { + + private final KubernetesManagerFactory kubernetesManagerFactory; + + @Inject + protected HandleKubernetesNamespacedServices( + BaseTaskDependencies baseTaskDependencies, + KubernetesManagerFactory kubernetesManagerFactory) { + super(baseTaskDependencies); + this.kubernetesManagerFactory = kubernetesManagerFactory; + } + + // Params to handle namespace scope services + public static class Params extends UniverseTaskParams { + public boolean handleOwnershipChanges = false; + public boolean deleteReadReplica = false; + public UniverseDefinitionTaskParams universeParams = null; + } + + protected Params taskParams() { + return (Params) taskParams; + } + + @Override + public void run() { + try { + KubernetesManager k8sManager = kubernetesManagerFactory.getManager(); + Universe universe = getUniverse(); + if (!KubernetesUtil.shouldConfigureNamespacedService( + universe.getUniverseDetails(), universe.getConfig())) { + log.info( + "Skipping 'HandleKubernetesNamespacedServices' task since Universe configuration does" + + " not support Namespaced services"); + return; + } + + // Handle ownership changes + if (taskParams().handleOwnershipChanges) { + Map servicesChangeOwnership = new HashMap<>(); + for (Cluster cluster : universe.getUniverseDetails().clusters) { + if (cluster.userIntent.providerType != CloudType.kubernetes) { + continue; + } + try { + servicesChangeOwnership = + KubernetesUtil.getNSScopeServicesChangeOwnership( + taskParams().universeParams, + universe.getUniverseDetails(), + universe.getConfig(), + cluster.clusterType); + } catch (IOException e) { + throw new RuntimeException("Error while parsing kubernetes overrides", e.getCause()); + } + PlacementInfo pi = cluster.placementInfo; + boolean isReadOnlyCluster = cluster.clusterType == ClusterType.ASYNC; + KubernetesPlacement placement = new KubernetesPlacement(pi, isReadOnlyCluster); + Provider provider = + Provider.getOrBadRequest(UUID.fromString(cluster.userIntent.provider)); + boolean isMultiAZ = PlacementInfoUtil.isMultiAZ(provider); + for (Entry> entry : placement.configs.entrySet()) { + UUID azUUID = entry.getKey(); + if (!servicesChangeOwnership.containsKey(azUUID)) { + continue; + } + String azName = AvailabilityZone.get(azUUID).getCode(); + Map config = entry.getValue(); + String namespace = + KubernetesUtil.getKubernetesNamespace( + isMultiAZ, + universe.getUniverseDetails().nodePrefix, + azName, + config, + universe.getUniverseDetails().useNewHelmNamingStyle, + isReadOnlyCluster); + UUID newOwnerAzUUID = servicesChangeOwnership.get(azUUID); + String newOwnerAzName = AvailabilityZone.get(newOwnerAzUUID).getCode(); + String newOwnerReleaseName = + KubernetesUtil.getHelmReleaseName( + isMultiAZ, + universe.getUniverseDetails().nodePrefix, + universe.getName(), + newOwnerAzName, + isReadOnlyCluster, + universe.getUniverseDetails().useNewHelmNamingStyle); + k8sManager.updateNamespacedServiceOwnership( + config, namespace, universe.getName(), newOwnerReleaseName); + } + } + } + + // Handle services to remove + Map> servicesToRemove = new HashMap<>(); + for (Cluster cluster : universe.getUniverseDetails().clusters) { + if (cluster.userIntent.providerType != CloudType.kubernetes) { + continue; + } + boolean isReadOnlyCluster = cluster.clusterType == ClusterType.ASYNC; + if (taskParams().deleteReadReplica && !isReadOnlyCluster) { + // Skip primary cluster for read-replica cluster delete case + continue; + } + try { + servicesToRemove = + KubernetesUtil.getExtraNSScopeServicesToRemove( + taskParams().universeParams, + universe.getUniverseDetails(), + universe.getConfig(), + cluster.clusterType, + taskParams().deleteReadReplica); + } catch (IOException e) { + throw new RuntimeException("Error while parsing kubernetes overrides", e.getCause()); + } + PlacementInfo pi = cluster.placementInfo; + KubernetesPlacement placement = new KubernetesPlacement(pi, isReadOnlyCluster); + Provider provider = Provider.getOrBadRequest(UUID.fromString(cluster.userIntent.provider)); + boolean isMultiAZ = PlacementInfoUtil.isMultiAZ(provider); + for (Entry> entry : placement.configs.entrySet()) { + UUID azUUID = entry.getKey(); + if (!servicesToRemove.containsKey(azUUID)) { + continue; + } + String azName = AvailabilityZone.get(azUUID).getCode(); + Map config = entry.getValue(); + String namespace = + KubernetesUtil.getKubernetesNamespace( + isMultiAZ, + universe.getUniverseDetails().nodePrefix, + azName, + config, + universe.getUniverseDetails().useNewHelmNamingStyle, + isReadOnlyCluster); + k8sManager.deleteNamespacedService( + config, namespace, universe.getName(), servicesToRemove.get(azUUID)); + } + } + } catch (Exception e) { + String msg = getName() + " failed with exception " + e.getMessage(); + log.error(msg, e); + throw new RuntimeException(msg, e); + } + } +} diff --git a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/KubernetesCommandExecutor.java b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/KubernetesCommandExecutor.java index b5cf73d27c31..0373b9f3cc75 100644 --- a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/KubernetesCommandExecutor.java +++ b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/KubernetesCommandExecutor.java @@ -110,6 +110,7 @@ public enum CommandType { PVC_EXPAND_SIZE, COPY_PACKAGE, YBC_ACTION, + NAMESPACED_SVC_DELETE, // The following flag is deprecated. INIT_YSQL; @@ -148,6 +149,8 @@ public String getSubTaskGroupName() { case STS_DELETE: case PVC_EXPAND_SIZE: return UserTaskDetails.SubTaskGroupType.ResizingDisk.name(); + case NAMESPACED_SVC_DELETE: + return UserTaskDetails.SubTaskGroupType.KubernetesNamespacedServiceDelete.name(); } return null; } @@ -213,6 +216,7 @@ public static class Params extends UniverseTaskParams { public Map universeOverrides; public Map azOverrides; public String podName; + public String serviceName; public String newDiskSize; // Master addresses in multi-az case (to have control over different deployments). @@ -237,6 +241,8 @@ public static class Params extends UniverseTaskParams { public int newPlacementAzMasterCount = 0; public Map previousGflagsChecksumMap = new HashMap<>(); public boolean usePreviousGflagsChecksum = false; + public boolean createNamespacedService = false; + public Set deleteServiceNames; } protected KubernetesCommandExecutor.Params taskParams() { @@ -381,6 +387,15 @@ && taskParams().namespace == null) { .getManager() .deletePod(config, taskParams().namespace, taskParams().podName); break; + case NAMESPACED_SVC_DELETE: + kubernetesManagerFactory + .getManager() + .deleteNamespacedService( + config, + taskParams().namespace, + taskParams().universeName, + taskParams().deleteServiceNames); + break; case DELETE_ALL_SERVER_TYPE_PODS: Universe u = Universe.getOrBadRequest(taskParams().getUniverseUUID()); kubernetesManagerFactory @@ -573,7 +588,7 @@ private void processNodeInfo() { azConfig = CloudInfoInterface.fetchEnvVars(az); regionConfig = CloudInfoInterface.fetchEnvVars(region); String podAddressTemplate = - getK8sPropertyFromConfigOrDefault( + KubernetesUtil.getK8sPropertyFromConfigOrDefault( null, regionConfig, azConfig, @@ -657,30 +672,6 @@ private int getNumNodes() { return -1; } - private String getK8sPropertyFromConfigOrDefault( - Map config, - Map regionConfig, - Map azConfig, - String property, - String defaultValue) { - String value = azConfig != null ? azConfig.get(property) : null; - if (value != null) { - return value; - } - - value = regionConfig != null ? regionConfig.get(property) : null; - if (value != null) { - return value; - } - - value = config != null ? config.get(property) : null; - if (value != null) { - return value; - } - - return defaultValue; - } - private void populatePreviousGflagsChecksum() { if (taskParams().usePreviousGflagsChecksum && MapUtils.isEmpty(taskParams().previousGflagsChecksumMap)) { @@ -837,7 +828,8 @@ private String generateHelmOverride() { // Storage class needs to be updated if it is overriden in the zone config. String storageClass = - getK8sPropertyFromConfigOrDefault(config, regionConfig, azConfig, "STORAGE_CLASS", null); + KubernetesUtil.getK8sPropertyFromConfigOrDefault( + config, regionConfig, azConfig, "STORAGE_CLASS", null); if (StringUtils.isNoneEmpty(storageClass)) { tserverDiskSpecs.put("storageClass", storageClass); masterDiskSpecs.put("storageClass", storageClass); @@ -1039,10 +1031,10 @@ private String generateHelmOverride() { rootCA.put("key", ""); tlsInfo.put("rootCA", rootCA); String certManagerIssuer = - getK8sPropertyFromConfigOrDefault( + KubernetesUtil.getK8sPropertyFromConfigOrDefault( null, regionConfig, azConfig, "CERT-MANAGER-ISSUER", null); String certManagerClusterIssuer = - getK8sPropertyFromConfigOrDefault( + KubernetesUtil.getK8sPropertyFromConfigOrDefault( null, regionConfig, azConfig, "CERT-MANAGER-CLUSTERISSUER", null); if (certInfo.getCertType() == CertConfigType.K8SCertManager @@ -1070,7 +1062,7 @@ private String generateHelmOverride() { // As we are using same node cert for all nodes, set wildcard commonName boolean newNamingStyle = taskUniverseDetails.useNewHelmNamingStyle; String kubeDomain = - getK8sPropertyFromConfigOrDefault( + KubernetesUtil.getK8sPropertyFromConfigOrDefault( null, regionConfig, azConfig, "KUBE_DOMAIN", "cluster.local"); List dnsNames = getDnsNamesForSAN(newNamingStyle, kubeDomain); Map subjectAltNames = new HashMap<>(dnsNames.size()); @@ -1117,6 +1109,12 @@ private String generateHelmOverride() { overrides.put("updateStrategy", updateStrategy); } + if (taskParams().ybSoftwareVersion != null) { + // GFlags groups may depend on software version, so need to calculate them using fresh one. + for (UniverseDefinitionTaskParams.Cluster curCluster : taskUniverseDetails.clusters) { + curCluster.userIntent.ybSoftwareVersion = taskParams().ybSoftwareVersion; + } + } UUID placementUuid = cluster.uuid; UUID azUUID = azByCode != null ? azByCode.getUuid() : null; Map gflagOverrides = new HashMap<>(); @@ -1244,7 +1242,8 @@ private String generateHelmOverride() { } String kubeDomain = - getK8sPropertyFromConfigOrDefault(null, regionConfig, azConfig, "KUBE_DOMAIN", null); + KubernetesUtil.getK8sPropertyFromConfigOrDefault( + null, regionConfig, azConfig, "KUBE_DOMAIN", null); if (StringUtils.isNotBlank(kubeDomain)) { overrides.put("domainName", kubeDomain); } @@ -1296,7 +1295,8 @@ private String generateHelmOverride() { // overrides. Precedence: zone > region > provider. Map providerOverrides; String providerOverridesYAML = - getK8sPropertyFromConfigOrDefault(config, regionConfig, azConfig, "OVERRIDES", null); + KubernetesUtil.getK8sPropertyFromConfigOrDefault( + config, regionConfig, azConfig, "OVERRIDES", null); if (providerOverridesYAML != null) { providerOverrides = yaml.load(providerOverridesYAML); if (providerOverrides != null) { @@ -1362,6 +1362,21 @@ private String generateHelmOverride() { overrides.put("fullnameOverride", taskParams().helmReleaseName); } + String defaultScope = "AZ"; + if (!universeFromDBParams.getPrimaryCluster().userIntent.defaultServiceScopeAZ) { + defaultScope = "Namespaced"; + } + // Add default service scope + overrides.put("defaultServiceScope", defaultScope); + // If Helm_Install and current release is not the owner, + // remove the Namespaced service endpoint entries from the list. + if (KubernetesUtil.shouldConfigureNamespacedService( + taskUniverseDetails, universeFromDB.getConfig()) + && taskParams().commandType == CommandType.HELM_INSTALL + && !taskParams().createNamespacedService) { + removeNamespacedServiceOverrides(overrides, defaultScope); + } + try { Path tempFile = fileHelperService.createTempFile(taskParams().getUniverseUUID().toString(), ".yml"); @@ -1375,6 +1390,32 @@ private String generateHelmOverride() { } } + /** + * Remove all namespace scoped services from service endpoint list + * + * @param overrides The overrides + * @param defaultScope For missing scope in service endpoint entry, assume this to be the scope + */ + private void removeNamespacedServiceOverrides( + Map overrides, String defaultScope) { + if (overrides.containsKey("serviceEndpoints")) { + ObjectMapper mapper = new ObjectMapper(); + List> filterServices = new ArrayList<>(); + ArrayList serviceEndpoints = (ArrayList) overrides.get("serviceEndpoints"); + for (Object service : serviceEndpoints) { + Map endpointOverride = mapper.convertValue(service, Map.class); + String scope = (String) endpointOverride.getOrDefault("scope", defaultScope); + if (!scope.equals("Namespaced")) { + filterServices.add(endpointOverride); + } + } + overrides.put("serviceEndpoints", filterServices); + } else if (defaultScope.equals("Namespaced")) { + // Insert empty list if service endpoints override absent + overrides.put("serviceEndpoints", new ArrayList()); + } + } + /** * Construct the final form of Values file as helm would see it, and run any necessary validations * before it is applied. @@ -1387,17 +1428,17 @@ private void validateOverrides(Map overrides) { .helmShowValues(taskParams().ybSoftwareVersion, getConfig()); if (defaultValuesStr != null) { Yaml defaultValuesYaml = new Yaml(); - Map defaultValues = defaultValuesYaml.load(defaultValuesStr); + Map values = defaultValuesYaml.load(defaultValuesStr); // apply overrides on the helm chart default values - HelmUtils.mergeYaml(defaultValues, overrides); - log.trace("Running validations on merged yaml: {}", defaultValues); + HelmUtils.mergeYaml(values, overrides); + log.trace("Running validations on merged yaml: {}", values); // run any validations against the final values for helm install/upgrade // allow K8SCertManager cert type only with override - allowK8SCertManagerOnlyWithOverride(defaultValues); + allowK8SCertManagerOnlyWithOverride(values); // make sure certManager settings are provided - ensureCertManagerSettings(defaultValues); + ensureCertManagerSettings(values); // do not allow selfsignedBootstrap to be enabled ever from YBA - preventBootstrapCA(defaultValues); + preventBootstrapCA(values); } } diff --git a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/TransferXClusterCerts.java b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/TransferXClusterCerts.java index a12c71688d3b..459fd724866c 100644 --- a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/TransferXClusterCerts.java +++ b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/TransferXClusterCerts.java @@ -115,6 +115,8 @@ public void run() { throw new IllegalArgumentException("taskParams().replicationConfigName must have a value"); } + // Todo:sh Make sure the transfer is done even if the file exists. + if (config.getBoolean(K8S_TLS_SUPPORT_CONFIG_KEY)) { transferXClusterCertUsingNodeUniverseManager(); } else { diff --git a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/AddNamespaceToXClusterReplication.java b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/AddNamespaceToXClusterReplication.java index db86d71554b0..e6c51b838c12 100644 --- a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/AddNamespaceToXClusterReplication.java +++ b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/AddNamespaceToXClusterReplication.java @@ -2,18 +2,14 @@ package com.yugabyte.yw.commissioner.tasks.subtasks.xcluster; -import static play.mvc.Http.Status.BAD_REQUEST; - import com.google.api.client.util.Throwables; import com.yugabyte.yw.commissioner.BaseTaskDependencies; import com.yugabyte.yw.commissioner.tasks.XClusterConfigTaskBase; -import com.yugabyte.yw.common.PlatformServiceException; import com.yugabyte.yw.common.XClusterUniverseService; import com.yugabyte.yw.common.config.UniverseConfKeys; import com.yugabyte.yw.forms.XClusterConfigTaskParams; import com.yugabyte.yw.models.Universe; import com.yugabyte.yw.models.XClusterConfig; -import com.yugabyte.yw.models.XClusterNamespaceConfig; import java.time.Duration; import java.util.HashSet; import java.util.Set; @@ -23,6 +19,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.yb.CommonNet; +import org.yb.WireProtocol.AppStatusPB.ErrorCode; import org.yb.client.AddNamespaceToXClusterReplicationResponse; import org.yb.client.IsAlterXClusterReplicationDoneResponse; import org.yb.client.YBClient; @@ -30,7 +27,8 @@ @Slf4j public class AddNamespaceToXClusterReplication extends XClusterConfigTaskBase { - private static long DELAY_BETWEEN_RETRIES_MS = TimeUnit.SECONDS.toMillis(10); + + private static final long DELAY_BETWEEN_RETRIES_MS = TimeUnit.SECONDS.toMillis(10); @Inject protected AddNamespaceToXClusterReplication( @@ -40,6 +38,7 @@ protected AddNamespaceToXClusterReplication( @Getter public static class Params extends XClusterConfigTaskParams { + // The target universe UUID must be stored in universeUUID field. // The parent xCluster config must be stored in xClusterConfig field. // The db to be added to the xcluster replication must be stored in the dbToAdd field. @@ -63,6 +62,7 @@ public void run() { "`db` in the task parameters must not be null or empty: it was %s", taskParams().getDbToAdd())); } + String dbId = taskParams().getDbToAdd(); try (YBClient client = ybService.getClient( @@ -77,93 +77,89 @@ public void run() { xClusterConfig.getUuid(), taskParams().getDbToAdd()); - String dbId = taskParams().getDbToAdd(); - AddNamespaceToXClusterReplicationResponse createResponse = - client.addNamespaceToXClusterReplication( - xClusterConfig.getReplicationGroupName(), targetMasterAddresses, dbId); - - if (createResponse.hasError()) { - throw new RuntimeException( - String.format( - "AddNamespaceToXClusterReplication rpc failed with error: %s", - createResponse.errorMessage())); + try { + AddNamespaceToXClusterReplicationResponse createResponse = + client.addNamespaceToXClusterReplication( + xClusterConfig.getReplicationGroupName(), targetMasterAddresses, dbId); + if (createResponse.hasError()) { + throw new RuntimeException( + String.format( + "AddNamespaceToXClusterReplication rpc failed with error: %s", + createResponse.errorMessage())); + } + } catch (Exception e) { + if (!e.getMessage().contains("already contains")) { + log.error( + "AddNamespaceToXClusterReplication rpc for xClusterConfig: {} hit error: {}", + xClusterConfig.getName(), + e.getMessage()); + throw e; + } + // Skip if the replication group already contains the dbId. } - validateAlterReplicationCompleted( - client, sourceUniverse, targetMasterAddresses, xClusterConfig); + Duration xClusterWaitTimeout = + this.confGetter.getConfForScope( + sourceUniverse, UniverseConfKeys.xclusterSetupAlterTimeout); + waitForAlterReplicationDone( + client, + xClusterConfig.getReplicationGroupName(), + targetMasterAddresses, + xClusterWaitTimeout.toMillis()); log.debug( "Alter replication for xClusterConfig {} completed for source db id: {}", xClusterConfig.getUuid(), taskParams().getDbToAdd()); - - xClusterConfig.updateStatusForNamespace(dbId, XClusterNamespaceConfig.Status.Running); - } catch (Exception e) { log.error("{} hit error : {}", getName(), e.getMessage()); Throwables.propagate(e); } } - protected void validateAlterReplicationCompleted( + protected void waitForAlterReplicationDone( YBClient client, - Universe sourceUniverse, + String replicationGroupName, Set targetMasterAddresses, - XClusterConfig xClusterConfig) - throws Exception { - Duration xclusterWaitTimeout = - this.confGetter.getConfForScope(sourceUniverse, UniverseConfKeys.xclusterSetupAlterTimeout); - String dbId = taskParams().getDbToAdd(); - log.info( - "Validating database {} for XClusterConfig({}) is done altering replication", - dbId, - xClusterConfig.getUuid()); - boolean alterReplicationCompleted = - doWithConstTimeout( - DELAY_BETWEEN_RETRIES_MS, - xclusterWaitTimeout.toMillis(), - () -> { - IsAlterXClusterReplicationDoneResponse completionResponse; - - try { - completionResponse = - client.isAlterXClusterReplicationDone( - xClusterConfig.getReplicationGroupName(), targetMasterAddresses); - } catch (Exception e) { - log.error( - "IsAlterXClusterReplicationDone rpc for xClusterConfig: {}, db: {}, hit" - + " error: {}", - xClusterConfig.getName(), - dbId, - e.getMessage()); - return false; - } - - if (completionResponse.hasError()) { - log.error( - "IsAlterXClusterReplication rpc for xClusterConfig: {}, db: {}, hit error:" - + " {}", - xClusterConfig.getName(), - dbId, - completionResponse.errorMessage()); - return false; - } - log.debug( - "Altering replication status is complete: {}, for universe: {}, xClusterConfig:" - + " {}, dbId: {}", - completionResponse.isDone(), - sourceUniverse.getUniverseUUID(), - xClusterConfig.getName(), - dbId); - return completionResponse.isDone(); - }); - if (!alterReplicationCompleted) { - throw new PlatformServiceException( - BAD_REQUEST, - String.format( - "Altering replication for database %s for xClusterConfig %s with source universe %s" - + " timed out", - dbId, xClusterConfig.getName(), sourceUniverse.getUniverseUUID())); - } + long xClusterWaitTimeoutMs) { + doWithConstTimeout( + DELAY_BETWEEN_RETRIES_MS, + xClusterWaitTimeoutMs, + () -> { + try { + IsAlterXClusterReplicationDoneResponse completionResponse = + client.isAlterXClusterReplicationDone(replicationGroupName, targetMasterAddresses); + if (completionResponse.hasError()) { + throw new RuntimeException( + String.format( + "IsAlterXClusterReplication rpc for replication group name: %s, hit error:" + + " %s", + replicationGroupName, completionResponse.errorMessage())); + } + if (completionResponse.hasReplicationError() + && !completionResponse.getReplicationError().getCode().equals(ErrorCode.OK)) { + throw new RuntimeException( + String.format( + "IsAlterXClusterReplication rpc for replication group name: %s, hit" + + " replication error: %s with error code: %s", + replicationGroupName, + completionResponse.getReplicationError().getMessage(), + completionResponse.getReplicationError().getCode())); + } + if (!completionResponse.isDone()) { + throw new RuntimeException( + String.format( + "CreateXClusterReplication is not done for replication group name: %s", + replicationGroupName)); + } + // Replication alter is complete, return. + } catch (Exception e) { + log.error( + "IsAlterXClusterReplicationDone rpc for replication group name: {}, hit error: {}", + replicationGroupName, + e); + throw new RuntimeException(e); + } + }); } } diff --git a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/BootstrapProducer.java b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/BootstrapProducer.java index 65da5cfa14a7..3425c9fbd226 100644 --- a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/BootstrapProducer.java +++ b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/BootstrapProducer.java @@ -6,8 +6,8 @@ import com.yugabyte.yw.commissioner.tasks.XClusterConfigTaskBase; import com.yugabyte.yw.common.Util; import com.yugabyte.yw.common.XClusterUniverseService; -import com.yugabyte.yw.common.config.GlobalConfKeys; import com.yugabyte.yw.common.config.RuntimeConfGetter; +import com.yugabyte.yw.common.config.UniverseConfKeys; import com.yugabyte.yw.common.services.config.YbClientConfig; import com.yugabyte.yw.common.services.config.YbClientConfigFactory; import com.yugabyte.yw.forms.XClusterConfigTaskParams; @@ -15,22 +15,22 @@ import com.yugabyte.yw.models.Universe; import com.yugabyte.yw.models.XClusterConfig; import com.yugabyte.yw.models.XClusterTableConfig; +import java.time.Duration; import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.stream.Collectors; import javax.inject.Inject; import lombok.extern.slf4j.Slf4j; import org.yb.client.BootstrapUniverseResponse; +import org.yb.client.ListCDCStreamsResponse; import org.yb.client.YBClient; @Slf4j public class BootstrapProducer extends XClusterConfigTaskBase { - - public static final long MINIMUM_ADMIN_OPERATION_TIMEOUT_MS_FOR_BOOTSTRAP = 120000; - public static final long MINIMUM_SOCKET_READ_TIMEOUT_MS_FOR_BOOTSTRAP = 120000; - private static final long INITIAL_EXPONENTIAL_BACKOFF_DELAY_MS_FOR_BOOTSTRAP_PRODUCER = 1000; // 1 second private static final long MAXIMUM_EXPONENTIAL_BACKOFF_DELAY_MS_FOR_BOOTSTRAP_PRODUCER = @@ -91,12 +91,12 @@ public void run() { ybcClientConfigFactory.create( sourceUniverseMasterAddresses, sourceUniverseCertificate, - Math.max( - confGetter.getGlobalConf(GlobalConfKeys.bootstrapProducerTimeoutMs), - MINIMUM_ADMIN_OPERATION_TIMEOUT_MS_FOR_BOOTSTRAP), - Math.max( - confGetter.getGlobalConf(GlobalConfKeys.ybcSocketReadTimeoutMs), - MINIMUM_SOCKET_READ_TIMEOUT_MS_FOR_BOOTSTRAP)); + confGetter + .getConfForScope(sourceUniverse, UniverseConfKeys.xclusterBootstrapProducerTimeout) + .toMillis(), + confGetter + .getConfForScope(sourceUniverse, UniverseConfKeys.xclusterBootstrapProducerTimeout) + .toMillis()); List tserverHostAndPortList = sourceUniverse.getTServersInPrimaryCluster().stream() .map( @@ -106,79 +106,125 @@ public void run() { .collect(Collectors.toList()); try (YBClient client = ybService.getClientWithConfig(clientConfig)) { - // Set bootstrap creation time. - Date now = new Date(); - xClusterConfig.updateBootstrapCreateTimeForTables(taskParams().tableIds, now); - log.info("Bootstrap creation time for tables {} set to {}", taskParams().tableIds, now); - - int tserverIndex = 0; - BootstrapUniverseResponse resp = null; - while (tserverIndex < tserverHostAndPortList.size() && Objects.isNull(resp)) { - try { - // Do the bootstrap. - HostAndPort hostAndPort = tserverHostAndPortList.get(tserverIndex); - resp = client.bootstrapUniverse(hostAndPort, taskParams().tableIds); - if (resp.hasError()) { - String errMsg = - String.format( - "Failed to bootstrap universe (%s) for table (%s): %s", - taskParams().getUniverseUUID(), taskParams().tableIds, resp.errorMessage()); - throw new RuntimeException(errMsg); - } - } catch (Exception e) { - // Print the error and retry. - log.error("client.bootstrapUniverse RPC hit error : {}", e.getMessage()); - resp = null; - // Busy waiting is unavoidable. - Thread.sleep( - Util.getExponentialBackoffDelayMs( - INITIAL_EXPONENTIAL_BACKOFF_DELAY_MS_FOR_BOOTSTRAP_PRODUCER, - MAXIMUM_EXPONENTIAL_BACKOFF_DELAY_MS_FOR_BOOTSTRAP_PRODUCER, - tserverIndex /* iterationNumber */)); - } finally { - tserverIndex++; + Map tableIdToBootstrapIdMap = new HashMap<>(); + try { + ListCDCStreamsResponse listCDCStreamsResp = + client.listCDCStreams(null /* tableId */, null /* namespace */, null /* idType */); + if (listCDCStreamsResp.hasError()) { + String errMsg = + String.format( + "Failed to listCDCStreams universe (%s): %s", + taskParams().getUniverseUUID(), listCDCStreamsResp.errorMessage()); + throw new RuntimeException(errMsg); } + listCDCStreamsResp + .getStreams() + .forEach( + stream -> { + if (isStreamInfoForXCluster(stream) + && Objects.equals(stream.getOptions().get("state"), "INITIATED")) { + List streamTableIds = stream.getTableIds(); + if (streamTableIds.size() != 1) { + return; + } + String tableId = streamTableIds.get(0); + if (taskParams().tableIds.contains(tableId) + && Objects.nonNull( + xClusterConfig.getTableById(tableId).getBootstrapCreateTime())) { + tableIdToBootstrapIdMap.put(tableId, stream.getStreamId()); + } + } + }); + } catch (Exception e) { + log.error("client.listCDCStreams RPC hit error : {}", e.getMessage()); + throw new RuntimeException(e); } - if (Objects.isNull(resp)) { - throw new RuntimeException( - String.format("BootstrapProducer RPC call has failed for %s", taskParams().tableIds)); + if (!tableIdToBootstrapIdMap.isEmpty()) { + log.info("Tables {} are already bootstrapped", tableIdToBootstrapIdMap.keySet()); } - - List bootstrapIds = resp.bootstrapIds(); - if (bootstrapIds.size() != taskParams().tableIds.size()) { - String errMsg = - String.format( - "Received invalid number of bootstrap ids (%d), must be (%d)", - bootstrapIds.size(), taskParams().tableIds.size()); - throw new IllegalStateException(errMsg); - } - - // Save bootstrap ids. - for (int i = 0; i < taskParams().tableIds.size(); i++) { - Optional tableConfig = - xClusterConfig.maybeGetTableById(taskParams().tableIds.get(i)); - int idx = i; - tableConfig.ifPresentOrElse( - config -> { - String bootstrapId = bootstrapIds.get(idx); - config.setStreamId(bootstrapId); - // If the table is bootstrapped, no need to bootstrap again. - config.setNeedBootstrap(false); - log.info("Stream id for table {} set to {}", config.getTableId(), bootstrapId); - }, - () -> { - // This code will never run because when we set the bootstrap creation time, we made - // sure - // that all the tableIds exist. + List tableIdsWithoutBootstrapId = + taskParams().tableIds.stream() + .filter(tableId -> !tableIdToBootstrapIdMap.containsKey(tableId)) + .collect(Collectors.toList()); + + if (!tableIdsWithoutBootstrapId.isEmpty()) { + // Set bootstrap creation time. + Date now = new Date(); + xClusterConfig.updateBootstrapCreateTimeForTables(tableIdsWithoutBootstrapId, now); + log.info( + "Bootstrap creation time for tables {} set to {}", tableIdsWithoutBootstrapId, now); + + int tserverIndex = 0; + BootstrapUniverseResponse resp = null; + while (tserverIndex < tserverHostAndPortList.size() && Objects.isNull(resp)) { + try { + // Do the bootstrap. + HostAndPort hostAndPort = tserverHostAndPortList.get(tserverIndex); + resp = client.bootstrapUniverse(hostAndPort, tableIdsWithoutBootstrapId); + if (resp.hasError()) { String errMsg = String.format( - "Could not find tableId (%s) in the xCluster config with uuid (%s)", - taskParams().tableIds.get(idx), taskParams().getXClusterConfig().getUuid()); + "Failed to bootstrap universe (%s) for table (%s): %s", + taskParams().getUniverseUUID(), + tableIdsWithoutBootstrapId, + resp.errorMessage()); throw new RuntimeException(errMsg); - }); + } + } catch (Exception e) { + // Print the error and retry. + log.error("client.bootstrapUniverse RPC hit error : {}", e.getMessage()); + resp = null; + waitFor( + Duration.ofMillis( + Util.getExponentialBackoffDelayMs( + INITIAL_EXPONENTIAL_BACKOFF_DELAY_MS_FOR_BOOTSTRAP_PRODUCER, + MAXIMUM_EXPONENTIAL_BACKOFF_DELAY_MS_FOR_BOOTSTRAP_PRODUCER, + tserverIndex /* iterationNumber */))); + } finally { + tserverIndex++; + } + } + if (Objects.isNull(resp)) { + throw new RuntimeException( + String.format( + "BootstrapProducer RPC call has failed for %s", tableIdsWithoutBootstrapId)); + } + List bootstrapIds = resp.bootstrapIds(); + if (bootstrapIds.size() != tableIdsWithoutBootstrapId.size()) { + String errMsg = + String.format( + "Received invalid number of bootstrap ids (%d), must be (%d)", + bootstrapIds.size(), tableIdsWithoutBootstrapId.size()); + throw new IllegalStateException(errMsg); + } + for (int i = 0; i < tableIdsWithoutBootstrapId.size(); i++) { + tableIdToBootstrapIdMap.put(tableIdsWithoutBootstrapId.get(i), bootstrapIds.get(i)); + } } + // Save bootstrap ids. + tableIdToBootstrapIdMap.forEach( + (tableId, bootstrapId) -> { + Optional tableConfig = xClusterConfig.maybeGetTableById(tableId); + tableConfig.ifPresentOrElse( + config -> { + config.setStreamId(bootstrapId); + // If the table is bootstrapped, no need to bootstrap again. + config.setNeedBootstrap(false); + log.info("Stream id for table {} set to {}", tableId, bootstrapId); + }, + () -> { + // This code will never run because when we set the bootstrap creation time, we + // made + // sure that all the tableIds exist. + String errMsg = + String.format( + "Could not find tableId (%s) in the xCluster config with uuid (%s)", + tableId, taskParams().getXClusterConfig().getUuid()); + throw new IllegalStateException(errMsg); + }); + }); xClusterConfig.update(); if (HighAvailabilityConfig.get().isPresent()) { diff --git a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/ChangeXClusterRole.java b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/ChangeXClusterRole.java index 0aba0915f57c..9667d54751b9 100644 --- a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/ChangeXClusterRole.java +++ b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/ChangeXClusterRole.java @@ -33,6 +33,9 @@ public static class Params extends XClusterConfigTaskParams { // The target universe role. public XClusterRole targetRole; + + // Whether to ignore errors that happened during this subtask execution. + public boolean ignoreErrors; } @Override @@ -43,11 +46,12 @@ protected Params taskParams() { @Override public String getName() { return String.format( - "%s(xClusterConfig=%s,sourceRole=%s,targetRole=%s)", + "%s(xClusterConfig=%s,sourceRole=%s,targetRole=%s,ignoreErrors=%s)", super.getName(), taskParams().getXClusterConfig(), taskParams().sourceRole, - taskParams().targetRole); + taskParams().targetRole, + taskParams().ignoreErrors); } @Override @@ -63,14 +67,22 @@ public void run() { "XCluster role can change only for transactional xCluster configs"); } - // Only one universe role can change in one subtask call. + if (Objects.nonNull(taskParams().sourceRole) && Objects.nonNull(taskParams().targetRole)) { + throw new IllegalArgumentException("The role of only one universe can be set"); + } + if (Objects.nonNull(taskParams().sourceRole)) { + if (Objects.isNull(xClusterConfig.getSourceUniverseUUID())) { + log.warn("Skipped {}: the source universe is destroyed", getName()); + return; + } universe = Universe.getOrBadRequest(xClusterConfig.getSourceUniverseUUID()); requestedRole = taskParams().sourceRole; } if (Objects.nonNull(taskParams().targetRole)) { - if (Objects.nonNull(universe)) { - throw new IllegalArgumentException("The role of only one universe can be set"); + if (Objects.isNull(xClusterConfig.getTargetUniverseUUID())) { + log.warn("Skipped {}: the target universe is destroyed", getName()); + return; } universe = Universe.getOrBadRequest(xClusterConfig.getTargetUniverseUUID()); requestedRole = taskParams().targetRole; @@ -79,10 +91,9 @@ public void run() { throw new IllegalArgumentException("No role change is requested"); } - String targetUniverseMasterAddresses = universe.getMasterAddresses(); - String targetUniverseCertificate = universe.getCertificateNodetoNode(); - try (YBClient client = - ybService.getClient(targetUniverseMasterAddresses, targetUniverseCertificate)) { + String universeMasterAddresses = universe.getMasterAddresses(); + String universeCertificate = universe.getCertificateNodetoNode(); + try (YBClient client = ybService.getClient(universeMasterAddresses, universeCertificate)) { // Sync roles in YBA with YBDB. GetMasterClusterConfigResponse clusterConfigResp = client.getMasterClusterConfig(); XClusterRole currentXClusterRole = @@ -98,40 +109,39 @@ public void run() { universe.getUniverseUUID(), currentXClusterRole); - if (requestedRole == currentXClusterRole) { - log.warn( - "The universe {} is already in {} role; no change happened", - universe.getUniverseUUID(), - currentXClusterRole); - } else { - ChangeXClusterRoleResponse resp = client.changeXClusterRole(requestedRole); - if (resp.hasError()) { - throw new RuntimeException( - String.format( - "Failed to set the role for universe %s to %s on XClusterConfig(%s): %s", - universe.getUniverseUUID(), requestedRole, xClusterConfig, resp.errorMessage())); - } - log.info( - "Universe role for universe {} was set to {}", - universe.getUniverseUUID(), - requestedRole); - - if (HighAvailabilityConfig.get().isPresent()) { - universe.incrementVersion(); - } - - // Save the role in the DB. - if (Objects.nonNull(taskParams().sourceRole)) { - xClusterConfig.setSourceActive(requestedRole == XClusterRole.ACTIVE); - } else { - xClusterConfig.setTargetActive(requestedRole == XClusterRole.ACTIVE); - } - xClusterConfig.update(); + if (Objects.equals(currentXClusterRole, requestedRole)) { + log.info("Skipped {}: requested role is the same as currentXClusterRole", getName()); + return; + } + + ChangeXClusterRoleResponse resp = client.changeXClusterRole(requestedRole); + + if (resp.hasError()) { + throw new RuntimeException( + String.format( + "Failed to set the role for universe %s to %s on XClusterConfig(%s): %s", + universe.getUniverseUUID(), requestedRole, xClusterConfig, resp.errorMessage())); + } + log.info( + "Universe role for universe {} was set to {}", universe.getUniverseUUID(), requestedRole); + + if (HighAvailabilityConfig.get().isPresent()) { + universe.incrementVersion(); } + // Save the role in the DB. + if (Objects.nonNull(taskParams().sourceRole)) { + xClusterConfig.setSourceActive(requestedRole == XClusterRole.ACTIVE); + } else { + xClusterConfig.setTargetActive(requestedRole == XClusterRole.ACTIVE); + } + xClusterConfig.update(); } catch (Exception e) { log.error("{} hit error : {}", getName(), e.getMessage()); - throw new RuntimeException(e); + if (!taskParams().ignoreErrors) { + throw new RuntimeException(e); + } + log.warn("Ignoring the error: {}", e.getMessage()); } log.info("Completed {}", getName()); diff --git a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/CreateOutboundReplicationGroup.java b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/CreateOutboundReplicationGroup.java index b57c56417df9..871f522a42bd 100644 --- a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/CreateOutboundReplicationGroup.java +++ b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/CreateOutboundReplicationGroup.java @@ -2,17 +2,15 @@ package com.yugabyte.yw.commissioner.tasks.subtasks.xcluster; -import static play.mvc.Http.Status.BAD_REQUEST; - import com.google.api.client.util.Throwables; import com.yugabyte.yw.commissioner.BaseTaskDependencies; import com.yugabyte.yw.commissioner.tasks.XClusterConfigTaskBase; -import com.yugabyte.yw.common.PlatformServiceException; import com.yugabyte.yw.common.XClusterUniverseService; import com.yugabyte.yw.common.config.UniverseConfKeys; import com.yugabyte.yw.models.Universe; import com.yugabyte.yw.models.XClusterConfig; import java.time.Duration; +import java.util.Set; import java.util.concurrent.TimeUnit; import javax.inject.Inject; import lombok.extern.slf4j.Slf4j; @@ -23,7 +21,7 @@ @Slf4j public class CreateOutboundReplicationGroup extends XClusterConfigTaskBase { - private static long DELAY_BETWEEN_RETRIES_MS = TimeUnit.SECONDS.toMillis(10); + private static final long DELAY_BETWEEN_RETRIES_MS = TimeUnit.SECONDS.toMillis(10); @Inject protected CreateOutboundReplicationGroup( @@ -33,8 +31,12 @@ protected CreateOutboundReplicationGroup( @Override public void run() { + log.info("Running {}", getName()); + XClusterConfig xClusterConfig = getXClusterConfigFromTaskParams(); Universe sourceUniverse = Universe.getOrBadRequest(xClusterConfig.getSourceUniverseUUID()); + Duration xclusterWaitTimeout = + this.confGetter.getConfForScope(sourceUniverse, UniverseConfKeys.xclusterSetupAlterTimeout); if (CollectionUtils.isEmpty(taskParams().getDbs())) { throw new RuntimeException( @@ -51,19 +53,31 @@ public void run() { xClusterConfig.getUuid(), taskParams().getDbs()); + try { + client.getXClusterOutboundReplicationGroupInfo(xClusterConfig.getReplicationGroupName()); + log.info( + "Skipping {}: OutboundReplicationGroup for xCluster {} already exists; skip creating" + + " it, and only wait for checkpointing to be ready", + getName(), + xClusterConfig); + waitForCheckpointingToBeReady( + client, xClusterConfig, taskParams().dbs, xclusterWaitTimeout.toMillis()); + return; + } catch (Exception ignored) { + // The outbound replication group does not exist, proceed to create it. + } + XClusterCreateOutboundReplicationGroupResponse createResponse = client.xClusterCreateOutboundReplicationGroup( xClusterConfig.getReplicationGroupName(), taskParams().getDbs()); - if (createResponse.hasError()) { throw new RuntimeException( String.format( "CreateOutboundReplicationGroup rpc failed with error: %s", createResponse.errorMessage())); } - - validateCheckpointingCompleted(client, sourceUniverse, xClusterConfig); - + waitForCheckpointingToBeReady( + client, xClusterConfig, taskParams().dbs, xclusterWaitTimeout.toMillis()); log.debug( "Checkpointing for xClusterConfig {} completed for source db ids: {}", xClusterConfig.getUuid(), @@ -72,63 +86,58 @@ public void run() { log.error("{} hit error : {}", getName(), e.getMessage()); Throwables.propagate(e); } + + log.info("Completed {}", getName()); } - protected void validateCheckpointingCompleted( - YBClient client, Universe sourceUniverse, XClusterConfig xClusterConfig) { - Duration xclusterWaitTimeout = - this.confGetter.getConfForScope(sourceUniverse, UniverseConfKeys.xclusterSetupAlterTimeout); - for (String dbId : taskParams().getDbs()) { + protected void waitForCheckpointingToBeReady( + YBClient client, + XClusterConfig xClusterConfig, + Set dbIds, + long xClusterWaitTimeoutMs) { + + for (String dbId : dbIds) { log.info( "Validating database {} for XClusterConfig({}) is done checkpointing", dbId, xClusterConfig.getUuid()); - boolean checkpointingCompleted = - doWithConstTimeout( - DELAY_BETWEEN_RETRIES_MS, - xclusterWaitTimeout.toMillis(), - () -> { - IsXClusterBootstrapRequiredResponse completionResponse; - - try { - completionResponse = - client.isXClusterBootstrapRequired( - xClusterConfig.getReplicationGroupName(), dbId); - } catch (Exception e) { - log.error( - "IsXClusterBootstrapRequired rpc for xClusterConfig: {}, db: {}, hit error:" - + " {}", - xClusterConfig.getName(), - dbId, - e.getMessage()); - return false; - } - - if (completionResponse.hasError()) { - log.error( - "IsXClusterBootstrapRequired rpc for xClusterConfig: {}, db: {}, hit error:" - + " {}", - xClusterConfig.getName(), - dbId, - completionResponse.errorMessage()); - return false; - } - log.debug( - "CreateOutboundReplicationGroup, checkpointing status is complete: {}, for" - + " universe: {}, xClusterConfig: {}, dbId: {}", - !completionResponse.isNotReady(), - sourceUniverse.getUniverseUUID(), - xClusterConfig.getName(), - dbId); - return !completionResponse.isNotReady(); - }); - if (!checkpointingCompleted) { - throw new PlatformServiceException( - BAD_REQUEST, - String.format( - "Checkpointing database %s for xClusterConfig %s with source universe %s timed out", - dbId, xClusterConfig.getName(), sourceUniverse.getUniverseUUID())); - } + doWithConstTimeout( + DELAY_BETWEEN_RETRIES_MS, + xClusterWaitTimeoutMs, + () -> { + try { + IsXClusterBootstrapRequiredResponse completionResponse = + client.isXClusterBootstrapRequired( + xClusterConfig.getReplicationGroupName(), dbId); + if (completionResponse.hasError()) { + throw new RuntimeException( + "IsXClusterBootstrapRequired rpc for xClusterConfig: " + + xClusterConfig.getName() + + ", db: " + + dbId + + ", hit error: " + + completionResponse.errorMessage()); + } + if (completionResponse.isNotReady()) { + throw new RuntimeException( + String.format( + "Checkpointing database %s for xClusterConfig %s is not ready", + dbId, xClusterConfig.getName())); + } + log.info( + "Checkpointing for xClusterConfig {} is ready for source db id: {}", + xClusterConfig.getUuid(), + dbId); + // Checkpointing is complete, return. + } catch (Exception e) { + log.error( + "IsXClusterBootstrapRequired failed for xClusterConfig: {}, db: {}:" + " {}", + xClusterConfig.getName(), + dbId, + e.getMessage()); + throw new RuntimeException(e); + } + }); } } } diff --git a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/DeleteBootstrapIds.java b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/DeleteBootstrapIds.java index c244f97ba01e..3dfd5b584899 100644 --- a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/DeleteBootstrapIds.java +++ b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/DeleteBootstrapIds.java @@ -83,7 +83,7 @@ public void run() { .collect(Collectors.toSet()); Set bootstrapIds = tableConfigsWithBootstrapId.stream() - .map(tableConfig -> tableConfig.getStreamId()) + .map(XClusterTableConfig::getStreamId) .collect(Collectors.toSet()); Universe sourceUniverse = Universe.getOrBadRequest(taskParams().getUniverseUUID()); diff --git a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/DeleteReplicationOnSource.java b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/DeleteReplicationOnSource.java index 8c60c1308a2c..fcb4cdd05334 100644 --- a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/DeleteReplicationOnSource.java +++ b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/DeleteReplicationOnSource.java @@ -11,11 +11,13 @@ import com.yugabyte.yw.models.XClusterConfig; import javax.inject.Inject; import lombok.extern.slf4j.Slf4j; +import org.yb.client.MasterErrorException; import org.yb.client.XClusterDeleteOutboundReplicationGroupResponse; import org.yb.client.YBClient; @Slf4j public class DeleteReplicationOnSource extends XClusterConfigTaskBase { + @Inject protected DeleteReplicationOnSource( BaseTaskDependencies baseTaskDependencies, XClusterUniverseService xClusterUniverseService) { @@ -36,19 +38,29 @@ public void run() { ybService.getClient( sourceUniverse.getMasterAddresses(), sourceUniverse.getCertificateNodetoNode())) { - // TODO: Check whether the replication group exists on the source universe first. - - XClusterDeleteOutboundReplicationGroupResponse response = - client.xClusterDeleteOutboundReplicationGroup(xClusterConfig.getReplicationGroupName()); - - if (response.hasError()) { - throw new RuntimeException( - String.format( - "Failed to delete replication for XClusterConfig(%s) on on source universe %s." - + " Error: %s", - xClusterConfig.getUuid(), - sourceUniverse.getUniverseUUID(), - response.errorMessage())); + try { + XClusterDeleteOutboundReplicationGroupResponse response = + client.xClusterDeleteOutboundReplicationGroup(xClusterConfig.getReplicationGroupName()); + if (response.hasError()) { + throw new RuntimeException( + String.format( + "Failed to delete replication for XClusterConfig(%s) on on source universe %s." + + " Error: %s", + xClusterConfig.getUuid(), + sourceUniverse.getUniverseUUID(), + response.errorMessage())); + } + } catch (MasterErrorException e) { + // If it is not `NOT_FOUND` exception, rethrow the exception. + if (!e.getMessage().contains("NOT_FOUND[code 1]")) { + throw new RuntimeException(e); + } + log.warn( + "Outbound replication group {} does not exist on the source universe, NOT_FOUND" + + " exception occurred in xClusterDeleteOutboundReplicationGroup RPC call is" + + " ignored: {}", + xClusterConfig.getReplicationGroupName(), + e.getMessage()); } } catch (Exception e) { log.error("{} hit error : {}", getName(), e.getMessage()); diff --git a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/ReplicateNamespaces.java b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/ReplicateNamespaces.java index 5cd3d5c086d6..d6728e4c45f8 100644 --- a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/ReplicateNamespaces.java +++ b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/ReplicateNamespaces.java @@ -21,6 +21,7 @@ import java.util.Map; import java.util.Set; import java.util.UUID; +import java.util.stream.Collectors; import lombok.extern.slf4j.Slf4j; /** @@ -49,25 +50,39 @@ protected ReplicateNamespaces( @Override public void run() { - XClusterConfig xClusterConfig = taskParams().getXClusterConfig(); + log.info("Running {}", getName()); + + XClusterConfig xClusterConfig = getXClusterConfigFromTaskParams(); Universe sourceUniverse = Universe.getOrBadRequest(xClusterConfig.getSourceUniverseUUID()); Universe targetUniverse = Universe.getOrBadRequest(xClusterConfig.getTargetUniverseUUID()); - try { Set sourceNamespaces = KubernetesUtil.getUniverseNamespaces(sourceUniverse); log.debug("Namespaces from source universe: {}", sourceNamespaces); - Set targetNamespaces = KubernetesUtil.getUniverseNamespaces(targetUniverse); log.debug("Namespaces from target universe: {}", targetNamespaces); - - createNamespaces(targetNamespaces, sourceUniverse); - createNamespaces(sourceNamespaces, targetUniverse); + Set targetNamespacesNotExistOnSourceUniverse = + targetNamespaces.stream() + .filter(namespace -> !sourceNamespaces.contains(namespace)) + .collect(Collectors.toSet()); + Set sourceNamespacesNotExistOnTargetUniverse = + sourceNamespaces.stream() + .filter(namespace -> !targetNamespaces.contains(namespace)) + .collect(Collectors.toSet()); + if (!targetNamespacesNotExistOnSourceUniverse.isEmpty()) { + createNamespaces(targetNamespacesNotExistOnSourceUniverse, sourceUniverse); + } + if (!sourceNamespacesNotExistOnTargetUniverse.isEmpty()) { + createNamespaces(sourceNamespacesNotExistOnTargetUniverse, targetUniverse); + } } catch (Exception e) { - log.debug("Ignoring error: {}", e.getMessage()); + log.error("{} hit error : {}", getName(), e.getMessage()); } + + log.info("Completed {}", getName()); } private void createNamespaces(Set namespaces, Universe universe) { + log.info("Creating namespaces: {} on universe: {}", namespaces, universe); Set visitedProviderUUIDS = new HashSet<>(); KubernetesManager kubernetesManager = kubernetesManagerFactory.getManager(); for (Cluster cluster : universe.getUniverseDetails().clusters) { diff --git a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/SetDrStates.java b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/SetDrStates.java index d6542a3ff9ac..386f081d6595 100644 --- a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/SetDrStates.java +++ b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/SetDrStates.java @@ -7,6 +7,7 @@ import com.yugabyte.yw.common.DrConfigStates.TargetUniverseState; import com.yugabyte.yw.common.XClusterUniverseService; import com.yugabyte.yw.forms.XClusterConfigTaskParams; +import com.yugabyte.yw.models.DrConfig; import com.yugabyte.yw.models.XClusterConfig; import java.util.Objects; import javax.inject.Inject; @@ -65,6 +66,7 @@ public void run() { throw new IllegalArgumentException( "SetDrStates subtask can only run for xCluster configs that are used for DR"); } + DrConfig drConfig = xClusterConfig.getDrConfig(); // The parameter keyspacePending is not added intentionally because when it is null, the task // will set keyspacePending in the xCluster config object to null. @@ -80,8 +82,8 @@ public void run() { "Setting the dr config state of xCluster config {} to {} from {}", xClusterConfig.getUuid(), taskParams().drConfigState, - xClusterConfig.getDrConfig().getState()); - xClusterConfig.getDrConfig().setState(taskParams().drConfigState); + drConfig.getState()); + drConfig.setState(taskParams().drConfigState); } if (Objects.nonNull(taskParams().sourceUniverseState)) { log.info( @@ -107,7 +109,7 @@ public void run() { xClusterConfig.getKeyspacePending()); xClusterConfig.setKeyspacePending(taskParams().keyspacePending); - xClusterConfig.update(); + drConfig.update(); } catch (Exception e) { log.error("{} hit error : {}", getName(), e.getMessage()); throw new RuntimeException(e); diff --git a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/WaitForReplicationDrain.java b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/WaitForReplicationDrain.java index 1c1db1f3c3df..bb56c0ab20b2 100644 --- a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/WaitForReplicationDrain.java +++ b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/WaitForReplicationDrain.java @@ -112,28 +112,32 @@ public void run() { int iterationNumber = 0; // Loop until there is no undrained replication streams. while (true) { - log.info("Running waitForReplicationDrain for streams {}", activeStreamIds); - WaitForReplicationDrainResponse resp = client.waitForReplicationDrain(activeStreamIds); - if (resp.hasError()) { - throw new RuntimeException( - String.format( - "waitForReplicationDrain failed universe %s on XClusterConfig(%s): %s", - universe.getUniverseUUID(), xClusterConfig, resp.errorMessage())); - } - List undrainedStreamIds = - resp.getUndrainedStreams().stream() - .map(streamInfo -> streamInfo.getStreamId().toStringUtf8()) - .collect(Collectors.toList()); - if (undrainedStreamIds.isEmpty()) { - log.info("All streams were drained in {} ms", stopwatch.elapsed().toMillis()); - break; - } - subtaskElapsedTime = stopwatch.elapsed(); - if (subtaskElapsedTime.compareTo(subtaskTimeout) > 0) { + try { + log.info("Running waitForReplicationDrain for streams {}", activeStreamIds); + WaitForReplicationDrainResponse resp = client.waitForReplicationDrain(activeStreamIds); + if (resp.hasError()) { + throw new RuntimeException( + String.format( + "waitForReplicationDrain failed universe %s on XClusterConfig(%s): %s", + universe.getUniverseUUID(), xClusterConfig, resp.errorMessage())); + } + List undrainedStreamIds = + resp.getUndrainedStreams().stream() + .map(streamInfo -> streamInfo.getStreamId().toStringUtf8()) + .collect(Collectors.toList()); + if (undrainedStreamIds.isEmpty()) { + log.info("All streams were drained in {} ms", stopwatch.elapsed().toMillis()); + break; + } log.warn("Streams {} are not drained", undrainedStreamIds); - } else { - log.warn("Streams {} are not drained; retrying...", undrainedStreamIds); + } catch (Exception waitForReplicationDrainError) { + if (waitForReplicationDrainError.getMessage().contains("TIMED_OUT")) { + log.warn("waitForReplicationDrain timed out"); + } else { + throw new RuntimeException(waitForReplicationDrainError); + } } + subtaskElapsedTime = stopwatch.elapsed(); if (subtaskElapsedTime.compareTo(subtaskTimeout) > 0) { throw new RuntimeException( String.format( @@ -141,6 +145,8 @@ public void run() { + "%sms which is more than subtaskTimeout (%sms)", iterationNumber, subtaskElapsedTime.toMillis(), subtaskTimeout.toMillis())); } + // The following method gives an opportunity to the task to be aborted. + waitFor(Duration.ofSeconds(1)); iterationNumber++; } } catch (Exception e) { diff --git a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/XClusterAddNamespaceToOutboundReplicationGroup.java b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/XClusterAddNamespaceToOutboundReplicationGroup.java index e97f5b9ec329..526ff422d841 100644 --- a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/XClusterAddNamespaceToOutboundReplicationGroup.java +++ b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/XClusterAddNamespaceToOutboundReplicationGroup.java @@ -2,30 +2,26 @@ package com.yugabyte.yw.commissioner.tasks.subtasks.xcluster; -import static play.mvc.Http.Status.BAD_REQUEST; - import com.google.api.client.util.Throwables; import com.yugabyte.yw.commissioner.BaseTaskDependencies; -import com.yugabyte.yw.commissioner.tasks.XClusterConfigTaskBase; -import com.yugabyte.yw.common.PlatformServiceException; import com.yugabyte.yw.common.XClusterUniverseService; import com.yugabyte.yw.common.config.UniverseConfKeys; import com.yugabyte.yw.forms.XClusterConfigTaskParams; import com.yugabyte.yw.models.Universe; import com.yugabyte.yw.models.XClusterConfig; import java.time.Duration; -import java.util.concurrent.TimeUnit; +import java.util.Collections; import javax.inject.Inject; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; -import org.yb.client.IsXClusterBootstrapRequiredResponse; +import org.yb.client.GetXClusterOutboundReplicationGroupInfoResponse; import org.yb.client.XClusterAddNamespaceToOutboundReplicationGroupResponse; import org.yb.client.YBClient; +import org.yb.master.MasterReplicationOuterClass.GetXClusterOutboundReplicationGroupInfoResponsePB.NamespaceInfoPB; @Slf4j -public class XClusterAddNamespaceToOutboundReplicationGroup extends XClusterConfigTaskBase { - private static long DELAY_BETWEEN_RETRIES_MS = TimeUnit.SECONDS.toMillis(10); +public class XClusterAddNamespaceToOutboundReplicationGroup extends CreateOutboundReplicationGroup { @Inject protected XClusterAddNamespaceToOutboundReplicationGroup( @@ -48,8 +44,12 @@ protected Params taskParams() { @Override public void run() { + log.info("Running {}", getName()); + XClusterConfig xClusterConfig = getXClusterConfigFromTaskParams(); Universe sourceUniverse = Universe.getOrBadRequest(xClusterConfig.getSourceUniverseUUID()); + Duration xclusterWaitTimeout = + this.confGetter.getConfForScope(sourceUniverse, UniverseConfKeys.xclusterSetupAlterTimeout); if (StringUtils.isBlank(taskParams().getDbToAdd())) { throw new RuntimeException( @@ -57,6 +57,7 @@ public void run() { "`dbIdToAdd` in the task parameters must not be null or empty: it was %s", taskParams().getDbToAdd())); } + String dbId = taskParams().getDbToAdd(); try (YBClient client = ybService.getClient( @@ -66,7 +67,34 @@ public void run() { xClusterConfig.getUuid(), taskParams().getDbToAdd()); - String dbId = taskParams().getDbToAdd(); + GetXClusterOutboundReplicationGroupInfoResponse rgInfo = + client.getXClusterOutboundReplicationGroupInfo(xClusterConfig.getReplicationGroupName()); + if (rgInfo.hasError()) { + throw new RuntimeException( + String.format( + "GetXClusterOutboundReplicationGroupInfo failed for universe %s on" + + " XClusterConfig(%s): %s", + sourceUniverse.getUniverseUUID(), xClusterConfig, rgInfo.errorMessage())); + } + log.debug("Got namespace infos: {}", rgInfo.getNamespaceInfos()); + if (rgInfo.getNamespaceInfos().stream() + .map(NamespaceInfoPB::getNamespaceId) + .anyMatch(id -> id.equals(dbId))) { + log.debug( + "Skipping {}: xClusterAddNamespaceToOutboundReplicationGroup {} for source db id: {}" + + " won't be called because namespace is already part of the outbound replication" + + " group", + getName(), + xClusterConfig.getUuid(), + taskParams().getDbToAdd()); + waitForCheckpointingToBeReady( + client, + xClusterConfig, + Collections.singleton(taskParams().getDbToAdd()), + xclusterWaitTimeout.toMillis()); + return; + } + XClusterAddNamespaceToOutboundReplicationGroupResponse createResponse = client.xClusterAddNamespaceToOutboundReplicationGroup( xClusterConfig.getReplicationGroupName(), dbId); @@ -77,9 +105,11 @@ public void run() { "XClusterAddNamespaceToOutboundReplicationGroup rpc failed with error: %s", createResponse.errorMessage())); } - - validateCheckpointingCompleted(client, sourceUniverse, xClusterConfig); - + waitForCheckpointingToBeReady( + client, + xClusterConfig, + Collections.singleton(taskParams().getDbToAdd()), + xclusterWaitTimeout.toMillis()); log.debug( "Checkpointing for xClusterConfig {} completed for source db id: {}", xClusterConfig.getUuid(), @@ -88,62 +118,7 @@ public void run() { log.error("{} hit error : {}", getName(), e.getMessage()); Throwables.propagate(e); } - } - - protected void validateCheckpointingCompleted( - YBClient client, Universe sourceUniverse, XClusterConfig xClusterConfig) throws Exception { - Duration xclusterWaitTimeout = - this.confGetter.getConfForScope(sourceUniverse, UniverseConfKeys.xclusterSetupAlterTimeout); - String dbId = taskParams().getDbToAdd(); - log.info( - "Validating database {} for XClusterConfig({}) is done checkpointing", - dbId, - xClusterConfig.getUuid()); - boolean checkpointingCompleted = - doWithConstTimeout( - DELAY_BETWEEN_RETRIES_MS, - xclusterWaitTimeout.toMillis(), - () -> { - IsXClusterBootstrapRequiredResponse completionResponse; - - try { - completionResponse = - client.isXClusterBootstrapRequired( - xClusterConfig.getReplicationGroupName(), dbId); - } catch (Exception e) { - log.error( - "IsXClusterBootstrapRequired rpc for xClusterConfig: {}, db: {}, hit error:" - + " {}", - xClusterConfig.getName(), - dbId, - e.getMessage()); - return false; - } - if (completionResponse.hasError()) { - log.error( - "IsXClusterBootstrapRequired rpc for xClusterConfig: {}, db: {}, hit error:" - + " {}", - xClusterConfig.getName(), - dbId, - completionResponse.errorMessage()); - return false; - } - log.debug( - "AddNamespaceToOutboundReplicationGroup, Checkpointing status is complete: {}," - + " for universe: {}, xClusterConfig: {}, dbId: {}", - !completionResponse.isNotReady(), - sourceUniverse.getUniverseUUID(), - xClusterConfig.getName(), - dbId); - return !completionResponse.isNotReady(); - }); - if (!checkpointingCompleted) { - throw new PlatformServiceException( - BAD_REQUEST, - String.format( - "Checkpointing database %s for xClusterConfig %s with source universe %s timed out", - dbId, xClusterConfig.getName(), sourceUniverse.getUniverseUUID())); - } + log.info("Completed {}", getName()); } } diff --git a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/XClusterConfigSetStatusForNamespaces.java b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/XClusterConfigSetStatusForNamespaces.java index 727a5c1b02fe..d89b47a3781d 100644 --- a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/XClusterConfigSetStatusForNamespaces.java +++ b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/XClusterConfigSetStatusForNamespaces.java @@ -54,6 +54,7 @@ public void run() { log.error("{} hit error : {}", getName(), e.getMessage()); throw new RuntimeException(e); } + log.info("Completed {}", getName()); } } diff --git a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/XClusterConfigSetup.java b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/XClusterConfigSetup.java index 742658404d3a..252987622824 100644 --- a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/XClusterConfigSetup.java +++ b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/XClusterConfigSetup.java @@ -20,10 +20,13 @@ import javax.inject.Inject; import lombok.extern.slf4j.Slf4j; import org.yb.CommonNet; +import org.yb.cdc.CdcConsumer; import org.yb.cdc.CdcConsumer.XClusterRole; +import org.yb.client.DeleteUniverseReplicationResponse; import org.yb.client.GetMasterClusterConfigResponse; import org.yb.client.SetupUniverseReplicationResponse; import org.yb.client.YBClient; +import org.yb.master.CatalogEntityInfo; import org.yb.util.NetUtil; /** @@ -42,6 +45,7 @@ protected XClusterConfigSetup( } public static class Params extends XClusterConfigTaskParams { + // The target universe UUID must be stored in universeUUID field. // The parent xCluster config must be stored in xClusterConfig field. // Table ids to set up replication for. @@ -76,42 +80,63 @@ public void run() { taskParams().tableIds)); } - // Find bootstrap ids, and check replication is not already set up for that table. - Map tableIdsBootstrapIdsMap = new HashMap<>(); - for (String tableId : taskParams().tableIds) { - Optional tableConfig = xClusterConfig.maybeGetTableById(tableId); - if (!tableConfig.isPresent()) { - String errMsg = - String.format( - "Table with id (%s) does not belong to the task params xCluster config (%s)", - tableId, xClusterConfig.getUuid()); - throw new IllegalArgumentException(errMsg); - } - if (tableConfig.get().isReplicationSetupDone()) { - String errMsg = - String.format( - "Replication is already set up for table with id (%s) in xCluster config (%s)", - tableId, xClusterConfig.getUuid()); - throw new IllegalArgumentException(errMsg); - } - tableIdsBootstrapIdsMap.put(tableId, tableConfig.get().getStreamId()); - } - // Either all tables should need bootstrap, or none should. - if (tableIdsBootstrapIdsMap.values().stream().anyMatch(Objects::isNull) - && tableIdsBootstrapIdsMap.values().stream().anyMatch(Objects::nonNull)) { - throw new IllegalArgumentException( - String.format( - "Failed to create XClusterConfig(%s) because some tables went through bootstrap and " - + "some did not, You must create XClusterConfigSetup subtask separately for them", - xClusterConfig.getUuid())); - } - Universe sourceUniverse = Universe.getOrBadRequest(xClusterConfig.getSourceUniverseUUID()); Universe targetUniverse = Universe.getOrBadRequest(xClusterConfig.getTargetUniverseUUID()); String targetUniverseMasterAddresses = targetUniverse.getMasterAddresses(); String targetUniverseCertificate = targetUniverse.getCertificateNodetoNode(); try (YBClient client = ybService.getClient(targetUniverseMasterAddresses, targetUniverseCertificate)) { + try { + CatalogEntityInfo.SysClusterConfigEntryPB clusterConfig = + getClusterConfig(client, targetUniverse.getUniverseUUID()); + CdcConsumer.ProducerEntryPB existingReplicationGroup = + clusterConfig + .getConsumerRegistry() + .getProducerMapMap() + .get(xClusterConfig.getReplicationGroupName()); + if (Objects.nonNull(existingReplicationGroup)) { + syncXClusterConfigWithReplicationGroup( + clusterConfig, xClusterConfig, taskParams().tableIds); + // We do not need to set the role because in the versions of YBDB that we are going to + // support retry-ability, the role is set automatically. + log.info("Skipping {}: replication group already exists", getName()); + return; + } + } catch (Exception e) { + log.warn("Failed to get cluster config from target universe: {}", e.getMessage()); + } + + // Find bootstrap ids, and check replication is not already set up for that table. + Map tableIdsBootstrapIdsMap = new HashMap<>(); + for (String tableId : taskParams().tableIds) { + Optional tableConfig = xClusterConfig.maybeGetTableById(tableId); + if (!tableConfig.isPresent()) { + String errMsg = + String.format( + "Table with id (%s) does not belong to the task params xCluster config (%s)", + tableId, xClusterConfig.getUuid()); + throw new IllegalArgumentException(errMsg); + } + if (tableConfig.get().isReplicationSetupDone()) { + String errMsg = + String.format( + "Replication is already set up for table with id (%s) in xCluster config (%s)", + tableId, xClusterConfig.getUuid()); + throw new IllegalArgumentException(errMsg); + } + tableIdsBootstrapIdsMap.put(tableId, tableConfig.get().getStreamId()); + } + // Either all tables should need bootstrap, or none should. + if (tableIdsBootstrapIdsMap.values().stream().anyMatch(Objects::isNull) + && tableIdsBootstrapIdsMap.values().stream().anyMatch(Objects::nonNull)) { + throw new IllegalArgumentException( + String.format( + "Failed to create XClusterConfig(%s) because some tables went through bootstrap and" + + " some did not, You must create XClusterConfigSetup subtask separately for" + + " them", + xClusterConfig.getUuid())); + } + log.info( "Setting up replication for XClusterConfig({}): tableIdsBootstrapIdsMap {}", xClusterConfig.getUuid(), @@ -124,19 +149,64 @@ public void run() { sourceUniverse.getMasterAddresses( false /* mastersQueryable */, true /* getSecondary */))); - SetupUniverseReplicationResponse resp = - client.setupUniverseReplication( - xClusterConfig.getReplicationGroupName(), - tableIdsBootstrapIdsMap, - sourceMasterAddresses, - supportsTxnXCluster(targetUniverse) - ? xClusterConfig.getType().equals(ConfigType.Txn) - : null); - if (resp.hasError()) { - throw new RuntimeException( - String.format( - "Failed to set up replication for XClusterConfig(%s): %s", - xClusterConfig.getUuid(), resp.errorMessage())); + // Sometimes, the replication group is created in an intermittent state but it does not show + // up in the universe's cluster config. In those cases, the SetupUniverseReplication RPC + // fails. The workaround is to delete the replication group and then create it again. + SetupUniverseReplicationResponse resp; + try { + resp = + client.setupUniverseReplication( + xClusterConfig.getReplicationGroupName(), + tableIdsBootstrapIdsMap, + sourceMasterAddresses, + supportsTxnXCluster(targetUniverse) + ? xClusterConfig.getType().equals(ConfigType.Txn) + : null); + if (resp.hasError()) { + throw new RuntimeException( + String.format( + "Failed to set up replication for XClusterConfig(%s): %s", + xClusterConfig.getUuid(), resp.errorMessage())); + } + } catch (Exception e) { + log.warn( + "Failed to set up replication for XClusterConfig({}): {}", + xClusterConfig.getUuid(), + e.getMessage()); + if (!e.getMessage().contains("already present")) { + throw e; + } + // Delete the replication group because it already exists and try again. + DeleteUniverseReplicationResponse deleteReplicationResp = + client.deleteUniverseReplication( + xClusterConfig.getReplicationGroupName(), true /* ignoreErrors */); + // Log the warnings in response. + String deleteReplicationRespWarnings = deleteReplicationResp.getWarningsString(); + if (deleteReplicationRespWarnings != null) { + log.warn( + "During deleteUniverseReplication, the following warnings occurred: {}", + deleteReplicationRespWarnings); + } + if (deleteReplicationResp.hasError()) { + throw new RuntimeException( + String.format( + "Failed to delete replication for XClusterConfig(%s): %s", + xClusterConfig.getUuid(), deleteReplicationResp.errorMessage())); + } + resp = + client.setupUniverseReplication( + xClusterConfig.getReplicationGroupName(), + tableIdsBootstrapIdsMap, + sourceMasterAddresses, + supportsTxnXCluster(targetUniverse) + ? xClusterConfig.getType().equals(ConfigType.Txn) + : null); + if (resp.hasError()) { + throw new RuntimeException( + String.format( + "Failed to set up replication for XClusterConfig(%s): %s", + xClusterConfig.getUuid(), resp.errorMessage())); + } } waitForXClusterOperation(xClusterConfig, client::isSetupUniverseReplicationDone); diff --git a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/XClusterDbReplicationSetup.java b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/XClusterDbReplicationSetup.java index 529476872a89..310c21374802 100644 --- a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/XClusterDbReplicationSetup.java +++ b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/subtasks/xcluster/XClusterDbReplicationSetup.java @@ -2,16 +2,12 @@ package com.yugabyte.yw.commissioner.tasks.subtasks.xcluster; -import static play.mvc.Http.Status.BAD_REQUEST; -import static play.mvc.Http.Status.INTERNAL_SERVER_ERROR; - import com.google.api.client.util.Throwables; import com.yugabyte.yw.commissioner.BaseTaskDependencies; import com.yugabyte.yw.commissioner.tasks.XClusterConfigTaskBase; -import com.yugabyte.yw.common.PlatformServiceException; +import com.yugabyte.yw.common.UnrecoverableException; import com.yugabyte.yw.common.XClusterUniverseService; import com.yugabyte.yw.common.config.UniverseConfKeys; -import com.yugabyte.yw.forms.XClusterConfigTaskParams; import com.yugabyte.yw.models.Universe; import com.yugabyte.yw.models.XClusterConfig; import java.time.Duration; @@ -21,6 +17,7 @@ import javax.inject.Inject; import lombok.extern.slf4j.Slf4j; import org.yb.CommonNet; +import org.yb.WireProtocol.AppStatusPB.ErrorCode; import org.yb.client.CreateXClusterReplicationResponse; import org.yb.client.IsCreateXClusterReplicationDoneResponse; import org.yb.client.YBClient; @@ -28,7 +25,8 @@ @Slf4j public class XClusterDbReplicationSetup extends XClusterConfigTaskBase { - private static long DELAY_BETWEEN_RETRIES_MS = TimeUnit.SECONDS.toMillis(10); + + private static final long DELAY_BETWEEN_RETRIES_MS = TimeUnit.SECONDS.toMillis(10); @Inject protected XClusterDbReplicationSetup( @@ -36,85 +34,51 @@ protected XClusterDbReplicationSetup( super(baseTaskDependencies, xClusterUniverseService); } - @Override - protected XClusterConfigTaskParams taskParams() { - return (XClusterConfigTaskParams) taskParams; - } - @Override public void run() { + log.info("Running {}", getName()); + XClusterConfig xClusterConfig = getXClusterConfigFromTaskParams(); Universe sourceUniverse = Universe.getOrBadRequest(xClusterConfig.getSourceUniverseUUID()); Universe targetUniverse = Universe.getOrBadRequest(xClusterConfig.getTargetUniverseUUID()); - Duration xclusterWaitTimeout = + Duration xClusterWaitTimeout = this.confGetter.getConfForScope(sourceUniverse, UniverseConfKeys.xclusterSetupAlterTimeout); - try (YBClient client = ybService.getClient( sourceUniverse.getMasterAddresses(), sourceUniverse.getCertificateNodetoNode())) { - Set targetMasterAddresses = new HashSet<>( NetUtil.parseStringsAsPB( targetUniverse.getMasterAddresses( false /* mastersQueryable */, true /* getSecondary */))); + try { + waitForCreateXClusterReplicationDone( + client, + xClusterConfig.getReplicationGroupName(), + targetMasterAddresses, + xClusterWaitTimeout.toMillis()); + log.info("Skipping {}: XCluster db replication setup already done", getName()); + return; + } catch (Exception ignored) { + // Ignore the exception and continue with the setup because the replication group is not + // set up yet. + } + CreateXClusterReplicationResponse createResponse = client.createXClusterReplication( xClusterConfig.getReplicationGroupName(), targetMasterAddresses); if (createResponse.hasError()) { - throw new PlatformServiceException( - INTERNAL_SERVER_ERROR, + throw new RuntimeException( String.format( "CreateXClusterReplicationResponse rpc failed for xClusterConfig, %s, with error" + " message: %s", xClusterConfig.getUuid(), createResponse.errorMessage())); } - - boolean setupDone = - doWithConstTimeout( - DELAY_BETWEEN_RETRIES_MS, - xclusterWaitTimeout.toMillis(), - () -> { - IsCreateXClusterReplicationDoneResponse doneResponse; - try { - doneResponse = - client.isCreateXClusterReplicationDone( - xClusterConfig.getReplicationGroupName(), targetMasterAddresses); - } catch (Exception e) { - log.error( - "IsCreateXClusterReplicationDone rpc for xClusterConfig: {}, hit error: {}", - xClusterConfig.getUuid(), - e); - return false; - } - - if (doneResponse.hasError()) { - log.error( - "IsCreateXClusterReplicationDone rpc for xClusterConfig: {}, hit error: {}", - xClusterConfig.getUuid(), - doneResponse.errorMessage()); - return false; - } - if (doneResponse.hasReplicationError()) { - log.error( - "IsCreateXClusterReplicationDone rpc for xClusterConfig: {}, hit replication" - + " error: {} with error code: {}", - xClusterConfig.getUuid(), - doneResponse.getReplicationError().getMessage(), - doneResponse.getReplicationError().getCode()); - return false; - } - return true; - }); - - if (!setupDone) { - throw new PlatformServiceException( - BAD_REQUEST, - String.format( - "Setup xcluster replication xClusterConfig %s timed out", - xClusterConfig.getName())); - } - + waitForCreateXClusterReplicationDone( + client, + xClusterConfig.getReplicationGroupName(), + targetMasterAddresses, + xClusterWaitTimeout.toMillis()); log.debug( "XCluster db replication setup complete for xClusterConfig: {}", xClusterConfig.getUuid()); @@ -123,4 +87,58 @@ public void run() { Throwables.propagate(e); } } + + protected void waitForCreateXClusterReplicationDone( + YBClient client, + String replicationGroupName, + Set targetMasterAddresses, + long xClusterWaitTimeoutMs) { + doWithConstTimeout( + DELAY_BETWEEN_RETRIES_MS, + xClusterWaitTimeoutMs, + () -> { + try { + IsCreateXClusterReplicationDoneResponse doneResponse = + client.isCreateXClusterReplicationDone(replicationGroupName, targetMasterAddresses); + if (doneResponse.hasError()) { + throw new RuntimeException( + String.format( + "IsCreateXClusterReplicationDone rpc for replication group name: %s, hit" + + " error: %s", + replicationGroupName, doneResponse.errorMessage())); + } + if (doneResponse.hasReplicationError() + && !doneResponse.getReplicationError().getCode().equals(ErrorCode.OK)) { + throw new RuntimeException( + String.format( + "IsCreateXClusterReplicationDone rpc for replication group name: %s, hit" + + " replication error: %s with error code: %s", + replicationGroupName, + doneResponse.getReplicationError().getMessage(), + doneResponse.getReplicationError().getCode())); + } + if (!doneResponse.isDone()) { + throw new RuntimeException( + String.format( + "CreateXClusterReplication is not done for replication group name: %s", + replicationGroupName)); + } + // Replication setup is complete, return. + } catch (Exception e) { + // If the replication group is not found, retrying does not help. + if (e.getMessage().toLowerCase().contains("not found")) { + log.error( + "Replication group {} not found, aborting wait for replication drain : {}", + replicationGroupName, + e); + throw new UnrecoverableException(e.getMessage()); + } + log.error( + "IsCreateXClusterReplicationDone rpc for replication group name: {}, hit error: {}", + replicationGroupName, + e); + throw new RuntimeException(e); + } + }); + } } diff --git a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/upgrade/KubernetesOverridesUpgrade.java b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/upgrade/KubernetesOverridesUpgrade.java index 02a0905499aa..ee5bdb48fcc3 100644 --- a/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/upgrade/KubernetesOverridesUpgrade.java +++ b/managed/src/main/java/com/yugabyte/yw/commissioner/tasks/upgrade/KubernetesOverridesUpgrade.java @@ -61,6 +61,13 @@ public void run() { /* isTServerChanged */ true, universe.isYbcEnabled(), universe.getUniverseDetails().getYbcSoftwareVersion()); + // Remove extra Namespaced scope services. + addHandleKubernetesNamespacedServices( + false /* readReplicaDelete */, + universe.getUniverseDetails(), + universe.getUniverseUUID(), + false /* handleOwnershipChanges */) + .setSubTaskGroupType(SubTaskGroupType.KubernetesHandleNamespacedService); // Persist new overrides in the DB. addPersistKubernetesOverridesTask().setSubTaskGroupType(getTaskSubGroupType()); }); diff --git a/managed/src/main/java/com/yugabyte/yw/common/AWSUtil.java b/managed/src/main/java/com/yugabyte/yw/common/AWSUtil.java index a537d4280e6e..58004e768f67 100644 --- a/managed/src/main/java/com/yugabyte/yw/common/AWSUtil.java +++ b/managed/src/main/java/com/yugabyte/yw/common/AWSUtil.java @@ -94,7 +94,6 @@ @Singleton @Slf4j public class AWSUtil implements CloudUtil { - @Inject IAMTemporaryCredentialsProvider iamCredsProvider; @Inject CustomCAStoreManager customCAStoreManager; @Inject RuntimeConfGetter runtimeConfGetter; @Inject AWSCloudImpl awsCloudImpl; @@ -305,7 +304,8 @@ public AmazonS3 createS3Client(CustomerConfigStorageS3Data s3Data, String region try { s3ClientBuilder.withCredentials( new AWSStaticCredentialsProvider( - new IAMTemporaryCredentialsProvider().getTemporaryCredentials(s3Data))); + (new IAMTemporaryCredentialsProvider(runtimeConfGetter)) + .getTemporaryCredentials(s3Data))); } catch (Exception e) { log.error("Fetching IAM credentials failed: {}", e.getMessage()); throw new PlatformServiceException(PRECONDITION_FAILED, e.getMessage()); @@ -671,7 +671,8 @@ private Map createCredsMapYbc( private void fillMapWithIAMCreds( Map s3CredsMap, CustomerConfigStorageS3Data s3Data) { try { - AWSCredentials creds = iamCredsProvider.getTemporaryCredentials(s3Data); + AWSCredentials creds = + (new IAMTemporaryCredentialsProvider(runtimeConfGetter)).getTemporaryCredentials(s3Data); s3CredsMap.put(YBC_AWS_ACCESS_KEY_ID_FIELDNAME, creds.getAWSAccessKeyId()); s3CredsMap.put(YBC_AWS_SECRET_ACCESS_KEY_FIELDNAME, creds.getAWSSecretKey()); if (creds instanceof AWSSessionCredentials) { diff --git a/managed/src/main/java/com/yugabyte/yw/common/CustomerTaskManager.java b/managed/src/main/java/com/yugabyte/yw/common/CustomerTaskManager.java index af808025181a..b972a5bb51f3 100644 --- a/managed/src/main/java/com/yugabyte/yw/common/CustomerTaskManager.java +++ b/managed/src/main/java/com/yugabyte/yw/common/CustomerTaskManager.java @@ -27,6 +27,7 @@ import com.yugabyte.yw.forms.BackupRequestParams; import com.yugabyte.yw.forms.BackupTableParams; import com.yugabyte.yw.forms.CertsRotateParams; +import com.yugabyte.yw.forms.DrConfigTaskParams; import com.yugabyte.yw.forms.FinalizeUpgradeParams; import com.yugabyte.yw.forms.GFlagsUpgradeParams; import com.yugabyte.yw.forms.KubernetesGFlagsUpgradeParams; @@ -656,6 +657,15 @@ public CustomerTask retryCustomerTask(UUID customerUUID, UUID taskUUID) { case ReadOnlyClusterDelete: taskParams = Json.fromJson(oldTaskParams, ReadOnlyKubernetesClusterDelete.Params.class); break; + case FailoverDrConfig: + case SwitchoverDrConfig: + taskParams = Json.fromJson(oldTaskParams, DrConfigTaskParams.class); + DrConfigTaskParams drConfigTaskParams = (DrConfigTaskParams) taskParams; + drConfigTaskParams.refreshIfExists(); + // Todo: we need to recompute other task param fields here to handle changes in the database + // at the YBDB level, e.g., the user creates a table after the task has filed and before it + // is retried. + break; default: String errMsg = String.format( diff --git a/managed/src/main/java/com/yugabyte/yw/common/DrConfigStates.java b/managed/src/main/java/com/yugabyte/yw/common/DrConfigStates.java index 1afa28368903..42939d74321d 100644 --- a/managed/src/main/java/com/yugabyte/yw/common/DrConfigStates.java +++ b/managed/src/main/java/com/yugabyte/yw/common/DrConfigStates.java @@ -62,7 +62,7 @@ public enum State { FailoverInProgress("Failover in Progress"), Halted("Halted"), Updating("Updating"), - Error("Error"); + Failed("Failed"); private final String state; @@ -77,4 +77,9 @@ public String toString() { return this.state; } } + + public enum InternalState { + Initialized, + CreatedNewXClusterConfig, + } } diff --git a/managed/src/main/java/com/yugabyte/yw/common/IAMTemporaryCredentialsProvider.java b/managed/src/main/java/com/yugabyte/yw/common/IAMTemporaryCredentialsProvider.java index 104b6b8d3463..0d1f5aab8164 100644 --- a/managed/src/main/java/com/yugabyte/yw/common/IAMTemporaryCredentialsProvider.java +++ b/managed/src/main/java/com/yugabyte/yw/common/IAMTemporaryCredentialsProvider.java @@ -1,3 +1,5 @@ +// Copyright (c) YugaByte, Inc. + package com.yugabyte.yw.common; import com.amazonaws.SdkClientException; @@ -23,27 +25,39 @@ import com.amazonaws.services.securitytoken.model.Credentials; import com.amazonaws.services.securitytoken.model.GetCallerIdentityRequest; import com.amazonaws.services.securitytoken.model.GetCallerIdentityResult; -import com.google.inject.Singleton; +import com.yugabyte.yw.common.config.RuntimeConfGetter; import com.yugabyte.yw.models.configs.data.CustomerConfigStorageS3Data; import com.yugabyte.yw.models.configs.data.CustomerConfigStorageS3Data.IAMConfiguration; import java.io.File; -import java.util.Optional; -import java.util.stream.Stream; +import java.util.ArrayList; +import java.util.List; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.StringUtils; @Slf4j -@Singleton public class IAMTemporaryCredentialsProvider { public static final String STS_DEFAULT_ENDPOINT = "sts.amazonaws.com"; + private static final String NUM_RETRIES_CONFIG_PATH = "yb.aws.iam_credentials_num_retries"; + private static final int WAIT_EACH_RETRY_SECS = 5; + + private final RuntimeConfGetter confGetter; + + public IAMTemporaryCredentialsProvider(RuntimeConfGetter confGetter) { + this.confGetter = confGetter; + } public enum IAMCredentialSource { + // Try all in order WEB_TOKEN > IAM_USER > ASSUME_INSTANCE_ROLE > EC2_INSTANCE DEFAULT("default"), + // ProfileCredentialsProvider IAM_USER("iam_user"), + // WebIdentityTokenCredentialsProvider WEB_TOKEN("web_token"), + // AssumeInstanceRole ASSUME_INSTANCE_ROLE("assume_instance_role"), + // EC2ContainerCredentialsProvider EC2_INSTANCE("ec2_instance"); private final String enumVal; @@ -57,64 +71,83 @@ public String getValue() { } } - public AWSCredentials getTemporaryCredentials(CustomerConfigStorageS3Data s3Data) - throws Exception { - return CustomAWSCredentials.getTemporaryCredentials(s3Data); - } - - private interface CustomAWSCredentials { - AWSCredentials getCredentialsOrFail() throws Exception; - - default Optional optionalGetCredentials() { - try { - return Optional.of(getCredentialsOrFail()); - } catch (Exception e) { - return Optional.empty(); - } + public AWSCredentials getTemporaryCredentials(CustomerConfigStorageS3Data s3Data) { + List credentialsSource = new ArrayList<>(); + switch (s3Data.iamConfig.credentialSource) { + case ASSUME_INSTANCE_ROLE: + credentialsSource.add(new AssumeInstanceRole(s3Data.iamConfig, s3Data.fallbackRegion)); + break; + case EC2_INSTANCE: + credentialsSource.add(new InstanceProfileCredentials()); + break; + case IAM_USER: + credentialsSource.add(new IAMUserCredentials(s3Data.iamConfig.iamUserProfile)); + break; + case WEB_TOKEN: + credentialsSource.add( + new AssumeRoleWithWebIdentity(s3Data.iamConfig, s3Data.fallbackRegion)); + break; + case DEFAULT: + log.debug( + "Trying chain of credential providers in order: WebIdentityTokenCredentialsProvider," + + " ProfileCredentialsProvider, AssumeInstanceRole," + + " EC2ContainerCredentialsProvider"); + credentialsSource.add( + new AssumeRoleWithWebIdentity(s3Data.iamConfig, s3Data.fallbackRegion)); + credentialsSource.add(new IAMUserCredentials(s3Data.iamConfig.iamUserProfile)); + credentialsSource.add(new AssumeInstanceRole(s3Data.iamConfig, s3Data.fallbackRegion)); + credentialsSource.add(new InstanceProfileCredentials()); + break; + default: + throw new RuntimeException( + String.format( + "Invalid IAM credential source option %s", s3Data.iamConfig.credentialSource)); } - static AWSCredentials getTemporaryCredentials(CustomerConfigStorageS3Data s3Data) { - try { - switch (s3Data.iamConfig.credentialSource) { - case ASSUME_INSTANCE_ROLE: - return new AssumeInstanceRole(s3Data.iamConfig, s3Data.fallbackRegion) - .getCredentialsOrFail(); - case EC2_INSTANCE: - return new InstanceProfileCredentials().getCredentialsOrFail(); - case IAM_USER: - return new IAMUserCredentials(s3Data.iamConfig.iamUserProfile).getCredentialsOrFail(); - case WEB_TOKEN: - return new AssumeRoleWithWebIdentity(s3Data.iamConfig, s3Data.fallbackRegion) - .getCredentialsOrFail(); - case DEFAULT: - Optional creds = - Stream.of( - new AssumeRoleWithWebIdentity(s3Data.iamConfig, s3Data.fallbackRegion), - new IAMUserCredentials(s3Data.iamConfig.iamUserProfile), - new AssumeInstanceRole(s3Data.iamConfig, s3Data.fallbackRegion), - new InstanceProfileCredentials()) - .map(CustomAWSCredentials::optionalGetCredentials) - .filter(Optional::isPresent) - .findFirst() - .get(); - if (creds.isPresent()) { - return creds.get(); - } else { - throw new RuntimeException("No credential found in chain."); - } - default: - throw new RuntimeException("Invalid IAM credential source option"); + int numRetries = confGetter.getStaticConf().getInt(NUM_RETRIES_CONFIG_PATH); + List errorMessages = new ArrayList<>(); + while (numRetries > 0) { + errorMessages.clear(); + // Loop through credential sources and get working credentials + for (CustomAWSCredentials credentialSource : credentialsSource) { + try { + log.info("Loading IAM credentials from: {}", credentialSource.getSourceName()); + AWSCredentials credentials = credentialSource.getCredentialsOrFail(); + log.info("Found IAM credentials in: {}", credentialSource.getSourceName()); + return credentials; + } catch (Exception e) { + String message = "Source '" + credentialSource.getSourceName() + "': " + e.getMessage(); + errorMessages.add(message); + } + } + numRetries--; + if (numRetries > 0) { + log.debug("Fetching IAM credentials failed, will retry after 5 seconds"); + try { + Thread.sleep(WAIT_EACH_RETRY_SECS * 1000); + } catch (InterruptedException e) { + throw new RuntimeException("Thread interrupted while sleeping!"); } - } catch (Exception e) { - throw new RuntimeException(e.getCause()); } } + throw new RuntimeException("Unable to load AWS credentials: " + errorMessages); + } + + private interface CustomAWSCredentials { + AWSCredentials getCredentialsOrFail() throws Exception; + + String getSourceName(); } private static class AssumeInstanceRole implements CustomAWSCredentials { IAMConfiguration iamConfig; String signingRegion; + @Override + public String getSourceName() { + return "AssumeInstanceRole"; + } + public AssumeInstanceRole(IAMConfiguration iamConfig, String signingRegion) { this.iamConfig = iamConfig; this.signingRegion = signingRegion; @@ -144,7 +177,7 @@ public AWSCredentials getCredentialsOrFail() throws SdkClientException { roleArn = iamRole.getArn(); maxDuration = iamRole.getMaxSessionDuration(); } catch (Exception e) { - log.error( + log.debug( "Could not get maximum duration for role arn: {}. Using default 1 hour instead.", roleArn); } @@ -181,13 +214,18 @@ private static class AssumeRoleWithWebIdentity implements CustomAWSCredentials { IAMConfiguration iamConfig; String signingRegion; + @Override + public String getSourceName() { + return "WebIdentityTokenCredentialsProvider"; + } + public AssumeRoleWithWebIdentity(IAMConfiguration iamConfig, String signingRegion) { this.iamConfig = iamConfig; this.signingRegion = signingRegion; } @Override - public AWSCredentials getCredentialsOrFail() throws Exception { + public AWSCredentials getCredentialsOrFail() throws SdkClientException { String webIdentityRoleArn = null; String webToken = null; int maxDuration = iamConfig.duration; @@ -200,14 +238,9 @@ public AWSCredentials getCredentialsOrFail() throws Exception { // Fetch AWS_ROLE_ARN from environment( Yugaware is required to have it if service account IAM // set). // This is how default chain fetches it. - try { - webIdentityRoleArn = System.getenv("AWS_ROLE_ARN"); - if (StringUtils.isBlank(webIdentityRoleArn)) { - throw new RuntimeException("AWS_ROLE_ARN: blank variable value."); - } - } catch (Exception e) { - throw new RuntimeException( - "AWS_ROLE_ARN not found for Web Identity assume role.", e.getCause()); + webIdentityRoleArn = System.getenv("AWS_ROLE_ARN"); + if (StringUtils.isBlank(webIdentityRoleArn)) { + throw new RuntimeException("AWS_ROLE_ARN: blank variable value."); } // Fetch web-token for making the Assume role request. @@ -217,7 +250,7 @@ public AWSCredentials getCredentialsOrFail() throws Exception { new File(System.getenv("AWS_WEB_IDENTITY_TOKEN_FILE")), "UTF-8"); } catch (Exception e) { throw new RuntimeException( - "Could not get web token for Assume role request.", e.getCause()); + String.format("Fetching Web Identity token failed: %s", e.getMessage())); } try { @@ -233,7 +266,7 @@ public AWSCredentials getCredentialsOrFail() throws Exception { .getRole(); maxDuration = iamRole.getMaxSessionDuration(); } catch (Exception e) { - log.error( + log.debug( "Could not get maximum duration for role arn: {}. Using default 1 hour instead.", webIdentityRoleArn); } @@ -271,6 +304,11 @@ private static class InstanceProfileCredentials implements CustomAWSCredentials public InstanceProfileCredentials() {} + @Override + public String getSourceName() { + return "EC2ContainerCredentialsProvider"; + } + @Override public AWSCredentials getCredentialsOrFail() throws Exception { AWSCredentialsProvider ec2CredentialsProvider = new EC2ContainerCredentialsProviderWrapper(); @@ -283,6 +321,11 @@ private static class IAMUserCredentials implements CustomAWSCredentials { String profileName; + @Override + public String getSourceName() { + return "ProfileCredentialsProvider"; + } + public IAMUserCredentials(String profileName) { this.profileName = profileName; } @@ -293,7 +336,7 @@ public AWSCredentials getCredentialsOrFail() throws Exception { } } - public static AWSSecurityTokenServiceClientBuilder getStandardSTSClientWithoutCredentials( + private static AWSSecurityTokenServiceClientBuilder getStandardSTSClientWithoutCredentials( String fallbackRegion, boolean regionalSTS) { fallbackRegion = AWSUtil.getClientRegion(fallbackRegion); String stsEndpoint = STS_DEFAULT_ENDPOINT; diff --git a/managed/src/main/java/com/yugabyte/yw/common/KubernetesManager.java b/managed/src/main/java/com/yugabyte/yw/common/KubernetesManager.java index 32a26a8414b7..963a32be232b 100644 --- a/managed/src/main/java/com/yugabyte/yw/common/KubernetesManager.java +++ b/managed/src/main/java/com/yugabyte/yw/common/KubernetesManager.java @@ -38,7 +38,6 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; -import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -55,6 +54,7 @@ import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.util.CollectionUtils; import org.yaml.snakeyaml.Yaml; public abstract class KubernetesManager { @@ -613,7 +613,7 @@ public boolean isHomeCluster(String kubeConfig) { } public String getKubernetesServiceIPPort(ServerType type, Universe universe) { - List allIPs = new ArrayList<>(); + Set allIPs = new HashSet<>(); UniverseDefinitionTaskParams universeDetails = universe.getUniverseDetails(); UniverseDefinitionTaskParams.Cluster primary = universeDetails.getPrimaryCluster(); // If no service is exposed, fail early. @@ -654,14 +654,18 @@ public String getKubernetesServiceIPPort(ServerType type, Universe universe) { false, universeDetails.useNewHelmNamingStyle); - String ip = + Set ips = getPreferredServiceIP( config, helmReleaseName, namespace, type == ServerType.MASTER, - universeDetails.useNewHelmNamingStyle); - if (ip == null) { + universe + .getConfig() + .getOrDefault(Universe.LABEL_K8S_RESOURCES, "false") + .equals("true") /* k8sNewLabels */, + universe.getName()); + if (CollectionUtils.isEmpty(ips)) { return null; } @@ -682,7 +686,7 @@ public String getKubernetesServiceIPPort(ServerType type, Universe universe) { default: throw new IllegalArgumentException("Unexpected type " + type); } - allIPs.add(String.format("%s:%d", ip, rpcPort)); + ips.stream().forEach(ip -> allIPs.add(String.format("%s:%d", ip, rpcPort))); } return String.join(",", allIPs); } @@ -722,12 +726,13 @@ public abstract PodStatus getPodStatus( /** * @return the first that exists of loadBalancer.hostname, loadBalancer.ip, clusterIp */ - public abstract String getPreferredServiceIP( + public abstract Set getPreferredServiceIP( Map config, String universePrefix, String namespace, boolean isMaster, - boolean newNamingStyle); + boolean k8sNewLabels, + String universeName); public abstract List getNodeInfos(Map config); @@ -872,4 +877,19 @@ public abstract boolean resourceExists( public abstract Map getServerTypeGflagsChecksumMap( String namespace, String helmReleaseName, Map config); + + public abstract void deleteNamespacedService( + Map config, String namespace, String universeName); + + public abstract void deleteNamespacedService( + Map config, + String namespace, + String universeName, + @Nullable Set serviceNames); + + public abstract void updateNamespacedServiceOwnership( + Map config, String namespace, String universeName, String ownerReleaseName); + + public abstract List getNamespacedServices( + Map config, String namespace, String universeName); } diff --git a/managed/src/main/java/com/yugabyte/yw/common/KubernetesUtil.java b/managed/src/main/java/com/yugabyte/yw/common/KubernetesUtil.java index fee72179fa57..eef8d11ad099 100644 --- a/managed/src/main/java/com/yugabyte/yw/common/KubernetesUtil.java +++ b/managed/src/main/java/com/yugabyte/yw/common/KubernetesUtil.java @@ -4,12 +4,18 @@ import static com.yugabyte.yw.common.PlacementInfoUtil.isMultiAZ; +import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.HashMultimap; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Multimap; import com.yugabyte.yw.commissioner.Common; +import com.yugabyte.yw.commissioner.Common.CloudType; +import com.yugabyte.yw.commissioner.tasks.KubernetesTaskBase.KubernetesPlacement; import com.yugabyte.yw.commissioner.tasks.UniverseTaskBase; +import com.yugabyte.yw.common.helm.HelmUtils; +import com.yugabyte.yw.forms.UniverseDefinitionTaskParams; import com.yugabyte.yw.forms.UniverseDefinitionTaskParams.Cluster; +import com.yugabyte.yw.forms.UniverseDefinitionTaskParams.ClusterType; import com.yugabyte.yw.models.AvailabilityZone; import com.yugabyte.yw.models.Customer; import com.yugabyte.yw.models.InstanceType; @@ -25,17 +31,26 @@ import com.yugabyte.yw.models.helpers.provider.KubernetesInfo; import io.fabric8.kubernetes.api.model.Node; import io.fabric8.kubernetes.api.model.Quantity; +import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import java.util.UUID; +import java.util.function.Function; import java.util.stream.Collectors; +import javax.annotation.Nullable; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; +import org.yaml.snakeyaml.Yaml; +import play.libs.Json; @Slf4j public class KubernetesUtil { @@ -180,6 +195,31 @@ public static Map getKubeConfigPerAZ(Provider provider) { return azToKubeConfig; } + // Get config values with fallback + public static String getK8sPropertyFromConfigOrDefault( + Map config, + Map regionConfig, + Map azConfig, + String property, + String defaultValue) { + String value = azConfig != null ? azConfig.get(property) : null; + if (value != null) { + return value; + } + + value = regionConfig != null ? regionConfig.get(property) : null; + if (value != null) { + return value; + } + + value = config != null ? config.get(property) : null; + if (value != null) { + return value; + } + + return defaultValue; + } + // This function decides the value of isMultiAZ based on the value // of azName. In case of single AZ providers, the azName is passed // as null. @@ -537,16 +577,20 @@ public static String formatPodAddress( * @return true if MCS is enabled. */ public static boolean isMCSEnabled(Universe universe) { - UUID providerUUID = - UUID.fromString(universe.getUniverseDetails().getPrimaryCluster().userIntent.provider); + return isMCSEnabled(universe.getUniverseDetails()); + } + + private static boolean isMCSEnabled(UniverseDefinitionTaskParams universeDetails) { + UUID providerUUID = UUID.fromString(universeDetails.getPrimaryCluster().userIntent.provider); Provider provider = Provider.getOrBadRequest(providerUUID); if (provider.getCloudCode().equals(Common.CloudType.kubernetes)) { List regions = Region.getByProvider(provider.getUuid()); for (Region region : regions) { List zones = AvailabilityZone.getAZsForRegion(region.getUuid()); for (AvailabilityZone zone : zones) { - if (StringUtils.isNotBlank( - zone.getDetails().getCloudInfo().getKubernetes().getKubePodAddressTemplate())) { + if (zone.getDetails().getCloudInfo().getKubernetes() != null + && StringUtils.isNotBlank( + zone.getDetails().getCloudInfo().getKubernetes().getKubePodAddressTemplate())) { return true; } } @@ -676,4 +720,586 @@ public static NodeDetails getKubernetesNodeName( node.nodeName = nodeName; return node; } + + public static boolean shouldConfigureNamespacedService( + UniverseDefinitionTaskParams universeDetails, Map universeConfig) { + if (isMCSEnabled(universeDetails) + || !universeDetails.useNewHelmNamingStyle + || universeConfig.getOrDefault(Universe.LABEL_K8S_RESOURCES, "false").equals("false")) { + return false; + } + return true; + } + + /** + * Generate final overrides after applying provider, universe, AZ overrides. Return overrides in + * the form of <AZ_uuid, overrides> + * + * @param cluster The universe cluster + * @param universeOverridesString The userIntent universe overrides + * @param azsOverridesMap The userIntent AZ level overrides + * @return Final overrides in the form of <AZ_uuid, overrides> + * @throws IOException + */ + // @SuppressWarnings("unchecked") + private static Map> getFinalOverrides( + Cluster cluster, String universeOverridesString, Map azsOverridesMap) + throws IOException { + + Map> result = new HashMap<>(); + PlacementInfo placementInfo = cluster.placementInfo; + Provider provider = Provider.getOrBadRequest(UUID.fromString(cluster.userIntent.provider)); + + ObjectMapper mapper = new ObjectMapper(); + Yaml yaml = new Yaml(); + Map universeOverrides = new HashMap<>(); + Map univOverridesMap = HelmUtils.convertYamlToMap(universeOverridesString); + if (MapUtils.isNotEmpty(univOverridesMap)) { + String universeOverridesStr = mapper.writeValueAsString(univOverridesMap); + universeOverrides = mapper.readValue(universeOverridesStr, Map.class); + } + + Map cloudConfig = CloudInfoInterface.fetchEnvVars(provider); + for (PlacementRegion pr : placementInfo.cloudList.get(0).regionList) { + Region region = Region.getOrBadRequest(pr.uuid); + Map regionConfig = CloudInfoInterface.fetchEnvVars(region); + for (PlacementAZ pa : pr.azList) { + AvailabilityZone az = AvailabilityZone.getOrBadRequest(pa.uuid); + Map zoneConfig = CloudInfoInterface.fetchEnvVars(az); + Map overrides = new HashMap<>(); + Map providerOverrides; + // Provider overrides in preference az > region > cloud + String providerOverridesYAML = + KubernetesUtil.getK8sPropertyFromConfigOrDefault( + cloudConfig, regionConfig, zoneConfig, "OVERRIDES", null); + if (providerOverridesYAML != null) { + providerOverrides = yaml.load(providerOverridesYAML); + if (providerOverrides != null) { + // Merge with overrides + HelmUtils.mergeYaml(overrides, providerOverrides); + } + } + // Merge Universe overrides + if (MapUtils.isNotEmpty(universeOverrides)) { + HelmUtils.mergeYaml(overrides, universeOverrides); + } + String azOverridesStr = azsOverridesMap.get(az.getName()); + Map azOverridesMap = HelmUtils.convertYamlToMap(azOverridesStr); + // Merge AZ overrides + if (MapUtils.isNotEmpty(azOverridesMap)) { + String azOverridesString = mapper.writeValueAsString(azOverridesMap); + Map azOverrides = mapper.readValue(azOverridesString, Map.class); + HelmUtils.mergeYaml(overrides, azOverrides); + } + result.put(az.getUuid(), overrides); + } + } + return result; + } + + private static Set getNamespacesInCluster( + UniverseDefinitionTaskParams universeParams, ClusterType clusterType) { + Set namespaces = new HashSet<>(); + for (Cluster cluster : universeParams.clusters) { + if (cluster.userIntent.providerType != CloudType.kubernetes) { + continue; + } + if (clusterType != cluster.clusterType) { + continue; + } + PlacementInfo pi = cluster.placementInfo; + boolean isReadOnlyCluster = cluster.clusterType == ClusterType.ASYNC; + KubernetesPlacement placement = new KubernetesPlacement(pi, isReadOnlyCluster); + Provider provider = Provider.getOrBadRequest(UUID.fromString(cluster.userIntent.provider)); + boolean isMultiAZ = PlacementInfoUtil.isMultiAZ(provider); + for (Entry> entry : placement.configs.entrySet()) { + AvailabilityZone az = AvailabilityZone.getOrBadRequest(entry.getKey()); + String namespace = + KubernetesUtil.getKubernetesNamespace( + isMultiAZ, + universeParams.nodePrefix, + az.getCode(), + entry.getValue(), + universeParams.useNewHelmNamingStyle, + isReadOnlyCluster); + namespaces.add(namespace); + } + } + return namespaces; + } + + /** + * Generate Namespace and corresponding final AZ overrides map for each AZ within the namespace. + * + * @param universeParams + * @param clusterType Optional + * @return Generated namespaced overrides map in form of <Namespace, <AZ_uuid, overrides>> + * @throws IOException + */ + public static Map>> generateNamespaceAZOverridesMap( + UniverseDefinitionTaskParams universeParams, @Nullable ClusterType clusterType) + throws IOException { + Map> namespaceAZs = new HashMap<>(); + Map> azUUIDFinalOverrides = new HashMap<>(); + // Not handling MCS enabled case. Need to check how to return map for that. + boolean isMCS = isMCSEnabled(universeParams); + if (isMCS) { + return null; + } + String universeOverridesStr = universeParams.getPrimaryCluster().userIntent.universeOverrides; + Map azsOverridesStr = universeParams.getPrimaryCluster().userIntent.azOverrides; + if (azsOverridesStr == null) { + azsOverridesStr = new HashMap<>(); + } + for (Cluster cluster : universeParams.clusters) { + if (cluster.userIntent.providerType != CloudType.kubernetes) { + continue; + } + if (clusterType != cluster.clusterType) { + continue; + } + Map> finalOverrides = + getFinalOverrides(cluster, universeOverridesStr, azsOverridesStr); + // Safe to add all to map directly since read only clusters don't have independent overrides + azUUIDFinalOverrides.putAll(finalOverrides); + PlacementInfo pi = cluster.placementInfo; + boolean isReadOnlyCluster = cluster.clusterType == ClusterType.ASYNC; + KubernetesPlacement placement = new KubernetesPlacement(pi, isReadOnlyCluster); + Provider provider = Provider.getOrBadRequest(UUID.fromString(cluster.userIntent.provider)); + boolean isMultiAZ = PlacementInfoUtil.isMultiAZ(provider); + for (Entry> entry : placement.configs.entrySet()) { + AvailabilityZone az = AvailabilityZone.getOrBadRequest(entry.getKey()); + String namespace = + KubernetesUtil.getKubernetesNamespace( + isMultiAZ, + universeParams.nodePrefix, + az.getCode(), + entry.getValue(), + universeParams.useNewHelmNamingStyle, + isReadOnlyCluster); + if (namespaceAZs.containsKey(namespace)) { + namespaceAZs.get(namespace).add(az.getUuid()); + } else { + namespaceAZs.put(namespace, new HashSet<>(Arrays.asList(az.getUuid()))); + } + } + } + // Generate Namespace -> map + Map>> namespaceAZOverrides = + namespaceAZs.entrySet().stream() + .collect( + Collectors.toMap( + Map.Entry::getKey, + nsAzEntry -> + nsAzEntry.getValue().stream() + .collect( + Collectors.toMap( + Function.identity(), + uuid -> + azUUIDFinalOverrides.getOrDefault( + uuid, new HashMap()))))); + return namespaceAZOverrides; + } + + // Convert collection of service in overrides to Map + // Returns null if serviceEndpoints key present without values( i.e. empty service list) + private static Map> getServicesFromOverrides( + Map overrides) { + ObjectMapper mapper = new ObjectMapper(); + if (overrides.containsKey("serviceEndpoints")) { + List services = (ArrayList) overrides.get("serviceEndpoints"); + if (CollectionUtils.isEmpty(services)) { + return null; + } + return services.stream() + .map(service -> (Map) mapper.convertValue(service, Map.class)) + .collect(Collectors.toMap(service -> (String) service.get("name"), Function.identity())); + } + return new HashMap<>(); + } + + /** + * Generate Map of Namespace and Per-AZ Namespace scoped services. Returns empty map for AZs where + * serviceEndpoints is not defined. Returns null for AZs where serviceEndpoints is defined but + * empty. + * + * @param universeParams + * @return Generated namespaced NS scope services in the form <Namespace, <AZ_uuid, + * <Service_name, Service_overrides>>> + * @throws IOException + */ + public static Map>>> + getNamespaceNSScopedServices( + UniverseDefinitionTaskParams universeParams, @Nullable ClusterType clusterType) + throws IOException { + Map>> namespaceAZOverrides = + generateNamespaceAZOverridesMap(universeParams, clusterType); + Map>>> nsNamespacedServices = new HashMap<>(); + String defaultScopeUserIntent = + universeParams.getPrimaryCluster().userIntent.defaultServiceScopeAZ ? "AZ" : "Namespaced"; + for (Entry>> nsEntry : namespaceAZOverrides.entrySet()) { + String namespace = nsEntry.getKey(); + Map>> azNamespacedServicesMap = new HashMap<>(); + nsEntry.getValue().entrySet().stream() + .forEach( + azOverridesEntry -> { + Map override = azOverridesEntry.getValue(); + Map> services = getServicesFromOverrides(override); + if (services == null) { + azNamespacedServicesMap.put(azOverridesEntry.getKey(), null /* empty Services */); + } else { + Map> namespacedServices = + services.entrySet().stream() + .filter( + serviceEntry -> { + String scope = + ((String) + serviceEntry + .getValue() + .getOrDefault("scope", defaultScopeUserIntent)); + // Fail if scope other than AZ or Namespaced + if (!(scope.equals("Namespaced") || scope.equals("AZ"))) { + throw new RuntimeException( + String.format( + "Unknown scope for service %s in namespace %s", + serviceEntry.getKey(), namespace)); + } + return scope.equals("Namespaced"); + }) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + azNamespacedServicesMap.put(azOverridesEntry.getKey(), namespacedServices); + } + }); + nsNamespacedServices.put(namespace, azNamespacedServicesMap); + } + return nsNamespacedServices; + } + + /** + * Generate a map of <AZ_uuid, Set<Service_name>> to delete. The AZ_uuid's config will be + * used to delete the corresponding services in the map entry. + * + * @param taskParams The new universe params + * @param universeParams The existing universe params + * @param universeConfig + * @param readReplicaDelete If handling read-replica cluster delete case + * @return Map <AZ_uuid, Set<Service_name>> to reference for delete of Namespaced services. + * @throws IOException + */ + public static Map> getExtraNSScopeServicesToRemove( + @Nullable UniverseDefinitionTaskParams taskParams, + UniverseDefinitionTaskParams universeParams, + Map universeConfig, + ClusterType clusterType, + boolean deleteCluster) + throws IOException { + Map> removableServices = new HashMap<>(); + // Return if should not configure + if (!shouldConfigureNamespacedService(universeParams, universeConfig)) { + return removableServices; + } + if (taskParams == null) { + taskParams = universeParams; + } + Set primaryClusterNamespaces = getNamespacesInCluster(taskParams, ClusterType.PRIMARY); + + Map>>> existingNSScopedServices = + getNamespaceNSScopedServices(universeParams, clusterType /* clusterType */); + Map>>> newNSScopedServices = + getNamespaceNSScopedServices(taskParams, clusterType /* clusterType */); + + for (Entry>>> azsNSServicesEntry : + existingNSScopedServices.entrySet()) { + String namespace = azsNSServicesEntry.getKey(); + Entry>> universeParamsFirstEntry = + azsNSServicesEntry.getValue().entrySet().iterator().next(); + Map> existingServices = universeParamsFirstEntry.getValue(); + UUID firstAzUUID = universeParamsFirstEntry.getKey(); + // Skip namespaces already contained by Primary cluster + if (clusterType == ClusterType.ASYNC && primaryClusterNamespaces.contains(namespace)) { + log.trace("{} already processed in primary cluster!", namespace); + continue; + } + if (deleteCluster) { + // For cluster delete case, remove all services + removableServices.put(firstAzUUID, null /* service names */); + } else if (!newNSScopedServices.containsKey(namespace)) { + // If op is other than deleting cluster itself, find specific Services to remove + // Clear all if namespace being deleted + removableServices.put(firstAzUUID, null /* service names */); + } else { + Entry>> taskParamsFirstEntry = + newNSScopedServices.get(namespace).entrySet().iterator().next(); + Map> newServices = taskParamsFirstEntry.getValue(); + if (newServices == null) { + // Clear all if service endpoint is empty array + removableServices.put(firstAzUUID, null /* service names */); + } else if (MapUtils.isNotEmpty(newServices) && MapUtils.isNotEmpty(existingServices)) { + // Not handling case when new/old services not defined(use default helm service list) + // in overrides. + Set newServiceNames = newServices.keySet(); + // If current services list is non-empty and previous services list was non-empty + // find the difference. + Set servicesToRemove = + existingServices.keySet().stream() + .filter(s -> !newServiceNames.contains(s)) + .collect(Collectors.toSet()); + if (CollectionUtils.isNotEmpty(servicesToRemove)) { + removableServices.put(firstAzUUID, servicesToRemove); + } + } + } + } + return removableServices; + } + + /** + * Generate a map of <AZ_uuid, AZ_uuid> to replace ownership of existing Namespaced services. + * The Map key AZ_uuid's config is used to replace the Namespaced service owner to Map value + * AZ_uuid's release name. The method does not care for existence of NS services. Applying new + * service owners is not an issue as long as Releases are in the same namespace. + * + * @param taskParams The new universe params + * @param universeParams The existing universe params + * @param universeConfig + * @param clusterType + * @return Map <AZ_uuid, AZ_uuid> to reference for Service ownership changes + * @throws IOException + */ + public static Map getNSScopeServicesChangeOwnership( + @Nullable UniverseDefinitionTaskParams taskParams, + UniverseDefinitionTaskParams universeParams, + Map universeConfig, + ClusterType clusterType) + throws IOException { + Map servicesNewOwnership = new HashMap<>(); + // Return if should not configure + if (!shouldConfigureNamespacedService(universeParams, universeConfig)) { + return servicesNewOwnership; + } + if (taskParams == null) { + taskParams = universeParams; + } + Map>>> existingNSScopedServices = + getNamespaceNSScopedServices(universeParams, clusterType /* clusterType */); + Map>>> newNSScopedServices = + getNamespaceNSScopedServices(taskParams, clusterType /* clusterType */); + Set primaryClusterNamespaces = getNamespacesInCluster(taskParams, ClusterType.PRIMARY); + for (Entry>>> azsNSServicesEntry : + existingNSScopedServices.entrySet()) { + String namespace = azsNSServicesEntry.getKey(); + // Primary cluster ownership is prioritised + if (clusterType == ClusterType.ASYNC && primaryClusterNamespaces.contains(namespace)) { + log.trace("{} already processed in primary cluster!", namespace); + continue; + } + Entry>> firstEntry = + azsNSServicesEntry.getValue().entrySet().iterator().next(); + UUID firstAzUUID = firstEntry.getKey(); + if (newNSScopedServices.containsKey(namespace)) { + UUID newOwnerAzUUID = newNSScopedServices.get(namespace).keySet().iterator().next(); + servicesNewOwnership.put(firstAzUUID, newOwnerAzUUID); + } + } + return servicesNewOwnership; + } + + /** + * Generate set of new Namespaced service owners per Namespace + * + * @param universeParams + * @param universeConfig + * @param clusterType + * @return Set of AZ_uuid's which will own Namespaced services created per namespace + * @throws IOException + */ + public static Set getNSScopedServiceOwners( + UniverseDefinitionTaskParams universeParams, + Map universeConfig, + ClusterType clusterType) + throws IOException { + // Return if should not configure + if (!shouldConfigureNamespacedService(universeParams, universeConfig)) { + log.debug("Universe configuration does not support Namespace scoped services"); + return new HashSet<>(); + } + Set primaryClusterNamespaces = + getNamespacesInCluster(universeParams, ClusterType.PRIMARY); + Map>>> nsNamespacedServices = + getNamespaceNSScopedServices(universeParams, clusterType); + // Return first azUUID for all the namespaces to become 'Namespaced' scope service owners + // Skip namespaces which belong to primary cluster if processing ASYNC cluster + return nsNamespacedServices.entrySet().stream() + .filter( + nsServiceEntry -> { + String namespace = nsServiceEntry.getKey(); + if (clusterType == ClusterType.ASYNC + && primaryClusterNamespaces.contains(namespace)) { + return false; + } + return true; + }) + .map(nsServiceEntry -> nsServiceEntry.getValue().keySet().iterator().next()) + .collect(Collectors.toSet()); + } + + // Validate Namespaced service endpoints are same across all AZ's in a given Namespace + private static void validateNamespacedServiceEndpoints( + UniverseDefinitionTaskParams universeParams) throws IOException { + ObjectMapper mapper = new ObjectMapper(); + Map>>> nsNamespacedServices = + getNamespaceNSScopedServices(universeParams, null /* clusterType */); + for (Entry>>> nsEntry : + nsNamespacedServices.entrySet()) { + String namespace = nsEntry.getKey(); + Map>> azNsServiceOverrides = nsEntry.getValue(); + // Generate as Map for all AZs and count distinct Maps + long distinctServices = + azNsServiceOverrides.values().stream() + .map( + servicesMap -> { + // null for empty serviceEndpoints override + if (servicesMap == null) { + return null; + } else { + Map serviceAsStringMap = + servicesMap.entrySet().stream() + .collect( + Collectors.toMap( + Map.Entry::getKey, + serviceEntry -> { + try { + return mapper.writeValueAsString(serviceEntry.getValue()); + } catch (IOException e) { + throw new RuntimeException(e); + } + })); + return serviceAsStringMap; + } + }) + .distinct() + .count(); + // If distinctServices > 1, we have different namespaced service overrides for AZs + if (distinctServices > 1) { + throw new RuntimeException( + String.format( + "Namespace %s has conflicting namespace scope service overrides", namespace)); + } + } + } + + // Validate service names are not repeated in a service endpoint list + private static void validateConflictingService(UniverseDefinitionTaskParams universeParams) + throws IOException { + Map>> namespaceAZOverrides = + generateNamespaceAZOverridesMap(universeParams, null /* clusterType */); + ObjectMapper mapper = new ObjectMapper(); + for (Map> azsOverrides : namespaceAZOverrides.values()) { + for (Map azOverride : azsOverrides.values()) { + Set services = new HashSet<>(); + if (azOverride.containsKey("serviceEndpoints")) { + List serviceEndpoints = (ArrayList) azOverride.get("serviceEndpoints"); + if (CollectionUtils.isNotEmpty(serviceEndpoints)) { + for (Object serviceEndpoint : serviceEndpoints) { + Map sE = mapper.convertValue(serviceEndpoint, Map.class); + String serviceName = (String) sE.get("name"); + if (services.contains(serviceName)) { + throw new RuntimeException("Overrides contain same service name twice!"); + } + services.add(serviceName); + } + } + } + } + } + } + + /** + * Validate service endpoints in the final overrides + * + * @param universeParams + * @param universeConfig + * @throws IOException + */ + public static void validateServiceEndpoints( + UniverseDefinitionTaskParams universeParams, Map universeConfig) + throws IOException { + // Return if should not configure + if (!shouldConfigureNamespacedService(universeParams, universeConfig)) { + log.debug("Universe configuration does not support Namespace scoped services, skipping"); + return; + } + // Validate service name does not appear twice in final overrides per AZ. + validateConflictingService(universeParams); + // Validate Namespaced scope service + validateNamespacedServiceEndpoints(universeParams); + } + + /** + * Validate service endpoints from final overrides for KubernetesOverridesUpgrade + * + * @param newUniverseOverrides New universe overrides + * @param newAZOverrides New AZ overrides + * @param universeParams + * @param universeConfig + * @throws IOException + */ + public static void validateUpgradeServiceEndpoints( + String newUniverseOverrides, + Map newAZOverrides, + UniverseDefinitionTaskParams universeParams, + Map universeConfig) + throws IOException { + // Return if should not configure + if (!shouldConfigureNamespacedService(universeParams, universeConfig)) { + log.debug("Universe configuration does not support Namespace scoped services, skipping"); + return; + } + UniverseDefinitionTaskParams taskParams = + Json.fromJson(Json.toJson(universeParams), UniverseDefinitionTaskParams.class); + taskParams.getPrimaryCluster().userIntent.universeOverrides = newUniverseOverrides; + taskParams.getPrimaryCluster().userIntent.azOverrides = newAZOverrides; + // Validate new overrides for service endpoint independently + validateServiceEndpoints(taskParams, universeConfig); + + String defaultScope = + universeParams.getPrimaryCluster().userIntent.defaultServiceScopeAZ ? "AZ" : "Namespaced"; + + Map>> existingNsAzOverrides = + generateNamespaceAZOverridesMap(universeParams, null /* clusterType */); + Map>> newNsAzOverrides = + generateNamespaceAZOverridesMap(taskParams, null /* clusterType */); + for (Entry>> newAzOverrides : + newNsAzOverrides.entrySet()) { + // Filter service endpoint type overrides and get all services in a list + // Map in task params + Map> newAzServices = + getServicesFromOverrides(newAzOverrides.getValue().values().iterator().next()); + // Map in Universe details + Map> universeAzServices = + getServicesFromOverrides( + existingNsAzOverrides.get(newAzOverrides.getKey()).values().iterator().next()); + if (MapUtils.isNotEmpty(newAzServices) && MapUtils.isNotEmpty(universeAzServices)) { + // Verify new service overrides against existing service overrides + newAzServices + .entrySet() + .forEach( + serviceEntry -> { + Map newService = serviceEntry.getValue(); + String newScope = (String) newService.getOrDefault("scope", defaultScope); + Map existingService = + universeAzServices.getOrDefault(serviceEntry.getKey(), null); + if (existingService != null) { + String existingScope = + (String) existingService.getOrDefault("scope", defaultScope); + if (!StringUtils.equals(existingScope, newScope)) { + throw new RuntimeException( + String.format( + "Scope for service %s should not change", serviceEntry.getKey())); + } + } + }); + } + } + } } diff --git a/managed/src/main/java/com/yugabyte/yw/common/NativeKubernetesManager.java b/managed/src/main/java/com/yugabyte/yw/common/NativeKubernetesManager.java index c84d95fc7355..f1c75888e6b1 100644 --- a/managed/src/main/java/com/yugabyte/yw/common/NativeKubernetesManager.java +++ b/managed/src/main/java/com/yugabyte/yw/common/NativeKubernetesManager.java @@ -35,9 +35,12 @@ import java.nio.file.StandardOpenOption; import java.util.List; import java.util.Map; +import java.util.Objects; +import java.util.Set; import java.util.UUID; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; import javax.annotation.Nullable; import javax.inject.Singleton; import lombok.extern.slf4j.Slf4j; @@ -173,14 +176,23 @@ public String getCloudProvider(Map config) { } @Override - public String getPreferredServiceIP( + public Set getPreferredServiceIP( Map config, String universePrefix, String namespace, boolean isMaster, - boolean newNamingStyle) { - String appLabel = newNamingStyle ? "app.kubernetes.io/name" : "app"; + boolean k8sNewLabels, + String universeName) { + String appLabel = k8sNewLabels ? "app.kubernetes.io/name" : "app"; String appName = isMaster ? "yb-master" : "yb-tserver"; + String universeIdentifier, universeLabel; + if (k8sNewLabels) { + universeLabel = "app.kubernetes.io/part-of"; + universeIdentifier = universeName; + } else { + universeLabel = "release"; + universeIdentifier = universePrefix; + } try (KubernetesClient client = getClient(config)) { // We don't use service-type=endpoint selector for backwards // compatibility with old charts which don't have service-type @@ -190,19 +202,19 @@ public String getPreferredServiceIP( .services() .inNamespace(namespace) .withLabel(appLabel, appName) - .withLabel("release", universePrefix) + .withLabel(universeLabel, universeIdentifier) .withLabelNotIn("service-type", "headless", "non-endpoint") .list() .getItems(); - // TODO: PLAT-5625: This might need a change when we have one - // common TServer/Master endpoint service across multiple Helm - // releases. Currently we call getPreferredServiceIP for each AZ - // deployment/Helm release, and return all the IPs. - if (services.size() != 1) { + if (services.size() > 0) { + return services.stream() + .map(service -> getIp(service)) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + } else { throw new RuntimeException( - "There must be exactly one Master or TServer endpoint service, got " + services.size()); + "There must be atleast one Master or TServer endpoint service, got 0"); } - return getIp(services.get(0)); } } @@ -555,4 +567,36 @@ public Map getServerTypeGflagsChecksumMap( // TODO Auto-generated method stub throw new UnsupportedOperationException("Unimplemented method 'getServerTypeGflagsChecksum'"); } + + @Override + public void deleteNamespacedService( + Map config, String namespace, String universeName) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'deleteNamespacedService'"); + } + + @Override + public void deleteNamespacedService( + Map config, + String namespace, + String universeName, + @Nullable Set serviceNames) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'deleteNamespacedService'"); + } + + @Override + public void updateNamespacedServiceOwnership( + Map config, String namespace, String universeName, String ownerReleaseName) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException( + "Unimplemented method 'updateNamespacedServiceOwnership'"); + } + + @Override + public List getNamespacedServices( + Map config, String namespace, String universeName) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'getNamespacedServices'"); + } } diff --git a/managed/src/main/java/com/yugabyte/yw/common/NodeManager.java b/managed/src/main/java/com/yugabyte/yw/common/NodeManager.java index 36072d149619..7aa3f944bd84 100644 --- a/managed/src/main/java/com/yugabyte/yw/common/NodeManager.java +++ b/managed/src/main/java/com/yugabyte/yw/common/NodeManager.java @@ -138,7 +138,6 @@ public class NodeManager extends DevopsBase { public static final String POSTGRES_MAX_MEM_MB = "yb.dbmem.postgres.max_mem_mb"; public static final String POSTGRES_RR_MAX_MEM_MB = "yb.dbmem.postgres.rr_max_mem_mb"; public static final String YBC_NFS_DIRS = "yb.ybc_flags.nfs_dirs"; - public static final String YBC_ENABLE_VERBOSE = "yb.ybc_flags.enable_verbose"; public static final String YBC_PACKAGE_REGEX = ".+ybc(.*).tar.gz"; public static final Pattern YBC_PACKAGE_PATTERN = Pattern.compile(YBC_PACKAGE_REGEX); public static final String SPECIAL_CHARACTERS = "[^a-zA-Z0-9_-]+"; @@ -977,11 +976,6 @@ private List getConfigureSubCommand(AnsibleConfigureServers.Params taskP ybcDir = "ybc" + matcher.group(1); ybcFlags = GFlagsUtil.getYbcFlags(universe, taskParam, confGetter, config, taskParam.ybcGflags); - boolean enableVerbose = - confGetter.getConfForScope(universe, UniverseConfKeys.ybcEnableVervbose); - if (enableVerbose) { - ybcFlags.put("v", "1"); - } String nfsDirs = confGetter.getConfForScope(universe, UniverseConfKeys.nfsDirs); ybcFlags.put("nfs_dirs", nfsDirs); } diff --git a/managed/src/main/java/com/yugabyte/yw/common/ShellKubernetesManager.java b/managed/src/main/java/com/yugabyte/yw/common/ShellKubernetesManager.java index 4fb62df4c5d1..34a4fa462775 100644 --- a/managed/src/main/java/com/yugabyte/yw/common/ShellKubernetesManager.java +++ b/managed/src/main/java/com/yugabyte/yw/common/ShellKubernetesManager.java @@ -42,9 +42,11 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.UUID; import java.util.stream.Collectors; +import javax.annotation.Nullable; import javax.inject.Singleton; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; @@ -227,35 +229,43 @@ public String getCloudProvider(Map config) { } @Override - public String getPreferredServiceIP( + public Set getPreferredServiceIP( Map config, String universePrefix, String namespace, boolean isMaster, - boolean newNamingStyle) { - String appLabel = newNamingStyle ? "app.kubernetes.io/name" : "app"; + boolean k8sNewLabels, + String universeName) { + String appLabel = k8sNewLabels ? "app.kubernetes.io/name" : "app"; String appName = isMaster ? "yb-master" : "yb-tserver"; + String universeIdentifier; + if (k8sNewLabels) { + universeIdentifier = String.format("app.kubernetes.io/part-of=%s", universeName); + } else { + universeIdentifier = String.format("release=%s", universePrefix); + } // We don't use service-type=endpoint selector for backwards // compatibility with old charts which don't have service-type // label on endpoint/exposed services. String selector = String.format( - "release=%s,%s=%s,service-type notin (headless, non-endpoint)", - universePrefix, appLabel, appName); + "%s,%s=%s,service-type notin (headless, non-endpoint)", + universeIdentifier, appLabel, appName); List commandList = ImmutableList.of( "kubectl", "get", "svc", "--namespace", namespace, "-l", selector, "-o", "json"); ShellResponse response = execCommand(config, commandList).processErrors(); List services = deserialize(response.message, ServiceList.class).getItems(); - // TODO: PLAT-5625: This might need a change when we have one - // common TServer/Master endpoint service across multiple Helm - // releases. Currently we call getPreferredServiceIP for each AZ - // deployment/Helm release, and return all the IPs. - if (services.size() != 1) { + + if (services.size() > 0) { + return services.stream() + .map(service -> getIp(service)) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + } else { throw new RuntimeException( - "There must be exactly one Master or TServer endpoint service, got " + services.size()); + "There must be atleast one Master or TServer endpoint service, got 0"); } - return getIp(services.get(0)); } @Override @@ -1141,4 +1151,90 @@ public Map getServerTypeGflagsChecksumMap( } return serverTypeGflagsChecksumMap; } + + @Override + public List getNamespacedServices( + Map config, String namespace, String universeName) { + String appLabel = "app.kubernetes.io/part-of"; + String serviceTypeLabelSelector = "service-type=endpoint"; + String sanitizedUniverseName = Util.sanitizeKubernetesNamespace(universeName, 0); + String labelSelector = + String.format("%s=%s,%s", appLabel, sanitizedUniverseName, serviceTypeLabelSelector); + List masterCommandList = + ImmutableList.of( + "kubectl", "--namespace", namespace, "get", "svc", "-l", labelSelector, "-o", "json"); + ShellResponse response = + execCommand(config, masterCommandList) + .processErrors("Unable to retrieve namespaced service"); + List namespacedServices = + deserialize(response.getMessage(), ServiceList.class).getItems(); + if (CollectionUtils.isNotEmpty(namespacedServices)) { + return namespacedServices.stream() + .filter( + gS -> + gS.getMetadata() + .getAnnotations() + .getOrDefault("helm.sh/resource-policy", "delete") + .equals("keep")) + .toList(); + } + return null; + } + + @Override + public void deleteNamespacedService( + Map config, String namespace, String universeName) { + deleteNamespacedService(config, namespace, universeName, null /* serviceName */); + } + + @Override + public void deleteNamespacedService( + Map config, + String namespace, + String universeName, + @Nullable Set serviceNames) { + String appLabel = "app.kubernetes.io/part-of"; + String serviceTypeLabelSelector = "service-type=endpoint"; + String serviceScope = "scope=Namespaced"; + String sanitizedUniverseName = Util.sanitizeKubernetesNamespace(universeName, 0); + String labelSelector = + String.format( + "%s=%s,%s,%s", appLabel, sanitizedUniverseName, serviceTypeLabelSelector, serviceScope); + // Add service name for specific service to be deleted + if (CollectionUtils.isNotEmpty(serviceNames)) { + String commaSeparatedServiceNames = StringUtils.join(serviceNames, ","); + String serviceNamelabel = String.format("serviceName in (%s)", commaSeparatedServiceNames); + labelSelector = String.format("%s,%s", labelSelector, serviceNamelabel); + } + List masterCommandList = + ImmutableList.of("kubectl", "--namespace", namespace, "delete", "svc", "-l", labelSelector); + execCommand(config, masterCommandList).processErrors("Unable to delete namespaced service"); + } + + @Override + public void updateNamespacedServiceOwnership( + Map config, String namespace, String universeName, String ownerReleaseName) { + String appLabel = "app.kubernetes.io/part-of"; + String serviceTypeLabelSelector = "service-type=endpoint"; + String serviceScope = "scope=Namespaced"; + String sanitizedUniverseName = Util.sanitizeKubernetesNamespace(universeName, 0); + String labelSelector = + String.format( + "%s=%s,%s,%s", appLabel, sanitizedUniverseName, serviceTypeLabelSelector, serviceScope); + String ownerReleaseAnnotation = + String.format("%s=%s", "meta.helm.sh/release-name", ownerReleaseName); + List masterCommandList = + ImmutableList.of( + "kubectl", + "--namespace", + namespace, + "annotate", + "svc", + "-l", + labelSelector, + ownerReleaseAnnotation, + "--overwrite"); + execCommand(config, masterCommandList) + .processErrors("Unable to update namespaced service ownership"); + } } diff --git a/managed/src/main/java/com/yugabyte/yw/common/UnrecoverableException.java b/managed/src/main/java/com/yugabyte/yw/common/UnrecoverableException.java new file mode 100644 index 000000000000..94a59666be80 --- /dev/null +++ b/managed/src/main/java/com/yugabyte/yw/common/UnrecoverableException.java @@ -0,0 +1,17 @@ +/* + * Copyright 2024 YugaByte, Inc. and Contributors + * + * Licensed under the Polyform Free Trial License 1.0.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://github.com/YugaByte/yugabyte-db/blob/master/licenses/POLYFORM-FREE-TRIAL-LICENSE-1.0.0.txt + */ + +package com.yugabyte.yw.common; + +public class UnrecoverableException extends RuntimeException { + public UnrecoverableException(String msg) { + super(msg); + } +} diff --git a/managed/src/main/java/com/yugabyte/yw/common/config/GlobalConfKeys.java b/managed/src/main/java/com/yugabyte/yw/common/config/GlobalConfKeys.java index f71414081077..8ce362bb5add 100644 --- a/managed/src/main/java/com/yugabyte/yw/common/config/GlobalConfKeys.java +++ b/managed/src/main/java/com/yugabyte/yw/common/config/GlobalConfKeys.java @@ -1483,4 +1483,14 @@ public class GlobalConfKeys extends RuntimeConfigKeysModule { + " will be evaluated and returned", ConfDataType.IntegerType, ImmutableList.of(ConfKeyTags.INTERNAL)); + public static final ConfKeyInfo k8sUniverseDefaultServiceScope = + new ConfKeyInfo<>( + "yb.universe.default_service_scope_for_k8s", + ScopeType.GLOBAL, + "Default service scope for K8s universe", + "The default service scope for K8s service endpoints. Can be AZ/Namespaced. 'AZ' will" + + " create a service in each Availability zone, whereas 'Namespaced' will create one" + + " service per Namespace", + ConfDataType.StringType, + ImmutableList.of(ConfKeyTags.BETA)); } diff --git a/managed/src/main/java/com/yugabyte/yw/common/config/UniverseConfKeys.java b/managed/src/main/java/com/yugabyte/yw/common/config/UniverseConfKeys.java index bbac1543596b..97806a8496df 100644 --- a/managed/src/main/java/com/yugabyte/yw/common/config/UniverseConfKeys.java +++ b/managed/src/main/java/com/yugabyte/yw/common/config/UniverseConfKeys.java @@ -291,14 +291,6 @@ public class UniverseConfKeys extends RuntimeConfigKeysModule { "Authorised NFS directories for backups", ConfDataType.StringType, ImmutableList.of(ConfKeyTags.PUBLIC)); - public static final ConfKeyInfo ybcEnableVervbose = - new ConfKeyInfo<>( - "yb.ybc_flags.enable_verbose", - ScopeType.UNIVERSE, - "Enable Verbose Logging", - "Enable verbose ybc logging", - ConfDataType.BooleanType, - ImmutableList.of(ConfKeyTags.PUBLIC)); public static final ConfKeyInfo maxThreads = new ConfKeyInfo<>( "yb.perf_advisor.max_threads", @@ -915,6 +907,24 @@ public class UniverseConfKeys extends RuntimeConfigKeysModule { + " PITR config creation in each iteration", ConfDataType.DurationType, ImmutableList.of(ConfKeyTags.PUBLIC)); + public static final ConfKeyInfo pitrRestorePollDelay = + new ConfKeyInfo<>( + "yb.pitr.restore_poll_delay", + ScopeType.UNIVERSE, + "The delay before the next poll of the PITR config restore status", + "It is the delay after which the restore PITR config subtask rechecks the status of the" + + " restore operation", + ConfDataType.DurationType, + ImmutableList.of(ConfKeyTags.PUBLIC)); + public static final ConfKeyInfo pitrRestoreTimeout = + new ConfKeyInfo<>( + "yb.pitr.restore_timeout", + ScopeType.UNIVERSE, + "The timeout for restoring a universe using a PITR config", + "It is the maximum time that the restore PITR config subtask waits for the restore" + + " operation using PITR to be completed; otherwise, it will fail the operation", + ConfDataType.DurationType, + ImmutableList.of(ConfKeyTags.PUBLIC)); public static final ConfKeyInfo pitrCreateTimeout = new ConfKeyInfo<>( "yb.pitr.create_timeout", @@ -1083,10 +1093,21 @@ public class UniverseConfKeys extends RuntimeConfigKeysModule { new ConfKeyInfo<>( "yb.xcluster.operation_timeout", ScopeType.UNIVERSE, - "Wait time for xcluster/DR replication setup and edit RPCs.", + "Wait time for xcluster/DR replication setup and edit RPCs", "Wait time for xcluster/DR replication setup and edit RPCs.", ConfDataType.DurationType, ImmutableList.of(ConfKeyTags.PUBLIC)); + public static final ConfKeyInfo xclusterBootstrapProducerTimeout = + new ConfKeyInfo<>( + "yb.xcluster.bootstrap_producer_timeout", + ScopeType.UNIVERSE, + "Maximum timeout for xCluster bootstrap producer RPC call", + "If the RPC call to create the bootstrap streams on the source universe does not return" + + " before this timeout, the task will retry with exponential backoff until it" + + " fails.", + ConfDataType.DurationType, + ImmutableList.of(ConfKeyTags.PUBLIC)); + public static final ConfKeyInfo leaderlessTabletsCheckEnabled = new ConfKeyInfo<>( "yb.checks.leaderless_tablets.enabled", diff --git a/managed/src/main/java/com/yugabyte/yw/common/gflags/GFlagsUtil.java b/managed/src/main/java/com/yugabyte/yw/common/gflags/GFlagsUtil.java index d5dca1fad3b7..5542de696430 100644 --- a/managed/src/main/java/com/yugabyte/yw/common/gflags/GFlagsUtil.java +++ b/managed/src/main/java/com/yugabyte/yw/common/gflags/GFlagsUtil.java @@ -449,7 +449,7 @@ public static Map getYbcFlags( UserIntent userIntent = universeDetails.getClusterByUuid(node.placementUuid).userIntent; String providerUUID = userIntent.provider; Map ybcFlags = new TreeMap<>(); - ybcFlags.put("v", Integer.toString(1)); + ybcFlags.put("v", "1"); ybcFlags.put("server_address", serverAddresses); ybcFlags.put( "server_port", @@ -505,11 +505,6 @@ public static Map getYbcFlags( String certsNodeDir = CertificateHelper.getCertsNodeDir(ybHomeDir); ybcFlags.put("certs_dir_name", certsNodeDir); } - boolean enableVerbose = - confGetter.getConfForScope(universe, UniverseConfKeys.ybcEnableVervbose); - if (enableVerbose) { - ybcFlags.put("v", "1"); - } String nfsDirs = confGetter.getConfForScope(universe, UniverseConfKeys.nfsDirs); ybcFlags.put("nfs_dirs", nfsDirs); ybcFlags.putAll(customYbcGflags); @@ -540,7 +535,7 @@ public static Map getYbcFlagsForK8s( ? (userIntent.enableIPV6 ? "[::]" : "0.0.0.0") : node.cloudInfo.private_ip; Map ybcFlags = new TreeMap<>(); - ybcFlags.put("v", Integer.toString(1)); + ybcFlags.put("v", "1"); ybcFlags.put("hardware_concurrency", Integer.toString(hardwareConcurrency)); ybcFlags.put("server_address", serverAddress); ybcFlags.put("server_port", Integer.toString(node.ybControllerRpcPort)); diff --git a/managed/src/main/java/com/yugabyte/yw/common/gflags/GFlagsValidation.java b/managed/src/main/java/com/yugabyte/yw/common/gflags/GFlagsValidation.java index 949382b2529e..5c1623e4ad8e 100644 --- a/managed/src/main/java/com/yugabyte/yw/common/gflags/GFlagsValidation.java +++ b/managed/src/main/java/com/yugabyte/yw/common/gflags/GFlagsValidation.java @@ -24,11 +24,13 @@ import com.yugabyte.yw.common.utils.FileUtils; import com.yugabyte.yw.models.helpers.CommonUtils; import java.io.BufferedInputStream; +import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; +import java.io.InputStreamReader; import java.io.OutputStream; import java.nio.file.Files; import java.nio.file.Paths; @@ -41,6 +43,8 @@ import java.util.Map; import java.util.Optional; import java.util.Set; +import java.util.SortedSet; +import java.util.TreeSet; import java.util.function.Function; import java.util.stream.Collectors; import javax.inject.Singleton; @@ -174,15 +178,33 @@ public Optional getGFlagDetails(String version, String serverType, public List extractGFlagGroups(String version) throws IOException { InputStream flagStream = null; try { - String majorVersion = version.substring(0, StringUtils.ordinalIndexOf(version, ".", 2)); + SortedSet avaliableVersions = new TreeSet<>(); + InputStream foldersStream = environment.resourceAsStream("gflag_groups"); + try (BufferedReader in = new BufferedReader(new InputStreamReader(foldersStream))) { + String inputLine; + while ((inputLine = in.readLine()) != null) { + avaliableVersions.add(inputLine); + } + } + SortedSet head = avaliableVersions.headSet(version); + if (head.isEmpty()) { + throw new PlatformServiceException( + INTERNAL_SERVER_ERROR, "Failed to find gflags group version for " + version + " db"); + } + String versionToUse = head.last(); + LOG.debug( + "Found {} group versions, picked {} for current db version {}", + avaliableVersions, + versionToUse, + version); flagStream = environment.resourceAsStream( - "gflag_groups/" + majorVersion + "/" + Util.GFLAG_GROUPS_FILENAME); + "gflag_groups/" + versionToUse + "/" + Util.GFLAG_GROUPS_FILENAME); if (flagStream == null) { - LOG.error("GFlag groups metadata file for " + majorVersion + " is not present"); + LOG.error("GFlag groups metadata file for " + versionToUse + " is not present"); throw new PlatformServiceException( INTERNAL_SERVER_ERROR, - "GFlag groups metadata file for " + majorVersion + " is not present"); + "GFlag groups metadata file for " + versionToUse + " is not present"); } ObjectMapper mapper = new ObjectMapper(); List data = diff --git a/managed/src/main/java/com/yugabyte/yw/controllers/CertificateController.java b/managed/src/main/java/com/yugabyte/yw/controllers/CertificateController.java index b757c0e03996..9af33356ad45 100644 --- a/managed/src/main/java/com/yugabyte/yw/controllers/CertificateController.java +++ b/managed/src/main/java/com/yugabyte/yw/controllers/CertificateController.java @@ -375,6 +375,13 @@ public Result delete(UUID customerUUID, UUID reqCertUUID, Http.Request request) value = "Edit TLS certificate config details", response = YBPSuccess.class, nickname = "editCertificate") + @ApiImplicitParams( + @ApiImplicitParam( + name = "certificate", + value = "certificate params to edit", + paramType = "body", + dataType = "com.yugabyte.yw.forms.CertificateParams", + required = true)) @AuthzPath({ @RequiredPermissionOnResource( requiredPermission = diff --git a/managed/src/main/java/com/yugabyte/yw/controllers/DrConfigController.java b/managed/src/main/java/com/yugabyte/yw/controllers/DrConfigController.java index 64f192b1f908..7bf7c5ec89c7 100644 --- a/managed/src/main/java/com/yugabyte/yw/controllers/DrConfigController.java +++ b/managed/src/main/java/com/yugabyte/yw/controllers/DrConfigController.java @@ -7,7 +7,6 @@ import com.yugabyte.yw.commissioner.Commissioner; import com.yugabyte.yw.commissioner.XClusterScheduler; import com.yugabyte.yw.commissioner.tasks.XClusterConfigTaskBase; -import com.yugabyte.yw.common.DrConfigStates.State; import com.yugabyte.yw.common.PlatformServiceException; import com.yugabyte.yw.common.Util; import com.yugabyte.yw.common.XClusterUniverseService; @@ -37,6 +36,7 @@ import com.yugabyte.yw.forms.PlatformResults; import com.yugabyte.yw.forms.PlatformResults.YBPSuccess; import com.yugabyte.yw.forms.PlatformResults.YBPTask; +import com.yugabyte.yw.forms.TableInfoForm.TableInfoResp; import com.yugabyte.yw.forms.XClusterConfigCreateFormData.BootstrapParams; import com.yugabyte.yw.forms.XClusterConfigEditFormData; import com.yugabyte.yw.forms.XClusterConfigRestartFormData; @@ -76,6 +76,7 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Objects; +import java.util.Optional; import java.util.Set; import java.util.UUID; import java.util.stream.Collectors; @@ -363,7 +364,6 @@ public Result edit(UUID customerUUID, UUID drConfigUuid, Http.Request request) { // Parse and validate request. Customer customer = Customer.getOrBadRequest(customerUUID); DrConfig drConfig = DrConfig.getValidConfigOrBadRequest(customer, drConfigUuid); - disallowActionOnErrorState(drConfig); DrConfigEditForm editForm = parseEditForm(request); validateEditForm(editForm, customer.getUuid(), drConfig); @@ -437,7 +437,7 @@ public Result setTables(UUID customerUUID, UUID drConfigUuid, Http.Request reque // Parse and validate request. Customer customer = Customer.getOrBadRequest(customerUUID); DrConfig drConfig = DrConfig.getValidConfigOrBadRequest(customer, drConfigUuid); - disallowActionOnErrorState(drConfig); + verifyTaskAllowed(drConfig, TaskType.SetTablesDrConfig); XClusterConfig xClusterConfig = drConfig.getActiveXClusterConfig(); DrConfigSetTablesForm setTablesForm = parseSetTablesForm(customerUUID, request); if (setTablesForm.bootstrapParams == null) { @@ -536,10 +536,12 @@ public Result restart( UUID customerUUID, UUID drConfigUuid, boolean isForceDelete, Http.Request request) { log.info("Received restart drConfig request"); + // Todo: restart does not trigger bootstrapping. It does not remove extra xCluster configs. + // Parse and validate request. Customer customer = Customer.getOrBadRequest(customerUUID); DrConfig drConfig = DrConfig.getValidConfigOrBadRequest(customer, drConfigUuid); - disallowActionOnErrorState(drConfig); + verifyTaskAllowed(drConfig, TaskType.RestartDrConfig); XClusterConfig xClusterConfig = drConfig.getActiveXClusterConfig(); DrConfigRestartForm restartForm = parseRestartForm(customerUUID, request); @@ -663,7 +665,7 @@ public Result replaceReplica(UUID customerUUID, UUID drConfigUuid, Http.Request // Parse and validate request. Customer customer = Customer.getOrBadRequest(customerUUID); DrConfig drConfig = DrConfig.getValidConfigOrBadRequest(customer, drConfigUuid); - disallowActionOnErrorState(drConfig); + verifyTaskAllowed(drConfig, TaskType.EditDrConfig); XClusterConfig xClusterConfig = drConfig.getActiveXClusterConfig(); Universe sourceUniverse = Universe.getOrBadRequest(xClusterConfig.getSourceUniverseUUID(), customer); @@ -841,8 +843,20 @@ public Result switchover(UUID customerUUID, UUID drConfigUuid, Http.Request requ Customer customer = Customer.getOrBadRequest(customerUUID); DrConfigSwitchoverForm switchoverForm = parseSwitchoverForm(request); DrConfig drConfig = DrConfig.getValidConfigOrBadRequest(customer, drConfigUuid); - disallowActionOnErrorState(drConfig); - XClusterConfig xClusterConfig = drConfig.getActiveXClusterConfig(); + verifyTaskAllowed(drConfig, TaskType.SwitchoverDrConfig); + Optional xClusterConfigOptional = + drConfig.getActiveXClusterConfig( + switchoverForm.drReplicaUniverseUuid, switchoverForm.primaryUniverseUuid); + if (xClusterConfigOptional.isEmpty()) { + throw new PlatformServiceException( + BAD_REQUEST, + String.format( + "The underlying xCluster config with source universe %s and target universe %s does" + + " not exist; possibly due to a previous switchover operation that has failed;" + + " you may retry that failed operation, or roll back.", + switchoverForm.drReplicaUniverseUuid, switchoverForm.primaryUniverseUuid)); + } + XClusterConfig xClusterConfig = xClusterConfigOptional.get(); Universe sourceUniverse = Universe.getOrBadRequest(xClusterConfig.getSourceUniverseUUID(), customer); Universe targetUniverse = @@ -909,6 +923,8 @@ public Result switchover(UUID customerUUID, UUID drConfigUuid, Http.Request requ xClusterConfig.getTargetUniverseUUID(), xClusterConfig.getSourceUniverseUUID(), xClusterConfig.getType()); + switchoverXClusterConfig.setSecondary(true); + switchoverXClusterConfig.update(); // Todo: PLAT-10130, handle cases where the planned failover task fails. DrConfigTaskParams taskParams; @@ -992,11 +1008,9 @@ public Result switchover(UUID customerUUID, UUID drConfigUuid, Http.Request requ Collections.emptyMap()); } - switchoverXClusterConfig.setSecondary(true); switchoverXClusterConfig.update(); // Submit task to set up xCluster config. - UUID taskUUID = commissioner.submit(TaskType.SwitchoverDrConfig, taskParams); CustomerTask.create( customer, @@ -1066,17 +1080,33 @@ public Result failover(UUID customerUUID, UUID drConfigUuid, Http.Request reques Customer customer = Customer.getOrBadRequest(customerUUID); DrConfigFailoverForm failoverForm = parseFailoverForm(request); DrConfig drConfig = DrConfig.getValidConfigOrBadRequest(customer, drConfigUuid); - disallowActionOnErrorState(drConfig); - XClusterConfig xClusterConfig = drConfig.getActiveXClusterConfig(); + verifyTaskAllowed(drConfig, TaskType.FailoverDrConfig); + Optional xClusterConfigOptional = + drConfig.getActiveXClusterConfig( + failoverForm.drReplicaUniverseUuid, failoverForm.primaryUniverseUuid); + if (xClusterConfigOptional.isEmpty()) { + throw new PlatformServiceException( + BAD_REQUEST, + String.format( + "The underlying xCluster config with source universe %s and target universe %s does" + + " not exist; possibly due to a previous failover operation that has failed; you" + + " may retry that failed operation.", + failoverForm.drReplicaUniverseUuid, failoverForm.primaryUniverseUuid)); + } + XClusterConfig xClusterConfig = xClusterConfigOptional.get(); + // The following will be the new dr universe. Universe sourceUniverse = Universe.getOrBadRequest(xClusterConfig.getSourceUniverseUUID(), customer); + // The following will be the new primary universe. Universe targetUniverse = Universe.getOrBadRequest(xClusterConfig.getTargetUniverseUUID(), customer); + // Todo: Add pre-checks for user's input safetime. Get the safetime here, and make sure the + // user's requested safetime is before/equal to that. + DrConfigTaskParams taskParams; Set namespaceIdsWithSafetime = failoverForm.namespaceIdSafetimeEpochUsMap.keySet(); Set namespaceIdsWithoutSafetime; - // Todo: Add pre-checks for user's input safetime. XClusterConfig failoverXClusterConfig = drConfig.addXClusterConfig( xClusterConfig.getTargetUniverseUUID(), @@ -1097,36 +1127,15 @@ public Result failover(UUID customerUUID, UUID drConfigUuid, Http.Request reques xClusterUniverseService.getSourceTableIdTargetTableIdMap( targetUniverse, xClusterConfig.getReplicationGroupName()); - // All tables must have corresponding tables on the target universe. - Set sourceTableIdsWithNoTableOnTargetUniverse = - sourceTableIdTargetTableIdMap.entrySet().stream() - .filter(entry -> Objects.isNull(entry.getValue())) - .map(Entry::getKey) - .collect(Collectors.toSet()); - if (!sourceTableIdsWithNoTableOnTargetUniverse.isEmpty()) { - throw new PlatformServiceException( - BAD_REQUEST, - String.format( - "The following tables are in replication with no corresponding table on the" - + " target universe: %s. This can happen if the table is dropped without" - + " being removed from replication first. You may fix this issue by running" - + " `Reconcile config with DB` from UI", - sourceTableIdsWithNoTableOnTargetUniverse)); - } - // Use table IDs on the target universe for failover xCluster. Set tableIds = new HashSet<>(sourceTableIdTargetTableIdMap.values()); List requestedTableInfoList = XClusterConfigTaskBase.filterTableInfoListByTableIds(targetTableInfoList, tableIds); - drSwitchoverFailoverPreChecks( - ybService, - CustomerTask.TaskType.Failover, - requestedTableInfoList, - targetTableInfoList, - targetUniverse, - sourceTableInfoList, - sourceUniverse); + // Todo: Add the following prechecks: + // 1. XCluster controlller create and add table: if a table is part of a DR config, it + // cannot be part of an xCluster config. + // 2. Run certsForCdcDirGFlagCheck when creating the DR config on both directions. Map> mainTableIndexTablesMap = XClusterConfigTaskBase.getMainTableIndexTablesMap(ybService, targetUniverse, tableIds); @@ -1310,6 +1319,7 @@ public Result sync(UUID customerUUID, UUID drConfigUuid, Http.Request request) { // Parse and validate request. Customer customer = Customer.getOrBadRequest(customerUUID); DrConfig drConfig = DrConfig.getValidConfigOrBadRequest(customer, drConfigUuid); + verifyTaskAllowed(drConfig, TaskType.SyncDrConfig); XClusterConfig xClusterConfig = drConfig.getActiveXClusterConfig(); XClusterConfigSyncFormData formData = new XClusterConfigSyncFormData(); @@ -1377,6 +1387,7 @@ public Result delete( // Parse and validate request. Customer customer = Customer.getOrBadRequest(customerUUID); DrConfig drConfig = DrConfig.getValidConfigOrBadRequest(customer, drConfigUuid); + verifyTaskAllowed(drConfig, TaskType.DeleteDrConfig); XClusterConfig xClusterConfig = drConfig.getActiveXClusterConfig(); XClusterConfigController.verifyTaskAllowed(xClusterConfig, TaskType.DeleteXClusterConfig); Universe sourceUniverse = null; @@ -1428,6 +1439,7 @@ private Result toggleDrState( // Parse and validate request. Customer customer = Customer.getOrBadRequest(customerUUID); DrConfig drConfig = DrConfig.getValidConfigOrBadRequest(customer, drConfigUUID); + verifyTaskAllowed(drConfig, TaskType.EditXClusterConfig); XClusterConfigEditFormData editFormData = new XClusterConfigEditFormData(); editFormData.status = taskType == CustomerTask.TaskType.Resume ? "Running" : "Paused"; XClusterConfig xClusterConfig = drConfig.getActiveXClusterConfig(); @@ -1609,7 +1621,7 @@ public Result setDatabases(UUID customerUUID, UUID drConfigUuid, Http.Request re // Parse and validate request. Customer customer = Customer.getOrBadRequest(customerUUID); DrConfig drConfig = DrConfig.getValidConfigOrBadRequest(customer, drConfigUuid); - disallowActionOnErrorState(drConfig); + verifyTaskAllowed(drConfig, TaskType.SetDatabasesDrConfig); XClusterConfig xClusterConfig = drConfig.getActiveXClusterConfig(); Universe sourceUniverse = Universe.getOrBadRequest(xClusterConfig.getSourceUniverseUUID(), customer); @@ -1924,15 +1936,6 @@ public static void drSwitchoverFailoverPreChecks( } } - private void disallowActionOnErrorState(DrConfig drConfig) { - if (drConfig.getState() == State.Error) { - throw new PlatformServiceException( - BAD_REQUEST, - String.format( - "DR config: %s is in error state and cannot run current action", drConfig.getName())); - } - } - private double getEstimatedDataLossMs( Universe targetUniverse, NamespaceSafeTimePB namespaceSafeTimePB) { // -1 means could not find it from Prometheus. @@ -2001,4 +2004,26 @@ private void validatePitrParams(DrConfigCreateForm.PitrParams pitrParams) { BAD_REQUEST, "pitr retentionPeriodSec must be greater than snapshotIntervalSec"); } } + + private List convertTableInfoListToTableInfoRespList( + Universe universe, + List requestedTableInfoList) { + return tableHandler.getTableInfoRespFromTableInfo( + universe, + requestedTableInfoList, + false /* includeParentTableInfo */, + false /* excludeColocatedTables */, + true /* includeColocatedParentTables */, + false /* xClusterSupportedOnly */); + } + + public static void verifyTaskAllowed(DrConfig drConfig, TaskType taskType) { + if (!XClusterConfigTaskBase.isTaskAllowed(drConfig, taskType)) { + throw new PlatformServiceException( + BAD_REQUEST, + String.format( + "%s task is not allowed; with state `%s`, the allowed tasks are %s", + taskType, drConfig.getState(), XClusterConfigTaskBase.getAllowedTasks(drConfig))); + } + } } diff --git a/managed/src/main/java/com/yugabyte/yw/controllers/handlers/UniverseCRUDHandler.java b/managed/src/main/java/com/yugabyte/yw/controllers/handlers/UniverseCRUDHandler.java index b7a6c4bf9e0c..fa970e421141 100644 --- a/managed/src/main/java/com/yugabyte/yw/controllers/handlers/UniverseCRUDHandler.java +++ b/managed/src/main/java/com/yugabyte/yw/controllers/handlers/UniverseCRUDHandler.java @@ -35,6 +35,7 @@ import com.yugabyte.yw.common.AppConfigHelper; import com.yugabyte.yw.common.ImageBundleUtil; import com.yugabyte.yw.common.KubernetesManagerFactory; +import com.yugabyte.yw.common.KubernetesUtil; import com.yugabyte.yw.common.PlacementInfoUtil; import com.yugabyte.yw.common.PlatformServiceException; import com.yugabyte.yw.common.ReleaseContainer; @@ -933,6 +934,20 @@ public UniverseResp createUniverse(Customer customer, UniverseDefinitionTaskPara universe.updateConfig( ImmutableMap.of(Universe.LABEL_K8S_RESOURCES, Boolean.toString(true))); checkHelmChartExists(primaryCluster.userIntent.ybSoftwareVersion); + String serviceScope = + confGetter.getGlobalConf(GlobalConfKeys.k8sUniverseDefaultServiceScope); + if (KubernetesUtil.shouldConfigureNamespacedService(taskParams, universe.getConfig())) { + if (serviceScope.equals("Namespaced")) { + // Default service scope should be 'Namespaced' + primaryIntent.defaultServiceScopeAZ = false; + } + // Validate service endpoints + try { + KubernetesUtil.validateServiceEndpoints(taskParams, universe.getConfig()); + } catch (IOException e) { + throw new RuntimeException("Failed to parse Kubernetes overrides!", e.getCause()); + } + } } else { if (primaryCluster.userIntent.enableIPV6) { throw new PlatformServiceException( @@ -1072,6 +1087,9 @@ public UUID update(Customer customer, Universe u, UniverseDefinitionTaskParams t } } + // Set helm naming style into params + taskParams.useNewHelmNamingStyle = u.getUniverseDetails().useNewHelmNamingStyle; + // Set existing LBs into taskParams taskParams.setExistingLBs(u.getUniverseDetails().clusters); @@ -1380,6 +1398,9 @@ public UUID createCluster( } } + // Set helm naming style into params + taskParams.useNewHelmNamingStyle = universe.getUniverseDetails().useNewHelmNamingStyle; + List newReadOnlyClusters = taskParams.getReadOnlyClusters(); List newAddOnClusters = taskParams.getAddOnClusters(); List existingReadOnlyClusters = universe.getUniverseDetails().getReadOnlyClusters(); diff --git a/managed/src/main/java/com/yugabyte/yw/forms/DrConfigTaskParams.java b/managed/src/main/java/com/yugabyte/yw/forms/DrConfigTaskParams.java index dad3fef67f87..a3f47d0e360c 100644 --- a/managed/src/main/java/com/yugabyte/yw/forms/DrConfigTaskParams.java +++ b/managed/src/main/java/com/yugabyte/yw/forms/DrConfigTaskParams.java @@ -1,5 +1,6 @@ package com.yugabyte.yw.forms; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.yugabyte.yw.forms.XClusterConfigCreateFormData.BootstrapParams; import com.yugabyte.yw.forms.XClusterConfigRestartFormData.RestartBootstrapParams; import com.yugabyte.yw.models.DrConfig; @@ -8,17 +9,18 @@ import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; import javax.annotation.Nullable; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; -import org.yb.master.MasterDdlOuterClass; import org.yb.master.MasterDdlOuterClass.ListTablesResponsePB.TableInfo; @NoArgsConstructor @Getter @Setter +@JsonDeserialize(converter = DrConfigTaskParams.Converter.class) public class DrConfigTaskParams extends XClusterConfigTaskParams { protected DrConfig drConfig; @@ -65,7 +67,7 @@ public DrConfigTaskParams( @Nullable XClusterConfig oldXClusterConfig, XClusterConfig newXClusterConfig, XClusterConfigCreateFormData.BootstrapParams bootstrapParams, - List tableInfoList, + List tableInfoList, Map> mainTableIndexTablesMap, Map sourceTableIdTargetTableIdMap) { super( @@ -84,7 +86,7 @@ public DrConfigTaskParams( @Nullable XClusterConfig oldXClusterConfig, XClusterConfig newXClusterConfig, @Nullable Map namespaceIdSafetimeEpochUsMap, - List tableInfoList, + List tableInfoList, Map> mainTableIndexTablesMap) { super( newXClusterConfig, @@ -106,7 +108,7 @@ public DrConfigTaskParams( super( newXClusterConfig, null /* bootstrapParams */, - Collections.emptyList(), /* tableInfoList */ + Collections.emptyList(), /* tableInfoRespList */ Collections.emptyMap(), /* mainTableIndexTablesMap */ Collections.emptyMap() /* sourceTableIdTargetTableIdMap */); this.drConfig = drConfig; @@ -127,4 +129,17 @@ public DrConfigTaskParams( } this.pitrParams = pitrParams; } + + @Override + public void refreshIfExists() { + super.refreshIfExists(); + if (Objects.nonNull(drConfig)) { + drConfig = DrConfig.maybeGet(drConfig.getUuid()).orElse(null); + } + if (Objects.nonNull(oldXClusterConfig)) { + oldXClusterConfig = XClusterConfig.maybeGet(oldXClusterConfig.getUuid()).orElse(null); + } + } + + public static class Converter extends BaseConverter {} } diff --git a/managed/src/main/java/com/yugabyte/yw/forms/KubernetesOverridesUpgradeParams.java b/managed/src/main/java/com/yugabyte/yw/forms/KubernetesOverridesUpgradeParams.java index 011ce1589377..b0c6a1d8d06a 100644 --- a/managed/src/main/java/com/yugabyte/yw/forms/KubernetesOverridesUpgradeParams.java +++ b/managed/src/main/java/com/yugabyte/yw/forms/KubernetesOverridesUpgradeParams.java @@ -6,9 +6,11 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.google.common.collect.Sets; import com.yugabyte.yw.commissioner.Common.CloudType; +import com.yugabyte.yw.common.KubernetesUtil; import com.yugabyte.yw.common.PlatformServiceException; import com.yugabyte.yw.common.helm.HelmUtils; import com.yugabyte.yw.models.Universe; +import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.Set; @@ -38,6 +40,14 @@ public void verifyParams(Universe universe, boolean isFirstTry) { "The universe type must be kubernetes to use k8s overrides upgrade API."); } + // Verify service endpoints + try { + KubernetesUtil.validateUpgradeServiceEndpoints( + universeOverrides, azOverrides, universe.getUniverseDetails(), universe.getConfig()); + } catch (IOException e) { + throw new RuntimeException("Error occured while parsing overrides", e.getCause()); + } + // Check if overrides changed. Map flatUniverseOverrides = HelmUtils.flattenMap(HelmUtils.convertYamlToMap(universeOverrides)); diff --git a/managed/src/main/java/com/yugabyte/yw/forms/UniverseDefinitionTaskParams.java b/managed/src/main/java/com/yugabyte/yw/forms/UniverseDefinitionTaskParams.java index d596d86d942d..c720fd47e456 100644 --- a/managed/src/main/java/com/yugabyte/yw/forms/UniverseDefinitionTaskParams.java +++ b/managed/src/main/java/com/yugabyte/yw/forms/UniverseDefinitionTaskParams.java @@ -854,6 +854,12 @@ public K8SNodeResourceSpec clone() { @ApiModelProperty(notes = "default: NONE") public ExposingServiceState enableExposingService = ExposingServiceState.NONE; + @ApiModelProperty( + hidden = true, + value = "YbaApi Internal. Default service scope for Kubernetes universes") + @YbaApi(visibility = YbaApiVisibility.INTERNAL, sinceYBAVersion = "2.23.0.0") + public boolean defaultServiceScopeAZ = true; + @ApiModelProperty public String awsArnString; @ApiModelProperty() public boolean enableLB = false; diff --git a/managed/src/main/java/com/yugabyte/yw/forms/XClusterConfigTaskParams.java b/managed/src/main/java/com/yugabyte/yw/forms/XClusterConfigTaskParams.java index 50d257c86169..1d37142357b3 100644 --- a/managed/src/main/java/com/yugabyte/yw/forms/XClusterConfigTaskParams.java +++ b/managed/src/main/java/com/yugabyte/yw/forms/XClusterConfigTaskParams.java @@ -1,7 +1,11 @@ // Copyright (c) YugaByte, Inc. package com.yugabyte.yw.forms; +import com.fasterxml.jackson.annotation.JsonGetter; import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.google.protobuf.ByteString; import com.yugabyte.yw.commissioner.tasks.XClusterConfigTaskBase; import com.yugabyte.yw.common.config.RuntimeConfGetter; import com.yugabyte.yw.common.config.UniverseConfKeys; @@ -9,6 +13,8 @@ import com.yugabyte.yw.models.DrConfig; import com.yugabyte.yw.models.Universe; import com.yugabyte.yw.models.XClusterConfig; +import java.util.ArrayList; +import java.util.Base64; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -19,23 +25,25 @@ import javax.annotation.Nullable; import lombok.Getter; import lombok.NoArgsConstructor; -import org.yb.master.MasterDdlOuterClass; +import lombok.Setter; +import org.yb.master.MasterDdlOuterClass.ListTablesResponsePB.TableInfo; @NoArgsConstructor @Getter +@JsonDeserialize(converter = XClusterConfigTaskParams.Converter.class) public class XClusterConfigTaskParams extends UniverseDefinitionTaskParams { public XClusterConfig xClusterConfig; - @JsonIgnore protected List tableInfoList; + @JsonIgnore protected List tableInfoList; protected Set sourceTableIdsWithNoTableOnTargetUniverse; protected Map> mainTableIndexTablesMap; - protected XClusterConfigCreateFormData.BootstrapParams bootstrapParams; + @Setter protected XClusterConfigCreateFormData.BootstrapParams bootstrapParams; protected XClusterConfigEditFormData editFormData; protected XClusterConfigSyncFormData syncFormData; protected Set tableIdsToAdd; protected Set tableIdsToRemove; protected boolean isForced = false; - protected DrConfigCreateForm.PitrParams pitrParams; + @Setter protected DrConfigCreateForm.PitrParams pitrParams; protected boolean isForceBootstrap = false; public Set dbs; protected Set databaseIdsToAdd; @@ -44,7 +52,7 @@ public class XClusterConfigTaskParams extends UniverseDefinitionTaskParams { public XClusterConfigTaskParams( XClusterConfig xClusterConfig, XClusterConfigCreateFormData.BootstrapParams bootstrapParams, - List tableInfoList, + List tableInfoList, Map> mainTableIndexTablesMap, Map sourceTableIdTargetTableIdMap, @Nullable DrConfigCreateForm.PitrParams pitrParams) { @@ -68,7 +76,7 @@ public XClusterConfigTaskParams( public XClusterConfigTaskParams( XClusterConfig xClusterConfig, XClusterConfigCreateFormData.BootstrapParams bootstrapParams, - List tableInfoList, + List tableInfoList, Map> mainTableIndexTablesMap, Map sourceTableIdTargetTableIdMap) { this( @@ -116,7 +124,7 @@ public XClusterConfigTaskParams( public XClusterConfigTaskParams( XClusterConfig xClusterConfig, XClusterConfigEditFormData editFormData, - List tableInfoList, + List tableInfoList, Map> mainTableIndexTablesMap, Set tableIdsToAdd, Map sourceTableIdTargetTableIdMap, @@ -158,7 +166,7 @@ public XClusterConfigTaskParams( public XClusterConfigTaskParams( XClusterConfig xClusterConfig, XClusterConfigCreateFormData.BootstrapParams bootstrapParams, - List tableInfoList, + List tableInfoList, Map> mainTableIndexTablesMap, Map sourceTableIdTargetTableIdMap, boolean isForced, @@ -251,11 +259,45 @@ public XClusterConfigTaskParams(DrConfigEditForm drConfigEditForm) { } } - public void setPitrParams(DrConfigCreateForm.PitrParams pitrParams) { - this.pitrParams = pitrParams; + public void refreshIfExists() { + // The entities that have non-serializable fields should be refreshed after deserialization that + // happens during task retry. + if (Objects.nonNull(xClusterConfig)) { + xClusterConfig = XClusterConfig.maybeGet(xClusterConfig.getUuid()).orElse(null); + } } - public void setBootstrapParams(XClusterConfigCreateFormData.BootstrapParams bootstrapParams) { - this.bootstrapParams = bootstrapParams; + @JsonGetter + private List getTableInfoAsBytesList() { + if (tableInfoList == null) { + return null; + } + List tableInfoAsBytesList = new ArrayList<>(); + tableInfoList.forEach( + tableInfo -> { + ByteString byteString = ByteString.copyFrom(tableInfo.toByteArray()); + tableInfoAsBytesList.add(Base64.getEncoder().encodeToString(byteString.toByteArray())); + }); + return tableInfoAsBytesList; } + + @JsonSetter + private void setTableInfoAsBytesList(List tableInfoAsBytesList) { + if (tableInfoAsBytesList == null) { + tableInfoList = null; + return; + } + tableInfoList = new ArrayList<>(); + tableInfoAsBytesList.forEach( + encodedString -> { + try { + byte[] bytes = Base64.getDecoder().decode(encodedString); + tableInfoList.add(TableInfo.parseFrom(bytes)); + } catch (Exception e) { + throw new RuntimeException(e); + } + }); + } + + public static class Converter extends BaseConverter {} } diff --git a/managed/src/main/java/com/yugabyte/yw/models/DrConfig.java b/managed/src/main/java/com/yugabyte/yw/models/DrConfig.java index cc80e8278d5e..174684a2185f 100644 --- a/managed/src/main/java/com/yugabyte/yw/models/DrConfig.java +++ b/managed/src/main/java/com/yugabyte/yw/models/DrConfig.java @@ -172,14 +172,42 @@ public XClusterConfig getActiveXClusterConfig() { "DrConfig %s(%s) does not have any corresponding xCluster config", this.name, this.uuid)); } - // For now just return the first element. For later expansion, a dr config can handle several - // xCluster configs. + if (xClusterConfigs.size() == 1) { + return xClusterConfigs.get(0); + } return xClusterConfigs.stream() .filter(xClusterConfig -> !xClusterConfig.isSecondary()) .findFirst() .orElseThrow(() -> new IllegalStateException("No active xCluster config found")); } + @JsonIgnore + public Optional getActiveXClusterConfig( + UUID sourceUniverseUuid, UUID targetUniverseUuid) { + if (xClusterConfigs.size() == 1) { + return Optional.of(xClusterConfigs.get(0)); + } + // For a DR config, there could be at most one xCluster config from universe A to universe B. + List xClusterConfigsFromSourceToTarget = + xClusterConfigs.stream() + .filter( + xClusterConfig -> + xClusterConfig.getSourceUniverseUUID().equals(sourceUniverseUuid) + && xClusterConfig.getTargetUniverseUUID().equals(targetUniverseUuid)) + .toList(); + if (xClusterConfigsFromSourceToTarget.size() > 1) { + throw new IllegalStateException( + String.format( + "DrConfig %s(%s) has more than one xCluster config from source universe %s to target" + + " universe %s", + this.name, this.uuid, sourceUniverseUuid, targetUniverseUuid)); + } + if (xClusterConfigsFromSourceToTarget.isEmpty()) { + return Optional.empty(); + } + return Optional.of(xClusterConfigsFromSourceToTarget.get(0)); + } + @JsonIgnore public XClusterConfig getFailoverXClusterConfig() { return xClusterConfigs.stream().filter(XClusterConfig::isSecondary).findFirst().orElse(null); diff --git a/managed/src/main/java/com/yugabyte/yw/models/Restore.java b/managed/src/main/java/com/yugabyte/yw/models/Restore.java index d920c75eb1bb..123429cf22b2 100644 --- a/managed/src/main/java/com/yugabyte/yw/models/Restore.java +++ b/managed/src/main/java/com/yugabyte/yw/models/Restore.java @@ -277,6 +277,15 @@ public static Optional fetchRestore(UUID restoreUUID) { return Optional.of(restore); } + public static Optional maybeGet(UUID restoreUuid) { + Restore restore = find.byId(restoreUuid); + if (Objects.isNull(restore)) { + LOG.info("Cannot find Restore object with uuid {}", restoreUuid); + return Optional.empty(); + } + return Optional.of(restore); + } + public static RestoreResp toRestoreResp(Restore restore) { String targetUniverseName = BackupUtil.checkIfUniverseExists(restore.getUniverseUUID()) diff --git a/managed/src/main/java/com/yugabyte/yw/models/Schedule.java b/managed/src/main/java/com/yugabyte/yw/models/Schedule.java index a8c9bbcc5532..bfa926e5111d 100644 --- a/managed/src/main/java/com/yugabyte/yw/models/Schedule.java +++ b/managed/src/main/java/com/yugabyte/yw/models/Schedule.java @@ -411,12 +411,12 @@ public static Schedule updateNewBackupScheduleTimeAndStatusAndSave( ScheduleUpdater updater = s -> { if (newScheduleParams.schedulingFrequency > 0L) { - s.frequency = newScheduleParams.schedulingFrequency; - s.frequencyTimeUnit = newScheduleParams.frequencyTimeUnit; - s.cronExpression = null; + s.setFrequency(newScheduleParams.schedulingFrequency); + s.setFrequencyTimeUnit(newScheduleParams.frequencyTimeUnit); + s.setCronExpression(null /* cronExpression */); } else if (StringUtils.isNotBlank(newScheduleParams.cronExpression)) { - s.cronExpression = newScheduleParams.cronExpression; - s.frequency = 0L; + s.setCronExpression(newScheduleParams.cronExpression); + s.setFrequency(0L /* frequency */); } s.setTaskParams(Json.toJson(newScheduleParams)); s.updateNewBackupScheduleTimes(); diff --git a/managed/src/main/java/com/yugabyte/yw/models/XClusterConfig.java b/managed/src/main/java/com/yugabyte/yw/models/XClusterConfig.java index ec1dee59a97d..ee02dd37262f 100644 --- a/managed/src/main/java/com/yugabyte/yw/models/XClusterConfig.java +++ b/managed/src/main/java/com/yugabyte/yw/models/XClusterConfig.java @@ -6,6 +6,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.BiMap; import com.google.common.collect.ImmutableBiMap; @@ -133,7 +134,10 @@ public enum XClusterConfigStatusType { Updating("Updating"), DeletedUniverse("DeletedUniverse"), DeletionFailed("DeletionFailed"), - Failed("Failed"); + Failed("Failed"), + + // New states to handle retry-ability. + DrainedData("DrainedData"); private final String status; @@ -182,6 +186,7 @@ public String toString() { private Date modifyTime; @OneToMany(mappedBy = "config", cascade = CascadeType.ALL, orphanRemoval = true) + @JsonIgnore private Set tables = new HashSet<>(); @OneToMany(mappedBy = "config", cascade = CascadeType.ALL, orphanRemoval = true) @@ -293,8 +298,7 @@ public Optional maybeGetNamespaceById(String sourceName .filter( namespaceConfig -> namespaceConfig.getSourceNamespaceId().equals(sourceNamespaceId)) .findAny(); - - if (!optClusterNamespaceConfig.isPresent()) { + if (optClusterNamespaceConfig.isEmpty()) { log.info( "Cannot find an xClusterNamespaceConfig with sourceNamespaceId {}", sourceNamespaceId); } @@ -391,6 +395,11 @@ public Set getTableDetails() { .collect(Collectors.toCollection(LinkedHashSet::new)); } + @JsonSetter("tableDetails") + private void setTableDetails(Set tableDetails) { + this.tables = tableDetails; + } + @ApiModelProperty(value = "Namespaces participating in this xCluster config") @JsonProperty("namespaceDetails") public Set getNamespaceDetails() { diff --git a/managed/src/main/java/com/yugabyte/yw/models/XClusterNamespaceConfig.java b/managed/src/main/java/com/yugabyte/yw/models/XClusterNamespaceConfig.java index c8aca0c87c7a..9a885141e58c 100644 --- a/managed/src/main/java/com/yugabyte/yw/models/XClusterNamespaceConfig.java +++ b/managed/src/main/java/com/yugabyte/yw/models/XClusterNamespaceConfig.java @@ -19,12 +19,14 @@ import java.util.UUID; import lombok.EqualsAndHashCode; import lombok.Getter; +import lombok.NoArgsConstructor; import lombok.Setter; import lombok.extern.slf4j.Slf4j; @Slf4j @Entity @IdClass(XClusterNamespaceConfig.XClusterNamespaceConfigPK.class) +@NoArgsConstructor @Getter @Setter public class XClusterNamespaceConfig { diff --git a/managed/src/main/java/com/yugabyte/yw/models/XClusterTableConfig.java b/managed/src/main/java/com/yugabyte/yw/models/XClusterTableConfig.java index 862a956c135c..eeafb6ab2846 100644 --- a/managed/src/main/java/com/yugabyte/yw/models/XClusterTableConfig.java +++ b/managed/src/main/java/com/yugabyte/yw/models/XClusterTableConfig.java @@ -9,7 +9,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonGetter; import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; import com.fasterxml.jackson.annotation.JsonValue; import com.yugabyte.yw.forms.TableInfoForm.TableInfoResp; import com.yugabyte.yw.models.common.YbaApi; @@ -30,7 +30,6 @@ import java.util.Arrays; import java.util.Date; import java.util.HashSet; -import java.util.Optional; import java.util.Set; import java.util.UUID; import lombok.EqualsAndHashCode; @@ -87,13 +86,13 @@ public class XClusterTableConfig extends Model { @ApiModelProperty(value = "The backup config used to do bootstrapping for this table") @ManyToOne @JoinColumn(name = "backup_uuid", referencedColumnName = "backup_uuid") - @JsonProperty("backupUuid") + @JsonIgnore private Backup backup; @ApiModelProperty(value = "The restore config used to do bootstrapping for this table") @ManyToOne @JoinColumn(name = "restore_uuid", referencedColumnName = "restore_uuid") - @JsonProperty("restoreUuid") + @JsonIgnore private Restore restore; @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss'Z'") @@ -201,21 +200,13 @@ public XClusterTableConfig(XClusterConfig config, String tableId) { this.setStatus(Status.Validated); } - /** - * Retrieves an XClusterTableConfig object based on the provided tableId. - * - * @param tableId The unique identifier of the table. - * @return An Optional containing the XClusterTableConfig object if found, or an empty Optional if - * not found. - */ - public static Optional maybeGetByTableId(String tableId) { - XClusterTableConfig xClusterTableConfig = - find.query().where().eq("table_id", tableId).findOne(); - if (xClusterTableConfig == null) { - log.info("Cannot find an xClusterTableConfig with tableId {}", tableId); - return Optional.empty(); + @JsonSetter("backupUuid") + private void setBackupFromUuid(UUID backupUuid) { + if (backupUuid == null) { + setBackup(null); + return; } - return Optional.of(xClusterTableConfig); + setBackup(Backup.maybeGet(backupUuid).orElse(null)); } @JsonGetter("backupUuid") @@ -226,6 +217,15 @@ UUID getBackupUuid() { return getBackup().getBackupUUID(); } + @JsonSetter("restoreUuid") + private void setRestoreFromUuid(UUID restoreUuid) { + if (restoreUuid == null) { + restore = null; + return; + } + setRestore(Restore.maybeGet(restoreUuid).orElse(null)); + } + @JsonGetter("restoreUuid") UUID getRestoreUuid() { if (getRestore() == null) { diff --git a/managed/src/main/java/com/yugabyte/yw/models/helpers/CommonUtils.java b/managed/src/main/java/com/yugabyte/yw/models/helpers/CommonUtils.java index b0fec90c0e69..dc8ce8f21ba9 100644 --- a/managed/src/main/java/com/yugabyte/yw/models/helpers/CommonUtils.java +++ b/managed/src/main/java/com/yugabyte/yw/models/helpers/CommonUtils.java @@ -90,7 +90,7 @@ public class CommonUtils { "API", "POLICY", "HC_VAULT_TOKEN", - "vaultToken", + "VAULTTOKEN", "SAS_TOKEN"); // Exclude following strings from being sensitive fields private static final List excludedFieldNames = diff --git a/managed/src/main/java/com/yugabyte/yw/models/helpers/TaskType.java b/managed/src/main/java/com/yugabyte/yw/models/helpers/TaskType.java index 7bea618aeb88..8de707698810 100644 --- a/managed/src/main/java/com/yugabyte/yw/models/helpers/TaskType.java +++ b/managed/src/main/java/com/yugabyte/yw/models/helpers/TaskType.java @@ -699,6 +699,9 @@ public enum TaskType { UpdateAndPersistKubernetesOverrides( com.yugabyte.yw.commissioner.tasks.subtasks.UpdateAndPersistKubernetesOverrides.class), + HandleKubernetesNamespacedServices( + com.yugabyte.yw.commissioner.tasks.subtasks.HandleKubernetesNamespacedServices.class), + UpdatePlacementInfo(com.yugabyte.yw.commissioner.tasks.subtasks.UpdatePlacementInfo.class), UpdateSoftwareVersion(com.yugabyte.yw.commissioner.tasks.subtasks.UpdateSoftwareVersion.class), diff --git a/managed/src/main/resources/db/migration/default_/common/V375__Alter_XCluster_Tables_Add_State_Retryability.sql b/managed/src/main/resources/db/migration/default_/common/V375__Alter_XCluster_Tables_Add_State_Retryability.sql new file mode 100644 index 000000000000..1b1769f0bc52 --- /dev/null +++ b/managed/src/main/resources/db/migration/default_/common/V375__Alter_XCluster_Tables_Add_State_Retryability.sql @@ -0,0 +1,25 @@ +-- Copyright (c) YugaByte, Inc. + +-- Add new states required for retryability to the possible states +-- for xcluster_config.status. +ALTER TABLE IF EXISTS xcluster_config + DROP CONSTRAINT IF EXISTS ck_xcluster_config_status; + +ALTER TABLE IF EXISTS xcluster_config + ADD CONSTRAINT ck_xcluster_config_status + CHECK (status IN ('Initialized', + 'Running', + 'Updating', + 'DeletedUniverse', + 'DeletionFailed', + 'Failed', + 'DrainedData')); + +-- Update Error state to Failed for Dr configs. +UPDATE dr_config + SET state = 'Failed' + WHERE state = 'Error'; + +-- A PITR config can belong to multiple xCluster configs. +ALTER TABLE IF EXISTS xcluster_pitr + DROP CONSTRAINT IF EXISTS uq_xcluster_pitr_pitr_uuid; diff --git a/managed/src/main/resources/gflag_groups/2024.1.3/gflag_groups.json b/managed/src/main/resources/gflag_groups/2024.1.3/gflag_groups.json new file mode 100644 index 000000000000..3f4e5694674a --- /dev/null +++ b/managed/src/main/resources/gflag_groups/2024.1.3/gflag_groups.json @@ -0,0 +1,13 @@ +[ + { + "group_name": "ENHANCED_POSTGRES_COMPATIBILITY", + "flags": { + "MASTER": {}, + "TSERVER": { + "yb_enable_read_committed_isolation": "true", + "ysql_enable_read_request_caching": "true", + "ysql_pg_conf_csv": "yb_enable_base_scans_cost_model=true,yb_enable_optimizer_statistics=true,yb_bnl_batch_size=1024,yb_parallel_range_rows=10000,yb_enable_bitmapscan=true,yb_use_hash_splitting_by_default=false" + } + } + } +] diff --git a/managed/src/main/resources/reference.conf b/managed/src/main/resources/reference.conf index 18cb69baa611..d66500c089ff 100644 --- a/managed/src/main/resources/reference.conf +++ b/managed/src/main/resources/reference.conf @@ -169,6 +169,8 @@ yb { pitr { create_poll_delay = 1s create_timeout = 15 minutes + restore_poll_delay = 1s + restore_timeout = 15 minutes } ui { @@ -244,14 +246,16 @@ yb { audit_logging_enabled = false allow_connection_pooling = false consistency_check_enabled = false + default_service_scope_for_k8s="AZ" # possible: Namespaced, AZ } xcluster { db_scoped { enabled = false } + bootstrap_producer_timeout = 2 minutes k8s_tls_support = true - operation_timeout = 15 minutes + operation_timeout = 30 minutes enable_auto_flag_validation = true transactional { enabled = true @@ -553,6 +557,7 @@ yb { } enable_imdsv2_support = true + iam_credentials_num_retries = 10 disk_resize_cooldown_hours = 6 } @@ -977,7 +982,6 @@ yb { ybc_flags { nfs_dirs = "/tmp/nfs,/nfs" - enable_verbose = false listen_on_all_interfaces_k8s = true } @@ -1302,7 +1306,7 @@ yb { ybc { releases { - stable_version = "2.2.0.0-b5" + stable_version = "2.2.0.0-b6" path = "/opt/yugabyte/ybc/releases" } compatible_db_version = "2.15.0.0-b1" diff --git a/managed/src/main/resources/swagger-strict.json b/managed/src/main/resources/swagger-strict.json index 4935960cc2fb..5f96a5ea2b6b 100644 --- a/managed/src/main/resources/swagger-strict.json +++ b/managed/src/main/resources/swagger-strict.json @@ -1683,7 +1683,7 @@ "type" : "boolean" }, "updatingTask" : { - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "updatingTaskUUID" : { @@ -3566,7 +3566,7 @@ "type" : "boolean" }, "updatingTask" : { - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "updatingTaskUUID" : { @@ -5124,7 +5124,7 @@ }, "state" : { "description" : "The state of the DR config", - "enum" : [ "Initializing", "Replicating", "Switchover in Progress", "Failover in Progress", "Halted", "Updating", "Error" ], + "enum" : [ "Initializing", "Replicating", "Switchover in Progress", "Failover in Progress", "Halted", "Updating", "Failed" ], "type" : "string" }, "status" : { @@ -5621,7 +5621,7 @@ "type" : "boolean" }, "updatingTask" : { - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "updatingTaskUUID" : { @@ -5945,7 +5945,7 @@ "type" : "boolean" }, "updatingTask" : { - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "updatingTaskUUID" : { @@ -6800,7 +6800,7 @@ "type" : "boolean" }, "updatingTask" : { - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "updatingTaskUUID" : { @@ -9811,7 +9811,7 @@ "type" : "boolean" }, "updatingTask" : { - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "updatingTaskUUID" : { @@ -10361,7 +10361,7 @@ "type" : "boolean" }, "updatingTask" : { - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "updatingTaskUUID" : { @@ -10731,7 +10731,7 @@ "type" : "boolean" }, "updatingTask" : { - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "updatingTaskUUID" : { @@ -11717,7 +11717,7 @@ "type" : "boolean" }, "updatingTask" : { - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "updatingTaskUUID" : { @@ -11870,7 +11870,7 @@ }, "taskType" : { "description" : "Type of task to be scheduled.", - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "userEmail" : { @@ -11893,7 +11893,7 @@ }, "taskTypes" : { "items" : { - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "type" : "array", @@ -12282,7 +12282,7 @@ "type" : "boolean" }, "updatingTask" : { - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "updatingTaskUUID" : { @@ -12851,7 +12851,7 @@ "type" : "boolean" }, "updatingTask" : { - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "updatingTaskUUID" : { @@ -13451,7 +13451,7 @@ "type" : "boolean" }, "updatingTask" : { - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "updatingTaskUUID" : { @@ -13707,7 +13707,7 @@ "type" : "boolean" }, "updatingTask" : { - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "updatingTaskUUID" : { @@ -14168,7 +14168,7 @@ "type" : "boolean" }, "updatingTask" : { - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "updatingTaskUUID" : { @@ -14398,7 +14398,7 @@ "type" : "boolean" }, "updatingTask" : { - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "updatingTaskUUID" : { @@ -14628,7 +14628,7 @@ "type" : "boolean" }, "updatingTask" : { - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "updatingTaskUUID" : { @@ -15118,7 +15118,7 @@ "type" : "boolean" }, "updatingTask" : { - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "updatingTaskUUID" : { @@ -15798,7 +15798,7 @@ "type" : "boolean" }, "updatingTask" : { - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "updatingTaskUUID" : { @@ -15967,7 +15967,6 @@ "items" : { "$ref" : "#/definitions/XClusterTableConfig" }, - "readOnly" : true, "type" : "array", "uniqueItems" : true }, @@ -15980,6 +15979,7 @@ "items" : { "type" : "string" }, + "readOnly" : true, "type" : "array", "uniqueItems" : true }, @@ -16210,7 +16210,6 @@ "items" : { "$ref" : "#/definitions/XClusterTableConfig" }, - "readOnly" : true, "type" : "array", "uniqueItems" : true }, @@ -16223,6 +16222,7 @@ "items" : { "type" : "string" }, + "readOnly" : true, "type" : "array", "uniqueItems" : true }, @@ -16337,7 +16337,6 @@ "XClusterTableConfig" : { "properties" : { "backupUuid" : { - "description" : "The backup config used to do bootstrapping for this table", "format" : "uuid", "type" : "string" }, @@ -16363,7 +16362,6 @@ "type" : "string" }, "restoreUuid" : { - "description" : "The restore config used to do bootstrapping for this table", "format" : "uuid", "type" : "string" }, @@ -16391,6 +16389,7 @@ "description" : "tableInfo from target universe" } }, + "required" : [ "backupUuid", "restoreUuid" ], "type" : "object" }, "YBPCreateSuccess" : { @@ -18975,6 +18974,14 @@ "in" : "query", "name" : "request", "required" : false + }, { + "description" : "certificate params to edit", + "in" : "body", + "name" : "certificate", + "required" : true, + "schema" : { + "$ref" : "#/definitions/CertificateParams" + } } ], "responses" : { "200" : { diff --git a/managed/src/main/resources/swagger.json b/managed/src/main/resources/swagger.json index 97a45b3d20c7..0f681e5b7d2e 100644 --- a/managed/src/main/resources/swagger.json +++ b/managed/src/main/resources/swagger.json @@ -1695,7 +1695,7 @@ "type" : "boolean" }, "updatingTask" : { - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "updatingTaskUUID" : { @@ -3601,7 +3601,7 @@ "type" : "boolean" }, "updatingTask" : { - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "updatingTaskUUID" : { @@ -5159,7 +5159,7 @@ }, "state" : { "description" : "The state of the DR config", - "enum" : [ "Initializing", "Replicating", "Switchover in Progress", "Failover in Progress", "Halted", "Updating", "Error" ], + "enum" : [ "Initializing", "Replicating", "Switchover in Progress", "Failover in Progress", "Halted", "Updating", "Failed" ], "type" : "string" }, "status" : { @@ -5656,7 +5656,7 @@ "type" : "boolean" }, "updatingTask" : { - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "updatingTaskUUID" : { @@ -5984,7 +5984,7 @@ "type" : "boolean" }, "updatingTask" : { - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "updatingTaskUUID" : { @@ -6843,7 +6843,7 @@ "type" : "boolean" }, "updatingTask" : { - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "updatingTaskUUID" : { @@ -9902,7 +9902,7 @@ "type" : "boolean" }, "updatingTask" : { - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "updatingTaskUUID" : { @@ -10465,7 +10465,7 @@ "type" : "boolean" }, "updatingTask" : { - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "updatingTaskUUID" : { @@ -10835,7 +10835,7 @@ "type" : "boolean" }, "updatingTask" : { - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "updatingTaskUUID" : { @@ -11829,7 +11829,7 @@ "type" : "boolean" }, "updatingTask" : { - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "updatingTaskUUID" : { @@ -11982,7 +11982,7 @@ }, "taskType" : { "description" : "Type of task to be scheduled.", - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "userEmail" : { @@ -12005,7 +12005,7 @@ }, "taskTypes" : { "items" : { - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "type" : "array", @@ -12394,7 +12394,7 @@ "type" : "boolean" }, "updatingTask" : { - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "updatingTaskUUID" : { @@ -12963,7 +12963,7 @@ "type" : "boolean" }, "updatingTask" : { - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "updatingTaskUUID" : { @@ -13563,7 +13563,7 @@ "type" : "boolean" }, "updatingTask" : { - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "updatingTaskUUID" : { @@ -13819,7 +13819,7 @@ "type" : "boolean" }, "updatingTask" : { - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "updatingTaskUUID" : { @@ -14280,7 +14280,7 @@ "type" : "boolean" }, "updatingTask" : { - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "updatingTaskUUID" : { @@ -14510,7 +14510,7 @@ "type" : "boolean" }, "updatingTask" : { - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "updatingTaskUUID" : { @@ -14740,7 +14740,7 @@ "type" : "boolean" }, "updatingTask" : { - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "updatingTaskUUID" : { @@ -15230,7 +15230,7 @@ "type" : "boolean" }, "updatingTask" : { - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "updatingTaskUUID" : { @@ -15951,7 +15951,7 @@ "type" : "boolean" }, "updatingTask" : { - "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], + "enum" : [ "CloudBootstrap", "CloudCleanup", "CreateCassandraTable", "CreateUniverse", "ReadOnlyClusterCreate", "ReadOnlyKubernetesClusterDelete", "ReadOnlyClusterDelete", "CreateKubernetesUniverse", "ReadOnlyKubernetesClusterCreate", "DestroyUniverse", "PauseUniverse", "ResumeUniverse", "DestroyKubernetesUniverse", "DeleteTable", "BackupUniverse", "RestoreBackup", "MultiTableBackup", "CreateBackup", "ConfigureDBApis", "ConfigureDBApisKubernetes", "CreatePitrConfig", "DeletePitrConfig", "RestoreSnapshotSchedule", "EditUniverse", "EditKubernetesUniverse", "ExternalScript", "ImportIntoTable", "RunApiTriggeredHooks", "AddOnClusterCreate", "AddOnClusterDelete", "UpgradeUniverse", "UpdateLoadBalancerConfig", "RestartUniverse", "RestartUniverseKubernetesUpgrade", "SoftwareUpgrade", "SoftwareKubernetesUpgrade", "KubernetesOverridesUpgrade", "GFlagsUpgrade", "GFlagsKubernetesUpgrade", "CertsRotate", "CertsRotateKubernetesUpgrade", "TlsToggle", "VMImageUpgrade", "SystemdUpgrade", "RebootUniverse", "UpgradeKubernetesUniverse", "DeleteNodeFromUniverse", "StopNodeInUniverse", "StartNodeInUniverse", "AddNodeToUniverse", "RemoveNodeFromUniverse", "RebootNodeInUniverse", "ReleaseInstanceFromUniverse", "RotateAccessKey", "SetUniverseKey", "CreateAndRotateAccessKey", "CreateKMSConfig", "EditKMSConfig", "DeleteKMSConfig", "UpdateDiskSize", "UpdateKubernetesDiskSize", "StartMasterOnNode", "DeleteXClusterConfig", "SyncXClusterConfig", "CreateSupportBundle", "CreateXClusterConfig", "EditXClusterConfig", "RestartXClusterConfig", "RestartDrConfig", "SyncDrConfig", "SetTablesDrConfig", "SetDatabasesDrConfig", "CreateDrConfig", "DeleteDrConfig", "FailoverDrConfig", "SwitchoverDrConfig", "EditDrConfig", "EditDrConfigParams", "ReinstallNodeAgent", "DeleteCustomerConfig", "DeleteCustomerStorageConfig", "ResizeNode", "CreateTableSpacesInUniverse", "ThirdpartySoftwareUpgrade", "ModifyAuditLoggingConfig", "InstallYbcSoftware", "UpgradeUniverseYbc", "UpgradeYbcGFlags", "DisableYbc", "AddGFlagMetadata", "CloudProviderDelete", "CreateBackupSchedule", "CreateBackupScheduleKubernetes", "DeleteBackupSchedule", "DeleteBackupScheduleKubernetes", "EditBackupSchedule", "EditBackupScheduleKubernetes", "CloudProviderEdit", "SoftwareUpgradeYB", "SoftwareKubernetesUpgradeYB", "FinalizeUpgrade", "RollbackUpgrade", "RollbackKubernetesUpgrade", "LdapUniverseSync", "ReprovisionNode", "ReplaceNodeInUniverse", "UpdateProxyConfig", "RecommissionNodeInstance", "MasterFailover", "SyncMasterAddresses", "CreateYbaBackup", "RestoreYbaBackup", "RestoreContinuousBackup", "EnableNodeAgentInUniverse", "KubernetesCheckVolumeExpansion", "KubernetesPostExpansionCheckVolume", "NodeCertReloadTask", "UpdateUniverseConfig", "CreateRootVolumes", "ReplaceRootVolume", "ChangeInstanceType", "PersistResizeNode", "PersistSystemdUpgrade", "UpdateNodeDetails", "AddAuthorizedKey", "AnsibleClusterServerCtl", "AnsibleConfigureServers", "AnsibleDestroyServer", "PauseServer", "ResumeServer", "AnsibleSetupServer", "AnsibleCreateServer", "PrecheckNode", "PrecheckNodeDetached", "AnsibleUpdateNodeInfo", "BulkImport", "ChangeMasterConfig", "ChangeAdminPassword", "CreateTable", "DeleteNode", "DeleteBackup", "DeleteBackupYb", "UpdateNodeProcess", "DeleteTableFromUniverse", "DeleteTablesFromUniverse", "DeleteKeyspace", "LoadBalancerStateChange", "ModifyBlackList", "CheckUnderReplicatedTablets", "CheckFollowerLag", "CheckNodeSafeToDelete", "ManipulateDnsRecordTask", "RemoveUniverseEntry", "SetFlagInMemory", "SetNodeState", "SwamperTargetsFileUpdate", "UniverseUpdateSucceeded", "UpdateAndPersistGFlags", "UpdateAndPersistKubernetesOverrides", "HandleKubernetesNamespacedServices", "UpdatePlacementInfo", "UpdateSoftwareVersion", "UpdateUniverseYbcDetails", "YBCBackupSucceeded", "UpdateUniverseYbcGflagsDetails", "VerifyNodeSSHAccess", "WaitForDataMove", "WaitForLeaderBlacklistCompletion", "WaitForFollowerLag", "WaitForLoadBalance", "WaitForMasterLeader", "WaitForServer", "WaitForYbcServer", "WaitForTServerHeartBeats", "DeleteClusterFromUniverse", "InstanceActions", "WaitForServerReady", "WaitForClockSync", "WaitForDuration", "RunExternalScript", "RemoveAuthorizedKey", "UpdateUniverseAccessKey", "ManageLoadBalancerGroup", "BootstrapProducer", "CheckBootstrapRequired", "DeleteBootstrapIds", "DeleteReplication", "DeleteXClusterConfigEntry", "DeleteXClusterTableConfigEntry", "DeleteDrConfigEntry", "WaitForReplicationDrain", "ResetXClusterConfigEntry", "SetReplicationPaused", "ChangeXClusterRole", "SetDrStates", "UpdateDrConfigParams", "XClusterAddNamespaceToOutboundReplicationGroup", "AddNamespaceToXClusterReplication", "XClusterRemoveNamespaceFromTargetUniverse", "XClusterRemoveNamespaceFromOutboundReplication", "SetRestoreTime", "XClusterConfigSetup", "XClusterConfigSetStatus", "XClusterConfigSetStatusForTables", "XClusterConfigSetStatusForNamespaces", "XClusterConfigModifyTables", "XClusterConfigRename", "XClusterConfigSync", "XClusterConfigUpdateMasterAddresses", "XClusterInfoPersist", "ReplicateNamespaces", "CheckXUniverseAutoFlags", "PromoteSecondaryConfigToMainConfig", "DeleteRemnantStreams", "CreateOutboundReplicationGroup", "XClusterDbReplicationSetup", "DeleteReplicationOnSource", "DeleteXClusterBackupRestoreEntries", "SetRestoreState", "CloudAccessKeyCleanup", "CloudAccessKeySetup", "CloudInitializer", "CloudProviderCleanup", "CloudRegionCleanup", "CloudRegionSetup", "CloudSetup", "BackupTable", "BackupTableYb", "BackupTableYbc", "BackupUniverseKeys", "RestoreBackupYb", "RestoreBackupYbc", "RestoreUniverseKeys", "RestoreUniverseKeysYb", "RestoreUniverseKeysYbc", "SetBackupHiddenState", "SetRestoreHiddenState", "RestorePreflightValidate", "BackupPreflightValidate", "WaitForLeadersOnPreferredOnly", "EnableEncryptionAtRest", "DisableEncryptionAtRest", "DestroyEncryptionAtRest", "KubernetesCommandExecutor", "KubernetesWaitForPod", "KubernetesCheckNumPod", "SetActiveUniverseKeys", "WaitForEncryptionKeyInMemory", "UnivSetCertificate", "CreateAlertDefinitions", "ManageAlertDefinitions", "UniverseSetTlsParams", "UniverseUpdateRootCert", "ResetUniverseVersion", "DeleteCertificate", "SetNodeStatus", "CheckMasterLeader", "CheckMasters", "CheckTServers", "WaitForTServerHBs", "CreatePrometheusSwamperConfig", "PreflightNodeCheck", "RunYsqlUpgrade", "PromoteAutoFlags", "RollbackAutoFlags", "StoreAutoFlagConfigVersion", "CheckUpgrade", "CheckCertificateConfig", "CheckMemory", "CheckLocale", "CheckGlibc", "CheckSoftwareVersion", "UpdateMountedDisks", "TransferXClusterCerts", "CreateTableSpaces", "ManageOtelCollector", "UpdateAndPersistAuditLoggingConfig", "MarkUniverseForHealthScriptReUpload", "RebootServer", "HardRebootServer", "RunHooks", "UpdateUniverseTags", "UpgradeYbc", "InstallYbcSoftwareOnK8s", "InstanceExistCheck", "DeleteRootVolumes", "InstallingThirdPartySoftware", "InstallNodeAgent", "WaitForNodeAgent", "CloudImageBundleSetup", "UpdateClusterUserIntent", "UpdateClusterAPIDetails", "UpdateUniverseState", "UpdateUniverseCommunicationPorts", "UpdateUniverseIntent", "UpdateConsistencyCheck", "FreezeUniverse", "QueryLdapServer", "DbLdapSync", "CheckForClusterServers", "CheckLeaderlessTablets", "CheckNodesAreSafeToTakeDown", "ValidateNodeDiskSize", "CheckNodeReachable", "WaitStartingFromTime", "RemoveNodeAgent", "UpdateUniverseFields", "RunNodeCommand" ], "type" : "string" }, "updatingTaskUUID" : { @@ -16120,7 +16120,6 @@ "items" : { "$ref" : "#/definitions/XClusterTableConfig" }, - "readOnly" : true, "type" : "array", "uniqueItems" : true }, @@ -16133,6 +16132,7 @@ "items" : { "type" : "string" }, + "readOnly" : true, "type" : "array", "uniqueItems" : true }, @@ -16363,7 +16363,6 @@ "items" : { "$ref" : "#/definitions/XClusterTableConfig" }, - "readOnly" : true, "type" : "array", "uniqueItems" : true }, @@ -16376,6 +16375,7 @@ "items" : { "type" : "string" }, + "readOnly" : true, "type" : "array", "uniqueItems" : true }, @@ -16490,7 +16490,6 @@ "XClusterTableConfig" : { "properties" : { "backupUuid" : { - "description" : "The backup config used to do bootstrapping for this table", "format" : "uuid", "type" : "string" }, @@ -16516,7 +16515,6 @@ "type" : "string" }, "restoreUuid" : { - "description" : "The restore config used to do bootstrapping for this table", "format" : "uuid", "type" : "string" }, @@ -16544,6 +16542,7 @@ "description" : "tableInfo from target universe" } }, + "required" : [ "backupUuid", "restoreUuid" ], "type" : "object" }, "YBPCreateSuccess" : { @@ -19394,6 +19393,14 @@ "in" : "query", "name" : "request", "required" : false + }, { + "description" : "certificate params to edit", + "in" : "body", + "name" : "certificate", + "required" : true, + "schema" : { + "$ref" : "#/definitions/CertificateParams" + } } ], "responses" : { "200" : { diff --git a/managed/src/test/java/com/yugabyte/yw/commissioner/TaskExecutorTest.java b/managed/src/test/java/com/yugabyte/yw/commissioner/TaskExecutorTest.java index fbfdd49b60de..ab008402c9f5 100644 --- a/managed/src/test/java/com/yugabyte/yw/commissioner/TaskExecutorTest.java +++ b/managed/src/test/java/com/yugabyte/yw/commissioner/TaskExecutorTest.java @@ -130,7 +130,9 @@ public class TaskExecutorTest extends PlatformGuiceApplicationBaseTest { TaskType.MasterFailover, TaskType.SyncMasterAddresses, TaskType.ReprovisionNode, - TaskType.CloudProviderEdit); + TaskType.CloudProviderEdit, + TaskType.SwitchoverDrConfig, + TaskType.FailoverDrConfig); @Override protected Application provideApplication() { diff --git a/managed/src/test/java/com/yugabyte/yw/commissioner/tasks/CreateXClusterConfigTest.java b/managed/src/test/java/com/yugabyte/yw/commissioner/tasks/CreateXClusterConfigTest.java index 894a8bf2c783..f1d6ff3a2c35 100644 --- a/managed/src/test/java/com/yugabyte/yw/commissioner/tasks/CreateXClusterConfigTest.java +++ b/managed/src/test/java/com/yugabyte/yw/commissioner/tasks/CreateXClusterConfigTest.java @@ -46,6 +46,7 @@ import com.yugabyte.yw.models.helpers.NodeDetails; import com.yugabyte.yw.models.helpers.NodeDetails.NodeState; import com.yugabyte.yw.models.helpers.TaskType; +import java.lang.reflect.Constructor; import java.util.ArrayList; import java.util.Collections; import java.util.Date; @@ -68,6 +69,7 @@ import org.yb.client.GetMasterClusterConfigResponse; import org.yb.client.GetTableSchemaResponse; import org.yb.client.IsSetupUniverseReplicationDoneResponse; +import org.yb.client.ListCDCStreamsResponse; import org.yb.client.ListTablesResponse; import org.yb.client.SetupUniverseReplicationResponse; import org.yb.client.YBClient; @@ -161,6 +163,18 @@ public void setUp() { when(mockYBClient.getClient(any(), any())).thenReturn(mockClient); when(mockYBClient.getClientWithConfig(any())).thenReturn(mockClient); + try { + // Use reflection to access the package-private constructor. + Constructor constructor = + ListCDCStreamsResponse.class.getDeclaredConstructor( + long.class, String.class, MasterTypes.MasterErrorPB.class, List.class); + constructor.setAccessible(true); + ListCDCStreamsResponse listCDCStreamsResp = + constructor.newInstance(0, "", null, Collections.emptyList()); + when(mockClient.listCDCStreams(null, null, null)).thenReturn(listCDCStreamsResp); + } catch (Exception ignored) { + } + GetTableSchemaResponse mockTableSchemaResponseTable1 = new GetTableSchemaResponse( 0, @@ -347,7 +361,6 @@ public void testCreate() { XClusterConfig xClusterConfig = XClusterConfig.create(createFormData, XClusterConfigStatusType.Initialized); - initTargetUniverseClusterConfig(xClusterConfig.getReplicationGroupName(), 2); initClientGetTablesList(); try { @@ -363,6 +376,12 @@ public void testCreate() { new IsSetupUniverseReplicationDoneResponse(0, "", null, true, null); when(mockClient.isSetupUniverseReplicationDone(xClusterConfig.getReplicationGroupName())) .thenReturn(mockIsSetupDoneResponse); + when(mockClient.isSetupUniverseReplicationDone(xClusterConfig.getReplicationGroupName())) + .thenAnswer( + invocation -> { + initTargetUniverseClusterConfig(xClusterConfig.getReplicationGroupName(), 2); + return mockIsSetupDoneResponse; + }); } catch (Exception ignore) { } @@ -396,7 +415,6 @@ public void testCreateHAEnabled() { XClusterConfig xClusterConfig = XClusterConfig.create(createFormData, XClusterConfigStatusType.Initialized); - initTargetUniverseClusterConfig(xClusterConfig.getReplicationGroupName(), 2); initClientGetTablesList(); HighAvailabilityConfig.create("test-cluster-key"); @@ -412,7 +430,11 @@ public void testCreateHAEnabled() { IsSetupUniverseReplicationDoneResponse mockIsSetupDoneResponse = new IsSetupUniverseReplicationDoneResponse(0, "", null, true, null); when(mockClient.isSetupUniverseReplicationDone(xClusterConfig.getReplicationGroupName())) - .thenReturn(mockIsSetupDoneResponse); + .thenAnswer( + invocation -> { + initTargetUniverseClusterConfig(xClusterConfig.getReplicationGroupName(), 2); + return mockIsSetupDoneResponse; + }); } catch (Exception ignore) { } @@ -446,7 +468,6 @@ public void testCreateXClusterSetupFailure() { XClusterConfig xClusterConfig = XClusterConfig.create(createFormData, XClusterConfigStatusType.Initialized); - initTargetUniverseClusterConfig(xClusterConfig.getReplicationGroupName(), 2); initClientGetTablesList(); String setupErrMsg = "failed to run setup rpc"; @@ -465,7 +486,11 @@ public void testCreateXClusterSetupFailure() { SetupUniverseReplicationResponse mockSetupResponse = new SetupUniverseReplicationResponse(0, "", masterErrorBuilder.build()); when(mockClient.setupUniverseReplication(any(), any(), any(), any())) - .thenReturn(mockSetupResponse); + .thenAnswer( + invocation -> { + initTargetUniverseClusterConfig(xClusterConfig.getReplicationGroupName(), 2); + return mockSetupResponse; + }); } catch (Exception ignore) { } @@ -503,7 +528,6 @@ public void testCreateXClusterIsSetupDoneFailure() { XClusterConfig xClusterConfig = XClusterConfig.create(createFormData, XClusterConfigStatusType.Initialized); - initTargetUniverseClusterConfig(xClusterConfig.getReplicationGroupName(), 2); initClientGetTablesList(); String isSetupDoneErrMsg = "failed to run setup rpc"; @@ -523,7 +547,11 @@ public void testCreateXClusterIsSetupDoneFailure() { IsSetupUniverseReplicationDoneResponse mockIsSetupDoneResponse = new IsSetupUniverseReplicationDoneResponse(0, "", null, true, appStatusBuilder.build()); when(mockClient.isSetupUniverseReplicationDone(xClusterConfig.getReplicationGroupName())) - .thenReturn(mockIsSetupDoneResponse); + .thenAnswer( + invocation -> { + initTargetUniverseClusterConfig(xClusterConfig.getReplicationGroupName(), 2); + return mockIsSetupDoneResponse; + }); } catch (Exception ignore) { } diff --git a/managed/src/test/java/com/yugabyte/yw/commissioner/tasks/DestroyKubernetesUniverseTest.java b/managed/src/test/java/com/yugabyte/yw/commissioner/tasks/DestroyKubernetesUniverseTest.java index 15f24dd4535a..fcfb8316c086 100644 --- a/managed/src/test/java/com/yugabyte/yw/commissioner/tasks/DestroyKubernetesUniverseTest.java +++ b/managed/src/test/java/com/yugabyte/yw/commissioner/tasks/DestroyKubernetesUniverseTest.java @@ -27,6 +27,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import com.yugabyte.yw.commissioner.tasks.subtasks.KubernetesCommandExecutor.CommandType; import com.yugabyte.yw.common.ApiUtils; import com.yugabyte.yw.common.ModelFactory; import com.yugabyte.yw.common.PlatformServiceException; @@ -151,32 +152,40 @@ private void setupUniverseMultiAZ(boolean updateInProgress, boolean skipProvider TaskType.KubernetesCommandExecutor, TaskType.KubernetesCommandExecutor, TaskType.KubernetesCommandExecutor, + TaskType.KubernetesCommandExecutor, TaskType.RemoveUniverseEntry, TaskType.SwamperTargetsFileUpdate); private static final List KUBERNETES_DESTROY_UNIVERSE_EXPECTED_RESULTS = ImmutableList.of( Json.toJson(ImmutableMap.of()), + // This will not be used because currently all tests are old naming based + Json.toJson(ImmutableMap.of("commandType", CommandType.NAMESPACED_SVC_DELETE.name())), Json.toJson(ImmutableMap.of("commandType", HELM_DELETE.name())), Json.toJson(ImmutableMap.of("commandType", VOLUME_DELETE.name())), Json.toJson(ImmutableMap.of("commandType", NAMESPACE_DELETE.name())), Json.toJson(ImmutableMap.of()), Json.toJson(ImmutableMap.of())); - private void assertTaskSequence(Map> subTasksByPosition, int numTasks) { - assertTaskSequence(subTasksByPosition, numTasks, numTasks, false); + private void assertTaskSequence( + Map> subTasksByPosition, int numTasks, boolean oldNamingBased) { + assertTaskSequence(subTasksByPosition, numTasks, numTasks, false, oldNamingBased); } private void assertTaskSequence( - Map> subTasksByPosition, int numTasks, boolean forceDelete) { - assertTaskSequence(subTasksByPosition, numTasks, numTasks, forceDelete); + Map> subTasksByPosition, + int numTasks, + boolean forceDelete, + boolean oldNamingBased) { + assertTaskSequence(subTasksByPosition, numTasks, numTasks, forceDelete, oldNamingBased); } private void assertTaskSequence( Map> subTasksByPosition, int numTasks, int numNamespaceDelete, - boolean forceDelete) { + boolean forceDelete, + boolean oldNamingBased) { int position = 0; if (!forceDelete) { // Shift by 1 subtask due to FreezeUniverse. @@ -191,6 +200,12 @@ private void assertTaskSequence( List tasks = subTasksByPosition.get(position); if (expectedResults.equals( + Json.toJson(ImmutableMap.of("commandType", CommandType.NAMESPACED_SVC_DELETE.name())))) { + if (oldNamingBased) { + continue; + } + assertEquals(numTasks, tasks.size()); + } else if (expectedResults.equals( Json.toJson(ImmutableMap.of("commandType", NAMESPACE_DELETE.name())))) { if (numNamespaceDelete == 0) { position++; @@ -254,7 +269,7 @@ public void testDestroyKubernetesUniverseSuccess() { List subTasks = taskInfo.getSubTasks(); Map> subTasksByPosition = subTasks.stream().collect(Collectors.groupingBy(TaskInfo::getPosition)); - assertTaskSequence(subTasksByPosition, 1); + assertTaskSequence(subTasksByPosition, 1, true); assertEquals(Success, taskInfo.getTaskState()); assertFalse(defaultCustomer.getUniverseUUIDs().contains(defaultUniverse.getUniverseUUID())); } @@ -373,7 +388,7 @@ public void testForceDestroyKubernetesUniverseWithUpdateInProgress() { List subTasks = taskInfo.getSubTasks(); Map> subTasksByPosition = subTasks.stream().collect(Collectors.groupingBy(TaskInfo::getPosition)); - assertTaskSequence(subTasksByPosition, 1, true); + assertTaskSequence(subTasksByPosition, 1, true, true); assertEquals(Success, taskInfo.getTaskState()); assertFalse(defaultCustomer.getUniverseUUIDs().contains(defaultUniverse.getUniverseUUID())); } @@ -408,7 +423,7 @@ public void testDestroyKubernetesUniverseSuccessMultiAZ() { List subTasks = taskInfo.getSubTasks(); Map> subTasksByPosition = subTasks.stream().collect(Collectors.groupingBy(TaskInfo::getPosition)); - assertTaskSequence(subTasksByPosition, 3); + assertTaskSequence(subTasksByPosition, 3, true); assertEquals(Success, taskInfo.getTaskState()); assertFalse(defaultCustomer.getUniverseUUIDs().contains(defaultUniverse.getUniverseUUID())); } @@ -466,7 +481,7 @@ public void testDestroyKubernetesUniverseSuccessMultiAZWithNamespace() { List subTasks = taskInfo.getSubTasks(); Map> subTasksByPosition = subTasks.stream().collect(Collectors.groupingBy(TaskInfo::getPosition)); - assertTaskSequence(subTasksByPosition, 3, 1, false); + assertTaskSequence(subTasksByPosition, 3, 1, false, true); assertEquals(Success, taskInfo.getTaskState()); assertFalse(defaultCustomer.getUniverseUUIDs().contains(defaultUniverse.getUniverseUUID())); } @@ -500,7 +515,7 @@ public void testDestroyKubernetesHelm2UniverseSuccess() { List subTasks = taskInfo.getSubTasks(); Map> subTasksByPosition = subTasks.stream().collect(Collectors.groupingBy(TaskInfo::getPosition)); - assertTaskSequence(subTasksByPosition, 3); + assertTaskSequence(subTasksByPosition, 3, true); assertEquals(Success, taskInfo.getTaskState()); assertFalse(defaultCustomer.getUniverseUUIDs().contains(defaultUniverse.getUniverseUUID())); } diff --git a/managed/src/test/java/com/yugabyte/yw/commissioner/tasks/EditKubernetesUniverseTest.java b/managed/src/test/java/com/yugabyte/yw/commissioner/tasks/EditKubernetesUniverseTest.java index 449ad0891a94..aaeeab04a16d 100644 --- a/managed/src/test/java/com/yugabyte/yw/commissioner/tasks/EditKubernetesUniverseTest.java +++ b/managed/src/test/java/com/yugabyte/yw/commissioner/tasks/EditKubernetesUniverseTest.java @@ -215,6 +215,7 @@ private void setupUniverseMultiAZ(boolean setMasters, int numTservers) { TaskType.CheckLeaderlessTablets, TaskType.FreezeUniverse, TaskType.UpdateConsistencyCheck, + TaskType.HandleKubernetesNamespacedServices, TaskType.KubernetesCommandExecutor, TaskType.KubernetesCheckNumPod, TaskType.KubernetesCommandExecutor, @@ -231,6 +232,7 @@ private List getExpectedAddPodTaskResults() { Json.toJson(ImmutableMap.of()), Json.toJson(ImmutableMap.of()), Json.toJson(ImmutableMap.of()), + Json.toJson(ImmutableMap.of()), Json.toJson(ImmutableMap.of("commandType", HELM_UPGRADE.name())), Json.toJson(ImmutableMap.of("commandType", WAIT_FOR_PODS.name())), Json.toJson(ImmutableMap.of("commandType", POD_INFO.name())), @@ -248,6 +250,7 @@ private List getExpectedAddPodTaskResults() { TaskType.CheckLeaderlessTablets, TaskType.FreezeUniverse, TaskType.UpdateConsistencyCheck, + TaskType.HandleKubernetesNamespacedServices, TaskType.UpdatePlacementInfo, TaskType.WaitForDataMove, TaskType.CheckNodeSafeToDelete, @@ -269,6 +272,7 @@ private List getExpectedRemovePodTaskResults() { Json.toJson(ImmutableMap.of()), Json.toJson(ImmutableMap.of()), Json.toJson(ImmutableMap.of()), + Json.toJson(ImmutableMap.of()), Json.toJson(ImmutableMap.of("commandType", HELM_UPGRADE.name())), Json.toJson(ImmutableMap.of("commandType", WAIT_FOR_PODS.name())), Json.toJson(ImmutableMap.of()), @@ -285,6 +289,7 @@ private List getExpectedRemovePodTaskResults() { TaskType.CheckLeaderlessTablets, TaskType.FreezeUniverse, TaskType.UpdateConsistencyCheck, + TaskType.HandleKubernetesNamespacedServices, TaskType.UpdatePlacementInfo, TaskType.CheckUnderReplicatedTablets, TaskType.CheckNodesAreSafeToTakeDown, @@ -320,6 +325,7 @@ private List getExpectedChangeInstaceTypeResults() { Json.toJson(ImmutableMap.of()), Json.toJson(ImmutableMap.of()), Json.toJson(ImmutableMap.of()), + Json.toJson(ImmutableMap.of()), Json.toJson(ImmutableMap.of("commandType", HELM_UPGRADE.name())), Json.toJson(ImmutableMap.of("commandType", WAIT_FOR_POD.name())), Json.toJson(ImmutableMap.of()), diff --git a/managed/src/test/java/com/yugabyte/yw/commissioner/tasks/EditXClusterConfigTest.java b/managed/src/test/java/com/yugabyte/yw/commissioner/tasks/EditXClusterConfigTest.java index 40b9c8ff0b71..8e289d9401b3 100644 --- a/managed/src/test/java/com/yugabyte/yw/commissioner/tasks/EditXClusterConfigTest.java +++ b/managed/src/test/java/com/yugabyte/yw/commissioner/tasks/EditXClusterConfigTest.java @@ -47,6 +47,7 @@ import com.yugabyte.yw.models.helpers.NodeDetails; import com.yugabyte.yw.models.helpers.NodeDetails.NodeState; import com.yugabyte.yw.models.helpers.TaskType; +import java.lang.reflect.Constructor; import java.util.ArrayList; import java.util.Collections; import java.util.Date; @@ -73,6 +74,7 @@ import org.yb.client.GetMasterClusterConfigResponse; import org.yb.client.GetTableSchemaResponse; import org.yb.client.IsSetupUniverseReplicationDoneResponse; +import org.yb.client.ListCDCStreamsResponse; import org.yb.client.ListTablesResponse; import org.yb.client.SetUniverseReplicationEnabledResponse; import org.yb.client.YBClient; @@ -197,6 +199,18 @@ public void setUp() { when(mockYBClient.getClient(any(), any())).thenReturn(mockClient); when(mockYBClient.getClientWithConfig(any())).thenReturn(mockClient); + try { + // Use reflection to access the package-private constructor. + Constructor constructor = + ListCDCStreamsResponse.class.getDeclaredConstructor( + long.class, String.class, MasterTypes.MasterErrorPB.class, List.class); + constructor.setAccessible(true); + ListCDCStreamsResponse listCDCStreamsResp = + constructor.newInstance(0, "", null, Collections.emptyList()); + when(mockClient.listCDCStreams(null, null, null)).thenReturn(listCDCStreamsResp); + } catch (Exception ignored) { + } + GetTableSchemaResponse mockTableSchemaResponseTable1 = new GetTableSchemaResponse( 0, @@ -780,7 +794,6 @@ public void testAddTables() { XClusterConfig.create(createFormData, XClusterConfigStatusType.Running); initClientGetTablesList(); - initTargetUniverseClusterConfig(xClusterConfig.getReplicationGroupName(), 3); try { BootstrapUniverseResponse mockBootstrapUniverseResponse = @@ -797,7 +810,11 @@ public void testAddTables() { IsSetupUniverseReplicationDoneResponse mockIsAlterReplicationDoneResponse = new IsSetupUniverseReplicationDoneResponse(0, "", null, true, null); when(mockClient.isAlterUniverseReplicationDone(xClusterConfig.getReplicationGroupName())) - .thenReturn(mockIsAlterReplicationDoneResponse); + .thenAnswer( + invocation -> { + initTargetUniverseClusterConfig(xClusterConfig.getReplicationGroupName(), 3); + return mockIsAlterReplicationDoneResponse; + }); } catch (Exception ignore) { } @@ -848,7 +865,6 @@ public void testAddTablesHAEnabled() { HighAvailabilityConfig.create("test-cluster-key"); initClientGetTablesList(); - initTargetUniverseClusterConfig(xClusterConfig.getReplicationGroupName(), 3); try { BootstrapUniverseResponse mockBootstrapUniverseResponse = @@ -866,6 +882,12 @@ public void testAddTablesHAEnabled() { new IsSetupUniverseReplicationDoneResponse(0, "", null, true, null); when(mockClient.isAlterUniverseReplicationDone(xClusterConfig.getReplicationGroupName())) .thenReturn(mockIsAlterReplicationDoneResponse); + when(mockClient.isAlterUniverseReplicationDone(xClusterConfig.getReplicationGroupName())) + .thenAnswer( + invocation -> { + initTargetUniverseClusterConfig(xClusterConfig.getReplicationGroupName(), 3); + return mockIsAlterReplicationDoneResponse; + }); } catch (Exception ignore) { } @@ -1224,7 +1246,6 @@ public void testAddRemoveTables() { XClusterConfig.create(createFormData, XClusterConfigStatusType.Running); initClientGetTablesList(); - initTargetUniverseClusterConfig(xClusterConfig.getReplicationGroupName(), 3); try { BootstrapUniverseResponse mockBootstrapUniverseResponse = @@ -1242,6 +1263,12 @@ public void testAddRemoveTables() { new IsSetupUniverseReplicationDoneResponse(0, "", null, true, null); when(mockClient.isAlterUniverseReplicationDone(xClusterConfig.getReplicationGroupName())) .thenReturn(mockIsAlterReplicationDoneResponse); + when(mockClient.isAlterUniverseReplicationDone(xClusterConfig.getReplicationGroupName())) + .thenAnswer( + invocation -> { + initTargetUniverseClusterConfig(xClusterConfig.getReplicationGroupName(), 3); + return mockIsAlterReplicationDoneResponse; + }); AlterUniverseReplicationResponse mockRemoveResponse = new AlterUniverseReplicationResponse(0, "", null); @@ -1302,7 +1329,6 @@ public void testAddRemoveTablesHAEnabled() { HighAvailabilityConfig.create("test-cluster-key"); initClientGetTablesList(); - initTargetUniverseClusterConfig(xClusterConfig.getReplicationGroupName(), 3); try { BootstrapUniverseResponse mockBootstrapUniverseResponse = @@ -1320,6 +1346,12 @@ public void testAddRemoveTablesHAEnabled() { new IsSetupUniverseReplicationDoneResponse(0, "", null, true, null); when(mockClient.isAlterUniverseReplicationDone(xClusterConfig.getReplicationGroupName())) .thenReturn(mockIsAlterReplicationDoneResponse); + when(mockClient.isAlterUniverseReplicationDone(xClusterConfig.getReplicationGroupName())) + .thenAnswer( + invocation -> { + initTargetUniverseClusterConfig(xClusterConfig.getReplicationGroupName(), 3); + return mockIsAlterReplicationDoneResponse; + }); AlterUniverseReplicationResponse mockRemoveResponse = new AlterUniverseReplicationResponse(0, "", null); diff --git a/managed/src/test/java/com/yugabyte/yw/commissioner/tasks/subtasks/KubernetesCommandExecutorTest.java b/managed/src/test/java/com/yugabyte/yw/commissioner/tasks/subtasks/KubernetesCommandExecutorTest.java index 9dfa20cbda75..1f94f97e80ae 100644 --- a/managed/src/test/java/com/yugabyte/yw/commissioner/tasks/subtasks/KubernetesCommandExecutorTest.java +++ b/managed/src/test/java/com/yugabyte/yw/commissioner/tasks/subtasks/KubernetesCommandExecutorTest.java @@ -399,6 +399,8 @@ private Map getExpectedOverrides(boolean exposeAll) { yugabytedUiInfo.put("enabled", COMMUNITY_OP_ENABLED); yugabytedUiInfo.put("metricsSnapshotter", metricsSnapshotterInfo); expectedOverrides.put("yugabytedUi", yugabytedUiInfo); + + expectedOverrides.put("defaultServiceScope", "AZ"); return expectedOverrides; } diff --git a/managed/src/test/java/com/yugabyte/yw/common/KubernetesManagerTest.java b/managed/src/test/java/com/yugabyte/yw/common/KubernetesManagerTest.java index 6abc34faabde..85de284f80d4 100644 --- a/managed/src/test/java/com/yugabyte/yw/common/KubernetesManagerTest.java +++ b/managed/src/test/java/com/yugabyte/yw/common/KubernetesManagerTest.java @@ -135,7 +135,7 @@ public void getMasterServiceIPs() { RuntimeException.class, () -> kubernetesManager.getPreferredServiceIP( - configProvider, "demo-az1", "demo-universe", true, false)); + configProvider, "demo-az1", "demo-universe", true, false, universe.getName())); Mockito.verify(shellProcessHandler, times(1)).run(command.capture(), context.capture()); assertEquals( ImmutableList.of( @@ -159,7 +159,7 @@ public void getTserverServiceIPs() { ShellResponse response = ShellResponse.create(0, "{\"items\": [{\"kind\": \"Service\"}]}"); when(shellProcessHandler.run(anyList(), any(ShellProcessContext.class))).thenReturn(response); kubernetesManager.getPreferredServiceIP( - configProvider, "demo-az2", "demo-universe", false, true); + configProvider, "demo-az2", "demo-universe", false, true, universe.getName()); Mockito.verify(shellProcessHandler, times(1)).run(command.capture(), context.capture()); assertEquals( ImmutableList.of( @@ -169,7 +169,7 @@ public void getTserverServiceIPs() { "--namespace", "demo-universe", "-l", - "release=demo-az2,app.kubernetes.io/name=yb-tserver," + "app.kubernetes.io/part-of=testUniverse,app.kubernetes.io/name=yb-tserver," + "service-type notin (headless, non-endpoint)", "-o", "json"), diff --git a/managed/src/test/java/com/yugabyte/yw/common/NodeManagerTest.java b/managed/src/test/java/com/yugabyte/yw/common/NodeManagerTest.java index c14fac60ecf6..e050a803f7d4 100644 --- a/managed/src/test/java/com/yugabyte/yw/common/NodeManagerTest.java +++ b/managed/src/test/java/com/yugabyte/yw/common/NodeManagerTest.java @@ -532,9 +532,6 @@ public void setUp() { when(runtimeConfigFactory.globalRuntimeConf()).thenReturn(mockConfig); when(nodeAgentClient.maybeGetNodeAgent(any(), any())).thenReturn(Optional.empty()); createTempFile("node_manager_test_ca.crt", "test-cert"); - when(mockConfGetter.getConfForScope( - any(Universe.class), eq(UniverseConfKeys.ybcEnableVervbose))) - .thenReturn(false); when(mockConfGetter.getConfForScope(any(Universe.class), eq(UniverseConfKeys.nfsDirs))) .thenReturn("/tmp/nfs,/nfs"); when(mockConfGetter.getConfForScope( diff --git a/managed/src/test/java/com/yugabyte/yw/controllers/DrConfigControllerTest.java b/managed/src/test/java/com/yugabyte/yw/controllers/DrConfigControllerTest.java index 184d428e763e..13587ab512bb 100644 --- a/managed/src/test/java/com/yugabyte/yw/controllers/DrConfigControllerTest.java +++ b/managed/src/test/java/com/yugabyte/yw/controllers/DrConfigControllerTest.java @@ -257,6 +257,8 @@ public void testSetDatabasesSuccess() { setDatabasesData.databases = new HashSet<>(Set.of("db1", "db2")); XClusterConfig xClusterConfig = drConfig.getActiveXClusterConfig(); xClusterConfig.updateStatus(XClusterConfigStatusType.Running); + drConfig.setState(State.Replicating); + drConfig.update(); taskUUID = buildTaskInfo(null, TaskType.EditDrConfig); when(mockCommissioner.submit(any(), any())).thenReturn(taskUUID); @@ -309,7 +311,6 @@ public void testSetDatabasesFailureNoChange() { "/api/customers/" + defaultCustomer.getUuid() + "/dr_configs", authToken, Json.toJson(data)); - assertOk(result); List drConfigs = DrConfig.getBetweenUniverses( @@ -323,6 +324,8 @@ public void testSetDatabasesFailureNoChange() { XClusterConfig xClusterConfig = drConfig.getActiveXClusterConfig(); xClusterConfig.updateStatus(XClusterConfigStatusType.Running); xClusterConfig.updateStatusForNamespace(namespaceId, XClusterNamespaceConfig.Status.Running); + drConfig.setState(State.Replicating); + drConfig.update(); // Trying to add the existing databases. Exception exception = @@ -370,6 +373,8 @@ public void testSetDatabasesFailureNoDbs() { DrConfigSetDatabasesForm setDatabasesData = new DrConfigSetDatabasesForm(); XClusterConfig xClusterConfig = drConfig.getActiveXClusterConfig(); xClusterConfig.updateStatus(XClusterConfigStatusType.Running); + drConfig.setState(State.Replicating); + drConfig.update(); // Try giving an empty list. setDatabasesData.databases = new HashSet<>(); @@ -444,8 +449,9 @@ public void testDbScopedSwitchover() throws Exception { new BootstrapBackupParams(), new PitrParams(), Set.of(sourceNamespace)); + drConfig.setState(State.Replicating); drConfig.getActiveXClusterConfig().setStatus(XClusterConfigStatusType.Running); - drConfig.getActiveXClusterConfig().update(); + drConfig.update(); UUID taskUUID = buildTaskInfo(null, TaskType.SwitchoverDrConfig); when(mockCommissioner.submit(any(), any())).thenReturn(taskUUID); String targetNamespace = "targetNamespace"; @@ -511,8 +517,9 @@ public void testDbScopedFailoverFailsWithSafetimeMissing() throws Exception { new BootstrapBackupParams(), new PitrParams(), Set.of(sourceNamespace)); + drConfig.setState(State.Replicating); drConfig.getActiveXClusterConfig().setStatus(XClusterConfigStatusType.Running); - drConfig.getActiveXClusterConfig().update(); + drConfig.update(); String targetNamespace = "targetNamespace"; setupMockGetUniverseReplicationInfo(drConfig, sourceNamespace, targetNamespace); @@ -548,8 +555,9 @@ public void testDbScopedFailover() throws Exception { new BootstrapBackupParams(), new PitrParams(), Set.of(sourceNamespace)); + drConfig.setState(State.Replicating); drConfig.getActiveXClusterConfig().setStatus(XClusterConfigStatusType.Running); - drConfig.getActiveXClusterConfig().update(); + drConfig.update(); UUID taskUUID = buildTaskInfo(null, TaskType.FailoverDrConfig); when(mockCommissioner.submit(any(), any())).thenReturn(taskUUID); @@ -654,6 +662,7 @@ public void testDbScopedReplicaReplacement() { new BootstrapBackupParams(), new PitrParams(), Set.of("sourceNamespace"))); + drConfig.setState(State.Replicating); drConfig.update(); UUID taskUUID = buildTaskInfo(null, TaskType.EditDrConfig); when(mockCommissioner.submit(any(), any())).thenReturn(taskUUID); diff --git a/managed/src/test/java/com/yugabyte/yw/controllers/MetaMasterControllerTest.java b/managed/src/test/java/com/yugabyte/yw/controllers/MetaMasterControllerTest.java index ba89a392a19c..e2b4fc38c0ef 100644 --- a/managed/src/test/java/com/yugabyte/yw/controllers/MetaMasterControllerTest.java +++ b/managed/src/test/java/com/yugabyte/yw/controllers/MetaMasterControllerTest.java @@ -34,6 +34,7 @@ import com.yugabyte.yw.models.Provider; import com.yugabyte.yw.models.Universe; import com.yugabyte.yw.models.Users; +import java.util.Arrays; import java.util.HashSet; import java.util.Map; import java.util.Set; @@ -157,7 +158,7 @@ public void testRedisGetWithValidUniverse() { public void testServerAddressForKuberenetesServiceFailure() { Universe universe = getKubernetesUniverse(false); when(mockKubernetesManager.getPreferredServiceIP( - any(), anyString(), anyString(), anyBoolean(), anyBoolean())) + any(), anyString(), anyString(), anyBoolean(), anyBoolean(), anyString())) .thenReturn(null); endpointPort.forEach( @@ -186,8 +187,8 @@ public void testServerAddressForKuberenetesServiceFailure() { public void testServerAddressForKuberenetesServiceWithPodIP() { Universe universe = getKubernetesUniverse(false); when(mockKubernetesManager.getPreferredServiceIP( - any(), anyString(), anyString(), anyBoolean(), anyBoolean())) - .thenReturn("12.13.14.15"); + any(), anyString(), anyString(), anyBoolean(), anyBoolean(), anyString())) + .thenReturn(new HashSet<>(Arrays.asList("12.13.14.15"))); endpointPortYSQL.forEach( (key, value) -> { @@ -211,13 +212,16 @@ public void testServerAddressForKuberenetesServiceWithPodIP() { public void testServerAddressForKuberenetesServiceWithPodIPMultiCluster() { Universe universe = getKubernetesUniverse(true); when(mockKubernetesManager.getPreferredServiceIP( - any(), anyString(), anyString(), anyBoolean(), anyBoolean())) - .thenReturn("12.13.14.15"); + any(), anyString(), anyString(), anyBoolean(), anyBoolean(), anyString())) + .thenReturn(new HashSet<>(Arrays.asList("12.13.14.15", "12.13.14.16"))); endpointPort.forEach( (key, value) -> { String expectedHostString = "12.13.14.15:" + value; - String completeString = String.format("%s,%s", expectedHostString, expectedHostString); + String expectedHostString_2 = "12.13.14.16:" + value; + String completeString = String.format("%s,%s", expectedHostString_2, expectedHostString); + String completeString_2 = + String.format("%s,%s", expectedHostString, expectedHostString_2); Result r = route( fakeRequest( @@ -228,7 +232,8 @@ public void testServerAddressForKuberenetesServiceWithPodIPMultiCluster() { + universe.getUniverseUUID() + key)); JsonNode json = Json.parse(contentAsString(r)); - assertEquals(completeString, json.asText()); + assertTrue( + completeString.equals(json.asText()) || completeString_2.equals(json.asText())); }); assertAuditEntry(0, defaultCustomer.getUuid()); } @@ -237,8 +242,8 @@ public void testServerAddressForKuberenetesServiceWithPodIPMultiCluster() { public void testServerAddressForKuberenetesServiceWithPodAndLoadBalancerIP() { Universe universe = getKubernetesUniverse(false); when(mockKubernetesManager.getPreferredServiceIP( - any(), anyString(), anyString(), anyBoolean(), anyBoolean())) - .thenReturn("56.78.90.1"); + any(), anyString(), anyString(), anyBoolean(), anyBoolean(), anyString())) + .thenReturn(new HashSet<>(Arrays.asList("56.78.90.1"))); endpointPort.forEach( (key, value) -> { @@ -262,8 +267,8 @@ public void testServerAddressForKuberenetesServiceWithPodAndLoadBalancerIP() { public void testServerAddressForKuberenetesServiceWithPodAndLoadBalancerHostname() { Universe universe = getKubernetesUniverse(false); when(mockKubernetesManager.getPreferredServiceIP( - any(), anyString(), anyString(), anyBoolean(), anyBoolean())) - .thenReturn("loadbalancer.hostname"); + any(), anyString(), anyString(), anyBoolean(), anyBoolean(), anyString())) + .thenReturn(new HashSet<>(Arrays.asList("loadbalancer.hostname"))); endpointPort.forEach( (key, value) -> { @@ -287,8 +292,8 @@ public void testServerAddressForKuberenetesServiceWithPodAndLoadBalancerHostname public void testServerAddressForKuberenetesServiceWithPodAndLoadBalancerIpAndHostname() { Universe universe = getKubernetesUniverse(false); when(mockKubernetesManager.getPreferredServiceIP( - any(), anyString(), anyString(), anyBoolean(), anyBoolean())) - .thenReturn("loadbalancer.hostname"); + any(), anyString(), anyString(), anyBoolean(), anyBoolean(), anyString())) + .thenReturn(new HashSet<>(Arrays.asList("loadbalancer.hostname"))); endpointPort.forEach( (key, value) -> { diff --git a/managed/src/test/java/com/yugabyte/yw/controllers/UniverseCreateControllerTestBase.java b/managed/src/test/java/com/yugabyte/yw/controllers/UniverseCreateControllerTestBase.java index 75faea42665c..77ba88112073 100644 --- a/managed/src/test/java/com/yugabyte/yw/controllers/UniverseCreateControllerTestBase.java +++ b/managed/src/test/java/com/yugabyte/yw/controllers/UniverseCreateControllerTestBase.java @@ -10,6 +10,7 @@ package com.yugabyte.yw.controllers; +import static com.yugabyte.yw.commissioner.Common.CloudType.kubernetes; import static com.yugabyte.yw.common.ApiUtils.getTestUserIntent; import static com.yugabyte.yw.common.AssertHelper.assertAuditEntry; import static com.yugabyte.yw.common.AssertHelper.assertBadRequest; @@ -29,6 +30,7 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyMap; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.anyMap; import static org.mockito.Mockito.times; @@ -61,6 +63,7 @@ import com.yugabyte.yw.models.Provider; import com.yugabyte.yw.models.Region; import com.yugabyte.yw.models.Universe; +import com.yugabyte.yw.models.helpers.CloudInfoInterface; import com.yugabyte.yw.models.helpers.CloudSpecificInfo; import com.yugabyte.yw.models.helpers.DeviceInfo; import com.yugabyte.yw.models.helpers.NodeDetails; @@ -70,8 +73,10 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.UUID; import junitparams.JUnitParamsRunner; import junitparams.Parameters; @@ -576,6 +581,8 @@ public void testK8sUniverseCreateOneClusterPerNamespacedProviderFailure() { // @formatter:on public void testK8sUniverseCreateNewHelmNaming(String ybVersion, boolean newNamingStyle) { when(mockRuntimeConfig.getBoolean("yb.use_new_helm_naming")).thenReturn(true); + when(mockRuntimeConfig.getString("yb.universe.default_service_scope_for_k8s")) + .thenReturn("Namespaced"); ArgumentCaptor expectedTaskParams = ArgumentCaptor.forClass(UniverseDefinitionTaskParams.class); UUID fakeTaskUUID = FakeDBApplication.buildTaskInfo(null, TaskType.CreateUniverse); @@ -594,6 +601,10 @@ public void testK8sUniverseCreateNewHelmNaming(String ybVersion, boolean newNami Provider p = ModelFactory.kubernetesProvider(customer); Region r = Region.create(p, "region-1", "PlacementRegion 1", "default-image"); AvailabilityZone.createOrThrow(r, "az-1", "PlacementAZ 1", "subnet-1"); + Map config = new HashMap<>(); + config.put("KUBECONFIG", "xyz"); + CloudInfoInterface.setCloudProviderInfoFromConfig(p, config); + p.save(); InstanceType i = InstanceType.upsert(p.getUuid(), "small", 10, 5.5, new InstanceType.InstanceTypeDetails()); @@ -727,6 +738,12 @@ public void testUniverseCreateDeviceInfoValidation( Region r = Region.create(p, "region-1", "PlacementRegion 1", "default-image"); AvailabilityZone az1 = AvailabilityZone.createOrThrow(r, "az-1", "PlacementAZ 1", "subnet-1"); AvailabilityZone.createOrThrow(r, "az-2", "PlacementAZ 2", "subnet-2"); + if (cloudType == kubernetes) { + Map config = new HashMap<>(); + config.put("KUBECONFIG", "xyz"); + CloudInfoInterface.setCloudProviderInfoFromConfig(p, config); + p.save(); + } InstanceType i = InstanceType.upsert( p.getUuid(), instanceType, 10, 5.5, new InstanceType.InstanceTypeDetails()); diff --git a/managed/src/test/java/com/yugabyte/yw/models/ScheduleTest.java b/managed/src/test/java/com/yugabyte/yw/models/ScheduleTest.java index 8fcfe8bed5f6..87a6fcf47ae1 100644 --- a/managed/src/test/java/com/yugabyte/yw/models/ScheduleTest.java +++ b/managed/src/test/java/com/yugabyte/yw/models/ScheduleTest.java @@ -131,13 +131,14 @@ public void testUpdateNewBackupScheduleTimeAndStatusAndSave() { BackupRequestParams params = Json.fromJson(s1.getTaskParams(), BackupRequestParams.class); params.schedulingFrequency = 1200000L; params.frequencyTimeUnit = TimeUnit.MILLISECONDS; - s1 = - Schedule.updateNewBackupScheduleTimeAndStatusAndSave( - defaultCustomer.getUuid(), s1.getScheduleUUID(), State.Editing, params); - assertEquals(s1.getFrequency(), 1200000L); - assertEquals(s1.getStatus(), State.Editing); - assertEquals(s1.getFrequencyTimeUnit(), TimeUnit.MILLISECONDS); - assertNotEquals(s1.getNextScheduleTaskTime(), nextScheduleTimeInitial); + Schedule.updateNewBackupScheduleTimeAndStatusAndSave( + defaultCustomer.getUuid(), s1.getScheduleUUID(), State.Editing, params); + Schedule updatedSchedule = + Schedule.getOrBadRequest(defaultCustomer.getUuid(), s1.getScheduleUUID()); + assertEquals(updatedSchedule.getFrequency(), 1200000L); + assertEquals(updatedSchedule.getStatus(), State.Editing); + assertEquals(updatedSchedule.getFrequencyTimeUnit(), TimeUnit.MILLISECONDS); + assertNotEquals(updatedSchedule.getNextScheduleTaskTime(), nextScheduleTimeInitial); } @Test @@ -146,10 +147,10 @@ public void testUpdateStatus() { ModelFactory.createScheduleBackup( defaultCustomer.getUuid(), UUID.randomUUID(), s3StorageConfig.getConfigUUID()); assertEquals(s1.getStatus(), State.Active); - s1 = + Schedule updatedSchedule = Schedule.updateStatusAndSave( defaultCustomer.getUuid(), s1.getScheduleUUID(), State.Editing); - assertEquals(s1.getStatus(), State.Editing); + assertEquals(updatedSchedule.getStatus(), State.Editing); } @Test @@ -159,10 +160,10 @@ public void testUpdateStatusFail() { defaultCustomer.getUuid(), UUID.randomUUID(), s3StorageConfig.getConfigUUID()); UUID scheduleUUID = s1.getScheduleUUID(); assertEquals(s1.getStatus(), State.Active); - s1 = + Schedule updatedSchedule = Schedule.updateStatusAndSave( defaultCustomer.getUuid(), s1.getScheduleUUID(), State.Editing); - assertEquals(s1.getStatus(), State.Editing); + assertEquals(updatedSchedule.getStatus(), State.Editing); RuntimeException ex = assertThrows( RuntimeException.class, diff --git a/managed/ui/package-lock.json b/managed/ui/package-lock.json index 6d05e84adf0c..62493912dad0 100644 --- a/managed/ui/package-lock.json +++ b/managed/ui/package-lock.json @@ -51,6 +51,7 @@ "prismjs": "1.29.0", "progressbar.js": "1.1.0", "prop-types": "15.7.2", + "rc-time-picker": "3.7.3", "react": "17.0.2", "react-ace": "9.4.4", "react-beautiful-dnd": "13.1.1", @@ -64,6 +65,7 @@ "react-fa": "5.0.0", "react-hook-form": "7.40.0", "react-i18next": "11.18.6", + "react-infinite-scroll-component": "6.1.0", "react-intl": "2.9.0", "react-leaflet": "^1.9.1", "react-measure": "1.4.7", @@ -10097,6 +10099,14 @@ "node": ">=0.4.0" } }, + "node_modules/add-dom-event-listener": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/add-dom-event-listener/-/add-dom-event-listener-1.1.0.tgz", + "integrity": "sha512-WCxx1ixHT0GQU9hb0KI/mhgRQhnU+U3GvwY6ZvVjYq8rsihIGoaIOUbY0yMPBxLH5MDtr0kz3fisWGNcbWW7Jw==", + "dependencies": { + "object-assign": "4.x" + } + }, "node_modules/add-line-numbers": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/add-line-numbers/-/add-line-numbers-1.0.1.tgz", @@ -13092,11 +13102,24 @@ "compare-cell": "^1.0.0" } }, + "node_modules/component-classes": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/component-classes/-/component-classes-1.2.6.tgz", + "integrity": "sha512-hPFGULxdwugu1QWW3SvVOCUHLzO34+a2J6Wqy0c5ASQkfi9/8nZcBB0ZohaEbXOQlCflMAEMmEWk7u7BVs4koA==", + "dependencies": { + "component-indexof": "0.0.3" + } + }, "node_modules/component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, + "node_modules/component-indexof": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-indexof/-/component-indexof-0.0.3.tgz", + "integrity": "sha512-puDQKvx/64HZXb4hBwIcvQLaLgux8o1CbWl39s41hrIIZDl1lJiD5jc22gj3RBeGK0ovxALDYpIbyjqDUUl0rw==" + }, "node_modules/compose-function": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", @@ -13531,6 +13554,15 @@ "source-map-resolve": "^0.6.0" } }, + "node_modules/css-animation": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/css-animation/-/css-animation-1.6.1.tgz", + "integrity": "sha512-/48+/BaEaHRY6kNQ2OIPzKf9A6g8WjZYjhiNDNuIVbsm5tXCGIAsHDjB4Xu1C4vXJtUWZo26O68OQkDpNBaPog==", + "dependencies": { + "babel-runtime": "6.x", + "component-classes": "^1.2.5" + } + }, "node_modules/css-blank-pseudo": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz", @@ -14901,6 +14933,11 @@ "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", "dev": true }, + "node_modules/dom-align": { + "version": "1.12.4", + "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.12.4.tgz", + "integrity": "sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw==" + }, "node_modules/dom-converter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", @@ -29585,6 +29622,75 @@ "rc": "cli.js" } }, + "node_modules/rc-align": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-2.4.5.tgz", + "integrity": "sha512-nv9wYUYdfyfK+qskThf4BQUSIadeI/dCsfaMZfNEoxm9HwOIioQ+LyqmMK6jWHAZQgOzMLaqawhuBXlF63vgjw==", + "dependencies": { + "babel-runtime": "^6.26.0", + "dom-align": "^1.7.0", + "prop-types": "^15.5.8", + "rc-util": "^4.0.4" + } + }, + "node_modules/rc-animate": { + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/rc-animate/-/rc-animate-2.11.1.tgz", + "integrity": "sha512-1NyuCGFJG/0Y+9RKh5y/i/AalUCA51opyyS/jO2seELpgymZm2u9QV3xwODwEuzkmeQ1BDPxMLmYLcTJedPlkQ==", + "dependencies": { + "babel-runtime": "6.x", + "classnames": "^2.2.6", + "css-animation": "^1.3.2", + "prop-types": "15.x", + "raf": "^3.4.0", + "rc-util": "^4.15.3", + "react-lifecycles-compat": "^3.0.4" + } + }, + "node_modules/rc-time-picker": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/rc-time-picker/-/rc-time-picker-3.7.3.tgz", + "integrity": "sha512-Lv1Mvzp9fRXhXEnRLO4nW6GLNxUkfAZ3RsiIBsWjGjXXvMNjdr4BX/ayElHAFK0DoJqOhm7c5tjmIYpEOwcUXg==", + "dependencies": { + "classnames": "2.x", + "moment": "2.x", + "prop-types": "^15.5.8", + "raf": "^3.4.1", + "rc-trigger": "^2.2.0", + "react-lifecycles-compat": "^3.0.4" + } + }, + "node_modules/rc-trigger": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-2.6.5.tgz", + "integrity": "sha512-m6Cts9hLeZWsTvWnuMm7oElhf+03GOjOLfTuU0QmdB9ZrW7jR2IpI5rpNM7i9MvAAlMAmTx5Zr7g3uu/aMvZAw==", + "dependencies": { + "babel-runtime": "6.x", + "classnames": "^2.2.6", + "prop-types": "15.x", + "rc-align": "^2.4.0", + "rc-animate": "2.x", + "rc-util": "^4.4.0", + "react-lifecycles-compat": "^3.0.4" + } + }, + "node_modules/rc-util": { + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-4.21.1.tgz", + "integrity": "sha512-Z+vlkSQVc1l8O2UjR3WQ+XdWlhj5q9BMQNLk2iOBch75CqPfrJyGtcWMcnhRlNuDu0Ndtt4kLVO8JI8BrABobg==", + "dependencies": { + "add-dom-event-listener": "^1.1.0", + "prop-types": "^15.5.10", + "react-is": "^16.12.0", + "react-lifecycles-compat": "^3.0.4", + "shallowequal": "^1.1.0" + } + }, + "node_modules/rc-util/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", @@ -30273,6 +30379,25 @@ } } }, + "node_modules/react-infinite-scroll-component": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/react-infinite-scroll-component/-/react-infinite-scroll-component-6.1.0.tgz", + "integrity": "sha512-SQu5nCqy8DxQWpnUVLx7V7b7LcA37aM7tvoWjTLZp1dk6EJibM5/4EJKzOnl07/BsM1Y40sKLuqjCwwH/xV0TQ==", + "dependencies": { + "throttle-debounce": "^2.1.0" + }, + "peerDependencies": { + "react": ">=16.0.0" + } + }, + "node_modules/react-infinite-scroll-component/node_modules/throttle-debounce": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-2.3.0.tgz", + "integrity": "sha512-H7oLPV0P7+jgvrk+6mwwwBDmxTaxnu9HMXmloNLXwnNO0ZxZ31Orah2n8lU1eMPvsaowP2CX+USCgyovXfdOFQ==", + "engines": { + "node": ">=8" + } + }, "node_modules/react-input-autosize": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/react-input-autosize/-/react-input-autosize-3.0.0.tgz", @@ -33986,6 +34111,11 @@ "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==" }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -48141,6 +48271,14 @@ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" }, + "add-dom-event-listener": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/add-dom-event-listener/-/add-dom-event-listener-1.1.0.tgz", + "integrity": "sha512-WCxx1ixHT0GQU9hb0KI/mhgRQhnU+U3GvwY6ZvVjYq8rsihIGoaIOUbY0yMPBxLH5MDtr0kz3fisWGNcbWW7Jw==", + "requires": { + "object-assign": "4.x" + } + }, "add-line-numbers": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/add-line-numbers/-/add-line-numbers-1.0.1.tgz", @@ -50521,11 +50659,24 @@ "compare-cell": "^1.0.0" } }, + "component-classes": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/component-classes/-/component-classes-1.2.6.tgz", + "integrity": "sha512-hPFGULxdwugu1QWW3SvVOCUHLzO34+a2J6Wqy0c5ASQkfi9/8nZcBB0ZohaEbXOQlCflMAEMmEWk7u7BVs4koA==", + "requires": { + "component-indexof": "0.0.3" + } + }, "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, + "component-indexof": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-indexof/-/component-indexof-0.0.3.tgz", + "integrity": "sha512-puDQKvx/64HZXb4hBwIcvQLaLgux8o1CbWl39s41hrIIZDl1lJiD5jc22gj3RBeGK0ovxALDYpIbyjqDUUl0rw==" + }, "compose-function": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", @@ -50898,6 +51049,15 @@ "source-map-resolve": "^0.6.0" } }, + "css-animation": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/css-animation/-/css-animation-1.6.1.tgz", + "integrity": "sha512-/48+/BaEaHRY6kNQ2OIPzKf9A6g8WjZYjhiNDNuIVbsm5tXCGIAsHDjB4Xu1C4vXJtUWZo26O68OQkDpNBaPog==", + "requires": { + "babel-runtime": "6.x", + "component-classes": "^1.2.5" + } + }, "css-blank-pseudo": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz", @@ -52002,6 +52162,11 @@ "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", "dev": true }, + "dom-align": { + "version": "1.12.4", + "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.12.4.tgz", + "integrity": "sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw==" + }, "dom-converter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", @@ -63842,6 +64007,77 @@ } } }, + "rc-align": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-2.4.5.tgz", + "integrity": "sha512-nv9wYUYdfyfK+qskThf4BQUSIadeI/dCsfaMZfNEoxm9HwOIioQ+LyqmMK6jWHAZQgOzMLaqawhuBXlF63vgjw==", + "requires": { + "babel-runtime": "^6.26.0", + "dom-align": "^1.7.0", + "prop-types": "^15.5.8", + "rc-util": "^4.0.4" + } + }, + "rc-animate": { + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/rc-animate/-/rc-animate-2.11.1.tgz", + "integrity": "sha512-1NyuCGFJG/0Y+9RKh5y/i/AalUCA51opyyS/jO2seELpgymZm2u9QV3xwODwEuzkmeQ1BDPxMLmYLcTJedPlkQ==", + "requires": { + "babel-runtime": "6.x", + "classnames": "^2.2.6", + "css-animation": "^1.3.2", + "prop-types": "15.x", + "raf": "^3.4.0", + "rc-util": "^4.15.3", + "react-lifecycles-compat": "^3.0.4" + } + }, + "rc-time-picker": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/rc-time-picker/-/rc-time-picker-3.7.3.tgz", + "integrity": "sha512-Lv1Mvzp9fRXhXEnRLO4nW6GLNxUkfAZ3RsiIBsWjGjXXvMNjdr4BX/ayElHAFK0DoJqOhm7c5tjmIYpEOwcUXg==", + "requires": { + "classnames": "2.x", + "moment": "2.x", + "prop-types": "^15.5.8", + "raf": "^3.4.1", + "rc-trigger": "^2.2.0", + "react-lifecycles-compat": "^3.0.4" + } + }, + "rc-trigger": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-2.6.5.tgz", + "integrity": "sha512-m6Cts9hLeZWsTvWnuMm7oElhf+03GOjOLfTuU0QmdB9ZrW7jR2IpI5rpNM7i9MvAAlMAmTx5Zr7g3uu/aMvZAw==", + "requires": { + "babel-runtime": "6.x", + "classnames": "^2.2.6", + "prop-types": "15.x", + "rc-align": "^2.4.0", + "rc-animate": "2.x", + "rc-util": "^4.4.0", + "react-lifecycles-compat": "^3.0.4" + } + }, + "rc-util": { + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-4.21.1.tgz", + "integrity": "sha512-Z+vlkSQVc1l8O2UjR3WQ+XdWlhj5q9BMQNLk2iOBch75CqPfrJyGtcWMcnhRlNuDu0Ndtt4kLVO8JI8BrABobg==", + "requires": { + "add-dom-event-listener": "^1.1.0", + "prop-types": "^15.5.10", + "react-is": "^16.12.0", + "react-lifecycles-compat": "^3.0.4", + "shallowequal": "^1.1.0" + }, + "dependencies": { + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + } + } + }, "react": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", @@ -64362,6 +64598,21 @@ "html-parse-stringify": "^3.0.1" } }, + "react-infinite-scroll-component": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/react-infinite-scroll-component/-/react-infinite-scroll-component-6.1.0.tgz", + "integrity": "sha512-SQu5nCqy8DxQWpnUVLx7V7b7LcA37aM7tvoWjTLZp1dk6EJibM5/4EJKzOnl07/BsM1Y40sKLuqjCwwH/xV0TQ==", + "requires": { + "throttle-debounce": "^2.1.0" + }, + "dependencies": { + "throttle-debounce": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-2.3.0.tgz", + "integrity": "sha512-H7oLPV0P7+jgvrk+6mwwwBDmxTaxnu9HMXmloNLXwnNO0ZxZ31Orah2n8lU1eMPvsaowP2CX+USCgyovXfdOFQ==" + } + } + }, "react-input-autosize": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/react-input-autosize/-/react-input-autosize-3.0.0.tgz", @@ -67201,6 +67452,11 @@ "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==" }, + "shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", diff --git a/managed/ui/package.json b/managed/ui/package.json index a25863493ac2..a0e3502f2255 100644 --- a/managed/ui/package.json +++ b/managed/ui/package.json @@ -105,6 +105,7 @@ "prismjs": "1.29.0", "progressbar.js": "1.1.0", "prop-types": "15.7.2", + "rc-time-picker": "3.7.3", "react": "17.0.2", "react-ace": "9.4.4", "react-beautiful-dnd": "13.1.1", @@ -118,6 +119,7 @@ "react-fa": "5.0.0", "react-hook-form": "7.40.0", "react-i18next": "11.18.6", + "react-infinite-scroll-component": "6.1.0", "react-intl": "2.9.0", "react-leaflet": "^1.9.1", "react-measure": "1.4.7", diff --git a/managed/ui/src/components/backupv2/common/IBackup.ts b/managed/ui/src/components/backupv2/common/IBackup.ts index 5fa927af9e74..b68ae00364b8 100644 --- a/managed/ui/src/components/backupv2/common/IBackup.ts +++ b/managed/ui/src/components/backupv2/common/IBackup.ts @@ -43,7 +43,11 @@ export interface Keyspace_Table { storageLocation?: string; defaultLocation?: string; tableNameList?: string[]; - tableUUIDList?: string[] + tableUUIDList?: string[]; + backupPointInTimeRestoreWindow?: { + timestampRetentionWindowStartMillis?: number; + timestampRetentionWindowEndMillis?: number; + } } export interface ICommonBackupInfo { diff --git a/managed/ui/src/components/backupv2/common/IBackupSchedule.ts b/managed/ui/src/components/backupv2/common/IBackupSchedule.ts index 7552f555ca19..f97deecf1458 100644 --- a/managed/ui/src/components/backupv2/common/IBackupSchedule.ts +++ b/managed/ui/src/components/backupv2/common/IBackupSchedule.ts @@ -28,6 +28,7 @@ interface ScheduleTaskParams { keyspaceList: IBackup['commonBackupInfo']['responseList']; isTableByTableBackup: IBackup['isTableByTableBackup'] expiryTimeUnit: string; + pointInTimeRestoreEnabled?: boolean; } export enum IBackupScheduleStatus { diff --git a/managed/ui/src/components/backupv2/components/BackupList.tsx b/managed/ui/src/components/backupv2/components/BackupList.tsx index be730ccef717..65ad4359ed98 100644 --- a/managed/ui/src/components/backupv2/components/BackupList.tsx +++ b/managed/ui/src/components/backupv2/components/BackupList.tsx @@ -32,6 +32,8 @@ import { } from '../common/BackupUtils'; import { BackupCancelModal, BackupDeleteModal } from './BackupDeleteModal'; import { BackupRestoreModal } from './BackupRestoreModal'; +import { default as BackupRestoreModalWithPITR } from '../../../redesign/features/backup/restore/BackupRestoreModal'; +import BackupRestoreNewModal from './restore/BackupRestoreNewModal'; import { YBSearchInput } from '../../common/forms/fields/YBSearchInput'; import { BackupCreateModal } from './BackupCreateModal'; import { useSearchParam } from 'react-use'; @@ -44,7 +46,6 @@ import { find } from 'lodash'; import { fetchTablesInUniverse } from '../../../actions/xClusterReplication'; import { AllowedTasks, TableTypeLabel } from '../../../redesign/helpers/dtos'; import { ybFormatDate } from '../../../redesign/helpers/DateUtils'; -import BackupRestoreNewModal from './restore/BackupRestoreNewModal'; import { RbacValidator, customPermValidateFunction, @@ -55,7 +56,6 @@ import { Action, Resource } from '../../../redesign/features/rbac'; import { TaskDetailSimpleComp } from '../../../redesign/features/tasks/components/TaskDetailSimpleComp'; import './BackupList.scss'; -import './BackupList.scss'; // eslint-disable-next-line @typescript-eslint/no-var-requires const reactWidgets = require('react-widgets'); @@ -165,6 +165,8 @@ export const BackupList: FC = ({ const isNewRestoreModalEnabled = featureFlags.test.enableNewRestoreModal || featureFlags.released.enableNewRestoreModal; + const enableBackupPITR = featureFlags.test.enableBackupPITR || featureFlags.released.enableBackupPITR; + const timeReducer = (_state: TIME_RANGE_STATE, action: OptionTypeBase) => { if (action.label === 'Custom') { return { startTime: customStartTime, endTime: customEndTime, label: action.label }; @@ -781,16 +783,32 @@ export const BackupList: FC = ({ } /> {isNewRestoreModalEnabled && restoreDetails && ( - { - setRestoreDetails(null); - setRestoreEntireBackup(false); - setIncrementalBackupsProps({}); - }} - incrementalBackupProps={incrementalBackupProps} - /> + + !enableBackupPITR ? ( + { + setRestoreDetails(null); + setRestoreEntireBackup(false); + setIncrementalBackupsProps({}); + }} + incrementalBackupProps={incrementalBackupProps} + /> + ) : ( + { + setRestoreDetails(null); + setRestoreEntireBackup(false); + setIncrementalBackupsProps({}); + }} + visible={true} + incrementalBackupProps={incrementalBackupProps} + + /> + ) + )} ); diff --git a/managed/ui/src/components/xcluster/ReplicationUtils.tsx b/managed/ui/src/components/xcluster/ReplicationUtils.tsx index 426db4394ad9..f7b50ec5ddb2 100644 --- a/managed/ui/src/components/xcluster/ReplicationUtils.tsx +++ b/managed/ui/src/components/xcluster/ReplicationUtils.tsx @@ -480,6 +480,7 @@ export const getEnabledConfigActions = ( switch (status) { case XClusterConfigStatus.INITIALIZED: case XClusterConfigStatus.UPDATING: + case XClusterConfigStatus.DRAINED_DATA: return [XClusterConfigAction.DELETE, XClusterConfigAction.RESTART]; case XClusterConfigStatus.RUNNING: return [ diff --git a/managed/ui/src/components/xcluster/XClusterConfigStatusLabel.tsx b/managed/ui/src/components/xcluster/XClusterConfigStatusLabel.tsx index 6b80a906a9e2..85855a9d4345 100644 --- a/managed/ui/src/components/xcluster/XClusterConfigStatusLabel.tsx +++ b/managed/ui/src/components/xcluster/XClusterConfigStatusLabel.tsx @@ -43,6 +43,12 @@ const DELETION_FAILED_LABEL = ( Deletion Failed ); +const DRAINED_DATA_LABEL = ( + + + Drained Data + +); const useSelectStyles = makeStyles((theme) => ({ pillContainer: { @@ -89,6 +95,9 @@ export const XClusterConfigStatusLabel = ({ xClusterConfig }: XClusterConfigStat ); break; } + case XClusterConfigStatus.DRAINED_DATA: + statusLabel.push(DRAINED_DATA_LABEL); + break; default: return assertUnreachableCase(xClusterConfig.status); } diff --git a/managed/ui/src/components/xcluster/constants.ts b/managed/ui/src/components/xcluster/constants.ts index 89f6766632cb..9e94620fe2e1 100644 --- a/managed/ui/src/components/xcluster/constants.ts +++ b/managed/ui/src/components/xcluster/constants.ts @@ -9,7 +9,8 @@ export const XClusterConfigStatus = { UPDATING: 'Updating', DELETED_UNIVERSE: 'DeletedUniverse', DELETION_FAILED: 'DeletionFailed', - FAILED: 'Failed' + FAILED: 'Failed', + DRAINED_DATA: 'DrainedData' } as const; export type XClusterConfigStatus = typeof XClusterConfigStatus[keyof typeof XClusterConfigStatus]; diff --git a/managed/ui/src/redesign/components/YBTimePicker/YBTimePicker.tsx b/managed/ui/src/redesign/components/YBTimePicker/YBTimePicker.tsx new file mode 100644 index 000000000000..0aee03848449 --- /dev/null +++ b/managed/ui/src/redesign/components/YBTimePicker/YBTimePicker.tsx @@ -0,0 +1,53 @@ +import { useState, ReactElement, ReactNode } from 'react'; +import { Moment } from 'moment'; +import TimePicker, { TimePickerProps } from 'rc-time-picker'; + +import { FieldValues, useController, UseControllerProps } from 'react-hook-form'; +import { + InputLabel, + makeStyles +} from '@material-ui/core'; +import 'rc-time-picker/assets/index.css'; + +const useStyles = makeStyles((theme) => ({ + inputWithCursorPointer: { + '& .rc-time-picker-input': { + cursor: 'pointer', + height: '42px', + borderRadius: '8px', + fontSize: theme.typography.body1.fontSize, + fontWeight: theme.typography.body2.fontWeight, + color: 'inherit' + } + } +})); + +export type YBTimePickerPropsInput = { tooltip?: ReactNode; label?: string } & TimePickerProps; + +type YBTimePickerProps = UseControllerProps & YBTimePickerPropsInput; + +export const YBTimePicker = (props: YBTimePickerProps): ReactElement => { + const { name, rules, defaultValue, control, label, shouldUnregister } = props; + const classes = useStyles(); + const { + field: { ref, value, ...fieldProps } + } = useController({ name, rules, defaultValue, control, shouldUnregister }); + const [selectedDate, setSelectedDate] = useState((value as unknown) as Moment); + const handleDateChange = (date: Moment | undefined) => { + setSelectedDate(date); + fieldProps.onChange(date); + }; + + return ( + <> + {label} + + + ); +}; diff --git a/managed/ui/src/redesign/features/backup/restore/BackupRestoreModal.tsx b/managed/ui/src/redesign/features/backup/restore/BackupRestoreModal.tsx new file mode 100644 index 000000000000..58c176308fbe --- /dev/null +++ b/managed/ui/src/redesign/features/backup/restore/BackupRestoreModal.tsx @@ -0,0 +1,193 @@ +/* + * Created on Mon Aug 19 2024 + * + * Copyright 2021 YugaByte, Inc. and Contributors + * Licensed under the Polyform Free Trial License 1.0.0 (the "License") + * You may not use this file except in compliance with the License. You may obtain a copy of the License at + * http://github.com/YugaByte/yugabyte-db/blob/master/licenses/POLYFORM-FREE-TRIAL-LICENSE-1.0.0.txt + */ + +import { FC, useRef } from 'react'; +import { useMethods, useMount } from 'react-use'; +import { useTranslation } from 'react-i18next'; +import { FormProvider, useForm } from 'react-hook-form'; +import { makeStyles } from '@material-ui/core'; +import { YBButton, YBModal } from '../../../components'; +import { + defaultRestoreFormValues, + initialRestoreContextState, + Page, + PageRef, + RestoreContext, + RestoreFormContext, + restoreMethods +} from './models/RestoreContext'; +import RestoreSummary from './pages/RestoreSummary'; +import { YBStepper } from '../../../components/YBStepper/YBStepper'; +import SwitchRestorePages from './SwitchRestorePages'; +import { validationSchemaResolver } from './ValidationSchemaResolver'; +import { RestoreFormModel } from './models/RestoreFormModel'; +import { IBackup } from '../../../../components/backupv2'; +import { IncrementalBackupProps } from '../../../../components/backupv2/components/BackupDetails'; + +const useStyles = makeStyles((theme) => ({ + root: { + display: 'flex', + height: '100%', + '& .MuiFormLabel-root': { + fontSize: '13px', + textTransform: 'capitalize', + color: theme.palette.ybacolors.labelBackground, + fontWeight: 700, + marginBottom: '16px' + } + }, + modalRoot: { + padding: 0 + }, + configs: { + width: '800px' + }, + summary: { + width: 'fit-content', + flexGrow: 1 + }, + stepper: { + padding: '16px 24px', + borderBottom: `1px solid ${theme.palette.ybacolors.ybBorderGray}` + }, + '@global': { + '.Toastify__toast-container': { + zIndex: 100000 + } + } +})); + +type BackupRestoreNewModalProps = { + backupDetails: IBackup; + visible: boolean; + onHide: () => void; + incrementalBackupProps?: IncrementalBackupProps; +}; + +const BackupRestoreModal: FC = ({ visible, backupDetails, incrementalBackupProps, onHide }) => { + const classes = useStyles(); + + const { t } = useTranslation('translation', { + keyPrefix: 'backup.restore' + }); + + const currentPageRef = useRef(null); + + const restoreContextData = useMethods(restoreMethods, initialRestoreContextState); + + const [ + { + formProps: { disableSubmit, currentPage, isSubmitting, submitLabel } + }, + { setBackupDetails, setIncrementalBackupProps } + ] = restoreContextData; + + const formMethods = useForm({ + defaultValues: defaultRestoreFormValues, + resolver: (data) => validationSchemaResolver(restoreContextData[0], data, t) + }); + + const pages: Partial> = { + [Page.SOURCE]: t('pages.selectKeyspaceConfigs'), + [Page.TARGET]: t('pages.selectUniverse') + }; + + useMount(() => { + // save props to the context + setBackupDetails(backupDetails); + setIncrementalBackupProps(incrementalBackupProps); + }); + + const shouldRenameKeyspace = formMethods.watch('target.renameKeyspace'); + + // Add the rename keyspace page if the user has selected to rename the keyspace + if (shouldRenameKeyspace) { + pages[Page.RENAME_KEYSPACES] = t('pages.renameKeyspaces'); + } else { + delete pages[Page.RENAME_KEYSPACES]; + } + + const getCancelLabel = () => { + if ( + currentPage === Page.PREFETCH_DATA || + (currentPage === Page.SOURCE && !isSubmitting) + ) { + return undefined; + } + return isSubmitting ? t('buttonLabels.waitingMsg', { keyPrefix: 'backup' }) : t('back', { keyPrefix: 'common' }); + }; + + return ( + + { + currentPageRef.current?.onPrev(); + }, + variant: isSubmitting ? 'ghost' : 'secondary' + } + }} + size="xl" + title={t('title')} + dialogContentProps={{ + dividers: true, + className: classes.modalRoot + }} + enableBackdropDismiss + footerAccessory={ + { + onHide(); + }} + > + {t('cancel', { keyPrefix: 'common' })} + + } + submitLabel={submitLabel} + cancelLabel={getCancelLabel()} + onSubmit={() => { + currentPageRef.current?.onNext(); + }} + > + +
+
+
+ +
+ +
+
+ +
+
+
+
+
+ ); +}; + +export default BackupRestoreModal; diff --git a/managed/ui/src/redesign/features/backup/restore/RestoreUtils.tsx b/managed/ui/src/redesign/features/backup/restore/RestoreUtils.tsx new file mode 100644 index 000000000000..4cf89cb9dbaf --- /dev/null +++ b/managed/ui/src/redesign/features/backup/restore/RestoreUtils.tsx @@ -0,0 +1,99 @@ +/* + * Created on Tue Aug 27 2024 + * + * Copyright 2021 YugaByte, Inc. and Contributors + * Licensed under the Polyform Free Trial License 1.0.0 (the "License") + * You may not use this file except in compliance with the License. You may obtain a copy of the License at + * http://github.com/YugaByte/yugabyte-db/blob/master/licenses/POLYFORM-FREE-TRIAL-LICENSE-1.0.0.txt + */ + +import { find, last } from "lodash"; +import moment from "moment"; +import { useContext } from "react"; +import { Backup_States, IBackup, ICommonBackupInfo } from "../../../../components/backupv2"; +import { IncrementalBackupProps } from "../../../../components/backupv2/components/BackupDetails"; +import { ValidateRestoreApiReq } from "./api/api"; +import { RestoreContext, RestoreContextMethods, RestoreFormContext } from "./models/RestoreContext"; +import { RestoreFormModel, TimeToRestoreType } from "./models/RestoreFormModel"; + +// This function is used to determine if the user can select a time frame for the restore operation. +export const userCanSelectTimeFrame = (backupDetails: IBackup, restoreContext: RestoreContext): boolean => { + + const { additionalBackupProps } = restoreContext; + + const isPITREnabled = isPITREnabledInBackup(backupDetails.commonBackupInfo); + + if (!isPITREnabled && !backupDetails?.hasIncrementalBackups) { + return false; + } + + if (!isPITREnabled && !additionalBackupProps?.isRestoreEntireBackup) { + return false; + } + return true; +}; + + +export const prepareValidationPayload = (formValues: RestoreFormModel, restoreContext: RestoreContext): ValidateRestoreApiReq => { + const { backupDetails, restorableTables, additionalBackupProps, incrementalBackupsData } = restoreContext; + const { source, currentCommonBackupInfo } = formValues; + const { selectedTables } = source; + + if (!backupDetails) { + throw new Error("backupDetails is not defined"); + } + if (!currentCommonBackupInfo) { + throw new Error("currentCommonBackupInfo is not defined"); + } + + const isPITREnabled = isPITREnabledInBackup(currentCommonBackupInfo); + + const payload = { + backupUUID: currentCommonBackupInfo.backupUUID, + keyspaceTables: source.keyspace?.isDefaultOption ? restorableTables.filter(t => !(t as any).isDefaultOption) : [{ + keyspace: source.keyspace!.value, + tableNames: selectedTables.map(t => t.tableName) + }], + restoreToPointInTimeMillis: 0 + }; + + if (!isPITREnabled || formValues.source.timeToRestoreType === TimeToRestoreType.RECENT_BACKUP) { + return payload; + } + + payload['restoreToPointInTimeMillis'] = getMomentFromPITRMillis(source.pitrMillisOptions).valueOf(); + + return payload; + +}; + +export const getMomentFromPITRMillis = (pitrMillis: RestoreFormModel['source']['pitrMillisOptions']) => { + return moment(pitrMillis.date + " " + pitrMillis.time.format("HH:mm") + ":" + pitrMillis.secs); +}; + +export const isPITREnabledInBackup = (commonBackupInfo: ICommonBackupInfo): boolean => { + return !!commonBackupInfo.responseList[0].backupPointInTimeRestoreWindow; +}; + +export const getLastSuccessfulIncrementalBackup = (incrementalBackups: ICommonBackupInfo[]) => { + return find(incrementalBackups, { state: Backup_States.COMPLETED }); +}; + +export const getFullBackupInIncBackupChain = (incrementalBackups: ICommonBackupInfo[]) => { + return last(incrementalBackups.filter(backup => backup.state === Backup_States.COMPLETED && backup.backupUUID === backup.baseBackupUUID)); +}; + +export const getIncrementalBackupByUUID = (incrementalBackups: ICommonBackupInfo[], uuid: string) => { + return find(incrementalBackups, { backupUUID: uuid }); +}; + +export const isRestoreTriggeredFromIncBackup = (backup: IBackup, additionalBackupProps: IncrementalBackupProps) => { + return backup.hasIncrementalBackups && !additionalBackupProps?.isRestoreEntireBackup && !!additionalBackupProps.incrementalBackupUUID; +}; + +export const doesUserSelectsSingleKeyspaceToRestore = (additionalBackupProps: IncrementalBackupProps) => + !additionalBackupProps?.isRestoreEntireBackup && additionalBackupProps?.singleKeyspaceRestore; + +export function GetRestoreContext() { + return (useContext(RestoreFormContext) as unknown) as RestoreContextMethods; +}; diff --git a/managed/ui/src/redesign/features/backup/restore/SwitchRestorePages.tsx b/managed/ui/src/redesign/features/backup/restore/SwitchRestorePages.tsx new file mode 100644 index 000000000000..ab22bb73141b --- /dev/null +++ b/managed/ui/src/redesign/features/backup/restore/SwitchRestorePages.tsx @@ -0,0 +1,51 @@ +/* + * Created on Tue Sep 03 2024 + * + * Copyright 2021 YugaByte, Inc. and Contributors + * Licensed under the Polyform Free Trial License 1.0.0 (the "License") + * You may not use this file except in compliance with the License. You may obtain a copy of the License at + * http://github.com/YugaByte/yugabyte-db/blob/master/licenses/POLYFORM-FREE-TRIAL-LICENSE-1.0.0.txt + */ + +import { forwardRef, useImperativeHandle, useRef } from 'react'; +import { Page, PageRef } from './models/RestoreContext'; +import PrefetchData from './pages/Prefetch/PrefetchData'; +import RenameKeyspace from './pages/RenameKeyspace/RenameKeyspace'; +import RestoreFinal from './pages/RestoreFinal/RestoreFinal'; +import RestoreSource from './pages/RestoreSource/RestoreSource'; +import RestoreTarget from './pages/RestoreTarget/RestoreTarget'; +import { GetRestoreContext } from './RestoreUtils'; + +const SwitchRestorePages = forwardRef((_props, forwardRef) => { + const [{ formProps }] = GetRestoreContext(); + + const currentComponentRef = useRef(null); + + useImperativeHandle(forwardRef, () => currentComponentRef.current, [ + currentComponentRef.current, + formProps.currentPage + ]); + + const getCurrentComponent = () => { + switch (formProps.currentPage) { + case Page.PREFETCH_DATA: + return ; + case Page.SOURCE: + return ; + case Page.TARGET: + return ; + case Page.RENAME_KEYSPACES: + return ; + case Page.RESTORE_FINAL: + return ; + default: + return null; + } + }; + + return getCurrentComponent(); +}); + +SwitchRestorePages.displayName = 'SwitchRestorePages'; + +export default SwitchRestorePages; diff --git a/managed/ui/src/redesign/features/backup/restore/ValidationSchemaResolver.ts b/managed/ui/src/redesign/features/backup/restore/ValidationSchemaResolver.ts new file mode 100644 index 000000000000..1935b211a736 --- /dev/null +++ b/managed/ui/src/redesign/features/backup/restore/ValidationSchemaResolver.ts @@ -0,0 +1,180 @@ +/* + * Created on Thu Sep 05 2024 + * + * Copyright 2021 YugaByte, Inc. and Contributors + * Licensed under the Polyform Free Trial License 1.0.0 (the "License") + * You may not use this file except in compliance with the License. You may obtain a copy of the License at + * http://github.com/YugaByte/yugabyte-db/blob/master/licenses/POLYFORM-FREE-TRIAL-LICENSE-1.0.0.txt + */ +import * as yup from 'yup'; + +import { TFunction } from "i18next"; +import { isPITREnabledInBackup } from './RestoreUtils'; +import { KEYSPACE_VALIDATION_REGEX } from '../../../../components/backupv2/common/BackupUtils'; +import { Page, RestoreContext } from "./models/RestoreContext"; +import { RestoreFormModel } from "./models/RestoreFormModel"; +import { TableType } from '../../../helpers/dtos'; + +const keyPrefix = 'backup.restore.validationErrMsg'; + +export const validationSchemaResolver = (restoreContext: RestoreContext, formValues: RestoreFormModel, t: TFunction) => { + + const { formProps: { currentPage }, keyspacesInTargetUniverse: tablesInTargetUniverse } = restoreContext; + + let schema = yup.object(); + + switch (currentPage) { + case Page.SOURCE: + schema = getSourceValidationSchema(restoreContext, formValues, t); + break; + case Page.RENAME_KEYSPACES: + schema = getRenameKeyspaceValidationSchema(restoreContext, tablesInTargetUniverse, t); + break; + case Page.TARGET: + schema = getTargetValidationSchema(restoreContext, formValues, t); + break; + default: + throw new Error('Invalid page'); + } + + try { + schema.validateSync(formValues, { abortEarly: false }); + return { + errors: {}, + values: formValues + }; + } + catch (errors: any) { + return { + values: {}, + errors: errors.inner.reduce( + (allErrors: any, currentError: any) => ({ + ...allErrors, + [currentError.path]: { + type: currentError.type ?? "validation", + message: currentError.message, + }, + }), + {} + ) + // : { } + }; + } + +}; + + +const getSourceValidationSchema = (_restoreContext: RestoreContext, formValues: RestoreFormModel, t: TFunction) => { + const { source, currentCommonBackupInfo } = formValues; + const validationSchema = yup.object>({ + source: yup.object({ + keyspace: yup.object({ + label: yup.string().required(), + value: yup.string().required(), + isDefaultOption: yup.boolean().notRequired() + }).typeError(t('requiredField', { keyPrefix: 'common' })).required() as any, + pitrMillisOptions: yup.object({ + secs: yup.number().test('pitrMillisOptions.secs', t('pitrMillisOptions.secs', { keyPrefix }), (value: any) => { + if (!isPITREnabledInBackup(currentCommonBackupInfo!)) return true; + const secs = parseInt(value); + return secs >= 0 && secs <= 59; + }) + }) + + }) as any + }); + + return validationSchema; +}; + +const getTargetValidationSchema = (restoreContext: RestoreContext, formValues: RestoreFormModel, t: TFunction) => { + + const { preflightResponse } = restoreContext; + + const validationSchema = yup.object>({ + target: yup.object().shape({ + forceKeyspaceRename: yup.boolean(), + parallelThreads: yup.number(), + renameKeyspace: yup.boolean(), + targetUniverse: yup + .object() + .shape({ + label: yup.string(), + value: yup.string() + }) + .typeError(t('requiredField', { keyPrefix: 'common' })), + kmsConfig: yup + .object() + .nullable() + .shape({ + label: yup.string(), + value: yup.string() + }) + .test('kmsConfig', t('kmsConfigRequired', { keyPrefix }), (value) => { + if (!preflightResponse) return true; + return !preflightResponse.hasKMSHistory ? true : !!value?.value; + }) + }) as any + }); + + return validationSchema; +}; + + +export const getRenameKeyspaceValidationSchema = ( + restoreContext: RestoreContext, + tables: string[], + t: TFunction +) => { + const contxt: Record = {}; + + const { + backupDetails, + additionalBackupProps + } = restoreContext; + + const validationSchema = yup.object>({ + renamedKeyspace: yup + .array() + .min(1) + .of( + yup.object().shape({ + renamedKeyspace: yup + .string() + .matches(KEYSPACE_VALIDATION_REGEX, { + message: t('invalidKeyspaceName', { keyPrefix }), + excludeEmptyString: true + }) + .when('renamedKeyspaces', { + // check if the given name is already present in the database + // we do this for all YSQL backups, + // and for ycql, we do if it is not a single keyspace restore.(i.e) + // in single keyspace restore, user is allowed to restore a particular table on same keyspace + is: () => + backupDetails?.backupType === TableType.PGSQL_TABLE_TYPE || + !additionalBackupProps?.singleKeyspaceRestore, + then: yup + .string() + .notOneOf( + tables, + t('keyspacesAlreadyExists', { keyPrefix }) + ) + }) + // check if same name is given as input + .test( + 'Unique', + t('duplicateKeyspaceName', { keyPrefix }), + function (value) { + if (!value) return true; + if (contxt[value] !== undefined && (this.options as any)['index'] !== contxt[value]) { + return false; + } + contxt[value] = (this.options as any)['index']; + return true; + } + ) + }) + ) as any + }); + return validationSchema; +}; diff --git a/managed/ui/src/redesign/features/backup/restore/api/api.ts b/managed/ui/src/redesign/features/backup/restore/api/api.ts new file mode 100644 index 000000000000..c2db2e84a3b6 --- /dev/null +++ b/managed/ui/src/redesign/features/backup/restore/api/api.ts @@ -0,0 +1,89 @@ +/* + * Created on Tue Aug 20 2024 + * + * Copyright 2021 YugaByte, Inc. and Contributors + * Licensed under the Polyform Free Trial License 1.0.0 (the "License") + * You may not use this file except in compliance with the License. You may obtain a copy of the License at + * http://github.com/YugaByte/yugabyte-db/blob/master/licenses/POLYFORM-FREE-TRIAL-LICENSE-1.0.0.txt + */ + +import axios from 'axios'; +import { ROOT_URL } from '../../../../../config'; +import { + PerLocationBackupInfo, + PreflightResponseParams, + restoreBackupProps +} from '../../../../../components/backupv2/components/restore/api'; + +export interface RestorableTablesResp { + // List of tables that can be restored + tableNames: string[]; + // Keyspaces that can be restored + keyspace: string; +} + +// API to get the list of restorable tables +/** + * @param baseBackupUUID - UUID of the base backup + * most useful for advanced restore + */ +export const getRestorableTables = (baseBackupUUID: string) => { + const customerUUID = localStorage.getItem('customerId'); + return axios.get( + `${ROOT_URL}/customers/${customerUUID}/backups/${baseBackupUUID}/restorable_keyspace_tables` + ); +}; + +// API to validate the restorable tables +// throws error if PITR validation is failed +export interface ValidateRestoreApiReq { + backupUUID: string; + keyspaceTables: RestorableTablesResp[]; + restoreToPointInTimeMillis?: number; +} + +export const validateRestorableTables = (payload: ValidateRestoreApiReq) => { + const customerUUID = localStorage.getItem('customerId'); + return axios.post( + `${ROOT_URL}/customers/${customerUUID}/restore/validate_restorable_keyspace_tables`, + payload + ); +}; + +interface PreflightReqParams { + backupUUID: string; + keyspaceTables: RestorableTablesResp[]; + universeUUID: string; + restoreToPointInTimeMillis?: number; +} +export type PointInTimeRestoreWindow = { + timestampRetentionWindowStartMillis: number; + timestampRetentionWindowEndMillis: number; +}; +export interface PreflightResponseV2Params extends PreflightResponseParams { + perLocationBackupInfoMap: { + [key: string]: PerLocationBackupInfo & { + PointInTimeRestoreWindow: PointInTimeRestoreWindow; + }; + }; +} + +// API to get the preflight check +export const getPreflightCheck = (payload: PreflightReqParams) => { + const cUUID = localStorage.getItem('customerId'); + const requestUrl = `${ROOT_URL}/customers/${cUUID}/restore/preflight`; + return axios + .post(requestUrl, { ...payload }) + .then((resp) => resp.data); +}; + +export type RestoreV2BackupProps = restoreBackupProps & { + restoreToPointInTimeMillis?: number; +}; + +// API to restore the backup +export const restoreBackup = (payload: RestoreV2BackupProps) => { + const cUUID = localStorage.getItem('customerId'); + + return axios.post(`${ROOT_URL}/customers/${cUUID}/restore`, { ...payload, customerUUID: cUUID }); +}; diff --git a/managed/ui/src/redesign/features/backup/restore/models/RestoreContext.ts b/managed/ui/src/redesign/features/backup/restore/models/RestoreContext.ts new file mode 100644 index 000000000000..556a1e59a54e --- /dev/null +++ b/managed/ui/src/redesign/features/backup/restore/models/RestoreContext.ts @@ -0,0 +1,175 @@ +/* + * Created on Mon Aug 19 2024 + * + * Copyright 2021 YugaByte, Inc. and Contributors + * Licensed under the Polyform Free Trial License 1.0.0 (the "License") + * You may not use this file except in compliance with the License. You may obtain a copy of the License at + * http://github.com/YugaByte/yugabyte-db/blob/master/licenses/POLYFORM-FREE-TRIAL-LICENSE-1.0.0.txt + */ + +import { createContext } from 'react'; +import moment from 'moment'; +import { + Backup_Options_Type, + IBackup, + ICommonBackupInfo +} from '../../../../../components/backupv2'; +import { IncrementalBackupProps } from '../../../../../components/backupv2/components/BackupDetails'; +import { RestoreFormModel, TimeToRestoreType } from './RestoreFormModel'; +import { PreflightResponseV2Params, RestorableTablesResp } from '../api/api'; + +export enum Page { + SOURCE = 'SOURCE', + TARGET = 'TARGET', + RENAME_KEYSPACES = 'RENAME_KEYSPACES', + RESTORE_FINAL = 'RESTORE_FINAL', + PREFETCH_DATA = 'PREFETCH_DATA' +} + +export type formWizardProps = { + currentPage: Page; + submitLabel: string; // label of the ybmodal submit + disableSubmit: boolean; //disable the submit button + isSubmitting: boolean; +}; + +export type RestoreContext = { + // backup objet from the backup list / backup details page + backupDetails: IBackup | null; + // additional backup props for backup. denotes user's click action + additionalBackupProps: IncrementalBackupProps | null; + // api resp from list_increments + incrementalBackupsData: ICommonBackupInfo[] | null; + // response from restorable_keyspace_tables response + restorableTables: RestorableTablesResp[]; + // form wizard props + formProps: formWizardProps; + // preflight response + preflightResponse: PreflightResponseV2Params | null; + + keyspacesInTargetUniverse: string[]; +}; + +export const initialRestoreContextState: RestoreContext = { + backupDetails: null, + additionalBackupProps: null, + incrementalBackupsData: null, + restorableTables: [], + preflightResponse: null, + keyspacesInTargetUniverse: [], + formProps: { + currentPage: Page.PREFETCH_DATA, // default page to show + submitLabel: 'Next', + disableSubmit: false, + isSubmitting: false + } +}; + +export const RestoreFormContext = createContext(initialRestoreContextState); + +export const restoreMethods = (context: RestoreContext) => ({ + moveToPage: (page: Page): RestoreContext => ({ + ...context, + formProps: { + ...context.formProps, + currentPage: page + } + }), + setSubmitLabel: (text: formWizardProps['submitLabel']): RestoreContext => ({ + ...context, + formProps: { + ...context.formProps, + submitLabel: text + } + }), + setBackupDetails: (backupDetails: IBackup): RestoreContext => ({ + ...context, + backupDetails + }), + setIncrementalBackupProps: (incrementalBackupProps: IncrementalBackupProps): RestoreContext => ({ + ...context, + additionalBackupProps: incrementalBackupProps + }), + setIncrementalBackupsData: (incrementalBackupsData: ICommonBackupInfo[]): RestoreContext => ({ + ...context, + incrementalBackupsData + }), + setPreflightResponse: (preflightResponse: PreflightResponseV2Params): RestoreContext => ({ + ...context, + preflightResponse + }), + setDisableSubmit: (flag: boolean): RestoreContext => ({ + ...context, + formProps: { + ...context.formProps, + disableSubmit: flag + } + }), + setisSubmitting: (flag: boolean): RestoreContext => ({ + ...context, + formProps: { + ...context.formProps, + isSubmitting: flag + } + }), + setRestorableTables: (restorableTables: RestorableTablesResp[]): RestoreContext => ({ + ...context, + restorableTables + }), + setKeyspacesInTargetUniverse: (keyspacesInTargetUniverse: string[]): RestoreContext => ({ + ...context, + keyspacesInTargetUniverse + }) +}); + +export type RestoreContextMethods = [ + RestoreContext, + ReturnType, + { + hideModal: () => void; + } +]; + +// PageRef is used to navigate between pages in the wizard +export type PageRef = { + onNext: () => void; + onPrev: () => void; +}; + +// Default values for the restore form +export const defaultRestoreFormValues: RestoreFormModel = { + source: { + keyspace: null, + pitrMillisOptions: { + date: moment().format('YYYY-MM-DD'), + time: moment(), + secs: 0, + + incBackupTime: '' + }, + + timeToRestoreType: TimeToRestoreType.RECENT_BACKUP, + + tableBackupType: Backup_Options_Type.ALL, + + selectedTables: [] + }, + + target: { + targetUniverse: null, + + renameKeyspace: false, + + forceKeyspaceRename: false, + + kmsConfig: null as any, + + useTablespaces: false, + + parallelThreads: 0 + }, + + renamedKeyspace: [], + + pitrMillis: 0 +}; diff --git a/managed/ui/src/redesign/features/backup/restore/models/RestoreFormModel.ts b/managed/ui/src/redesign/features/backup/restore/models/RestoreFormModel.ts new file mode 100644 index 000000000000..6863b8d815d8 --- /dev/null +++ b/managed/ui/src/redesign/features/backup/restore/models/RestoreFormModel.ts @@ -0,0 +1,93 @@ +/* + * Created on Wed Aug 21 2024 + * + * Copyright 2021 YugaByte, Inc. and Contributors + * Licensed under the Polyform Free Trial License 1.0.0 (the "License") + * You may not use this file except in compliance with the License. You may obtain a copy of the License at + * http://github.com/YugaByte/yugabyte-db/blob/master/licenses/POLYFORM-FREE-TRIAL-LICENSE-1.0.0.txt + */ + +import { Backup_Options_Type, ICommonBackupInfo, ITable } from '../../../../../components/backupv2'; +import { ValidateRestoreApiReq } from '../api/api'; + +// Enum for the type of restore action +export enum TimeToRestoreType { + RECENT_BACKUP = 'RECENT_BACKUP', + EARLIER_POINT_IN_TIME = 'EARLIER_POINT_IN_TIME' +} + +// Model for the source of the restore +export interface RestoreSourceModel { + // keyspace to restore. Either all db/keyspace or single keyspace/db + keyspace: { + value: string; + label: string; + // frontend attribute. Used when user selects All Databases/All Keyspaces + isDefaultOption: boolean; + } | null; + + // user can select all tables or specific tables to restore. Is used only for YCQL + tableBackupType: Backup_Options_Type; + + // either incremental backup/point in time restore + timeToRestoreType: TimeToRestoreType; + + pitrMillisOptions: { + // user can select specific timelines to restore, incase pitr is enabled. + date: string; + time: any; + secs: number; + // if pitr is disabled, user can select from the incremental backup by thier creation time + incBackupTime: string; + }; + + // selected tables to restore. Is used only for YCQL + selectedTables: ITable[]; +} + +export interface RestoreTargetModel { + // target universe to restore to + targetUniverse: { + label: string; + value: string; + } | null; + + // whether user choose to rename before restore + renameKeyspace: boolean; + + // force the user to rename, in case of keyspace conflict. only for ysql + forceKeyspaceRename: boolean; + + // whether to use tablespaces or not. + useTablespaces: boolean; + + // kms config to use for decryption. + kmsConfig: { + label: string; + value: string; + }; + + // whether to use parallel threads or not. only for YB_BACKUP_SCRIPT + parallelThreads?: number; +} + +export interface RestoreFormModel { + source: RestoreSourceModel; + target: RestoreTargetModel; + + // user selected keyspace to restore. Either all db/keyspace or single keyspace/db + keyspacesToRestore?: ValidateRestoreApiReq; + + // used to hold the user's renamed keyspace value. the values are accessed with index + renamedKeyspace: { originalKeyspaceName: string; renamedKeyspace: string }[]; + + // the common backup info for the restore. The currentCommonBackupInfo holds important info like storage location, storageConfigUUID etc. + // The responseList holds the keyspace, storage location, tables etc. + // if entire backup is selected, then we will copy the commonBackupInfo from the baseBackupDetails + // if Incremental Backup is selected, then we will copy the commonBackupInfo from the incrementalBackupDetails + // if single keyspace restore is selected, then we will copy the commonBackupInfo from the backupDetails + currentCommonBackupInfo?: ICommonBackupInfo; + + // the pitrMillis , chosen by the user. 0 means no pitr. + pitrMillis?: number; +} diff --git a/managed/ui/src/redesign/features/backup/restore/pages/Prefetch/PrefetchData.tsx b/managed/ui/src/redesign/features/backup/restore/pages/Prefetch/PrefetchData.tsx new file mode 100644 index 000000000000..84b3e0903bcb --- /dev/null +++ b/managed/ui/src/redesign/features/backup/restore/pages/Prefetch/PrefetchData.tsx @@ -0,0 +1,88 @@ +/* + * Created on Fri Aug 23 2024 + * + * Copyright 2021 YugaByte, Inc. and Contributors + * Licensed under the Polyform Free Trial License 1.0.0 (the "License") + * You may not use this file except in compliance with the License. You may obtain a copy of the License at + * http://github.com/YugaByte/yugabyte-db/blob/master/licenses/POLYFORM-FREE-TRIAL-LICENSE-1.0.0.txt + */ + +import { forwardRef, useImperativeHandle } from 'react'; +import { useQuery } from 'react-query'; +import { useMount } from 'react-use'; +import { useTranslation } from 'react-i18next'; +import { noop } from 'lodash'; +import { useFormContext } from 'react-hook-form'; +import { Page, PageRef, RestoreContextMethods } from '../../models/RestoreContext'; +import { YBLoadingCircleIcon } from '../../../../../../components/common/indicators'; +import { fetchIncrementalBackup } from '../../../../../../components/backupv2/common/BackupAPI'; +import { RestoreFormModel } from '../../models/RestoreFormModel'; +import { Backup_States } from '../../../../../../components/backupv2'; +import { GetRestoreContext } from '../../RestoreUtils'; + +// The prefetch Data Component is used to fetch the incremental backups data, if present. +const PrefetchData = forwardRef((_, forwardRef) => { + const [ + { backupDetails, additionalBackupProps }, + { moveToPage, setIncrementalBackupsData } + ]: RestoreContextMethods = GetRestoreContext(); + + const { setValue } = useFormContext(); + + useImperativeHandle(forwardRef, () => ({ onNext: noop, onPrev: noop }), []); + + const { t } = useTranslation(); + + useQuery( + ['incremental_backups', backupDetails?.commonBackupInfo.baseBackupUUID], + () => fetchIncrementalBackup(backupDetails!.commonBackupInfo?.baseBackupUUID), + { + enabled: + backupDetails !== null && + backupDetails.hasIncrementalBackups && + (additionalBackupProps?.isRestoreEntireBackup || + !additionalBackupProps?.singleKeyspaceRestore), + onSuccess(data) { + // set incremental backups data in context + setIncrementalBackupsData(data.data); + // if restore entire backup is selected, then set the latest completed incremental backup as the restore point. + // if single keyspace restore is selected, then set the incremental backup selected(from BackupDetails) as the restore point. + // if incremental backup is selected, the search for that id and set it. + const incrementalBackup = additionalBackupProps?.incrementalBackupUUID + ? data.data.find((ic) => ic.backupUUID === additionalBackupProps?.incrementalBackupUUID) // restore to the point + : data.data.filter((ic) => ic.state === Backup_States.COMPLETED)[0]; + if (incrementalBackup) { + setValue('currentCommonBackupInfo', incrementalBackup); + } + moveToPage(Page.SOURCE); + } + } + ); + + useMount(() => { + // if the backup doesn't have incremental backups, move to next page. + if (!backupDetails?.hasIncrementalBackups) { + setValue('currentCommonBackupInfo', backupDetails!.commonBackupInfo); + moveToPage(Page.SOURCE); + } + + // If single keyspace inside incremental backups is restored, we already have the necessary information for restore. + // so, set storage location as response list and move to next page. + if ( + additionalBackupProps?.singleKeyspaceRestore && + additionalBackupProps.incrementalBackupUUID + ) { + setValue('currentCommonBackupInfo', backupDetails!.commonBackupInfo); + moveToPage(Page.SOURCE); + } + }); + return ( + <> + +
{t('newRestoreModal.prefetch.loadingText')}
+ + ); +}); + +PrefetchData.displayName = 'PrefetchData'; +export default PrefetchData; diff --git a/managed/ui/src/redesign/features/backup/restore/pages/RenameKeyspace/RenameKeyspace.tsx b/managed/ui/src/redesign/features/backup/restore/pages/RenameKeyspace/RenameKeyspace.tsx new file mode 100644 index 000000000000..08e5d1369ee8 --- /dev/null +++ b/managed/ui/src/redesign/features/backup/restore/pages/RenameKeyspace/RenameKeyspace.tsx @@ -0,0 +1,217 @@ +/* + * Created on Mon Aug 26 2024 + * + * Copyright 2021 YugaByte, Inc. and Contributors + * Licensed under the Polyform Free Trial License 1.0.0 (the "License") + * You may not use this file except in compliance with the License. You may obtain a copy of the License at + * http://github.com/YugaByte/yugabyte-db/blob/master/licenses/POLYFORM-FREE-TRIAL-LICENSE-1.0.0.txt + */ + +import { forwardRef, useImperativeHandle, useState } from 'react'; +import { useMount } from 'react-use'; +import { useFormContext } from 'react-hook-form'; +import { useTranslation } from 'react-i18next'; +import { useQuery } from 'react-query'; +import { differenceWith, intersectionWith, uniq, values } from 'lodash'; + +import { Box, FormHelperText, Grid, makeStyles, Typography } from '@material-ui/core'; +import { YBSearchInput } from '../../../../../../components/common/forms/fields/YBSearchInput'; +import { YBInput, YBInputField } from '../../../../../components'; +import { + YBErrorIndicator, + YBLoadingCircleIcon +} from '../../../../../../components/common/indicators'; + +import { fetchTablesInUniverse } from '../../../../../../actions/xClusterReplication'; +import { GetRestoreContext } from '../../RestoreUtils'; + +import { ITable } from '../../../../../../components/backupv2'; +import { RestoreFormModel } from '../../models/RestoreFormModel'; +import { Page, PageRef } from '../../models/RestoreContext'; + +const useStyles = makeStyles((theme) => ({ + root: { + padding: '24px' + }, + searchCtrl: { + marginBottom: theme.spacing(2), + width: '100%' + }, + searchHeader: { + marginBottom: theme.spacing(2) + }, + renameInputCtrls: { + border: `1px solid ${theme.palette.ybacolors.ybBorderGray}`, + borderRadius: theme.spacing(1), + padding: theme.spacing(2) + }, + keyspaceRow: { + marginBottom: theme.spacing(3), + gap: '20px' + }, + currentKeyspaceName: { + width: '340px', + '& .MuiInput-root': { + background: '#F7F7F7' + } + }, + newKeyspaceName: { + width: '340px' + }, + tableLoadingMsg: { + textAlign: 'center' + }, + tableHeader: { + marginBottom: theme.spacing(1), + display: 'flex', + gap: theme.spacing(2), + '&>div': { + width: '520px' + } + } +})); + +const RenameKeyspace = forwardRef((_, forwardRef) => { + const classes = useStyles(); + const { t } = useTranslation('translation'); + const { + control, + watch, + handleSubmit, + formState: { errors } + } = useFormContext(); + const [ + { backupDetails }, + { moveToPage, setSubmitLabel, setKeyspacesInTargetUniverse } + ] = GetRestoreContext(); + const [searchText, setSearchText] = useState(''); + + const forceKeyspaceRename = watch('target.forceKeyspaceRename'); + const keyspacesToRestore = watch('keyspacesToRestore'); + const universe = watch('target.targetUniverse'); + + const { data: tablesInTargetUniverse, isLoading: isTableListLoading, isError } = useQuery( + [universe?.value, 'tables'], + () => fetchTablesInUniverse(universe!.value!), + { + select: (data) => data.data, + onSuccess(data) { + setKeyspacesInTargetUniverse(uniq(data.map((k: ITable) => k.keySpace))); + } + } + ); + + const keyspacesAvailableInTargetUniverse: string[] = + tablesInTargetUniverse + ?.filter((t: ITable) => t.tableType === (backupDetails?.backupType as any)) + .map((t: ITable) => t.keySpace) ?? []; + + // move the keyspaces which are duplicate to the top. + const sortByTableDuplicate = [ + ...intersectionWith( + values(keyspacesToRestore?.keyspaceTables), + keyspacesAvailableInTargetUniverse, + (selectedKeyspaces, keyspace) => { + return keyspace === selectedKeyspaces.keyspace; + } + ), + ...differenceWith( + values(keyspacesToRestore?.keyspaceTables), + keyspacesAvailableInTargetUniverse, + (selectedKeyspaces, keyspace) => { + return keyspace === selectedKeyspaces.keyspace; + } + ) + ]; + + useImperativeHandle( + forwardRef, + () => ({ + onNext: () => { + handleSubmit(() => { + moveToPage(Page.RESTORE_FINAL); + })(); + }, + onPrev: () => { + moveToPage(Page.TARGET); + } + }), + [] + ); + + useMount(() => { + setSubmitLabel(t('buttonLabels.restore', { keyPrefix: 'backup' })); + }); + + if (isTableListLoading) return ; + + if (isError) return ; + + return ( + + + + {t('newRestoreModal.generalSettings.selectKeyspaceForm.restoreKeyspace', { + Optional: !forceKeyspaceRename + ? t('newRestoreModal.generalSettings.selectKeyspaceForm.optional') + : '' + })} + + ) => { + setSearchText(e.target.value); + }} + placeHolder={t('newRestoreModal.selectTables.searchTableName')} + /> + +
+
+
{t('newRestoreModal.renameKeyspaces.currenyKeyspacename')}
+
{t('newRestoreModal.renameKeyspaces.assignNewName')}
+
+ + {sortByTableDuplicate.map((e: any, ind: number) => { + const origKeyspaceName = e.keyspace; + if (searchText) { + if (!origKeyspaceName.includes(searchText)) { + return null; + } + } + return ( + + + + + + + { + + {(errors as any)?.[`renamedKeyspace[${ind}].renamedKeyspace`]?.message} + + } + + + ); + })} + +
+
+ ); +}); + +RenameKeyspace.displayName = 'RenameKeyspace'; +export default RenameKeyspace; diff --git a/managed/ui/src/redesign/features/backup/restore/pages/RestoreFinal/RestoreFinal.tsx b/managed/ui/src/redesign/features/backup/restore/pages/RestoreFinal/RestoreFinal.tsx new file mode 100644 index 000000000000..37789eb63a40 --- /dev/null +++ b/managed/ui/src/redesign/features/backup/restore/pages/RestoreFinal/RestoreFinal.tsx @@ -0,0 +1,168 @@ +/* + * Created on Fri Aug 30 2024 + * + * Copyright 2021 YugaByte, Inc. and Contributors + * Licensed under the Polyform Free Trial License 1.0.0 (the "License") + * You may not use this file except in compliance with the License. You may obtain a copy of the License at + * http://github.com/YugaByte/yugabyte-db/blob/master/licenses/POLYFORM-FREE-TRIAL-LICENSE-1.0.0.txt + */ + +import { forwardRef, useContext, useImperativeHandle } from 'react'; +import { Trans, useTranslation } from 'react-i18next'; +import { useMount } from 'react-use'; +import { useMutation } from 'react-query'; +import { find } from 'lodash'; +import { useFormContext } from 'react-hook-form'; +import { toast } from 'react-toastify'; + +import { YBLoadingCircleIcon } from '../../../../../../components/common/indicators'; + +import { restoreBackup, RestoreV2BackupProps } from '../../api/api'; +import { createErrorMessage } from '../../../../../../utils/ObjectUtils'; +import { isPITREnabledInBackup } from '../../RestoreUtils'; + +import { RESTORE_ACTION_TYPE } from '../../../../../../components/backupv2'; +import { TableType } from '../../../../../helpers/dtos'; +import { RestoreFormModel, TimeToRestoreType } from '../../models/RestoreFormModel'; +import { + Page, + PageRef, + RestoreContext, + RestoreContextMethods, + RestoreFormContext +} from '../../models/RestoreContext'; + +const RestoreFinal = forwardRef((_, forwardRef) => { + const [restoreContext, { moveToPage, setDisableSubmit }, { hideModal }] = (useContext( + RestoreFormContext + ) as unknown) as RestoreContextMethods; + + const { getValues } = useFormContext(); + + const { t } = useTranslation('translation', { + keyPrefix: 'backup.restore' + }); + + const doRestoreBackup = useMutation((backup: RestoreV2BackupProps) => restoreBackup(backup), { + onSuccess: (resp) => { + hideModal(); + toast.success( + + + {t('viewDetails')} + + ]} + > + + ); + hideModal(); + }, + onError: (resp) => { + toast.error(createErrorMessage(resp)); + hideModal(); + } + }); + + useMount(() => { + setDisableSubmit(true); + + const payload = preparePayload(restoreContext, getValues()); + payload && doRestoreBackup.mutate(payload); + }); + + useImperativeHandle(forwardRef, () => ({ + onPrev: () => { + moveToPage(Page.TARGET); + }, + onNext: () => {} + })); + + return ( + <> + +
{t('preparingRestore')}
+ + ); +}); + +const preparePayload = ( + restoreContext: RestoreContext, + formValues: RestoreFormModel +): RestoreV2BackupProps | null => { + const { backupDetails } = restoreContext; + + const { + target, + currentCommonBackupInfo, + renamedKeyspace, + keyspacesToRestore, + pitrMillis, + source + } = formValues; + + const isKeyspaceRenamed = target.renameKeyspace; + + if (!currentCommonBackupInfo) return null; + + const storageInfoList = + keyspacesToRestore?.keyspaceTables.map((keyspace, ind) => { + // iterate userSelected keyspaces + const keyspaceinfo = find(currentCommonBackupInfo.responseList, { + keyspace: keyspace.keyspace + }); + + let keyspacename = keyspace.keyspace; + + if (isKeyspaceRenamed) { + //if keyspace is renamed + const rKeyspace = renamedKeyspace[ind]; + if (rKeyspace?.renamedKeyspace !== '') { + keyspacename = rKeyspace.renamedKeyspace ?? keyspaceinfo?.keyspace; + } + } + + const infoList = { + backupType: backupDetails!.backupType, + keyspace: keyspacename, + sse: currentCommonBackupInfo.sse, + storageLocation: keyspaceinfo?.storageLocation ?? keyspaceinfo?.defaultLocation, + useTablespaces: target.useTablespaces + } as any; + + if (backupDetails?.backupType === TableType.YQL_TABLE_TYPE) { + infoList['tableNameList'] = keyspace.tableNames; + } + return infoList; + }) ?? []; + + const payload: RestoreV2BackupProps = { + actionType: RESTORE_ACTION_TYPE.RESTORE, + kmsConfigUUID: target.kmsConfig?.value, + storageConfigUUID: currentCommonBackupInfo.storageConfigUUID, + universeUUID: target.targetUniverse!.value, + backupStorageInfoList: storageInfoList + }; + + // if pitr is enabled and selected + if ( + isPITREnabledInBackup(currentCommonBackupInfo) && + source.timeToRestoreType === TimeToRestoreType.EARLIER_POINT_IN_TIME && + pitrMillis !== 0 + ) { + payload['restoreToPointInTimeMillis'] = pitrMillis; + } + + // if ybc controller is not enabled, then add parallelism + if (backupDetails?.category === 'YB_BACKUP_SCRIPT') { + payload['parallelism'] = target.parallelThreads; + } + + return payload; +}; + +RestoreFinal.displayName = 'RestoreFinal'; +export default RestoreFinal; diff --git a/managed/ui/src/redesign/features/backup/restore/pages/RestoreSource/RestoreSource.tsx b/managed/ui/src/redesign/features/backup/restore/pages/RestoreSource/RestoreSource.tsx new file mode 100644 index 000000000000..538d59a1fd36 --- /dev/null +++ b/managed/ui/src/redesign/features/backup/restore/pages/RestoreSource/RestoreSource.tsx @@ -0,0 +1,115 @@ +/* + * Created on Tue Aug 20 2024 + * + * Copyright 2021 YugaByte, Inc. and Contributors + * Licensed under the Polyform Free Trial License 1.0.0 (the "License") + * You may not use this file except in compliance with the License. You may obtain a copy of the License at + * http://github.com/YugaByte/yugabyte-db/blob/master/licenses/POLYFORM-FREE-TRIAL-LICENSE-1.0.0.txt + */ + +import { forwardRef, useEffect, useImperativeHandle } from 'react'; +import { useMount } from 'react-use'; +import { useTranslation } from 'react-i18next'; +import { toast } from 'react-toastify'; +import { useMutation } from 'react-query'; +import { useFormContext } from 'react-hook-form'; +import { Divider, makeStyles } from '@material-ui/core'; + +import { Page, PageRef } from '../../models/RestoreContext'; +import { SelectDBAndTables } from './SelectDBAndTables'; +import { SelectTimeframe } from './SelectTimeframe'; +import { GetRestoreContext, prepareValidationPayload } from '../../RestoreUtils'; +import { createErrorMessage } from '../../../../universe/universe-form/utils/helpers'; +import { validateRestorableTables, ValidateRestoreApiReq } from '../../api/api'; +import { RestoreFormModel } from '../../models/RestoreFormModel'; + +const useStyles = makeStyles(() => ({ + root: { + padding: '24px' + }, + divider: { + margin: '32px 0' + } +})); + +const RestoreSource = forwardRef((_, forwardRef) => { + const [ + restoreContext, + { moveToPage, setDisableSubmit, setSubmitLabel, setisSubmitting } + ] = GetRestoreContext(); + + const classes = useStyles(); + + const validateTables = useMutation((values: ValidateRestoreApiReq) => + validateRestorableTables(values) + ); + + const { handleSubmit, setValue, watch } = useFormContext(); + + const { t } = useTranslation('translation', { + keyPrefix: 'backup.restore.source' + }); + + const sourceKeySpace = watch('source.keyspace'); + + useEffect(() => { + setDisableSubmit(sourceKeySpace === null); + }, [sourceKeySpace]); + + useMount(() => { + setSubmitLabel(t('buttonLabels.next', { keyPrefix: 'backup' })); + setDisableSubmit(false); + }); + + useImperativeHandle( + forwardRef, + () => ({ + onNext: () => { + handleSubmit((values) => { + // validate whether the selected PITR time is within the retention period. + // if not, show an error message and prevent the user from proceeding. + // the api, returns true always if pitr is not enabled + const payload = prepareValidationPayload(values, restoreContext); + + setisSubmitting(true); + setDisableSubmit(true); + + validateTables + .mutateAsync(payload) + .then((resp) => { + if (!resp.data.success) { + toast.error(resp.data.error); + setisSubmitting(false); + setDisableSubmit(false); + return; + } + // save the user selected keyspace if the validation is successful + setValue('keyspacesToRestore', payload); + setisSubmitting(false); + setDisableSubmit(false); + moveToPage(Page.TARGET); + }) + .catch((error) => { + toast.error(createErrorMessage(error)); + setisSubmitting(false); + setDisableSubmit(false); + }); + })(); + }, + onPrev: () => { } + }), + [restoreContext] + ); + + return ( +
+ + + +
+ ); +}); + +RestoreSource.displayName = 'SelectKeyspaces'; + +export default RestoreSource; diff --git a/managed/ui/src/redesign/features/backup/restore/pages/RestoreSource/RestoreTimeFrameUtils.tsx b/managed/ui/src/redesign/features/backup/restore/pages/RestoreSource/RestoreTimeFrameUtils.tsx new file mode 100644 index 000000000000..3f04d8231e04 --- /dev/null +++ b/managed/ui/src/redesign/features/backup/restore/pages/RestoreSource/RestoreTimeFrameUtils.tsx @@ -0,0 +1,109 @@ +/* + * Created on Wed Aug 28 2024 + * + * Copyright 2021 YugaByte, Inc. and Contributors + * Licensed under the Polyform Free Trial License 1.0.0 (the "License") + * You may not use this file except in compliance with the License. You may obtain a copy of the License at + * http://github.com/YugaByte/yugabyte-db/blob/master/licenses/POLYFORM-FREE-TRIAL-LICENSE-1.0.0.txt + */ + +import { RestoreContext } from '../../models/RestoreContext'; +import { RestoreFormModel } from '../../models/RestoreFormModel'; +import { + getFullBackupInIncBackupChain, + getIncrementalBackupByUUID, + getLastSuccessfulIncrementalBackup, + isPITREnabledInBackup +} from '../../RestoreUtils'; + +type PITRRestoreWindow = { + from: string | number; + to: string | number; + mostRecentbackup: string; + label: string; +}; + +export const computePITRRestoreWindow = ( + formValues: RestoreFormModel, + context: RestoreContext +): PITRRestoreWindow => { + const { backupDetails, additionalBackupProps, incrementalBackupsData } = context; + + const { currentCommonBackupInfo } = formValues; + + const timeFrame: PITRRestoreWindow = { + from: '', + to: '', + mostRecentbackup: '', + label: '' + }; + + if (!currentCommonBackupInfo || !backupDetails) return timeFrame; + + // PITR ON , Incremental Backup ON + + if (isPITREnabledInBackup(currentCommonBackupInfo) && backupDetails.hasIncrementalBackups) { + const lastIncrementalBackup = getLastSuccessfulIncrementalBackup(incrementalBackupsData ?? []); + + // Global restore - Restore Entire Backup + if (additionalBackupProps?.isRestoreEntireBackup) { + timeFrame.from = + lastIncrementalBackup?.responseList[0].backupPointInTimeRestoreWindow + ?.timestampRetentionWindowStartMillis ?? currentCommonBackupInfo.createTime; + timeFrame.to = + lastIncrementalBackup?.responseList[0].backupPointInTimeRestoreWindow + ?.timestampRetentionWindowEndMillis ?? currentCommonBackupInfo.createTime; + timeFrame.mostRecentbackup = lastIncrementalBackup!.createTime; + timeFrame.label = 'mostRecentIncremental'; + } + + if ( + !additionalBackupProps?.isRestoreEntireBackup && + additionalBackupProps?.incrementalBackupUUID + ) { + const incBackup = additionalBackupProps.singleKeyspaceRestore + ? currentCommonBackupInfo + : getIncrementalBackupByUUID( + incrementalBackupsData ?? [], + additionalBackupProps.incrementalBackupUUID + ); + timeFrame.from = + incBackup?.responseList[0].backupPointInTimeRestoreWindow + ?.timestampRetentionWindowStartMillis ?? 0; + timeFrame.to = + incBackup?.responseList[0].backupPointInTimeRestoreWindow + ?.timestampRetentionWindowEndMillis ?? 0; + timeFrame.label = 'backupTime'; + timeFrame.mostRecentbackup = incBackup!.createTime; + } + } + + //PITR OFF , Incremental Backup ON + + if (!isPITREnabledInBackup(currentCommonBackupInfo) && backupDetails.hasIncrementalBackups) { + if (additionalBackupProps?.isRestoreEntireBackup) { + timeFrame.from = + getFullBackupInIncBackupChain(incrementalBackupsData ?? [])?.createTime ?? + currentCommonBackupInfo.createTime; + timeFrame.to = + getLastSuccessfulIncrementalBackup(incrementalBackupsData ?? [])?.createTime ?? + currentCommonBackupInfo.createTime; + timeFrame.mostRecentbackup = timeFrame.to; + timeFrame.label = 'mostRecentIncremental'; + } + } + + // PITR ON , Incremental Backup OFF + + if (isPITREnabledInBackup(currentCommonBackupInfo) && !backupDetails.hasIncrementalBackups) { + timeFrame.from = + currentCommonBackupInfo.responseList[0].backupPointInTimeRestoreWindow + ?.timestampRetentionWindowStartMillis ?? 0; + timeFrame.to = + currentCommonBackupInfo.responseList[0].backupPointInTimeRestoreWindow + ?.timestampRetentionWindowEndMillis ?? 0; + timeFrame.label = 'backupTime'; + } + + return timeFrame; +}; diff --git a/managed/ui/src/redesign/features/backup/restore/pages/RestoreSource/SelectDBAndTables.tsx b/managed/ui/src/redesign/features/backup/restore/pages/RestoreSource/SelectDBAndTables.tsx new file mode 100644 index 000000000000..92c9105e6912 --- /dev/null +++ b/managed/ui/src/redesign/features/backup/restore/pages/RestoreSource/SelectDBAndTables.tsx @@ -0,0 +1,224 @@ +/* + * Created on Tue Aug 20 2024 + * + * Copyright 2021 YugaByte, Inc. and Contributors + * Licensed under the Polyform Free Trial License 1.0.0 (the "License") + * You may not use this file except in compliance with the License. You may obtain a copy of the License at + * http://github.com/YugaByte/yugabyte-db/blob/master/licenses/POLYFORM-FREE-TRIAL-LICENSE-1.0.0.txt + */ + +import { useContext, useEffect, useState } from 'react'; +import { Control, FieldValues, useForm, useFormContext } from 'react-hook-form'; +import { useTranslation } from 'react-i18next'; +import { makeStyles, Typography } from '@material-ui/core'; +import { useQuery } from 'react-query'; +import { useMount } from 'react-use'; + +import { + ReactSelectComponents, + ReactSelectStyles +} from '../../../scheduled/create/ReactSelectStyles'; +import { RestoreFormModel } from '../../models/RestoreFormModel'; +import SelectTables from '../../../scheduled/create/pages/BackupObjects/SelectTables'; +import { TableType } from '../../../../../helpers/dtos'; +import { RestoreContextMethods, RestoreFormContext } from '../../models/RestoreContext'; +import { getRestorableTables, RestorableTablesResp } from '../../api/api'; +import { isDefinedNotNull } from '../../../../../../utils/ObjectUtils'; +import { + BACKUP_API_TYPES, + Backup_Options_Type, + ITable +} from '../../../../../../components/backupv2'; +import { YBReactSelectField } from '../../../../../../components/configRedesign/providerRedesign/components/YBReactSelect/YBReactSelectField'; + +import { + doesUserSelectsSingleKeyspaceToRestore, + isRestoreTriggeredFromIncBackup +} from '../../RestoreUtils'; + +const useStyles = makeStyles(() => ({ + root: { + display: 'flex', + gap: '16px', + flexDirection: 'column' + }, + keyspaceSelect: { + width: '550px' + }, + '@global': { + 'body>div#menu-source\\.keyspace': { + zIndex: '99999 !important', + '& .MuiListSubheader-sticky': { + top: 'auto' + } + } + } +})); + +export const SelectDBAndTables = () => { + const { + setValue, + watch, + formState: { errors } + } = useFormContext(); + + const [{ backupDetails, additionalBackupProps }, { setRestorableTables }] = (useContext( + RestoreFormContext + ) as unknown) as RestoreContextMethods; + + // list of tables present in the selected keyspace + const [tablesInSelectedKeyspace, setTablesInSelectedKeyspace] = useState([]); + + // list of keyspaces available for restore. + const [restoreKeyspacesOptions, setRestoreKeyspacesOptions] = useState( + [] + ); + + // we use two forms here, one for the main form and one for the internal form + // internal form is used to store the selected tables and table backup type + const { control: internalControl, watch: internalWatch, setValue: internalsetValue } = useForm< + RestoreFormModel['source'] + >({ + defaultValues: watch('source') + }); + + const { t } = useTranslation('translation', { + keyPrefix: 'backup.restore.source' + }); + + const currentAPIType = t( + backupDetails?.backupType === BACKUP_API_TYPES.YSQL ? 'allDatabase' : 'allKeyspaces', + { keyPrefix: 'backup' } + ); + + const userSelectsSingleKeyspaceToRestore = doesUserSelectsSingleKeyspaceToRestore( + additionalBackupProps! + ); + + const classes = useStyles(); + + const selectedKeySpace = watch('source.keyspace'); + const commonBackupInfo = watch('currentCommonBackupInfo'); + const selectedTables = internalWatch('selectedTables'); + const internalKeyspaceSelected = internalWatch('keyspace'); + const tableBackupType = internalWatch('tableBackupType'); + + const setDefaultKeyspace = (tables: RestorableTablesResp[]) => { + if (isDefinedNotNull(selectedKeySpace?.value)) return; + if (userSelectsSingleKeyspaceToRestore) { + const currentCommonBackupInfo = commonBackupInfo; + + internalsetValue('keyspace', { + label: currentCommonBackupInfo!.responseList[0].keyspace, + value: currentCommonBackupInfo!.responseList[0].keyspace, + isDefaultOption: false + }); + } else { + const t = tables.find((rt: any) => rt.isDefaultOption) as any; + internalsetValue('keyspace', { label: t.keyspace, value: t.keyspace, isDefaultOption: true }); + } + }; + + // fetch the list of restorable tables only when the restore is triggered from "Restore entire backup" + // for incremental backup, we can iterate the commonBackupInfo and get the list of keyspaces and tables + useQuery( + ['restorableTables', backupDetails?.commonBackupInfo.baseBackupUUID], + () => getRestorableTables(backupDetails!.commonBackupInfo.baseBackupUUID), + { + enabled: !isRestoreTriggeredFromIncBackup(backupDetails!, additionalBackupProps!), + select: (data) => [ + { + keyspace: currentAPIType, + isDefaultOption: true, + tableNames: [] + }, + ...data.data + ], + onSuccess(data) { + setRestoreKeyspacesOptions(data); + setRestorableTables(data); + setDefaultKeyspace(data); + } + } + ); + + useMount(() => { + // if restore is triggered from incremental backup, we can get the list of keyspaces and tables from commonBackupInfo + if (isRestoreTriggeredFromIncBackup(backupDetails!, additionalBackupProps!)) { + if (commonBackupInfo) { + const keyspaces = [ + { + keyspace: currentAPIType, + isDefaultOption: true, // only for select all keyspace/databse + tableNames: [] + }, + ...commonBackupInfo.responseList.map((rt) => ({ + keyspace: rt.keyspace, + tableNames: rt.tablesList ?? [] + })) + ]; + setRestoreKeyspacesOptions(keyspaces); + setRestorableTables(keyspaces); + setDefaultKeyspace(keyspaces); + } + } + }); + + useEffect(() => { + setValue('source.keyspace', internalKeyspaceSelected); + }, [internalKeyspaceSelected]); + + useEffect(() => { + setValue('source.selectedTables', selectedTables, { shouldValidate: true }); + }, [selectedTables]); + + // when the selected keyspace changes, update the list of tables in the selected keyspace + useEffect(() => { + const keyspace = restoreKeyspacesOptions?.find((rt) => rt.keyspace === selectedKeySpace?.value); + if (!keyspace) return; + setTablesInSelectedKeyspace( + keyspace.tableNames.map((t) => (({ tableName: t } as unknown) as ITable)) + ); + internalsetValue('selectedTables', [], { shouldValidate: true }); + internalsetValue('tableBackupType', Backup_Options_Type.ALL, { shouldValidate: true }); + }, [selectedKeySpace]); + + useEffect(() => { + setValue('source.tableBackupType', tableBackupType, { shouldValidate: true }); + }, [tableBackupType]); + + const reactSelectComp = ReactSelectComponents(!!errors?.source?.keyspace?.message); + + if (!backupDetails) return null; + + return ( +
+ {t('selectKeyspace')} + { + return { + label: restorableTables.keyspace, + value: restorableTables.keyspace, + tableNames: restorableTables.tableNames, + isDefaultOption: !!(restorableTables as any).isDefaultOption + }; + })} + stylesOverride={ReactSelectStyles} + isClearable + isDisabled={userSelectsSingleKeyspaceToRestore} + components={{ + ...reactSelectComp + }} + /> + {backupDetails?.backupType === TableType.YQL_TABLE_TYPE && selectedKeySpace && ( + } + tablesInSelectedKeyspace={tablesInSelectedKeyspace} + /> + )} +
+ ); +}; diff --git a/managed/ui/src/redesign/features/backup/restore/pages/RestoreSource/SelectTimeframe.tsx b/managed/ui/src/redesign/features/backup/restore/pages/RestoreSource/SelectTimeframe.tsx new file mode 100644 index 000000000000..f970c22aee1e --- /dev/null +++ b/managed/ui/src/redesign/features/backup/restore/pages/RestoreSource/SelectTimeframe.tsx @@ -0,0 +1,248 @@ +/* + * Created on Tue Aug 20 2024 + * + * Copyright 2021 YugaByte, Inc. and Contributors + * Licensed under the Polyform Free Trial License 1.0.0 (the "License") + * You may not use this file except in compliance with the License. You may obtain a copy of the License at + * http://github.com/YugaByte/yugabyte-db/blob/master/licenses/POLYFORM-FREE-TRIAL-LICENSE-1.0.0.txt + */ + +import { useEffect } from 'react'; +import { useFormContext } from 'react-hook-form'; +import { useMount } from 'react-use'; +import { makeStyles, MenuItem, Typography } from '@material-ui/core'; +import { Trans, useTranslation } from 'react-i18next'; +import moment from 'moment'; + +import { YBInputField, YBRadioGroupField, YBSelect } from '../../../../../components'; +import { YBTag, YBTag_Types } from '../../../../../../components/common/YBTag'; +import { + doesUserSelectsSingleKeyspaceToRestore, + getLastSuccessfulIncrementalBackup, + getMomentFromPITRMillis, + GetRestoreContext, + isPITREnabledInBackup, + userCanSelectTimeFrame +} from '../../RestoreUtils'; +import { YBTimePicker } from '../../../../../components/YBTimePicker/YBTimePicker'; +import { computePITRRestoreWindow } from './RestoreTimeFrameUtils'; +import { ybFormatDate } from '../../../../../helpers/DateUtils'; +import { RestoreFormModel, TimeToRestoreType } from '../../models/RestoreFormModel'; + +const useStyles = makeStyles((theme) => ({ + configureRestoreTime: { + padding: '24px 16px', + background: '#FBFBFB', + borderRadius: '8px', + border: `1px solid ${theme.palette.ybacolors.ybBorderGray}`, + marginTop: '16px', + display: 'flex', + flexDirection: 'column', + gap: '16px' + }, + configureRestoreTimeFields: { + display: 'flex', + alignItems: 'baseline', + gap: '16px', + '& .MuiFormLabel-root': { + fontSize: '13px', + textTransform: 'capitalize', + color: theme.palette.ybacolors.labelBackground, + fontWeight: '400 !important', + marginBottom: '4px !important' + } + }, + helpText: { + color: theme.palette.ybacolors.textDarkGray, + marginTop: '16px', + lineHeight: '20px' + }, + link: { + color: theme.palette.ybacolors.textDarkGray, + textDecoration: 'underline', + cursor: 'pointer' + }, + '@global': { + 'body>div#menu-source\\.pitrMillisOptions\\.incBackupTime': { + zIndex: '99999 !important', + '& .MuiListSubheader-sticky': { + top: 'auto' + } + }, + 'body div.rc-time-picker-panel': { + zIndex: '99999 !important' + } + } +})); + +export const SelectTimeframe = () => { + const { control, watch, setValue, getValues } = useFormContext(); + const [restoreContext] = GetRestoreContext(); + + const { backupDetails, incrementalBackupsData, additionalBackupProps } = restoreContext; + + const classes = useStyles(); + + const { t } = useTranslation('translation', { + keyPrefix: 'backup.restore.source' + }); + + // compute the restore window based on the selected backup + const restoreTimeWindow = computePITRRestoreWindow(getValues(), restoreContext); + const userSelectsSingleKeyspaceToRestore = doesUserSelectsSingleKeyspaceToRestore( + additionalBackupProps! + ); + const options = [ + { + label: ( + <> + {t(restoreTimeWindow.label)} + + {backupDetails?.hasIncrementalBackups && !userSelectsSingleKeyspaceToRestore + ? ybFormatDate(restoreTimeWindow.mostRecentbackup) + : ybFormatDate(restoreTimeWindow.from)} + + + ), + value: TimeToRestoreType.RECENT_BACKUP + }, + { + label: t('earlierPointInTime'), + value: TimeToRestoreType.EARLIER_POINT_IN_TIME + } + ]; + + const timeToRestoreType = watch('source.timeToRestoreType'); + const pitrMillis = watch('source.pitrMillisOptions'); + const commonBackupInfo = watch('currentCommonBackupInfo'); + + // when the time to restore type changes, we need to update the pitrMillis value + // which can be used by the restore summary and restore final step + useEffect(() => { + const restoreWindow = computePITRRestoreWindow(getValues(), restoreContext); + + if (timeToRestoreType === TimeToRestoreType.RECENT_BACKUP) { + // no pitr and no inc backup + if (restoreWindow.label === '') { + setValue('pitrMillis', 0); + } + + return setValue( + 'pitrMillis', + restoreWindow.mostRecentbackup !== '' + ? moment(restoreWindow.mostRecentbackup).valueOf() + : moment(restoreWindow.from).valueOf() + ); + } else { + //selected from incremental backup's list + if (!isPITREnabledInBackup(commonBackupInfo!)) { + return setValue('pitrMillis', moment(pitrMillis.incBackupTime).valueOf()); + } + // pitr + return setValue('pitrMillis', getMomentFromPITRMillis(pitrMillis).valueOf()); + } + }, [pitrMillis.date, pitrMillis.secs, pitrMillis.time, timeToRestoreType, commonBackupInfo]); + + // if pitr is not enabled and has incremental backup , set the default value for incremental backup + useMount(() => { + if (!isPITREnabled && backupDetails?.hasIncrementalBackups) { + const inc = getLastSuccessfulIncrementalBackup(incrementalBackupsData ?? []); + inc && setValue('source.pitrMillisOptions.incBackupTime', inc.createTime); + } + }); + + // incremental backup list is based on the creation time. If selected , search for the inc backup and set the value + const incBackupChanged = (creationDate: string) => { + const backup = incrementalBackupsData?.find((backup) => backup.createTime === creationDate); + backup && setValue('currentCommonBackupInfo', backup); + }; + + if (!backupDetails) return null; + + const isPITREnabled = isPITREnabledInBackup(backupDetails.commonBackupInfo); + + if (!userCanSelectTimeFrame(backupDetails, restoreContext)) { + return null; + } + + return ( +
+ + {timeToRestoreType === TimeToRestoreType.EARLIER_POINT_IN_TIME && ( +
+ + , + from: ybFormatDate(restoreTimeWindow.from), + to: ybFormatDate(restoreTimeWindow.to) + }} + /> + +
+ {isPITREnabled && ( + <> + +
+ {t('time')} + +
+ + + )} + {!isPITREnabled && backupDetails.hasIncrementalBackups && ( + { + setValue('source.pitrMillisOptions.incBackupTime', e.target.value, { + shouldValidate: true + }); + incBackupChanged(e.target.value); + }} + value={pitrMillis.incBackupTime} + > + {incrementalBackupsData?.map((backup) => ( + + {ybFormatDate(backup.createTime)} + + ))} + + )} +
+ + , a: }} + values={{ to: 'asd' }} + /> + +
+ )} +
+ ); +}; diff --git a/managed/ui/src/redesign/features/backup/restore/pages/RestoreSummary.tsx b/managed/ui/src/redesign/features/backup/restore/pages/RestoreSummary.tsx new file mode 100644 index 000000000000..8b1505a09e6c --- /dev/null +++ b/managed/ui/src/redesign/features/backup/restore/pages/RestoreSummary.tsx @@ -0,0 +1,136 @@ +/* + * Created on Mon Aug 19 2024 + * + * Copyright 2021 YugaByte, Inc. and Contributors + * Licensed under the Polyform Free Trial License 1.0.0 (the "License") + * You may not use this file except in compliance with the License. You may obtain a copy of the License at + * http://github.com/YugaByte/yugabyte-db/blob/master/licenses/POLYFORM-FREE-TRIAL-LICENSE-1.0.0.txt + */ + +import { FC } from 'react'; +import clsx from 'clsx'; +import { useFormContext } from 'react-hook-form'; +import { useTranslation } from 'react-i18next'; +import { makeStyles, Typography } from '@material-ui/core'; +import { ybFormatDate } from '../../../../helpers/DateUtils'; +import { formatBytes } from '../../../../../components/xcluster/ReplicationUtils'; +import { Backup_Options_Type } from '../../../../../components/backupv2'; +import { RestoreFormModel } from '../models/RestoreFormModel'; + +const useStyles = makeStyles((theme) => ({ + root: { + padding: '24px', + background: theme.palette.ybacolors.backgroundGrayLight, + height: '100%', + display: 'flex', + flexDirection: 'column', + gap: '32px' + }, + card: { + borderRadius: '8px', + background: theme.palette.common.white, + border: `1px solid ${theme.palette.grey[200]}` + }, + cardHeader: { + padding: '20px 16px', + borderRadius: '8px 8px 0 0', + borderBottom: `1px solid ${theme.palette.grey[200]}` + }, + cardContent: { + padding: '28px 16px', + display: 'flex', + gap: '24px', + flexDirection: 'column', + width: '220px' + }, + attribute: { + textTransform: 'uppercase', + color: theme.palette.grey[600] + }, + value: { + marginTop: '10px' + } +})); + +const RestoreSummary: FC = () => { + const classes = useStyles(); + + const { t } = useTranslation('translation', { keyPrefix: 'backup.restore.backupSummary' }); + + const { watch } = useFormContext(); + + const source = watch('source'); + const target = watch('target'); + const commonBackupInfo = watch('currentCommonBackupInfo'); + const pitrMillis = watch('pitrMillis'); + + const summaries = { + [t('SOURCE')]: [ + { + key: t('keyspaces'), + value: source.keyspace?.label ?? '-' + }, + { + key: t('tables'), + value: + source.keyspace?.isDefaultOption || source.tableBackupType === Backup_Options_Type.ALL + ? t('allTables') + : t('tablesSelected', { count: source.selectedTables?.length }) + '' ?? '-' + }, + { + key: t('restoreTo'), + value: pitrMillis ? ybFormatDate(pitrMillis) : '-' + }, + { + key: t('restoreSize'), + value: formatBytes(commonBackupInfo?.totalBackupSizeInBytes) ?? '-' + } + ], + [t('TARGET')]: [ + { + key: t('targetUniverse'), + value: target.targetUniverse?.label ?? '-' + }, + { + key: t('kmsConfig'), + value: target.kmsConfig?.label ?? '-' + } + ] + }; + + const generateCard = ( + type: string, + attributes: { key: string; value: string | JSX.Element }[] + ) => { + return ( +
+
+ {type} +
+
+ {attributes.map((attribute, ind) => { + return ( +
+ + {attribute.key} + + + {attribute.value} + +
+ ); + })} +
+
+ ); + }; + + return ( +
+ {generateCard(t('SOURCE'), summaries[t('SOURCE')])} + {generateCard(t('TARGET'), summaries[t('TARGET')])} +
+ ); +}; + +export default RestoreSummary; diff --git a/managed/ui/src/redesign/features/backup/restore/pages/RestoreTarget/ParallelThreads.tsx b/managed/ui/src/redesign/features/backup/restore/pages/RestoreTarget/ParallelThreads.tsx new file mode 100644 index 000000000000..d115959949f9 --- /dev/null +++ b/managed/ui/src/redesign/features/backup/restore/pages/RestoreTarget/ParallelThreads.tsx @@ -0,0 +1,40 @@ +/* + * Created on Tue Sep 03 2024 + * + * Copyright 2021 YugaByte, Inc. and Contributors + * Licensed under the Polyform Free Trial License 1.0.0 (the "License") + * You may not use this file except in compliance with the License. You may obtain a copy of the License at + * http://github.com/YugaByte/yugabyte-db/blob/master/licenses/POLYFORM-FREE-TRIAL-LICENSE-1.0.0.txt + */ + +import { useTranslation } from 'react-i18next'; +import { useFormContext } from 'react-hook-form'; +import { makeStyles } from '@material-ui/core'; +import { YBInputField } from '../../../../../../redesign/components'; +import { RestoreFormModel } from '../../models/RestoreFormModel'; + +const useStyles = makeStyles((theme) => ({ + parallelThreads: { + width: '200px' + } +})); + +const ParallelThreadsConfig = () => { + const { t } = useTranslation('translation', { + keyPrefix: 'backup.restore.target' + }); + const classes = useStyles(); + const { control } = useFormContext(); + return ( + + ); +}; + +export default ParallelThreadsConfig; diff --git a/managed/ui/src/redesign/features/backup/restore/pages/RestoreTarget/RenameKeyspaceOption.tsx b/managed/ui/src/redesign/features/backup/restore/pages/RestoreTarget/RenameKeyspaceOption.tsx new file mode 100644 index 000000000000..74994111af67 --- /dev/null +++ b/managed/ui/src/redesign/features/backup/restore/pages/RestoreTarget/RenameKeyspaceOption.tsx @@ -0,0 +1,54 @@ +/* + * Created on Wed Aug 21 2024 + * + * Copyright 2021 YugaByte, Inc. and Contributors + * Licensed under the Polyform Free Trial License 1.0.0 (the "License") + * You may not use this file except in compliance with the License. You may obtain a copy of the License at + * http://github.com/YugaByte/yugabyte-db/blob/master/licenses/POLYFORM-FREE-TRIAL-LICENSE-1.0.0.txt + */ + +import { FC } from 'react'; +import { useFormContext } from 'react-hook-form'; +import { makeStyles } from '@material-ui/core'; +import { Trans, useTranslation } from 'react-i18next'; +import { RestoreFormModel } from '../../models/RestoreFormModel'; +import { YBCheckboxField } from '../../../../../components'; + +const useStyles = makeStyles((theme) => ({ + renameKeyspaceHelperText: { + marginLeft: '35px', + color: theme.palette.ybacolors.textDarkGray, + fontSize: '12px' + } +})); + +const RenameKeyspaceOption: FC = () => { + const { control, watch } = useFormContext(); + + const { t } = useTranslation('translation', { + keyPrefix: 'backup.restore.target' + }); + + const forceKeyspaceRename = watch('target.forceKeyspaceRename'); + const classes = useStyles(); + + return ( +
+ + {forceKeyspaceRename && ( +
+ }} /> +
+ )} +
+ ); +}; + +export default RenameKeyspaceOption; diff --git a/managed/ui/src/redesign/features/backup/restore/pages/RestoreTarget/RestoreTablespaceNotSupported.tsx b/managed/ui/src/redesign/features/backup/restore/pages/RestoreTarget/RestoreTablespaceNotSupported.tsx new file mode 100644 index 000000000000..d8cfb826fa7d --- /dev/null +++ b/managed/ui/src/redesign/features/backup/restore/pages/RestoreTarget/RestoreTablespaceNotSupported.tsx @@ -0,0 +1,215 @@ +/* + * Created on Tue Sep 03 2024 + * + * Copyright 2021 YugaByte, Inc. and Contributors + * Licensed under the Polyform Free Trial License 1.0.0 (the "License") + * You may not use this file except in compliance with the License. You may obtain a copy of the License at + * http://github.com/YugaByte/yugabyte-db/blob/master/licenses/POLYFORM-FREE-TRIAL-LICENSE-1.0.0.txt + */ + +import { FC } from 'react'; +import { useFormContext } from 'react-hook-form'; +import { Trans, useTranslation } from 'react-i18next'; +import { isEmpty, keys } from 'lodash'; +import { makeStyles, Typography } from '@material-ui/core'; +import { AlertVariant, YBAlert, YBModal } from '../../../../../components'; +import { GetRestoreContext } from '../../RestoreUtils'; +import { RestoreFormModel } from '../../models/RestoreFormModel'; + +type RestoreTablespaceNotSupportedProps = { + visible: boolean; + onHide: () => void; +}; + +const useStyles = makeStyles((theme) => ({ + root: { + padding: theme.spacing(2), + color: theme.palette.ybacolors.ybDarkGray + }, + subTitle: { + marginTop: theme.spacing(4), + marginBottom: theme.spacing(1) + }, + errMsgPane: { + marginTop: theme.spacing(1), + marginBottom: theme.spacing(2), + border: `1px solid ${theme.palette.ybacolors.backgroundGrayDark}`, + background: theme.palette.common.white, + padding: `12px 16px`, + borderRadius: '8px' + }, + alert: { + alignItems: 'flex-start', + '& span': { + padding: '4px 0' + } + }, + heading: { + marginBottom: theme.spacing(3) + }, + tablespaceName: { + textTransform: 'uppercase', + color: '#67666C' + }, + tablespaceItem: { + marginTop: '4px' + }, + link: { + color: theme.palette.ybacolors.ybDarkGray, + textDecoration: 'underline' + } +})); + +export const RestoreTablespaceNotSupported: FC = ({ + visible, + onHide +}) => { + const [{ preflightResponse }, , { hideModal }] = GetRestoreContext(); + + const { setValue } = useFormContext(); + + const { t } = useTranslation('translation', { + keyPrefix: 'newRestoreModal.tablespaces.unSupportedModal' + }); + + const classes = useStyles(); + + if (!preflightResponse || !visible) return null; + + const storageLocationsKeys = keys(preflightResponse.perLocationBackupInfoMap); + + const [conflictingTablespaces, unsupportedTablespaces] = storageLocationsKeys.reduce( + (prevValues, currentValue) => { + // In restore entire backup, if there are multiple configs, just show the first one + if (prevValues[0].length !== 0 || prevValues[1].length !== 0) return prevValues; + + if ( + !isEmpty( + preflightResponse.perLocationBackupInfoMap[currentValue].tablespaceResponse + .conflictingTablespaces + ) + ) { + prevValues[0].push( + ...(preflightResponse.perLocationBackupInfoMap[currentValue].tablespaceResponse + .conflictingTablespaces as string[]) + ); + } + if ( + !isEmpty( + preflightResponse.perLocationBackupInfoMap[currentValue].tablespaceResponse + .unsupportedTablespaces + ) + ) { + prevValues[1].push( + ...(preflightResponse.perLocationBackupInfoMap[currentValue].tablespaceResponse + .unsupportedTablespaces as string[]) + ); + } + return prevValues; + }, + [[], []] as [string[], string[]] + ); + + return ( + { + setValue('target.useTablespaces', false, { shouldValidate: true }); + onHide(); + }} + onSubmit={() => { + setValue('target.useTablespaces', false, { shouldValidate: true }); + onHide(); + }} + buttonProps={{ + secondary: { + onClick: hideModal + } + }} + > + , + a: ( +
+ ) + }} + /> + } + variant={AlertVariant.Warning} + className={classes.alert} + /> + + {t('subTitle')} + + + + ) + }} + /> + + {conflictingTablespaces.length !== 0 && ( +
+ + {t('nameAlreadyExists')} + + + {t('tablespaceName')} + + {conflictingTablespaces.map((t) => ( +
+ {t} +
+ ))} +
+ )} + {unsupportedTablespaces.length !== 0 && ( +
+ + {t('topologyMismatch')} + + + {t('tablespaceName')} + + {unsupportedTablespaces.map((t) => ( +
+ {t} +
+ ))} +
+ )} + + ); +}; diff --git a/managed/ui/src/redesign/features/backup/restore/pages/RestoreTarget/RestoreTablespacesOption.tsx b/managed/ui/src/redesign/features/backup/restore/pages/RestoreTarget/RestoreTablespacesOption.tsx new file mode 100644 index 000000000000..495b28892bf1 --- /dev/null +++ b/managed/ui/src/redesign/features/backup/restore/pages/RestoreTarget/RestoreTablespacesOption.tsx @@ -0,0 +1,88 @@ +/* + * Created on Wed Aug 21 2024 + * + * Copyright 2021 YugaByte, Inc. and Contributors + * Licensed under the Polyform Free Trial License 1.0.0 (the "License") + * You may not use this file except in compliance with the License. You may obtain a copy of the License at + * http://github.com/YugaByte/yugabyte-db/blob/master/licenses/POLYFORM-FREE-TRIAL-LICENSE-1.0.0.txt + */ + +import { FC } from 'react'; +import { keys } from 'lodash'; +import { useFormContext } from 'react-hook-form'; +import { useToggle } from 'react-use'; +import { Trans, useTranslation } from 'react-i18next'; +import { makeStyles } from '@material-ui/core'; +import { GetRestoreContext } from '../../RestoreUtils'; +import { YBCheckbox } from '../../../../../components'; +import { RestoreTablespaceNotSupported } from './RestoreTablespaceNotSupported'; +import { RestoreFormModel } from '../../models/RestoreFormModel'; + +const useStyles = makeStyles((theme) => ({ + helperText: { + marginLeft: '35px', + color: theme.palette.ybacolors.textDarkGray, + fontSize: '12px' + } +})); +const RestoreTablespacesOption: FC = () => { + const [{ preflightResponse }] = GetRestoreContext(); + const [errMsgModalVisible, toggleErrMsgModal] = useToggle(false); + const { watch, setValue } = useFormContext(); + const { t } = useTranslation('translation', { + keyPrefix: 'backup.restore.target' + }); + const classes = useStyles(); + const useTablespaces = watch('target.useTablespaces'); + + if (preflightResponse === null) { + return null; + } + + const storageLocationsKeys = keys(preflightResponse.perLocationBackupInfoMap); + + const supportsTablespaces = storageLocationsKeys.some((location) => { + const tablespaceResponse = + preflightResponse.perLocationBackupInfoMap[location].tablespaceResponse; + return tablespaceResponse.containsTablespaces; + }); + + if (!supportsTablespaces) { + return null; + } + + const hasUnsupportedTablespaceConfig = storageLocationsKeys.some((location) => { + const tablespaceResponse = + preflightResponse.perLocationBackupInfoMap[location].tablespaceResponse; + return ( + tablespaceResponse.conflictingTablespaces?.length !== 0 || + tablespaceResponse.unsupportedTablespaces?.length !== 0 + ); + }); + + return ( +
+ { + if (event.target.checked && hasUnsupportedTablespaceConfig) { + toggleErrMsgModal(true); + } else { + setValue('target.useTablespaces', event.target.checked); + } + }} + /> +
+ }} t={t} /> +
+ toggleErrMsgModal(false)} + /> +
+ ); +}; + +export default RestoreTablespacesOption; diff --git a/managed/ui/src/redesign/features/backup/restore/pages/RestoreTarget/RestoreTarget.tsx b/managed/ui/src/redesign/features/backup/restore/pages/RestoreTarget/RestoreTarget.tsx new file mode 100644 index 000000000000..29ea47104ac1 --- /dev/null +++ b/managed/ui/src/redesign/features/backup/restore/pages/RestoreTarget/RestoreTarget.tsx @@ -0,0 +1,175 @@ +/* + * Created on Wed Aug 21 2024 + * + * Copyright 2021 YugaByte, Inc. and Contributors + * Licensed under the Polyform Free Trial License 1.0.0 (the "License") + * You may not use this file except in compliance with the License. You may obtain a copy of the License at + * http://github.com/YugaByte/yugabyte-db/blob/master/licenses/POLYFORM-FREE-TRIAL-LICENSE-1.0.0.txt + */ + +import { forwardRef, useEffect, useImperativeHandle } from 'react'; +import { useQuery } from 'react-query'; +import { useTranslation } from 'react-i18next'; +import { useFormContext } from 'react-hook-form'; +import { toast } from 'react-toastify'; + +import { Divider, makeStyles, Typography } from '@material-ui/core'; +import SelectKMS from './SelectKMS'; +import SelectUniverse from './SelectUniverse'; +import RenameKeyspaceOption from './RenameKeyspaceOption'; +import RestoreTablespacesOption from './RestoreTablespacesOption'; +import { RestoreFormModel } from '../../models/RestoreFormModel'; +import { getPreflightCheck } from '../../api/api'; +import { isDefinedNotNull, isNonEmptyString } from '../../../../../../utils/ObjectUtils'; +import { isDuplicateKeyspaceExistsinUniverse } from '../../../../../../components/backupv2/components/restore/RestoreUtils'; +import { GetRestoreContext } from '../../RestoreUtils'; +import { fetchTablesInUniverse } from '../../../../../../actions/xClusterReplication'; +import { TableType } from '../../../../../helpers/dtos'; +import ParallelThreadsConfig from './ParallelThreads'; +import { Page, PageRef } from '../../models/RestoreContext'; + +const useStyles = makeStyles((theme) => ({ + root: { + padding: '24px', + display: 'flex', + flexDirection: 'column', + gap: '16px' + }, + divider: { + margin: '8px 0', + background: theme.palette.ybacolors.ybBorderGray + }, + title: { + fontWeight: 700 + } +})); + +const RestoreTarget = forwardRef((_, forwardRef) => { + const classes = useStyles(); + + const { t } = useTranslation('translation', { + keyPrefix: 'backup.restore.target' + }); + + const [ + { backupDetails }, + { setDisableSubmit, setisSubmitting, setSubmitLabel, moveToPage, setPreflightResponse } + ] = GetRestoreContext(); + + const { watch, getValues, setValue, handleSubmit } = useFormContext(); + + const targetUniverse = watch('target.targetUniverse'); + const renameKeyspace = watch('target.renameKeyspace'); + const keyspaceToRestore = getValues().keyspacesToRestore; + + const { data: preflightRespData, isSuccess: isPreflightSuccess, isFetching } = useQuery( + ['backup', 'preflight', targetUniverse?.value], + () => + getPreflightCheck({ + backupUUID: keyspaceToRestore!.backupUUID, + universeUUID: targetUniverse!.value, + keyspaceTables: keyspaceToRestore!.keyspaceTables, + restoreToPointInTimeMillis: keyspaceToRestore?.restoreToPointInTimeMillis + }), + { + enabled: isNonEmptyString(targetUniverse?.value) && isDefinedNotNull(backupDetails), + onSuccess(data) { + setDisableSubmit(false); + setPreflightResponse(data); + }, + onError: () => { + toast.error('Preflight check failed!.'); + setDisableSubmit(true); + }, + onSettled: () => { + setisSubmitting(false); + } + } + ); + + // we do duplicate check only for YSQL and when the preflight check is finished + const enableVerifyDuplicateTable = + isDefinedNotNull(targetUniverse?.value) && + backupDetails?.backupType === TableType.PGSQL_TABLE_TYPE && + isPreflightSuccess && + isDefinedNotNull(preflightRespData); + + useQuery(['tables', targetUniverse?.value], () => fetchTablesInUniverse(targetUniverse?.value), { + enabled: enableVerifyDuplicateTable, + onSuccess: (resp) => { + if (isDuplicateKeyspaceExistsinUniverse(preflightRespData, resp.data)) { + setValue('target.forceKeyspaceRename', true); + setValue('target.renameKeyspace', true); + } + } + }); + + useEffect(() => { + if (isFetching) { + setDisableSubmit(true); + setisSubmitting(true); + setSubmitLabel(t('buttonLabels.verifying', { keyPrefix: 'backup' })); + } + }, [isFetching]); + + useEffect(() => { + setValue('target.forceKeyspaceRename', false); + setValue('target.renameKeyspace', false); + setDisableSubmit(!targetUniverse?.value); + }, [targetUniverse?.value]); + + // if the user chooses rename keyspaces, or "subset of tables", + // change the modal's submit button to 'Next' + useEffect(() => { + if (isFetching) return; + if (renameKeyspace) { + setSubmitLabel(t('buttonLabels.next', { keyPrefix: 'backup' })); + } else { + setSubmitLabel(t('buttonLabels.restore', { keyPrefix: 'backup' })); + } + }, [renameKeyspace, setSubmitLabel, t, isFetching]); + + useImperativeHandle( + forwardRef, + () => ({ + onNext: () => { + handleSubmit(() => { + if (renameKeyspace) { + moveToPage(Page.RENAME_KEYSPACES); + } else { + moveToPage(Page.RESTORE_FINAL); + } + })(); + }, + onPrev: () => { + moveToPage(Page.SOURCE); + } + }), + [renameKeyspace] + ); + + return ( +
+ + {t('selectUniverse')} + + + + + + + {t('selectKMS')} + + + {backupDetails?.category === 'YB_BACKUP_SCRIPT' && ( +
+ +
+ )} +
+ ); +}); + +RestoreTarget.displayName = 'SelectKeyspaces'; + +export default RestoreTarget; diff --git a/managed/ui/src/redesign/features/backup/restore/pages/RestoreTarget/SelectKMS.tsx b/managed/ui/src/redesign/features/backup/restore/pages/RestoreTarget/SelectKMS.tsx new file mode 100644 index 000000000000..24d232d273f1 --- /dev/null +++ b/managed/ui/src/redesign/features/backup/restore/pages/RestoreTarget/SelectKMS.tsx @@ -0,0 +1,163 @@ +/* + * Created on Wed Aug 21 2024 + * + * Copyright 2021 YugaByte, Inc. and Contributors + * Licensed under the Polyform Free Trial License 1.0.0 (the "License") + * You may not use this file except in compliance with the License. You may obtain a copy of the License at + * http://github.com/YugaByte/yugabyte-db/blob/master/licenses/POLYFORM-FREE-TRIAL-LICENSE-1.0.0.txt + */ + +import { FC } from 'react'; +import { find, has } from 'lodash'; +import { Trans, useTranslation } from 'react-i18next'; +import { Box, makeStyles } from '@material-ui/core'; +import { useFormContext } from 'react-hook-form'; +import { useQuery } from 'react-query'; +import { components } from 'react-select'; +import { YBReactSelectField } from '../../../../../../components/configRedesign/providerRedesign/components/YBReactSelect/YBReactSelectField'; + +import { YBTag, YBTag_Types } from '../../../../../../components/common/YBTag'; +import { + ReactSelectComponents, + ReactSelectStyles +} from '../../../scheduled/create/ReactSelectStyles'; +import { api } from '../../../../../helpers/api'; +import { getKMSConfigs } from '../../../../../../components/backupv2/common/BackupAPI'; +import { RestoreFormModel } from '../../models/RestoreFormModel'; +import { GetRestoreContext } from '../../RestoreUtils'; + +const useStyles = makeStyles((theme) => ({ + title: { + marginBottom: '8px' + }, + kmsHelperText: { + color: theme.palette.ybacolors.textDarkGray, + fontSize: '12px', + marginTop: '8px' + } +})); + +const SelectKMS: FC = () => { + const { t } = useTranslation('translation', { + keyPrefix: 'backup.restore.target' + }); + + const classes = useStyles(); + + const { + control, + formState: { errors }, + setValue + } = useFormContext(); + + const [{ backupDetails }] = GetRestoreContext(); + + const { data: kmsConfigs } = useQuery(['kms_configs'], () => getKMSConfigs(), { + onSuccess(kmsConfigList) { + if (backupDetails?.commonBackupInfo.kmsConfigUUID) { + const kmsUsedDuringBackup = kmsConfigList.find( + (kms: any) => kms?.metadata.configUUID === backupDetails?.commonBackupInfo.kmsConfigUUID + ); + if (kmsUsedDuringBackup) { + setValue('target.kmsConfig', { + value: kmsUsedDuringBackup.metadata.configUUID, + label: kmsUsedDuringBackup.metadata.provider + ' - ' + kmsUsedDuringBackup.metadata.name + }); + } + } + } + }); + + let kmsConfigList = kmsConfigs + ? kmsConfigs.map((config: any) => { + const labelName = config.metadata.provider + ' - ' + config.metadata.name; + return { value: config.metadata.configUUID, label: labelName }; + }) + : []; + + const { data: universeList } = useQuery(['universeList'], api.fetchUniverseList); + + const reactSelectComp = ReactSelectComponents(!!errors?.target?.kmsConfig?.message); + + const universe = find(universeList, { universeUUID: backupDetails?.universeUUID }); + let currentActiveKMS: string | null = ''; + if (universe && universe?.universeDetails?.encryptionAtRestConfig?.encryptionAtRestEnabled) + currentActiveKMS = universe?.universeDetails?.encryptionAtRestConfig?.kmsConfigUUID; + + //kms config used in the universe while taking backup + const isEncryptedBackup = has(backupDetails?.commonBackupInfo, 'kmsConfigUUID'); + const kmsIdDuringBackup = kmsConfigList.find( + (config: Record) => + config?.value === backupDetails?.commonBackupInfo?.kmsConfigUUID + ); + if (kmsIdDuringBackup) { + //move currently active kms to top of the list + kmsConfigList = kmsConfigList.filter( + (config: Record) => config.value !== kmsIdDuringBackup.value + ); + kmsConfigList.unshift(kmsIdDuringBackup); + } + + return ( +
+
{t('kmsConfig')}
+ { + if (isEncryptedBackup && props.data.value === kmsIdDuringBackup?.value) { + return ( + + + {props.data.label} + + {t('usedDuringBackup')} + + {props.data.value === currentActiveKMS && ( + {t('activeKMS')} + )} + + + ); + } + return ( + + + {props.data.label}{' '} + + {props.data.value === currentActiveKMS && ( + {t('activeKMS')} + )} + + + + ); + }, + SingleValue: ({ data }: { data: any }) => { + if (isEncryptedBackup && data.value === kmsIdDuringBackup?.value) { + return ( + <> + {data.label}   + {t('usedDuringBackup')} + + ); + } + return data.label; + }, + ...reactSelectComp + }} + /> +
+ }} /> +
+
+ ); +}; + +export default SelectKMS; diff --git a/managed/ui/src/redesign/features/backup/restore/pages/RestoreTarget/SelectUniverse.tsx b/managed/ui/src/redesign/features/backup/restore/pages/RestoreTarget/SelectUniverse.tsx new file mode 100644 index 000000000000..52c37afb7598 --- /dev/null +++ b/managed/ui/src/redesign/features/backup/restore/pages/RestoreTarget/SelectUniverse.tsx @@ -0,0 +1,134 @@ +/* + * Created on Wed Aug 21 2024 + * + * Copyright 2021 YugaByte, Inc. and Contributors + * Licensed under the Polyform Free Trial License 1.0.0 (the "License") + * You may not use this file except in compliance with the License. You may obtain a copy of the License at + * http://github.com/YugaByte/yugabyte-db/blob/master/licenses/POLYFORM-FREE-TRIAL-LICENSE-1.0.0.txt + */ + +import { useFormContext } from 'react-hook-form'; +import { useTranslation } from 'react-i18next'; +import { useQuery } from 'react-query'; +import { makeStyles } from '@material-ui/core'; +import { components } from 'react-select'; +import { api } from '../../../../../helpers/api'; +import { GetRestoreContext } from '../../RestoreUtils'; + +import { hasNecessaryPerm } from '../../../../rbac/common/RbacApiPermValidator'; +import { ApiPermissionMap } from '../../../../rbac/ApiAndUserPermMapping'; +import { YBTag, YBTag_Types } from '../../../../../../components/common/YBTag'; +import { YBReactSelectField } from '../../../../../../components/configRedesign/providerRedesign/components/YBReactSelect/YBReactSelectField'; +import { + ReactSelectComponents, + ReactSelectStyles +} from '../../../scheduled/create/ReactSelectStyles'; +import { YBLoadingCircleIcon } from '../../../../../../components/common/indicators'; +import { Universe } from '../../../../../helpers/dtos'; +import { RestoreFormModel } from '../../models/RestoreFormModel'; + +const useStyles = makeStyles((theme) => ({ + sourceUniverseLabel: { + display: 'inline-flex !important', + alignItems: 'center', + '& .status-badge': { + marginLeft: theme.spacing(0.5) + } + }, + title: { + marginBottom: '8px' + } +})); + +const SelectUniverse = () => { + const [{ backupDetails }] = GetRestoreContext(); + + const { + control, + formState: { errors } + } = useFormContext(); + + const { t } = useTranslation('translation', { + keyPrefix: 'backup.restore.target' + }); + + const classes = useStyles(); + + const reactSelectComp = ReactSelectComponents(!!errors?.target?.targetUniverse?.message); + + const { data: universeList, isLoading: isUniverseListLoading } = useQuery( + ['universeList'], + api.fetchUniverseList + ); + + let sourceUniverseNameAtFirst: Universe[] = []; + + // display source universe at top + if (universeList && universeList.length > 0) { + sourceUniverseNameAtFirst = [...universeList.filter((u) => u.universeUUID)]; + const sourceUniverseIndex = universeList.findIndex( + (u) => u.universeUUID === backupDetails?.universeUUID + ); + if (sourceUniverseIndex) { + const sourceUniverse = sourceUniverseNameAtFirst.splice(sourceUniverseIndex, 1); + sourceUniverseNameAtFirst.unshift(sourceUniverse[0]); + } + sourceUniverseNameAtFirst = sourceUniverseNameAtFirst.filter( + (u) => !u.universeDetails.universePaused + ); + } + + if (isUniverseListLoading) return ; + + return ( +
+
{t('targetUniverse')}
+ { + return { + label: universe.name, + value: universe.universeUUID, + isDisabled: !hasNecessaryPerm({ + onResource: universe.universeUUID, + ...ApiPermissionMap.UNIVERSE_RESTORE_BACKUP + }) + }; + })} + stylesOverride={ReactSelectStyles} + isClearable + components={{ + // eslint-disable-next-line react/display-name + Option: (props: any) => { + if (props.data.value === backupDetails?.universeUUID) { + return ( + + {props.data.label} + {t('backupSource')} + + ); + } + return ; + }, + SingleValue: ({ data }: { data: any }) => { + if (data.value === backupDetails?.universeUUID) { + return ( + <> + {data.label}   + {t('backupSource')} + + ); + } + return data.label; + }, + ...reactSelectComp + }} + /> +
+ ); +}; + +SelectUniverse.displayName = 'SelectUniverse'; +export default SelectUniverse; diff --git a/managed/ui/src/redesign/features/backup/scheduled/ScheduledBackupList.tsx b/managed/ui/src/redesign/features/backup/scheduled/ScheduledBackupList.tsx index fd3d62144804..12d0614e29d3 100644 --- a/managed/ui/src/redesign/features/backup/scheduled/ScheduledBackupList.tsx +++ b/managed/ui/src/redesign/features/backup/scheduled/ScheduledBackupList.tsx @@ -7,37 +7,138 @@ * http://github.com/YugaByte/yugabyte-db/blob/master/licenses/POLYFORM-FREE-TRIAL-LICENSE-1.0.0.txt */ -import { FC } from 'react'; +import { FC, useMemo } from 'react'; +import { useInfiniteQuery } from 'react-query'; +import { keyBy } from 'lodash'; +import { useTranslation } from 'react-i18next'; +import { useSelector } from 'react-redux'; import { useToggle } from 'react-use'; +import { Grid, makeStyles } from '@material-ui/core'; +import { YBButton } from '../../../components'; +import { YBLoadingCircleIcon } from '../../../../components/common/indicators'; +import InfiniteScroll from 'react-infinite-scroll-component'; import CreateScheduledBackupModal from './create/CreateScheduledBackupModal'; +import { BACKUP_REFETCH_INTERVAL } from '../../../../components/backupv2/common/BackupUtils'; +import { ScheduledCard } from './list/ScheduledCard'; import { ScheduledBackupEmpty } from './ScheduledBackupEmpty'; import { AllowedTasks } from '../../../helpers/dtos'; +import { getScheduledBackupList } from '../../../../components/backupv2/common/BackupScheduleAPI'; interface ScheduledBackupListProps { universeUUID: string; allowedTasks: AllowedTasks; } -const ScheduledBackupList: FC = () => { +const useStyles = makeStyles((theme) => ({ + noMoreBackup: { + display: 'flex', + justifyContent: 'center', + marginTop: '32px', + opacity: 0.5 + }, + cardList: { + display: 'flex', + flexDirection: 'column', + gap: '32px' + } +})); + +const ScheduledBackupList: FC = ({ universeUUID }) => { const [createScheduledBackupModalVisible, toggleCreateScheduledBackupModalVisible] = useToggle( false ); + const { data: scheduledBackupList, isLoading, fetchNextPage, hasNextPage } = useInfiniteQuery( + ['scheduled_backup_list'], + ({ pageParam = 0 }) => getScheduledBackupList(pageParam, universeUUID), + { + getNextPageParam: (lastPage) => lastPage.data.hasNext, + refetchInterval: BACKUP_REFETCH_INTERVAL + } + ); + + const storageConfigs = useSelector((reduxState: any) => reduxState.customer.configs); + + const storageConfigsMap = useMemo(() => keyBy(storageConfigs?.data ?? [], 'configUUID'), [ + storageConfigs + ]); + + const { t } = useTranslation('translation', { + keyPrefix: 'backup.scheduled.list' + }); + + const classes = useStyles(); + + if (isLoading) { + return ; + } + + const schedules = scheduledBackupList?.pages + .flatMap((page) => { + return page.data.entities; + }) + .filter( + (schedule) => + schedule.backupInfo !== undefined && schedule.backupInfo.universeUUID === universeUUID + ); + + if (!schedules || schedules?.length === 0) { + return ( +
+ { + toggleCreateScheduledBackupModalVisible(true); + }} + /> + { + toggleCreateScheduledBackupModalVisible(false); + }} + /> +
+ ); + } + return ( -
- { - toggleCreateScheduledBackupModalVisible(true); - }} - /> - { - toggleCreateScheduledBackupModalVisible(false); - }} - /> -
+ } + endMessage={
{t('noMoreSchedules')}
} + height={'550px'} + > +
+ + + { + toggleCreateScheduledBackupModalVisible(true); + }} + > + {t('createPolicy')} + + + + {schedules.map((schedule) => ( + + ))} + { + toggleCreateScheduledBackupModalVisible(false); + }} + /> +
+
); }; diff --git a/managed/ui/src/redesign/features/backup/scheduled/api/api.ts b/managed/ui/src/redesign/features/backup/scheduled/api/api.ts index f7c01078628e..571098a8590a 100644 --- a/managed/ui/src/redesign/features/backup/scheduled/api/api.ts +++ b/managed/ui/src/redesign/features/backup/scheduled/api/api.ts @@ -17,10 +17,48 @@ import { ROOT_URL } from '../../../../../config'; * @param payload - The backup information. * @returns A promise that resolves to the taskUUID of the backup schedule creation. */ -export const createScheduledBackup = (payload: IBackupSchedule['backupInfo']) => { +export const createScheduledBackupPolicy = (payload: IBackupSchedule['backupInfo']) => { const customerUUID = localStorage.getItem('customerId'); return axios.post(`${ROOT_URL}/customers/${customerUUID}/create_backup_schedule_async`, { ...payload, customerUUID }); }; + +// toggle on/off scheduled backup policy +export const toggleScheduledBackupPolicy = ( + universeUUID: string, + values: Partial & Pick +) => { + const customerUUID = localStorage.getItem('customerId'); + + if (values['cronExpression']) { + delete values['frequency']; + } + + return axios.put( + `${ROOT_URL}/customers/${customerUUID}/universes/${universeUUID}/schedules/${values['scheduleUUID']}/pause_resume`, + values + ); +}; + +// delete scheduled backup policy +export const deleteSchedulePolicy = (universeUUID: string, scheduledPolicyUUID: string) => { + const customerUUID = localStorage.getItem('customerId'); + + return axios.delete( + `${ROOT_URL}/customers/${customerUUID}/universes/${universeUUID}/schedules/${scheduledPolicyUUID}/delete_backup_schedule_async` + ); +}; + +// edit scheduled backup policy +export const editScheduledBackupPolicy = ( + universeUUID: string, + values: Partial & Pick +) => { + const customerUUID = localStorage.getItem('customerId'); + return axios.put( + `${ROOT_URL}/customers/${customerUUID}/universes/${universeUUID}/schedules/${values['scheduleUUID']}/edit_backup_schedule_async`, + values + ); +}; diff --git a/managed/ui/src/redesign/features/backup/scheduled/create/pages/BackupFrequency/BackupFrequencyField.tsx b/managed/ui/src/redesign/features/backup/scheduled/create/pages/BackupFrequency/BackupFrequencyField.tsx index ff960b38d334..dee26eed8e61 100644 --- a/managed/ui/src/redesign/features/backup/scheduled/create/pages/BackupFrequency/BackupFrequencyField.tsx +++ b/managed/ui/src/redesign/features/backup/scheduled/create/pages/BackupFrequency/BackupFrequencyField.tsx @@ -21,6 +21,7 @@ import { BackupFrequencyModel, TimeUnit } from '../../models/IBackupFrequency'; type BackupFrequencyFieldProps = { control: Control; + isEditMode?: boolean; }; const useStyles = makeStyles((theme) => ({ @@ -74,7 +75,7 @@ const useStyles = makeStyles((theme) => ({ } })); -const BackupFrequencyField: FC = ({ control }) => { +const BackupFrequencyField: FC = ({ control, isEditMode = false }) => { const classes = useStyles(); const { t } = useTranslation('translation', { @@ -139,6 +140,7 @@ const BackupFrequencyField: FC = ({ control }) => { control={control} name="useIncrementalBackup" data-testid="useIncrementalBackup" + disabled={isEditMode} /> {useIncrementalBackupVal && (
diff --git a/managed/ui/src/redesign/features/backup/scheduled/create/pages/BackupObjects/BackupObjects.tsx b/managed/ui/src/redesign/features/backup/scheduled/create/pages/BackupObjects/BackupObjects.tsx index 738b9e3d6399..1c1a674618f8 100644 --- a/managed/ui/src/redesign/features/backup/scheduled/create/pages/BackupObjects/BackupObjects.tsx +++ b/managed/ui/src/redesign/features/backup/scheduled/create/pages/BackupObjects/BackupObjects.tsx @@ -14,7 +14,7 @@ import { ScheduledBackupContext, ScheduledBackupContextMethods } from '../../models/ScheduledBackupContext'; -import { useForm } from 'react-hook-form'; +import { Control, FieldValues, useForm } from 'react-hook-form'; import { useQuery } from 'react-query'; import { useTranslation } from 'react-i18next'; import { yupResolver } from '@hookform/resolvers/yup'; @@ -60,12 +60,12 @@ const BackupObjects = forwardRef((_, forwardRef) => { const Default_Keyspace_database_options = [ { - keySpace: t('allDatabase'), + keySpace: t('allDatabase', { keyPrefix: 'backup' }), tableType: BACKUP_API_TYPES.YSQL, isDefaultOption: true }, { - keySpace: t('allKeyspaces'), + keySpace: t('allKeyspaces', { keyPrefix: 'backup' }), tableType: BACKUP_API_TYPES.YCQL, isDefaultOption: true } @@ -108,7 +108,7 @@ const BackupObjects = forwardRef((_, forwardRef) => { [] ); - const reactSelecctComp = ReactSelectComponents(!!errors.keyspace?.message); + const reactSelectComp = ReactSelectComponents(!!errors.keyspace?.message); if (isTableListLoading || !tablesInUniverse) return ( @@ -179,7 +179,7 @@ const BackupObjects = forwardRef((_, forwardRef) => { ); }, - ...reactSelecctComp + ...reactSelectComp }} />
@@ -188,7 +188,7 @@ const BackupObjects = forwardRef((_, forwardRef) => { )} {selectedKeyspace?.tableType === BACKUP_API_TYPES.YCQL && ( } tablesInSelectedKeyspace={ selectedKeyspace?.isDefaultOption ? [] diff --git a/managed/ui/src/redesign/features/backup/scheduled/create/pages/BackupObjects/SelectTables.tsx b/managed/ui/src/redesign/features/backup/scheduled/create/pages/BackupObjects/SelectTables.tsx index 72927e026cf0..b9db28d817a8 100644 --- a/managed/ui/src/redesign/features/backup/scheduled/create/pages/BackupObjects/SelectTables.tsx +++ b/managed/ui/src/redesign/features/backup/scheduled/create/pages/BackupObjects/SelectTables.tsx @@ -13,14 +13,13 @@ import { useTranslation } from 'react-i18next'; import { isEqual } from 'lodash'; import { FormHelperText, makeStyles } from '@material-ui/core'; import { YBModal, YBRadioGroup } from '../../../../../../components'; -import { BackupObjectsModel } from '../../models/IBackupObjects'; import { YBTable } from '../../../../../../../components/backupv2/components/restore/pages/selectTables/YBTable'; import { Backup_Options_Type, ITable } from '../../../../../../../components/backupv2'; import { ReactComponent as EditIcon } from '../../../../../../assets/edit-pen-orange.svg'; interface SelectTablesProps { - control: Control; + control: Control; tablesInSelectedKeyspace: ITable[]; } diff --git a/managed/ui/src/redesign/features/backup/scheduled/create/pages/BackupSummary/BackupSummary.tsx b/managed/ui/src/redesign/features/backup/scheduled/create/pages/BackupSummary/BackupSummary.tsx index fa4c7fdda864..1e2d299282df 100644 --- a/managed/ui/src/redesign/features/backup/scheduled/create/pages/BackupSummary/BackupSummary.tsx +++ b/managed/ui/src/redesign/features/backup/scheduled/create/pages/BackupSummary/BackupSummary.tsx @@ -9,7 +9,7 @@ import { forwardRef, Fragment, useContext, useImperativeHandle } from 'react'; import cronstrue from 'cronstrue'; -import { useMutation } from 'react-query'; +import { useMutation, useQueryClient } from 'react-query'; import { toast } from 'react-toastify'; import { values } from 'lodash'; import { Trans, useTranslation } from 'react-i18next'; @@ -28,7 +28,7 @@ import { BACKUP_API_TYPES } from '../../../../../../../components/backupv2'; import { GetUniverseUUID, prepareScheduledBackupPayload } from '../../../ScheduledBackupUtils'; -import { createScheduledBackup } from '../../../api/api'; +import { createScheduledBackupPolicy } from '../../../api/api'; import { ReactComponent as CheckIcon } from '../../../../../../assets/check-white.svg'; import BulbIcon from '../../../../../../assets/bulb.svg'; @@ -89,6 +89,7 @@ const useStyles = makeStyles((theme) => ({ })); const BackupSummary = forwardRef((_, forwardRef) => { + const [scheduledBackupContext, { setPage, setIsSubmitting }, { hideModal }] = (useContext( ScheduledBackupContext ) as unknown) as ScheduledBackupContextMethods; @@ -99,18 +100,20 @@ const BackupSummary = forwardRef((_, forwardRef) => { const classes = useStyles(); const universeUUID = GetUniverseUUID(); + const queryClient = useQueryClient(); const doCreateScheduledBackup = useMutation( - (payload: ExtendedBackupScheduleProps) => createScheduledBackup(payload), + (payload: ExtendedBackupScheduleProps) => createScheduledBackupPolicy(payload), { onSuccess: () => { toast.success( - + {t('successMsg')} ); hideModal(); + queryClient.invalidateQueries('scheduled_backup_list'); }, onError: (error: any) => { toast.error(error?.response?.data?.error || t('errorMsg')); @@ -147,8 +150,8 @@ const BackupSummary = forwardRef((_, forwardRef) => { const fullBackup = backupFrequency.useCronExpression ? cronstrue.toString(backupFrequency.cronExpression) : `${t('every', { - keyPrefix: 'backup.scheduled.create.backupFrequency.backupFrequencyField' - })} ${backupFrequency.frequency} ${backupFrequency.frequencyTimeUnit}`; + keyPrefix: 'backup.scheduled.create.backupFrequency.backupFrequencyField' + })} ${backupFrequency.frequency} ${backupFrequency.frequencyTimeUnit}`; let tablesList: JSX.Element | string = t('allTables'); @@ -191,7 +194,7 @@ const BackupSummary = forwardRef((_, forwardRef) => { { name: t(dbType), value: backupObjects.keyspace?.isDefaultOption - ? t(apiType === 'Ysql' ? 'allDatabases' : 'allKeyspaces') + ? t(apiType === 'Ysql' ? 'allDatabase' : 'allKeyspaces', { keyPrefix: 'backup' }) : backupObjects.keyspace?.label }, { @@ -212,10 +215,9 @@ const BackupSummary = forwardRef((_, forwardRef) => { name: t('incrementalBackup'), value: backupFrequency.useIncrementalBackup ? `${t('every', { - keyPrefix: 'backup.scheduled.create.backupFrequency.backupFrequencyField' - })} ${backupFrequency.incrementalBackupFrequency} ${ - backupFrequency.incrementalBackupFrequencyTimeUnit - }` + keyPrefix: 'backup.scheduled.create.backupFrequency.backupFrequencyField' + })} ${backupFrequency.incrementalBackupFrequency} ${backupFrequency.incrementalBackupFrequencyTimeUnit + }` : '-' }, { diff --git a/managed/ui/src/redesign/features/backup/scheduled/list/EditScheduledPolicyModal.tsx b/managed/ui/src/redesign/features/backup/scheduled/list/EditScheduledPolicyModal.tsx new file mode 100644 index 000000000000..ed24b1c5cc7b --- /dev/null +++ b/managed/ui/src/redesign/features/backup/scheduled/list/EditScheduledPolicyModal.tsx @@ -0,0 +1,206 @@ +/* + * Created on Mon Sep 09 2024 + * + * Copyright 2021 YugaByte, Inc. and Contributors + * Licensed under the Polyform Free Trial License 1.0.0 (the "License") + * You may not use this file except in compliance with the License. You may obtain a copy of the License at + * http://github.com/YugaByte/yugabyte-db/blob/master/licenses/POLYFORM-FREE-TRIAL-LICENSE-1.0.0.txt + */ + +import { FC } from 'react'; +import { Control, useForm } from 'react-hook-form'; +import { useMutation, useQueryClient } from 'react-query'; +import { Trans, useTranslation } from 'react-i18next'; +import { capitalize } from 'lodash'; +import { toast } from 'react-toastify'; +import { makeStyles, MenuItem, Typography } from '@material-ui/core'; +import { YBModal, YBSelectField } from '../../../../components'; +import BackupFrequencyField from '../create/pages/BackupFrequency/BackupFrequencyField'; +import { MILLISECONDS_IN } from '../../../../../components/backupv2/scheduled/ScheduledBackupUtils'; +import { createErrorMessage } from '../../../../../utils/ObjectUtils'; +import { editScheduledBackupPolicy } from '../api/api'; +import { IBackupSchedule } from '../../../../../components/backupv2'; +import { + BackupFrequencyModel, + BackupStrategyType, + TimeUnit +} from '../create/models/IBackupFrequency'; + +interface EditScheduledPolicyModalProps { + visible: boolean; + onHide: () => void; + universeUUID: string; + schedule: IBackupSchedule; +} + +interface EditScheduledPolicyModalFormProps extends BackupFrequencyModel { + scheduledBackupType: BackupStrategyType; +} + +const useStyles = makeStyles((theme) => ({ + root: { + padding: '24px 20px' + }, + menuItem: { + height: '72px' + }, + unorderedList: { + listStyleType: 'disc', + color: theme.palette.ybacolors.textDarkGray, + paddingLeft: '20px', + marginTop: '8px' + }, + strategyOptions: { + display: 'flex', + flexDirection: 'column' + }, + selectStrategy: { + marginBottom: '40px', + width: '400px' + } +})); + +const EditScheduledPolicyModal: FC = ({ + visible, + onHide, + universeUUID, + schedule +}) => { + const { t } = useTranslation('translation', { keyPrefix: 'backup.scheduled.list.editModal' }); + const backupFrequencyKeyPrefix = 'backup.scheduled.create.backupFrequency'; + const classes = useStyles(); + const queryClient = useQueryClient(); + const { control, handleSubmit } = useForm({ + defaultValues: { + scheduledBackupType: schedule.backupInfo.pointInTimeRestoreEnabled + ? BackupStrategyType.POINT_IN_TIME + : BackupStrategyType.STANDARD, + frequency: schedule.frequency + ? schedule.frequency / (MILLISECONDS_IN as any)[schedule.frequencyTimeUnit] + : 0, + frequencyTimeUnit: capitalize(schedule.frequencyTimeUnit) as TimeUnit, + useCronExpression: schedule.cronExpression ? true : false, + cronExpression: schedule.cronExpression, + useIncrementalBackup: !!schedule.incrementalBackupFrequency, + incrementalBackupFrequency: schedule.incrementalBackupFrequency + ? schedule.incrementalBackupFrequency / + (MILLISECONDS_IN as any)[schedule.incrementalBackupFrequencyTimeUnit] + : 0, + incrementalBackupFrequencyTimeUnit: capitalize( + schedule.incrementalBackupFrequencyTimeUnit + ) as TimeUnit + } + }); + + const doEditBackupSchedule = useMutation( + (values: IBackupSchedule) => editScheduledBackupPolicy(universeUUID, values), + { + onSuccess: () => { + toast.success(t('success')); + queryClient.invalidateQueries('scheduled_backup_list'); + onHide(); + }, + onError: (error) => { + toast.error(createErrorMessage(error)); + } + } + ); + + if (!visible) return null; + + const backupTypeOptions = [ + +
+ + {t('standard.title', { keyPrefix: backupFrequencyKeyPrefix })} + +
    + }} + i18nKey={`${backupFrequencyKeyPrefix}.standard.helpText`} + /> +
+
+
, + +
+ + {t('pitr.title', { keyPrefix: backupFrequencyKeyPrefix })} + + +
+
+ ]; + + return ( + { + handleSubmit((data) => { + const payload: Record = {}; + if (data.useCronExpression) { + payload['cronExpression'] = data.cronExpression; + } else { + payload['frequencyTimeUnit'] = data.frequencyTimeUnit.toUpperCase(); + payload['schedulingFrequency'] = + (MILLISECONDS_IN as Record)[data.frequencyTimeUnit.toUpperCase()] * + data.frequency; + } + + if (data.useIncrementalBackup) { + payload['incrementalBackupFrequency'] = + (MILLISECONDS_IN as Record)[ + data.incrementalBackupFrequencyTimeUnit.toUpperCase() + ] * data.incrementalBackupFrequency; + payload[ + 'incrementalBackupFrequencyTimeUnit' + ] = data.incrementalBackupFrequencyTimeUnit.toUpperCase(); + } + doEditBackupSchedule.mutate({ + scheduleUUID: schedule.scheduleUUID, + ...payload + } as any); + })(); + }} + > +
+ + t(val === BackupStrategyType.STANDARD ? 'standard.title' : 'pitr.title', { + keyPrefix: backupFrequencyKeyPrefix + }) + } + className={classes.selectStrategy} + disabled + > + {...backupTypeOptions} + + } + isEditMode + /> +
+
+ ); +}; + +export default EditScheduledPolicyModal; diff --git a/managed/ui/src/redesign/features/backup/scheduled/list/ScheduledBackupShowIntervalsModal.tsx b/managed/ui/src/redesign/features/backup/scheduled/list/ScheduledBackupShowIntervalsModal.tsx new file mode 100644 index 000000000000..9d3cb58ea78a --- /dev/null +++ b/managed/ui/src/redesign/features/backup/scheduled/list/ScheduledBackupShowIntervalsModal.tsx @@ -0,0 +1,111 @@ +/* + * Created on Tue Sep 10 2024 + * + * Copyright 2021 YugaByte, Inc. and Contributors + * Licensed under the Polyform Free Trial License 1.0.0 (the "License") + * You may not use this file except in compliance with the License. You may obtain a copy of the License at + * http://github.com/YugaByte/yugabyte-db/blob/master/licenses/POLYFORM-FREE-TRIAL-LICENSE-1.0.0.txt + */ + +import { FC } from 'react'; +import cronstrue from 'cronstrue'; +import { useTranslation } from 'react-i18next'; +import { makeStyles } from '@material-ui/core'; +import { YBModal } from '../../../../components'; +import { convertMsecToTimeFrame } from '../../../../../components/backupv2/scheduled/ScheduledBackupUtils'; +import { IBackupSchedule } from '../../../../../components/backupv2'; + +interface ScheduledBackupShowIntervalsModalProps { + schedule: IBackupSchedule; + visible: boolean; + onHide: () => void; +} + +const useStyles = makeStyles((theme) => ({ + root: { + padding: '24px' + }, + panel: { + width: '100%', + padding: '16px', + border: `1px solid ${theme.palette.ybacolors.ybBorderGray}`, + background: '#FBFBFB', + borderRadius: '8px', + display: 'flex', + gap: '60px' + }, + attribute: { + fontWeight: 500, + fontSize: '11.5px', + textTransform: 'uppercase', + color: theme.palette.grey[600], + '&>div': { + marginBottom: '8px' + } + }, + value: { + fontSize: '13px', + fontWeight: 600, + color: theme.palette.grey[900] + } +})); + +const ScheduledBackupShowIntervalsModal: FC = ({ + schedule, + onHide, + visible +}) => { + const { t } = useTranslation('translation', { + keyPrefix: 'backup.scheduled.list.showIntervalModal' + }); + const classes = useStyles(); + + let backupInterval = ''; + + if (schedule.cronExpression) { + backupInterval = cronstrue.toString(schedule.cronExpression); + } else { + backupInterval = convertMsecToTimeFrame( + schedule.frequency, + schedule.frequencyTimeUnit, + 'Every ' + ); + } + + const incrementalBackup = + schedule.incrementalBackupFrequency === 0 + ? '-' + : convertMsecToTimeFrame( + schedule.incrementalBackupFrequency, + schedule.incrementalBackupFrequencyTimeUnit, + 'Every ' + ); + + return ( + +
+
+
{t('fullBackup')}
+
{t('incrementalBackup')}
+
+
+
{backupInterval}
+
{incrementalBackup}
+
+
+
+ ); +}; + +export default ScheduledBackupShowIntervalsModal; diff --git a/managed/ui/src/redesign/features/backup/scheduled/list/ScheduledCard.tsx b/managed/ui/src/redesign/features/backup/scheduled/list/ScheduledCard.tsx new file mode 100644 index 000000000000..37ce38062059 --- /dev/null +++ b/managed/ui/src/redesign/features/backup/scheduled/list/ScheduledCard.tsx @@ -0,0 +1,408 @@ +/* + * Created on Mon Sep 09 2024 + * + * Copyright 2021 YugaByte, Inc. and Contributors + * Licensed under the Polyform Free Trial License 1.0.0 (the "License") + * You may not use this file except in compliance with the License. You may obtain a copy of the License at + * http://github.com/YugaByte/yugabyte-db/blob/master/licenses/POLYFORM-FREE-TRIAL-LICENSE-1.0.0.txt + */ + +import { FC, useState } from 'react'; +import { useMutation, useQueryClient } from 'react-query'; +import { Trans, useTranslation } from 'react-i18next'; +import { toast } from 'react-toastify'; +import clsx from 'clsx'; +import cronstrue from 'cronstrue'; + +import { Grid, makeStyles, Typography } from '@material-ui/core'; +import { DropdownButton, MenuItem } from 'react-bootstrap'; +import { YBToggle } from '../../../../components'; +import { YBConfirmModal } from '../../../../../components/modals'; +import EditScheduledPolicyModal from './EditScheduledPolicyModal'; +import ScheduledBackupShowIntervalsModal from './ScheduledBackupShowIntervalsModal'; +import ScheduledPolicyShowTables from './ScheduledPolicyShowTables'; +import { convertMsecToTimeFrame } from '../../../../../components/backupv2/scheduled/ScheduledBackupUtils'; +import { ybFormatDate } from '../../../../helpers/DateUtils'; +import { RbacValidator } from '../../../rbac/common/RbacApiPermValidator'; +import { ApiPermissionMap } from '../../../rbac/ApiAndUserPermMapping'; +import { deleteSchedulePolicy, toggleScheduledBackupPolicy } from '../api/api'; +import { TableTypeLabel } from '../../../../helpers/dtos'; +import { YBTag, YBTag_Types } from '../../../../../components/common/YBTag'; +import { IBackupSchedule, IBackupScheduleStatus } from '../../../../../components/backupv2'; + +interface ScheduledCardProps { + schedule: IBackupSchedule; + universeUUID: string; + storageConfig: Record | undefined; +} +const useStyles = makeStyles((theme) => ({ + card: { + borderRadius: '8px', + border: `1px solid ${theme.palette.ybacolors.ybBorderGray}`, + boxShadow: `0px 4px 10px 0px rgba(0, 0, 0, 0.05)` + }, + header: { + height: '56px', + display: 'flex', + justifyContent: 'space-between', + padding: '8px 24px', + borderBottom: `1px solid ${theme.palette.ybacolors.ybBorderGray}`, + '&>.dropdown>button': { + height: '40px' + } + }, + title: { + fontWeight: 600, + gap: '6px', + '& .yb-tag': { + margin: 0 + }, + '&>p': { + fontSize: '16px' + }, + '&>.MuiFormControl-root': { + marginLeft: '24px' + } + }, + content: { + padding: '24px', + display: 'flex', + justifyContent: 'space-between', + borderBottom: `1px solid ${theme.palette.ybacolors.ybBorderGray}` + }, + attribute: { + textTransform: 'uppercase', + fontWeight: 500, + fontSize: '11.5px', + color: theme.palette.grey[600], + lineHeight: '16px' + }, + value: { + fontSize: '13px', + fontWeight: 400, + color: theme.palette.grey[900], + marginTop: '6px' + }, + details: { + borderRadius: '8px', + background: '#FBFBFB', + border: `1px solid ${theme.palette.ybacolors.ybBorderGray}`, + width: '600px', + padding: '16px', + display: 'flex', + gap: '60px', + '&>div': { + display: 'flex', + flexDirection: 'column', + gap: '8px' + }, + '&>div:nth-child(2)': { + fontSize: '13px', + fontWeight: 600, + lineHeight: '16px' + } + }, + nextScheduledDates: { + display: 'flex', + gap: '55px', + '&>div': { + width: '130px' + } + }, + footer: { + height: '72px', + padding: '16px 24px', + display: 'flex', + gap: '40px' + }, + link: { + textDecoration: 'underline', + color: theme.palette.ybacolors.labelBackground, + '&:hover': { + color: theme.palette.ybacolors.labelBackground + }, + cursor: 'pointer' + }, + inactive: { + opacity: 0.5 + } +})); + +type toogleScheduleProps = Partial & Pick; + +export const ScheduledCard: FC = ({ + schedule, + universeUUID, + storageConfig +}) => { + const classes = useStyles(); + const [showDeleteModal, setShowDeleteModal] = useState(''); + const [showEditModal, setShowEditModal] = useState(false); + const [showIntervalsModal, setShowIntervalsModal] = useState(false); + const [showTablesModal, setShowTablesModal] = useState(false); + const { t } = useTranslation('translation', { + keyPrefix: 'backup.scheduled.list' + }); + let backupInterval = ''; + + if (schedule.cronExpression) { + backupInterval = cronstrue.toString(schedule.cronExpression); + } else { + backupInterval = convertMsecToTimeFrame( + schedule.frequency, + schedule.frequencyTimeUnit, + 'Every ' + ); + } + + const queryClient = useQueryClient(); + + const toggleSchedule = useMutation( + (val: toogleScheduleProps) => toggleScheduledBackupPolicy(universeUUID, val), + { + onSuccess: (_, params: any) => { + toast.success(`Schedule policy is now ${params.status}`); + queryClient.invalidateQueries('scheduled_backup_list'); + }, + onError: (resp: any) => { + toast.error(resp.response.data.error); + } + } + ); + + const deleteSchedule = useMutation( + () => deleteSchedulePolicy(universeUUID, schedule.scheduleUUID), + + { + onSuccess: () => { + toast.success(t('deleteMsg')); + queryClient.invalidateQueries('scheduled_backup_list'); + }, + onError: (resp: any) => { + toast.error(resp.response.data.error); + } + } + ); + + const isScheduleEnabled = schedule.status === IBackupScheduleStatus.ACTIVE; + + const wrapTableName = (tablesList: string[] | undefined, isKeyspace = false) => { + if (!Array.isArray(tablesList) || tablesList.length === 0) { + return '-'; + } + if (tablesList.length === 1) { + return {tablesList[0]}; + } + return ( + { + setShowTablesModal(true); + }} + > + {tablesList.length} {isKeyspace ? ' Keyspaces' : ' Tables'} + + ); + }; + + return ( +
+
+ + {schedule.scheduleName} + + {TableTypeLabel[schedule.backupInfo.backupType ?? '-']} + + { + toggleSchedule.mutate({ + scheduleUUID: schedule.scheduleUUID, + frequency: schedule.frequency, + cronExpression: schedule.cronExpression, + status: e.target.checked + ? IBackupScheduleStatus.ACTIVE + : IBackupScheduleStatus.STOPPED, + frequencyTimeUnit: schedule.frequencyTimeUnit + }); + }} + /> + + e.stopPropagation()} + > + + { + if (!isScheduleEnabled) return; + setShowEditModal(true); + }} + disabled={schedule.status !== IBackupScheduleStatus.ACTIVE} + > + {t('editPolicy')} + + + + { + setShowDeleteModal(schedule.scheduleUUID); + }} + className="action-danger" + > + {t('deletePolicy')} + + + +
+
+
+
+ {t('scope')} + {t('keyspace')} + {t('tables')} +
+
+ {schedule.backupInfo?.fullBackup ? t('fullBackup') : t('tableBackup')} + + {wrapTableName( + schedule.backupInfo?.keyspaceList?.map((k) => k.keyspace), + true + )} + + {wrapTableName(schedule.backupInfo?.keyspaceList?.[0]?.tablesList)} +
+
+
+
+
{t('lastBackup')}
+
+ {schedule.prevCompletedTask ? ybFormatDate(schedule.prevCompletedTask) : '-'} +
+
+
+
{t('nextBackup')}
+
+ {schedule.nextExpectedTask ? ybFormatDate(schedule.nextExpectedTask) : '-'} +
+
+
+
+
+ deleteSchedule.mutateAsync()} + currentModal={schedule.scheduleUUID} + visibleModal={showDeleteModal} + hideConfirmModal={() => { + setShowDeleteModal(''); + }} + > + {t('deleteModal.deleteMsg')} + + { + setShowEditModal(false); + }} + universeUUID={universeUUID} + schedule={schedule} + /> + { + setShowIntervalsModal(false); + }} + /> + { + setShowTablesModal(false); + }} + /> +
+ ); +}; diff --git a/managed/ui/src/redesign/features/backup/scheduled/list/ScheduledPolicyShowTables.tsx b/managed/ui/src/redesign/features/backup/scheduled/list/ScheduledPolicyShowTables.tsx new file mode 100644 index 000000000000..d60eefe097e0 --- /dev/null +++ b/managed/ui/src/redesign/features/backup/scheduled/list/ScheduledPolicyShowTables.tsx @@ -0,0 +1,59 @@ +/* + * Created on Tue Sep 10 2024 + * + * Copyright 2021 YugaByte, Inc. and Contributors + * Licensed under the Polyform Free Trial License 1.0.0 (the "License") + * You may not use this file except in compliance with the License. You may obtain a copy of the License at + * http://github.com/YugaByte/yugabyte-db/blob/master/licenses/POLYFORM-FREE-TRIAL-LICENSE-1.0.0.txt + */ + +import { FC } from 'react'; +import { useTranslation } from 'react-i18next'; +import { TableHeaderColumn } from 'react-bootstrap-table'; +import { YBModal } from '../../../../components'; +import { YBTable } from '../../../../../components/common/YBTable'; +import { IBackupSchedule } from '../../../../../components/backupv2'; + +interface ScheduledPolicyShowTablesProps { + schedule: IBackupSchedule; + visible: boolean; + onHide: () => void; +} + +const ScheduledPolicyShowTables: FC = ({ + visible, + onHide, + schedule +}) => { + const tables = schedule.backupInfo?.keyspaceList?.[0]?.tablesList?.map((t) => ({ + table: t + })); + + const { t } = useTranslation('translation', { keyPrefix: 'backup.scheduled.list' }); + + return ( + + + + Tables + + + + ); +}; + +export default ScheduledPolicyShowTables; diff --git a/managed/ui/src/translations/en.json b/managed/ui/src/translations/en.json index 54caf99e926c..4d1716ce976f 100644 --- a/managed/ui/src/translations/en.json +++ b/managed/ui/src/translations/en.json @@ -2494,6 +2494,15 @@ "backup": { "Ysql": "YSQL", "Ycql": "YCQL", + "allDatabase": "All Databases", + "allKeyspaces": "All Keyspaces", + "buttonLabels": { + "restore": "Restore", + "next": "Next", + "verifying": "Verifying", + "waitingMsg": "This can take a few seconds", + "rename": "Rename" + }, "scheduled": { "empty": { "createSchduledPolicy": "Create Scheduled Backup Policy", @@ -2521,8 +2530,6 @@ "parallelThreads": "Parallel Threads (Optional)" }, "backupObjects": { - "allDatabase": "All Databases", - "allKeyspaces": "All Keyspaces", "advancedConfig": "Advanced Configuration", "selectDBTitle": "Select the Keyspaces/Databases you want to backup", "selectDB": "Databases/Keyspaces", @@ -2581,8 +2588,6 @@ "apiType": "API Type", "database": "Database", "keyspace": "Keyspace", - "allKeyspaces": "All Keyspaces", - "allDatabases": "All Databases", "tables": "Tables", "allTables": "All Tables", "backupStrategy": "Backup Strategy", @@ -2607,6 +2612,100 @@ "unableToFetchTables": "Unable to fetch tables", "parallelThreads": "Parallel threads should be between 1 and 100" } + }, + "list": { + "createPolicy": "Create Scheduled Backup Policy", + "noMoreSchedules": "No more schedules to display", + "scope": "Scope", + "keyspace": "Keyspace", + "tables": "Tables", + "lastBackup": "Last Backup", + "nextBackup": "Next Backup", + "fullBackup": "Full Backup", + "tableBackup": "Table Backup", + "backupIntervals": "Backup Intervals", + "incrementalBackup": "Incremental Backup", + "details": "Details", + "pitr": "Point-in-time Restore", + "retentionPeriod": "Retention Period", + "storageConfig": "Storage Config", + "editPolicy": "Edit Policy", + "deletePolicy": "Delete Policy", + "enabled": "Enabled", + "disabled": "Disabled", + "deleteMsg": "scheduled backup policy is being deleted", + "editModal": { + "title": "Edit Scheduled Backup Policy", + "backupStrategy":"Backup Strategy", + "success": "Scheduled backup policy is being updated" + }, + "deleteModal": { + "deleteMsg":"Are you sure you want to delete this schedule policy?" + }, + "showIntervalModal": { + "title": "Backup Intervals", + "fullBackup":"Full Backup", + "incrementalBackup":"Incremental Backup" + }, + "backupTables": "Backup Tables" + } + }, + "restore": { + "title": "Restore Backup", + "preparingRestore": "Preparing Restore...", + "restoreStarted": "Restore started. <0>View Details", + "pages": { + "selectKeyspaceConfigs": "Source", + "selectUniverse": "Target", + "renameKeyspaces": "Rename Keyspaces" + }, + + "backupSummary": { + "SOURCE": "Source", + "TARGET": "Target", + "keyspaces": "Keyspaces", + "tables": "Tables", + "allTables": "All Tables", + "restoreTo": "Restore to", + "restoreSize": "Restore Size", + "targetUniverse": "Target Universe", + "kmsConfig": "KMS Config", + "tablesSelected": "{{count}} table(s) selected" + }, + "source": { + "selectKeyspace": "Select the keyspace(s) you want to restore", + "selectTime": "Select time to restore to", + "mostRecentIncremental": "Most recent incremental backup", + "backupTime": "Backup time", + "earlierPointInTime": "An earlier point in time ", + "restoreBetweenMsg": "You may restore to any time between and ", + "date": "Date", + "time": "Time", + "secs": "Second", + "helpText": "Note: if a DDL change occurred in any keyspaces(s) from this backup, choose a timestamp between the time of the DDL change and {{to}}. Learn more" + }, + "target": { + "selectUniverse": "Select a universe to restore to", + "targetUniverse": "Target Universe", + "backupSource": "Backup source", + "renameKeyspaces": "Rename keyspace/s before restoring {{Optional}}", + "optional": "(Optional)", + "forceRenameHelpText": "Note! Renaming is required since the selected target universe contains keyspaces with identical names. You will be able to rename in step 3.", + "restoreTablespaces": "Restore tablespaces and data to their respective regions", + "restoreTablespacesHelpText": "Note! If you don't select this option, or the target universe doesn't have a matching topology, all data will be restored to the primary region.", + "selectKMS": "Select KMS Configuration", + "kmsConfig": "KMS Configurations", + "kmsConfigHelpText": "Note! For a successful restore, the KMS configuration used for restore should be the same KMS configuration used during backup creation.", + "activeKMS": "Active", + "usedDuringBackup": "Used during backup", + "parallelThreads": "Parallel threads (Optional)" + }, + "validationErrMsg": { + "keyspacesAlreadyExists":"Keyspace already exists in the target Universe", + "pitrMillisOptions.secs": "Secs must be between 0 to 59", + "kmsConfigRequired": "KMS Config is required", + "invalidKeyspaceName":"Invalid keyspace name", + "duplicateKeyspaceName":"Duplicate keyspace name given" } } }, @@ -2620,4 +2719,4 @@ "yugabyteInc": "Yugabyte, Inc." } } -} +} \ No newline at end of file diff --git a/managed/yba-cli/cmd/backup/schedule/delete_backup_schedule.go b/managed/yba-cli/cmd/backup/schedule/delete_backup_schedule.go index 580c863b8813..7c6df14bb501 100644 --- a/managed/yba-cli/cmd/backup/schedule/delete_backup_schedule.go +++ b/managed/yba-cli/cmd/backup/schedule/delete_backup_schedule.go @@ -150,7 +150,7 @@ var deleteBackupScheduleCmd = &cobra.Command{ } if rDelete.GetSuccess() { - logrus.Info(fmt.Sprintf("The schedule %s (%s) has being deleted", + logrus.Info(fmt.Sprintf("The schedule %s (%s) has been deleted", formatter.Colorize(scheduleName, formatter.GreenColor), scheduleUUID)) } else { diff --git a/managed/yba-cli/cmd/ear/aws/create_ear.go b/managed/yba-cli/cmd/ear/aws/create_ear.go index 63a43ce0813b..07ba993d930f 100644 --- a/managed/yba-cli/cmd/ear/aws/create_ear.go +++ b/managed/yba-cli/cmd/ear/aws/create_ear.go @@ -23,17 +23,7 @@ var createAWSEARCmd = &cobra.Command{ Short: "Create a YugabyteDB Anywhere AWS encryption at rest configuration", Long: "Create an AWS encryption at rest configuration in YugabyteDB Anywhere", PreRun: func(cmd *cobra.Command, args []string) { - configNameFlag, err := cmd.Flags().GetString("name") - if err != nil { - logrus.Fatalf(formatter.Colorize(err.Error()+"\n", formatter.RedColor)) - } - if len(strings.TrimSpace(configNameFlag)) == 0 { - cmd.Help() - logrus.Fatalln( - formatter.Colorize( - "No encryption at rest config name found to create\n", - formatter.RedColor)) - } + earutil.CreateEARValidation(cmd) isIAM, err := cmd.Flags().GetBool("use-iam-instance-profile") if err != nil { logrus.Fatalf(formatter.Colorize(err.Error()+"\n", formatter.RedColor)) diff --git a/managed/yba-cli/cmd/ear/azu/create_ear.go b/managed/yba-cli/cmd/ear/azu/create_ear.go index c37a7c45a658..030a84551911 100644 --- a/managed/yba-cli/cmd/ear/azu/create_ear.go +++ b/managed/yba-cli/cmd/ear/azu/create_ear.go @@ -23,17 +23,7 @@ var createAzureEARCmd = &cobra.Command{ Short: "Create a YugabyteDB Anywhere Azure encryption at rest configuration", Long: "Create an Azure encryption at rest configuration in YugabyteDB Anywhere", PreRun: func(cmd *cobra.Command, args []string) { - configNameFlag, err := cmd.Flags().GetString("name") - if err != nil { - logrus.Fatalf(formatter.Colorize(err.Error()+"\n", formatter.RedColor)) - } - if len(strings.TrimSpace(configNameFlag)) == 0 { - cmd.Help() - logrus.Fatalln( - formatter.Colorize( - "No encryption at rest config name found to create\n", - formatter.RedColor)) - } + earutil.CreateEARValidation(cmd) isIAM, err := cmd.Flags().GetBool("use-managed-identity") if err != nil { logrus.Fatalf(formatter.Colorize(err.Error()+"\n", formatter.RedColor)) diff --git a/managed/yba-cli/cmd/ear/earutil/createearutil.go b/managed/yba-cli/cmd/ear/earutil/createearutil.go index 59e4bf572431..4d99d4e77a66 100644 --- a/managed/yba-cli/cmd/ear/earutil/createearutil.go +++ b/managed/yba-cli/cmd/ear/earutil/createearutil.go @@ -10,6 +10,7 @@ import ( "strings" "github.com/sirupsen/logrus" + "github.com/spf13/cobra" "github.com/spf13/viper" "github.com/yugabyte/yugabyte-db/managed/yba-cli/cmd/util" ybaAuthClient "github.com/yugabyte/yugabyte-db/managed/yba-cli/internal/client" @@ -17,6 +18,21 @@ import ( "github.com/yugabyte/yugabyte-db/managed/yba-cli/internal/formatter/ear" ) +// CreateEARValidation validates the delete config command +func CreateEARValidation(cmd *cobra.Command) { + configNameFlag, err := cmd.Flags().GetString("name") + if err != nil { + logrus.Fatalf(formatter.Colorize(err.Error()+"\n", formatter.RedColor)) + } + if len(strings.TrimSpace(configNameFlag)) == 0 { + cmd.Help() + logrus.Fatalln( + formatter.Colorize( + "No encryption at rest config name found to create\n", + formatter.RedColor)) + } +} + // WaitForCreateEARTask is a util task for create ear func WaitForCreateEARTask( authAPI *ybaAuthClient.AuthAPIClient, diff --git a/managed/yba-cli/cmd/ear/gcp/create_ear.go b/managed/yba-cli/cmd/ear/gcp/create_ear.go index 808aabb97a77..534894d2ccdc 100644 --- a/managed/yba-cli/cmd/ear/gcp/create_ear.go +++ b/managed/yba-cli/cmd/ear/gcp/create_ear.go @@ -23,17 +23,7 @@ var createGCPEARCmd = &cobra.Command{ Short: "Create a YugabyteDB Anywhere GCP encryption at rest configuration", Long: "Create a GCP encryption at rest configuration in YugabyteDB Anywhere", PreRun: func(cmd *cobra.Command, args []string) { - configNameFlag, err := cmd.Flags().GetString("name") - if err != nil { - logrus.Fatalf(formatter.Colorize(err.Error()+"\n", formatter.RedColor)) - } - if len(strings.TrimSpace(configNameFlag)) == 0 { - cmd.Help() - logrus.Fatalln( - formatter.Colorize( - "No encryption at rest config name found to create\n", - formatter.RedColor)) - } + earutil.CreateEARValidation(cmd) }, Run: func(cmd *cobra.Command, args []string) { authAPI := ybaAuthClient.NewAuthAPIClientAndCustomer() diff --git a/managed/yba-cli/cmd/ear/hashicorp/create_ear.go b/managed/yba-cli/cmd/ear/hashicorp/create_ear.go index 62610abf86ab..7e26aa361c1d 100644 --- a/managed/yba-cli/cmd/ear/hashicorp/create_ear.go +++ b/managed/yba-cli/cmd/ear/hashicorp/create_ear.go @@ -23,17 +23,7 @@ var createHashicorpVaultEARCmd = &cobra.Command{ Short: "Create a YugabyteDB Anywhere Hashicorp Vault encryption at rest configuration", Long: "Create a Hashicorp Vault encryption at rest configuration in YugabyteDB Anywhere", PreRun: func(cmd *cobra.Command, args []string) { - configNameFlag, err := cmd.Flags().GetString("name") - if err != nil { - logrus.Fatalf(formatter.Colorize(err.Error()+"\n", formatter.RedColor)) - } - if len(strings.TrimSpace(configNameFlag)) == 0 { - cmd.Help() - logrus.Fatalln( - formatter.Colorize( - "No encryption at rest config name found to create\n", - formatter.RedColor)) - } + earutil.CreateEARValidation(cmd) token, err := cmd.Flags().GetString("token") if err != nil { logrus.Fatalf(formatter.Colorize(err.Error()+"\n", formatter.RedColor)) diff --git a/managed/yba-cli/cmd/eit/customca/create_eit.go b/managed/yba-cli/cmd/eit/customca/create_eit.go new file mode 100644 index 000000000000..b3ac1d670b84 --- /dev/null +++ b/managed/yba-cli/cmd/eit/customca/create_eit.go @@ -0,0 +1,131 @@ +/* + * Copyright (c) YugaByte, Inc. + */ + +package customca + +import ( + "strings" + + "github.com/sirupsen/logrus" + "github.com/spf13/cobra" + ybaclient "github.com/yugabyte/platform-go-client" + "github.com/yugabyte/yugabyte-db/managed/yba-cli/cmd/eit/eitutil" + "github.com/yugabyte/yugabyte-db/managed/yba-cli/cmd/util" + ybaAuthClient "github.com/yugabyte/yugabyte-db/managed/yba-cli/internal/client" + "github.com/yugabyte/yugabyte-db/managed/yba-cli/internal/formatter" +) + +// createCustomCAEITCmd represents the eit command +var createCustomCAEITCmd = &cobra.Command{ + Use: "create", + Aliases: []string{"add", "upload"}, + Short: "Create a YugabyteDB Anywhere Custom CA encryption in transit configuration", + Long: "Create a Custom CA encryption in transit configuration in YugabyteDB Anywhere", + PreRun: func(cmd *cobra.Command, args []string) { + eitutil.CreateEITValidation(cmd) + }, + Run: func(cmd *cobra.Command, args []string) { + authAPI := ybaAuthClient.NewAuthAPIClientAndCustomer() + + configName, err := cmd.Flags().GetString("name") + if err != nil { + logrus.Fatalf(formatter.Colorize(err.Error()+"\n", formatter.RedColor)) + } + + rootCertFilePath, err := cmd.Flags().GetString("root-cert-file-path") + if err != nil { + logrus.Fatalf(formatter.Colorize(err.Error()+"\n", formatter.RedColor)) + } + + if len(strings.TrimSpace(rootCertFilePath)) == 0 { + logrus.Fatalf(formatter.Colorize("Missing root certificate file path\n", formatter.RedColor)) + } + + logrus.Debug("Reading contents from root certificate file: ", rootCertFilePath) + rootCertContent, err := util.ReadFileToString(rootCertFilePath) + if err != nil { + logrus.Fatalf(formatter.Colorize(err.Error()+"\n", formatter.RedColor)) + } + + rootCAFilePathOnNode, err := cmd.Flags().GetString("root-ca-file-path-on-node") + if err != nil { + logrus.Fatalf(formatter.Colorize(err.Error()+"\n", formatter.RedColor)) + } + + nodeCertFilePathOnNode, err := cmd.Flags().GetString("node-cert-file-path-on-node") + if err != nil { + logrus.Fatalf(formatter.Colorize(err.Error()+"\n", formatter.RedColor)) + } + + nodeKeyFilePathOnNode, err := cmd.Flags().GetString("node-key-file-path-on-node") + if err != nil { + logrus.Fatalf(formatter.Colorize(err.Error()+"\n", formatter.RedColor)) + } + + if len(strings.TrimSpace(rootCAFilePathOnNode)) == 0 { + logrus.Fatalf(formatter.Colorize("Missing root CA certificate file path on node\n", + formatter.RedColor)) + } + + if len(strings.TrimSpace(nodeCertFilePathOnNode)) == 0 { + logrus.Fatalf(formatter.Colorize("Missing node certificate file path on node\n", + formatter.RedColor)) + } + + if len(strings.TrimSpace(nodeKeyFilePathOnNode)) == 0 { + logrus.Fatalf(formatter.Colorize("Missing node key file path on node\n", + formatter.RedColor)) + } + + clientCertFilePathOnNode, err := cmd.Flags().GetString("client-cert-file-path-on-node") + if err != nil { + logrus.Fatalf(formatter.Colorize(err.Error()+"\n", formatter.RedColor)) + } + + clientKeyFilePathOnNode, err := cmd.Flags().GetString("client-key-file-path-on-node") + if err != nil { + logrus.Fatalf(formatter.Colorize(err.Error()+"\n", formatter.RedColor)) + } + + customCertInfo := ybaclient.CustomCertInfo{ + RootCertPath: rootCAFilePathOnNode, + NodeCertPath: nodeCertFilePathOnNode, + NodeKeyPath: nodeKeyFilePathOnNode, + ClientCertPath: clientCertFilePathOnNode, + ClientKeyPath: clientKeyFilePathOnNode, + } + + requestBody := ybaclient.CertificateParams{ + Label: configName, + CertType: util.CustomCertHostPathCertificateType, + CertContent: *rootCertContent, + CustomCertInfo: customCertInfo, + } + + eitutil.CreateEITUtil(authAPI, configName, util.CustomCertHostPathCertificateType, requestBody) + }, +} + +func init() { + createCustomCAEITCmd.Flags().SortFlags = false + + createCustomCAEITCmd.Flags().String("root-cert-file-path", "", + "[Required] Root certificate file path to upload.") + createCustomCAEITCmd.MarkFlagRequired("root-cert-file-path") + createCustomCAEITCmd.Flags().String("root-ca-file-path-on-node", "", + "[Required] Root CA certificate file path on the on-premises node.") + createCustomCAEITCmd.MarkFlagRequired("root-ca-file-path-on-node") + createCustomCAEITCmd.Flags().String("node-cert-file-path-on-node", "", + "[Required] Node certificate file path on the on-premises node.") + createCustomCAEITCmd.MarkFlagRequired("node-cert-file-path-on-node") + createCustomCAEITCmd.Flags().String("node-key-file-path-on-node", "", + "[Required] Node key file path on the on-premises node.") + createCustomCAEITCmd.MarkFlagRequired("node-key-file-path-on-node") + createCustomCAEITCmd.Flags().String("client-cert-file-path-on-node", "", + "[Optional] Client certificate file path on the on-premises "+ + "node to enable client-to-node TLS.") + createCustomCAEITCmd.Flags().String("client-key-file-path-on-node", "", + "[Optional] Client key file path on the on-premises "+ + "node to enable client-to-node TLS.") +} diff --git a/managed/yba-cli/cmd/eit/customca/customca_eit.go b/managed/yba-cli/cmd/eit/customca/customca_eit.go index a7d6c7072244..ac6c2956d12b 100644 --- a/managed/yba-cli/cmd/eit/customca/customca_eit.go +++ b/managed/yba-cli/cmd/eit/customca/customca_eit.go @@ -28,8 +28,7 @@ var CustomCAEITCmd = &cobra.Command{ func init() { CustomCAEITCmd.Flags().SortFlags = false - // CustomCAEITCmd.AddCommand(createCustomCAEITCmd) - // CustomCAEITCmd.AddCommand(updateCustomCAEITCmd) + CustomCAEITCmd.AddCommand(createCustomCAEITCmd) CustomCAEITCmd.AddCommand(listCustomCAEITCmd) CustomCAEITCmd.AddCommand(describeCustomCAEITCmd) CustomCAEITCmd.AddCommand(deleteCustomCAEITCmd) diff --git a/managed/yba-cli/cmd/eit/eitutil/createeitutil.go b/managed/yba-cli/cmd/eit/eitutil/createeitutil.go new file mode 100644 index 000000000000..34af7b80595c --- /dev/null +++ b/managed/yba-cli/cmd/eit/eitutil/createeitutil.go @@ -0,0 +1,91 @@ +/* + * Copyright (c) YugaByte, Inc. + */ + +package eitutil + +import ( + "fmt" + "os" + "strings" + + "github.com/sirupsen/logrus" + "github.com/spf13/cobra" + "github.com/spf13/viper" + ybaclient "github.com/yugabyte/platform-go-client" + "github.com/yugabyte/yugabyte-db/managed/yba-cli/cmd/util" + ybaAuthClient "github.com/yugabyte/yugabyte-db/managed/yba-cli/internal/client" + "github.com/yugabyte/yugabyte-db/managed/yba-cli/internal/formatter" + "github.com/yugabyte/yugabyte-db/managed/yba-cli/internal/formatter/eit" +) + +// CreateEITValidation validates the delete config command +func CreateEITValidation(cmd *cobra.Command) { + configNameFlag, err := cmd.Flags().GetString("name") + if err != nil { + logrus.Fatalf(formatter.Colorize(err.Error()+"\n", formatter.RedColor)) + } + if len(strings.TrimSpace(configNameFlag)) == 0 { + cmd.Help() + logrus.Fatalln( + formatter.Colorize( + "No encryption in transit config name found to create\n", + formatter.RedColor)) + } +} + +// CreateEITUtil is a util task for create eit +func CreateEITUtil( + authAPI *ybaAuthClient.AuthAPIClient, + eitName, eitCertType string, + requestBody ybaclient.CertificateParams) { + callSite := fmt.Sprintf("EIT: %s", eitCertType) + + eitUUID, response, err := authAPI.Upload().Certificate(requestBody).Execute() + if err != nil { + errMessage := util.ErrorFromHTTPResponse(response, err, callSite, "Create") + logrus.Fatalf(formatter.Colorize(errMessage.Error()+"\n", formatter.RedColor)) + } + + if len(strings.TrimSpace(eitUUID)) == 0 { + logrus.Fatal(formatter.Colorize( + fmt.Sprintf( + "An error occurred while adding encryption in transit configration %s\n", + eitName), + formatter.RedColor)) + } + + logrus.Infof( + "Successfully added encryption in transit configration %s (%s)\n", + formatter.Colorize(eitName, formatter.GreenColor), eitUUID) + + certs, response, err := authAPI.GetListOfCertificates().Execute() + if err != nil { + errMessage := util.ErrorFromHTTPResponse(response, err, + "EIT", "List") + logrus.Fatalf(formatter.Colorize(errMessage.Error()+"\n", formatter.RedColor)) + } + + var r []ybaclient.CertificateInfoExt + for _, c := range certs { + if strings.Compare(c.GetCertType(), eitCertType) == 0 && + strings.Compare(c.GetLabel(), eitName) == 0 { + r = append(r, c) + } + } + + eitCtx := formatter.Context{ + Command: "create", + Output: os.Stdout, + Format: eit.NewEITFormat(viper.GetString("output")), + } + if len(r) < 1 { + logrus.Fatal(formatter.Colorize( + fmt.Sprintf( + "An error occurred while adding encryption in transit configration %s (%s)\n", + eitName, eitUUID), + formatter.RedColor)) + } + eit.Write(eitCtx, r) + +} diff --git a/managed/yba-cli/cmd/eit/eitutil/updateeitutil.go b/managed/yba-cli/cmd/eit/eitutil/updateeitutil.go new file mode 100644 index 000000000000..bb62e6a5dacb --- /dev/null +++ b/managed/yba-cli/cmd/eit/eitutil/updateeitutil.go @@ -0,0 +1,147 @@ +/* + * Copyright (c) YugaByte, Inc. + */ + +package eitutil + +import ( + "fmt" + "os" + "strings" + + "github.com/sirupsen/logrus" + "github.com/spf13/cobra" + "github.com/spf13/viper" + ybaclient "github.com/yugabyte/platform-go-client" + "github.com/yugabyte/yugabyte-db/managed/yba-cli/cmd/util" + ybaAuthClient "github.com/yugabyte/yugabyte-db/managed/yba-cli/internal/client" + "github.com/yugabyte/yugabyte-db/managed/yba-cli/internal/formatter" + "github.com/yugabyte/yugabyte-db/managed/yba-cli/internal/formatter/eit" +) + +// UpdateEITValidation validates the update config command +func UpdateEITValidation(cmd *cobra.Command) { + viper.BindPFlag("force", cmd.Flags().Lookup("force")) + configNameFlag, err := cmd.Flags().GetString("name") + if err != nil { + logrus.Fatalf(formatter.Colorize(err.Error()+"\n", formatter.RedColor)) + } + if len(strings.TrimSpace(configNameFlag)) == 0 { + cmd.Help() + logrus.Fatalln( + formatter.Colorize( + "No encryption in transit config name found to update\n", + formatter.RedColor)) + } + err = util.ConfirmCommand( + fmt.Sprintf( + "Are you sure you want to update %s: %s", "encryption in transit configuration", + configNameFlag), + viper.GetBool("force")) + if err != nil { + logrus.Fatal(formatter.Colorize(err.Error()+"\n", formatter.RedColor)) + } +} + +// GetEITConfig fetches config +func GetEITConfig( + authAPI *ybaAuthClient.AuthAPIClient, + eitName, certType, commandCall string) ybaclient.CertificateInfoExt { + certs, response, err := authAPI.GetListOfCertificates().Execute() + if err != nil { + callSite := "EIT" + if len(strings.TrimSpace(commandCall)) != 0 { + callSite = fmt.Sprintf("%s: %s", callSite, commandCall) + } + errMessage := util.ErrorFromHTTPResponse( + response, err, callSite, "Update - Get Certificates") + logrus.Fatalf(formatter.Colorize(errMessage.Error()+"\n", formatter.RedColor)) + } + + var r []ybaclient.CertificateInfoExt + if strings.TrimSpace(eitName) != "" { + for _, c := range certs { + if strings.Compare(c.GetLabel(), eitName) == 0 { + if certType != "" { + if strings.Compare(c.GetCertType(), certType) == 0 { + r = append(r, c) + } + } else { + r = append(r, c) + } + + } + } + } + + if len(r) < 1 { + errMessage := "" + if len(strings.TrimSpace(certType)) == 0 { + errMessage = fmt.Sprintf("No configurations with name: %s found\n", eitName) + } else { + errMessage = fmt.Sprintf( + "No configurations with name: %s and type: %s found\n", eitName, certType) + } + logrus.Fatalf( + formatter.Colorize( + errMessage, + formatter.RedColor, + )) + } + + return r[0] +} + +// UpdateEITUtil is a util task for update eit +func UpdateEITUtil( + authAPI *ybaAuthClient.AuthAPIClient, + eitName, eitUUID, eitCertType string, + requestBody ybaclient.CertificateParams) { + callSite := fmt.Sprintf("EIT: %s", eitCertType) + + rUpdate, response, err := authAPI.EditCertificate(eitUUID).Certificate(requestBody).Execute() + if err != nil { + errMessage := util.ErrorFromHTTPResponse(response, err, callSite, "Update") + logrus.Fatalf(formatter.Colorize(errMessage.Error()+"\n", formatter.RedColor)) + } + + if !rUpdate.GetSuccess() { + logrus.Errorf( + formatter.Colorize( + fmt.Sprintf( + "An error occurred while updating encryption in transit configration %s (%s)\n", + formatter.Colorize(eitName, formatter.GreenColor), eitUUID), + formatter.RedColor)) + } + logrus.Info(fmt.Sprintf("The encryption in transit configration %s (%s) has been updated\n", + formatter.Colorize(eitName, formatter.GreenColor), eitUUID)) + + certs, response, err := authAPI.GetListOfCertificates().Execute() + if err != nil { + errMessage := util.ErrorFromHTTPResponse(response, err, + "EIT", "List") + logrus.Fatalf(formatter.Colorize(errMessage.Error()+"\n", formatter.RedColor)) + } + + var r []ybaclient.CertificateInfoExt + for _, c := range certs { + if strings.Compare(c.GetCertType(), eitCertType) == 0 && + strings.Compare(c.GetLabel(), eitName) == 0 { + r = append(r, c) + } + } + + eitCtx := formatter.Context{ + Output: os.Stdout, + Format: eit.NewEITFormat(viper.GetString("output")), + } + if len(r) < 1 { + logrus.Fatal(formatter.Colorize( + fmt.Sprintf( + "An error occurred while adding encryption in transit configration %s (%s)\n", + eitName, eitUUID), + formatter.RedColor)) + } + eit.Write(eitCtx, r) + +} diff --git a/managed/yba-cli/cmd/eit/hashicorp/create_eit.go b/managed/yba-cli/cmd/eit/hashicorp/create_eit.go new file mode 100644 index 000000000000..b3cc895becc2 --- /dev/null +++ b/managed/yba-cli/cmd/eit/hashicorp/create_eit.go @@ -0,0 +1,111 @@ +/* + * Copyright (c) YugaByte, Inc. + */ + +package hashicorp + +import ( + "fmt" + "strings" + + "github.com/sirupsen/logrus" + "github.com/spf13/cobra" + ybaclient "github.com/yugabyte/platform-go-client" + "github.com/yugabyte/yugabyte-db/managed/yba-cli/cmd/eit/eitutil" + "github.com/yugabyte/yugabyte-db/managed/yba-cli/cmd/util" + ybaAuthClient "github.com/yugabyte/yugabyte-db/managed/yba-cli/internal/client" + "github.com/yugabyte/yugabyte-db/managed/yba-cli/internal/formatter" +) + +// createHashicorpVaultEITCmd represents the eit command +var createHashicorpVaultEITCmd = &cobra.Command{ + Use: "create", + Aliases: []string{"add", "upload"}, + Short: "Create a YugabyteDB Anywhere Hashicorp Vault encryption in transit configuration", + Long: "Create a Hashicorp Vault encryption in transit configuration in YugabyteDB Anywhere", + PreRun: func(cmd *cobra.Command, args []string) { + eitutil.CreateEITValidation(cmd) + }, + Run: func(cmd *cobra.Command, args []string) { + authAPI := ybaAuthClient.NewAuthAPIClientAndCustomer() + + configName, err := cmd.Flags().GetString("name") + if err != nil { + logrus.Fatalf(formatter.Colorize(err.Error()+"\n", formatter.RedColor)) + } + + token, err := cmd.Flags().GetString("token") + if err != nil { + logrus.Fatalf(formatter.Colorize(err.Error()+"\n", formatter.RedColor)) + } + if len(strings.TrimSpace(token)) == 0 { + token, err = util.HashicorpVaultTokenFromEnv() + if err != nil { + logrus.Fatalf(formatter.Colorize(err.Error()+"\n", formatter.RedColor)) + } + } + + address, err := cmd.Flags().GetString("vault-address") + if err != nil { + logrus.Fatalf(formatter.Colorize(err.Error()+"\n", formatter.RedColor)) + } + if len(strings.TrimSpace(address)) == 0 { + address, err = util.HashicorpVaultAddressFromEnv() + if err != nil { + logrus.Fatalf(formatter.Colorize(err.Error()+"\n", formatter.RedColor)) + } + } + + engine, err := cmd.Flags().GetString("secret-engine") + if err != nil { + logrus.Fatalf(formatter.Colorize(err.Error()+"\n", formatter.RedColor)) + } + + role, err := cmd.Flags().GetString("role") + if err != nil { + logrus.Fatalf(formatter.Colorize(err.Error()+"\n", formatter.RedColor)) + } + + mountPath, err := cmd.Flags().GetString("mount-path") + if err != nil { + logrus.Fatalf(formatter.Colorize(err.Error()+"\n", formatter.RedColor)) + } + + hcvParams := ybaclient.HashicorpVaultConfigParams{ + VaultToken: util.GetStringPointer(token), + VaultAddr: address, + Engine: engine, + Role: role, + MountPath: mountPath, + } + + requestBody := ybaclient.CertificateParams{ + Label: configName, + CertType: util.HashicorpVaultCertificateType, + CertContent: "pki", + HcVaultCertParams: hcvParams, + } + + eitutil.CreateEITUtil(authAPI, configName, util.HashicorpVaultCertificateType, requestBody) + }, +} + +func init() { + createHashicorpVaultEITCmd.Flags().SortFlags = false + + createHashicorpVaultEITCmd.Flags().String("vault-address", "", + fmt.Sprintf("Hashicorp Vault address. "+ + "Can also be set using environment variable %s", + util.HashicorpVaultAddressEnv)) + createHashicorpVaultEITCmd.Flags().String("token", "", + fmt.Sprintf("Hashicorp Vault Token. "+ + "Can also be set using environment variable %s", + util.HashicorpVaultTokenEnv)) + createHashicorpVaultEITCmd.Flags().String("secret-engine", "pki", + "[Optional] Hashicorp Vault Secret Engine. Allowed values: pki.") + createHashicorpVaultEITCmd.Flags().String("role", "", + "[Required] The role used for creating certificates in Hashicorp Vault.") + createHashicorpVaultEITCmd.MarkFlagRequired("role") + createHashicorpVaultEITCmd.Flags().String("mount-path", "pki/", + "[Optional] Hashicorp Vault mount path.") +} diff --git a/managed/yba-cli/cmd/eit/hashicorp/hashicorp_eit.go b/managed/yba-cli/cmd/eit/hashicorp/hashicorp_eit.go index 4d3ae5c97054..e266ac451efd 100644 --- a/managed/yba-cli/cmd/eit/hashicorp/hashicorp_eit.go +++ b/managed/yba-cli/cmd/eit/hashicorp/hashicorp_eit.go @@ -28,8 +28,8 @@ var HashicorpVaultEITCmd = &cobra.Command{ func init() { HashicorpVaultEITCmd.Flags().SortFlags = false - // HashicorpVaultEITCmd.AddCommand(createHashicorpVaultEITCmd) - // HashicorpVaultEITCmd.AddCommand(updateHashicorpVaultEITCmd) + HashicorpVaultEITCmd.AddCommand(createHashicorpVaultEITCmd) + HashicorpVaultEITCmd.AddCommand(updateHashicorpVaultEITCmd) HashicorpVaultEITCmd.AddCommand(listHashicorpVaultEITCmd) HashicorpVaultEITCmd.AddCommand(describeHashicorpVaultEITCmd) HashicorpVaultEITCmd.AddCommand(deleteHashicorpVaultEITCmd) diff --git a/managed/yba-cli/cmd/eit/hashicorp/update_eit.go b/managed/yba-cli/cmd/eit/hashicorp/update_eit.go new file mode 100644 index 000000000000..9f55a2ed36d6 --- /dev/null +++ b/managed/yba-cli/cmd/eit/hashicorp/update_eit.go @@ -0,0 +1,72 @@ +/* + * Copyright (c) YugaByte, Inc. + */ + +package hashicorp + +import ( + "github.com/sirupsen/logrus" + "github.com/spf13/cobra" + ybaclient "github.com/yugabyte/platform-go-client" + "github.com/yugabyte/yugabyte-db/managed/yba-cli/cmd/eit/eitutil" + "github.com/yugabyte/yugabyte-db/managed/yba-cli/cmd/util" + ybaAuthClient "github.com/yugabyte/yugabyte-db/managed/yba-cli/internal/client" + "github.com/yugabyte/yugabyte-db/managed/yba-cli/internal/formatter" +) + +// updateHashicorpVaultEITCmd represents the eit command +var updateHashicorpVaultEITCmd = &cobra.Command{ + Use: "update", + Aliases: []string{"edit"}, + Short: "Update a YugabyteDB Anywhere Hashicorp Vault encryption in transit configuration", + Long: "Update a Hashicorp Vault encryption in transit configuration in YugabyteDB Anywhere", + PreRun: func(cmd *cobra.Command, args []string) { + eitutil.UpdateEITValidation(cmd) + }, + Run: func(cmd *cobra.Command, args []string) { + authAPI := ybaAuthClient.NewAuthAPIClientAndCustomer() + + configName, err := cmd.Flags().GetString("name") + if err != nil { + logrus.Fatalf(formatter.Colorize(err.Error()+"\n", formatter.RedColor)) + } + + config := eitutil.GetEITConfig( + authAPI, + configName, + util.HashicorpVaultCertificateType, + "Hashicorp Vault") + + token, err := cmd.Flags().GetString("token") + if err != nil { + logrus.Fatalf(formatter.Colorize(err.Error()+"\n", formatter.RedColor)) + } + + hcvParams := ybaclient.HashicorpVaultConfigParams{ + VaultToken: util.GetStringPointer(token), + } + + requestBody := ybaclient.CertificateParams{ + Label: configName, + CertType: util.HashicorpVaultCertificateType, + CertContent: "pki", + HcVaultCertParams: hcvParams, + } + + eitutil.UpdateEITUtil( + authAPI, + configName, + config.GetUuid(), + util.HashicorpVaultCertificateType, + requestBody) + }, +} + +func init() { + updateHashicorpVaultEITCmd.Flags().SortFlags = false + + updateHashicorpVaultEITCmd.Flags().String("token", "", + "[Required] Update Hashicorp Vault Token.") + updateHashicorpVaultEITCmd.MarkFlagRequired("token") + +} diff --git a/managed/yba-cli/cmd/eit/k8scertmanager/create_eit.go b/managed/yba-cli/cmd/eit/k8scertmanager/create_eit.go new file mode 100644 index 000000000000..4859f74cb9a2 --- /dev/null +++ b/managed/yba-cli/cmd/eit/k8scertmanager/create_eit.go @@ -0,0 +1,68 @@ +/* + * Copyright (c) YugaByte, Inc. + */ + +package k8scertmanager + +import ( + "strings" + + "github.com/sirupsen/logrus" + "github.com/spf13/cobra" + ybaclient "github.com/yugabyte/platform-go-client" + "github.com/yugabyte/yugabyte-db/managed/yba-cli/cmd/eit/eitutil" + "github.com/yugabyte/yugabyte-db/managed/yba-cli/cmd/util" + ybaAuthClient "github.com/yugabyte/yugabyte-db/managed/yba-cli/internal/client" + "github.com/yugabyte/yugabyte-db/managed/yba-cli/internal/formatter" +) + +// createK8sCertManagerEITCmd represents the eit command +var createK8sCertManagerEITCmd = &cobra.Command{ + Use: "create", + Aliases: []string{"add", "upload"}, + Short: "Create a YugabyteDB Anywhere K8s Cert Manager encryption in transit configuration", + Long: "Create a K8s Cert Manager encryption in transit configuration in YugabyteDB Anywhere", + PreRun: func(cmd *cobra.Command, args []string) { + eitutil.CreateEITValidation(cmd) + }, + Run: func(cmd *cobra.Command, args []string) { + authAPI := ybaAuthClient.NewAuthAPIClientAndCustomer() + + configName, err := cmd.Flags().GetString("name") + if err != nil { + logrus.Fatalf(formatter.Colorize(err.Error()+"\n", formatter.RedColor)) + } + + rootCertFilePath, err := cmd.Flags().GetString("root-cert-file-path") + if err != nil { + logrus.Fatalf(formatter.Colorize(err.Error()+"\n", formatter.RedColor)) + } + + if len(strings.TrimSpace(rootCertFilePath)) == 0 { + logrus.Fatalf(formatter.Colorize("Missing root certificate file path\n", formatter.RedColor)) + } + + logrus.Debug("Reading contents from root certificate file: ", rootCertFilePath) + rootCertContent, err := util.ReadFileToString(rootCertFilePath) + if err != nil { + logrus.Fatalf(formatter.Colorize(err.Error()+"\n", formatter.RedColor)) + } + + requestBody := ybaclient.CertificateParams{ + Label: configName, + CertType: util.K8sCertManagerCertificateType, + CertContent: *rootCertContent, + } + + eitutil.CreateEITUtil(authAPI, configName, util.K8sCertManagerCertificateType, requestBody) + }, +} + +func init() { + createK8sCertManagerEITCmd.Flags().SortFlags = false + + createK8sCertManagerEITCmd.Flags().String("root-cert-file-path", "", + "[Required] Root certificate file path.") + createK8sCertManagerEITCmd.MarkFlagRequired("root-cert-file-path") + +} diff --git a/managed/yba-cli/cmd/eit/k8scertmanager/k8scertmanager_eit.go b/managed/yba-cli/cmd/eit/k8scertmanager/k8scertmanager_eit.go index ce0a3da7255a..350b605ce285 100644 --- a/managed/yba-cli/cmd/eit/k8scertmanager/k8scertmanager_eit.go +++ b/managed/yba-cli/cmd/eit/k8scertmanager/k8scertmanager_eit.go @@ -27,8 +27,7 @@ var K8sCertManagerEITCmd = &cobra.Command{ func init() { K8sCertManagerEITCmd.Flags().SortFlags = false - // K8sCertManagerEITCmd.AddCommand(createK8sCertManagerEITCmd) - // K8sCertManagerEITCmd.AddCommand(updateK8sCertManagerEITCmd) + K8sCertManagerEITCmd.AddCommand(createK8sCertManagerEITCmd) K8sCertManagerEITCmd.AddCommand(listK8sCertManagerEITCmd) K8sCertManagerEITCmd.AddCommand(describeK8sCertManagerEITCmd) K8sCertManagerEITCmd.AddCommand(deleteK8sCertManagerEITCmd) diff --git a/managed/yba-cli/cmd/eit/selfsigned/create_eit.go b/managed/yba-cli/cmd/eit/selfsigned/create_eit.go new file mode 100644 index 000000000000..aa8b6626f88e --- /dev/null +++ b/managed/yba-cli/cmd/eit/selfsigned/create_eit.go @@ -0,0 +1,86 @@ +/* + * Copyright (c) YugaByte, Inc. + */ + +package selfsigned + +import ( + "strings" + + "github.com/sirupsen/logrus" + "github.com/spf13/cobra" + ybaclient "github.com/yugabyte/platform-go-client" + "github.com/yugabyte/yugabyte-db/managed/yba-cli/cmd/eit/eitutil" + "github.com/yugabyte/yugabyte-db/managed/yba-cli/cmd/util" + ybaAuthClient "github.com/yugabyte/yugabyte-db/managed/yba-cli/internal/client" + "github.com/yugabyte/yugabyte-db/managed/yba-cli/internal/formatter" +) + +// createSelfSignedEITCmd represents the eit command +var createSelfSignedEITCmd = &cobra.Command{ + Use: "create", + Aliases: []string{"add", "upload"}, + Short: "Create a YugabyteDB Anywhere Self Signed encryption in transit configuration", + Long: "Create a Self Signed encryption in transit configuration in YugabyteDB Anywhere", + PreRun: func(cmd *cobra.Command, args []string) { + eitutil.CreateEITValidation(cmd) + }, + Run: func(cmd *cobra.Command, args []string) { + authAPI := ybaAuthClient.NewAuthAPIClientAndCustomer() + + configName, err := cmd.Flags().GetString("name") + if err != nil { + logrus.Fatalf(formatter.Colorize(err.Error()+"\n", formatter.RedColor)) + } + + rootCertFilePath, err := cmd.Flags().GetString("root-cert-file-path") + if err != nil { + logrus.Fatalf(formatter.Colorize(err.Error()+"\n", formatter.RedColor)) + } + + if len(strings.TrimSpace(rootCertFilePath)) == 0 { + logrus.Fatalf(formatter.Colorize("Missing root certificate file path\n", formatter.RedColor)) + } + + logrus.Debug("Reading contents from root certificate file: ", rootCertFilePath) + rootCertContent, err := util.ReadFileToString(rootCertFilePath) + if err != nil { + logrus.Fatalf(formatter.Colorize(err.Error()+"\n", formatter.RedColor)) + } + + keyFilePath, err := cmd.Flags().GetString("key-file-path") + if err != nil { + logrus.Fatalf(formatter.Colorize(err.Error()+"\n", formatter.RedColor)) + } + + if len(strings.TrimSpace(keyFilePath)) == 0 { + logrus.Fatalf(formatter.Colorize("Missing key file path\n", formatter.RedColor)) + } + + logrus.Debug("Reading contents from key file: ", keyFilePath) + keyContent, err := util.ReadFileToString(keyFilePath) + if err != nil { + logrus.Fatalf(formatter.Colorize(err.Error()+"\n", formatter.RedColor)) + } + + requestBody := ybaclient.CertificateParams{ + Label: configName, + CertType: util.SelfSignedCertificateType, + CertContent: *rootCertContent, + KeyContent: *keyContent, + } + + eitutil.CreateEITUtil(authAPI, configName, util.SelfSignedCertificateType, requestBody) + }, +} + +func init() { + createSelfSignedEITCmd.Flags().SortFlags = false + + createSelfSignedEITCmd.Flags().String("root-cert-file-path", "", + "[Required] Root certificate file path.") + createSelfSignedEITCmd.MarkFlagRequired("root-cert-file-path") + createSelfSignedEITCmd.Flags().String("key-file-path", "", + "[Required] Private key file path.") + createSelfSignedEITCmd.MarkFlagRequired("key-file-path") +} diff --git a/managed/yba-cli/cmd/eit/selfsigned/selfsigned_eit.go b/managed/yba-cli/cmd/eit/selfsigned/selfsigned_eit.go index 85ba35f76214..c4c9998af21b 100644 --- a/managed/yba-cli/cmd/eit/selfsigned/selfsigned_eit.go +++ b/managed/yba-cli/cmd/eit/selfsigned/selfsigned_eit.go @@ -27,8 +27,7 @@ var SelfSignedEITCmd = &cobra.Command{ func init() { SelfSignedEITCmd.Flags().SortFlags = false - // SelfSignedEITCmd.AddCommand(createSelfSignedEITCmd) - // SelfSignedEITCmd.AddCommand(updateSelfSignedEITCmd) + SelfSignedEITCmd.AddCommand(createSelfSignedEITCmd) SelfSignedEITCmd.AddCommand(listSelfSignedEITCmd) SelfSignedEITCmd.AddCommand(describeSelfSignedEITCmd) SelfSignedEITCmd.AddCommand(deleteSelfSignedEITCmd) diff --git a/managed/yba-cli/docs/yba_eit_custom-ca.md b/managed/yba-cli/docs/yba_eit_custom-ca.md index 2621e6be3dcc..d50973f959de 100644 --- a/managed/yba-cli/docs/yba_eit_custom-ca.md +++ b/managed/yba-cli/docs/yba_eit_custom-ca.md @@ -34,6 +34,7 @@ yba eit custom-ca [flags] ### SEE ALSO * [yba eit](yba_eit.md) - Manage YugabyteDB Anywhere Encryption In Transit (EIT) configurations +* [yba eit custom-ca create](yba_eit_custom-ca_create.md) - Create a YugabyteDB Anywhere Custom CA encryption in transit configuration * [yba eit custom-ca delete](yba_eit_custom-ca_delete.md) - Delete a YugabyteDB Anywhere Custom CA encryption in transit configuration * [yba eit custom-ca describe](yba_eit_custom-ca_describe.md) - Describe a Custom CA YugabyteDB Anywhere Encryption In Transit (EIT) configuration * [yba eit custom-ca list](yba_eit_custom-ca_list.md) - List Custom CA YugabyteDB Anywhere Encryption In Transit (EIT) certificate configurations diff --git a/managed/yba-cli/docs/yba_eit_custom-ca_create.md b/managed/yba-cli/docs/yba_eit_custom-ca_create.md new file mode 100644 index 000000000000..661f865b52c0 --- /dev/null +++ b/managed/yba-cli/docs/yba_eit_custom-ca_create.md @@ -0,0 +1,43 @@ +## yba eit custom-ca create + +Create a YugabyteDB Anywhere Custom CA encryption in transit configuration + +### Synopsis + +Create a Custom CA encryption in transit configuration in YugabyteDB Anywhere + +``` +yba eit custom-ca create [flags] +``` + +### Options + +``` + --root-cert-file-path string [Required] Root certificate file path to upload. + --root-ca-file-path-on-node string [Required] Root CA certificate file path on the on-premises node. + --node-cert-file-path-on-node string [Required] Node certificate file path on the on-premises node. + --node-key-file-path-on-node string [Required] Node key file path on the on-premises node. + --client-cert-file-path-on-node string [Optional] Client certificate file path on the on-premises node to enable client-to-node TLS. + --client-key-file-path-on-node string [Optional] Client key file path on the on-premises node to enable client-to-node TLS. + -h, --help help for create +``` + +### Options inherited from parent commands + +``` + -a, --apiToken string YugabyteDB Anywhere api token. + --config string Config file, defaults to $HOME/.yba-cli.yaml + --debug Use debug mode, same as --logLevel debug. + --disable-color Disable colors in output. (default false) + -H, --host string YugabyteDB Anywhere Host (default "http://localhost:9000") + -l, --logLevel string Select the desired log level format. Allowed values: debug, info, warn, error, fatal. (default "info") + -n, --name string [Optional] The name of the configuration for the action. Required for create, delete, describe, update. + -o, --output string Select the desired output format. Allowed values: table, json, pretty. (default "table") + --timeout duration Wait command timeout, example: 5m, 1h. (default 168h0m0s) + --wait Wait until the task is completed, otherwise it will exit immediately. (default true) +``` + +### SEE ALSO + +* [yba eit custom-ca](yba_eit_custom-ca.md) - Manage a YugabyteDB Anywhere Custom CA encryption in transit (EIT) certificate configuration + diff --git a/managed/yba-cli/docs/yba_eit_hashicorp.md b/managed/yba-cli/docs/yba_eit_hashicorp.md index 00aec5e4138a..656aca2d163f 100644 --- a/managed/yba-cli/docs/yba_eit_hashicorp.md +++ b/managed/yba-cli/docs/yba_eit_hashicorp.md @@ -34,7 +34,9 @@ yba eit hashicorp [flags] ### SEE ALSO * [yba eit](yba_eit.md) - Manage YugabyteDB Anywhere Encryption In Transit (EIT) configurations +* [yba eit hashicorp create](yba_eit_hashicorp_create.md) - Create a YugabyteDB Anywhere Hashicorp Vault encryption in transit configuration * [yba eit hashicorp delete](yba_eit_hashicorp_delete.md) - Delete a YugabyteDB Anywhere Hashicorp Vault encryption in transit configuration * [yba eit hashicorp describe](yba_eit_hashicorp_describe.md) - Describe a Hashicorp Vault YugabyteDB Anywhere Encryption In Transit (EIT) configuration * [yba eit hashicorp list](yba_eit_hashicorp_list.md) - List Hashicorp Vault YugabyteDB Anywhere Encryption In Transit (EIT) certificate configurations +* [yba eit hashicorp update](yba_eit_hashicorp_update.md) - Update a YugabyteDB Anywhere Hashicorp Vault encryption in transit configuration diff --git a/managed/yba-cli/docs/yba_eit_hashicorp_create.md b/managed/yba-cli/docs/yba_eit_hashicorp_create.md new file mode 100644 index 000000000000..ac9823831097 --- /dev/null +++ b/managed/yba-cli/docs/yba_eit_hashicorp_create.md @@ -0,0 +1,42 @@ +## yba eit hashicorp create + +Create a YugabyteDB Anywhere Hashicorp Vault encryption in transit configuration + +### Synopsis + +Create a Hashicorp Vault encryption in transit configuration in YugabyteDB Anywhere + +``` +yba eit hashicorp create [flags] +``` + +### Options + +``` + --vault-address string Hashicorp Vault address. Can also be set using environment variable VAULT_ADDR + --token string Hashicorp Vault Token. Can also be set using environment variable VAULT_TOKEN + --secret-engine string [Optional] Hashicorp Vault Secret Engine. Allowed values: pki. (default "pki") + --role string [Required] The role used for creating certificates in Hashicorp Vault. + --mount-path string [Optional] Hashicorp Vault mount path. (default "pki/") + -h, --help help for create +``` + +### Options inherited from parent commands + +``` + -a, --apiToken string YugabyteDB Anywhere api token. + --config string Config file, defaults to $HOME/.yba-cli.yaml + --debug Use debug mode, same as --logLevel debug. + --disable-color Disable colors in output. (default false) + -H, --host string YugabyteDB Anywhere Host (default "http://localhost:9000") + -l, --logLevel string Select the desired log level format. Allowed values: debug, info, warn, error, fatal. (default "info") + -n, --name string [Optional] The name of the configuration for the action. Required for create, delete, describe, update. + -o, --output string Select the desired output format. Allowed values: table, json, pretty. (default "table") + --timeout duration Wait command timeout, example: 5m, 1h. (default 168h0m0s) + --wait Wait until the task is completed, otherwise it will exit immediately. (default true) +``` + +### SEE ALSO + +* [yba eit hashicorp](yba_eit_hashicorp.md) - Manage a YugabyteDB Anywhere Hashicorp Vault encryption in transit (EIT) certificate configuration + diff --git a/managed/yba-cli/docs/yba_eit_hashicorp_update.md b/managed/yba-cli/docs/yba_eit_hashicorp_update.md new file mode 100644 index 000000000000..5d35f2224203 --- /dev/null +++ b/managed/yba-cli/docs/yba_eit_hashicorp_update.md @@ -0,0 +1,38 @@ +## yba eit hashicorp update + +Update a YugabyteDB Anywhere Hashicorp Vault encryption in transit configuration + +### Synopsis + +Update a Hashicorp Vault encryption in transit configuration in YugabyteDB Anywhere + +``` +yba eit hashicorp update [flags] +``` + +### Options + +``` + --token string [Required] Update Hashicorp Vault Token. + -h, --help help for update +``` + +### Options inherited from parent commands + +``` + -a, --apiToken string YugabyteDB Anywhere api token. + --config string Config file, defaults to $HOME/.yba-cli.yaml + --debug Use debug mode, same as --logLevel debug. + --disable-color Disable colors in output. (default false) + -H, --host string YugabyteDB Anywhere Host (default "http://localhost:9000") + -l, --logLevel string Select the desired log level format. Allowed values: debug, info, warn, error, fatal. (default "info") + -n, --name string [Optional] The name of the configuration for the action. Required for create, delete, describe, update. + -o, --output string Select the desired output format. Allowed values: table, json, pretty. (default "table") + --timeout duration Wait command timeout, example: 5m, 1h. (default 168h0m0s) + --wait Wait until the task is completed, otherwise it will exit immediately. (default true) +``` + +### SEE ALSO + +* [yba eit hashicorp](yba_eit_hashicorp.md) - Manage a YugabyteDB Anywhere Hashicorp Vault encryption in transit (EIT) certificate configuration + diff --git a/managed/yba-cli/docs/yba_eit_k8s-cert-manager.md b/managed/yba-cli/docs/yba_eit_k8s-cert-manager.md index dd55a2ea505d..749169c35adc 100644 --- a/managed/yba-cli/docs/yba_eit_k8s-cert-manager.md +++ b/managed/yba-cli/docs/yba_eit_k8s-cert-manager.md @@ -34,6 +34,7 @@ yba eit k8s-cert-manager [flags] ### SEE ALSO * [yba eit](yba_eit.md) - Manage YugabyteDB Anywhere Encryption In Transit (EIT) configurations +* [yba eit k8s-cert-manager create](yba_eit_k8s-cert-manager_create.md) - Create a YugabyteDB Anywhere K8s Cert Manager encryption in transit configuration * [yba eit k8s-cert-manager delete](yba_eit_k8s-cert-manager_delete.md) - Delete a YugabyteDB Anywhere K8s Cert Manager encryption in transit configuration * [yba eit k8s-cert-manager describe](yba_eit_k8s-cert-manager_describe.md) - Describe a K8s Cert Manager YugabyteDB Anywhere Encryption In Transit (EIT) configuration * [yba eit k8s-cert-manager list](yba_eit_k8s-cert-manager_list.md) - List K8s Cert Manager YugabyteDB Anywhere Encryption In Transit (EIT) certificate configurations diff --git a/managed/yba-cli/docs/yba_eit_k8s-cert-manager_create.md b/managed/yba-cli/docs/yba_eit_k8s-cert-manager_create.md new file mode 100644 index 000000000000..dd0c6592efa7 --- /dev/null +++ b/managed/yba-cli/docs/yba_eit_k8s-cert-manager_create.md @@ -0,0 +1,38 @@ +## yba eit k8s-cert-manager create + +Create a YugabyteDB Anywhere K8s Cert Manager encryption in transit configuration + +### Synopsis + +Create a K8s Cert Manager encryption in transit configuration in YugabyteDB Anywhere + +``` +yba eit k8s-cert-manager create [flags] +``` + +### Options + +``` + --root-cert-file-path string [Required] Root certificate file path. + -h, --help help for create +``` + +### Options inherited from parent commands + +``` + -a, --apiToken string YugabyteDB Anywhere api token. + --config string Config file, defaults to $HOME/.yba-cli.yaml + --debug Use debug mode, same as --logLevel debug. + --disable-color Disable colors in output. (default false) + -H, --host string YugabyteDB Anywhere Host (default "http://localhost:9000") + -l, --logLevel string Select the desired log level format. Allowed values: debug, info, warn, error, fatal. (default "info") + -n, --name string [Optional] The name of the configuration for the action. Required for create, delete, describe, update. + -o, --output string Select the desired output format. Allowed values: table, json, pretty. (default "table") + --timeout duration Wait command timeout, example: 5m, 1h. (default 168h0m0s) + --wait Wait until the task is completed, otherwise it will exit immediately. (default true) +``` + +### SEE ALSO + +* [yba eit k8s-cert-manager](yba_eit_k8s-cert-manager.md) - Manage a YugabyteDB Anywhere K8s Cert Manager encryption in transit (EIT) certificate configuration + diff --git a/managed/yba-cli/docs/yba_eit_self-signed.md b/managed/yba-cli/docs/yba_eit_self-signed.md index e25c744611b2..9d880f4adf9e 100644 --- a/managed/yba-cli/docs/yba_eit_self-signed.md +++ b/managed/yba-cli/docs/yba_eit_self-signed.md @@ -34,6 +34,7 @@ yba eit self-signed [flags] ### SEE ALSO * [yba eit](yba_eit.md) - Manage YugabyteDB Anywhere Encryption In Transit (EIT) configurations +* [yba eit self-signed create](yba_eit_self-signed_create.md) - Create a YugabyteDB Anywhere Self Signed encryption in transit configuration * [yba eit self-signed delete](yba_eit_self-signed_delete.md) - Delete a YugabyteDB Anywhere Self Signed encryption in transit configuration * [yba eit self-signed describe](yba_eit_self-signed_describe.md) - Describe a Self Signed YugabyteDB Anywhere Encryption In Transit (EIT) configuration * [yba eit self-signed list](yba_eit_self-signed_list.md) - List Self Signed YugabyteDB Anywhere Encryption In Transit (EIT) certificate configurations diff --git a/managed/yba-cli/docs/yba_eit_self-signed_create.md b/managed/yba-cli/docs/yba_eit_self-signed_create.md new file mode 100644 index 000000000000..b5a832e33b14 --- /dev/null +++ b/managed/yba-cli/docs/yba_eit_self-signed_create.md @@ -0,0 +1,39 @@ +## yba eit self-signed create + +Create a YugabyteDB Anywhere Self Signed encryption in transit configuration + +### Synopsis + +Create a Self Signed encryption in transit configuration in YugabyteDB Anywhere + +``` +yba eit self-signed create [flags] +``` + +### Options + +``` + --root-cert-file-path string [Required] Root certificate file path. + --key-file-path string [Required] Private key file path. + -h, --help help for create +``` + +### Options inherited from parent commands + +``` + -a, --apiToken string YugabyteDB Anywhere api token. + --config string Config file, defaults to $HOME/.yba-cli.yaml + --debug Use debug mode, same as --logLevel debug. + --disable-color Disable colors in output. (default false) + -H, --host string YugabyteDB Anywhere Host (default "http://localhost:9000") + -l, --logLevel string Select the desired log level format. Allowed values: debug, info, warn, error, fatal. (default "info") + -n, --name string [Optional] The name of the configuration for the action. Required for create, delete, describe, update. + -o, --output string Select the desired output format. Allowed values: table, json, pretty. (default "table") + --timeout duration Wait command timeout, example: 5m, 1h. (default 168h0m0s) + --wait Wait until the task is completed, otherwise it will exit immediately. (default true) +``` + +### SEE ALSO + +* [yba eit self-signed](yba_eit_self-signed.md) - Manage a YugabyteDB Anywhere Self Signed encryption in transit (EIT) certificate configuration + diff --git a/managed/yba-cli/go.mod b/managed/yba-cli/go.mod index 04b93a44a0e2..af83bdb17c15 100644 --- a/managed/yba-cli/go.mod +++ b/managed/yba-cli/go.mod @@ -12,7 +12,7 @@ require ( github.com/spf13/cobra v1.8.0 github.com/spf13/viper v1.16.0 github.com/t-tomalak/logrus-easy-formatter v0.0.0-20190827215021-c074f06c5816 - github.com/yugabyte/platform-go-client v0.0.0-20240906074831-e6dc1d30c62f + github.com/yugabyte/platform-go-client v0.0.0-20240908122416-281fca7b66ad golang.org/x/exp v0.0.0-20230905200255-921286631fa9 golang.org/x/term v0.16.0 gopkg.in/yaml.v2 v2.4.0 diff --git a/managed/yba-cli/go.sum b/managed/yba-cli/go.sum index a43dc75344bb..26a690ee2dfb 100644 --- a/managed/yba-cli/go.sum +++ b/managed/yba-cli/go.sum @@ -246,6 +246,8 @@ github.com/t-tomalak/logrus-easy-formatter v0.0.0-20190827215021-c074f06c5816 h1 github.com/t-tomalak/logrus-easy-formatter v0.0.0-20190827215021-c074f06c5816/go.mod h1:tzym/CEb5jnFI+Q0k4Qq3+LvRF4gO3E2pxS8fHP8jcA= github.com/yugabyte/platform-go-client v0.0.0-20240906074831-e6dc1d30c62f h1:1FlyZ2q/DjqS30fm+cF2tz1LitK2C9/FuMZhUBpnl2w= github.com/yugabyte/platform-go-client v0.0.0-20240906074831-e6dc1d30c62f/go.mod h1:ZErtCh7Ig1QkNpWuGQ5YtaEJvD4fKdDS+iQxJfIlGMQ= +github.com/yugabyte/platform-go-client v0.0.0-20240908122416-281fca7b66ad h1:arbYQfoCihO3Vglnja5UWSnRL0ck/RWei1fzIazG2So= +github.com/yugabyte/platform-go-client v0.0.0-20240908122416-281fca7b66ad/go.mod h1:ZErtCh7Ig1QkNpWuGQ5YtaEJvD4fKdDS+iQxJfIlGMQ= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= diff --git a/managed/yba-cli/internal/client/eit.go b/managed/yba-cli/internal/client/eit.go index 240cf296fdfc..9ff6e310ba2f 100644 --- a/managed/yba-cli/internal/client/eit.go +++ b/managed/yba-cli/internal/client/eit.go @@ -19,3 +19,17 @@ func (a *AuthAPIClient) DeleteCertificate(certUUID string) ( ybaclient.CertificateInfoApiApiDeleteCertificateRequest) { return a.APIClient.CertificateInfoApi.DeleteCertificate(a.ctx, a.CustomerUUID, certUUID) } + +// Upload - upload certificate +func (a *AuthAPIClient) Upload() ( + ybaclient.CertificateInfoApiApiUploadRequest, +) { + return a.APIClient.CertificateInfoApi.Upload(a.ctx, a.CustomerUUID) +} + +// EditCertificate - edit certificate +func (a *AuthAPIClient) EditCertificate(certUUID string) ( + ybaclient.CertificateInfoApiApiEditCertificateRequest, +) { + return a.APIClient.CertificateInfoApi.EditCertificate(a.ctx, a.CustomerUUID, certUUID) +} diff --git a/managed/yba-cli/internal/formatter/eit/eit_full.go b/managed/yba-cli/internal/formatter/eit/eit_full.go index e779cecccd7f..bf22bdc60602 100644 --- a/managed/yba-cli/internal/formatter/eit/eit_full.go +++ b/managed/yba-cli/internal/formatter/eit/eit_full.go @@ -109,18 +109,20 @@ func (feit *FullEITContext) Write() error { feit.PostFormat(tmpl, NewEITContext()) feit.Output.Write([]byte("\n")) - // Section 2: EIT Details subSection 2 - tmpl, err = feit.startSubsection(eitDetails2) - if err != nil { - logrus.Errorf("%s", err.Error()) - return err - } - if err := feit.ContextFormat(tmpl, feitc.EIT); err != nil { - logrus.Errorf("%s", err.Error()) - return err + if feit.eit.GetCertType() != util.HashicorpVaultCertificateType { + // Section 2: EIT Details subSection 2 + tmpl, err = feit.startSubsection(eitDetails2) + if err != nil { + logrus.Errorf("%s", err.Error()) + return err + } + if err := feit.ContextFormat(tmpl, feitc.EIT); err != nil { + logrus.Errorf("%s", err.Error()) + return err + } + feit.PostFormat(tmpl, NewEITContext()) + feit.Output.Write([]byte("\n")) } - feit.PostFormat(tmpl, NewEITContext()) - feit.Output.Write([]byte("\n")) certType := feit.eit.GetCertType() switch certType { diff --git a/managed/yba-cli/internal/formatter/hashicorp/hashicorp.go b/managed/yba-cli/internal/formatter/hashicorp/hashicorp.go index 1277ec970fca..1e2643affa57 100644 --- a/managed/yba-cli/internal/formatter/hashicorp/hashicorp.go +++ b/managed/yba-cli/internal/formatter/hashicorp/hashicorp.go @@ -15,7 +15,7 @@ import ( const ( // EIT provides header for EIT cert info - EIT = "table {{.Engine}}\t{{.MountPath}}\t{{.Role}}\t{{.VaultAddress}}" + EIT = "table {{.Engine}}\t{{.MountPath}}\t{{.Role}}\t{{.VaultAddress}}\t{{.Token}}" // EAR1 for HcVaultAuthConfigField listing EAR1 = "table {{.Address}}\t{{.Engine}}" diff --git a/managed/yba-installer/cmd/backup.go b/managed/yba-installer/cmd/backup.go index e23875fa5a01..56445ddc011f 100644 --- a/managed/yba-installer/cmd/backup.go +++ b/managed/yba-installer/cmd/backup.go @@ -73,9 +73,19 @@ func CreateBackupScriptHelper(outputPath string, dataDir string, excludePromethe args = append(args, "--pg_dump_path", pgdump) args = addPostgresArgs(args) } + if viper.GetBool("prometheus.enableHttps") { + args = append(args, "--prometheus_protocol", "https") + } + envVars := map[string]string{} + if viper.GetBool("prometheus.enableAuth") { + envVars = map[string]string { + "PROMETHEUS_USERNAME": viper.GetString("prometheus.authUsername"), + "PROMETHEUS_PASSWORD": viper.GetString("prometheus.authPassword"), + } + } log.Info("Creating a backup of your YugabyteDB Anywhere Installation.") - out := shell.Run(script, args...) + out := shell.RunWithEnvVars(script, envVars, args...) if !out.SucceededOrLog() { return out.Error } @@ -191,8 +201,18 @@ func RestoreBackupScriptHelper(inputPath string, destination string, skipRestart args = append(args, "--pg_restore_path", pgRestore) args = addPostgresArgs(args) } + if viper.GetBool("prometheus.enableHttps") { + args = append(args, "--prometheus_protocol", "https") + } + envVars := map[string]string{} + if viper.GetBool("prometheus.enableAuth") { + envVars = map[string]string { + "PROMETHEUS_USERNAME": viper.GetString("prometheus.authUsername"), + "PROMETHEUS_PASSWORD": viper.GetString("prometheus.authPassword"), + } + } log.Info("Restoring a backup of your YugabyteDB Anywhere Installation.") - if out := shell.Run(script, args...); !out.SucceededOrLog() { + if out := shell.RunWithEnvVars(script, envVars, args...); !out.SucceededOrLog() { log.Fatal("Restore script failed. May need to restart services.") } if common.HasSudoAccess() { diff --git a/managed/yba-installer/pkg/common/shell/run.go b/managed/yba-installer/pkg/common/shell/run.go index 8c0ba0d1e04a..f0d558057d21 100644 --- a/managed/yba-installer/pkg/common/shell/run.go +++ b/managed/yba-installer/pkg/common/shell/run.go @@ -2,6 +2,7 @@ package shell import ( "fmt" + "os" "os/exec" "strings" ) @@ -26,6 +27,22 @@ func Run(name string, args ...string) *Output { return output } +func RunWithEnvVars(name string, envVars map[string]string, args ...string) *Output { + output := NewOutput(name, args) + cmd := exec.Command(name, args...) + cmd.Stdout = output.stdout + cmd.Stderr = output.stderr + cmd.Env = os.Environ() + for key, value := range envVars { + env := fmt.Sprintf("%s=%s", key, value) + cmd.Env = append(cmd.Env, env) + } + output.Error = cmd.Run() + output.ExitCode = cmd.ProcessState.ExitCode() + output.LogDebug() + return output +} + // RunShell will run a command in shell mode. Shell mode will allow for pipes, redirects, etc. // The format of the command will end up as: // diff --git a/src/odyssey/sources/cron.c b/src/odyssey/sources/cron.c index 2061e6ec4188..c198b6179015 100644 --- a/src/odyssey/sources/cron.c +++ b/src/odyssey/sources/cron.c @@ -61,10 +61,10 @@ static int od_cron_stat_cb(od_route_t *route, od_stat_t *current, } index = route->id.yb_stats_index; - strncpy(instance->yb_stats[index].database_name, + memcpy(instance->yb_stats[index].database_name, (char *)route->yb_database_entry->name, DB_NAME_MAX_LEN); - strncpy(instance->yb_stats[index].user_name, + memcpy(instance->yb_stats[index].user_name, route->id.user, USER_NAME_MAX_LEN); } diff --git a/src/odyssey/third_party/kiwi/kiwi/var.h b/src/odyssey/third_party/kiwi/kiwi/var.h index 846dfd7d1e90..161379237a0e 100644 --- a/src/odyssey/third_party/kiwi/kiwi/var.h +++ b/src/odyssey/third_party/kiwi/kiwi/var.h @@ -1,3 +1,7 @@ +#include +#include +#include + #ifndef KIWI_VAR_H #define KIWI_VAR_H @@ -61,6 +65,20 @@ struct kiwi_vars { #endif }; +static inline char* yb_lowercase_str(const char *str) +{ + if (str == NULL) + return NULL; + + char *lower_str = malloc(strlen(str) + 1); + for (int i = 0; str[i]; i++) + lower_str[i] = tolower((unsigned char)str[i]); + + // Null-terminate the new string + lower_str[strlen(str)] = '\0'; + return lower_str; +} + static inline void kiwi_var_init(kiwi_var_t *var, char *name, int name_len) { #ifdef YB_GUC_SUPPORT_VIA_SHMEM @@ -69,8 +87,11 @@ static inline void kiwi_var_init(kiwi_var_t *var, char *name, int name_len) #else if (name_len == 0) var->name[0] = '\0'; - else - memcpy(var->name, name, name_len); + else { + char *yb_lowercase_name = yb_lowercase_str(name); + memcpy(var->name, yb_lowercase_name, name_len); + free(yb_lowercase_name); + } #endif var->name_len = name_len; var->value_len = 0; @@ -137,7 +158,9 @@ static inline void yb_kiwi_var_push(kiwi_vars_t *vars, char *name, int name_len, vars->vars = realloc(vars->vars, vars->size * sizeof(kiwi_var_t)); kiwi_var_t *var = &vars->vars[vars->size - 1]; - memcpy(var->name, name, name_len); + char *yb_lowercase_name = yb_lowercase_str(name); + memcpy(var->name, yb_lowercase_name, name_len); + free(yb_lowercase_name); var->name_len = name_len; memcpy(var->value, value, value_len); var->value_len = value_len; @@ -158,10 +181,17 @@ static inline kiwi_var_t *yb_kiwi_vars_get(kiwi_vars_t *vars, char *name) if (vars->size == 0) return NULL; + char *yb_lowercase_name = yb_lowercase_str(name); for (int i = 0; i < vars->size; i++) { - if (strcmp(vars->vars[i].name, name) == 0) + char *yb_lowercase_var_name = yb_lowercase_str(vars->vars[i].name); + if (strcmp(yb_lowercase_var_name, yb_lowercase_name) == 0) { + free(yb_lowercase_var_name); + free(yb_lowercase_name); return &vars->vars[i]; + } + free(yb_lowercase_var_name); } + free(yb_lowercase_name); return NULL; } #endif diff --git a/src/postgres/src/include/nodes/ybtidbitmap.h b/src/postgres/src/include/nodes/ybtidbitmap.h index 85670f3c9487..772a4f480bbb 100644 --- a/src/postgres/src/include/nodes/ybtidbitmap.h +++ b/src/postgres/src/include/nodes/ybtidbitmap.h @@ -46,7 +46,7 @@ typedef struct YbTIDBitmap NodeTag type; /* to make it a valid Node */ SliceSet ybctid_set; /* C++ set that contains my ybctids */ int nentries; /* number of entries in the bitmap */ - YbTBMIteratingState iterating PG_USED_FOR_ASSERTS_ONLY; + YbTBMIteratingState iterating; /* yb_tbm_begin_iterate called? */ size_t bytes_consumed; /* sum of the size of the ybctids */ bool work_mem_exceeded; /* if bytes_consumed exceeds work_mem */ diff --git a/src/yb/cdc/cdc_service.cc b/src/yb/cdc/cdc_service.cc index 5ca0cb067e50..21a183b4fb13 100644 --- a/src/yb/cdc/cdc_service.cc +++ b/src/yb/cdc/cdc_service.cc @@ -185,7 +185,7 @@ DEFINE_RUNTIME_uint32(xcluster_checkpoint_max_staleness_secs, 300, "The maximum interval in seconds that the xcluster checkpoint map can go without being " "refreshed. If the map is not refreshed within this interval, it is considered stale, " "and all WAL segments will be retained until the next refresh. " - "Setting to 0 will disable Opid-based WAL segment retention for XCluster."); + "Setting to 0 will disable Opid-based and time-based WAL segment retention for XCluster."); DEFINE_RUNTIME_int32( cdcsdk_max_expired_tables_to_clean_per_run, 1, diff --git a/src/yb/cdc/xcluster_producer-test.cc b/src/yb/cdc/xcluster_producer-test.cc index ad565e8e75b5..4720c7cd55c0 100644 --- a/src/yb/cdc/xcluster_producer-test.cc +++ b/src/yb/cdc/xcluster_producer-test.cc @@ -164,9 +164,7 @@ class XClusterProducerTest : public MiniClusterTestWithClient { TEST_F(XClusterProducerTest, GetChangesBasic) { const int kBatchCount = 10; auto resp = ASSERT_RESULT(GetChanges()); - ASSERT_EQ(resp.records_size(), 1); - ASSERT_EQ(resp.records(0).operation(), CDCRecordPB::CHANGE_METADATA); - ASSERT_EQ(resp.records(0).changes_size(), 0); + ASSERT_EQ(resp.records_size(), 0); ASSERT_TRUE(resp.has_checkpoint()); ASSERT_TRUE(resp.checkpoint().has_op_id()); auto last_op_id = resp.checkpoint().op_id(); @@ -197,7 +195,7 @@ TEST_F(XClusterProducerTest, GetChangesWithAutoFlags) { auto config_version = ASSERT_RESULT(GetAutoFlagsConfigVersion()); auto resp = ASSERT_RESULT(GetChanges()); - ASSERT_EQ(resp.records_size(), 1); + ASSERT_EQ(resp.records_size(), 0); auto last_op_id = resp.checkpoint().op_id(); // We should fail if AutoFlags config version is not valid. @@ -224,7 +222,7 @@ TEST_F(XClusterProducerTest, HeartbeatDelayWithoutData) { auto config_version = ASSERT_RESULT(GetAutoFlagsConfigVersion()); auto resp = ASSERT_RESULT(GetChanges()); - ASSERT_EQ(resp.records_size(), 1); + ASSERT_EQ(resp.records_size(), 0); auto last_op_id = resp.checkpoint().op_id(); // Set very low auto_flags_apply_delay_ms and disable heartbeats. @@ -266,7 +264,7 @@ TEST_F(XClusterProducerTest, HeartbeatDelayWithData) { ANNOTATE_UNPROTECTED_WRITE(FLAGS_auto_flags_apply_delay_ms) = auto_flags_apply_delay_ms; auto resp = ASSERT_RESULT(GetChanges()); - ASSERT_EQ(resp.records_size(), 1); + ASSERT_EQ(resp.records_size(), 0); auto last_op_id = resp.checkpoint().op_id(); ANNOTATE_UNPROTECTED_WRITE(FLAGS_TEST_tserver_disable_heartbeat) = true; @@ -316,7 +314,7 @@ TEST_F(XClusterProducerTest, HeartbeatDelayWithData) { TEST_F(XClusterProducerTest, ProducerUpgrade) { auto config_version = ASSERT_RESULT(GetAutoFlagsConfigVersion()); auto resp = ASSERT_RESULT(GetChanges()); - ASSERT_EQ(resp.records_size(), 1); + ASSERT_EQ(resp.records_size(), 0); auto last_op_id = resp.checkpoint().op_id(); resp = ASSERT_RESULT(GetChanges(last_op_id, config_version)); diff --git a/src/yb/client/xcluster_client.cc b/src/yb/client/xcluster_client.cc index c9e5d66a29e2..1dfa2e95065f 100644 --- a/src/yb/client/xcluster_client.cc +++ b/src/yb/client/xcluster_client.cc @@ -215,7 +215,7 @@ Result XClusterClient::IsCreateXClusterReplicationDone( Status XClusterClient::CreateOutboundReplicationGroup( const xcluster::ReplicationGroupId& replication_group_id, - const std::vector& namespace_ids) { + const std::vector& namespace_ids, bool automatic_ddl_mode) { SCHECK(!replication_group_id.empty(), InvalidArgument, "Invalid Replication group Id"); SCHECK(!namespace_ids.empty(), InvalidArgument, "At least one namespace Id is required"); @@ -225,6 +225,8 @@ Status XClusterClient::CreateOutboundReplicationGroup( req.add_namespace_ids(namespace_id); } + req.set_automatic_ddl_mode(automatic_ddl_mode); + auto resp = CALL_SYNC_LEADER_MASTER_RPC(XClusterCreateOutboundReplicationGroup, req); if (resp.has_error()) { @@ -569,6 +571,7 @@ XClusterClient::GetUniverseReplicationInfo( result.db_scope_namespace_id_map.emplace( db_scoped_info.target_namespace_id(), db_scoped_info.source_namespace_id()); } + result.automatic_ddl_mode = resp.automatic_ddl_mode(); return result; } @@ -578,8 +581,8 @@ Result XClusterClient::SetupDbScopedUniverseReplication( const std::vector& source_master_addresses, const std::vector& namespace_names, const std::vector& source_namespace_ids, - const std::vector& source_table_ids, - const std::vector& bootstrap_ids) { + const std::vector& source_table_ids, const std::vector& bootstrap_ids, + bool automatic_ddl_mode) { master::SetupUniverseReplicationRequestPB req; req.set_replication_group_id(replication_group_id.ToString()); req.set_transactional(true); // Db Scoped replication is always transactional. @@ -595,6 +598,8 @@ Result XClusterClient::SetupDbScopedUniverseReplication( req.add_producer_bootstrap_ids(bootstrap_id.ToString()); } + req.set_automatic_ddl_mode(automatic_ddl_mode); + SCHECK_EQ( namespace_names.size(), source_namespace_ids.size(), InvalidArgument, "Namespace names and IDs count must match"); diff --git a/src/yb/client/xcluster_client.h b/src/yb/client/xcluster_client.h index 3d85c7d11871..845218cb023a 100644 --- a/src/yb/client/xcluster_client.h +++ b/src/yb/client/xcluster_client.h @@ -99,7 +99,7 @@ class XClusterClient { // complete. Status CreateOutboundReplicationGroup( const xcluster::ReplicationGroupId& replication_group_id, - const std::vector& namespace_ids); + const std::vector& namespace_ids, bool automatic_ddl_mode = false); Status IsBootstrapRequired( CoarseTimePoint deadline, const xcluster::ReplicationGroupId& replication_group_id, @@ -197,6 +197,7 @@ class XClusterClient { std::string source_master_addrs; // Map of target namespace id to source namespace id. Only used in db scope replication. std::unordered_map db_scope_namespace_id_map; + bool automatic_ddl_mode = false; struct XClusterInboundReplicationGroupTableInfo { TableId target_table_id; @@ -215,7 +216,7 @@ class XClusterClient { const std::vector& namespace_names, const std::vector& source_namespace_ids, const std::vector& source_table_ids, - const std::vector& bootstrap_ids); + const std::vector& bootstrap_ids, bool automatic_ddl_mode); virtual Result IsSetupUniverseReplicationDone( const xcluster::ReplicationGroupId& replication_group_id); diff --git a/src/yb/client/xcluster_client_mock.h b/src/yb/client/xcluster_client_mock.h index 7a269ca538f7..b2db9f1ff440 100644 --- a/src/yb/client/xcluster_client_mock.h +++ b/src/yb/client/xcluster_client_mock.h @@ -30,7 +30,7 @@ class MockXClusterClient : public XClusterClient { Result, SetupDbScopedUniverseReplication, (const xcluster::ReplicationGroupId&, const std::vector&, const std::vector&, const std::vector&, - const std::vector&, const std::vector&), + const std::vector&, const std::vector&, bool), (override)); MOCK_METHOD( diff --git a/src/yb/consensus/log.cc b/src/yb/consensus/log.cc index cc5f16e42221..b04bd7c2984c 100644 --- a/src/yb/consensus/log.cc +++ b/src/yb/consensus/log.cc @@ -246,6 +246,14 @@ DEFINE_validator(log_min_segments_to_retain, &ValidateGreaterThan0); DEFINE_validator(max_disk_throughput_mbps, &ValidateGreaterThan0); DEFINE_validator(reject_writes_min_disk_space_check_interval_sec, &ValidateGreaterThan0); +DEFINE_RUNTIME_uint32(cdc_wal_retention_time_secs, 4 * 3600, + "WAL retention time in seconds to be used for tables which have a xCluster, " + "or CDCSDK outbound stream."); + +DEFINE_RUNTIME_bool(enable_xcluster_timed_based_wal_retention, true, + "If true, enable time-based WAL retention for tables with xCluster " + "by using --cdc_wal_retention_time_secs."); + static std::string kSegmentPlaceholderFilePrefix = ".tmp.newsegment"; static std::string kSegmentPlaceholderFileTemplate = kSegmentPlaceholderFilePrefix + "XXXXXX"; @@ -1362,9 +1370,12 @@ Status Log::GetSegmentsToGCUnlocked(int64_t min_op_idx, SegmentSequence* segment auto xrepl_min_replicated_index = cdc_min_replicated_index_.load(std::memory_order_acquire); - if (get_xcluster_min_index_to_retain_) { - xrepl_min_replicated_index = - std::min(xrepl_min_replicated_index, get_xcluster_min_index_to_retain_(tablet_id_)); + { + std::lock_guard l(get_xcluster_index_lock_); + if (get_xcluster_min_index_to_retain_) { + xrepl_min_replicated_index = + std::min(xrepl_min_replicated_index, get_xcluster_min_index_to_retain_(tablet_id_)); + } } // Find the prefix of segments in the segment sequence that is guaranteed not to include @@ -1471,6 +1482,17 @@ void Log::set_wal_retention_secs(uint32_t wal_retention_secs) { uint32_t Log::wal_retention_secs() const { uint32_t wal_retention_secs = wal_retention_secs_.load(std::memory_order_acquire); + + { + // If tablet is under xCluster, adjust WAL retention time for xCluster. + std::lock_guard l(get_xcluster_index_lock_); + if (FLAGS_enable_xcluster_timed_based_wal_retention && + get_xcluster_min_index_to_retain_ && + get_xcluster_min_index_to_retain_(tablet_id_) != std::numeric_limits::max()) { + wal_retention_secs = std::max(wal_retention_secs, FLAGS_cdc_wal_retention_time_secs); + } + } + auto flag_wal_retention = ANNOTATE_UNPROTECTED_READ(FLAGS_log_min_seconds_to_retain); return flag_wal_retention > 0 ? std::max(wal_retention_secs, static_cast(flag_wal_retention)) : diff --git a/src/yb/consensus/log.h b/src/yb/consensus/log.h index 9e10a2bcd6c5..2101783480e4 100644 --- a/src/yb/consensus/log.h +++ b/src/yb/consensus/log.h @@ -340,7 +340,7 @@ class Log : public RefCountedThreadSafe { void SetGetXClusterMinIndexToRetainFunc( std::function get_xcluster_required_index_func) { - std::lock_guard l(state_lock_); + std::lock_guard l(get_xcluster_index_lock_); if (get_xcluster_min_index_to_retain_ == nullptr) { get_xcluster_min_index_to_retain_ = std::move(get_xcluster_required_index_func); } @@ -682,10 +682,13 @@ class Log : public RefCountedThreadSafe { std::atomic disk_space_frequent_check_interval_sec_{0}; std::shared_timed_mutex disk_space_mutex_; + // Protect access to the get_xcluster_min_index_to_retain_. + mutable PerCpuRwMutex get_xcluster_index_lock_; + // Function pointer to CDCServiceImpl::GetXClusterMinRequiredIndex. // This function retrieves the xCluster minimum required index for a given tablet. std::function get_xcluster_min_index_to_retain_ - GUARDED_BY(state_lock_); + GUARDED_BY(get_xcluster_index_lock_); DISALLOW_COPY_AND_ASSIGN(Log); }; diff --git a/src/yb/integration-tests/cdc_service-int-test.cc b/src/yb/integration-tests/cdc_service-int-test.cc index 84ba951d2055..f4565b1008d0 100644 --- a/src/yb/integration-tests/cdc_service-int-test.cc +++ b/src/yb/integration-tests/cdc_service-int-test.cc @@ -198,8 +198,6 @@ class CDCServiceTest : public YBMiniClusterTestBase { Status GetChangesWithRetries( const GetChangesRequestPB& change_req, GetChangesResponsePB* change_resp, int timeout_ms, int max_attempts = 3); - Status GetChangesInitialSchema(GetChangesRequestPB const& change_req, - CDCCheckpointPB* mutable_checkpoint); tserver::MiniTabletServer* GetLeaderForTablet(const std::string& tablet_id); virtual int server_count() { return 1; } virtual int tablet_count() { return 1; } @@ -451,31 +449,25 @@ Status CDCServiceTest::GetChangesWithRetries( return return_status; } -Status CDCServiceTest::GetChangesInitialSchema(GetChangesRequestPB const& req_in, - CDCCheckpointPB* mutable_checkpoint) { - GetChangesRequestPB change_req(req_in); - GetChangesResponsePB change_resp; - change_req.set_max_records(1); - - // Consume the META_OP that has the original Schema. - { - RpcController rpc; - SCOPED_TRACE(change_req.DebugString()); - RETURN_NOT_OK(cdc_proxy_->GetChanges(change_req, &change_resp, &rpc)); - SCHECK(!change_resp.has_error(), IllegalState, - Format("Response Error: $0", change_resp.error().DebugString())); - SCHECK_EQ(change_resp.records_size(), 1, IllegalState, "Expected only 1 record"); - SCHECK_EQ(change_resp.records(0).operation(), CDCRecordPB::CHANGE_METADATA, - IllegalState, "Expected the CHANGE_METADATA related to the initial schema"); - mutable_checkpoint->CopyFrom(change_resp.checkpoint()); - } - return Status::OK(); -} - tserver::MiniTabletServer* CDCServiceTest::GetLeaderForTablet(const std::string& tablet_id) { return ::yb::GetLeaderForTablet(cluster_.get(), tablet_id); } +namespace { +void WaitForCDCIndex(const std::string& tablet_id, + CDCServiceImpl* cdc_service, + int64_t expected_index, + int timeout_secs) { + LOG(INFO) << "Waiting until index equals " << expected_index + << ". Timeout: " << timeout_secs; + ASSERT_OK(WaitFor([&](){ + return cdc_service->GetXClusterMinRequiredIndex(tablet_id) == expected_index; + }, MonoDelta::FromSeconds(timeout_secs) * kTimeMultiplier, + "Wait until cdc min replicated index.")); + LOG(INFO) << "Done waiting"; +} +} // namespace + TEST_F(CDCServiceTest, TestCompoundKey) { // Create a table with a compound primary key. static const std::string kCDCTestTableCompoundKeyName = "cdc_test_table_compound_key"; @@ -508,9 +500,6 @@ TEST_F(CDCServiceTest, TestCompoundKey) { change_req.set_tablet_id(tablet_id); change_req.set_stream_id(stream_id_.ToString()); - // Consume the META_OP that has the initial table Schema. - ASSERT_OK(GetChangesInitialSchema(change_req, change_req.mutable_from_checkpoint())); - // Now apply two ops with same hash key but different range key in a batch. auto session = client_->NewSession(15s); for (int i = 0; i < 2; i++) { @@ -581,6 +570,7 @@ TEST_F(CDCServiceTest, TestCreateXClusterStream) { TEST_F(CDCServiceTest, TestCreateXClusterStreamWithDefaultRententionTime) { // Set default WAL retention time to 10 hours. ANNOTATE_UNPROTECTED_WRITE(FLAGS_cdc_wal_retention_time_secs) = 36000; + ANNOTATE_UNPROTECTED_WRITE(FLAGS_update_min_cdc_indices_interval_secs) = 5; stream_id_ = ASSERT_RESULT(CreateXClusterStream(*client_, table_.table()->id())); @@ -661,9 +651,6 @@ TEST_F(CDCServiceTest, TestSafeTime) { change_req.set_tablet_id(tablet_id); change_req.set_stream_id(stream_id_.ToString()); - // Consume the META_OP that has the original Schema. - ASSERT_OK(GetChangesInitialSchema(change_req, change_req.mutable_from_checkpoint())); - auto ht_0 = ASSERT_RESULT(tablet_peer->LeaderSafeTime()).ToUint64(); ASSERT_NO_FATALS(WriteTestRow(0, kRowCount, "key0", tablet_id, leader_tserver->proxy())); ASSERT_NO_FATALS(WriteTestRow(1, kRowCount + 1, "key0", tablet_id, leader_tserver->proxy())); @@ -762,13 +749,25 @@ TEST_F(CDCServiceTest, TestMetricsOnDeletedReplication) { } TEST_F(CDCServiceTest, TestWALPrematureGCErrorCode) { + ANNOTATE_UNPROTECTED_WRITE(FLAGS_update_min_cdc_indices_interval_secs) = 5; + stream_id_ = ASSERT_RESULT(CreateXClusterStream(*client_, table_.table()->id())); std::string tablet_id = GetTablet(); + + const auto& tserver = cluster_->mini_tablet_server(0)->server(); + + const auto& proxy = tserver->proxy(); + auto tablet_peer = ASSERT_RESULT( - cluster_->mini_tablet_server(0)->server()->tablet_manager()->GetTablet(tablet_id)); + tserver->tablet_manager()->GetTablet(tablet_id)); + + WriteTestRow(0, kRowCount, "key0", tablet_id, proxy); ASSERT_OK(tablet_peer->log()->AllocateSegmentAndRollOver()); + WaitForCDCIndex( + tablet_id, CDCService(tserver), 0, 4 * FLAGS_update_min_cdc_indices_interval_secs); + ANNOTATE_UNPROTECTED_WRITE(FLAGS_TEST_disable_wal_retention_time) = true; ANNOTATE_UNPROTECTED_WRITE(FLAGS_enable_log_retention_by_op_idx) = false; ANNOTATE_UNPROTECTED_WRITE(FLAGS_log_min_segments_to_retain) = 0; @@ -819,9 +818,6 @@ TEST_F(CDCServiceTest, TestGetChanges) { change_req.set_tablet_id(tablet_id); change_req.set_stream_id(stream_id_.ToString()); - // Consume the META_OP that has the initial table Schema. - ASSERT_OK(GetChangesInitialSchema(change_req, change_req.mutable_from_checkpoint())); - { RpcController rpc; SCOPED_TRACE(change_req.DebugString()); @@ -848,8 +844,8 @@ TEST_F(CDCServiceTest, TestGetChanges) { auto cdc_service = CDCService(tserver); auto metrics = ASSERT_RESULT(GetXClusterTabletMetrics(*cdc_service, tablet_id, stream_id_)); ASSERT_EQ(metrics->last_read_opid_index->value(), metrics->last_readable_opid_index->value()); - ASSERT_EQ(metrics->last_read_opid_index->value(), change_resp.records_size() + 1 /* checkpt */); - ASSERT_EQ(metrics->rpc_payload_bytes_responded->TotalCount(), 2); + ASSERT_EQ(metrics->last_read_opid_index->value(), change_resp.records_size() /* checkpt */); + ASSERT_EQ(metrics->rpc_payload_bytes_responded->TotalCount(), 1); } // Insert another row. @@ -1125,7 +1121,6 @@ TEST_F(CDCServiceTestMultipleServersOneTablet, TestMetricsAfterServerFailure) { GetChangesRequestPB change_req; change_req.set_tablet_id(tablet_id); change_req.set_stream_id(stream_id_.ToString()); - ASSERT_OK(GetChangesInitialSchema(change_req, change_req.mutable_from_checkpoint())); auto term = change_req.from_checkpoint().op_id().term(); auto index = change_req.from_checkpoint().op_id().index(); @@ -1537,10 +1532,6 @@ TEST_F(CDCServiceTestMultipleServers, TestGetChangesProxyRouting) { change_req.set_tablet_id(tablet_id); change_req.set_stream_id(stream_id_.ToString()); change_req.set_serve_as_proxy(use_proxy); - if (!should_error) { - // Consume the META_OP that has the initial table Schema. - ASSERT_OK(GetChangesInitialSchema(change_req, change_req.mutable_from_checkpoint())); - } RpcController rpc; SCOPED_TRACE(change_req.DebugString()); ASSERT_OK(cdc_proxy_->GetChanges(change_req, &change_resp, &rpc)); @@ -1557,10 +1548,11 @@ TEST_F(CDCServiceTestMultipleServers, TestGetChangesProxyRouting) { const auto& tserver = cluster_->mini_tablet_server(0)->server(); auto cdc_service = CDCService(tserver); auto server_metrics = cdc_service->GetCDCServerMetrics(); - ASSERT_EQ(server_metrics->cdc_rpc_proxy_count->value(), remote_tablets.size() * 2); + ASSERT_EQ(server_metrics->cdc_rpc_proxy_count->value(), remote_tablets.size()); } TEST_F(CDCServiceTest, TestOnlyGetLocalChanges) { + ANNOTATE_UNPROTECTED_WRITE(FLAGS_update_min_cdc_indices_interval_secs) = 5; docdb::DisableYcqlPackedRow(); stream_id_ = ASSERT_RESULT(CreateXClusterStream(*client_, table_.table()->id())); @@ -1613,9 +1605,6 @@ TEST_F(CDCServiceTest, TestOnlyGetLocalChanges) { change_req.set_tablet_id(tablet_id); change_req.set_stream_id(stream_id_.ToString()); - // Consume the META_OP that has the initial table Schema. - ASSERT_OK(GetChangesInitialSchema(change_req, change_req.mutable_from_checkpoint())); - { // Make sure only the two local test rows show up. RpcController rpc; @@ -1655,6 +1644,9 @@ TEST_F(CDCServiceTest, TestOnlyGetLocalChanges) { ASSERT_EQ("{ int32:3, int32:33, string:\"key3_ext\" }", result[2]); }; + WaitForCDCIndex( + tablet_id, CDCService(tserver), 0, 4 * FLAGS_update_min_cdc_indices_interval_secs); + ASSERT_NO_FATALS(CheckChangesAndTable()); ASSERT_OK(cluster_->RestartSync()); @@ -1684,9 +1676,6 @@ TEST_F(CDCServiceTest, TestCheckpointUpdatedForRemoteRows) { change_req.set_tablet_id(tablet_id); change_req.set_stream_id(stream_id_.ToString()); - // Consume the META_OP that has the initial table Schema. - ASSERT_OK(GetChangesInitialSchema(change_req, change_req.mutable_from_checkpoint())); - const auto& proxy = cluster_->mini_tablet_server(0)->server()->proxy(); { @@ -1764,9 +1753,6 @@ TEST_F(CDCServiceTest, TestCheckpointUpdate) { change_req.set_tablet_id(tablet_id); change_req.set_stream_id(stream_id_.ToString()); - // Consume the META_OP that has the initial table Schema. - ASSERT_OK(GetChangesInitialSchema(change_req, change_req.mutable_from_checkpoint())); - { RpcController rpc; SCOPED_TRACE(change_req.DebugString()); @@ -1816,21 +1802,6 @@ TEST_F(CDCServiceTest, TestCheckpointUpdate) { VerifyStreamDeletedFromCdcState(client_.get(), stream_id_, tablet_id); } -namespace { -void WaitForCDCIndex(const std::string& tablet_id, - CDCServiceImpl* cdc_service, - int64_t expected_index, - int timeout_secs) { - LOG(INFO) << "Waiting until index equals " << expected_index - << ". Timeout: " << timeout_secs; - ASSERT_OK(WaitFor([&](){ - return cdc_service->GetXClusterMinRequiredIndex(tablet_id) == expected_index; - }, MonoDelta::FromSeconds(timeout_secs) * kTimeMultiplier, - "Wait until cdc min replicated index.")); - LOG(INFO) << "Done waiting"; -} -} // namespace - class CDCServiceTestFourServers : public CDCServiceTest { public: void SetUp() override { @@ -2046,9 +2017,8 @@ TEST_F(CDCServiceTestDurableMinReplicatedIndex, TestBootstrapProducer) { ASSERT_EQ(stream_id_, bootstrap_id); ASSERT_TRUE(row.checkpoint.has_value()); - // When no writes are present, the checkpoint's index is 1. Plus one for the ALTER WAL RETENTION - // TIME that we issue when cdc is enabled on a table. - ASSERT_EQ(row.checkpoint->index, 2 + kNRows); + // When no writes are present, the checkpoint's index is 1. + ASSERT_EQ(row.checkpoint->index, 1 + kNRows); } ASSERT_OK(s); diff --git a/src/yb/integration-tests/cdc_service-txn-test.cc b/src/yb/integration-tests/cdc_service-txn-test.cc index fa915bf5e31b..1b4c3d7ac5d7 100644 --- a/src/yb/integration-tests/cdc_service-txn-test.cc +++ b/src/yb/integration-tests/cdc_service-txn-test.cc @@ -70,32 +70,9 @@ class CDCServiceTxnTest : public TransactionTestBase { &client_->proxy_cache(), HostPort::FromBoundEndpoint(mini_server->bound_rpc_addr())); } - Status GetChangesInitialSchema(GetChangesRequestPB const& change_req, - CDCCheckpointPB* mutable_checkpoint); - std::unique_ptr cdc_proxy_; }; -Status CDCServiceTxnTest::GetChangesInitialSchema(GetChangesRequestPB const& req_in, - CDCCheckpointPB* mutable_checkpoint) { - GetChangesRequestPB change_req(req_in); - GetChangesResponsePB change_resp; - change_req.set_max_records(1); - - // Consume the META_OP that has the original Schema. - { - RpcController rpc; - SCOPED_TRACE(change_req.DebugString()); - RETURN_NOT_OK(cdc_proxy_->GetChanges(change_req, &change_resp, &rpc)); - SCHECK(!change_resp.has_error(), IllegalState, - Format("Response Error: $0", change_resp.error().DebugString())); - SCHECK_EQ(change_resp.records_size(), 1, IllegalState, "Expected only 1 record"); - SCHECK_EQ(change_resp.records(0).operation(), CDCRecordPB::CHANGE_METADATA, - IllegalState, "Expected the CHANGE_METADATA related to the initial schema"); - mutable_checkpoint->CopyFrom(change_resp.checkpoint()); - } - return Status::OK(); -} void AssertValue(const google::protobuf::Map& changes, int32_t expected_value) { ASSERT_EQ(changes.size(), 1); @@ -193,8 +170,8 @@ TEST_F(CDCServiceTxnTest, TestGetChanges) { SCOPED_TRACE(change_resp.DebugString()); ASSERT_FALSE(change_resp.has_error()); - // Expect total 8 records: 1 META OP, 5 WRITE_OP, and 2 UPDATE_TRANSACTION_OP records. - ASSERT_EQ(change_resp.records_size(), 8); + // Expect total 7 records: 5 WRITE_OP, and 2 UPDATE_TRANSACTION_OP records. + ASSERT_EQ(change_resp.records_size(), 7); struct Record { int32_t value; // 0 if apply record. @@ -258,9 +235,6 @@ TEST_F(CDCServiceTxnTest, TestGetChangesForPendingTransaction) { change_req.set_stream_id(stream_id.ToString()); change_req.set_tablet_id(tablet_id); - // Consume the META_OP that has the initial table Schema. - ASSERT_OK(GetChangesInitialSchema(change_req, change_req.mutable_from_checkpoint())); - auto txn = CreateTransaction(); auto session = CreateSession(txn); ASSERT_RESULT(WriteRow(session, kStartKey /* key */, kStartKey /* value */, WriteOpType::INSERT, @@ -348,8 +322,8 @@ TEST_F(CDCServiceTxnTest, MetricsTest) { SCOPED_TRACE(change_resp.DebugString()); ASSERT_FALSE(change_resp.has_error()); - // 1 META_OP, 1 TXN, 1 WRITE - ASSERT_EQ(change_resp.records_size(), 3); + // 1 TXN, 1 WRITE + ASSERT_EQ(change_resp.records_size(), 2); } const auto& tserver = cluster_->mini_tablet_server(0)->server(); diff --git a/src/yb/integration-tests/cdc_test_util.cc b/src/yb/integration-tests/cdc_test_util.cc index fd95fad0b2ec..2d26655d2ded 100644 --- a/src/yb/integration-tests/cdc_test_util.cc +++ b/src/yb/integration-tests/cdc_test_util.cc @@ -36,6 +36,8 @@ #include "yb/cdc/cdc_service.h" #include "yb/dockv/doc_key.h" +DECLARE_int32(update_min_cdc_indices_interval_secs); + namespace yb { namespace cdc { @@ -100,7 +102,8 @@ void WaitUntilWalRetentionSecs(std::function get_wal_retention_secs, << " for table " << table_name; return false; } - }, MonoDelta::FromSeconds(20), "Verify wal retention set on Producer.")); + }, MonoDelta::FromSeconds(FLAGS_update_min_cdc_indices_interval_secs * 2), + "Verify wal retention set on Producer.")); } void VerifyWalRetentionTime(MiniCluster* cluster, @@ -115,9 +118,6 @@ void VerifyWalRetentionTime(MiniCluster* cluster, auto table_id = peer->tablet_metadata()->table_id(); WaitUntilWalRetentionSecs([&peer]() { return peer->log()->wal_retention_secs(); }, expected_wal_retention_secs, table_name); - WaitUntilWalRetentionSecs( - [&peer]() { return peer->tablet_metadata()->wal_retention_secs(); }, - expected_wal_retention_secs, table_name); ntablets_checked++; } } diff --git a/src/yb/integration-tests/xcluster/xcluster-tablet-split-itest.cc b/src/yb/integration-tests/xcluster/xcluster-tablet-split-itest.cc index 90c3579b2d43..7d7c80de7f72 100644 --- a/src/yb/integration-tests/xcluster/xcluster-tablet-split-itest.cc +++ b/src/yb/integration-tests/xcluster/xcluster-tablet-split-itest.cc @@ -67,6 +67,7 @@ DECLARE_bool(enable_collect_cdc_metrics); DECLARE_int32(update_metrics_interval_ms); DECLARE_int32(cleanup_split_tablets_interval_sec); DECLARE_int32(update_min_cdc_indices_interval_secs); +DECLARE_int32(log_min_seconds_to_retain); DECLARE_bool(enable_automatic_tablet_splitting); DECLARE_int64(tablet_split_low_phase_shard_count_per_node); @@ -189,6 +190,7 @@ class CdcTabletSplitITest : public XClusterTabletSplitITestBaseGetAllStreamTabletStats(); - ASSERT_EQ(source_stats.size(), 1); - auto initial_index = source_stats[0].sent_index; - auto initial_records_sent = source_stats[0].records_sent; - auto initial_time = source_stats[0].last_poll_time; - ASSERT_GT(source_stats[0].avg_poll_delay_ms, 0); - ASSERT_TRUE(source_stats[0].last_poll_time); - ASSERT_EQ(source_stats[0].sent_index, source_stats[0].latest_index); - ASSERT_TRUE(source_stats[0].status.ok()); - - auto target_stats = target_xc_consumer->GetPollerStats(); - ASSERT_EQ(target_stats.size(), 1); - ASSERT_GT(target_stats[0].avg_poll_delay_ms, 0); - ASSERT_TRUE(target_stats[0].status.ok()); - - ASSERT_EQ(source_stats[0].records_sent, target_stats[0].records_received); - ASSERT_EQ(source_stats[0].mbs_sent, target_stats[0].mbs_received); - ASSERT_EQ(source_stats[0].sent_index, target_stats[0].received_index); - + // Make sure stats on source and target match and data was sent and received. ASSERT_OK(InsertRowsInProducer(0, 100)); ASSERT_OK(VerifyRowsMatch()); + auto source_stats = source_cdc_service->GetAllStreamTabletStats(); + auto target_stats = target_xc_consumer->GetPollerStats(); - // Make sure stats show data was sent and received. - source_stats = source_cdc_service->GetAllStreamTabletStats(); ASSERT_EQ(source_stats.size(), 1); ASSERT_GT(source_stats[0].avg_poll_delay_ms, 0); ASSERT_GT(source_stats[0].records_sent, 0); ASSERT_GT(source_stats[0].mbs_sent, 0); - ASSERT_GT(source_stats[0].sent_index, initial_index); - ASSERT_GT(source_stats[0].records_sent, initial_records_sent); - ASSERT_GT(source_stats[0].last_poll_time, initial_time); + ASSERT_GT(source_stats[0].sent_index, 0); + ASSERT_GT(source_stats[0].records_sent, 0); + ASSERT_GT(source_stats[0].last_poll_time, MonoTime::Min()); ASSERT_EQ(source_stats[0].sent_index, source_stats[0].latest_index); ASSERT_TRUE(source_stats[0].status.ok()); - target_stats = target_xc_consumer->GetPollerStats(); ASSERT_EQ(target_stats.size(), 1); ASSERT_GT(target_stats[0].records_received, 0); ASSERT_GT(target_stats[0].mbs_received, 0); diff --git a/src/yb/integration-tests/xcluster/xcluster_consistency-test.cc b/src/yb/integration-tests/xcluster/xcluster_consistency-test.cc index c65d1ebbe1a4..122655bbe780 100644 --- a/src/yb/integration-tests/xcluster/xcluster_consistency-test.cc +++ b/src/yb/integration-tests/xcluster/xcluster_consistency-test.cc @@ -165,7 +165,6 @@ class XClusterConsistencyTest : public XClusterYsqlTestBase { } void StoreReadTimes() { - uint32_t count = 0; for (const auto& mini_tserver : producer_cluster()->mini_tablet_servers()) { auto* tserver = mini_tserver->server(); auto cdc_service = dynamic_cast(tserver->GetCDCService().get()); @@ -176,14 +175,12 @@ class XClusterConsistencyTest : public XClusterYsqlTestBase { if (metrics && metrics.get()->last_read_hybridtime->value()) { producer_tablet_read_time_[tablet_id] = metrics.get()->last_read_hybridtime->value(); - count++; } } } } CHECK_EQ(producer_tablet_read_time_.size(), producer_tablet_ids_.size()); - CHECK_EQ(count, kTabletCount + 1); } uint32_t CountTabletsWithNewReadTimes() { @@ -254,7 +251,6 @@ class XClusterConsistencyTest : public XClusterYsqlTestBase { TEST_F(XClusterConsistencyTest, ConsistentReads) { uint32_t num_records_written = 0; - StoreReadTimes(); ASSERT_OK(WriteWorkload(producer_table1_->name(), 0, kNumRecordsPerBatch)); num_records_written += kNumRecordsPerBatch; diff --git a/src/yb/integration-tests/xcluster/xcluster_ddl_replication_test_base.h b/src/yb/integration-tests/xcluster/xcluster_ddl_replication_test_base.h index 0a3a75d708f2..7323b36e50cb 100644 --- a/src/yb/integration-tests/xcluster/xcluster_ddl_replication_test_base.h +++ b/src/yb/integration-tests/xcluster/xcluster_ddl_replication_test_base.h @@ -28,6 +28,14 @@ class XClusterDDLReplicationTestBase : public XClusterYsqlTestBase { Status EnableDDLReplicationExtension(); + // Set automatic_ddl_mode to true by default. + virtual Status CheckpointReplicationGroup( + const xcluster::ReplicationGroupId& replication_group_id = kReplicationGroupId, + bool automatic_ddl_mode = true) override { + return XClusterYsqlTestBase::CheckpointReplicationGroup( + replication_group_id, automatic_ddl_mode); + } + Result> GetProducerTable( const client::YBTableName& producer_table_name); diff --git a/src/yb/integration-tests/xcluster/xcluster_outbound_replication_group-itest.cc b/src/yb/integration-tests/xcluster/xcluster_outbound_replication_group-itest.cc index 62bf630e68f5..dfdf42156d23 100644 --- a/src/yb/integration-tests/xcluster/xcluster_outbound_replication_group-itest.cc +++ b/src/yb/integration-tests/xcluster/xcluster_outbound_replication_group-itest.cc @@ -13,15 +13,18 @@ #include "yb/client/xcluster_client.h" #include "yb/client/yb_table_name.h" +#include "yb/consensus/log.h" #include "yb/integration-tests/xcluster/xcluster_ysql_test_base.h" #include "yb/master/catalog_manager.h" #include "yb/master/master_ddl.pb.h" #include "yb/master/mini_master.h" #include "yb/tablet/tablet_peer.h" +#include "yb/util/backoff_waiter.h" DECLARE_uint32(cdc_wal_retention_time_secs); DECLARE_uint32(max_xcluster_streams_to_checkpoint_in_parallel); DECLARE_bool(TEST_block_xcluster_checkpoint_namespace_task); +DECLARE_int32(update_min_cdc_indices_interval_secs); namespace yb { namespace master { @@ -131,15 +134,26 @@ class XClusterOutboundReplicationGroupTest : public XClusterYsqlTestBase { } Status VerifyWalRetentionOfTable( - const TableId& table_id, uint32 wal_retention_secs = FLAGS_cdc_wal_retention_time_secs) { + const TableId& table_id, + uint32 expected_wal_retention_secs = FLAGS_cdc_wal_retention_time_secs) { auto tablets = ListTableActiveTabletLeadersPeers(producer_cluster(), table_id); SCHECK_GE( tablets.size(), static_cast(1), IllegalState, Format("No active tablets found for table $0", table_id)); for (const auto& tablet : tablets) { - SCHECK_EQ( - tablet->tablet_metadata()->wal_retention_secs(), wal_retention_secs, IllegalState, - Format("Tablet: $0", tablet->tablet_metadata()->LogPrefix())); + RETURN_NOT_OK(LoggedWaitFor([&]() -> Result { + uint32_t wal_retention_secs = tablet->log()->wal_retention_secs(); + if (wal_retention_secs == expected_wal_retention_secs) { + return true; + } else { + LOG(INFO) << "wal_retention_secs " << wal_retention_secs + << " doesn't match expected " << expected_wal_retention_secs + << " for tablet " << tablet->tablet_id(); + return false; + } + }, MonoDelta::FromSeconds(FLAGS_update_min_cdc_indices_interval_secs * 4), + Format("Waiting for tablet: $0 to reach expected WAL retention time $1", + tablet->tablet_metadata()->LogPrefix(), expected_wal_retention_secs))); } return Status::OK(); @@ -163,6 +177,7 @@ class XClusterOutboundReplicationGroupTest : public XClusterYsqlTestBase { TEST_F(XClusterOutboundReplicationGroupTest, TestMultipleTable) { ANNOTATE_UNPROTECTED_WRITE(FLAGS_max_xcluster_streams_to_checkpoint_in_parallel) = 1; + ANNOTATE_UNPROTECTED_WRITE(FLAGS_update_min_cdc_indices_interval_secs) = 5; // Create two tables in two schemas. auto table_id_1 = ASSERT_RESULT(CreateYsqlTable(kNamespaceName, kTableName1)); @@ -279,8 +294,10 @@ TEST_F(XClusterOutboundReplicationGroupTest, AddDeleteNamespaces) { } TEST_F(XClusterOutboundReplicationGroupTest, AddTable) { + ANNOTATE_UNPROTECTED_WRITE(FLAGS_update_min_cdc_indices_interval_secs) = 5; + auto table_id_1 = ASSERT_RESULT(CreateYsqlTable(kNamespaceName, kTableName1)); - ASSERT_OK(VerifyWalRetentionOfTable(table_id_1, 0)); + ASSERT_OK(VerifyWalRetentionOfTable(table_id_1, 900)); ASSERT_OK(XClusterClient().CreateOutboundReplicationGroup(kReplicationGroupId, {namespace_id_})); @@ -388,17 +405,6 @@ TEST_F(XClusterOutboundReplicationGroupTest, MasterRestartDuringCheckpoint) { auto all_xcluster_streams_initial = CleanupAndGetAllXClusterStreams(); ASSERT_EQ(all_xcluster_streams_initial.size(), stream_count); - - // TODO (#21986) : Disabled since VerifyWalRetentionOfTable fails. - // ASSERT_OK( - // catalog_manager_->WaitForAlterTableToFinish(table_id_1, CoarseMonoClock::Now() + - // kDeadline)); - // ASSERT_OK( - // catalog_manager_->WaitForAlterTableToFinish(table_id_2, CoarseMonoClock::Now() + - // kDeadline)); - - // ASSERT_OK(VerifyWalRetentionOfTable(table_id_1)); - // ASSERT_OK(VerifyWalRetentionOfTable(table_id_2)); } TEST_F(XClusterOutboundReplicationGroupTest, Repair) { diff --git a/src/yb/integration-tests/xcluster/xcluster_ysql_test_base.cc b/src/yb/integration-tests/xcluster/xcluster_ysql_test_base.cc index 512f0f57fb96..9408958f84de 100644 --- a/src/yb/integration-tests/xcluster/xcluster_ysql_test_base.cc +++ b/src/yb/integration-tests/xcluster/xcluster_ysql_test_base.cc @@ -888,10 +888,11 @@ Status XClusterYsqlTestBase::SetUpClusters(const SetupParams& params) { } Status XClusterYsqlTestBase::CheckpointReplicationGroup( - const xcluster::ReplicationGroupId& replication_group_id) { + const xcluster::ReplicationGroupId& replication_group_id, bool automatic_ddl_mode) { auto producer_namespace_id = VERIFY_RESULT(GetNamespaceId(producer_client())); RETURN_NOT_OK(client::XClusterClient(*producer_client()) - .CreateOutboundReplicationGroup(replication_group_id, {producer_namespace_id})); + .CreateOutboundReplicationGroup( + replication_group_id, {producer_namespace_id}, automatic_ddl_mode)); auto bootstrap_required = VERIFY_RESULT(IsXClusterBootstrapRequired(replication_group_id, producer_namespace_id)); diff --git a/src/yb/integration-tests/xcluster/xcluster_ysql_test_base.h b/src/yb/integration-tests/xcluster/xcluster_ysql_test_base.h index 3bfa5521b6de..fc21f8e5b521 100644 --- a/src/yb/integration-tests/xcluster/xcluster_ysql_test_base.h +++ b/src/yb/integration-tests/xcluster/xcluster_ysql_test_base.h @@ -135,8 +135,9 @@ class XClusterYsqlTestBase : public XClusterTestBase { uint32_t start, uint32_t end, Cluster* cluster, const client::YBTableName& table, bool delete_op = false, bool use_transaction = false); - Status CheckpointReplicationGroup( - const xcluster::ReplicationGroupId& replication_group_id = kReplicationGroupId); + virtual Status CheckpointReplicationGroup( + const xcluster::ReplicationGroupId& replication_group_id = kReplicationGroupId, + bool automatic_ddl_mode = false); Result IsXClusterBootstrapRequired( const xcluster::ReplicationGroupId& replication_group_id, const NamespaceId& source_namespace_id); diff --git a/src/yb/master/catalog_entity_info.proto b/src/yb/master/catalog_entity_info.proto index 1aec4caf3852..1143e5b19369 100644 --- a/src/yb/master/catalog_entity_info.proto +++ b/src/yb/master/catalog_entity_info.proto @@ -708,12 +708,15 @@ message SysUniverseReplicationEntryPB { // DB Scoped repication. message DBScopeInfo { + optional bool automatic_ddl_mode = 1; // [default = false] + message NamespaceInfo { required string consumer_namespace_id = 1; required string producer_namespace_id = 2; } repeated NamespaceInfo namespace_infos = 13; } + optional DBScopeInfo db_scoped_info = 13; } @@ -881,6 +884,8 @@ message SysXClusterOutboundReplicationGroupEntryPB { DELETED = 1; } optional State state = 3 [ default = READY ]; + + optional bool automatic_ddl_mode = 4; // [default = false] } message SysTServerEntryPB { diff --git a/src/yb/master/catalog_manager.h b/src/yb/master/catalog_manager.h index 5d283a369a59..fc765a463e3e 100644 --- a/src/yb/master/catalog_manager.h +++ b/src/yb/master/catalog_manager.h @@ -1609,9 +1609,6 @@ class CatalogManager : public tserver::TabletPeerLookupIf, Result> InitNewXReplStream() EXCLUDES(mutex_); void ReleaseAbandonedXReplStream(const xrepl::StreamId& stream_id) EXCLUDES(mutex_); - Status SetXReplWalRetentionForTable(const TableInfoPtr& table, const LeaderEpoch& epoch) - EXCLUDES(mutex_); - Status BackfillMetadataForXRepl(const TableInfoPtr& table_info, const LeaderEpoch& epoch); Result GetTabletInfo(const TabletId& tablet_id) override @@ -1649,12 +1646,6 @@ class CatalogManager : public tserver::TabletPeerLookupIf, void InsertNewUniverseReplicationInfoBootstrapInfo( UniverseReplicationBootstrapInfo& bootstrap_info) EXCLUDES(mutex_); - // All entities must be write locked. - Status ReplaceUniverseReplication( - const UniverseReplicationInfo& old_replication_group, - UniverseReplicationInfo& new_replication_group, const ClusterConfigInfo& cluster_config, - const LeaderEpoch& epoch) EXCLUDES(mutex_); - void RemoveUniverseReplicationFromMap(const xcluster::ReplicationGroupId& replication_group_id) EXCLUDES(mutex_); diff --git a/src/yb/master/master_replication.proto b/src/yb/master/master_replication.proto index 1b0856c41128..00c12a9ba472 100644 --- a/src/yb/master/master_replication.proto +++ b/src/yb/master/master_replication.proto @@ -291,6 +291,12 @@ message SetupUniverseReplicationRequestPB { // Used for DB Scoped replication. transactional must be set. // Both id and name must be set. Only YQL_DATABASE_PGSQL are allowed. repeated NamespaceIdentifierPB producer_namespaces = 6; + + // Whether automatic DDL replication is enabled - Creates the + // yb_xcluster_ddl_replication extension and sequences_data table. + // Requires DB Scoped replication, transactional and producer_namespace to be + // set. + optional bool automatic_ddl_mode = 7; // [default = false] } message SetupUniverseReplicationResponsePB { @@ -319,7 +325,7 @@ message AlterUniverseReplicationRequestPB { repeated HostPortPB producer_master_addresses = 2; repeated string producer_table_ids_to_add = 4; repeated string producer_table_ids_to_remove = 5; - optional string new_replication_group_id = 7; + optional string DEPRECATED_new_replication_group_id = 7; // Optional bootstrap ids for the add table operation. repeated string producer_bootstrap_ids_to_add = 6; @@ -555,6 +561,7 @@ message YsqlBackfillReplicationSlotNameToCDCSDKStreamResponsePB { message XClusterCreateOutboundReplicationGroupRequestPB { required string replication_group_id = 1; repeated string namespace_ids = 2; + optional bool automatic_ddl_mode = 3; // [default = false] } message XClusterCreateOutboundReplicationGroupResponsePB { @@ -724,6 +731,7 @@ message GetXClusterOutboundReplicationGroupInfoResponsePB { map table_streams = 2; } repeated NamespaceInfoPB namespace_infos = 2; + optional bool automatic_ddl_mode = 4; // [default = false] } message GetUniverseReplicationsRequestPB { @@ -758,6 +766,7 @@ message GetUniverseReplicationInfoResponsePB { } repeated DbScopedInfoPB db_scoped_infos = 5; + optional bool automatic_ddl_mode = 6; // [default = false] } message DisableDynamicTableAdditionOnCDCSDKStreamRequestPB { diff --git a/src/yb/master/xcluster/xcluster_inbound_replication_group_setup_task.cc b/src/yb/master/xcluster/xcluster_inbound_replication_group_setup_task.cc index ed0e7a6d8b9e..5c1bab9dbd4d 100644 --- a/src/yb/master/xcluster/xcluster_inbound_replication_group_setup_task.cc +++ b/src/yb/master/xcluster/xcluster_inbound_replication_group_setup_task.cc @@ -95,7 +95,8 @@ CreateSetupUniverseReplicationTask( new XClusterInboundReplicationGroupSetupTask( master, catalog_manager, epoch, xcluster::ReplicationGroupId(req->replication_group_id()), req->producer_master_addresses(), std::move(source_table_ids), std::move(stream_ids), - req->transactional(), std::move(source_namespace_ids), std::move(target_namespace_ids))); + req->transactional(), std::move(source_namespace_ids), std::move(target_namespace_ids), + req->automatic_ddl_mode())); RETURN_NOT_OK(setup_task->ValidateInputArguments()); return setup_task; @@ -107,7 +108,7 @@ XClusterInboundReplicationGroupSetupTask::XClusterInboundReplicationGroupSetupTa const google::protobuf::RepeatedPtrField& source_masters, std::vector&& source_table_ids, std::vector&& stream_ids, bool transactional, std::vector&& source_namespace_ids, - std::vector&& target_namespace_ids) + std::vector&& target_namespace_ids, bool automatic_ddl_mode) : MultiStepMonitoredTask(*catalog_manager.AsyncTaskPool(), *master.messenger()), master_(master), catalog_manager_(catalog_manager), @@ -116,14 +117,15 @@ XClusterInboundReplicationGroupSetupTask::XClusterInboundReplicationGroupSetupTa epoch_(epoch), replication_group_id_(std::move(replication_group_id)), source_masters_(source_masters), - transactional_(transactional), source_table_ids_(std::move(source_table_ids)), stream_ids_(std::move(stream_ids)), source_namespace_ids_(std::move(source_namespace_ids)), target_namespace_ids_(std::move(target_namespace_ids)), is_alter_replication_(xcluster::IsAlterReplicationGroupId(replication_group_id_)), + stream_ids_provided_(!stream_ids_.empty()), + transactional_(transactional), is_db_scoped_(!source_namespace_ids_.empty()), - stream_ids_provided_(!stream_ids_.empty()) { + automatic_ddl_mode_(automatic_ddl_mode) { log_prefix_ = Format( "xCluster InboundReplicationGroup [$0] $1: ", replication_group_id_, (is_alter_replication_ ? "Alter" : "Setup")); @@ -202,6 +204,10 @@ Status XClusterInboundReplicationGroupSetupTask::ValidateInputArguments() { SCHECK(!replication_group_id_.empty(), InvalidArgument, "Invalid Replication Group Id"); SCHECK(!source_table_ids_.empty(), InvalidArgument, "No tables provided"); + SCHECK( + !automatic_ddl_mode_ || is_db_scoped_, InvalidArgument, + "Automatic DDL mode is only valid for DB scoped replication groups"); + for (const auto& source_table_id : source_table_ids_) { SCHECK(!source_table_id.empty(), InvalidArgument, "Invalid Table Id"); SCHECK( @@ -586,6 +592,10 @@ XClusterInboundReplicationGroupSetupTask::CreateNewUniverseReplicationInfo() { metadata->set_state(SysUniverseReplicationEntryPB::ACTIVE); metadata->set_transactional(transactional_); + if (is_db_scoped_) { + metadata->mutable_db_scoped_info()->set_automatic_ddl_mode(automatic_ddl_mode_); + } + return ri; } @@ -922,12 +932,14 @@ Status XClusterTableSetupTask::PopulateTableStreamEntry( stream_entry.mutable_producer_schema()->set_last_compatible_consumer_schema_version( target_schema_version); - // Mark this stream as special if it is for the ddl_queue table. - auto yb_table_info = parent_task_->catalog_manager_.GetTableInfo(target_table_id); - stream_entry.set_is_ddl_queue_table( - yb_table_info->GetTableType() == PGSQL_TABLE_TYPE && - yb_table_info->name() == xcluster::kDDLQueueTableName && - yb_table_info->pgschema_name() == xcluster::kDDLQueuePgSchemaName); + if (parent_task_->automatic_ddl_mode_) { + // Mark this stream as special if it is for the ddl_queue table. + auto yb_table_info = parent_task_->catalog_manager_.GetTableInfo(target_table_id); + stream_entry.set_is_ddl_queue_table( + yb_table_info->GetTableType() == PGSQL_TABLE_TYPE && + yb_table_info->name() == xcluster::kDDLQueueTableName && + yb_table_info->pgschema_name() == xcluster::kDDLQueuePgSchemaName); + } return Status::OK(); } diff --git a/src/yb/master/xcluster/xcluster_inbound_replication_group_setup_task.h b/src/yb/master/xcluster/xcluster_inbound_replication_group_setup_task.h index 610543190e3d..deaf1b2e8c64 100644 --- a/src/yb/master/xcluster/xcluster_inbound_replication_group_setup_task.h +++ b/src/yb/master/xcluster/xcluster_inbound_replication_group_setup_task.h @@ -167,7 +167,7 @@ class XClusterInboundReplicationGroupSetupTask : public XClusterInboundReplicati const google::protobuf::RepeatedPtrField& source_masters, std::vector&& source_table_ids, std::vector&& stream_ids, bool transactional, std::vector&& source_namespace_ids, - std::vector&& target_namespace_ids); + std::vector&& target_namespace_ids, bool automatic_ddl_mode); ~XClusterInboundReplicationGroupSetupTask() = default; @@ -241,15 +241,18 @@ class XClusterInboundReplicationGroupSetupTask : public XClusterInboundReplicati const xcluster::ReplicationGroupId replication_group_id_; const google::protobuf::RepeatedPtrField source_masters_; - const bool transactional_; // The following lists are preserved in the same order they were provided. const std::vector source_table_ids_; const std::vector stream_ids_; const std::vector source_namespace_ids_; const std::vector target_namespace_ids_; + const bool is_alter_replication_; - const bool is_db_scoped_; const bool stream_ids_provided_; + const bool transactional_; // Not used in ALTER. + const bool is_db_scoped_; // Not used in ALTER. + const bool automatic_ddl_mode_; // Not used in ALTER. + std::string log_prefix_; std::shared_ptr remote_client_; diff --git a/src/yb/master/xcluster/xcluster_manager.cc b/src/yb/master/xcluster/xcluster_manager.cc index 9faa8154cc62..e01ad15d84d2 100644 --- a/src/yb/master/xcluster/xcluster_manager.cc +++ b/src/yb/master/xcluster/xcluster_manager.cc @@ -42,6 +42,10 @@ DEFINE_RUNTIME_AUTO_bool(enable_tablet_split_of_xcluster_replicated_tables, kExt "When set, it enables automatic tablet splitting for tables that are part of an " "xCluster replication setup"); +// This flag will be converted to a PREVIEW, and then a kExternal Auto flag as the feature matures. +DEFINE_test_flag(bool, xcluster_enable_ddl_replication, false, + "Enables xCluster automatic DDL replication."); + #define LOG_FUNC_AND_RPC \ LOG_WITH_FUNC(INFO) << req->ShortDebugString() << ", from: " << RequestorString(rpc) @@ -280,15 +284,19 @@ Status XClusterManager::XClusterCreateOutboundReplicationGroup( const LeaderEpoch& epoch) { LOG_FUNC_AND_RPC; SCHECK(FLAGS_enable_xcluster_api_v2, IllegalState, "xCluster API v2 is not enabled."); - SCHECK_PB_FIELDS_NOT_EMPTY(*req, replication_group_id); - SCHECK(!req->namespace_ids().empty(), InvalidArgument, "Missing Namespace Ids"); + SCHECK_PB_FIELDS_NOT_EMPTY(*req, replication_group_id, namespace_ids); + SCHECK( + !req->automatic_ddl_mode() || FLAGS_TEST_xcluster_enable_ddl_replication, InvalidArgument, + "Automatic DDL replication (TEST_xcluster_enable_ddl_replication) is not enabled."); std::vector namespace_ids; for (const auto& namespace_id : req->namespace_ids()) { namespace_ids.emplace_back(namespace_id); } + RETURN_NOT_OK(CreateOutboundReplicationGroup( - xcluster::ReplicationGroupId(req->replication_group_id()), namespace_ids, epoch)); + xcluster::ReplicationGroupId(req->replication_group_id()), namespace_ids, + req->automatic_ddl_mode(), epoch)); return Status::OK(); } @@ -526,7 +534,9 @@ Status XClusterManager::GetXClusterOutboundReplicationGroupInfo( auto group_info = VERIFY_RESULT(XClusterSourceManager::GetXClusterOutboundReplicationGroupInfo( xcluster::ReplicationGroupId(req->replication_group_id()))); - for (const auto& [namespace_id, table_streams] : group_info) { + resp->set_automatic_ddl_mode(group_info.automatic_ddl_mode); + + for (const auto& [namespace_id, table_streams] : group_info.namespace_table_map) { auto* ns_info = resp->add_namespace_infos(); ns_info->set_namespace_id(namespace_id); for (const auto& [table_id, stream_id] : table_streams) { @@ -725,6 +735,9 @@ Status XClusterManager::SetupUniverseReplication( const SetupUniverseReplicationRequestPB* req, SetupUniverseReplicationResponsePB* resp, rpc::RpcContext* rpc, const LeaderEpoch& epoch) { LOG_FUNC_AND_RPC; + SCHECK( + !req->automatic_ddl_mode() || FLAGS_TEST_xcluster_enable_ddl_replication, InvalidArgument, + "Automatic DDL replication (TEST_xcluster_enable_ddl_replication) is not enabled."); return XClusterTargetManager::SetupUniverseReplication(req, resp, epoch); } diff --git a/src/yb/master/xcluster/xcluster_outbound_replication_group-test.cc b/src/yb/master/xcluster/xcluster_outbound_replication_group-test.cc index 99f00a3e489c..74d5154ef95b 100644 --- a/src/yb/master/xcluster/xcluster_outbound_replication_group-test.cc +++ b/src/yb/master/xcluster/xcluster_outbound_replication_group-test.cc @@ -454,10 +454,10 @@ TEST_F(XClusterOutboundReplicationGroupMockedTest, CreateTargetReplicationGroup) std::vector streams{xcluster_streams.begin(), xcluster_streams.end()}; EXPECT_CALL( - xcluster_client, - SetupDbScopedUniverseReplication( - kReplicationGroupId, _, std::vector{kNamespaceName}, - std::vector{kNamespaceId}, std::vector{kTableId1}, streams)) + xcluster_client, SetupDbScopedUniverseReplication( + kReplicationGroupId, _, std::vector{kNamespaceName}, + std::vector{kNamespaceId}, std::vector{kTableId1}, + streams, /*automatic_ddl_mode=*/false)) .Times(AtLeast(1)); ASSERT_OK(outbound_rg.CreateXClusterReplication({}, {}, kEpoch)); @@ -496,7 +496,7 @@ TEST_F(XClusterOutboundReplicationGroupMockedTest, CreateTargetReplicationGroup) EXPECT_CALL(xcluster_client, IsSetupUniverseReplicationDone(_)) .WillOnce(Return(IsOperationDoneResult::Done())); - EXPECT_CALL(xcluster_client, SetupDbScopedUniverseReplication(_, _, _, _, _, _)); + EXPECT_CALL(xcluster_client, SetupDbScopedUniverseReplication(_, _, _, _, _, _, _)); // Calling create again should not do anything. ASSERT_OK(outbound_rg.CreateXClusterReplication({}, {}, kEpoch)); diff --git a/src/yb/master/xcluster/xcluster_outbound_replication_group.cc b/src/yb/master/xcluster/xcluster_outbound_replication_group.cc index 658f1ca63bfb..df581c84a245 100644 --- a/src/yb/master/xcluster/xcluster_outbound_replication_group.cc +++ b/src/yb/master/xcluster/xcluster_outbound_replication_group.cc @@ -728,9 +728,9 @@ Status XClusterOutboundReplicationGroup::CreateXClusterReplication( auto target_uuid = VERIFY_RESULT(remote_client->GetXClusterClient().SetupDbScopedUniverseReplication( Id(), source_master_addresses, namespace_names, namespace_ids, source_table_ids, - bootstrap_ids)); + bootstrap_ids, outbound_group.automatic_ddl_mode())); - auto* target_universe_info = l.mutable_data()->pb.mutable_target_universe_info(); + auto* target_universe_info = outbound_group.mutable_target_universe_info(); target_universe_info->set_universe_uuid(target_uuid.ToString()); target_universe_info->set_state( @@ -1147,4 +1147,10 @@ Result XClusterOutboundReplicationGroup::GetStreamId( return table_info->stream_id(); } +Result XClusterOutboundReplicationGroup::AutomaticDDLMode() const { + SharedLock mutex_lock(mutex_); + auto l = VERIFY_RESULT(LockForRead()); + return l->pb.automatic_ddl_mode(); +} + } // namespace yb::master diff --git a/src/yb/master/xcluster/xcluster_outbound_replication_group.h b/src/yb/master/xcluster/xcluster_outbound_replication_group.h index 6e919220ced7..62c46b1ecdf2 100644 --- a/src/yb/master/xcluster/xcluster_outbound_replication_group.h +++ b/src/yb/master/xcluster/xcluster_outbound_replication_group.h @@ -138,6 +138,8 @@ class XClusterOutboundReplicationGroup Result GetStreamId(const NamespaceId& namespace_id, const TableId& table_id) const EXCLUDES(mutex_); + Result AutomaticDDLMode() const EXCLUDES(mutex_); + private: friend class XClusterOutboundReplicationGroupMocked; friend class AddTableToXClusterSourceTask; diff --git a/src/yb/master/xcluster/xcluster_source_manager.cc b/src/yb/master/xcluster/xcluster_source_manager.cc index bd88536b6374..96b6b3e2c6b1 100644 --- a/src/yb/master/xcluster/xcluster_source_manager.cc +++ b/src/yb/master/xcluster/xcluster_source_manager.cc @@ -274,7 +274,8 @@ std::optional XClusterSourceManager::GetDefaultWalRetentionSec( Status XClusterSourceManager::CreateOutboundReplicationGroup( const xcluster::ReplicationGroupId& replication_group_id, - const std::vector& namespace_ids, const LeaderEpoch& epoch) { + const std::vector& namespace_ids, bool automatic_ddl_mode, + const LeaderEpoch& epoch) { { std::lock_guard l(outbound_replication_group_map_mutex_); SCHECK( @@ -291,7 +292,8 @@ Status XClusterSourceManager::CreateOutboundReplicationGroup( outbound_replication_group_map_.erase(replication_group_id); }); - SysXClusterOutboundReplicationGroupEntryPB metadata; // Empty metadata. + SysXClusterOutboundReplicationGroupEntryPB metadata; + metadata.set_automatic_ddl_mode(automatic_ddl_mode); auto outbound_replication_group = InitOutboundReplicationGroup(replication_group_id, metadata); // This will persist the group to SysCatalog. @@ -535,7 +537,6 @@ Status XClusterSourceManager::CheckpointStreamsToEndOfWAL( SCHECK( table_info->LockForRead()->visible_to_client(), NotFound, "Table does not exist", table_id); - RETURN_NOT_OK(catalog_manager_.SetXReplWalRetentionForTable(table_info, epoch)); RETURN_NOT_OK(catalog_manager_.BackfillMetadataForXRepl(table_info, epoch)); bootstrap_req.add_table_ids(table_info->id()); @@ -887,7 +888,6 @@ Result XClusterSourceManager::CreateNewXClusterStreamForTable( const std::optional& initial_state, const LeaderEpoch& epoch) { auto table_info = VERIFY_RESULT(catalog_manager_.FindTableById(table_id)); - RETURN_NOT_OK(catalog_manager_.SetXReplWalRetentionForTable(table_info, epoch)); RETURN_NOT_OK(catalog_manager_.BackfillMetadataForXRepl(table_info, epoch)); const auto state = initial_state ? *initial_state : SysCDCStreamEntryPB::ACTIVE; @@ -1138,14 +1138,14 @@ XClusterSourceManager::GetXClusterOutboundReplicationGroups(NamespaceId namespac return replication_groups; } -Result>> +Result XClusterSourceManager::GetXClusterOutboundReplicationGroupInfo( const xcluster::ReplicationGroupId& replication_group_id) { auto outbound_replication_group = VERIFY_RESULT(GetOutboundReplicationGroup(replication_group_id)); const auto namespace_ids = VERIFY_RESULT(outbound_replication_group->GetNamespaces()); - std::unordered_map> result; + XClusterOutboundReplicationGroupUserInfo result; for (const auto& namespace_id : namespace_ids) { const auto namespace_info = VERIFY_RESULT(outbound_replication_group->GetNamespaceCheckpointInfo(namespace_id)); @@ -1156,8 +1156,10 @@ XClusterSourceManager::GetXClusterOutboundReplicationGroupInfo( for (const auto& table_info : namespace_info->table_infos) { ns_info.emplace(table_info.table_id, table_info.stream_id); } - result[namespace_id] = std::move(ns_info); + result.namespace_table_map[namespace_id] = std::move(ns_info); } + result.automatic_ddl_mode = VERIFY_RESULT(outbound_replication_group->AutomaticDDLMode()); + return result; } diff --git a/src/yb/master/xcluster/xcluster_source_manager.h b/src/yb/master/xcluster/xcluster_source_manager.h index 4af8293cc80e..0edac3a23bb3 100644 --- a/src/yb/master/xcluster/xcluster_source_manager.h +++ b/src/yb/master/xcluster/xcluster_source_manager.h @@ -93,7 +93,8 @@ class XClusterSourceManager { Status CreateOutboundReplicationGroup( const xcluster::ReplicationGroupId& replication_group_id, - const std::vector& namespace_ids, const LeaderEpoch& epoch); + const std::vector& namespace_ids, bool automatic_ddl_mode, + const LeaderEpoch& epoch); Status AddNamespaceToOutboundReplicationGroup( const xcluster::ReplicationGroupId& replication_group_id, const NamespaceId& namespace_id, @@ -160,8 +161,14 @@ class XClusterSourceManager { std::vector GetXClusterOutboundReplicationGroups( NamespaceId namespace_filter); - Result>> - GetXClusterOutboundReplicationGroupInfo(const xcluster::ReplicationGroupId& replication_group_id); + struct XClusterOutboundReplicationGroupUserInfo { + std::unordered_map> + namespace_table_map; + bool automatic_ddl_mode; + }; + + Result GetXClusterOutboundReplicationGroupInfo( + const xcluster::ReplicationGroupId& replication_group_id); bool IsTableReplicated(const TableId& table_id) const EXCLUDES(tables_to_stream_map_mutex_); diff --git a/src/yb/master/xcluster/xcluster_status.h b/src/yb/master/xcluster/xcluster_status.h index 48391faf5f9d..d3481c197540 100644 --- a/src/yb/master/xcluster/xcluster_status.h +++ b/src/yb/master/xcluster/xcluster_status.h @@ -47,6 +47,7 @@ struct XClusterInboundReplicationGroupStatus { std::string db_scoped_info; // Map of target namespace id to source namespace id. Only used in db scope replication. std::unordered_map db_scope_namespace_id_map; + bool automatic_ddl_mode = false; std::unordered_map> table_statuses_by_namespace; }; diff --git a/src/yb/master/xcluster/xcluster_target_manager.cc b/src/yb/master/xcluster/xcluster_target_manager.cc index db12c45e16cd..07c8fe1f3790 100644 --- a/src/yb/master/xcluster/xcluster_target_manager.cc +++ b/src/yb/master/xcluster/xcluster_target_manager.cc @@ -446,6 +446,11 @@ Result XClusterTargetManager::GetUniverse if (IsDbScoped(replication_info_pb)) { result.replication_type = XClusterReplicationType::XCLUSTER_YSQL_DB_SCOPED; + result.automatic_ddl_mode = replication_info_pb.db_scoped_info().automatic_ddl_mode(); + + result.db_scoped_info += Format( + "ddl_mode: $0", + replication_info_pb.db_scoped_info().automatic_ddl_mode() ? "automatic" : "semi-automatic"); for (const auto& namespace_info : replication_info_pb.db_scoped_info().namespace_infos()) { result.db_scope_namespace_id_map[namespace_info.consumer_namespace_id()] = namespace_info.producer_namespace_id(); diff --git a/src/yb/master/xcluster/xcluster_universe_replication_alter_helper.cc b/src/yb/master/xcluster/xcluster_universe_replication_alter_helper.cc index b5cb87b86a7a..e8e4ffc87321 100644 --- a/src/yb/master/xcluster/xcluster_universe_replication_alter_helper.cc +++ b/src/yb/master/xcluster/xcluster_universe_replication_alter_helper.cc @@ -41,6 +41,10 @@ Status AlterUniverseReplicationHelper::Alter( Status AlterUniverseReplicationHelper::AlterUniverseReplication( const AlterUniverseReplicationRequestPB* req, AlterUniverseReplicationResponsePB* resp) { + SCHECK( + !req->has_deprecated_new_replication_group_id(), InvalidArgument, + "Use of field deprecated_new_replication_group_id is not supported"); + auto replication_group_id = xcluster::ReplicationGroupId(req->replication_group_id()); auto original_ri = catalog_manager_.GetUniverseReplication(replication_group_id); SCHECK_EC_FORMAT( @@ -51,7 +55,6 @@ Status AlterUniverseReplicationHelper::AlterUniverseReplication( int config_count = (req->producer_master_addresses_size() > 0 ? 1 : 0) + (req->producer_table_ids_to_remove_size() > 0 ? 1 : 0) + (req->producer_table_ids_to_add_size() > 0 ? 1 : 0) + - (req->has_new_replication_group_id() ? 1 : 0) + (!req->producer_namespace_id_to_remove().empty() ? 1 : 0); SCHECK_EC_FORMAT( config_count == 1, InvalidArgument, MasterError(MasterErrorPB::INVALID_REQUEST), @@ -79,11 +82,6 @@ Status AlterUniverseReplicationHelper::AlterUniverseReplication( return Status::OK(); } - if (req->has_new_replication_group_id()) { - return RenameUniverseReplication( - original_ri, xcluster::ReplicationGroupId(req->new_replication_group_id())); - } - return Status::OK(); } @@ -274,45 +272,4 @@ Status AlterUniverseReplicationHelper::AddTablesToReplication( return Status::OK(); } -Status AlterUniverseReplicationHelper::RenameUniverseReplication( - scoped_refptr universe, - const xcluster::ReplicationGroupId new_replication_group_id) { - const xcluster::ReplicationGroupId old_replication_group_id(universe->id()); - SCHECK_NE( - old_replication_group_id, new_replication_group_id, InvalidArgument, - "Old and new replication ids must be different"); - - SCHECK( - catalog_manager_.GetUniverseReplication(new_replication_group_id) == nullptr, InvalidArgument, - "New replication id is already in use"); - - auto l = universe->LockForWrite(); - - // Since the replication_group_id is used as the key, we need to create a new - // UniverseReplicationInfo. - scoped_refptr new_ri = - new UniverseReplicationInfo(new_replication_group_id); - new_ri->mutable_metadata()->StartMutation(); - SysUniverseReplicationEntryPB* metadata = &new_ri->mutable_metadata()->mutable_dirty()->pb; - metadata->CopyFrom(l->pb); - metadata->set_replication_group_id(new_replication_group_id.ToString()); - - // Also need to update internal maps. - auto cluster_config = catalog_manager_.ClusterConfig(); - auto cl = cluster_config->LockForWrite(); - auto replication_group_map = - cl.mutable_data()->pb.mutable_consumer_registry()->mutable_producer_map(); - (*replication_group_map)[new_replication_group_id.ToString()] = - std::move((*replication_group_map)[old_replication_group_id.ToString()]); - replication_group_map->erase(old_replication_group_id.ToString()); - - RETURN_NOT_OK( - catalog_manager_.ReplaceUniverseReplication(*universe, *new_ri, *cluster_config, epoch_)); - - new_ri->mutable_metadata()->CommitMutation(); - cl.Commit(); - - return Status::OK(); -} - } // namespace yb::master diff --git a/src/yb/master/xcluster/xcluster_universe_replication_alter_helper.h b/src/yb/master/xcluster/xcluster_universe_replication_alter_helper.h index 8ac5d76a03ce..0be5359fc1ae 100644 --- a/src/yb/master/xcluster/xcluster_universe_replication_alter_helper.h +++ b/src/yb/master/xcluster/xcluster_universe_replication_alter_helper.h @@ -52,11 +52,6 @@ class AlterUniverseReplicationHelper { scoped_refptr universe, const AlterUniverseReplicationRequestPB* req, AlterUniverseReplicationResponsePB* resp); - // Rename an existing Universe Replication. - Status RenameUniverseReplication( - scoped_refptr universe, - const xcluster::ReplicationGroupId new_replication_group_id); - Master& master_; CatalogManager& catalog_manager_; SysCatalogTable& sys_catalog_; diff --git a/src/yb/master/xrepl_catalog_manager.cc b/src/yb/master/xrepl_catalog_manager.cc index dde660e5676e..23e9e9d20c16 100644 --- a/src/yb/master/xrepl_catalog_manager.cc +++ b/src/yb/master/xrepl_catalog_manager.cc @@ -56,9 +56,6 @@ using std::string; using namespace std::literals; using std::vector; -DEFINE_RUNTIME_uint32(cdc_wal_retention_time_secs, 4 * 3600, - "WAL retention time in seconds to be used for tables for which a CDC stream was created."); - DEFINE_test_flag(bool, disable_cdc_state_insert_on_setup, false, "Disable inserting new entries into cdc state as part of the setup flow."); @@ -142,6 +139,7 @@ DECLARE_int32(master_rpc_timeout_ms); DECLARE_bool(ysql_yb_enable_replication_commands); DECLARE_bool(yb_enable_cdc_consistent_snapshot_streams); DECLARE_bool(ysql_yb_enable_replica_identity); +DECLARE_uint32(cdc_wal_retention_time_secs); DECLARE_bool(cdcsdk_enable_dynamic_table_addition_with_table_cleanup); @@ -1338,39 +1336,6 @@ Status CatalogManager::SetAllCDCSDKRetentionBarriers( return Status::OK(); } -Status CatalogManager::SetXReplWalRetentionForTable( - const TableInfoPtr& table, const LeaderEpoch& epoch) { - auto& table_id = table->id(); - VLOG_WITH_FUNC(4) << "Setting WAL retention for table: " << table_id; - - SCHECK( - !table->IsPreparing(), IllegalState, - "Cannot set WAL retention of a table that has not yet been fully created"); - - const auto min_wal_retention_secs = FLAGS_cdc_wal_retention_time_secs; - const auto table_wal_retention_secs = table->LockForRead()->pb.wal_retention_secs(); - if (table_wal_retention_secs >= min_wal_retention_secs) { - VLOG_WITH_FUNC(1) << "Table " << table_id << " already has WAL retention set to " - << table_wal_retention_secs - << ", which is equal or higher than cdc_wal_retention_time_secs: " - << min_wal_retention_secs; - } else { - AlterTableRequestPB alter_table_req; - alter_table_req.mutable_table()->set_table_id(table_id); - alter_table_req.set_wal_retention_secs(min_wal_retention_secs); - - AlterTableResponsePB alter_table_resp; - RETURN_NOT_OK_PREPEND( - this->AlterTable(&alter_table_req, &alter_table_resp, /*rpc=*/nullptr, epoch), - Format("Unable to change the WAL retention time for table $0", table_id)); - } - - // Ideally we should WaitForAlterTableToFinish to ensure the change has propagated to all - // tablet peers. But since we have 15min default WAL retention and this operation completes much - // sooner, we skip it. - return Status::OK(); -} - Status CatalogManager::PopulateCDCStateTableWithCDCSDKSnapshotSafeOpIdDetails( const scoped_refptr& table, const yb::TabletId& tablet_id, @@ -5181,40 +5146,6 @@ void CatalogManager::MarkReplicationBootstrapForCleanup( replication_bootstraps_to_clear_.push_back(replication_group_id); } -Status CatalogManager::ReplaceUniverseReplication( - const UniverseReplicationInfo& old_replication_group, - UniverseReplicationInfo& new_replication_group, const ClusterConfigInfo& cluster_config, - const LeaderEpoch& epoch) { - DCHECK(old_replication_group.metadata().HasWriteLock()); - DCHECK(new_replication_group.metadata().HasWriteLock()); - DCHECK(cluster_config.metadata().HasWriteLock()); - - LockGuard lock(mutex_); - - SCHECK_FORMAT( - !universe_replication_map_.contains(new_replication_group.ReplicationGroupId()), - InvalidArgument, "New replication id $0 is already in use", - new_replication_group.ReplicationGroupId()); - - { - // Need all three updates to be atomic. - auto w = sys_catalog_->NewWriter(epoch.leader_term); - RETURN_NOT_OK(w->Mutate(QLWriteRequestPB::QL_STMT_DELETE, &old_replication_group)); - RETURN_NOT_OK( - w->Mutate(QLWriteRequestPB::QL_STMT_UPDATE, &new_replication_group, &cluster_config)); - RETURN_NOT_OK(CheckStatus( - sys_catalog_->SyncWrite(w.get()), - "Updating universe replication info and cluster config in sys-catalog")); - } - - // Update universe_replication_map after persistent data is saved. - universe_replication_map_[new_replication_group.ReplicationGroupId()] = - scoped_refptr(&new_replication_group); - universe_replication_map_.erase(old_replication_group.ReplicationGroupId()); - - return Status::OK(); -} - void CatalogManager::RemoveUniverseReplicationFromMap( const xcluster::ReplicationGroupId& replication_group_id) { LockGuard lock(mutex_); diff --git a/src/yb/master/yql_aggregates_vtable.cc b/src/yb/master/yql_aggregates_vtable.cc index 3e3e7d2edf4c..29c10ed2874e 100644 --- a/src/yb/master/yql_aggregates_vtable.cc +++ b/src/yb/master/yql_aggregates_vtable.cc @@ -29,11 +29,11 @@ Schema YQLAggregatesVTable::CreateSchema() const { SchemaBuilder builder; CHECK_OK(builder.AddHashKeyColumn("keyspace_name", DataType::STRING)); CHECK_OK(builder.AddKeyColumn("aggregate_name", DataType::STRING)); - // TODO: argument_types should be part of the primary key, but since we don't support the CQL - // 'frozen' type, we can't have collections in our primary key. - CHECK_OK(builder.AddColumn("argument_types", QLType::CreateTypeList(DataType::STRING))); + CHECK_OK(builder.AddKeyColumn( + "argument_types", QLType::CreateTypeFrozen(QLType::CreateTypeList(DataType::STRING)))); CHECK_OK(builder.AddColumn("final_func", QLType::Create(DataType::STRING))); CHECK_OK(builder.AddColumn("initcond", QLType::Create(DataType::STRING))); + CHECK_OK(builder.AddColumn("return_type", QLType::Create(DataType::STRING))); CHECK_OK(builder.AddColumn("state_func", QLType::Create(DataType::STRING))); CHECK_OK(builder.AddColumn("state_type", QLType::Create(DataType::STRING))); return builder.Build(); diff --git a/src/yb/master/yql_functions_vtable.cc b/src/yb/master/yql_functions_vtable.cc index 5cba9eff2b17..6e1564b66159 100644 --- a/src/yb/master/yql_functions_vtable.cc +++ b/src/yb/master/yql_functions_vtable.cc @@ -32,11 +32,11 @@ Schema YQLFunctionsVTable::CreateSchema() const { SchemaBuilder builder; CHECK_OK(builder.AddHashKeyColumn("keyspace_name", DataType::STRING)); CHECK_OK(builder.AddKeyColumn("function_name", DataType::STRING)); - // TODO: argument_types should be part of the primary key, but since we don't support the CQL - // 'frozen' type, we can't have collections in our primary key. - CHECK_OK(builder.AddColumn("argument_types", QLType::CreateTypeList(DataType::STRING))); - // TODO: argument_names should be a frozen list. - CHECK_OK(builder.AddColumn("argument_names", QLType::CreateTypeList(DataType::STRING))); + CHECK_OK(builder.AddKeyColumn( + "argument_types", QLType::CreateTypeFrozen(QLType::CreateTypeList(DataType::STRING)))); + CHECK_OK(builder.AddColumn( + "argument_names", QLType::CreateTypeFrozen(QLType::CreateTypeList(DataType::STRING)))); + CHECK_OK(builder.AddColumn("body", QLType::Create(DataType::STRING))); CHECK_OK(builder.AddColumn("called_on_null_input", QLType::Create(DataType::BOOL))); CHECK_OK(builder.AddColumn("language", QLType::Create(DataType::STRING))); CHECK_OK(builder.AddColumn("return_type", QLType::Create(DataType::STRING))); diff --git a/src/yb/tablet/write_query.cc b/src/yb/tablet/write_query.cc index 37a107b3855e..1fb070844312 100644 --- a/src/yb/tablet/write_query.cc +++ b/src/yb/tablet/write_query.cc @@ -197,7 +197,7 @@ WriteQuery::WriteQuery( context_(context), rpc_context_(rpc_context), response_(response), - start_time_(CoarseMonoClock::Now()), + start_time_(MonoTime::Now()), execute_mode_(ExecuteMode::kSimple) { IncrementActiveWriteQueryObjectsBy(1); } @@ -308,7 +308,8 @@ void WriteQuery::Finished(WriteOperation* operation, const Status& status) { TabletMetrics* metrics = tablet->metrics(); if (metrics) { auto op_duration_usec = - make_unsigned(MonoDelta(CoarseMonoClock::now() - start_time_).ToMicroseconds()); + make_unsigned(MonoDelta(MonoTime::Now() - start_time_).ToMicroseconds()); + metrics->Increment(tablet::TabletEventStats::kQlWriteLatency, op_duration_usec); } } diff --git a/src/yb/tablet/write_query.h b/src/yb/tablet/write_query.h index d3eec5265634..fd12b68e2ef7 100644 --- a/src/yb/tablet/write_query.h +++ b/src/yb/tablet/write_query.h @@ -218,7 +218,7 @@ class WriteQuery { tserver::WriteResponsePB* response_; // this transaction's start time - CoarseTimePoint start_time_; + MonoTime start_time_; HybridTime restart_read_ht_; diff --git a/src/yb/tools/yb-admin-snapshot-schedule-test.cc b/src/yb/tools/yb-admin-snapshot-schedule-test.cc index ff96691773c9..d02796a757e1 100644 --- a/src/yb/tools/yb-admin-snapshot-schedule-test.cc +++ b/src/yb/tools/yb-admin-snapshot-schedule-test.cc @@ -263,7 +263,7 @@ class YbAdminSnapshotScheduleTest : public AdminTestBase { CallJsonAdmin("list_clones", source_namespace_id, seq_no)); const auto entries = out.GetArray(); SCHECK_EQ(entries.Size(), 1, IllegalState, "Wrong number of entries. Expected 1"); - master::SysCloneStatePB::State state; + master::SysCloneStatePB::State state = master::SysCloneStatePB::CLONE_SCHEMA_STARTED; master::SysCloneStatePB::State_Parse( std::string(VERIFY_RESULT(GetMemberAsStr(entries[0], "aggregate_state"))), &state); return state == master::SysCloneStatePB::ABORTED || diff --git a/src/yb/tools/yb-admin-xcluster-test.cc b/src/yb/tools/yb-admin-xcluster-test.cc index c2e322e3f277..4bbed507a47d 100644 --- a/src/yb/tools/yb-admin-xcluster-test.cc +++ b/src/yb/tools/yb-admin-xcluster-test.cc @@ -505,65 +505,6 @@ TEST_F(XClusterAdminCliTest, TestListCdcStreamsWithBootstrappedStreams) { ASSERT_OK(RunAdminToolCommand("delete_universe_replication", kProducerClusterId)); } -TEST_F(XClusterAdminCliTest, TestRenameUniverseReplication) { - client::TableHandle producer_cluster_table; - - // Create an identical table on the producer. - client::kv_table_test::CreateTable( - Transactional::kTrue, NumTablets(), producer_cluster_client_.get(), &producer_cluster_table); - - // Setup universe replication, this should only return once complete. - ASSERT_OK(RunAdminToolCommand( - "setup_universe_replication", - kProducerClusterId, - producer_cluster_->GetMasterAddresses(), - producer_cluster_table->id())); - - // Check that the stream was properly created for this table. - ASSERT_OK(CheckTableIsBeingReplicated({producer_cluster_table->id()})); - - // Now rename the replication group and then try to perform operations on it. - std::string new_replication_id = "new_replication_id"; - ASSERT_OK(RunAdminToolCommand( - "alter_universe_replication", kProducerClusterId, "rename_id", new_replication_id)); - - // Assert that using old universe id fails. - ASSERT_NOK(RunAdminToolCommand("set_universe_replication_enabled", kProducerClusterId, 0)); - // But using correct name should succeed. - ASSERT_OK(RunAdminToolCommand("set_universe_replication_enabled", new_replication_id, 0)); - - // Also create a second stream so we can verify name collisions. - std::string collision_id = "collision_id"; - // Need to create new tables so that we don't hit "N:1 replication topology not supported" errors. - auto [consumer_table2, producer_table2] = CreateAdditionalTableOnBothClusters(); - ASSERT_OK(RunAdminToolCommand( - "setup_universe_replication", - collision_id, - producer_cluster_->GetMasterAddresses(), - producer_table2->id())); - ASSERT_NOK(RunAdminToolCommand( - "alter_universe_replication", new_replication_id, "rename_id", collision_id)); - - // Using correct name should still succeed. - ASSERT_OK(RunAdminToolCommand("set_universe_replication_enabled", new_replication_id, 1)); - - // Also test that we can rename again. - std::string new_replication_id2 = "new_replication_id2"; - ASSERT_OK(RunAdminToolCommand( - "alter_universe_replication", new_replication_id, "rename_id", new_replication_id2)); - - // Assert that using old universe ids fails. - ASSERT_NOK(RunAdminToolCommand("set_universe_replication_enabled", kProducerClusterId, 1)); - ASSERT_NOK(RunAdminToolCommand("set_universe_replication_enabled", new_replication_id, 1)); - // But using new correct name should succeed. - ASSERT_OK(RunAdminToolCommand("set_universe_replication_enabled", new_replication_id2, 1)); - - // Delete this universe so shutdown can proceed. - ASSERT_OK(RunAdminToolCommand("delete_universe_replication", new_replication_id2)); - // Also delete second one too. - ASSERT_OK(RunAdminToolCommand("delete_universe_replication", collision_id)); -} - class XClusterAlterUniverseAdminCliTest : public XClusterAdminCliTest { public: void SetUp() override { diff --git a/src/yb/tools/yb-admin_cli.cc b/src/yb/tools/yb-admin_cli.cc index 019a66e88789..b22d5b7b582c 100644 --- a/src/yb/tools/yb-admin_cli.cc +++ b/src/yb/tools/yb-admin_cli.cc @@ -2071,7 +2071,6 @@ const auto alter_universe_replication_args = "add_table [] " "[] | " "remove_table [] [ignore-errors] | " - "rename_id | " "remove_namespace )"; Status alter_universe_replication_action( const ClusterAdminCli::CLIArguments& args, ClusterAdminClient* client) { @@ -2087,7 +2086,6 @@ Status alter_universe_replication_action( vector add_tables; vector remove_tables; vector bootstrap_ids_to_add; - string new_replication_group_id = ""; bool remove_table_ignore_errors = false; NamespaceId source_namespace_to_remove; @@ -2101,9 +2099,6 @@ Status alter_universe_replication_action( if (args.size() == 4 && args[3] == "ignore-errors") { remove_table_ignore_errors = true; } - } else if (args[1] == "rename_id") { - lst = nullptr; - new_replication_group_id = args[2]; } else if (args[1] == "remove_namespace") { lst = nullptr; source_namespace_to_remove = args[2]; @@ -2123,7 +2118,7 @@ Status alter_universe_replication_action( RETURN_NOT_OK_PREPEND( client->AlterUniverseReplication( replication_group_id, master_addresses, add_tables, remove_tables, bootstrap_ids_to_add, - new_replication_group_id, source_namespace_to_remove, remove_table_ignore_errors), + source_namespace_to_remove, remove_table_ignore_errors), Format("Unable to alter replication for universe $0", replication_group_id)); return Status::OK(); @@ -2615,7 +2610,10 @@ Status get_universe_replication_info_action( if (group_info.replication_type == XClusterReplicationType::XCLUSTER_YSQL_DB_SCOPED) { std::cout << std::endl << "DB Scoped info(s):" << std::endl + << "DDL mode: " << (group_info.automatic_ddl_mode ? "Automatic" : "Semi-automatic") + << std::endl << "Namespace name\t\tTarget Namespace ID\t\tSource Namespace ID" << std::endl; + for (const auto& [target_namespace_id, source_namespace_id] : group_info.db_scope_namespace_id_map) { auto* namespace_info = FindOrNull(namespace_map, target_namespace_id); diff --git a/src/yb/tools/yb-admin_client.cc b/src/yb/tools/yb-admin_client.cc index e4e66c749726..93fd55473b46 100644 --- a/src/yb/tools/yb-admin_client.cc +++ b/src/yb/tools/yb-admin_client.cc @@ -4095,8 +4095,7 @@ Status ClusterAdminClient::AlterUniverseReplication( const std::string& replication_group_id, const std::vector& producer_addresses, const std::vector& add_tables, const std::vector& remove_tables, const std::vector& producer_bootstrap_ids_to_add, - const std::string& new_replication_group_id, const NamespaceId& source_namespace_to_remove, - bool remove_table_ignore_errors) { + const NamespaceId& source_namespace_to_remove, bool remove_table_ignore_errors) { master::AlterUniverseReplicationRequestPB req; master::AlterUniverseReplicationResponsePB resp; req.set_replication_group_id(replication_group_id); @@ -4141,10 +4140,6 @@ Status ClusterAdminClient::AlterUniverseReplication( } } - if (!new_replication_group_id.empty()) { - req.set_new_replication_group_id(new_replication_group_id); - } - if (!source_namespace_to_remove.empty()) { req.set_producer_namespace_id_to_remove(source_namespace_to_remove); } diff --git a/src/yb/tools/yb-admin_client.h b/src/yb/tools/yb-admin_client.h index e90ac2750c7c..77c1c8e1da1b 100644 --- a/src/yb/tools/yb-admin_client.h +++ b/src/yb/tools/yb-admin_client.h @@ -434,8 +434,7 @@ class ClusterAdminClient { const std::string& replication_group_id, const std::vector& producer_addresses, const std::vector& add_tables, const std::vector& remove_tables, const std::vector& producer_bootstrap_ids_to_add, - const std::string& new_replication_group_id, const NamespaceId& source_namespace_to_remove, - bool remove_table_ignore_errors = false); + const NamespaceId& source_namespace_to_remove, bool remove_table_ignore_errors = false); Status RenameUniverseReplication(const std::string& old_universe_name, const std::string& new_universe_name); diff --git a/src/yb/tserver/pg_client_session.cc b/src/yb/tserver/pg_client_session.cc index e93a845f0beb..5db57dd4ba08 100644 --- a/src/yb/tserver/pg_client_session.cc +++ b/src/yb/tserver/pg_client_session.cc @@ -825,7 +825,7 @@ Status PgClientSession::AlterTable( client::YBTablePtr yb_table; RETURN_NOT_OK(GetTable(table_id, &table_cache_, &yb_table)); auto table_properties = yb_table->schema().table_properties(); - PgReplicaIdentity replica_identity; + PgReplicaIdentity replica_identity = PgReplicaIdentity::DEFAULT; RETURN_NOT_OK( GetReplicaIdentityEnumValue(req.replica_identity().replica_identity(), &replica_identity)); table_properties.SetReplicaIdentity(replica_identity); diff --git a/src/yb/tserver/xcluster_consumer.cc b/src/yb/tserver/xcluster_consumer.cc index d4a5f554730b..17e978b93743 100644 --- a/src/yb/tserver/xcluster_consumer.cc +++ b/src/yb/tserver/xcluster_consumer.cc @@ -95,9 +95,6 @@ DEFINE_validator(xcluster_safe_time_update_interval_secs, &ValidateXClusterSafeT DEFINE_test_flag(bool, xcluster_disable_delete_old_pollers, false, "Disables the deleting of old xcluster pollers that are no longer needed."); -DEFINE_test_flag(bool, xcluster_enable_ddl_replication, false, - "Enables xCluster automatic DDL replication."); - using namespace std::chrono_literals; #define ACQUIRE_SHARED_LOCK_IF_ONLINE \ @@ -530,8 +527,7 @@ void XClusterConsumer::TriggerPollForNewTablets() { thread_pool_.get(), rpcs_.get(), local_client_, remote_clients_[replication_group_id], this, last_compatible_consumer_schema_version, leader_term, get_leader_term_func_); - if (FLAGS_TEST_xcluster_enable_ddl_replication && - ddl_queue_streams_.contains(producer_tablet_info.stream_id)) { + if (ddl_queue_streams_.contains(producer_tablet_info.stream_id)) { xcluster_poller->InitDDLQueuePoller( use_local_tserver, rate_limiter_.get(), namespace_name, xcluster_context_, connect_to_pg_func_); diff --git a/src/yb/util/monotime-test.cc b/src/yb/util/monotime-test.cc index 2e3f09632f8a..c00d3f5a5170 100644 --- a/src/yb/util/monotime-test.cc +++ b/src/yb/util/monotime-test.cc @@ -36,6 +36,7 @@ #include "yb/util/logging.h" #include +#include "yb/util/test_thread_holder.h" #include "yb/util/test_util.h" using namespace std::literals; @@ -299,4 +300,38 @@ TEST(TestMonoTime, ToStringRelativeToNow) { ASSERT_EQ(ToString(t), ToStringRelativeToNow(t, CoarseTimePoint::max())); } +// Make sure the MonoTime::Now() value does not move backwards. +// Run multiple threads to increase the chance of catching the issue. +// Run for 30 seconds. +TEST(TestMonoTime, DontMoveBackwards) { + // Make sure we are using a steady clock for MonoTime. + ASSERT_TRUE(std::chrono::steady_clock::is_steady); + + LOG(WARNING) << "Now: " << MonoTime::Now().ToSteadyTimePoint().time_since_epoch().count(); + + std::atomic stop_flag{false}; + + auto t = [&stop_flag]() { + auto old = MonoTime::Now(); + while (!stop_flag.load(std::memory_order_acquire)) { + auto now = MonoTime::Now(); + ASSERT_GE(now, old) << "Time moved back!! " + << " Old:" << old.ToSteadyTimePoint().time_since_epoch().count() + << ", Now:" << old.ToSteadyTimePoint().time_since_epoch().count(); + old = now; + } + }; + + TestThreadHolder holder; + holder.AddThreadFunctor(t); + holder.AddThreadFunctor(t); + holder.AddThreadFunctor(t); + holder.AddThreadFunctor(t); + + SleepFor(MonoDelta::FromSeconds(30)); + stop_flag.store(true, std::memory_order_release); + + holder.JoinAll(); +} + } // namespace yb diff --git a/src/yb/util/stack_trace_tracker.cc b/src/yb/util/stack_trace_tracker.cc index 406d8695591b..05a9b36ace91 100644 --- a/src/yb/util/stack_trace_tracker.cc +++ b/src/yb/util/stack_trace_tracker.cc @@ -24,9 +24,11 @@ #include "yb/util/flags.h" #include "yb/util/flags/flags_callback.h" #include "yb/util/stack_trace.h" +#include "yb/util/tsan_util.h" #include "yb/util/unique_lock.h" -DEFINE_RUNTIME_bool(track_stack_traces, yb::kIsDebug, "Whether to enable stack trace tracking"); +DEFINE_RUNTIME_bool(track_stack_traces, yb::kIsDebug && !yb::IsTsan(), + "Whether to enable stack trace tracking"); namespace yb { diff --git a/src/yb/yql/pggate/CMakeLists.txt b/src/yb/yql/pggate/CMakeLists.txt index 58a3eb1d1051..0f08e943ed2d 100644 --- a/src/yb/yql/pggate/CMakeLists.txt +++ b/src/yb/yql/pggate/CMakeLists.txt @@ -26,36 +26,37 @@ add_subdirectory(ysql_bench_metrics_handler) # PGGate API library. set(PGGATE_SRCS - ybc_pggate.cc - pggate.cc - pggate_thread_local_vars.cc + pg_callbacks.cc pg_client.cc - pg_op.cc - pg_operation_buffer.cc - pg_perform_future.cc - pg_sample.cc - pg_session.cc + pg_column.cc pg_ddl.cc pg_dml.cc - pg_dml_write.cc pg_dml_read.cc + pg_dml_write.cc + pg_doc_metrics.cc + pg_doc_op.cc + pg_explicit_row_lock_buffer.cc + pg_expr.cc pg_function.cc pg_function_helpers.cc - pg_type.cc + pggate.cc + pggate_thread_local_vars.cc + pg_memctx.cc + pg_op.cc + pg_operation_buffer.cc + pg_perform_future.cc + pg_sample.cc pg_select.cc pg_select_index.cc - pg_expr.cc - pg_column.cc - pg_doc_op.cc + pg_session.cc + pg_sys_table_prefetcher.cc pg_table.cc pg_tabledesc.cc + pg_tools.cc pg_txn_manager.cc + pg_type.cc pg_value.cc - pg_memctx.cc - pg_callbacks.cc - pg_tools.cc - pg_sys_table_prefetcher.cc - pg_doc_metrics.cc) + ybc_pggate.cc) ADD_YB_LIBRARY(yb_pggate_flags SRCS pggate_flags.cc diff --git a/src/yb/yql/pggate/pg_explicit_row_lock_buffer.cc b/src/yb/yql/pggate/pg_explicit_row_lock_buffer.cc new file mode 100644 index 000000000000..44df52a4b908 --- /dev/null +++ b/src/yb/yql/pggate/pg_explicit_row_lock_buffer.cc @@ -0,0 +1,88 @@ +// Copyright (c) YugabyteDB, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software distributed under the License +// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express +// or implied. See the License for the specific language governing permissions and limitations +// under the License. +// + +#include "yb/yql/pggate/pg_explicit_row_lock_buffer.h" + +#include +#include + +#include "yb/yql/pggate/util/ybc_util.h" +#include "yb/util/scope_exit.h" + +namespace yb::pggate { + +ExplicitRowLockBuffer::ExplicitRowLockBuffer( + TableYbctidVectorProvider& ybctid_container_provider, + std::reference_wrapper ybctid_reader) + : ybctid_container_provider_(ybctid_container_provider), ybctid_reader_(ybctid_reader) { +} + +Status ExplicitRowLockBuffer::Add( + Info&& info, const LightweightTableYbctid& key, bool is_region_local) { + if (info_ && *info_ != info) { + RETURN_NOT_OK(DoFlush()); + } + if (!info_) { + info_.emplace(std::move(info)); + } else if (intents_.contains(key)) { + return Status::OK(); + } + + if (is_region_local) { + region_local_tables_.insert(key.table_id); + } + DCHECK(is_region_local || !region_local_tables_.contains(key.table_id)); + intents_.emplace(key.table_id, std::string(key.ybctid)); + return narrow_cast(intents_.size()) >= yb_explicit_row_locking_batch_size + ? DoFlush() : Status::OK(); +} + +Status ExplicitRowLockBuffer::Flush() { + return IsEmpty() ? Status::OK() : DoFlush(); +} + +Status ExplicitRowLockBuffer::DoFlush() { + DCHECK(!IsEmpty()); + auto scope = ScopeExit([this] { Clear(); }); + auto ybctids = ybctid_container_provider_.Get(); + auto initial_intents_size = intents_.size(); + ybctids->reserve(initial_intents_size); + for (auto it = intents_.begin(); it != intents_.end();) { + auto node = intents_.extract(it++); + ybctids->push_back(std::move(node.value())); + } + RETURN_NOT_OK(ybctid_reader_( + info_->database_id, ybctids, region_local_tables_, + make_lw_function( + [&info = *info_](PgExecParameters& params) { + params.rowmark = info.rowmark; + params.pg_wait_policy = info.pg_wait_policy; + params.docdb_wait_policy = info.docdb_wait_policy; + }))); + SCHECK( + initial_intents_size == ybctids->size(), NotFound, + "Some of the requested ybctids are missing"); + return Status::OK(); +} + +void ExplicitRowLockBuffer::Clear() { + intents_.clear(); + info_.reset(); + region_local_tables_.clear(); +} + +bool ExplicitRowLockBuffer::IsEmpty() const { + return !info_; +} + +} // namespace yb::pggate diff --git a/src/yb/yql/pggate/pg_explicit_row_lock_buffer.h b/src/yb/yql/pggate/pg_explicit_row_lock_buffer.h new file mode 100644 index 000000000000..ba462df61dd0 --- /dev/null +++ b/src/yb/yql/pggate/pg_explicit_row_lock_buffer.h @@ -0,0 +1,58 @@ +// Copyright (c) YugabyteDB, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software distributed under the License +// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express +// or implied. See the License for the specific language governing permissions and limitations +// under the License. +// + +#pragma once + +#include +#include + +#include "yb/gutil/macros.h" + +#include "yb/util/status.h" +#include "yb/util/lw_function.h" + +#include "yb/yql/pggate/pg_tools.h" + +namespace yb::pggate { + +class ExplicitRowLockBuffer { + public: + struct Info { + int rowmark; + int pg_wait_policy; + int docdb_wait_policy; + PgOid database_id; + + friend bool operator==(const Info&, const Info&) = default; + }; + + ExplicitRowLockBuffer( + TableYbctidVectorProvider& ybctid_container_provider, + std::reference_wrapper ybctid_reader); + Status Add( + Info&& info, const LightweightTableYbctid& key, bool is_region_local); + Status Flush(); + void Clear(); + bool IsEmpty() const; + + private: + Status DoFlush(); + + TableYbctidVectorProvider& ybctid_container_provider_; + const YbctidReader& ybctid_reader_; + TableYbctidSet intents_; + OidSet region_local_tables_; + std::optional info_; +}; + +} // namespace yb::pggate diff --git a/src/yb/yql/pggate/pg_session.cc b/src/yb/yql/pggate/pg_session.cc index 3308243d417c..da9f4e4918e9 100644 --- a/src/yb/yql/pggate/pg_session.cc +++ b/src/yb/yql/pggate/pg_session.cc @@ -17,12 +17,9 @@ #include #include -#include #include #include -#include - #include "yb/client/table_info.h" #include "yb/common/pg_types.h" @@ -42,7 +39,6 @@ #include "yb/util/format.h" #include "yb/util/logging.h" #include "yb/util/result.h" -#include "yb/util/scope_exit.h" #include "yb/util/status_format.h" #include "yb/util/string_util.h" @@ -388,80 +384,6 @@ class PgSession::RunHelper { const ForceFlushBeforeNonBufferableOp force_flush_before_non_bufferable_op_; }; -//-------------------------------------------------------------------------------------------------- -// Class TableYbctidHasher -//-------------------------------------------------------------------------------------------------- - -size_t TableYbctidHasher::operator()(const LightweightTableYbctid& value) const { - size_t hash = 0; - boost::hash_combine(hash, value.table_id); - boost::hash_range(hash, value.ybctid.begin(), value.ybctid.end()); - return hash; -} - -ExplicitRowLockBuffer::ExplicitRowLockBuffer( - TableYbctidVectorProvider& ybctid_container_provider, - std::reference_wrapper ybctid_reader) - : ybctid_container_provider_(ybctid_container_provider), ybctid_reader_(ybctid_reader) { -} - -Status ExplicitRowLockBuffer::Add( - Info&& info, const LightweightTableYbctid& key, bool is_region_local) { - if (info_ && *info_ != info) { - RETURN_NOT_OK(DoFlush()); - } - if (!info_) { - info_.emplace(std::move(info)); - } else if (intents_.contains(key)) { - return Status::OK(); - } - - if (is_region_local) { - region_local_tables_.insert(key.table_id); - } - DCHECK(is_region_local || !region_local_tables_.contains(key.table_id)); - intents_.emplace(key.table_id, std::string(key.ybctid)); - return narrow_cast(intents_.size()) >= yb_explicit_row_locking_batch_size - ? DoFlush() : Status::OK(); -} - -Status ExplicitRowLockBuffer::Flush() { - return IsEmpty() ? Status::OK() : DoFlush(); -} - -Status ExplicitRowLockBuffer::DoFlush() { - DCHECK(!IsEmpty()); - auto scope = ScopeExit([this] { Clear(); }); - auto ybctids = ybctid_container_provider_.Get(); - auto initial_intents_size = intents_.size(); - ybctids->reserve(initial_intents_size); - for (auto it = intents_.begin(); it != intents_.end();) { - auto node = intents_.extract(it++); - ybctids->push_back(std::move(node.value())); - } - RETURN_NOT_OK(ybctid_reader_( - info_->database_id, ybctids, region_local_tables_, - make_lw_function( - [&info = *info_](PgExecParameters& params) { - params.rowmark = info.rowmark; - params.pg_wait_policy = info.pg_wait_policy; - params.docdb_wait_policy = info.docdb_wait_policy; - }))); - SCHECK(initial_intents_size == ybctids->size(), NotFound, - "Some of the requested ybctids are missing"); - return Status::OK(); -} - -void ExplicitRowLockBuffer::Clear() { - intents_.clear(); - info_.reset(); - region_local_tables_.clear(); -} - -bool ExplicitRowLockBuffer::IsEmpty() const { - return !info_; -} - //-------------------------------------------------------------------------------------------------- // Class PgSession //-------------------------------------------------------------------------------------------------- diff --git a/src/yb/yql/pggate/pg_session.h b/src/yb/yql/pggate/pg_session.h index 8b66b91a319b..64b24375a2a9 100644 --- a/src/yb/yql/pggate/pg_session.h +++ b/src/yb/yql/pggate/pg_session.h @@ -13,13 +13,10 @@ #pragma once -#include #include #include -#include #include #include -#include #include #include @@ -39,6 +36,7 @@ #include "yb/yql/pggate/pg_client.h" #include "yb/yql/pggate/pg_doc_metrics.h" +#include "yb/yql/pggate/pg_explicit_row_lock_buffer.h" #include "yb/yql/pggate/pg_gate_fwd.h" #include "yb/yql/pggate/pg_operation_buffer.h" #include "yb/yql/pggate/pg_perform_future.h" @@ -53,131 +51,6 @@ YB_STRONGLY_TYPED_BOOL(InvalidateOnPgClient); YB_STRONGLY_TYPED_BOOL(UseCatalogSession); YB_STRONGLY_TYPED_BOOL(ForceNonBufferable); -struct LightweightTableYbctid { - LightweightTableYbctid(PgOid table_id_, const std::string_view& ybctid_) - : table_id(table_id_), ybctid(ybctid_) {} - LightweightTableYbctid(PgOid table_id_, const Slice& ybctid_) - : LightweightTableYbctid(table_id_, static_cast(ybctid_)) {} - - PgOid table_id; - std::string_view ybctid; -}; - -struct TableYbctid { - TableYbctid(PgOid table_id_, std::string ybctid_) - : table_id(table_id_), ybctid(std::move(ybctid_)) {} - - operator LightweightTableYbctid() const { - return LightweightTableYbctid(table_id, static_cast(ybctid)); - } - - PgOid table_id; - std::string ybctid; -}; - -struct MemoryOptimizedTableYbctid { - MemoryOptimizedTableYbctid(PgOid table_id_, std::string_view ybctid_) - : table_id(table_id_), - ybctid_size(static_cast(ybctid_.size())), - ybctid_data(new char[ybctid_size]) { - std::memcpy(ybctid_data.get(), ybctid_.data(), ybctid_size); - } - - operator LightweightTableYbctid() const { - return LightweightTableYbctid(table_id, std::string_view(ybctid_data.get(), ybctid_size)); - } - - PgOid table_id; - uint32_t ybctid_size; - std::unique_ptr ybctid_data; -}; - -static_assert( - sizeof(MemoryOptimizedTableYbctid) == 16 && - sizeof(MemoryOptimizedTableYbctid) < sizeof(TableYbctid)); - -struct TableYbctidComparator { - using is_transparent = void; - - bool operator()(const LightweightTableYbctid& l, const LightweightTableYbctid& r) const { - return l.table_id == r.table_id && l.ybctid == r.ybctid; - } -}; - -struct TableYbctidHasher { - using is_transparent = void; - - size_t operator()(const LightweightTableYbctid& value) const; -}; - -using OidSet = std::unordered_set; -template -using TableYbctidSetHelper = - std::unordered_set; -using MemoryOptimizedTableYbctidSet = TableYbctidSetHelper; -using TableYbctidSet = TableYbctidSetHelper; -using TableYbctidVector = std::vector; - -class TableYbctidVectorProvider { - public: - class Accessor { - public: - ~Accessor() { container_.clear(); } - TableYbctidVector* operator->() { return &container_; } - TableYbctidVector& operator*() { return container_; } - operator TableYbctidVector&() { return container_; } - - private: - explicit Accessor(TableYbctidVector* container) : container_(*container) {} - - friend class TableYbctidVectorProvider; - - TableYbctidVector& container_; - - DISALLOW_COPY_AND_ASSIGN(Accessor); - }; - - [[nodiscard]] Accessor Get() { return Accessor(&container_); } - - private: - TableYbctidVector container_; -}; - -using ExecParametersMutator = LWFunction; - -using YbctidReader = - std::function; - -class ExplicitRowLockBuffer { - public: - struct Info { - int rowmark; - int pg_wait_policy; - int docdb_wait_policy; - PgOid database_id; - - friend bool operator==(const Info&, const Info&) = default; - }; - - ExplicitRowLockBuffer( - TableYbctidVectorProvider& ybctid_container_provider, - std::reference_wrapper ybctid_reader); - Status Add( - Info&& info, const LightweightTableYbctid& key, bool is_region_local); - Status Flush(); - void Clear(); - bool IsEmpty() const; - - private: - Status DoFlush(); - - TableYbctidVectorProvider& ybctid_container_provider_; - const YbctidReader& ybctid_reader_; - TableYbctidSet intents_; - OidSet region_local_tables_; - std::optional info_; -}; - // This class is not thread-safe as it is mostly used by a single-threaded PostgreSQL backend // process. class PgSession : public RefCountedThreadSafe { diff --git a/src/yb/yql/pggate/pg_tools.cc b/src/yb/yql/pggate/pg_tools.cc index 359e376f2dfb..c901686ac057 100644 --- a/src/yb/yql/pggate/pg_tools.cc +++ b/src/yb/yql/pggate/pg_tools.cc @@ -15,12 +15,134 @@ #include "yb/yql/pggate/pg_tools.h" +#include +#include + +#include +#include + +#include "yb/common/pg_system_attr.h" + +#include "yb/util/memory/arena.h" +#include "yb/util/result.h" + +#include "yb/yql/pggate/pg_doc_op.h" +#include "yb/yql/pggate/pg_session.h" +#include "yb/yql/pggate/pg_table.h" + #include "yb/yql/pggate/ybc_pg_typedefs.h" DECLARE_uint32(TEST_yb_ash_sleep_at_wait_state_ms); DECLARE_uint32(TEST_yb_ash_wait_code_to_sleep_at); namespace yb::pggate { +namespace { + +struct TableHolder { + explicit TableHolder(const PgTableDescPtr& descr) : table_(descr) {} + PgTable table_; +}; + +class PgsqlReadOpWithPgTable : private TableHolder, public PgsqlReadOp { + public: + PgsqlReadOpWithPgTable(ThreadSafeArena* arena, const PgTableDescPtr& descr, bool is_region_local, + PgsqlMetricsCaptureType metrics_capture) + : TableHolder(descr), PgsqlReadOp(arena, *table_, is_region_local, metrics_capture) {} + + PgTable& table() { + return table_; + } +}; + +// Helper class to collect operations from multiple doc_ops and send them with a single perform RPC. +class PrecastRequestSender { + // Struct stores operation and table for futher sending this operation + // with the 'PgSession::RunAsync' method. + struct OperationInfo { + OperationInfo(const PgsqlOpPtr& operation_, const PgTableDesc& table_) + : operation(operation_), table(&table_) {} + PgsqlOpPtr operation; + const PgTableDesc* table; + }; + + class ResponseProvider : public PgDocResponse::Provider { + public: + // Shared state among different instances of the 'PgDocResponse' object returned by the 'Send' + // method. Response field will be initialized when all collected operations will be sent by the + // call of 'TransmitCollected' method. + using State = PgDocResponse::Data; + using StatePtr = std::shared_ptr; + + explicit ResponseProvider(const StatePtr& state) + : state_(state) {} + + Result Get() override { + SCHECK(state_->response, IllegalState, "Response is not set"); + return *state_; + } + + private: + StatePtr state_; + }; + + public: + Result Send( + PgSession& session, const PgsqlOpPtr* ops, size_t ops_count, const PgTableDesc& table, + HybridTime in_txn_limit) { + if (!collecting_mode_) { + return PgDocOp::DefaultSender( + &session, ops, ops_count, table, in_txn_limit, + ForceNonBufferable::kFalse, IsForWritePgDoc::kFalse); + } + // For now PrecastRequestSender can work only with a new in txn limit set to the current time + // for each batch of ops. It doesn't use a single in txn limit for all read ops in a statement. + // TODO: Explain why is this the case because it differs from requirement 1 in + // src/yb/yql/pggate/README + RSTATUS_DCHECK(!in_txn_limit, IllegalState, "Only zero is expected"); + for (auto end = ops + ops_count; ops != end; ++ops) { + ops_.emplace_back(*ops, table); + } + if (!provider_state_) { + provider_state_ = std::make_shared(); + } + return PgDocResponse(std::make_unique(provider_state_)); + } + + Status TransmitCollected(PgSession& session) { + auto res = DoTransmitCollected(session); + ops_.clear(); + provider_state_.reset(); + return res; + } + + void DisableCollecting() { + DCHECK(ops_.empty()); + collecting_mode_ = false; + } + + private: + Status DoTransmitCollected(PgSession& session) { + auto i = ops_.begin(); + PgDocResponse response(VERIFY_RESULT(session.RunAsync(make_lw_function( + [&i, end = ops_.end()] { + using TO = PgSession::TableOperation; + if (i == end) { + return TO(); + } + auto& info = *i++; + return TO{.operation = &info.operation, .table = info.table}; + }), HybridTime())), + {TableType::USER, IsForWritePgDoc::kFalse}); + *provider_state_ = VERIFY_RESULT(response.Get(session)); + return Status::OK(); + } + + bool collecting_mode_ = true; + ResponseProvider::StatePtr provider_state_; + boost::container::small_vector ops_; +}; + +} // namespace RowMarkType GetRowMarkType(const PgExecParameters* exec_params) { return exec_params && exec_params->rowmark > -1 @@ -42,4 +164,94 @@ PgWaitEventWatcher::~PgWaitEventWatcher() { starter_(prev_wait_event_); } +MemoryOptimizedTableYbctid::MemoryOptimizedTableYbctid(PgOid table_id_, std::string_view ybctid_) + : table_id(table_id_), + ybctid_size(static_cast(ybctid_.size())), + ybctid_data(new char[ybctid_size]) { + std::memcpy(ybctid_data.get(), ybctid_.data(), ybctid_size); +} + +MemoryOptimizedTableYbctid::operator LightweightTableYbctid() const { + return LightweightTableYbctid(table_id, std::string_view(ybctid_data.get(), ybctid_size)); +} + +size_t TableYbctidHasher::operator()(const LightweightTableYbctid& value) const { + size_t hash = 0; + boost::hash_combine(hash, value.table_id); + boost::hash_range(hash, value.ybctid.begin(), value.ybctid.end()); + return hash; +} + +Status FetchExistingYbctids(const PgSession::ScopedRefPtr& session, + PgOid database_id, + TableYbctidVector& ybctids, + const OidSet& region_local_tables, + const ExecParametersMutator& exec_params_mutator) { + // Group the items by the table ID. + std::sort(ybctids.begin(), ybctids.end(), [](const auto& a, const auto& b) { + return a.table_id < b.table_id; + }); + + auto arena = std::make_shared(); + + PrecastRequestSender precast_sender; + boost::container::small_vector, 16> doc_ops; + auto request_sender = [&precast_sender]( + PgSession* session, const PgsqlOpPtr* ops, size_t ops_count, const PgTableDesc& table, + HybridTime in_txn_limit, ForceNonBufferable force_non_bufferable, IsForWritePgDoc is_write) { + DCHECK(!force_non_bufferable); + DCHECK(!is_write); + return precast_sender.Send(*session, ops, ops_count, table, in_txn_limit); + }; + // Start all the doc_ops to read from docdb in parallel, one doc_op per table ID. + // Each doc_op will use request_sender to send all the requests with single perform RPC. + for (auto it = ybctids.begin(), end = ybctids.end(); it != end;) { + const auto table_id = it->table_id; + auto desc = VERIFY_RESULT(session->LoadTable(PgObjectId(database_id, table_id))); + bool is_region_local = region_local_tables.find(table_id) != region_local_tables.end(); + auto metrics_capture = session->metrics().metrics_capture(); + auto read_op = std::make_shared( + arena.get(), desc, is_region_local, metrics_capture); + + auto* expr_pb = read_op->read_request().add_targets(); + expr_pb->set_column_id(to_underlying(PgSystemAttrNum::kYBTupleId)); + doc_ops.push_back(std::make_unique( + session, &read_op->table(), std::move(read_op), request_sender)); + auto& doc_op = *doc_ops.back(); + auto exec_params = doc_op.ExecParameters(); + exec_params_mutator(exec_params); + RETURN_NOT_OK(doc_op.ExecuteInit(&exec_params)); + // Populate doc_op with ybctids which belong to current table. + RETURN_NOT_OK(doc_op.PopulateByYbctidOps({make_lw_function([&it, table_id, end] { + return it != end && it->table_id == table_id ? Slice((it++)->ybctid) : Slice(); + }), static_cast(end - it)})); + RETURN_NOT_OK(doc_op.Execute()); + } + + RETURN_NOT_OK(precast_sender.TransmitCollected(*session)); + // Disable further request collecting as in the vast majority of cases new requests will not be + // initiated because requests for all ybctids has already been sent. But in case of dynamic + // splitting new requests might be sent. They will be sent and processed as usual (i.e. request + // of each doc_op will be sent individually). + precast_sender.DisableCollecting(); + // Collect the results from the docdb ops. + ybctids.clear(); + for (auto& it : doc_ops) { + for (;;) { + auto rowsets = VERIFY_RESULT(it->GetResult()); + if (rowsets.empty()) { + break; + } + for (auto& row : rowsets) { + RETURN_NOT_OK(row.ProcessSystemColumns()); + for (const auto& ybctid : row.ybctids()) { + ybctids.emplace_back(it->table()->relfilenode_id().object_oid, ybctid.ToBuffer()); + } + } + } + } + + return Status::OK(); +} + } // namespace yb::pggate diff --git a/src/yb/yql/pggate/pg_tools.h b/src/yb/yql/pggate/pg_tools.h index 0aec6f457b03..c26ad788cf6f 100644 --- a/src/yb/yql/pggate/pg_tools.h +++ b/src/yb/yql/pggate/pg_tools.h @@ -1,5 +1,5 @@ //-------------------------------------------------------------------------------------------------- -// Copyright (c) YugaByte, Inc. +// Copyright (c) YugabyteDB, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except // in compliance with the License. You may obtain a copy of the License at @@ -17,16 +17,32 @@ #pragma once +#include +#include +#include +#include +#include +#include +#include + #include "yb/ash/wait_state.h" +#include "yb/common/pg_types.h" #include "yb/common/transaction.pb.h" #include "yb/gutil/macros.h" +#include "yb/gutil/ref_counted.h" + +#include "yb/util/lw_function.h" +#include "yb/util/slice.h" +#include "yb/util/status.h" struct PgExecParameters; namespace yb::pggate { +class PgSession; + RowMarkType GetRowMarkType(const PgExecParameters* exec_params); struct Bound { @@ -56,4 +72,96 @@ struct EstimatedRowCount { double dead; }; +struct LightweightTableYbctid { + LightweightTableYbctid(PgOid table_id_, const std::string_view& ybctid_) + : table_id(table_id_), ybctid(ybctid_) {} + LightweightTableYbctid(PgOid table_id_, const Slice& ybctid_) + : LightweightTableYbctid(table_id_, static_cast(ybctid_)) {} + + PgOid table_id; + std::string_view ybctid; +}; + +struct TableYbctid { + TableYbctid(PgOid table_id_, std::string ybctid_) + : table_id(table_id_), ybctid(std::move(ybctid_)) {} + + operator LightweightTableYbctid() const { + return LightweightTableYbctid(table_id, static_cast(ybctid)); + } + + PgOid table_id; + std::string ybctid; +}; + +struct MemoryOptimizedTableYbctid { + MemoryOptimizedTableYbctid(PgOid table_id_, std::string_view ybctid_); + + operator LightweightTableYbctid() const; + + PgOid table_id; + uint32_t ybctid_size; + std::unique_ptr ybctid_data; +}; + +static_assert( + sizeof(MemoryOptimizedTableYbctid) == 16 && + sizeof(MemoryOptimizedTableYbctid) < sizeof(TableYbctid)); + +struct TableYbctidComparator { + using is_transparent = void; + + bool operator()(const LightweightTableYbctid& l, const LightweightTableYbctid& r) const { + return l.table_id == r.table_id && l.ybctid == r.ybctid; + } +}; + +struct TableYbctidHasher { + using is_transparent = void; + + size_t operator()(const LightweightTableYbctid& value) const; +}; + +using OidSet = std::unordered_set; +template +using TableYbctidSetHelper = + std::unordered_set; +using MemoryOptimizedTableYbctidSet = TableYbctidSetHelper; +using TableYbctidSet = TableYbctidSetHelper; +using TableYbctidVector = std::vector; + +class TableYbctidVectorProvider { + public: + class Accessor { + public: + ~Accessor() { container_.clear(); } + TableYbctidVector* operator->() { return &container_; } + TableYbctidVector& operator*() { return container_; } + operator TableYbctidVector&() { return container_; } + + private: + explicit Accessor(TableYbctidVector* container) : container_(*container) {} + + friend class TableYbctidVectorProvider; + + TableYbctidVector& container_; + + DISALLOW_COPY_AND_ASSIGN(Accessor); + }; + + [[nodiscard]] Accessor Get() { return Accessor(&container_); } + + private: + TableYbctidVector container_; +}; + +using ExecParametersMutator = LWFunction; + +using YbctidReader = + std::function; + +Status FetchExistingYbctids( + const scoped_refptr& session, PgOid database_id, TableYbctidVector& ybctids, + const OidSet& region_local_tables, const ExecParametersMutator& exec_params_mutator); + } // namespace yb::pggate diff --git a/src/yb/yql/pggate/pggate.cc b/src/yb/yql/pggate/pggate.cc index bac0237687a1..89d5c910abed 100644 --- a/src/yb/yql/pggate/pggate.cc +++ b/src/yb/yql/pggate/pggate.cc @@ -1,5 +1,5 @@ //-------------------------------------------------------------------------------------------------- -// Copyright (c) YugaByteDB, Inc. +// Copyright (c) YugabyteDB, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except // in compliance with the License. You may obtain a copy of the License at @@ -21,8 +21,6 @@ #include #include -#include - #include #include "yb/client/client_utils.h" @@ -92,22 +90,6 @@ DEFINE_RUNTIME_PREVIEW_bool(ysql_pack_inserted_value, false, namespace yb::pggate { namespace { -struct TableHolder { - explicit TableHolder(const PgTableDescPtr& descr) : table_(descr) {} - PgTable table_; -}; - -class PgsqlReadOpWithPgTable : private TableHolder, public PgsqlReadOp { - public: - PgsqlReadOpWithPgTable(ThreadSafeArena* arena, const PgTableDescPtr& descr, bool is_region_local, - PgsqlMetricsCaptureType metrics_capture) - : TableHolder(descr), PgsqlReadOp(arena, *table_, is_region_local, metrics_capture) {} - - PgTable& table() { - return table_; - } -}; - Status AddColumn(PgCreateTable* pg_stmt, const char *attr_name, int attr_num, const YBCPgTypeEntity *attr_type, bool is_hash, bool is_range, bool is_desc, bool is_nulls_first) { @@ -149,166 +131,6 @@ tserver::TServerSharedObject BuildTServerSharedObject() { return CHECK_RESULT(tserver::TServerSharedObject::OpenReadOnly(FLAGS_pggate_tserver_shm_fd)); } -// Helper class to collect operations from multiple doc_ops and send them with a single perform RPC. -class PrecastRequestSender { - // Struct stores operation and table for futher sending this operation - // with the 'PgSession::RunAsync' method. - struct OperationInfo { - OperationInfo(const PgsqlOpPtr& operation_, const PgTableDesc& table_) - : operation(operation_), table(&table_) {} - PgsqlOpPtr operation; - const PgTableDesc* table; - }; - - class ResponseProvider : public PgDocResponse::Provider { - public: - // Shared state among different instances of the 'PgDocResponse' object returned by the 'Send' - // method. Response field will be initialized when all collected operations will be sent by the - // call of 'TransmitCollected' method. - using State = PgDocResponse::Data; - using StatePtr = std::shared_ptr; - - explicit ResponseProvider(const StatePtr& state) - : state_(state) {} - - Result Get() override { - SCHECK(state_->response, IllegalState, "Response is not set"); - return *state_; - } - - private: - StatePtr state_; - }; - - public: - Result Send( - PgSession& session, const PgsqlOpPtr* ops, size_t ops_count, const PgTableDesc& table, - HybridTime in_txn_limit) { - if (!collecting_mode_) { - return PgDocOp::DefaultSender( - &session, ops, ops_count, table, in_txn_limit, - ForceNonBufferable::kFalse, IsForWritePgDoc::kFalse); - } - // For now PrecastRequestSender can work only with a new in txn limit set to the current time - // for each batch of ops. It doesn't use a single in txn limit for all read ops in a statement. - // TODO: Explain why is this the case because it differs from requirement 1 in - // src/yb/yql/pggate/README - RSTATUS_DCHECK(!in_txn_limit, IllegalState, "Only zero is expected"); - for (auto end = ops + ops_count; ops != end; ++ops) { - ops_.emplace_back(*ops, table); - } - if (!provider_state_) { - provider_state_ = std::make_shared(); - } - return PgDocResponse(std::make_unique(provider_state_)); - } - - Status TransmitCollected(PgSession& session) { - auto res = DoTransmitCollected(session); - ops_.clear(); - provider_state_.reset(); - return res; - } - - void DisableCollecting() { - DCHECK(ops_.empty()); - collecting_mode_ = false; - } - - private: - Status DoTransmitCollected(PgSession& session) { - auto i = ops_.begin(); - PgDocResponse response(VERIFY_RESULT(session.RunAsync(make_lw_function( - [&i, end = ops_.end()] { - using TO = PgSession::TableOperation; - if (i == end) { - return TO(); - } - auto& info = *i++; - return TO{.operation = &info.operation, .table = info.table}; - }), HybridTime())), - {TableType::USER, IsForWritePgDoc::kFalse}); - *provider_state_ = VERIFY_RESULT(response.Get(session)); - return Status::OK(); - } - - bool collecting_mode_ = true; - ResponseProvider::StatePtr provider_state_; - boost::container::small_vector ops_; -}; - -Status FetchExistingYbctids(const PgSession::ScopedRefPtr& session, - PgOid database_id, - TableYbctidVector& ybctids, - const OidSet& region_local_tables, - const ExecParametersMutator& exec_params_mutator) { - // Group the items by the table ID. - std::sort(ybctids.begin(), ybctids.end(), [](const auto& a, const auto& b) { - return a.table_id < b.table_id; - }); - - auto arena = std::make_shared(); - - PrecastRequestSender precast_sender; - boost::container::small_vector, 16> doc_ops; - auto request_sender = [&precast_sender]( - PgSession* session, const PgsqlOpPtr* ops, size_t ops_count, const PgTableDesc& table, - HybridTime in_txn_limit, ForceNonBufferable force_non_bufferable, IsForWritePgDoc is_write) { - DCHECK(!force_non_bufferable); - DCHECK(!is_write); - return precast_sender.Send(*session, ops, ops_count, table, in_txn_limit); - }; - // Start all the doc_ops to read from docdb in parallel, one doc_op per table ID. - // Each doc_op will use request_sender to send all the requests with single perform RPC. - for (auto it = ybctids.begin(), end = ybctids.end(); it != end;) { - const auto table_id = it->table_id; - auto desc = VERIFY_RESULT(session->LoadTable(PgObjectId(database_id, table_id))); - bool is_region_local = region_local_tables.find(table_id) != region_local_tables.end(); - auto metrics_capture = session->metrics().metrics_capture(); - auto read_op = std::make_shared( - arena.get(), desc, is_region_local, metrics_capture); - - auto* expr_pb = read_op->read_request().add_targets(); - expr_pb->set_column_id(to_underlying(PgSystemAttrNum::kYBTupleId)); - doc_ops.push_back(std::make_unique( - session, &read_op->table(), std::move(read_op), request_sender)); - auto& doc_op = *doc_ops.back(); - auto exec_params = doc_op.ExecParameters(); - exec_params_mutator(exec_params); - RETURN_NOT_OK(doc_op.ExecuteInit(&exec_params)); - // Populate doc_op with ybctids which belong to current table. - RETURN_NOT_OK(doc_op.PopulateByYbctidOps({make_lw_function([&it, table_id, end] { - return it != end && it->table_id == table_id ? Slice((it++)->ybctid) : Slice(); - }), static_cast(end - it)})); - RETURN_NOT_OK(doc_op.Execute()); - } - - RETURN_NOT_OK(precast_sender.TransmitCollected(*session)); - // Disable further request collecting as in the vast majority of cases new requests will not be - // initiated because requests for all ybctids has already been sent. But in case of dynamic - // splitting new requests might be sent. They will be sent and processed as usual (i.e. request - // of each doc_op will be sent individually). - precast_sender.DisableCollecting(); - // Collect the results from the docdb ops. - ybctids.clear(); - for (auto& it : doc_ops) { - for (;;) { - auto rowsets = VERIFY_RESULT(it->GetResult()); - if (rowsets.empty()) { - break; - } - for (auto& row : rowsets) { - RETURN_NOT_OK(row.ProcessSystemColumns()); - for (const auto& ybctid : row.ybctids()) { - ybctids.emplace_back(it->table()->relfilenode_id().object_oid, ybctid.ToBuffer()); - } - } - } - } - - return Status::OK(); -} - } // namespace //-------------------------------------------------------------------------------------------------- diff --git a/src/yb/yql/pgwrapper/pg_mini-test.cc b/src/yb/yql/pgwrapper/pg_mini-test.cc index 1d3a674772fc..90667f97f0a0 100644 --- a/src/yb/yql/pgwrapper/pg_mini-test.cc +++ b/src/yb/yql/pgwrapper/pg_mini-test.cc @@ -276,7 +276,7 @@ TEST_F(PgMiniTest, FollowerReads) { // Setting staleness to what we require for the test. // Sleep and then perform an update, such that follower reads should see the old value. // But current reads will see the new/updated value. - constexpr int32_t kStalenessMs = 4000; + constexpr int32_t kStalenessMs = 4000 * kTimeMultiplier; LOG(INFO) << "Sleeping for " << kStalenessMs << " ms"; SleepFor(MonoDelta::FromMilliseconds(kStalenessMs)); ASSERT_OK(conn.Execute("UPDATE t SET value = 'NEW' WHERE key = 1")); @@ -383,7 +383,11 @@ TEST_F(PgMiniTest, FollowerReads) { ASSERT_OK(conn.Execute( yb::Format("BEGIN TRANSACTION READ ONLY ISOLATION LEVEL $0", isolation_level))); value = ASSERT_RESULT(conn.FetchRow("SELECT value FROM t WHERE key = 1")); - ASSERT_EQ(value, local ? "NEW" : "old"); + // If for some reason things are slow, follower reads may still see the NEW value. + const auto time_delta_ms = MonoTime::Now().GetDeltaSince(kUpdateTime).ToMilliseconds(); + if (time_delta_ms < kStalenessMs) { + ASSERT_EQ(value, local ? "NEW" : "old"); + } ASSERT_OK(conn.Execute("COMMIT")); } // local diff --git a/yugabyted-ui/apiserver/cmd/server/handlers/api_voyager.go b/yugabyted-ui/apiserver/cmd/server/handlers/api_voyager.go index dd40f93c59ac..597481cab487 100644 --- a/yugabyted-ui/apiserver/cmd/server/handlers/api_voyager.go +++ b/yugabyted-ui/apiserver/cmd/server/handlers/api_voyager.go @@ -738,14 +738,6 @@ func (c *Container) GetVoyagerAssessmentReport(ctx echo.Context) error { } } - for dbObjectType, count := range dbObjectConversionIssuesMap { - _, ok := dbObjectsMap[dbObjectType] - if ok { - dbObjectsMap[dbObjectType] = dbObjectsMap[dbObjectType] - count - - } - } - recommendedRefactoringList := []models.RefactoringCount{} for sqlObjectType, sqlObjectcount := range dbObjectsMap { var refactorCount models.RefactoringCount