From b217d4be1b8c10ad728e7c007820c21f06c7fbff Mon Sep 17 00:00:00 2001 From: Steve Faulkner Date: Mon, 8 Feb 2021 18:52:53 -0600 Subject: [PATCH] Delete Cassandra tables/keyspaces via ARM (#436) --- .../Panes/DeleteCollectionConfirmationPane.ts | 15 +- .../Panes/DeleteDatabaseConfirmationPane.ts | 132 ++++++++---------- src/Explorer/Tables/TableDataClient.ts | 35 ----- 3 files changed, 62 insertions(+), 120 deletions(-) diff --git a/src/Explorer/Panes/DeleteCollectionConfirmationPane.ts b/src/Explorer/Panes/DeleteCollectionConfirmationPane.ts index 2000689ec..dd5e91d73 100644 --- a/src/Explorer/Panes/DeleteCollectionConfirmationPane.ts +++ b/src/Explorer/Panes/DeleteCollectionConfirmationPane.ts @@ -1,9 +1,7 @@ import * as ko from "knockout"; -import Q from "q"; import * as ViewModels from "../../Contracts/ViewModels"; import * as Constants from "../../Common/Constants"; import { Action, ActionModifiers } from "../../Shared/Telemetry/TelemetryConstants"; -import { CassandraAPIDataClient } from "../Tables/TableDataClient"; import { ConsoleDataType } from "../Menus/NotificationConsole/NotificationConsoleComponent"; import { ContextualPaneBase } from "./ContextualPaneBase"; import { DefaultExperienceUtility } from "../../Shared/DefaultExperienceUtility"; @@ -50,18 +48,7 @@ export default class DeleteCollectionConfirmationPane extends ContextualPaneBase dataExplorerArea: Constants.Areas.ContextualPane, paneTitle: this.title(), }); - let promise: Promise; - if (this.container.isPreferredApiCassandra()) { - promise = ((this.container.tableDataClient).deleteTableOrKeyspace( - this.container.databaseAccount().properties.cassandraEndpoint, - this.container.databaseAccount().id, - `DROP TABLE ${selectedCollection.databaseId}.${selectedCollection.id()};`, - this.container - ) as unknown) as Promise; - } else { - promise = deleteCollection(selectedCollection.databaseId, selectedCollection.id()); - } - return promise.then( + return deleteCollection(selectedCollection.databaseId, selectedCollection.id()).then( () => { this.isExecuting(false); this.close(); diff --git a/src/Explorer/Panes/DeleteDatabaseConfirmationPane.ts b/src/Explorer/Panes/DeleteDatabaseConfirmationPane.ts index 9d0a1192d..59ea9b82e 100644 --- a/src/Explorer/Panes/DeleteDatabaseConfirmationPane.ts +++ b/src/Explorer/Panes/DeleteDatabaseConfirmationPane.ts @@ -52,81 +52,71 @@ export default class DeleteDatabaseConfirmationPane extends ContextualPaneBase { dataExplorerArea: Constants.Areas.ContextualPane, paneTitle: this.title(), }); - // TODO: Should not be a Q promise anymore, but the Cassandra code requires it - let promise: Q.Promise; - if (this.container.isPreferredApiCassandra()) { - promise = (this.container.tableDataClient).deleteTableOrKeyspace( - this.container.databaseAccount().properties.cassandraEndpoint, - this.container.databaseAccount().id, - `DROP KEYSPACE ${selectedDatabase.id()};`, - this.container - ); - } else { - promise = Q(deleteDatabase(selectedDatabase.id())); - } - return promise.then( - () => { - this.isExecuting(false); - this.close(); - this.container.refreshAllDatabases(); - this.container.tabsManager.closeTabsByComparator((tab) => tab.node?.id() === selectedDatabase.id()); - this.container.selectedNode(null); - selectedDatabase - .collections() - .forEach((collection: ViewModels.Collection) => - this.container.tabsManager.closeTabsByComparator( - (tab) => - tab.node?.id() === collection.id() && - (tab.node as ViewModels.Collection).databaseId === collection.databaseId - ) - ); - this.resetData(); - TelemetryProcessor.traceSuccess( - Action.DeleteDatabase, - { - databaseAccountName: this.container.databaseAccount().name, - defaultExperience: this.container.defaultExperience(), - databaseId: selectedDatabase.id(), - dataExplorerArea: Constants.Areas.ContextualPane, - paneTitle: this.title(), - }, - startKey - ); - - if (this.shouldRecordFeedback()) { - let deleteFeedback = new DeleteFeedback( - this.container.databaseAccount().id, - this.container.databaseAccount().name, - DefaultExperienceUtility.getApiKindFromDefaultExperience(this.container.defaultExperience()), - this.databaseDeleteFeedback() + return Q( + deleteDatabase(selectedDatabase.id()).then( + () => { + this.isExecuting(false); + this.close(); + this.container.refreshAllDatabases(); + this.container.tabsManager.closeTabsByComparator((tab) => tab.node?.id() === selectedDatabase.id()); + this.container.selectedNode(null); + selectedDatabase + .collections() + .forEach((collection: ViewModels.Collection) => + this.container.tabsManager.closeTabsByComparator( + (tab) => + tab.node?.id() === collection.id() && + (tab.node as ViewModels.Collection).databaseId === collection.databaseId + ) + ); + this.resetData(); + TelemetryProcessor.traceSuccess( + Action.DeleteDatabase, + { + databaseAccountName: this.container.databaseAccount().name, + defaultExperience: this.container.defaultExperience(), + databaseId: selectedDatabase.id(), + dataExplorerArea: Constants.Areas.ContextualPane, + paneTitle: this.title(), + }, + startKey ); - TelemetryProcessor.trace(Action.DeleteDatabase, ActionModifiers.Mark, { - message: JSON.stringify(deleteFeedback, Object.getOwnPropertyNames(deleteFeedback)), - }); + if (this.shouldRecordFeedback()) { + let deleteFeedback = new DeleteFeedback( + this.container.databaseAccount().id, + this.container.databaseAccount().name, + DefaultExperienceUtility.getApiKindFromDefaultExperience(this.container.defaultExperience()), + this.databaseDeleteFeedback() + ); - this.databaseDeleteFeedback(""); + TelemetryProcessor.trace(Action.DeleteDatabase, ActionModifiers.Mark, { + message: JSON.stringify(deleteFeedback, Object.getOwnPropertyNames(deleteFeedback)), + }); + + this.databaseDeleteFeedback(""); + } + }, + (error: any) => { + this.isExecuting(false); + const errorMessage = getErrorMessage(error); + this.formErrors(errorMessage); + this.formErrorsDetails(errorMessage); + TelemetryProcessor.traceFailure( + Action.DeleteDatabase, + { + databaseAccountName: this.container.databaseAccount().name, + defaultExperience: this.container.defaultExperience(), + databaseId: selectedDatabase.id(), + dataExplorerArea: Constants.Areas.ContextualPane, + paneTitle: this.title(), + error: errorMessage, + errorStack: getErrorStack(error), + }, + startKey + ); } - }, - (error: any) => { - this.isExecuting(false); - const errorMessage = getErrorMessage(error); - this.formErrors(errorMessage); - this.formErrorsDetails(errorMessage); - TelemetryProcessor.traceFailure( - Action.DeleteDatabase, - { - databaseAccountName: this.container.databaseAccount().name, - defaultExperience: this.container.defaultExperience(), - databaseId: selectedDatabase.id(), - dataExplorerArea: Constants.Areas.ContextualPane, - paneTitle: this.title(), - error: errorMessage, - errorStack: getErrorStack(error), - }, - startKey - ); - } + ) ); } diff --git a/src/Explorer/Tables/TableDataClient.ts b/src/Explorer/Tables/TableDataClient.ts index a0f455537..e993495dd 100644 --- a/src/Explorer/Tables/TableDataClient.ts +++ b/src/Explorer/Tables/TableDataClient.ts @@ -416,41 +416,6 @@ export class CassandraAPIDataClient extends TableDataClient { return deferred.promise; } - public deleteTableOrKeyspace( - cassandraEndpoint: string, - resourceId: string, - deleteQuery: string, - explorer: Explorer - ): Q.Promise { - const deferred = Q.defer(); - const notificationId = NotificationConsoleUtils.logConsoleMessage( - ConsoleDataType.InProgress, - `Deleting resource with query ${deleteQuery}` - ); - this.createOrDeleteQuery(cassandraEndpoint, resourceId, deleteQuery, explorer) - .then( - () => { - NotificationConsoleUtils.logConsoleMessage( - ConsoleDataType.Info, - `Successfully deleted resource with query ${deleteQuery}` - ); - deferred.resolve(); - }, - (error) => { - handleError( - error, - "DeleteKeyspaceOrTableCassandra", - `Error while deleting resource with query ${deleteQuery}` - ); - deferred.reject(error); - } - ) - .finally(() => { - NotificationConsoleUtils.clearInProgressMessageWithId(notificationId); - }); - return deferred.promise; - } - public getTableKeys(collection: ViewModels.Collection): Q.Promise { if (!!collection.cassandraKeys) { return Q.resolve(collection.cassandraKeys);