Skip to content

Commit 1fad116

Browse files
committed
Upgrade/drop wizard 4.0.13 MarquezProject#3056
all praise to @swar00pduthks apply patch i0003
1 parent e1fecad commit 1fad116

File tree

170 files changed

+1353
-673
lines changed

Some content is hidden

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

170 files changed

+1353
-673
lines changed

Dockerfile

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,25 @@ COPY gradle gradle
44
COPY gradle.properties gradle.properties
55
COPY gradlew gradlew
66
COPY settings.gradle settings.gradle
7-
RUN ./gradlew --version
7+
8+
RUN chmod +x ./gradlew
9+
RUN sed -i 's/\r$//' ./gradlew
810

911
FROM base AS build
1012
WORKDIR /usr/src/app
1113
COPY build.gradle build.gradle
1214
COPY api ./api
1315
COPY clients/java ./clients/java
14-
RUN ./gradlew --no-daemon clean :api:shadowJar
16+
RUN ./gradlew clean :api:shadowJar --no-daemon --refresh-dependencies
1517

1618
FROM eclipse-temurin:17
17-
RUN apt-get update && apt-get install -y postgresql-client bash coreutils
19+
RUN apt-get update && apt-get install -y postgresql-client bash coreutils dos2unix
1820
WORKDIR /usr/src/app
1921
COPY --from=build /usr/src/app/api/build/libs/marquez-*.jar /usr/src/app
2022
COPY marquez.dev.yml marquez.dev.yml
2123
COPY docker/entrypoint.sh entrypoint.sh
24+
RUN dos2unix entrypoint.sh && \
25+
chmod +x entrypoint.sh
26+
2227
EXPOSE 5000 5001
2328
ENTRYPOINT ["/usr/src/app/entrypoint.sh"]

api/build.gradle

Lines changed: 83 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ import org.apache.tools.ant.filters.ReplaceTokens
1818
plugins {
1919
id 'maven-publish'
2020
id 'signing'
21+
id 'application'
22+
id 'com.github.johnrengelman.shadow'
2123
}
2224

2325
ext {
@@ -26,41 +28,90 @@ ext {
2628
testcontainersVersion = '1.19.8'
2729
sentryVersion = '6.34.0'
2830
}
29-
31+
configurations.all {
32+
resolutionStrategy {
33+
force 'com.google.guava:guava:32.1.3-jre'
34+
}
35+
}
3036
dependencies {
3137
implementation project(':clients:java')
3238
implementation "io.dropwizard:dropwizard-core:${dropwizardVersion}"
3339
implementation "io.dropwizard:dropwizard-jdbi3:${dropwizardVersion}"
3440
implementation "io.dropwizard:dropwizard-json-logging:${dropwizardVersion}"
3541
implementation "io.dropwizard:dropwizard-http2:${dropwizardVersion}"
3642
implementation "io.dropwizard:dropwizard-assets:${dropwizardVersion}"
37-
implementation "io.prometheus:simpleclient:${prometheusVersion}"
38-
implementation "io.openlineage:openlineage-java:${openlineageVersion}"
39-
implementation "io.prometheus:simpleclient_dropwizard:${prometheusVersion}"
40-
implementation "io.prometheus:simpleclient_hotspot:${prometheusVersion}"
41-
implementation "io.prometheus:simpleclient_servlet:${prometheusVersion}"
43+
44+
// Lombok
45+
compileOnly 'org.projectlombok:lombok:1.18.30'
46+
annotationProcessor 'org.projectlombok:lombok:1.18.30'
47+
48+
// Jakarta EE dependencies
49+
implementation platform("jakarta.platform:jakarta.jakartaee-bom:${jakartaVersion}")
50+
implementation "jakarta.platform:jakarta.jakartaee-api:${jakartaVersion}"
51+
implementation "jakarta.validation:jakarta.validation-api:${jakartaValidationVersion}"
52+
implementation 'jakarta.annotation:jakarta.annotation-api:2.1.1'
53+
implementation 'jakarta.transaction:jakarta.transaction-api:2.0.1'
54+
implementation 'jakarta.servlet:jakarta.servlet-api:5.0.0'
55+
implementation 'jakarta.ws.rs:jakarta.ws.rs-api:3.1.0'
56+
implementation 'jakarta.validation:jakarta.validation-api:3.0.2'
57+
implementation 'org.hibernate.validator:hibernate-validator:8.0.1.Final'
58+
implementation 'org.glassfish:jakarta.el:4.0.2'
59+
60+
// GraphQL dependencies with Jakarta EE 9 support
61+
implementation ("com.graphql-java:graphql-java:${graphqlJavaVersion}") {
62+
exclude group: 'com.google.guava', module: 'guava'
63+
}
64+
implementation ("com.graphql-java-kickstart:graphql-java-servlet:${graphqlServletVersion}") {
65+
exclude group: 'com.google.guava', module: 'guava'
66+
}
67+
implementation ("com.graphql-java-kickstart:graphql-java-kickstart:${graphqlServletVersion}") {
68+
exclude group: 'com.google.guava', module: 'guava'
69+
}
70+
71+
implementation "io.prometheus:simpleclient_servlet_jakarta:0.16.0"
72+
implementation "io.prometheus:simpleclient_common:0.16.0"
73+
implementation "io.prometheus:simpleclient_dropwizard:0.16.0"
74+
implementation "io.prometheus:simpleclient_hotspot:0.16.0"
75+
4276
implementation "org.jdbi:jdbi3-core:${jdbi3Version}"
4377
implementation "org.jdbi:jdbi3-jackson2:${jdbi3Version}"
4478
implementation "org.jdbi:jdbi3-postgres:${jdbi3Version}"
4579
implementation "org.jdbi:jdbi3-sqlobject:${jdbi3Version}"
80+
implementation "io.dropwizard.metrics:metrics-jdbi3:4.2.25"
4681
implementation 'com.google.guava:guava:32.1.3-jre'
4782
implementation 'org.dhatim:dropwizard-sentry:2.1.6'
4883
implementation "io.sentry:sentry:${sentryVersion}"
4984
implementation 'org.flywaydb:flyway-core:8.5.13'
5085
implementation "org.postgresql:postgresql:${postgresqlVersion}"
51-
implementation 'com.graphql-java:graphql-java:20.9'
52-
implementation 'com.graphql-java-kickstart:graphql-java-servlet:12.0.0'
86+
implementation "io.openlineage:openlineage-java:0.30.1"
87+
implementation 'org.apache.httpcomponents:httpclient:4.5.14'
5388

5489
implementation 'org.opensearch.client:opensearch-rest-client:2.19.1'
5590
implementation 'org.opensearch.client:opensearch-java:2.22.0'
5691

92+
testImplementation "io.dropwizard:dropwizard-core:${dropwizardVersion}"
93+
testImplementation "io.dropwizard:dropwizard-jdbi3:${dropwizardVersion}"
5794
testImplementation "io.dropwizard:dropwizard-testing:${dropwizardVersion}"
5895
testImplementation "org.jdbi:jdbi3-testing:${jdbi3Version}"
5996
testImplementation "org.jdbi:jdbi3-testcontainers:${jdbi3Version}"
6097
testImplementation "org.junit.vintage:junit-vintage-engine:${junit5Version}"
6198
testImplementation "org.testcontainers:postgresql:${testcontainersVersion}"
6299
testImplementation "org.testcontainers:junit-jupiter:${testcontainersVersion}"
63-
testImplementation 'org.apache.httpcomponents:httpclient:4.5.14'
100+
testImplementation "org.junit.jupiter:junit-jupiter-api:${junit5Version}"
101+
testImplementation "org.junit.jupiter:junit-jupiter-engine:${junit5Version}"
102+
testImplementation "org.junit.jupiter:junit-jupiter-params:${junit5Version}"
103+
testImplementation "org.testcontainers:testcontainers:${testcontainersVersion}"
104+
105+
// Add Jakarta EE dependencies for tests
106+
testImplementation platform("jakarta.platform:jakarta.jakartaee-bom:${jakartaVersion}")
107+
testImplementation "jakarta.platform:jakarta.jakartaee-api:${jakartaVersion}"
108+
testImplementation "jakarta.validation:jakarta.validation-api:${jakartaValidationVersion}"
109+
testImplementation 'jakarta.annotation:jakarta.annotation-api:2.1.1'
110+
testImplementation 'jakarta.transaction:jakarta.transaction-api:2.0.1'
111+
testImplementation 'jakarta.servlet:jakarta.servlet-api:5.0.0'
112+
testImplementation 'jakarta.ws.rs:jakarta.ws.rs-api:3.1.0'
113+
testImplementation 'jakarta.validation:jakarta.validation-api:3.0.2'
114+
testImplementation 'org.hibernate.validator:hibernate-validator:8.0.1.Final'
64115
}
65116

66117
task testUnit(type: Test) {
@@ -83,6 +134,11 @@ task testDataAccess(type: Test) {
83134

84135
test {
85136
useJUnitPlatform()
137+
testLogging {
138+
events "passed", "skipped", "failed"
139+
showStandardStreams = true
140+
exceptionFormat = 'full'
141+
}
86142
}
87143

88144
publishing {
@@ -158,6 +214,24 @@ shadowJar {
158214
from(projectDir) {
159215
include 'LICENSE'
160216
}
217+
mergeServiceFiles()
218+
// Include all dependencies by default
219+
exclude 'io/dropwizard/logback/shaded/guava/**'
220+
exclude 'META-INF/maven/com.google.guava/**' // Optional: only if you want zero guava metadata
221+
222+
dependencies {
223+
exclude { dep ->
224+
dep.moduleGroup == 'com.google.guava' &&
225+
(dep.moduleName == 'guava' && dep.moduleVersion == '31.0.1-jre')
226+
}
227+
//exclude(dependency('com.google.guava:guava'))
228+
// Exclude test dependencies
229+
exclude(dependency('org.junit:.*'))
230+
exclude(dependency('org.testcontainers:.*'))
231+
exclude(dependency('org.junit.jupiter:.*'))
232+
exclude(dependency('org.junit.vintage:.*'))
233+
exclude(dependency('com.google.guava:guava:31.0.1-jre'))
234+
}
161235
manifest {
162236
attributes(
163237
'Created-By': "Gradle ${gradle.gradleVersion}",

api/src/main/java/marquez/MarquezApp.java

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,22 @@
77

88
import com.codahale.metrics.jdbi3.InstrumentedSqlLogger;
99
import com.fasterxml.jackson.databind.SerializationFeature;
10-
import io.dropwizard.Application;
1110
import io.dropwizard.assets.AssetsBundle;
1211
import io.dropwizard.configuration.EnvironmentVariableSubstitutor;
1312
import io.dropwizard.configuration.SubstitutingSourceProvider;
13+
import io.dropwizard.core.Application;
14+
import io.dropwizard.core.setup.Bootstrap;
15+
import io.dropwizard.core.setup.Environment;
1416
import io.dropwizard.db.DataSourceFactory;
1517
import io.dropwizard.db.ManagedDataSource;
1618
import io.dropwizard.jdbi3.JdbiFactory;
17-
import io.dropwizard.setup.Bootstrap;
18-
import io.dropwizard.setup.Environment;
1919
import io.prometheus.client.CollectorRegistry;
2020
import io.prometheus.client.dropwizard.DropwizardExports;
21-
import io.prometheus.client.exporter.MetricsServlet;
2221
import io.prometheus.client.hotspot.DefaultExports;
22+
import io.prometheus.client.servlet.jakarta.exporter.MetricsServlet;
2323
import io.sentry.Sentry;
24+
import jakarta.servlet.DispatcherType;
2425
import java.util.EnumSet;
25-
import javax.servlet.DispatcherType;
2626
import lombok.NonNull;
2727
import lombok.extern.slf4j.Slf4j;
2828
import marquez.api.filter.JobRedirectFilter;
@@ -65,6 +65,12 @@ public final class MarquezApp extends Application<MarquezConfig> {
6565
private static final String PROMETHEUS_ENDPOINT = "/metrics";
6666
private static final String PROMETHEUS_ENDPOINT_V2 = "/v2beta/metrics";
6767

68+
private static Jdbi jdbiInstance; // Static reference for testing
69+
70+
public static Jdbi getJdbiInstanceForTesting() { // Static getter for testing
71+
return jdbiInstance;
72+
}
73+
6874
public static void main(final String[] args) throws Exception {
6975
new MarquezApp().run(args);
7076
}
@@ -76,20 +82,18 @@ public String getName() {
7682

7783
@Override
7884
public void initialize(@NonNull Bootstrap<MarquezConfig> bootstrap) {
79-
// Enable metric collection for prometheus.
85+
// Enable Prometheus metrics
8086
CollectorRegistry.defaultRegistry.register(
8187
new DropwizardExports(bootstrap.getMetricRegistry()));
8288
DatabaseMetrics.registry.register(new DropwizardExports(bootstrap.getMetricRegistry()));
83-
DefaultExports.initialize(); // Add metrics for CPU, JVM memory, etc.
89+
DefaultExports.initialize();
8490
DefaultExports.register(DatabaseMetrics.registry);
8591

86-
// Enable variable substitution with environment variables.
8792
bootstrap.setConfigurationSourceProvider(
8893
new SubstitutingSourceProvider(
8994
bootstrap.getConfigurationSourceProvider(),
9095
new EnvironmentVariableSubstitutor(ERROR_ON_UNDEFINED)));
9196

92-
// Add CLI commands
9397
bootstrap.addCommand(new DbMigrateCommand());
9498
bootstrap.addCommand(new DbRetentionCommand());
9599
bootstrap.addCommand(new MetadataCommand());
@@ -98,7 +102,6 @@ public void initialize(@NonNull Bootstrap<MarquezConfig> bootstrap) {
98102
bootstrap.getObjectMapper().disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
99103
Utils.addZonedDateTimeMixin(bootstrap.getObjectMapper());
100104

101-
// Add graphql playground
102105
bootstrap.addBundle(
103106
new AssetsBundle(
104107
"/assets",
@@ -118,8 +121,7 @@ public void run(@NonNull MarquezConfig config, @NonNull Environment env) {
118121
DbMigration.migrateDbOrError(config.getFlywayFactory(), source, config.isMigrateOnStartup());
119122
} catch (FlywayException errorOnDbMigrate) {
120123
log.info("Stopping app...");
121-
// Propagate throwable up the stack.
122-
onFatalError(errorOnDbMigrate); // Signal app termination.
124+
onFatalError(errorOnDbMigrate);
123125
}
124126

125127
if (isSentryEnabled(config)) {
@@ -138,6 +140,8 @@ public void run(@NonNull MarquezConfig config, @NonNull Environment env) {
138140
}
139141

140142
final Jdbi jdbi = newJdbi(config, env, source);
143+
jdbiInstance = jdbi; // Assign to static field
144+
141145
final MarquezContext marquezContext =
142146
MarquezContext.builder()
143147
.jdbi(jdbi)
@@ -149,16 +153,12 @@ public void run(@NonNull MarquezConfig config, @NonNull Environment env) {
149153
registerServlets(env);
150154
registerFilters(env, marquezContext);
151155

152-
// Add scheduled jobs to lifecycle.
153156
if (config.hasDbRetentionPolicy()) {
154-
// Add job to apply retention policy to database.
155157
env.lifecycle().manage(new DbRetentionJob(jdbi, config.getDbRetention()));
156158
}
157159

158-
// Add job to refresh materialized views.
159160
env.lifecycle().manage(new MaterializeViewRefresherJob(jdbi));
160161

161-
// set namespaceFilter
162162
ExclusionsConfig exclusions = config.getExclude();
163163
Exclusions.use(exclusions);
164164
}
@@ -168,7 +168,6 @@ private boolean isSentryEnabled(MarquezConfig config) {
168168
&& !config.getSentry().getDsn().equals(SentryConfig.DEFAULT_DSN);
169169
}
170170

171-
/** Returns a new {@link Jdbi} object. */
172171
private Jdbi newJdbi(
173172
@NonNull MarquezConfig config, @NonNull Environment env, @NonNull ManagedDataSource source) {
174173
final JdbiFactory factory = new JdbiFactory();
@@ -197,6 +196,9 @@ public void registerResources(
197196
.addMapping("/api/v1-beta/graphql", "/api/v1/schema.json");
198197
}
199198

199+
// Prometheus metrics endpoint
200+
env.servlets().addServlet(PROMETHEUS, new MetricsServlet()).addMapping(PROMETHEUS_ENDPOINT);
201+
200202
log.debug("Registering resources...");
201203
for (final Object resource : context.getResources()) {
202204
env.jersey().register(resource);
@@ -205,9 +207,6 @@ public void registerResources(
205207

206208
private void registerServlets(@NonNull Environment env) {
207209
log.debug("Registering servlets...");
208-
209-
// Expose metrics for monitoring.
210-
env.servlets().addServlet(PROMETHEUS, new MetricsServlet()).addMapping(PROMETHEUS_ENDPOINT);
211210
env.servlets()
212211
.addServlet(PROMETHEUS_V2, new MetricsServlet(DatabaseMetrics.registry))
213212
.addMapping(PROMETHEUS_ENDPOINT_V2);

api/src/main/java/marquez/MarquezConfig.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import com.fasterxml.jackson.annotation.JsonProperty;
99
import com.google.common.collect.ImmutableSet;
10-
import io.dropwizard.Configuration;
10+
import io.dropwizard.core.Configuration;
1111
import io.dropwizard.db.DataSourceFactory;
1212
import lombok.Getter;
1313
import lombok.NoArgsConstructor;

api/src/main/java/marquez/MarquezContext.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import com.google.common.collect.ImmutableList;
99
import com.google.common.collect.ImmutableSet;
1010
import com.google.common.collect.Lists;
11-
import graphql.kickstart.servlet.GraphQLHttpServlet;
1211
import java.util.ArrayList;
1312
import java.util.List;
1413
import lombok.Getter;
@@ -110,7 +109,7 @@ public final class MarquezContext {
110109
@Getter private final ImmutableList<Object> resources;
111110
@Getter private final JdbiExceptionExceptionMapper jdbiException;
112111
@Getter private final JsonProcessingExceptionMapper jsonException;
113-
@Getter private final GraphQLHttpServlet graphqlServlet;
112+
@Getter private final jakarta.servlet.Servlet graphqlServlet;
114113
@Getter private final SearchConfig searchConfig;
115114

116115
private MarquezContext(

api/src/main/java/marquez/api/BaseResource.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@
66
package marquez.api;
77

88
import com.google.common.collect.ImmutableSet;
9+
import jakarta.annotation.Nullable;
10+
import jakarta.ws.rs.core.UriInfo;
911
import java.net.URI;
1012
import java.util.Optional;
11-
import javax.annotation.Nullable;
12-
import javax.ws.rs.core.UriInfo;
1313
import lombok.NonNull;
1414
import marquez.api.exceptions.DatasetNotFoundException;
1515
import marquez.api.exceptions.FieldNotFoundException;

0 commit comments

Comments
 (0)