Repository: kylin Updated Branches: refs/heads/KYILN-2317 48eaa3642 -> 172b4279f
KYLIN-2317 update Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/172b4279 Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/172b4279 Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/172b4279 Branch: refs/heads/KYILN-2317 Commit: 172b4279fc98c722b9979d8420b41871f1f8f714 Parents: 48eaa36 Author: Billy Liu <[email protected]> Authored: Wed Dec 28 18:37:46 2016 +0800 Committer: Billy Liu <[email protected]> Committed: Wed Dec 28 18:37:46 2016 +0800 ---------------------------------------------------------------------- .../kylin/metadata/cachesync/Broadcaster.java | 2 +- .../kylin/storage/hybrid/HybridManager.java | 3 +- .../localmeta/cube/ssb_cube3.json | 14 ++ .../localmeta/cube_desc/ssb_cube3.json | 143 +++++++++++++++++++ .../apache/kylin/rest/service/ModelService.java | 4 +- tool/pom.xml | 2 + .../org/apache/kylin/tool/HybridCubeCLI.java | 46 +++--- .../apache/kylin/tool/MrJobInfoExtractor.java | 25 ++-- .../apache/kylin/tool/HybridCubeCLITest.java | 39 +++-- 9 files changed, 227 insertions(+), 51 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/172b4279/core-metadata/src/main/java/org/apache/kylin/metadata/cachesync/Broadcaster.java ---------------------------------------------------------------------- diff --git a/core-metadata/src/main/java/org/apache/kylin/metadata/cachesync/Broadcaster.java b/core-metadata/src/main/java/org/apache/kylin/metadata/cachesync/Broadcaster.java index 6bc5771..70d3ea9 100644 --- a/core-metadata/src/main/java/org/apache/kylin/metadata/cachesync/Broadcaster.java +++ b/core-metadata/src/main/java/org/apache/kylin/metadata/cachesync/Broadcaster.java @@ -127,7 +127,7 @@ public class Broadcaster { try { restClient.wipeCache(broadcastEvent.getEntity(), broadcastEvent.getEvent(), broadcastEvent.getCacheKey()); } catch (IOException e) { - logger.warn("Thread failed during wipe cache at " + broadcastEvent); + logger.warn("Thread failed during wipe cache at " + broadcastEvent, e); } } }); http://git-wip-us.apache.org/repos/asf/kylin/blob/172b4279/core-storage/src/main/java/org/apache/kylin/storage/hybrid/HybridManager.java ---------------------------------------------------------------------- diff --git a/core-storage/src/main/java/org/apache/kylin/storage/hybrid/HybridManager.java b/core-storage/src/main/java/org/apache/kylin/storage/hybrid/HybridManager.java index 4f81b09..748e873 100644 --- a/core-storage/src/main/java/org/apache/kylin/storage/hybrid/HybridManager.java +++ b/core-storage/src/main/java/org/apache/kylin/storage/hybrid/HybridManager.java @@ -124,10 +124,11 @@ public class HybridManager implements IRealizationProvider { } } - private void reloadAllHybridInstance() throws IOException { + public void reloadAllHybridInstance() throws IOException { ResourceStore store = getStore(); List<String> paths = store.collectResourceRecursively(ResourceStore.HYBRID_RESOURCE_ROOT, ".json"); + hybridMap.clear(); logger.debug("Loading Hybrid from folder " + store.getReadableResourcePath(ResourceStore.HYBRID_RESOURCE_ROOT)); for (String path : paths) { http://git-wip-us.apache.org/repos/asf/kylin/blob/172b4279/examples/test_case_data/localmeta/cube/ssb_cube3.json ---------------------------------------------------------------------- diff --git a/examples/test_case_data/localmeta/cube/ssb_cube3.json b/examples/test_case_data/localmeta/cube/ssb_cube3.json new file mode 100644 index 0000000..fc09006 --- /dev/null +++ b/examples/test_case_data/localmeta/cube/ssb_cube3.json @@ -0,0 +1,14 @@ +{ + "uuid" : "70a9f288-3c01-4745-a04b-5641e82d6c72", + "name" : "ssb_cube3", + "owner" : "ADMIN", + "cost" : 50, + "status" : "DISABLED", + "segments" : [ ], + "last_modified" : 1457534216410, + "descriptor" : "ssb_cube3", + "create_time_utc" : 1457444500888, + "size_kb" : 0, + "input_records_count" : 0, + "input_records_size" : 0 +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/kylin/blob/172b4279/examples/test_case_data/localmeta/cube_desc/ssb_cube3.json ---------------------------------------------------------------------- diff --git a/examples/test_case_data/localmeta/cube_desc/ssb_cube3.json b/examples/test_case_data/localmeta/cube_desc/ssb_cube3.json new file mode 100644 index 0000000..4509116 --- /dev/null +++ b/examples/test_case_data/localmeta/cube_desc/ssb_cube3.json @@ -0,0 +1,143 @@ +{ + "uuid" : "5c44df30-daec-486e-af90-927bf7851060", + "name" : "ssb_cube3", + "description" : "", + "dimensions" : [ { + "name" : "SSB.PART_DERIVED", + "table" : "SSB.PART", + "column" : null, + "derived" : [ "P_MFGR", "P_CATEGORY", "P_BRAND" ] + }, { + "name" : "S_CITY", + "table" : "SSB.SUPPLIER", + "column" : "S_CITY", + "derived" : null + }, { + "name" : "S_REGION", + "table" : "SSB.SUPPLIER", + "column" : "S_REGION", + "derived" : null + }, { + "name" : "S_NATION", + "table" : "SSB.SUPPLIER", + "column" : "S_NATION", + "derived" : null + }, { + "name" : "D_YEAR", + "table" : "SSB.DATES", + "column" : "D_YEAR", + "derived" : null + }, { + "name" : "D_YEARMONTH", + "table" : "SSB.DATES", + "column" : "D_YEARMONTH", + "derived" : null + }, { + "name" : "D_YEARMONTHNUM", + "table" : "SSB.DATES", + "column" : "D_YEARMONTHNUM", + "derived" : null + }, { + "name" : "D_WEEKNUMINYEAR", + "table" : "SSB.DATES", + "column" : "D_WEEKNUMINYEAR", + "derived" : null + } ], + "measures" : [ { + "name" : "_COUNT_", + "function" : { + "expression" : "COUNT", + "parameter" : { + "type" : "constant", + "value" : "1", + "next_parameter" : null + }, + "returntype" : "bigint" + }, + "dependent_measure_ref" : null + }, { + "name" : "TOTAL_REVENUE", + "function" : { + "expression" : "SUM", + "parameter" : { + "type" : "column", + "value" : "LO_REVENUE", + "next_parameter" : null + }, + "returntype" : "bigint" + }, + "dependent_measure_ref" : null + }, { + "name" : "TOTAL_SUPPLYCOST", + "function" : { + "expression" : "SUM", + "parameter" : { + "type" : "column", + "value" : "LO_SUPPLYCOST", + "next_parameter" : null + }, + "returntype" : "bigint" + }, + "dependent_measure_ref" : null + } ], + "rowkey" : { + "rowkey_columns" : [ { + "column" : "LO_PARTKEY", + "encoding" : "dict" + }, { + "column" : "S_CITY", + "encoding" : "dict" + }, { + "column" : "S_REGION", + "encoding" : "dict" + }, { + "column" : "S_NATION", + "encoding" : "dict" + }, { + "column" : "D_YEAR", + "encoding" : "dict" + }, { + "column" : "D_YEARMONTH", + "encoding" : "dict" + }, { + "column" : "D_YEARMONTHNUM", + "encoding" : "dict" + }, { + "column" : "D_WEEKNUMINYEAR", + "encoding" : "dict" + } ] + }, + "signature" : "", + "last_modified" : 1457503036686, + "model_name" : "ssb", + "null_string" : null, + "hbase_mapping" : { + "column_family" : [ { + "name" : "F1", + "columns" : [ { + "qualifier" : "M", + "measure_refs" : [ "_COUNT_", "TOTAL_REVENUE", "TOTAL_SUPPLYCOST"] + } ] + } ] + }, + "aggregation_groups" : [ { + "includes" : [ "LO_PARTKEY", "S_CITY", "S_REGION", "S_NATION", "D_YEAR", "D_YEARMONTH", "D_YEARMONTHNUM", "D_WEEKNUMINYEAR" ], + "select_rule" : { + "hierarchy_dims" : [ [ "S_REGION", "S_NATION", "S_CITY" ], [ "D_YEARMONTH", "D_YEARMONTHNUM", "D_WEEKNUMINYEAR" ] ], + "mandatory_dims" : [ "D_YEAR" ], + "joint_dims" : [ ] + } + } ], + "notify_list" : [ ], + "status_need_notify" : [ ], + "partition_date_start" : 3153000000000, + "partition_date_end" : 3153600000000, + "auto_merge_time_ranges" : [ 604800000, 2419200000 ], + "retention_range" : 0, + "engine_type" : 2, + "storage_type" : 2, + "override_kylin_properties" : { + "kylin.hbase.default.compression.codec" : "lz4", + "kylin.cube.aggrgroup.isMandatoryOnlyValid" : "true" + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/kylin/blob/172b4279/server-base/src/main/java/org/apache/kylin/rest/service/ModelService.java ---------------------------------------------------------------------- diff --git a/server-base/src/main/java/org/apache/kylin/rest/service/ModelService.java b/server-base/src/main/java/org/apache/kylin/rest/service/ModelService.java index 2f8667c..7dd7b0c 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/service/ModelService.java +++ b/server-base/src/main/java/org/apache/kylin/rest/service/ModelService.java @@ -84,7 +84,7 @@ public class ModelService extends BasicService { public DataModelDesc createModelDesc(String projectName, DataModelDesc desc) throws IOException { if (getMetadataManager().getDataModelDesc(desc.getName()) != null) { - throw new InternalErrorException("The model named " + desc.getName() + " already exists"); + throw new InternalErrorException("Model name " + desc.getName() + "is duplicated, could not create"); } DataModelDesc createdDesc = null; String owner = SecurityContextHolder.getContext().getAuthentication().getName(); @@ -110,7 +110,7 @@ public class ModelService extends BasicService { List<CubeDesc> cubeDescs = getCubeDescManager().listAllDesc(); for (CubeDesc cubeDesc : cubeDescs) { if (cubeDesc.getModelName().equals(desc.getName())) { - throw new InternalErrorException("Model referenced by cube,drop cubes under model and try again."); + throw new InternalErrorException("Model is referenced by Cube: " + cubeDesc.getName() + " , could not drop"); } } http://git-wip-us.apache.org/repos/asf/kylin/blob/172b4279/tool/pom.xml ---------------------------------------------------------------------- diff --git a/tool/pom.xml b/tool/pom.xml index 8eddec4..f4afdf5 100644 --- a/tool/pom.xml +++ b/tool/pom.xml @@ -81,6 +81,8 @@ <shadedClassifierName>assembly</shadedClassifierName> <artifactSet> <includes> + <!-- shade the httpcore to avoid the lower version conflict with HBase one --> + <include>org.apache.httpcomponents:httpcore</include> <include>org.apache.kylin:kylin-tool</include> </includes> </artifactSet> http://git-wip-us.apache.org/repos/asf/kylin/blob/172b4279/tool/src/main/java/org/apache/kylin/tool/HybridCubeCLI.java ---------------------------------------------------------------------- diff --git a/tool/src/main/java/org/apache/kylin/tool/HybridCubeCLI.java b/tool/src/main/java/org/apache/kylin/tool/HybridCubeCLI.java index 1e2ecb9..461daf9 100644 --- a/tool/src/main/java/org/apache/kylin/tool/HybridCubeCLI.java +++ b/tool/src/main/java/org/apache/kylin/tool/HybridCubeCLI.java @@ -33,7 +33,6 @@ import org.apache.kylin.common.util.OptionsHelper; import org.apache.kylin.cube.CubeInstance; import org.apache.kylin.cube.CubeManager; import org.apache.kylin.metadata.MetadataManager; -import org.apache.kylin.metadata.cachesync.Broadcaster; import org.apache.kylin.metadata.model.DataModelDesc; import org.apache.kylin.metadata.project.ProjectManager; import org.apache.kylin.metadata.project.RealizationEntry; @@ -47,13 +46,15 @@ public class HybridCubeCLI extends AbstractApplication { private static final Logger logger = LoggerFactory.getLogger(HybridCubeCLI.class); + private static final Option OPTION_ACTION = OptionBuilder.withArgName("action").hasArg().isRequired(true).withDescription("create/update/delete").create("action"); + private static final Option OPTION_HYBRID_NAME = OptionBuilder.withArgName("name").hasArg().isRequired(true).withDescription("HybridCube name").create("name"); private static final Option OPTION_PROJECT = OptionBuilder.withArgName("project").hasArg().isRequired(true).withDescription("the target project for the hybrid cube").create("project"); private static final Option OPTION_MODEL = OptionBuilder.withArgName("model").hasArg().isRequired(true).withDescription("the target model for the hybrid cube").create("model"); - private static final Option OPTION_CUBES = OptionBuilder.withArgName("cubes").hasArg().isRequired(true).withDescription("the cubes used in HybridCube, seperated by comma, empty if to delete HybridCube").create("cubes"); + private static final Option OPTION_CUBES = OptionBuilder.withArgName("cubes").hasArg().isRequired(false).withDescription("the cubes used in HybridCube, seperated by comma, empty if to delete HybridCube").create("cubes"); private final Options options; @@ -65,6 +66,7 @@ public class HybridCubeCLI extends AbstractApplication { public HybridCubeCLI() { options = new Options(); + options.addOption(OPTION_ACTION); options.addOption(OPTION_HYBRID_NAME); options.addOption(OPTION_PROJECT); options.addOption(OPTION_MODEL); @@ -89,10 +91,14 @@ public class HybridCubeCLI extends AbstractApplication { @Override protected void execute(OptionsHelper optionsHelper) throws Exception { + String action = optionsHelper.getOptionValue(OPTION_ACTION); String hybridName = optionsHelper.getOptionValue(OPTION_HYBRID_NAME); String projectName = optionsHelper.getOptionValue(OPTION_PROJECT); String modelName = optionsHelper.getOptionValue(OPTION_MODEL); - String[] cubeNames = optionsHelper.getOptionValue(OPTION_CUBES).split(","); + String cubeNamesStr = optionsHelper.getOptionValue(OPTION_CUBES); + String[] cubeNames = new String[] {}; + if (cubeNamesStr != null) + cubeNames = cubeNamesStr.split(","); String owner = null; DataModelDesc modelDesc = metadataManager.getDataModelDesc(modelName); @@ -115,18 +121,26 @@ public class HybridCubeCLI extends AbstractApplication { } HybridInstance hybridInstance = hybridManager.getHybridInstance(hybridName); - if (hybridInstance == null) { + if ("create".equals(action)) { + if (hybridInstance != null) { + throw new RuntimeException("The Hybrid Cube does exist, could not create: " + hybridName); + } //Create new Hybrid create(hybridName, realizationEntries, projectName, owner); - } else if (realizationEntries.size() == 0) { - // Delete the Hybrid - delete(hybridInstance); - } else { + } else if ("update".equals(action)) { + if (hybridInstance == null) { + throw new RuntimeException("The Hybrid Cube doesn't exist, could not update: " + hybridName); + } // Update the Hybrid update(hybridInstance, realizationEntries, projectName, owner); + } else if ("delete".equals(action)) { + if (hybridInstance == null) { + throw new RuntimeException("The Hybrid Cube doesn't exist, could not delete: " + hybridName); + } + // Delete the Hybrid + delete(hybridInstance); } - verify(); } private HybridInstance create(String hybridName, List<RealizationEntry> realizationEntries, String projectName, String owner) throws IOException { @@ -142,24 +156,14 @@ public class HybridCubeCLI extends AbstractApplication { hybridInstance.setRealizationEntries(realizationEntries); store.putResource(hybridInstance.getResourcePath(), hybridInstance, HybridManager.HYBRID_SERIALIZER); ProjectManager.getInstance(kylinConfig).moveRealizationToProject(RealizationType.HYBRID, hybridInstance.getName(), projectName, owner); + hybridManager.reloadHybridInstance(hybridInstance.getName()); logger.info("HybridInstance was updated at: " + hybridInstance.getResourcePath()); } private void delete(HybridInstance hybridInstance) throws IOException { ProjectManager.getInstance(kylinConfig).removeRealizationsFromProjects(RealizationType.HYBRID, hybridInstance.getName()); store.deleteResource(hybridInstance.getResourcePath()); - Broadcaster.getInstance(KylinConfig.getInstanceFromEnv()).notifyListener("hybrid", Broadcaster.Event.DROP, hybridInstance.getName()); + hybridManager.reloadAllHybridInstance(); logger.info("HybridInstance was deleted at: " + hybridInstance.getResourcePath()); } - - private void verify() { - CubeManager.clearCache(); - CubeManager.getInstance(kylinConfig); - - ProjectManager.clearCache(); - ProjectManager.getInstance(kylinConfig); - - HybridManager.clearCache(); - HybridManager.getInstance(kylinConfig); - } } http://git-wip-us.apache.org/repos/asf/kylin/blob/172b4279/tool/src/main/java/org/apache/kylin/tool/MrJobInfoExtractor.java ---------------------------------------------------------------------- diff --git a/tool/src/main/java/org/apache/kylin/tool/MrJobInfoExtractor.java b/tool/src/main/java/org/apache/kylin/tool/MrJobInfoExtractor.java index 9dd4c81..1050bbe 100644 --- a/tool/src/main/java/org/apache/kylin/tool/MrJobInfoExtractor.java +++ b/tool/src/main/java/org/apache/kylin/tool/MrJobInfoExtractor.java @@ -26,15 +26,16 @@ import java.util.regex.Pattern; import org.apache.commons.cli.Option; import org.apache.commons.cli.OptionBuilder; -import org.apache.commons.httpclient.HttpClient; -import org.apache.commons.httpclient.HttpMethod; -import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.io.FileUtils; import org.apache.commons.lang.StringUtils; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.yarn.conf.HAUtil; import org.apache.hadoop.yarn.conf.YarnConfiguration; import org.apache.hadoop.yarn.util.RMHAUtils; +import org.apache.http.HttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.util.EntityUtils; import org.apache.kylin.common.KylinConfig; import org.apache.kylin.common.util.OptionsHelper; import org.apache.kylin.engine.mr.HadoopUtil; @@ -94,24 +95,24 @@ public class MrJobInfoExtractor extends AbstractInfoExtractor { } private String getHttpResponse(String url) { - HttpClient client = new HttpClient(); - String response = null; + DefaultHttpClient client = new DefaultHttpClient(); + String msg = null; int retry_times = 0; - while (response == null && retry_times < HTTP_RETRY) { + while (msg == null && retry_times < HTTP_RETRY) { retry_times++; - HttpMethod get = new GetMethod(url); + HttpGet request = new HttpGet(url); try { - get.addRequestHeader("accept", "application/json"); - client.executeMethod(get); - response = get.getResponseBodyAsString(); + request.addHeader("accept", "application/json"); + HttpResponse response = client.execute(request); + msg = EntityUtils.toString(response.getEntity()); } catch (Exception e) { logger.warn("Failed to fetch http response. Retry={}", retry_times, e); } finally { - get.releaseConnection(); + request.releaseConnection(); } } - return response; + return msg; } private void extractTaskCounter(String taskId, File exportDir, String taskUrl) throws IOException { http://git-wip-us.apache.org/repos/asf/kylin/blob/172b4279/tool/src/test/java/org/apache/kylin/tool/HybridCubeCLITest.java ---------------------------------------------------------------------- diff --git a/tool/src/test/java/org/apache/kylin/tool/HybridCubeCLITest.java b/tool/src/test/java/org/apache/kylin/tool/HybridCubeCLITest.java index 7d73b64..5734d0c 100644 --- a/tool/src/test/java/org/apache/kylin/tool/HybridCubeCLITest.java +++ b/tool/src/test/java/org/apache/kylin/tool/HybridCubeCLITest.java @@ -22,6 +22,7 @@ import java.io.IOException; import org.apache.kylin.common.KylinConfig; import org.apache.kylin.common.util.LocalFileMetadataTestCase; +import org.apache.kylin.metadata.cachesync.Broadcaster; import org.apache.kylin.metadata.project.ProjectManager; import org.apache.kylin.metadata.realization.RealizationType; import org.apache.kylin.storage.hybrid.HybridInstance; @@ -29,8 +30,11 @@ import org.apache.kylin.storage.hybrid.HybridManager; import org.junit.After; import org.junit.Assert; import org.junit.Before; +import org.junit.FixMethodOrder; import org.junit.Test; +import org.junit.runners.MethodSorters; +@FixMethodOrder(MethodSorters.NAME_ASCENDING) public class HybridCubeCLITest extends LocalFileMetadataTestCase { @Before @@ -44,10 +48,10 @@ public class HybridCubeCLITest extends LocalFileMetadataTestCase { } @Test - public void testCreate() { + public void test1Create() throws IOException { HybridManager hybridManager = HybridManager.getInstance(KylinConfig.getInstanceFromEnv()); Assert.assertNull(hybridManager.getHybridInstance("ssb_hybrid")); - HybridCubeCLI.main(new String[] { "-name", "ssb_hybrid", "-project", "default", "-model", "ssb", "-cubes", "ssb_cube1,ssb_cube2" }); + HybridCubeCLI.main(new String[] { "-name", "ssb_hybrid", "-project", "default", "-model", "ssb", "-cubes", "ssb_cube1,ssb_cube2", "-action", "create" }); HybridInstance hybridInstance = hybridManager.getHybridInstance("ssb_hybrid"); Assert.assertNotNull(hybridInstance); @@ -56,27 +60,34 @@ public class HybridCubeCLITest extends LocalFileMetadataTestCase { } @Test - public void testUpdate() { + public void test2Update() throws IOException { HybridManager hybridManager = HybridManager.getInstance(KylinConfig.getInstanceFromEnv()); - Assert.assertNotNull(hybridManager.getHybridInstance("test_kylin_hybrid_ready")); - HybridCubeCLI.main(new String[] { "-name", "test_kylin_hybrid_ready", "-project", "default", "-model", "test_kylin_inner_join_model_desc", "-cubes", "ssb_cube1" }); + Assert.assertNull(hybridManager.getHybridInstance("ssb_hybrid")); + HybridCubeCLI.main(new String[] { "-name", "ssb_hybrid", "-project", "default", "-model", "ssb", "-cubes", "ssb_cube1,ssb_cube2", "-action", "create" }); + + HybridInstance hybridInstance = hybridManager.getHybridInstance("ssb_hybrid"); + Assert.assertNotNull(hybridManager.getHybridInstance("ssb_hybrid")); + Assert.assertEquals("ssb_hybrid", hybridInstance.getName()); + Assert.assertEquals(2, hybridInstance.getRealizationEntries().size()); + HybridCubeCLI.main(new String[] { "-name", "ssb_hybrid", "-project", "default", "-model", "ssb", "-cubes", "ssb_cube1,ssb_cube2,ssb_cube3", "-action", "update" }); - HybridInstance hybridInstance = hybridManager.getHybridInstance("test_kylin_hybrid_ready"); + hybridInstance = hybridManager.getHybridInstance("ssb_hybrid"); Assert.assertNotNull(hybridInstance); - Assert.assertEquals("test_kylin_hybrid_ready", hybridInstance.getName()); - Assert.assertEquals(1, hybridInstance.getRealizationEntries().size()); + Assert.assertEquals("ssb_hybrid", hybridInstance.getName()); + Assert.assertEquals(3, hybridInstance.getRealizationEntries().size()); } @Test - public void testDelete() throws IOException { + public void test3Delete() throws IOException { HybridManager hybridManager = HybridManager.getInstance(KylinConfig.getInstanceFromEnv()); - Assert.assertNotNull(hybridManager.getHybridInstance("test_kylin_hybrid_ready")); - HybridCubeCLI.main(new String[] { "-name", "test_kylin_hybrid_ready", "-project", "default", "-model", "test_kylin_inner_join_model_desc", "-cubes", "" }); + Assert.assertNull(hybridManager.getHybridInstance("ssb_hybrid")); + HybridCubeCLI.main(new String[] { "-name", "ssb_hybrid", "-project", "default", "-model", "ssb", "-cubes", "ssb_cube1,ssb_cube2", "-action", "create" }); + Assert.assertNotNull(hybridManager.getHybridInstance("ssb_hybrid")); + HybridCubeCLI.main(new String[] { "-name", "ssb_hybrid", "-project", "default", "-model", "ssb", "-action", "delete" }); - HybridInstance hybridInstance = hybridManager.getHybridInstance("test_kylin_hybrid_ready"); + HybridInstance hybridInstance = hybridManager.getHybridInstance("ssb_hybrid"); Assert.assertNull(hybridInstance); - - Assert.assertEquals(0, ProjectManager.getInstance(KylinConfig.getInstanceFromEnv()).findProjects(RealizationType.HYBRID, "test_kylin_hybrid_ready").size()); + Assert.assertEquals(0, ProjectManager.getInstance(KylinConfig.getInstanceFromEnv()).findProjects(RealizationType.HYBRID, "ssb_hybrid").size()); } }
