Repository: atlas Updated Branches: refs/heads/master 540129f5c -> 65f7da17e
ATLAS-2602: Walkthrough includes relationship attribute. Signed-off-by: Ashutosh Mestry <ames...@hortonworks.com> Project: http://git-wip-us.apache.org/repos/asf/atlas/repo Commit: http://git-wip-us.apache.org/repos/asf/atlas/commit/65f7da17 Tree: http://git-wip-us.apache.org/repos/asf/atlas/tree/65f7da17 Diff: http://git-wip-us.apache.org/repos/asf/atlas/diff/65f7da17 Branch: refs/heads/master Commit: 65f7da17e444dff86ecbcbcab17251b66c067aa2 Parents: 540129f Author: Ashutosh Mestry <ames...@hortonworks.com> Authored: Tue Apr 24 15:15:20 2018 -0700 Committer: Ashutosh Mestry <ames...@hortonworks.com> Committed: Wed Apr 25 10:50:20 2018 -0700 ---------------------------------------------------------------------- .../graph/v1/AtlasEntityGraphDiscoveryV1.java | 4 +- .../store/graph/v1/BulkImporterImpl.java | 4 +- .../repository/impexp/ImportServiceTest.java | 63 ++++++++++++++++--- .../src/test/resources/stocks-glossary.zip | Bin 0 -> 3876 bytes 4 files changed, 57 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/atlas/blob/65f7da17/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasEntityGraphDiscoveryV1.java ---------------------------------------------------------------------- diff --git a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasEntityGraphDiscoveryV1.java b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasEntityGraphDiscoveryV1.java index f092d18..e31ca4d 100644 --- a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasEntityGraphDiscoveryV1.java +++ b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasEntityGraphDiscoveryV1.java @@ -305,9 +305,7 @@ public class AtlasEntityGraphDiscoveryV1 implements EntityGraphDiscovery { List<String> visitedAttributes = new ArrayList<>(); // visit relationship attributes - if(!(this.discoveryContext.getEntityStream() instanceof EntityImportStream)) { - visitRelationships(entityType, entity, visitedAttributes); - } + visitRelationships(entityType, entity, visitedAttributes); // visit struct attributes for (AtlasAttribute attribute : entityType.getAllAttributes().values()) { http://git-wip-us.apache.org/repos/asf/atlas/blob/65f7da17/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/BulkImporterImpl.java ---------------------------------------------------------------------- diff --git a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/BulkImporterImpl.java b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/BulkImporterImpl.java index af31095..e17daf6 100644 --- a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/BulkImporterImpl.java +++ b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/BulkImporterImpl.java @@ -73,10 +73,10 @@ public class BulkImporterImpl implements BulkImporter { AtlasEntityWithExtInfo entityWithExtInfo = entityImportStreamWithResidualList.getNextEntityWithExtInfo(); AtlasEntity entity = entityWithExtInfo != null ? entityWithExtInfo.getEntity() : null; - if (entity == null || processedGuids.contains(entity.getGuid())) { + if (entity == null) { continue; } - + AtlasEntityStreamForImport oneEntityStream = new AtlasEntityStreamForImport(entityWithExtInfo, entityStream); try { http://git-wip-us.apache.org/repos/asf/atlas/blob/65f7da17/repository/src/test/java/org/apache/atlas/repository/impexp/ImportServiceTest.java ---------------------------------------------------------------------- diff --git a/repository/src/test/java/org/apache/atlas/repository/impexp/ImportServiceTest.java b/repository/src/test/java/org/apache/atlas/repository/impexp/ImportServiceTest.java index 91d56ab..5089070 100644 --- a/repository/src/test/java/org/apache/atlas/repository/impexp/ImportServiceTest.java +++ b/repository/src/test/java/org/apache/atlas/repository/impexp/ImportServiceTest.java @@ -22,13 +22,16 @@ import org.apache.atlas.AtlasErrorCode; import org.apache.atlas.RequestContextV1; import org.apache.atlas.TestModules; import org.apache.atlas.TestUtilsV2; +import org.apache.atlas.discovery.EntityDiscoveryService; import org.apache.atlas.exception.AtlasBaseException; import org.apache.atlas.model.impexp.AtlasImportRequest; +import org.apache.atlas.model.instance.AtlasEntityHeader; import org.apache.atlas.repository.graph.AtlasGraphProvider; import org.apache.atlas.runner.LocalSolrRunner; import org.apache.atlas.store.AtlasTypeDefStore; import org.apache.atlas.type.AtlasClassificationType; import org.apache.atlas.type.AtlasTypeRegistry; +import org.apache.commons.lang.StringUtils; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import org.slf4j.Logger; @@ -42,6 +45,7 @@ import org.testng.annotations.Test; import java.io.IOException; import java.util.HashMap; +import java.util.List; import java.util.Map; import static org.apache.atlas.graph.GraphSandboxUtil.useLocalSolr; @@ -54,6 +58,7 @@ import static org.testng.Assert.assertNotNull; @Guice(modules = TestModules.TestOnlyModule.class) public class ImportServiceTest { private static final Logger LOG = LoggerFactory.getLogger(ImportServiceTest.class); + private static final int DEFAULT_LIMIT = 25; private final ImportService importService; @Inject @@ -63,6 +68,9 @@ public class ImportServiceTest { private AtlasTypeDefStore typeDefStore; @Inject + private EntityDiscoveryService discoveryService; + + @Inject public ImportServiceTest(ImportService importService) { this.importService = importService; } @@ -104,10 +112,6 @@ public class ImportServiceTest { runAndVerifyQuickStart_v1_Import(importService, zipSource); } - private void loadBaseModel() throws IOException, AtlasBaseException { - loadModelFromJson("0000-Area0/0010-base_model.json", typeDefStore, typeRegistry); - } - @DataProvider(name = "logging") public static Object[][] getDataFromLogging(ITestContext context) throws IOException { return getZipSource("logging-v1-full.zip"); @@ -180,6 +184,28 @@ public class ImportServiceTest { runImportWithNoParameters(importService, zipSource); } + @DataProvider(name = "stocks-glossary") + public static Object[][] getDataFromGlossary(ITestContext context) throws IOException { + return getZipSource("stocks-glossary.zip"); + } + + @Test(dataProvider = "stocks-glossary") + public void importGlossary(ZipSource zipSource) throws IOException, AtlasBaseException { + loadBaseModel(); + loadGlossary(); + runImportWithNoParameters(importService, zipSource); + + assertEntityCount("__AtlasGlossary", "40c80052-3129-4f7c-8f2f-391677935416", 1); + assertEntityCount("__AtlasGlossaryTerm", "e93ac426-de04-4d54-a7c9-d76c1e96369b", 1); + assertEntityCount("__AtlasGlossaryTerm", "93ad3bf6-23dc-4e3f-b70e-f8fad6438203", 1); + assertEntityCount("__AtlasGlossaryTerm", "105533b6-c125-4a87-bed5-cdf67fb68c39", 1); + } + + private List<AtlasEntityHeader> getEntitiesFromDB(String query, String guid) throws AtlasBaseException { + String q = StringUtils.isEmpty(guid) ? query : String.format("%s where __guid = '%s'", query, guid); + return discoveryService.searchUsingDslQuery(q, DEFAULT_LIMIT, 0).getEntities(); + } + @DataProvider(name = "hdfs_path1") public static Object[][] getDataFromHdfsPath1(ITestContext context) throws IOException { return getZipSource("hdfs_path1.zip"); @@ -226,6 +252,20 @@ public class ImportServiceTest { loadHiveModel(); AtlasImportRequest request = getDefaultImportRequest(); runImportWithParameters(importService, request, zipSource); + + assertEntityCount("hive_db", "d7dc0848-fbba-4d63-9264-a460798361f5", 1); + assertEntityCount("hive_table", "2fb31eaa-4bb2-4eb8-b333-a888ba7c84fe", 1); + assertEntityCount("hive_column", "13422f0c-9265-4960-91a9-290ffd83b7f1",1); + assertEntityCount("hive_column", "c1ae870f-ce0c-44ae-832f-ff77035b1f7e",1); + assertEntityCount("hive_column", "b84baab3-0664-4f13-82f1-e81d043db02f",1); + assertEntityCount("hive_column", "53ea1991-6ca8-44f2-a75e-61b8d4866fc8",1); + assertEntityCount("hive_column", "a973c04c-aa42-49f4-877c-66fbe6754fb5",1); + assertEntityCount("hive_column", "a4550803-f18e-4072-a1e8-1201e6022a58",1); + assertEntityCount("hive_column", "6c4f196a-4046-493b-8c3a-2b1a9ef255a2",1); + } + + private void assertEntityCount(String entityType, String guid, int expectedCount) throws AtlasBaseException { + assertEquals(getEntitiesFromDB(entityType, guid).size(), expectedCount); } @Test @@ -233,11 +273,8 @@ public class ImportServiceTest { ImportService importService = new ImportService(typeDefStore, typeRegistry, null); AtlasImportRequest req = mock(AtlasImportRequest.class); - Answer<Map> answer = new Answer<Map>() { - @Override - public Map answer(InvocationOnMock invocationOnMock) throws Throwable { - throw new IOException("file is read only"); - } + Answer<Map> answer = invocationOnMock -> { + throw new IOException("file is read only"); }; when(req.getFileName()).thenReturn("some-file.zip"); @@ -258,4 +295,12 @@ public class ImportServiceTest { private void loadHiveModel() throws IOException, AtlasBaseException { loadModelFromJson("1000-Hadoop/1030-hive_model.json", typeDefStore, typeRegistry); } + + private void loadBaseModel() throws IOException, AtlasBaseException { + loadModelFromJson("0000-Area0/0010-base_model.json", typeDefStore, typeRegistry); + } + + private void loadGlossary() throws IOException, AtlasBaseException { + loadModelFromJson("0000-Area0/0011-glossary_model.json", typeDefStore, typeRegistry); + } } http://git-wip-us.apache.org/repos/asf/atlas/blob/65f7da17/repository/src/test/resources/stocks-glossary.zip ---------------------------------------------------------------------- diff --git a/repository/src/test/resources/stocks-glossary.zip b/repository/src/test/resources/stocks-glossary.zip new file mode 100644 index 0000000..dc8039f Binary files /dev/null and b/repository/src/test/resources/stocks-glossary.zip differ