Skip to content

Commit 626dbb8

Browse files
authored
Merge branch 'datahub-project:master' into master
2 parents cd1f998 + ddb3db9 commit 626dbb8

File tree

43 files changed

+647
-390
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+647
-390
lines changed

datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/GmsGraphQLEngine.java

+19-1
Original file line numberDiff line numberDiff line change
@@ -3141,13 +3141,26 @@ private void configureDataProcessInstanceResolvers(final RuntimeWiring.Builder b
31413141
"DataProcessInstance",
31423142
typeWiring ->
31433143
typeWiring
3144+
.dataFetcher("exists", new EntityExistsResolver(entityService))
3145+
.dataFetcher(
3146+
"platform",
3147+
new LoadableTypeResolver<>(
3148+
dataPlatformType,
3149+
(env) -> {
3150+
final DataProcessInstance dataProcessInstance = env.getSource();
3151+
return dataProcessInstance != null
3152+
&& dataProcessInstance.getPlatform() != null
3153+
? dataProcessInstance.getPlatform().getUrn()
3154+
: null;
3155+
}))
31443156
.dataFetcher(
31453157
"dataPlatformInstance",
31463158
new LoadableTypeResolver<>(
31473159
dataPlatformInstanceType,
31483160
(env) -> {
31493161
final DataProcessInstance dataProcessInstance = env.getSource();
3150-
return dataProcessInstance.getDataPlatformInstance() != null
3162+
return dataProcessInstance != null
3163+
&& dataProcessInstance.getDataPlatformInstance() != null
31513164
? dataProcessInstance.getDataPlatformInstance().getUrn()
31523165
: null;
31533166
}))
@@ -3160,6 +3173,11 @@ private void configureDataProcessInstanceResolvers(final RuntimeWiring.Builder b
31603173
final DataProcessInstance dpi = env.getSource();
31613174
return dpi.getContainer() != null ? dpi.getContainer().getUrn() : null;
31623175
}))
3176+
.dataFetcher(
3177+
"parentTemplate",
3178+
new EntityTypeResolver(
3179+
entityTypes,
3180+
(env) -> ((DataProcessInstance) env.getSource()).getParentTemplate()))
31633181
.dataFetcher("relationships", new EntityRelationshipsResultResolver(graphClient))
31643182
.dataFetcher(
31653183
"lineage",

datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/types/common/mappers/DataPlatformInstanceAspectMapper.java

+1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public DataPlatformInstance apply(
2929
result.setType(EntityType.DATA_PLATFORM_INSTANCE);
3030
result.setUrn(input.getInstance().toString());
3131
}
32+
// Warning: This often cannot be read properly: overwritten by LoadableTypeResolver
3233
result.setPlatform(
3334
DataPlatform.builder()
3435
.setUrn(input.getPlatform().toString())

datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/types/dataprocessinst/DataProcessInstanceType.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ public class DataProcessInstanceType
4141
DATA_PROCESS_INSTANCE_RELATIONSHIPS_ASPECT_NAME,
4242
ML_TRAINING_RUN_PROPERTIES_ASPECT_NAME,
4343
SUB_TYPES_ASPECT_NAME,
44-
CONTAINER_ASPECT_NAME);
44+
CONTAINER_ASPECT_NAME,
45+
STATUS_ASPECT_NAME);
4546

4647
private final EntityClient _entityClient;
4748
private final FeatureFlags _featureFlags;

datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/types/dataprocessinst/mappers/DataProcessInstanceMapper.java

+33-8
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import static com.linkedin.metadata.Constants.*;
44

55
import com.linkedin.common.DataPlatformInstance;
6+
import com.linkedin.common.Status;
67
import com.linkedin.common.SubTypes;
78
import com.linkedin.common.urn.Urn;
89
import com.linkedin.data.DataMap;
@@ -13,12 +14,15 @@
1314
import com.linkedin.datahub.graphql.types.common.mappers.AuditStampMapper;
1415
import com.linkedin.datahub.graphql.types.common.mappers.CustomPropertiesMapper;
1516
import com.linkedin.datahub.graphql.types.common.mappers.DataPlatformInstanceAspectMapper;
17+
import com.linkedin.datahub.graphql.types.common.mappers.StatusMapper;
1618
import com.linkedin.datahub.graphql.types.common.mappers.SubTypesMapper;
19+
import com.linkedin.datahub.graphql.types.common.mappers.UrnToEntityMapper;
1720
import com.linkedin.datahub.graphql.types.common.mappers.util.MappingHelper;
1821
import com.linkedin.datahub.graphql.types.mappers.ModelMapper;
1922
import com.linkedin.datahub.graphql.types.mlmodel.mappers.MLHyperParamMapper;
2023
import com.linkedin.datahub.graphql.types.mlmodel.mappers.MLMetricMapper;
2124
import com.linkedin.dataprocess.DataProcessInstanceProperties;
25+
import com.linkedin.dataprocess.DataProcessInstanceRelationships;
2226
import com.linkedin.entity.EntityResponse;
2327
import com.linkedin.entity.EnvelopedAspectMap;
2428
import com.linkedin.ml.metadata.MLTrainingRunProperties;
@@ -68,7 +72,7 @@ public DataProcessInstance apply(
6872
mappingHelper.mapToResult(
6973
DATA_PROCESS_INSTANCE_PROPERTIES_ASPECT_NAME,
7074
(dataProcessInstance, dataMap) ->
71-
mapDataProcessProperties(context, dataProcessInstance, dataMap, entityUrn));
75+
mapDataProcessInstanceProperties(context, dataProcessInstance, dataMap, entityUrn));
7276
mappingHelper.mapToResult(
7377
ML_TRAINING_RUN_PROPERTIES_ASPECT_NAME,
7478
(dataProcessInstance, dataMap) ->
@@ -77,8 +81,10 @@ public DataProcessInstance apply(
7781
DATA_PLATFORM_INSTANCE_ASPECT_NAME,
7882
(dataProcessInstance, dataMap) -> {
7983
DataPlatformInstance dataPlatformInstance = new DataPlatformInstance(dataMap);
80-
dataProcessInstance.setDataPlatformInstance(
81-
DataPlatformInstanceAspectMapper.map(context, dataPlatformInstance));
84+
com.linkedin.datahub.graphql.generated.DataPlatformInstance value =
85+
DataPlatformInstanceAspectMapper.map(context, dataPlatformInstance);
86+
dataProcessInstance.setPlatform(value.getPlatform());
87+
dataProcessInstance.setDataPlatformInstance(value);
8288
});
8389
mappingHelper.mapToResult(
8490
SUB_TYPES_ASPECT_NAME,
@@ -87,6 +93,14 @@ public DataProcessInstance apply(
8793
mappingHelper.mapToResult(
8894
CONTAINER_ASPECT_NAME,
8995
(dataProcessInstance, dataMap) -> mapContainers(context, dataProcessInstance, dataMap));
96+
mappingHelper.mapToResult(
97+
STATUS_ASPECT_NAME,
98+
(dataProcessInstance, dataMap) ->
99+
dataProcessInstance.setStatus(StatusMapper.map(context, new Status(dataMap))));
100+
mappingHelper.mapToResult(
101+
DATA_PROCESS_INSTANCE_RELATIONSHIPS_ASPECT_NAME,
102+
(dataProcessInstance, dataMap) ->
103+
mapDataProcessInstanceRelationships(context, dataProcessInstance, dataMap));
90104

91105
return mappingHelper.getResult();
92106
}
@@ -124,8 +138,8 @@ private void mapTrainingRunProperties(
124138
dpi.setMlTrainingRunProperties(properties);
125139
}
126140

127-
private void mapDataProcessProperties(
128-
@Nonnull QueryContext context,
141+
private void mapDataProcessInstanceProperties(
142+
@Nullable QueryContext context,
129143
@Nonnull DataProcessInstance dpi,
130144
@Nonnull DataMap dataMap,
131145
@Nonnull Urn entityUrn) {
@@ -146,9 +160,20 @@ private void mapDataProcessProperties(
146160
CustomPropertiesMapper.map(
147161
dataProcessInstanceProperties.getCustomProperties(), entityUrn));
148162
}
149-
if (dataProcessInstanceProperties.hasCreated()) {
150-
dpi.setCreated(AuditStampMapper.map(context, dataProcessInstanceProperties.getCreated()));
151-
}
163+
dpi.setCreated(AuditStampMapper.map(context, dataProcessInstanceProperties.getCreated()));
164+
properties.setCreated(
165+
AuditStampMapper.map(context, dataProcessInstanceProperties.getCreated()));
152166
dpi.setProperties(properties);
153167
}
168+
169+
private void mapDataProcessInstanceRelationships(
170+
@Nullable QueryContext context, @Nonnull DataProcessInstance dpi, @Nonnull DataMap dataMap) {
171+
DataProcessInstanceRelationships dataProcessInstanceRelationships =
172+
new DataProcessInstanceRelationships(dataMap);
173+
174+
if (dataProcessInstanceRelationships.getParentTemplate() != null) {
175+
dpi.setParentTemplate(
176+
UrnToEntityMapper.map(context, dataProcessInstanceRelationships.getParentTemplate()));
177+
}
178+
}
154179
}

datahub-graphql-core/src/main/resources/entity.graphql

+24-5
Original file line numberDiff line numberDiff line change
@@ -6733,6 +6733,16 @@ type DataProcessInstance implements EntityWithRelationships & Entity {
67336733
"""
67346734
type: EntityType!
67356735

6736+
"""
6737+
Whether or not this entity exists on DataHub
6738+
"""
6739+
exists: Boolean
6740+
6741+
"""
6742+
Status metadata of the data process instance
6743+
"""
6744+
status: Status
6745+
67366746
"""
67376747
The history of state changes for the run
67386748
"""
@@ -6741,12 +6751,12 @@ type DataProcessInstance implements EntityWithRelationships & Entity {
67416751
"""
67426752
When the run was kicked off
67436753
"""
6744-
created: AuditStamp
6754+
created: AuditStamp @deprecated(reason: "Use `properties.created`")
67456755

67466756
"""
67476757
The name of the data process
67486758
"""
6749-
name: String
6759+
name: String @deprecated(reason: "Use `properties.name`")
67506760

67516761
"""
67526762
Edges extending from this entity.
@@ -13154,7 +13164,7 @@ type DataProcessInstanceProperties {
1315413164
"""
1315513165
When this process instance was created
1315613166
"""
13157-
created: AuditStamp
13167+
created: AuditStamp!
1315813168

1315913169
"""
1316013170
Additional custom properties specific to this process instance
@@ -13188,9 +13198,8 @@ type MLTrainingRunProperties {
1318813198
}
1318913199

1319013200
extend type DataProcessInstance {
13191-
1319213201
"""
13193-
Additional read only properties associated with the Data Job
13202+
Additional read only properties associated with the Data Process Instance
1319413203
"""
1319513204
properties: DataProcessInstanceProperties
1319613205

@@ -13209,6 +13218,11 @@ extend type DataProcessInstance {
1320913218
"""
1321013219
container: Container
1321113220

13221+
"""
13222+
Standardized platform urn where the data process instance is defined
13223+
"""
13224+
platform: DataPlatform
13225+
1321213226
"""
1321313227
Recursively get the lineage of containers for this entity
1321413228
"""
@@ -13218,4 +13232,9 @@ extend type DataProcessInstance {
1321813232
Additional properties when subtype is Training Run
1321913233
"""
1322013234
mlTrainingRunProperties: MLTrainingRunProperties
13235+
13236+
"""
13237+
The parent entity whose run instance it is
13238+
"""
13239+
parentTemplate: Entity
1322113240
}

datahub-graphql-core/src/test/java/com/linkedin/datahub/graphql/types/dataprocessinst/DataProcessInstanceTypeTest.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.google.common.collect.ImmutableList;
88
import com.google.common.collect.ImmutableMap;
99
import com.google.common.collect.ImmutableSet;
10+
import com.linkedin.common.AuditStamp;
1011
import com.linkedin.common.DataPlatformInstance;
1112
import com.linkedin.common.FabricType;
1213
import com.linkedin.common.Status;
@@ -61,7 +62,11 @@ public class DataProcessInstanceTypeTest {
6162
private static final DataProcessInstanceKey TEST_DPI_1_KEY =
6263
new DataProcessInstanceKey().setId("id-1");
6364
private static final DataProcessInstanceProperties TEST_DPI_1_PROPERTIES =
64-
new DataProcessInstanceProperties().setName("Test DPI").setType(DataProcessType.STREAMING);
65+
new DataProcessInstanceProperties()
66+
.setName("Test DPI")
67+
.setType(DataProcessType.STREAMING)
68+
.setCreated(
69+
new AuditStamp().setTime(1234L).setActor(UrnUtils.getUrn("urn:li:corpuser:1")));
6570
private static final DataProcessInstanceInput TEST_DPI_1_DPI_INPUT =
6671
new DataProcessInstanceInput().setInputs(new UrnArray(ImmutableList.of(DATASET_URN)));
6772
private static final DataProcessInstanceOutput TEST_DPI_1_DPI_OUTPUT =

datahub-graphql-core/src/test/java/com/linkedin/datahub/graphql/types/dataprocessinst/mappers/DataProcessInstanceMapperTest.java

+22-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import static org.testng.Assert.assertEquals;
44
import static org.testng.Assert.assertNotNull;
55

6+
import com.linkedin.common.AuditStamp;
67
import com.linkedin.common.DataPlatformInstance;
78
import com.linkedin.common.url.Url;
89
import com.linkedin.common.urn.Urn;
@@ -12,6 +13,7 @@
1213
import com.linkedin.datahub.graphql.generated.DataProcessInstance;
1314
import com.linkedin.datahub.graphql.generated.EntityType;
1415
import com.linkedin.dataprocess.DataProcessInstanceProperties;
16+
import com.linkedin.dataprocess.DataProcessInstanceRelationships;
1517
import com.linkedin.entity.Aspect;
1618
import com.linkedin.entity.EntityResponse;
1719
import com.linkedin.entity.EnvelopedAspect;
@@ -28,6 +30,7 @@ public class DataProcessInstanceMapperTest {
2830
private static final String TEST_INSTANCE_URN =
2931
"urn:li:dataProcessInstance:(test-workflow,test-instance)";
3032
private static final String TEST_CONTAINER_URN = "urn:li:container:testContainer";
33+
private static final String TEST_USER_URN = "urn:li:corpuser:test";
3134
private static final String TEST_EXTERNAL_URL = "https://example.com/process";
3235
private static final String TEST_NAME = "Test Process Instance";
3336

@@ -52,11 +55,15 @@ public void testMapBasicFields() throws Exception {
5255
}
5356

5457
@Test
55-
public void testMapDataProcessProperties() throws Exception {
58+
public void testMapDataProcessInstanceProperties() throws Exception {
5659
// Create DataProcessInstanceProperties
5760
DataProcessInstanceProperties properties = new DataProcessInstanceProperties();
5861
properties.setName(TEST_NAME);
5962
properties.setExternalUrl(new Url(TEST_EXTERNAL_URL));
63+
AuditStamp created = new AuditStamp();
64+
created.setTime(123456789L);
65+
created.setActor(Urn.createFromString(TEST_USER_URN));
66+
properties.setCreated(created);
6067

6168
// Add properties aspect
6269
addAspect(Constants.DATA_PROCESS_INSTANCE_PROPERTIES_ASPECT_NAME, properties);
@@ -66,6 +73,20 @@ public void testMapDataProcessProperties() throws Exception {
6673
assertNotNull(instance.getProperties());
6774
assertEquals(instance.getName(), TEST_NAME);
6875
assertEquals(instance.getExternalUrl(), TEST_EXTERNAL_URL);
76+
assertEquals(instance.getCreated().getTime(), 123456789L);
77+
assertEquals(instance.getCreated().getActor(), TEST_USER_URN);
78+
}
79+
80+
@Test
81+
public void testMapDataProcessInstanceRelationships() throws Exception {
82+
DataProcessInstanceRelationships relationships = new DataProcessInstanceRelationships();
83+
relationships.setParentTemplate(Urn.createFromString(TEST_INSTANCE_URN));
84+
85+
addAspect(Constants.DATA_PROCESS_INSTANCE_RELATIONSHIPS_ASPECT_NAME, relationships);
86+
87+
DataProcessInstance instance = DataProcessInstanceMapper.map(null, entityResponse);
88+
assertNotNull(instance.getParentTemplate());
89+
assertEquals(instance.getParentTemplate().getUrn(), TEST_INSTANCE_URN);
6990
}
7091

7192
@Test

0 commit comments

Comments
 (0)