Skip to content

Commit dacef70

Browse files
Merge branch 'master' into tests-datahub-client-avroschemaconverter
2 parents fe60852 + ecf6c8c commit dacef70

File tree

643 files changed

+38709
-3068
lines changed

Some content is hidden

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

643 files changed

+38709
-3068
lines changed

.github/workflows/airflow-plugin.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,10 @@ jobs:
8080
!**/binary/**
8181
- name: Upload coverage to Codecov
8282
if: always()
83-
uses: codecov/codecov-action@v3
83+
uses: codecov/codecov-action@v5
8484
with:
8585
token: ${{ secrets.CODECOV_TOKEN }}
86-
directory: .
86+
directory: ./build/coverage-reports/
8787
fail_ci_if_error: false
8888
flags: airflow,airflow-${{ matrix.extra_pip_extras }}
8989
name: pytest-airflow-${{ matrix.python-version }}-${{ matrix.extra_pip_requirements }}

.github/workflows/build-and-test.yml

+10
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,16 @@ jobs:
126126
!**/binary/**
127127
- name: Ensure codegen is updated
128128
uses: ./.github/actions/ensure-codegen-updated
129+
- name: Upload coverage to Codecov
130+
if: always()
131+
uses: codecov/codecov-action@v5
132+
with:
133+
token: ${{ secrets.CODECOV_TOKEN }}
134+
directory: ./build/coverage-reports/
135+
fail_ci_if_error: false
136+
flags: ${{ matrix.timezone }}
137+
name: ${{ matrix.command }}
138+
verbose: true
129139

130140
quickstart-compose-validation:
131141
runs-on: ubuntu-latest

.github/workflows/dagster-plugin.yml

+4-4
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@ jobs:
3131
DATAHUB_TELEMETRY_ENABLED: false
3232
strategy:
3333
matrix:
34-
python-version: ["3.8", "3.10"]
34+
python-version: ["3.9", "3.10"]
3535
include:
36-
- python-version: "3.8"
36+
- python-version: "3.9"
3737
extraPythonRequirement: "dagster>=1.3.3"
3838
- python-version: "3.10"
3939
extraPythonRequirement: "dagster>=1.3.3"
@@ -66,10 +66,10 @@ jobs:
6666
**/junit.*.xml
6767
- name: Upload coverage to Codecov
6868
if: always()
69-
uses: codecov/codecov-action@v3
69+
uses: codecov/codecov-action@v5
7070
with:
7171
token: ${{ secrets.CODECOV_TOKEN }}
72-
directory: .
72+
directory: ./build/coverage-reports/
7373
fail_ci_if_error: false
7474
flags: dagster-${{ matrix.python-version }}-${{ matrix.extraPythonRequirement }}
7575
name: pytest-dagster

.github/workflows/gx-plugin.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,10 @@ jobs:
7070
**/junit.*.xml
7171
- name: Upload coverage to Codecov
7272
if: always()
73-
uses: codecov/codecov-action@v3
73+
uses: codecov/codecov-action@v5
7474
with:
7575
token: ${{ secrets.CODECOV_TOKEN }}
76-
directory: .
76+
directory: ./build/coverage-reports/
7777
fail_ci_if_error: false
7878
flags: gx-${{ matrix.python-version }}-${{ matrix.extraPythonRequirement }}
7979
name: pytest-gx

.github/workflows/metadata-ingestion.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,10 @@ jobs:
9494
!**/binary/**
9595
- name: Upload coverage to Codecov
9696
if: ${{ always() && matrix.python-version == '3.10' }}
97-
uses: codecov/codecov-action@v3
97+
uses: codecov/codecov-action@v5
9898
with:
9999
token: ${{ secrets.CODECOV_TOKEN }}
100-
directory: .
100+
directory: ./build/coverage-reports/
101101
fail_ci_if_error: false
102102
flags: pytest-${{ matrix.command }}
103103
name: pytest-${{ matrix.command }}

.github/workflows/metadata-io.yml

+9
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,15 @@ jobs:
8181
!**/binary/**
8282
- name: Ensure codegen is updated
8383
uses: ./.github/actions/ensure-codegen-updated
84+
- name: Upload coverage to Codecov
85+
if: ${{ always()}}
86+
uses: codecov/codecov-action@v5
87+
with:
88+
token: ${{ secrets.CODECOV_TOKEN }}
89+
directory: ./build/coverage-reports/
90+
fail_ci_if_error: false
91+
name: metadata-io-test
92+
verbose: true
8493

8594
event-file:
8695
runs-on: ubuntu-latest

.github/workflows/prefect-plugin.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,10 @@ jobs:
6767
!**/binary/**
6868
- name: Upload coverage to Codecov
6969
if: always()
70-
uses: codecov/codecov-action@v3
70+
uses: codecov/codecov-action@v5
7171
with:
7272
token: ${{ secrets.CODECOV_TOKEN }}
73-
directory: .
73+
directory: ./build/coverage-reports/
7474
fail_ci_if_error: false
7575
flags: prefect,prefect-${{ matrix.extra_pip_extras }}
7676
name: pytest-prefect-${{ matrix.python-version }}

.github/workflows/publish-datahub-jars.yml

+49
Original file line numberDiff line numberDiff line change
@@ -196,3 +196,52 @@ jobs:
196196
echo signingKey=$SIGNING_KEY >> gradle.properties
197197
./gradlew -PreleaseVersion=${{ needs.setup.outputs.tag }} :metadata-integration:java:custom-plugin-lib:publish
198198
./gradlew :metadata-integration:java:custom-plugin-lib:closeAndReleaseRepository --info
199+
publish-java8:
200+
runs-on: ubuntu-latest
201+
permissions:
202+
id-token: write
203+
contents: read
204+
needs: ["check-secret", "setup", "publish"]
205+
if: ${{ needs.check-secret.outputs.publish-enabled == 'true' }}
206+
steps:
207+
- uses: acryldata/sane-checkout-action@v3
208+
- name: Set up JDK 17
209+
uses: actions/setup-java@v4
210+
with:
211+
distribution: "zulu"
212+
java-version: 17
213+
- uses: gradle/actions/setup-gradle@v3
214+
- uses: actions/setup-python@v5
215+
with:
216+
python-version: "3.10"
217+
cache: "pip"
218+
- name: checkout upstream repo
219+
run: |
220+
git remote add upstream https://github.com/datahub-project/datahub.git
221+
git fetch upstream --tags --force --filter=tree:0
222+
- name: publish datahub-client jar snapshot
223+
if: ${{ github.event_name != 'release' }}
224+
env:
225+
RELEASE_USERNAME: ${{ secrets.RELEASE_USERNAME }}
226+
RELEASE_PASSWORD: ${{ secrets.RELEASE_PASSWORD }}
227+
SIGNING_PASSWORD: ${{ secrets.SIGNING_PASSWORD }}
228+
SIGNING_KEY: ${{ secrets.SIGNING_KEY }}
229+
NEXUS_USERNAME: ${{ secrets.NEXUS_USERNAME }}
230+
NEXUS_PASSWORD: ${{ secrets.NEXUS_PASSWORD }}
231+
run: |
232+
echo signingKey=$SIGNING_KEY >> gradle.properties
233+
./gradlew :metadata-integration:java:datahub-client:printVersion -PjavaClassVersionDefault=8 -ParchiveAppendix=java8
234+
./gradlew :metadata-integration:java:datahub-client:publish -PjavaClassVersionDefault=8 -ParchiveAppendix=java8
235+
- name: release datahub-client jar
236+
if: ${{ github.event_name == 'release' }}
237+
env:
238+
RELEASE_USERNAME: ${{ secrets.RELEASE_USERNAME }}
239+
RELEASE_PASSWORD: ${{ secrets.RELEASE_PASSWORD }}
240+
SIGNING_PASSWORD: ${{ secrets.SIGNING_PASSWORD }}
241+
SIGNING_KEY: ${{ secrets.SIGNING_KEY }}
242+
NEXUS_USERNAME: ${{ secrets.NEXUS_USERNAME }}
243+
NEXUS_PASSWORD: ${{ secrets.NEXUS_PASSWORD }}
244+
run: |
245+
echo signingKey=$SIGNING_KEY >> gradle.properties
246+
./gradlew -PreleaseVersion=${{ needs.setup.outputs.tag }} :metadata-integration:java:datahub-client:publish -PjavaClassVersionDefault=8 -ParchiveAppendix=java8
247+
./gradlew :metadata-integration:java:datahub-client:closeAndReleaseRepository --info -PjavaClassVersionDefault=8 -ParchiveAppendix=java8

build.gradle

+8-2
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ buildscript {
3434
// Releases: https://github.com/linkedin/rest.li/blob/master/CHANGELOG.md
3535
ext.pegasusVersion = '29.57.0'
3636
ext.mavenVersion = '3.6.3'
37+
ext.versionGradle = '8.11.1'
3738
ext.springVersion = '6.1.13'
3839
ext.springBootVersion = '3.2.9'
3940
ext.springKafkaVersion = '3.1.6'
@@ -57,7 +58,7 @@ buildscript {
5758
ext.hazelcastVersion = '5.3.6'
5859
ext.ebeanVersion = '15.5.2'
5960
ext.googleJavaFormatVersion = '1.18.1'
60-
ext.openLineageVersion = '1.24.2'
61+
ext.openLineageVersion = '1.25.0'
6162
ext.logbackClassicJava8 = '1.2.12'
6263

6364
ext.docker_registry = 'acryldata'
@@ -78,7 +79,7 @@ buildscript {
7879

7980
plugins {
8081
id 'com.gorylenko.gradle-git-properties' version '2.4.1'
81-
id 'com.github.johnrengelman.shadow' version '8.1.1' apply false
82+
id 'com.gradleup.shadow' version '8.3.5' apply false
8283
id 'com.palantir.docker' version '0.35.0' apply false
8384
id 'com.avast.gradle.docker-compose' version '0.17.6'
8485
id "com.diffplug.spotless" version "6.23.3"
@@ -499,3 +500,8 @@ subprojects {
499500
}
500501
}
501502
}
503+
504+
wrapper {
505+
gradleVersion = project.versionGradle
506+
distributionType = Wrapper.DistributionType.ALL
507+
}

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

+16-1
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
import com.linkedin.datahub.graphql.generated.EntityPath;
6868
import com.linkedin.datahub.graphql.generated.EntityRelationship;
6969
import com.linkedin.datahub.graphql.generated.EntityRelationshipLegacy;
70+
import com.linkedin.datahub.graphql.generated.FacetMetadata;
7071
import com.linkedin.datahub.graphql.generated.ForeignKeyConstraint;
7172
import com.linkedin.datahub.graphql.generated.FormActorAssignment;
7273
import com.linkedin.datahub.graphql.generated.FreshnessContract;
@@ -1317,7 +1318,8 @@ private void configureMutationResolvers(final RuntimeWiring.Builder builder) {
13171318
.dataFetcher("updateQuery", new UpdateQueryResolver(this.queryService))
13181319
.dataFetcher("deleteQuery", new DeleteQueryResolver(this.queryService))
13191320
.dataFetcher(
1320-
"createDataProduct", new CreateDataProductResolver(this.dataProductService))
1321+
"createDataProduct",
1322+
new CreateDataProductResolver(this.dataProductService, this.entityService))
13211323
.dataFetcher(
13221324
"updateDataProduct", new UpdateDataProductResolver(this.dataProductService))
13231325
.dataFetcher(
@@ -1474,6 +1476,19 @@ private void configureGenericEntityResolvers(final RuntimeWiring.Builder builder
14741476
"entity",
14751477
new EntityTypeResolver(
14761478
entityTypes, (env) -> ((BrowsePathEntry) env.getSource()).getEntity())))
1479+
.type(
1480+
"FacetMetadata",
1481+
typeWiring ->
1482+
typeWiring.dataFetcher(
1483+
"entity",
1484+
new EntityTypeResolver(
1485+
entityTypes,
1486+
(env) -> {
1487+
FacetMetadata facetMetadata = env.getSource();
1488+
return facetMetadata.getEntity() != null
1489+
? facetMetadata.getEntity()
1490+
: null;
1491+
})))
14771492
.type(
14781493
"LineageRelationship",
14791494
typeWiring ->

datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/authorization/AuthorizationUtils.java

+5
Original file line numberDiff line numberDiff line change
@@ -339,6 +339,11 @@ public static boolean canManageStructuredProperties(@Nonnull QueryContext contex
339339
context.getOperationContext(), PoliciesConfig.MANAGE_STRUCTURED_PROPERTIES_PRIVILEGE);
340340
}
341341

342+
public static boolean canViewStructuredPropertiesPage(@Nonnull QueryContext context) {
343+
return AuthUtil.isAuthorized(
344+
context.getOperationContext(), PoliciesConfig.VIEW_STRUCTURED_PROPERTIES_PAGE_PRIVILEGE);
345+
}
346+
342347
public static boolean canManageForms(@Nonnull QueryContext context) {
343348
return AuthUtil.isAuthorized(
344349
context.getOperationContext(), PoliciesConfig.MANAGE_DOCUMENTATION_FORMS_PRIVILEGE);

datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/MeResolver.java

+4
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,10 @@ public CompletableFuture<AuthenticatedUser> get(DataFetchingEnvironment environm
9393
BusinessAttributeAuthorizationUtils.canCreateBusinessAttribute(context));
9494
platformPrivileges.setManageBusinessAttributes(
9595
BusinessAttributeAuthorizationUtils.canManageBusinessAttribute(context));
96+
platformPrivileges.setManageStructuredProperties(
97+
AuthorizationUtils.canManageStructuredProperties(context));
98+
platformPrivileges.setViewStructuredPropertiesPage(
99+
AuthorizationUtils.canViewStructuredPropertiesPage(context));
96100
// Construct and return authenticated user object.
97101
final AuthenticatedUser authUser = new AuthenticatedUser();
98102
authUser.setCorpUser(corpUser);

datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/config/AppConfigResolver.java

+1
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,7 @@ public CompletableFuture<AppConfig> get(final DataFetchingEnvironment environmen
188188
.setDataContractsEnabled(_featureFlags.isDataContractsEnabled())
189189
.setEditableDatasetNameEnabled(_featureFlags.isEditableDatasetNameEnabled())
190190
.setShowSeparateSiblings(_featureFlags.isShowSeparateSiblings())
191+
.setShowManageStructuredProperties(_featureFlags.isShowManageStructuredProperties())
191192
.build();
192193

193194
appConfig.setFeatureFlags(featureFlagsConfig);

datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/dataproduct/CreateDataProductResolver.java

+6
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,11 @@
1010
import com.linkedin.datahub.graphql.exception.AuthorizationException;
1111
import com.linkedin.datahub.graphql.generated.CreateDataProductInput;
1212
import com.linkedin.datahub.graphql.generated.DataProduct;
13+
import com.linkedin.datahub.graphql.generated.OwnerEntityType;
14+
import com.linkedin.datahub.graphql.resolvers.mutate.util.OwnerUtils;
1315
import com.linkedin.datahub.graphql.types.dataproduct.mappers.DataProductMapper;
1416
import com.linkedin.entity.EntityResponse;
17+
import com.linkedin.metadata.entity.EntityService;
1518
import com.linkedin.metadata.service.DataProductService;
1619
import graphql.schema.DataFetcher;
1720
import graphql.schema.DataFetchingEnvironment;
@@ -24,6 +27,7 @@
2427
public class CreateDataProductResolver implements DataFetcher<CompletableFuture<DataProduct>> {
2528

2629
private final DataProductService _dataProductService;
30+
private final EntityService _entityService;
2731

2832
@Override
2933
public CompletableFuture<DataProduct> get(final DataFetchingEnvironment environment)
@@ -56,6 +60,8 @@ public CompletableFuture<DataProduct> get(final DataFetchingEnvironment environm
5660
context.getOperationContext(),
5761
dataProductUrn,
5862
UrnUtils.getUrn(input.getDomainUrn()));
63+
OwnerUtils.addCreatorAsOwner(
64+
context, dataProductUrn.toString(), OwnerEntityType.CORP_USER, _entityService);
5965
EntityResponse response =
6066
_dataProductService.getDataProductEntityResponse(
6167
context.getOperationContext(), dataProductUrn);

datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/search/AggregateAcrossEntitiesResolver.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,17 @@ public CompletableFuture<AggregateResults> get(DataFetchingEnvironment environme
6666

6767
final Filter inputFilter = ResolverUtils.buildFilter(null, input.getOrFilters());
6868

69-
final SearchFlags searchFlags = mapInputFlags(context, input.getSearchFlags());
69+
final SearchFlags searchFlags =
70+
input.getSearchFlags() != null
71+
? mapInputFlags(context, input.getSearchFlags())
72+
: new SearchFlags();
7073

7174
final List<String> facets =
7275
input.getFacets() != null && input.getFacets().size() > 0 ? input.getFacets() : null;
7376

77+
// do not include default facets if we're requesting any facets specifically
78+
searchFlags.setIncludeDefaultFacets(facets == null || facets.size() <= 0);
79+
7480
List<String> finalEntities =
7581
maybeResolvedView != null
7682
? SearchUtils.intersectEntityTypes(

0 commit comments

Comments
 (0)