DRILL-8348: Cannot delete disabled storage plugins (#2696)

diff --git a/contrib/storage-googlesheets/src/main/java/org/apache/drill/exec/store/googlesheets/GoogleSheetsStoragePlugin.java b/contrib/storage-googlesheets/src/main/java/org/apache/drill/exec/store/googlesheets/GoogleSheetsStoragePlugin.java
index b8670d7..f7e7cc5 100644
--- a/contrib/storage-googlesheets/src/main/java/org/apache/drill/exec/store/googlesheets/GoogleSheetsStoragePlugin.java
+++ b/contrib/storage-googlesheets/src/main/java/org/apache/drill/exec/store/googlesheets/GoogleSheetsStoragePlugin.java
@@ -70,7 +70,7 @@
   public GoogleSheetsStoragePlugin(GoogleSheetsStoragePluginConfig configuration, DrillbitContext context, String name) {
     super(context, name);
     this.config = configuration;
-    this.tokenProvider = context.getoAuthTokenProvider();
+    this.tokenProvider = context.getOauthTokenProvider();
     this.schemaFactory = new GoogleSheetsSchemaFactory(this);
   }
 
@@ -182,7 +182,7 @@
    */
   @VisibleForTesting
   public void initializeTokenTableForTesting() {
-    OAuthTokenProvider tokenProvider = context.getoAuthTokenProvider();
+    OAuthTokenProvider tokenProvider = context.getOauthTokenProvider();
     tokenRegistry = tokenProvider.getOauthTokenRegistry(null);
   }
 
diff --git a/contrib/storage-http/src/main/java/org/apache/drill/exec/store/http/HttpStoragePlugin.java b/contrib/storage-http/src/main/java/org/apache/drill/exec/store/http/HttpStoragePlugin.java
index bb086f6..c86c2c7 100644
--- a/contrib/storage-http/src/main/java/org/apache/drill/exec/store/http/HttpStoragePlugin.java
+++ b/contrib/storage-http/src/main/java/org/apache/drill/exec/store/http/HttpStoragePlugin.java
@@ -75,7 +75,7 @@
 
   @VisibleForTesting
   public void initializeOauthTokenTable(String username) {
-    OAuthTokenProvider tokenProvider = context.getoAuthTokenProvider();
+    OAuthTokenProvider tokenProvider = context.getOauthTokenProvider();
     tokenRegistry = tokenProvider.getOauthTokenRegistry(username);
     tokenRegistry.createTokenTable(getName());
   }
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/oauth/OAuthTokenProvider.java b/exec/java-exec/src/main/java/org/apache/drill/exec/oauth/OAuthTokenProvider.java
index 8fba531..544400f 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/oauth/OAuthTokenProvider.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/oauth/OAuthTokenProvider.java
@@ -22,7 +22,7 @@
 import org.apache.drill.exec.server.DrillbitContext;
 
 /**
- * Class for managing oauth tokens.  Storage plugins will have to manage obtaining the plugins, but
+ * Class for managing oauth tokens.  Storage plugins will have to manage obtaining the tokens, but
  * these classes handle the storage of access and refresh tokens.
  */
 public class OAuthTokenProvider implements AutoCloseable {
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/oauth/PersistentTokenRegistry.java b/exec/java-exec/src/main/java/org/apache/drill/exec/oauth/PersistentTokenRegistry.java
index f1d2bb7..693f9e6 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/oauth/PersistentTokenRegistry.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/oauth/PersistentTokenRegistry.java
@@ -32,7 +32,7 @@
 
 /**
  * Implementation of {@link TokenRegistry} that persists token tables
- * to the pre-configured persistent store.
+ * to the preconfigured persistent store.
  */
 public class PersistentTokenRegistry implements TokenRegistry {
   private final PersistentStore<PersistentTokenTable> store;
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/oauth/TokenRegistry.java b/exec/java-exec/src/main/java/org/apache/drill/exec/oauth/TokenRegistry.java
index a56392f..96b0527 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/oauth/TokenRegistry.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/oauth/TokenRegistry.java
@@ -34,8 +34,8 @@
   PersistentTokenTable getTokenTable(String name);
 
   /**
-   * Deletes aliases table for specified {@code userName}.
-   * @param pluginName name of the user whose aliases table should be removed
+   * Deletes the token table for specified {@code pluginName}.
+   * @param pluginName name of the plugin whose token table should be removed
    */
   void deleteTokenTable(String pluginName);
 
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/server/DrillbitContext.java b/exec/java-exec/src/main/java/org/apache/drill/exec/server/DrillbitContext.java
index e17b4fa..64d6e39 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/server/DrillbitContext.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/server/DrillbitContext.java
@@ -224,7 +224,7 @@
     return aliasRegistryProvider;
   }
 
-  public OAuthTokenProvider getoAuthTokenProvider() { return oAuthTokenProvider; }
+  public OAuthTokenProvider getOauthTokenProvider() { return oAuthTokenProvider; }
 
   public EventLoopGroup getBitLoopGroup() {
     return context.getControlLoopGroup();
@@ -317,7 +317,7 @@
     getCompiler().close();
     getMetastoreRegistry().close();
     getAliasRegistryProvider().close();
-    getoAuthTokenProvider().close();
+    getOauthTokenProvider().close();
   }
 
   public ResourceManager getResourceManager() {
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/OAuthRequests.java b/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/OAuthRequests.java
index 71b12b9..b4aaf7b 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/OAuthRequests.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/OAuthRequests.java
@@ -63,7 +63,7 @@
                                            SecurityContext sc) {
     try {
       DrillbitContext context = ((AbstractStoragePlugin) storage.getPlugin(name)).getContext();
-      OAuthTokenProvider tokenProvider = context.getoAuthTokenProvider();
+      OAuthTokenProvider tokenProvider = context.getOauthTokenProvider();
       PersistentTokenTable tokenTable = tokenProvider.getOauthTokenRegistry(getQueryUser(storage.getPlugin(name).getConfig(), authEnabled, sc)).getTokenTable(name);
 
       // Set the access token
@@ -85,7 +85,7 @@
                                             SecurityContext sc) {
     try {
       DrillbitContext context = ((AbstractStoragePlugin) storage.getPlugin(name)).getContext();
-      OAuthTokenProvider tokenProvider = context.getoAuthTokenProvider();
+      OAuthTokenProvider tokenProvider = context.getOauthTokenProvider();
       PersistentTokenTable tokenTable = tokenProvider.getOauthTokenRegistry(
         getQueryUser(storage.getPlugin(name).getConfig(), authEnabled, sc)).getTokenTable(name);
 
@@ -107,7 +107,7 @@
                                            UserAuthEnabled authEnabled, SecurityContext sc) {
     try {
       DrillbitContext context = ((AbstractStoragePlugin) storage.getPlugin(name)).getContext();
-      OAuthTokenProvider tokenProvider = context.getoAuthTokenProvider();
+      OAuthTokenProvider tokenProvider = context.getOauthTokenProvider();
       PersistentTokenTable tokenTable = tokenProvider
         .getOauthTokenRegistry(getQueryUser(storage.getPlugin(name).getConfig(), authEnabled, sc))
         .getTokenTable(name);
@@ -145,7 +145,7 @@
       // If USER_TRANSLATION is enabled, Drill will create a token table for each user.
       TokenRegistry tokenRegistry = ((AbstractStoragePlugin) storage.getPlugin(name))
         .getContext()
-        .getoAuthTokenProvider()
+        .getOauthTokenProvider()
         .getOauthTokenRegistry(getQueryUser(storage.getPlugin(name).getConfig(), authEnabled, sc));
 
       // Add a token registry table if none exists
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/StorageResources.java b/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/StorageResources.java
index b41e392..61d85c5 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/StorageResources.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/StorageResources.java
@@ -50,12 +50,12 @@
 import org.apache.drill.common.logical.StoragePluginConfig.AuthMode;
 import org.apache.drill.exec.oauth.TokenRegistry;
 import org.apache.drill.exec.server.rest.DrillRestServer.UserAuthEnabled;
-import org.apache.drill.exec.store.AbstractStoragePlugin;
 import org.apache.drill.exec.store.StoragePluginRegistry;
 import org.apache.drill.exec.store.StoragePluginRegistry.PluginEncodingException;
 import org.apache.drill.exec.store.StoragePluginRegistry.PluginException;
 import org.apache.drill.exec.store.StoragePluginRegistry.PluginFilter;
 import org.apache.drill.exec.store.StoragePluginRegistry.PluginNotFoundException;
+import org.apache.drill.exec.work.WorkManager;
 import org.glassfish.jersey.server.mvc.Viewable;
 
 import org.slf4j.Logger;
@@ -77,6 +77,9 @@
   StoragePluginRegistry storage;
 
   @Inject
+  WorkManager workManager;
+
+  @Inject
   SecurityContext sc;
 
   @Inject
@@ -275,10 +278,9 @@
   @Operation(externalDocs = @ExternalDocumentation(description = "Apache Drill REST API documentation:", url = "https://drill.apache.org/docs/rest-api-introduction/"))
   public Response deletePlugin(@PathParam("name") String name) {
     try {
-      TokenRegistry tokenRegistry = ((AbstractStoragePlugin) storage.getPlugin(name))
-        .getContext()
-        .getoAuthTokenProvider()
-        .getOauthTokenRegistry(getActiveUser(storage.getPlugin(name).getConfig()));
+      TokenRegistry tokenRegistry = workManager.getContext()
+        .getOauthTokenProvider()
+        .getOauthTokenRegistry(getQueryUser(storage.getStoredConfig(name)));
 
       // Delete a token registry table if it exists
       tokenRegistry.deleteTokenTable(name);
@@ -416,11 +418,11 @@
 
   /**
    * This function checks to see if a given storage plugin is using USER_TRANSLATION mode.
-   * If so, it will return the active user name.  If not it will return null.
+   * If so, it will return the query user name.  If not it will return null.
    * @param config {@link StoragePluginConfig} The current plugin configuration
-   * @return If USER_TRANSLATION is enabled, returns the active user.  If not, returns null.
+   * @return If USER_TRANSLATION is enabled, returns the query user.  If not, returns null.
    */
-  private String getActiveUser(StoragePluginConfig config) {
+  private String getQueryUser(StoragePluginConfig config) {
     if (config.getAuthMode() == AuthMode.USER_TRANSLATION && authEnabled.get()) {
       return sc.getUserPrincipal().getName();
     } else {
diff --git a/exec/java-exec/src/main/resources/rest/storage/update.ftl b/exec/java-exec/src/main/resources/rest/storage/update.ftl
index 63d3812..3cbd9ea 100644
--- a/exec/java-exec/src/main/resources/rest/storage/update.ftl
+++ b/exec/java-exec/src/main/resources/rest/storage/update.ftl
@@ -204,8 +204,14 @@
 
     function deleteFunction() {
       showConfirmationDialog('"${model.getPlugin().getName()}"' + ' plugin will be deleted. Proceed?', function() {
-        $.get("/storage/" + encodeURIComponent("${model.getPlugin().getName()}") + "/delete", serverMessage).fail(function() {
-					serverMessage({ errorMessage: "Error while trying to delete." })
+        $.ajax({
+            url: '/storage/' + encodeURIComponent('${model.getPlugin().getName()}') + '.json',
+            method: 'DELETE',
+            contentType: 'application/json',
+            success: serverMessage,
+            error: function(request,msg,error) {
+              serverMessage({ errorMessage: 'Error while trying to delete.' })
+            }
         });
       });
     }