From aafe11847df23cdbcc1172f3e8cfad14cb878d87 Mon Sep 17 00:00:00 2001 From: Weimin Yu Date: Mon, 22 Feb 2021 18:11:32 -0500 Subject: [PATCH] Properly set up JPA in BEAM workers (#965) * Properly set up JPA in BEAM workers Sets up a singleton JpaTransactionManger on each worker JVM for all pipeline nodes to share. Also added/updated relevant dependencies. The BEAM SDK version change caused the InitSqlPipeline's graph to change. --- .../annotationProcessor.lockfile | 2 +- .../gradle/dependency-locks/compile.lockfile | 4 +- .../compileClasspath.lockfile | 4 +- .../dependency-locks/deploy_jar.lockfile | 4 +- .../gradle/dependency-locks/runtime.lockfile | 4 +- .../runtimeClasspath.lockfile | 4 +- .../dependency-locks/testCompile.lockfile | 4 +- .../testCompileClasspath.lockfile | 4 +- .../dependency-locks/testRuntime.lockfile | 4 +- .../testRuntimeClasspath.lockfile | 4 +- .../gradle/dependency-locks/compile.lockfile | 2 +- .../compileClasspath.lockfile | 2 +- .../gradle/dependency-locks/default.lockfile | 2 +- .../dependency-locks/deploy_jar.lockfile | 2 +- .../gradle/dependency-locks/runtime.lockfile | 2 +- .../runtimeClasspath.lockfile | 2 +- .../dependency-locks/testCompile.lockfile | 2 +- .../testCompileClasspath.lockfile | 2 +- .../dependency-locks/testRuntime.lockfile | 2 +- .../testRuntimeClasspath.lockfile | 2 +- .../dependency-locks/testingCompile.lockfile | 2 +- .../testingCompileClasspath.lockfile | 2 +- .../dependency-locks/testingRuntime.lockfile | 2 +- .../testingRuntimeClasspath.lockfile | 2 +- .../dependency-license/allowed_licenses.json | 13 + core/build.gradle | 13 +- .../annotationProcessor.lockfile | 6 +- core/gradle/dependency-locks/compile.lockfile | 220 +- .../compileClasspath.lockfile | 215 +- core/gradle/dependency-locks/default.lockfile | 220 +- .../dependency-locks/deploy_jar.lockfile | 217 +- .../dependency-locks/nonprodCompile.lockfile | 220 +- .../nonprodCompileClasspath.lockfile | 218 +- .../dependency-locks/nonprodRuntime.lockfile | 220 +- .../nonprodRuntimeClasspath.lockfile | 220 +- core/gradle/dependency-locks/runtime.lockfile | 220 +- .../runtimeClasspath.lockfile | 217 +- .../testAnnotationProcessor.lockfile | 4 +- .../dependency-locks/testCompile.lockfile | 226 +- .../testCompileClasspath.lockfile | 224 +- .../dependency-locks/testRuntime.lockfile | 226 +- .../testRuntimeClasspath.lockfile | 226 +- .../registry/beam/common/JpaDemoPipeline.java | 81 + .../common/RegistryPipelineComponent.java | 47 + .../beam/common/RegistryPipelineOptions.java | 58 + .../RegistryPipelineWorkerInitializer.java | 49 + .../persistence/PersistenceModule.java | 58 + .../TransactionManagerFactory.java | 10 + .../common/RegistryPipelineOptionsTest.java | 112 + .../registry/beam/initsql/pipeline_golden.dot | 2798 +++++++++-------- .../registry/beam/initsql/pipeline_golden.png | Bin 1166016 -> 1176169 bytes .../dependency-locks/testCompile.lockfile | 2 +- .../testCompileClasspath.lockfile | 2 +- .../dependency-locks/testRuntime.lockfile | 2 +- .../testRuntimeClasspath.lockfile | 2 +- dependencies.gradle | 32 +- docs/gradle/dependency-locks/compile.lockfile | 220 +- .../compileClasspath.lockfile | 215 +- docs/gradle/dependency-locks/default.lockfile | 220 +- .../dependency-locks/deploy_jar.lockfile | 217 +- docs/gradle/dependency-locks/runtime.lockfile | 220 +- .../runtimeClasspath.lockfile | 217 +- .../dependency-locks/testCompile.lockfile | 220 +- .../testCompileClasspath.lockfile | 218 +- .../dependency-locks/testRuntime.lockfile | 220 +- .../testRuntimeClasspath.lockfile | 220 +- .../gradle/dependency-locks/compile.lockfile | 6 +- .../compileClasspath.lockfile | 6 +- .../gradle/dependency-locks/default.lockfile | 6 +- .../dependency-locks/deploy_jar.lockfile | 6 +- .../gradle/dependency-locks/runtime.lockfile | 6 +- .../runtimeClasspath.lockfile | 6 +- .../dependency-locks/testCompile.lockfile | 6 +- .../testCompileClasspath.lockfile | 6 +- .../dependency-locks/testRuntime.lockfile | 6 +- .../testRuntimeClasspath.lockfile | 6 +- .../annotationProcessor.lockfile | 2 +- .../gradle/dependency-locks/compile.lockfile | 6 +- .../compileClasspath.lockfile | 6 +- .../gradle/dependency-locks/default.lockfile | 6 +- .../dependency-locks/deploy_jar.lockfile | 6 +- .../gradle/dependency-locks/runtime.lockfile | 6 +- .../runtimeClasspath.lockfile | 6 +- .../testAnnotationProcessor.lockfile | 2 +- .../dependency-locks/testCompile.lockfile | 6 +- .../testCompileClasspath.lockfile | 6 +- .../dependency-locks/testRuntime.lockfile | 6 +- .../testRuntimeClasspath.lockfile | 6 +- .../gradle/dependency-locks/compile.lockfile | 2 +- .../compileClasspath.lockfile | 2 +- .../gradle/dependency-locks/default.lockfile | 2 +- .../dependency-locks/deploy_jar.lockfile | 2 +- .../gradle/dependency-locks/runtime.lockfile | 2 +- .../runtimeClasspath.lockfile | 2 +- .../dependency-locks/testCompile.lockfile | 2 +- .../testCompileClasspath.lockfile | 2 +- .../dependency-locks/testRuntime.lockfile | 2 +- .../testRuntimeClasspath.lockfile | 2 +- .../annotationProcessor.lockfile | 2 +- .../gradle/dependency-locks/compile.lockfile | 6 +- .../compileClasspath.lockfile | 6 +- .../gradle/dependency-locks/default.lockfile | 6 +- .../dependency-locks/deploy_jar.lockfile | 6 +- .../gradle/dependency-locks/runtime.lockfile | 6 +- .../runtimeClasspath.lockfile | 6 +- .../testAnnotationProcessor.lockfile | 2 +- .../dependency-locks/testCompile.lockfile | 6 +- .../testCompileClasspath.lockfile | 6 +- .../dependency-locks/testRuntime.lockfile | 6 +- .../testRuntimeClasspath.lockfile | 6 +- .../gradle/dependency-locks/compile.lockfile | 217 +- .../compileClasspath.lockfile | 215 +- .../gradle/dependency-locks/default.lockfile | 217 +- .../gradle/dependency-locks/runtime.lockfile | 217 +- .../runtimeClasspath.lockfile | 217 +- .../dependency-locks/testCompile.lockfile | 217 +- .../testCompileClasspath.lockfile | 215 +- .../dependency-locks/testRuntime.lockfile | 217 +- .../testRuntimeClasspath.lockfile | 217 +- .../gradle/dependency-locks/compile.lockfile | 217 +- .../compileClasspath.lockfile | 215 +- .../gradle/dependency-locks/default.lockfile | 217 +- .../gradle/dependency-locks/runtime.lockfile | 217 +- .../runtimeClasspath.lockfile | 217 +- .../dependency-locks/testCompile.lockfile | 217 +- .../testCompileClasspath.lockfile | 215 +- .../dependency-locks/testRuntime.lockfile | 217 +- .../testRuntimeClasspath.lockfile | 217 +- .../gradle/dependency-locks/compile.lockfile | 217 +- .../compileClasspath.lockfile | 215 +- .../gradle/dependency-locks/default.lockfile | 217 +- .../gradle/dependency-locks/runtime.lockfile | 217 +- .../runtimeClasspath.lockfile | 217 +- .../dependency-locks/testCompile.lockfile | 217 +- .../testCompileClasspath.lockfile | 215 +- .../dependency-locks/testRuntime.lockfile | 217 +- .../testRuntimeClasspath.lockfile | 217 +- .../gradle/dependency-locks/compile.lockfile | 217 +- .../compileClasspath.lockfile | 215 +- .../gradle/dependency-locks/default.lockfile | 217 +- .../gradle/dependency-locks/runtime.lockfile | 217 +- .../runtimeClasspath.lockfile | 217 +- .../dependency-locks/testCompile.lockfile | 217 +- .../testCompileClasspath.lockfile | 215 +- .../dependency-locks/testRuntime.lockfile | 217 +- .../testRuntimeClasspath.lockfile | 217 +- util/build.gradle | 2 +- .../annotationProcessor.lockfile | 2 +- util/gradle/dependency-locks/compile.lockfile | 4 +- .../compileClasspath.lockfile | 4 +- util/gradle/dependency-locks/default.lockfile | 6 +- .../dependency-locks/deploy_jar.lockfile | 6 +- util/gradle/dependency-locks/runtime.lockfile | 6 +- .../runtimeClasspath.lockfile | 6 +- .../testAnnotationProcessor.lockfile | 2 +- .../dependency-locks/testCompile.lockfile | 10 +- .../testCompileClasspath.lockfile | 10 +- .../dependency-locks/testRuntime.lockfile | 12 +- .../testRuntimeClasspath.lockfile | 12 +- 159 files changed, 8896 insertions(+), 7821 deletions(-) create mode 100644 core/src/main/java/google/registry/beam/common/JpaDemoPipeline.java create mode 100644 core/src/main/java/google/registry/beam/common/RegistryPipelineComponent.java create mode 100644 core/src/main/java/google/registry/beam/common/RegistryPipelineOptions.java create mode 100644 core/src/main/java/google/registry/beam/common/RegistryPipelineWorkerInitializer.java create mode 100644 core/src/test/java/google/registry/beam/common/RegistryPipelineOptionsTest.java diff --git a/buildSrc/gradle/dependency-locks/annotationProcessor.lockfile b/buildSrc/gradle/dependency-locks/annotationProcessor.lockfile index 2340862c6..08bc4ff64 100644 --- a/buildSrc/gradle/dependency-locks/annotationProcessor.lockfile +++ b/buildSrc/gradle/dependency-locks/annotationProcessor.lockfile @@ -3,7 +3,7 @@ # This file is expected to be part of source control. com.github.ben-manes.caffeine:caffeine:2.7.0 com.github.kevinstern:software-and-algorithms:1.0 -com.google.auto.value:auto-value:1.6.3 +com.google.auto.value:auto-value:1.7.4 com.google.auto:auto-common:0.10 com.google.code.findbugs:jFormatString:3.0.0 com.google.code.findbugs:jsr305:3.0.2 diff --git a/buildSrc/gradle/dependency-locks/compile.lockfile b/buildSrc/gradle/dependency-locks/compile.lockfile index 8842630fc..3580b7a09 100644 --- a/buildSrc/gradle/dependency-locks/compile.lockfile +++ b/buildSrc/gradle/dependency-locks/compile.lockfile @@ -13,7 +13,7 @@ com.google.api:gax:1.35.1 com.google.apis:google-api-services-storage:v1-rev20181013-1.27.0 com.google.auth:google-auth-library-credentials:0.16.1 com.google.auth:google-auth-library-oauth2-http:0.16.1 -com.google.auto.value:auto-value-annotations:1.6.3 +com.google.auto.value:auto-value-annotations:1.7.4 com.google.cloud:google-cloud-core-http:1.59.0 com.google.cloud:google-cloud-core:1.59.0 com.google.cloud:google-cloud-storage:1.59.0 @@ -22,7 +22,7 @@ com.google.code.gson:gson:2.7 com.google.common.html.types:types:1.0.4 com.google.errorprone:error_prone_annotations:2.3.4 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava:30.0-jre +com.google.guava:guava:30.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.gwt:gwt-user:2.8.0-beta1 com.google.http-client:google-http-client-appengine:1.27.0 diff --git a/buildSrc/gradle/dependency-locks/compileClasspath.lockfile b/buildSrc/gradle/dependency-locks/compileClasspath.lockfile index 8842630fc..3580b7a09 100644 --- a/buildSrc/gradle/dependency-locks/compileClasspath.lockfile +++ b/buildSrc/gradle/dependency-locks/compileClasspath.lockfile @@ -13,7 +13,7 @@ com.google.api:gax:1.35.1 com.google.apis:google-api-services-storage:v1-rev20181013-1.27.0 com.google.auth:google-auth-library-credentials:0.16.1 com.google.auth:google-auth-library-oauth2-http:0.16.1 -com.google.auto.value:auto-value-annotations:1.6.3 +com.google.auto.value:auto-value-annotations:1.7.4 com.google.cloud:google-cloud-core-http:1.59.0 com.google.cloud:google-cloud-core:1.59.0 com.google.cloud:google-cloud-storage:1.59.0 @@ -22,7 +22,7 @@ com.google.code.gson:gson:2.7 com.google.common.html.types:types:1.0.4 com.google.errorprone:error_prone_annotations:2.3.4 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava:30.0-jre +com.google.guava:guava:30.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.gwt:gwt-user:2.8.0-beta1 com.google.http-client:google-http-client-appengine:1.27.0 diff --git a/buildSrc/gradle/dependency-locks/deploy_jar.lockfile b/buildSrc/gradle/dependency-locks/deploy_jar.lockfile index 8842630fc..3580b7a09 100644 --- a/buildSrc/gradle/dependency-locks/deploy_jar.lockfile +++ b/buildSrc/gradle/dependency-locks/deploy_jar.lockfile @@ -13,7 +13,7 @@ com.google.api:gax:1.35.1 com.google.apis:google-api-services-storage:v1-rev20181013-1.27.0 com.google.auth:google-auth-library-credentials:0.16.1 com.google.auth:google-auth-library-oauth2-http:0.16.1 -com.google.auto.value:auto-value-annotations:1.6.3 +com.google.auto.value:auto-value-annotations:1.7.4 com.google.cloud:google-cloud-core-http:1.59.0 com.google.cloud:google-cloud-core:1.59.0 com.google.cloud:google-cloud-storage:1.59.0 @@ -22,7 +22,7 @@ com.google.code.gson:gson:2.7 com.google.common.html.types:types:1.0.4 com.google.errorprone:error_prone_annotations:2.3.4 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava:30.0-jre +com.google.guava:guava:30.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.gwt:gwt-user:2.8.0-beta1 com.google.http-client:google-http-client-appengine:1.27.0 diff --git a/buildSrc/gradle/dependency-locks/runtime.lockfile b/buildSrc/gradle/dependency-locks/runtime.lockfile index 8842630fc..3580b7a09 100644 --- a/buildSrc/gradle/dependency-locks/runtime.lockfile +++ b/buildSrc/gradle/dependency-locks/runtime.lockfile @@ -13,7 +13,7 @@ com.google.api:gax:1.35.1 com.google.apis:google-api-services-storage:v1-rev20181013-1.27.0 com.google.auth:google-auth-library-credentials:0.16.1 com.google.auth:google-auth-library-oauth2-http:0.16.1 -com.google.auto.value:auto-value-annotations:1.6.3 +com.google.auto.value:auto-value-annotations:1.7.4 com.google.cloud:google-cloud-core-http:1.59.0 com.google.cloud:google-cloud-core:1.59.0 com.google.cloud:google-cloud-storage:1.59.0 @@ -22,7 +22,7 @@ com.google.code.gson:gson:2.7 com.google.common.html.types:types:1.0.4 com.google.errorprone:error_prone_annotations:2.3.4 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava:30.0-jre +com.google.guava:guava:30.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.gwt:gwt-user:2.8.0-beta1 com.google.http-client:google-http-client-appengine:1.27.0 diff --git a/buildSrc/gradle/dependency-locks/runtimeClasspath.lockfile b/buildSrc/gradle/dependency-locks/runtimeClasspath.lockfile index 8842630fc..3580b7a09 100644 --- a/buildSrc/gradle/dependency-locks/runtimeClasspath.lockfile +++ b/buildSrc/gradle/dependency-locks/runtimeClasspath.lockfile @@ -13,7 +13,7 @@ com.google.api:gax:1.35.1 com.google.apis:google-api-services-storage:v1-rev20181013-1.27.0 com.google.auth:google-auth-library-credentials:0.16.1 com.google.auth:google-auth-library-oauth2-http:0.16.1 -com.google.auto.value:auto-value-annotations:1.6.3 +com.google.auto.value:auto-value-annotations:1.7.4 com.google.cloud:google-cloud-core-http:1.59.0 com.google.cloud:google-cloud-core:1.59.0 com.google.cloud:google-cloud-storage:1.59.0 @@ -22,7 +22,7 @@ com.google.code.gson:gson:2.7 com.google.common.html.types:types:1.0.4 com.google.errorprone:error_prone_annotations:2.3.4 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava:30.0-jre +com.google.guava:guava:30.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.gwt:gwt-user:2.8.0-beta1 com.google.http-client:google-http-client-appengine:1.27.0 diff --git a/buildSrc/gradle/dependency-locks/testCompile.lockfile b/buildSrc/gradle/dependency-locks/testCompile.lockfile index f0984e134..692f1b701 100644 --- a/buildSrc/gradle/dependency-locks/testCompile.lockfile +++ b/buildSrc/gradle/dependency-locks/testCompile.lockfile @@ -13,7 +13,7 @@ com.google.api:gax:1.35.1 com.google.apis:google-api-services-storage:v1-rev20181013-1.27.0 com.google.auth:google-auth-library-credentials:0.16.1 com.google.auth:google-auth-library-oauth2-http:0.16.1 -com.google.auto.value:auto-value-annotations:1.6.3 +com.google.auto.value:auto-value-annotations:1.7.4 com.google.cloud:google-cloud-core-http:1.59.0 com.google.cloud:google-cloud-core:1.59.0 com.google.cloud:google-cloud-storage:1.59.0 @@ -22,7 +22,7 @@ com.google.code.gson:gson:2.7 com.google.common.html.types:types:1.0.4 com.google.errorprone:error_prone_annotations:2.3.4 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava:30.0-jre +com.google.guava:guava:30.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.gwt:gwt-user:2.8.0-beta1 com.google.http-client:google-http-client-appengine:1.27.0 diff --git a/buildSrc/gradle/dependency-locks/testCompileClasspath.lockfile b/buildSrc/gradle/dependency-locks/testCompileClasspath.lockfile index f0984e134..692f1b701 100644 --- a/buildSrc/gradle/dependency-locks/testCompileClasspath.lockfile +++ b/buildSrc/gradle/dependency-locks/testCompileClasspath.lockfile @@ -13,7 +13,7 @@ com.google.api:gax:1.35.1 com.google.apis:google-api-services-storage:v1-rev20181013-1.27.0 com.google.auth:google-auth-library-credentials:0.16.1 com.google.auth:google-auth-library-oauth2-http:0.16.1 -com.google.auto.value:auto-value-annotations:1.6.3 +com.google.auto.value:auto-value-annotations:1.7.4 com.google.cloud:google-cloud-core-http:1.59.0 com.google.cloud:google-cloud-core:1.59.0 com.google.cloud:google-cloud-storage:1.59.0 @@ -22,7 +22,7 @@ com.google.code.gson:gson:2.7 com.google.common.html.types:types:1.0.4 com.google.errorprone:error_prone_annotations:2.3.4 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava:30.0-jre +com.google.guava:guava:30.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.gwt:gwt-user:2.8.0-beta1 com.google.http-client:google-http-client-appengine:1.27.0 diff --git a/buildSrc/gradle/dependency-locks/testRuntime.lockfile b/buildSrc/gradle/dependency-locks/testRuntime.lockfile index f0984e134..692f1b701 100644 --- a/buildSrc/gradle/dependency-locks/testRuntime.lockfile +++ b/buildSrc/gradle/dependency-locks/testRuntime.lockfile @@ -13,7 +13,7 @@ com.google.api:gax:1.35.1 com.google.apis:google-api-services-storage:v1-rev20181013-1.27.0 com.google.auth:google-auth-library-credentials:0.16.1 com.google.auth:google-auth-library-oauth2-http:0.16.1 -com.google.auto.value:auto-value-annotations:1.6.3 +com.google.auto.value:auto-value-annotations:1.7.4 com.google.cloud:google-cloud-core-http:1.59.0 com.google.cloud:google-cloud-core:1.59.0 com.google.cloud:google-cloud-storage:1.59.0 @@ -22,7 +22,7 @@ com.google.code.gson:gson:2.7 com.google.common.html.types:types:1.0.4 com.google.errorprone:error_prone_annotations:2.3.4 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava:30.0-jre +com.google.guava:guava:30.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.gwt:gwt-user:2.8.0-beta1 com.google.http-client:google-http-client-appengine:1.27.0 diff --git a/buildSrc/gradle/dependency-locks/testRuntimeClasspath.lockfile b/buildSrc/gradle/dependency-locks/testRuntimeClasspath.lockfile index f0984e134..692f1b701 100644 --- a/buildSrc/gradle/dependency-locks/testRuntimeClasspath.lockfile +++ b/buildSrc/gradle/dependency-locks/testRuntimeClasspath.lockfile @@ -13,7 +13,7 @@ com.google.api:gax:1.35.1 com.google.apis:google-api-services-storage:v1-rev20181013-1.27.0 com.google.auth:google-auth-library-credentials:0.16.1 com.google.auth:google-auth-library-oauth2-http:0.16.1 -com.google.auto.value:auto-value-annotations:1.6.3 +com.google.auto.value:auto-value-annotations:1.7.4 com.google.cloud:google-cloud-core-http:1.59.0 com.google.cloud:google-cloud-core:1.59.0 com.google.cloud:google-cloud-storage:1.59.0 @@ -22,7 +22,7 @@ com.google.code.gson:gson:2.7 com.google.common.html.types:types:1.0.4 com.google.errorprone:error_prone_annotations:2.3.4 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava:30.0-jre +com.google.guava:guava:30.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.gwt:gwt-user:2.8.0-beta1 com.google.http-client:google-http-client-appengine:1.27.0 diff --git a/common/gradle/dependency-locks/compile.lockfile b/common/gradle/dependency-locks/compile.lockfile index 2f1fbdd66..90fc663bc 100644 --- a/common/gradle/dependency-locks/compile.lockfile +++ b/common/gradle/dependency-locks/compile.lockfile @@ -4,7 +4,7 @@ com.google.code.findbugs:jsr305:3.0.2 com.google.errorprone:error_prone_annotations:2.3.4 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava:30.0-jre +com.google.guava:guava:30.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.j2objc:j2objc-annotations:1.3 javax.inject:javax.inject:1 diff --git a/common/gradle/dependency-locks/compileClasspath.lockfile b/common/gradle/dependency-locks/compileClasspath.lockfile index 2f1fbdd66..90fc663bc 100644 --- a/common/gradle/dependency-locks/compileClasspath.lockfile +++ b/common/gradle/dependency-locks/compileClasspath.lockfile @@ -4,7 +4,7 @@ com.google.code.findbugs:jsr305:3.0.2 com.google.errorprone:error_prone_annotations:2.3.4 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava:30.0-jre +com.google.guava:guava:30.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.j2objc:j2objc-annotations:1.3 javax.inject:javax.inject:1 diff --git a/common/gradle/dependency-locks/default.lockfile b/common/gradle/dependency-locks/default.lockfile index 2f1fbdd66..90fc663bc 100644 --- a/common/gradle/dependency-locks/default.lockfile +++ b/common/gradle/dependency-locks/default.lockfile @@ -4,7 +4,7 @@ com.google.code.findbugs:jsr305:3.0.2 com.google.errorprone:error_prone_annotations:2.3.4 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava:30.0-jre +com.google.guava:guava:30.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.j2objc:j2objc-annotations:1.3 javax.inject:javax.inject:1 diff --git a/common/gradle/dependency-locks/deploy_jar.lockfile b/common/gradle/dependency-locks/deploy_jar.lockfile index 2f1fbdd66..90fc663bc 100644 --- a/common/gradle/dependency-locks/deploy_jar.lockfile +++ b/common/gradle/dependency-locks/deploy_jar.lockfile @@ -4,7 +4,7 @@ com.google.code.findbugs:jsr305:3.0.2 com.google.errorprone:error_prone_annotations:2.3.4 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava:30.0-jre +com.google.guava:guava:30.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.j2objc:j2objc-annotations:1.3 javax.inject:javax.inject:1 diff --git a/common/gradle/dependency-locks/runtime.lockfile b/common/gradle/dependency-locks/runtime.lockfile index 2f1fbdd66..90fc663bc 100644 --- a/common/gradle/dependency-locks/runtime.lockfile +++ b/common/gradle/dependency-locks/runtime.lockfile @@ -4,7 +4,7 @@ com.google.code.findbugs:jsr305:3.0.2 com.google.errorprone:error_prone_annotations:2.3.4 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava:30.0-jre +com.google.guava:guava:30.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.j2objc:j2objc-annotations:1.3 javax.inject:javax.inject:1 diff --git a/common/gradle/dependency-locks/runtimeClasspath.lockfile b/common/gradle/dependency-locks/runtimeClasspath.lockfile index 2f1fbdd66..90fc663bc 100644 --- a/common/gradle/dependency-locks/runtimeClasspath.lockfile +++ b/common/gradle/dependency-locks/runtimeClasspath.lockfile @@ -4,7 +4,7 @@ com.google.code.findbugs:jsr305:3.0.2 com.google.errorprone:error_prone_annotations:2.3.4 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava:30.0-jre +com.google.guava:guava:30.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.j2objc:j2objc-annotations:1.3 javax.inject:javax.inject:1 diff --git a/common/gradle/dependency-locks/testCompile.lockfile b/common/gradle/dependency-locks/testCompile.lockfile index 8bccddf75..e6aa35323 100644 --- a/common/gradle/dependency-locks/testCompile.lockfile +++ b/common/gradle/dependency-locks/testCompile.lockfile @@ -6,7 +6,7 @@ com.google.code.findbugs:jsr305:3.0.2 com.google.errorprone:error_prone_annotations:2.3.4 com.google.flogger:flogger:0.1 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava:30.0-jre +com.google.guava:guava:30.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.j2objc:j2objc-annotations:1.3 com.google.truth:truth:1.0 diff --git a/common/gradle/dependency-locks/testCompileClasspath.lockfile b/common/gradle/dependency-locks/testCompileClasspath.lockfile index 8bccddf75..e6aa35323 100644 --- a/common/gradle/dependency-locks/testCompileClasspath.lockfile +++ b/common/gradle/dependency-locks/testCompileClasspath.lockfile @@ -6,7 +6,7 @@ com.google.code.findbugs:jsr305:3.0.2 com.google.errorprone:error_prone_annotations:2.3.4 com.google.flogger:flogger:0.1 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava:30.0-jre +com.google.guava:guava:30.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.j2objc:j2objc-annotations:1.3 com.google.truth:truth:1.0 diff --git a/common/gradle/dependency-locks/testRuntime.lockfile b/common/gradle/dependency-locks/testRuntime.lockfile index 66e71cd19..7a7e45f5d 100644 --- a/common/gradle/dependency-locks/testRuntime.lockfile +++ b/common/gradle/dependency-locks/testRuntime.lockfile @@ -7,7 +7,7 @@ com.google.errorprone:error_prone_annotations:2.3.4 com.google.flogger:flogger-system-backend:0.1 com.google.flogger:flogger:0.1 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava:30.0-jre +com.google.guava:guava:30.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.j2objc:j2objc-annotations:1.3 com.google.truth:truth:1.0 diff --git a/common/gradle/dependency-locks/testRuntimeClasspath.lockfile b/common/gradle/dependency-locks/testRuntimeClasspath.lockfile index 66e71cd19..7a7e45f5d 100644 --- a/common/gradle/dependency-locks/testRuntimeClasspath.lockfile +++ b/common/gradle/dependency-locks/testRuntimeClasspath.lockfile @@ -7,7 +7,7 @@ com.google.errorprone:error_prone_annotations:2.3.4 com.google.flogger:flogger-system-backend:0.1 com.google.flogger:flogger:0.1 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava:30.0-jre +com.google.guava:guava:30.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.j2objc:j2objc-annotations:1.3 com.google.truth:truth:1.0 diff --git a/common/gradle/dependency-locks/testingCompile.lockfile b/common/gradle/dependency-locks/testingCompile.lockfile index 85b7f829e..dfcd976a3 100644 --- a/common/gradle/dependency-locks/testingCompile.lockfile +++ b/common/gradle/dependency-locks/testingCompile.lockfile @@ -6,7 +6,7 @@ com.google.code.findbugs:jsr305:3.0.2 com.google.errorprone:error_prone_annotations:2.3.4 com.google.flogger:flogger:0.1 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava:30.0-jre +com.google.guava:guava:30.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.j2objc:j2objc-annotations:1.3 com.google.truth:truth:1.0 diff --git a/common/gradle/dependency-locks/testingCompileClasspath.lockfile b/common/gradle/dependency-locks/testingCompileClasspath.lockfile index 85b7f829e..dfcd976a3 100644 --- a/common/gradle/dependency-locks/testingCompileClasspath.lockfile +++ b/common/gradle/dependency-locks/testingCompileClasspath.lockfile @@ -6,7 +6,7 @@ com.google.code.findbugs:jsr305:3.0.2 com.google.errorprone:error_prone_annotations:2.3.4 com.google.flogger:flogger:0.1 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava:30.0-jre +com.google.guava:guava:30.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.j2objc:j2objc-annotations:1.3 com.google.truth:truth:1.0 diff --git a/common/gradle/dependency-locks/testingRuntime.lockfile b/common/gradle/dependency-locks/testingRuntime.lockfile index 1905a2403..b0e2621c7 100644 --- a/common/gradle/dependency-locks/testingRuntime.lockfile +++ b/common/gradle/dependency-locks/testingRuntime.lockfile @@ -7,7 +7,7 @@ com.google.errorprone:error_prone_annotations:2.3.4 com.google.flogger:flogger-system-backend:0.1 com.google.flogger:flogger:0.1 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava:30.0-jre +com.google.guava:guava:30.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.j2objc:j2objc-annotations:1.3 com.google.truth:truth:1.0 diff --git a/common/gradle/dependency-locks/testingRuntimeClasspath.lockfile b/common/gradle/dependency-locks/testingRuntimeClasspath.lockfile index 1905a2403..b0e2621c7 100644 --- a/common/gradle/dependency-locks/testingRuntimeClasspath.lockfile +++ b/common/gradle/dependency-locks/testingRuntimeClasspath.lockfile @@ -7,7 +7,7 @@ com.google.errorprone:error_prone_annotations:2.3.4 com.google.flogger:flogger-system-backend:0.1 com.google.flogger:flogger:0.1 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava:30.0-jre +com.google.guava:guava:30.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.j2objc:j2objc-annotations:1.3 com.google.truth:truth:1.0 diff --git a/config/dependency-license/allowed_licenses.json b/config/dependency-license/allowed_licenses.json index 292e7d6c0..6c1ff65a4 100644 --- a/config/dependency-license/allowed_licenses.json +++ b/config/dependency-license/allowed_licenses.json @@ -72,9 +72,15 @@ { "moduleLicense": "The 3-Clause BSD License" }, + { + "moduleLicense": "BSD Licence 3" + }, { "moduleLicense": "BSD License" }, + { + "moduleLicense": "BSD License 3" + }, { "moduleLicense": "BSD New License" }, @@ -230,6 +236,13 @@ "moduleLicense": "Public Domain", "moduleName": "org.tukaani:xz" }, + { + // "Apache License, Version 2.0". The plugin is able to parse + // 2.11.3 correctly but not this version. + "moduleLicense": null, + "moduleVersion": "2.12.1", + "moduleName": "com.fasterxml.jackson:jackson-bom" + }, { // Actually Eclipse Public License v2.0 "moduleLicense": null, diff --git a/core/build.gradle b/core/build.gradle index d53dc0b2d..0985d71f0 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -204,6 +204,7 @@ dependencies { runtimeOnly deps['com.google.cloud.sql:postgres-socket-factory'] compile deps['com.google.cloud:google-cloud-secretmanager'] compile deps['com.google.code.gson:gson'] + compile deps['com.google.auto.service:auto-service-annotations'] compile deps['com.google.auto.value:auto-value-annotations'] compile deps['com.google.code.findbugs:jsr305'] compile deps['com.google.dagger:dagger'] @@ -300,11 +301,7 @@ dependencies { compile project(path: ':db', configuration: 'compileApi') testRuntime project(':db') - // Include auto-value in compile until nebula-lint understands - // annotationProcessor - gradleLint.ignore('unused-dependency') { - compile deps['com.google.auto.value:auto-value'] - } + annotationProcessor deps['com.google.auto.service:auto-service'] annotationProcessor deps['com.google.auto.value:auto-value'] testAnnotationProcessor deps['com.google.auto.value:auto-value'] annotationProcessor deps['com.google.dagger:dagger-compiler'] @@ -317,7 +314,7 @@ dependencies { testCompile deps['com.google.monitoring-client:contrib'] testCompile deps['com.google.truth:truth'] testCompile deps['com.google.truth.extensions:truth-java8-extension'] - testCompile deps['org.hamcrest:hamcrest-all'] + testCompile deps['org.hamcrest:hamcrest'] testCompile deps['org.hamcrest:hamcrest-core'] testCompile deps['org.hamcrest:hamcrest-library'] testCompile deps['junit:junit'] @@ -716,6 +713,10 @@ createToolTask( 'google.registry.tools.DevTool', sourceSets.nonprod) + +createToolTask( + 'jpaDemoPipeline', 'google.registry.beam.common.JpaDemoPipeline') + project.tasks.create('initSqlPipeline', JavaExec) { main = 'google.registry.beam.initsql.InitSqlPipeline' diff --git a/core/gradle/dependency-locks/annotationProcessor.lockfile b/core/gradle/dependency-locks/annotationProcessor.lockfile index be65b1360..4113a5036 100644 --- a/core/gradle/dependency-locks/annotationProcessor.lockfile +++ b/core/gradle/dependency-locks/annotationProcessor.lockfile @@ -3,7 +3,9 @@ # This file is expected to be part of source control. com.github.ben-manes.caffeine:caffeine:2.7.0 com.github.kevinstern:software-and-algorithms:1.0 -com.google.auto.value:auto-value:1.6.3 +com.google.auto.service:auto-service-annotations:1.0-rc7 +com.google.auto.service:auto-service:1.0-rc7 +com.google.auto.value:auto-value:1.7.4 com.google.auto:auto-common:0.10 com.google.code.findbugs:jFormatString:3.0.0 com.google.code.findbugs:jsr305:3.0.2 @@ -19,7 +21,7 @@ com.google.errorprone:error_prone_type_annotations:2.3.4 com.google.errorprone:javac-shaded:9-dev-r4023-3 com.google.googlejavaformat:google-java-format:1.5 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava:30.0-jre +com.google.guava:guava:30.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.j2objc:j2objc-annotations:1.3 com.google.protobuf:protobuf-java:3.4.0 diff --git a/core/gradle/dependency-locks/compile.lockfile b/core/gradle/dependency-locks/compile.lockfile index dab53b137..d26ee7735 100644 --- a/core/gradle/dependency-locks/compile.lockfile +++ b/core/gradle/dependency-locks/compile.lockfile @@ -6,9 +6,10 @@ aopalliance:aopalliance:1.0 args4j:args4j:2.33 cglib:cglib-nodep:2.2 com.beust:jcommander:1.60 -com.fasterxml.jackson.core:jackson-annotations:2.10.3 -com.fasterxml.jackson.core:jackson-core:2.11.3 -com.fasterxml.jackson.core:jackson-databind:2.10.2 +com.fasterxml.jackson.core:jackson-annotations:2.12.1 +com.fasterxml.jackson.core:jackson-core:2.12.1 +com.fasterxml.jackson.core:jackson-databind:2.12.1 +com.fasterxml.jackson:jackson-bom:2.12.1 com.fasterxml:classmate:1.5.1 com.github.docker-java:docker-java-api:3.2.7 com.github.docker-java:docker-java-transport-zerodep:3.2.7 @@ -21,90 +22,103 @@ com.github.jnr:jnr-ffi:2.1.13 com.github.jnr:jnr-posix:3.0.55 com.github.jnr:jnr-unixsocket:0.30 com.github.jnr:jnr-x86asm:1.0.2 +com.github.rholder:guava-retrying:2.0.0 com.google.android:annotations:4.1.1.4 com.google.api-client:google-api-client-appengine:1.30.8 -com.google.api-client:google-api-client-jackson2:1.30.9 -com.google.api-client:google-api-client-java6:1.30.9 +com.google.api-client:google-api-client-jackson2:1.30.10 +com.google.api-client:google-api-client-java6:1.30.10 com.google.api-client:google-api-client-servlet:1.30.8 -com.google.api-client:google-api-client:1.30.9 -com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.9.1 -com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.9.1 -com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.85.1 -com.google.api.grpc:grpc-google-common-protos:1.17.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1alpha2:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.90.0 -com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:1.9.1 -com.google.api.grpc:proto-google-cloud-bigtable-v2:1.9.1 -com.google.api.grpc:proto-google-cloud-datastore-v1:0.85.0 -com.google.api.grpc:proto-google-cloud-pubsub-v1:1.85.1 -com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.2.3 -com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.2.3 -com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:1.49.1 -com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:1.49.1 -com.google.api.grpc:proto-google-cloud-spanner-v1:1.49.1 -com.google.api.grpc:proto-google-common-protos:2.0.0 -com.google.api.grpc:proto-google-iam-v1:1.0.1 +com.google.api-client:google-api-client:1.30.10 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:1.5.5 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.105.5 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.105.5 +com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.14.0 +com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.14.0 +com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.90.3 +com.google.api.grpc:grpc-google-cloud-pubsublite-v1:0.7.0 +com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:2.0.2 +com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:2.0.2 +com.google.api.grpc:grpc-google-cloud-spanner-v1:2.0.2 +com.google.api.grpc:grpc-google-common-protos:1.18.1 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:1.5.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1alpha2:0.105.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.105.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.105.5 +com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:1.14.0 +com.google.api.grpc:proto-google-cloud-bigtable-v2:1.16.1 +com.google.api.grpc:proto-google-cloud-datastore-v1:0.88.0 +com.google.api.grpc:proto-google-cloud-pubsub-v1:1.92.0 +com.google.api.grpc:proto-google-cloud-pubsublite-v1:0.7.0 +com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.2.9 +com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.2.9 +com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:2.0.2 +com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:2.0.2 +com.google.api.grpc:proto-google-cloud-spanner-v1:2.0.2 +com.google.api.grpc:proto-google-common-protos:2.0.1 +com.google.api.grpc:proto-google-iam-v1:1.0.5 com.google.api:api-common:1.10.1 -com.google.api:gax-grpc:1.60.0 -com.google.api:gax-httpjson:0.70.1 -com.google.api:gax:1.60.0 +com.google.api:gax-grpc:1.60.1 +com.google.api:gax-httpjson:0.76.1 +com.google.api:gax:1.60.1 com.google.apis:google-api-services-admin-directory:directory_v1-rev72-1.22.0 com.google.apis:google-api-services-appengine:v1-rev101-1.25.0 -com.google.apis:google-api-services-bigquery:v2-rev20191211-1.30.9 -com.google.apis:google-api-services-clouddebugger:v2-rev20200313-1.30.9 +com.google.apis:google-api-services-bigquery:v2-rev20200916-1.30.10 +com.google.apis:google-api-services-clouddebugger:v2-rev20200501-1.30.10 com.google.apis:google-api-services-cloudkms:v1-rev12-1.22.0 -com.google.apis:google-api-services-cloudresourcemanager:v1-rev20200311-1.30.9 -com.google.apis:google-api-services-dataflow:v1b3-rev20200305-1.30.9 +com.google.apis:google-api-services-cloudresourcemanager:v1-rev20200720-1.30.10 +com.google.apis:google-api-services-dataflow:v1b3-rev20200713-1.30.10 com.google.apis:google-api-services-dns:v2beta1-rev6-1.22.0 com.google.apis:google-api-services-drive:v2-rev160-1.19.1 com.google.apis:google-api-services-groupssettings:v1-rev60-1.22.0 -com.google.apis:google-api-services-healthcare:v1beta1-rev20200525-1.30.9 +com.google.apis:google-api-services-healthcare:v1beta1-rev20200713-1.30.10 +com.google.apis:google-api-services-iamcredentials:v1-rev20201022-1.30.10 com.google.apis:google-api-services-monitoring:v3-rev426-1.23.0 -com.google.apis:google-api-services-pubsub:v1-rev20200312-1.30.9 +com.google.apis:google-api-services-pubsub:v1-rev20200713-1.30.10 com.google.apis:google-api-services-sheets:v4-rev483-1.22.0 com.google.apis:google-api-services-sqladmin:v1beta4-rev20190827-1.30.1 -com.google.apis:google-api-services-storage:v1-rev20200326-1.30.9 +com.google.apis:google-api-services-storage:v1-rev20200927-1.30.10 com.google.appengine.tools:appengine-gcs-client:0.6 com.google.appengine.tools:appengine-mapreduce:0.9 com.google.appengine.tools:appengine-pipeline:0.2.13 com.google.appengine:appengine-api-1.0-sdk:1.9.81 com.google.appengine:appengine-remote-api:1.9.81 com.google.appengine:appengine-testing:1.9.81 -com.google.auth:google-auth-library-credentials:0.22.0 -com.google.auth:google-auth-library-oauth2-http:0.22.0 +com.google.auth:google-auth-library-credentials:0.22.2 +com.google.auth:google-auth-library-oauth2-http:0.22.2 +com.google.auto.service:auto-service-annotations:1.0-rc7 com.google.auto.value:auto-value-annotations:1.7.4 -com.google.auto.value:auto-value:1.6.3 -com.google.cloud.bigdataoss:gcsio:2.1.3 -com.google.cloud.bigdataoss:util:2.1.3 -com.google.cloud.bigtable:bigtable-client-core:1.13.0 +com.google.auto.value:auto-value:1.7.4 +com.google.cloud.bigdataoss:gcsio:2.1.6 +com.google.cloud.bigdataoss:util:2.1.6 +com.google.cloud.bigtable:bigtable-client-core:1.16.0 com.google.cloud.datastore:datastore-v1-proto-client:1.6.3 com.google.cloud.sql:jdbc-socket-factory-core:1.0.16 -com.google.cloud:google-cloud-bigquery:1.106.0 -com.google.cloud:google-cloud-bigquerystorage:0.125.0-beta -com.google.cloud:google-cloud-bigtable:1.9.1 -com.google.cloud:google-cloud-core-grpc:1.92.2 -com.google.cloud:google-cloud-core-http:1.92.4 -com.google.cloud:google-cloud-core:1.92.5 -com.google.cloud:google-cloud-secretmanager:1.2.3 -com.google.cloud:google-cloud-spanner:1.49.1 +com.google.cloud:google-cloud-bigquery:1.122.2 +com.google.cloud:google-cloud-bigquerystorage:1.5.5 +com.google.cloud:google-cloud-bigtable:1.14.0 +com.google.cloud:google-cloud-core-grpc:1.93.9 +com.google.cloud:google-cloud-core-http:1.93.9 +com.google.cloud:google-cloud-core:1.93.9 +com.google.cloud:google-cloud-pubsub:1.110.0 +com.google.cloud:google-cloud-pubsublite:0.7.0 +com.google.cloud:google-cloud-secretmanager:1.2.9 +com.google.cloud:google-cloud-spanner:2.0.2 com.google.code.findbugs:jsr305:3.0.2 com.google.code.gson:gson:2.8.6 com.google.common.html.types:types:1.0.4 com.google.dagger:dagger:2.28 -com.google.errorprone:error_prone_annotations:2.4.0 +com.google.errorprone:error_prone_annotations:2.5.0 com.google.flogger:flogger-system-backend:0.5.1 com.google.flogger:flogger:0.5.1 com.google.flogger:google-extensions:0.5.1 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava:30.0-jre +com.google.guava:guava:30.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.gwt:gwt-user:2.8.2 -com.google.http-client:google-http-client-appengine:1.34.1 -com.google.http-client:google-http-client-jackson2:1.37.0 +com.google.http-client:google-http-client-appengine:1.36.0 +com.google.http-client:google-http-client-jackson2:1.38.0 com.google.http-client:google-http-client-protobuf:1.33.0 -com.google.http-client:google-http-client:1.37.0 +com.google.http-client:google-http-client:1.38.0 com.google.inject.extensions:guice-multibindings:4.1.0 com.google.inject:guice:4.1.0 com.google.j2objc:j2objc-annotations:1.3 @@ -112,54 +126,49 @@ com.google.jsinterop:jsinterop-annotations:1.0.2 com.google.monitoring-client:metrics:1.0.7 com.google.monitoring-client:stackdriver:1.0.7 com.google.oauth-client:google-oauth-client-appengine:1.30.5 -com.google.oauth-client:google-oauth-client-java6:1.30.6 +com.google.oauth-client:google-oauth-client-java6:1.31.2 com.google.oauth-client:google-oauth-client-jetty:1.28.0 com.google.oauth-client:google-oauth-client-servlet:1.30.5 -com.google.oauth-client:google-oauth-client:1.30.6 -com.google.protobuf:protobuf-java-util:3.13.0 -com.google.protobuf:protobuf-java:3.13.0 +com.google.oauth-client:google-oauth-client:1.31.2 +com.google.protobuf:protobuf-java-util:3.14.0 +com.google.protobuf:protobuf-java:3.14.0 com.google.re2j:re2j:1.1 com.google.template:soy:2018-03-14 com.googlecode.charts4j:charts4j:1.3 com.googlecode.json-simple:json-simple:1.1.1 com.ibm.icu:icu4j:57.1 com.jcraft:jsch:0.1.55 -com.squareup.okhttp:okhttp:2.5.0 -com.squareup.okio:okio:1.13.0 com.sun.istack:istack-commons-runtime:3.0.7 com.sun.xml.fastinfoset:FastInfoset:1.2.15 com.thoughtworks.paranamer:paranamer:2.7 com.zaxxer:HikariCP:3.4.5 -commons-codec:commons-codec:1.13 +commons-codec:commons-codec:1.15 commons-logging:commons-logging:1.2 dnsjava:dnsjava:2.1.7 io.dropwizard.metrics:metrics-core:3.2.6 io.github.classgraph:classgraph:4.8.65 -io.grpc:grpc-all:1.27.2 -io.grpc:grpc-alts:1.32.2 -io.grpc:grpc-api:1.32.2 -io.grpc:grpc-auth:1.32.2 -io.grpc:grpc-context:1.32.2 -io.grpc:grpc-core:1.32.2 -io.grpc:grpc-grpclb:1.32.2 -io.grpc:grpc-netty-shaded:1.32.2 -io.grpc:grpc-netty:1.27.2 -io.grpc:grpc-okhttp:1.27.2 -io.grpc:grpc-protobuf-lite:1.32.2 -io.grpc:grpc-protobuf:1.32.2 -io.grpc:grpc-stub:1.32.2 -io.grpc:grpc-testing:1.27.2 -io.netty:netty-buffer:4.1.42.Final -io.netty:netty-codec-http2:4.1.42.Final -io.netty:netty-codec-http:4.1.42.Final -io.netty:netty-codec-socks:4.1.42.Final -io.netty:netty-codec:4.1.42.Final -io.netty:netty-common:4.1.42.Final -io.netty:netty-handler-proxy:4.1.42.Final -io.netty:netty-handler:4.1.42.Final -io.netty:netty-resolver:4.1.42.Final -io.netty:netty-tcnative-boringssl-static:2.0.17.Final -io.netty:netty-transport:4.1.42.Final +io.grpc:grpc-alts:1.34.1 +io.grpc:grpc-api:1.34.1 +io.grpc:grpc-auth:1.34.1 +io.grpc:grpc-context:1.34.1 +io.grpc:grpc-core:1.34.1 +io.grpc:grpc-grpclb:1.34.1 +io.grpc:grpc-netty-shaded:1.34.1 +io.grpc:grpc-netty:1.32.2 +io.grpc:grpc-protobuf-lite:1.34.1 +io.grpc:grpc-protobuf:1.34.1 +io.grpc:grpc-stub:1.34.1 +io.netty:netty-buffer:4.1.51.Final +io.netty:netty-codec-http2:4.1.51.Final +io.netty:netty-codec-http:4.1.51.Final +io.netty:netty-codec-socks:4.1.51.Final +io.netty:netty-codec:4.1.51.Final +io.netty:netty-common:4.1.51.Final +io.netty:netty-handler-proxy:4.1.51.Final +io.netty:netty-handler:4.1.51.Final +io.netty:netty-resolver:4.1.51.Final +io.netty:netty-tcnative-boringssl-static:2.0.33.Final +io.netty:netty-transport:4.1.51.Final io.opencensus:opencensus-api:0.24.0 io.opencensus:opencensus-contrib-grpc-util:0.24.0 io.opencensus:opencensus-contrib-http-util:0.24.0 @@ -179,26 +188,26 @@ javax.validation:validation-api:1.0.0.GA javax.xml.bind:jaxb-api:2.3.1 jline:jline:1.0 joda-time:joda-time:2.10.5 -junit:junit:4.12 +junit:junit:4.13.1 net.bytebuddy:byte-buddy:1.10.17 net.java.dev.jna:jna:5.5.0 org.apache.avro:avro:1.8.2 -org.apache.beam:beam-model-fn-execution:2.23.0 -org.apache.beam:beam-model-job-management:2.23.0 -org.apache.beam:beam-model-pipeline:2.23.0 -org.apache.beam:beam-runners-core-construction-java:2.23.0 -org.apache.beam:beam-runners-google-cloud-dataflow-java:2.23.0 -org.apache.beam:beam-runners-java-fn-execution:2.23.0 -org.apache.beam:beam-sdks-java-core:2.23.0 -org.apache.beam:beam-sdks-java-expansion-service:2.23.0 -org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.23.0 -org.apache.beam:beam-sdks-java-extensions-protobuf:2.23.0 -org.apache.beam:beam-sdks-java-fn-execution:2.23.0 -org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.23.0 +org.apache.beam:beam-model-fn-execution:2.27.0 +org.apache.beam:beam-model-job-management:2.27.0 +org.apache.beam:beam-model-pipeline:2.27.0 +org.apache.beam:beam-runners-core-construction-java:2.27.0 +org.apache.beam:beam-runners-google-cloud-dataflow-java:2.27.0 +org.apache.beam:beam-runners-java-fn-execution:2.27.0 +org.apache.beam:beam-sdks-java-core:2.27.0 +org.apache.beam:beam-sdks-java-expansion-service:2.27.0 +org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.27.0 +org.apache.beam:beam-sdks-java-extensions-protobuf:2.27.0 +org.apache.beam:beam-sdks-java-fn-execution:2.27.0 +org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.27.0 org.apache.beam:beam-vendor-bytebuddy-1_10_8:0.1 org.apache.beam:beam-vendor-grpc-1_26_0:0.3 org.apache.beam:beam-vendor-guava-26_0-jre:0.1 -org.apache.beam:beam-vendor-sdks-java-extensions-protobuf:2.23.0 +org.apache.beam:beam-vendor-sdks-java-extensions-protobuf:2.27.0 org.apache.commons:commons-compress:1.20 org.apache.commons:commons-lang3:3.5 org.apache.httpcomponents:httpclient:4.5.13 @@ -208,17 +217,18 @@ org.bouncycastle:bcpg-jdk15on:1.61 org.bouncycastle:bcpkix-jdk15on:1.61 org.bouncycastle:bcprov-jdk15on:1.61 org.checkerframework:checker-compat-qual:2.5.5 -org.checkerframework:checker-qual:3.5.0 +org.checkerframework:checker-qual:3.7.0 org.codehaus.jackson:jackson-core-asl:1.9.13 org.codehaus.jackson:jackson-mapper-asl:1.9.13 org.codehaus.mojo:animal-sniffer-annotations:1.19 -org.conscrypt:conscrypt-openjdk-uber:2.2.1 +org.conscrypt:conscrypt-openjdk-uber:2.5.1 org.dom4j:dom4j:2.1.3 org.easymock:easymock:3.0 org.flywaydb:flyway-core:5.2.4 org.glassfish.jaxb:jaxb-runtime:2.3.1 org.glassfish.jaxb:txw2:2.3.1 -org.hamcrest:hamcrest-core:1.3 +org.hamcrest:hamcrest-core:2.1 +org.hamcrest:hamcrest:2.1 org.hibernate.common:hibernate-commons-annotations:5.1.2.Final org.hibernate:hibernate-core:5.4.23.Final org.hibernate:hibernate-hikaricp:5.4.23.Final @@ -227,7 +237,7 @@ org.jboss.logging:jboss-logging:3.4.1.Final org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.1.1.Final org.jboss:jandex:2.1.3.Final org.joda:joda-money:1.0.1 -org.json:json:20160810 +org.json:json:20200518 org.jsoup:jsoup:1.13.1 org.jvnet.staxex:stax-ex:1.8 org.mortbay.jetty:jetty-util:6.1.26 @@ -246,7 +256,7 @@ org.testcontainers:database-commons:1.15.1 org.testcontainers:jdbc:1.15.1 org.testcontainers:postgresql:1.15.1 org.testcontainers:testcontainers:1.15.1 -org.threeten:threetenbp:1.4.5 +org.threeten:threetenbp:1.5.0 org.tukaani:xz:1.8 org.w3c.css:sac:1.3 org.xerial.snappy:snappy-java:1.1.4 diff --git a/core/gradle/dependency-locks/compileClasspath.lockfile b/core/gradle/dependency-locks/compileClasspath.lockfile index dee1c3fcb..24780336d 100644 --- a/core/gradle/dependency-locks/compileClasspath.lockfile +++ b/core/gradle/dependency-locks/compileClasspath.lockfile @@ -6,9 +6,10 @@ aopalliance:aopalliance:1.0 args4j:args4j:2.33 cglib:cglib-nodep:2.2 com.beust:jcommander:1.60 -com.fasterxml.jackson.core:jackson-annotations:2.10.3 -com.fasterxml.jackson.core:jackson-core:2.11.3 -com.fasterxml.jackson.core:jackson-databind:2.10.2 +com.fasterxml.jackson.core:jackson-annotations:2.12.1 +com.fasterxml.jackson.core:jackson-core:2.12.1 +com.fasterxml.jackson.core:jackson-databind:2.12.1 +com.fasterxml.jackson:jackson-bom:2.12.1 com.fasterxml:classmate:1.5.1 com.github.docker-java:docker-java-api:3.2.7 com.github.docker-java:docker-java-transport-zerodep:3.2.7 @@ -21,88 +22,101 @@ com.github.jnr:jnr-ffi:2.1.13 com.github.jnr:jnr-posix:3.0.55 com.github.jnr:jnr-unixsocket:0.30 com.github.jnr:jnr-x86asm:1.0.2 +com.github.rholder:guava-retrying:2.0.0 com.google.api-client:google-api-client-appengine:1.30.8 -com.google.api-client:google-api-client-jackson2:1.30.9 -com.google.api-client:google-api-client-java6:1.30.9 +com.google.api-client:google-api-client-jackson2:1.30.10 +com.google.api-client:google-api-client-java6:1.30.10 com.google.api-client:google-api-client-servlet:1.30.8 -com.google.api-client:google-api-client:1.30.9 -com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.9.1 -com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.9.1 -com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.85.1 -com.google.api.grpc:grpc-google-common-protos:1.17.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1alpha2:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.90.0 -com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:1.9.1 -com.google.api.grpc:proto-google-cloud-bigtable-v2:1.9.1 -com.google.api.grpc:proto-google-cloud-datastore-v1:0.85.0 -com.google.api.grpc:proto-google-cloud-pubsub-v1:1.85.1 -com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.2.3 -com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.2.3 -com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:1.49.1 -com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:1.49.1 -com.google.api.grpc:proto-google-cloud-spanner-v1:1.49.1 -com.google.api.grpc:proto-google-common-protos:2.0.0 -com.google.api.grpc:proto-google-iam-v1:1.0.1 +com.google.api-client:google-api-client:1.30.10 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:1.5.5 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.105.5 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.105.5 +com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.14.0 +com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.14.0 +com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.90.3 +com.google.api.grpc:grpc-google-cloud-pubsublite-v1:0.7.0 +com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:2.0.2 +com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:2.0.2 +com.google.api.grpc:grpc-google-cloud-spanner-v1:2.0.2 +com.google.api.grpc:grpc-google-common-protos:1.18.1 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:1.5.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1alpha2:0.105.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.105.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.105.5 +com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:1.14.0 +com.google.api.grpc:proto-google-cloud-bigtable-v2:1.16.1 +com.google.api.grpc:proto-google-cloud-datastore-v1:0.88.0 +com.google.api.grpc:proto-google-cloud-pubsub-v1:1.92.0 +com.google.api.grpc:proto-google-cloud-pubsublite-v1:0.7.0 +com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.2.9 +com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.2.9 +com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:2.0.2 +com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:2.0.2 +com.google.api.grpc:proto-google-cloud-spanner-v1:2.0.2 +com.google.api.grpc:proto-google-common-protos:2.0.1 +com.google.api.grpc:proto-google-iam-v1:1.0.5 com.google.api:api-common:1.10.1 -com.google.api:gax-grpc:1.60.0 -com.google.api:gax-httpjson:0.70.1 -com.google.api:gax:1.60.0 +com.google.api:gax-grpc:1.60.1 +com.google.api:gax-httpjson:0.76.1 +com.google.api:gax:1.60.1 com.google.apis:google-api-services-admin-directory:directory_v1-rev72-1.22.0 com.google.apis:google-api-services-appengine:v1-rev101-1.25.0 -com.google.apis:google-api-services-bigquery:v2-rev20191211-1.30.9 -com.google.apis:google-api-services-clouddebugger:v2-rev20200313-1.30.9 +com.google.apis:google-api-services-bigquery:v2-rev20200916-1.30.10 +com.google.apis:google-api-services-clouddebugger:v2-rev20200501-1.30.10 com.google.apis:google-api-services-cloudkms:v1-rev12-1.22.0 -com.google.apis:google-api-services-cloudresourcemanager:v1-rev20200311-1.30.9 -com.google.apis:google-api-services-dataflow:v1b3-rev20200305-1.30.9 +com.google.apis:google-api-services-cloudresourcemanager:v1-rev20200720-1.30.10 +com.google.apis:google-api-services-dataflow:v1b3-rev20200713-1.30.10 com.google.apis:google-api-services-dns:v2beta1-rev6-1.22.0 com.google.apis:google-api-services-drive:v2-rev160-1.19.1 com.google.apis:google-api-services-groupssettings:v1-rev60-1.22.0 -com.google.apis:google-api-services-healthcare:v1beta1-rev20200525-1.30.9 +com.google.apis:google-api-services-healthcare:v1beta1-rev20200713-1.30.10 +com.google.apis:google-api-services-iamcredentials:v1-rev20201022-1.30.10 com.google.apis:google-api-services-monitoring:v3-rev426-1.23.0 -com.google.apis:google-api-services-pubsub:v1-rev20200312-1.30.9 +com.google.apis:google-api-services-pubsub:v1-rev20200713-1.30.10 com.google.apis:google-api-services-sheets:v4-rev483-1.22.0 com.google.apis:google-api-services-sqladmin:v1beta4-rev20190827-1.30.1 -com.google.apis:google-api-services-storage:v1-rev20200326-1.30.9 +com.google.apis:google-api-services-storage:v1-rev20200927-1.30.10 com.google.appengine.tools:appengine-gcs-client:0.6 com.google.appengine.tools:appengine-mapreduce:0.9 com.google.appengine.tools:appengine-pipeline:0.2.13 com.google.appengine:appengine-api-1.0-sdk:1.9.81 com.google.appengine:appengine-remote-api:1.9.81 com.google.appengine:appengine-testing:1.9.81 -com.google.auth:google-auth-library-credentials:0.22.0 -com.google.auth:google-auth-library-oauth2-http:0.22.0 +com.google.auth:google-auth-library-credentials:0.22.2 +com.google.auth:google-auth-library-oauth2-http:0.22.2 +com.google.auto.service:auto-service-annotations:1.0-rc7 com.google.auto.value:auto-value-annotations:1.7.4 -com.google.auto.value:auto-value:1.6.3 -com.google.cloud.bigdataoss:gcsio:2.1.3 -com.google.cloud.bigdataoss:util:2.1.3 -com.google.cloud.bigtable:bigtable-client-core:1.13.0 +com.google.auto.value:auto-value:1.7.4 +com.google.cloud.bigdataoss:gcsio:2.1.6 +com.google.cloud.bigdataoss:util:2.1.6 +com.google.cloud.bigtable:bigtable-client-core:1.16.0 com.google.cloud.datastore:datastore-v1-proto-client:1.6.3 com.google.cloud.sql:jdbc-socket-factory-core:1.0.16 -com.google.cloud:google-cloud-bigquery:1.106.0 -com.google.cloud:google-cloud-bigquerystorage:0.125.0-beta -com.google.cloud:google-cloud-bigtable:1.9.1 -com.google.cloud:google-cloud-core-grpc:1.92.2 -com.google.cloud:google-cloud-core-http:1.92.4 -com.google.cloud:google-cloud-core:1.92.5 -com.google.cloud:google-cloud-secretmanager:1.2.3 -com.google.cloud:google-cloud-spanner:1.49.1 +com.google.cloud:google-cloud-bigquery:1.122.2 +com.google.cloud:google-cloud-bigquerystorage:1.5.5 +com.google.cloud:google-cloud-bigtable:1.14.0 +com.google.cloud:google-cloud-core-grpc:1.93.9 +com.google.cloud:google-cloud-core-http:1.93.9 +com.google.cloud:google-cloud-core:1.93.9 +com.google.cloud:google-cloud-pubsub:1.110.0 +com.google.cloud:google-cloud-pubsublite:0.7.0 +com.google.cloud:google-cloud-secretmanager:1.2.9 +com.google.cloud:google-cloud-spanner:2.0.2 com.google.code.findbugs:jsr305:3.0.2 com.google.code.gson:gson:2.8.6 com.google.common.html.types:types:1.0.4 com.google.dagger:dagger:2.28 -com.google.errorprone:error_prone_annotations:2.4.0 +com.google.errorprone:error_prone_annotations:2.5.0 com.google.flogger:flogger:0.5.1 com.google.flogger:google-extensions:0.5.1 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava:30.0-jre +com.google.guava:guava:30.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.gwt:gwt-user:2.8.2 -com.google.http-client:google-http-client-appengine:1.34.1 -com.google.http-client:google-http-client-jackson2:1.37.0 +com.google.http-client:google-http-client-appengine:1.36.0 +com.google.http-client:google-http-client-jackson2:1.38.0 com.google.http-client:google-http-client-protobuf:1.33.0 -com.google.http-client:google-http-client:1.37.0 +com.google.http-client:google-http-client:1.38.0 com.google.inject.extensions:guice-multibindings:4.1.0 com.google.inject:guice:4.1.0 com.google.j2objc:j2objc-annotations:1.3 @@ -110,54 +124,47 @@ com.google.jsinterop:jsinterop-annotations:1.0.2 com.google.monitoring-client:metrics:1.0.7 com.google.monitoring-client:stackdriver:1.0.7 com.google.oauth-client:google-oauth-client-appengine:1.30.5 -com.google.oauth-client:google-oauth-client-java6:1.30.6 +com.google.oauth-client:google-oauth-client-java6:1.31.2 com.google.oauth-client:google-oauth-client-jetty:1.28.0 com.google.oauth-client:google-oauth-client-servlet:1.30.5 -com.google.oauth-client:google-oauth-client:1.30.6 -com.google.protobuf:protobuf-java-util:3.11.4 -com.google.protobuf:protobuf-java:3.13.0 +com.google.oauth-client:google-oauth-client:1.31.2 +com.google.protobuf:protobuf-java-util:3.14.0 +com.google.protobuf:protobuf-java:3.14.0 com.google.re2j:re2j:1.1 com.google.template:soy:2018-03-14 com.googlecode.charts4j:charts4j:1.3 com.googlecode.json-simple:json-simple:1.1.1 com.ibm.icu:icu4j:57.1 com.jcraft:jsch:0.1.55 -com.squareup.okhttp:okhttp:2.5.0 -com.squareup.okio:okio:1.13.0 com.sun.istack:istack-commons-runtime:3.0.7 com.sun.xml.fastinfoset:FastInfoset:1.2.15 com.thoughtworks.paranamer:paranamer:2.7 com.zaxxer:HikariCP:3.4.5 -commons-codec:commons-codec:1.13 +commons-codec:commons-codec:1.15 commons-logging:commons-logging:1.2 dnsjava:dnsjava:2.1.7 io.dropwizard.metrics:metrics-core:3.2.6 io.github.classgraph:classgraph:4.8.65 -io.grpc:grpc-all:1.27.2 -io.grpc:grpc-alts:1.32.2 -io.grpc:grpc-api:1.32.2 -io.grpc:grpc-auth:1.32.2 -io.grpc:grpc-context:1.32.2 -io.grpc:grpc-core:1.32.2 -io.grpc:grpc-grpclb:1.32.2 -io.grpc:grpc-netty-shaded:1.32.2 -io.grpc:grpc-netty:1.27.2 -io.grpc:grpc-okhttp:1.27.2 -io.grpc:grpc-protobuf-lite:1.32.2 -io.grpc:grpc-protobuf:1.32.2 -io.grpc:grpc-stub:1.32.2 -io.grpc:grpc-testing:1.27.2 -io.netty:netty-buffer:4.1.42.Final -io.netty:netty-codec-http2:4.1.42.Final -io.netty:netty-codec-http:4.1.42.Final -io.netty:netty-codec-socks:4.1.42.Final -io.netty:netty-codec:4.1.42.Final -io.netty:netty-common:4.1.42.Final -io.netty:netty-handler-proxy:4.1.42.Final -io.netty:netty-handler:4.1.42.Final -io.netty:netty-resolver:4.1.42.Final -io.netty:netty-tcnative-boringssl-static:2.0.17.Final -io.netty:netty-transport:4.1.42.Final +io.grpc:grpc-alts:1.34.1 +io.grpc:grpc-api:1.34.1 +io.grpc:grpc-auth:1.34.1 +io.grpc:grpc-context:1.34.1 +io.grpc:grpc-core:1.34.1 +io.grpc:grpc-grpclb:1.34.1 +io.grpc:grpc-netty-shaded:1.34.1 +io.grpc:grpc-netty:1.32.2 +io.grpc:grpc-protobuf-lite:1.34.1 +io.grpc:grpc-protobuf:1.34.1 +io.grpc:grpc-stub:1.34.1 +io.netty:netty-buffer:4.1.51.Final +io.netty:netty-codec-http2:4.1.51.Final +io.netty:netty-codec-http:4.1.51.Final +io.netty:netty-codec:4.1.51.Final +io.netty:netty-common:4.1.51.Final +io.netty:netty-handler:4.1.51.Final +io.netty:netty-resolver:4.1.51.Final +io.netty:netty-tcnative-boringssl-static:2.0.33.Final +io.netty:netty-transport:4.1.51.Final io.opencensus:opencensus-api:0.24.0 io.opencensus:opencensus-contrib-grpc-util:0.24.0 io.opencensus:opencensus-contrib-http-util:0.24.0 @@ -179,22 +186,22 @@ joda-time:joda-time:2.10.5 net.bytebuddy:byte-buddy:1.10.17 net.java.dev.jna:jna:5.5.0 org.apache.avro:avro:1.8.2 -org.apache.beam:beam-model-fn-execution:2.23.0 -org.apache.beam:beam-model-job-management:2.23.0 -org.apache.beam:beam-model-pipeline:2.23.0 -org.apache.beam:beam-runners-core-construction-java:2.23.0 -org.apache.beam:beam-runners-google-cloud-dataflow-java:2.23.0 -org.apache.beam:beam-runners-java-fn-execution:2.23.0 -org.apache.beam:beam-sdks-java-core:2.23.0 -org.apache.beam:beam-sdks-java-expansion-service:2.23.0 -org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.23.0 -org.apache.beam:beam-sdks-java-extensions-protobuf:2.23.0 -org.apache.beam:beam-sdks-java-fn-execution:2.23.0 -org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.23.0 +org.apache.beam:beam-model-fn-execution:2.27.0 +org.apache.beam:beam-model-job-management:2.27.0 +org.apache.beam:beam-model-pipeline:2.27.0 +org.apache.beam:beam-runners-core-construction-java:2.27.0 +org.apache.beam:beam-runners-google-cloud-dataflow-java:2.27.0 +org.apache.beam:beam-runners-java-fn-execution:2.27.0 +org.apache.beam:beam-sdks-java-core:2.27.0 +org.apache.beam:beam-sdks-java-expansion-service:2.27.0 +org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.27.0 +org.apache.beam:beam-sdks-java-extensions-protobuf:2.27.0 +org.apache.beam:beam-sdks-java-fn-execution:2.27.0 +org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.27.0 org.apache.beam:beam-vendor-bytebuddy-1_10_8:0.1 org.apache.beam:beam-vendor-grpc-1_26_0:0.3 org.apache.beam:beam-vendor-guava-26_0-jre:0.1 -org.apache.beam:beam-vendor-sdks-java-extensions-protobuf:2.23.0 +org.apache.beam:beam-vendor-sdks-java-extensions-protobuf:2.27.0 org.apache.commons:commons-compress:1.20 org.apache.commons:commons-lang3:3.5 org.apache.httpcomponents:httpclient:4.5.13 @@ -204,15 +211,17 @@ org.bouncycastle:bcpg-jdk15on:1.61 org.bouncycastle:bcpkix-jdk15on:1.61 org.bouncycastle:bcprov-jdk15on:1.61 org.checkerframework:checker-compat-qual:2.5.5 -org.checkerframework:checker-qual:3.5.0 +org.checkerframework:checker-qual:3.7.0 org.codehaus.jackson:jackson-core-asl:1.9.13 org.codehaus.jackson:jackson-mapper-asl:1.9.13 -org.conscrypt:conscrypt-openjdk-uber:2.2.1 +org.conscrypt:conscrypt-openjdk-uber:2.5.1 org.dom4j:dom4j:2.1.3 org.easymock:easymock:3.0 org.flywaydb:flyway-core:5.2.4 org.glassfish.jaxb:jaxb-runtime:2.3.1 org.glassfish.jaxb:txw2:2.3.1 +org.hamcrest:hamcrest-core:2.1 +org.hamcrest:hamcrest:2.1 org.hibernate.common:hibernate-commons-annotations:5.1.2.Final org.hibernate:hibernate-core:5.4.23.Final org.hibernate:hibernate-hikaricp:5.4.23.Final @@ -221,7 +230,7 @@ org.jboss.logging:jboss-logging:3.4.1.Final org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.1.1.Final org.jboss:jandex:2.1.3.Final org.joda:joda-money:1.0.1 -org.json:json:20160810 +org.json:json:20200518 org.jsoup:jsoup:1.13.1 org.jvnet.staxex:stax-ex:1.8 org.mortbay.jetty:jetty-util:6.1.26 @@ -240,7 +249,7 @@ org.testcontainers:database-commons:1.15.1 org.testcontainers:jdbc:1.15.1 org.testcontainers:postgresql:1.15.1 org.testcontainers:testcontainers:1.15.1 -org.threeten:threetenbp:1.4.5 +org.threeten:threetenbp:1.5.0 org.tukaani:xz:1.8 org.w3c.css:sac:1.3 org.xerial.snappy:snappy-java:1.1.4 diff --git a/core/gradle/dependency-locks/default.lockfile b/core/gradle/dependency-locks/default.lockfile index f13041c7b..0526a1dc4 100644 --- a/core/gradle/dependency-locks/default.lockfile +++ b/core/gradle/dependency-locks/default.lockfile @@ -10,9 +10,10 @@ com.eclipsesource.j2v8:j2v8_linux_x86_64:4.6.0 com.eclipsesource.j2v8:j2v8_macosx_x86_64:4.6.0 com.eclipsesource.j2v8:j2v8_win32_x86:4.6.0 com.eclipsesource.j2v8:j2v8_win32_x86_64:4.6.0 -com.fasterxml.jackson.core:jackson-annotations:2.10.3 -com.fasterxml.jackson.core:jackson-core:2.11.3 -com.fasterxml.jackson.core:jackson-databind:2.10.2 +com.fasterxml.jackson.core:jackson-annotations:2.12.1 +com.fasterxml.jackson.core:jackson-core:2.12.1 +com.fasterxml.jackson.core:jackson-databind:2.12.1 +com.fasterxml.jackson:jackson-bom:2.12.1 com.fasterxml:classmate:1.5.1 com.github.docker-java:docker-java-api:3.2.7 com.github.docker-java:docker-java-transport-zerodep:3.2.7 @@ -25,91 +26,104 @@ com.github.jnr:jnr-ffi:2.1.13 com.github.jnr:jnr-posix:3.0.55 com.github.jnr:jnr-unixsocket:0.30 com.github.jnr:jnr-x86asm:1.0.2 +com.github.rholder:guava-retrying:2.0.0 com.google.android:annotations:4.1.1.4 com.google.api-client:google-api-client-appengine:1.30.8 -com.google.api-client:google-api-client-jackson2:1.30.9 -com.google.api-client:google-api-client-java6:1.30.9 +com.google.api-client:google-api-client-jackson2:1.30.10 +com.google.api-client:google-api-client-java6:1.30.10 com.google.api-client:google-api-client-servlet:1.30.8 -com.google.api-client:google-api-client:1.30.9 -com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.9.1 -com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.9.1 -com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.85.1 -com.google.api.grpc:grpc-google-common-protos:1.17.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1alpha2:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.90.0 -com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:1.9.1 -com.google.api.grpc:proto-google-cloud-bigtable-v2:1.9.1 -com.google.api.grpc:proto-google-cloud-datastore-v1:0.85.0 -com.google.api.grpc:proto-google-cloud-pubsub-v1:1.85.1 -com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.2.3 -com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.2.3 -com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:1.49.1 -com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:1.49.1 -com.google.api.grpc:proto-google-cloud-spanner-v1:1.49.1 -com.google.api.grpc:proto-google-common-protos:2.0.0 -com.google.api.grpc:proto-google-iam-v1:1.0.1 +com.google.api-client:google-api-client:1.30.10 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:1.5.5 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.105.5 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.105.5 +com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.14.0 +com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.14.0 +com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.90.3 +com.google.api.grpc:grpc-google-cloud-pubsublite-v1:0.7.0 +com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:2.0.2 +com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:2.0.2 +com.google.api.grpc:grpc-google-cloud-spanner-v1:2.0.2 +com.google.api.grpc:grpc-google-common-protos:1.18.1 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:1.5.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1alpha2:0.105.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.105.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.105.5 +com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:1.14.0 +com.google.api.grpc:proto-google-cloud-bigtable-v2:1.16.1 +com.google.api.grpc:proto-google-cloud-datastore-v1:0.88.0 +com.google.api.grpc:proto-google-cloud-pubsub-v1:1.92.0 +com.google.api.grpc:proto-google-cloud-pubsublite-v1:0.7.0 +com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.2.9 +com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.2.9 +com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:2.0.2 +com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:2.0.2 +com.google.api.grpc:proto-google-cloud-spanner-v1:2.0.2 +com.google.api.grpc:proto-google-common-protos:2.0.1 +com.google.api.grpc:proto-google-iam-v1:1.0.5 com.google.api:api-common:1.10.1 -com.google.api:gax-grpc:1.60.0 -com.google.api:gax-httpjson:0.70.1 -com.google.api:gax:1.60.0 +com.google.api:gax-grpc:1.60.1 +com.google.api:gax-httpjson:0.76.1 +com.google.api:gax:1.60.1 com.google.apis:google-api-services-admin-directory:directory_v1-rev72-1.22.0 com.google.apis:google-api-services-appengine:v1-rev101-1.25.0 -com.google.apis:google-api-services-bigquery:v2-rev20191211-1.30.9 -com.google.apis:google-api-services-clouddebugger:v2-rev20200313-1.30.9 +com.google.apis:google-api-services-bigquery:v2-rev20200916-1.30.10 +com.google.apis:google-api-services-clouddebugger:v2-rev20200501-1.30.10 com.google.apis:google-api-services-cloudkms:v1-rev12-1.22.0 -com.google.apis:google-api-services-cloudresourcemanager:v1-rev20200311-1.30.9 -com.google.apis:google-api-services-dataflow:v1b3-rev20200305-1.30.9 +com.google.apis:google-api-services-cloudresourcemanager:v1-rev20200720-1.30.10 +com.google.apis:google-api-services-dataflow:v1b3-rev20200713-1.30.10 com.google.apis:google-api-services-dns:v2beta1-rev6-1.22.0 com.google.apis:google-api-services-drive:v2-rev160-1.19.1 com.google.apis:google-api-services-groupssettings:v1-rev60-1.22.0 -com.google.apis:google-api-services-healthcare:v1beta1-rev20200525-1.30.9 +com.google.apis:google-api-services-healthcare:v1beta1-rev20200713-1.30.10 +com.google.apis:google-api-services-iamcredentials:v1-rev20201022-1.30.10 com.google.apis:google-api-services-monitoring:v3-rev426-1.23.0 -com.google.apis:google-api-services-pubsub:v1-rev20200312-1.30.9 +com.google.apis:google-api-services-pubsub:v1-rev20200713-1.30.10 com.google.apis:google-api-services-sheets:v4-rev483-1.22.0 com.google.apis:google-api-services-sqladmin:v1beta4-rev20190827-1.30.1 -com.google.apis:google-api-services-storage:v1-rev20200326-1.30.9 +com.google.apis:google-api-services-storage:v1-rev20200927-1.30.10 com.google.appengine.tools:appengine-gcs-client:0.6 com.google.appengine.tools:appengine-mapreduce:0.9 com.google.appengine.tools:appengine-pipeline:0.2.13 com.google.appengine:appengine-api-1.0-sdk:1.9.81 com.google.appengine:appengine-remote-api:1.9.81 com.google.appengine:appengine-testing:1.9.81 -com.google.auth:google-auth-library-credentials:0.22.0 -com.google.auth:google-auth-library-oauth2-http:0.22.0 +com.google.auth:google-auth-library-credentials:0.22.2 +com.google.auth:google-auth-library-oauth2-http:0.22.2 +com.google.auto.service:auto-service-annotations:1.0-rc7 com.google.auto.value:auto-value-annotations:1.7.4 -com.google.auto.value:auto-value:1.6.3 -com.google.cloud.bigdataoss:gcsio:2.1.3 -com.google.cloud.bigdataoss:util:2.1.3 -com.google.cloud.bigtable:bigtable-client-core:1.13.0 +com.google.auto.value:auto-value:1.7.4 +com.google.cloud.bigdataoss:gcsio:2.1.6 +com.google.cloud.bigdataoss:util:2.1.6 +com.google.cloud.bigtable:bigtable-client-core:1.16.0 com.google.cloud.datastore:datastore-v1-proto-client:1.6.3 com.google.cloud.sql:jdbc-socket-factory-core:1.0.16 com.google.cloud.sql:postgres-socket-factory:1.0.16 -com.google.cloud:google-cloud-bigquery:1.106.0 -com.google.cloud:google-cloud-bigquerystorage:0.125.0-beta -com.google.cloud:google-cloud-bigtable:1.9.1 -com.google.cloud:google-cloud-core-grpc:1.92.2 -com.google.cloud:google-cloud-core-http:1.92.4 -com.google.cloud:google-cloud-core:1.92.5 -com.google.cloud:google-cloud-secretmanager:1.2.3 -com.google.cloud:google-cloud-spanner:1.49.1 +com.google.cloud:google-cloud-bigquery:1.122.2 +com.google.cloud:google-cloud-bigquerystorage:1.5.5 +com.google.cloud:google-cloud-bigtable:1.14.0 +com.google.cloud:google-cloud-core-grpc:1.93.9 +com.google.cloud:google-cloud-core-http:1.93.9 +com.google.cloud:google-cloud-core:1.93.9 +com.google.cloud:google-cloud-pubsub:1.110.0 +com.google.cloud:google-cloud-pubsublite:0.7.0 +com.google.cloud:google-cloud-secretmanager:1.2.9 +com.google.cloud:google-cloud-spanner:2.0.2 com.google.code.findbugs:jsr305:3.0.2 com.google.code.gson:gson:2.8.6 com.google.common.html.types:types:1.0.4 com.google.dagger:dagger:2.28 -com.google.errorprone:error_prone_annotations:2.4.0 +com.google.errorprone:error_prone_annotations:2.5.0 com.google.flogger:flogger-system-backend:0.5.1 com.google.flogger:flogger:0.5.1 com.google.flogger:google-extensions:0.5.1 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava:30.0-jre +com.google.guava:guava:30.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.gwt:gwt-user:2.8.2 -com.google.http-client:google-http-client-appengine:1.34.1 -com.google.http-client:google-http-client-jackson2:1.37.0 +com.google.http-client:google-http-client-appengine:1.36.0 +com.google.http-client:google-http-client-jackson2:1.38.0 com.google.http-client:google-http-client-protobuf:1.33.0 -com.google.http-client:google-http-client:1.37.0 +com.google.http-client:google-http-client:1.38.0 com.google.inject.extensions:guice-multibindings:4.1.0 com.google.inject:guice:4.1.0 com.google.j2objc:j2objc-annotations:1.3 @@ -117,25 +131,23 @@ com.google.jsinterop:jsinterop-annotations:1.0.2 com.google.monitoring-client:metrics:1.0.7 com.google.monitoring-client:stackdriver:1.0.7 com.google.oauth-client:google-oauth-client-appengine:1.30.5 -com.google.oauth-client:google-oauth-client-java6:1.30.6 +com.google.oauth-client:google-oauth-client-java6:1.31.2 com.google.oauth-client:google-oauth-client-jetty:1.28.0 com.google.oauth-client:google-oauth-client-servlet:1.30.5 -com.google.oauth-client:google-oauth-client:1.30.6 -com.google.protobuf:protobuf-java-util:3.13.0 -com.google.protobuf:protobuf-java:3.13.0 +com.google.oauth-client:google-oauth-client:1.31.2 +com.google.protobuf:protobuf-java-util:3.14.0 +com.google.protobuf:protobuf-java:3.14.0 com.google.re2j:re2j:1.1 com.google.template:soy:2018-03-14 com.googlecode.charts4j:charts4j:1.3 com.googlecode.json-simple:json-simple:1.1.1 com.ibm.icu:icu4j:57.1 com.jcraft:jsch:0.1.55 -com.squareup.okhttp:okhttp:2.5.0 -com.squareup.okio:okio:1.13.0 com.sun.istack:istack-commons-runtime:3.0.7 com.sun.xml.fastinfoset:FastInfoset:1.2.15 com.thoughtworks.paranamer:paranamer:2.7 com.zaxxer:HikariCP:3.4.5 -commons-codec:commons-codec:1.13 +commons-codec:commons-codec:1.15 commons-logging:commons-logging:1.2 dnsjava:dnsjava:2.1.7 guru.nidi.com.kitfox:svgSalamander:1.1.3 @@ -143,31 +155,28 @@ guru.nidi:graphviz-java-all-j2v8:0.17.0 guru.nidi:graphviz-java:0.17.0 io.dropwizard.metrics:metrics-core:3.2.6 io.github.classgraph:classgraph:4.8.65 -io.grpc:grpc-all:1.27.2 -io.grpc:grpc-alts:1.32.2 -io.grpc:grpc-api:1.32.2 -io.grpc:grpc-auth:1.32.2 -io.grpc:grpc-context:1.32.2 -io.grpc:grpc-core:1.32.2 -io.grpc:grpc-grpclb:1.32.2 -io.grpc:grpc-netty-shaded:1.32.2 -io.grpc:grpc-netty:1.27.2 -io.grpc:grpc-okhttp:1.27.2 -io.grpc:grpc-protobuf-lite:1.32.2 -io.grpc:grpc-protobuf:1.32.2 -io.grpc:grpc-stub:1.32.2 -io.grpc:grpc-testing:1.27.2 -io.netty:netty-buffer:4.1.42.Final -io.netty:netty-codec-http2:4.1.42.Final -io.netty:netty-codec-http:4.1.42.Final -io.netty:netty-codec-socks:4.1.42.Final -io.netty:netty-codec:4.1.42.Final -io.netty:netty-common:4.1.42.Final -io.netty:netty-handler-proxy:4.1.42.Final -io.netty:netty-handler:4.1.42.Final -io.netty:netty-resolver:4.1.42.Final -io.netty:netty-tcnative-boringssl-static:2.0.17.Final -io.netty:netty-transport:4.1.42.Final +io.grpc:grpc-alts:1.34.1 +io.grpc:grpc-api:1.34.1 +io.grpc:grpc-auth:1.34.1 +io.grpc:grpc-context:1.34.1 +io.grpc:grpc-core:1.34.1 +io.grpc:grpc-grpclb:1.34.1 +io.grpc:grpc-netty-shaded:1.34.1 +io.grpc:grpc-netty:1.32.2 +io.grpc:grpc-protobuf-lite:1.34.1 +io.grpc:grpc-protobuf:1.34.1 +io.grpc:grpc-stub:1.34.1 +io.netty:netty-buffer:4.1.51.Final +io.netty:netty-codec-http2:4.1.51.Final +io.netty:netty-codec-http:4.1.51.Final +io.netty:netty-codec-socks:4.1.51.Final +io.netty:netty-codec:4.1.51.Final +io.netty:netty-common:4.1.51.Final +io.netty:netty-handler-proxy:4.1.51.Final +io.netty:netty-handler:4.1.51.Final +io.netty:netty-resolver:4.1.51.Final +io.netty:netty-tcnative-boringssl-static:2.0.33.Final +io.netty:netty-transport:4.1.51.Final io.opencensus:opencensus-api:0.24.0 io.opencensus:opencensus-contrib-grpc-util:0.24.0 io.opencensus:opencensus-contrib-http-util:0.24.0 @@ -187,27 +196,27 @@ javax.validation:validation-api:1.0.0.GA javax.xml.bind:jaxb-api:2.3.1 jline:jline:1.0 joda-time:joda-time:2.10.5 -junit:junit:4.12 +junit:junit:4.13.1 net.arnx:nashorn-promise:0.1.1 net.bytebuddy:byte-buddy:1.10.17 net.java.dev.jna:jna:5.5.0 org.apache.avro:avro:1.8.2 -org.apache.beam:beam-model-fn-execution:2.23.0 -org.apache.beam:beam-model-job-management:2.23.0 -org.apache.beam:beam-model-pipeline:2.23.0 -org.apache.beam:beam-runners-core-construction-java:2.23.0 -org.apache.beam:beam-runners-google-cloud-dataflow-java:2.23.0 -org.apache.beam:beam-runners-java-fn-execution:2.23.0 -org.apache.beam:beam-sdks-java-core:2.23.0 -org.apache.beam:beam-sdks-java-expansion-service:2.23.0 -org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.23.0 -org.apache.beam:beam-sdks-java-extensions-protobuf:2.23.0 -org.apache.beam:beam-sdks-java-fn-execution:2.23.0 -org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.23.0 +org.apache.beam:beam-model-fn-execution:2.27.0 +org.apache.beam:beam-model-job-management:2.27.0 +org.apache.beam:beam-model-pipeline:2.27.0 +org.apache.beam:beam-runners-core-construction-java:2.27.0 +org.apache.beam:beam-runners-google-cloud-dataflow-java:2.27.0 +org.apache.beam:beam-runners-java-fn-execution:2.27.0 +org.apache.beam:beam-sdks-java-core:2.27.0 +org.apache.beam:beam-sdks-java-expansion-service:2.27.0 +org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.27.0 +org.apache.beam:beam-sdks-java-extensions-protobuf:2.27.0 +org.apache.beam:beam-sdks-java-fn-execution:2.27.0 +org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.27.0 org.apache.beam:beam-vendor-bytebuddy-1_10_8:0.1 org.apache.beam:beam-vendor-grpc-1_26_0:0.3 org.apache.beam:beam-vendor-guava-26_0-jre:0.1 -org.apache.beam:beam-vendor-sdks-java-extensions-protobuf:2.23.0 +org.apache.beam:beam-vendor-sdks-java-extensions-protobuf:2.27.0 org.apache.commons:commons-compress:1.20 org.apache.commons:commons-exec:1.3 org.apache.commons:commons-lang3:3.5 @@ -219,17 +228,18 @@ org.bouncycastle:bcpg-jdk15on:1.61 org.bouncycastle:bcpkix-jdk15on:1.61 org.bouncycastle:bcprov-jdk15on:1.61 org.checkerframework:checker-compat-qual:2.5.5 -org.checkerframework:checker-qual:3.5.0 +org.checkerframework:checker-qual:3.7.0 org.codehaus.jackson:jackson-core-asl:1.9.13 org.codehaus.jackson:jackson-mapper-asl:1.9.13 org.codehaus.mojo:animal-sniffer-annotations:1.19 -org.conscrypt:conscrypt-openjdk-uber:2.2.1 +org.conscrypt:conscrypt-openjdk-uber:2.5.1 org.dom4j:dom4j:2.1.3 org.easymock:easymock:3.0 org.flywaydb:flyway-core:5.2.4 org.glassfish.jaxb:jaxb-runtime:2.3.1 org.glassfish.jaxb:txw2:2.3.1 -org.hamcrest:hamcrest-core:1.3 +org.hamcrest:hamcrest-core:2.1 +org.hamcrest:hamcrest:2.1 org.hibernate.common:hibernate-commons-annotations:5.1.2.Final org.hibernate:hibernate-core:5.4.23.Final org.hibernate:hibernate-hikaricp:5.4.23.Final @@ -238,7 +248,7 @@ org.jboss.logging:jboss-logging:3.4.1.Final org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.1.1.Final org.jboss:jandex:2.1.3.Final org.joda:joda-money:1.0.1 -org.json:json:20160810 +org.json:json:20200518 org.jsoup:jsoup:1.13.1 org.jvnet.staxex:stax-ex:1.8 org.mortbay.jetty:jetty-util:6.1.26 @@ -260,7 +270,7 @@ org.testcontainers:database-commons:1.15.1 org.testcontainers:jdbc:1.15.1 org.testcontainers:postgresql:1.15.1 org.testcontainers:testcontainers:1.15.1 -org.threeten:threetenbp:1.4.5 +org.threeten:threetenbp:1.5.0 org.tukaani:xz:1.8 org.w3c.css:sac:1.3 org.webjars.npm:viz.js-for-graphviz-java:2.1.3 diff --git a/core/gradle/dependency-locks/deploy_jar.lockfile b/core/gradle/dependency-locks/deploy_jar.lockfile index 7f47ecd6d..5b7dcb929 100644 --- a/core/gradle/dependency-locks/deploy_jar.lockfile +++ b/core/gradle/dependency-locks/deploy_jar.lockfile @@ -10,9 +10,10 @@ com.eclipsesource.j2v8:j2v8_linux_x86_64:4.6.0 com.eclipsesource.j2v8:j2v8_macosx_x86_64:4.6.0 com.eclipsesource.j2v8:j2v8_win32_x86:4.6.0 com.eclipsesource.j2v8:j2v8_win32_x86_64:4.6.0 -com.fasterxml.jackson.core:jackson-annotations:2.10.3 -com.fasterxml.jackson.core:jackson-core:2.11.3 -com.fasterxml.jackson.core:jackson-databind:2.10.2 +com.fasterxml.jackson.core:jackson-annotations:2.12.1 +com.fasterxml.jackson.core:jackson-core:2.12.1 +com.fasterxml.jackson.core:jackson-databind:2.12.1 +com.fasterxml.jackson:jackson-bom:2.12.1 com.fasterxml:classmate:1.5.1 com.github.docker-java:docker-java-api:3.2.7 com.github.docker-java:docker-java-transport-zerodep:3.2.7 @@ -25,91 +26,104 @@ com.github.jnr:jnr-ffi:2.1.13 com.github.jnr:jnr-posix:3.0.55 com.github.jnr:jnr-unixsocket:0.30 com.github.jnr:jnr-x86asm:1.0.2 +com.github.rholder:guava-retrying:2.0.0 com.google.android:annotations:4.1.1.4 com.google.api-client:google-api-client-appengine:1.30.8 -com.google.api-client:google-api-client-jackson2:1.30.9 -com.google.api-client:google-api-client-java6:1.30.9 +com.google.api-client:google-api-client-jackson2:1.30.10 +com.google.api-client:google-api-client-java6:1.30.10 com.google.api-client:google-api-client-servlet:1.30.8 -com.google.api-client:google-api-client:1.30.9 -com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.9.1 -com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.9.1 -com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.85.1 -com.google.api.grpc:grpc-google-common-protos:1.17.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1alpha2:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.90.0 -com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:1.9.1 -com.google.api.grpc:proto-google-cloud-bigtable-v2:1.9.1 -com.google.api.grpc:proto-google-cloud-datastore-v1:0.85.0 -com.google.api.grpc:proto-google-cloud-pubsub-v1:1.85.1 -com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.2.3 -com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.2.3 -com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:1.49.1 -com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:1.49.1 -com.google.api.grpc:proto-google-cloud-spanner-v1:1.49.1 -com.google.api.grpc:proto-google-common-protos:2.0.0 -com.google.api.grpc:proto-google-iam-v1:1.0.1 +com.google.api-client:google-api-client:1.30.10 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:1.5.5 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.105.5 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.105.5 +com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.14.0 +com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.14.0 +com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.90.3 +com.google.api.grpc:grpc-google-cloud-pubsublite-v1:0.7.0 +com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:2.0.2 +com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:2.0.2 +com.google.api.grpc:grpc-google-cloud-spanner-v1:2.0.2 +com.google.api.grpc:grpc-google-common-protos:1.18.1 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:1.5.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1alpha2:0.105.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.105.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.105.5 +com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:1.14.0 +com.google.api.grpc:proto-google-cloud-bigtable-v2:1.16.1 +com.google.api.grpc:proto-google-cloud-datastore-v1:0.88.0 +com.google.api.grpc:proto-google-cloud-pubsub-v1:1.92.0 +com.google.api.grpc:proto-google-cloud-pubsublite-v1:0.7.0 +com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.2.9 +com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.2.9 +com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:2.0.2 +com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:2.0.2 +com.google.api.grpc:proto-google-cloud-spanner-v1:2.0.2 +com.google.api.grpc:proto-google-common-protos:2.0.1 +com.google.api.grpc:proto-google-iam-v1:1.0.5 com.google.api:api-common:1.10.1 -com.google.api:gax-grpc:1.60.0 -com.google.api:gax-httpjson:0.70.1 -com.google.api:gax:1.60.0 +com.google.api:gax-grpc:1.60.1 +com.google.api:gax-httpjson:0.76.1 +com.google.api:gax:1.60.1 com.google.apis:google-api-services-admin-directory:directory_v1-rev72-1.22.0 com.google.apis:google-api-services-appengine:v1-rev101-1.25.0 -com.google.apis:google-api-services-bigquery:v2-rev20191211-1.30.9 -com.google.apis:google-api-services-clouddebugger:v2-rev20200313-1.30.9 +com.google.apis:google-api-services-bigquery:v2-rev20200916-1.30.10 +com.google.apis:google-api-services-clouddebugger:v2-rev20200501-1.30.10 com.google.apis:google-api-services-cloudkms:v1-rev12-1.22.0 -com.google.apis:google-api-services-cloudresourcemanager:v1-rev20200311-1.30.9 -com.google.apis:google-api-services-dataflow:v1b3-rev20200305-1.30.9 +com.google.apis:google-api-services-cloudresourcemanager:v1-rev20200720-1.30.10 +com.google.apis:google-api-services-dataflow:v1b3-rev20200713-1.30.10 com.google.apis:google-api-services-dns:v2beta1-rev6-1.22.0 com.google.apis:google-api-services-drive:v2-rev160-1.19.1 com.google.apis:google-api-services-groupssettings:v1-rev60-1.22.0 -com.google.apis:google-api-services-healthcare:v1beta1-rev20200525-1.30.9 +com.google.apis:google-api-services-healthcare:v1beta1-rev20200713-1.30.10 +com.google.apis:google-api-services-iamcredentials:v1-rev20201022-1.30.10 com.google.apis:google-api-services-monitoring:v3-rev426-1.23.0 -com.google.apis:google-api-services-pubsub:v1-rev20200312-1.30.9 +com.google.apis:google-api-services-pubsub:v1-rev20200713-1.30.10 com.google.apis:google-api-services-sheets:v4-rev483-1.22.0 com.google.apis:google-api-services-sqladmin:v1beta4-rev20190827-1.30.1 -com.google.apis:google-api-services-storage:v1-rev20200326-1.30.9 +com.google.apis:google-api-services-storage:v1-rev20200927-1.30.10 com.google.appengine.tools:appengine-gcs-client:0.6 com.google.appengine.tools:appengine-mapreduce:0.9 com.google.appengine.tools:appengine-pipeline:0.2.13 com.google.appengine:appengine-api-1.0-sdk:1.9.81 com.google.appengine:appengine-remote-api:1.9.81 com.google.appengine:appengine-testing:1.9.81 -com.google.auth:google-auth-library-credentials:0.22.0 -com.google.auth:google-auth-library-oauth2-http:0.22.0 +com.google.auth:google-auth-library-credentials:0.22.2 +com.google.auth:google-auth-library-oauth2-http:0.22.2 +com.google.auto.service:auto-service-annotations:1.0-rc7 com.google.auto.value:auto-value-annotations:1.7.4 -com.google.auto.value:auto-value:1.6.3 -com.google.cloud.bigdataoss:gcsio:2.1.3 -com.google.cloud.bigdataoss:util:2.1.3 -com.google.cloud.bigtable:bigtable-client-core:1.13.0 +com.google.auto.value:auto-value:1.7.4 +com.google.cloud.bigdataoss:gcsio:2.1.6 +com.google.cloud.bigdataoss:util:2.1.6 +com.google.cloud.bigtable:bigtable-client-core:1.16.0 com.google.cloud.datastore:datastore-v1-proto-client:1.6.3 com.google.cloud.sql:jdbc-socket-factory-core:1.0.16 com.google.cloud.sql:postgres-socket-factory:1.0.16 -com.google.cloud:google-cloud-bigquery:1.106.0 -com.google.cloud:google-cloud-bigquerystorage:0.125.0-beta -com.google.cloud:google-cloud-bigtable:1.9.1 -com.google.cloud:google-cloud-core-grpc:1.92.2 -com.google.cloud:google-cloud-core-http:1.92.4 -com.google.cloud:google-cloud-core:1.92.5 -com.google.cloud:google-cloud-secretmanager:1.2.3 -com.google.cloud:google-cloud-spanner:1.49.1 +com.google.cloud:google-cloud-bigquery:1.122.2 +com.google.cloud:google-cloud-bigquerystorage:1.5.5 +com.google.cloud:google-cloud-bigtable:1.14.0 +com.google.cloud:google-cloud-core-grpc:1.93.9 +com.google.cloud:google-cloud-core-http:1.93.9 +com.google.cloud:google-cloud-core:1.93.9 +com.google.cloud:google-cloud-pubsub:1.110.0 +com.google.cloud:google-cloud-pubsublite:0.7.0 +com.google.cloud:google-cloud-secretmanager:1.2.9 +com.google.cloud:google-cloud-spanner:2.0.2 com.google.code.findbugs:jsr305:3.0.2 com.google.code.gson:gson:2.8.6 com.google.common.html.types:types:1.0.4 com.google.dagger:dagger:2.28 -com.google.errorprone:error_prone_annotations:2.4.0 +com.google.errorprone:error_prone_annotations:2.5.0 com.google.flogger:flogger-system-backend:0.5.1 com.google.flogger:flogger:0.5.1 com.google.flogger:google-extensions:0.5.1 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava:30.0-jre +com.google.guava:guava:30.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.gwt:gwt-user:2.8.2 -com.google.http-client:google-http-client-appengine:1.34.1 -com.google.http-client:google-http-client-jackson2:1.37.0 +com.google.http-client:google-http-client-appengine:1.36.0 +com.google.http-client:google-http-client-jackson2:1.38.0 com.google.http-client:google-http-client-protobuf:1.33.0 -com.google.http-client:google-http-client:1.37.0 +com.google.http-client:google-http-client:1.38.0 com.google.inject.extensions:guice-multibindings:4.1.0 com.google.inject:guice:4.1.0 com.google.j2objc:j2objc-annotations:1.3 @@ -117,25 +131,23 @@ com.google.jsinterop:jsinterop-annotations:1.0.2 com.google.monitoring-client:metrics:1.0.7 com.google.monitoring-client:stackdriver:1.0.7 com.google.oauth-client:google-oauth-client-appengine:1.30.5 -com.google.oauth-client:google-oauth-client-java6:1.30.6 +com.google.oauth-client:google-oauth-client-java6:1.31.2 com.google.oauth-client:google-oauth-client-jetty:1.28.0 com.google.oauth-client:google-oauth-client-servlet:1.30.5 -com.google.oauth-client:google-oauth-client:1.30.6 -com.google.protobuf:protobuf-java-util:3.13.0 -com.google.protobuf:protobuf-java:3.13.0 +com.google.oauth-client:google-oauth-client:1.31.2 +com.google.protobuf:protobuf-java-util:3.14.0 +com.google.protobuf:protobuf-java:3.14.0 com.google.re2j:re2j:1.1 com.google.template:soy:2018-03-14 com.googlecode.charts4j:charts4j:1.3 com.googlecode.json-simple:json-simple:1.1.1 com.ibm.icu:icu4j:57.1 com.jcraft:jsch:0.1.55 -com.squareup.okhttp:okhttp:2.5.0 -com.squareup.okio:okio:1.13.0 com.sun.istack:istack-commons-runtime:3.0.7 com.sun.xml.fastinfoset:FastInfoset:1.2.15 com.thoughtworks.paranamer:paranamer:2.7 com.zaxxer:HikariCP:3.4.5 -commons-codec:commons-codec:1.13 +commons-codec:commons-codec:1.15 commons-logging:commons-logging:1.2 dnsjava:dnsjava:2.1.7 guru.nidi.com.kitfox:svgSalamander:1.1.3 @@ -143,31 +155,28 @@ guru.nidi:graphviz-java-all-j2v8:0.17.0 guru.nidi:graphviz-java:0.17.0 io.dropwizard.metrics:metrics-core:3.2.6 io.github.classgraph:classgraph:4.8.65 -io.grpc:grpc-all:1.27.2 -io.grpc:grpc-alts:1.32.2 -io.grpc:grpc-api:1.32.2 -io.grpc:grpc-auth:1.32.2 -io.grpc:grpc-context:1.32.2 -io.grpc:grpc-core:1.32.2 -io.grpc:grpc-grpclb:1.32.2 -io.grpc:grpc-netty-shaded:1.32.2 -io.grpc:grpc-netty:1.27.2 -io.grpc:grpc-okhttp:1.27.2 -io.grpc:grpc-protobuf-lite:1.32.2 -io.grpc:grpc-protobuf:1.32.2 -io.grpc:grpc-stub:1.32.2 -io.grpc:grpc-testing:1.27.2 -io.netty:netty-buffer:4.1.42.Final -io.netty:netty-codec-http2:4.1.42.Final -io.netty:netty-codec-http:4.1.42.Final -io.netty:netty-codec-socks:4.1.42.Final -io.netty:netty-codec:4.1.42.Final -io.netty:netty-common:4.1.42.Final -io.netty:netty-handler-proxy:4.1.42.Final -io.netty:netty-handler:4.1.42.Final -io.netty:netty-resolver:4.1.42.Final -io.netty:netty-tcnative-boringssl-static:2.0.17.Final -io.netty:netty-transport:4.1.42.Final +io.grpc:grpc-alts:1.34.1 +io.grpc:grpc-api:1.34.1 +io.grpc:grpc-auth:1.34.1 +io.grpc:grpc-context:1.34.1 +io.grpc:grpc-core:1.34.1 +io.grpc:grpc-grpclb:1.34.1 +io.grpc:grpc-netty-shaded:1.34.1 +io.grpc:grpc-netty:1.32.2 +io.grpc:grpc-protobuf-lite:1.34.1 +io.grpc:grpc-protobuf:1.34.1 +io.grpc:grpc-stub:1.34.1 +io.netty:netty-buffer:4.1.51.Final +io.netty:netty-codec-http2:4.1.51.Final +io.netty:netty-codec-http:4.1.51.Final +io.netty:netty-codec-socks:4.1.51.Final +io.netty:netty-codec:4.1.51.Final +io.netty:netty-common:4.1.51.Final +io.netty:netty-handler-proxy:4.1.51.Final +io.netty:netty-handler:4.1.51.Final +io.netty:netty-resolver:4.1.51.Final +io.netty:netty-tcnative-boringssl-static:2.0.33.Final +io.netty:netty-transport:4.1.51.Final io.opencensus:opencensus-api:0.24.0 io.opencensus:opencensus-contrib-grpc-util:0.24.0 io.opencensus:opencensus-contrib-http-util:0.24.0 @@ -191,22 +200,22 @@ net.arnx:nashorn-promise:0.1.1 net.bytebuddy:byte-buddy:1.10.17 net.java.dev.jna:jna:5.5.0 org.apache.avro:avro:1.8.2 -org.apache.beam:beam-model-fn-execution:2.23.0 -org.apache.beam:beam-model-job-management:2.23.0 -org.apache.beam:beam-model-pipeline:2.23.0 -org.apache.beam:beam-runners-core-construction-java:2.23.0 -org.apache.beam:beam-runners-google-cloud-dataflow-java:2.23.0 -org.apache.beam:beam-runners-java-fn-execution:2.23.0 -org.apache.beam:beam-sdks-java-core:2.23.0 -org.apache.beam:beam-sdks-java-expansion-service:2.23.0 -org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.23.0 -org.apache.beam:beam-sdks-java-extensions-protobuf:2.23.0 -org.apache.beam:beam-sdks-java-fn-execution:2.23.0 -org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.23.0 +org.apache.beam:beam-model-fn-execution:2.27.0 +org.apache.beam:beam-model-job-management:2.27.0 +org.apache.beam:beam-model-pipeline:2.27.0 +org.apache.beam:beam-runners-core-construction-java:2.27.0 +org.apache.beam:beam-runners-google-cloud-dataflow-java:2.27.0 +org.apache.beam:beam-runners-java-fn-execution:2.27.0 +org.apache.beam:beam-sdks-java-core:2.27.0 +org.apache.beam:beam-sdks-java-expansion-service:2.27.0 +org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.27.0 +org.apache.beam:beam-sdks-java-extensions-protobuf:2.27.0 +org.apache.beam:beam-sdks-java-fn-execution:2.27.0 +org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.27.0 org.apache.beam:beam-vendor-bytebuddy-1_10_8:0.1 org.apache.beam:beam-vendor-grpc-1_26_0:0.3 org.apache.beam:beam-vendor-guava-26_0-jre:0.1 -org.apache.beam:beam-vendor-sdks-java-extensions-protobuf:2.23.0 +org.apache.beam:beam-vendor-sdks-java-extensions-protobuf:2.27.0 org.apache.commons:commons-compress:1.20 org.apache.commons:commons-exec:1.3 org.apache.commons:commons-lang3:3.5 @@ -218,16 +227,18 @@ org.bouncycastle:bcpg-jdk15on:1.61 org.bouncycastle:bcpkix-jdk15on:1.61 org.bouncycastle:bcprov-jdk15on:1.61 org.checkerframework:checker-compat-qual:2.5.5 -org.checkerframework:checker-qual:3.5.0 +org.checkerframework:checker-qual:3.7.0 org.codehaus.jackson:jackson-core-asl:1.9.13 org.codehaus.jackson:jackson-mapper-asl:1.9.13 org.codehaus.mojo:animal-sniffer-annotations:1.19 -org.conscrypt:conscrypt-openjdk-uber:2.2.1 +org.conscrypt:conscrypt-openjdk-uber:2.5.1 org.dom4j:dom4j:2.1.3 org.easymock:easymock:3.0 org.flywaydb:flyway-core:5.2.4 org.glassfish.jaxb:jaxb-runtime:2.3.1 org.glassfish.jaxb:txw2:2.3.1 +org.hamcrest:hamcrest-core:2.1 +org.hamcrest:hamcrest:2.1 org.hibernate.common:hibernate-commons-annotations:5.1.2.Final org.hibernate:hibernate-core:5.4.23.Final org.hibernate:hibernate-hikaricp:5.4.23.Final @@ -236,7 +247,7 @@ org.jboss.logging:jboss-logging:3.4.1.Final org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.1.1.Final org.jboss:jandex:2.1.3.Final org.joda:joda-money:1.0.1 -org.json:json:20160810 +org.json:json:20200518 org.jsoup:jsoup:1.13.1 org.jvnet.staxex:stax-ex:1.8 org.mortbay.jetty:jetty-util:6.1.26 @@ -258,7 +269,7 @@ org.testcontainers:database-commons:1.15.1 org.testcontainers:jdbc:1.15.1 org.testcontainers:postgresql:1.15.1 org.testcontainers:testcontainers:1.15.1 -org.threeten:threetenbp:1.4.5 +org.threeten:threetenbp:1.5.0 org.tukaani:xz:1.8 org.w3c.css:sac:1.3 org.webjars.npm:viz.js-for-graphviz-java:2.1.3 diff --git a/core/gradle/dependency-locks/nonprodCompile.lockfile b/core/gradle/dependency-locks/nonprodCompile.lockfile index dab53b137..d26ee7735 100644 --- a/core/gradle/dependency-locks/nonprodCompile.lockfile +++ b/core/gradle/dependency-locks/nonprodCompile.lockfile @@ -6,9 +6,10 @@ aopalliance:aopalliance:1.0 args4j:args4j:2.33 cglib:cglib-nodep:2.2 com.beust:jcommander:1.60 -com.fasterxml.jackson.core:jackson-annotations:2.10.3 -com.fasterxml.jackson.core:jackson-core:2.11.3 -com.fasterxml.jackson.core:jackson-databind:2.10.2 +com.fasterxml.jackson.core:jackson-annotations:2.12.1 +com.fasterxml.jackson.core:jackson-core:2.12.1 +com.fasterxml.jackson.core:jackson-databind:2.12.1 +com.fasterxml.jackson:jackson-bom:2.12.1 com.fasterxml:classmate:1.5.1 com.github.docker-java:docker-java-api:3.2.7 com.github.docker-java:docker-java-transport-zerodep:3.2.7 @@ -21,90 +22,103 @@ com.github.jnr:jnr-ffi:2.1.13 com.github.jnr:jnr-posix:3.0.55 com.github.jnr:jnr-unixsocket:0.30 com.github.jnr:jnr-x86asm:1.0.2 +com.github.rholder:guava-retrying:2.0.0 com.google.android:annotations:4.1.1.4 com.google.api-client:google-api-client-appengine:1.30.8 -com.google.api-client:google-api-client-jackson2:1.30.9 -com.google.api-client:google-api-client-java6:1.30.9 +com.google.api-client:google-api-client-jackson2:1.30.10 +com.google.api-client:google-api-client-java6:1.30.10 com.google.api-client:google-api-client-servlet:1.30.8 -com.google.api-client:google-api-client:1.30.9 -com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.9.1 -com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.9.1 -com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.85.1 -com.google.api.grpc:grpc-google-common-protos:1.17.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1alpha2:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.90.0 -com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:1.9.1 -com.google.api.grpc:proto-google-cloud-bigtable-v2:1.9.1 -com.google.api.grpc:proto-google-cloud-datastore-v1:0.85.0 -com.google.api.grpc:proto-google-cloud-pubsub-v1:1.85.1 -com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.2.3 -com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.2.3 -com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:1.49.1 -com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:1.49.1 -com.google.api.grpc:proto-google-cloud-spanner-v1:1.49.1 -com.google.api.grpc:proto-google-common-protos:2.0.0 -com.google.api.grpc:proto-google-iam-v1:1.0.1 +com.google.api-client:google-api-client:1.30.10 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:1.5.5 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.105.5 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.105.5 +com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.14.0 +com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.14.0 +com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.90.3 +com.google.api.grpc:grpc-google-cloud-pubsublite-v1:0.7.0 +com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:2.0.2 +com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:2.0.2 +com.google.api.grpc:grpc-google-cloud-spanner-v1:2.0.2 +com.google.api.grpc:grpc-google-common-protos:1.18.1 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:1.5.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1alpha2:0.105.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.105.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.105.5 +com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:1.14.0 +com.google.api.grpc:proto-google-cloud-bigtable-v2:1.16.1 +com.google.api.grpc:proto-google-cloud-datastore-v1:0.88.0 +com.google.api.grpc:proto-google-cloud-pubsub-v1:1.92.0 +com.google.api.grpc:proto-google-cloud-pubsublite-v1:0.7.0 +com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.2.9 +com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.2.9 +com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:2.0.2 +com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:2.0.2 +com.google.api.grpc:proto-google-cloud-spanner-v1:2.0.2 +com.google.api.grpc:proto-google-common-protos:2.0.1 +com.google.api.grpc:proto-google-iam-v1:1.0.5 com.google.api:api-common:1.10.1 -com.google.api:gax-grpc:1.60.0 -com.google.api:gax-httpjson:0.70.1 -com.google.api:gax:1.60.0 +com.google.api:gax-grpc:1.60.1 +com.google.api:gax-httpjson:0.76.1 +com.google.api:gax:1.60.1 com.google.apis:google-api-services-admin-directory:directory_v1-rev72-1.22.0 com.google.apis:google-api-services-appengine:v1-rev101-1.25.0 -com.google.apis:google-api-services-bigquery:v2-rev20191211-1.30.9 -com.google.apis:google-api-services-clouddebugger:v2-rev20200313-1.30.9 +com.google.apis:google-api-services-bigquery:v2-rev20200916-1.30.10 +com.google.apis:google-api-services-clouddebugger:v2-rev20200501-1.30.10 com.google.apis:google-api-services-cloudkms:v1-rev12-1.22.0 -com.google.apis:google-api-services-cloudresourcemanager:v1-rev20200311-1.30.9 -com.google.apis:google-api-services-dataflow:v1b3-rev20200305-1.30.9 +com.google.apis:google-api-services-cloudresourcemanager:v1-rev20200720-1.30.10 +com.google.apis:google-api-services-dataflow:v1b3-rev20200713-1.30.10 com.google.apis:google-api-services-dns:v2beta1-rev6-1.22.0 com.google.apis:google-api-services-drive:v2-rev160-1.19.1 com.google.apis:google-api-services-groupssettings:v1-rev60-1.22.0 -com.google.apis:google-api-services-healthcare:v1beta1-rev20200525-1.30.9 +com.google.apis:google-api-services-healthcare:v1beta1-rev20200713-1.30.10 +com.google.apis:google-api-services-iamcredentials:v1-rev20201022-1.30.10 com.google.apis:google-api-services-monitoring:v3-rev426-1.23.0 -com.google.apis:google-api-services-pubsub:v1-rev20200312-1.30.9 +com.google.apis:google-api-services-pubsub:v1-rev20200713-1.30.10 com.google.apis:google-api-services-sheets:v4-rev483-1.22.0 com.google.apis:google-api-services-sqladmin:v1beta4-rev20190827-1.30.1 -com.google.apis:google-api-services-storage:v1-rev20200326-1.30.9 +com.google.apis:google-api-services-storage:v1-rev20200927-1.30.10 com.google.appengine.tools:appengine-gcs-client:0.6 com.google.appengine.tools:appengine-mapreduce:0.9 com.google.appengine.tools:appengine-pipeline:0.2.13 com.google.appengine:appengine-api-1.0-sdk:1.9.81 com.google.appengine:appengine-remote-api:1.9.81 com.google.appengine:appengine-testing:1.9.81 -com.google.auth:google-auth-library-credentials:0.22.0 -com.google.auth:google-auth-library-oauth2-http:0.22.0 +com.google.auth:google-auth-library-credentials:0.22.2 +com.google.auth:google-auth-library-oauth2-http:0.22.2 +com.google.auto.service:auto-service-annotations:1.0-rc7 com.google.auto.value:auto-value-annotations:1.7.4 -com.google.auto.value:auto-value:1.6.3 -com.google.cloud.bigdataoss:gcsio:2.1.3 -com.google.cloud.bigdataoss:util:2.1.3 -com.google.cloud.bigtable:bigtable-client-core:1.13.0 +com.google.auto.value:auto-value:1.7.4 +com.google.cloud.bigdataoss:gcsio:2.1.6 +com.google.cloud.bigdataoss:util:2.1.6 +com.google.cloud.bigtable:bigtable-client-core:1.16.0 com.google.cloud.datastore:datastore-v1-proto-client:1.6.3 com.google.cloud.sql:jdbc-socket-factory-core:1.0.16 -com.google.cloud:google-cloud-bigquery:1.106.0 -com.google.cloud:google-cloud-bigquerystorage:0.125.0-beta -com.google.cloud:google-cloud-bigtable:1.9.1 -com.google.cloud:google-cloud-core-grpc:1.92.2 -com.google.cloud:google-cloud-core-http:1.92.4 -com.google.cloud:google-cloud-core:1.92.5 -com.google.cloud:google-cloud-secretmanager:1.2.3 -com.google.cloud:google-cloud-spanner:1.49.1 +com.google.cloud:google-cloud-bigquery:1.122.2 +com.google.cloud:google-cloud-bigquerystorage:1.5.5 +com.google.cloud:google-cloud-bigtable:1.14.0 +com.google.cloud:google-cloud-core-grpc:1.93.9 +com.google.cloud:google-cloud-core-http:1.93.9 +com.google.cloud:google-cloud-core:1.93.9 +com.google.cloud:google-cloud-pubsub:1.110.0 +com.google.cloud:google-cloud-pubsublite:0.7.0 +com.google.cloud:google-cloud-secretmanager:1.2.9 +com.google.cloud:google-cloud-spanner:2.0.2 com.google.code.findbugs:jsr305:3.0.2 com.google.code.gson:gson:2.8.6 com.google.common.html.types:types:1.0.4 com.google.dagger:dagger:2.28 -com.google.errorprone:error_prone_annotations:2.4.0 +com.google.errorprone:error_prone_annotations:2.5.0 com.google.flogger:flogger-system-backend:0.5.1 com.google.flogger:flogger:0.5.1 com.google.flogger:google-extensions:0.5.1 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava:30.0-jre +com.google.guava:guava:30.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.gwt:gwt-user:2.8.2 -com.google.http-client:google-http-client-appengine:1.34.1 -com.google.http-client:google-http-client-jackson2:1.37.0 +com.google.http-client:google-http-client-appengine:1.36.0 +com.google.http-client:google-http-client-jackson2:1.38.0 com.google.http-client:google-http-client-protobuf:1.33.0 -com.google.http-client:google-http-client:1.37.0 +com.google.http-client:google-http-client:1.38.0 com.google.inject.extensions:guice-multibindings:4.1.0 com.google.inject:guice:4.1.0 com.google.j2objc:j2objc-annotations:1.3 @@ -112,54 +126,49 @@ com.google.jsinterop:jsinterop-annotations:1.0.2 com.google.monitoring-client:metrics:1.0.7 com.google.monitoring-client:stackdriver:1.0.7 com.google.oauth-client:google-oauth-client-appengine:1.30.5 -com.google.oauth-client:google-oauth-client-java6:1.30.6 +com.google.oauth-client:google-oauth-client-java6:1.31.2 com.google.oauth-client:google-oauth-client-jetty:1.28.0 com.google.oauth-client:google-oauth-client-servlet:1.30.5 -com.google.oauth-client:google-oauth-client:1.30.6 -com.google.protobuf:protobuf-java-util:3.13.0 -com.google.protobuf:protobuf-java:3.13.0 +com.google.oauth-client:google-oauth-client:1.31.2 +com.google.protobuf:protobuf-java-util:3.14.0 +com.google.protobuf:protobuf-java:3.14.0 com.google.re2j:re2j:1.1 com.google.template:soy:2018-03-14 com.googlecode.charts4j:charts4j:1.3 com.googlecode.json-simple:json-simple:1.1.1 com.ibm.icu:icu4j:57.1 com.jcraft:jsch:0.1.55 -com.squareup.okhttp:okhttp:2.5.0 -com.squareup.okio:okio:1.13.0 com.sun.istack:istack-commons-runtime:3.0.7 com.sun.xml.fastinfoset:FastInfoset:1.2.15 com.thoughtworks.paranamer:paranamer:2.7 com.zaxxer:HikariCP:3.4.5 -commons-codec:commons-codec:1.13 +commons-codec:commons-codec:1.15 commons-logging:commons-logging:1.2 dnsjava:dnsjava:2.1.7 io.dropwizard.metrics:metrics-core:3.2.6 io.github.classgraph:classgraph:4.8.65 -io.grpc:grpc-all:1.27.2 -io.grpc:grpc-alts:1.32.2 -io.grpc:grpc-api:1.32.2 -io.grpc:grpc-auth:1.32.2 -io.grpc:grpc-context:1.32.2 -io.grpc:grpc-core:1.32.2 -io.grpc:grpc-grpclb:1.32.2 -io.grpc:grpc-netty-shaded:1.32.2 -io.grpc:grpc-netty:1.27.2 -io.grpc:grpc-okhttp:1.27.2 -io.grpc:grpc-protobuf-lite:1.32.2 -io.grpc:grpc-protobuf:1.32.2 -io.grpc:grpc-stub:1.32.2 -io.grpc:grpc-testing:1.27.2 -io.netty:netty-buffer:4.1.42.Final -io.netty:netty-codec-http2:4.1.42.Final -io.netty:netty-codec-http:4.1.42.Final -io.netty:netty-codec-socks:4.1.42.Final -io.netty:netty-codec:4.1.42.Final -io.netty:netty-common:4.1.42.Final -io.netty:netty-handler-proxy:4.1.42.Final -io.netty:netty-handler:4.1.42.Final -io.netty:netty-resolver:4.1.42.Final -io.netty:netty-tcnative-boringssl-static:2.0.17.Final -io.netty:netty-transport:4.1.42.Final +io.grpc:grpc-alts:1.34.1 +io.grpc:grpc-api:1.34.1 +io.grpc:grpc-auth:1.34.1 +io.grpc:grpc-context:1.34.1 +io.grpc:grpc-core:1.34.1 +io.grpc:grpc-grpclb:1.34.1 +io.grpc:grpc-netty-shaded:1.34.1 +io.grpc:grpc-netty:1.32.2 +io.grpc:grpc-protobuf-lite:1.34.1 +io.grpc:grpc-protobuf:1.34.1 +io.grpc:grpc-stub:1.34.1 +io.netty:netty-buffer:4.1.51.Final +io.netty:netty-codec-http2:4.1.51.Final +io.netty:netty-codec-http:4.1.51.Final +io.netty:netty-codec-socks:4.1.51.Final +io.netty:netty-codec:4.1.51.Final +io.netty:netty-common:4.1.51.Final +io.netty:netty-handler-proxy:4.1.51.Final +io.netty:netty-handler:4.1.51.Final +io.netty:netty-resolver:4.1.51.Final +io.netty:netty-tcnative-boringssl-static:2.0.33.Final +io.netty:netty-transport:4.1.51.Final io.opencensus:opencensus-api:0.24.0 io.opencensus:opencensus-contrib-grpc-util:0.24.0 io.opencensus:opencensus-contrib-http-util:0.24.0 @@ -179,26 +188,26 @@ javax.validation:validation-api:1.0.0.GA javax.xml.bind:jaxb-api:2.3.1 jline:jline:1.0 joda-time:joda-time:2.10.5 -junit:junit:4.12 +junit:junit:4.13.1 net.bytebuddy:byte-buddy:1.10.17 net.java.dev.jna:jna:5.5.0 org.apache.avro:avro:1.8.2 -org.apache.beam:beam-model-fn-execution:2.23.0 -org.apache.beam:beam-model-job-management:2.23.0 -org.apache.beam:beam-model-pipeline:2.23.0 -org.apache.beam:beam-runners-core-construction-java:2.23.0 -org.apache.beam:beam-runners-google-cloud-dataflow-java:2.23.0 -org.apache.beam:beam-runners-java-fn-execution:2.23.0 -org.apache.beam:beam-sdks-java-core:2.23.0 -org.apache.beam:beam-sdks-java-expansion-service:2.23.0 -org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.23.0 -org.apache.beam:beam-sdks-java-extensions-protobuf:2.23.0 -org.apache.beam:beam-sdks-java-fn-execution:2.23.0 -org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.23.0 +org.apache.beam:beam-model-fn-execution:2.27.0 +org.apache.beam:beam-model-job-management:2.27.0 +org.apache.beam:beam-model-pipeline:2.27.0 +org.apache.beam:beam-runners-core-construction-java:2.27.0 +org.apache.beam:beam-runners-google-cloud-dataflow-java:2.27.0 +org.apache.beam:beam-runners-java-fn-execution:2.27.0 +org.apache.beam:beam-sdks-java-core:2.27.0 +org.apache.beam:beam-sdks-java-expansion-service:2.27.0 +org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.27.0 +org.apache.beam:beam-sdks-java-extensions-protobuf:2.27.0 +org.apache.beam:beam-sdks-java-fn-execution:2.27.0 +org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.27.0 org.apache.beam:beam-vendor-bytebuddy-1_10_8:0.1 org.apache.beam:beam-vendor-grpc-1_26_0:0.3 org.apache.beam:beam-vendor-guava-26_0-jre:0.1 -org.apache.beam:beam-vendor-sdks-java-extensions-protobuf:2.23.0 +org.apache.beam:beam-vendor-sdks-java-extensions-protobuf:2.27.0 org.apache.commons:commons-compress:1.20 org.apache.commons:commons-lang3:3.5 org.apache.httpcomponents:httpclient:4.5.13 @@ -208,17 +217,18 @@ org.bouncycastle:bcpg-jdk15on:1.61 org.bouncycastle:bcpkix-jdk15on:1.61 org.bouncycastle:bcprov-jdk15on:1.61 org.checkerframework:checker-compat-qual:2.5.5 -org.checkerframework:checker-qual:3.5.0 +org.checkerframework:checker-qual:3.7.0 org.codehaus.jackson:jackson-core-asl:1.9.13 org.codehaus.jackson:jackson-mapper-asl:1.9.13 org.codehaus.mojo:animal-sniffer-annotations:1.19 -org.conscrypt:conscrypt-openjdk-uber:2.2.1 +org.conscrypt:conscrypt-openjdk-uber:2.5.1 org.dom4j:dom4j:2.1.3 org.easymock:easymock:3.0 org.flywaydb:flyway-core:5.2.4 org.glassfish.jaxb:jaxb-runtime:2.3.1 org.glassfish.jaxb:txw2:2.3.1 -org.hamcrest:hamcrest-core:1.3 +org.hamcrest:hamcrest-core:2.1 +org.hamcrest:hamcrest:2.1 org.hibernate.common:hibernate-commons-annotations:5.1.2.Final org.hibernate:hibernate-core:5.4.23.Final org.hibernate:hibernate-hikaricp:5.4.23.Final @@ -227,7 +237,7 @@ org.jboss.logging:jboss-logging:3.4.1.Final org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.1.1.Final org.jboss:jandex:2.1.3.Final org.joda:joda-money:1.0.1 -org.json:json:20160810 +org.json:json:20200518 org.jsoup:jsoup:1.13.1 org.jvnet.staxex:stax-ex:1.8 org.mortbay.jetty:jetty-util:6.1.26 @@ -246,7 +256,7 @@ org.testcontainers:database-commons:1.15.1 org.testcontainers:jdbc:1.15.1 org.testcontainers:postgresql:1.15.1 org.testcontainers:testcontainers:1.15.1 -org.threeten:threetenbp:1.4.5 +org.threeten:threetenbp:1.5.0 org.tukaani:xz:1.8 org.w3c.css:sac:1.3 org.xerial.snappy:snappy-java:1.1.4 diff --git a/core/gradle/dependency-locks/nonprodCompileClasspath.lockfile b/core/gradle/dependency-locks/nonprodCompileClasspath.lockfile index 9f5f9d127..b52640c25 100644 --- a/core/gradle/dependency-locks/nonprodCompileClasspath.lockfile +++ b/core/gradle/dependency-locks/nonprodCompileClasspath.lockfile @@ -6,9 +6,10 @@ aopalliance:aopalliance:1.0 args4j:args4j:2.33 cglib:cglib-nodep:2.2 com.beust:jcommander:1.60 -com.fasterxml.jackson.core:jackson-annotations:2.10.3 -com.fasterxml.jackson.core:jackson-core:2.11.3 -com.fasterxml.jackson.core:jackson-databind:2.10.2 +com.fasterxml.jackson.core:jackson-annotations:2.12.1 +com.fasterxml.jackson.core:jackson-core:2.12.1 +com.fasterxml.jackson.core:jackson-databind:2.12.1 +com.fasterxml.jackson:jackson-bom:2.12.1 com.fasterxml:classmate:1.5.1 com.github.docker-java:docker-java-api:3.2.7 com.github.docker-java:docker-java-transport-zerodep:3.2.7 @@ -21,88 +22,101 @@ com.github.jnr:jnr-ffi:2.1.13 com.github.jnr:jnr-posix:3.0.55 com.github.jnr:jnr-unixsocket:0.30 com.github.jnr:jnr-x86asm:1.0.2 +com.github.rholder:guava-retrying:2.0.0 com.google.api-client:google-api-client-appengine:1.30.8 -com.google.api-client:google-api-client-jackson2:1.30.9 -com.google.api-client:google-api-client-java6:1.30.9 +com.google.api-client:google-api-client-jackson2:1.30.10 +com.google.api-client:google-api-client-java6:1.30.10 com.google.api-client:google-api-client-servlet:1.30.8 -com.google.api-client:google-api-client:1.30.9 -com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.9.1 -com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.9.1 -com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.85.1 -com.google.api.grpc:grpc-google-common-protos:1.17.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1alpha2:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.90.0 -com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:1.9.1 -com.google.api.grpc:proto-google-cloud-bigtable-v2:1.9.1 -com.google.api.grpc:proto-google-cloud-datastore-v1:0.85.0 -com.google.api.grpc:proto-google-cloud-pubsub-v1:1.85.1 -com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.2.3 -com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.2.3 -com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:1.49.1 -com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:1.49.1 -com.google.api.grpc:proto-google-cloud-spanner-v1:1.49.1 -com.google.api.grpc:proto-google-common-protos:2.0.0 -com.google.api.grpc:proto-google-iam-v1:1.0.1 +com.google.api-client:google-api-client:1.30.10 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:1.5.5 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.105.5 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.105.5 +com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.14.0 +com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.14.0 +com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.90.3 +com.google.api.grpc:grpc-google-cloud-pubsublite-v1:0.7.0 +com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:2.0.2 +com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:2.0.2 +com.google.api.grpc:grpc-google-cloud-spanner-v1:2.0.2 +com.google.api.grpc:grpc-google-common-protos:1.18.1 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:1.5.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1alpha2:0.105.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.105.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.105.5 +com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:1.14.0 +com.google.api.grpc:proto-google-cloud-bigtable-v2:1.16.1 +com.google.api.grpc:proto-google-cloud-datastore-v1:0.88.0 +com.google.api.grpc:proto-google-cloud-pubsub-v1:1.92.0 +com.google.api.grpc:proto-google-cloud-pubsublite-v1:0.7.0 +com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.2.9 +com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.2.9 +com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:2.0.2 +com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:2.0.2 +com.google.api.grpc:proto-google-cloud-spanner-v1:2.0.2 +com.google.api.grpc:proto-google-common-protos:2.0.1 +com.google.api.grpc:proto-google-iam-v1:1.0.5 com.google.api:api-common:1.10.1 -com.google.api:gax-grpc:1.60.0 -com.google.api:gax-httpjson:0.70.1 -com.google.api:gax:1.60.0 +com.google.api:gax-grpc:1.60.1 +com.google.api:gax-httpjson:0.76.1 +com.google.api:gax:1.60.1 com.google.apis:google-api-services-admin-directory:directory_v1-rev72-1.22.0 com.google.apis:google-api-services-appengine:v1-rev101-1.25.0 -com.google.apis:google-api-services-bigquery:v2-rev20191211-1.30.9 -com.google.apis:google-api-services-clouddebugger:v2-rev20200313-1.30.9 +com.google.apis:google-api-services-bigquery:v2-rev20200916-1.30.10 +com.google.apis:google-api-services-clouddebugger:v2-rev20200501-1.30.10 com.google.apis:google-api-services-cloudkms:v1-rev12-1.22.0 -com.google.apis:google-api-services-cloudresourcemanager:v1-rev20200311-1.30.9 -com.google.apis:google-api-services-dataflow:v1b3-rev20200305-1.30.9 +com.google.apis:google-api-services-cloudresourcemanager:v1-rev20200720-1.30.10 +com.google.apis:google-api-services-dataflow:v1b3-rev20200713-1.30.10 com.google.apis:google-api-services-dns:v2beta1-rev6-1.22.0 com.google.apis:google-api-services-drive:v2-rev160-1.19.1 com.google.apis:google-api-services-groupssettings:v1-rev60-1.22.0 -com.google.apis:google-api-services-healthcare:v1beta1-rev20200525-1.30.9 +com.google.apis:google-api-services-healthcare:v1beta1-rev20200713-1.30.10 +com.google.apis:google-api-services-iamcredentials:v1-rev20201022-1.30.10 com.google.apis:google-api-services-monitoring:v3-rev426-1.23.0 -com.google.apis:google-api-services-pubsub:v1-rev20200312-1.30.9 +com.google.apis:google-api-services-pubsub:v1-rev20200713-1.30.10 com.google.apis:google-api-services-sheets:v4-rev483-1.22.0 com.google.apis:google-api-services-sqladmin:v1beta4-rev20190827-1.30.1 -com.google.apis:google-api-services-storage:v1-rev20200326-1.30.9 +com.google.apis:google-api-services-storage:v1-rev20200927-1.30.10 com.google.appengine.tools:appengine-gcs-client:0.6 com.google.appengine.tools:appengine-mapreduce:0.9 com.google.appengine.tools:appengine-pipeline:0.2.13 com.google.appengine:appengine-api-1.0-sdk:1.9.81 com.google.appengine:appengine-remote-api:1.9.81 com.google.appengine:appengine-testing:1.9.81 -com.google.auth:google-auth-library-credentials:0.22.0 -com.google.auth:google-auth-library-oauth2-http:0.22.0 +com.google.auth:google-auth-library-credentials:0.22.2 +com.google.auth:google-auth-library-oauth2-http:0.22.2 +com.google.auto.service:auto-service-annotations:1.0-rc7 com.google.auto.value:auto-value-annotations:1.7.4 -com.google.auto.value:auto-value:1.6.3 -com.google.cloud.bigdataoss:gcsio:2.1.3 -com.google.cloud.bigdataoss:util:2.1.3 -com.google.cloud.bigtable:bigtable-client-core:1.13.0 +com.google.auto.value:auto-value:1.7.4 +com.google.cloud.bigdataoss:gcsio:2.1.6 +com.google.cloud.bigdataoss:util:2.1.6 +com.google.cloud.bigtable:bigtable-client-core:1.16.0 com.google.cloud.datastore:datastore-v1-proto-client:1.6.3 com.google.cloud.sql:jdbc-socket-factory-core:1.0.16 -com.google.cloud:google-cloud-bigquery:1.106.0 -com.google.cloud:google-cloud-bigquerystorage:0.125.0-beta -com.google.cloud:google-cloud-bigtable:1.9.1 -com.google.cloud:google-cloud-core-grpc:1.92.2 -com.google.cloud:google-cloud-core-http:1.92.4 -com.google.cloud:google-cloud-core:1.92.5 -com.google.cloud:google-cloud-secretmanager:1.2.3 -com.google.cloud:google-cloud-spanner:1.49.1 +com.google.cloud:google-cloud-bigquery:1.122.2 +com.google.cloud:google-cloud-bigquerystorage:1.5.5 +com.google.cloud:google-cloud-bigtable:1.14.0 +com.google.cloud:google-cloud-core-grpc:1.93.9 +com.google.cloud:google-cloud-core-http:1.93.9 +com.google.cloud:google-cloud-core:1.93.9 +com.google.cloud:google-cloud-pubsub:1.110.0 +com.google.cloud:google-cloud-pubsublite:0.7.0 +com.google.cloud:google-cloud-secretmanager:1.2.9 +com.google.cloud:google-cloud-spanner:2.0.2 com.google.code.findbugs:jsr305:3.0.2 com.google.code.gson:gson:2.8.6 com.google.common.html.types:types:1.0.4 com.google.dagger:dagger:2.28 -com.google.errorprone:error_prone_annotations:2.4.0 +com.google.errorprone:error_prone_annotations:2.5.0 com.google.flogger:flogger:0.5.1 com.google.flogger:google-extensions:0.5.1 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava:30.0-jre +com.google.guava:guava:30.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.gwt:gwt-user:2.8.2 -com.google.http-client:google-http-client-appengine:1.34.1 -com.google.http-client:google-http-client-jackson2:1.37.0 +com.google.http-client:google-http-client-appengine:1.36.0 +com.google.http-client:google-http-client-jackson2:1.38.0 com.google.http-client:google-http-client-protobuf:1.33.0 -com.google.http-client:google-http-client:1.37.0 +com.google.http-client:google-http-client:1.38.0 com.google.inject.extensions:guice-multibindings:4.1.0 com.google.inject:guice:4.1.0 com.google.j2objc:j2objc-annotations:1.3 @@ -110,54 +124,47 @@ com.google.jsinterop:jsinterop-annotations:1.0.2 com.google.monitoring-client:metrics:1.0.7 com.google.monitoring-client:stackdriver:1.0.7 com.google.oauth-client:google-oauth-client-appengine:1.30.5 -com.google.oauth-client:google-oauth-client-java6:1.30.6 +com.google.oauth-client:google-oauth-client-java6:1.31.2 com.google.oauth-client:google-oauth-client-jetty:1.28.0 com.google.oauth-client:google-oauth-client-servlet:1.30.5 -com.google.oauth-client:google-oauth-client:1.30.6 -com.google.protobuf:protobuf-java-util:3.11.4 -com.google.protobuf:protobuf-java:3.13.0 +com.google.oauth-client:google-oauth-client:1.31.2 +com.google.protobuf:protobuf-java-util:3.14.0 +com.google.protobuf:protobuf-java:3.14.0 com.google.re2j:re2j:1.1 com.google.template:soy:2018-03-14 com.googlecode.charts4j:charts4j:1.3 com.googlecode.json-simple:json-simple:1.1.1 com.ibm.icu:icu4j:57.1 com.jcraft:jsch:0.1.55 -com.squareup.okhttp:okhttp:2.5.0 -com.squareup.okio:okio:1.13.0 com.sun.istack:istack-commons-runtime:3.0.7 com.sun.xml.fastinfoset:FastInfoset:1.2.15 com.thoughtworks.paranamer:paranamer:2.7 com.zaxxer:HikariCP:3.4.5 -commons-codec:commons-codec:1.13 +commons-codec:commons-codec:1.15 commons-logging:commons-logging:1.2 dnsjava:dnsjava:2.1.7 io.dropwizard.metrics:metrics-core:3.2.6 io.github.classgraph:classgraph:4.8.65 -io.grpc:grpc-all:1.27.2 -io.grpc:grpc-alts:1.32.2 -io.grpc:grpc-api:1.32.2 -io.grpc:grpc-auth:1.32.2 -io.grpc:grpc-context:1.32.2 -io.grpc:grpc-core:1.32.2 -io.grpc:grpc-grpclb:1.32.2 -io.grpc:grpc-netty-shaded:1.32.2 -io.grpc:grpc-netty:1.27.2 -io.grpc:grpc-okhttp:1.27.2 -io.grpc:grpc-protobuf-lite:1.32.2 -io.grpc:grpc-protobuf:1.32.2 -io.grpc:grpc-stub:1.32.2 -io.grpc:grpc-testing:1.27.2 -io.netty:netty-buffer:4.1.42.Final -io.netty:netty-codec-http2:4.1.42.Final -io.netty:netty-codec-http:4.1.42.Final -io.netty:netty-codec-socks:4.1.42.Final -io.netty:netty-codec:4.1.42.Final -io.netty:netty-common:4.1.42.Final -io.netty:netty-handler-proxy:4.1.42.Final -io.netty:netty-handler:4.1.42.Final -io.netty:netty-resolver:4.1.42.Final -io.netty:netty-tcnative-boringssl-static:2.0.17.Final -io.netty:netty-transport:4.1.42.Final +io.grpc:grpc-alts:1.34.1 +io.grpc:grpc-api:1.34.1 +io.grpc:grpc-auth:1.34.1 +io.grpc:grpc-context:1.34.1 +io.grpc:grpc-core:1.34.1 +io.grpc:grpc-grpclb:1.34.1 +io.grpc:grpc-netty-shaded:1.34.1 +io.grpc:grpc-netty:1.32.2 +io.grpc:grpc-protobuf-lite:1.34.1 +io.grpc:grpc-protobuf:1.34.1 +io.grpc:grpc-stub:1.34.1 +io.netty:netty-buffer:4.1.51.Final +io.netty:netty-codec-http2:4.1.51.Final +io.netty:netty-codec-http:4.1.51.Final +io.netty:netty-codec:4.1.51.Final +io.netty:netty-common:4.1.51.Final +io.netty:netty-handler:4.1.51.Final +io.netty:netty-resolver:4.1.51.Final +io.netty:netty-tcnative-boringssl-static:2.0.33.Final +io.netty:netty-transport:4.1.51.Final io.opencensus:opencensus-api:0.24.0 io.opencensus:opencensus-contrib-grpc-util:0.24.0 io.opencensus:opencensus-contrib-http-util:0.24.0 @@ -176,26 +183,26 @@ javax.validation:validation-api:1.0.0.GA javax.xml.bind:jaxb-api:2.3.1 jline:jline:1.0 joda-time:joda-time:2.10.5 -junit:junit:4.12 +junit:junit:4.13.1 net.bytebuddy:byte-buddy:1.10.17 net.java.dev.jna:jna:5.5.0 org.apache.avro:avro:1.8.2 -org.apache.beam:beam-model-fn-execution:2.23.0 -org.apache.beam:beam-model-job-management:2.23.0 -org.apache.beam:beam-model-pipeline:2.23.0 -org.apache.beam:beam-runners-core-construction-java:2.23.0 -org.apache.beam:beam-runners-google-cloud-dataflow-java:2.23.0 -org.apache.beam:beam-runners-java-fn-execution:2.23.0 -org.apache.beam:beam-sdks-java-core:2.23.0 -org.apache.beam:beam-sdks-java-expansion-service:2.23.0 -org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.23.0 -org.apache.beam:beam-sdks-java-extensions-protobuf:2.23.0 -org.apache.beam:beam-sdks-java-fn-execution:2.23.0 -org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.23.0 +org.apache.beam:beam-model-fn-execution:2.27.0 +org.apache.beam:beam-model-job-management:2.27.0 +org.apache.beam:beam-model-pipeline:2.27.0 +org.apache.beam:beam-runners-core-construction-java:2.27.0 +org.apache.beam:beam-runners-google-cloud-dataflow-java:2.27.0 +org.apache.beam:beam-runners-java-fn-execution:2.27.0 +org.apache.beam:beam-sdks-java-core:2.27.0 +org.apache.beam:beam-sdks-java-expansion-service:2.27.0 +org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.27.0 +org.apache.beam:beam-sdks-java-extensions-protobuf:2.27.0 +org.apache.beam:beam-sdks-java-fn-execution:2.27.0 +org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.27.0 org.apache.beam:beam-vendor-bytebuddy-1_10_8:0.1 org.apache.beam:beam-vendor-grpc-1_26_0:0.3 org.apache.beam:beam-vendor-guava-26_0-jre:0.1 -org.apache.beam:beam-vendor-sdks-java-extensions-protobuf:2.23.0 +org.apache.beam:beam-vendor-sdks-java-extensions-protobuf:2.27.0 org.apache.commons:commons-compress:1.20 org.apache.commons:commons-lang3:3.5 org.apache.httpcomponents:httpclient:4.5.13 @@ -205,16 +212,17 @@ org.bouncycastle:bcpg-jdk15on:1.61 org.bouncycastle:bcpkix-jdk15on:1.61 org.bouncycastle:bcprov-jdk15on:1.61 org.checkerframework:checker-compat-qual:2.5.5 -org.checkerframework:checker-qual:3.5.0 +org.checkerframework:checker-qual:3.7.0 org.codehaus.jackson:jackson-core-asl:1.9.13 org.codehaus.jackson:jackson-mapper-asl:1.9.13 -org.conscrypt:conscrypt-openjdk-uber:2.2.1 +org.conscrypt:conscrypt-openjdk-uber:2.5.1 org.dom4j:dom4j:2.1.3 org.easymock:easymock:3.0 org.flywaydb:flyway-core:5.2.4 org.glassfish.jaxb:jaxb-runtime:2.3.1 org.glassfish.jaxb:txw2:2.3.1 -org.hamcrest:hamcrest-core:1.3 +org.hamcrest:hamcrest-core:2.1 +org.hamcrest:hamcrest:2.1 org.hibernate.common:hibernate-commons-annotations:5.1.2.Final org.hibernate:hibernate-core:5.4.23.Final org.hibernate:hibernate-hikaricp:5.4.23.Final @@ -223,7 +231,7 @@ org.jboss.logging:jboss-logging:3.4.1.Final org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.1.1.Final org.jboss:jandex:2.1.3.Final org.joda:joda-money:1.0.1 -org.json:json:20160810 +org.json:json:20200518 org.jsoup:jsoup:1.13.1 org.jvnet.staxex:stax-ex:1.8 org.mortbay.jetty:jetty-util:6.1.26 @@ -242,7 +250,7 @@ org.testcontainers:database-commons:1.15.1 org.testcontainers:jdbc:1.15.1 org.testcontainers:postgresql:1.15.1 org.testcontainers:testcontainers:1.15.1 -org.threeten:threetenbp:1.4.5 +org.threeten:threetenbp:1.5.0 org.tukaani:xz:1.8 org.w3c.css:sac:1.3 org.xerial.snappy:snappy-java:1.1.4 diff --git a/core/gradle/dependency-locks/nonprodRuntime.lockfile b/core/gradle/dependency-locks/nonprodRuntime.lockfile index 3058addee..83d065a59 100644 --- a/core/gradle/dependency-locks/nonprodRuntime.lockfile +++ b/core/gradle/dependency-locks/nonprodRuntime.lockfile @@ -10,9 +10,10 @@ com.eclipsesource.j2v8:j2v8_linux_x86_64:4.6.0 com.eclipsesource.j2v8:j2v8_macosx_x86_64:4.6.0 com.eclipsesource.j2v8:j2v8_win32_x86:4.6.0 com.eclipsesource.j2v8:j2v8_win32_x86_64:4.6.0 -com.fasterxml.jackson.core:jackson-annotations:2.10.3 -com.fasterxml.jackson.core:jackson-core:2.11.3 -com.fasterxml.jackson.core:jackson-databind:2.10.2 +com.fasterxml.jackson.core:jackson-annotations:2.12.1 +com.fasterxml.jackson.core:jackson-core:2.12.1 +com.fasterxml.jackson.core:jackson-databind:2.12.1 +com.fasterxml.jackson:jackson-bom:2.12.1 com.fasterxml:classmate:1.5.1 com.github.docker-java:docker-java-api:3.2.7 com.github.docker-java:docker-java-transport-zerodep:3.2.7 @@ -25,90 +26,103 @@ com.github.jnr:jnr-ffi:2.1.13 com.github.jnr:jnr-posix:3.0.55 com.github.jnr:jnr-unixsocket:0.30 com.github.jnr:jnr-x86asm:1.0.2 +com.github.rholder:guava-retrying:2.0.0 com.google.android:annotations:4.1.1.4 com.google.api-client:google-api-client-appengine:1.30.8 -com.google.api-client:google-api-client-jackson2:1.30.9 -com.google.api-client:google-api-client-java6:1.30.9 +com.google.api-client:google-api-client-jackson2:1.30.10 +com.google.api-client:google-api-client-java6:1.30.10 com.google.api-client:google-api-client-servlet:1.30.8 -com.google.api-client:google-api-client:1.30.9 -com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.9.1 -com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.9.1 -com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.85.1 -com.google.api.grpc:grpc-google-common-protos:1.17.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1alpha2:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.90.0 -com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:1.9.1 -com.google.api.grpc:proto-google-cloud-bigtable-v2:1.9.1 -com.google.api.grpc:proto-google-cloud-datastore-v1:0.85.0 -com.google.api.grpc:proto-google-cloud-pubsub-v1:1.85.1 -com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.2.3 -com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.2.3 -com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:1.49.1 -com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:1.49.1 -com.google.api.grpc:proto-google-cloud-spanner-v1:1.49.1 -com.google.api.grpc:proto-google-common-protos:2.0.0 -com.google.api.grpc:proto-google-iam-v1:1.0.1 +com.google.api-client:google-api-client:1.30.10 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:1.5.5 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.105.5 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.105.5 +com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.14.0 +com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.14.0 +com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.90.3 +com.google.api.grpc:grpc-google-cloud-pubsublite-v1:0.7.0 +com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:2.0.2 +com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:2.0.2 +com.google.api.grpc:grpc-google-cloud-spanner-v1:2.0.2 +com.google.api.grpc:grpc-google-common-protos:1.18.1 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:1.5.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1alpha2:0.105.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.105.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.105.5 +com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:1.14.0 +com.google.api.grpc:proto-google-cloud-bigtable-v2:1.16.1 +com.google.api.grpc:proto-google-cloud-datastore-v1:0.88.0 +com.google.api.grpc:proto-google-cloud-pubsub-v1:1.92.0 +com.google.api.grpc:proto-google-cloud-pubsublite-v1:0.7.0 +com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.2.9 +com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.2.9 +com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:2.0.2 +com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:2.0.2 +com.google.api.grpc:proto-google-cloud-spanner-v1:2.0.2 +com.google.api.grpc:proto-google-common-protos:2.0.1 +com.google.api.grpc:proto-google-iam-v1:1.0.5 com.google.api:api-common:1.10.1 -com.google.api:gax-grpc:1.60.0 -com.google.api:gax-httpjson:0.70.1 -com.google.api:gax:1.60.0 +com.google.api:gax-grpc:1.60.1 +com.google.api:gax-httpjson:0.76.1 +com.google.api:gax:1.60.1 com.google.apis:google-api-services-admin-directory:directory_v1-rev72-1.22.0 com.google.apis:google-api-services-appengine:v1-rev101-1.25.0 -com.google.apis:google-api-services-bigquery:v2-rev20191211-1.30.9 -com.google.apis:google-api-services-clouddebugger:v2-rev20200313-1.30.9 +com.google.apis:google-api-services-bigquery:v2-rev20200916-1.30.10 +com.google.apis:google-api-services-clouddebugger:v2-rev20200501-1.30.10 com.google.apis:google-api-services-cloudkms:v1-rev12-1.22.0 -com.google.apis:google-api-services-cloudresourcemanager:v1-rev20200311-1.30.9 -com.google.apis:google-api-services-dataflow:v1b3-rev20200305-1.30.9 +com.google.apis:google-api-services-cloudresourcemanager:v1-rev20200720-1.30.10 +com.google.apis:google-api-services-dataflow:v1b3-rev20200713-1.30.10 com.google.apis:google-api-services-dns:v2beta1-rev6-1.22.0 com.google.apis:google-api-services-drive:v2-rev160-1.19.1 com.google.apis:google-api-services-groupssettings:v1-rev60-1.22.0 -com.google.apis:google-api-services-healthcare:v1beta1-rev20200525-1.30.9 +com.google.apis:google-api-services-healthcare:v1beta1-rev20200713-1.30.10 +com.google.apis:google-api-services-iamcredentials:v1-rev20201022-1.30.10 com.google.apis:google-api-services-monitoring:v3-rev426-1.23.0 -com.google.apis:google-api-services-pubsub:v1-rev20200312-1.30.9 +com.google.apis:google-api-services-pubsub:v1-rev20200713-1.30.10 com.google.apis:google-api-services-sheets:v4-rev483-1.22.0 com.google.apis:google-api-services-sqladmin:v1beta4-rev20190827-1.30.1 -com.google.apis:google-api-services-storage:v1-rev20200326-1.30.9 +com.google.apis:google-api-services-storage:v1-rev20200927-1.30.10 com.google.appengine.tools:appengine-gcs-client:0.6 com.google.appengine.tools:appengine-mapreduce:0.9 com.google.appengine.tools:appengine-pipeline:0.2.13 com.google.appengine:appengine-api-1.0-sdk:1.9.81 com.google.appengine:appengine-remote-api:1.9.81 com.google.appengine:appengine-testing:1.9.81 -com.google.auth:google-auth-library-credentials:0.22.0 -com.google.auth:google-auth-library-oauth2-http:0.22.0 +com.google.auth:google-auth-library-credentials:0.22.2 +com.google.auth:google-auth-library-oauth2-http:0.22.2 +com.google.auto.service:auto-service-annotations:1.0-rc7 com.google.auto.value:auto-value-annotations:1.7.4 -com.google.auto.value:auto-value:1.6.3 -com.google.cloud.bigdataoss:gcsio:2.1.3 -com.google.cloud.bigdataoss:util:2.1.3 -com.google.cloud.bigtable:bigtable-client-core:1.13.0 +com.google.auto.value:auto-value:1.7.4 +com.google.cloud.bigdataoss:gcsio:2.1.6 +com.google.cloud.bigdataoss:util:2.1.6 +com.google.cloud.bigtable:bigtable-client-core:1.16.0 com.google.cloud.datastore:datastore-v1-proto-client:1.6.3 com.google.cloud.sql:jdbc-socket-factory-core:1.0.16 -com.google.cloud:google-cloud-bigquery:1.106.0 -com.google.cloud:google-cloud-bigquerystorage:0.125.0-beta -com.google.cloud:google-cloud-bigtable:1.9.1 -com.google.cloud:google-cloud-core-grpc:1.92.2 -com.google.cloud:google-cloud-core-http:1.92.4 -com.google.cloud:google-cloud-core:1.92.5 -com.google.cloud:google-cloud-secretmanager:1.2.3 -com.google.cloud:google-cloud-spanner:1.49.1 +com.google.cloud:google-cloud-bigquery:1.122.2 +com.google.cloud:google-cloud-bigquerystorage:1.5.5 +com.google.cloud:google-cloud-bigtable:1.14.0 +com.google.cloud:google-cloud-core-grpc:1.93.9 +com.google.cloud:google-cloud-core-http:1.93.9 +com.google.cloud:google-cloud-core:1.93.9 +com.google.cloud:google-cloud-pubsub:1.110.0 +com.google.cloud:google-cloud-pubsublite:0.7.0 +com.google.cloud:google-cloud-secretmanager:1.2.9 +com.google.cloud:google-cloud-spanner:2.0.2 com.google.code.findbugs:jsr305:3.0.2 com.google.code.gson:gson:2.8.6 com.google.common.html.types:types:1.0.4 com.google.dagger:dagger:2.28 -com.google.errorprone:error_prone_annotations:2.4.0 +com.google.errorprone:error_prone_annotations:2.5.0 com.google.flogger:flogger-system-backend:0.5.1 com.google.flogger:flogger:0.5.1 com.google.flogger:google-extensions:0.5.1 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava:30.0-jre +com.google.guava:guava:30.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.gwt:gwt-user:2.8.2 -com.google.http-client:google-http-client-appengine:1.34.1 -com.google.http-client:google-http-client-jackson2:1.37.0 +com.google.http-client:google-http-client-appengine:1.36.0 +com.google.http-client:google-http-client-jackson2:1.38.0 com.google.http-client:google-http-client-protobuf:1.33.0 -com.google.http-client:google-http-client:1.37.0 +com.google.http-client:google-http-client:1.38.0 com.google.inject.extensions:guice-multibindings:4.1.0 com.google.inject:guice:4.1.0 com.google.j2objc:j2objc-annotations:1.3 @@ -116,25 +130,23 @@ com.google.jsinterop:jsinterop-annotations:1.0.2 com.google.monitoring-client:metrics:1.0.7 com.google.monitoring-client:stackdriver:1.0.7 com.google.oauth-client:google-oauth-client-appengine:1.30.5 -com.google.oauth-client:google-oauth-client-java6:1.30.6 +com.google.oauth-client:google-oauth-client-java6:1.31.2 com.google.oauth-client:google-oauth-client-jetty:1.28.0 com.google.oauth-client:google-oauth-client-servlet:1.30.5 -com.google.oauth-client:google-oauth-client:1.30.6 -com.google.protobuf:protobuf-java-util:3.13.0 -com.google.protobuf:protobuf-java:3.13.0 +com.google.oauth-client:google-oauth-client:1.31.2 +com.google.protobuf:protobuf-java-util:3.14.0 +com.google.protobuf:protobuf-java:3.14.0 com.google.re2j:re2j:1.1 com.google.template:soy:2018-03-14 com.googlecode.charts4j:charts4j:1.3 com.googlecode.json-simple:json-simple:1.1.1 com.ibm.icu:icu4j:57.1 com.jcraft:jsch:0.1.55 -com.squareup.okhttp:okhttp:2.5.0 -com.squareup.okio:okio:1.13.0 com.sun.istack:istack-commons-runtime:3.0.7 com.sun.xml.fastinfoset:FastInfoset:1.2.15 com.thoughtworks.paranamer:paranamer:2.7 com.zaxxer:HikariCP:3.4.5 -commons-codec:commons-codec:1.13 +commons-codec:commons-codec:1.15 commons-logging:commons-logging:1.2 dnsjava:dnsjava:2.1.7 guru.nidi.com.kitfox:svgSalamander:1.1.3 @@ -142,31 +154,28 @@ guru.nidi:graphviz-java-all-j2v8:0.17.0 guru.nidi:graphviz-java:0.17.0 io.dropwizard.metrics:metrics-core:3.2.6 io.github.classgraph:classgraph:4.8.65 -io.grpc:grpc-all:1.27.2 -io.grpc:grpc-alts:1.32.2 -io.grpc:grpc-api:1.32.2 -io.grpc:grpc-auth:1.32.2 -io.grpc:grpc-context:1.32.2 -io.grpc:grpc-core:1.32.2 -io.grpc:grpc-grpclb:1.32.2 -io.grpc:grpc-netty-shaded:1.32.2 -io.grpc:grpc-netty:1.27.2 -io.grpc:grpc-okhttp:1.27.2 -io.grpc:grpc-protobuf-lite:1.32.2 -io.grpc:grpc-protobuf:1.32.2 -io.grpc:grpc-stub:1.32.2 -io.grpc:grpc-testing:1.27.2 -io.netty:netty-buffer:4.1.42.Final -io.netty:netty-codec-http2:4.1.42.Final -io.netty:netty-codec-http:4.1.42.Final -io.netty:netty-codec-socks:4.1.42.Final -io.netty:netty-codec:4.1.42.Final -io.netty:netty-common:4.1.42.Final -io.netty:netty-handler-proxy:4.1.42.Final -io.netty:netty-handler:4.1.42.Final -io.netty:netty-resolver:4.1.42.Final -io.netty:netty-tcnative-boringssl-static:2.0.17.Final -io.netty:netty-transport:4.1.42.Final +io.grpc:grpc-alts:1.34.1 +io.grpc:grpc-api:1.34.1 +io.grpc:grpc-auth:1.34.1 +io.grpc:grpc-context:1.34.1 +io.grpc:grpc-core:1.34.1 +io.grpc:grpc-grpclb:1.34.1 +io.grpc:grpc-netty-shaded:1.34.1 +io.grpc:grpc-netty:1.32.2 +io.grpc:grpc-protobuf-lite:1.34.1 +io.grpc:grpc-protobuf:1.34.1 +io.grpc:grpc-stub:1.34.1 +io.netty:netty-buffer:4.1.51.Final +io.netty:netty-codec-http2:4.1.51.Final +io.netty:netty-codec-http:4.1.51.Final +io.netty:netty-codec-socks:4.1.51.Final +io.netty:netty-codec:4.1.51.Final +io.netty:netty-common:4.1.51.Final +io.netty:netty-handler-proxy:4.1.51.Final +io.netty:netty-handler:4.1.51.Final +io.netty:netty-resolver:4.1.51.Final +io.netty:netty-tcnative-boringssl-static:2.0.33.Final +io.netty:netty-transport:4.1.51.Final io.opencensus:opencensus-api:0.24.0 io.opencensus:opencensus-contrib-grpc-util:0.24.0 io.opencensus:opencensus-contrib-http-util:0.24.0 @@ -186,27 +195,27 @@ javax.validation:validation-api:1.0.0.GA javax.xml.bind:jaxb-api:2.3.1 jline:jline:1.0 joda-time:joda-time:2.10.5 -junit:junit:4.12 +junit:junit:4.13.1 net.arnx:nashorn-promise:0.1.1 net.bytebuddy:byte-buddy:1.10.17 net.java.dev.jna:jna:5.5.0 org.apache.avro:avro:1.8.2 -org.apache.beam:beam-model-fn-execution:2.23.0 -org.apache.beam:beam-model-job-management:2.23.0 -org.apache.beam:beam-model-pipeline:2.23.0 -org.apache.beam:beam-runners-core-construction-java:2.23.0 -org.apache.beam:beam-runners-google-cloud-dataflow-java:2.23.0 -org.apache.beam:beam-runners-java-fn-execution:2.23.0 -org.apache.beam:beam-sdks-java-core:2.23.0 -org.apache.beam:beam-sdks-java-expansion-service:2.23.0 -org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.23.0 -org.apache.beam:beam-sdks-java-extensions-protobuf:2.23.0 -org.apache.beam:beam-sdks-java-fn-execution:2.23.0 -org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.23.0 +org.apache.beam:beam-model-fn-execution:2.27.0 +org.apache.beam:beam-model-job-management:2.27.0 +org.apache.beam:beam-model-pipeline:2.27.0 +org.apache.beam:beam-runners-core-construction-java:2.27.0 +org.apache.beam:beam-runners-google-cloud-dataflow-java:2.27.0 +org.apache.beam:beam-runners-java-fn-execution:2.27.0 +org.apache.beam:beam-sdks-java-core:2.27.0 +org.apache.beam:beam-sdks-java-expansion-service:2.27.0 +org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.27.0 +org.apache.beam:beam-sdks-java-extensions-protobuf:2.27.0 +org.apache.beam:beam-sdks-java-fn-execution:2.27.0 +org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.27.0 org.apache.beam:beam-vendor-bytebuddy-1_10_8:0.1 org.apache.beam:beam-vendor-grpc-1_26_0:0.3 org.apache.beam:beam-vendor-guava-26_0-jre:0.1 -org.apache.beam:beam-vendor-sdks-java-extensions-protobuf:2.23.0 +org.apache.beam:beam-vendor-sdks-java-extensions-protobuf:2.27.0 org.apache.commons:commons-compress:1.20 org.apache.commons:commons-exec:1.3 org.apache.commons:commons-lang3:3.5 @@ -218,17 +227,18 @@ org.bouncycastle:bcpg-jdk15on:1.61 org.bouncycastle:bcpkix-jdk15on:1.61 org.bouncycastle:bcprov-jdk15on:1.61 org.checkerframework:checker-compat-qual:2.5.5 -org.checkerframework:checker-qual:3.5.0 +org.checkerframework:checker-qual:3.7.0 org.codehaus.jackson:jackson-core-asl:1.9.13 org.codehaus.jackson:jackson-mapper-asl:1.9.13 org.codehaus.mojo:animal-sniffer-annotations:1.19 -org.conscrypt:conscrypt-openjdk-uber:2.2.1 +org.conscrypt:conscrypt-openjdk-uber:2.5.1 org.dom4j:dom4j:2.1.3 org.easymock:easymock:3.0 org.flywaydb:flyway-core:5.2.4 org.glassfish.jaxb:jaxb-runtime:2.3.1 org.glassfish.jaxb:txw2:2.3.1 -org.hamcrest:hamcrest-core:1.3 +org.hamcrest:hamcrest-core:2.1 +org.hamcrest:hamcrest:2.1 org.hibernate.common:hibernate-commons-annotations:5.1.2.Final org.hibernate:hibernate-core:5.4.23.Final org.hibernate:hibernate-hikaricp:5.4.23.Final @@ -237,7 +247,7 @@ org.jboss.logging:jboss-logging:3.4.1.Final org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.1.1.Final org.jboss:jandex:2.1.3.Final org.joda:joda-money:1.0.1 -org.json:json:20160810 +org.json:json:20200518 org.jsoup:jsoup:1.13.1 org.jvnet.staxex:stax-ex:1.8 org.mortbay.jetty:jetty-util:6.1.26 @@ -258,7 +268,7 @@ org.testcontainers:database-commons:1.15.1 org.testcontainers:jdbc:1.15.1 org.testcontainers:postgresql:1.15.1 org.testcontainers:testcontainers:1.15.1 -org.threeten:threetenbp:1.4.5 +org.threeten:threetenbp:1.5.0 org.tukaani:xz:1.8 org.w3c.css:sac:1.3 org.webjars.npm:viz.js-for-graphviz-java:2.1.3 diff --git a/core/gradle/dependency-locks/nonprodRuntimeClasspath.lockfile b/core/gradle/dependency-locks/nonprodRuntimeClasspath.lockfile index 3058addee..83d065a59 100644 --- a/core/gradle/dependency-locks/nonprodRuntimeClasspath.lockfile +++ b/core/gradle/dependency-locks/nonprodRuntimeClasspath.lockfile @@ -10,9 +10,10 @@ com.eclipsesource.j2v8:j2v8_linux_x86_64:4.6.0 com.eclipsesource.j2v8:j2v8_macosx_x86_64:4.6.0 com.eclipsesource.j2v8:j2v8_win32_x86:4.6.0 com.eclipsesource.j2v8:j2v8_win32_x86_64:4.6.0 -com.fasterxml.jackson.core:jackson-annotations:2.10.3 -com.fasterxml.jackson.core:jackson-core:2.11.3 -com.fasterxml.jackson.core:jackson-databind:2.10.2 +com.fasterxml.jackson.core:jackson-annotations:2.12.1 +com.fasterxml.jackson.core:jackson-core:2.12.1 +com.fasterxml.jackson.core:jackson-databind:2.12.1 +com.fasterxml.jackson:jackson-bom:2.12.1 com.fasterxml:classmate:1.5.1 com.github.docker-java:docker-java-api:3.2.7 com.github.docker-java:docker-java-transport-zerodep:3.2.7 @@ -25,90 +26,103 @@ com.github.jnr:jnr-ffi:2.1.13 com.github.jnr:jnr-posix:3.0.55 com.github.jnr:jnr-unixsocket:0.30 com.github.jnr:jnr-x86asm:1.0.2 +com.github.rholder:guava-retrying:2.0.0 com.google.android:annotations:4.1.1.4 com.google.api-client:google-api-client-appengine:1.30.8 -com.google.api-client:google-api-client-jackson2:1.30.9 -com.google.api-client:google-api-client-java6:1.30.9 +com.google.api-client:google-api-client-jackson2:1.30.10 +com.google.api-client:google-api-client-java6:1.30.10 com.google.api-client:google-api-client-servlet:1.30.8 -com.google.api-client:google-api-client:1.30.9 -com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.9.1 -com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.9.1 -com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.85.1 -com.google.api.grpc:grpc-google-common-protos:1.17.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1alpha2:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.90.0 -com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:1.9.1 -com.google.api.grpc:proto-google-cloud-bigtable-v2:1.9.1 -com.google.api.grpc:proto-google-cloud-datastore-v1:0.85.0 -com.google.api.grpc:proto-google-cloud-pubsub-v1:1.85.1 -com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.2.3 -com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.2.3 -com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:1.49.1 -com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:1.49.1 -com.google.api.grpc:proto-google-cloud-spanner-v1:1.49.1 -com.google.api.grpc:proto-google-common-protos:2.0.0 -com.google.api.grpc:proto-google-iam-v1:1.0.1 +com.google.api-client:google-api-client:1.30.10 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:1.5.5 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.105.5 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.105.5 +com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.14.0 +com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.14.0 +com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.90.3 +com.google.api.grpc:grpc-google-cloud-pubsublite-v1:0.7.0 +com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:2.0.2 +com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:2.0.2 +com.google.api.grpc:grpc-google-cloud-spanner-v1:2.0.2 +com.google.api.grpc:grpc-google-common-protos:1.18.1 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:1.5.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1alpha2:0.105.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.105.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.105.5 +com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:1.14.0 +com.google.api.grpc:proto-google-cloud-bigtable-v2:1.16.1 +com.google.api.grpc:proto-google-cloud-datastore-v1:0.88.0 +com.google.api.grpc:proto-google-cloud-pubsub-v1:1.92.0 +com.google.api.grpc:proto-google-cloud-pubsublite-v1:0.7.0 +com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.2.9 +com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.2.9 +com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:2.0.2 +com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:2.0.2 +com.google.api.grpc:proto-google-cloud-spanner-v1:2.0.2 +com.google.api.grpc:proto-google-common-protos:2.0.1 +com.google.api.grpc:proto-google-iam-v1:1.0.5 com.google.api:api-common:1.10.1 -com.google.api:gax-grpc:1.60.0 -com.google.api:gax-httpjson:0.70.1 -com.google.api:gax:1.60.0 +com.google.api:gax-grpc:1.60.1 +com.google.api:gax-httpjson:0.76.1 +com.google.api:gax:1.60.1 com.google.apis:google-api-services-admin-directory:directory_v1-rev72-1.22.0 com.google.apis:google-api-services-appengine:v1-rev101-1.25.0 -com.google.apis:google-api-services-bigquery:v2-rev20191211-1.30.9 -com.google.apis:google-api-services-clouddebugger:v2-rev20200313-1.30.9 +com.google.apis:google-api-services-bigquery:v2-rev20200916-1.30.10 +com.google.apis:google-api-services-clouddebugger:v2-rev20200501-1.30.10 com.google.apis:google-api-services-cloudkms:v1-rev12-1.22.0 -com.google.apis:google-api-services-cloudresourcemanager:v1-rev20200311-1.30.9 -com.google.apis:google-api-services-dataflow:v1b3-rev20200305-1.30.9 +com.google.apis:google-api-services-cloudresourcemanager:v1-rev20200720-1.30.10 +com.google.apis:google-api-services-dataflow:v1b3-rev20200713-1.30.10 com.google.apis:google-api-services-dns:v2beta1-rev6-1.22.0 com.google.apis:google-api-services-drive:v2-rev160-1.19.1 com.google.apis:google-api-services-groupssettings:v1-rev60-1.22.0 -com.google.apis:google-api-services-healthcare:v1beta1-rev20200525-1.30.9 +com.google.apis:google-api-services-healthcare:v1beta1-rev20200713-1.30.10 +com.google.apis:google-api-services-iamcredentials:v1-rev20201022-1.30.10 com.google.apis:google-api-services-monitoring:v3-rev426-1.23.0 -com.google.apis:google-api-services-pubsub:v1-rev20200312-1.30.9 +com.google.apis:google-api-services-pubsub:v1-rev20200713-1.30.10 com.google.apis:google-api-services-sheets:v4-rev483-1.22.0 com.google.apis:google-api-services-sqladmin:v1beta4-rev20190827-1.30.1 -com.google.apis:google-api-services-storage:v1-rev20200326-1.30.9 +com.google.apis:google-api-services-storage:v1-rev20200927-1.30.10 com.google.appengine.tools:appengine-gcs-client:0.6 com.google.appengine.tools:appengine-mapreduce:0.9 com.google.appengine.tools:appengine-pipeline:0.2.13 com.google.appengine:appengine-api-1.0-sdk:1.9.81 com.google.appengine:appengine-remote-api:1.9.81 com.google.appengine:appengine-testing:1.9.81 -com.google.auth:google-auth-library-credentials:0.22.0 -com.google.auth:google-auth-library-oauth2-http:0.22.0 +com.google.auth:google-auth-library-credentials:0.22.2 +com.google.auth:google-auth-library-oauth2-http:0.22.2 +com.google.auto.service:auto-service-annotations:1.0-rc7 com.google.auto.value:auto-value-annotations:1.7.4 -com.google.auto.value:auto-value:1.6.3 -com.google.cloud.bigdataoss:gcsio:2.1.3 -com.google.cloud.bigdataoss:util:2.1.3 -com.google.cloud.bigtable:bigtable-client-core:1.13.0 +com.google.auto.value:auto-value:1.7.4 +com.google.cloud.bigdataoss:gcsio:2.1.6 +com.google.cloud.bigdataoss:util:2.1.6 +com.google.cloud.bigtable:bigtable-client-core:1.16.0 com.google.cloud.datastore:datastore-v1-proto-client:1.6.3 com.google.cloud.sql:jdbc-socket-factory-core:1.0.16 -com.google.cloud:google-cloud-bigquery:1.106.0 -com.google.cloud:google-cloud-bigquerystorage:0.125.0-beta -com.google.cloud:google-cloud-bigtable:1.9.1 -com.google.cloud:google-cloud-core-grpc:1.92.2 -com.google.cloud:google-cloud-core-http:1.92.4 -com.google.cloud:google-cloud-core:1.92.5 -com.google.cloud:google-cloud-secretmanager:1.2.3 -com.google.cloud:google-cloud-spanner:1.49.1 +com.google.cloud:google-cloud-bigquery:1.122.2 +com.google.cloud:google-cloud-bigquerystorage:1.5.5 +com.google.cloud:google-cloud-bigtable:1.14.0 +com.google.cloud:google-cloud-core-grpc:1.93.9 +com.google.cloud:google-cloud-core-http:1.93.9 +com.google.cloud:google-cloud-core:1.93.9 +com.google.cloud:google-cloud-pubsub:1.110.0 +com.google.cloud:google-cloud-pubsublite:0.7.0 +com.google.cloud:google-cloud-secretmanager:1.2.9 +com.google.cloud:google-cloud-spanner:2.0.2 com.google.code.findbugs:jsr305:3.0.2 com.google.code.gson:gson:2.8.6 com.google.common.html.types:types:1.0.4 com.google.dagger:dagger:2.28 -com.google.errorprone:error_prone_annotations:2.4.0 +com.google.errorprone:error_prone_annotations:2.5.0 com.google.flogger:flogger-system-backend:0.5.1 com.google.flogger:flogger:0.5.1 com.google.flogger:google-extensions:0.5.1 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava:30.0-jre +com.google.guava:guava:30.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.gwt:gwt-user:2.8.2 -com.google.http-client:google-http-client-appengine:1.34.1 -com.google.http-client:google-http-client-jackson2:1.37.0 +com.google.http-client:google-http-client-appengine:1.36.0 +com.google.http-client:google-http-client-jackson2:1.38.0 com.google.http-client:google-http-client-protobuf:1.33.0 -com.google.http-client:google-http-client:1.37.0 +com.google.http-client:google-http-client:1.38.0 com.google.inject.extensions:guice-multibindings:4.1.0 com.google.inject:guice:4.1.0 com.google.j2objc:j2objc-annotations:1.3 @@ -116,25 +130,23 @@ com.google.jsinterop:jsinterop-annotations:1.0.2 com.google.monitoring-client:metrics:1.0.7 com.google.monitoring-client:stackdriver:1.0.7 com.google.oauth-client:google-oauth-client-appengine:1.30.5 -com.google.oauth-client:google-oauth-client-java6:1.30.6 +com.google.oauth-client:google-oauth-client-java6:1.31.2 com.google.oauth-client:google-oauth-client-jetty:1.28.0 com.google.oauth-client:google-oauth-client-servlet:1.30.5 -com.google.oauth-client:google-oauth-client:1.30.6 -com.google.protobuf:protobuf-java-util:3.13.0 -com.google.protobuf:protobuf-java:3.13.0 +com.google.oauth-client:google-oauth-client:1.31.2 +com.google.protobuf:protobuf-java-util:3.14.0 +com.google.protobuf:protobuf-java:3.14.0 com.google.re2j:re2j:1.1 com.google.template:soy:2018-03-14 com.googlecode.charts4j:charts4j:1.3 com.googlecode.json-simple:json-simple:1.1.1 com.ibm.icu:icu4j:57.1 com.jcraft:jsch:0.1.55 -com.squareup.okhttp:okhttp:2.5.0 -com.squareup.okio:okio:1.13.0 com.sun.istack:istack-commons-runtime:3.0.7 com.sun.xml.fastinfoset:FastInfoset:1.2.15 com.thoughtworks.paranamer:paranamer:2.7 com.zaxxer:HikariCP:3.4.5 -commons-codec:commons-codec:1.13 +commons-codec:commons-codec:1.15 commons-logging:commons-logging:1.2 dnsjava:dnsjava:2.1.7 guru.nidi.com.kitfox:svgSalamander:1.1.3 @@ -142,31 +154,28 @@ guru.nidi:graphviz-java-all-j2v8:0.17.0 guru.nidi:graphviz-java:0.17.0 io.dropwizard.metrics:metrics-core:3.2.6 io.github.classgraph:classgraph:4.8.65 -io.grpc:grpc-all:1.27.2 -io.grpc:grpc-alts:1.32.2 -io.grpc:grpc-api:1.32.2 -io.grpc:grpc-auth:1.32.2 -io.grpc:grpc-context:1.32.2 -io.grpc:grpc-core:1.32.2 -io.grpc:grpc-grpclb:1.32.2 -io.grpc:grpc-netty-shaded:1.32.2 -io.grpc:grpc-netty:1.27.2 -io.grpc:grpc-okhttp:1.27.2 -io.grpc:grpc-protobuf-lite:1.32.2 -io.grpc:grpc-protobuf:1.32.2 -io.grpc:grpc-stub:1.32.2 -io.grpc:grpc-testing:1.27.2 -io.netty:netty-buffer:4.1.42.Final -io.netty:netty-codec-http2:4.1.42.Final -io.netty:netty-codec-http:4.1.42.Final -io.netty:netty-codec-socks:4.1.42.Final -io.netty:netty-codec:4.1.42.Final -io.netty:netty-common:4.1.42.Final -io.netty:netty-handler-proxy:4.1.42.Final -io.netty:netty-handler:4.1.42.Final -io.netty:netty-resolver:4.1.42.Final -io.netty:netty-tcnative-boringssl-static:2.0.17.Final -io.netty:netty-transport:4.1.42.Final +io.grpc:grpc-alts:1.34.1 +io.grpc:grpc-api:1.34.1 +io.grpc:grpc-auth:1.34.1 +io.grpc:grpc-context:1.34.1 +io.grpc:grpc-core:1.34.1 +io.grpc:grpc-grpclb:1.34.1 +io.grpc:grpc-netty-shaded:1.34.1 +io.grpc:grpc-netty:1.32.2 +io.grpc:grpc-protobuf-lite:1.34.1 +io.grpc:grpc-protobuf:1.34.1 +io.grpc:grpc-stub:1.34.1 +io.netty:netty-buffer:4.1.51.Final +io.netty:netty-codec-http2:4.1.51.Final +io.netty:netty-codec-http:4.1.51.Final +io.netty:netty-codec-socks:4.1.51.Final +io.netty:netty-codec:4.1.51.Final +io.netty:netty-common:4.1.51.Final +io.netty:netty-handler-proxy:4.1.51.Final +io.netty:netty-handler:4.1.51.Final +io.netty:netty-resolver:4.1.51.Final +io.netty:netty-tcnative-boringssl-static:2.0.33.Final +io.netty:netty-transport:4.1.51.Final io.opencensus:opencensus-api:0.24.0 io.opencensus:opencensus-contrib-grpc-util:0.24.0 io.opencensus:opencensus-contrib-http-util:0.24.0 @@ -186,27 +195,27 @@ javax.validation:validation-api:1.0.0.GA javax.xml.bind:jaxb-api:2.3.1 jline:jline:1.0 joda-time:joda-time:2.10.5 -junit:junit:4.12 +junit:junit:4.13.1 net.arnx:nashorn-promise:0.1.1 net.bytebuddy:byte-buddy:1.10.17 net.java.dev.jna:jna:5.5.0 org.apache.avro:avro:1.8.2 -org.apache.beam:beam-model-fn-execution:2.23.0 -org.apache.beam:beam-model-job-management:2.23.0 -org.apache.beam:beam-model-pipeline:2.23.0 -org.apache.beam:beam-runners-core-construction-java:2.23.0 -org.apache.beam:beam-runners-google-cloud-dataflow-java:2.23.0 -org.apache.beam:beam-runners-java-fn-execution:2.23.0 -org.apache.beam:beam-sdks-java-core:2.23.0 -org.apache.beam:beam-sdks-java-expansion-service:2.23.0 -org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.23.0 -org.apache.beam:beam-sdks-java-extensions-protobuf:2.23.0 -org.apache.beam:beam-sdks-java-fn-execution:2.23.0 -org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.23.0 +org.apache.beam:beam-model-fn-execution:2.27.0 +org.apache.beam:beam-model-job-management:2.27.0 +org.apache.beam:beam-model-pipeline:2.27.0 +org.apache.beam:beam-runners-core-construction-java:2.27.0 +org.apache.beam:beam-runners-google-cloud-dataflow-java:2.27.0 +org.apache.beam:beam-runners-java-fn-execution:2.27.0 +org.apache.beam:beam-sdks-java-core:2.27.0 +org.apache.beam:beam-sdks-java-expansion-service:2.27.0 +org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.27.0 +org.apache.beam:beam-sdks-java-extensions-protobuf:2.27.0 +org.apache.beam:beam-sdks-java-fn-execution:2.27.0 +org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.27.0 org.apache.beam:beam-vendor-bytebuddy-1_10_8:0.1 org.apache.beam:beam-vendor-grpc-1_26_0:0.3 org.apache.beam:beam-vendor-guava-26_0-jre:0.1 -org.apache.beam:beam-vendor-sdks-java-extensions-protobuf:2.23.0 +org.apache.beam:beam-vendor-sdks-java-extensions-protobuf:2.27.0 org.apache.commons:commons-compress:1.20 org.apache.commons:commons-exec:1.3 org.apache.commons:commons-lang3:3.5 @@ -218,17 +227,18 @@ org.bouncycastle:bcpg-jdk15on:1.61 org.bouncycastle:bcpkix-jdk15on:1.61 org.bouncycastle:bcprov-jdk15on:1.61 org.checkerframework:checker-compat-qual:2.5.5 -org.checkerframework:checker-qual:3.5.0 +org.checkerframework:checker-qual:3.7.0 org.codehaus.jackson:jackson-core-asl:1.9.13 org.codehaus.jackson:jackson-mapper-asl:1.9.13 org.codehaus.mojo:animal-sniffer-annotations:1.19 -org.conscrypt:conscrypt-openjdk-uber:2.2.1 +org.conscrypt:conscrypt-openjdk-uber:2.5.1 org.dom4j:dom4j:2.1.3 org.easymock:easymock:3.0 org.flywaydb:flyway-core:5.2.4 org.glassfish.jaxb:jaxb-runtime:2.3.1 org.glassfish.jaxb:txw2:2.3.1 -org.hamcrest:hamcrest-core:1.3 +org.hamcrest:hamcrest-core:2.1 +org.hamcrest:hamcrest:2.1 org.hibernate.common:hibernate-commons-annotations:5.1.2.Final org.hibernate:hibernate-core:5.4.23.Final org.hibernate:hibernate-hikaricp:5.4.23.Final @@ -237,7 +247,7 @@ org.jboss.logging:jboss-logging:3.4.1.Final org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.1.1.Final org.jboss:jandex:2.1.3.Final org.joda:joda-money:1.0.1 -org.json:json:20160810 +org.json:json:20200518 org.jsoup:jsoup:1.13.1 org.jvnet.staxex:stax-ex:1.8 org.mortbay.jetty:jetty-util:6.1.26 @@ -258,7 +268,7 @@ org.testcontainers:database-commons:1.15.1 org.testcontainers:jdbc:1.15.1 org.testcontainers:postgresql:1.15.1 org.testcontainers:testcontainers:1.15.1 -org.threeten:threetenbp:1.4.5 +org.threeten:threetenbp:1.5.0 org.tukaani:xz:1.8 org.w3c.css:sac:1.3 org.webjars.npm:viz.js-for-graphviz-java:2.1.3 diff --git a/core/gradle/dependency-locks/runtime.lockfile b/core/gradle/dependency-locks/runtime.lockfile index 3058addee..83d065a59 100644 --- a/core/gradle/dependency-locks/runtime.lockfile +++ b/core/gradle/dependency-locks/runtime.lockfile @@ -10,9 +10,10 @@ com.eclipsesource.j2v8:j2v8_linux_x86_64:4.6.0 com.eclipsesource.j2v8:j2v8_macosx_x86_64:4.6.0 com.eclipsesource.j2v8:j2v8_win32_x86:4.6.0 com.eclipsesource.j2v8:j2v8_win32_x86_64:4.6.0 -com.fasterxml.jackson.core:jackson-annotations:2.10.3 -com.fasterxml.jackson.core:jackson-core:2.11.3 -com.fasterxml.jackson.core:jackson-databind:2.10.2 +com.fasterxml.jackson.core:jackson-annotations:2.12.1 +com.fasterxml.jackson.core:jackson-core:2.12.1 +com.fasterxml.jackson.core:jackson-databind:2.12.1 +com.fasterxml.jackson:jackson-bom:2.12.1 com.fasterxml:classmate:1.5.1 com.github.docker-java:docker-java-api:3.2.7 com.github.docker-java:docker-java-transport-zerodep:3.2.7 @@ -25,90 +26,103 @@ com.github.jnr:jnr-ffi:2.1.13 com.github.jnr:jnr-posix:3.0.55 com.github.jnr:jnr-unixsocket:0.30 com.github.jnr:jnr-x86asm:1.0.2 +com.github.rholder:guava-retrying:2.0.0 com.google.android:annotations:4.1.1.4 com.google.api-client:google-api-client-appengine:1.30.8 -com.google.api-client:google-api-client-jackson2:1.30.9 -com.google.api-client:google-api-client-java6:1.30.9 +com.google.api-client:google-api-client-jackson2:1.30.10 +com.google.api-client:google-api-client-java6:1.30.10 com.google.api-client:google-api-client-servlet:1.30.8 -com.google.api-client:google-api-client:1.30.9 -com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.9.1 -com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.9.1 -com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.85.1 -com.google.api.grpc:grpc-google-common-protos:1.17.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1alpha2:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.90.0 -com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:1.9.1 -com.google.api.grpc:proto-google-cloud-bigtable-v2:1.9.1 -com.google.api.grpc:proto-google-cloud-datastore-v1:0.85.0 -com.google.api.grpc:proto-google-cloud-pubsub-v1:1.85.1 -com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.2.3 -com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.2.3 -com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:1.49.1 -com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:1.49.1 -com.google.api.grpc:proto-google-cloud-spanner-v1:1.49.1 -com.google.api.grpc:proto-google-common-protos:2.0.0 -com.google.api.grpc:proto-google-iam-v1:1.0.1 +com.google.api-client:google-api-client:1.30.10 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:1.5.5 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.105.5 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.105.5 +com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.14.0 +com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.14.0 +com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.90.3 +com.google.api.grpc:grpc-google-cloud-pubsublite-v1:0.7.0 +com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:2.0.2 +com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:2.0.2 +com.google.api.grpc:grpc-google-cloud-spanner-v1:2.0.2 +com.google.api.grpc:grpc-google-common-protos:1.18.1 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:1.5.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1alpha2:0.105.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.105.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.105.5 +com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:1.14.0 +com.google.api.grpc:proto-google-cloud-bigtable-v2:1.16.1 +com.google.api.grpc:proto-google-cloud-datastore-v1:0.88.0 +com.google.api.grpc:proto-google-cloud-pubsub-v1:1.92.0 +com.google.api.grpc:proto-google-cloud-pubsublite-v1:0.7.0 +com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.2.9 +com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.2.9 +com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:2.0.2 +com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:2.0.2 +com.google.api.grpc:proto-google-cloud-spanner-v1:2.0.2 +com.google.api.grpc:proto-google-common-protos:2.0.1 +com.google.api.grpc:proto-google-iam-v1:1.0.5 com.google.api:api-common:1.10.1 -com.google.api:gax-grpc:1.60.0 -com.google.api:gax-httpjson:0.70.1 -com.google.api:gax:1.60.0 +com.google.api:gax-grpc:1.60.1 +com.google.api:gax-httpjson:0.76.1 +com.google.api:gax:1.60.1 com.google.apis:google-api-services-admin-directory:directory_v1-rev72-1.22.0 com.google.apis:google-api-services-appengine:v1-rev101-1.25.0 -com.google.apis:google-api-services-bigquery:v2-rev20191211-1.30.9 -com.google.apis:google-api-services-clouddebugger:v2-rev20200313-1.30.9 +com.google.apis:google-api-services-bigquery:v2-rev20200916-1.30.10 +com.google.apis:google-api-services-clouddebugger:v2-rev20200501-1.30.10 com.google.apis:google-api-services-cloudkms:v1-rev12-1.22.0 -com.google.apis:google-api-services-cloudresourcemanager:v1-rev20200311-1.30.9 -com.google.apis:google-api-services-dataflow:v1b3-rev20200305-1.30.9 +com.google.apis:google-api-services-cloudresourcemanager:v1-rev20200720-1.30.10 +com.google.apis:google-api-services-dataflow:v1b3-rev20200713-1.30.10 com.google.apis:google-api-services-dns:v2beta1-rev6-1.22.0 com.google.apis:google-api-services-drive:v2-rev160-1.19.1 com.google.apis:google-api-services-groupssettings:v1-rev60-1.22.0 -com.google.apis:google-api-services-healthcare:v1beta1-rev20200525-1.30.9 +com.google.apis:google-api-services-healthcare:v1beta1-rev20200713-1.30.10 +com.google.apis:google-api-services-iamcredentials:v1-rev20201022-1.30.10 com.google.apis:google-api-services-monitoring:v3-rev426-1.23.0 -com.google.apis:google-api-services-pubsub:v1-rev20200312-1.30.9 +com.google.apis:google-api-services-pubsub:v1-rev20200713-1.30.10 com.google.apis:google-api-services-sheets:v4-rev483-1.22.0 com.google.apis:google-api-services-sqladmin:v1beta4-rev20190827-1.30.1 -com.google.apis:google-api-services-storage:v1-rev20200326-1.30.9 +com.google.apis:google-api-services-storage:v1-rev20200927-1.30.10 com.google.appengine.tools:appengine-gcs-client:0.6 com.google.appengine.tools:appengine-mapreduce:0.9 com.google.appengine.tools:appengine-pipeline:0.2.13 com.google.appengine:appengine-api-1.0-sdk:1.9.81 com.google.appengine:appengine-remote-api:1.9.81 com.google.appengine:appengine-testing:1.9.81 -com.google.auth:google-auth-library-credentials:0.22.0 -com.google.auth:google-auth-library-oauth2-http:0.22.0 +com.google.auth:google-auth-library-credentials:0.22.2 +com.google.auth:google-auth-library-oauth2-http:0.22.2 +com.google.auto.service:auto-service-annotations:1.0-rc7 com.google.auto.value:auto-value-annotations:1.7.4 -com.google.auto.value:auto-value:1.6.3 -com.google.cloud.bigdataoss:gcsio:2.1.3 -com.google.cloud.bigdataoss:util:2.1.3 -com.google.cloud.bigtable:bigtable-client-core:1.13.0 +com.google.auto.value:auto-value:1.7.4 +com.google.cloud.bigdataoss:gcsio:2.1.6 +com.google.cloud.bigdataoss:util:2.1.6 +com.google.cloud.bigtable:bigtable-client-core:1.16.0 com.google.cloud.datastore:datastore-v1-proto-client:1.6.3 com.google.cloud.sql:jdbc-socket-factory-core:1.0.16 -com.google.cloud:google-cloud-bigquery:1.106.0 -com.google.cloud:google-cloud-bigquerystorage:0.125.0-beta -com.google.cloud:google-cloud-bigtable:1.9.1 -com.google.cloud:google-cloud-core-grpc:1.92.2 -com.google.cloud:google-cloud-core-http:1.92.4 -com.google.cloud:google-cloud-core:1.92.5 -com.google.cloud:google-cloud-secretmanager:1.2.3 -com.google.cloud:google-cloud-spanner:1.49.1 +com.google.cloud:google-cloud-bigquery:1.122.2 +com.google.cloud:google-cloud-bigquerystorage:1.5.5 +com.google.cloud:google-cloud-bigtable:1.14.0 +com.google.cloud:google-cloud-core-grpc:1.93.9 +com.google.cloud:google-cloud-core-http:1.93.9 +com.google.cloud:google-cloud-core:1.93.9 +com.google.cloud:google-cloud-pubsub:1.110.0 +com.google.cloud:google-cloud-pubsublite:0.7.0 +com.google.cloud:google-cloud-secretmanager:1.2.9 +com.google.cloud:google-cloud-spanner:2.0.2 com.google.code.findbugs:jsr305:3.0.2 com.google.code.gson:gson:2.8.6 com.google.common.html.types:types:1.0.4 com.google.dagger:dagger:2.28 -com.google.errorprone:error_prone_annotations:2.4.0 +com.google.errorprone:error_prone_annotations:2.5.0 com.google.flogger:flogger-system-backend:0.5.1 com.google.flogger:flogger:0.5.1 com.google.flogger:google-extensions:0.5.1 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava:30.0-jre +com.google.guava:guava:30.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.gwt:gwt-user:2.8.2 -com.google.http-client:google-http-client-appengine:1.34.1 -com.google.http-client:google-http-client-jackson2:1.37.0 +com.google.http-client:google-http-client-appengine:1.36.0 +com.google.http-client:google-http-client-jackson2:1.38.0 com.google.http-client:google-http-client-protobuf:1.33.0 -com.google.http-client:google-http-client:1.37.0 +com.google.http-client:google-http-client:1.38.0 com.google.inject.extensions:guice-multibindings:4.1.0 com.google.inject:guice:4.1.0 com.google.j2objc:j2objc-annotations:1.3 @@ -116,25 +130,23 @@ com.google.jsinterop:jsinterop-annotations:1.0.2 com.google.monitoring-client:metrics:1.0.7 com.google.monitoring-client:stackdriver:1.0.7 com.google.oauth-client:google-oauth-client-appengine:1.30.5 -com.google.oauth-client:google-oauth-client-java6:1.30.6 +com.google.oauth-client:google-oauth-client-java6:1.31.2 com.google.oauth-client:google-oauth-client-jetty:1.28.0 com.google.oauth-client:google-oauth-client-servlet:1.30.5 -com.google.oauth-client:google-oauth-client:1.30.6 -com.google.protobuf:protobuf-java-util:3.13.0 -com.google.protobuf:protobuf-java:3.13.0 +com.google.oauth-client:google-oauth-client:1.31.2 +com.google.protobuf:protobuf-java-util:3.14.0 +com.google.protobuf:protobuf-java:3.14.0 com.google.re2j:re2j:1.1 com.google.template:soy:2018-03-14 com.googlecode.charts4j:charts4j:1.3 com.googlecode.json-simple:json-simple:1.1.1 com.ibm.icu:icu4j:57.1 com.jcraft:jsch:0.1.55 -com.squareup.okhttp:okhttp:2.5.0 -com.squareup.okio:okio:1.13.0 com.sun.istack:istack-commons-runtime:3.0.7 com.sun.xml.fastinfoset:FastInfoset:1.2.15 com.thoughtworks.paranamer:paranamer:2.7 com.zaxxer:HikariCP:3.4.5 -commons-codec:commons-codec:1.13 +commons-codec:commons-codec:1.15 commons-logging:commons-logging:1.2 dnsjava:dnsjava:2.1.7 guru.nidi.com.kitfox:svgSalamander:1.1.3 @@ -142,31 +154,28 @@ guru.nidi:graphviz-java-all-j2v8:0.17.0 guru.nidi:graphviz-java:0.17.0 io.dropwizard.metrics:metrics-core:3.2.6 io.github.classgraph:classgraph:4.8.65 -io.grpc:grpc-all:1.27.2 -io.grpc:grpc-alts:1.32.2 -io.grpc:grpc-api:1.32.2 -io.grpc:grpc-auth:1.32.2 -io.grpc:grpc-context:1.32.2 -io.grpc:grpc-core:1.32.2 -io.grpc:grpc-grpclb:1.32.2 -io.grpc:grpc-netty-shaded:1.32.2 -io.grpc:grpc-netty:1.27.2 -io.grpc:grpc-okhttp:1.27.2 -io.grpc:grpc-protobuf-lite:1.32.2 -io.grpc:grpc-protobuf:1.32.2 -io.grpc:grpc-stub:1.32.2 -io.grpc:grpc-testing:1.27.2 -io.netty:netty-buffer:4.1.42.Final -io.netty:netty-codec-http2:4.1.42.Final -io.netty:netty-codec-http:4.1.42.Final -io.netty:netty-codec-socks:4.1.42.Final -io.netty:netty-codec:4.1.42.Final -io.netty:netty-common:4.1.42.Final -io.netty:netty-handler-proxy:4.1.42.Final -io.netty:netty-handler:4.1.42.Final -io.netty:netty-resolver:4.1.42.Final -io.netty:netty-tcnative-boringssl-static:2.0.17.Final -io.netty:netty-transport:4.1.42.Final +io.grpc:grpc-alts:1.34.1 +io.grpc:grpc-api:1.34.1 +io.grpc:grpc-auth:1.34.1 +io.grpc:grpc-context:1.34.1 +io.grpc:grpc-core:1.34.1 +io.grpc:grpc-grpclb:1.34.1 +io.grpc:grpc-netty-shaded:1.34.1 +io.grpc:grpc-netty:1.32.2 +io.grpc:grpc-protobuf-lite:1.34.1 +io.grpc:grpc-protobuf:1.34.1 +io.grpc:grpc-stub:1.34.1 +io.netty:netty-buffer:4.1.51.Final +io.netty:netty-codec-http2:4.1.51.Final +io.netty:netty-codec-http:4.1.51.Final +io.netty:netty-codec-socks:4.1.51.Final +io.netty:netty-codec:4.1.51.Final +io.netty:netty-common:4.1.51.Final +io.netty:netty-handler-proxy:4.1.51.Final +io.netty:netty-handler:4.1.51.Final +io.netty:netty-resolver:4.1.51.Final +io.netty:netty-tcnative-boringssl-static:2.0.33.Final +io.netty:netty-transport:4.1.51.Final io.opencensus:opencensus-api:0.24.0 io.opencensus:opencensus-contrib-grpc-util:0.24.0 io.opencensus:opencensus-contrib-http-util:0.24.0 @@ -186,27 +195,27 @@ javax.validation:validation-api:1.0.0.GA javax.xml.bind:jaxb-api:2.3.1 jline:jline:1.0 joda-time:joda-time:2.10.5 -junit:junit:4.12 +junit:junit:4.13.1 net.arnx:nashorn-promise:0.1.1 net.bytebuddy:byte-buddy:1.10.17 net.java.dev.jna:jna:5.5.0 org.apache.avro:avro:1.8.2 -org.apache.beam:beam-model-fn-execution:2.23.0 -org.apache.beam:beam-model-job-management:2.23.0 -org.apache.beam:beam-model-pipeline:2.23.0 -org.apache.beam:beam-runners-core-construction-java:2.23.0 -org.apache.beam:beam-runners-google-cloud-dataflow-java:2.23.0 -org.apache.beam:beam-runners-java-fn-execution:2.23.0 -org.apache.beam:beam-sdks-java-core:2.23.0 -org.apache.beam:beam-sdks-java-expansion-service:2.23.0 -org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.23.0 -org.apache.beam:beam-sdks-java-extensions-protobuf:2.23.0 -org.apache.beam:beam-sdks-java-fn-execution:2.23.0 -org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.23.0 +org.apache.beam:beam-model-fn-execution:2.27.0 +org.apache.beam:beam-model-job-management:2.27.0 +org.apache.beam:beam-model-pipeline:2.27.0 +org.apache.beam:beam-runners-core-construction-java:2.27.0 +org.apache.beam:beam-runners-google-cloud-dataflow-java:2.27.0 +org.apache.beam:beam-runners-java-fn-execution:2.27.0 +org.apache.beam:beam-sdks-java-core:2.27.0 +org.apache.beam:beam-sdks-java-expansion-service:2.27.0 +org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.27.0 +org.apache.beam:beam-sdks-java-extensions-protobuf:2.27.0 +org.apache.beam:beam-sdks-java-fn-execution:2.27.0 +org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.27.0 org.apache.beam:beam-vendor-bytebuddy-1_10_8:0.1 org.apache.beam:beam-vendor-grpc-1_26_0:0.3 org.apache.beam:beam-vendor-guava-26_0-jre:0.1 -org.apache.beam:beam-vendor-sdks-java-extensions-protobuf:2.23.0 +org.apache.beam:beam-vendor-sdks-java-extensions-protobuf:2.27.0 org.apache.commons:commons-compress:1.20 org.apache.commons:commons-exec:1.3 org.apache.commons:commons-lang3:3.5 @@ -218,17 +227,18 @@ org.bouncycastle:bcpg-jdk15on:1.61 org.bouncycastle:bcpkix-jdk15on:1.61 org.bouncycastle:bcprov-jdk15on:1.61 org.checkerframework:checker-compat-qual:2.5.5 -org.checkerframework:checker-qual:3.5.0 +org.checkerframework:checker-qual:3.7.0 org.codehaus.jackson:jackson-core-asl:1.9.13 org.codehaus.jackson:jackson-mapper-asl:1.9.13 org.codehaus.mojo:animal-sniffer-annotations:1.19 -org.conscrypt:conscrypt-openjdk-uber:2.2.1 +org.conscrypt:conscrypt-openjdk-uber:2.5.1 org.dom4j:dom4j:2.1.3 org.easymock:easymock:3.0 org.flywaydb:flyway-core:5.2.4 org.glassfish.jaxb:jaxb-runtime:2.3.1 org.glassfish.jaxb:txw2:2.3.1 -org.hamcrest:hamcrest-core:1.3 +org.hamcrest:hamcrest-core:2.1 +org.hamcrest:hamcrest:2.1 org.hibernate.common:hibernate-commons-annotations:5.1.2.Final org.hibernate:hibernate-core:5.4.23.Final org.hibernate:hibernate-hikaricp:5.4.23.Final @@ -237,7 +247,7 @@ org.jboss.logging:jboss-logging:3.4.1.Final org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.1.1.Final org.jboss:jandex:2.1.3.Final org.joda:joda-money:1.0.1 -org.json:json:20160810 +org.json:json:20200518 org.jsoup:jsoup:1.13.1 org.jvnet.staxex:stax-ex:1.8 org.mortbay.jetty:jetty-util:6.1.26 @@ -258,7 +268,7 @@ org.testcontainers:database-commons:1.15.1 org.testcontainers:jdbc:1.15.1 org.testcontainers:postgresql:1.15.1 org.testcontainers:testcontainers:1.15.1 -org.threeten:threetenbp:1.4.5 +org.threeten:threetenbp:1.5.0 org.tukaani:xz:1.8 org.w3c.css:sac:1.3 org.webjars.npm:viz.js-for-graphviz-java:2.1.3 diff --git a/core/gradle/dependency-locks/runtimeClasspath.lockfile b/core/gradle/dependency-locks/runtimeClasspath.lockfile index 7f47ecd6d..5b7dcb929 100644 --- a/core/gradle/dependency-locks/runtimeClasspath.lockfile +++ b/core/gradle/dependency-locks/runtimeClasspath.lockfile @@ -10,9 +10,10 @@ com.eclipsesource.j2v8:j2v8_linux_x86_64:4.6.0 com.eclipsesource.j2v8:j2v8_macosx_x86_64:4.6.0 com.eclipsesource.j2v8:j2v8_win32_x86:4.6.0 com.eclipsesource.j2v8:j2v8_win32_x86_64:4.6.0 -com.fasterxml.jackson.core:jackson-annotations:2.10.3 -com.fasterxml.jackson.core:jackson-core:2.11.3 -com.fasterxml.jackson.core:jackson-databind:2.10.2 +com.fasterxml.jackson.core:jackson-annotations:2.12.1 +com.fasterxml.jackson.core:jackson-core:2.12.1 +com.fasterxml.jackson.core:jackson-databind:2.12.1 +com.fasterxml.jackson:jackson-bom:2.12.1 com.fasterxml:classmate:1.5.1 com.github.docker-java:docker-java-api:3.2.7 com.github.docker-java:docker-java-transport-zerodep:3.2.7 @@ -25,91 +26,104 @@ com.github.jnr:jnr-ffi:2.1.13 com.github.jnr:jnr-posix:3.0.55 com.github.jnr:jnr-unixsocket:0.30 com.github.jnr:jnr-x86asm:1.0.2 +com.github.rholder:guava-retrying:2.0.0 com.google.android:annotations:4.1.1.4 com.google.api-client:google-api-client-appengine:1.30.8 -com.google.api-client:google-api-client-jackson2:1.30.9 -com.google.api-client:google-api-client-java6:1.30.9 +com.google.api-client:google-api-client-jackson2:1.30.10 +com.google.api-client:google-api-client-java6:1.30.10 com.google.api-client:google-api-client-servlet:1.30.8 -com.google.api-client:google-api-client:1.30.9 -com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.9.1 -com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.9.1 -com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.85.1 -com.google.api.grpc:grpc-google-common-protos:1.17.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1alpha2:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.90.0 -com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:1.9.1 -com.google.api.grpc:proto-google-cloud-bigtable-v2:1.9.1 -com.google.api.grpc:proto-google-cloud-datastore-v1:0.85.0 -com.google.api.grpc:proto-google-cloud-pubsub-v1:1.85.1 -com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.2.3 -com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.2.3 -com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:1.49.1 -com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:1.49.1 -com.google.api.grpc:proto-google-cloud-spanner-v1:1.49.1 -com.google.api.grpc:proto-google-common-protos:2.0.0 -com.google.api.grpc:proto-google-iam-v1:1.0.1 +com.google.api-client:google-api-client:1.30.10 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:1.5.5 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.105.5 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.105.5 +com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.14.0 +com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.14.0 +com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.90.3 +com.google.api.grpc:grpc-google-cloud-pubsublite-v1:0.7.0 +com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:2.0.2 +com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:2.0.2 +com.google.api.grpc:grpc-google-cloud-spanner-v1:2.0.2 +com.google.api.grpc:grpc-google-common-protos:1.18.1 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:1.5.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1alpha2:0.105.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.105.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.105.5 +com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:1.14.0 +com.google.api.grpc:proto-google-cloud-bigtable-v2:1.16.1 +com.google.api.grpc:proto-google-cloud-datastore-v1:0.88.0 +com.google.api.grpc:proto-google-cloud-pubsub-v1:1.92.0 +com.google.api.grpc:proto-google-cloud-pubsublite-v1:0.7.0 +com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.2.9 +com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.2.9 +com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:2.0.2 +com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:2.0.2 +com.google.api.grpc:proto-google-cloud-spanner-v1:2.0.2 +com.google.api.grpc:proto-google-common-protos:2.0.1 +com.google.api.grpc:proto-google-iam-v1:1.0.5 com.google.api:api-common:1.10.1 -com.google.api:gax-grpc:1.60.0 -com.google.api:gax-httpjson:0.70.1 -com.google.api:gax:1.60.0 +com.google.api:gax-grpc:1.60.1 +com.google.api:gax-httpjson:0.76.1 +com.google.api:gax:1.60.1 com.google.apis:google-api-services-admin-directory:directory_v1-rev72-1.22.0 com.google.apis:google-api-services-appengine:v1-rev101-1.25.0 -com.google.apis:google-api-services-bigquery:v2-rev20191211-1.30.9 -com.google.apis:google-api-services-clouddebugger:v2-rev20200313-1.30.9 +com.google.apis:google-api-services-bigquery:v2-rev20200916-1.30.10 +com.google.apis:google-api-services-clouddebugger:v2-rev20200501-1.30.10 com.google.apis:google-api-services-cloudkms:v1-rev12-1.22.0 -com.google.apis:google-api-services-cloudresourcemanager:v1-rev20200311-1.30.9 -com.google.apis:google-api-services-dataflow:v1b3-rev20200305-1.30.9 +com.google.apis:google-api-services-cloudresourcemanager:v1-rev20200720-1.30.10 +com.google.apis:google-api-services-dataflow:v1b3-rev20200713-1.30.10 com.google.apis:google-api-services-dns:v2beta1-rev6-1.22.0 com.google.apis:google-api-services-drive:v2-rev160-1.19.1 com.google.apis:google-api-services-groupssettings:v1-rev60-1.22.0 -com.google.apis:google-api-services-healthcare:v1beta1-rev20200525-1.30.9 +com.google.apis:google-api-services-healthcare:v1beta1-rev20200713-1.30.10 +com.google.apis:google-api-services-iamcredentials:v1-rev20201022-1.30.10 com.google.apis:google-api-services-monitoring:v3-rev426-1.23.0 -com.google.apis:google-api-services-pubsub:v1-rev20200312-1.30.9 +com.google.apis:google-api-services-pubsub:v1-rev20200713-1.30.10 com.google.apis:google-api-services-sheets:v4-rev483-1.22.0 com.google.apis:google-api-services-sqladmin:v1beta4-rev20190827-1.30.1 -com.google.apis:google-api-services-storage:v1-rev20200326-1.30.9 +com.google.apis:google-api-services-storage:v1-rev20200927-1.30.10 com.google.appengine.tools:appengine-gcs-client:0.6 com.google.appengine.tools:appengine-mapreduce:0.9 com.google.appengine.tools:appengine-pipeline:0.2.13 com.google.appengine:appengine-api-1.0-sdk:1.9.81 com.google.appengine:appengine-remote-api:1.9.81 com.google.appengine:appengine-testing:1.9.81 -com.google.auth:google-auth-library-credentials:0.22.0 -com.google.auth:google-auth-library-oauth2-http:0.22.0 +com.google.auth:google-auth-library-credentials:0.22.2 +com.google.auth:google-auth-library-oauth2-http:0.22.2 +com.google.auto.service:auto-service-annotations:1.0-rc7 com.google.auto.value:auto-value-annotations:1.7.4 -com.google.auto.value:auto-value:1.6.3 -com.google.cloud.bigdataoss:gcsio:2.1.3 -com.google.cloud.bigdataoss:util:2.1.3 -com.google.cloud.bigtable:bigtable-client-core:1.13.0 +com.google.auto.value:auto-value:1.7.4 +com.google.cloud.bigdataoss:gcsio:2.1.6 +com.google.cloud.bigdataoss:util:2.1.6 +com.google.cloud.bigtable:bigtable-client-core:1.16.0 com.google.cloud.datastore:datastore-v1-proto-client:1.6.3 com.google.cloud.sql:jdbc-socket-factory-core:1.0.16 com.google.cloud.sql:postgres-socket-factory:1.0.16 -com.google.cloud:google-cloud-bigquery:1.106.0 -com.google.cloud:google-cloud-bigquerystorage:0.125.0-beta -com.google.cloud:google-cloud-bigtable:1.9.1 -com.google.cloud:google-cloud-core-grpc:1.92.2 -com.google.cloud:google-cloud-core-http:1.92.4 -com.google.cloud:google-cloud-core:1.92.5 -com.google.cloud:google-cloud-secretmanager:1.2.3 -com.google.cloud:google-cloud-spanner:1.49.1 +com.google.cloud:google-cloud-bigquery:1.122.2 +com.google.cloud:google-cloud-bigquerystorage:1.5.5 +com.google.cloud:google-cloud-bigtable:1.14.0 +com.google.cloud:google-cloud-core-grpc:1.93.9 +com.google.cloud:google-cloud-core-http:1.93.9 +com.google.cloud:google-cloud-core:1.93.9 +com.google.cloud:google-cloud-pubsub:1.110.0 +com.google.cloud:google-cloud-pubsublite:0.7.0 +com.google.cloud:google-cloud-secretmanager:1.2.9 +com.google.cloud:google-cloud-spanner:2.0.2 com.google.code.findbugs:jsr305:3.0.2 com.google.code.gson:gson:2.8.6 com.google.common.html.types:types:1.0.4 com.google.dagger:dagger:2.28 -com.google.errorprone:error_prone_annotations:2.4.0 +com.google.errorprone:error_prone_annotations:2.5.0 com.google.flogger:flogger-system-backend:0.5.1 com.google.flogger:flogger:0.5.1 com.google.flogger:google-extensions:0.5.1 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava:30.0-jre +com.google.guava:guava:30.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.gwt:gwt-user:2.8.2 -com.google.http-client:google-http-client-appengine:1.34.1 -com.google.http-client:google-http-client-jackson2:1.37.0 +com.google.http-client:google-http-client-appengine:1.36.0 +com.google.http-client:google-http-client-jackson2:1.38.0 com.google.http-client:google-http-client-protobuf:1.33.0 -com.google.http-client:google-http-client:1.37.0 +com.google.http-client:google-http-client:1.38.0 com.google.inject.extensions:guice-multibindings:4.1.0 com.google.inject:guice:4.1.0 com.google.j2objc:j2objc-annotations:1.3 @@ -117,25 +131,23 @@ com.google.jsinterop:jsinterop-annotations:1.0.2 com.google.monitoring-client:metrics:1.0.7 com.google.monitoring-client:stackdriver:1.0.7 com.google.oauth-client:google-oauth-client-appengine:1.30.5 -com.google.oauth-client:google-oauth-client-java6:1.30.6 +com.google.oauth-client:google-oauth-client-java6:1.31.2 com.google.oauth-client:google-oauth-client-jetty:1.28.0 com.google.oauth-client:google-oauth-client-servlet:1.30.5 -com.google.oauth-client:google-oauth-client:1.30.6 -com.google.protobuf:protobuf-java-util:3.13.0 -com.google.protobuf:protobuf-java:3.13.0 +com.google.oauth-client:google-oauth-client:1.31.2 +com.google.protobuf:protobuf-java-util:3.14.0 +com.google.protobuf:protobuf-java:3.14.0 com.google.re2j:re2j:1.1 com.google.template:soy:2018-03-14 com.googlecode.charts4j:charts4j:1.3 com.googlecode.json-simple:json-simple:1.1.1 com.ibm.icu:icu4j:57.1 com.jcraft:jsch:0.1.55 -com.squareup.okhttp:okhttp:2.5.0 -com.squareup.okio:okio:1.13.0 com.sun.istack:istack-commons-runtime:3.0.7 com.sun.xml.fastinfoset:FastInfoset:1.2.15 com.thoughtworks.paranamer:paranamer:2.7 com.zaxxer:HikariCP:3.4.5 -commons-codec:commons-codec:1.13 +commons-codec:commons-codec:1.15 commons-logging:commons-logging:1.2 dnsjava:dnsjava:2.1.7 guru.nidi.com.kitfox:svgSalamander:1.1.3 @@ -143,31 +155,28 @@ guru.nidi:graphviz-java-all-j2v8:0.17.0 guru.nidi:graphviz-java:0.17.0 io.dropwizard.metrics:metrics-core:3.2.6 io.github.classgraph:classgraph:4.8.65 -io.grpc:grpc-all:1.27.2 -io.grpc:grpc-alts:1.32.2 -io.grpc:grpc-api:1.32.2 -io.grpc:grpc-auth:1.32.2 -io.grpc:grpc-context:1.32.2 -io.grpc:grpc-core:1.32.2 -io.grpc:grpc-grpclb:1.32.2 -io.grpc:grpc-netty-shaded:1.32.2 -io.grpc:grpc-netty:1.27.2 -io.grpc:grpc-okhttp:1.27.2 -io.grpc:grpc-protobuf-lite:1.32.2 -io.grpc:grpc-protobuf:1.32.2 -io.grpc:grpc-stub:1.32.2 -io.grpc:grpc-testing:1.27.2 -io.netty:netty-buffer:4.1.42.Final -io.netty:netty-codec-http2:4.1.42.Final -io.netty:netty-codec-http:4.1.42.Final -io.netty:netty-codec-socks:4.1.42.Final -io.netty:netty-codec:4.1.42.Final -io.netty:netty-common:4.1.42.Final -io.netty:netty-handler-proxy:4.1.42.Final -io.netty:netty-handler:4.1.42.Final -io.netty:netty-resolver:4.1.42.Final -io.netty:netty-tcnative-boringssl-static:2.0.17.Final -io.netty:netty-transport:4.1.42.Final +io.grpc:grpc-alts:1.34.1 +io.grpc:grpc-api:1.34.1 +io.grpc:grpc-auth:1.34.1 +io.grpc:grpc-context:1.34.1 +io.grpc:grpc-core:1.34.1 +io.grpc:grpc-grpclb:1.34.1 +io.grpc:grpc-netty-shaded:1.34.1 +io.grpc:grpc-netty:1.32.2 +io.grpc:grpc-protobuf-lite:1.34.1 +io.grpc:grpc-protobuf:1.34.1 +io.grpc:grpc-stub:1.34.1 +io.netty:netty-buffer:4.1.51.Final +io.netty:netty-codec-http2:4.1.51.Final +io.netty:netty-codec-http:4.1.51.Final +io.netty:netty-codec-socks:4.1.51.Final +io.netty:netty-codec:4.1.51.Final +io.netty:netty-common:4.1.51.Final +io.netty:netty-handler-proxy:4.1.51.Final +io.netty:netty-handler:4.1.51.Final +io.netty:netty-resolver:4.1.51.Final +io.netty:netty-tcnative-boringssl-static:2.0.33.Final +io.netty:netty-transport:4.1.51.Final io.opencensus:opencensus-api:0.24.0 io.opencensus:opencensus-contrib-grpc-util:0.24.0 io.opencensus:opencensus-contrib-http-util:0.24.0 @@ -191,22 +200,22 @@ net.arnx:nashorn-promise:0.1.1 net.bytebuddy:byte-buddy:1.10.17 net.java.dev.jna:jna:5.5.0 org.apache.avro:avro:1.8.2 -org.apache.beam:beam-model-fn-execution:2.23.0 -org.apache.beam:beam-model-job-management:2.23.0 -org.apache.beam:beam-model-pipeline:2.23.0 -org.apache.beam:beam-runners-core-construction-java:2.23.0 -org.apache.beam:beam-runners-google-cloud-dataflow-java:2.23.0 -org.apache.beam:beam-runners-java-fn-execution:2.23.0 -org.apache.beam:beam-sdks-java-core:2.23.0 -org.apache.beam:beam-sdks-java-expansion-service:2.23.0 -org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.23.0 -org.apache.beam:beam-sdks-java-extensions-protobuf:2.23.0 -org.apache.beam:beam-sdks-java-fn-execution:2.23.0 -org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.23.0 +org.apache.beam:beam-model-fn-execution:2.27.0 +org.apache.beam:beam-model-job-management:2.27.0 +org.apache.beam:beam-model-pipeline:2.27.0 +org.apache.beam:beam-runners-core-construction-java:2.27.0 +org.apache.beam:beam-runners-google-cloud-dataflow-java:2.27.0 +org.apache.beam:beam-runners-java-fn-execution:2.27.0 +org.apache.beam:beam-sdks-java-core:2.27.0 +org.apache.beam:beam-sdks-java-expansion-service:2.27.0 +org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.27.0 +org.apache.beam:beam-sdks-java-extensions-protobuf:2.27.0 +org.apache.beam:beam-sdks-java-fn-execution:2.27.0 +org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.27.0 org.apache.beam:beam-vendor-bytebuddy-1_10_8:0.1 org.apache.beam:beam-vendor-grpc-1_26_0:0.3 org.apache.beam:beam-vendor-guava-26_0-jre:0.1 -org.apache.beam:beam-vendor-sdks-java-extensions-protobuf:2.23.0 +org.apache.beam:beam-vendor-sdks-java-extensions-protobuf:2.27.0 org.apache.commons:commons-compress:1.20 org.apache.commons:commons-exec:1.3 org.apache.commons:commons-lang3:3.5 @@ -218,16 +227,18 @@ org.bouncycastle:bcpg-jdk15on:1.61 org.bouncycastle:bcpkix-jdk15on:1.61 org.bouncycastle:bcprov-jdk15on:1.61 org.checkerframework:checker-compat-qual:2.5.5 -org.checkerframework:checker-qual:3.5.0 +org.checkerframework:checker-qual:3.7.0 org.codehaus.jackson:jackson-core-asl:1.9.13 org.codehaus.jackson:jackson-mapper-asl:1.9.13 org.codehaus.mojo:animal-sniffer-annotations:1.19 -org.conscrypt:conscrypt-openjdk-uber:2.2.1 +org.conscrypt:conscrypt-openjdk-uber:2.5.1 org.dom4j:dom4j:2.1.3 org.easymock:easymock:3.0 org.flywaydb:flyway-core:5.2.4 org.glassfish.jaxb:jaxb-runtime:2.3.1 org.glassfish.jaxb:txw2:2.3.1 +org.hamcrest:hamcrest-core:2.1 +org.hamcrest:hamcrest:2.1 org.hibernate.common:hibernate-commons-annotations:5.1.2.Final org.hibernate:hibernate-core:5.4.23.Final org.hibernate:hibernate-hikaricp:5.4.23.Final @@ -236,7 +247,7 @@ org.jboss.logging:jboss-logging:3.4.1.Final org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.1.1.Final org.jboss:jandex:2.1.3.Final org.joda:joda-money:1.0.1 -org.json:json:20160810 +org.json:json:20200518 org.jsoup:jsoup:1.13.1 org.jvnet.staxex:stax-ex:1.8 org.mortbay.jetty:jetty-util:6.1.26 @@ -258,7 +269,7 @@ org.testcontainers:database-commons:1.15.1 org.testcontainers:jdbc:1.15.1 org.testcontainers:postgresql:1.15.1 org.testcontainers:testcontainers:1.15.1 -org.threeten:threetenbp:1.4.5 +org.threeten:threetenbp:1.5.0 org.tukaani:xz:1.8 org.w3c.css:sac:1.3 org.webjars.npm:viz.js-for-graphviz-java:2.1.3 diff --git a/core/gradle/dependency-locks/testAnnotationProcessor.lockfile b/core/gradle/dependency-locks/testAnnotationProcessor.lockfile index be65b1360..829a377a0 100644 --- a/core/gradle/dependency-locks/testAnnotationProcessor.lockfile +++ b/core/gradle/dependency-locks/testAnnotationProcessor.lockfile @@ -3,7 +3,7 @@ # This file is expected to be part of source control. com.github.ben-manes.caffeine:caffeine:2.7.0 com.github.kevinstern:software-and-algorithms:1.0 -com.google.auto.value:auto-value:1.6.3 +com.google.auto.value:auto-value:1.7.4 com.google.auto:auto-common:0.10 com.google.code.findbugs:jFormatString:3.0.0 com.google.code.findbugs:jsr305:3.0.2 @@ -19,7 +19,7 @@ com.google.errorprone:error_prone_type_annotations:2.3.4 com.google.errorprone:javac-shaded:9-dev-r4023-3 com.google.googlejavaformat:google-java-format:1.5 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava:30.0-jre +com.google.guava:guava:30.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.j2objc:j2objc-annotations:1.3 com.google.protobuf:protobuf-java:3.4.0 diff --git a/core/gradle/dependency-locks/testCompile.lockfile b/core/gradle/dependency-locks/testCompile.lockfile index 6a29aeb4d..79c7c8898 100644 --- a/core/gradle/dependency-locks/testCompile.lockfile +++ b/core/gradle/dependency-locks/testCompile.lockfile @@ -6,9 +6,10 @@ aopalliance:aopalliance:1.0 args4j:args4j:2.33 cglib:cglib-nodep:2.2 com.beust:jcommander:1.60 -com.fasterxml.jackson.core:jackson-annotations:2.11.2 -com.fasterxml.jackson.core:jackson-core:2.11.3 -com.fasterxml.jackson.core:jackson-databind:2.11.2 +com.fasterxml.jackson.core:jackson-annotations:2.12.1 +com.fasterxml.jackson.core:jackson-core:2.12.1 +com.fasterxml.jackson.core:jackson-databind:2.12.1 +com.fasterxml.jackson:jackson-bom:2.12.1 com.fasterxml:classmate:1.5.1 com.github.docker-java:docker-java-api:3.2.7 com.github.docker-java:docker-java-transport-zerodep:3.2.7 @@ -21,51 +22,61 @@ com.github.jnr:jnr-ffi:2.1.13 com.github.jnr:jnr-posix:3.0.55 com.github.jnr:jnr-unixsocket:0.30 com.github.jnr:jnr-x86asm:1.0.2 +com.github.rholder:guava-retrying:2.0.0 com.google.android:annotations:4.1.1.4 com.google.api-client:google-api-client-appengine:1.30.8 -com.google.api-client:google-api-client-jackson2:1.30.9 -com.google.api-client:google-api-client-java6:1.30.9 +com.google.api-client:google-api-client-jackson2:1.30.10 +com.google.api-client:google-api-client-java6:1.30.10 com.google.api-client:google-api-client-servlet:1.30.8 -com.google.api-client:google-api-client:1.30.9 -com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.9.1 -com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.9.1 -com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.85.1 -com.google.api.grpc:grpc-google-common-protos:1.17.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1alpha2:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.90.0 -com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:1.9.1 -com.google.api.grpc:proto-google-cloud-bigtable-v2:1.9.1 -com.google.api.grpc:proto-google-cloud-datastore-v1:0.85.0 -com.google.api.grpc:proto-google-cloud-pubsub-v1:1.85.1 -com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.2.3 -com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.2.3 -com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:1.49.1 -com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:1.49.1 -com.google.api.grpc:proto-google-cloud-spanner-v1:1.49.1 -com.google.api.grpc:proto-google-common-protos:2.0.0 -com.google.api.grpc:proto-google-iam-v1:1.0.1 +com.google.api-client:google-api-client:1.30.10 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:1.5.5 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.105.5 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.105.5 +com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.14.0 +com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.14.0 +com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.90.3 +com.google.api.grpc:grpc-google-cloud-pubsublite-v1:0.7.0 +com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:2.0.2 +com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:2.0.2 +com.google.api.grpc:grpc-google-cloud-spanner-v1:2.0.2 +com.google.api.grpc:grpc-google-common-protos:1.18.1 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:1.5.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1alpha2:0.105.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.105.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.105.5 +com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:1.14.0 +com.google.api.grpc:proto-google-cloud-bigtable-v2:1.16.1 +com.google.api.grpc:proto-google-cloud-datastore-v1:0.88.0 +com.google.api.grpc:proto-google-cloud-pubsub-v1:1.92.0 +com.google.api.grpc:proto-google-cloud-pubsublite-v1:0.7.0 +com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.2.9 +com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.2.9 +com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:2.0.2 +com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:2.0.2 +com.google.api.grpc:proto-google-cloud-spanner-v1:2.0.2 +com.google.api.grpc:proto-google-common-protos:2.0.1 +com.google.api.grpc:proto-google-iam-v1:1.0.5 com.google.api:api-common:1.10.1 -com.google.api:gax-grpc:1.60.0 -com.google.api:gax-httpjson:0.70.1 -com.google.api:gax:1.60.0 +com.google.api:gax-grpc:1.60.1 +com.google.api:gax-httpjson:0.76.1 +com.google.api:gax:1.60.1 com.google.apis:google-api-services-admin-directory:directory_v1-rev72-1.22.0 com.google.apis:google-api-services-appengine:v1-rev101-1.25.0 -com.google.apis:google-api-services-bigquery:v2-rev20191211-1.30.9 -com.google.apis:google-api-services-clouddebugger:v2-rev20200313-1.30.9 +com.google.apis:google-api-services-bigquery:v2-rev20200916-1.30.10 +com.google.apis:google-api-services-clouddebugger:v2-rev20200501-1.30.10 com.google.apis:google-api-services-cloudkms:v1-rev12-1.22.0 -com.google.apis:google-api-services-cloudresourcemanager:v1-rev20200311-1.30.9 -com.google.apis:google-api-services-dataflow:v1b3-rev20200305-1.30.9 +com.google.apis:google-api-services-cloudresourcemanager:v1-rev20200720-1.30.10 +com.google.apis:google-api-services-dataflow:v1b3-rev20200713-1.30.10 com.google.apis:google-api-services-dns:v2beta1-rev6-1.22.0 com.google.apis:google-api-services-drive:v2-rev160-1.19.1 com.google.apis:google-api-services-groupssettings:v1-rev60-1.22.0 -com.google.apis:google-api-services-healthcare:v1beta1-rev20200525-1.30.9 +com.google.apis:google-api-services-healthcare:v1beta1-rev20200713-1.30.10 +com.google.apis:google-api-services-iamcredentials:v1-rev20201022-1.30.10 com.google.apis:google-api-services-monitoring:v3-rev426-1.23.0 -com.google.apis:google-api-services-pubsub:v1-rev20200312-1.30.9 +com.google.apis:google-api-services-pubsub:v1-rev20200713-1.30.10 com.google.apis:google-api-services-sheets:v4-rev483-1.22.0 com.google.apis:google-api-services-sqladmin:v1beta4-rev20190827-1.30.1 -com.google.apis:google-api-services-storage:v1-rev20200326-1.30.9 +com.google.apis:google-api-services-storage:v1-rev20200927-1.30.10 com.google.appengine.tools:appengine-gcs-client:0.6 com.google.appengine.tools:appengine-mapreduce:0.9 com.google.appengine.tools:appengine-pipeline:0.2.13 @@ -73,40 +84,43 @@ com.google.appengine:appengine-api-1.0-sdk:1.9.81 com.google.appengine:appengine-api-stubs:1.9.81 com.google.appengine:appengine-remote-api:1.9.81 com.google.appengine:appengine-testing:1.9.81 -com.google.auth:google-auth-library-credentials:0.22.0 -com.google.auth:google-auth-library-oauth2-http:0.22.0 +com.google.auth:google-auth-library-credentials:0.22.2 +com.google.auth:google-auth-library-oauth2-http:0.22.2 +com.google.auto.service:auto-service-annotations:1.0-rc7 com.google.auto.value:auto-value-annotations:1.7.4 -com.google.auto.value:auto-value:1.6.3 -com.google.cloud.bigdataoss:gcsio:2.1.3 -com.google.cloud.bigdataoss:util:2.1.3 -com.google.cloud.bigtable:bigtable-client-core:1.13.0 +com.google.auto.value:auto-value:1.7.4 +com.google.cloud.bigdataoss:gcsio:2.1.6 +com.google.cloud.bigdataoss:util:2.1.6 +com.google.cloud.bigtable:bigtable-client-core:1.16.0 com.google.cloud.datastore:datastore-v1-proto-client:1.6.3 com.google.cloud.sql:jdbc-socket-factory-core:1.0.16 -com.google.cloud:google-cloud-bigquery:1.106.0 -com.google.cloud:google-cloud-bigquerystorage:0.125.0-beta -com.google.cloud:google-cloud-bigtable:1.9.1 -com.google.cloud:google-cloud-core-grpc:1.92.2 -com.google.cloud:google-cloud-core-http:1.92.4 -com.google.cloud:google-cloud-core:1.92.5 -com.google.cloud:google-cloud-secretmanager:1.2.3 -com.google.cloud:google-cloud-spanner:1.49.1 +com.google.cloud:google-cloud-bigquery:1.122.2 +com.google.cloud:google-cloud-bigquerystorage:1.5.5 +com.google.cloud:google-cloud-bigtable:1.14.0 +com.google.cloud:google-cloud-core-grpc:1.93.9 +com.google.cloud:google-cloud-core-http:1.93.9 +com.google.cloud:google-cloud-core:1.93.9 +com.google.cloud:google-cloud-pubsub:1.110.0 +com.google.cloud:google-cloud-pubsublite:0.7.0 +com.google.cloud:google-cloud-secretmanager:1.2.9 +com.google.cloud:google-cloud-spanner:2.0.2 com.google.code.findbugs:jsr305:3.0.2 com.google.code.gson:gson:2.8.6 com.google.common.html.types:types:1.0.4 com.google.dagger:dagger:2.28 -com.google.errorprone:error_prone_annotations:2.4.0 +com.google.errorprone:error_prone_annotations:2.5.0 com.google.flogger:flogger-system-backend:0.5.1 com.google.flogger:flogger:0.5.1 com.google.flogger:google-extensions:0.5.1 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava-testlib:30.0-jre -com.google.guava:guava:30.0-jre +com.google.guava:guava-testlib:30.1-jre +com.google.guava:guava:30.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.gwt:gwt-user:2.8.2 -com.google.http-client:google-http-client-appengine:1.34.1 -com.google.http-client:google-http-client-jackson2:1.37.0 +com.google.http-client:google-http-client-appengine:1.36.0 +com.google.http-client:google-http-client-jackson2:1.38.0 com.google.http-client:google-http-client-protobuf:1.33.0 -com.google.http-client:google-http-client:1.37.0 +com.google.http-client:google-http-client:1.38.0 com.google.inject.extensions:guice-multibindings:4.1.0 com.google.inject:guice:4.1.0 com.google.j2objc:j2objc-annotations:1.3 @@ -115,12 +129,12 @@ com.google.monitoring-client:contrib:1.0.7 com.google.monitoring-client:metrics:1.0.7 com.google.monitoring-client:stackdriver:1.0.7 com.google.oauth-client:google-oauth-client-appengine:1.30.5 -com.google.oauth-client:google-oauth-client-java6:1.30.6 +com.google.oauth-client:google-oauth-client-java6:1.31.2 com.google.oauth-client:google-oauth-client-jetty:1.28.0 com.google.oauth-client:google-oauth-client-servlet:1.30.5 -com.google.oauth-client:google-oauth-client:1.30.6 -com.google.protobuf:protobuf-java-util:3.13.0 -com.google.protobuf:protobuf-java:3.13.0 +com.google.oauth-client:google-oauth-client:1.31.2 +com.google.protobuf:protobuf-java-util:3.14.0 +com.google.protobuf:protobuf-java:3.14.0 com.google.re2j:re2j:1.1 com.google.template:soy:2018-03-14 com.google.truth.extensions:truth-java8-extension:1.0 @@ -131,43 +145,39 @@ com.googlecode.json-simple:json-simple:1.1.1 com.ibm.icu:icu4j:57.1 com.jcraft:jsch:0.1.55 com.squareup.okhttp3:okhttp:3.11.0 -com.squareup.okhttp:okhttp:2.5.0 com.squareup.okio:okio:1.14.0 com.sun.istack:istack-commons-runtime:3.0.7 com.sun.xml.fastinfoset:FastInfoset:1.2.15 com.thoughtworks.paranamer:paranamer:2.7 com.thoughtworks.qdox:qdox:1.12.1 com.zaxxer:HikariCP:3.4.5 -commons-codec:commons-codec:1.13 +commons-codec:commons-codec:1.15 commons-logging:commons-logging:1.2 dnsjava:dnsjava:2.1.7 io.dropwizard.metrics:metrics-core:3.2.6 io.github.classgraph:classgraph:4.8.65 -io.grpc:grpc-all:1.27.2 -io.grpc:grpc-alts:1.32.2 -io.grpc:grpc-api:1.32.2 -io.grpc:grpc-auth:1.32.2 -io.grpc:grpc-context:1.32.2 -io.grpc:grpc-core:1.32.2 -io.grpc:grpc-grpclb:1.32.2 -io.grpc:grpc-netty-shaded:1.32.2 -io.grpc:grpc-netty:1.27.2 -io.grpc:grpc-okhttp:1.27.2 -io.grpc:grpc-protobuf-lite:1.32.2 -io.grpc:grpc-protobuf:1.32.2 -io.grpc:grpc-stub:1.32.2 -io.grpc:grpc-testing:1.27.2 -io.netty:netty-buffer:4.1.42.Final -io.netty:netty-codec-http2:4.1.42.Final -io.netty:netty-codec-http:4.1.42.Final -io.netty:netty-codec-socks:4.1.42.Final -io.netty:netty-codec:4.1.42.Final -io.netty:netty-common:4.1.42.Final -io.netty:netty-handler-proxy:4.1.42.Final -io.netty:netty-handler:4.1.42.Final -io.netty:netty-resolver:4.1.42.Final -io.netty:netty-tcnative-boringssl-static:2.0.17.Final -io.netty:netty-transport:4.1.42.Final +io.grpc:grpc-alts:1.34.1 +io.grpc:grpc-api:1.34.1 +io.grpc:grpc-auth:1.34.1 +io.grpc:grpc-context:1.34.1 +io.grpc:grpc-core:1.34.1 +io.grpc:grpc-grpclb:1.34.1 +io.grpc:grpc-netty-shaded:1.34.1 +io.grpc:grpc-netty:1.32.2 +io.grpc:grpc-protobuf-lite:1.34.1 +io.grpc:grpc-protobuf:1.34.1 +io.grpc:grpc-stub:1.34.1 +io.netty:netty-buffer:4.1.51.Final +io.netty:netty-codec-http2:4.1.51.Final +io.netty:netty-codec-http:4.1.51.Final +io.netty:netty-codec-socks:4.1.51.Final +io.netty:netty-codec:4.1.51.Final +io.netty:netty-common:4.1.51.Final +io.netty:netty-handler-proxy:4.1.51.Final +io.netty:netty-handler:4.1.51.Final +io.netty:netty-resolver:4.1.51.Final +io.netty:netty-tcnative-boringssl-static:2.0.33.Final +io.netty:netty-transport:4.1.51.Final io.opencensus:opencensus-api:0.24.0 io.opencensus:opencensus-contrib-grpc-util:0.24.0 io.opencensus:opencensus-contrib-http-util:0.24.0 @@ -187,28 +197,28 @@ javax.validation:validation-api:1.0.0.GA javax.xml.bind:jaxb-api:2.3.1 jline:jline:1.0 joda-time:joda-time:2.10.5 -junit:junit:4.13 +junit:junit:4.13.1 net.bytebuddy:byte-buddy-agent:1.10.5 net.bytebuddy:byte-buddy:1.10.17 net.java.dev.jna:jna:5.5.0 org.apache.avro:avro:1.8.2 -org.apache.beam:beam-model-fn-execution:2.23.0 -org.apache.beam:beam-model-job-management:2.23.0 -org.apache.beam:beam-model-pipeline:2.23.0 -org.apache.beam:beam-runners-core-construction-java:2.23.0 -org.apache.beam:beam-runners-direct-java:2.23.0 -org.apache.beam:beam-runners-google-cloud-dataflow-java:2.23.0 -org.apache.beam:beam-runners-java-fn-execution:2.23.0 -org.apache.beam:beam-sdks-java-core:2.23.0 -org.apache.beam:beam-sdks-java-expansion-service:2.23.0 -org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.23.0 -org.apache.beam:beam-sdks-java-extensions-protobuf:2.23.0 -org.apache.beam:beam-sdks-java-fn-execution:2.23.0 -org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.23.0 +org.apache.beam:beam-model-fn-execution:2.27.0 +org.apache.beam:beam-model-job-management:2.27.0 +org.apache.beam:beam-model-pipeline:2.27.0 +org.apache.beam:beam-runners-core-construction-java:2.27.0 +org.apache.beam:beam-runners-direct-java:2.27.0 +org.apache.beam:beam-runners-google-cloud-dataflow-java:2.27.0 +org.apache.beam:beam-runners-java-fn-execution:2.27.0 +org.apache.beam:beam-sdks-java-core:2.27.0 +org.apache.beam:beam-sdks-java-expansion-service:2.27.0 +org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.27.0 +org.apache.beam:beam-sdks-java-extensions-protobuf:2.27.0 +org.apache.beam:beam-sdks-java-fn-execution:2.27.0 +org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.27.0 org.apache.beam:beam-vendor-bytebuddy-1_10_8:0.1 org.apache.beam:beam-vendor-grpc-1_26_0:0.3 org.apache.beam:beam-vendor-guava-26_0-jre:0.1 -org.apache.beam:beam-vendor-sdks-java-extensions-protobuf:2.23.0 +org.apache.beam:beam-vendor-sdks-java-extensions-protobuf:2.27.0 org.apache.commons:commons-compress:1.20 org.apache.commons:commons-exec:1.3 org.apache.commons:commons-lang3:3.8.1 @@ -228,19 +238,19 @@ org.bouncycastle:bcpg-jdk15on:1.61 org.bouncycastle:bcpkix-jdk15on:1.61 org.bouncycastle:bcprov-jdk15on:1.61 org.checkerframework:checker-compat-qual:2.5.5 -org.checkerframework:checker-qual:3.5.0 +org.checkerframework:checker-qual:3.7.0 org.codehaus.jackson:jackson-core-asl:1.9.13 org.codehaus.jackson:jackson-mapper-asl:1.9.13 org.codehaus.mojo:animal-sniffer-annotations:1.19 -org.conscrypt:conscrypt-openjdk-uber:2.2.1 +org.conscrypt:conscrypt-openjdk-uber:2.5.1 org.dom4j:dom4j:2.1.3 org.easymock:easymock:3.0 org.flywaydb:flyway-core:5.2.4 org.glassfish.jaxb:jaxb-runtime:2.3.1 org.glassfish.jaxb:txw2:2.3.1 -org.hamcrest:hamcrest-all:1.3 -org.hamcrest:hamcrest-core:1.3 -org.hamcrest:hamcrest-library:1.3 +org.hamcrest:hamcrest-core:2.2 +org.hamcrest:hamcrest-library:2.2 +org.hamcrest:hamcrest:2.2 org.hibernate.common:hibernate-commons-annotations:5.1.2.Final org.hibernate:hibernate-core:5.4.23.Final org.hibernate:hibernate-hikaricp:5.4.23.Final @@ -249,7 +259,7 @@ org.jboss.logging:jboss-logging:3.4.1.Final org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.1.1.Final org.jboss:jandex:2.1.3.Final org.joda:joda-money:1.0.1 -org.json:json:20160810 +org.json:json:20200518 org.jsoup:jsoup:1.13.1 org.junit-pioneer:junit-pioneer:0.7.0 org.junit.jupiter:junit-jupiter-api:5.7.0 @@ -294,7 +304,7 @@ org.testcontainers:junit-jupiter:1.15.1 org.testcontainers:postgresql:1.15.1 org.testcontainers:selenium:1.15.1 org.testcontainers:testcontainers:1.15.1 -org.threeten:threetenbp:1.4.5 +org.threeten:threetenbp:1.5.0 org.tukaani:xz:1.8 org.w3c.css:sac:1.3 org.xerial.snappy:snappy-java:1.1.4 diff --git a/core/gradle/dependency-locks/testCompileClasspath.lockfile b/core/gradle/dependency-locks/testCompileClasspath.lockfile index d1d09dea1..f687786f3 100644 --- a/core/gradle/dependency-locks/testCompileClasspath.lockfile +++ b/core/gradle/dependency-locks/testCompileClasspath.lockfile @@ -6,9 +6,10 @@ aopalliance:aopalliance:1.0 args4j:args4j:2.33 cglib:cglib-nodep:2.2 com.beust:jcommander:1.60 -com.fasterxml.jackson.core:jackson-annotations:2.11.2 -com.fasterxml.jackson.core:jackson-core:2.11.3 -com.fasterxml.jackson.core:jackson-databind:2.11.2 +com.fasterxml.jackson.core:jackson-annotations:2.12.1 +com.fasterxml.jackson.core:jackson-core:2.12.1 +com.fasterxml.jackson.core:jackson-databind:2.12.1 +com.fasterxml.jackson:jackson-bom:2.12.1 com.fasterxml:classmate:1.5.1 com.github.docker-java:docker-java-api:3.2.7 com.github.docker-java:docker-java-transport-zerodep:3.2.7 @@ -21,50 +22,60 @@ com.github.jnr:jnr-ffi:2.1.13 com.github.jnr:jnr-posix:3.0.55 com.github.jnr:jnr-unixsocket:0.30 com.github.jnr:jnr-x86asm:1.0.2 +com.github.rholder:guava-retrying:2.0.0 com.google.api-client:google-api-client-appengine:1.30.8 -com.google.api-client:google-api-client-jackson2:1.30.9 -com.google.api-client:google-api-client-java6:1.30.9 +com.google.api-client:google-api-client-jackson2:1.30.10 +com.google.api-client:google-api-client-java6:1.30.10 com.google.api-client:google-api-client-servlet:1.30.8 -com.google.api-client:google-api-client:1.30.9 -com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.9.1 -com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.9.1 -com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.85.1 -com.google.api.grpc:grpc-google-common-protos:1.17.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1alpha2:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.90.0 -com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:1.9.1 -com.google.api.grpc:proto-google-cloud-bigtable-v2:1.9.1 -com.google.api.grpc:proto-google-cloud-datastore-v1:0.85.0 -com.google.api.grpc:proto-google-cloud-pubsub-v1:1.85.1 -com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.2.3 -com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.2.3 -com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:1.49.1 -com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:1.49.1 -com.google.api.grpc:proto-google-cloud-spanner-v1:1.49.1 -com.google.api.grpc:proto-google-common-protos:2.0.0 -com.google.api.grpc:proto-google-iam-v1:1.0.1 +com.google.api-client:google-api-client:1.30.10 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:1.5.5 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.105.5 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.105.5 +com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.14.0 +com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.14.0 +com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.90.3 +com.google.api.grpc:grpc-google-cloud-pubsublite-v1:0.7.0 +com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:2.0.2 +com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:2.0.2 +com.google.api.grpc:grpc-google-cloud-spanner-v1:2.0.2 +com.google.api.grpc:grpc-google-common-protos:1.18.1 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:1.5.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1alpha2:0.105.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.105.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.105.5 +com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:1.14.0 +com.google.api.grpc:proto-google-cloud-bigtable-v2:1.16.1 +com.google.api.grpc:proto-google-cloud-datastore-v1:0.88.0 +com.google.api.grpc:proto-google-cloud-pubsub-v1:1.92.0 +com.google.api.grpc:proto-google-cloud-pubsublite-v1:0.7.0 +com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.2.9 +com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.2.9 +com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:2.0.2 +com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:2.0.2 +com.google.api.grpc:proto-google-cloud-spanner-v1:2.0.2 +com.google.api.grpc:proto-google-common-protos:2.0.1 +com.google.api.grpc:proto-google-iam-v1:1.0.5 com.google.api:api-common:1.10.1 -com.google.api:gax-grpc:1.60.0 -com.google.api:gax-httpjson:0.70.1 -com.google.api:gax:1.60.0 +com.google.api:gax-grpc:1.60.1 +com.google.api:gax-httpjson:0.76.1 +com.google.api:gax:1.60.1 com.google.apis:google-api-services-admin-directory:directory_v1-rev72-1.22.0 com.google.apis:google-api-services-appengine:v1-rev101-1.25.0 -com.google.apis:google-api-services-bigquery:v2-rev20191211-1.30.9 -com.google.apis:google-api-services-clouddebugger:v2-rev20200313-1.30.9 +com.google.apis:google-api-services-bigquery:v2-rev20200916-1.30.10 +com.google.apis:google-api-services-clouddebugger:v2-rev20200501-1.30.10 com.google.apis:google-api-services-cloudkms:v1-rev12-1.22.0 -com.google.apis:google-api-services-cloudresourcemanager:v1-rev20200311-1.30.9 -com.google.apis:google-api-services-dataflow:v1b3-rev20200305-1.30.9 +com.google.apis:google-api-services-cloudresourcemanager:v1-rev20200720-1.30.10 +com.google.apis:google-api-services-dataflow:v1b3-rev20200713-1.30.10 com.google.apis:google-api-services-dns:v2beta1-rev6-1.22.0 com.google.apis:google-api-services-drive:v2-rev160-1.19.1 com.google.apis:google-api-services-groupssettings:v1-rev60-1.22.0 -com.google.apis:google-api-services-healthcare:v1beta1-rev20200525-1.30.9 +com.google.apis:google-api-services-healthcare:v1beta1-rev20200713-1.30.10 +com.google.apis:google-api-services-iamcredentials:v1-rev20201022-1.30.10 com.google.apis:google-api-services-monitoring:v3-rev426-1.23.0 -com.google.apis:google-api-services-pubsub:v1-rev20200312-1.30.9 +com.google.apis:google-api-services-pubsub:v1-rev20200713-1.30.10 com.google.apis:google-api-services-sheets:v4-rev483-1.22.0 com.google.apis:google-api-services-sqladmin:v1beta4-rev20190827-1.30.1 -com.google.apis:google-api-services-storage:v1-rev20200326-1.30.9 +com.google.apis:google-api-services-storage:v1-rev20200927-1.30.10 com.google.appengine.tools:appengine-gcs-client:0.6 com.google.appengine.tools:appengine-mapreduce:0.9 com.google.appengine.tools:appengine-pipeline:0.2.13 @@ -72,39 +83,42 @@ com.google.appengine:appengine-api-1.0-sdk:1.9.81 com.google.appengine:appengine-api-stubs:1.9.81 com.google.appengine:appengine-remote-api:1.9.81 com.google.appengine:appengine-testing:1.9.81 -com.google.auth:google-auth-library-credentials:0.22.0 -com.google.auth:google-auth-library-oauth2-http:0.22.0 +com.google.auth:google-auth-library-credentials:0.22.2 +com.google.auth:google-auth-library-oauth2-http:0.22.2 +com.google.auto.service:auto-service-annotations:1.0-rc7 com.google.auto.value:auto-value-annotations:1.7.4 -com.google.auto.value:auto-value:1.6.3 -com.google.cloud.bigdataoss:gcsio:2.1.3 -com.google.cloud.bigdataoss:util:2.1.3 -com.google.cloud.bigtable:bigtable-client-core:1.13.0 +com.google.auto.value:auto-value:1.7.4 +com.google.cloud.bigdataoss:gcsio:2.1.6 +com.google.cloud.bigdataoss:util:2.1.6 +com.google.cloud.bigtable:bigtable-client-core:1.16.0 com.google.cloud.datastore:datastore-v1-proto-client:1.6.3 com.google.cloud.sql:jdbc-socket-factory-core:1.0.16 -com.google.cloud:google-cloud-bigquery:1.106.0 -com.google.cloud:google-cloud-bigquerystorage:0.125.0-beta -com.google.cloud:google-cloud-bigtable:1.9.1 -com.google.cloud:google-cloud-core-grpc:1.92.2 -com.google.cloud:google-cloud-core-http:1.92.4 -com.google.cloud:google-cloud-core:1.92.5 -com.google.cloud:google-cloud-secretmanager:1.2.3 -com.google.cloud:google-cloud-spanner:1.49.1 +com.google.cloud:google-cloud-bigquery:1.122.2 +com.google.cloud:google-cloud-bigquerystorage:1.5.5 +com.google.cloud:google-cloud-bigtable:1.14.0 +com.google.cloud:google-cloud-core-grpc:1.93.9 +com.google.cloud:google-cloud-core-http:1.93.9 +com.google.cloud:google-cloud-core:1.93.9 +com.google.cloud:google-cloud-pubsub:1.110.0 +com.google.cloud:google-cloud-pubsublite:0.7.0 +com.google.cloud:google-cloud-secretmanager:1.2.9 +com.google.cloud:google-cloud-spanner:2.0.2 com.google.code.findbugs:jsr305:3.0.2 com.google.code.gson:gson:2.8.6 com.google.common.html.types:types:1.0.4 com.google.dagger:dagger:2.28 -com.google.errorprone:error_prone_annotations:2.4.0 +com.google.errorprone:error_prone_annotations:2.5.0 com.google.flogger:flogger:0.5.1 com.google.flogger:google-extensions:0.5.1 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava-testlib:30.0-jre -com.google.guava:guava:30.0-jre +com.google.guava:guava-testlib:30.1-jre +com.google.guava:guava:30.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.gwt:gwt-user:2.8.2 -com.google.http-client:google-http-client-appengine:1.34.1 -com.google.http-client:google-http-client-jackson2:1.37.0 +com.google.http-client:google-http-client-appengine:1.36.0 +com.google.http-client:google-http-client-jackson2:1.38.0 com.google.http-client:google-http-client-protobuf:1.33.0 -com.google.http-client:google-http-client:1.37.0 +com.google.http-client:google-http-client:1.38.0 com.google.inject.extensions:guice-multibindings:4.1.0 com.google.inject:guice:4.1.0 com.google.j2objc:j2objc-annotations:1.3 @@ -113,12 +127,12 @@ com.google.monitoring-client:contrib:1.0.7 com.google.monitoring-client:metrics:1.0.7 com.google.monitoring-client:stackdriver:1.0.7 com.google.oauth-client:google-oauth-client-appengine:1.30.5 -com.google.oauth-client:google-oauth-client-java6:1.30.6 +com.google.oauth-client:google-oauth-client-java6:1.31.2 com.google.oauth-client:google-oauth-client-jetty:1.28.0 com.google.oauth-client:google-oauth-client-servlet:1.30.5 -com.google.oauth-client:google-oauth-client:1.30.6 -com.google.protobuf:protobuf-java-util:3.11.4 -com.google.protobuf:protobuf-java:3.13.0 +com.google.oauth-client:google-oauth-client:1.31.2 +com.google.protobuf:protobuf-java-util:3.14.0 +com.google.protobuf:protobuf-java:3.14.0 com.google.re2j:re2j:1.1 com.google.template:soy:2018-03-14 com.google.truth.extensions:truth-java8-extension:1.0 @@ -129,43 +143,37 @@ com.googlecode.json-simple:json-simple:1.1.1 com.ibm.icu:icu4j:57.1 com.jcraft:jsch:0.1.55 com.squareup.okhttp3:okhttp:3.11.0 -com.squareup.okhttp:okhttp:2.5.0 com.squareup.okio:okio:1.14.0 com.sun.istack:istack-commons-runtime:3.0.7 com.sun.xml.fastinfoset:FastInfoset:1.2.15 com.thoughtworks.paranamer:paranamer:2.7 com.thoughtworks.qdox:qdox:1.12.1 com.zaxxer:HikariCP:3.4.5 -commons-codec:commons-codec:1.13 +commons-codec:commons-codec:1.15 commons-logging:commons-logging:1.2 dnsjava:dnsjava:2.1.7 io.dropwizard.metrics:metrics-core:3.2.6 io.github.classgraph:classgraph:4.8.65 -io.grpc:grpc-all:1.27.2 -io.grpc:grpc-alts:1.32.2 -io.grpc:grpc-api:1.32.2 -io.grpc:grpc-auth:1.32.2 -io.grpc:grpc-context:1.32.2 -io.grpc:grpc-core:1.32.2 -io.grpc:grpc-grpclb:1.32.2 -io.grpc:grpc-netty-shaded:1.32.2 -io.grpc:grpc-netty:1.27.2 -io.grpc:grpc-okhttp:1.27.2 -io.grpc:grpc-protobuf-lite:1.32.2 -io.grpc:grpc-protobuf:1.32.2 -io.grpc:grpc-stub:1.32.2 -io.grpc:grpc-testing:1.27.2 -io.netty:netty-buffer:4.1.42.Final -io.netty:netty-codec-http2:4.1.42.Final -io.netty:netty-codec-http:4.1.42.Final -io.netty:netty-codec-socks:4.1.42.Final -io.netty:netty-codec:4.1.42.Final -io.netty:netty-common:4.1.42.Final -io.netty:netty-handler-proxy:4.1.42.Final -io.netty:netty-handler:4.1.42.Final -io.netty:netty-resolver:4.1.42.Final -io.netty:netty-tcnative-boringssl-static:2.0.17.Final -io.netty:netty-transport:4.1.42.Final +io.grpc:grpc-alts:1.34.1 +io.grpc:grpc-api:1.34.1 +io.grpc:grpc-auth:1.34.1 +io.grpc:grpc-context:1.34.1 +io.grpc:grpc-core:1.34.1 +io.grpc:grpc-grpclb:1.34.1 +io.grpc:grpc-netty-shaded:1.34.1 +io.grpc:grpc-netty:1.32.2 +io.grpc:grpc-protobuf-lite:1.34.1 +io.grpc:grpc-protobuf:1.34.1 +io.grpc:grpc-stub:1.34.1 +io.netty:netty-buffer:4.1.51.Final +io.netty:netty-codec-http2:4.1.51.Final +io.netty:netty-codec-http:4.1.51.Final +io.netty:netty-codec:4.1.51.Final +io.netty:netty-common:4.1.51.Final +io.netty:netty-handler:4.1.51.Final +io.netty:netty-resolver:4.1.51.Final +io.netty:netty-tcnative-boringssl-static:2.0.33.Final +io.netty:netty-transport:4.1.51.Final io.opencensus:opencensus-api:0.24.0 io.opencensus:opencensus-contrib-grpc-util:0.24.0 io.opencensus:opencensus-contrib-http-util:0.24.0 @@ -184,28 +192,28 @@ javax.validation:validation-api:1.0.0.GA javax.xml.bind:jaxb-api:2.3.1 jline:jline:1.0 joda-time:joda-time:2.10.5 -junit:junit:4.13 +junit:junit:4.13.1 net.bytebuddy:byte-buddy-agent:1.10.5 net.bytebuddy:byte-buddy:1.10.17 net.java.dev.jna:jna:5.5.0 org.apache.avro:avro:1.8.2 -org.apache.beam:beam-model-fn-execution:2.23.0 -org.apache.beam:beam-model-job-management:2.23.0 -org.apache.beam:beam-model-pipeline:2.23.0 -org.apache.beam:beam-runners-core-construction-java:2.23.0 -org.apache.beam:beam-runners-direct-java:2.23.0 -org.apache.beam:beam-runners-google-cloud-dataflow-java:2.23.0 -org.apache.beam:beam-runners-java-fn-execution:2.23.0 -org.apache.beam:beam-sdks-java-core:2.23.0 -org.apache.beam:beam-sdks-java-expansion-service:2.23.0 -org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.23.0 -org.apache.beam:beam-sdks-java-extensions-protobuf:2.23.0 -org.apache.beam:beam-sdks-java-fn-execution:2.23.0 -org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.23.0 +org.apache.beam:beam-model-fn-execution:2.27.0 +org.apache.beam:beam-model-job-management:2.27.0 +org.apache.beam:beam-model-pipeline:2.27.0 +org.apache.beam:beam-runners-core-construction-java:2.27.0 +org.apache.beam:beam-runners-direct-java:2.27.0 +org.apache.beam:beam-runners-google-cloud-dataflow-java:2.27.0 +org.apache.beam:beam-runners-java-fn-execution:2.27.0 +org.apache.beam:beam-sdks-java-core:2.27.0 +org.apache.beam:beam-sdks-java-expansion-service:2.27.0 +org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.27.0 +org.apache.beam:beam-sdks-java-extensions-protobuf:2.27.0 +org.apache.beam:beam-sdks-java-fn-execution:2.27.0 +org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.27.0 org.apache.beam:beam-vendor-bytebuddy-1_10_8:0.1 org.apache.beam:beam-vendor-grpc-1_26_0:0.3 org.apache.beam:beam-vendor-guava-26_0-jre:0.1 -org.apache.beam:beam-vendor-sdks-java-extensions-protobuf:2.23.0 +org.apache.beam:beam-vendor-sdks-java-extensions-protobuf:2.27.0 org.apache.commons:commons-compress:1.20 org.apache.commons:commons-exec:1.3 org.apache.commons:commons-lang3:3.8.1 @@ -225,18 +233,18 @@ org.bouncycastle:bcpg-jdk15on:1.61 org.bouncycastle:bcpkix-jdk15on:1.61 org.bouncycastle:bcprov-jdk15on:1.61 org.checkerframework:checker-compat-qual:2.5.5 -org.checkerframework:checker-qual:3.5.0 +org.checkerframework:checker-qual:3.7.0 org.codehaus.jackson:jackson-core-asl:1.9.13 org.codehaus.jackson:jackson-mapper-asl:1.9.13 -org.conscrypt:conscrypt-openjdk-uber:2.2.1 +org.conscrypt:conscrypt-openjdk-uber:2.5.1 org.dom4j:dom4j:2.1.3 org.easymock:easymock:3.0 org.flywaydb:flyway-core:5.2.4 org.glassfish.jaxb:jaxb-runtime:2.3.1 org.glassfish.jaxb:txw2:2.3.1 -org.hamcrest:hamcrest-all:1.3 -org.hamcrest:hamcrest-core:1.3 -org.hamcrest:hamcrest-library:1.3 +org.hamcrest:hamcrest-core:2.2 +org.hamcrest:hamcrest-library:2.2 +org.hamcrest:hamcrest:2.2 org.hibernate.common:hibernate-commons-annotations:5.1.2.Final org.hibernate:hibernate-core:5.4.23.Final org.hibernate:hibernate-hikaricp:5.4.23.Final @@ -245,7 +253,7 @@ org.jboss.logging:jboss-logging:3.4.1.Final org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.1.1.Final org.jboss:jandex:2.1.3.Final org.joda:joda-money:1.0.1 -org.json:json:20160810 +org.json:json:20200518 org.jsoup:jsoup:1.13.1 org.junit-pioneer:junit-pioneer:0.7.0 org.junit.jupiter:junit-jupiter-api:5.7.0 @@ -290,7 +298,7 @@ org.testcontainers:junit-jupiter:1.15.1 org.testcontainers:postgresql:1.15.1 org.testcontainers:selenium:1.15.1 org.testcontainers:testcontainers:1.15.1 -org.threeten:threetenbp:1.4.5 +org.threeten:threetenbp:1.5.0 org.tukaani:xz:1.8 org.w3c.css:sac:1.3 org.xerial.snappy:snappy-java:1.1.4 diff --git a/core/gradle/dependency-locks/testRuntime.lockfile b/core/gradle/dependency-locks/testRuntime.lockfile index 562e644b7..af5c06510 100644 --- a/core/gradle/dependency-locks/testRuntime.lockfile +++ b/core/gradle/dependency-locks/testRuntime.lockfile @@ -10,9 +10,10 @@ com.eclipsesource.j2v8:j2v8_linux_x86_64:4.6.0 com.eclipsesource.j2v8:j2v8_macosx_x86_64:4.6.0 com.eclipsesource.j2v8:j2v8_win32_x86:4.6.0 com.eclipsesource.j2v8:j2v8_win32_x86_64:4.6.0 -com.fasterxml.jackson.core:jackson-annotations:2.11.2 -com.fasterxml.jackson.core:jackson-core:2.11.3 -com.fasterxml.jackson.core:jackson-databind:2.11.2 +com.fasterxml.jackson.core:jackson-annotations:2.12.1 +com.fasterxml.jackson.core:jackson-core:2.12.1 +com.fasterxml.jackson.core:jackson-databind:2.12.1 +com.fasterxml.jackson:jackson-bom:2.12.1 com.fasterxml:classmate:1.5.1 com.github.docker-java:docker-java-api:3.2.7 com.github.docker-java:docker-java-transport-zerodep:3.2.7 @@ -25,51 +26,61 @@ com.github.jnr:jnr-ffi:2.1.13 com.github.jnr:jnr-posix:3.0.55 com.github.jnr:jnr-unixsocket:0.30 com.github.jnr:jnr-x86asm:1.0.2 +com.github.rholder:guava-retrying:2.0.0 com.google.android:annotations:4.1.1.4 com.google.api-client:google-api-client-appengine:1.30.8 -com.google.api-client:google-api-client-jackson2:1.30.9 -com.google.api-client:google-api-client-java6:1.30.9 +com.google.api-client:google-api-client-jackson2:1.30.10 +com.google.api-client:google-api-client-java6:1.30.10 com.google.api-client:google-api-client-servlet:1.30.8 -com.google.api-client:google-api-client:1.30.9 -com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.9.1 -com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.9.1 -com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.85.1 -com.google.api.grpc:grpc-google-common-protos:1.17.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1alpha2:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.90.0 -com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:1.9.1 -com.google.api.grpc:proto-google-cloud-bigtable-v2:1.9.1 -com.google.api.grpc:proto-google-cloud-datastore-v1:0.85.0 -com.google.api.grpc:proto-google-cloud-pubsub-v1:1.85.1 -com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.2.3 -com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.2.3 -com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:1.49.1 -com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:1.49.1 -com.google.api.grpc:proto-google-cloud-spanner-v1:1.49.1 -com.google.api.grpc:proto-google-common-protos:2.0.0 -com.google.api.grpc:proto-google-iam-v1:1.0.1 +com.google.api-client:google-api-client:1.30.10 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:1.5.5 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.105.5 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.105.5 +com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.14.0 +com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.14.0 +com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.90.3 +com.google.api.grpc:grpc-google-cloud-pubsublite-v1:0.7.0 +com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:2.0.2 +com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:2.0.2 +com.google.api.grpc:grpc-google-cloud-spanner-v1:2.0.2 +com.google.api.grpc:grpc-google-common-protos:1.18.1 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:1.5.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1alpha2:0.105.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.105.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.105.5 +com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:1.14.0 +com.google.api.grpc:proto-google-cloud-bigtable-v2:1.16.1 +com.google.api.grpc:proto-google-cloud-datastore-v1:0.88.0 +com.google.api.grpc:proto-google-cloud-pubsub-v1:1.92.0 +com.google.api.grpc:proto-google-cloud-pubsublite-v1:0.7.0 +com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.2.9 +com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.2.9 +com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:2.0.2 +com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:2.0.2 +com.google.api.grpc:proto-google-cloud-spanner-v1:2.0.2 +com.google.api.grpc:proto-google-common-protos:2.0.1 +com.google.api.grpc:proto-google-iam-v1:1.0.5 com.google.api:api-common:1.10.1 -com.google.api:gax-grpc:1.60.0 -com.google.api:gax-httpjson:0.70.1 -com.google.api:gax:1.60.0 +com.google.api:gax-grpc:1.60.1 +com.google.api:gax-httpjson:0.76.1 +com.google.api:gax:1.60.1 com.google.apis:google-api-services-admin-directory:directory_v1-rev72-1.22.0 com.google.apis:google-api-services-appengine:v1-rev101-1.25.0 -com.google.apis:google-api-services-bigquery:v2-rev20191211-1.30.9 -com.google.apis:google-api-services-clouddebugger:v2-rev20200313-1.30.9 +com.google.apis:google-api-services-bigquery:v2-rev20200916-1.30.10 +com.google.apis:google-api-services-clouddebugger:v2-rev20200501-1.30.10 com.google.apis:google-api-services-cloudkms:v1-rev12-1.22.0 -com.google.apis:google-api-services-cloudresourcemanager:v1-rev20200311-1.30.9 -com.google.apis:google-api-services-dataflow:v1b3-rev20200305-1.30.9 +com.google.apis:google-api-services-cloudresourcemanager:v1-rev20200720-1.30.10 +com.google.apis:google-api-services-dataflow:v1b3-rev20200713-1.30.10 com.google.apis:google-api-services-dns:v2beta1-rev6-1.22.0 com.google.apis:google-api-services-drive:v2-rev160-1.19.1 com.google.apis:google-api-services-groupssettings:v1-rev60-1.22.0 -com.google.apis:google-api-services-healthcare:v1beta1-rev20200525-1.30.9 +com.google.apis:google-api-services-healthcare:v1beta1-rev20200713-1.30.10 +com.google.apis:google-api-services-iamcredentials:v1-rev20201022-1.30.10 com.google.apis:google-api-services-monitoring:v3-rev426-1.23.0 -com.google.apis:google-api-services-pubsub:v1-rev20200312-1.30.9 +com.google.apis:google-api-services-pubsub:v1-rev20200713-1.30.10 com.google.apis:google-api-services-sheets:v4-rev483-1.22.0 com.google.apis:google-api-services-sqladmin:v1beta4-rev20190827-1.30.1 -com.google.apis:google-api-services-storage:v1-rev20200326-1.30.9 +com.google.apis:google-api-services-storage:v1-rev20200927-1.30.10 com.google.appengine.tools:appengine-gcs-client:0.6 com.google.appengine.tools:appengine-mapreduce:0.9 com.google.appengine.tools:appengine-pipeline:0.2.13 @@ -77,41 +88,44 @@ com.google.appengine:appengine-api-1.0-sdk:1.9.81 com.google.appengine:appengine-api-stubs:1.9.81 com.google.appengine:appengine-remote-api:1.9.81 com.google.appengine:appengine-testing:1.9.81 -com.google.auth:google-auth-library-credentials:0.22.0 -com.google.auth:google-auth-library-oauth2-http:0.22.0 +com.google.auth:google-auth-library-credentials:0.22.2 +com.google.auth:google-auth-library-oauth2-http:0.22.2 +com.google.auto.service:auto-service-annotations:1.0-rc7 com.google.auto.value:auto-value-annotations:1.7.4 -com.google.auto.value:auto-value:1.6.3 -com.google.cloud.bigdataoss:gcsio:2.1.3 -com.google.cloud.bigdataoss:util:2.1.3 -com.google.cloud.bigtable:bigtable-client-core:1.13.0 +com.google.auto.value:auto-value:1.7.4 +com.google.cloud.bigdataoss:gcsio:2.1.6 +com.google.cloud.bigdataoss:util:2.1.6 +com.google.cloud.bigtable:bigtable-client-core:1.16.0 com.google.cloud.datastore:datastore-v1-proto-client:1.6.3 com.google.cloud.sql:jdbc-socket-factory-core:1.0.16 com.google.cloud.sql:postgres-socket-factory:1.0.16 -com.google.cloud:google-cloud-bigquery:1.106.0 -com.google.cloud:google-cloud-bigquerystorage:0.125.0-beta -com.google.cloud:google-cloud-bigtable:1.9.1 -com.google.cloud:google-cloud-core-grpc:1.92.2 -com.google.cloud:google-cloud-core-http:1.92.4 -com.google.cloud:google-cloud-core:1.92.5 -com.google.cloud:google-cloud-secretmanager:1.2.3 -com.google.cloud:google-cloud-spanner:1.49.1 +com.google.cloud:google-cloud-bigquery:1.122.2 +com.google.cloud:google-cloud-bigquerystorage:1.5.5 +com.google.cloud:google-cloud-bigtable:1.14.0 +com.google.cloud:google-cloud-core-grpc:1.93.9 +com.google.cloud:google-cloud-core-http:1.93.9 +com.google.cloud:google-cloud-core:1.93.9 +com.google.cloud:google-cloud-pubsub:1.110.0 +com.google.cloud:google-cloud-pubsublite:0.7.0 +com.google.cloud:google-cloud-secretmanager:1.2.9 +com.google.cloud:google-cloud-spanner:2.0.2 com.google.code.findbugs:jsr305:3.0.2 com.google.code.gson:gson:2.8.6 com.google.common.html.types:types:1.0.4 com.google.dagger:dagger:2.28 -com.google.errorprone:error_prone_annotations:2.4.0 +com.google.errorprone:error_prone_annotations:2.5.0 com.google.flogger:flogger-system-backend:0.5.1 com.google.flogger:flogger:0.5.1 com.google.flogger:google-extensions:0.5.1 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava-testlib:30.0-jre -com.google.guava:guava:30.0-jre +com.google.guava:guava-testlib:30.1-jre +com.google.guava:guava:30.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.gwt:gwt-user:2.8.2 -com.google.http-client:google-http-client-appengine:1.34.1 -com.google.http-client:google-http-client-jackson2:1.37.0 +com.google.http-client:google-http-client-appengine:1.36.0 +com.google.http-client:google-http-client-jackson2:1.38.0 com.google.http-client:google-http-client-protobuf:1.33.0 -com.google.http-client:google-http-client:1.37.0 +com.google.http-client:google-http-client:1.38.0 com.google.inject.extensions:guice-multibindings:4.1.0 com.google.inject:guice:4.1.0 com.google.j2objc:j2objc-annotations:1.3 @@ -120,12 +134,12 @@ com.google.monitoring-client:contrib:1.0.7 com.google.monitoring-client:metrics:1.0.7 com.google.monitoring-client:stackdriver:1.0.7 com.google.oauth-client:google-oauth-client-appengine:1.30.5 -com.google.oauth-client:google-oauth-client-java6:1.30.6 +com.google.oauth-client:google-oauth-client-java6:1.31.2 com.google.oauth-client:google-oauth-client-jetty:1.28.0 com.google.oauth-client:google-oauth-client-servlet:1.30.5 -com.google.oauth-client:google-oauth-client:1.30.6 -com.google.protobuf:protobuf-java-util:3.13.0 -com.google.protobuf:protobuf-java:3.13.0 +com.google.oauth-client:google-oauth-client:1.31.2 +com.google.protobuf:protobuf-java-util:3.14.0 +com.google.protobuf:protobuf-java:3.14.0 com.google.re2j:re2j:1.1 com.google.template:soy:2018-03-14 com.google.truth.extensions:truth-java8-extension:1.0 @@ -136,14 +150,13 @@ com.googlecode.json-simple:json-simple:1.1.1 com.ibm.icu:icu4j:57.1 com.jcraft:jsch:0.1.55 com.squareup.okhttp3:okhttp:3.11.0 -com.squareup.okhttp:okhttp:2.5.0 com.squareup.okio:okio:1.14.0 com.sun.istack:istack-commons-runtime:3.0.7 com.sun.xml.fastinfoset:FastInfoset:1.2.15 com.thoughtworks.paranamer:paranamer:2.7 com.thoughtworks.qdox:qdox:1.12.1 com.zaxxer:HikariCP:3.4.5 -commons-codec:commons-codec:1.13 +commons-codec:commons-codec:1.15 commons-logging:commons-logging:1.2 dnsjava:dnsjava:2.1.7 guru.nidi.com.kitfox:svgSalamander:1.1.3 @@ -152,31 +165,28 @@ guru.nidi:graphviz-java:0.17.0 io.dropwizard.metrics:metrics-core:3.2.6 io.github.classgraph:classgraph:4.8.65 io.github.java-diff-utils:java-diff-utils:4.0 -io.grpc:grpc-all:1.27.2 -io.grpc:grpc-alts:1.32.2 -io.grpc:grpc-api:1.32.2 -io.grpc:grpc-auth:1.32.2 -io.grpc:grpc-context:1.32.2 -io.grpc:grpc-core:1.32.2 -io.grpc:grpc-grpclb:1.32.2 -io.grpc:grpc-netty-shaded:1.32.2 -io.grpc:grpc-netty:1.27.2 -io.grpc:grpc-okhttp:1.27.2 -io.grpc:grpc-protobuf-lite:1.32.2 -io.grpc:grpc-protobuf:1.32.2 -io.grpc:grpc-stub:1.32.2 -io.grpc:grpc-testing:1.27.2 -io.netty:netty-buffer:4.1.42.Final -io.netty:netty-codec-http2:4.1.42.Final -io.netty:netty-codec-http:4.1.42.Final -io.netty:netty-codec-socks:4.1.42.Final -io.netty:netty-codec:4.1.42.Final -io.netty:netty-common:4.1.42.Final -io.netty:netty-handler-proxy:4.1.42.Final -io.netty:netty-handler:4.1.42.Final -io.netty:netty-resolver:4.1.42.Final -io.netty:netty-tcnative-boringssl-static:2.0.17.Final -io.netty:netty-transport:4.1.42.Final +io.grpc:grpc-alts:1.34.1 +io.grpc:grpc-api:1.34.1 +io.grpc:grpc-auth:1.34.1 +io.grpc:grpc-context:1.34.1 +io.grpc:grpc-core:1.34.1 +io.grpc:grpc-grpclb:1.34.1 +io.grpc:grpc-netty-shaded:1.34.1 +io.grpc:grpc-netty:1.32.2 +io.grpc:grpc-protobuf-lite:1.34.1 +io.grpc:grpc-protobuf:1.34.1 +io.grpc:grpc-stub:1.34.1 +io.netty:netty-buffer:4.1.51.Final +io.netty:netty-codec-http2:4.1.51.Final +io.netty:netty-codec-http:4.1.51.Final +io.netty:netty-codec-socks:4.1.51.Final +io.netty:netty-codec:4.1.51.Final +io.netty:netty-common:4.1.51.Final +io.netty:netty-handler-proxy:4.1.51.Final +io.netty:netty-handler:4.1.51.Final +io.netty:netty-resolver:4.1.51.Final +io.netty:netty-tcnative-boringssl-static:2.0.33.Final +io.netty:netty-transport:4.1.51.Final io.opencensus:opencensus-api:0.24.0 io.opencensus:opencensus-contrib-grpc-util:0.24.0 io.opencensus:opencensus-contrib-http-util:0.24.0 @@ -196,29 +206,29 @@ javax.validation:validation-api:1.0.0.GA javax.xml.bind:jaxb-api:2.3.1 jline:jline:1.0 joda-time:joda-time:2.10.5 -junit:junit:4.13 +junit:junit:4.13.1 net.arnx:nashorn-promise:0.1.1 net.bytebuddy:byte-buddy-agent:1.10.5 net.bytebuddy:byte-buddy:1.10.17 net.java.dev.jna:jna:5.5.0 org.apache.avro:avro:1.8.2 -org.apache.beam:beam-model-fn-execution:2.23.0 -org.apache.beam:beam-model-job-management:2.23.0 -org.apache.beam:beam-model-pipeline:2.23.0 -org.apache.beam:beam-runners-core-construction-java:2.23.0 -org.apache.beam:beam-runners-direct-java:2.23.0 -org.apache.beam:beam-runners-google-cloud-dataflow-java:2.23.0 -org.apache.beam:beam-runners-java-fn-execution:2.23.0 -org.apache.beam:beam-sdks-java-core:2.23.0 -org.apache.beam:beam-sdks-java-expansion-service:2.23.0 -org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.23.0 -org.apache.beam:beam-sdks-java-extensions-protobuf:2.23.0 -org.apache.beam:beam-sdks-java-fn-execution:2.23.0 -org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.23.0 +org.apache.beam:beam-model-fn-execution:2.27.0 +org.apache.beam:beam-model-job-management:2.27.0 +org.apache.beam:beam-model-pipeline:2.27.0 +org.apache.beam:beam-runners-core-construction-java:2.27.0 +org.apache.beam:beam-runners-direct-java:2.27.0 +org.apache.beam:beam-runners-google-cloud-dataflow-java:2.27.0 +org.apache.beam:beam-runners-java-fn-execution:2.27.0 +org.apache.beam:beam-sdks-java-core:2.27.0 +org.apache.beam:beam-sdks-java-expansion-service:2.27.0 +org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.27.0 +org.apache.beam:beam-sdks-java-extensions-protobuf:2.27.0 +org.apache.beam:beam-sdks-java-fn-execution:2.27.0 +org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.27.0 org.apache.beam:beam-vendor-bytebuddy-1_10_8:0.1 org.apache.beam:beam-vendor-grpc-1_26_0:0.3 org.apache.beam:beam-vendor-guava-26_0-jre:0.1 -org.apache.beam:beam-vendor-sdks-java-extensions-protobuf:2.23.0 +org.apache.beam:beam-vendor-sdks-java-extensions-protobuf:2.27.0 org.apache.commons:commons-compress:1.20 org.apache.commons:commons-exec:1.3 org.apache.commons:commons-lang3:3.8.1 @@ -239,20 +249,20 @@ org.bouncycastle:bcpg-jdk15on:1.61 org.bouncycastle:bcpkix-jdk15on:1.61 org.bouncycastle:bcprov-jdk15on:1.61 org.checkerframework:checker-compat-qual:2.5.5 -org.checkerframework:checker-qual:3.5.0 +org.checkerframework:checker-qual:3.7.0 org.codehaus.jackson:jackson-core-asl:1.9.13 org.codehaus.jackson:jackson-mapper-asl:1.9.13 org.codehaus.mojo:animal-sniffer-annotations:1.19 -org.conscrypt:conscrypt-openjdk-uber:2.2.1 +org.conscrypt:conscrypt-openjdk-uber:2.5.1 org.dom4j:dom4j:2.1.3 org.easymock:easymock:3.0 org.eclipse.jgit:org.eclipse.jgit:4.4.1.201607150455-r org.flywaydb:flyway-core:5.2.4 org.glassfish.jaxb:jaxb-runtime:2.3.1 org.glassfish.jaxb:txw2:2.3.1 -org.hamcrest:hamcrest-all:1.3 -org.hamcrest:hamcrest-core:1.3 -org.hamcrest:hamcrest-library:1.3 +org.hamcrest:hamcrest-core:2.2 +org.hamcrest:hamcrest-library:2.2 +org.hamcrest:hamcrest:2.2 org.hibernate.common:hibernate-commons-annotations:5.1.2.Final org.hibernate:hibernate-core:5.4.23.Final org.hibernate:hibernate-hikaricp:5.4.23.Final @@ -261,7 +271,7 @@ org.jboss.logging:jboss-logging:3.4.1.Final org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.1.1.Final org.jboss:jandex:2.1.3.Final org.joda:joda-money:1.0.1 -org.json:json:20160810 +org.json:json:20200518 org.jsoup:jsoup:1.13.1 org.junit-pioneer:junit-pioneer:0.7.0 org.junit.jupiter:junit-jupiter-api:5.7.0 @@ -308,7 +318,7 @@ org.testcontainers:junit-jupiter:1.15.1 org.testcontainers:postgresql:1.15.1 org.testcontainers:selenium:1.15.1 org.testcontainers:testcontainers:1.15.1 -org.threeten:threetenbp:1.4.5 +org.threeten:threetenbp:1.5.0 org.tukaani:xz:1.8 org.w3c.css:sac:1.3 org.webjars.npm:viz.js-for-graphviz-java:2.1.3 diff --git a/core/gradle/dependency-locks/testRuntimeClasspath.lockfile b/core/gradle/dependency-locks/testRuntimeClasspath.lockfile index 9d70c1468..74e28b313 100644 --- a/core/gradle/dependency-locks/testRuntimeClasspath.lockfile +++ b/core/gradle/dependency-locks/testRuntimeClasspath.lockfile @@ -10,9 +10,10 @@ com.eclipsesource.j2v8:j2v8_linux_x86_64:4.6.0 com.eclipsesource.j2v8:j2v8_macosx_x86_64:4.6.0 com.eclipsesource.j2v8:j2v8_win32_x86:4.6.0 com.eclipsesource.j2v8:j2v8_win32_x86_64:4.6.0 -com.fasterxml.jackson.core:jackson-annotations:2.11.2 -com.fasterxml.jackson.core:jackson-core:2.11.3 -com.fasterxml.jackson.core:jackson-databind:2.11.2 +com.fasterxml.jackson.core:jackson-annotations:2.12.1 +com.fasterxml.jackson.core:jackson-core:2.12.1 +com.fasterxml.jackson.core:jackson-databind:2.12.1 +com.fasterxml.jackson:jackson-bom:2.12.1 com.fasterxml:classmate:1.5.1 com.github.docker-java:docker-java-api:3.2.7 com.github.docker-java:docker-java-transport-zerodep:3.2.7 @@ -25,51 +26,61 @@ com.github.jnr:jnr-ffi:2.1.13 com.github.jnr:jnr-posix:3.0.55 com.github.jnr:jnr-unixsocket:0.30 com.github.jnr:jnr-x86asm:1.0.2 +com.github.rholder:guava-retrying:2.0.0 com.google.android:annotations:4.1.1.4 com.google.api-client:google-api-client-appengine:1.30.8 -com.google.api-client:google-api-client-jackson2:1.30.9 -com.google.api-client:google-api-client-java6:1.30.9 +com.google.api-client:google-api-client-jackson2:1.30.10 +com.google.api-client:google-api-client-java6:1.30.10 com.google.api-client:google-api-client-servlet:1.30.8 -com.google.api-client:google-api-client:1.30.9 -com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.9.1 -com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.9.1 -com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.85.1 -com.google.api.grpc:grpc-google-common-protos:1.17.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1alpha2:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.90.0 -com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.90.0 -com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:1.9.1 -com.google.api.grpc:proto-google-cloud-bigtable-v2:1.9.1 -com.google.api.grpc:proto-google-cloud-datastore-v1:0.85.0 -com.google.api.grpc:proto-google-cloud-pubsub-v1:1.85.1 -com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.2.3 -com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.2.3 -com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:1.49.1 -com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:1.49.1 -com.google.api.grpc:proto-google-cloud-spanner-v1:1.49.1 -com.google.api.grpc:proto-google-common-protos:2.0.0 -com.google.api.grpc:proto-google-iam-v1:1.0.1 +com.google.api-client:google-api-client:1.30.10 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:1.5.5 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.105.5 +com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.105.5 +com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.14.0 +com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.14.0 +com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.90.3 +com.google.api.grpc:grpc-google-cloud-pubsublite-v1:0.7.0 +com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:2.0.2 +com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:2.0.2 +com.google.api.grpc:grpc-google-cloud-spanner-v1:2.0.2 +com.google.api.grpc:grpc-google-common-protos:1.18.1 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:1.5.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1alpha2:0.105.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.105.5 +com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.105.5 +com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:1.14.0 +com.google.api.grpc:proto-google-cloud-bigtable-v2:1.16.1 +com.google.api.grpc:proto-google-cloud-datastore-v1:0.88.0 +com.google.api.grpc:proto-google-cloud-pubsub-v1:1.92.0 +com.google.api.grpc:proto-google-cloud-pubsublite-v1:0.7.0 +com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.2.9 +com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.2.9 +com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:2.0.2 +com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:2.0.2 +com.google.api.grpc:proto-google-cloud-spanner-v1:2.0.2 +com.google.api.grpc:proto-google-common-protos:2.0.1 +com.google.api.grpc:proto-google-iam-v1:1.0.5 com.google.api:api-common:1.10.1 -com.google.api:gax-grpc:1.60.0 -com.google.api:gax-httpjson:0.70.1 -com.google.api:gax:1.60.0 +com.google.api:gax-grpc:1.60.1 +com.google.api:gax-httpjson:0.76.1 +com.google.api:gax:1.60.1 com.google.apis:google-api-services-admin-directory:directory_v1-rev72-1.22.0 com.google.apis:google-api-services-appengine:v1-rev101-1.25.0 -com.google.apis:google-api-services-bigquery:v2-rev20191211-1.30.9 -com.google.apis:google-api-services-clouddebugger:v2-rev20200313-1.30.9 +com.google.apis:google-api-services-bigquery:v2-rev20200916-1.30.10 +com.google.apis:google-api-services-clouddebugger:v2-rev20200501-1.30.10 com.google.apis:google-api-services-cloudkms:v1-rev12-1.22.0 -com.google.apis:google-api-services-cloudresourcemanager:v1-rev20200311-1.30.9 -com.google.apis:google-api-services-dataflow:v1b3-rev20200305-1.30.9 +com.google.apis:google-api-services-cloudresourcemanager:v1-rev20200720-1.30.10 +com.google.apis:google-api-services-dataflow:v1b3-rev20200713-1.30.10 com.google.apis:google-api-services-dns:v2beta1-rev6-1.22.0 com.google.apis:google-api-services-drive:v2-rev160-1.19.1 com.google.apis:google-api-services-groupssettings:v1-rev60-1.22.0 -com.google.apis:google-api-services-healthcare:v1beta1-rev20200525-1.30.9 +com.google.apis:google-api-services-healthcare:v1beta1-rev20200713-1.30.10 +com.google.apis:google-api-services-iamcredentials:v1-rev20201022-1.30.10 com.google.apis:google-api-services-monitoring:v3-rev426-1.23.0 -com.google.apis:google-api-services-pubsub:v1-rev20200312-1.30.9 +com.google.apis:google-api-services-pubsub:v1-rev20200713-1.30.10 com.google.apis:google-api-services-sheets:v4-rev483-1.22.0 com.google.apis:google-api-services-sqladmin:v1beta4-rev20190827-1.30.1 -com.google.apis:google-api-services-storage:v1-rev20200326-1.30.9 +com.google.apis:google-api-services-storage:v1-rev20200927-1.30.10 com.google.appengine.tools:appengine-gcs-client:0.6 com.google.appengine.tools:appengine-mapreduce:0.9 com.google.appengine.tools:appengine-pipeline:0.2.13 @@ -77,41 +88,44 @@ com.google.appengine:appengine-api-1.0-sdk:1.9.81 com.google.appengine:appengine-api-stubs:1.9.81 com.google.appengine:appengine-remote-api:1.9.81 com.google.appengine:appengine-testing:1.9.81 -com.google.auth:google-auth-library-credentials:0.22.0 -com.google.auth:google-auth-library-oauth2-http:0.22.0 +com.google.auth:google-auth-library-credentials:0.22.2 +com.google.auth:google-auth-library-oauth2-http:0.22.2 +com.google.auto.service:auto-service-annotations:1.0-rc7 com.google.auto.value:auto-value-annotations:1.7.4 -com.google.auto.value:auto-value:1.6.3 -com.google.cloud.bigdataoss:gcsio:2.1.3 -com.google.cloud.bigdataoss:util:2.1.3 -com.google.cloud.bigtable:bigtable-client-core:1.13.0 +com.google.auto.value:auto-value:1.7.4 +com.google.cloud.bigdataoss:gcsio:2.1.6 +com.google.cloud.bigdataoss:util:2.1.6 +com.google.cloud.bigtable:bigtable-client-core:1.16.0 com.google.cloud.datastore:datastore-v1-proto-client:1.6.3 com.google.cloud.sql:jdbc-socket-factory-core:1.0.16 com.google.cloud.sql:postgres-socket-factory:1.0.16 -com.google.cloud:google-cloud-bigquery:1.106.0 -com.google.cloud:google-cloud-bigquerystorage:0.125.0-beta -com.google.cloud:google-cloud-bigtable:1.9.1 -com.google.cloud:google-cloud-core-grpc:1.92.2 -com.google.cloud:google-cloud-core-http:1.92.4 -com.google.cloud:google-cloud-core:1.92.5 -com.google.cloud:google-cloud-secretmanager:1.2.3 -com.google.cloud:google-cloud-spanner:1.49.1 +com.google.cloud:google-cloud-bigquery:1.122.2 +com.google.cloud:google-cloud-bigquerystorage:1.5.5 +com.google.cloud:google-cloud-bigtable:1.14.0 +com.google.cloud:google-cloud-core-grpc:1.93.9 +com.google.cloud:google-cloud-core-http:1.93.9 +com.google.cloud:google-cloud-core:1.93.9 +com.google.cloud:google-cloud-pubsub:1.110.0 +com.google.cloud:google-cloud-pubsublite:0.7.0 +com.google.cloud:google-cloud-secretmanager:1.2.9 +com.google.cloud:google-cloud-spanner:2.0.2 com.google.code.findbugs:jsr305:3.0.2 com.google.code.gson:gson:2.8.6 com.google.common.html.types:types:1.0.4 com.google.dagger:dagger:2.28 -com.google.errorprone:error_prone_annotations:2.4.0 +com.google.errorprone:error_prone_annotations:2.5.0 com.google.flogger:flogger-system-backend:0.5.1 com.google.flogger:flogger:0.5.1 com.google.flogger:google-extensions:0.5.1 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava-testlib:30.0-jre -com.google.guava:guava:30.0-jre +com.google.guava:guava-testlib:30.1-jre +com.google.guava:guava:30.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.gwt:gwt-user:2.8.2 -com.google.http-client:google-http-client-appengine:1.34.1 -com.google.http-client:google-http-client-jackson2:1.37.0 +com.google.http-client:google-http-client-appengine:1.36.0 +com.google.http-client:google-http-client-jackson2:1.38.0 com.google.http-client:google-http-client-protobuf:1.33.0 -com.google.http-client:google-http-client:1.37.0 +com.google.http-client:google-http-client:1.38.0 com.google.inject.extensions:guice-multibindings:4.1.0 com.google.inject:guice:4.1.0 com.google.j2objc:j2objc-annotations:1.3 @@ -120,12 +134,12 @@ com.google.monitoring-client:contrib:1.0.7 com.google.monitoring-client:metrics:1.0.7 com.google.monitoring-client:stackdriver:1.0.7 com.google.oauth-client:google-oauth-client-appengine:1.30.5 -com.google.oauth-client:google-oauth-client-java6:1.30.6 +com.google.oauth-client:google-oauth-client-java6:1.31.2 com.google.oauth-client:google-oauth-client-jetty:1.28.0 com.google.oauth-client:google-oauth-client-servlet:1.30.5 -com.google.oauth-client:google-oauth-client:1.30.6 -com.google.protobuf:protobuf-java-util:3.13.0 -com.google.protobuf:protobuf-java:3.13.0 +com.google.oauth-client:google-oauth-client:1.31.2 +com.google.protobuf:protobuf-java-util:3.14.0 +com.google.protobuf:protobuf-java:3.14.0 com.google.re2j:re2j:1.1 com.google.template:soy:2018-03-14 com.google.truth.extensions:truth-java8-extension:1.0 @@ -136,14 +150,13 @@ com.googlecode.json-simple:json-simple:1.1.1 com.ibm.icu:icu4j:57.1 com.jcraft:jsch:0.1.55 com.squareup.okhttp3:okhttp:3.11.0 -com.squareup.okhttp:okhttp:2.5.0 com.squareup.okio:okio:1.14.0 com.sun.istack:istack-commons-runtime:3.0.7 com.sun.xml.fastinfoset:FastInfoset:1.2.15 com.thoughtworks.paranamer:paranamer:2.7 com.thoughtworks.qdox:qdox:1.12.1 com.zaxxer:HikariCP:3.4.5 -commons-codec:commons-codec:1.13 +commons-codec:commons-codec:1.15 commons-logging:commons-logging:1.2 dnsjava:dnsjava:2.1.7 guru.nidi.com.kitfox:svgSalamander:1.1.3 @@ -152,31 +165,28 @@ guru.nidi:graphviz-java:0.17.0 io.dropwizard.metrics:metrics-core:3.2.6 io.github.classgraph:classgraph:4.8.65 io.github.java-diff-utils:java-diff-utils:4.0 -io.grpc:grpc-all:1.27.2 -io.grpc:grpc-alts:1.32.2 -io.grpc:grpc-api:1.32.2 -io.grpc:grpc-auth:1.32.2 -io.grpc:grpc-context:1.32.2 -io.grpc:grpc-core:1.32.2 -io.grpc:grpc-grpclb:1.32.2 -io.grpc:grpc-netty-shaded:1.32.2 -io.grpc:grpc-netty:1.27.2 -io.grpc:grpc-okhttp:1.27.2 -io.grpc:grpc-protobuf-lite:1.32.2 -io.grpc:grpc-protobuf:1.32.2 -io.grpc:grpc-stub:1.32.2 -io.grpc:grpc-testing:1.27.2 -io.netty:netty-buffer:4.1.42.Final -io.netty:netty-codec-http2:4.1.42.Final -io.netty:netty-codec-http:4.1.42.Final -io.netty:netty-codec-socks:4.1.42.Final -io.netty:netty-codec:4.1.42.Final -io.netty:netty-common:4.1.42.Final -io.netty:netty-handler-proxy:4.1.42.Final -io.netty:netty-handler:4.1.42.Final -io.netty:netty-resolver:4.1.42.Final -io.netty:netty-tcnative-boringssl-static:2.0.17.Final -io.netty:netty-transport:4.1.42.Final +io.grpc:grpc-alts:1.34.1 +io.grpc:grpc-api:1.34.1 +io.grpc:grpc-auth:1.34.1 +io.grpc:grpc-context:1.34.1 +io.grpc:grpc-core:1.34.1 +io.grpc:grpc-grpclb:1.34.1 +io.grpc:grpc-netty-shaded:1.34.1 +io.grpc:grpc-netty:1.32.2 +io.grpc:grpc-protobuf-lite:1.34.1 +io.grpc:grpc-protobuf:1.34.1 +io.grpc:grpc-stub:1.34.1 +io.netty:netty-buffer:4.1.51.Final +io.netty:netty-codec-http2:4.1.51.Final +io.netty:netty-codec-http:4.1.51.Final +io.netty:netty-codec-socks:4.1.51.Final +io.netty:netty-codec:4.1.51.Final +io.netty:netty-common:4.1.51.Final +io.netty:netty-handler-proxy:4.1.51.Final +io.netty:netty-handler:4.1.51.Final +io.netty:netty-resolver:4.1.51.Final +io.netty:netty-tcnative-boringssl-static:2.0.33.Final +io.netty:netty-transport:4.1.51.Final io.opencensus:opencensus-api:0.24.0 io.opencensus:opencensus-contrib-grpc-util:0.24.0 io.opencensus:opencensus-contrib-http-util:0.24.0 @@ -196,29 +206,29 @@ javax.validation:validation-api:1.0.0.GA javax.xml.bind:jaxb-api:2.3.1 jline:jline:1.0 joda-time:joda-time:2.10.5 -junit:junit:4.13 +junit:junit:4.13.1 net.arnx:nashorn-promise:0.1.1 net.bytebuddy:byte-buddy-agent:1.10.5 net.bytebuddy:byte-buddy:1.10.17 net.java.dev.jna:jna:5.5.0 org.apache.avro:avro:1.8.2 -org.apache.beam:beam-model-fn-execution:2.23.0 -org.apache.beam:beam-model-job-management:2.23.0 -org.apache.beam:beam-model-pipeline:2.23.0 -org.apache.beam:beam-runners-core-construction-java:2.23.0 -org.apache.beam:beam-runners-direct-java:2.23.0 -org.apache.beam:beam-runners-google-cloud-dataflow-java:2.23.0 -org.apache.beam:beam-runners-java-fn-execution:2.23.0 -org.apache.beam:beam-sdks-java-core:2.23.0 -org.apache.beam:beam-sdks-java-expansion-service:2.23.0 -org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.23.0 -org.apache.beam:beam-sdks-java-extensions-protobuf:2.23.0 -org.apache.beam:beam-sdks-java-fn-execution:2.23.0 -org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.23.0 +org.apache.beam:beam-model-fn-execution:2.27.0 +org.apache.beam:beam-model-job-management:2.27.0 +org.apache.beam:beam-model-pipeline:2.27.0 +org.apache.beam:beam-runners-core-construction-java:2.27.0 +org.apache.beam:beam-runners-direct-java:2.27.0 +org.apache.beam:beam-runners-google-cloud-dataflow-java:2.27.0 +org.apache.beam:beam-runners-java-fn-execution:2.27.0 +org.apache.beam:beam-sdks-java-core:2.27.0 +org.apache.beam:beam-sdks-java-expansion-service:2.27.0 +org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.27.0 +org.apache.beam:beam-sdks-java-extensions-protobuf:2.27.0 +org.apache.beam:beam-sdks-java-fn-execution:2.27.0 +org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.27.0 org.apache.beam:beam-vendor-bytebuddy-1_10_8:0.1 org.apache.beam:beam-vendor-grpc-1_26_0:0.3 org.apache.beam:beam-vendor-guava-26_0-jre:0.1 -org.apache.beam:beam-vendor-sdks-java-extensions-protobuf:2.23.0 +org.apache.beam:beam-vendor-sdks-java-extensions-protobuf:2.27.0 org.apache.commons:commons-compress:1.20 org.apache.commons:commons-exec:1.3 org.apache.commons:commons-lang3:3.8.1 @@ -239,20 +249,20 @@ org.bouncycastle:bcpg-jdk15on:1.61 org.bouncycastle:bcpkix-jdk15on:1.61 org.bouncycastle:bcprov-jdk15on:1.61 org.checkerframework:checker-compat-qual:2.5.5 -org.checkerframework:checker-qual:3.5.0 +org.checkerframework:checker-qual:3.7.0 org.codehaus.jackson:jackson-core-asl:1.9.13 org.codehaus.jackson:jackson-mapper-asl:1.9.13 org.codehaus.mojo:animal-sniffer-annotations:1.19 -org.conscrypt:conscrypt-openjdk-uber:2.2.1 +org.conscrypt:conscrypt-openjdk-uber:2.5.1 org.dom4j:dom4j:2.1.3 org.easymock:easymock:3.0 org.eclipse.jgit:org.eclipse.jgit:4.4.1.201607150455-r org.flywaydb:flyway-core:5.2.4 org.glassfish.jaxb:jaxb-runtime:2.3.1 org.glassfish.jaxb:txw2:2.3.1 -org.hamcrest:hamcrest-all:1.3 -org.hamcrest:hamcrest-core:1.3 -org.hamcrest:hamcrest-library:1.3 +org.hamcrest:hamcrest-core:2.2 +org.hamcrest:hamcrest-library:2.2 +org.hamcrest:hamcrest:2.2 org.hibernate.common:hibernate-commons-annotations:5.1.2.Final org.hibernate:hibernate-core:5.4.23.Final org.hibernate:hibernate-hikaricp:5.4.23.Final @@ -261,7 +271,7 @@ org.jboss.logging:jboss-logging:3.4.1.Final org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.1.1.Final org.jboss:jandex:2.1.3.Final org.joda:joda-money:1.0.1 -org.json:json:20160810 +org.json:json:20200518 org.jsoup:jsoup:1.13.1 org.junit-pioneer:junit-pioneer:0.7.0 org.junit.jupiter:junit-jupiter-api:5.7.0 @@ -309,7 +319,7 @@ org.testcontainers:junit-jupiter:1.15.1 org.testcontainers:postgresql:1.15.1 org.testcontainers:selenium:1.15.1 org.testcontainers:testcontainers:1.15.1 -org.threeten:threetenbp:1.4.5 +org.threeten:threetenbp:1.5.0 org.tukaani:xz:1.8 org.w3c.css:sac:1.3 org.webjars.npm:viz.js-for-graphviz-java:2.1.3 diff --git a/core/src/main/java/google/registry/beam/common/JpaDemoPipeline.java b/core/src/main/java/google/registry/beam/common/JpaDemoPipeline.java new file mode 100644 index 000000000..426af79ed --- /dev/null +++ b/core/src/main/java/google/registry/beam/common/JpaDemoPipeline.java @@ -0,0 +1,81 @@ +// Copyright 2020 The Nomulus Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package google.registry.beam.common; + +import static com.google.common.base.Verify.verify; +import static google.registry.persistence.transaction.TransactionManagerFactory.jpaTm; + +import google.registry.backup.AppEngineEnvironment; +import google.registry.persistence.transaction.JpaTransactionManager; +import java.io.Serializable; +import org.apache.beam.sdk.Pipeline; +import org.apache.beam.sdk.metrics.Counter; +import org.apache.beam.sdk.metrics.Metrics; +import org.apache.beam.sdk.options.PipelineOptionsFactory; +import org.apache.beam.sdk.transforms.Create; +import org.apache.beam.sdk.transforms.DoFn; +import org.apache.beam.sdk.transforms.ParDo; + +/** Toy pipeline that demonstrates how to use {@link JpaTransactionManager} in BEAM pipelines. */ +public class JpaDemoPipeline implements Serializable { + + public static void main(String[] args) { + RegistryPipelineOptions options = + PipelineOptionsFactory.fromArgs(args).withValidation().as(RegistryPipelineOptions.class); + RegistryPipelineOptions.validateRegistryPipelineOptions(options); + + Pipeline pipeline = Pipeline.create(options); + pipeline + .apply("Start", Create.of((Void) null)) + .apply( + "Generate Elements", + ParDo.of( + new DoFn() { + @ProcessElement + public void processElement(OutputReceiver output) { + for (int i = 0; i < 500; i++) { + output.output(null); + } + } + })) + .apply( + "Make Query", + ParDo.of( + new DoFn() { + private Counter counter = Metrics.counter("Demo", "Read"); + + @ProcessElement + public void processElement() { + // AppEngineEnvironment is needed as long as JPA entity classes still depends + // on Objectify. + try (AppEngineEnvironment allowOfyEntity = new AppEngineEnvironment()) { + int result = + (Integer) + jpaTm() + .transact( + () -> + jpaTm() + .getEntityManager() + .createNativeQuery("select 1;") + .getSingleResult()); + verify(result == 1, "Expecting 1, got %s.", result); + } + counter.inc(); + } + })); + + pipeline.run(); + } +} diff --git a/core/src/main/java/google/registry/beam/common/RegistryPipelineComponent.java b/core/src/main/java/google/registry/beam/common/RegistryPipelineComponent.java new file mode 100644 index 000000000..bc7a90644 --- /dev/null +++ b/core/src/main/java/google/registry/beam/common/RegistryPipelineComponent.java @@ -0,0 +1,47 @@ +// Copyright 2020 The Nomulus Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package google.registry.beam.common; + +import dagger.Component; +import dagger.Lazy; +import google.registry.config.CredentialModule; +import google.registry.config.RegistryConfig.Config; +import google.registry.config.RegistryConfig.ConfigModule; +import google.registry.persistence.PersistenceModule; +import google.registry.persistence.PersistenceModule.BeamJpaTm; +import google.registry.persistence.transaction.JpaTransactionManager; +import google.registry.privileges.secretmanager.SecretManagerModule; +import google.registry.util.UtilsModule; +import javax.inject.Singleton; + +/** Component that provides everything needed on a Pipeline worker. */ +@Singleton +@Component( + modules = { + ConfigModule.class, + CredentialModule.class, + PersistenceModule.class, + SecretManagerModule.class, + UtilsModule.class + }) +public interface RegistryPipelineComponent { + + /** Returns the GCP project ID. */ + @Config("projectId") + String getProjectId(); + + @BeamJpaTm + Lazy getJpaTransactionManager(); +} diff --git a/core/src/main/java/google/registry/beam/common/RegistryPipelineOptions.java b/core/src/main/java/google/registry/beam/common/RegistryPipelineOptions.java new file mode 100644 index 000000000..5a4715c73 --- /dev/null +++ b/core/src/main/java/google/registry/beam/common/RegistryPipelineOptions.java @@ -0,0 +1,58 @@ +// Copyright 2020 The Nomulus Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package google.registry.beam.common; + +import google.registry.config.RegistryEnvironment; +import java.util.Objects; +import javax.annotation.Nullable; +import org.apache.beam.sdk.extensions.gcp.options.GcpOptions; +import org.apache.beam.sdk.options.Description; + +/** Defines Nomulus-specific pipeline options. */ +public interface RegistryPipelineOptions extends GcpOptions { + + @Description("The Registry environment.") + @Nullable + RegistryEnvironment getRegistryEnvironment(); + + void setRegistryEnvironment(RegistryEnvironment environment); + + /** + * Validates the GCP project and Registry environment settings in {@code option}. If project is + * undefined, it is set according to the Registry environment; if project is defined but + * inconsistent with the Registry environment, an {@link IllegalArgumentException} will be thrown. + * + *

This method may modify the system property ("google.registry.environment" which is defined + * in {@link RegistryEnvironment}). Tests calling this method must restore the original + * environment on completion. + */ + static void validateRegistryPipelineOptions(RegistryPipelineOptions option) { + RegistryEnvironment environment = option.getRegistryEnvironment(); + if (environment == null) { + return; + } + environment.setup(); + String projectByEnv = DaggerRegistryPipelineComponent.create().getProjectId(); + if (Objects.equals(option.getProject(), projectByEnv)) { + return; + } + if (option.getProject() == null) { + option.setProject(projectByEnv); + return; + } + throw new IllegalArgumentException( + "Arguments for --project and --registryEnvironment do not match."); + } +} diff --git a/core/src/main/java/google/registry/beam/common/RegistryPipelineWorkerInitializer.java b/core/src/main/java/google/registry/beam/common/RegistryPipelineWorkerInitializer.java new file mode 100644 index 000000000..7682a5978 --- /dev/null +++ b/core/src/main/java/google/registry/beam/common/RegistryPipelineWorkerInitializer.java @@ -0,0 +1,49 @@ +// Copyright 2020 The Nomulus Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package google.registry.beam.common; + +import com.google.auto.service.AutoService; +import com.google.common.flogger.FluentLogger; +import dagger.Lazy; +import google.registry.config.RegistryEnvironment; +import google.registry.persistence.transaction.JpaTransactionManager; +import google.registry.persistence.transaction.TransactionManagerFactory; +import org.apache.beam.sdk.harness.JvmInitializer; +import org.apache.beam.sdk.options.PipelineOptions; + +/** + * Sets up Nomulus environment and initializes JPA on each pipeline worker. + * + *

This class only takes effect in portable beam pipeline runners (including the Cloud Dataflow + * runner). It is not invoked in test pipelines. + */ +@AutoService(JvmInitializer.class) +public class RegistryPipelineWorkerInitializer implements JvmInitializer { + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + + @Override + public void beforeProcessing(PipelineOptions options) { + RegistryEnvironment environment = + options.as(RegistryPipelineOptions.class).getRegistryEnvironment(); + if (environment == null || environment.equals(RegistryEnvironment.UNITTEST)) { + return; + } + logger.atInfo().log("Setting up RegistryEnvironment: %s", environment); + environment.setup(); + Lazy transactionManagerLazy = + DaggerRegistryPipelineComponent.create().getJpaTransactionManager(); + TransactionManagerFactory.setJpaTmOnBeamWorker(transactionManagerLazy::get); + } +} diff --git a/core/src/main/java/google/registry/persistence/PersistenceModule.java b/core/src/main/java/google/registry/persistence/PersistenceModule.java index 75cb905ae..342eb290a 100644 --- a/core/src/main/java/google/registry/persistence/PersistenceModule.java +++ b/core/src/main/java/google/registry/persistence/PersistenceModule.java @@ -124,6 +124,28 @@ public abstract class PersistenceModule { @Config("beamIsolationOverride") abstract TransactionIsolationLevel bindBeamIsolationOverride(); + /** + * Optionally overrides the maximum connection pool size for JPA. + * + *

If present, this binding overrides the {@code HIKARI_MAXIMUM_POOL_SIZE} value set in {@link + * #provideDefaultDatabaseConfigs()}. The default value is tuned for the Registry server on + * AppEngine. Other applications such as the Nomulus tool and the BEAM pipeline, should override + * it. + */ + @BindsOptionalOf + @Config("jpaMaxPoolSizeOverride") + abstract Integer bindJpaMaxPoolSizeOverride(); + + /** + * Optionally overrides the Cloud SQL database instance's connection name. + * + *

This allows connections to alternative database instances, e.g., the read-only replica or a + * test database. + */ + @BindsOptionalOf + @Config("instanceConnectionNameOverride") + abstract String instanceConnectionNameOverride(); + @Provides @Singleton @BeamPipelineCloudSqlConfigs @@ -172,6 +194,36 @@ public abstract class PersistenceModule { return new JpaTransactionManagerImpl(create(overrides), clock); } + @Provides + @Singleton + @BeamJpaTm + static JpaTransactionManager provideBeamJpaTm( + SqlCredentialStore credentialStore, + @Config("instanceConnectionNameOverride") + Optional> instanceConnectionNameOverride, + @Config("jpaMaxPoolSizeOverride") Optional jpaMaxConnectionPoolSizeOverride, + @Config("beamIsolationOverride") + Optional> isolationOverride, + @PartialCloudSqlConfigs ImmutableMap cloudSqlConfigs, + Clock clock) { + HashMap overrides = Maps.newHashMap(cloudSqlConfigs); + // TODO(b/175700623): make sql username configurable from config file. + SqlCredential credential = credentialStore.getCredential(new RobotUser(RobotId.NOMULUS)); + overrides.put(Environment.USER, credential.login()); + overrides.put(Environment.PASS, credential.password()); + instanceConnectionNameOverride + .map(Provider::get) + .ifPresent( + instanceConnectionName -> + overrides.put(HIKARI_DS_CLOUD_SQL_INSTANCE, instanceConnectionName)); + jpaMaxConnectionPoolSizeOverride.ifPresent( + maxPoolSize -> overrides.put(HIKARI_MAXIMUM_POOL_SIZE, String.valueOf(maxPoolSize))); + isolationOverride + .map(Provider::get) + .ifPresent(isolation -> overrides.put(Environment.ISOLATION, isolation.name())); + return new JpaTransactionManagerImpl(create(overrides), clock); + } + @Provides @Singleton @NomulusToolJpaTm @@ -336,6 +388,12 @@ public abstract class PersistenceModule { @Documented @interface AppEngineJpaTm {} + /** Dagger qualifier for {@link JpaTransactionManager} used inside BEAM pipelines. */ + // Note: @SocketFactoryJpaTm will be phased out in favor of this qualifier. + @Qualifier + @Documented + public @interface BeamJpaTm {} + /** Dagger qualifier for {@link JpaTransactionManager} used for Nomulus tool. */ @Qualifier @Documented diff --git a/core/src/main/java/google/registry/persistence/transaction/TransactionManagerFactory.java b/core/src/main/java/google/registry/persistence/transaction/TransactionManagerFactory.java index d43f0e1a7..8ed871803 100644 --- a/core/src/main/java/google/registry/persistence/transaction/TransactionManagerFactory.java +++ b/core/src/main/java/google/registry/persistence/transaction/TransactionManagerFactory.java @@ -101,6 +101,16 @@ public class TransactionManagerFactory { jpaTm = Suppliers.memoize(jpaTmSupplier::get); } + /** + * Makes {@link #jpaTm()} return the {@link JpaTransactionManager} instance provided by {@code + * jpaTmSupplier} from now on. This method should only be called by an implementor of {@link + * org.apache.beam.sdk.harness.JvmInitializer}. + */ + public static void setJpaTmOnBeamWorker(Supplier jpaTmSupplier) { + checkNotNull(jpaTmSupplier, "jpaTmSupplier"); + jpaTm = Suppliers.memoize(jpaTmSupplier::get); + } + /** Sets the return of {@link #tm()} to the given instance of {@link TransactionManager}. */ @VisibleForTesting public static void setTm(TransactionManager newTm) { diff --git a/core/src/test/java/google/registry/beam/common/RegistryPipelineOptionsTest.java b/core/src/test/java/google/registry/beam/common/RegistryPipelineOptionsTest.java new file mode 100644 index 000000000..f77bd2310 --- /dev/null +++ b/core/src/test/java/google/registry/beam/common/RegistryPipelineOptionsTest.java @@ -0,0 +1,112 @@ +// Copyright 2020 The Nomulus Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package google.registry.beam.common; + +import static com.google.common.truth.Truth.assertThat; +import static google.registry.beam.common.RegistryPipelineOptions.validateRegistryPipelineOptions; +import static org.junit.jupiter.api.Assertions.assertThrows; + +import google.registry.config.RegistryEnvironment; +import google.registry.testing.SystemPropertyExtension; +import org.apache.beam.sdk.options.PipelineOptionsFactory; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; + +/** Unit tests for {@link RegistryPipelineOptions}. */ +class RegistryPipelineOptionsTest { + + /** + * Restores original RegistryEnvironment after calling {@link + * RegistryPipelineOptions#validateRegistryPipelineOptions}. + */ + @RegisterExtension + final SystemPropertyExtension systemPropertyExtension = new SystemPropertyExtension(); + + @BeforeEach + void beforeEach() { + // Saves the current RegistryEnvironment for restoration later. + RegistryEnvironment.get().setup(systemPropertyExtension); + } + + @Test + void environment_fromArgs() { + assertThat( + PipelineOptionsFactory.fromArgs("--registryEnvironment=ALPHA") + .as(RegistryPipelineOptions.class) + .getRegistryEnvironment()) + .isSameInstanceAs(RegistryEnvironment.ALPHA); + } + + @Test + void environment_invalid() { + assertThrows( + IllegalArgumentException.class, + () -> + PipelineOptionsFactory.fromArgs("--registryEnvironment=alpha") + .as(RegistryPipelineOptions.class)); + } + + @Test + void environment_undefined() { + assertThat( + PipelineOptionsFactory.create() + .as(RegistryPipelineOptions.class) + .getRegistryEnvironment()) + .isNull(); + } + + @Test + void validateProject_projectsMatch() { + RegistryPipelineOptions options = + PipelineOptionsFactory.fromArgs( + "--registryEnvironment=" + RegistryEnvironment.UNITTEST.name(), + "--project=registry-project-id") + .withValidation() + .as(RegistryPipelineOptions.class); + validateRegistryPipelineOptions(options); + } + + @Test + void validateProject_projectsMismatch() { + RegistryPipelineOptions options = + PipelineOptionsFactory.fromArgs( + "--registryEnvironment=" + RegistryEnvironment.UNITTEST.name(), "--project=") + .withValidation() + .as(RegistryPipelineOptions.class); + assertThrows(IllegalArgumentException.class, () -> validateRegistryPipelineOptions(options)); + } + + @Test + void validateProject_missingProjectAdded() { + RegistryPipelineOptions options = + PipelineOptionsFactory.fromArgs( + "--registryEnvironment=" + RegistryEnvironment.UNITTEST.name()) + .withValidation() + .as(RegistryPipelineOptions.class); + // If gcloud is installed and --project not set , project may be inferred. + options.setProject(null); + validateRegistryPipelineOptions(options); + assertThat(options.getProject()).isEqualTo("registry-project-id"); + } + + @Test + void validateProject_noEnvironment() { + RegistryPipelineOptions options = + PipelineOptionsFactory.fromArgs("--project=some-project").as(RegistryPipelineOptions.class); + validateRegistryPipelineOptions(options); + assertThat(options.getProject()).isEqualTo("some-project"); + } +} diff --git a/core/src/test/resources/google/registry/beam/initsql/pipeline_golden.dot b/core/src/test/resources/google/registry/beam/initsql/pipeline_golden.dot index d9d516349..7e81d37cb 100644 --- a/core/src/test/resources/google/registry/beam/initsql/pipeline_golden.dot +++ b/core/src/test/resources/google/registry/beam/initsql/pipeline_golden.dot @@ -6,1604 +6,1630 @@ digraph { label = "Load Datastore snapshot" subgraph cluster_2 { label = "Load Datastore snapshot/Get export file patterns" - 3 [label="Read(CreateSource)"] + subgraph cluster_3 { + label = "Load Datastore snapshot/Get export file patterns/Read(CreateSource)" + 4 [label="Impulse"] + subgraph cluster_5 { + label = "Load Datastore snapshot/Get export file patterns/Read(CreateSource)/ParDo(OutputSingleSource)" + 6 [label="ParMultiDo(OutputSingleSource)"] + 4 -> 6 [style=solid label=""] + } + subgraph cluster_7 { + label = "Load Datastore snapshot/Get export file patterns/Read(CreateSource)/ParDo(BoundedSourceAsSDFWrapper)" + 8 [label="ParMultiDo(BoundedSourceAsSDFWrapper)"] + 6 -> 8 [style=solid label=""] + } + } } - subgraph cluster_4 { + subgraph cluster_9 { label = "Load Datastore snapshot/Find export files" - subgraph cluster_5 { + subgraph cluster_10 { label = "Load Datastore snapshot/Find export files/FileIO.MatchAll" - subgraph cluster_6 { + subgraph cluster_11 { label = "Load Datastore snapshot/Find export files/FileIO.MatchAll/Match filepatterns" - 7 [label="ParMultiDo(Match)"] - 3 -> 7 [style=solid label=""] + 12 [label="ParMultiDo(Match)"] + 8 -> 12 [style=solid label=""] } - subgraph cluster_8 { + subgraph cluster_13 { label = "Load Datastore snapshot/Find export files/FileIO.MatchAll/Reshuffle.ViaRandomKey" - subgraph cluster_9 { + subgraph cluster_14 { label = "Load Datastore snapshot/Find export files/FileIO.MatchAll/Reshuffle.ViaRandomKey/Pair with random key" - 10 [label="ParMultiDo(AssignShard)"] - 7 -> 10 [style=solid label=""] + 15 [label="ParMultiDo(AssignShard)"] + 12 -> 15 [style=solid label=""] } - subgraph cluster_11 { + subgraph cluster_16 { label = "Load Datastore snapshot/Find export files/FileIO.MatchAll/Reshuffle.ViaRandomKey/Reshuffle" - subgraph cluster_12 { + subgraph cluster_17 { label = "Load Datastore snapshot/Find export files/FileIO.MatchAll/Reshuffle.ViaRandomKey/Reshuffle/Window.Into()" - 13 [label="Window.Assign"] - 10 -> 13 [style=solid label=""] + 18 [label="Window.Assign"] + 15 -> 18 [style=solid label=""] } - subgraph cluster_14 { + subgraph cluster_19 { label = "Load Datastore snapshot/Find export files/FileIO.MatchAll/Reshuffle.ViaRandomKey/Reshuffle/ReifyOriginalTimestamps" - subgraph cluster_15 { + subgraph cluster_20 { label = "Load Datastore snapshot/Find export files/FileIO.MatchAll/Reshuffle.ViaRandomKey/Reshuffle/ReifyOriginalTimestamps/ParDo(Anonymous)" - 16 [label="ParMultiDo(Anonymous)"] - 13 -> 16 [style=solid label=""] + 21 [label="ParMultiDo(Anonymous)"] + 18 -> 21 [style=solid label=""] } } - 17 [label="GroupByKey"] - 16 -> 17 [style=solid label=""] - subgraph cluster_18 { + 22 [label="GroupByKey"] + 21 -> 22 [style=solid label=""] + subgraph cluster_23 { label = "Load Datastore snapshot/Find export files/FileIO.MatchAll/Reshuffle.ViaRandomKey/Reshuffle/ExpandIterable" - 19 [label="ParMultiDo(Anonymous)"] - 17 -> 19 [style=solid label=""] + 24 [label="ParMultiDo(Anonymous)"] + 22 -> 24 [style=solid label=""] } - subgraph cluster_20 { + subgraph cluster_25 { label = "Load Datastore snapshot/Find export files/FileIO.MatchAll/Reshuffle.ViaRandomKey/Reshuffle/RestoreOriginalTimestamps" - subgraph cluster_21 { + subgraph cluster_26 { label = "Load Datastore snapshot/Find export files/FileIO.MatchAll/Reshuffle.ViaRandomKey/Reshuffle/RestoreOriginalTimestamps/ReifyTimestamps.RemoveWildcard" - subgraph cluster_22 { + subgraph cluster_27 { label = "Load Datastore snapshot/Find export files/FileIO.MatchAll/Reshuffle.ViaRandomKey/Reshuffle/RestoreOriginalTimestamps/ReifyTimestamps.RemoveWildcard/ParDo(Anonymous)" - 23 [label="ParMultiDo(Anonymous)"] - 19 -> 23 [style=solid label=""] + 28 [label="ParMultiDo(Anonymous)"] + 24 -> 28 [style=solid label=""] } } - subgraph cluster_24 { - label = "Load Datastore snapshot/Find export files/FileIO.MatchAll/Reshuffle.ViaRandomKey/Reshuffle/RestoreOriginalTimestamps/Reify.ExtractTimestampsFromValues" - subgraph cluster_25 { - label = "Load Datastore snapshot/Find export files/FileIO.MatchAll/Reshuffle.ViaRandomKey/Reshuffle/RestoreOriginalTimestamps/Reify.ExtractTimestampsFromValues/ParDo(Anonymous)" - 26 [label="ParMultiDo(Anonymous)"] - 23 -> 26 [style=solid label=""] - } - } - } - } - subgraph cluster_27 { - label = "Load Datastore snapshot/Find export files/FileIO.MatchAll/Reshuffle.ViaRandomKey/Values" - subgraph cluster_28 { - label = "Load Datastore snapshot/Find export files/FileIO.MatchAll/Reshuffle.ViaRandomKey/Values/Values" subgraph cluster_29 { + label = "Load Datastore snapshot/Find export files/FileIO.MatchAll/Reshuffle.ViaRandomKey/Reshuffle/RestoreOriginalTimestamps/Reify.ExtractTimestampsFromValues" + subgraph cluster_30 { + label = "Load Datastore snapshot/Find export files/FileIO.MatchAll/Reshuffle.ViaRandomKey/Reshuffle/RestoreOriginalTimestamps/Reify.ExtractTimestampsFromValues/ParDo(Anonymous)" + 31 [label="ParMultiDo(Anonymous)"] + 28 -> 31 [style=solid label=""] + } + } + } + } + subgraph cluster_32 { + label = "Load Datastore snapshot/Find export files/FileIO.MatchAll/Reshuffle.ViaRandomKey/Values" + subgraph cluster_33 { + label = "Load Datastore snapshot/Find export files/FileIO.MatchAll/Reshuffle.ViaRandomKey/Values/Values" + subgraph cluster_34 { label = "Load Datastore snapshot/Find export files/FileIO.MatchAll/Reshuffle.ViaRandomKey/Values/Values/Map" - 30 [label="ParMultiDo(Anonymous)"] - 26 -> 30 [style=solid label=""] + 35 [label="ParMultiDo(Anonymous)"] + 31 -> 35 [style=solid label=""] } } } } } } - subgraph cluster_31 { + subgraph cluster_36 { label = "Load Datastore snapshot/Load export data" - subgraph cluster_32 { + subgraph cluster_37 { label = "Load Datastore snapshot/Load export data/FileIO.ReadMatches" - subgraph cluster_33 { + subgraph cluster_38 { label = "Load Datastore snapshot/Load export data/FileIO.ReadMatches/ParDo(ToReadableFile)" - 34 [label="ParMultiDo(ToReadableFile)"] - 30 -> 34 [style=solid label=""] + 39 [label="ParMultiDo(ToReadableFile)"] + 35 -> 39 [style=solid label=""] } } - subgraph cluster_35 { - label = "Load Datastore snapshot/Load export data/BackupFileReader" - 36 [label="ParMultiDo(BackupFileReader)"] - 34 -> 36 [style=solid label=""] - } - } - subgraph cluster_37 { - label = "Load Datastore snapshot/Get commitlog file patterns" - 38 [label="Read(CreateSource)"] - } - subgraph cluster_39 { - label = "Load Datastore snapshot/Find commitlog files" subgraph cluster_40 { + label = "Load Datastore snapshot/Load export data/BackupFileReader" + 41 [label="ParMultiDo(BackupFileReader)"] + 39 -> 41 [style=solid label=""] + } + } + subgraph cluster_42 { + label = "Load Datastore snapshot/Get commitlog file patterns" + subgraph cluster_43 { + label = "Load Datastore snapshot/Get commitlog file patterns/Read(CreateSource)" + 44 [label="Impulse"] + subgraph cluster_45 { + label = "Load Datastore snapshot/Get commitlog file patterns/Read(CreateSource)/ParDo(OutputSingleSource)" + 46 [label="ParMultiDo(OutputSingleSource)"] + 44 -> 46 [style=solid label=""] + } + subgraph cluster_47 { + label = "Load Datastore snapshot/Get commitlog file patterns/Read(CreateSource)/ParDo(BoundedSourceAsSDFWrapper)" + 48 [label="ParMultiDo(BoundedSourceAsSDFWrapper)"] + 46 -> 48 [style=solid label=""] + } + } + } + subgraph cluster_49 { + label = "Load Datastore snapshot/Find commitlog files" + subgraph cluster_50 { label = "Load Datastore snapshot/Find commitlog files/FileIO.MatchAll" - subgraph cluster_41 { + subgraph cluster_51 { label = "Load Datastore snapshot/Find commitlog files/FileIO.MatchAll/Match filepatterns" - 42 [label="ParMultiDo(Match)"] - 38 -> 42 [style=solid label=""] + 52 [label="ParMultiDo(Match)"] + 48 -> 52 [style=solid label=""] } - subgraph cluster_43 { + subgraph cluster_53 { label = "Load Datastore snapshot/Find commitlog files/FileIO.MatchAll/Reshuffle.ViaRandomKey" - subgraph cluster_44 { + subgraph cluster_54 { label = "Load Datastore snapshot/Find commitlog files/FileIO.MatchAll/Reshuffle.ViaRandomKey/Pair with random key" - 45 [label="ParMultiDo(AssignShard)"] - 42 -> 45 [style=solid label=""] + 55 [label="ParMultiDo(AssignShard)"] + 52 -> 55 [style=solid label=""] } - subgraph cluster_46 { + subgraph cluster_56 { label = "Load Datastore snapshot/Find commitlog files/FileIO.MatchAll/Reshuffle.ViaRandomKey/Reshuffle" - subgraph cluster_47 { + subgraph cluster_57 { label = "Load Datastore snapshot/Find commitlog files/FileIO.MatchAll/Reshuffle.ViaRandomKey/Reshuffle/Window.Into()" - 48 [label="Window.Assign"] - 45 -> 48 [style=solid label=""] + 58 [label="Window.Assign"] + 55 -> 58 [style=solid label=""] } - subgraph cluster_49 { + subgraph cluster_59 { label = "Load Datastore snapshot/Find commitlog files/FileIO.MatchAll/Reshuffle.ViaRandomKey/Reshuffle/ReifyOriginalTimestamps" - subgraph cluster_50 { + subgraph cluster_60 { label = "Load Datastore snapshot/Find commitlog files/FileIO.MatchAll/Reshuffle.ViaRandomKey/Reshuffle/ReifyOriginalTimestamps/ParDo(Anonymous)" - 51 [label="ParMultiDo(Anonymous)"] - 48 -> 51 [style=solid label=""] + 61 [label="ParMultiDo(Anonymous)"] + 58 -> 61 [style=solid label=""] } } - 52 [label="GroupByKey"] - 51 -> 52 [style=solid label=""] - subgraph cluster_53 { - label = "Load Datastore snapshot/Find commitlog files/FileIO.MatchAll/Reshuffle.ViaRandomKey/Reshuffle/ExpandIterable" - 54 [label="ParMultiDo(Anonymous)"] - 52 -> 54 [style=solid label=""] - } - subgraph cluster_55 { - label = "Load Datastore snapshot/Find commitlog files/FileIO.MatchAll/Reshuffle.ViaRandomKey/Reshuffle/RestoreOriginalTimestamps" - subgraph cluster_56 { - label = "Load Datastore snapshot/Find commitlog files/FileIO.MatchAll/Reshuffle.ViaRandomKey/Reshuffle/RestoreOriginalTimestamps/ReifyTimestamps.RemoveWildcard" - subgraph cluster_57 { - label = "Load Datastore snapshot/Find commitlog files/FileIO.MatchAll/Reshuffle.ViaRandomKey/Reshuffle/RestoreOriginalTimestamps/ReifyTimestamps.RemoveWildcard/ParDo(Anonymous)" - 58 [label="ParMultiDo(Anonymous)"] - 54 -> 58 [style=solid label=""] - } - } - subgraph cluster_59 { - label = "Load Datastore snapshot/Find commitlog files/FileIO.MatchAll/Reshuffle.ViaRandomKey/Reshuffle/RestoreOriginalTimestamps/Reify.ExtractTimestampsFromValues" - subgraph cluster_60 { - label = "Load Datastore snapshot/Find commitlog files/FileIO.MatchAll/Reshuffle.ViaRandomKey/Reshuffle/RestoreOriginalTimestamps/Reify.ExtractTimestampsFromValues/ParDo(Anonymous)" - 61 [label="ParMultiDo(Anonymous)"] - 58 -> 61 [style=solid label=""] - } - } - } - } - subgraph cluster_62 { - label = "Load Datastore snapshot/Find commitlog files/FileIO.MatchAll/Reshuffle.ViaRandomKey/Values" + 62 [label="GroupByKey"] + 61 -> 62 [style=solid label=""] subgraph cluster_63 { + label = "Load Datastore snapshot/Find commitlog files/FileIO.MatchAll/Reshuffle.ViaRandomKey/Reshuffle/ExpandIterable" + 64 [label="ParMultiDo(Anonymous)"] + 62 -> 64 [style=solid label=""] + } + subgraph cluster_65 { + label = "Load Datastore snapshot/Find commitlog files/FileIO.MatchAll/Reshuffle.ViaRandomKey/Reshuffle/RestoreOriginalTimestamps" + subgraph cluster_66 { + label = "Load Datastore snapshot/Find commitlog files/FileIO.MatchAll/Reshuffle.ViaRandomKey/Reshuffle/RestoreOriginalTimestamps/ReifyTimestamps.RemoveWildcard" + subgraph cluster_67 { + label = "Load Datastore snapshot/Find commitlog files/FileIO.MatchAll/Reshuffle.ViaRandomKey/Reshuffle/RestoreOriginalTimestamps/ReifyTimestamps.RemoveWildcard/ParDo(Anonymous)" + 68 [label="ParMultiDo(Anonymous)"] + 64 -> 68 [style=solid label=""] + } + } + subgraph cluster_69 { + label = "Load Datastore snapshot/Find commitlog files/FileIO.MatchAll/Reshuffle.ViaRandomKey/Reshuffle/RestoreOriginalTimestamps/Reify.ExtractTimestampsFromValues" + subgraph cluster_70 { + label = "Load Datastore snapshot/Find commitlog files/FileIO.MatchAll/Reshuffle.ViaRandomKey/Reshuffle/RestoreOriginalTimestamps/Reify.ExtractTimestampsFromValues/ParDo(Anonymous)" + 71 [label="ParMultiDo(Anonymous)"] + 68 -> 71 [style=solid label=""] + } + } + } + } + subgraph cluster_72 { + label = "Load Datastore snapshot/Find commitlog files/FileIO.MatchAll/Reshuffle.ViaRandomKey/Values" + subgraph cluster_73 { label = "Load Datastore snapshot/Find commitlog files/FileIO.MatchAll/Reshuffle.ViaRandomKey/Values/Values" - subgraph cluster_64 { + subgraph cluster_74 { label = "Load Datastore snapshot/Find commitlog files/FileIO.MatchAll/Reshuffle.ViaRandomKey/Values/Values/Map" - 65 [label="ParMultiDo(Anonymous)"] - 61 -> 65 [style=solid label=""] + 75 [label="ParMultiDo(Anonymous)"] + 71 -> 75 [style=solid label=""] } } } } } } - subgraph cluster_66 { + subgraph cluster_76 { label = "Load Datastore snapshot/Filter commitLog by time" - 67 [label="ParMultiDo(FilterCommitLogFileByTime)"] - 65 -> 67 [style=solid label=""] + 77 [label="ParMultiDo(FilterCommitLogFileByTime)"] + 75 -> 77 [style=solid label=""] } - subgraph cluster_68 { + subgraph cluster_78 { label = "Load Datastore snapshot/Load commitlog data" - subgraph cluster_69 { + subgraph cluster_79 { label = "Load Datastore snapshot/Load commitlog data/FileIO.ReadMatches" - subgraph cluster_70 { + subgraph cluster_80 { label = "Load Datastore snapshot/Load commitlog data/FileIO.ReadMatches/ParDo(ToReadableFile)" - 71 [label="ParMultiDo(ToReadableFile)"] - 67 -> 71 [style=solid label=""] + 81 [label="ParMultiDo(ToReadableFile)"] + 77 -> 81 [style=solid label=""] } } - subgraph cluster_72 { - label = "Load Datastore snapshot/Load commitlog data/BackupFileReader" - 73 [label="ParMultiDo(BackupFileReader)"] - 71 -> 73 [style=solid label=""] - } - } - 74 [label="Flatten.PCollections"] - 36 -> 74 [style=solid label=""] - 73 -> 74 [style=solid label=""] - subgraph cluster_75 { - label = "Load Datastore snapshot/Key entities by Datastore Keys" - subgraph cluster_76 { - label = "Load Datastore snapshot/Key entities by Datastore Keys/Map" - 77 [label="ParMultiDo(Anonymous)"] - 74 -> 77 [style=solid label=""] - } - } - 78 [label="GroupByKey"] - 77 -> 78 [style=solid label=""] - 79 [label="ParMultiDo(Anonymous)"] - 78 -> 79 [style=solid label=""] - } - subgraph cluster_80 { - label = "Write to sql: Transforms:Registry" - subgraph cluster_81 { - label = "Write to sql: Transforms:Registry/Shard data for Transforms:Registry" subgraph cluster_82 { + label = "Load Datastore snapshot/Load commitlog data/BackupFileReader" + 83 [label="ParMultiDo(BackupFileReader)"] + 81 -> 83 [style=solid label=""] + } + } + 84 [label="Flatten.PCollections"] + 41 -> 84 [style=solid label=""] + 83 -> 84 [style=solid label=""] + subgraph cluster_85 { + label = "Load Datastore snapshot/Key entities by Datastore Keys" + subgraph cluster_86 { + label = "Load Datastore snapshot/Key entities by Datastore Keys/Map" + 87 [label="ParMultiDo(Anonymous)"] + 84 -> 87 [style=solid label=""] + } + } + 88 [label="GroupByKey"] + 87 -> 88 [style=solid label=""] + 89 [label="ParMultiDo(Anonymous)"] + 88 -> 89 [style=solid label=""] + } + subgraph cluster_90 { + label = "Write to sql: Transforms:Registry" + subgraph cluster_91 { + label = "Write to sql: Transforms:Registry/Shard data for Transforms:Registry" + subgraph cluster_92 { label = "Write to sql: Transforms:Registry/Shard data for Transforms:Registry/Map" - 83 [label="ParMultiDo(Anonymous)"] - 79 -> 83 [style=solid label=""] + 93 [label="ParMultiDo(Anonymous)"] + 89 -> 93 [style=solid label=""] } } - subgraph cluster_84 { + subgraph cluster_94 { label = "Write to sql: Transforms:Registry/Batch output by shard Transforms:Registry" - subgraph cluster_85 { - label = "Write to sql: Transforms:Registry/Batch output by shard Transforms:Registry/ParDo(GroupIntoBatches)" - 86 [label="ParMultiDo(GroupIntoBatches)"] - 83 -> 86 [style=solid label=""] - } - } - subgraph cluster_87 { - label = "Write to sql: Transforms:Registry/Write in batch for Transforms:Registry" - 88 [label="ParMultiDo(SqlBatchWriter)"] - 86 -> 88 [style=solid label=""] - } - } - subgraph cluster_89 { - label = "Wait on Transforms:Registry" - subgraph cluster_90 { - label = "Wait on Transforms:Registry/To wait view 0" - subgraph cluster_91 { - label = "Wait on Transforms:Registry/To wait view 0/Window.Into()" - 92 [label="Flatten.PCollections"] - 88 -> 92 [style=solid label=""] - } - subgraph cluster_93 { - label = "Wait on Transforms:Registry/To wait view 0/ParDo(CollectWindows)" - 94 [label="ParMultiDo(CollectWindows)"] - 92 -> 94 [style=solid label=""] - } subgraph cluster_95 { - label = "Wait on Transforms:Registry/To wait view 0/Sample.Any" - subgraph cluster_96 { - label = "Wait on Transforms:Registry/To wait view 0/Sample.Any/Combine.globally(SampleAny)" - subgraph cluster_97 { - label = "Wait on Transforms:Registry/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys" - subgraph cluster_98 { - label = "Wait on Transforms:Registry/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys" - subgraph cluster_99 { - label = "Wait on Transforms:Registry/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys/Map" - 100 [label="ParMultiDo(Anonymous)"] - 94 -> 100 [style=solid label=""] - } - } - } - subgraph cluster_101 { - label = "Wait on Transforms:Registry/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)" - 102 [label="GroupByKey"] - 100 -> 102 [style=solid label=""] - subgraph cluster_103 { - label = "Wait on Transforms:Registry/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues" - subgraph cluster_104 { - label = "Wait on Transforms:Registry/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues/ParDo(Anonymous)" - 105 [label="ParMultiDo(Anonymous)"] - 102 -> 105 [style=solid label=""] - } - } - } - subgraph cluster_106 { - label = "Wait on Transforms:Registry/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values" - subgraph cluster_107 { - label = "Wait on Transforms:Registry/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values" - subgraph cluster_108 { - label = "Wait on Transforms:Registry/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values/Map" - 109 [label="ParMultiDo(Anonymous)"] - 105 -> 109 [style=solid label=""] - } - } - } - } - subgraph cluster_110 { - label = "Wait on Transforms:Registry/To wait view 0/Sample.Any/Flatten.Iterables" - subgraph cluster_111 { - label = "Wait on Transforms:Registry/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables" - subgraph cluster_112 { - label = "Wait on Transforms:Registry/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables/FlatMap" - 113 [label="ParMultiDo(Anonymous)"] - 109 -> 113 [style=solid label=""] - } - } - } - } - subgraph cluster_114 { - label = "Wait on Transforms:Registry/To wait view 0/View.AsList" - subgraph cluster_115 { - label = "Wait on Transforms:Registry/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization" - subgraph cluster_116 { - label = "Wait on Transforms:Registry/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization/ParDo(VoidKeyToMultimapMaterialization)" - 117 [label="ParMultiDo(VoidKeyToMultimapMaterialization)"] - 113 -> 117 [style=solid label=""] - } - } - 118 [label="View.CreatePCollectionView"] - 117 -> 118 [style=solid label=""] + label = "Write to sql: Transforms:Registry/Batch output by shard Transforms:Registry/ParDo(GroupIntoBatches)" + 96 [label="ParMultiDo(GroupIntoBatches)"] + 93 -> 96 [style=solid label=""] } } - subgraph cluster_119 { - label = "Wait on Transforms:Registry/Wait" - subgraph cluster_120 { - label = "Wait on Transforms:Registry/Wait/Map" - 121 [label="ParMultiDo(Anonymous)"] - 79 -> 121 [style=solid label=""] - 117 -> 121 [style=dashed label=""] - } + subgraph cluster_97 { + label = "Write to sql: Transforms:Registry/Write in batch for Transforms:Registry" + 98 [label="ParMultiDo(SqlBatchWriter)"] + 96 -> 98 [style=solid label=""] } } - subgraph cluster_122 { - label = "Write to sql: Transforms:Registrar" - subgraph cluster_123 { - label = "Write to sql: Transforms:Registrar/Shard data for Transforms:Registrar" - subgraph cluster_124 { - label = "Write to sql: Transforms:Registrar/Shard data for Transforms:Registrar/Map" - 125 [label="ParMultiDo(Anonymous)"] - 121 -> 125 [style=solid label=""] + subgraph cluster_99 { + label = "Wait on Transforms:Registry" + subgraph cluster_100 { + label = "Wait on Transforms:Registry/To wait view 0" + subgraph cluster_101 { + label = "Wait on Transforms:Registry/To wait view 0/Window.Into()" + 102 [label="Flatten.PCollections"] + 98 -> 102 [style=solid label=""] } - } - subgraph cluster_126 { - label = "Write to sql: Transforms:Registrar/Batch output by shard Transforms:Registrar" - subgraph cluster_127 { - label = "Write to sql: Transforms:Registrar/Batch output by shard Transforms:Registrar/ParDo(GroupIntoBatches)" - 128 [label="ParMultiDo(GroupIntoBatches)"] - 125 -> 128 [style=solid label=""] + subgraph cluster_103 { + label = "Wait on Transforms:Registry/To wait view 0/ParDo(CollectWindows)" + 104 [label="ParMultiDo(CollectWindows)"] + 102 -> 104 [style=solid label=""] + } + subgraph cluster_105 { + label = "Wait on Transforms:Registry/To wait view 0/Sample.Any" + subgraph cluster_106 { + label = "Wait on Transforms:Registry/To wait view 0/Sample.Any/Combine.globally(SampleAny)" + subgraph cluster_107 { + label = "Wait on Transforms:Registry/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys" + subgraph cluster_108 { + label = "Wait on Transforms:Registry/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys" + subgraph cluster_109 { + label = "Wait on Transforms:Registry/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys/Map" + 110 [label="ParMultiDo(Anonymous)"] + 104 -> 110 [style=solid label=""] + } + } + } + subgraph cluster_111 { + label = "Wait on Transforms:Registry/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)" + 112 [label="GroupByKey"] + 110 -> 112 [style=solid label=""] + subgraph cluster_113 { + label = "Wait on Transforms:Registry/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues" + subgraph cluster_114 { + label = "Wait on Transforms:Registry/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues/ParDo(Anonymous)" + 115 [label="ParMultiDo(Anonymous)"] + 112 -> 115 [style=solid label=""] + } + } + } + subgraph cluster_116 { + label = "Wait on Transforms:Registry/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values" + subgraph cluster_117 { + label = "Wait on Transforms:Registry/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values" + subgraph cluster_118 { + label = "Wait on Transforms:Registry/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values/Map" + 119 [label="ParMultiDo(Anonymous)"] + 115 -> 119 [style=solid label=""] + } + } + } + } + subgraph cluster_120 { + label = "Wait on Transforms:Registry/To wait view 0/Sample.Any/Flatten.Iterables" + subgraph cluster_121 { + label = "Wait on Transforms:Registry/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables" + subgraph cluster_122 { + label = "Wait on Transforms:Registry/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables/FlatMap" + 123 [label="ParMultiDo(Anonymous)"] + 119 -> 123 [style=solid label=""] + } + } + } + } + subgraph cluster_124 { + label = "Wait on Transforms:Registry/To wait view 0/View.AsList" + subgraph cluster_125 { + label = "Wait on Transforms:Registry/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization" + subgraph cluster_126 { + label = "Wait on Transforms:Registry/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization/ParDo(VoidKeyToMultimapMaterialization)" + 127 [label="ParMultiDo(VoidKeyToMultimapMaterialization)"] + 123 -> 127 [style=solid label=""] + } + } + 128 [label="View.CreatePCollectionView"] + 127 -> 128 [style=solid label=""] } } subgraph cluster_129 { - label = "Write to sql: Transforms:Registrar/Write in batch for Transforms:Registrar" - 130 [label="ParMultiDo(SqlBatchWriter)"] - 128 -> 130 [style=solid label=""] + label = "Wait on Transforms:Registry/Wait" + subgraph cluster_130 { + label = "Wait on Transforms:Registry/Wait/Map" + 131 [label="ParMultiDo(Anonymous)"] + 89 -> 131 [style=solid label=""] + 127 -> 131 [style=dashed label=""] + } } } - subgraph cluster_131 { - label = "Wait on Transforms:Registrar" - subgraph cluster_132 { - label = "Wait on Transforms:Registrar/To wait view 0" - subgraph cluster_133 { - label = "Wait on Transforms:Registrar/To wait view 0/Window.Into()" - 134 [label="Flatten.PCollections"] - 130 -> 134 [style=solid label=""] - } - subgraph cluster_135 { - label = "Wait on Transforms:Registrar/To wait view 0/ParDo(CollectWindows)" - 136 [label="ParMultiDo(CollectWindows)"] - 134 -> 136 [style=solid label=""] + subgraph cluster_132 { + label = "Write to sql: Transforms:Registrar" + subgraph cluster_133 { + label = "Write to sql: Transforms:Registrar/Shard data for Transforms:Registrar" + subgraph cluster_134 { + label = "Write to sql: Transforms:Registrar/Shard data for Transforms:Registrar/Map" + 135 [label="ParMultiDo(Anonymous)"] + 131 -> 135 [style=solid label=""] } + } + subgraph cluster_136 { + label = "Write to sql: Transforms:Registrar/Batch output by shard Transforms:Registrar" subgraph cluster_137 { - label = "Wait on Transforms:Registrar/To wait view 0/Sample.Any" - subgraph cluster_138 { - label = "Wait on Transforms:Registrar/To wait view 0/Sample.Any/Combine.globally(SampleAny)" - subgraph cluster_139 { - label = "Wait on Transforms:Registrar/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys" - subgraph cluster_140 { - label = "Wait on Transforms:Registrar/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys" - subgraph cluster_141 { - label = "Wait on Transforms:Registrar/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys/Map" - 142 [label="ParMultiDo(Anonymous)"] - 136 -> 142 [style=solid label=""] - } - } - } - subgraph cluster_143 { - label = "Wait on Transforms:Registrar/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)" - 144 [label="GroupByKey"] - 142 -> 144 [style=solid label=""] - subgraph cluster_145 { - label = "Wait on Transforms:Registrar/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues" - subgraph cluster_146 { - label = "Wait on Transforms:Registrar/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues/ParDo(Anonymous)" - 147 [label="ParMultiDo(Anonymous)"] - 144 -> 147 [style=solid label=""] - } - } - } - subgraph cluster_148 { - label = "Wait on Transforms:Registrar/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values" - subgraph cluster_149 { - label = "Wait on Transforms:Registrar/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values" - subgraph cluster_150 { - label = "Wait on Transforms:Registrar/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values/Map" - 151 [label="ParMultiDo(Anonymous)"] - 147 -> 151 [style=solid label=""] - } - } - } - } - subgraph cluster_152 { - label = "Wait on Transforms:Registrar/To wait view 0/Sample.Any/Flatten.Iterables" - subgraph cluster_153 { - label = "Wait on Transforms:Registrar/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables" - subgraph cluster_154 { - label = "Wait on Transforms:Registrar/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables/FlatMap" - 155 [label="ParMultiDo(Anonymous)"] - 151 -> 155 [style=solid label=""] - } - } - } - } - subgraph cluster_156 { - label = "Wait on Transforms:Registrar/To wait view 0/View.AsList" - subgraph cluster_157 { - label = "Wait on Transforms:Registrar/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization" - subgraph cluster_158 { - label = "Wait on Transforms:Registrar/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization/ParDo(VoidKeyToMultimapMaterialization)" - 159 [label="ParMultiDo(VoidKeyToMultimapMaterialization)"] - 155 -> 159 [style=solid label=""] - } - } - 160 [label="View.CreatePCollectionView"] - 159 -> 160 [style=solid label=""] + label = "Write to sql: Transforms:Registrar/Batch output by shard Transforms:Registrar/ParDo(GroupIntoBatches)" + 138 [label="ParMultiDo(GroupIntoBatches)"] + 135 -> 138 [style=solid label=""] } } - subgraph cluster_161 { - label = "Wait on Transforms:Registrar/Wait" - subgraph cluster_162 { - label = "Wait on Transforms:Registrar/Wait/Map" - 163 [label="ParMultiDo(Anonymous)"] - 79 -> 163 [style=solid label=""] - 159 -> 163 [style=dashed label=""] - } + subgraph cluster_139 { + label = "Write to sql: Transforms:Registrar/Write in batch for Transforms:Registrar" + 140 [label="ParMultiDo(SqlBatchWriter)"] + 138 -> 140 [style=solid label=""] } } - subgraph cluster_164 { - label = "Write to sql: Transforms:ContactResource" - subgraph cluster_165 { - label = "Write to sql: Transforms:ContactResource/Shard data for Transforms:ContactResource" - subgraph cluster_166 { - label = "Write to sql: Transforms:ContactResource/Shard data for Transforms:ContactResource/Map" - 167 [label="ParMultiDo(Anonymous)"] - 163 -> 167 [style=solid label=""] + subgraph cluster_141 { + label = "Wait on Transforms:Registrar" + subgraph cluster_142 { + label = "Wait on Transforms:Registrar/To wait view 0" + subgraph cluster_143 { + label = "Wait on Transforms:Registrar/To wait view 0/Window.Into()" + 144 [label="Flatten.PCollections"] + 140 -> 144 [style=solid label=""] } - } - subgraph cluster_168 { - label = "Write to sql: Transforms:ContactResource/Batch output by shard Transforms:ContactResource" - subgraph cluster_169 { - label = "Write to sql: Transforms:ContactResource/Batch output by shard Transforms:ContactResource/ParDo(GroupIntoBatches)" - 170 [label="ParMultiDo(GroupIntoBatches)"] - 167 -> 170 [style=solid label=""] + subgraph cluster_145 { + label = "Wait on Transforms:Registrar/To wait view 0/ParDo(CollectWindows)" + 146 [label="ParMultiDo(CollectWindows)"] + 144 -> 146 [style=solid label=""] + } + subgraph cluster_147 { + label = "Wait on Transforms:Registrar/To wait view 0/Sample.Any" + subgraph cluster_148 { + label = "Wait on Transforms:Registrar/To wait view 0/Sample.Any/Combine.globally(SampleAny)" + subgraph cluster_149 { + label = "Wait on Transforms:Registrar/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys" + subgraph cluster_150 { + label = "Wait on Transforms:Registrar/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys" + subgraph cluster_151 { + label = "Wait on Transforms:Registrar/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys/Map" + 152 [label="ParMultiDo(Anonymous)"] + 146 -> 152 [style=solid label=""] + } + } + } + subgraph cluster_153 { + label = "Wait on Transforms:Registrar/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)" + 154 [label="GroupByKey"] + 152 -> 154 [style=solid label=""] + subgraph cluster_155 { + label = "Wait on Transforms:Registrar/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues" + subgraph cluster_156 { + label = "Wait on Transforms:Registrar/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues/ParDo(Anonymous)" + 157 [label="ParMultiDo(Anonymous)"] + 154 -> 157 [style=solid label=""] + } + } + } + subgraph cluster_158 { + label = "Wait on Transforms:Registrar/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values" + subgraph cluster_159 { + label = "Wait on Transforms:Registrar/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values" + subgraph cluster_160 { + label = "Wait on Transforms:Registrar/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values/Map" + 161 [label="ParMultiDo(Anonymous)"] + 157 -> 161 [style=solid label=""] + } + } + } + } + subgraph cluster_162 { + label = "Wait on Transforms:Registrar/To wait view 0/Sample.Any/Flatten.Iterables" + subgraph cluster_163 { + label = "Wait on Transforms:Registrar/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables" + subgraph cluster_164 { + label = "Wait on Transforms:Registrar/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables/FlatMap" + 165 [label="ParMultiDo(Anonymous)"] + 161 -> 165 [style=solid label=""] + } + } + } + } + subgraph cluster_166 { + label = "Wait on Transforms:Registrar/To wait view 0/View.AsList" + subgraph cluster_167 { + label = "Wait on Transforms:Registrar/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization" + subgraph cluster_168 { + label = "Wait on Transforms:Registrar/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization/ParDo(VoidKeyToMultimapMaterialization)" + 169 [label="ParMultiDo(VoidKeyToMultimapMaterialization)"] + 165 -> 169 [style=solid label=""] + } + } + 170 [label="View.CreatePCollectionView"] + 169 -> 170 [style=solid label=""] } } subgraph cluster_171 { - label = "Write to sql: Transforms:ContactResource/Write in batch for Transforms:ContactResource" - 172 [label="ParMultiDo(SqlBatchWriter)"] - 170 -> 172 [style=solid label=""] + label = "Wait on Transforms:Registrar/Wait" + subgraph cluster_172 { + label = "Wait on Transforms:Registrar/Wait/Map" + 173 [label="ParMultiDo(Anonymous)"] + 89 -> 173 [style=solid label=""] + 169 -> 173 [style=dashed label=""] + } } } - subgraph cluster_173 { - label = "Wait on Transforms:ContactResource" - subgraph cluster_174 { - label = "Wait on Transforms:ContactResource/To wait view 0" - subgraph cluster_175 { - label = "Wait on Transforms:ContactResource/To wait view 0/Window.Into()" - 176 [label="Flatten.PCollections"] - 172 -> 176 [style=solid label=""] - } - subgraph cluster_177 { - label = "Wait on Transforms:ContactResource/To wait view 0/ParDo(CollectWindows)" - 178 [label="ParMultiDo(CollectWindows)"] - 176 -> 178 [style=solid label=""] + subgraph cluster_174 { + label = "Write to sql: Transforms:ContactResource" + subgraph cluster_175 { + label = "Write to sql: Transforms:ContactResource/Shard data for Transforms:ContactResource" + subgraph cluster_176 { + label = "Write to sql: Transforms:ContactResource/Shard data for Transforms:ContactResource/Map" + 177 [label="ParMultiDo(Anonymous)"] + 173 -> 177 [style=solid label=""] } + } + subgraph cluster_178 { + label = "Write to sql: Transforms:ContactResource/Batch output by shard Transforms:ContactResource" subgraph cluster_179 { - label = "Wait on Transforms:ContactResource/To wait view 0/Sample.Any" - subgraph cluster_180 { - label = "Wait on Transforms:ContactResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)" - subgraph cluster_181 { - label = "Wait on Transforms:ContactResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys" - subgraph cluster_182 { - label = "Wait on Transforms:ContactResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys" - subgraph cluster_183 { - label = "Wait on Transforms:ContactResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys/Map" - 184 [label="ParMultiDo(Anonymous)"] - 178 -> 184 [style=solid label=""] - } - } - } - subgraph cluster_185 { - label = "Wait on Transforms:ContactResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)" - 186 [label="GroupByKey"] - 184 -> 186 [style=solid label=""] - subgraph cluster_187 { - label = "Wait on Transforms:ContactResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues" - subgraph cluster_188 { - label = "Wait on Transforms:ContactResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues/ParDo(Anonymous)" - 189 [label="ParMultiDo(Anonymous)"] - 186 -> 189 [style=solid label=""] - } - } - } - subgraph cluster_190 { - label = "Wait on Transforms:ContactResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values" - subgraph cluster_191 { - label = "Wait on Transforms:ContactResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values" - subgraph cluster_192 { - label = "Wait on Transforms:ContactResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values/Map" - 193 [label="ParMultiDo(Anonymous)"] - 189 -> 193 [style=solid label=""] - } - } - } - } - subgraph cluster_194 { - label = "Wait on Transforms:ContactResource/To wait view 0/Sample.Any/Flatten.Iterables" - subgraph cluster_195 { - label = "Wait on Transforms:ContactResource/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables" - subgraph cluster_196 { - label = "Wait on Transforms:ContactResource/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables/FlatMap" - 197 [label="ParMultiDo(Anonymous)"] - 193 -> 197 [style=solid label=""] - } - } - } - } - subgraph cluster_198 { - label = "Wait on Transforms:ContactResource/To wait view 0/View.AsList" - subgraph cluster_199 { - label = "Wait on Transforms:ContactResource/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization" - subgraph cluster_200 { - label = "Wait on Transforms:ContactResource/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization/ParDo(VoidKeyToMultimapMaterialization)" - 201 [label="ParMultiDo(VoidKeyToMultimapMaterialization)"] - 197 -> 201 [style=solid label=""] - } - } - 202 [label="View.CreatePCollectionView"] - 201 -> 202 [style=solid label=""] + label = "Write to sql: Transforms:ContactResource/Batch output by shard Transforms:ContactResource/ParDo(GroupIntoBatches)" + 180 [label="ParMultiDo(GroupIntoBatches)"] + 177 -> 180 [style=solid label=""] } } - subgraph cluster_203 { - label = "Wait on Transforms:ContactResource/Wait" - subgraph cluster_204 { - label = "Wait on Transforms:ContactResource/Wait/Map" - 205 [label="ParMultiDo(Anonymous)"] - 79 -> 205 [style=solid label=""] - 201 -> 205 [style=dashed label=""] - } + subgraph cluster_181 { + label = "Write to sql: Transforms:ContactResource/Write in batch for Transforms:ContactResource" + 182 [label="ParMultiDo(SqlBatchWriter)"] + 180 -> 182 [style=solid label=""] } } - subgraph cluster_206 { - label = "Write to sql: Transforms:RegistrarContact" - subgraph cluster_207 { - label = "Write to sql: Transforms:RegistrarContact/Shard data for Transforms:RegistrarContact" - subgraph cluster_208 { - label = "Write to sql: Transforms:RegistrarContact/Shard data for Transforms:RegistrarContact/Map" - 209 [label="ParMultiDo(Anonymous)"] - 205 -> 209 [style=solid label=""] + subgraph cluster_183 { + label = "Wait on Transforms:ContactResource" + subgraph cluster_184 { + label = "Wait on Transforms:ContactResource/To wait view 0" + subgraph cluster_185 { + label = "Wait on Transforms:ContactResource/To wait view 0/Window.Into()" + 186 [label="Flatten.PCollections"] + 182 -> 186 [style=solid label=""] } - } - subgraph cluster_210 { - label = "Write to sql: Transforms:RegistrarContact/Batch output by shard Transforms:RegistrarContact" - subgraph cluster_211 { - label = "Write to sql: Transforms:RegistrarContact/Batch output by shard Transforms:RegistrarContact/ParDo(GroupIntoBatches)" - 212 [label="ParMultiDo(GroupIntoBatches)"] - 209 -> 212 [style=solid label=""] + subgraph cluster_187 { + label = "Wait on Transforms:ContactResource/To wait view 0/ParDo(CollectWindows)" + 188 [label="ParMultiDo(CollectWindows)"] + 186 -> 188 [style=solid label=""] + } + subgraph cluster_189 { + label = "Wait on Transforms:ContactResource/To wait view 0/Sample.Any" + subgraph cluster_190 { + label = "Wait on Transforms:ContactResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)" + subgraph cluster_191 { + label = "Wait on Transforms:ContactResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys" + subgraph cluster_192 { + label = "Wait on Transforms:ContactResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys" + subgraph cluster_193 { + label = "Wait on Transforms:ContactResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys/Map" + 194 [label="ParMultiDo(Anonymous)"] + 188 -> 194 [style=solid label=""] + } + } + } + subgraph cluster_195 { + label = "Wait on Transforms:ContactResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)" + 196 [label="GroupByKey"] + 194 -> 196 [style=solid label=""] + subgraph cluster_197 { + label = "Wait on Transforms:ContactResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues" + subgraph cluster_198 { + label = "Wait on Transforms:ContactResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues/ParDo(Anonymous)" + 199 [label="ParMultiDo(Anonymous)"] + 196 -> 199 [style=solid label=""] + } + } + } + subgraph cluster_200 { + label = "Wait on Transforms:ContactResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values" + subgraph cluster_201 { + label = "Wait on Transforms:ContactResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values" + subgraph cluster_202 { + label = "Wait on Transforms:ContactResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values/Map" + 203 [label="ParMultiDo(Anonymous)"] + 199 -> 203 [style=solid label=""] + } + } + } + } + subgraph cluster_204 { + label = "Wait on Transforms:ContactResource/To wait view 0/Sample.Any/Flatten.Iterables" + subgraph cluster_205 { + label = "Wait on Transforms:ContactResource/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables" + subgraph cluster_206 { + label = "Wait on Transforms:ContactResource/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables/FlatMap" + 207 [label="ParMultiDo(Anonymous)"] + 203 -> 207 [style=solid label=""] + } + } + } + } + subgraph cluster_208 { + label = "Wait on Transforms:ContactResource/To wait view 0/View.AsList" + subgraph cluster_209 { + label = "Wait on Transforms:ContactResource/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization" + subgraph cluster_210 { + label = "Wait on Transforms:ContactResource/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization/ParDo(VoidKeyToMultimapMaterialization)" + 211 [label="ParMultiDo(VoidKeyToMultimapMaterialization)"] + 207 -> 211 [style=solid label=""] + } + } + 212 [label="View.CreatePCollectionView"] + 211 -> 212 [style=solid label=""] } } subgraph cluster_213 { - label = "Write to sql: Transforms:RegistrarContact/Write in batch for Transforms:RegistrarContact" - 214 [label="ParMultiDo(SqlBatchWriter)"] - 212 -> 214 [style=solid label=""] + label = "Wait on Transforms:ContactResource/Wait" + subgraph cluster_214 { + label = "Wait on Transforms:ContactResource/Wait/Map" + 215 [label="ParMultiDo(Anonymous)"] + 89 -> 215 [style=solid label=""] + 211 -> 215 [style=dashed label=""] + } } } - subgraph cluster_215 { - label = "Remove circular foreign keys from DomainBase" - 216 [label="ParMultiDo(RemoveDomainBaseForeignKeys)"] - 79 -> 216 [style=solid label=""] - } - subgraph cluster_217 { - label = "Wait on phase one" - subgraph cluster_218 { - label = "Wait on phase one/To wait view 0" - subgraph cluster_219 { - label = "Wait on phase one/To wait view 0/Window.Into()" - 220 [label="Flatten.PCollections"] - 214 -> 220 [style=solid label=""] + subgraph cluster_216 { + label = "Write to sql: Transforms:RegistrarContact" + subgraph cluster_217 { + label = "Write to sql: Transforms:RegistrarContact/Shard data for Transforms:RegistrarContact" + subgraph cluster_218 { + label = "Write to sql: Transforms:RegistrarContact/Shard data for Transforms:RegistrarContact/Map" + 219 [label="ParMultiDo(Anonymous)"] + 215 -> 219 [style=solid label=""] } + } + subgraph cluster_220 { + label = "Write to sql: Transforms:RegistrarContact/Batch output by shard Transforms:RegistrarContact" subgraph cluster_221 { - label = "Wait on phase one/To wait view 0/ParDo(CollectWindows)" - 222 [label="ParMultiDo(CollectWindows)"] - 220 -> 222 [style=solid label=""] - } - subgraph cluster_223 { - label = "Wait on phase one/To wait view 0/Sample.Any" - subgraph cluster_224 { - label = "Wait on phase one/To wait view 0/Sample.Any/Combine.globally(SampleAny)" - subgraph cluster_225 { - label = "Wait on phase one/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys" - subgraph cluster_226 { - label = "Wait on phase one/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys" - subgraph cluster_227 { - label = "Wait on phase one/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys/Map" - 228 [label="ParMultiDo(Anonymous)"] - 222 -> 228 [style=solid label=""] - } - } - } - subgraph cluster_229 { - label = "Wait on phase one/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)" - 230 [label="GroupByKey"] - 228 -> 230 [style=solid label=""] - subgraph cluster_231 { - label = "Wait on phase one/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues" - subgraph cluster_232 { - label = "Wait on phase one/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues/ParDo(Anonymous)" - 233 [label="ParMultiDo(Anonymous)"] - 230 -> 233 [style=solid label=""] - } - } - } - subgraph cluster_234 { - label = "Wait on phase one/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values" - subgraph cluster_235 { - label = "Wait on phase one/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values" - subgraph cluster_236 { - label = "Wait on phase one/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values/Map" - 237 [label="ParMultiDo(Anonymous)"] - 233 -> 237 [style=solid label=""] - } - } - } - } - subgraph cluster_238 { - label = "Wait on phase one/To wait view 0/Sample.Any/Flatten.Iterables" - subgraph cluster_239 { - label = "Wait on phase one/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables" - subgraph cluster_240 { - label = "Wait on phase one/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables/FlatMap" - 241 [label="ParMultiDo(Anonymous)"] - 237 -> 241 [style=solid label=""] - } - } - } - } - subgraph cluster_242 { - label = "Wait on phase one/To wait view 0/View.AsList" - subgraph cluster_243 { - label = "Wait on phase one/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization" - subgraph cluster_244 { - label = "Wait on phase one/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization/ParDo(VoidKeyToMultimapMaterialization)" - 245 [label="ParMultiDo(VoidKeyToMultimapMaterialization)"] - 241 -> 245 [style=solid label=""] - } - } - 246 [label="View.CreatePCollectionView"] - 245 -> 246 [style=solid label=""] + label = "Write to sql: Transforms:RegistrarContact/Batch output by shard Transforms:RegistrarContact/ParDo(GroupIntoBatches)" + 222 [label="ParMultiDo(GroupIntoBatches)"] + 219 -> 222 [style=solid label=""] } } - subgraph cluster_247 { - label = "Wait on phase one/Wait" - subgraph cluster_248 { - label = "Wait on phase one/Wait/Map" - 249 [label="ParMultiDo(Anonymous)"] - 216 -> 249 [style=solid label=""] - 245 -> 249 [style=dashed label=""] - } + subgraph cluster_223 { + label = "Write to sql: Transforms:RegistrarContact/Write in batch for Transforms:RegistrarContact" + 224 [label="ParMultiDo(SqlBatchWriter)"] + 222 -> 224 [style=solid label=""] } } - subgraph cluster_250 { - label = "Write to sql: DomainBase without circular foreign keys" - subgraph cluster_251 { - label = "Write to sql: DomainBase without circular foreign keys/Shard data for DomainBase without circular foreign keys" - subgraph cluster_252 { - label = "Write to sql: DomainBase without circular foreign keys/Shard data for DomainBase without circular foreign keys/Map" - 253 [label="ParMultiDo(Anonymous)"] - 249 -> 253 [style=solid label=""] + subgraph cluster_225 { + label = "Remove circular foreign keys from DomainBase" + 226 [label="ParMultiDo(RemoveDomainBaseForeignKeys)"] + 89 -> 226 [style=solid label=""] + } + subgraph cluster_227 { + label = "Wait on phase one" + subgraph cluster_228 { + label = "Wait on phase one/To wait view 0" + subgraph cluster_229 { + label = "Wait on phase one/To wait view 0/Window.Into()" + 230 [label="Flatten.PCollections"] + 224 -> 230 [style=solid label=""] } - } - subgraph cluster_254 { - label = "Write to sql: DomainBase without circular foreign keys/Batch output by shard DomainBase without circular foreign keys" - subgraph cluster_255 { - label = "Write to sql: DomainBase without circular foreign keys/Batch output by shard DomainBase without circular foreign keys/ParDo(GroupIntoBatches)" - 256 [label="ParMultiDo(GroupIntoBatches)"] - 253 -> 256 [style=solid label=""] + subgraph cluster_231 { + label = "Wait on phase one/To wait view 0/ParDo(CollectWindows)" + 232 [label="ParMultiDo(CollectWindows)"] + 230 -> 232 [style=solid label=""] + } + subgraph cluster_233 { + label = "Wait on phase one/To wait view 0/Sample.Any" + subgraph cluster_234 { + label = "Wait on phase one/To wait view 0/Sample.Any/Combine.globally(SampleAny)" + subgraph cluster_235 { + label = "Wait on phase one/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys" + subgraph cluster_236 { + label = "Wait on phase one/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys" + subgraph cluster_237 { + label = "Wait on phase one/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys/Map" + 238 [label="ParMultiDo(Anonymous)"] + 232 -> 238 [style=solid label=""] + } + } + } + subgraph cluster_239 { + label = "Wait on phase one/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)" + 240 [label="GroupByKey"] + 238 -> 240 [style=solid label=""] + subgraph cluster_241 { + label = "Wait on phase one/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues" + subgraph cluster_242 { + label = "Wait on phase one/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues/ParDo(Anonymous)" + 243 [label="ParMultiDo(Anonymous)"] + 240 -> 243 [style=solid label=""] + } + } + } + subgraph cluster_244 { + label = "Wait on phase one/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values" + subgraph cluster_245 { + label = "Wait on phase one/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values" + subgraph cluster_246 { + label = "Wait on phase one/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values/Map" + 247 [label="ParMultiDo(Anonymous)"] + 243 -> 247 [style=solid label=""] + } + } + } + } + subgraph cluster_248 { + label = "Wait on phase one/To wait view 0/Sample.Any/Flatten.Iterables" + subgraph cluster_249 { + label = "Wait on phase one/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables" + subgraph cluster_250 { + label = "Wait on phase one/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables/FlatMap" + 251 [label="ParMultiDo(Anonymous)"] + 247 -> 251 [style=solid label=""] + } + } + } + } + subgraph cluster_252 { + label = "Wait on phase one/To wait view 0/View.AsList" + subgraph cluster_253 { + label = "Wait on phase one/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization" + subgraph cluster_254 { + label = "Wait on phase one/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization/ParDo(VoidKeyToMultimapMaterialization)" + 255 [label="ParMultiDo(VoidKeyToMultimapMaterialization)"] + 251 -> 255 [style=solid label=""] + } + } + 256 [label="View.CreatePCollectionView"] + 255 -> 256 [style=solid label=""] } } subgraph cluster_257 { - label = "Write to sql: DomainBase without circular foreign keys/Write in batch for DomainBase without circular foreign keys" - 258 [label="ParMultiDo(SqlBatchWriter)"] - 256 -> 258 [style=solid label=""] + label = "Wait on phase one/Wait" + subgraph cluster_258 { + label = "Wait on phase one/Wait/Map" + 259 [label="ParMultiDo(Anonymous)"] + 226 -> 259 [style=solid label=""] + 255 -> 259 [style=dashed label=""] + } } } - subgraph cluster_259 { - label = "Wait on DomainBaseNoFkeys" - subgraph cluster_260 { - label = "Wait on DomainBaseNoFkeys/To wait view 0" - subgraph cluster_261 { - label = "Wait on DomainBaseNoFkeys/To wait view 0/Window.Into()" - 262 [label="Flatten.PCollections"] - 258 -> 262 [style=solid label=""] - } - subgraph cluster_263 { - label = "Wait on DomainBaseNoFkeys/To wait view 0/ParDo(CollectWindows)" - 264 [label="ParMultiDo(CollectWindows)"] - 262 -> 264 [style=solid label=""] + subgraph cluster_260 { + label = "Write to sql: DomainBase without circular foreign keys" + subgraph cluster_261 { + label = "Write to sql: DomainBase without circular foreign keys/Shard data for DomainBase without circular foreign keys" + subgraph cluster_262 { + label = "Write to sql: DomainBase without circular foreign keys/Shard data for DomainBase without circular foreign keys/Map" + 263 [label="ParMultiDo(Anonymous)"] + 259 -> 263 [style=solid label=""] } + } + subgraph cluster_264 { + label = "Write to sql: DomainBase without circular foreign keys/Batch output by shard DomainBase without circular foreign keys" subgraph cluster_265 { - label = "Wait on DomainBaseNoFkeys/To wait view 0/Sample.Any" - subgraph cluster_266 { - label = "Wait on DomainBaseNoFkeys/To wait view 0/Sample.Any/Combine.globally(SampleAny)" - subgraph cluster_267 { - label = "Wait on DomainBaseNoFkeys/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys" - subgraph cluster_268 { - label = "Wait on DomainBaseNoFkeys/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys" - subgraph cluster_269 { - label = "Wait on DomainBaseNoFkeys/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys/Map" - 270 [label="ParMultiDo(Anonymous)"] - 264 -> 270 [style=solid label=""] - } - } - } - subgraph cluster_271 { - label = "Wait on DomainBaseNoFkeys/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)" - 272 [label="GroupByKey"] - 270 -> 272 [style=solid label=""] - subgraph cluster_273 { - label = "Wait on DomainBaseNoFkeys/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues" - subgraph cluster_274 { - label = "Wait on DomainBaseNoFkeys/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues/ParDo(Anonymous)" - 275 [label="ParMultiDo(Anonymous)"] - 272 -> 275 [style=solid label=""] - } - } - } - subgraph cluster_276 { - label = "Wait on DomainBaseNoFkeys/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values" - subgraph cluster_277 { - label = "Wait on DomainBaseNoFkeys/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values" - subgraph cluster_278 { - label = "Wait on DomainBaseNoFkeys/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values/Map" - 279 [label="ParMultiDo(Anonymous)"] - 275 -> 279 [style=solid label=""] - } - } - } - } - subgraph cluster_280 { - label = "Wait on DomainBaseNoFkeys/To wait view 0/Sample.Any/Flatten.Iterables" - subgraph cluster_281 { - label = "Wait on DomainBaseNoFkeys/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables" - subgraph cluster_282 { - label = "Wait on DomainBaseNoFkeys/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables/FlatMap" - 283 [label="ParMultiDo(Anonymous)"] - 279 -> 283 [style=solid label=""] - } - } - } - } - subgraph cluster_284 { - label = "Wait on DomainBaseNoFkeys/To wait view 0/View.AsList" - subgraph cluster_285 { - label = "Wait on DomainBaseNoFkeys/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization" - subgraph cluster_286 { - label = "Wait on DomainBaseNoFkeys/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization/ParDo(VoidKeyToMultimapMaterialization)" - 287 [label="ParMultiDo(VoidKeyToMultimapMaterialization)"] - 283 -> 287 [style=solid label=""] - } - } - 288 [label="View.CreatePCollectionView"] - 287 -> 288 [style=solid label=""] + label = "Write to sql: DomainBase without circular foreign keys/Batch output by shard DomainBase without circular foreign keys/ParDo(GroupIntoBatches)" + 266 [label="ParMultiDo(GroupIntoBatches)"] + 263 -> 266 [style=solid label=""] } } - subgraph cluster_289 { - label = "Wait on DomainBaseNoFkeys/Wait" - subgraph cluster_290 { - label = "Wait on DomainBaseNoFkeys/Wait/Map" - 291 [label="ParMultiDo(Anonymous)"] - 79 -> 291 [style=solid label=""] - 287 -> 291 [style=dashed label=""] - } + subgraph cluster_267 { + label = "Write to sql: DomainBase without circular foreign keys/Write in batch for DomainBase without circular foreign keys" + 268 [label="ParMultiDo(SqlBatchWriter)"] + 266 -> 268 [style=solid label=""] } } - subgraph cluster_292 { - label = "Write to sql: Transforms:HostResource" - subgraph cluster_293 { - label = "Write to sql: Transforms:HostResource/Shard data for Transforms:HostResource" - subgraph cluster_294 { - label = "Write to sql: Transforms:HostResource/Shard data for Transforms:HostResource/Map" - 295 [label="ParMultiDo(Anonymous)"] - 291 -> 295 [style=solid label=""] + subgraph cluster_269 { + label = "Wait on DomainBaseNoFkeys" + subgraph cluster_270 { + label = "Wait on DomainBaseNoFkeys/To wait view 0" + subgraph cluster_271 { + label = "Wait on DomainBaseNoFkeys/To wait view 0/Window.Into()" + 272 [label="Flatten.PCollections"] + 268 -> 272 [style=solid label=""] } - } - subgraph cluster_296 { - label = "Write to sql: Transforms:HostResource/Batch output by shard Transforms:HostResource" - subgraph cluster_297 { - label = "Write to sql: Transforms:HostResource/Batch output by shard Transforms:HostResource/ParDo(GroupIntoBatches)" - 298 [label="ParMultiDo(GroupIntoBatches)"] - 295 -> 298 [style=solid label=""] + subgraph cluster_273 { + label = "Wait on DomainBaseNoFkeys/To wait view 0/ParDo(CollectWindows)" + 274 [label="ParMultiDo(CollectWindows)"] + 272 -> 274 [style=solid label=""] + } + subgraph cluster_275 { + label = "Wait on DomainBaseNoFkeys/To wait view 0/Sample.Any" + subgraph cluster_276 { + label = "Wait on DomainBaseNoFkeys/To wait view 0/Sample.Any/Combine.globally(SampleAny)" + subgraph cluster_277 { + label = "Wait on DomainBaseNoFkeys/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys" + subgraph cluster_278 { + label = "Wait on DomainBaseNoFkeys/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys" + subgraph cluster_279 { + label = "Wait on DomainBaseNoFkeys/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys/Map" + 280 [label="ParMultiDo(Anonymous)"] + 274 -> 280 [style=solid label=""] + } + } + } + subgraph cluster_281 { + label = "Wait on DomainBaseNoFkeys/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)" + 282 [label="GroupByKey"] + 280 -> 282 [style=solid label=""] + subgraph cluster_283 { + label = "Wait on DomainBaseNoFkeys/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues" + subgraph cluster_284 { + label = "Wait on DomainBaseNoFkeys/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues/ParDo(Anonymous)" + 285 [label="ParMultiDo(Anonymous)"] + 282 -> 285 [style=solid label=""] + } + } + } + subgraph cluster_286 { + label = "Wait on DomainBaseNoFkeys/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values" + subgraph cluster_287 { + label = "Wait on DomainBaseNoFkeys/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values" + subgraph cluster_288 { + label = "Wait on DomainBaseNoFkeys/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values/Map" + 289 [label="ParMultiDo(Anonymous)"] + 285 -> 289 [style=solid label=""] + } + } + } + } + subgraph cluster_290 { + label = "Wait on DomainBaseNoFkeys/To wait view 0/Sample.Any/Flatten.Iterables" + subgraph cluster_291 { + label = "Wait on DomainBaseNoFkeys/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables" + subgraph cluster_292 { + label = "Wait on DomainBaseNoFkeys/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables/FlatMap" + 293 [label="ParMultiDo(Anonymous)"] + 289 -> 293 [style=solid label=""] + } + } + } + } + subgraph cluster_294 { + label = "Wait on DomainBaseNoFkeys/To wait view 0/View.AsList" + subgraph cluster_295 { + label = "Wait on DomainBaseNoFkeys/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization" + subgraph cluster_296 { + label = "Wait on DomainBaseNoFkeys/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization/ParDo(VoidKeyToMultimapMaterialization)" + 297 [label="ParMultiDo(VoidKeyToMultimapMaterialization)"] + 293 -> 297 [style=solid label=""] + } + } + 298 [label="View.CreatePCollectionView"] + 297 -> 298 [style=solid label=""] } } subgraph cluster_299 { - label = "Write to sql: Transforms:HostResource/Write in batch for Transforms:HostResource" - 300 [label="ParMultiDo(SqlBatchWriter)"] - 298 -> 300 [style=solid label=""] + label = "Wait on DomainBaseNoFkeys/Wait" + subgraph cluster_300 { + label = "Wait on DomainBaseNoFkeys/Wait/Map" + 301 [label="ParMultiDo(Anonymous)"] + 89 -> 301 [style=solid label=""] + 297 -> 301 [style=dashed label=""] + } } } - subgraph cluster_301 { - label = "Wait on Transforms:HostResource" - subgraph cluster_302 { - label = "Wait on Transforms:HostResource/To wait view 0" - subgraph cluster_303 { - label = "Wait on Transforms:HostResource/To wait view 0/Window.Into()" - 304 [label="Flatten.PCollections"] - 300 -> 304 [style=solid label=""] - } - subgraph cluster_305 { - label = "Wait on Transforms:HostResource/To wait view 0/ParDo(CollectWindows)" - 306 [label="ParMultiDo(CollectWindows)"] - 304 -> 306 [style=solid label=""] + subgraph cluster_302 { + label = "Write to sql: Transforms:HostResource" + subgraph cluster_303 { + label = "Write to sql: Transforms:HostResource/Shard data for Transforms:HostResource" + subgraph cluster_304 { + label = "Write to sql: Transforms:HostResource/Shard data for Transforms:HostResource/Map" + 305 [label="ParMultiDo(Anonymous)"] + 301 -> 305 [style=solid label=""] } + } + subgraph cluster_306 { + label = "Write to sql: Transforms:HostResource/Batch output by shard Transforms:HostResource" subgraph cluster_307 { - label = "Wait on Transforms:HostResource/To wait view 0/Sample.Any" - subgraph cluster_308 { - label = "Wait on Transforms:HostResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)" - subgraph cluster_309 { - label = "Wait on Transforms:HostResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys" - subgraph cluster_310 { - label = "Wait on Transforms:HostResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys" - subgraph cluster_311 { - label = "Wait on Transforms:HostResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys/Map" - 312 [label="ParMultiDo(Anonymous)"] - 306 -> 312 [style=solid label=""] - } - } - } - subgraph cluster_313 { - label = "Wait on Transforms:HostResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)" - 314 [label="GroupByKey"] - 312 -> 314 [style=solid label=""] - subgraph cluster_315 { - label = "Wait on Transforms:HostResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues" - subgraph cluster_316 { - label = "Wait on Transforms:HostResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues/ParDo(Anonymous)" - 317 [label="ParMultiDo(Anonymous)"] - 314 -> 317 [style=solid label=""] - } - } - } - subgraph cluster_318 { - label = "Wait on Transforms:HostResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values" - subgraph cluster_319 { - label = "Wait on Transforms:HostResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values" - subgraph cluster_320 { - label = "Wait on Transforms:HostResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values/Map" - 321 [label="ParMultiDo(Anonymous)"] - 317 -> 321 [style=solid label=""] - } - } - } - } - subgraph cluster_322 { - label = "Wait on Transforms:HostResource/To wait view 0/Sample.Any/Flatten.Iterables" - subgraph cluster_323 { - label = "Wait on Transforms:HostResource/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables" - subgraph cluster_324 { - label = "Wait on Transforms:HostResource/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables/FlatMap" - 325 [label="ParMultiDo(Anonymous)"] - 321 -> 325 [style=solid label=""] - } - } - } - } - subgraph cluster_326 { - label = "Wait on Transforms:HostResource/To wait view 0/View.AsList" - subgraph cluster_327 { - label = "Wait on Transforms:HostResource/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization" - subgraph cluster_328 { - label = "Wait on Transforms:HostResource/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization/ParDo(VoidKeyToMultimapMaterialization)" - 329 [label="ParMultiDo(VoidKeyToMultimapMaterialization)"] - 325 -> 329 [style=solid label=""] - } - } - 330 [label="View.CreatePCollectionView"] - 329 -> 330 [style=solid label=""] + label = "Write to sql: Transforms:HostResource/Batch output by shard Transforms:HostResource/ParDo(GroupIntoBatches)" + 308 [label="ParMultiDo(GroupIntoBatches)"] + 305 -> 308 [style=solid label=""] } } - subgraph cluster_331 { - label = "Wait on Transforms:HostResource/Wait" - subgraph cluster_332 { - label = "Wait on Transforms:HostResource/Wait/Map" - 333 [label="ParMultiDo(Anonymous)"] - 79 -> 333 [style=solid label=""] - 329 -> 333 [style=dashed label=""] - } + subgraph cluster_309 { + label = "Write to sql: Transforms:HostResource/Write in batch for Transforms:HostResource" + 310 [label="ParMultiDo(SqlBatchWriter)"] + 308 -> 310 [style=solid label=""] } } - subgraph cluster_334 { - label = "Write to sql: Transforms:HistoryEntry" - subgraph cluster_335 { - label = "Write to sql: Transforms:HistoryEntry/Shard data for Transforms:HistoryEntry" - subgraph cluster_336 { - label = "Write to sql: Transforms:HistoryEntry/Shard data for Transforms:HistoryEntry/Map" - 337 [label="ParMultiDo(Anonymous)"] - 333 -> 337 [style=solid label=""] + subgraph cluster_311 { + label = "Wait on Transforms:HostResource" + subgraph cluster_312 { + label = "Wait on Transforms:HostResource/To wait view 0" + subgraph cluster_313 { + label = "Wait on Transforms:HostResource/To wait view 0/Window.Into()" + 314 [label="Flatten.PCollections"] + 310 -> 314 [style=solid label=""] } - } - subgraph cluster_338 { - label = "Write to sql: Transforms:HistoryEntry/Batch output by shard Transforms:HistoryEntry" - subgraph cluster_339 { - label = "Write to sql: Transforms:HistoryEntry/Batch output by shard Transforms:HistoryEntry/ParDo(GroupIntoBatches)" - 340 [label="ParMultiDo(GroupIntoBatches)"] - 337 -> 340 [style=solid label=""] + subgraph cluster_315 { + label = "Wait on Transforms:HostResource/To wait view 0/ParDo(CollectWindows)" + 316 [label="ParMultiDo(CollectWindows)"] + 314 -> 316 [style=solid label=""] + } + subgraph cluster_317 { + label = "Wait on Transforms:HostResource/To wait view 0/Sample.Any" + subgraph cluster_318 { + label = "Wait on Transforms:HostResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)" + subgraph cluster_319 { + label = "Wait on Transforms:HostResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys" + subgraph cluster_320 { + label = "Wait on Transforms:HostResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys" + subgraph cluster_321 { + label = "Wait on Transforms:HostResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys/Map" + 322 [label="ParMultiDo(Anonymous)"] + 316 -> 322 [style=solid label=""] + } + } + } + subgraph cluster_323 { + label = "Wait on Transforms:HostResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)" + 324 [label="GroupByKey"] + 322 -> 324 [style=solid label=""] + subgraph cluster_325 { + label = "Wait on Transforms:HostResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues" + subgraph cluster_326 { + label = "Wait on Transforms:HostResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues/ParDo(Anonymous)" + 327 [label="ParMultiDo(Anonymous)"] + 324 -> 327 [style=solid label=""] + } + } + } + subgraph cluster_328 { + label = "Wait on Transforms:HostResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values" + subgraph cluster_329 { + label = "Wait on Transforms:HostResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values" + subgraph cluster_330 { + label = "Wait on Transforms:HostResource/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values/Map" + 331 [label="ParMultiDo(Anonymous)"] + 327 -> 331 [style=solid label=""] + } + } + } + } + subgraph cluster_332 { + label = "Wait on Transforms:HostResource/To wait view 0/Sample.Any/Flatten.Iterables" + subgraph cluster_333 { + label = "Wait on Transforms:HostResource/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables" + subgraph cluster_334 { + label = "Wait on Transforms:HostResource/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables/FlatMap" + 335 [label="ParMultiDo(Anonymous)"] + 331 -> 335 [style=solid label=""] + } + } + } + } + subgraph cluster_336 { + label = "Wait on Transforms:HostResource/To wait view 0/View.AsList" + subgraph cluster_337 { + label = "Wait on Transforms:HostResource/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization" + subgraph cluster_338 { + label = "Wait on Transforms:HostResource/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization/ParDo(VoidKeyToMultimapMaterialization)" + 339 [label="ParMultiDo(VoidKeyToMultimapMaterialization)"] + 335 -> 339 [style=solid label=""] + } + } + 340 [label="View.CreatePCollectionView"] + 339 -> 340 [style=solid label=""] } } subgraph cluster_341 { - label = "Write to sql: Transforms:HistoryEntry/Write in batch for Transforms:HistoryEntry" - 342 [label="ParMultiDo(SqlBatchWriter)"] - 340 -> 342 [style=solid label=""] + label = "Wait on Transforms:HostResource/Wait" + subgraph cluster_342 { + label = "Wait on Transforms:HostResource/Wait/Map" + 343 [label="ParMultiDo(Anonymous)"] + 89 -> 343 [style=solid label=""] + 339 -> 343 [style=dashed label=""] + } } } - subgraph cluster_343 { - label = "Wait on Transforms:HistoryEntry" - subgraph cluster_344 { - label = "Wait on Transforms:HistoryEntry/To wait view 0" - subgraph cluster_345 { - label = "Wait on Transforms:HistoryEntry/To wait view 0/Window.Into()" - 346 [label="Flatten.PCollections"] - 342 -> 346 [style=solid label=""] - } - subgraph cluster_347 { - label = "Wait on Transforms:HistoryEntry/To wait view 0/ParDo(CollectWindows)" - 348 [label="ParMultiDo(CollectWindows)"] - 346 -> 348 [style=solid label=""] + subgraph cluster_344 { + label = "Write to sql: Transforms:HistoryEntry" + subgraph cluster_345 { + label = "Write to sql: Transforms:HistoryEntry/Shard data for Transforms:HistoryEntry" + subgraph cluster_346 { + label = "Write to sql: Transforms:HistoryEntry/Shard data for Transforms:HistoryEntry/Map" + 347 [label="ParMultiDo(Anonymous)"] + 343 -> 347 [style=solid label=""] } + } + subgraph cluster_348 { + label = "Write to sql: Transforms:HistoryEntry/Batch output by shard Transforms:HistoryEntry" subgraph cluster_349 { - label = "Wait on Transforms:HistoryEntry/To wait view 0/Sample.Any" - subgraph cluster_350 { - label = "Wait on Transforms:HistoryEntry/To wait view 0/Sample.Any/Combine.globally(SampleAny)" - subgraph cluster_351 { - label = "Wait on Transforms:HistoryEntry/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys" - subgraph cluster_352 { - label = "Wait on Transforms:HistoryEntry/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys" - subgraph cluster_353 { - label = "Wait on Transforms:HistoryEntry/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys/Map" - 354 [label="ParMultiDo(Anonymous)"] - 348 -> 354 [style=solid label=""] - } - } - } - subgraph cluster_355 { - label = "Wait on Transforms:HistoryEntry/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)" - 356 [label="GroupByKey"] - 354 -> 356 [style=solid label=""] - subgraph cluster_357 { - label = "Wait on Transforms:HistoryEntry/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues" - subgraph cluster_358 { - label = "Wait on Transforms:HistoryEntry/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues/ParDo(Anonymous)" - 359 [label="ParMultiDo(Anonymous)"] - 356 -> 359 [style=solid label=""] - } - } - } - subgraph cluster_360 { - label = "Wait on Transforms:HistoryEntry/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values" - subgraph cluster_361 { - label = "Wait on Transforms:HistoryEntry/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values" - subgraph cluster_362 { - label = "Wait on Transforms:HistoryEntry/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values/Map" - 363 [label="ParMultiDo(Anonymous)"] - 359 -> 363 [style=solid label=""] - } - } - } - } - subgraph cluster_364 { - label = "Wait on Transforms:HistoryEntry/To wait view 0/Sample.Any/Flatten.Iterables" - subgraph cluster_365 { - label = "Wait on Transforms:HistoryEntry/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables" - subgraph cluster_366 { - label = "Wait on Transforms:HistoryEntry/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables/FlatMap" - 367 [label="ParMultiDo(Anonymous)"] - 363 -> 367 [style=solid label=""] - } - } - } - } - subgraph cluster_368 { - label = "Wait on Transforms:HistoryEntry/To wait view 0/View.AsList" - subgraph cluster_369 { - label = "Wait on Transforms:HistoryEntry/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization" - subgraph cluster_370 { - label = "Wait on Transforms:HistoryEntry/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization/ParDo(VoidKeyToMultimapMaterialization)" - 371 [label="ParMultiDo(VoidKeyToMultimapMaterialization)"] - 367 -> 371 [style=solid label=""] - } - } - 372 [label="View.CreatePCollectionView"] - 371 -> 372 [style=solid label=""] + label = "Write to sql: Transforms:HistoryEntry/Batch output by shard Transforms:HistoryEntry/ParDo(GroupIntoBatches)" + 350 [label="ParMultiDo(GroupIntoBatches)"] + 347 -> 350 [style=solid label=""] } } - subgraph cluster_373 { - label = "Wait on Transforms:HistoryEntry/Wait" - subgraph cluster_374 { - label = "Wait on Transforms:HistoryEntry/Wait/Map" - 375 [label="ParMultiDo(Anonymous)"] - 79 -> 375 [style=solid label=""] - 371 -> 375 [style=dashed label=""] - } + subgraph cluster_351 { + label = "Write to sql: Transforms:HistoryEntry/Write in batch for Transforms:HistoryEntry" + 352 [label="ParMultiDo(SqlBatchWriter)"] + 350 -> 352 [style=solid label=""] } } - subgraph cluster_376 { - label = "Write to sql: Transforms:AllocationToken" - subgraph cluster_377 { - label = "Write to sql: Transforms:AllocationToken/Shard data for Transforms:AllocationToken" - subgraph cluster_378 { - label = "Write to sql: Transforms:AllocationToken/Shard data for Transforms:AllocationToken/Map" - 379 [label="ParMultiDo(Anonymous)"] - 375 -> 379 [style=solid label=""] + subgraph cluster_353 { + label = "Wait on Transforms:HistoryEntry" + subgraph cluster_354 { + label = "Wait on Transforms:HistoryEntry/To wait view 0" + subgraph cluster_355 { + label = "Wait on Transforms:HistoryEntry/To wait view 0/Window.Into()" + 356 [label="Flatten.PCollections"] + 352 -> 356 [style=solid label=""] } - } - subgraph cluster_380 { - label = "Write to sql: Transforms:AllocationToken/Batch output by shard Transforms:AllocationToken" - subgraph cluster_381 { - label = "Write to sql: Transforms:AllocationToken/Batch output by shard Transforms:AllocationToken/ParDo(GroupIntoBatches)" - 382 [label="ParMultiDo(GroupIntoBatches)"] - 379 -> 382 [style=solid label=""] + subgraph cluster_357 { + label = "Wait on Transforms:HistoryEntry/To wait view 0/ParDo(CollectWindows)" + 358 [label="ParMultiDo(CollectWindows)"] + 356 -> 358 [style=solid label=""] + } + subgraph cluster_359 { + label = "Wait on Transforms:HistoryEntry/To wait view 0/Sample.Any" + subgraph cluster_360 { + label = "Wait on Transforms:HistoryEntry/To wait view 0/Sample.Any/Combine.globally(SampleAny)" + subgraph cluster_361 { + label = "Wait on Transforms:HistoryEntry/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys" + subgraph cluster_362 { + label = "Wait on Transforms:HistoryEntry/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys" + subgraph cluster_363 { + label = "Wait on Transforms:HistoryEntry/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys/Map" + 364 [label="ParMultiDo(Anonymous)"] + 358 -> 364 [style=solid label=""] + } + } + } + subgraph cluster_365 { + label = "Wait on Transforms:HistoryEntry/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)" + 366 [label="GroupByKey"] + 364 -> 366 [style=solid label=""] + subgraph cluster_367 { + label = "Wait on Transforms:HistoryEntry/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues" + subgraph cluster_368 { + label = "Wait on Transforms:HistoryEntry/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues/ParDo(Anonymous)" + 369 [label="ParMultiDo(Anonymous)"] + 366 -> 369 [style=solid label=""] + } + } + } + subgraph cluster_370 { + label = "Wait on Transforms:HistoryEntry/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values" + subgraph cluster_371 { + label = "Wait on Transforms:HistoryEntry/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values" + subgraph cluster_372 { + label = "Wait on Transforms:HistoryEntry/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values/Map" + 373 [label="ParMultiDo(Anonymous)"] + 369 -> 373 [style=solid label=""] + } + } + } + } + subgraph cluster_374 { + label = "Wait on Transforms:HistoryEntry/To wait view 0/Sample.Any/Flatten.Iterables" + subgraph cluster_375 { + label = "Wait on Transforms:HistoryEntry/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables" + subgraph cluster_376 { + label = "Wait on Transforms:HistoryEntry/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables/FlatMap" + 377 [label="ParMultiDo(Anonymous)"] + 373 -> 377 [style=solid label=""] + } + } + } + } + subgraph cluster_378 { + label = "Wait on Transforms:HistoryEntry/To wait view 0/View.AsList" + subgraph cluster_379 { + label = "Wait on Transforms:HistoryEntry/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization" + subgraph cluster_380 { + label = "Wait on Transforms:HistoryEntry/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization/ParDo(VoidKeyToMultimapMaterialization)" + 381 [label="ParMultiDo(VoidKeyToMultimapMaterialization)"] + 377 -> 381 [style=solid label=""] + } + } + 382 [label="View.CreatePCollectionView"] + 381 -> 382 [style=solid label=""] } } subgraph cluster_383 { - label = "Write to sql: Transforms:AllocationToken/Write in batch for Transforms:AllocationToken" - 384 [label="ParMultiDo(SqlBatchWriter)"] - 382 -> 384 [style=solid label=""] + label = "Wait on Transforms:HistoryEntry/Wait" + subgraph cluster_384 { + label = "Wait on Transforms:HistoryEntry/Wait/Map" + 385 [label="ParMultiDo(Anonymous)"] + 89 -> 385 [style=solid label=""] + 381 -> 385 [style=dashed label=""] + } } } - subgraph cluster_385 { - label = "Wait on Transforms:AllocationToken" - subgraph cluster_386 { - label = "Wait on Transforms:AllocationToken/To wait view 0" - subgraph cluster_387 { - label = "Wait on Transforms:AllocationToken/To wait view 0/Window.Into()" - 388 [label="Flatten.PCollections"] - 384 -> 388 [style=solid label=""] - } - subgraph cluster_389 { - label = "Wait on Transforms:AllocationToken/To wait view 0/ParDo(CollectWindows)" - 390 [label="ParMultiDo(CollectWindows)"] - 388 -> 390 [style=solid label=""] + subgraph cluster_386 { + label = "Write to sql: Transforms:AllocationToken" + subgraph cluster_387 { + label = "Write to sql: Transforms:AllocationToken/Shard data for Transforms:AllocationToken" + subgraph cluster_388 { + label = "Write to sql: Transforms:AllocationToken/Shard data for Transforms:AllocationToken/Map" + 389 [label="ParMultiDo(Anonymous)"] + 385 -> 389 [style=solid label=""] } + } + subgraph cluster_390 { + label = "Write to sql: Transforms:AllocationToken/Batch output by shard Transforms:AllocationToken" subgraph cluster_391 { - label = "Wait on Transforms:AllocationToken/To wait view 0/Sample.Any" - subgraph cluster_392 { - label = "Wait on Transforms:AllocationToken/To wait view 0/Sample.Any/Combine.globally(SampleAny)" - subgraph cluster_393 { - label = "Wait on Transforms:AllocationToken/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys" - subgraph cluster_394 { - label = "Wait on Transforms:AllocationToken/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys" - subgraph cluster_395 { - label = "Wait on Transforms:AllocationToken/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys/Map" - 396 [label="ParMultiDo(Anonymous)"] - 390 -> 396 [style=solid label=""] - } - } - } - subgraph cluster_397 { - label = "Wait on Transforms:AllocationToken/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)" - 398 [label="GroupByKey"] - 396 -> 398 [style=solid label=""] - subgraph cluster_399 { - label = "Wait on Transforms:AllocationToken/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues" - subgraph cluster_400 { - label = "Wait on Transforms:AllocationToken/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues/ParDo(Anonymous)" - 401 [label="ParMultiDo(Anonymous)"] - 398 -> 401 [style=solid label=""] - } - } - } - subgraph cluster_402 { - label = "Wait on Transforms:AllocationToken/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values" - subgraph cluster_403 { - label = "Wait on Transforms:AllocationToken/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values" - subgraph cluster_404 { - label = "Wait on Transforms:AllocationToken/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values/Map" - 405 [label="ParMultiDo(Anonymous)"] - 401 -> 405 [style=solid label=""] - } - } - } - } - subgraph cluster_406 { - label = "Wait on Transforms:AllocationToken/To wait view 0/Sample.Any/Flatten.Iterables" - subgraph cluster_407 { - label = "Wait on Transforms:AllocationToken/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables" - subgraph cluster_408 { - label = "Wait on Transforms:AllocationToken/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables/FlatMap" - 409 [label="ParMultiDo(Anonymous)"] - 405 -> 409 [style=solid label=""] - } - } - } - } - subgraph cluster_410 { - label = "Wait on Transforms:AllocationToken/To wait view 0/View.AsList" - subgraph cluster_411 { - label = "Wait on Transforms:AllocationToken/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization" - subgraph cluster_412 { - label = "Wait on Transforms:AllocationToken/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization/ParDo(VoidKeyToMultimapMaterialization)" - 413 [label="ParMultiDo(VoidKeyToMultimapMaterialization)"] - 409 -> 413 [style=solid label=""] - } - } - 414 [label="View.CreatePCollectionView"] - 413 -> 414 [style=solid label=""] + label = "Write to sql: Transforms:AllocationToken/Batch output by shard Transforms:AllocationToken/ParDo(GroupIntoBatches)" + 392 [label="ParMultiDo(GroupIntoBatches)"] + 389 -> 392 [style=solid label=""] } } - subgraph cluster_415 { - label = "Wait on Transforms:AllocationToken/Wait" - subgraph cluster_416 { - label = "Wait on Transforms:AllocationToken/Wait/Map" - 417 [label="ParMultiDo(Anonymous)"] - 79 -> 417 [style=solid label=""] - 413 -> 417 [style=dashed label=""] - } + subgraph cluster_393 { + label = "Write to sql: Transforms:AllocationToken/Write in batch for Transforms:AllocationToken" + 394 [label="ParMultiDo(SqlBatchWriter)"] + 392 -> 394 [style=solid label=""] } } - subgraph cluster_418 { - label = "Write to sql: Transforms:Recurring" - subgraph cluster_419 { - label = "Write to sql: Transforms:Recurring/Shard data for Transforms:Recurring" - subgraph cluster_420 { - label = "Write to sql: Transforms:Recurring/Shard data for Transforms:Recurring/Map" - 421 [label="ParMultiDo(Anonymous)"] - 417 -> 421 [style=solid label=""] + subgraph cluster_395 { + label = "Wait on Transforms:AllocationToken" + subgraph cluster_396 { + label = "Wait on Transforms:AllocationToken/To wait view 0" + subgraph cluster_397 { + label = "Wait on Transforms:AllocationToken/To wait view 0/Window.Into()" + 398 [label="Flatten.PCollections"] + 394 -> 398 [style=solid label=""] } - } - subgraph cluster_422 { - label = "Write to sql: Transforms:Recurring/Batch output by shard Transforms:Recurring" - subgraph cluster_423 { - label = "Write to sql: Transforms:Recurring/Batch output by shard Transforms:Recurring/ParDo(GroupIntoBatches)" - 424 [label="ParMultiDo(GroupIntoBatches)"] - 421 -> 424 [style=solid label=""] + subgraph cluster_399 { + label = "Wait on Transforms:AllocationToken/To wait view 0/ParDo(CollectWindows)" + 400 [label="ParMultiDo(CollectWindows)"] + 398 -> 400 [style=solid label=""] + } + subgraph cluster_401 { + label = "Wait on Transforms:AllocationToken/To wait view 0/Sample.Any" + subgraph cluster_402 { + label = "Wait on Transforms:AllocationToken/To wait view 0/Sample.Any/Combine.globally(SampleAny)" + subgraph cluster_403 { + label = "Wait on Transforms:AllocationToken/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys" + subgraph cluster_404 { + label = "Wait on Transforms:AllocationToken/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys" + subgraph cluster_405 { + label = "Wait on Transforms:AllocationToken/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys/Map" + 406 [label="ParMultiDo(Anonymous)"] + 400 -> 406 [style=solid label=""] + } + } + } + subgraph cluster_407 { + label = "Wait on Transforms:AllocationToken/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)" + 408 [label="GroupByKey"] + 406 -> 408 [style=solid label=""] + subgraph cluster_409 { + label = "Wait on Transforms:AllocationToken/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues" + subgraph cluster_410 { + label = "Wait on Transforms:AllocationToken/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues/ParDo(Anonymous)" + 411 [label="ParMultiDo(Anonymous)"] + 408 -> 411 [style=solid label=""] + } + } + } + subgraph cluster_412 { + label = "Wait on Transforms:AllocationToken/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values" + subgraph cluster_413 { + label = "Wait on Transforms:AllocationToken/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values" + subgraph cluster_414 { + label = "Wait on Transforms:AllocationToken/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values/Map" + 415 [label="ParMultiDo(Anonymous)"] + 411 -> 415 [style=solid label=""] + } + } + } + } + subgraph cluster_416 { + label = "Wait on Transforms:AllocationToken/To wait view 0/Sample.Any/Flatten.Iterables" + subgraph cluster_417 { + label = "Wait on Transforms:AllocationToken/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables" + subgraph cluster_418 { + label = "Wait on Transforms:AllocationToken/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables/FlatMap" + 419 [label="ParMultiDo(Anonymous)"] + 415 -> 419 [style=solid label=""] + } + } + } + } + subgraph cluster_420 { + label = "Wait on Transforms:AllocationToken/To wait view 0/View.AsList" + subgraph cluster_421 { + label = "Wait on Transforms:AllocationToken/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization" + subgraph cluster_422 { + label = "Wait on Transforms:AllocationToken/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization/ParDo(VoidKeyToMultimapMaterialization)" + 423 [label="ParMultiDo(VoidKeyToMultimapMaterialization)"] + 419 -> 423 [style=solid label=""] + } + } + 424 [label="View.CreatePCollectionView"] + 423 -> 424 [style=solid label=""] } } subgraph cluster_425 { - label = "Write to sql: Transforms:Recurring/Write in batch for Transforms:Recurring" - 426 [label="ParMultiDo(SqlBatchWriter)"] - 424 -> 426 [style=solid label=""] + label = "Wait on Transforms:AllocationToken/Wait" + subgraph cluster_426 { + label = "Wait on Transforms:AllocationToken/Wait/Map" + 427 [label="ParMultiDo(Anonymous)"] + 89 -> 427 [style=solid label=""] + 423 -> 427 [style=dashed label=""] + } } } - subgraph cluster_427 { - label = "Wait on Transforms:Recurring" - subgraph cluster_428 { - label = "Wait on Transforms:Recurring/To wait view 0" - subgraph cluster_429 { - label = "Wait on Transforms:Recurring/To wait view 0/Window.Into()" - 430 [label="Flatten.PCollections"] - 426 -> 430 [style=solid label=""] - } - subgraph cluster_431 { - label = "Wait on Transforms:Recurring/To wait view 0/ParDo(CollectWindows)" - 432 [label="ParMultiDo(CollectWindows)"] - 430 -> 432 [style=solid label=""] + subgraph cluster_428 { + label = "Write to sql: Transforms:Recurring" + subgraph cluster_429 { + label = "Write to sql: Transforms:Recurring/Shard data for Transforms:Recurring" + subgraph cluster_430 { + label = "Write to sql: Transforms:Recurring/Shard data for Transforms:Recurring/Map" + 431 [label="ParMultiDo(Anonymous)"] + 427 -> 431 [style=solid label=""] } + } + subgraph cluster_432 { + label = "Write to sql: Transforms:Recurring/Batch output by shard Transforms:Recurring" subgraph cluster_433 { - label = "Wait on Transforms:Recurring/To wait view 0/Sample.Any" - subgraph cluster_434 { - label = "Wait on Transforms:Recurring/To wait view 0/Sample.Any/Combine.globally(SampleAny)" - subgraph cluster_435 { - label = "Wait on Transforms:Recurring/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys" - subgraph cluster_436 { - label = "Wait on Transforms:Recurring/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys" - subgraph cluster_437 { - label = "Wait on Transforms:Recurring/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys/Map" - 438 [label="ParMultiDo(Anonymous)"] - 432 -> 438 [style=solid label=""] - } - } - } - subgraph cluster_439 { - label = "Wait on Transforms:Recurring/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)" - 440 [label="GroupByKey"] - 438 -> 440 [style=solid label=""] - subgraph cluster_441 { - label = "Wait on Transforms:Recurring/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues" - subgraph cluster_442 { - label = "Wait on Transforms:Recurring/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues/ParDo(Anonymous)" - 443 [label="ParMultiDo(Anonymous)"] - 440 -> 443 [style=solid label=""] - } - } - } - subgraph cluster_444 { - label = "Wait on Transforms:Recurring/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values" - subgraph cluster_445 { - label = "Wait on Transforms:Recurring/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values" - subgraph cluster_446 { - label = "Wait on Transforms:Recurring/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values/Map" - 447 [label="ParMultiDo(Anonymous)"] - 443 -> 447 [style=solid label=""] - } - } - } - } - subgraph cluster_448 { - label = "Wait on Transforms:Recurring/To wait view 0/Sample.Any/Flatten.Iterables" - subgraph cluster_449 { - label = "Wait on Transforms:Recurring/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables" - subgraph cluster_450 { - label = "Wait on Transforms:Recurring/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables/FlatMap" - 451 [label="ParMultiDo(Anonymous)"] - 447 -> 451 [style=solid label=""] - } - } - } - } - subgraph cluster_452 { - label = "Wait on Transforms:Recurring/To wait view 0/View.AsList" - subgraph cluster_453 { - label = "Wait on Transforms:Recurring/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization" - subgraph cluster_454 { - label = "Wait on Transforms:Recurring/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization/ParDo(VoidKeyToMultimapMaterialization)" - 455 [label="ParMultiDo(VoidKeyToMultimapMaterialization)"] - 451 -> 455 [style=solid label=""] - } - } - 456 [label="View.CreatePCollectionView"] - 455 -> 456 [style=solid label=""] + label = "Write to sql: Transforms:Recurring/Batch output by shard Transforms:Recurring/ParDo(GroupIntoBatches)" + 434 [label="ParMultiDo(GroupIntoBatches)"] + 431 -> 434 [style=solid label=""] } } - subgraph cluster_457 { - label = "Wait on Transforms:Recurring/Wait" - subgraph cluster_458 { - label = "Wait on Transforms:Recurring/Wait/Map" - 459 [label="ParMultiDo(Anonymous)"] - 79 -> 459 [style=solid label=""] - 455 -> 459 [style=dashed label=""] - } + subgraph cluster_435 { + label = "Write to sql: Transforms:Recurring/Write in batch for Transforms:Recurring" + 436 [label="ParMultiDo(SqlBatchWriter)"] + 434 -> 436 [style=solid label=""] } } - subgraph cluster_460 { - label = "Write to sql: Transforms:OneTime" - subgraph cluster_461 { - label = "Write to sql: Transforms:OneTime/Shard data for Transforms:OneTime" - subgraph cluster_462 { - label = "Write to sql: Transforms:OneTime/Shard data for Transforms:OneTime/Map" - 463 [label="ParMultiDo(Anonymous)"] - 459 -> 463 [style=solid label=""] + subgraph cluster_437 { + label = "Wait on Transforms:Recurring" + subgraph cluster_438 { + label = "Wait on Transforms:Recurring/To wait view 0" + subgraph cluster_439 { + label = "Wait on Transforms:Recurring/To wait view 0/Window.Into()" + 440 [label="Flatten.PCollections"] + 436 -> 440 [style=solid label=""] } - } - subgraph cluster_464 { - label = "Write to sql: Transforms:OneTime/Batch output by shard Transforms:OneTime" - subgraph cluster_465 { - label = "Write to sql: Transforms:OneTime/Batch output by shard Transforms:OneTime/ParDo(GroupIntoBatches)" - 466 [label="ParMultiDo(GroupIntoBatches)"] - 463 -> 466 [style=solid label=""] + subgraph cluster_441 { + label = "Wait on Transforms:Recurring/To wait view 0/ParDo(CollectWindows)" + 442 [label="ParMultiDo(CollectWindows)"] + 440 -> 442 [style=solid label=""] + } + subgraph cluster_443 { + label = "Wait on Transforms:Recurring/To wait view 0/Sample.Any" + subgraph cluster_444 { + label = "Wait on Transforms:Recurring/To wait view 0/Sample.Any/Combine.globally(SampleAny)" + subgraph cluster_445 { + label = "Wait on Transforms:Recurring/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys" + subgraph cluster_446 { + label = "Wait on Transforms:Recurring/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys" + subgraph cluster_447 { + label = "Wait on Transforms:Recurring/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys/Map" + 448 [label="ParMultiDo(Anonymous)"] + 442 -> 448 [style=solid label=""] + } + } + } + subgraph cluster_449 { + label = "Wait on Transforms:Recurring/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)" + 450 [label="GroupByKey"] + 448 -> 450 [style=solid label=""] + subgraph cluster_451 { + label = "Wait on Transforms:Recurring/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues" + subgraph cluster_452 { + label = "Wait on Transforms:Recurring/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues/ParDo(Anonymous)" + 453 [label="ParMultiDo(Anonymous)"] + 450 -> 453 [style=solid label=""] + } + } + } + subgraph cluster_454 { + label = "Wait on Transforms:Recurring/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values" + subgraph cluster_455 { + label = "Wait on Transforms:Recurring/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values" + subgraph cluster_456 { + label = "Wait on Transforms:Recurring/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values/Map" + 457 [label="ParMultiDo(Anonymous)"] + 453 -> 457 [style=solid label=""] + } + } + } + } + subgraph cluster_458 { + label = "Wait on Transforms:Recurring/To wait view 0/Sample.Any/Flatten.Iterables" + subgraph cluster_459 { + label = "Wait on Transforms:Recurring/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables" + subgraph cluster_460 { + label = "Wait on Transforms:Recurring/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables/FlatMap" + 461 [label="ParMultiDo(Anonymous)"] + 457 -> 461 [style=solid label=""] + } + } + } + } + subgraph cluster_462 { + label = "Wait on Transforms:Recurring/To wait view 0/View.AsList" + subgraph cluster_463 { + label = "Wait on Transforms:Recurring/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization" + subgraph cluster_464 { + label = "Wait on Transforms:Recurring/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization/ParDo(VoidKeyToMultimapMaterialization)" + 465 [label="ParMultiDo(VoidKeyToMultimapMaterialization)"] + 461 -> 465 [style=solid label=""] + } + } + 466 [label="View.CreatePCollectionView"] + 465 -> 466 [style=solid label=""] } } subgraph cluster_467 { - label = "Write to sql: Transforms:OneTime/Write in batch for Transforms:OneTime" - 468 [label="ParMultiDo(SqlBatchWriter)"] - 466 -> 468 [style=solid label=""] + label = "Wait on Transforms:Recurring/Wait" + subgraph cluster_468 { + label = "Wait on Transforms:Recurring/Wait/Map" + 469 [label="ParMultiDo(Anonymous)"] + 89 -> 469 [style=solid label=""] + 465 -> 469 [style=dashed label=""] + } } } - subgraph cluster_469 { - label = "Wait on Transforms:OneTime" - subgraph cluster_470 { - label = "Wait on Transforms:OneTime/To wait view 0" - subgraph cluster_471 { - label = "Wait on Transforms:OneTime/To wait view 0/Window.Into()" - 472 [label="Flatten.PCollections"] - 468 -> 472 [style=solid label=""] - } - subgraph cluster_473 { - label = "Wait on Transforms:OneTime/To wait view 0/ParDo(CollectWindows)" - 474 [label="ParMultiDo(CollectWindows)"] - 472 -> 474 [style=solid label=""] + subgraph cluster_470 { + label = "Write to sql: Transforms:OneTime" + subgraph cluster_471 { + label = "Write to sql: Transforms:OneTime/Shard data for Transforms:OneTime" + subgraph cluster_472 { + label = "Write to sql: Transforms:OneTime/Shard data for Transforms:OneTime/Map" + 473 [label="ParMultiDo(Anonymous)"] + 469 -> 473 [style=solid label=""] } + } + subgraph cluster_474 { + label = "Write to sql: Transforms:OneTime/Batch output by shard Transforms:OneTime" subgraph cluster_475 { - label = "Wait on Transforms:OneTime/To wait view 0/Sample.Any" - subgraph cluster_476 { - label = "Wait on Transforms:OneTime/To wait view 0/Sample.Any/Combine.globally(SampleAny)" - subgraph cluster_477 { - label = "Wait on Transforms:OneTime/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys" - subgraph cluster_478 { - label = "Wait on Transforms:OneTime/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys" - subgraph cluster_479 { - label = "Wait on Transforms:OneTime/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys/Map" - 480 [label="ParMultiDo(Anonymous)"] - 474 -> 480 [style=solid label=""] - } - } - } - subgraph cluster_481 { - label = "Wait on Transforms:OneTime/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)" - 482 [label="GroupByKey"] - 480 -> 482 [style=solid label=""] - subgraph cluster_483 { - label = "Wait on Transforms:OneTime/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues" - subgraph cluster_484 { - label = "Wait on Transforms:OneTime/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues/ParDo(Anonymous)" - 485 [label="ParMultiDo(Anonymous)"] - 482 -> 485 [style=solid label=""] - } - } - } - subgraph cluster_486 { - label = "Wait on Transforms:OneTime/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values" - subgraph cluster_487 { - label = "Wait on Transforms:OneTime/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values" - subgraph cluster_488 { - label = "Wait on Transforms:OneTime/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values/Map" - 489 [label="ParMultiDo(Anonymous)"] - 485 -> 489 [style=solid label=""] - } - } - } - } - subgraph cluster_490 { - label = "Wait on Transforms:OneTime/To wait view 0/Sample.Any/Flatten.Iterables" - subgraph cluster_491 { - label = "Wait on Transforms:OneTime/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables" - subgraph cluster_492 { - label = "Wait on Transforms:OneTime/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables/FlatMap" - 493 [label="ParMultiDo(Anonymous)"] - 489 -> 493 [style=solid label=""] - } - } - } - } - subgraph cluster_494 { - label = "Wait on Transforms:OneTime/To wait view 0/View.AsList" - subgraph cluster_495 { - label = "Wait on Transforms:OneTime/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization" - subgraph cluster_496 { - label = "Wait on Transforms:OneTime/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization/ParDo(VoidKeyToMultimapMaterialization)" - 497 [label="ParMultiDo(VoidKeyToMultimapMaterialization)"] - 493 -> 497 [style=solid label=""] - } - } - 498 [label="View.CreatePCollectionView"] - 497 -> 498 [style=solid label=""] + label = "Write to sql: Transforms:OneTime/Batch output by shard Transforms:OneTime/ParDo(GroupIntoBatches)" + 476 [label="ParMultiDo(GroupIntoBatches)"] + 473 -> 476 [style=solid label=""] } } - subgraph cluster_499 { - label = "Wait on Transforms:OneTime/Wait" - subgraph cluster_500 { - label = "Wait on Transforms:OneTime/Wait/Map" - 501 [label="ParMultiDo(Anonymous)"] - 79 -> 501 [style=solid label=""] - 497 -> 501 [style=dashed label=""] - } + subgraph cluster_477 { + label = "Write to sql: Transforms:OneTime/Write in batch for Transforms:OneTime" + 478 [label="ParMultiDo(SqlBatchWriter)"] + 476 -> 478 [style=solid label=""] } } - subgraph cluster_502 { - label = "Write to sql: Transforms:Cancellation" - subgraph cluster_503 { - label = "Write to sql: Transforms:Cancellation/Shard data for Transforms:Cancellation" - subgraph cluster_504 { - label = "Write to sql: Transforms:Cancellation/Shard data for Transforms:Cancellation/Map" - 505 [label="ParMultiDo(Anonymous)"] - 501 -> 505 [style=solid label=""] + subgraph cluster_479 { + label = "Wait on Transforms:OneTime" + subgraph cluster_480 { + label = "Wait on Transforms:OneTime/To wait view 0" + subgraph cluster_481 { + label = "Wait on Transforms:OneTime/To wait view 0/Window.Into()" + 482 [label="Flatten.PCollections"] + 478 -> 482 [style=solid label=""] } - } - subgraph cluster_506 { - label = "Write to sql: Transforms:Cancellation/Batch output by shard Transforms:Cancellation" - subgraph cluster_507 { - label = "Write to sql: Transforms:Cancellation/Batch output by shard Transforms:Cancellation/ParDo(GroupIntoBatches)" - 508 [label="ParMultiDo(GroupIntoBatches)"] - 505 -> 508 [style=solid label=""] + subgraph cluster_483 { + label = "Wait on Transforms:OneTime/To wait view 0/ParDo(CollectWindows)" + 484 [label="ParMultiDo(CollectWindows)"] + 482 -> 484 [style=solid label=""] + } + subgraph cluster_485 { + label = "Wait on Transforms:OneTime/To wait view 0/Sample.Any" + subgraph cluster_486 { + label = "Wait on Transforms:OneTime/To wait view 0/Sample.Any/Combine.globally(SampleAny)" + subgraph cluster_487 { + label = "Wait on Transforms:OneTime/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys" + subgraph cluster_488 { + label = "Wait on Transforms:OneTime/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys" + subgraph cluster_489 { + label = "Wait on Transforms:OneTime/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys/Map" + 490 [label="ParMultiDo(Anonymous)"] + 484 -> 490 [style=solid label=""] + } + } + } + subgraph cluster_491 { + label = "Wait on Transforms:OneTime/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)" + 492 [label="GroupByKey"] + 490 -> 492 [style=solid label=""] + subgraph cluster_493 { + label = "Wait on Transforms:OneTime/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues" + subgraph cluster_494 { + label = "Wait on Transforms:OneTime/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues/ParDo(Anonymous)" + 495 [label="ParMultiDo(Anonymous)"] + 492 -> 495 [style=solid label=""] + } + } + } + subgraph cluster_496 { + label = "Wait on Transforms:OneTime/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values" + subgraph cluster_497 { + label = "Wait on Transforms:OneTime/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values" + subgraph cluster_498 { + label = "Wait on Transforms:OneTime/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values/Map" + 499 [label="ParMultiDo(Anonymous)"] + 495 -> 499 [style=solid label=""] + } + } + } + } + subgraph cluster_500 { + label = "Wait on Transforms:OneTime/To wait view 0/Sample.Any/Flatten.Iterables" + subgraph cluster_501 { + label = "Wait on Transforms:OneTime/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables" + subgraph cluster_502 { + label = "Wait on Transforms:OneTime/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables/FlatMap" + 503 [label="ParMultiDo(Anonymous)"] + 499 -> 503 [style=solid label=""] + } + } + } + } + subgraph cluster_504 { + label = "Wait on Transforms:OneTime/To wait view 0/View.AsList" + subgraph cluster_505 { + label = "Wait on Transforms:OneTime/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization" + subgraph cluster_506 { + label = "Wait on Transforms:OneTime/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization/ParDo(VoidKeyToMultimapMaterialization)" + 507 [label="ParMultiDo(VoidKeyToMultimapMaterialization)"] + 503 -> 507 [style=solid label=""] + } + } + 508 [label="View.CreatePCollectionView"] + 507 -> 508 [style=solid label=""] } } subgraph cluster_509 { - label = "Write to sql: Transforms:Cancellation/Write in batch for Transforms:Cancellation" - 510 [label="ParMultiDo(SqlBatchWriter)"] - 508 -> 510 [style=solid label=""] + label = "Wait on Transforms:OneTime/Wait" + subgraph cluster_510 { + label = "Wait on Transforms:OneTime/Wait/Map" + 511 [label="ParMultiDo(Anonymous)"] + 89 -> 511 [style=solid label=""] + 507 -> 511 [style=dashed label=""] + } } } - subgraph cluster_511 { - label = "Wait on Transforms:Cancellation" - subgraph cluster_512 { - label = "Wait on Transforms:Cancellation/To wait view 0" - subgraph cluster_513 { - label = "Wait on Transforms:Cancellation/To wait view 0/Window.Into()" - 514 [label="Flatten.PCollections"] - 510 -> 514 [style=solid label=""] - } - subgraph cluster_515 { - label = "Wait on Transforms:Cancellation/To wait view 0/ParDo(CollectWindows)" - 516 [label="ParMultiDo(CollectWindows)"] - 514 -> 516 [style=solid label=""] + subgraph cluster_512 { + label = "Write to sql: Transforms:Cancellation" + subgraph cluster_513 { + label = "Write to sql: Transforms:Cancellation/Shard data for Transforms:Cancellation" + subgraph cluster_514 { + label = "Write to sql: Transforms:Cancellation/Shard data for Transforms:Cancellation/Map" + 515 [label="ParMultiDo(Anonymous)"] + 511 -> 515 [style=solid label=""] } + } + subgraph cluster_516 { + label = "Write to sql: Transforms:Cancellation/Batch output by shard Transforms:Cancellation" subgraph cluster_517 { - label = "Wait on Transforms:Cancellation/To wait view 0/Sample.Any" - subgraph cluster_518 { - label = "Wait on Transforms:Cancellation/To wait view 0/Sample.Any/Combine.globally(SampleAny)" - subgraph cluster_519 { - label = "Wait on Transforms:Cancellation/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys" - subgraph cluster_520 { - label = "Wait on Transforms:Cancellation/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys" - subgraph cluster_521 { - label = "Wait on Transforms:Cancellation/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys/Map" - 522 [label="ParMultiDo(Anonymous)"] - 516 -> 522 [style=solid label=""] - } - } - } - subgraph cluster_523 { - label = "Wait on Transforms:Cancellation/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)" - 524 [label="GroupByKey"] - 522 -> 524 [style=solid label=""] - subgraph cluster_525 { - label = "Wait on Transforms:Cancellation/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues" - subgraph cluster_526 { - label = "Wait on Transforms:Cancellation/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues/ParDo(Anonymous)" - 527 [label="ParMultiDo(Anonymous)"] - 524 -> 527 [style=solid label=""] - } - } - } - subgraph cluster_528 { - label = "Wait on Transforms:Cancellation/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values" - subgraph cluster_529 { - label = "Wait on Transforms:Cancellation/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values" - subgraph cluster_530 { - label = "Wait on Transforms:Cancellation/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values/Map" - 531 [label="ParMultiDo(Anonymous)"] - 527 -> 531 [style=solid label=""] - } - } - } - } - subgraph cluster_532 { - label = "Wait on Transforms:Cancellation/To wait view 0/Sample.Any/Flatten.Iterables" - subgraph cluster_533 { - label = "Wait on Transforms:Cancellation/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables" - subgraph cluster_534 { - label = "Wait on Transforms:Cancellation/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables/FlatMap" - 535 [label="ParMultiDo(Anonymous)"] - 531 -> 535 [style=solid label=""] - } - } - } - } - subgraph cluster_536 { - label = "Wait on Transforms:Cancellation/To wait view 0/View.AsList" - subgraph cluster_537 { - label = "Wait on Transforms:Cancellation/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization" - subgraph cluster_538 { - label = "Wait on Transforms:Cancellation/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization/ParDo(VoidKeyToMultimapMaterialization)" - 539 [label="ParMultiDo(VoidKeyToMultimapMaterialization)"] - 535 -> 539 [style=solid label=""] - } - } - 540 [label="View.CreatePCollectionView"] - 539 -> 540 [style=solid label=""] + label = "Write to sql: Transforms:Cancellation/Batch output by shard Transforms:Cancellation/ParDo(GroupIntoBatches)" + 518 [label="ParMultiDo(GroupIntoBatches)"] + 515 -> 518 [style=solid label=""] } } - subgraph cluster_541 { - label = "Wait on Transforms:Cancellation/Wait" - subgraph cluster_542 { - label = "Wait on Transforms:Cancellation/Wait/Map" - 543 [label="ParMultiDo(Anonymous)"] - 79 -> 543 [style=solid label=""] - 539 -> 543 [style=dashed label=""] - } + subgraph cluster_519 { + label = "Write to sql: Transforms:Cancellation/Write in batch for Transforms:Cancellation" + 520 [label="ParMultiDo(SqlBatchWriter)"] + 518 -> 520 [style=solid label=""] } } - subgraph cluster_544 { - label = "Write to sql: Transforms:PollMessage" - subgraph cluster_545 { - label = "Write to sql: Transforms:PollMessage/Shard data for Transforms:PollMessage" - subgraph cluster_546 { - label = "Write to sql: Transforms:PollMessage/Shard data for Transforms:PollMessage/Map" - 547 [label="ParMultiDo(Anonymous)"] - 543 -> 547 [style=solid label=""] + subgraph cluster_521 { + label = "Wait on Transforms:Cancellation" + subgraph cluster_522 { + label = "Wait on Transforms:Cancellation/To wait view 0" + subgraph cluster_523 { + label = "Wait on Transforms:Cancellation/To wait view 0/Window.Into()" + 524 [label="Flatten.PCollections"] + 520 -> 524 [style=solid label=""] } - } - subgraph cluster_548 { - label = "Write to sql: Transforms:PollMessage/Batch output by shard Transforms:PollMessage" - subgraph cluster_549 { - label = "Write to sql: Transforms:PollMessage/Batch output by shard Transforms:PollMessage/ParDo(GroupIntoBatches)" - 550 [label="ParMultiDo(GroupIntoBatches)"] - 547 -> 550 [style=solid label=""] + subgraph cluster_525 { + label = "Wait on Transforms:Cancellation/To wait view 0/ParDo(CollectWindows)" + 526 [label="ParMultiDo(CollectWindows)"] + 524 -> 526 [style=solid label=""] + } + subgraph cluster_527 { + label = "Wait on Transforms:Cancellation/To wait view 0/Sample.Any" + subgraph cluster_528 { + label = "Wait on Transforms:Cancellation/To wait view 0/Sample.Any/Combine.globally(SampleAny)" + subgraph cluster_529 { + label = "Wait on Transforms:Cancellation/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys" + subgraph cluster_530 { + label = "Wait on Transforms:Cancellation/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys" + subgraph cluster_531 { + label = "Wait on Transforms:Cancellation/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys/Map" + 532 [label="ParMultiDo(Anonymous)"] + 526 -> 532 [style=solid label=""] + } + } + } + subgraph cluster_533 { + label = "Wait on Transforms:Cancellation/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)" + 534 [label="GroupByKey"] + 532 -> 534 [style=solid label=""] + subgraph cluster_535 { + label = "Wait on Transforms:Cancellation/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues" + subgraph cluster_536 { + label = "Wait on Transforms:Cancellation/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues/ParDo(Anonymous)" + 537 [label="ParMultiDo(Anonymous)"] + 534 -> 537 [style=solid label=""] + } + } + } + subgraph cluster_538 { + label = "Wait on Transforms:Cancellation/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values" + subgraph cluster_539 { + label = "Wait on Transforms:Cancellation/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values" + subgraph cluster_540 { + label = "Wait on Transforms:Cancellation/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values/Map" + 541 [label="ParMultiDo(Anonymous)"] + 537 -> 541 [style=solid label=""] + } + } + } + } + subgraph cluster_542 { + label = "Wait on Transforms:Cancellation/To wait view 0/Sample.Any/Flatten.Iterables" + subgraph cluster_543 { + label = "Wait on Transforms:Cancellation/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables" + subgraph cluster_544 { + label = "Wait on Transforms:Cancellation/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables/FlatMap" + 545 [label="ParMultiDo(Anonymous)"] + 541 -> 545 [style=solid label=""] + } + } + } + } + subgraph cluster_546 { + label = "Wait on Transforms:Cancellation/To wait view 0/View.AsList" + subgraph cluster_547 { + label = "Wait on Transforms:Cancellation/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization" + subgraph cluster_548 { + label = "Wait on Transforms:Cancellation/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization/ParDo(VoidKeyToMultimapMaterialization)" + 549 [label="ParMultiDo(VoidKeyToMultimapMaterialization)"] + 545 -> 549 [style=solid label=""] + } + } + 550 [label="View.CreatePCollectionView"] + 549 -> 550 [style=solid label=""] } } subgraph cluster_551 { - label = "Write to sql: Transforms:PollMessage/Write in batch for Transforms:PollMessage" - 552 [label="ParMultiDo(SqlBatchWriter)"] - 550 -> 552 [style=solid label=""] + label = "Wait on Transforms:Cancellation/Wait" + subgraph cluster_552 { + label = "Wait on Transforms:Cancellation/Wait/Map" + 553 [label="ParMultiDo(Anonymous)"] + 89 -> 553 [style=solid label=""] + 549 -> 553 [style=dashed label=""] + } } } - subgraph cluster_553 { - label = "Wait on Transforms:PollMessage" - subgraph cluster_554 { - label = "Wait on Transforms:PollMessage/To wait view 0" - subgraph cluster_555 { - label = "Wait on Transforms:PollMessage/To wait view 0/Window.Into()" - 556 [label="Flatten.PCollections"] - 552 -> 556 [style=solid label=""] - } - subgraph cluster_557 { - label = "Wait on Transforms:PollMessage/To wait view 0/ParDo(CollectWindows)" - 558 [label="ParMultiDo(CollectWindows)"] - 556 -> 558 [style=solid label=""] + subgraph cluster_554 { + label = "Write to sql: Transforms:PollMessage" + subgraph cluster_555 { + label = "Write to sql: Transforms:PollMessage/Shard data for Transforms:PollMessage" + subgraph cluster_556 { + label = "Write to sql: Transforms:PollMessage/Shard data for Transforms:PollMessage/Map" + 557 [label="ParMultiDo(Anonymous)"] + 553 -> 557 [style=solid label=""] } + } + subgraph cluster_558 { + label = "Write to sql: Transforms:PollMessage/Batch output by shard Transforms:PollMessage" subgraph cluster_559 { - label = "Wait on Transforms:PollMessage/To wait view 0/Sample.Any" - subgraph cluster_560 { - label = "Wait on Transforms:PollMessage/To wait view 0/Sample.Any/Combine.globally(SampleAny)" - subgraph cluster_561 { - label = "Wait on Transforms:PollMessage/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys" - subgraph cluster_562 { - label = "Wait on Transforms:PollMessage/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys" - subgraph cluster_563 { - label = "Wait on Transforms:PollMessage/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys/Map" - 564 [label="ParMultiDo(Anonymous)"] - 558 -> 564 [style=solid label=""] - } - } - } - subgraph cluster_565 { - label = "Wait on Transforms:PollMessage/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)" - 566 [label="GroupByKey"] - 564 -> 566 [style=solid label=""] - subgraph cluster_567 { - label = "Wait on Transforms:PollMessage/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues" - subgraph cluster_568 { - label = "Wait on Transforms:PollMessage/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues/ParDo(Anonymous)" - 569 [label="ParMultiDo(Anonymous)"] - 566 -> 569 [style=solid label=""] - } - } - } - subgraph cluster_570 { - label = "Wait on Transforms:PollMessage/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values" - subgraph cluster_571 { - label = "Wait on Transforms:PollMessage/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values" - subgraph cluster_572 { - label = "Wait on Transforms:PollMessage/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values/Map" - 573 [label="ParMultiDo(Anonymous)"] - 569 -> 573 [style=solid label=""] - } - } - } - } - subgraph cluster_574 { - label = "Wait on Transforms:PollMessage/To wait view 0/Sample.Any/Flatten.Iterables" - subgraph cluster_575 { - label = "Wait on Transforms:PollMessage/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables" - subgraph cluster_576 { - label = "Wait on Transforms:PollMessage/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables/FlatMap" - 577 [label="ParMultiDo(Anonymous)"] - 573 -> 577 [style=solid label=""] - } - } - } - } - subgraph cluster_578 { - label = "Wait on Transforms:PollMessage/To wait view 0/View.AsList" - subgraph cluster_579 { - label = "Wait on Transforms:PollMessage/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization" - subgraph cluster_580 { - label = "Wait on Transforms:PollMessage/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization/ParDo(VoidKeyToMultimapMaterialization)" - 581 [label="ParMultiDo(VoidKeyToMultimapMaterialization)"] - 577 -> 581 [style=solid label=""] - } - } - 582 [label="View.CreatePCollectionView"] - 581 -> 582 [style=solid label=""] + label = "Write to sql: Transforms:PollMessage/Batch output by shard Transforms:PollMessage/ParDo(GroupIntoBatches)" + 560 [label="ParMultiDo(GroupIntoBatches)"] + 557 -> 560 [style=solid label=""] } } - subgraph cluster_583 { - label = "Wait on Transforms:PollMessage/Wait" - subgraph cluster_584 { - label = "Wait on Transforms:PollMessage/Wait/Map" - 585 [label="ParMultiDo(Anonymous)"] - 79 -> 585 [style=solid label=""] - 581 -> 585 [style=dashed label=""] - } + subgraph cluster_561 { + label = "Write to sql: Transforms:PollMessage/Write in batch for Transforms:PollMessage" + 562 [label="ParMultiDo(SqlBatchWriter)"] + 560 -> 562 [style=solid label=""] } } - subgraph cluster_586 { - label = "Write to sql: Transforms:DomainBase" - subgraph cluster_587 { - label = "Write to sql: Transforms:DomainBase/Shard data for Transforms:DomainBase" - subgraph cluster_588 { - label = "Write to sql: Transforms:DomainBase/Shard data for Transforms:DomainBase/Map" - 589 [label="ParMultiDo(Anonymous)"] - 585 -> 589 [style=solid label=""] + subgraph cluster_563 { + label = "Wait on Transforms:PollMessage" + subgraph cluster_564 { + label = "Wait on Transforms:PollMessage/To wait view 0" + subgraph cluster_565 { + label = "Wait on Transforms:PollMessage/To wait view 0/Window.Into()" + 566 [label="Flatten.PCollections"] + 562 -> 566 [style=solid label=""] } - } - subgraph cluster_590 { - label = "Write to sql: Transforms:DomainBase/Batch output by shard Transforms:DomainBase" - subgraph cluster_591 { - label = "Write to sql: Transforms:DomainBase/Batch output by shard Transforms:DomainBase/ParDo(GroupIntoBatches)" - 592 [label="ParMultiDo(GroupIntoBatches)"] - 589 -> 592 [style=solid label=""] + subgraph cluster_567 { + label = "Wait on Transforms:PollMessage/To wait view 0/ParDo(CollectWindows)" + 568 [label="ParMultiDo(CollectWindows)"] + 566 -> 568 [style=solid label=""] + } + subgraph cluster_569 { + label = "Wait on Transforms:PollMessage/To wait view 0/Sample.Any" + subgraph cluster_570 { + label = "Wait on Transforms:PollMessage/To wait view 0/Sample.Any/Combine.globally(SampleAny)" + subgraph cluster_571 { + label = "Wait on Transforms:PollMessage/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys" + subgraph cluster_572 { + label = "Wait on Transforms:PollMessage/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys" + subgraph cluster_573 { + label = "Wait on Transforms:PollMessage/To wait view 0/Sample.Any/Combine.globally(SampleAny)/WithKeys/AddKeys/Map" + 574 [label="ParMultiDo(Anonymous)"] + 568 -> 574 [style=solid label=""] + } + } + } + subgraph cluster_575 { + label = "Wait on Transforms:PollMessage/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)" + 576 [label="GroupByKey"] + 574 -> 576 [style=solid label=""] + subgraph cluster_577 { + label = "Wait on Transforms:PollMessage/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues" + subgraph cluster_578 { + label = "Wait on Transforms:PollMessage/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Combine.perKey(SampleAny)/Combine.GroupedValues/ParDo(Anonymous)" + 579 [label="ParMultiDo(Anonymous)"] + 576 -> 579 [style=solid label=""] + } + } + } + subgraph cluster_580 { + label = "Wait on Transforms:PollMessage/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values" + subgraph cluster_581 { + label = "Wait on Transforms:PollMessage/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values" + subgraph cluster_582 { + label = "Wait on Transforms:PollMessage/To wait view 0/Sample.Any/Combine.globally(SampleAny)/Values/Values/Map" + 583 [label="ParMultiDo(Anonymous)"] + 579 -> 583 [style=solid label=""] + } + } + } + } + subgraph cluster_584 { + label = "Wait on Transforms:PollMessage/To wait view 0/Sample.Any/Flatten.Iterables" + subgraph cluster_585 { + label = "Wait on Transforms:PollMessage/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables" + subgraph cluster_586 { + label = "Wait on Transforms:PollMessage/To wait view 0/Sample.Any/Flatten.Iterables/FlattenIterables/FlatMap" + 587 [label="ParMultiDo(Anonymous)"] + 583 -> 587 [style=solid label=""] + } + } + } + } + subgraph cluster_588 { + label = "Wait on Transforms:PollMessage/To wait view 0/View.AsList" + subgraph cluster_589 { + label = "Wait on Transforms:PollMessage/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization" + subgraph cluster_590 { + label = "Wait on Transforms:PollMessage/To wait view 0/View.AsList/View.VoidKeyToMultimapMaterialization/ParDo(VoidKeyToMultimapMaterialization)" + 591 [label="ParMultiDo(VoidKeyToMultimapMaterialization)"] + 587 -> 591 [style=solid label=""] + } + } + 592 [label="View.CreatePCollectionView"] + 591 -> 592 [style=solid label=""] } } subgraph cluster_593 { + label = "Wait on Transforms:PollMessage/Wait" + subgraph cluster_594 { + label = "Wait on Transforms:PollMessage/Wait/Map" + 595 [label="ParMultiDo(Anonymous)"] + 89 -> 595 [style=solid label=""] + 591 -> 595 [style=dashed label=""] + } + } + } + subgraph cluster_596 { + label = "Write to sql: Transforms:DomainBase" + subgraph cluster_597 { + label = "Write to sql: Transforms:DomainBase/Shard data for Transforms:DomainBase" + subgraph cluster_598 { + label = "Write to sql: Transforms:DomainBase/Shard data for Transforms:DomainBase/Map" + 599 [label="ParMultiDo(Anonymous)"] + 595 -> 599 [style=solid label=""] + } + } + subgraph cluster_600 { + label = "Write to sql: Transforms:DomainBase/Batch output by shard Transforms:DomainBase" + subgraph cluster_601 { + label = "Write to sql: Transforms:DomainBase/Batch output by shard Transforms:DomainBase/ParDo(GroupIntoBatches)" + 602 [label="ParMultiDo(GroupIntoBatches)"] + 599 -> 602 [style=solid label=""] + } + } + subgraph cluster_603 { label = "Write to sql: Transforms:DomainBase/Write in batch for Transforms:DomainBase" - 594 [label="ParMultiDo(SqlBatchWriter)"] - 592 -> 594 [style=solid label=""] + 604 [label="ParMultiDo(SqlBatchWriter)"] + 602 -> 604 [style=solid label=""] } } } diff --git a/core/src/test/resources/google/registry/beam/initsql/pipeline_golden.png b/core/src/test/resources/google/registry/beam/initsql/pipeline_golden.png index 36d180232ae25124c9e3dfa18bbb188e423fa4d9..fa7cc713f641d7c1b1145318b7e308da221224d7 100644 GIT binary patch literal 1176169 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

Y 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 z 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�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 I9}*{`h5JR9 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%0ADuP@Kn0s6qPQCvp9T|^e6ONcQZkAY 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�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%0DEOe)%d4Ij7hTl7q!U#%UV}lIl4{a;TG&-#4Xn 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�np8AHH9#*-^<72Q`3MpMwWCJ2*JE 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

drLHGz-N`3tjbMvhX zJZFpkDk5Trf|~6>K>~60K^Lf{sR`Tx$B{Uvf zebPB^vr~F@{Y7=KcGTRtbD>b^U|u5}6`*WhlDd+D3ojJoqw_gU?U;(wAb(wVY&2E# zv>&R0RLi+!Kj!7ZbC>gi`@s2^7YbwJ$}@8Q7>sVj8@R$fA&=wZ(+09(sDZqPyoG&9 z8n0y6uZp{RW5kHF`wb`#cv@3{4iOVE4S1jaV@vvJzY%_^xe?|N2Ld4q@lVOHqC_wK z#8iTSX-4jG-x~8%3m%VNO|9%OwfGp%p9`XO2^sZl+CsM$CzfA&MMg=F^KzC$#ZPv6 z+LInu7RScDT`zm=`CQB$;Sr#VczkpHl_fh+i!nm#a9OzIaol5cK{wf*)3xtMM4;#1 zPMRB5rSJmi^YP7Vay?z=pu9#yBPQ-?$>tB40rPz{=RTJATUBOpOSR|H1MP=Ox0u9b z_7a%^yiKL7r!Zy8%jDz@7fvo5Op8Z+^|}ZOqrhS6bLes*apzNDp`lpSnJVReURMXJvg@zEV*li{b*tcy zix*O4WCNrWqFQk?kBO1hav{tXULud=qp^Zu5{4+Pov2*p<2ukHP$5pHdXs8`nX-d_l_?QqJ&&FAuq3UC4c z75ZZX408($zd7W81q{efNzqs6havMzu%EDbgA^h_h0hsKX^uAZUleMTElfPvoe^qZ zS#n@t^ZX8z;}deCPqI3XJ#|oO>hvp1iqH6^zd!ESg|?1iy5Y9s$G@6h09_OBsggB& zsh6)=7+eF*X$@|}y6RrbsniV|&J`vj0Q-p1Nj=9&BBPyuBS$>W;nB^Ms_17{IC>m} zVyCfd_1@A38MmIPNWL+!0g~E*buVMQl+@IC#w4DK5B?VxUav9X4F(Y%xuPW-M9q_S zF+IjAgKGGZ=`4Wn5Kfp+w%ayu9Ta#1P@<87RX6xqQGTtEtE&{3AYb}kf=x%LW7+r8 zR(uk+#*LlX{>0DB4t|E(q&9E%6u)mTSK7OwsR4d_r%Uj?oWi8$iHz-O!`@jwpz&l6 z;*EU6yIDq|d77E+RwM*MMB<~hC7yzR!h!`EU>YaRojY(B;0CAs0GJaMD6DB}_DMqJ zv)Qz1Rg|5K9)YbD)H!$*@v{VvU0jATy4BL*ML^A@SIl#yaBcfQlx$;Ad)vM=bL*K#xHQC2M!_CFCIvr6<}^m^4I*!=nBhP=#TwTJCe;8b@0zmHj8P`Qa>Zk3)WybE12u1_1vTQh6lIWIDO40}=u#eQIdHrK(|i?Q8cp#~>O<;GOQ3 z#n)nSG=xDg$=%(;YT^J4N=~H@7%Jve*SUCgyMwj4QCIPOq**bJVtq3xB}TVlwjO(F zlv2Ie)%QP zwdR3qiss-ux~Dap6O`TDYngG=^nk2FVx&+UU?)?wiz}Jfev*8jA~~tH+G1h*bGFbb zKRQDA)xW*!_G>gCYA zoPt35!OzMoE7d_$<07sHjiG(##T;0w#=Bmb5#!XUw2)Ug3%`w`%n~%w44-jjG}x)-BcB_}?*Q;Q0w(4k{b5Qg))`4FBx|w&YP>ZMFjwY9#2>v9 zueCx}Vb6@`Fk2ambAZo-YIAByXw~-G-*6KQ3Tppa79^|gWW}w8?R$(<8U-@YJUV9N zHlm`-?^zw&TNoDPAT6GX&BNQbK`x7K8AAgn`k5#{jtm-Yx`t12+rqyu{ZHy|NJscP zyHzYMJCM}cTjSf&11c&h!AwQ%ygX*x_znzT^dh4`RBUfK^))o||M=rznmK0DQ>RAp z!~obB{q`G3J6iMNM;)}Fk}xl5Ik1Mfq#UwT4iHssr*MrLG52tuoe%g!<<$IxUd%jz z{H2@BU8{D0lv1Y9%Pa<6`t7#{EM>43X-`t{&*4%As^;T2sQ-BwUwddqm+u{n%Em5LFf zsvUwKZK{;odYMr+P~{|WM)bfpZ`wjoq8sS4)iUS$Z`hI{ts-lfWM=d2FqK-W4=o98 zgO7MxX;o!Kh4nUhL|#XUI$|fI{-K9QqQGdI)dPRYJOa_FS-qmdlCJ?MVcKU5K1#`uxR}RDe za#ws8l~JRv-o9-(_SEt9SaQDE(#a45D^5}>w63~<;NKFvU6?*BVZCJ89hFYq970IWVQr_8qQ6Mw11Sl0-KbF)rT5Ce-4SmT;5+QUVwKt*LFr+p2*lHx=!Mx3^i`&U3caOEvGX zs!^A12Cu~kpGfxg>pi3NjTQQt+#0Z2<+NLK@jjk_!Fo9z^P+pW_%hPL5)5OoE?1~u zUfa=}ycpy#3MedF@+mdACF8|EDXFV1towri~79LAV+ zX4jc_rw)cG#~!!0z1nX>`}c2@v2dTNTeGS4d;Z8kR|9r(2USo z_SWM&F>)s^ggla|QPkQYmoF=>yl)U{bi8;Tt{Qk@4pcTfyvz($!I2~4>}q_P(n{M+ zn-EPgJ8x_p%7#UI+TfyfBxUyu1>DE`g#6ywfJycP5C9hY*nT}Q4?~SM!~D^Yf#Bpr zM?Hqx%)AMgU+hcIf8(_L_&mEqWI*ZLAzAr63C%x7_EEY#9!oX@z$Q*x$i=L<;}Lkt zfVa_e&O!(-JIF#H2LcXZzpc;{%1yu4Ky&0fKfGXrXX5UV^d%b~l&!#L(=Dia z>KQDq>*`QmQ1Adi?5Lag7yj&ge8Ql^Je`8g9NR70lbw`h<9FKAvi02+4%JybAdmzW zlxOUklJgcUm?et;Mn5@9VoGg(IC(c_a%y%3YBtkQok1UDO9WGb>Hz?fVL@^U0YJ16Rt2 zZ;IK`<50{%X%<#mTURhk5Ns|l1}yyRo;a`5a#k2ruW~7|e#qbtfpVq}zudLInO*rr z$GTVcanx@J>%{hpXBx; zlHz?H88zJ4NmHg^Fim+6!uNhN!@<6?vhEb^9Ki+w>XUVJWCxaXD9W(>^cqKfE3gHv zt>xxhA-wH=ty=CzQa2)<8xp(8GAE75tKy98;5y-6p+6ei`=R8L)$ZQ}hC`b9 zypH@jiuhv1pScSIqd}!$A0L5Z*H|wYk8%jyXY>|p1}hq)`^WD$^DgmNG`W?Tmew6Y ztqh|rY;yJ=K0NXeVdUoLU@8nBBH*=BQh%&baZo)r$E%g}8+Lue0CfyqtPoX8N%3(} z6f<&m>@JM2R_}O!DsFVh!-p}_2+uK{?2+(_24Q?iFtDh1?ad3 z>IVzfQ9`G9>Qqkf4JY3TD@9~a9!)K6&{__2kxuNH74uXxY$^CityaUECkn`y8ULZw z;=n`>Kf;S928a?V|LbiK0uJN zPFOGU^({sLR14H<0%rL6(Efp*;OHm+rPXR#C5Ds<(1C|^yt0TpQnqZHtt3~`)K)lg zClU_D%vB4|;WWiUZ~F93x{?4`59qpGUvpfX9dYv;l0MYuamIW$C4TKe#eZoZCP>WWckv+Caz63(CY;Kj0i z-A?j?;K+0!omLDFvB)}<47=8U@zx}pXavoLH+_{3sOW?~RA?3uetfY5e z@r{Om{P<0@5RrTusLO_mCbfo8whIWfARS(d z5TI$3E_3L_V%g$*Ol_vgLz{`khvGeLJh12;sA1YTb-PuEdYtOft0^4Q6h4ACa56jk(hF>`2jH#oSloTSsDZw013vZefLIi;RSjRC$eeM7e`Vwr51An+anT6z-D3 z#Mp$(g6pjXaXn}WniWd_XQkL}6(3^hS)ov;-thHhV2m>ZBMn-X4d&+Ilt-*`*w5Ho z@&~-9{;somaBYkPAK4J}uS17AJdI1VdVPG^jBYUF>y$bs~Tq541 zwc-+F8<+=>9-4N1X9&utV*J;+b7ugb>C)E8)>;K#wJf|dtl2PcnQo;r54cA^Tx8(3}I-G1los& z-BM5zhK(NwsPr_cYrK`|;ah*oV{%I6QSAFaQGvic#g2+OkzsV9NDwtrZHo6}f#H|) za*wB!scYW*>7QPVrb@a#;z;F{rX6~o)MUQJ`DS0cv}}TIkHe418%&2QaX=dP%piVi zF$aMyn7H4mUb+2x`y^n{=6xjJmgnyqRWno1Oe==-Lfic13u!8Hb(+0VMvU$E3&ah6 zp*Ia~-bcd1$}y<5&Iy^25~A=I7hqD^LiZlqU0t6JU&Js)*YiW5o3K+Ge^G4={-^x; zpWFBU`g6DD*bfnb1KS%7@jbzA@^Swc z-AQIb)1iY~KJ}9ONew(k(y5OuEk}mtc%IncF0*O!2`ann1UH9}EHtbzpoo9rHhrpEiTd)5gTK9W}g?&Z8LOldWK`YW>5Z^w+K#Gw>Q=LWx4FBk>hqtORV1MJzDzScPyN?dIfjt zvtp&*dwtivp$R*3(;H7HX*HgR8QQz5@p@Y;J}XG&NQ*NlUDPNTHS4Uq-*50Z-1{L-UrV zkv08;U&2ljMRUOXGg5V@y@KkW{6OUy+-m6db|%X>-5F_zX{vg#9tw>IX3oXe zj10;CekwW@)?3xEBX=w*{kOZj7mmIyAp$fB2xSUor!Alh0OJX1JO%zIPORh+<1nHM z{PkBSJQ=U)lq+}hH_y2HT~fit%hpP5kcUU*wX#7-_2jN2<_cAC#Uo0&W-dA z(nLtG4Vw+N0rnO&vqK#>1?;h$EY8#?MEs0U?gP2xdN-OPm1LC+TQvI&(%Nh5gDgL-XBE zdAEVHgX1BxOHlO}@7^J>eFU-?Pfn47KWP_KHA8tO(4MO2;N@0LeH0j&%pTevGQnjt zO?OK&R^kbvj2x)%she=Jmac(Yj};fR#JR-T)VV#3G+0zGvF=4ewcM%Tz#`s zxQ{hUA!7UMK{~2G-ng|^u!Q{E0$2CkF@JwTeY>^iKysk$oU&rcl8=Icms7ugo-ZFx zmVeaMHt0^bKxv-NxrfA-)d}Lr3tHgmr5LvLBV#k{@iVxFJ=Irb(#0UQk`Q$mVjxT5 z@x$EPU>oQZgVROEONa!37gt?9*Jka>Wr_lBpfNh^#!G4^W}L#L7P}4Xn9@0l!__S( zeqMXTU1!vzJ^Gve`Kt+kmQqeg3V%QO-y?nh`l1`12&nq5)s0Jf?P0<8z9j|P-A9oXoSPiSB!Eh4q~8g^U1g_ z5Q$k^l+1~W1ll=hExhYsBPT7MJhb=c;zK6d8goN}ZaqUZSl@hV-pHdTbhj^!E`)x@ z&LP;D6$kyvhM_?E{ri}^mh)DV<+qFP=-PG5J6M|*`?R9pdE7{ zWY3o{VRR;vCqz#6o|VX3$@tQn%s{PB^IXvz%25v7!dpb?fJ9P4Ei}u2`v8OA zQQkv!U5`lrMuBLmj3kd=r(8QK&F$vypXzTbwi_X&ZhE%c&e=`cclKHma}M75?IuYs zd8P)rzBqNHR!WHAT*Eq{_C3{SA8DCxA%9-*e?7QNw<9KRe$LZ|G`PpXJ8nc=b=4W^ zsz~kjSa=yn<{PhEi4t@X2H_H$H*NY_{@#-q@{Dhr-mWo18N@@!8QeBZZ^u_2GG+(r z7nj^@wPxdiF4=sAJ|5WzX+Physy;(AA|j3YqnpYNcMP9srx@BHIifQZOAtu~pJDrV zSLlD>wB<;agwSi*gCq)F1V?{T|J`0a;C+`d$y?PYBQH-#h#XS1zJcf6?ZUy73#Cfu z%pE0d#;ucS+%{ygNZ1h=c<6*dgIfc#5w&;rbPIFOrgg95Nh=#4cl8)24{r=IZ~neS zYn|JUng{QRi&LFI>7h_|)V5yD03J{Eu#zh1 zzy%y)=-ei=&1MZ^wz9DKMt!$87#okA>N!v!l`^V2$Nj{&X^!{#zJAp>0-yr0&YCrQ zHc7QeFYea|e(^rS4QsyT+8p?$K04g(mz1X6-&MoEJ5<MtFdmd zmI{h)HUvE`dJ_)AeFi6JoC#k|WuE(v8^VTAti(oLU+6t3-MkWb$X?cMltEi^s2=%P z0th#LJhh1p0>X%FQGgu(j==?Ov`dybS2dMIYn zNQ!DINaX=K$fn;moPtF*MnddBeGcAXqD19{x(jlr{z+sRw(4MrZoN%l4S&TFfxA-gmcD%4yQ(9T&~gz{ z>`-|vU4P-eDfokwmY3%|+XP8Yd*}lcZD3tYf;fpuDG(9n^P?{(aK8Z%)5^PV8uHk|8J8*b zrWq(J+KJy7UXCg!*^F8UA|8Vco`l7UJ61>A!ZK)gRY}|a*?Pf(o+5A0nL(yWJxvWA1$YjVRI5JoX;%Hbik+zH6t%hN-13fezTpWCl@OUbHKbMx<;^$rulrZ zU>KfpXwYXEI~mwg%F7#@*T}1@`wQ{kt<+BHZ^z{O#-)ETg_&vQn4aWVsh3)}mh+0C z-(p2fP8s-&@V=6gg1$HP_E}=xV`HhywHczpqNe*}sye?XMLD6N0x5RY$D=$8pBfra zt8Se+^EM+P8rbFIe)jNah3Oc)*B7Y^^(EW4Td!;I(?*QAk(qh6Y8it!A&*P?f>CH# z7%@8EnF03P`$uWXQK_?hnUbD-f z#CNtJvY`_vIve&MVr9Ms$c{ii4J|F8cigN9NU5M8fGt;8>tr|HI=_+T30YlXo-)u) zDbD@Ww_kUBr!sWE+qX}jcrv+;&c)&e)EzT0hUzZ0kEbU{i=oXQ;fG^&X8M#bhMGt% zW_yIE5Q9bZh78`pRvG9q0|#nU2`nsN?bF2L*^c}Zza>Q0zB_;?f#R^s+PraN9keQJ zPUtu{+Stq~Wj_hB+^!oAO&u%?1Qa}sdUjzc|F`P>d%UTekO&jold^Kr0-@;75x*eR zhGBiX!~b*od}O~6M1Ottnt)WdmDr>d4m~jQSV+i|6=p*IrHvRG4!S0so!76ås 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