public ProjectInstance getProjectOfModel(String model) { try (AutoLock lock = prjMapLock.lockForRead()) { for (ProjectInstance prj : projectMap.values()) { if (prj.getModels().contains(model)) return prj; } throw new IllegalStateException("No project found for model " + model); } }
public List<DataModelDesc> getModels(String projectName) { try (AutoLock lock = modelMapLock.lockForRead()) { ProjectInstance projectInstance = ProjectManager.getInstance(config).getProject(projectName); ArrayList<DataModelDesc> ret = new ArrayList<>(); if (projectInstance != null && projectInstance.getModels() != null) { for (String modelName : projectInstance.getModels()) { DataModelDesc model = getDataModelDesc(modelName); if (null != model) { ret.add(model); } else { logger.info("Model " + modelName + " is missing or unloaded yet"); } } } return ret; } }
public DataModelDesc createDataModelDesc(DataModelDesc desc, String projectName, String owner) throws IOException { try (AutoLock lock = modelMapLock.lockForWrite()) { String name = desc.getName(); if (dataModelDescMap.containsKey(name)) throw new IllegalArgumentException("DataModelDesc '" + name + "' already exists"); ProjectManager prjMgr = ProjectManager.getInstance(config); ProjectInstance prj = prjMgr.getProject(projectName); if (prj.containsModel(name)) throw new IllegalStateException("project " + projectName + " already contains model " + name); try { // Temporarily register model under project, because we want to // update project formally after model is saved. prj.getModels().add(name); desc.setOwner(owner); logger.info("Saving Model {} to Project {} with {} as owner", desc.getName(), projectName, owner); desc = saveDataModelDesc(desc); } finally { prj.getModels().remove(name); } // now that model is saved, update project formally prjMgr.addModelToProject(name, projectName); return desc; } }
for (String modelName : projectInstance.getModels()) {
@Override public void onProjectSchemaChange(Broadcaster broadcaster, String project) throws IOException { //clean up the current project's table desc TableMetadataManager.getInstance(config).resetProjectSpecificTableDesc(project); try (AutoLock lock = modelMapLock.lockForWrite()) { for (String model : ProjectManager.getInstance(config).getProject(project).getModels()) { crud.reloadQuietly(model); } } }
@Test public void testHappyIngest() { String srcPath = Thread.currentThread().getContextClassLoader().getResource("cloned_cube_and_model.zip").getPath(); CubeMetaIngester.main(new String[] { "-project", "default", "-srcPath", srcPath }); ProjectInstance project = ProjectManager.getInstance(KylinConfig.getInstanceFromEnv()).getProject("default"); Assert.assertEquals(1, Collections.frequency(project.getTables(), "DEFAULT.TEST_KYLIN_FACT")); Assert.assertTrue(project.getModels().contains("cloned_model")); Assert.assertTrue(project.getRealizationEntries().contains(RealizationEntry.create(RealizationType.CUBE, "cloned_cube"))); getTestConfig().clearManagers(); CubeInstance instance = CubeManager.getInstance(KylinConfig.getInstanceFromEnv()).getCube("cloned_cube"); Assert.assertTrue(instance != null); }
@Test public void testHappyIngest2() { String srcPath = Thread.currentThread().getContextClassLoader().getResource("benchmark_meta.zip").getPath(); CubeMetaIngester.main(new String[] { "-project", "default", "-srcPath", srcPath, "-overwriteTables", "true" }); ProjectInstance project = ProjectManager.getInstance(KylinConfig.getInstanceFromEnv()).getProject("default"); Assert.assertEquals(1, Collections.frequency(project.getTables(), "SSB.CUSTOMER")); Assert.assertTrue(project.getModels().contains("benchmark_model")); Assert.assertTrue(project.getRealizationEntries().contains(RealizationEntry.create(RealizationType.CUBE, "benchmark_cube"))); getTestConfig().clearManagers(); CubeInstance instance = CubeManager.getInstance(KylinConfig.getInstanceFromEnv()).getCube("benchmark_cube"); Assert.assertTrue(instance != null); }
if (!project.getModels().contains(modelName)) project.addModel(modelName); project.removeRealization(RealizationType.CUBE, cubeName);
public ProjectInstance getProjectOfModel(String model) { try (AutoLock lock = prjMapLock.lockForRead()) { for (ProjectInstance prj : projectMap.values()) { if (prj.getModels().contains(model)) return prj; } throw new IllegalStateException("No project found for model " + model); } }
public List<DataModelDesc> getModels(String projectName) { try (AutoLock lock = modelMapLock.lockForRead()) { ProjectInstance projectInstance = ProjectManager.getInstance(config).getProject(projectName); ArrayList<DataModelDesc> ret = new ArrayList<>(); if (projectInstance != null && projectInstance.getModels() != null) { for (String modelName : projectInstance.getModels()) { DataModelDesc model = getDataModelDesc(modelName); if (null != model) { ret.add(model); } else { logger.info("Model " + modelName + " is missing or unloaded yet"); } } } return ret; } }
public DataModelDesc createDataModelDesc(DataModelDesc desc, String projectName, String owner) throws IOException { try (AutoLock lock = modelMapLock.lockForWrite()) { String name = desc.getName(); if (dataModelDescMap.containsKey(name)) throw new IllegalArgumentException("DataModelDesc '" + name + "' already exists"); ProjectManager prjMgr = ProjectManager.getInstance(config); ProjectInstance prj = prjMgr.getProject(projectName); if (prj.containsModel(name)) throw new IllegalStateException("project " + projectName + " already contains model " + name); try { // Temporarily register model under project, because we want to // update project formally after model is saved. prj.getModels().add(name); desc.setOwner(owner); logger.info("Saving Model {} to Project {} with {} as owner", desc.getName(), projectName, owner); desc = saveDataModelDesc(desc); } finally { prj.getModels().remove(name); } // now that model is saved, update project formally prjMgr.addModelToProject(name, projectName); return desc; } }
@Override public void onProjectSchemaChange(Broadcaster broadcaster, String project) throws IOException { //clean up the current project's table desc TableMetadataManager.getInstance(config).resetProjectSpecificTableDesc(project); try (AutoLock lock = modelMapLock.lockForWrite()) { for (String model : ProjectManager.getInstance(config).getProject(project).getModels()) { crud.reloadQuietly(model); } } }
if (!project.getModels().contains(modelName)) project.addModel(modelName); project.removeRealization(RealizationType.CUBE, cubeName);