LENS-517 : Add cascade option to drop db from lens cli
Project: http://git-wip-us.apache.org/repos/asf/incubator-lens/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-lens/commit/2a61a7b5 Tree: http://git-wip-us.apache.org/repos/asf/incubator-lens/tree/2a61a7b5 Diff: http://git-wip-us.apache.org/repos/asf/incubator-lens/diff/2a61a7b5 Branch: refs/heads/current-release-line Commit: 2a61a7b54c7515dfed7de29bce8206fe34208b4a Parents: 44a6f51 Author: Rajat Khandelwal <[email protected]> Authored: Thu Jun 18 11:44:25 2015 +0530 Committer: Amareshwari Sriramadasu <[email protected]> Committed: Thu Jun 18 11:44:25 2015 +0530 ---------------------------------------------------------------------- .../lens/cli/commands/LensDatabaseCommands.java | 8 +-- .../lens/cli/TestLensDatabaseCommands.java | 51 ++++++++++++++------ .../java/org/apache/lens/client/LensClient.java | 10 ++-- .../lens/client/LensClientSingletonWrapper.java | 37 +++++++------- .../apache/lens/client/LensMetadataClient.java | 3 +- .../org/apache/lens/client/TestLensClient.java | 2 +- 6 files changed, 67 insertions(+), 44 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/2a61a7b5/lens-cli/src/main/java/org/apache/lens/cli/commands/LensDatabaseCommands.java ---------------------------------------------------------------------- diff --git a/lens-cli/src/main/java/org/apache/lens/cli/commands/LensDatabaseCommands.java b/lens-cli/src/main/java/org/apache/lens/cli/commands/LensDatabaseCommands.java index 800c0b5..1de24a4 100644 --- a/lens-cli/src/main/java/org/apache/lens/cli/commands/LensDatabaseCommands.java +++ b/lens-cli/src/main/java/org/apache/lens/cli/commands/LensDatabaseCommands.java @@ -86,9 +86,9 @@ public class LensDatabaseCommands extends LensCRUDCommand { * @return the string */ @CliCommand(value = "drop database", help = "drop a database with specified name") - public String dropDatabase(@CliOption(key = {"", "db"}, mandatory = true, - help = "<database-name>") String database) { - return drop(database, false); + public String dropDatabase(@CliOption(key = {"", "db"}, mandatory = true, help = "<database-name>") String database, + @CliOption(key = "cascade", specifiedDefaultValue = "true", unspecifiedDefaultValue = "false") boolean cascade) { + return drop(database, cascade); } @Override @@ -116,6 +116,6 @@ public class LensDatabaseCommands extends LensCRUDCommand { @Override protected APIResult doDelete(String name, boolean cascade) { - return getClient().dropDatabase(name); + return getClient().dropDatabase(name, cascade); } } http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/2a61a7b5/lens-cli/src/test/java/org/apache/lens/cli/TestLensDatabaseCommands.java ---------------------------------------------------------------------- diff --git a/lens-cli/src/test/java/org/apache/lens/cli/TestLensDatabaseCommands.java b/lens-cli/src/test/java/org/apache/lens/cli/TestLensDatabaseCommands.java index f8958c4..b6f96e6 100644 --- a/lens-cli/src/test/java/org/apache/lens/cli/TestLensDatabaseCommands.java +++ b/lens-cli/src/test/java/org/apache/lens/cli/TestLensDatabaseCommands.java @@ -18,12 +18,17 @@ */ package org.apache.lens.cli; +import static org.testng.Assert.*; + +import java.io.File; +import java.net.URISyntaxException; + +import org.apache.lens.cli.commands.LensCubeCommands; import org.apache.lens.cli.commands.LensDatabaseCommands; import org.apache.lens.client.LensClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.testng.Assert; import org.testng.annotations.Test; /** @@ -38,28 +43,44 @@ public class TestLensDatabaseCommands extends LensCliApplicationTest { * Test database commands. */ @Test - public void testDatabaseCommands() { + public void testDatabaseCommands() throws URISyntaxException { LensClient client = new LensClient(); LensDatabaseCommands command = new LensDatabaseCommands(); + LensCubeCommands cubeCommand = new LensCubeCommands(); command.setClient(client); + cubeCommand.setClient(client); + boolean cascade = true; + for(int i = 0; i < 4; i++, cascade = !cascade) { + testDrop(command, cubeCommand, cascade); + } + } + private void testDrop(LensDatabaseCommands command, LensCubeCommands cubeCommand, boolean cascade) + throws URISyntaxException { String myDatabase = "my_db"; - String databaseList = command.showAllDatabases(); - Assert.assertFalse(databaseList.contains(myDatabase)); + assertFalse(command.showAllDatabases().contains(myDatabase)); + assertFalse(cubeCommand.showCubes().contains("sample_cube")); String result; command.createDatabase(myDatabase, false); - - databaseList = command.showAllDatabases(); - Assert.assertTrue(databaseList.contains(myDatabase)); - + assertTrue(command.showAllDatabases().contains(myDatabase)); result = command.switchDatabase(myDatabase); - Assert.assertEquals("Successfully switched to my_db", result); - + assertEquals(result, "Successfully switched to my_db"); + if (cascade) { + String createOutput = cubeCommand.createCube( + new File(TestLensDatabaseCommands.class.getClassLoader().getResource("sample-cube.xml").toURI()) + .getAbsolutePath()); + assertEquals(createOutput, "succeeded"); + assertTrue(cubeCommand.showCubes().contains("sample_cube")); + } result = command.switchDatabase("default"); - Assert.assertEquals("Successfully switched to default", result); - - result = command.dropDatabase(myDatabase); - Assert.assertEquals(result, "succeeded"); + assertEquals(result, "Successfully switched to default"); + assertFalse(cubeCommand.showCubes().contains("sample_cube")); + if (cascade) { + assertEquals(command.dropDatabase(myDatabase, false), "failed"); + } + result = command.dropDatabase(myDatabase, cascade); + assertEquals(result, "succeeded"); + assertFalse(command.showAllDatabases().contains(myDatabase)); + assertFalse(cubeCommand.showCubes().contains("sample_cube")); } - } http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/2a61a7b5/lens-client/src/main/java/org/apache/lens/client/LensClient.java ---------------------------------------------------------------------- diff --git a/lens-client/src/main/java/org/apache/lens/client/LensClient.java b/lens-client/src/main/java/org/apache/lens/client/LensClient.java index ca017b8..5c3daa8 100644 --- a/lens-client/src/main/java/org/apache/lens/client/LensClient.java +++ b/lens-client/src/main/java/org/apache/lens/client/LensClient.java @@ -76,6 +76,10 @@ public class LensClient { this(cred.getUsername(), cred.getPassword()); } + public LensMetadataClient getMetadataClient() { + return mc; + } + public QueryHandle executeQueryAsynch(String sql, String queryName) { LOG.debug("Executing query " + sql); statement.execute(sql, false, queryName); @@ -270,9 +274,9 @@ public class LensClient { return result.getStatus() == APIResult.Status.SUCCEEDED; } - public APIResult dropDatabase(String database) { - LOG.debug("Dropping database " + database); - APIResult result = mc.dropDatabase(database); + public APIResult dropDatabase(String database, boolean cascade) { + LOG.debug("Dropping database " + database + ", cascade: " + cascade); + APIResult result = mc.dropDatabase(database, cascade); LOG.debug("Return status of dropping " + database + " result " + result); return result; } http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/2a61a7b5/lens-client/src/main/java/org/apache/lens/client/LensClientSingletonWrapper.java ---------------------------------------------------------------------- diff --git a/lens-client/src/main/java/org/apache/lens/client/LensClientSingletonWrapper.java b/lens-client/src/main/java/org/apache/lens/client/LensClientSingletonWrapper.java index d9ab5a1..14a0690 100644 --- a/lens-client/src/main/java/org/apache/lens/client/LensClientSingletonWrapper.java +++ b/lens-client/src/main/java/org/apache/lens/client/LensClientSingletonWrapper.java @@ -72,25 +72,24 @@ public class LensClientSingletonWrapper { } public LensClient getClient() { - if (client != null) { - return client; - } - try { - client = new LensClient(); - } catch (LensClientServerConnectionException e) { - if (e.getErrorCode() != 401) { - explainFailedAttempt(e); - throw e; - } - // Connecting without password prompt failed. - for (int i = 0; i < MAX_RETRIES; i++) { - try { - client = new LensClient(Credentials.prompt()); - break; - } catch (LensClientServerConnectionException lensClientServerConnectionException) { - explainFailedAttempt(lensClientServerConnectionException); - if (i == MAX_RETRIES - 1) { - throw lensClientServerConnectionException; + if (client == null) { + try { + client = new LensClient(); + } catch (LensClientServerConnectionException e) { + if (e.getErrorCode() != 401) { + explainFailedAttempt(e); + throw e; + } + // Connecting without password prompt failed. + for (int i = 0; i < MAX_RETRIES; i++) { + try { + client = new LensClient(Credentials.prompt()); + break; + } catch (LensClientServerConnectionException lensClientServerConnectionException) { + explainFailedAttempt(lensClientServerConnectionException); + if (i == MAX_RETRIES - 1) { + throw lensClientServerConnectionException; + } } } } http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/2a61a7b5/lens-client/src/main/java/org/apache/lens/client/LensMetadataClient.java ---------------------------------------------------------------------- diff --git a/lens-client/src/main/java/org/apache/lens/client/LensMetadataClient.java b/lens-client/src/main/java/org/apache/lens/client/LensMetadataClient.java index c58f5ee..b4e0552 100644 --- a/lens-client/src/main/java/org/apache/lens/client/LensMetadataClient.java +++ b/lens-client/src/main/java/org/apache/lens/client/LensMetadataClient.java @@ -138,11 +138,10 @@ public class LensMetadataClient { public APIResult dropDatabase(String database, boolean cascade) { WebTarget target = getMetastoreWebTarget(); - APIResult result = target.path("databases").path(database) + return target.path("databases").path(database) .queryParam("sessionid", this.connection.getSessionHandle()) .queryParam("cascade", cascade) .request().delete(APIResult.class); - return result; } public APIResult dropDatabase(String database) { http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/2a61a7b5/lens-client/src/test/java/org/apache/lens/client/TestLensClient.java ---------------------------------------------------------------------- diff --git a/lens-client/src/test/java/org/apache/lens/client/TestLensClient.java b/lens-client/src/test/java/org/apache/lens/client/TestLensClient.java index 24f3473..35d52db 100644 --- a/lens-client/src/test/java/org/apache/lens/client/TestLensClient.java +++ b/lens-client/src/test/java/org/apache/lens/client/TestLensClient.java @@ -78,7 +78,7 @@ public class TestLensClient extends LensAllApplicationJerseyTest { "current database"); client.createDatabase("testclientdb", true); Assert.assertTrue(client.getAllDatabases().contains("testclientdb")); - client.dropDatabase("testclientdb"); + client.dropDatabase("testclientdb", false); Assert.assertFalse(client.getAllDatabases().contains("testclientdb")); } }
