mirror of
https://github.com/google/nomulus
synced 2026-05-24 08:41:48 +00:00
Compare commits
28 Commits
nomulus-20
...
nomulus-20
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
199d02a4cc | ||
|
|
48cc12e016 | ||
|
|
e30b3f9e0b | ||
|
|
623356b1e8 | ||
|
|
4f69e1e0a6 | ||
|
|
9912e35ea2 | ||
|
|
413fd1dc94 | ||
|
|
2377774bf9 | ||
|
|
857cb833a5 | ||
|
|
82a50862c4 | ||
|
|
56d1ea71fe | ||
|
|
fd3cec2a0f | ||
|
|
b9c40dd68d | ||
|
|
754958ef3a | ||
|
|
1bf7c925bc | ||
|
|
eeca51667e | ||
|
|
123d6359dc | ||
|
|
64fba55f06 | ||
|
|
3a7ac669f5 | ||
|
|
fc029b5ad2 | ||
|
|
ec5c2cdb68 | ||
|
|
c4cf128844 | ||
|
|
c262ef82c9 | ||
|
|
03ca6cecc7 | ||
|
|
bee5e0a5a9 | ||
|
|
9f0138aeb2 | ||
|
|
eca2b61d8b | ||
|
|
d12897062b |
@@ -3,21 +3,21 @@
|
||||
# This file is expected to be part of source control.
|
||||
aopalliance:aopalliance:1.0
|
||||
args4j:args4j:2.0.23
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.2
|
||||
com.fasterxml.jackson:jackson-bom:2.13.2
|
||||
com.google.api-client:google-api-client:1.34.0
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.3
|
||||
com.fasterxml.jackson:jackson-bom:2.13.3
|
||||
com.google.api-client:google-api-client:1.34.1
|
||||
com.google.api.grpc:proto-google-common-protos:2.8.3
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.1
|
||||
com.google.api:api-common:2.1.5
|
||||
com.google.api:gax-httpjson:0.101.0
|
||||
com.google.api:gax:2.16.0
|
||||
com.google.apis:google-api-services-storage:v1-rev20220401-1.32.1
|
||||
com.google.auth:google-auth-library-credentials:1.6.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.6.0
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.4
|
||||
com.google.api:api-common:2.2.0
|
||||
com.google.api:gax-httpjson:0.103.1
|
||||
com.google.api:gax:2.18.1
|
||||
com.google.apis:google-api-services-storage:v1-rev20220509-1.32.1
|
||||
com.google.auth:google-auth-library-credentials:1.7.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.7.0
|
||||
com.google.auto.value:auto-value-annotations:1.9
|
||||
com.google.cloud:google-cloud-core-http:2.6.0
|
||||
com.google.cloud:google-cloud-core:2.6.0
|
||||
com.google.cloud:google-cloud-storage:2.6.1
|
||||
com.google.cloud:google-cloud-core-http:2.7.1
|
||||
com.google.cloud:google-cloud-core:2.7.1
|
||||
com.google.cloud:google-cloud-storage:2.7.2
|
||||
com.google.code.findbugs:jsr305:3.0.2
|
||||
com.google.code.gson:gson:2.9.0
|
||||
com.google.common.html.types:types:1.0.6
|
||||
@@ -26,25 +26,25 @@ com.google.escapevelocity:escapevelocity:0.9.1
|
||||
com.google.guava:failureaccess:1.0.1
|
||||
com.google.guava:guava:31.1-jre
|
||||
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.7
|
||||
com.google.http-client:google-http-client-appengine:1.41.7
|
||||
com.google.http-client:google-http-client-gson:1.41.7
|
||||
com.google.http-client:google-http-client-jackson2:1.41.7
|
||||
com.google.http-client:google-http-client:1.41.7
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.8
|
||||
com.google.http-client:google-http-client-appengine:1.41.8
|
||||
com.google.http-client:google-http-client-gson:1.41.8
|
||||
com.google.http-client:google-http-client-jackson2:1.41.8
|
||||
com.google.http-client:google-http-client:1.41.8
|
||||
com.google.inject.extensions:guice-multibindings:4.1.0
|
||||
com.google.inject:guice:4.1.0
|
||||
com.google.j2objc:j2objc-annotations:1.3
|
||||
com.google.jsinterop:jsinterop-annotations:1.0.1
|
||||
com.google.oauth-client:google-oauth-client:1.33.3
|
||||
com.google.protobuf:protobuf-java-util:3.19.4
|
||||
com.google.protobuf:protobuf-java:3.19.4
|
||||
com.google.protobuf:protobuf-java-util:3.20.1
|
||||
com.google.protobuf:protobuf-java:3.20.1
|
||||
com.google.template:soy:2021-02-01
|
||||
com.ibm.icu:icu4j:57.1
|
||||
commons-codec:commons-codec:1.11
|
||||
commons-logging:commons-logging:1.2
|
||||
io.grpc:grpc-context:1.45.1
|
||||
io.opencensus:opencensus-api:0.31.0
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.0
|
||||
io.grpc:grpc-context:1.46.0
|
||||
io.opencensus:opencensus-api:0.31.1
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.1
|
||||
javax.annotation:javax.annotation-api:1.3.2
|
||||
javax.annotation:jsr250-api:1.0
|
||||
javax.inject:javax.inject:1
|
||||
@@ -52,7 +52,7 @@ org.apache.commons:commons-lang3:3.11
|
||||
org.apache.commons:commons-text:1.9
|
||||
org.apache.httpcomponents:httpclient:4.5.13
|
||||
org.apache.httpcomponents:httpcore:4.4.15
|
||||
org.checkerframework:checker-qual:3.21.4
|
||||
org.checkerframework:checker-qual:3.22.0
|
||||
org.json:json:20160212
|
||||
org.ow2.asm:asm-analysis:7.0
|
||||
org.ow2.asm:asm-commons:7.0
|
||||
|
||||
@@ -3,21 +3,21 @@
|
||||
# This file is expected to be part of source control.
|
||||
aopalliance:aopalliance:1.0
|
||||
args4j:args4j:2.0.23
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.2
|
||||
com.fasterxml.jackson:jackson-bom:2.13.2
|
||||
com.google.api-client:google-api-client:1.34.0
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.3
|
||||
com.fasterxml.jackson:jackson-bom:2.13.3
|
||||
com.google.api-client:google-api-client:1.34.1
|
||||
com.google.api.grpc:proto-google-common-protos:2.8.3
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.1
|
||||
com.google.api:api-common:2.1.5
|
||||
com.google.api:gax-httpjson:0.101.0
|
||||
com.google.api:gax:2.16.0
|
||||
com.google.apis:google-api-services-storage:v1-rev20220401-1.32.1
|
||||
com.google.auth:google-auth-library-credentials:1.6.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.6.0
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.4
|
||||
com.google.api:api-common:2.2.0
|
||||
com.google.api:gax-httpjson:0.103.1
|
||||
com.google.api:gax:2.18.1
|
||||
com.google.apis:google-api-services-storage:v1-rev20220509-1.32.1
|
||||
com.google.auth:google-auth-library-credentials:1.7.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.7.0
|
||||
com.google.auto.value:auto-value-annotations:1.9
|
||||
com.google.cloud:google-cloud-core-http:2.6.0
|
||||
com.google.cloud:google-cloud-core:2.6.0
|
||||
com.google.cloud:google-cloud-storage:2.6.1
|
||||
com.google.cloud:google-cloud-core-http:2.7.1
|
||||
com.google.cloud:google-cloud-core:2.7.1
|
||||
com.google.cloud:google-cloud-storage:2.7.2
|
||||
com.google.code.findbugs:jsr305:3.0.2
|
||||
com.google.code.gson:gson:2.9.0
|
||||
com.google.common.html.types:types:1.0.6
|
||||
@@ -26,25 +26,25 @@ com.google.escapevelocity:escapevelocity:0.9.1
|
||||
com.google.guava:failureaccess:1.0.1
|
||||
com.google.guava:guava:31.1-jre
|
||||
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.7
|
||||
com.google.http-client:google-http-client-appengine:1.41.7
|
||||
com.google.http-client:google-http-client-gson:1.41.7
|
||||
com.google.http-client:google-http-client-jackson2:1.41.7
|
||||
com.google.http-client:google-http-client:1.41.7
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.8
|
||||
com.google.http-client:google-http-client-appengine:1.41.8
|
||||
com.google.http-client:google-http-client-gson:1.41.8
|
||||
com.google.http-client:google-http-client-jackson2:1.41.8
|
||||
com.google.http-client:google-http-client:1.41.8
|
||||
com.google.inject.extensions:guice-multibindings:4.1.0
|
||||
com.google.inject:guice:4.1.0
|
||||
com.google.j2objc:j2objc-annotations:1.3
|
||||
com.google.jsinterop:jsinterop-annotations:1.0.1
|
||||
com.google.oauth-client:google-oauth-client:1.33.3
|
||||
com.google.protobuf:protobuf-java-util:3.19.4
|
||||
com.google.protobuf:protobuf-java:3.19.4
|
||||
com.google.protobuf:protobuf-java-util:3.20.1
|
||||
com.google.protobuf:protobuf-java:3.20.1
|
||||
com.google.template:soy:2021-02-01
|
||||
com.ibm.icu:icu4j:57.1
|
||||
commons-codec:commons-codec:1.11
|
||||
commons-logging:commons-logging:1.2
|
||||
io.grpc:grpc-context:1.45.1
|
||||
io.opencensus:opencensus-api:0.31.0
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.0
|
||||
io.grpc:grpc-context:1.46.0
|
||||
io.opencensus:opencensus-api:0.31.1
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.1
|
||||
javax.annotation:javax.annotation-api:1.3.2
|
||||
javax.annotation:jsr250-api:1.0
|
||||
javax.inject:javax.inject:1
|
||||
@@ -52,7 +52,7 @@ org.apache.commons:commons-lang3:3.11
|
||||
org.apache.commons:commons-text:1.9
|
||||
org.apache.httpcomponents:httpclient:4.5.13
|
||||
org.apache.httpcomponents:httpcore:4.4.15
|
||||
org.checkerframework:checker-qual:3.21.4
|
||||
org.checkerframework:checker-qual:3.22.0
|
||||
org.json:json:20160212
|
||||
org.ow2.asm:asm-analysis:7.0
|
||||
org.ow2.asm:asm-commons:7.0
|
||||
|
||||
@@ -3,21 +3,21 @@
|
||||
# This file is expected to be part of source control.
|
||||
aopalliance:aopalliance:1.0
|
||||
args4j:args4j:2.0.23
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.2
|
||||
com.fasterxml.jackson:jackson-bom:2.13.2
|
||||
com.google.api-client:google-api-client:1.34.0
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.3
|
||||
com.fasterxml.jackson:jackson-bom:2.13.3
|
||||
com.google.api-client:google-api-client:1.34.1
|
||||
com.google.api.grpc:proto-google-common-protos:2.8.3
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.1
|
||||
com.google.api:api-common:2.1.5
|
||||
com.google.api:gax-httpjson:0.101.0
|
||||
com.google.api:gax:2.16.0
|
||||
com.google.apis:google-api-services-storage:v1-rev20220401-1.32.1
|
||||
com.google.auth:google-auth-library-credentials:1.6.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.6.0
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.4
|
||||
com.google.api:api-common:2.2.0
|
||||
com.google.api:gax-httpjson:0.103.1
|
||||
com.google.api:gax:2.18.1
|
||||
com.google.apis:google-api-services-storage:v1-rev20220509-1.32.1
|
||||
com.google.auth:google-auth-library-credentials:1.7.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.7.0
|
||||
com.google.auto.value:auto-value-annotations:1.9
|
||||
com.google.cloud:google-cloud-core-http:2.6.0
|
||||
com.google.cloud:google-cloud-core:2.6.0
|
||||
com.google.cloud:google-cloud-storage:2.6.1
|
||||
com.google.cloud:google-cloud-core-http:2.7.1
|
||||
com.google.cloud:google-cloud-core:2.7.1
|
||||
com.google.cloud:google-cloud-storage:2.7.2
|
||||
com.google.code.findbugs:jsr305:3.0.2
|
||||
com.google.code.gson:gson:2.9.0
|
||||
com.google.common.html.types:types:1.0.6
|
||||
@@ -26,25 +26,25 @@ com.google.escapevelocity:escapevelocity:0.9.1
|
||||
com.google.guava:failureaccess:1.0.1
|
||||
com.google.guava:guava:31.1-jre
|
||||
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.7
|
||||
com.google.http-client:google-http-client-appengine:1.41.7
|
||||
com.google.http-client:google-http-client-gson:1.41.7
|
||||
com.google.http-client:google-http-client-jackson2:1.41.7
|
||||
com.google.http-client:google-http-client:1.41.7
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.8
|
||||
com.google.http-client:google-http-client-appengine:1.41.8
|
||||
com.google.http-client:google-http-client-gson:1.41.8
|
||||
com.google.http-client:google-http-client-jackson2:1.41.8
|
||||
com.google.http-client:google-http-client:1.41.8
|
||||
com.google.inject.extensions:guice-multibindings:4.1.0
|
||||
com.google.inject:guice:4.1.0
|
||||
com.google.j2objc:j2objc-annotations:1.3
|
||||
com.google.jsinterop:jsinterop-annotations:1.0.1
|
||||
com.google.oauth-client:google-oauth-client:1.33.3
|
||||
com.google.protobuf:protobuf-java-util:3.19.4
|
||||
com.google.protobuf:protobuf-java:3.19.4
|
||||
com.google.protobuf:protobuf-java-util:3.20.1
|
||||
com.google.protobuf:protobuf-java:3.20.1
|
||||
com.google.template:soy:2021-02-01
|
||||
com.ibm.icu:icu4j:57.1
|
||||
commons-codec:commons-codec:1.11
|
||||
commons-logging:commons-logging:1.2
|
||||
io.grpc:grpc-context:1.45.1
|
||||
io.opencensus:opencensus-api:0.31.0
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.0
|
||||
io.grpc:grpc-context:1.46.0
|
||||
io.opencensus:opencensus-api:0.31.1
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.1
|
||||
javax.annotation:javax.annotation-api:1.3.2
|
||||
javax.annotation:jsr250-api:1.0
|
||||
javax.inject:javax.inject:1
|
||||
@@ -52,7 +52,7 @@ org.apache.commons:commons-lang3:3.11
|
||||
org.apache.commons:commons-text:1.9
|
||||
org.apache.httpcomponents:httpclient:4.5.13
|
||||
org.apache.httpcomponents:httpcore:4.4.15
|
||||
org.checkerframework:checker-qual:3.21.4
|
||||
org.checkerframework:checker-qual:3.22.0
|
||||
org.json:json:20160212
|
||||
org.ow2.asm:asm-analysis:7.0
|
||||
org.ow2.asm:asm-commons:7.0
|
||||
|
||||
@@ -3,21 +3,21 @@
|
||||
# This file is expected to be part of source control.
|
||||
aopalliance:aopalliance:1.0
|
||||
args4j:args4j:2.0.23
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.2
|
||||
com.fasterxml.jackson:jackson-bom:2.13.2
|
||||
com.google.api-client:google-api-client:1.34.0
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.3
|
||||
com.fasterxml.jackson:jackson-bom:2.13.3
|
||||
com.google.api-client:google-api-client:1.34.1
|
||||
com.google.api.grpc:proto-google-common-protos:2.8.3
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.1
|
||||
com.google.api:api-common:2.1.5
|
||||
com.google.api:gax-httpjson:0.101.0
|
||||
com.google.api:gax:2.16.0
|
||||
com.google.apis:google-api-services-storage:v1-rev20220401-1.32.1
|
||||
com.google.auth:google-auth-library-credentials:1.6.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.6.0
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.4
|
||||
com.google.api:api-common:2.2.0
|
||||
com.google.api:gax-httpjson:0.103.1
|
||||
com.google.api:gax:2.18.1
|
||||
com.google.apis:google-api-services-storage:v1-rev20220509-1.32.1
|
||||
com.google.auth:google-auth-library-credentials:1.7.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.7.0
|
||||
com.google.auto.value:auto-value-annotations:1.9
|
||||
com.google.cloud:google-cloud-core-http:2.6.0
|
||||
com.google.cloud:google-cloud-core:2.6.0
|
||||
com.google.cloud:google-cloud-storage:2.6.1
|
||||
com.google.cloud:google-cloud-core-http:2.7.1
|
||||
com.google.cloud:google-cloud-core:2.7.1
|
||||
com.google.cloud:google-cloud-storage:2.7.2
|
||||
com.google.code.findbugs:jsr305:3.0.2
|
||||
com.google.code.gson:gson:2.9.0
|
||||
com.google.common.html.types:types:1.0.6
|
||||
@@ -26,25 +26,25 @@ com.google.escapevelocity:escapevelocity:0.9.1
|
||||
com.google.guava:failureaccess:1.0.1
|
||||
com.google.guava:guava:31.1-jre
|
||||
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.7
|
||||
com.google.http-client:google-http-client-appengine:1.41.7
|
||||
com.google.http-client:google-http-client-gson:1.41.7
|
||||
com.google.http-client:google-http-client-jackson2:1.41.7
|
||||
com.google.http-client:google-http-client:1.41.7
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.8
|
||||
com.google.http-client:google-http-client-appengine:1.41.8
|
||||
com.google.http-client:google-http-client-gson:1.41.8
|
||||
com.google.http-client:google-http-client-jackson2:1.41.8
|
||||
com.google.http-client:google-http-client:1.41.8
|
||||
com.google.inject.extensions:guice-multibindings:4.1.0
|
||||
com.google.inject:guice:4.1.0
|
||||
com.google.j2objc:j2objc-annotations:1.3
|
||||
com.google.jsinterop:jsinterop-annotations:1.0.1
|
||||
com.google.oauth-client:google-oauth-client:1.33.3
|
||||
com.google.protobuf:protobuf-java-util:3.19.4
|
||||
com.google.protobuf:protobuf-java:3.19.4
|
||||
com.google.protobuf:protobuf-java-util:3.20.1
|
||||
com.google.protobuf:protobuf-java:3.20.1
|
||||
com.google.template:soy:2021-02-01
|
||||
com.ibm.icu:icu4j:57.1
|
||||
commons-codec:commons-codec:1.11
|
||||
commons-logging:commons-logging:1.2
|
||||
io.grpc:grpc-context:1.45.1
|
||||
io.opencensus:opencensus-api:0.31.0
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.0
|
||||
io.grpc:grpc-context:1.46.0
|
||||
io.opencensus:opencensus-api:0.31.1
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.1
|
||||
javax.annotation:javax.annotation-api:1.3.2
|
||||
javax.annotation:jsr250-api:1.0
|
||||
javax.inject:javax.inject:1
|
||||
@@ -52,7 +52,7 @@ org.apache.commons:commons-lang3:3.11
|
||||
org.apache.commons:commons-text:1.9
|
||||
org.apache.httpcomponents:httpclient:4.5.13
|
||||
org.apache.httpcomponents:httpcore:4.4.15
|
||||
org.checkerframework:checker-qual:3.21.4
|
||||
org.checkerframework:checker-qual:3.22.0
|
||||
org.json:json:20160212
|
||||
org.ow2.asm:asm-analysis:7.0
|
||||
org.ow2.asm:asm-commons:7.0
|
||||
|
||||
@@ -3,21 +3,21 @@
|
||||
# This file is expected to be part of source control.
|
||||
aopalliance:aopalliance:1.0
|
||||
args4j:args4j:2.0.23
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.2
|
||||
com.fasterxml.jackson:jackson-bom:2.13.2
|
||||
com.google.api-client:google-api-client:1.34.0
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.3
|
||||
com.fasterxml.jackson:jackson-bom:2.13.3
|
||||
com.google.api-client:google-api-client:1.34.1
|
||||
com.google.api.grpc:proto-google-common-protos:2.8.3
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.1
|
||||
com.google.api:api-common:2.1.5
|
||||
com.google.api:gax-httpjson:0.101.0
|
||||
com.google.api:gax:2.16.0
|
||||
com.google.apis:google-api-services-storage:v1-rev20220401-1.32.1
|
||||
com.google.auth:google-auth-library-credentials:1.6.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.6.0
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.4
|
||||
com.google.api:api-common:2.2.0
|
||||
com.google.api:gax-httpjson:0.103.1
|
||||
com.google.api:gax:2.18.1
|
||||
com.google.apis:google-api-services-storage:v1-rev20220509-1.32.1
|
||||
com.google.auth:google-auth-library-credentials:1.7.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.7.0
|
||||
com.google.auto.value:auto-value-annotations:1.9
|
||||
com.google.cloud:google-cloud-core-http:2.6.0
|
||||
com.google.cloud:google-cloud-core:2.6.0
|
||||
com.google.cloud:google-cloud-storage:2.6.1
|
||||
com.google.cloud:google-cloud-core-http:2.7.1
|
||||
com.google.cloud:google-cloud-core:2.7.1
|
||||
com.google.cloud:google-cloud-storage:2.7.2
|
||||
com.google.code.findbugs:jsr305:3.0.2
|
||||
com.google.code.gson:gson:2.9.0
|
||||
com.google.common.html.types:types:1.0.6
|
||||
@@ -26,25 +26,25 @@ com.google.escapevelocity:escapevelocity:0.9.1
|
||||
com.google.guava:failureaccess:1.0.1
|
||||
com.google.guava:guava:31.1-jre
|
||||
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.7
|
||||
com.google.http-client:google-http-client-appengine:1.41.7
|
||||
com.google.http-client:google-http-client-gson:1.41.7
|
||||
com.google.http-client:google-http-client-jackson2:1.41.7
|
||||
com.google.http-client:google-http-client:1.41.7
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.8
|
||||
com.google.http-client:google-http-client-appengine:1.41.8
|
||||
com.google.http-client:google-http-client-gson:1.41.8
|
||||
com.google.http-client:google-http-client-jackson2:1.41.8
|
||||
com.google.http-client:google-http-client:1.41.8
|
||||
com.google.inject.extensions:guice-multibindings:4.1.0
|
||||
com.google.inject:guice:4.1.0
|
||||
com.google.j2objc:j2objc-annotations:1.3
|
||||
com.google.jsinterop:jsinterop-annotations:1.0.1
|
||||
com.google.oauth-client:google-oauth-client:1.33.3
|
||||
com.google.protobuf:protobuf-java-util:3.19.4
|
||||
com.google.protobuf:protobuf-java:3.19.4
|
||||
com.google.protobuf:protobuf-java-util:3.20.1
|
||||
com.google.protobuf:protobuf-java:3.20.1
|
||||
com.google.template:soy:2021-02-01
|
||||
com.ibm.icu:icu4j:57.1
|
||||
commons-codec:commons-codec:1.11
|
||||
commons-logging:commons-logging:1.2
|
||||
io.grpc:grpc-context:1.45.1
|
||||
io.opencensus:opencensus-api:0.31.0
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.0
|
||||
io.grpc:grpc-context:1.46.0
|
||||
io.opencensus:opencensus-api:0.31.1
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.1
|
||||
javax.annotation:javax.annotation-api:1.3.2
|
||||
javax.annotation:jsr250-api:1.0
|
||||
javax.inject:javax.inject:1
|
||||
@@ -52,7 +52,7 @@ org.apache.commons:commons-lang3:3.11
|
||||
org.apache.commons:commons-text:1.9
|
||||
org.apache.httpcomponents:httpclient:4.5.13
|
||||
org.apache.httpcomponents:httpcore:4.4.15
|
||||
org.checkerframework:checker-qual:3.21.4
|
||||
org.checkerframework:checker-qual:3.22.0
|
||||
org.json:json:20160212
|
||||
org.ow2.asm:asm-analysis:7.0
|
||||
org.ow2.asm:asm-commons:7.0
|
||||
|
||||
@@ -3,21 +3,21 @@
|
||||
# This file is expected to be part of source control.
|
||||
aopalliance:aopalliance:1.0
|
||||
args4j:args4j:2.0.23
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.2
|
||||
com.fasterxml.jackson:jackson-bom:2.13.2
|
||||
com.google.api-client:google-api-client:1.34.0
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.3
|
||||
com.fasterxml.jackson:jackson-bom:2.13.3
|
||||
com.google.api-client:google-api-client:1.34.1
|
||||
com.google.api.grpc:proto-google-common-protos:2.8.3
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.1
|
||||
com.google.api:api-common:2.1.5
|
||||
com.google.api:gax-httpjson:0.101.0
|
||||
com.google.api:gax:2.16.0
|
||||
com.google.apis:google-api-services-storage:v1-rev20220401-1.32.1
|
||||
com.google.auth:google-auth-library-credentials:1.6.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.6.0
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.4
|
||||
com.google.api:api-common:2.2.0
|
||||
com.google.api:gax-httpjson:0.103.1
|
||||
com.google.api:gax:2.18.1
|
||||
com.google.apis:google-api-services-storage:v1-rev20220509-1.32.1
|
||||
com.google.auth:google-auth-library-credentials:1.7.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.7.0
|
||||
com.google.auto.value:auto-value-annotations:1.9
|
||||
com.google.cloud:google-cloud-core-http:2.6.0
|
||||
com.google.cloud:google-cloud-core:2.6.0
|
||||
com.google.cloud:google-cloud-storage:2.6.1
|
||||
com.google.cloud:google-cloud-core-http:2.7.1
|
||||
com.google.cloud:google-cloud-core:2.7.1
|
||||
com.google.cloud:google-cloud-storage:2.7.2
|
||||
com.google.code.findbugs:jsr305:3.0.2
|
||||
com.google.code.gson:gson:2.9.0
|
||||
com.google.common.html.types:types:1.0.6
|
||||
@@ -26,46 +26,46 @@ com.google.escapevelocity:escapevelocity:0.9.1
|
||||
com.google.guava:failureaccess:1.0.1
|
||||
com.google.guava:guava:31.1-jre
|
||||
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.7
|
||||
com.google.http-client:google-http-client-appengine:1.41.7
|
||||
com.google.http-client:google-http-client-gson:1.41.7
|
||||
com.google.http-client:google-http-client-jackson2:1.41.7
|
||||
com.google.http-client:google-http-client:1.41.7
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.8
|
||||
com.google.http-client:google-http-client-appengine:1.41.8
|
||||
com.google.http-client:google-http-client-gson:1.41.8
|
||||
com.google.http-client:google-http-client-jackson2:1.41.8
|
||||
com.google.http-client:google-http-client:1.41.8
|
||||
com.google.inject.extensions:guice-multibindings:4.1.0
|
||||
com.google.inject:guice:4.1.0
|
||||
com.google.j2objc:j2objc-annotations:1.3
|
||||
com.google.jsinterop:jsinterop-annotations:1.0.1
|
||||
com.google.oauth-client:google-oauth-client:1.33.3
|
||||
com.google.protobuf:protobuf-java-util:3.19.4
|
||||
com.google.protobuf:protobuf-java:3.19.4
|
||||
com.google.protobuf:protobuf-java-util:3.20.1
|
||||
com.google.protobuf:protobuf-java:3.20.1
|
||||
com.google.template:soy:2021-02-01
|
||||
com.google.truth.extensions:truth-java8-extension:1.1.3
|
||||
com.google.truth:truth:1.1.3
|
||||
com.ibm.icu:icu4j:57.1
|
||||
commons-codec:commons-codec:1.11
|
||||
commons-logging:commons-logging:1.2
|
||||
io.grpc:grpc-context:1.45.1
|
||||
io.opencensus:opencensus-api:0.31.0
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.0
|
||||
io.grpc:grpc-context:1.46.0
|
||||
io.opencensus:opencensus-api:0.31.1
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.1
|
||||
javax.annotation:javax.annotation-api:1.3.2
|
||||
javax.annotation:jsr250-api:1.0
|
||||
javax.inject:javax.inject:1
|
||||
junit:junit:4.13.2
|
||||
net.bytebuddy:byte-buddy-agent:1.12.9
|
||||
net.bytebuddy:byte-buddy:1.12.9
|
||||
net.bytebuddy:byte-buddy-agent:1.12.10
|
||||
net.bytebuddy:byte-buddy:1.12.10
|
||||
org.apache.commons:commons-lang3:3.11
|
||||
org.apache.commons:commons-text:1.9
|
||||
org.apache.httpcomponents:httpclient:4.5.13
|
||||
org.apache.httpcomponents:httpcore:4.4.15
|
||||
org.checkerframework:checker-qual:3.21.4
|
||||
org.checkerframework:checker-qual:3.22.0
|
||||
org.hamcrest:hamcrest-core:1.3
|
||||
org.json:json:20160212
|
||||
org.junit.jupiter:junit-jupiter-api:5.8.2
|
||||
org.junit.jupiter:junit-jupiter-engine:5.8.2
|
||||
org.junit.platform:junit-platform-commons:1.8.2
|
||||
org.junit.platform:junit-platform-engine:1.8.2
|
||||
org.junit:junit-bom:5.8.2
|
||||
org.mockito:mockito-core:4.5.1
|
||||
org.junit.jupiter:junit-jupiter-api:5.9.0-M1
|
||||
org.junit.jupiter:junit-jupiter-engine:5.9.0-M1
|
||||
org.junit.platform:junit-platform-commons:1.9.0-M1
|
||||
org.junit.platform:junit-platform-engine:1.9.0-M1
|
||||
org.junit:junit-bom:5.9.0-M1
|
||||
org.mockito:mockito-core:4.6.1
|
||||
org.objenesis:objenesis:3.2
|
||||
org.opentest4j:opentest4j:1.2.0
|
||||
org.ow2.asm:asm-analysis:7.0
|
||||
|
||||
@@ -3,21 +3,21 @@
|
||||
# This file is expected to be part of source control.
|
||||
aopalliance:aopalliance:1.0
|
||||
args4j:args4j:2.0.23
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.2
|
||||
com.fasterxml.jackson:jackson-bom:2.13.2
|
||||
com.google.api-client:google-api-client:1.34.0
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.3
|
||||
com.fasterxml.jackson:jackson-bom:2.13.3
|
||||
com.google.api-client:google-api-client:1.34.1
|
||||
com.google.api.grpc:proto-google-common-protos:2.8.3
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.1
|
||||
com.google.api:api-common:2.1.5
|
||||
com.google.api:gax-httpjson:0.101.0
|
||||
com.google.api:gax:2.16.0
|
||||
com.google.apis:google-api-services-storage:v1-rev20220401-1.32.1
|
||||
com.google.auth:google-auth-library-credentials:1.6.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.6.0
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.4
|
||||
com.google.api:api-common:2.2.0
|
||||
com.google.api:gax-httpjson:0.103.1
|
||||
com.google.api:gax:2.18.1
|
||||
com.google.apis:google-api-services-storage:v1-rev20220509-1.32.1
|
||||
com.google.auth:google-auth-library-credentials:1.7.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.7.0
|
||||
com.google.auto.value:auto-value-annotations:1.9
|
||||
com.google.cloud:google-cloud-core-http:2.6.0
|
||||
com.google.cloud:google-cloud-core:2.6.0
|
||||
com.google.cloud:google-cloud-storage:2.6.1
|
||||
com.google.cloud:google-cloud-core-http:2.7.1
|
||||
com.google.cloud:google-cloud-core:2.7.1
|
||||
com.google.cloud:google-cloud-storage:2.7.2
|
||||
com.google.code.findbugs:jsr305:3.0.2
|
||||
com.google.code.gson:gson:2.9.0
|
||||
com.google.common.html.types:types:1.0.6
|
||||
@@ -26,47 +26,47 @@ com.google.escapevelocity:escapevelocity:0.9.1
|
||||
com.google.guava:failureaccess:1.0.1
|
||||
com.google.guava:guava:31.1-jre
|
||||
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.7
|
||||
com.google.http-client:google-http-client-appengine:1.41.7
|
||||
com.google.http-client:google-http-client-gson:1.41.7
|
||||
com.google.http-client:google-http-client-jackson2:1.41.7
|
||||
com.google.http-client:google-http-client:1.41.7
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.8
|
||||
com.google.http-client:google-http-client-appengine:1.41.8
|
||||
com.google.http-client:google-http-client-gson:1.41.8
|
||||
com.google.http-client:google-http-client-jackson2:1.41.8
|
||||
com.google.http-client:google-http-client:1.41.8
|
||||
com.google.inject.extensions:guice-multibindings:4.1.0
|
||||
com.google.inject:guice:4.1.0
|
||||
com.google.j2objc:j2objc-annotations:1.3
|
||||
com.google.jsinterop:jsinterop-annotations:1.0.1
|
||||
com.google.oauth-client:google-oauth-client:1.33.3
|
||||
com.google.protobuf:protobuf-java-util:3.19.4
|
||||
com.google.protobuf:protobuf-java:3.19.4
|
||||
com.google.protobuf:protobuf-java-util:3.20.1
|
||||
com.google.protobuf:protobuf-java:3.20.1
|
||||
com.google.template:soy:2021-02-01
|
||||
com.google.truth.extensions:truth-java8-extension:1.1.3
|
||||
com.google.truth:truth:1.1.3
|
||||
com.ibm.icu:icu4j:57.1
|
||||
commons-codec:commons-codec:1.11
|
||||
commons-logging:commons-logging:1.2
|
||||
io.grpc:grpc-context:1.45.1
|
||||
io.opencensus:opencensus-api:0.31.0
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.0
|
||||
io.grpc:grpc-context:1.46.0
|
||||
io.opencensus:opencensus-api:0.31.1
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.1
|
||||
javax.annotation:javax.annotation-api:1.3.2
|
||||
javax.annotation:jsr250-api:1.0
|
||||
javax.inject:javax.inject:1
|
||||
junit:junit:4.13.2
|
||||
net.bytebuddy:byte-buddy-agent:1.12.9
|
||||
net.bytebuddy:byte-buddy:1.12.9
|
||||
net.bytebuddy:byte-buddy-agent:1.12.10
|
||||
net.bytebuddy:byte-buddy:1.12.10
|
||||
org.apache.commons:commons-lang3:3.11
|
||||
org.apache.commons:commons-text:1.9
|
||||
org.apache.httpcomponents:httpclient:4.5.13
|
||||
org.apache.httpcomponents:httpcore:4.4.15
|
||||
org.apiguardian:apiguardian-api:1.1.2
|
||||
org.checkerframework:checker-qual:3.21.4
|
||||
org.checkerframework:checker-qual:3.22.0
|
||||
org.hamcrest:hamcrest-core:1.3
|
||||
org.json:json:20160212
|
||||
org.junit.jupiter:junit-jupiter-api:5.8.2
|
||||
org.junit.jupiter:junit-jupiter-engine:5.8.2
|
||||
org.junit.platform:junit-platform-commons:1.8.2
|
||||
org.junit.platform:junit-platform-engine:1.8.2
|
||||
org.junit:junit-bom:5.8.2
|
||||
org.mockito:mockito-core:4.5.1
|
||||
org.junit.jupiter:junit-jupiter-api:5.9.0-M1
|
||||
org.junit.jupiter:junit-jupiter-engine:5.9.0-M1
|
||||
org.junit.platform:junit-platform-commons:1.9.0-M1
|
||||
org.junit.platform:junit-platform-engine:1.9.0-M1
|
||||
org.junit:junit-bom:5.9.0-M1
|
||||
org.mockito:mockito-core:4.6.1
|
||||
org.opentest4j:opentest4j:1.2.0
|
||||
org.ow2.asm:asm-analysis:7.0
|
||||
org.ow2.asm:asm-commons:7.0
|
||||
|
||||
@@ -3,21 +3,21 @@
|
||||
# This file is expected to be part of source control.
|
||||
aopalliance:aopalliance:1.0
|
||||
args4j:args4j:2.0.23
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.2
|
||||
com.fasterxml.jackson:jackson-bom:2.13.2
|
||||
com.google.api-client:google-api-client:1.34.0
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.3
|
||||
com.fasterxml.jackson:jackson-bom:2.13.3
|
||||
com.google.api-client:google-api-client:1.34.1
|
||||
com.google.api.grpc:proto-google-common-protos:2.8.3
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.1
|
||||
com.google.api:api-common:2.1.5
|
||||
com.google.api:gax-httpjson:0.101.0
|
||||
com.google.api:gax:2.16.0
|
||||
com.google.apis:google-api-services-storage:v1-rev20220401-1.32.1
|
||||
com.google.auth:google-auth-library-credentials:1.6.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.6.0
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.4
|
||||
com.google.api:api-common:2.2.0
|
||||
com.google.api:gax-httpjson:0.103.1
|
||||
com.google.api:gax:2.18.1
|
||||
com.google.apis:google-api-services-storage:v1-rev20220509-1.32.1
|
||||
com.google.auth:google-auth-library-credentials:1.7.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.7.0
|
||||
com.google.auto.value:auto-value-annotations:1.9
|
||||
com.google.cloud:google-cloud-core-http:2.6.0
|
||||
com.google.cloud:google-cloud-core:2.6.0
|
||||
com.google.cloud:google-cloud-storage:2.6.1
|
||||
com.google.cloud:google-cloud-core-http:2.7.1
|
||||
com.google.cloud:google-cloud-core:2.7.1
|
||||
com.google.cloud:google-cloud-storage:2.7.2
|
||||
com.google.code.findbugs:jsr305:3.0.2
|
||||
com.google.code.gson:gson:2.9.0
|
||||
com.google.common.html.types:types:1.0.6
|
||||
@@ -26,46 +26,46 @@ com.google.escapevelocity:escapevelocity:0.9.1
|
||||
com.google.guava:failureaccess:1.0.1
|
||||
com.google.guava:guava:31.1-jre
|
||||
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.7
|
||||
com.google.http-client:google-http-client-appengine:1.41.7
|
||||
com.google.http-client:google-http-client-gson:1.41.7
|
||||
com.google.http-client:google-http-client-jackson2:1.41.7
|
||||
com.google.http-client:google-http-client:1.41.7
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.8
|
||||
com.google.http-client:google-http-client-appengine:1.41.8
|
||||
com.google.http-client:google-http-client-gson:1.41.8
|
||||
com.google.http-client:google-http-client-jackson2:1.41.8
|
||||
com.google.http-client:google-http-client:1.41.8
|
||||
com.google.inject.extensions:guice-multibindings:4.1.0
|
||||
com.google.inject:guice:4.1.0
|
||||
com.google.j2objc:j2objc-annotations:1.3
|
||||
com.google.jsinterop:jsinterop-annotations:1.0.1
|
||||
com.google.oauth-client:google-oauth-client:1.33.3
|
||||
com.google.protobuf:protobuf-java-util:3.19.4
|
||||
com.google.protobuf:protobuf-java:3.19.4
|
||||
com.google.protobuf:protobuf-java-util:3.20.1
|
||||
com.google.protobuf:protobuf-java:3.20.1
|
||||
com.google.template:soy:2021-02-01
|
||||
com.google.truth.extensions:truth-java8-extension:1.1.3
|
||||
com.google.truth:truth:1.1.3
|
||||
com.ibm.icu:icu4j:57.1
|
||||
commons-codec:commons-codec:1.11
|
||||
commons-logging:commons-logging:1.2
|
||||
io.grpc:grpc-context:1.45.1
|
||||
io.opencensus:opencensus-api:0.31.0
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.0
|
||||
io.grpc:grpc-context:1.46.0
|
||||
io.opencensus:opencensus-api:0.31.1
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.1
|
||||
javax.annotation:javax.annotation-api:1.3.2
|
||||
javax.annotation:jsr250-api:1.0
|
||||
javax.inject:javax.inject:1
|
||||
junit:junit:4.13.2
|
||||
net.bytebuddy:byte-buddy-agent:1.12.9
|
||||
net.bytebuddy:byte-buddy:1.12.9
|
||||
net.bytebuddy:byte-buddy-agent:1.12.10
|
||||
net.bytebuddy:byte-buddy:1.12.10
|
||||
org.apache.commons:commons-lang3:3.11
|
||||
org.apache.commons:commons-text:1.9
|
||||
org.apache.httpcomponents:httpclient:4.5.13
|
||||
org.apache.httpcomponents:httpcore:4.4.15
|
||||
org.checkerframework:checker-qual:3.21.4
|
||||
org.checkerframework:checker-qual:3.22.0
|
||||
org.hamcrest:hamcrest-core:1.3
|
||||
org.json:json:20160212
|
||||
org.junit.jupiter:junit-jupiter-api:5.8.2
|
||||
org.junit.jupiter:junit-jupiter-engine:5.8.2
|
||||
org.junit.platform:junit-platform-commons:1.8.2
|
||||
org.junit.platform:junit-platform-engine:1.8.2
|
||||
org.junit:junit-bom:5.8.2
|
||||
org.mockito:mockito-core:4.5.1
|
||||
org.junit.jupiter:junit-jupiter-api:5.9.0-M1
|
||||
org.junit.jupiter:junit-jupiter-engine:5.9.0-M1
|
||||
org.junit.platform:junit-platform-commons:1.9.0-M1
|
||||
org.junit.platform:junit-platform-engine:1.9.0-M1
|
||||
org.junit:junit-bom:5.9.0-M1
|
||||
org.mockito:mockito-core:4.6.1
|
||||
org.objenesis:objenesis:3.2
|
||||
org.opentest4j:opentest4j:1.2.0
|
||||
org.ow2.asm:asm-analysis:7.0
|
||||
|
||||
@@ -3,21 +3,21 @@
|
||||
# This file is expected to be part of source control.
|
||||
aopalliance:aopalliance:1.0
|
||||
args4j:args4j:2.0.23
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.2
|
||||
com.fasterxml.jackson:jackson-bom:2.13.2
|
||||
com.google.api-client:google-api-client:1.34.0
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.3
|
||||
com.fasterxml.jackson:jackson-bom:2.13.3
|
||||
com.google.api-client:google-api-client:1.34.1
|
||||
com.google.api.grpc:proto-google-common-protos:2.8.3
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.1
|
||||
com.google.api:api-common:2.1.5
|
||||
com.google.api:gax-httpjson:0.101.0
|
||||
com.google.api:gax:2.16.0
|
||||
com.google.apis:google-api-services-storage:v1-rev20220401-1.32.1
|
||||
com.google.auth:google-auth-library-credentials:1.6.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.6.0
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.4
|
||||
com.google.api:api-common:2.2.0
|
||||
com.google.api:gax-httpjson:0.103.1
|
||||
com.google.api:gax:2.18.1
|
||||
com.google.apis:google-api-services-storage:v1-rev20220509-1.32.1
|
||||
com.google.auth:google-auth-library-credentials:1.7.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.7.0
|
||||
com.google.auto.value:auto-value-annotations:1.9
|
||||
com.google.cloud:google-cloud-core-http:2.6.0
|
||||
com.google.cloud:google-cloud-core:2.6.0
|
||||
com.google.cloud:google-cloud-storage:2.6.1
|
||||
com.google.cloud:google-cloud-core-http:2.7.1
|
||||
com.google.cloud:google-cloud-core:2.7.1
|
||||
com.google.cloud:google-cloud-storage:2.7.2
|
||||
com.google.code.findbugs:jsr305:3.0.2
|
||||
com.google.code.gson:gson:2.9.0
|
||||
com.google.common.html.types:types:1.0.6
|
||||
@@ -26,46 +26,46 @@ com.google.escapevelocity:escapevelocity:0.9.1
|
||||
com.google.guava:failureaccess:1.0.1
|
||||
com.google.guava:guava:31.1-jre
|
||||
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.7
|
||||
com.google.http-client:google-http-client-appengine:1.41.7
|
||||
com.google.http-client:google-http-client-gson:1.41.7
|
||||
com.google.http-client:google-http-client-jackson2:1.41.7
|
||||
com.google.http-client:google-http-client:1.41.7
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.8
|
||||
com.google.http-client:google-http-client-appengine:1.41.8
|
||||
com.google.http-client:google-http-client-gson:1.41.8
|
||||
com.google.http-client:google-http-client-jackson2:1.41.8
|
||||
com.google.http-client:google-http-client:1.41.8
|
||||
com.google.inject.extensions:guice-multibindings:4.1.0
|
||||
com.google.inject:guice:4.1.0
|
||||
com.google.j2objc:j2objc-annotations:1.3
|
||||
com.google.jsinterop:jsinterop-annotations:1.0.1
|
||||
com.google.oauth-client:google-oauth-client:1.33.3
|
||||
com.google.protobuf:protobuf-java-util:3.19.4
|
||||
com.google.protobuf:protobuf-java:3.19.4
|
||||
com.google.protobuf:protobuf-java-util:3.20.1
|
||||
com.google.protobuf:protobuf-java:3.20.1
|
||||
com.google.template:soy:2021-02-01
|
||||
com.google.truth.extensions:truth-java8-extension:1.1.3
|
||||
com.google.truth:truth:1.1.3
|
||||
com.ibm.icu:icu4j:57.1
|
||||
commons-codec:commons-codec:1.11
|
||||
commons-logging:commons-logging:1.2
|
||||
io.grpc:grpc-context:1.45.1
|
||||
io.opencensus:opencensus-api:0.31.0
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.0
|
||||
io.grpc:grpc-context:1.46.0
|
||||
io.opencensus:opencensus-api:0.31.1
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.1
|
||||
javax.annotation:javax.annotation-api:1.3.2
|
||||
javax.annotation:jsr250-api:1.0
|
||||
javax.inject:javax.inject:1
|
||||
junit:junit:4.13.2
|
||||
net.bytebuddy:byte-buddy-agent:1.12.9
|
||||
net.bytebuddy:byte-buddy:1.12.9
|
||||
net.bytebuddy:byte-buddy-agent:1.12.10
|
||||
net.bytebuddy:byte-buddy:1.12.10
|
||||
org.apache.commons:commons-lang3:3.11
|
||||
org.apache.commons:commons-text:1.9
|
||||
org.apache.httpcomponents:httpclient:4.5.13
|
||||
org.apache.httpcomponents:httpcore:4.4.15
|
||||
org.checkerframework:checker-qual:3.21.4
|
||||
org.checkerframework:checker-qual:3.22.0
|
||||
org.hamcrest:hamcrest-core:1.3
|
||||
org.json:json:20160212
|
||||
org.junit.jupiter:junit-jupiter-api:5.8.2
|
||||
org.junit.jupiter:junit-jupiter-engine:5.8.2
|
||||
org.junit.platform:junit-platform-commons:1.8.2
|
||||
org.junit.platform:junit-platform-engine:1.8.2
|
||||
org.junit:junit-bom:5.8.2
|
||||
org.mockito:mockito-core:4.5.1
|
||||
org.junit.jupiter:junit-jupiter-api:5.9.0-M1
|
||||
org.junit.jupiter:junit-jupiter-engine:5.9.0-M1
|
||||
org.junit.platform:junit-platform-commons:1.9.0-M1
|
||||
org.junit.platform:junit-platform-engine:1.9.0-M1
|
||||
org.junit:junit-bom:5.9.0-M1
|
||||
org.mockito:mockito-core:4.6.1
|
||||
org.objenesis:objenesis:3.2
|
||||
org.opentest4j:opentest4j:1.2.0
|
||||
org.ow2.asm:asm-analysis:7.0
|
||||
|
||||
@@ -18,10 +18,10 @@ junit:junit:4.13.2
|
||||
org.checkerframework:checker-compat-qual:2.5.3
|
||||
org.checkerframework:checker-qual:3.19.0
|
||||
org.hamcrest:hamcrest-core:1.3
|
||||
org.junit.jupiter:junit-jupiter-api:5.8.2
|
||||
org.junit.jupiter:junit-jupiter-engine:5.8.2
|
||||
org.junit.platform:junit-platform-commons:1.8.2
|
||||
org.junit.platform:junit-platform-engine:1.8.2
|
||||
org.junit:junit-bom:5.8.2
|
||||
org.junit.jupiter:junit-jupiter-api:5.9.0-M1
|
||||
org.junit.jupiter:junit-jupiter-engine:5.9.0-M1
|
||||
org.junit.platform:junit-platform-commons:1.9.0-M1
|
||||
org.junit.platform:junit-platform-engine:1.9.0-M1
|
||||
org.junit:junit-bom:5.9.0-M1
|
||||
org.opentest4j:opentest4j:1.2.0
|
||||
org.ow2.asm:asm:9.1
|
||||
|
||||
@@ -19,10 +19,10 @@ org.apiguardian:apiguardian-api:1.1.2
|
||||
org.checkerframework:checker-compat-qual:2.5.3
|
||||
org.checkerframework:checker-qual:3.19.0
|
||||
org.hamcrest:hamcrest-core:1.3
|
||||
org.junit.jupiter:junit-jupiter-api:5.8.2
|
||||
org.junit.jupiter:junit-jupiter-engine:5.8.2
|
||||
org.junit.platform:junit-platform-commons:1.8.2
|
||||
org.junit.platform:junit-platform-engine:1.8.2
|
||||
org.junit:junit-bom:5.8.2
|
||||
org.junit.jupiter:junit-jupiter-api:5.9.0-M1
|
||||
org.junit.jupiter:junit-jupiter-engine:5.9.0-M1
|
||||
org.junit.platform:junit-platform-commons:1.9.0-M1
|
||||
org.junit.platform:junit-platform-engine:1.9.0-M1
|
||||
org.junit:junit-bom:5.9.0-M1
|
||||
org.opentest4j:opentest4j:1.2.0
|
||||
org.ow2.asm:asm:9.1
|
||||
|
||||
@@ -19,10 +19,10 @@ junit:junit:4.13.2
|
||||
org.checkerframework:checker-compat-qual:2.5.3
|
||||
org.checkerframework:checker-qual:3.19.0
|
||||
org.hamcrest:hamcrest-core:1.3
|
||||
org.junit.jupiter:junit-jupiter-api:5.8.2
|
||||
org.junit.jupiter:junit-jupiter-engine:5.8.2
|
||||
org.junit.platform:junit-platform-commons:1.8.2
|
||||
org.junit.platform:junit-platform-engine:1.8.2
|
||||
org.junit:junit-bom:5.8.2
|
||||
org.junit.jupiter:junit-jupiter-api:5.9.0-M1
|
||||
org.junit.jupiter:junit-jupiter-engine:5.9.0-M1
|
||||
org.junit.platform:junit-platform-commons:1.9.0-M1
|
||||
org.junit.platform:junit-platform-engine:1.9.0-M1
|
||||
org.junit:junit-bom:5.9.0-M1
|
||||
org.opentest4j:opentest4j:1.2.0
|
||||
org.ow2.asm:asm:9.1
|
||||
|
||||
@@ -19,10 +19,10 @@ junit:junit:4.13.2
|
||||
org.checkerframework:checker-compat-qual:2.5.3
|
||||
org.checkerframework:checker-qual:3.19.0
|
||||
org.hamcrest:hamcrest-core:1.3
|
||||
org.junit.jupiter:junit-jupiter-api:5.8.2
|
||||
org.junit.jupiter:junit-jupiter-engine:5.8.2
|
||||
org.junit.platform:junit-platform-commons:1.8.2
|
||||
org.junit.platform:junit-platform-engine:1.8.2
|
||||
org.junit:junit-bom:5.8.2
|
||||
org.junit.jupiter:junit-jupiter-api:5.9.0-M1
|
||||
org.junit.jupiter:junit-jupiter-engine:5.9.0-M1
|
||||
org.junit.platform:junit-platform-commons:1.9.0-M1
|
||||
org.junit.platform:junit-platform-engine:1.9.0-M1
|
||||
org.junit:junit-bom:5.9.0-M1
|
||||
org.opentest4j:opentest4j:1.2.0
|
||||
org.ow2.asm:asm:9.1
|
||||
|
||||
@@ -37,7 +37,6 @@ def jsDir = "${project.projectDir}/src/main/javascript"
|
||||
// TODO(weiminyu): identify cause and fix offending tests.
|
||||
def outcastTestPatterns = [
|
||||
// Problem seems to lie with AppEngine TaskQueue for test.
|
||||
"google/registry/batch/DeleteContactsAndHostsActionTest.*",
|
||||
"google/registry/batch/RefreshDnsOnHostRenameActionTest.*",
|
||||
"google/registry/flows/CheckApiActionTest.*",
|
||||
"google/registry/flows/EppLifecycleHostTest.*",
|
||||
@@ -714,10 +713,6 @@ createToolTask(
|
||||
createToolTask(
|
||||
'jpaDemoPipeline', 'google.registry.beam.common.JpaDemoPipeline')
|
||||
|
||||
createToolTask(
|
||||
'createSyntheticHistoryEntries',
|
||||
'google.registry.tools.javascrap.CreateSyntheticHistoryEntriesPipeline')
|
||||
|
||||
// Caller must provide projectId, GCP region, runner, and the kinds to delete
|
||||
// (comma-separated kind names or '*' for all). E.g.:
|
||||
// nom_build :core:bulkDeleteDatastore --args="--project=domain-registry-crash \
|
||||
@@ -795,11 +790,6 @@ if (environment == 'alpha') {
|
||||
mainClass: 'google.registry.beam.rde.RdePipeline',
|
||||
metaData : 'google/registry/beam/rde_pipeline_metadata.json'
|
||||
],
|
||||
validateDatabase :
|
||||
[
|
||||
mainClass: 'google.registry.beam.comparedb.ValidateDatabasePipeline',
|
||||
metaData: 'google/registry/beam/validate_database_pipeline_metadata.json'
|
||||
],
|
||||
resaveAllEppResources:
|
||||
[
|
||||
mainClass: 'google.registry.beam.resave.ResaveAllEppResourcesPipeline',
|
||||
|
||||
@@ -9,10 +9,10 @@ com.google.auto.value:auto-value:1.9
|
||||
com.google.auto:auto-common:1.2
|
||||
com.google.code.findbugs:jFormatString:3.0.0
|
||||
com.google.code.findbugs:jsr305:3.0.2
|
||||
com.google.dagger:dagger-compiler:2.41
|
||||
com.google.dagger:dagger-producers:2.41
|
||||
com.google.dagger:dagger-spi:2.41
|
||||
com.google.dagger:dagger:2.41
|
||||
com.google.dagger:dagger-compiler:2.42
|
||||
com.google.dagger:dagger-producers:2.42
|
||||
com.google.dagger:dagger-spi:2.42
|
||||
com.google.dagger:dagger:2.42
|
||||
com.google.devtools.ksp:symbol-processing-api:1.5.30-1.0.0
|
||||
com.google.errorprone:error_prone_annotation:2.3.4
|
||||
com.google.errorprone:error_prone_annotations:2.7.1
|
||||
@@ -35,11 +35,11 @@ org.checkerframework:checker-compat-qual:2.5.5
|
||||
org.checkerframework:checker-qual:3.12.0
|
||||
org.checkerframework:dataflow:3.0.0
|
||||
org.checkerframework:javacutil:3.0.0
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.5.32
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.6.10
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.5.32
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.32
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.5.32
|
||||
org.jetbrains.kotlinx:kotlinx-metadata-jvm:0.3.0
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.6.10
|
||||
org.jetbrains.kotlinx:kotlinx-metadata-jvm:0.4.2
|
||||
org.jetbrains:annotations:13.0
|
||||
org.pcollections:pcollections:2.1.2
|
||||
org.plumelib:plume-util:1.0.6
|
||||
|
||||
@@ -7,11 +7,13 @@ args4j:args4j:2.0.23
|
||||
cglib:cglib-nodep:2.2
|
||||
com.101tec:zkclient:0.10
|
||||
com.beust:jcommander:1.60
|
||||
com.fasterxml.jackson.core:jackson-annotations:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-databind:2.13.2
|
||||
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.2
|
||||
com.fasterxml.jackson:jackson-bom:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-annotations:2.13.3
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.3
|
||||
com.fasterxml.jackson.core:jackson-databind:2.13.3
|
||||
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.3
|
||||
com.fasterxml.jackson.datatype:jackson-datatype-joda:2.13.3
|
||||
com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.3
|
||||
com.fasterxml.jackson:jackson-bom:2.13.3
|
||||
com.fasterxml:classmate:1.5.1
|
||||
com.github.ben-manes.caffeine:caffeine:2.9.3
|
||||
com.github.docker-java:docker-java-api:3.2.13
|
||||
@@ -26,22 +28,22 @@ com.github.jnr:jnr-posix:3.1.15
|
||||
com.github.jnr:jnr-unixsocket:0.38.17
|
||||
com.github.jnr:jnr-x86asm:1.0.2
|
||||
com.google.android:annotations:4.1.1.4
|
||||
com.google.api-client:google-api-client-appengine:1.34.0
|
||||
com.google.api-client:google-api-client-appengine:1.35.0
|
||||
com.google.api-client:google-api-client-jackson2:1.32.2
|
||||
com.google.api-client:google-api-client-java6:1.34.0
|
||||
com.google.api-client:google-api-client-servlet:1.34.0
|
||||
com.google.api-client:google-api-client:1.34.0
|
||||
com.google.api-client:google-api-client-java6:1.35.0
|
||||
com.google.api-client:google-api-client-servlet:1.35.0
|
||||
com.google.api-client:google-api-client:1.35.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.10.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.134.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.134.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.27.1
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.27.1
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-v2:2.5.3
|
||||
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.97.5
|
||||
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.5.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-storage-v2:2.0.1-alpha
|
||||
com.google.api.grpc:grpc-google-cloud-storage-v2:2.2.2-alpha
|
||||
com.google.api.grpc:grpc-google-common-protos:2.7.2
|
||||
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.10.0
|
||||
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.134.0
|
||||
@@ -50,28 +52,29 @@ com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.5.3
|
||||
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.5.3
|
||||
com.google.api.grpc:proto-google-cloud-datastore-v1:0.93.4
|
||||
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.14
|
||||
com.google.api.grpc:proto-google-cloud-monitoring-v3:1.64.0
|
||||
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.98.0
|
||||
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.5.0
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1:2.1.7
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:2.1.7
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-storage-v2:2.0.1-alpha
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2:2.1.11
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.91.11
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.91.11
|
||||
com.google.api.grpc:proto-google-cloud-storage-v2:2.2.2-alpha
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.92.0
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.92.0
|
||||
com.google.api.grpc:proto-google-common-protos:2.8.3
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.1
|
||||
com.google.api:api-common:2.1.5
|
||||
com.google.api:gax-grpc:2.16.0
|
||||
com.google.api:gax-httpjson:0.101.0
|
||||
com.google.api:gax:2.16.0
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.4
|
||||
com.google.api:api-common:2.2.0
|
||||
com.google.api:gax-grpc:2.18.1
|
||||
com.google.api:gax-httpjson:0.103.1
|
||||
com.google.api:gax:2.18.1
|
||||
com.google.apis:google-api-services-admin-directory:directory_v1-rev118-1.25.0
|
||||
com.google.apis:google-api-services-appengine:v1-rev20220326-1.32.1
|
||||
com.google.apis:google-api-services-appengine:v1-rev20220509-1.32.1
|
||||
com.google.apis:google-api-services-bigquery:v2-rev20211129-1.32.1
|
||||
com.google.apis:google-api-services-clouddebugger:v2-rev20210813-1.32.1
|
||||
com.google.apis:google-api-services-cloudkms:v1-rev20220415-1.32.1
|
||||
com.google.apis:google-api-services-cloudkms:v1-rev20220513-1.32.1
|
||||
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20211017-1.32.1
|
||||
com.google.apis:google-api-services-dataflow:v1b3-rev20210818-1.32.1
|
||||
com.google.apis:google-api-services-dns:v2beta1-rev99-1.25.0
|
||||
@@ -79,47 +82,48 @@ com.google.apis:google-api-services-drive:v2-rev393-1.25.0
|
||||
com.google.apis:google-api-services-groupssettings:v1-rev20210624-1.32.1
|
||||
com.google.apis:google-api-services-healthcare:v1-rev20211016-1.32.1
|
||||
com.google.apis:google-api-services-iamcredentials:v1-rev20210326-1.32.1
|
||||
com.google.apis:google-api-services-monitoring:v3-rev20220322-1.32.1
|
||||
com.google.apis:google-api-services-monitoring:v3-rev20220525-1.32.1
|
||||
com.google.apis:google-api-services-pubsub:v1-rev20211130-1.32.1
|
||||
com.google.apis:google-api-services-sheets:v4-rev20220411-1.32.1
|
||||
com.google.apis:google-api-services-sqladmin:v1beta4-rev20220310-1.32.1
|
||||
com.google.apis:google-api-services-storage:v1-rev20220401-1.32.1
|
||||
com.google.apis:google-api-services-sqladmin:v1beta4-rev20220323-1.32.1
|
||||
com.google.apis:google-api-services-storage:v1-rev20220509-1.32.1
|
||||
com.google.appengine.tools:appengine-gcs-client:0.8.1
|
||||
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.86
|
||||
com.google.appengine:appengine-remote-api:2.0.4
|
||||
com.google.appengine:appengine-api-1.0-sdk:2.0.5
|
||||
com.google.appengine:appengine-remote-api:2.0.5
|
||||
com.google.appengine:appengine-testing:1.9.86
|
||||
com.google.auth:google-auth-library-credentials:1.6.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.6.0
|
||||
com.google.auth:google-auth-library-credentials:1.7.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.7.0
|
||||
com.google.auto.service:auto-service-annotations:1.0.1
|
||||
com.google.auto.value:auto-value-annotations:1.9
|
||||
com.google.auto.value:auto-value:1.9
|
||||
com.google.cloud.bigdataoss:gcsio:2.2.4
|
||||
com.google.cloud.bigdataoss:util:2.2.4
|
||||
com.google.cloud.bigtable:bigtable-client-core:1.25.1
|
||||
com.google.cloud.bigtable:bigtable-metrics-api:1.25.1
|
||||
com.google.cloud.bigdataoss:gcsio:2.2.6
|
||||
com.google.cloud.bigdataoss:util:2.2.6
|
||||
com.google.cloud.bigtable:bigtable-client-core:1.26.3
|
||||
com.google.cloud.bigtable:bigtable-metrics-api:1.26.3
|
||||
com.google.cloud.datastore:datastore-v1-proto-client:2.1.3
|
||||
com.google.cloud.sql:jdbc-socket-factory-core:1.5.0
|
||||
com.google.cloud.sql:jdbc-socket-factory-core:1.6.0
|
||||
com.google.cloud:google-cloud-bigquerystorage:2.10.0
|
||||
com.google.cloud:google-cloud-bigtable:1.27.1
|
||||
com.google.cloud:google-cloud-bigtable:2.5.3
|
||||
com.google.cloud:google-cloud-core-grpc:2.4.0
|
||||
com.google.cloud:google-cloud-core-http:2.6.0
|
||||
com.google.cloud:google-cloud-core:2.6.0
|
||||
com.google.cloud:google-cloud-core-http:2.7.1
|
||||
com.google.cloud:google-cloud-core:2.7.1
|
||||
com.google.cloud:google-cloud-firestore:3.0.14
|
||||
com.google.cloud:google-cloud-monitoring:1.82.0
|
||||
com.google.cloud:google-cloud-pubsub:1.116.0
|
||||
com.google.cloud:google-cloud-pubsublite:1.5.0
|
||||
com.google.cloud:google-cloud-secretmanager:2.1.7
|
||||
com.google.cloud:google-cloud-secretmanager:2.2.0
|
||||
com.google.cloud:google-cloud-spanner:6.20.0
|
||||
com.google.cloud:google-cloud-storage:2.6.1
|
||||
com.google.cloud:google-cloud-tasks:2.1.11
|
||||
com.google.cloud:google-cloud-storage:2.7.2
|
||||
com.google.cloud:google-cloud-tasks:2.2.0
|
||||
com.google.cloud:grpc-gcp:1.1.0
|
||||
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.14
|
||||
com.google.code.findbugs:jsr305:3.0.2
|
||||
com.google.code.gson:gson:2.9.0
|
||||
com.google.common.html.types:types:1.0.6
|
||||
com.google.dagger:dagger:2.41
|
||||
com.google.errorprone:error_prone_annotations:2.13.0
|
||||
com.google.dagger:dagger:2.42
|
||||
com.google.errorprone:error_prone_annotations:2.13.1
|
||||
com.google.escapevelocity:escapevelocity:0.9.1
|
||||
com.google.flatbuffers:flatbuffers-java:1.12.0
|
||||
com.google.flogger:flogger-system-backend:0.7.4
|
||||
@@ -129,58 +133,60 @@ com.google.guava:failureaccess:1.0.1
|
||||
com.google.guava:guava:31.1-jre
|
||||
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
|
||||
com.google.gwt:gwt-user:2.9.0
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.7
|
||||
com.google.http-client:google-http-client-appengine:1.41.7
|
||||
com.google.http-client:google-http-client-gson:1.41.7
|
||||
com.google.http-client:google-http-client-jackson2:1.41.7
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.8
|
||||
com.google.http-client:google-http-client-appengine:1.41.8
|
||||
com.google.http-client:google-http-client-gson:1.41.8
|
||||
com.google.http-client:google-http-client-jackson2:1.41.8
|
||||
com.google.http-client:google-http-client-protobuf:1.40.1
|
||||
com.google.http-client:google-http-client:1.41.7
|
||||
com.google.http-client:google-http-client:1.41.8
|
||||
com.google.inject.extensions:guice-multibindings:4.1.0
|
||||
com.google.inject:guice:4.1.0
|
||||
com.google.j2objc:j2objc-annotations:1.3
|
||||
com.google.jsinterop:jsinterop-annotations:2.0.0
|
||||
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.33.3
|
||||
com.google.oauth-client:google-oauth-client-java6:1.33.3
|
||||
com.google.oauth-client:google-oauth-client-jetty:1.33.3
|
||||
com.google.oauth-client:google-oauth-client-servlet:1.33.3
|
||||
com.google.oauth-client:google-oauth-client:1.33.3
|
||||
com.google.protobuf:protobuf-java-util:3.19.4
|
||||
com.google.protobuf:protobuf-java:3.19.4
|
||||
com.google.oauth-client:google-oauth-client-appengine:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-java6:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-jetty:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-servlet:1.34.0
|
||||
com.google.oauth-client:google-oauth-client:1.34.0
|
||||
com.google.protobuf:protobuf-java-util:3.20.1
|
||||
com.google.protobuf:protobuf-java:3.20.1
|
||||
com.google.re2j:re2j:1.6
|
||||
com.google.template:soy:2021-02-01
|
||||
com.googlecode.charts4j:charts4j:1.3
|
||||
com.googlecode.json-simple:json-simple:1.1.1
|
||||
com.ibm.icu:icu4j:71.1
|
||||
com.jcraft:jsch:0.1.55
|
||||
com.lmax:disruptor:3.4.2
|
||||
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.15
|
||||
commons-logging:commons-logging:1.2
|
||||
dnsjava:dnsjava:3.5.0
|
||||
dnsjava:dnsjava:3.5.1
|
||||
io.confluent:common-config:5.3.2
|
||||
io.confluent:common-utils:5.3.2
|
||||
io.confluent:kafka-avro-serializer:5.3.2
|
||||
io.confluent:kafka-schema-registry-client:5.3.2
|
||||
io.dropwizard.metrics:metrics-core:3.1.2
|
||||
io.github.classgraph:classgraph:4.8.104
|
||||
io.grpc:grpc-alts:1.45.1
|
||||
io.grpc:grpc-api:1.45.1
|
||||
io.grpc:grpc-auth:1.45.1
|
||||
io.grpc:grpc-context:1.45.1
|
||||
io.grpc:grpc-core:1.45.1
|
||||
io.grpc:grpc-googleapis:1.45.1
|
||||
io.grpc:grpc-grpclb:1.45.1
|
||||
io.grpc:grpc-netty-shaded:1.45.1
|
||||
io.grpc:grpc-alts:1.46.0
|
||||
io.grpc:grpc-api:1.46.0
|
||||
io.grpc:grpc-auth:1.46.0
|
||||
io.grpc:grpc-census:1.44.0
|
||||
io.grpc:grpc-context:1.46.0
|
||||
io.grpc:grpc-core:1.46.0
|
||||
io.grpc:grpc-googleapis:1.46.0
|
||||
io.grpc:grpc-grpclb:1.46.0
|
||||
io.grpc:grpc-netty-shaded:1.46.0
|
||||
io.grpc:grpc-netty:1.44.0
|
||||
io.grpc:grpc-protobuf-lite:1.45.1
|
||||
io.grpc:grpc-protobuf:1.45.1
|
||||
io.grpc:grpc-services:1.45.1
|
||||
io.grpc:grpc-stub:1.45.1
|
||||
io.grpc:grpc-xds:1.45.1
|
||||
io.grpc:grpc-protobuf-lite:1.46.0
|
||||
io.grpc:grpc-protobuf:1.46.0
|
||||
io.grpc:grpc-services:1.46.0
|
||||
io.grpc:grpc-stub:1.46.0
|
||||
io.grpc:grpc-xds:1.46.0
|
||||
io.netty:netty-buffer:4.1.72.Final
|
||||
io.netty:netty-codec-http2:4.1.72.Final
|
||||
io.netty:netty-codec-http:4.1.72.Final
|
||||
@@ -193,11 +199,18 @@ io.netty:netty-resolver:4.1.72.Final
|
||||
io.netty:netty-tcnative-boringssl-static:2.0.46.Final
|
||||
io.netty:netty-tcnative-classes:2.0.46.Final
|
||||
io.netty:netty-transport:4.1.72.Final
|
||||
io.opencensus:opencensus-api:0.31.0
|
||||
io.opencensus:opencensus-api:0.31.1
|
||||
io.opencensus:opencensus-contrib-exemplar-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-grpc-metrics:0.31.0
|
||||
io.opencensus:opencensus-contrib-grpc-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.1
|
||||
io.opencensus:opencensus-contrib-resource-util:0.31.0
|
||||
io.opencensus:opencensus-exporter-metrics-util:0.31.0
|
||||
io.opencensus:opencensus-exporter-stats-stackdriver:0.31.0
|
||||
io.opencensus:opencensus-impl-core:0.31.0
|
||||
io.opencensus:opencensus-impl:0.31.0
|
||||
io.opencensus:opencensus-proto:0.2.0
|
||||
io.perfmark:perfmark-api:0.23.0
|
||||
io.perfmark:perfmark-api:0.25.0
|
||||
it.unimi.dsi:fastutil:6.5.16
|
||||
javax.activation:activation:1.1
|
||||
javax.activation:javax.activation-api:1.2.0
|
||||
@@ -219,21 +232,21 @@ org.apache.arrow:arrow-format:5.0.0
|
||||
org.apache.arrow:arrow-memory-core:5.0.0
|
||||
org.apache.arrow:arrow-vector:5.0.0
|
||||
org.apache.avro:avro:1.8.2
|
||||
org.apache.beam:beam-model-fn-execution:2.38.0
|
||||
org.apache.beam:beam-model-job-management:2.38.0
|
||||
org.apache.beam:beam-model-pipeline:2.38.0
|
||||
org.apache.beam:beam-runners-core-construction-java:2.38.0
|
||||
org.apache.beam:beam-runners-core-java:2.38.0
|
||||
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.38.0
|
||||
org.apache.beam:beam-runners-java-fn-execution:2.38.0
|
||||
org.apache.beam:beam-sdks-java-core:2.38.0
|
||||
org.apache.beam:beam-sdks-java-expansion-service:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-arrow:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-protobuf:2.38.0
|
||||
org.apache.beam:beam-sdks-java-fn-execution:2.38.0
|
||||
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.38.0
|
||||
org.apache.beam:beam-sdks-java-io-kafka:2.38.0
|
||||
org.apache.beam:beam-model-fn-execution:2.39.0
|
||||
org.apache.beam:beam-model-job-management:2.39.0
|
||||
org.apache.beam:beam-model-pipeline:2.39.0
|
||||
org.apache.beam:beam-runners-core-construction-java:2.39.0
|
||||
org.apache.beam:beam-runners-core-java:2.39.0
|
||||
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.39.0
|
||||
org.apache.beam:beam-runners-java-fn-execution:2.39.0
|
||||
org.apache.beam:beam-sdks-java-core:2.39.0
|
||||
org.apache.beam:beam-sdks-java-expansion-service:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-arrow:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-protobuf:2.39.0
|
||||
org.apache.beam:beam-sdks-java-fn-execution:2.39.0
|
||||
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.39.0
|
||||
org.apache.beam:beam-sdks-java-io-kafka:2.39.0
|
||||
org.apache.beam:beam-vendor-bytebuddy-1_11_0:0.1
|
||||
org.apache.beam:beam-vendor-grpc-1_43_2:0.1
|
||||
org.apache.beam:beam-vendor-guava-26_0-jre:0.1
|
||||
@@ -245,43 +258,44 @@ org.bouncycastle:bcpg-jdk15on:1.67
|
||||
org.bouncycastle:bcpkix-jdk15on:1.67
|
||||
org.bouncycastle:bcprov-jdk15on:1.67
|
||||
org.checkerframework:checker-compat-qual:2.5.5
|
||||
org.checkerframework:checker-qual:3.21.4
|
||||
org.checkerframework:checker-qual:3.22.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.21
|
||||
org.conscrypt:conscrypt-openjdk-uber:2.5.1
|
||||
org.easymock:easymock:3.0
|
||||
org.flywaydb:flyway-core:8.5.10
|
||||
org.flywaydb:flyway-core:8.5.12
|
||||
org.glassfish.jaxb:jaxb-runtime:2.3.1
|
||||
org.glassfish.jaxb:txw2:2.3.1
|
||||
org.hamcrest:hamcrest-core:1.3
|
||||
org.hamcrest:hamcrest:2.1
|
||||
org.hibernate.common:hibernate-commons-annotations:5.1.2.Final
|
||||
org.hibernate:hibernate-core:5.6.8.Final
|
||||
org.hibernate:hibernate-hikaricp:5.6.8.Final
|
||||
org.hibernate:hibernate-core:5.6.9.Final
|
||||
org.hibernate:hibernate-hikaricp:5.6.9.Final
|
||||
org.jboss.logging:jboss-logging:3.4.3.Final
|
||||
org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.1.1.Final
|
||||
org.jboss:jandex:2.4.2.Final
|
||||
org.jetbrains:annotations:17.0.0
|
||||
org.joda:joda-money:1.0.1
|
||||
org.json:json:20200518
|
||||
org.jsoup:jsoup:1.14.3
|
||||
org.jsoup:jsoup:1.15.1
|
||||
org.jvnet.staxex:stax-ex:1.8
|
||||
org.objenesis:objenesis:1.2
|
||||
org.ow2.asm:asm-analysis:9.2
|
||||
org.ow2.asm:asm-analysis:9.3
|
||||
org.ow2.asm:asm-commons:9.2
|
||||
org.ow2.asm:asm-tree:9.2
|
||||
org.ow2.asm:asm-util:9.2
|
||||
org.ow2.asm:asm:9.2
|
||||
org.postgresql:postgresql:42.3.4
|
||||
org.ow2.asm:asm-tree:9.3
|
||||
org.ow2.asm:asm-util:9.3
|
||||
org.ow2.asm:asm:9.3
|
||||
org.postgresql:postgresql:42.3.6
|
||||
org.rnorth.duct-tape:duct-tape:1.0.8
|
||||
org.slf4j:slf4j-api:1.7.35
|
||||
org.springframework:spring-core:4.3.18.RELEASE
|
||||
org.springframework:spring-expression:4.3.18.RELEASE
|
||||
org.testcontainers:database-commons:1.17.1
|
||||
org.testcontainers:jdbc:1.17.1
|
||||
org.testcontainers:postgresql:1.17.1
|
||||
org.testcontainers:testcontainers:1.17.1
|
||||
org.slf4j:slf4j-api:1.7.36
|
||||
org.springframework:spring-core:5.3.18
|
||||
org.springframework:spring-expression:5.3.18
|
||||
org.springframework:spring-jcl:5.3.18
|
||||
org.testcontainers:database-commons:1.17.2
|
||||
org.testcontainers:jdbc:1.17.2
|
||||
org.testcontainers:postgresql:1.17.2
|
||||
org.testcontainers:testcontainers:1.17.2
|
||||
org.threeten:threetenbp:1.6.0
|
||||
org.tukaani:xz:1.5
|
||||
org.w3c.css:sac:1.3
|
||||
|
||||
@@ -7,11 +7,13 @@ args4j:args4j:2.0.23
|
||||
cglib:cglib-nodep:2.2
|
||||
com.101tec:zkclient:0.10
|
||||
com.beust:jcommander:1.60
|
||||
com.fasterxml.jackson.core:jackson-annotations:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-databind:2.13.2
|
||||
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.2
|
||||
com.fasterxml.jackson:jackson-bom:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-annotations:2.13.3
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.3
|
||||
com.fasterxml.jackson.core:jackson-databind:2.13.3
|
||||
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.3
|
||||
com.fasterxml.jackson.datatype:jackson-datatype-joda:2.13.3
|
||||
com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.3
|
||||
com.fasterxml.jackson:jackson-bom:2.13.3
|
||||
com.fasterxml:classmate:1.5.1
|
||||
com.github.ben-manes.caffeine:caffeine:2.9.3
|
||||
com.github.docker-java:docker-java-api:3.2.13
|
||||
@@ -25,22 +27,22 @@ com.github.jnr:jnr-ffi:2.2.11
|
||||
com.github.jnr:jnr-posix:3.1.15
|
||||
com.github.jnr:jnr-unixsocket:0.38.17
|
||||
com.github.jnr:jnr-x86asm:1.0.2
|
||||
com.google.api-client:google-api-client-appengine:1.34.0
|
||||
com.google.api-client:google-api-client-appengine:1.35.0
|
||||
com.google.api-client:google-api-client-jackson2:1.32.2
|
||||
com.google.api-client:google-api-client-java6:1.34.0
|
||||
com.google.api-client:google-api-client-servlet:1.34.0
|
||||
com.google.api-client:google-api-client:1.34.0
|
||||
com.google.api-client:google-api-client-java6:1.35.0
|
||||
com.google.api-client:google-api-client-servlet:1.35.0
|
||||
com.google.api-client:google-api-client:1.35.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.10.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.134.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.134.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.27.1
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.27.1
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-v2:2.5.3
|
||||
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.97.5
|
||||
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.5.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-storage-v2:2.0.1-alpha
|
||||
com.google.api.grpc:grpc-google-cloud-storage-v2:2.2.2-alpha
|
||||
com.google.api.grpc:grpc-google-common-protos:2.7.2
|
||||
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.10.0
|
||||
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.134.0
|
||||
@@ -49,28 +51,29 @@ com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.5.3
|
||||
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.5.3
|
||||
com.google.api.grpc:proto-google-cloud-datastore-v1:0.93.4
|
||||
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.14
|
||||
com.google.api.grpc:proto-google-cloud-monitoring-v3:1.64.0
|
||||
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.98.0
|
||||
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.5.0
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1:2.1.7
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:2.1.7
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-storage-v2:2.0.1-alpha
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2:2.1.11
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.91.11
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.91.11
|
||||
com.google.api.grpc:proto-google-cloud-storage-v2:2.2.2-alpha
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.92.0
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.92.0
|
||||
com.google.api.grpc:proto-google-common-protos:2.8.3
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.1
|
||||
com.google.api:api-common:2.1.5
|
||||
com.google.api:gax-grpc:2.16.0
|
||||
com.google.api:gax-httpjson:0.101.0
|
||||
com.google.api:gax:2.16.0
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.4
|
||||
com.google.api:api-common:2.2.0
|
||||
com.google.api:gax-grpc:2.18.1
|
||||
com.google.api:gax-httpjson:0.103.1
|
||||
com.google.api:gax:2.18.1
|
||||
com.google.apis:google-api-services-admin-directory:directory_v1-rev118-1.25.0
|
||||
com.google.apis:google-api-services-appengine:v1-rev20220326-1.32.1
|
||||
com.google.apis:google-api-services-appengine:v1-rev20220509-1.32.1
|
||||
com.google.apis:google-api-services-bigquery:v2-rev20211129-1.32.1
|
||||
com.google.apis:google-api-services-clouddebugger:v2-rev20210813-1.32.1
|
||||
com.google.apis:google-api-services-cloudkms:v1-rev20220415-1.32.1
|
||||
com.google.apis:google-api-services-cloudkms:v1-rev20220513-1.32.1
|
||||
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20211017-1.32.1
|
||||
com.google.apis:google-api-services-dataflow:v1b3-rev20210818-1.32.1
|
||||
com.google.apis:google-api-services-dns:v2beta1-rev99-1.25.0
|
||||
@@ -78,47 +81,48 @@ com.google.apis:google-api-services-drive:v2-rev393-1.25.0
|
||||
com.google.apis:google-api-services-groupssettings:v1-rev20210624-1.32.1
|
||||
com.google.apis:google-api-services-healthcare:v1-rev20211016-1.32.1
|
||||
com.google.apis:google-api-services-iamcredentials:v1-rev20210326-1.32.1
|
||||
com.google.apis:google-api-services-monitoring:v3-rev20220322-1.32.1
|
||||
com.google.apis:google-api-services-monitoring:v3-rev20220525-1.32.1
|
||||
com.google.apis:google-api-services-pubsub:v1-rev20211130-1.32.1
|
||||
com.google.apis:google-api-services-sheets:v4-rev20220411-1.32.1
|
||||
com.google.apis:google-api-services-sqladmin:v1beta4-rev20220310-1.32.1
|
||||
com.google.apis:google-api-services-storage:v1-rev20220401-1.32.1
|
||||
com.google.apis:google-api-services-sqladmin:v1beta4-rev20220323-1.32.1
|
||||
com.google.apis:google-api-services-storage:v1-rev20220509-1.32.1
|
||||
com.google.appengine.tools:appengine-gcs-client:0.8.1
|
||||
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.86
|
||||
com.google.appengine:appengine-remote-api:2.0.4
|
||||
com.google.appengine:appengine-api-1.0-sdk:2.0.5
|
||||
com.google.appengine:appengine-remote-api:2.0.5
|
||||
com.google.appengine:appengine-testing:1.9.86
|
||||
com.google.auth:google-auth-library-credentials:1.6.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.6.0
|
||||
com.google.auth:google-auth-library-credentials:1.7.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.7.0
|
||||
com.google.auto.service:auto-service-annotations:1.0.1
|
||||
com.google.auto.value:auto-value-annotations:1.9
|
||||
com.google.auto.value:auto-value:1.9
|
||||
com.google.cloud.bigdataoss:gcsio:2.2.4
|
||||
com.google.cloud.bigdataoss:util:2.2.4
|
||||
com.google.cloud.bigtable:bigtable-client-core:1.25.1
|
||||
com.google.cloud.bigtable:bigtable-metrics-api:1.25.1
|
||||
com.google.cloud.bigdataoss:gcsio:2.2.6
|
||||
com.google.cloud.bigdataoss:util:2.2.6
|
||||
com.google.cloud.bigtable:bigtable-client-core:1.26.3
|
||||
com.google.cloud.bigtable:bigtable-metrics-api:1.26.3
|
||||
com.google.cloud.datastore:datastore-v1-proto-client:2.1.3
|
||||
com.google.cloud.sql:jdbc-socket-factory-core:1.5.0
|
||||
com.google.cloud.sql:jdbc-socket-factory-core:1.6.0
|
||||
com.google.cloud:google-cloud-bigquerystorage:2.10.0
|
||||
com.google.cloud:google-cloud-bigtable:1.27.1
|
||||
com.google.cloud:google-cloud-bigtable:2.5.3
|
||||
com.google.cloud:google-cloud-core-grpc:2.4.0
|
||||
com.google.cloud:google-cloud-core-http:2.6.0
|
||||
com.google.cloud:google-cloud-core:2.6.0
|
||||
com.google.cloud:google-cloud-core-http:2.7.1
|
||||
com.google.cloud:google-cloud-core:2.7.1
|
||||
com.google.cloud:google-cloud-firestore:3.0.14
|
||||
com.google.cloud:google-cloud-monitoring:1.82.0
|
||||
com.google.cloud:google-cloud-pubsub:1.116.0
|
||||
com.google.cloud:google-cloud-pubsublite:1.5.0
|
||||
com.google.cloud:google-cloud-secretmanager:2.1.7
|
||||
com.google.cloud:google-cloud-secretmanager:2.2.0
|
||||
com.google.cloud:google-cloud-spanner:6.20.0
|
||||
com.google.cloud:google-cloud-storage:2.6.1
|
||||
com.google.cloud:google-cloud-tasks:2.1.11
|
||||
com.google.cloud:google-cloud-storage:2.7.2
|
||||
com.google.cloud:google-cloud-tasks:2.2.0
|
||||
com.google.cloud:grpc-gcp:1.1.0
|
||||
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.14
|
||||
com.google.code.findbugs:jsr305:3.0.2
|
||||
com.google.code.gson:gson:2.9.0
|
||||
com.google.common.html.types:types:1.0.6
|
||||
com.google.dagger:dagger:2.41
|
||||
com.google.errorprone:error_prone_annotations:2.13.0
|
||||
com.google.dagger:dagger:2.42
|
||||
com.google.errorprone:error_prone_annotations:2.13.1
|
||||
com.google.escapevelocity:escapevelocity:0.9.1
|
||||
com.google.flatbuffers:flatbuffers-java:1.12.0
|
||||
com.google.flogger:flogger-system-backend:0.7.4
|
||||
@@ -128,38 +132,39 @@ com.google.guava:failureaccess:1.0.1
|
||||
com.google.guava:guava:31.1-jre
|
||||
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
|
||||
com.google.gwt:gwt-user:2.9.0
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.7
|
||||
com.google.http-client:google-http-client-appengine:1.41.7
|
||||
com.google.http-client:google-http-client-gson:1.41.7
|
||||
com.google.http-client:google-http-client-jackson2:1.41.7
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.8
|
||||
com.google.http-client:google-http-client-appengine:1.41.8
|
||||
com.google.http-client:google-http-client-gson:1.41.8
|
||||
com.google.http-client:google-http-client-jackson2:1.41.8
|
||||
com.google.http-client:google-http-client-protobuf:1.40.1
|
||||
com.google.http-client:google-http-client:1.41.7
|
||||
com.google.http-client:google-http-client:1.41.8
|
||||
com.google.inject.extensions:guice-multibindings:4.1.0
|
||||
com.google.inject:guice:4.1.0
|
||||
com.google.j2objc:j2objc-annotations:1.3
|
||||
com.google.jsinterop:jsinterop-annotations:2.0.0
|
||||
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.33.3
|
||||
com.google.oauth-client:google-oauth-client-java6:1.33.3
|
||||
com.google.oauth-client:google-oauth-client-jetty:1.33.3
|
||||
com.google.oauth-client:google-oauth-client-servlet:1.33.3
|
||||
com.google.oauth-client:google-oauth-client:1.33.3
|
||||
com.google.protobuf:protobuf-java-util:3.19.4
|
||||
com.google.protobuf:protobuf-java:3.19.4
|
||||
com.google.oauth-client:google-oauth-client-appengine:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-java6:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-jetty:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-servlet:1.34.0
|
||||
com.google.oauth-client:google-oauth-client:1.34.0
|
||||
com.google.protobuf:protobuf-java-util:3.20.1
|
||||
com.google.protobuf:protobuf-java:3.20.1
|
||||
com.google.re2j:re2j:1.6
|
||||
com.google.template:soy:2021-02-01
|
||||
com.googlecode.charts4j:charts4j:1.3
|
||||
com.googlecode.json-simple:json-simple:1.1.1
|
||||
com.ibm.icu:icu4j:71.1
|
||||
com.jcraft:jsch:0.1.55
|
||||
com.lmax:disruptor:3.4.2
|
||||
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.15
|
||||
commons-logging:commons-logging:1.2
|
||||
dnsjava:dnsjava:3.5.0
|
||||
dnsjava:dnsjava:3.5.1
|
||||
io.confluent:common-config:5.3.2
|
||||
io.confluent:common-utils:5.3.2
|
||||
io.confluent:kafka-avro-serializer:5.3.2
|
||||
@@ -167,16 +172,19 @@ io.confluent:kafka-schema-registry-client:5.3.2
|
||||
io.dropwizard.metrics:metrics-core:3.1.2
|
||||
io.github.classgraph:classgraph:4.8.104
|
||||
io.grpc:grpc-alts:1.44.0
|
||||
io.grpc:grpc-api:1.45.1
|
||||
io.grpc:grpc-api:1.46.0
|
||||
io.grpc:grpc-auth:1.44.0
|
||||
io.grpc:grpc-context:1.45.1
|
||||
io.grpc:grpc-census:1.44.0
|
||||
io.grpc:grpc-context:1.46.0
|
||||
io.grpc:grpc-core:1.44.1
|
||||
io.grpc:grpc-grpclb:1.44.0
|
||||
io.grpc:grpc-netty-shaded:1.44.0
|
||||
io.grpc:grpc-netty:1.44.0
|
||||
io.grpc:grpc-protobuf-lite:1.45.1
|
||||
io.grpc:grpc-protobuf:1.45.1
|
||||
io.grpc:grpc-stub:1.45.1
|
||||
io.grpc:grpc-protobuf-lite:1.46.0
|
||||
io.grpc:grpc-protobuf:1.46.0
|
||||
io.grpc:grpc-services:1.44.0
|
||||
io.grpc:grpc-stub:1.46.0
|
||||
io.grpc:grpc-xds:1.44.0
|
||||
io.netty:netty-buffer:4.1.72.Final
|
||||
io.netty:netty-codec-http2:4.1.72.Final
|
||||
io.netty:netty-codec-http:4.1.72.Final
|
||||
@@ -187,9 +195,17 @@ io.netty:netty-resolver:4.1.72.Final
|
||||
io.netty:netty-tcnative-boringssl-static:2.0.46.Final
|
||||
io.netty:netty-tcnative-classes:2.0.46.Final
|
||||
io.netty:netty-transport:4.1.72.Final
|
||||
io.opencensus:opencensus-api:0.31.0
|
||||
io.opencensus:opencensus-api:0.31.1
|
||||
io.opencensus:opencensus-contrib-exemplar-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-grpc-metrics:0.31.0
|
||||
io.opencensus:opencensus-contrib-grpc-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.1
|
||||
io.opencensus:opencensus-contrib-resource-util:0.31.0
|
||||
io.opencensus:opencensus-exporter-metrics-util:0.31.0
|
||||
io.opencensus:opencensus-exporter-stats-stackdriver:0.31.0
|
||||
io.opencensus:opencensus-impl-core:0.31.0
|
||||
io.opencensus:opencensus-impl:0.31.0
|
||||
io.opencensus:opencensus-proto:0.2.0
|
||||
it.unimi.dsi:fastutil:6.5.16
|
||||
javax.activation:activation:1.1
|
||||
javax.activation:javax.activation-api:1.2.0
|
||||
@@ -210,21 +226,21 @@ org.apache.arrow:arrow-format:5.0.0
|
||||
org.apache.arrow:arrow-memory-core:5.0.0
|
||||
org.apache.arrow:arrow-vector:5.0.0
|
||||
org.apache.avro:avro:1.8.2
|
||||
org.apache.beam:beam-model-fn-execution:2.38.0
|
||||
org.apache.beam:beam-model-job-management:2.38.0
|
||||
org.apache.beam:beam-model-pipeline:2.38.0
|
||||
org.apache.beam:beam-runners-core-construction-java:2.38.0
|
||||
org.apache.beam:beam-runners-core-java:2.38.0
|
||||
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.38.0
|
||||
org.apache.beam:beam-runners-java-fn-execution:2.38.0
|
||||
org.apache.beam:beam-sdks-java-core:2.38.0
|
||||
org.apache.beam:beam-sdks-java-expansion-service:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-arrow:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-protobuf:2.38.0
|
||||
org.apache.beam:beam-sdks-java-fn-execution:2.38.0
|
||||
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.38.0
|
||||
org.apache.beam:beam-sdks-java-io-kafka:2.38.0
|
||||
org.apache.beam:beam-model-fn-execution:2.39.0
|
||||
org.apache.beam:beam-model-job-management:2.39.0
|
||||
org.apache.beam:beam-model-pipeline:2.39.0
|
||||
org.apache.beam:beam-runners-core-construction-java:2.39.0
|
||||
org.apache.beam:beam-runners-core-java:2.39.0
|
||||
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.39.0
|
||||
org.apache.beam:beam-runners-java-fn-execution:2.39.0
|
||||
org.apache.beam:beam-sdks-java-core:2.39.0
|
||||
org.apache.beam:beam-sdks-java-expansion-service:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-arrow:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-protobuf:2.39.0
|
||||
org.apache.beam:beam-sdks-java-fn-execution:2.39.0
|
||||
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.39.0
|
||||
org.apache.beam:beam-sdks-java-io-kafka:2.39.0
|
||||
org.apache.beam:beam-vendor-bytebuddy-1_11_0:0.1
|
||||
org.apache.beam:beam-vendor-grpc-1_43_2:0.1
|
||||
org.apache.beam:beam-vendor-guava-26_0-jre:0.1
|
||||
@@ -236,41 +252,42 @@ org.bouncycastle:bcpg-jdk15on:1.67
|
||||
org.bouncycastle:bcpkix-jdk15on:1.67
|
||||
org.bouncycastle:bcprov-jdk15on:1.67
|
||||
org.checkerframework:checker-compat-qual:2.5.5
|
||||
org.checkerframework:checker-qual:3.21.4
|
||||
org.checkerframework:checker-qual:3.22.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.5.1
|
||||
org.easymock:easymock:3.0
|
||||
org.flywaydb:flyway-core:8.5.10
|
||||
org.flywaydb:flyway-core:8.5.12
|
||||
org.glassfish.jaxb:jaxb-runtime:2.3.1
|
||||
org.glassfish.jaxb:txw2:2.3.1
|
||||
org.hamcrest:hamcrest:2.1
|
||||
org.hibernate.common:hibernate-commons-annotations:5.1.2.Final
|
||||
org.hibernate:hibernate-core:5.6.8.Final
|
||||
org.hibernate:hibernate-hikaricp:5.6.8.Final
|
||||
org.hibernate:hibernate-core:5.6.9.Final
|
||||
org.hibernate:hibernate-hikaricp:5.6.9.Final
|
||||
org.jboss.logging:jboss-logging:3.4.3.Final
|
||||
org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.1.1.Final
|
||||
org.jboss:jandex:2.4.2.Final
|
||||
org.jetbrains:annotations:17.0.0
|
||||
org.joda:joda-money:1.0.1
|
||||
org.json:json:20200518
|
||||
org.jsoup:jsoup:1.14.3
|
||||
org.jsoup:jsoup:1.15.1
|
||||
org.jvnet.staxex:stax-ex:1.8
|
||||
org.objenesis:objenesis:1.2
|
||||
org.ow2.asm:asm-analysis:9.2
|
||||
org.ow2.asm:asm-analysis:9.3
|
||||
org.ow2.asm:asm-commons:9.2
|
||||
org.ow2.asm:asm-tree:9.2
|
||||
org.ow2.asm:asm-util:9.2
|
||||
org.ow2.asm:asm:9.2
|
||||
org.postgresql:postgresql:42.3.4
|
||||
org.ow2.asm:asm-tree:9.3
|
||||
org.ow2.asm:asm-util:9.3
|
||||
org.ow2.asm:asm:9.3
|
||||
org.postgresql:postgresql:42.3.6
|
||||
org.rnorth.duct-tape:duct-tape:1.0.8
|
||||
org.slf4j:slf4j-api:1.7.35
|
||||
org.springframework:spring-core:4.3.18.RELEASE
|
||||
org.springframework:spring-expression:4.3.18.RELEASE
|
||||
org.testcontainers:database-commons:1.17.1
|
||||
org.testcontainers:jdbc:1.17.1
|
||||
org.testcontainers:postgresql:1.17.1
|
||||
org.testcontainers:testcontainers:1.17.1
|
||||
org.slf4j:slf4j-api:1.7.36
|
||||
org.springframework:spring-core:5.3.18
|
||||
org.springframework:spring-expression:5.3.18
|
||||
org.springframework:spring-jcl:5.3.18
|
||||
org.testcontainers:database-commons:1.17.2
|
||||
org.testcontainers:jdbc:1.17.2
|
||||
org.testcontainers:postgresql:1.17.2
|
||||
org.testcontainers:testcontainers:1.17.2
|
||||
org.threeten:threetenbp:1.6.0
|
||||
org.tukaani:xz:1.5
|
||||
org.w3c.css:sac:1.3
|
||||
|
||||
@@ -7,11 +7,13 @@ args4j:args4j:2.0.23
|
||||
cglib:cglib-nodep:2.2
|
||||
com.101tec:zkclient:0.10
|
||||
com.beust:jcommander:1.60
|
||||
com.fasterxml.jackson.core:jackson-annotations:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-databind:2.13.2
|
||||
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.2
|
||||
com.fasterxml.jackson:jackson-bom:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-annotations:2.13.3
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.3
|
||||
com.fasterxml.jackson.core:jackson-databind:2.13.3
|
||||
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.3
|
||||
com.fasterxml.jackson.datatype:jackson-datatype-joda:2.13.3
|
||||
com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.3
|
||||
com.fasterxml.jackson:jackson-bom:2.13.3
|
||||
com.fasterxml:classmate:1.5.1
|
||||
com.github.ben-manes.caffeine:caffeine:2.9.3
|
||||
com.github.docker-java:docker-java-api:3.2.13
|
||||
@@ -26,22 +28,22 @@ com.github.jnr:jnr-posix:3.1.15
|
||||
com.github.jnr:jnr-unixsocket:0.38.17
|
||||
com.github.jnr:jnr-x86asm:1.0.2
|
||||
com.google.android:annotations:4.1.1.4
|
||||
com.google.api-client:google-api-client-appengine:1.34.0
|
||||
com.google.api-client:google-api-client-appengine:1.35.0
|
||||
com.google.api-client:google-api-client-jackson2:1.32.2
|
||||
com.google.api-client:google-api-client-java6:1.34.0
|
||||
com.google.api-client:google-api-client-servlet:1.34.0
|
||||
com.google.api-client:google-api-client:1.34.0
|
||||
com.google.api-client:google-api-client-java6:1.35.0
|
||||
com.google.api-client:google-api-client-servlet:1.35.0
|
||||
com.google.api-client:google-api-client:1.35.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.10.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.134.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.134.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.27.1
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.27.1
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-v2:2.5.3
|
||||
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.97.5
|
||||
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.5.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-storage-v2:2.0.1-alpha
|
||||
com.google.api.grpc:grpc-google-cloud-storage-v2:2.2.2-alpha
|
||||
com.google.api.grpc:grpc-google-common-protos:2.7.2
|
||||
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.10.0
|
||||
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.134.0
|
||||
@@ -50,28 +52,29 @@ com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.5.3
|
||||
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.5.3
|
||||
com.google.api.grpc:proto-google-cloud-datastore-v1:0.93.4
|
||||
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.14
|
||||
com.google.api.grpc:proto-google-cloud-monitoring-v3:1.64.0
|
||||
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.98.0
|
||||
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.5.0
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1:2.1.7
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:2.1.7
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-storage-v2:2.0.1-alpha
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2:2.1.11
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.91.11
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.91.11
|
||||
com.google.api.grpc:proto-google-cloud-storage-v2:2.2.2-alpha
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.92.0
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.92.0
|
||||
com.google.api.grpc:proto-google-common-protos:2.8.3
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.1
|
||||
com.google.api:api-common:2.1.5
|
||||
com.google.api:gax-grpc:2.16.0
|
||||
com.google.api:gax-httpjson:0.101.0
|
||||
com.google.api:gax:2.16.0
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.4
|
||||
com.google.api:api-common:2.2.0
|
||||
com.google.api:gax-grpc:2.18.1
|
||||
com.google.api:gax-httpjson:0.103.1
|
||||
com.google.api:gax:2.18.1
|
||||
com.google.apis:google-api-services-admin-directory:directory_v1-rev118-1.25.0
|
||||
com.google.apis:google-api-services-appengine:v1-rev20220326-1.32.1
|
||||
com.google.apis:google-api-services-appengine:v1-rev20220509-1.32.1
|
||||
com.google.apis:google-api-services-bigquery:v2-rev20211129-1.32.1
|
||||
com.google.apis:google-api-services-clouddebugger:v2-rev20210813-1.32.1
|
||||
com.google.apis:google-api-services-cloudkms:v1-rev20220415-1.32.1
|
||||
com.google.apis:google-api-services-cloudkms:v1-rev20220513-1.32.1
|
||||
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20211017-1.32.1
|
||||
com.google.apis:google-api-services-dataflow:v1b3-rev20210818-1.32.1
|
||||
com.google.apis:google-api-services-dns:v2beta1-rev99-1.25.0
|
||||
@@ -79,48 +82,49 @@ com.google.apis:google-api-services-drive:v2-rev393-1.25.0
|
||||
com.google.apis:google-api-services-groupssettings:v1-rev20210624-1.32.1
|
||||
com.google.apis:google-api-services-healthcare:v1-rev20211016-1.32.1
|
||||
com.google.apis:google-api-services-iamcredentials:v1-rev20210326-1.32.1
|
||||
com.google.apis:google-api-services-monitoring:v3-rev20220322-1.32.1
|
||||
com.google.apis:google-api-services-monitoring:v3-rev20220525-1.32.1
|
||||
com.google.apis:google-api-services-pubsub:v1-rev20211130-1.32.1
|
||||
com.google.apis:google-api-services-sheets:v4-rev20220411-1.32.1
|
||||
com.google.apis:google-api-services-sqladmin:v1beta4-rev20220310-1.32.1
|
||||
com.google.apis:google-api-services-storage:v1-rev20220401-1.32.1
|
||||
com.google.apis:google-api-services-sqladmin:v1beta4-rev20220323-1.32.1
|
||||
com.google.apis:google-api-services-storage:v1-rev20220509-1.32.1
|
||||
com.google.appengine.tools:appengine-gcs-client:0.8.1
|
||||
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.86
|
||||
com.google.appengine:appengine-remote-api:2.0.4
|
||||
com.google.appengine:appengine-api-1.0-sdk:2.0.5
|
||||
com.google.appengine:appengine-remote-api:2.0.5
|
||||
com.google.appengine:appengine-testing:1.9.86
|
||||
com.google.auth:google-auth-library-credentials:1.6.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.6.0
|
||||
com.google.auth:google-auth-library-credentials:1.7.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.7.0
|
||||
com.google.auto.service:auto-service-annotations:1.0.1
|
||||
com.google.auto.value:auto-value-annotations:1.9
|
||||
com.google.auto.value:auto-value:1.9
|
||||
com.google.cloud.bigdataoss:gcsio:2.2.4
|
||||
com.google.cloud.bigdataoss:util:2.2.4
|
||||
com.google.cloud.bigtable:bigtable-client-core:1.25.1
|
||||
com.google.cloud.bigtable:bigtable-metrics-api:1.25.1
|
||||
com.google.cloud.bigdataoss:gcsio:2.2.6
|
||||
com.google.cloud.bigdataoss:util:2.2.6
|
||||
com.google.cloud.bigtable:bigtable-client-core:1.26.3
|
||||
com.google.cloud.bigtable:bigtable-metrics-api:1.26.3
|
||||
com.google.cloud.datastore:datastore-v1-proto-client:2.1.3
|
||||
com.google.cloud.sql:jdbc-socket-factory-core:1.5.0
|
||||
com.google.cloud.sql:postgres-socket-factory:1.5.0
|
||||
com.google.cloud.sql:jdbc-socket-factory-core:1.6.0
|
||||
com.google.cloud.sql:postgres-socket-factory:1.6.0
|
||||
com.google.cloud:google-cloud-bigquerystorage:2.10.0
|
||||
com.google.cloud:google-cloud-bigtable:1.27.1
|
||||
com.google.cloud:google-cloud-bigtable:2.5.3
|
||||
com.google.cloud:google-cloud-core-grpc:2.4.0
|
||||
com.google.cloud:google-cloud-core-http:2.6.0
|
||||
com.google.cloud:google-cloud-core:2.6.0
|
||||
com.google.cloud:google-cloud-core-http:2.7.1
|
||||
com.google.cloud:google-cloud-core:2.7.1
|
||||
com.google.cloud:google-cloud-firestore:3.0.14
|
||||
com.google.cloud:google-cloud-monitoring:1.82.0
|
||||
com.google.cloud:google-cloud-pubsub:1.116.0
|
||||
com.google.cloud:google-cloud-pubsublite:1.5.0
|
||||
com.google.cloud:google-cloud-secretmanager:2.1.7
|
||||
com.google.cloud:google-cloud-secretmanager:2.2.0
|
||||
com.google.cloud:google-cloud-spanner:6.20.0
|
||||
com.google.cloud:google-cloud-storage:2.6.1
|
||||
com.google.cloud:google-cloud-tasks:2.1.11
|
||||
com.google.cloud:google-cloud-storage:2.7.2
|
||||
com.google.cloud:google-cloud-tasks:2.2.0
|
||||
com.google.cloud:grpc-gcp:1.1.0
|
||||
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.14
|
||||
com.google.code.findbugs:jsr305:3.0.2
|
||||
com.google.code.gson:gson:2.9.0
|
||||
com.google.common.html.types:types:1.0.6
|
||||
com.google.dagger:dagger:2.41
|
||||
com.google.errorprone:error_prone_annotations:2.13.0
|
||||
com.google.dagger:dagger:2.42
|
||||
com.google.errorprone:error_prone_annotations:2.13.1
|
||||
com.google.escapevelocity:escapevelocity:0.9.1
|
||||
com.google.flatbuffers:flatbuffers-java:1.12.0
|
||||
com.google.flogger:flogger-system-backend:0.7.4
|
||||
@@ -130,38 +134,39 @@ com.google.guava:failureaccess:1.0.1
|
||||
com.google.guava:guava:31.1-jre
|
||||
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
|
||||
com.google.gwt:gwt-user:2.9.0
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.7
|
||||
com.google.http-client:google-http-client-appengine:1.41.7
|
||||
com.google.http-client:google-http-client-gson:1.41.7
|
||||
com.google.http-client:google-http-client-jackson2:1.41.7
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.8
|
||||
com.google.http-client:google-http-client-appengine:1.41.8
|
||||
com.google.http-client:google-http-client-gson:1.41.8
|
||||
com.google.http-client:google-http-client-jackson2:1.41.8
|
||||
com.google.http-client:google-http-client-protobuf:1.40.1
|
||||
com.google.http-client:google-http-client:1.41.7
|
||||
com.google.http-client:google-http-client:1.41.8
|
||||
com.google.inject.extensions:guice-multibindings:4.1.0
|
||||
com.google.inject:guice:4.1.0
|
||||
com.google.j2objc:j2objc-annotations:1.3
|
||||
com.google.jsinterop:jsinterop-annotations:2.0.0
|
||||
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.33.3
|
||||
com.google.oauth-client:google-oauth-client-java6:1.33.3
|
||||
com.google.oauth-client:google-oauth-client-jetty:1.33.3
|
||||
com.google.oauth-client:google-oauth-client-servlet:1.33.3
|
||||
com.google.oauth-client:google-oauth-client:1.33.3
|
||||
com.google.protobuf:protobuf-java-util:3.19.4
|
||||
com.google.protobuf:protobuf-java:3.19.4
|
||||
com.google.oauth-client:google-oauth-client-appengine:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-java6:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-jetty:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-servlet:1.34.0
|
||||
com.google.oauth-client:google-oauth-client:1.34.0
|
||||
com.google.protobuf:protobuf-java-util:3.20.1
|
||||
com.google.protobuf:protobuf-java:3.20.1
|
||||
com.google.re2j:re2j:1.6
|
||||
com.google.template:soy:2021-02-01
|
||||
com.googlecode.charts4j:charts4j:1.3
|
||||
com.googlecode.json-simple:json-simple:1.1.1
|
||||
com.ibm.icu:icu4j:71.1
|
||||
com.jcraft:jsch:0.1.55
|
||||
com.lmax:disruptor:3.4.2
|
||||
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.15
|
||||
commons-logging:commons-logging:1.2
|
||||
dnsjava:dnsjava:3.5.0
|
||||
dnsjava:dnsjava:3.5.1
|
||||
guru.nidi.com.eclipsesource.j2v8:j2v8_linux_x86_64:4.6.0
|
||||
guru.nidi.com.eclipsesource.j2v8:j2v8_macosx_x86_64:4.6.0
|
||||
guru.nidi.com.eclipsesource.j2v8:j2v8_win32_x86:4.6.0
|
||||
@@ -175,20 +180,21 @@ io.confluent:kafka-avro-serializer:5.3.2
|
||||
io.confluent:kafka-schema-registry-client:5.3.2
|
||||
io.dropwizard.metrics:metrics-core:3.1.2
|
||||
io.github.classgraph:classgraph:4.8.104
|
||||
io.grpc:grpc-alts:1.45.1
|
||||
io.grpc:grpc-api:1.45.1
|
||||
io.grpc:grpc-auth:1.45.1
|
||||
io.grpc:grpc-context:1.45.1
|
||||
io.grpc:grpc-core:1.45.1
|
||||
io.grpc:grpc-googleapis:1.45.1
|
||||
io.grpc:grpc-grpclb:1.45.1
|
||||
io.grpc:grpc-netty-shaded:1.45.1
|
||||
io.grpc:grpc-alts:1.46.0
|
||||
io.grpc:grpc-api:1.46.0
|
||||
io.grpc:grpc-auth:1.46.0
|
||||
io.grpc:grpc-census:1.44.0
|
||||
io.grpc:grpc-context:1.46.0
|
||||
io.grpc:grpc-core:1.46.0
|
||||
io.grpc:grpc-googleapis:1.46.0
|
||||
io.grpc:grpc-grpclb:1.46.0
|
||||
io.grpc:grpc-netty-shaded:1.46.0
|
||||
io.grpc:grpc-netty:1.44.0
|
||||
io.grpc:grpc-protobuf-lite:1.45.1
|
||||
io.grpc:grpc-protobuf:1.45.1
|
||||
io.grpc:grpc-services:1.45.1
|
||||
io.grpc:grpc-stub:1.45.1
|
||||
io.grpc:grpc-xds:1.45.1
|
||||
io.grpc:grpc-protobuf-lite:1.46.0
|
||||
io.grpc:grpc-protobuf:1.46.0
|
||||
io.grpc:grpc-services:1.46.0
|
||||
io.grpc:grpc-stub:1.46.0
|
||||
io.grpc:grpc-xds:1.46.0
|
||||
io.netty:netty-buffer:4.1.72.Final
|
||||
io.netty:netty-codec-http2:4.1.72.Final
|
||||
io.netty:netty-codec-http:4.1.72.Final
|
||||
@@ -201,11 +207,18 @@ io.netty:netty-resolver:4.1.72.Final
|
||||
io.netty:netty-tcnative-boringssl-static:2.0.46.Final
|
||||
io.netty:netty-tcnative-classes:2.0.46.Final
|
||||
io.netty:netty-transport:4.1.72.Final
|
||||
io.opencensus:opencensus-api:0.31.0
|
||||
io.opencensus:opencensus-api:0.31.1
|
||||
io.opencensus:opencensus-contrib-exemplar-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-grpc-metrics:0.31.0
|
||||
io.opencensus:opencensus-contrib-grpc-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.1
|
||||
io.opencensus:opencensus-contrib-resource-util:0.31.0
|
||||
io.opencensus:opencensus-exporter-metrics-util:0.31.0
|
||||
io.opencensus:opencensus-exporter-stats-stackdriver:0.31.0
|
||||
io.opencensus:opencensus-impl-core:0.31.0
|
||||
io.opencensus:opencensus-impl:0.31.0
|
||||
io.opencensus:opencensus-proto:0.2.0
|
||||
io.perfmark:perfmark-api:0.23.0
|
||||
io.perfmark:perfmark-api:0.25.0
|
||||
it.unimi.dsi:fastutil:6.5.16
|
||||
javax.activation:activation:1.1
|
||||
javax.activation:javax.activation-api:1.2.0
|
||||
@@ -228,21 +241,21 @@ org.apache.arrow:arrow-format:5.0.0
|
||||
org.apache.arrow:arrow-memory-core:5.0.0
|
||||
org.apache.arrow:arrow-vector:5.0.0
|
||||
org.apache.avro:avro:1.8.2
|
||||
org.apache.beam:beam-model-fn-execution:2.38.0
|
||||
org.apache.beam:beam-model-job-management:2.38.0
|
||||
org.apache.beam:beam-model-pipeline:2.38.0
|
||||
org.apache.beam:beam-runners-core-construction-java:2.38.0
|
||||
org.apache.beam:beam-runners-core-java:2.38.0
|
||||
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.38.0
|
||||
org.apache.beam:beam-runners-java-fn-execution:2.38.0
|
||||
org.apache.beam:beam-sdks-java-core:2.38.0
|
||||
org.apache.beam:beam-sdks-java-expansion-service:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-arrow:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-protobuf:2.38.0
|
||||
org.apache.beam:beam-sdks-java-fn-execution:2.38.0
|
||||
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.38.0
|
||||
org.apache.beam:beam-sdks-java-io-kafka:2.38.0
|
||||
org.apache.beam:beam-model-fn-execution:2.39.0
|
||||
org.apache.beam:beam-model-job-management:2.39.0
|
||||
org.apache.beam:beam-model-pipeline:2.39.0
|
||||
org.apache.beam:beam-runners-core-construction-java:2.39.0
|
||||
org.apache.beam:beam-runners-core-java:2.39.0
|
||||
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.39.0
|
||||
org.apache.beam:beam-runners-java-fn-execution:2.39.0
|
||||
org.apache.beam:beam-sdks-java-core:2.39.0
|
||||
org.apache.beam:beam-sdks-java-expansion-service:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-arrow:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-protobuf:2.39.0
|
||||
org.apache.beam:beam-sdks-java-fn-execution:2.39.0
|
||||
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.39.0
|
||||
org.apache.beam:beam-sdks-java-io-kafka:2.39.0
|
||||
org.apache.beam:beam-vendor-bytebuddy-1_11_0:0.1
|
||||
org.apache.beam:beam-vendor-grpc-1_43_2:0.1
|
||||
org.apache.beam:beam-vendor-guava-26_0-jre:0.1
|
||||
@@ -255,46 +268,47 @@ org.bouncycastle:bcpg-jdk15on:1.67
|
||||
org.bouncycastle:bcpkix-jdk15on:1.67
|
||||
org.bouncycastle:bcprov-jdk15on:1.67
|
||||
org.checkerframework:checker-compat-qual:2.5.5
|
||||
org.checkerframework:checker-qual:3.21.4
|
||||
org.checkerframework:checker-qual:3.22.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.21
|
||||
org.conscrypt:conscrypt-openjdk-uber:2.5.1
|
||||
org.easymock:easymock:3.0
|
||||
org.flywaydb:flyway-core:8.5.10
|
||||
org.flywaydb:flyway-core:8.5.12
|
||||
org.glassfish.jaxb:jaxb-runtime:2.3.1
|
||||
org.glassfish.jaxb:txw2:2.3.1
|
||||
org.hamcrest:hamcrest-core:1.3
|
||||
org.hamcrest:hamcrest:2.1
|
||||
org.hibernate.common:hibernate-commons-annotations:5.1.2.Final
|
||||
org.hibernate:hibernate-core:5.6.8.Final
|
||||
org.hibernate:hibernate-hikaricp:5.6.8.Final
|
||||
org.hibernate:hibernate-core:5.6.9.Final
|
||||
org.hibernate:hibernate-hikaricp:5.6.9.Final
|
||||
org.jboss.logging:jboss-logging:3.4.3.Final
|
||||
org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.1.1.Final
|
||||
org.jboss:jandex:2.4.2.Final
|
||||
org.jetbrains:annotations:17.0.0
|
||||
org.joda:joda-money:1.0.1
|
||||
org.json:json:20200518
|
||||
org.jsoup:jsoup:1.14.3
|
||||
org.jsoup:jsoup:1.15.1
|
||||
org.jvnet.staxex:stax-ex:1.8
|
||||
org.objenesis:objenesis:1.2
|
||||
org.ow2.asm:asm-analysis:9.2
|
||||
org.ow2.asm:asm-analysis:9.3
|
||||
org.ow2.asm:asm-commons:9.2
|
||||
org.ow2.asm:asm-tree:9.2
|
||||
org.ow2.asm:asm-util:9.2
|
||||
org.ow2.asm:asm:9.2
|
||||
org.postgresql:postgresql:42.3.4
|
||||
org.ow2.asm:asm-tree:9.3
|
||||
org.ow2.asm:asm-util:9.3
|
||||
org.ow2.asm:asm:9.3
|
||||
org.postgresql:postgresql:42.3.6
|
||||
org.rnorth.duct-tape:duct-tape:1.0.8
|
||||
org.slf4j:jcl-over-slf4j:1.7.30
|
||||
org.slf4j:jul-to-slf4j:1.7.30
|
||||
org.slf4j:slf4j-api:2.0.0-alpha7
|
||||
org.slf4j:slf4j-jdk14:2.0.0-alpha7
|
||||
org.springframework:spring-core:4.3.18.RELEASE
|
||||
org.springframework:spring-expression:4.3.18.RELEASE
|
||||
org.testcontainers:database-commons:1.17.1
|
||||
org.testcontainers:jdbc:1.17.1
|
||||
org.testcontainers:postgresql:1.17.1
|
||||
org.testcontainers:testcontainers:1.17.1
|
||||
org.springframework:spring-core:5.3.18
|
||||
org.springframework:spring-expression:5.3.18
|
||||
org.springframework:spring-jcl:5.3.18
|
||||
org.testcontainers:database-commons:1.17.2
|
||||
org.testcontainers:jdbc:1.17.2
|
||||
org.testcontainers:postgresql:1.17.2
|
||||
org.testcontainers:testcontainers:1.17.2
|
||||
org.threeten:threetenbp:1.6.0
|
||||
org.tukaani:xz:1.5
|
||||
org.w3c.css:sac:1.3
|
||||
|
||||
@@ -7,11 +7,13 @@ args4j:args4j:2.0.23
|
||||
cglib:cglib-nodep:2.2
|
||||
com.101tec:zkclient:0.10
|
||||
com.beust:jcommander:1.60
|
||||
com.fasterxml.jackson.core:jackson-annotations:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-databind:2.13.2
|
||||
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.2
|
||||
com.fasterxml.jackson:jackson-bom:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-annotations:2.13.3
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.3
|
||||
com.fasterxml.jackson.core:jackson-databind:2.13.3
|
||||
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.3
|
||||
com.fasterxml.jackson.datatype:jackson-datatype-joda:2.13.3
|
||||
com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.3
|
||||
com.fasterxml.jackson:jackson-bom:2.13.3
|
||||
com.fasterxml:classmate:1.5.1
|
||||
com.github.ben-manes.caffeine:caffeine:2.9.3
|
||||
com.github.docker-java:docker-java-api:3.2.13
|
||||
@@ -26,22 +28,22 @@ com.github.jnr:jnr-posix:3.1.15
|
||||
com.github.jnr:jnr-unixsocket:0.38.17
|
||||
com.github.jnr:jnr-x86asm:1.0.2
|
||||
com.google.android:annotations:4.1.1.4
|
||||
com.google.api-client:google-api-client-appengine:1.34.0
|
||||
com.google.api-client:google-api-client-appengine:1.35.0
|
||||
com.google.api-client:google-api-client-jackson2:1.32.2
|
||||
com.google.api-client:google-api-client-java6:1.34.0
|
||||
com.google.api-client:google-api-client-servlet:1.34.0
|
||||
com.google.api-client:google-api-client:1.34.0
|
||||
com.google.api-client:google-api-client-java6:1.35.0
|
||||
com.google.api-client:google-api-client-servlet:1.35.0
|
||||
com.google.api-client:google-api-client:1.35.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.10.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.134.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.134.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.27.1
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.27.1
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-v2:2.5.3
|
||||
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.97.5
|
||||
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.5.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-storage-v2:2.0.1-alpha
|
||||
com.google.api.grpc:grpc-google-cloud-storage-v2:2.2.2-alpha
|
||||
com.google.api.grpc:grpc-google-common-protos:2.7.2
|
||||
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.10.0
|
||||
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.134.0
|
||||
@@ -50,28 +52,29 @@ com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.5.3
|
||||
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.5.3
|
||||
com.google.api.grpc:proto-google-cloud-datastore-v1:0.93.4
|
||||
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.14
|
||||
com.google.api.grpc:proto-google-cloud-monitoring-v3:1.64.0
|
||||
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.98.0
|
||||
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.5.0
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1:2.1.7
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:2.1.7
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-storage-v2:2.0.1-alpha
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2:2.1.11
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.91.11
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.91.11
|
||||
com.google.api.grpc:proto-google-cloud-storage-v2:2.2.2-alpha
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.92.0
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.92.0
|
||||
com.google.api.grpc:proto-google-common-protos:2.8.3
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.1
|
||||
com.google.api:api-common:2.1.5
|
||||
com.google.api:gax-grpc:2.16.0
|
||||
com.google.api:gax-httpjson:0.101.0
|
||||
com.google.api:gax:2.16.0
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.4
|
||||
com.google.api:api-common:2.2.0
|
||||
com.google.api:gax-grpc:2.18.1
|
||||
com.google.api:gax-httpjson:0.103.1
|
||||
com.google.api:gax:2.18.1
|
||||
com.google.apis:google-api-services-admin-directory:directory_v1-rev118-1.25.0
|
||||
com.google.apis:google-api-services-appengine:v1-rev20220326-1.32.1
|
||||
com.google.apis:google-api-services-appengine:v1-rev20220509-1.32.1
|
||||
com.google.apis:google-api-services-bigquery:v2-rev20211129-1.32.1
|
||||
com.google.apis:google-api-services-clouddebugger:v2-rev20210813-1.32.1
|
||||
com.google.apis:google-api-services-cloudkms:v1-rev20220415-1.32.1
|
||||
com.google.apis:google-api-services-cloudkms:v1-rev20220513-1.32.1
|
||||
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20211017-1.32.1
|
||||
com.google.apis:google-api-services-dataflow:v1b3-rev20210818-1.32.1
|
||||
com.google.apis:google-api-services-dns:v2beta1-rev99-1.25.0
|
||||
@@ -79,48 +82,49 @@ com.google.apis:google-api-services-drive:v2-rev393-1.25.0
|
||||
com.google.apis:google-api-services-groupssettings:v1-rev20210624-1.32.1
|
||||
com.google.apis:google-api-services-healthcare:v1-rev20211016-1.32.1
|
||||
com.google.apis:google-api-services-iamcredentials:v1-rev20210326-1.32.1
|
||||
com.google.apis:google-api-services-monitoring:v3-rev20220322-1.32.1
|
||||
com.google.apis:google-api-services-monitoring:v3-rev20220525-1.32.1
|
||||
com.google.apis:google-api-services-pubsub:v1-rev20211130-1.32.1
|
||||
com.google.apis:google-api-services-sheets:v4-rev20220411-1.32.1
|
||||
com.google.apis:google-api-services-sqladmin:v1beta4-rev20220310-1.32.1
|
||||
com.google.apis:google-api-services-storage:v1-rev20220401-1.32.1
|
||||
com.google.apis:google-api-services-sqladmin:v1beta4-rev20220323-1.32.1
|
||||
com.google.apis:google-api-services-storage:v1-rev20220509-1.32.1
|
||||
com.google.appengine.tools:appengine-gcs-client:0.8.1
|
||||
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.86
|
||||
com.google.appengine:appengine-remote-api:2.0.4
|
||||
com.google.appengine:appengine-api-1.0-sdk:2.0.5
|
||||
com.google.appengine:appengine-remote-api:2.0.5
|
||||
com.google.appengine:appengine-testing:1.9.86
|
||||
com.google.auth:google-auth-library-credentials:1.6.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.6.0
|
||||
com.google.auth:google-auth-library-credentials:1.7.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.7.0
|
||||
com.google.auto.service:auto-service-annotations:1.0.1
|
||||
com.google.auto.value:auto-value-annotations:1.9
|
||||
com.google.auto.value:auto-value:1.9
|
||||
com.google.cloud.bigdataoss:gcsio:2.2.4
|
||||
com.google.cloud.bigdataoss:util:2.2.4
|
||||
com.google.cloud.bigtable:bigtable-client-core:1.25.1
|
||||
com.google.cloud.bigtable:bigtable-metrics-api:1.25.1
|
||||
com.google.cloud.bigdataoss:gcsio:2.2.6
|
||||
com.google.cloud.bigdataoss:util:2.2.6
|
||||
com.google.cloud.bigtable:bigtable-client-core:1.26.3
|
||||
com.google.cloud.bigtable:bigtable-metrics-api:1.26.3
|
||||
com.google.cloud.datastore:datastore-v1-proto-client:2.1.3
|
||||
com.google.cloud.sql:jdbc-socket-factory-core:1.5.0
|
||||
com.google.cloud.sql:postgres-socket-factory:1.5.0
|
||||
com.google.cloud.sql:jdbc-socket-factory-core:1.6.0
|
||||
com.google.cloud.sql:postgres-socket-factory:1.6.0
|
||||
com.google.cloud:google-cloud-bigquerystorage:2.10.0
|
||||
com.google.cloud:google-cloud-bigtable:1.27.1
|
||||
com.google.cloud:google-cloud-bigtable:2.5.3
|
||||
com.google.cloud:google-cloud-core-grpc:2.4.0
|
||||
com.google.cloud:google-cloud-core-http:2.6.0
|
||||
com.google.cloud:google-cloud-core:2.6.0
|
||||
com.google.cloud:google-cloud-core-http:2.7.1
|
||||
com.google.cloud:google-cloud-core:2.7.1
|
||||
com.google.cloud:google-cloud-firestore:3.0.14
|
||||
com.google.cloud:google-cloud-monitoring:1.82.0
|
||||
com.google.cloud:google-cloud-pubsub:1.116.0
|
||||
com.google.cloud:google-cloud-pubsublite:1.5.0
|
||||
com.google.cloud:google-cloud-secretmanager:2.1.7
|
||||
com.google.cloud:google-cloud-secretmanager:2.2.0
|
||||
com.google.cloud:google-cloud-spanner:6.20.0
|
||||
com.google.cloud:google-cloud-storage:2.6.1
|
||||
com.google.cloud:google-cloud-tasks:2.1.11
|
||||
com.google.cloud:google-cloud-storage:2.7.2
|
||||
com.google.cloud:google-cloud-tasks:2.2.0
|
||||
com.google.cloud:grpc-gcp:1.1.0
|
||||
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.14
|
||||
com.google.code.findbugs:jsr305:3.0.2
|
||||
com.google.code.gson:gson:2.9.0
|
||||
com.google.common.html.types:types:1.0.6
|
||||
com.google.dagger:dagger:2.41
|
||||
com.google.errorprone:error_prone_annotations:2.13.0
|
||||
com.google.dagger:dagger:2.42
|
||||
com.google.errorprone:error_prone_annotations:2.13.1
|
||||
com.google.escapevelocity:escapevelocity:0.9.1
|
||||
com.google.flatbuffers:flatbuffers-java:1.12.0
|
||||
com.google.flogger:flogger-system-backend:0.7.4
|
||||
@@ -130,38 +134,39 @@ com.google.guava:failureaccess:1.0.1
|
||||
com.google.guava:guava:31.1-jre
|
||||
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
|
||||
com.google.gwt:gwt-user:2.9.0
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.7
|
||||
com.google.http-client:google-http-client-appengine:1.41.7
|
||||
com.google.http-client:google-http-client-gson:1.41.7
|
||||
com.google.http-client:google-http-client-jackson2:1.41.7
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.8
|
||||
com.google.http-client:google-http-client-appengine:1.41.8
|
||||
com.google.http-client:google-http-client-gson:1.41.8
|
||||
com.google.http-client:google-http-client-jackson2:1.41.8
|
||||
com.google.http-client:google-http-client-protobuf:1.40.1
|
||||
com.google.http-client:google-http-client:1.41.7
|
||||
com.google.http-client:google-http-client:1.41.8
|
||||
com.google.inject.extensions:guice-multibindings:4.1.0
|
||||
com.google.inject:guice:4.1.0
|
||||
com.google.j2objc:j2objc-annotations:1.3
|
||||
com.google.jsinterop:jsinterop-annotations:2.0.0
|
||||
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.33.3
|
||||
com.google.oauth-client:google-oauth-client-java6:1.33.3
|
||||
com.google.oauth-client:google-oauth-client-jetty:1.33.3
|
||||
com.google.oauth-client:google-oauth-client-servlet:1.33.3
|
||||
com.google.oauth-client:google-oauth-client:1.33.3
|
||||
com.google.protobuf:protobuf-java-util:3.19.4
|
||||
com.google.protobuf:protobuf-java:3.19.4
|
||||
com.google.oauth-client:google-oauth-client-appengine:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-java6:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-jetty:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-servlet:1.34.0
|
||||
com.google.oauth-client:google-oauth-client:1.34.0
|
||||
com.google.protobuf:protobuf-java-util:3.20.1
|
||||
com.google.protobuf:protobuf-java:3.20.1
|
||||
com.google.re2j:re2j:1.6
|
||||
com.google.template:soy:2021-02-01
|
||||
com.googlecode.charts4j:charts4j:1.3
|
||||
com.googlecode.json-simple:json-simple:1.1.1
|
||||
com.ibm.icu:icu4j:71.1
|
||||
com.jcraft:jsch:0.1.55
|
||||
com.lmax:disruptor:3.4.2
|
||||
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.15
|
||||
commons-logging:commons-logging:1.2
|
||||
dnsjava:dnsjava:3.5.0
|
||||
dnsjava:dnsjava:3.5.1
|
||||
guru.nidi.com.eclipsesource.j2v8:j2v8_linux_x86_64:4.6.0
|
||||
guru.nidi.com.eclipsesource.j2v8:j2v8_macosx_x86_64:4.6.0
|
||||
guru.nidi.com.eclipsesource.j2v8:j2v8_win32_x86:4.6.0
|
||||
@@ -175,20 +180,21 @@ io.confluent:kafka-avro-serializer:5.3.2
|
||||
io.confluent:kafka-schema-registry-client:5.3.2
|
||||
io.dropwizard.metrics:metrics-core:3.1.2
|
||||
io.github.classgraph:classgraph:4.8.104
|
||||
io.grpc:grpc-alts:1.45.1
|
||||
io.grpc:grpc-api:1.45.1
|
||||
io.grpc:grpc-auth:1.45.1
|
||||
io.grpc:grpc-context:1.45.1
|
||||
io.grpc:grpc-core:1.45.1
|
||||
io.grpc:grpc-googleapis:1.45.1
|
||||
io.grpc:grpc-grpclb:1.45.1
|
||||
io.grpc:grpc-netty-shaded:1.45.1
|
||||
io.grpc:grpc-alts:1.46.0
|
||||
io.grpc:grpc-api:1.46.0
|
||||
io.grpc:grpc-auth:1.46.0
|
||||
io.grpc:grpc-census:1.44.0
|
||||
io.grpc:grpc-context:1.46.0
|
||||
io.grpc:grpc-core:1.46.0
|
||||
io.grpc:grpc-googleapis:1.46.0
|
||||
io.grpc:grpc-grpclb:1.46.0
|
||||
io.grpc:grpc-netty-shaded:1.46.0
|
||||
io.grpc:grpc-netty:1.44.0
|
||||
io.grpc:grpc-protobuf-lite:1.45.1
|
||||
io.grpc:grpc-protobuf:1.45.1
|
||||
io.grpc:grpc-services:1.45.1
|
||||
io.grpc:grpc-stub:1.45.1
|
||||
io.grpc:grpc-xds:1.45.1
|
||||
io.grpc:grpc-protobuf-lite:1.46.0
|
||||
io.grpc:grpc-protobuf:1.46.0
|
||||
io.grpc:grpc-services:1.46.0
|
||||
io.grpc:grpc-stub:1.46.0
|
||||
io.grpc:grpc-xds:1.46.0
|
||||
io.netty:netty-buffer:4.1.72.Final
|
||||
io.netty:netty-codec-http2:4.1.72.Final
|
||||
io.netty:netty-codec-http:4.1.72.Final
|
||||
@@ -201,11 +207,18 @@ io.netty:netty-resolver:4.1.72.Final
|
||||
io.netty:netty-tcnative-boringssl-static:2.0.46.Final
|
||||
io.netty:netty-tcnative-classes:2.0.46.Final
|
||||
io.netty:netty-transport:4.1.72.Final
|
||||
io.opencensus:opencensus-api:0.31.0
|
||||
io.opencensus:opencensus-api:0.31.1
|
||||
io.opencensus:opencensus-contrib-exemplar-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-grpc-metrics:0.31.0
|
||||
io.opencensus:opencensus-contrib-grpc-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.1
|
||||
io.opencensus:opencensus-contrib-resource-util:0.31.0
|
||||
io.opencensus:opencensus-exporter-metrics-util:0.31.0
|
||||
io.opencensus:opencensus-exporter-stats-stackdriver:0.31.0
|
||||
io.opencensus:opencensus-impl-core:0.31.0
|
||||
io.opencensus:opencensus-impl:0.31.0
|
||||
io.opencensus:opencensus-proto:0.2.0
|
||||
io.perfmark:perfmark-api:0.23.0
|
||||
io.perfmark:perfmark-api:0.25.0
|
||||
it.unimi.dsi:fastutil:6.5.16
|
||||
javax.activation:activation:1.1
|
||||
javax.activation:javax.activation-api:1.2.0
|
||||
@@ -227,21 +240,21 @@ org.apache.arrow:arrow-format:5.0.0
|
||||
org.apache.arrow:arrow-memory-core:5.0.0
|
||||
org.apache.arrow:arrow-vector:5.0.0
|
||||
org.apache.avro:avro:1.8.2
|
||||
org.apache.beam:beam-model-fn-execution:2.38.0
|
||||
org.apache.beam:beam-model-job-management:2.38.0
|
||||
org.apache.beam:beam-model-pipeline:2.38.0
|
||||
org.apache.beam:beam-runners-core-construction-java:2.38.0
|
||||
org.apache.beam:beam-runners-core-java:2.38.0
|
||||
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.38.0
|
||||
org.apache.beam:beam-runners-java-fn-execution:2.38.0
|
||||
org.apache.beam:beam-sdks-java-core:2.38.0
|
||||
org.apache.beam:beam-sdks-java-expansion-service:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-arrow:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-protobuf:2.38.0
|
||||
org.apache.beam:beam-sdks-java-fn-execution:2.38.0
|
||||
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.38.0
|
||||
org.apache.beam:beam-sdks-java-io-kafka:2.38.0
|
||||
org.apache.beam:beam-model-fn-execution:2.39.0
|
||||
org.apache.beam:beam-model-job-management:2.39.0
|
||||
org.apache.beam:beam-model-pipeline:2.39.0
|
||||
org.apache.beam:beam-runners-core-construction-java:2.39.0
|
||||
org.apache.beam:beam-runners-core-java:2.39.0
|
||||
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.39.0
|
||||
org.apache.beam:beam-runners-java-fn-execution:2.39.0
|
||||
org.apache.beam:beam-sdks-java-core:2.39.0
|
||||
org.apache.beam:beam-sdks-java-expansion-service:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-arrow:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-protobuf:2.39.0
|
||||
org.apache.beam:beam-sdks-java-fn-execution:2.39.0
|
||||
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.39.0
|
||||
org.apache.beam:beam-sdks-java-io-kafka:2.39.0
|
||||
org.apache.beam:beam-vendor-bytebuddy-1_11_0:0.1
|
||||
org.apache.beam:beam-vendor-grpc-1_43_2:0.1
|
||||
org.apache.beam:beam-vendor-guava-26_0-jre:0.1
|
||||
@@ -254,45 +267,46 @@ org.bouncycastle:bcpg-jdk15on:1.67
|
||||
org.bouncycastle:bcpkix-jdk15on:1.67
|
||||
org.bouncycastle:bcprov-jdk15on:1.67
|
||||
org.checkerframework:checker-compat-qual:2.5.5
|
||||
org.checkerframework:checker-qual:3.21.4
|
||||
org.checkerframework:checker-qual:3.22.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.21
|
||||
org.conscrypt:conscrypt-openjdk-uber:2.5.1
|
||||
org.easymock:easymock:3.0
|
||||
org.flywaydb:flyway-core:8.5.10
|
||||
org.flywaydb:flyway-core:8.5.12
|
||||
org.glassfish.jaxb:jaxb-runtime:2.3.1
|
||||
org.glassfish.jaxb:txw2:2.3.1
|
||||
org.hamcrest:hamcrest:2.1
|
||||
org.hibernate.common:hibernate-commons-annotations:5.1.2.Final
|
||||
org.hibernate:hibernate-core:5.6.8.Final
|
||||
org.hibernate:hibernate-hikaricp:5.6.8.Final
|
||||
org.hibernate:hibernate-core:5.6.9.Final
|
||||
org.hibernate:hibernate-hikaricp:5.6.9.Final
|
||||
org.jboss.logging:jboss-logging:3.4.3.Final
|
||||
org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.1.1.Final
|
||||
org.jboss:jandex:2.4.2.Final
|
||||
org.jetbrains:annotations:17.0.0
|
||||
org.joda:joda-money:1.0.1
|
||||
org.json:json:20200518
|
||||
org.jsoup:jsoup:1.14.3
|
||||
org.jsoup:jsoup:1.15.1
|
||||
org.jvnet.staxex:stax-ex:1.8
|
||||
org.objenesis:objenesis:1.2
|
||||
org.ow2.asm:asm-analysis:9.2
|
||||
org.ow2.asm:asm-analysis:9.3
|
||||
org.ow2.asm:asm-commons:9.2
|
||||
org.ow2.asm:asm-tree:9.2
|
||||
org.ow2.asm:asm-util:9.2
|
||||
org.ow2.asm:asm:9.2
|
||||
org.postgresql:postgresql:42.3.4
|
||||
org.ow2.asm:asm-tree:9.3
|
||||
org.ow2.asm:asm-util:9.3
|
||||
org.ow2.asm:asm:9.3
|
||||
org.postgresql:postgresql:42.3.6
|
||||
org.rnorth.duct-tape:duct-tape:1.0.8
|
||||
org.slf4j:jcl-over-slf4j:1.7.30
|
||||
org.slf4j:jul-to-slf4j:1.7.30
|
||||
org.slf4j:slf4j-api:2.0.0-alpha7
|
||||
org.slf4j:slf4j-jdk14:2.0.0-alpha7
|
||||
org.springframework:spring-core:4.3.18.RELEASE
|
||||
org.springframework:spring-expression:4.3.18.RELEASE
|
||||
org.testcontainers:database-commons:1.17.1
|
||||
org.testcontainers:jdbc:1.17.1
|
||||
org.testcontainers:postgresql:1.17.1
|
||||
org.testcontainers:testcontainers:1.17.1
|
||||
org.springframework:spring-core:5.3.18
|
||||
org.springframework:spring-expression:5.3.18
|
||||
org.springframework:spring-jcl:5.3.18
|
||||
org.testcontainers:database-commons:1.17.2
|
||||
org.testcontainers:jdbc:1.17.2
|
||||
org.testcontainers:postgresql:1.17.2
|
||||
org.testcontainers:testcontainers:1.17.2
|
||||
org.threeten:threetenbp:1.6.0
|
||||
org.tukaani:xz:1.5
|
||||
org.w3c.css:sac:1.3
|
||||
|
||||
@@ -7,11 +7,13 @@ args4j:args4j:2.0.23
|
||||
cglib:cglib-nodep:2.2
|
||||
com.101tec:zkclient:0.10
|
||||
com.beust:jcommander:1.60
|
||||
com.fasterxml.jackson.core:jackson-annotations:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-databind:2.13.2
|
||||
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.2
|
||||
com.fasterxml.jackson:jackson-bom:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-annotations:2.13.3
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.3
|
||||
com.fasterxml.jackson.core:jackson-databind:2.13.3
|
||||
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.3
|
||||
com.fasterxml.jackson.datatype:jackson-datatype-joda:2.13.3
|
||||
com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.3
|
||||
com.fasterxml.jackson:jackson-bom:2.13.3
|
||||
com.fasterxml:classmate:1.5.1
|
||||
com.github.ben-manes.caffeine:caffeine:2.9.3
|
||||
com.github.docker-java:docker-java-api:3.2.13
|
||||
@@ -26,22 +28,22 @@ com.github.jnr:jnr-posix:3.1.15
|
||||
com.github.jnr:jnr-unixsocket:0.38.17
|
||||
com.github.jnr:jnr-x86asm:1.0.2
|
||||
com.google.android:annotations:4.1.1.4
|
||||
com.google.api-client:google-api-client-appengine:1.34.0
|
||||
com.google.api-client:google-api-client-appengine:1.35.0
|
||||
com.google.api-client:google-api-client-jackson2:1.32.2
|
||||
com.google.api-client:google-api-client-java6:1.34.0
|
||||
com.google.api-client:google-api-client-servlet:1.34.0
|
||||
com.google.api-client:google-api-client:1.34.0
|
||||
com.google.api-client:google-api-client-java6:1.35.0
|
||||
com.google.api-client:google-api-client-servlet:1.35.0
|
||||
com.google.api-client:google-api-client:1.35.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.10.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.134.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.134.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.27.1
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.27.1
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-v2:2.5.3
|
||||
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.97.5
|
||||
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.5.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-storage-v2:2.0.1-alpha
|
||||
com.google.api.grpc:grpc-google-cloud-storage-v2:2.2.2-alpha
|
||||
com.google.api.grpc:grpc-google-common-protos:2.7.2
|
||||
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.10.0
|
||||
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.134.0
|
||||
@@ -50,28 +52,29 @@ com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.5.3
|
||||
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.5.3
|
||||
com.google.api.grpc:proto-google-cloud-datastore-v1:0.93.4
|
||||
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.14
|
||||
com.google.api.grpc:proto-google-cloud-monitoring-v3:1.64.0
|
||||
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.98.0
|
||||
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.5.0
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1:2.1.7
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:2.1.7
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-storage-v2:2.0.1-alpha
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2:2.1.11
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.91.11
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.91.11
|
||||
com.google.api.grpc:proto-google-cloud-storage-v2:2.2.2-alpha
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.92.0
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.92.0
|
||||
com.google.api.grpc:proto-google-common-protos:2.8.3
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.1
|
||||
com.google.api:api-common:2.1.5
|
||||
com.google.api:gax-grpc:2.16.0
|
||||
com.google.api:gax-httpjson:0.101.0
|
||||
com.google.api:gax:2.16.0
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.4
|
||||
com.google.api:api-common:2.2.0
|
||||
com.google.api:gax-grpc:2.18.1
|
||||
com.google.api:gax-httpjson:0.103.1
|
||||
com.google.api:gax:2.18.1
|
||||
com.google.apis:google-api-services-admin-directory:directory_v1-rev118-1.25.0
|
||||
com.google.apis:google-api-services-appengine:v1-rev20220326-1.32.1
|
||||
com.google.apis:google-api-services-appengine:v1-rev20220509-1.32.1
|
||||
com.google.apis:google-api-services-bigquery:v2-rev20211129-1.32.1
|
||||
com.google.apis:google-api-services-clouddebugger:v2-rev20210813-1.32.1
|
||||
com.google.apis:google-api-services-cloudkms:v1-rev20220415-1.32.1
|
||||
com.google.apis:google-api-services-cloudkms:v1-rev20220513-1.32.1
|
||||
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20211017-1.32.1
|
||||
com.google.apis:google-api-services-dataflow:v1b3-rev20210818-1.32.1
|
||||
com.google.apis:google-api-services-dns:v2beta1-rev99-1.25.0
|
||||
@@ -79,47 +82,48 @@ com.google.apis:google-api-services-drive:v2-rev393-1.25.0
|
||||
com.google.apis:google-api-services-groupssettings:v1-rev20210624-1.32.1
|
||||
com.google.apis:google-api-services-healthcare:v1-rev20211016-1.32.1
|
||||
com.google.apis:google-api-services-iamcredentials:v1-rev20210326-1.32.1
|
||||
com.google.apis:google-api-services-monitoring:v3-rev20220322-1.32.1
|
||||
com.google.apis:google-api-services-monitoring:v3-rev20220525-1.32.1
|
||||
com.google.apis:google-api-services-pubsub:v1-rev20211130-1.32.1
|
||||
com.google.apis:google-api-services-sheets:v4-rev20220411-1.32.1
|
||||
com.google.apis:google-api-services-sqladmin:v1beta4-rev20220310-1.32.1
|
||||
com.google.apis:google-api-services-storage:v1-rev20220401-1.32.1
|
||||
com.google.apis:google-api-services-sqladmin:v1beta4-rev20220323-1.32.1
|
||||
com.google.apis:google-api-services-storage:v1-rev20220509-1.32.1
|
||||
com.google.appengine.tools:appengine-gcs-client:0.8.1
|
||||
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.86
|
||||
com.google.appengine:appengine-remote-api:2.0.4
|
||||
com.google.appengine:appengine-api-1.0-sdk:2.0.5
|
||||
com.google.appengine:appengine-remote-api:2.0.5
|
||||
com.google.appengine:appengine-testing:1.9.86
|
||||
com.google.auth:google-auth-library-credentials:1.6.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.6.0
|
||||
com.google.auth:google-auth-library-credentials:1.7.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.7.0
|
||||
com.google.auto.service:auto-service-annotations:1.0.1
|
||||
com.google.auto.value:auto-value-annotations:1.9
|
||||
com.google.auto.value:auto-value:1.9
|
||||
com.google.cloud.bigdataoss:gcsio:2.2.4
|
||||
com.google.cloud.bigdataoss:util:2.2.4
|
||||
com.google.cloud.bigtable:bigtable-client-core:1.25.1
|
||||
com.google.cloud.bigtable:bigtable-metrics-api:1.25.1
|
||||
com.google.cloud.bigdataoss:gcsio:2.2.6
|
||||
com.google.cloud.bigdataoss:util:2.2.6
|
||||
com.google.cloud.bigtable:bigtable-client-core:1.26.3
|
||||
com.google.cloud.bigtable:bigtable-metrics-api:1.26.3
|
||||
com.google.cloud.datastore:datastore-v1-proto-client:2.1.3
|
||||
com.google.cloud.sql:jdbc-socket-factory-core:1.5.0
|
||||
com.google.cloud.sql:jdbc-socket-factory-core:1.6.0
|
||||
com.google.cloud:google-cloud-bigquerystorage:2.10.0
|
||||
com.google.cloud:google-cloud-bigtable:1.27.1
|
||||
com.google.cloud:google-cloud-bigtable:2.5.3
|
||||
com.google.cloud:google-cloud-core-grpc:2.4.0
|
||||
com.google.cloud:google-cloud-core-http:2.6.0
|
||||
com.google.cloud:google-cloud-core:2.6.0
|
||||
com.google.cloud:google-cloud-core-http:2.7.1
|
||||
com.google.cloud:google-cloud-core:2.7.1
|
||||
com.google.cloud:google-cloud-firestore:3.0.14
|
||||
com.google.cloud:google-cloud-monitoring:1.82.0
|
||||
com.google.cloud:google-cloud-pubsub:1.116.0
|
||||
com.google.cloud:google-cloud-pubsublite:1.5.0
|
||||
com.google.cloud:google-cloud-secretmanager:2.1.7
|
||||
com.google.cloud:google-cloud-secretmanager:2.2.0
|
||||
com.google.cloud:google-cloud-spanner:6.20.0
|
||||
com.google.cloud:google-cloud-storage:2.6.1
|
||||
com.google.cloud:google-cloud-tasks:2.1.11
|
||||
com.google.cloud:google-cloud-storage:2.7.2
|
||||
com.google.cloud:google-cloud-tasks:2.2.0
|
||||
com.google.cloud:grpc-gcp:1.1.0
|
||||
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.14
|
||||
com.google.code.findbugs:jsr305:3.0.2
|
||||
com.google.code.gson:gson:2.9.0
|
||||
com.google.common.html.types:types:1.0.6
|
||||
com.google.dagger:dagger:2.41
|
||||
com.google.errorprone:error_prone_annotations:2.13.0
|
||||
com.google.dagger:dagger:2.42
|
||||
com.google.errorprone:error_prone_annotations:2.13.1
|
||||
com.google.escapevelocity:escapevelocity:0.9.1
|
||||
com.google.flatbuffers:flatbuffers-java:1.12.0
|
||||
com.google.flogger:flogger-system-backend:0.7.4
|
||||
@@ -129,58 +133,60 @@ com.google.guava:failureaccess:1.0.1
|
||||
com.google.guava:guava:31.1-jre
|
||||
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
|
||||
com.google.gwt:gwt-user:2.9.0
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.7
|
||||
com.google.http-client:google-http-client-appengine:1.41.7
|
||||
com.google.http-client:google-http-client-gson:1.41.7
|
||||
com.google.http-client:google-http-client-jackson2:1.41.7
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.8
|
||||
com.google.http-client:google-http-client-appengine:1.41.8
|
||||
com.google.http-client:google-http-client-gson:1.41.8
|
||||
com.google.http-client:google-http-client-jackson2:1.41.8
|
||||
com.google.http-client:google-http-client-protobuf:1.40.1
|
||||
com.google.http-client:google-http-client:1.41.7
|
||||
com.google.http-client:google-http-client:1.41.8
|
||||
com.google.inject.extensions:guice-multibindings:4.1.0
|
||||
com.google.inject:guice:4.1.0
|
||||
com.google.j2objc:j2objc-annotations:1.3
|
||||
com.google.jsinterop:jsinterop-annotations:2.0.0
|
||||
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.33.3
|
||||
com.google.oauth-client:google-oauth-client-java6:1.33.3
|
||||
com.google.oauth-client:google-oauth-client-jetty:1.33.3
|
||||
com.google.oauth-client:google-oauth-client-servlet:1.33.3
|
||||
com.google.oauth-client:google-oauth-client:1.33.3
|
||||
com.google.protobuf:protobuf-java-util:3.19.4
|
||||
com.google.protobuf:protobuf-java:3.19.4
|
||||
com.google.oauth-client:google-oauth-client-appengine:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-java6:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-jetty:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-servlet:1.34.0
|
||||
com.google.oauth-client:google-oauth-client:1.34.0
|
||||
com.google.protobuf:protobuf-java-util:3.20.1
|
||||
com.google.protobuf:protobuf-java:3.20.1
|
||||
com.google.re2j:re2j:1.6
|
||||
com.google.template:soy:2021-02-01
|
||||
com.googlecode.charts4j:charts4j:1.3
|
||||
com.googlecode.json-simple:json-simple:1.1.1
|
||||
com.ibm.icu:icu4j:71.1
|
||||
com.jcraft:jsch:0.1.55
|
||||
com.lmax:disruptor:3.4.2
|
||||
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.15
|
||||
commons-logging:commons-logging:1.2
|
||||
dnsjava:dnsjava:3.5.0
|
||||
dnsjava:dnsjava:3.5.1
|
||||
io.confluent:common-config:5.3.2
|
||||
io.confluent:common-utils:5.3.2
|
||||
io.confluent:kafka-avro-serializer:5.3.2
|
||||
io.confluent:kafka-schema-registry-client:5.3.2
|
||||
io.dropwizard.metrics:metrics-core:3.1.2
|
||||
io.github.classgraph:classgraph:4.8.104
|
||||
io.grpc:grpc-alts:1.45.1
|
||||
io.grpc:grpc-api:1.45.1
|
||||
io.grpc:grpc-auth:1.45.1
|
||||
io.grpc:grpc-context:1.45.1
|
||||
io.grpc:grpc-core:1.45.1
|
||||
io.grpc:grpc-googleapis:1.45.1
|
||||
io.grpc:grpc-grpclb:1.45.1
|
||||
io.grpc:grpc-netty-shaded:1.45.1
|
||||
io.grpc:grpc-alts:1.46.0
|
||||
io.grpc:grpc-api:1.46.0
|
||||
io.grpc:grpc-auth:1.46.0
|
||||
io.grpc:grpc-census:1.44.0
|
||||
io.grpc:grpc-context:1.46.0
|
||||
io.grpc:grpc-core:1.46.0
|
||||
io.grpc:grpc-googleapis:1.46.0
|
||||
io.grpc:grpc-grpclb:1.46.0
|
||||
io.grpc:grpc-netty-shaded:1.46.0
|
||||
io.grpc:grpc-netty:1.44.0
|
||||
io.grpc:grpc-protobuf-lite:1.45.1
|
||||
io.grpc:grpc-protobuf:1.45.1
|
||||
io.grpc:grpc-services:1.45.1
|
||||
io.grpc:grpc-stub:1.45.1
|
||||
io.grpc:grpc-xds:1.45.1
|
||||
io.grpc:grpc-protobuf-lite:1.46.0
|
||||
io.grpc:grpc-protobuf:1.46.0
|
||||
io.grpc:grpc-services:1.46.0
|
||||
io.grpc:grpc-stub:1.46.0
|
||||
io.grpc:grpc-xds:1.46.0
|
||||
io.netty:netty-buffer:4.1.72.Final
|
||||
io.netty:netty-codec-http2:4.1.72.Final
|
||||
io.netty:netty-codec-http:4.1.72.Final
|
||||
@@ -193,11 +199,18 @@ io.netty:netty-resolver:4.1.72.Final
|
||||
io.netty:netty-tcnative-boringssl-static:2.0.46.Final
|
||||
io.netty:netty-tcnative-classes:2.0.46.Final
|
||||
io.netty:netty-transport:4.1.72.Final
|
||||
io.opencensus:opencensus-api:0.31.0
|
||||
io.opencensus:opencensus-api:0.31.1
|
||||
io.opencensus:opencensus-contrib-exemplar-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-grpc-metrics:0.31.0
|
||||
io.opencensus:opencensus-contrib-grpc-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.1
|
||||
io.opencensus:opencensus-contrib-resource-util:0.31.0
|
||||
io.opencensus:opencensus-exporter-metrics-util:0.31.0
|
||||
io.opencensus:opencensus-exporter-stats-stackdriver:0.31.0
|
||||
io.opencensus:opencensus-impl-core:0.31.0
|
||||
io.opencensus:opencensus-impl:0.31.0
|
||||
io.opencensus:opencensus-proto:0.2.0
|
||||
io.perfmark:perfmark-api:0.23.0
|
||||
io.perfmark:perfmark-api:0.25.0
|
||||
it.unimi.dsi:fastutil:6.5.16
|
||||
javax.activation:activation:1.1
|
||||
javax.activation:javax.activation-api:1.2.0
|
||||
@@ -219,21 +232,21 @@ org.apache.arrow:arrow-format:5.0.0
|
||||
org.apache.arrow:arrow-memory-core:5.0.0
|
||||
org.apache.arrow:arrow-vector:5.0.0
|
||||
org.apache.avro:avro:1.8.2
|
||||
org.apache.beam:beam-model-fn-execution:2.38.0
|
||||
org.apache.beam:beam-model-job-management:2.38.0
|
||||
org.apache.beam:beam-model-pipeline:2.38.0
|
||||
org.apache.beam:beam-runners-core-construction-java:2.38.0
|
||||
org.apache.beam:beam-runners-core-java:2.38.0
|
||||
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.38.0
|
||||
org.apache.beam:beam-runners-java-fn-execution:2.38.0
|
||||
org.apache.beam:beam-sdks-java-core:2.38.0
|
||||
org.apache.beam:beam-sdks-java-expansion-service:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-arrow:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-protobuf:2.38.0
|
||||
org.apache.beam:beam-sdks-java-fn-execution:2.38.0
|
||||
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.38.0
|
||||
org.apache.beam:beam-sdks-java-io-kafka:2.38.0
|
||||
org.apache.beam:beam-model-fn-execution:2.39.0
|
||||
org.apache.beam:beam-model-job-management:2.39.0
|
||||
org.apache.beam:beam-model-pipeline:2.39.0
|
||||
org.apache.beam:beam-runners-core-construction-java:2.39.0
|
||||
org.apache.beam:beam-runners-core-java:2.39.0
|
||||
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.39.0
|
||||
org.apache.beam:beam-runners-java-fn-execution:2.39.0
|
||||
org.apache.beam:beam-sdks-java-core:2.39.0
|
||||
org.apache.beam:beam-sdks-java-expansion-service:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-arrow:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-protobuf:2.39.0
|
||||
org.apache.beam:beam-sdks-java-fn-execution:2.39.0
|
||||
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.39.0
|
||||
org.apache.beam:beam-sdks-java-io-kafka:2.39.0
|
||||
org.apache.beam:beam-vendor-bytebuddy-1_11_0:0.1
|
||||
org.apache.beam:beam-vendor-grpc-1_43_2:0.1
|
||||
org.apache.beam:beam-vendor-guava-26_0-jre:0.1
|
||||
@@ -245,43 +258,44 @@ org.bouncycastle:bcpg-jdk15on:1.67
|
||||
org.bouncycastle:bcpkix-jdk15on:1.67
|
||||
org.bouncycastle:bcprov-jdk15on:1.67
|
||||
org.checkerframework:checker-compat-qual:2.5.5
|
||||
org.checkerframework:checker-qual:3.21.4
|
||||
org.checkerframework:checker-qual:3.22.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.21
|
||||
org.conscrypt:conscrypt-openjdk-uber:2.5.1
|
||||
org.easymock:easymock:3.0
|
||||
org.flywaydb:flyway-core:8.5.10
|
||||
org.flywaydb:flyway-core:8.5.12
|
||||
org.glassfish.jaxb:jaxb-runtime:2.3.1
|
||||
org.glassfish.jaxb:txw2:2.3.1
|
||||
org.hamcrest:hamcrest-core:1.3
|
||||
org.hamcrest:hamcrest:2.1
|
||||
org.hibernate.common:hibernate-commons-annotations:5.1.2.Final
|
||||
org.hibernate:hibernate-core:5.6.8.Final
|
||||
org.hibernate:hibernate-hikaricp:5.6.8.Final
|
||||
org.hibernate:hibernate-core:5.6.9.Final
|
||||
org.hibernate:hibernate-hikaricp:5.6.9.Final
|
||||
org.jboss.logging:jboss-logging:3.4.3.Final
|
||||
org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.1.1.Final
|
||||
org.jboss:jandex:2.4.2.Final
|
||||
org.jetbrains:annotations:17.0.0
|
||||
org.joda:joda-money:1.0.1
|
||||
org.json:json:20200518
|
||||
org.jsoup:jsoup:1.14.3
|
||||
org.jsoup:jsoup:1.15.1
|
||||
org.jvnet.staxex:stax-ex:1.8
|
||||
org.objenesis:objenesis:1.2
|
||||
org.ow2.asm:asm-analysis:9.2
|
||||
org.ow2.asm:asm-analysis:9.3
|
||||
org.ow2.asm:asm-commons:9.2
|
||||
org.ow2.asm:asm-tree:9.2
|
||||
org.ow2.asm:asm-util:9.2
|
||||
org.ow2.asm:asm:9.2
|
||||
org.postgresql:postgresql:42.3.4
|
||||
org.ow2.asm:asm-tree:9.3
|
||||
org.ow2.asm:asm-util:9.3
|
||||
org.ow2.asm:asm:9.3
|
||||
org.postgresql:postgresql:42.3.6
|
||||
org.rnorth.duct-tape:duct-tape:1.0.8
|
||||
org.slf4j:slf4j-api:1.7.35
|
||||
org.springframework:spring-core:4.3.18.RELEASE
|
||||
org.springframework:spring-expression:4.3.18.RELEASE
|
||||
org.testcontainers:database-commons:1.17.1
|
||||
org.testcontainers:jdbc:1.17.1
|
||||
org.testcontainers:postgresql:1.17.1
|
||||
org.testcontainers:testcontainers:1.17.1
|
||||
org.slf4j:slf4j-api:1.7.36
|
||||
org.springframework:spring-core:5.3.18
|
||||
org.springframework:spring-expression:5.3.18
|
||||
org.springframework:spring-jcl:5.3.18
|
||||
org.testcontainers:database-commons:1.17.2
|
||||
org.testcontainers:jdbc:1.17.2
|
||||
org.testcontainers:postgresql:1.17.2
|
||||
org.testcontainers:testcontainers:1.17.2
|
||||
org.threeten:threetenbp:1.6.0
|
||||
org.tukaani:xz:1.5
|
||||
org.w3c.css:sac:1.3
|
||||
|
||||
@@ -7,11 +7,13 @@ args4j:args4j:2.0.23
|
||||
cglib:cglib-nodep:2.2
|
||||
com.101tec:zkclient:0.10
|
||||
com.beust:jcommander:1.60
|
||||
com.fasterxml.jackson.core:jackson-annotations:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-databind:2.13.2
|
||||
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.2
|
||||
com.fasterxml.jackson:jackson-bom:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-annotations:2.13.3
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.3
|
||||
com.fasterxml.jackson.core:jackson-databind:2.13.3
|
||||
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.3
|
||||
com.fasterxml.jackson.datatype:jackson-datatype-joda:2.13.3
|
||||
com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.3
|
||||
com.fasterxml.jackson:jackson-bom:2.13.3
|
||||
com.fasterxml:classmate:1.5.1
|
||||
com.github.ben-manes.caffeine:caffeine:2.9.3
|
||||
com.github.docker-java:docker-java-api:3.2.13
|
||||
@@ -25,22 +27,22 @@ com.github.jnr:jnr-ffi:2.2.11
|
||||
com.github.jnr:jnr-posix:3.1.15
|
||||
com.github.jnr:jnr-unixsocket:0.38.17
|
||||
com.github.jnr:jnr-x86asm:1.0.2
|
||||
com.google.api-client:google-api-client-appengine:1.34.0
|
||||
com.google.api-client:google-api-client-appengine:1.35.0
|
||||
com.google.api-client:google-api-client-jackson2:1.32.2
|
||||
com.google.api-client:google-api-client-java6:1.34.0
|
||||
com.google.api-client:google-api-client-servlet:1.34.0
|
||||
com.google.api-client:google-api-client:1.34.0
|
||||
com.google.api-client:google-api-client-java6:1.35.0
|
||||
com.google.api-client:google-api-client-servlet:1.35.0
|
||||
com.google.api-client:google-api-client:1.35.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.10.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.134.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.134.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.27.1
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.27.1
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-v2:2.5.3
|
||||
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.97.5
|
||||
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.5.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-storage-v2:2.0.1-alpha
|
||||
com.google.api.grpc:grpc-google-cloud-storage-v2:2.2.2-alpha
|
||||
com.google.api.grpc:grpc-google-common-protos:2.7.2
|
||||
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.10.0
|
||||
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.134.0
|
||||
@@ -49,28 +51,29 @@ com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.5.3
|
||||
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.5.3
|
||||
com.google.api.grpc:proto-google-cloud-datastore-v1:0.93.4
|
||||
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.14
|
||||
com.google.api.grpc:proto-google-cloud-monitoring-v3:1.64.0
|
||||
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.98.0
|
||||
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.5.0
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1:2.1.7
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:2.1.7
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-storage-v2:2.0.1-alpha
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2:2.1.11
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.91.11
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.91.11
|
||||
com.google.api.grpc:proto-google-cloud-storage-v2:2.2.2-alpha
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.92.0
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.92.0
|
||||
com.google.api.grpc:proto-google-common-protos:2.8.3
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.1
|
||||
com.google.api:api-common:2.1.5
|
||||
com.google.api:gax-grpc:2.16.0
|
||||
com.google.api:gax-httpjson:0.101.0
|
||||
com.google.api:gax:2.16.0
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.4
|
||||
com.google.api:api-common:2.2.0
|
||||
com.google.api:gax-grpc:2.18.1
|
||||
com.google.api:gax-httpjson:0.103.1
|
||||
com.google.api:gax:2.18.1
|
||||
com.google.apis:google-api-services-admin-directory:directory_v1-rev118-1.25.0
|
||||
com.google.apis:google-api-services-appengine:v1-rev20220326-1.32.1
|
||||
com.google.apis:google-api-services-appengine:v1-rev20220509-1.32.1
|
||||
com.google.apis:google-api-services-bigquery:v2-rev20211129-1.32.1
|
||||
com.google.apis:google-api-services-clouddebugger:v2-rev20210813-1.32.1
|
||||
com.google.apis:google-api-services-cloudkms:v1-rev20220415-1.32.1
|
||||
com.google.apis:google-api-services-cloudkms:v1-rev20220513-1.32.1
|
||||
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20211017-1.32.1
|
||||
com.google.apis:google-api-services-dataflow:v1b3-rev20210818-1.32.1
|
||||
com.google.apis:google-api-services-dns:v2beta1-rev99-1.25.0
|
||||
@@ -78,47 +81,48 @@ com.google.apis:google-api-services-drive:v2-rev393-1.25.0
|
||||
com.google.apis:google-api-services-groupssettings:v1-rev20210624-1.32.1
|
||||
com.google.apis:google-api-services-healthcare:v1-rev20211016-1.32.1
|
||||
com.google.apis:google-api-services-iamcredentials:v1-rev20210326-1.32.1
|
||||
com.google.apis:google-api-services-monitoring:v3-rev20220322-1.32.1
|
||||
com.google.apis:google-api-services-monitoring:v3-rev20220525-1.32.1
|
||||
com.google.apis:google-api-services-pubsub:v1-rev20211130-1.32.1
|
||||
com.google.apis:google-api-services-sheets:v4-rev20220411-1.32.1
|
||||
com.google.apis:google-api-services-sqladmin:v1beta4-rev20220310-1.32.1
|
||||
com.google.apis:google-api-services-storage:v1-rev20220401-1.32.1
|
||||
com.google.apis:google-api-services-sqladmin:v1beta4-rev20220323-1.32.1
|
||||
com.google.apis:google-api-services-storage:v1-rev20220509-1.32.1
|
||||
com.google.appengine.tools:appengine-gcs-client:0.8.1
|
||||
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.86
|
||||
com.google.appengine:appengine-remote-api:2.0.4
|
||||
com.google.appengine:appengine-api-1.0-sdk:2.0.5
|
||||
com.google.appengine:appengine-remote-api:2.0.5
|
||||
com.google.appengine:appengine-testing:1.9.86
|
||||
com.google.auth:google-auth-library-credentials:1.6.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.6.0
|
||||
com.google.auth:google-auth-library-credentials:1.7.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.7.0
|
||||
com.google.auto.service:auto-service-annotations:1.0.1
|
||||
com.google.auto.value:auto-value-annotations:1.9
|
||||
com.google.auto.value:auto-value:1.9
|
||||
com.google.cloud.bigdataoss:gcsio:2.2.4
|
||||
com.google.cloud.bigdataoss:util:2.2.4
|
||||
com.google.cloud.bigtable:bigtable-client-core:1.25.1
|
||||
com.google.cloud.bigtable:bigtable-metrics-api:1.25.1
|
||||
com.google.cloud.bigdataoss:gcsio:2.2.6
|
||||
com.google.cloud.bigdataoss:util:2.2.6
|
||||
com.google.cloud.bigtable:bigtable-client-core:1.26.3
|
||||
com.google.cloud.bigtable:bigtable-metrics-api:1.26.3
|
||||
com.google.cloud.datastore:datastore-v1-proto-client:2.1.3
|
||||
com.google.cloud.sql:jdbc-socket-factory-core:1.5.0
|
||||
com.google.cloud.sql:jdbc-socket-factory-core:1.6.0
|
||||
com.google.cloud:google-cloud-bigquerystorage:2.10.0
|
||||
com.google.cloud:google-cloud-bigtable:1.27.1
|
||||
com.google.cloud:google-cloud-bigtable:2.5.3
|
||||
com.google.cloud:google-cloud-core-grpc:2.4.0
|
||||
com.google.cloud:google-cloud-core-http:2.6.0
|
||||
com.google.cloud:google-cloud-core:2.6.0
|
||||
com.google.cloud:google-cloud-core-http:2.7.1
|
||||
com.google.cloud:google-cloud-core:2.7.1
|
||||
com.google.cloud:google-cloud-firestore:3.0.14
|
||||
com.google.cloud:google-cloud-monitoring:1.82.0
|
||||
com.google.cloud:google-cloud-pubsub:1.116.0
|
||||
com.google.cloud:google-cloud-pubsublite:1.5.0
|
||||
com.google.cloud:google-cloud-secretmanager:2.1.7
|
||||
com.google.cloud:google-cloud-secretmanager:2.2.0
|
||||
com.google.cloud:google-cloud-spanner:6.20.0
|
||||
com.google.cloud:google-cloud-storage:2.6.1
|
||||
com.google.cloud:google-cloud-tasks:2.1.11
|
||||
com.google.cloud:google-cloud-storage:2.7.2
|
||||
com.google.cloud:google-cloud-tasks:2.2.0
|
||||
com.google.cloud:grpc-gcp:1.1.0
|
||||
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.14
|
||||
com.google.code.findbugs:jsr305:3.0.2
|
||||
com.google.code.gson:gson:2.9.0
|
||||
com.google.common.html.types:types:1.0.6
|
||||
com.google.dagger:dagger:2.41
|
||||
com.google.errorprone:error_prone_annotations:2.13.0
|
||||
com.google.dagger:dagger:2.42
|
||||
com.google.errorprone:error_prone_annotations:2.13.1
|
||||
com.google.escapevelocity:escapevelocity:0.9.1
|
||||
com.google.flatbuffers:flatbuffers-java:1.12.0
|
||||
com.google.flogger:flogger-system-backend:0.7.4
|
||||
@@ -128,38 +132,39 @@ com.google.guava:failureaccess:1.0.1
|
||||
com.google.guava:guava:31.1-jre
|
||||
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
|
||||
com.google.gwt:gwt-user:2.9.0
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.7
|
||||
com.google.http-client:google-http-client-appengine:1.41.7
|
||||
com.google.http-client:google-http-client-gson:1.41.7
|
||||
com.google.http-client:google-http-client-jackson2:1.41.7
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.8
|
||||
com.google.http-client:google-http-client-appengine:1.41.8
|
||||
com.google.http-client:google-http-client-gson:1.41.8
|
||||
com.google.http-client:google-http-client-jackson2:1.41.8
|
||||
com.google.http-client:google-http-client-protobuf:1.40.1
|
||||
com.google.http-client:google-http-client:1.41.7
|
||||
com.google.http-client:google-http-client:1.41.8
|
||||
com.google.inject.extensions:guice-multibindings:4.1.0
|
||||
com.google.inject:guice:4.1.0
|
||||
com.google.j2objc:j2objc-annotations:1.3
|
||||
com.google.jsinterop:jsinterop-annotations:2.0.0
|
||||
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.33.3
|
||||
com.google.oauth-client:google-oauth-client-java6:1.33.3
|
||||
com.google.oauth-client:google-oauth-client-jetty:1.33.3
|
||||
com.google.oauth-client:google-oauth-client-servlet:1.33.3
|
||||
com.google.oauth-client:google-oauth-client:1.33.3
|
||||
com.google.protobuf:protobuf-java-util:3.19.4
|
||||
com.google.protobuf:protobuf-java:3.19.4
|
||||
com.google.oauth-client:google-oauth-client-appengine:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-java6:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-jetty:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-servlet:1.34.0
|
||||
com.google.oauth-client:google-oauth-client:1.34.0
|
||||
com.google.protobuf:protobuf-java-util:3.20.1
|
||||
com.google.protobuf:protobuf-java:3.20.1
|
||||
com.google.re2j:re2j:1.6
|
||||
com.google.template:soy:2021-02-01
|
||||
com.googlecode.charts4j:charts4j:1.3
|
||||
com.googlecode.json-simple:json-simple:1.1.1
|
||||
com.ibm.icu:icu4j:71.1
|
||||
com.jcraft:jsch:0.1.55
|
||||
com.lmax:disruptor:3.4.2
|
||||
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.15
|
||||
commons-logging:commons-logging:1.2
|
||||
dnsjava:dnsjava:3.5.0
|
||||
dnsjava:dnsjava:3.5.1
|
||||
io.confluent:common-config:5.3.2
|
||||
io.confluent:common-utils:5.3.2
|
||||
io.confluent:kafka-avro-serializer:5.3.2
|
||||
@@ -167,16 +172,19 @@ io.confluent:kafka-schema-registry-client:5.3.2
|
||||
io.dropwizard.metrics:metrics-core:3.1.2
|
||||
io.github.classgraph:classgraph:4.8.104
|
||||
io.grpc:grpc-alts:1.44.0
|
||||
io.grpc:grpc-api:1.45.1
|
||||
io.grpc:grpc-api:1.46.0
|
||||
io.grpc:grpc-auth:1.44.0
|
||||
io.grpc:grpc-context:1.45.1
|
||||
io.grpc:grpc-census:1.44.0
|
||||
io.grpc:grpc-context:1.46.0
|
||||
io.grpc:grpc-core:1.44.1
|
||||
io.grpc:grpc-grpclb:1.44.0
|
||||
io.grpc:grpc-netty-shaded:1.44.0
|
||||
io.grpc:grpc-netty:1.44.0
|
||||
io.grpc:grpc-protobuf-lite:1.45.1
|
||||
io.grpc:grpc-protobuf:1.45.1
|
||||
io.grpc:grpc-stub:1.45.1
|
||||
io.grpc:grpc-protobuf-lite:1.46.0
|
||||
io.grpc:grpc-protobuf:1.46.0
|
||||
io.grpc:grpc-services:1.44.0
|
||||
io.grpc:grpc-stub:1.46.0
|
||||
io.grpc:grpc-xds:1.44.0
|
||||
io.netty:netty-buffer:4.1.72.Final
|
||||
io.netty:netty-codec-http2:4.1.72.Final
|
||||
io.netty:netty-codec-http:4.1.72.Final
|
||||
@@ -187,9 +195,17 @@ io.netty:netty-resolver:4.1.72.Final
|
||||
io.netty:netty-tcnative-boringssl-static:2.0.46.Final
|
||||
io.netty:netty-tcnative-classes:2.0.46.Final
|
||||
io.netty:netty-transport:4.1.72.Final
|
||||
io.opencensus:opencensus-api:0.31.0
|
||||
io.opencensus:opencensus-api:0.31.1
|
||||
io.opencensus:opencensus-contrib-exemplar-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-grpc-metrics:0.31.0
|
||||
io.opencensus:opencensus-contrib-grpc-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.1
|
||||
io.opencensus:opencensus-contrib-resource-util:0.31.0
|
||||
io.opencensus:opencensus-exporter-metrics-util:0.31.0
|
||||
io.opencensus:opencensus-exporter-stats-stackdriver:0.31.0
|
||||
io.opencensus:opencensus-impl-core:0.31.0
|
||||
io.opencensus:opencensus-impl:0.31.0
|
||||
io.opencensus:opencensus-proto:0.2.0
|
||||
it.unimi.dsi:fastutil:6.5.16
|
||||
javax.activation:activation:1.1
|
||||
javax.activation:javax.activation-api:1.2.0
|
||||
@@ -211,21 +227,21 @@ org.apache.arrow:arrow-format:5.0.0
|
||||
org.apache.arrow:arrow-memory-core:5.0.0
|
||||
org.apache.arrow:arrow-vector:5.0.0
|
||||
org.apache.avro:avro:1.8.2
|
||||
org.apache.beam:beam-model-fn-execution:2.38.0
|
||||
org.apache.beam:beam-model-job-management:2.38.0
|
||||
org.apache.beam:beam-model-pipeline:2.38.0
|
||||
org.apache.beam:beam-runners-core-construction-java:2.38.0
|
||||
org.apache.beam:beam-runners-core-java:2.38.0
|
||||
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.38.0
|
||||
org.apache.beam:beam-runners-java-fn-execution:2.38.0
|
||||
org.apache.beam:beam-sdks-java-core:2.38.0
|
||||
org.apache.beam:beam-sdks-java-expansion-service:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-arrow:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-protobuf:2.38.0
|
||||
org.apache.beam:beam-sdks-java-fn-execution:2.38.0
|
||||
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.38.0
|
||||
org.apache.beam:beam-sdks-java-io-kafka:2.38.0
|
||||
org.apache.beam:beam-model-fn-execution:2.39.0
|
||||
org.apache.beam:beam-model-job-management:2.39.0
|
||||
org.apache.beam:beam-model-pipeline:2.39.0
|
||||
org.apache.beam:beam-runners-core-construction-java:2.39.0
|
||||
org.apache.beam:beam-runners-core-java:2.39.0
|
||||
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.39.0
|
||||
org.apache.beam:beam-runners-java-fn-execution:2.39.0
|
||||
org.apache.beam:beam-sdks-java-core:2.39.0
|
||||
org.apache.beam:beam-sdks-java-expansion-service:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-arrow:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-protobuf:2.39.0
|
||||
org.apache.beam:beam-sdks-java-fn-execution:2.39.0
|
||||
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.39.0
|
||||
org.apache.beam:beam-sdks-java-io-kafka:2.39.0
|
||||
org.apache.beam:beam-vendor-bytebuddy-1_11_0:0.1
|
||||
org.apache.beam:beam-vendor-grpc-1_43_2:0.1
|
||||
org.apache.beam:beam-vendor-guava-26_0-jre:0.1
|
||||
@@ -237,42 +253,43 @@ org.bouncycastle:bcpg-jdk15on:1.67
|
||||
org.bouncycastle:bcpkix-jdk15on:1.67
|
||||
org.bouncycastle:bcprov-jdk15on:1.67
|
||||
org.checkerframework:checker-compat-qual:2.5.5
|
||||
org.checkerframework:checker-qual:3.21.4
|
||||
org.checkerframework:checker-qual:3.22.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.5.1
|
||||
org.easymock:easymock:3.0
|
||||
org.flywaydb:flyway-core:8.5.10
|
||||
org.flywaydb:flyway-core:8.5.12
|
||||
org.glassfish.jaxb:jaxb-runtime:2.3.1
|
||||
org.glassfish.jaxb:txw2:2.3.1
|
||||
org.hamcrest:hamcrest-core:1.3
|
||||
org.hamcrest:hamcrest:2.1
|
||||
org.hibernate.common:hibernate-commons-annotations:5.1.2.Final
|
||||
org.hibernate:hibernate-core:5.6.8.Final
|
||||
org.hibernate:hibernate-hikaricp:5.6.8.Final
|
||||
org.hibernate:hibernate-core:5.6.9.Final
|
||||
org.hibernate:hibernate-hikaricp:5.6.9.Final
|
||||
org.jboss.logging:jboss-logging:3.4.3.Final
|
||||
org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.1.1.Final
|
||||
org.jboss:jandex:2.4.2.Final
|
||||
org.jetbrains:annotations:17.0.0
|
||||
org.joda:joda-money:1.0.1
|
||||
org.json:json:20200518
|
||||
org.jsoup:jsoup:1.14.3
|
||||
org.jsoup:jsoup:1.15.1
|
||||
org.jvnet.staxex:stax-ex:1.8
|
||||
org.objenesis:objenesis:1.2
|
||||
org.ow2.asm:asm-analysis:9.2
|
||||
org.ow2.asm:asm-analysis:9.3
|
||||
org.ow2.asm:asm-commons:9.2
|
||||
org.ow2.asm:asm-tree:9.2
|
||||
org.ow2.asm:asm-util:9.2
|
||||
org.ow2.asm:asm:9.2
|
||||
org.postgresql:postgresql:42.3.4
|
||||
org.ow2.asm:asm-tree:9.3
|
||||
org.ow2.asm:asm-util:9.3
|
||||
org.ow2.asm:asm:9.3
|
||||
org.postgresql:postgresql:42.3.6
|
||||
org.rnorth.duct-tape:duct-tape:1.0.8
|
||||
org.slf4j:slf4j-api:1.7.35
|
||||
org.springframework:spring-core:4.3.18.RELEASE
|
||||
org.springframework:spring-expression:4.3.18.RELEASE
|
||||
org.testcontainers:database-commons:1.17.1
|
||||
org.testcontainers:jdbc:1.17.1
|
||||
org.testcontainers:postgresql:1.17.1
|
||||
org.testcontainers:testcontainers:1.17.1
|
||||
org.slf4j:slf4j-api:1.7.36
|
||||
org.springframework:spring-core:5.3.18
|
||||
org.springframework:spring-expression:5.3.18
|
||||
org.springframework:spring-jcl:5.3.18
|
||||
org.testcontainers:database-commons:1.17.2
|
||||
org.testcontainers:jdbc:1.17.2
|
||||
org.testcontainers:postgresql:1.17.2
|
||||
org.testcontainers:testcontainers:1.17.2
|
||||
org.threeten:threetenbp:1.6.0
|
||||
org.tukaani:xz:1.5
|
||||
org.w3c.css:sac:1.3
|
||||
|
||||
@@ -7,11 +7,13 @@ args4j:args4j:2.0.23
|
||||
cglib:cglib-nodep:2.2
|
||||
com.101tec:zkclient:0.10
|
||||
com.beust:jcommander:1.60
|
||||
com.fasterxml.jackson.core:jackson-annotations:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-databind:2.13.2
|
||||
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.2
|
||||
com.fasterxml.jackson:jackson-bom:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-annotations:2.13.3
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.3
|
||||
com.fasterxml.jackson.core:jackson-databind:2.13.3
|
||||
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.3
|
||||
com.fasterxml.jackson.datatype:jackson-datatype-joda:2.13.3
|
||||
com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.3
|
||||
com.fasterxml.jackson:jackson-bom:2.13.3
|
||||
com.fasterxml:classmate:1.5.1
|
||||
com.github.ben-manes.caffeine:caffeine:2.9.3
|
||||
com.github.docker-java:docker-java-api:3.2.13
|
||||
@@ -26,22 +28,22 @@ com.github.jnr:jnr-posix:3.1.15
|
||||
com.github.jnr:jnr-unixsocket:0.38.17
|
||||
com.github.jnr:jnr-x86asm:1.0.2
|
||||
com.google.android:annotations:4.1.1.4
|
||||
com.google.api-client:google-api-client-appengine:1.34.0
|
||||
com.google.api-client:google-api-client-appengine:1.35.0
|
||||
com.google.api-client:google-api-client-jackson2:1.32.2
|
||||
com.google.api-client:google-api-client-java6:1.34.0
|
||||
com.google.api-client:google-api-client-servlet:1.34.0
|
||||
com.google.api-client:google-api-client:1.34.0
|
||||
com.google.api-client:google-api-client-java6:1.35.0
|
||||
com.google.api-client:google-api-client-servlet:1.35.0
|
||||
com.google.api-client:google-api-client:1.35.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.10.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.134.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.134.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.27.1
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.27.1
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-v2:2.5.3
|
||||
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.97.5
|
||||
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.5.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-storage-v2:2.0.1-alpha
|
||||
com.google.api.grpc:grpc-google-cloud-storage-v2:2.2.2-alpha
|
||||
com.google.api.grpc:grpc-google-common-protos:2.7.2
|
||||
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.10.0
|
||||
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.134.0
|
||||
@@ -50,28 +52,29 @@ com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.5.3
|
||||
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.5.3
|
||||
com.google.api.grpc:proto-google-cloud-datastore-v1:0.93.4
|
||||
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.14
|
||||
com.google.api.grpc:proto-google-cloud-monitoring-v3:1.64.0
|
||||
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.98.0
|
||||
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.5.0
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1:2.1.7
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:2.1.7
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-storage-v2:2.0.1-alpha
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2:2.1.11
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.91.11
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.91.11
|
||||
com.google.api.grpc:proto-google-cloud-storage-v2:2.2.2-alpha
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.92.0
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.92.0
|
||||
com.google.api.grpc:proto-google-common-protos:2.8.3
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.1
|
||||
com.google.api:api-common:2.1.5
|
||||
com.google.api:gax-grpc:2.16.0
|
||||
com.google.api:gax-httpjson:0.101.0
|
||||
com.google.api:gax:2.16.0
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.4
|
||||
com.google.api:api-common:2.2.0
|
||||
com.google.api:gax-grpc:2.18.1
|
||||
com.google.api:gax-httpjson:0.103.1
|
||||
com.google.api:gax:2.18.1
|
||||
com.google.apis:google-api-services-admin-directory:directory_v1-rev118-1.25.0
|
||||
com.google.apis:google-api-services-appengine:v1-rev20220326-1.32.1
|
||||
com.google.apis:google-api-services-appengine:v1-rev20220509-1.32.1
|
||||
com.google.apis:google-api-services-bigquery:v2-rev20211129-1.32.1
|
||||
com.google.apis:google-api-services-clouddebugger:v2-rev20210813-1.32.1
|
||||
com.google.apis:google-api-services-cloudkms:v1-rev20220415-1.32.1
|
||||
com.google.apis:google-api-services-cloudkms:v1-rev20220513-1.32.1
|
||||
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20211017-1.32.1
|
||||
com.google.apis:google-api-services-dataflow:v1b3-rev20210818-1.32.1
|
||||
com.google.apis:google-api-services-dns:v2beta1-rev99-1.25.0
|
||||
@@ -79,47 +82,48 @@ com.google.apis:google-api-services-drive:v2-rev393-1.25.0
|
||||
com.google.apis:google-api-services-groupssettings:v1-rev20210624-1.32.1
|
||||
com.google.apis:google-api-services-healthcare:v1-rev20211016-1.32.1
|
||||
com.google.apis:google-api-services-iamcredentials:v1-rev20210326-1.32.1
|
||||
com.google.apis:google-api-services-monitoring:v3-rev20220322-1.32.1
|
||||
com.google.apis:google-api-services-monitoring:v3-rev20220525-1.32.1
|
||||
com.google.apis:google-api-services-pubsub:v1-rev20211130-1.32.1
|
||||
com.google.apis:google-api-services-sheets:v4-rev20220411-1.32.1
|
||||
com.google.apis:google-api-services-sqladmin:v1beta4-rev20220310-1.32.1
|
||||
com.google.apis:google-api-services-storage:v1-rev20220401-1.32.1
|
||||
com.google.apis:google-api-services-sqladmin:v1beta4-rev20220323-1.32.1
|
||||
com.google.apis:google-api-services-storage:v1-rev20220509-1.32.1
|
||||
com.google.appengine.tools:appengine-gcs-client:0.8.1
|
||||
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.86
|
||||
com.google.appengine:appengine-remote-api:2.0.4
|
||||
com.google.appengine:appengine-api-1.0-sdk:2.0.5
|
||||
com.google.appengine:appengine-remote-api:2.0.5
|
||||
com.google.appengine:appengine-testing:1.9.86
|
||||
com.google.auth:google-auth-library-credentials:1.6.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.6.0
|
||||
com.google.auth:google-auth-library-credentials:1.7.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.7.0
|
||||
com.google.auto.service:auto-service-annotations:1.0.1
|
||||
com.google.auto.value:auto-value-annotations:1.9
|
||||
com.google.auto.value:auto-value:1.9
|
||||
com.google.cloud.bigdataoss:gcsio:2.2.4
|
||||
com.google.cloud.bigdataoss:util:2.2.4
|
||||
com.google.cloud.bigtable:bigtable-client-core:1.25.1
|
||||
com.google.cloud.bigtable:bigtable-metrics-api:1.25.1
|
||||
com.google.cloud.bigdataoss:gcsio:2.2.6
|
||||
com.google.cloud.bigdataoss:util:2.2.6
|
||||
com.google.cloud.bigtable:bigtable-client-core:1.26.3
|
||||
com.google.cloud.bigtable:bigtable-metrics-api:1.26.3
|
||||
com.google.cloud.datastore:datastore-v1-proto-client:2.1.3
|
||||
com.google.cloud.sql:jdbc-socket-factory-core:1.5.0
|
||||
com.google.cloud.sql:jdbc-socket-factory-core:1.6.0
|
||||
com.google.cloud:google-cloud-bigquerystorage:2.10.0
|
||||
com.google.cloud:google-cloud-bigtable:1.27.1
|
||||
com.google.cloud:google-cloud-bigtable:2.5.3
|
||||
com.google.cloud:google-cloud-core-grpc:2.4.0
|
||||
com.google.cloud:google-cloud-core-http:2.6.0
|
||||
com.google.cloud:google-cloud-core:2.6.0
|
||||
com.google.cloud:google-cloud-core-http:2.7.1
|
||||
com.google.cloud:google-cloud-core:2.7.1
|
||||
com.google.cloud:google-cloud-firestore:3.0.14
|
||||
com.google.cloud:google-cloud-monitoring:1.82.0
|
||||
com.google.cloud:google-cloud-pubsub:1.116.0
|
||||
com.google.cloud:google-cloud-pubsublite:1.5.0
|
||||
com.google.cloud:google-cloud-secretmanager:2.1.7
|
||||
com.google.cloud:google-cloud-secretmanager:2.2.0
|
||||
com.google.cloud:google-cloud-spanner:6.20.0
|
||||
com.google.cloud:google-cloud-storage:2.6.1
|
||||
com.google.cloud:google-cloud-tasks:2.1.11
|
||||
com.google.cloud:google-cloud-storage:2.7.2
|
||||
com.google.cloud:google-cloud-tasks:2.2.0
|
||||
com.google.cloud:grpc-gcp:1.1.0
|
||||
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.14
|
||||
com.google.code.findbugs:jsr305:3.0.2
|
||||
com.google.code.gson:gson:2.9.0
|
||||
com.google.common.html.types:types:1.0.6
|
||||
com.google.dagger:dagger:2.41
|
||||
com.google.errorprone:error_prone_annotations:2.13.0
|
||||
com.google.dagger:dagger:2.42
|
||||
com.google.errorprone:error_prone_annotations:2.13.1
|
||||
com.google.escapevelocity:escapevelocity:0.9.1
|
||||
com.google.flatbuffers:flatbuffers-java:1.12.0
|
||||
com.google.flogger:flogger-system-backend:0.7.4
|
||||
@@ -129,38 +133,39 @@ com.google.guava:failureaccess:1.0.1
|
||||
com.google.guava:guava:31.1-jre
|
||||
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
|
||||
com.google.gwt:gwt-user:2.9.0
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.7
|
||||
com.google.http-client:google-http-client-appengine:1.41.7
|
||||
com.google.http-client:google-http-client-gson:1.41.7
|
||||
com.google.http-client:google-http-client-jackson2:1.41.7
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.8
|
||||
com.google.http-client:google-http-client-appengine:1.41.8
|
||||
com.google.http-client:google-http-client-gson:1.41.8
|
||||
com.google.http-client:google-http-client-jackson2:1.41.8
|
||||
com.google.http-client:google-http-client-protobuf:1.40.1
|
||||
com.google.http-client:google-http-client:1.41.7
|
||||
com.google.http-client:google-http-client:1.41.8
|
||||
com.google.inject.extensions:guice-multibindings:4.1.0
|
||||
com.google.inject:guice:4.1.0
|
||||
com.google.j2objc:j2objc-annotations:1.3
|
||||
com.google.jsinterop:jsinterop-annotations:2.0.0
|
||||
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.33.3
|
||||
com.google.oauth-client:google-oauth-client-java6:1.33.3
|
||||
com.google.oauth-client:google-oauth-client-jetty:1.33.3
|
||||
com.google.oauth-client:google-oauth-client-servlet:1.33.3
|
||||
com.google.oauth-client:google-oauth-client:1.33.3
|
||||
com.google.protobuf:protobuf-java-util:3.19.4
|
||||
com.google.protobuf:protobuf-java:3.19.4
|
||||
com.google.oauth-client:google-oauth-client-appengine:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-java6:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-jetty:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-servlet:1.34.0
|
||||
com.google.oauth-client:google-oauth-client:1.34.0
|
||||
com.google.protobuf:protobuf-java-util:3.20.1
|
||||
com.google.protobuf:protobuf-java:3.20.1
|
||||
com.google.re2j:re2j:1.6
|
||||
com.google.template:soy:2021-02-01
|
||||
com.googlecode.charts4j:charts4j:1.3
|
||||
com.googlecode.json-simple:json-simple:1.1.1
|
||||
com.ibm.icu:icu4j:71.1
|
||||
com.jcraft:jsch:0.1.55
|
||||
com.lmax:disruptor:3.4.2
|
||||
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.15
|
||||
commons-logging:commons-logging:1.2
|
||||
dnsjava:dnsjava:3.5.0
|
||||
dnsjava:dnsjava:3.5.1
|
||||
guru.nidi.com.eclipsesource.j2v8:j2v8_linux_x86_64:4.6.0
|
||||
guru.nidi.com.eclipsesource.j2v8:j2v8_macosx_x86_64:4.6.0
|
||||
guru.nidi.com.eclipsesource.j2v8:j2v8_win32_x86:4.6.0
|
||||
@@ -174,20 +179,21 @@ io.confluent:kafka-avro-serializer:5.3.2
|
||||
io.confluent:kafka-schema-registry-client:5.3.2
|
||||
io.dropwizard.metrics:metrics-core:3.1.2
|
||||
io.github.classgraph:classgraph:4.8.104
|
||||
io.grpc:grpc-alts:1.45.1
|
||||
io.grpc:grpc-api:1.45.1
|
||||
io.grpc:grpc-auth:1.45.1
|
||||
io.grpc:grpc-context:1.45.1
|
||||
io.grpc:grpc-core:1.45.1
|
||||
io.grpc:grpc-googleapis:1.45.1
|
||||
io.grpc:grpc-grpclb:1.45.1
|
||||
io.grpc:grpc-netty-shaded:1.45.1
|
||||
io.grpc:grpc-alts:1.46.0
|
||||
io.grpc:grpc-api:1.46.0
|
||||
io.grpc:grpc-auth:1.46.0
|
||||
io.grpc:grpc-census:1.44.0
|
||||
io.grpc:grpc-context:1.46.0
|
||||
io.grpc:grpc-core:1.46.0
|
||||
io.grpc:grpc-googleapis:1.46.0
|
||||
io.grpc:grpc-grpclb:1.46.0
|
||||
io.grpc:grpc-netty-shaded:1.46.0
|
||||
io.grpc:grpc-netty:1.44.0
|
||||
io.grpc:grpc-protobuf-lite:1.45.1
|
||||
io.grpc:grpc-protobuf:1.45.1
|
||||
io.grpc:grpc-services:1.45.1
|
||||
io.grpc:grpc-stub:1.45.1
|
||||
io.grpc:grpc-xds:1.45.1
|
||||
io.grpc:grpc-protobuf-lite:1.46.0
|
||||
io.grpc:grpc-protobuf:1.46.0
|
||||
io.grpc:grpc-services:1.46.0
|
||||
io.grpc:grpc-stub:1.46.0
|
||||
io.grpc:grpc-xds:1.46.0
|
||||
io.netty:netty-buffer:4.1.72.Final
|
||||
io.netty:netty-codec-http2:4.1.72.Final
|
||||
io.netty:netty-codec-http:4.1.72.Final
|
||||
@@ -200,11 +206,18 @@ io.netty:netty-resolver:4.1.72.Final
|
||||
io.netty:netty-tcnative-boringssl-static:2.0.46.Final
|
||||
io.netty:netty-tcnative-classes:2.0.46.Final
|
||||
io.netty:netty-transport:4.1.72.Final
|
||||
io.opencensus:opencensus-api:0.31.0
|
||||
io.opencensus:opencensus-api:0.31.1
|
||||
io.opencensus:opencensus-contrib-exemplar-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-grpc-metrics:0.31.0
|
||||
io.opencensus:opencensus-contrib-grpc-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.1
|
||||
io.opencensus:opencensus-contrib-resource-util:0.31.0
|
||||
io.opencensus:opencensus-exporter-metrics-util:0.31.0
|
||||
io.opencensus:opencensus-exporter-stats-stackdriver:0.31.0
|
||||
io.opencensus:opencensus-impl-core:0.31.0
|
||||
io.opencensus:opencensus-impl:0.31.0
|
||||
io.opencensus:opencensus-proto:0.2.0
|
||||
io.perfmark:perfmark-api:0.23.0
|
||||
io.perfmark:perfmark-api:0.25.0
|
||||
it.unimi.dsi:fastutil:6.5.16
|
||||
javax.activation:activation:1.1
|
||||
javax.activation:javax.activation-api:1.2.0
|
||||
@@ -227,21 +240,21 @@ org.apache.arrow:arrow-format:5.0.0
|
||||
org.apache.arrow:arrow-memory-core:5.0.0
|
||||
org.apache.arrow:arrow-vector:5.0.0
|
||||
org.apache.avro:avro:1.8.2
|
||||
org.apache.beam:beam-model-fn-execution:2.38.0
|
||||
org.apache.beam:beam-model-job-management:2.38.0
|
||||
org.apache.beam:beam-model-pipeline:2.38.0
|
||||
org.apache.beam:beam-runners-core-construction-java:2.38.0
|
||||
org.apache.beam:beam-runners-core-java:2.38.0
|
||||
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.38.0
|
||||
org.apache.beam:beam-runners-java-fn-execution:2.38.0
|
||||
org.apache.beam:beam-sdks-java-core:2.38.0
|
||||
org.apache.beam:beam-sdks-java-expansion-service:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-arrow:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-protobuf:2.38.0
|
||||
org.apache.beam:beam-sdks-java-fn-execution:2.38.0
|
||||
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.38.0
|
||||
org.apache.beam:beam-sdks-java-io-kafka:2.38.0
|
||||
org.apache.beam:beam-model-fn-execution:2.39.0
|
||||
org.apache.beam:beam-model-job-management:2.39.0
|
||||
org.apache.beam:beam-model-pipeline:2.39.0
|
||||
org.apache.beam:beam-runners-core-construction-java:2.39.0
|
||||
org.apache.beam:beam-runners-core-java:2.39.0
|
||||
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.39.0
|
||||
org.apache.beam:beam-runners-java-fn-execution:2.39.0
|
||||
org.apache.beam:beam-sdks-java-core:2.39.0
|
||||
org.apache.beam:beam-sdks-java-expansion-service:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-arrow:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-protobuf:2.39.0
|
||||
org.apache.beam:beam-sdks-java-fn-execution:2.39.0
|
||||
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.39.0
|
||||
org.apache.beam:beam-sdks-java-io-kafka:2.39.0
|
||||
org.apache.beam:beam-vendor-bytebuddy-1_11_0:0.1
|
||||
org.apache.beam:beam-vendor-grpc-1_43_2:0.1
|
||||
org.apache.beam:beam-vendor-guava-26_0-jre:0.1
|
||||
@@ -254,45 +267,46 @@ org.bouncycastle:bcpg-jdk15on:1.67
|
||||
org.bouncycastle:bcpkix-jdk15on:1.67
|
||||
org.bouncycastle:bcprov-jdk15on:1.67
|
||||
org.checkerframework:checker-compat-qual:2.5.5
|
||||
org.checkerframework:checker-qual:3.21.4
|
||||
org.checkerframework:checker-qual:3.22.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.21
|
||||
org.conscrypt:conscrypt-openjdk-uber:2.5.1
|
||||
org.easymock:easymock:3.0
|
||||
org.flywaydb:flyway-core:8.5.10
|
||||
org.flywaydb:flyway-core:8.5.12
|
||||
org.glassfish.jaxb:jaxb-runtime:2.3.1
|
||||
org.glassfish.jaxb:txw2:2.3.1
|
||||
org.hamcrest:hamcrest-core:1.3
|
||||
org.hamcrest:hamcrest:2.1
|
||||
org.hibernate.common:hibernate-commons-annotations:5.1.2.Final
|
||||
org.hibernate:hibernate-core:5.6.8.Final
|
||||
org.hibernate:hibernate-hikaricp:5.6.8.Final
|
||||
org.hibernate:hibernate-core:5.6.9.Final
|
||||
org.hibernate:hibernate-hikaricp:5.6.9.Final
|
||||
org.jboss.logging:jboss-logging:3.4.3.Final
|
||||
org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.1.1.Final
|
||||
org.jboss:jandex:2.4.2.Final
|
||||
org.jetbrains:annotations:17.0.0
|
||||
org.joda:joda-money:1.0.1
|
||||
org.json:json:20200518
|
||||
org.jsoup:jsoup:1.14.3
|
||||
org.jsoup:jsoup:1.15.1
|
||||
org.jvnet.staxex:stax-ex:1.8
|
||||
org.objenesis:objenesis:1.2
|
||||
org.ow2.asm:asm-analysis:9.2
|
||||
org.ow2.asm:asm-analysis:9.3
|
||||
org.ow2.asm:asm-commons:9.2
|
||||
org.ow2.asm:asm-tree:9.2
|
||||
org.ow2.asm:asm-util:9.2
|
||||
org.ow2.asm:asm:9.2
|
||||
org.postgresql:postgresql:42.3.4
|
||||
org.ow2.asm:asm-tree:9.3
|
||||
org.ow2.asm:asm-util:9.3
|
||||
org.ow2.asm:asm:9.3
|
||||
org.postgresql:postgresql:42.3.6
|
||||
org.rnorth.duct-tape:duct-tape:1.0.8
|
||||
org.slf4j:jcl-over-slf4j:1.7.30
|
||||
org.slf4j:jul-to-slf4j:1.7.30
|
||||
org.slf4j:slf4j-api:1.7.35
|
||||
org.springframework:spring-core:4.3.18.RELEASE
|
||||
org.springframework:spring-expression:4.3.18.RELEASE
|
||||
org.testcontainers:database-commons:1.17.1
|
||||
org.testcontainers:jdbc:1.17.1
|
||||
org.testcontainers:postgresql:1.17.1
|
||||
org.testcontainers:testcontainers:1.17.1
|
||||
org.slf4j:slf4j-api:1.7.36
|
||||
org.springframework:spring-core:5.3.18
|
||||
org.springframework:spring-expression:5.3.18
|
||||
org.springframework:spring-jcl:5.3.18
|
||||
org.testcontainers:database-commons:1.17.2
|
||||
org.testcontainers:jdbc:1.17.2
|
||||
org.testcontainers:postgresql:1.17.2
|
||||
org.testcontainers:testcontainers:1.17.2
|
||||
org.threeten:threetenbp:1.6.0
|
||||
org.tukaani:xz:1.5
|
||||
org.w3c.css:sac:1.3
|
||||
|
||||
@@ -7,11 +7,13 @@ args4j:args4j:2.0.23
|
||||
cglib:cglib-nodep:2.2
|
||||
com.101tec:zkclient:0.10
|
||||
com.beust:jcommander:1.60
|
||||
com.fasterxml.jackson.core:jackson-annotations:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-databind:2.13.2
|
||||
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.2
|
||||
com.fasterxml.jackson:jackson-bom:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-annotations:2.13.3
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.3
|
||||
com.fasterxml.jackson.core:jackson-databind:2.13.3
|
||||
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.3
|
||||
com.fasterxml.jackson.datatype:jackson-datatype-joda:2.13.3
|
||||
com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.3
|
||||
com.fasterxml.jackson:jackson-bom:2.13.3
|
||||
com.fasterxml:classmate:1.5.1
|
||||
com.github.ben-manes.caffeine:caffeine:2.9.3
|
||||
com.github.docker-java:docker-java-api:3.2.13
|
||||
@@ -26,22 +28,22 @@ com.github.jnr:jnr-posix:3.1.15
|
||||
com.github.jnr:jnr-unixsocket:0.38.17
|
||||
com.github.jnr:jnr-x86asm:1.0.2
|
||||
com.google.android:annotations:4.1.1.4
|
||||
com.google.api-client:google-api-client-appengine:1.34.0
|
||||
com.google.api-client:google-api-client-appengine:1.35.0
|
||||
com.google.api-client:google-api-client-jackson2:1.32.2
|
||||
com.google.api-client:google-api-client-java6:1.34.0
|
||||
com.google.api-client:google-api-client-servlet:1.34.0
|
||||
com.google.api-client:google-api-client:1.34.0
|
||||
com.google.api-client:google-api-client-java6:1.35.0
|
||||
com.google.api-client:google-api-client-servlet:1.35.0
|
||||
com.google.api-client:google-api-client:1.35.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.10.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.134.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.134.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.27.1
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.27.1
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-v2:2.5.3
|
||||
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.97.5
|
||||
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.5.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-storage-v2:2.0.1-alpha
|
||||
com.google.api.grpc:grpc-google-cloud-storage-v2:2.2.2-alpha
|
||||
com.google.api.grpc:grpc-google-common-protos:2.7.2
|
||||
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.10.0
|
||||
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.134.0
|
||||
@@ -50,28 +52,29 @@ com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.5.3
|
||||
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.5.3
|
||||
com.google.api.grpc:proto-google-cloud-datastore-v1:0.93.4
|
||||
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.14
|
||||
com.google.api.grpc:proto-google-cloud-monitoring-v3:1.64.0
|
||||
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.98.0
|
||||
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.5.0
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1:2.1.7
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:2.1.7
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-storage-v2:2.0.1-alpha
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2:2.1.11
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.91.11
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.91.11
|
||||
com.google.api.grpc:proto-google-cloud-storage-v2:2.2.2-alpha
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.92.0
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.92.0
|
||||
com.google.api.grpc:proto-google-common-protos:2.8.3
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.1
|
||||
com.google.api:api-common:2.1.5
|
||||
com.google.api:gax-grpc:2.16.0
|
||||
com.google.api:gax-httpjson:0.101.0
|
||||
com.google.api:gax:2.16.0
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.4
|
||||
com.google.api:api-common:2.2.0
|
||||
com.google.api:gax-grpc:2.18.1
|
||||
com.google.api:gax-httpjson:0.103.1
|
||||
com.google.api:gax:2.18.1
|
||||
com.google.apis:google-api-services-admin-directory:directory_v1-rev118-1.25.0
|
||||
com.google.apis:google-api-services-appengine:v1-rev20220326-1.32.1
|
||||
com.google.apis:google-api-services-appengine:v1-rev20220509-1.32.1
|
||||
com.google.apis:google-api-services-bigquery:v2-rev20211129-1.32.1
|
||||
com.google.apis:google-api-services-clouddebugger:v2-rev20210813-1.32.1
|
||||
com.google.apis:google-api-services-cloudkms:v1-rev20220415-1.32.1
|
||||
com.google.apis:google-api-services-cloudkms:v1-rev20220513-1.32.1
|
||||
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20211017-1.32.1
|
||||
com.google.apis:google-api-services-dataflow:v1b3-rev20210818-1.32.1
|
||||
com.google.apis:google-api-services-dns:v2beta1-rev99-1.25.0
|
||||
@@ -79,47 +82,48 @@ com.google.apis:google-api-services-drive:v2-rev393-1.25.0
|
||||
com.google.apis:google-api-services-groupssettings:v1-rev20210624-1.32.1
|
||||
com.google.apis:google-api-services-healthcare:v1-rev20211016-1.32.1
|
||||
com.google.apis:google-api-services-iamcredentials:v1-rev20210326-1.32.1
|
||||
com.google.apis:google-api-services-monitoring:v3-rev20220322-1.32.1
|
||||
com.google.apis:google-api-services-monitoring:v3-rev20220525-1.32.1
|
||||
com.google.apis:google-api-services-pubsub:v1-rev20211130-1.32.1
|
||||
com.google.apis:google-api-services-sheets:v4-rev20220411-1.32.1
|
||||
com.google.apis:google-api-services-sqladmin:v1beta4-rev20220310-1.32.1
|
||||
com.google.apis:google-api-services-storage:v1-rev20220401-1.32.1
|
||||
com.google.apis:google-api-services-sqladmin:v1beta4-rev20220323-1.32.1
|
||||
com.google.apis:google-api-services-storage:v1-rev20220509-1.32.1
|
||||
com.google.appengine.tools:appengine-gcs-client:0.8.1
|
||||
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.86
|
||||
com.google.appengine:appengine-remote-api:2.0.4
|
||||
com.google.appengine:appengine-api-1.0-sdk:2.0.5
|
||||
com.google.appengine:appengine-remote-api:2.0.5
|
||||
com.google.appengine:appengine-testing:1.9.86
|
||||
com.google.auth:google-auth-library-credentials:1.6.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.6.0
|
||||
com.google.auth:google-auth-library-credentials:1.7.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.7.0
|
||||
com.google.auto.service:auto-service-annotations:1.0.1
|
||||
com.google.auto.value:auto-value-annotations:1.9
|
||||
com.google.auto.value:auto-value:1.9
|
||||
com.google.cloud.bigdataoss:gcsio:2.2.4
|
||||
com.google.cloud.bigdataoss:util:2.2.4
|
||||
com.google.cloud.bigtable:bigtable-client-core:1.25.1
|
||||
com.google.cloud.bigtable:bigtable-metrics-api:1.25.1
|
||||
com.google.cloud.bigdataoss:gcsio:2.2.6
|
||||
com.google.cloud.bigdataoss:util:2.2.6
|
||||
com.google.cloud.bigtable:bigtable-client-core:1.26.3
|
||||
com.google.cloud.bigtable:bigtable-metrics-api:1.26.3
|
||||
com.google.cloud.datastore:datastore-v1-proto-client:2.1.3
|
||||
com.google.cloud.sql:jdbc-socket-factory-core:1.5.0
|
||||
com.google.cloud.sql:jdbc-socket-factory-core:1.6.0
|
||||
com.google.cloud:google-cloud-bigquerystorage:2.10.0
|
||||
com.google.cloud:google-cloud-bigtable:1.27.1
|
||||
com.google.cloud:google-cloud-bigtable:2.5.3
|
||||
com.google.cloud:google-cloud-core-grpc:2.4.0
|
||||
com.google.cloud:google-cloud-core-http:2.6.0
|
||||
com.google.cloud:google-cloud-core:2.6.0
|
||||
com.google.cloud:google-cloud-core-http:2.7.1
|
||||
com.google.cloud:google-cloud-core:2.7.1
|
||||
com.google.cloud:google-cloud-firestore:3.0.14
|
||||
com.google.cloud:google-cloud-monitoring:1.82.0
|
||||
com.google.cloud:google-cloud-pubsub:1.116.0
|
||||
com.google.cloud:google-cloud-pubsublite:1.5.0
|
||||
com.google.cloud:google-cloud-secretmanager:2.1.7
|
||||
com.google.cloud:google-cloud-secretmanager:2.2.0
|
||||
com.google.cloud:google-cloud-spanner:6.20.0
|
||||
com.google.cloud:google-cloud-storage:2.6.1
|
||||
com.google.cloud:google-cloud-tasks:2.1.11
|
||||
com.google.cloud:google-cloud-storage:2.7.2
|
||||
com.google.cloud:google-cloud-tasks:2.2.0
|
||||
com.google.cloud:grpc-gcp:1.1.0
|
||||
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.14
|
||||
com.google.code.findbugs:jsr305:3.0.2
|
||||
com.google.code.gson:gson:2.9.0
|
||||
com.google.common.html.types:types:1.0.6
|
||||
com.google.dagger:dagger:2.41
|
||||
com.google.errorprone:error_prone_annotations:2.13.0
|
||||
com.google.dagger:dagger:2.42
|
||||
com.google.errorprone:error_prone_annotations:2.13.1
|
||||
com.google.escapevelocity:escapevelocity:0.9.1
|
||||
com.google.flatbuffers:flatbuffers-java:1.12.0
|
||||
com.google.flogger:flogger-system-backend:0.7.4
|
||||
@@ -129,38 +133,39 @@ com.google.guava:failureaccess:1.0.1
|
||||
com.google.guava:guava:31.1-jre
|
||||
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
|
||||
com.google.gwt:gwt-user:2.9.0
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.7
|
||||
com.google.http-client:google-http-client-appengine:1.41.7
|
||||
com.google.http-client:google-http-client-gson:1.41.7
|
||||
com.google.http-client:google-http-client-jackson2:1.41.7
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.8
|
||||
com.google.http-client:google-http-client-appengine:1.41.8
|
||||
com.google.http-client:google-http-client-gson:1.41.8
|
||||
com.google.http-client:google-http-client-jackson2:1.41.8
|
||||
com.google.http-client:google-http-client-protobuf:1.40.1
|
||||
com.google.http-client:google-http-client:1.41.7
|
||||
com.google.http-client:google-http-client:1.41.8
|
||||
com.google.inject.extensions:guice-multibindings:4.1.0
|
||||
com.google.inject:guice:4.1.0
|
||||
com.google.j2objc:j2objc-annotations:1.3
|
||||
com.google.jsinterop:jsinterop-annotations:2.0.0
|
||||
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.33.3
|
||||
com.google.oauth-client:google-oauth-client-java6:1.33.3
|
||||
com.google.oauth-client:google-oauth-client-jetty:1.33.3
|
||||
com.google.oauth-client:google-oauth-client-servlet:1.33.3
|
||||
com.google.oauth-client:google-oauth-client:1.33.3
|
||||
com.google.protobuf:protobuf-java-util:3.19.4
|
||||
com.google.protobuf:protobuf-java:3.19.4
|
||||
com.google.oauth-client:google-oauth-client-appengine:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-java6:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-jetty:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-servlet:1.34.0
|
||||
com.google.oauth-client:google-oauth-client:1.34.0
|
||||
com.google.protobuf:protobuf-java-util:3.20.1
|
||||
com.google.protobuf:protobuf-java:3.20.1
|
||||
com.google.re2j:re2j:1.6
|
||||
com.google.template:soy:2021-02-01
|
||||
com.googlecode.charts4j:charts4j:1.3
|
||||
com.googlecode.json-simple:json-simple:1.1.1
|
||||
com.ibm.icu:icu4j:71.1
|
||||
com.jcraft:jsch:0.1.55
|
||||
com.lmax:disruptor:3.4.2
|
||||
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.15
|
||||
commons-logging:commons-logging:1.2
|
||||
dnsjava:dnsjava:3.5.0
|
||||
dnsjava:dnsjava:3.5.1
|
||||
guru.nidi.com.eclipsesource.j2v8:j2v8_linux_x86_64:4.6.0
|
||||
guru.nidi.com.eclipsesource.j2v8:j2v8_macosx_x86_64:4.6.0
|
||||
guru.nidi.com.eclipsesource.j2v8:j2v8_win32_x86:4.6.0
|
||||
@@ -174,20 +179,21 @@ io.confluent:kafka-avro-serializer:5.3.2
|
||||
io.confluent:kafka-schema-registry-client:5.3.2
|
||||
io.dropwizard.metrics:metrics-core:3.1.2
|
||||
io.github.classgraph:classgraph:4.8.104
|
||||
io.grpc:grpc-alts:1.45.1
|
||||
io.grpc:grpc-api:1.45.1
|
||||
io.grpc:grpc-auth:1.45.1
|
||||
io.grpc:grpc-context:1.45.1
|
||||
io.grpc:grpc-core:1.45.1
|
||||
io.grpc:grpc-googleapis:1.45.1
|
||||
io.grpc:grpc-grpclb:1.45.1
|
||||
io.grpc:grpc-netty-shaded:1.45.1
|
||||
io.grpc:grpc-alts:1.46.0
|
||||
io.grpc:grpc-api:1.46.0
|
||||
io.grpc:grpc-auth:1.46.0
|
||||
io.grpc:grpc-census:1.44.0
|
||||
io.grpc:grpc-context:1.46.0
|
||||
io.grpc:grpc-core:1.46.0
|
||||
io.grpc:grpc-googleapis:1.46.0
|
||||
io.grpc:grpc-grpclb:1.46.0
|
||||
io.grpc:grpc-netty-shaded:1.46.0
|
||||
io.grpc:grpc-netty:1.44.0
|
||||
io.grpc:grpc-protobuf-lite:1.45.1
|
||||
io.grpc:grpc-protobuf:1.45.1
|
||||
io.grpc:grpc-services:1.45.1
|
||||
io.grpc:grpc-stub:1.45.1
|
||||
io.grpc:grpc-xds:1.45.1
|
||||
io.grpc:grpc-protobuf-lite:1.46.0
|
||||
io.grpc:grpc-protobuf:1.46.0
|
||||
io.grpc:grpc-services:1.46.0
|
||||
io.grpc:grpc-stub:1.46.0
|
||||
io.grpc:grpc-xds:1.46.0
|
||||
io.netty:netty-buffer:4.1.72.Final
|
||||
io.netty:netty-codec-http2:4.1.72.Final
|
||||
io.netty:netty-codec-http:4.1.72.Final
|
||||
@@ -200,11 +206,18 @@ io.netty:netty-resolver:4.1.72.Final
|
||||
io.netty:netty-tcnative-boringssl-static:2.0.46.Final
|
||||
io.netty:netty-tcnative-classes:2.0.46.Final
|
||||
io.netty:netty-transport:4.1.72.Final
|
||||
io.opencensus:opencensus-api:0.31.0
|
||||
io.opencensus:opencensus-api:0.31.1
|
||||
io.opencensus:opencensus-contrib-exemplar-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-grpc-metrics:0.31.0
|
||||
io.opencensus:opencensus-contrib-grpc-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.1
|
||||
io.opencensus:opencensus-contrib-resource-util:0.31.0
|
||||
io.opencensus:opencensus-exporter-metrics-util:0.31.0
|
||||
io.opencensus:opencensus-exporter-stats-stackdriver:0.31.0
|
||||
io.opencensus:opencensus-impl-core:0.31.0
|
||||
io.opencensus:opencensus-impl:0.31.0
|
||||
io.opencensus:opencensus-proto:0.2.0
|
||||
io.perfmark:perfmark-api:0.23.0
|
||||
io.perfmark:perfmark-api:0.25.0
|
||||
it.unimi.dsi:fastutil:6.5.16
|
||||
javax.activation:activation:1.1
|
||||
javax.activation:javax.activation-api:1.2.0
|
||||
@@ -227,21 +240,21 @@ org.apache.arrow:arrow-format:5.0.0
|
||||
org.apache.arrow:arrow-memory-core:5.0.0
|
||||
org.apache.arrow:arrow-vector:5.0.0
|
||||
org.apache.avro:avro:1.8.2
|
||||
org.apache.beam:beam-model-fn-execution:2.38.0
|
||||
org.apache.beam:beam-model-job-management:2.38.0
|
||||
org.apache.beam:beam-model-pipeline:2.38.0
|
||||
org.apache.beam:beam-runners-core-construction-java:2.38.0
|
||||
org.apache.beam:beam-runners-core-java:2.38.0
|
||||
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.38.0
|
||||
org.apache.beam:beam-runners-java-fn-execution:2.38.0
|
||||
org.apache.beam:beam-sdks-java-core:2.38.0
|
||||
org.apache.beam:beam-sdks-java-expansion-service:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-arrow:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-protobuf:2.38.0
|
||||
org.apache.beam:beam-sdks-java-fn-execution:2.38.0
|
||||
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.38.0
|
||||
org.apache.beam:beam-sdks-java-io-kafka:2.38.0
|
||||
org.apache.beam:beam-model-fn-execution:2.39.0
|
||||
org.apache.beam:beam-model-job-management:2.39.0
|
||||
org.apache.beam:beam-model-pipeline:2.39.0
|
||||
org.apache.beam:beam-runners-core-construction-java:2.39.0
|
||||
org.apache.beam:beam-runners-core-java:2.39.0
|
||||
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.39.0
|
||||
org.apache.beam:beam-runners-java-fn-execution:2.39.0
|
||||
org.apache.beam:beam-sdks-java-core:2.39.0
|
||||
org.apache.beam:beam-sdks-java-expansion-service:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-arrow:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-protobuf:2.39.0
|
||||
org.apache.beam:beam-sdks-java-fn-execution:2.39.0
|
||||
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.39.0
|
||||
org.apache.beam:beam-sdks-java-io-kafka:2.39.0
|
||||
org.apache.beam:beam-vendor-bytebuddy-1_11_0:0.1
|
||||
org.apache.beam:beam-vendor-grpc-1_43_2:0.1
|
||||
org.apache.beam:beam-vendor-guava-26_0-jre:0.1
|
||||
@@ -254,45 +267,46 @@ org.bouncycastle:bcpg-jdk15on:1.67
|
||||
org.bouncycastle:bcpkix-jdk15on:1.67
|
||||
org.bouncycastle:bcprov-jdk15on:1.67
|
||||
org.checkerframework:checker-compat-qual:2.5.5
|
||||
org.checkerframework:checker-qual:3.21.4
|
||||
org.checkerframework:checker-qual:3.22.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.21
|
||||
org.conscrypt:conscrypt-openjdk-uber:2.5.1
|
||||
org.easymock:easymock:3.0
|
||||
org.flywaydb:flyway-core:8.5.10
|
||||
org.flywaydb:flyway-core:8.5.12
|
||||
org.glassfish.jaxb:jaxb-runtime:2.3.1
|
||||
org.glassfish.jaxb:txw2:2.3.1
|
||||
org.hamcrest:hamcrest-core:1.3
|
||||
org.hamcrest:hamcrest:2.1
|
||||
org.hibernate.common:hibernate-commons-annotations:5.1.2.Final
|
||||
org.hibernate:hibernate-core:5.6.8.Final
|
||||
org.hibernate:hibernate-hikaricp:5.6.8.Final
|
||||
org.hibernate:hibernate-core:5.6.9.Final
|
||||
org.hibernate:hibernate-hikaricp:5.6.9.Final
|
||||
org.jboss.logging:jboss-logging:3.4.3.Final
|
||||
org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.1.1.Final
|
||||
org.jboss:jandex:2.4.2.Final
|
||||
org.jetbrains:annotations:17.0.0
|
||||
org.joda:joda-money:1.0.1
|
||||
org.json:json:20200518
|
||||
org.jsoup:jsoup:1.14.3
|
||||
org.jsoup:jsoup:1.15.1
|
||||
org.jvnet.staxex:stax-ex:1.8
|
||||
org.objenesis:objenesis:1.2
|
||||
org.ow2.asm:asm-analysis:9.2
|
||||
org.ow2.asm:asm-analysis:9.3
|
||||
org.ow2.asm:asm-commons:9.2
|
||||
org.ow2.asm:asm-tree:9.2
|
||||
org.ow2.asm:asm-util:9.2
|
||||
org.ow2.asm:asm:9.2
|
||||
org.postgresql:postgresql:42.3.4
|
||||
org.ow2.asm:asm-tree:9.3
|
||||
org.ow2.asm:asm-util:9.3
|
||||
org.ow2.asm:asm:9.3
|
||||
org.postgresql:postgresql:42.3.6
|
||||
org.rnorth.duct-tape:duct-tape:1.0.8
|
||||
org.slf4j:jcl-over-slf4j:1.7.30
|
||||
org.slf4j:jul-to-slf4j:1.7.30
|
||||
org.slf4j:slf4j-api:1.7.35
|
||||
org.springframework:spring-core:4.3.18.RELEASE
|
||||
org.springframework:spring-expression:4.3.18.RELEASE
|
||||
org.testcontainers:database-commons:1.17.1
|
||||
org.testcontainers:jdbc:1.17.1
|
||||
org.testcontainers:postgresql:1.17.1
|
||||
org.testcontainers:testcontainers:1.17.1
|
||||
org.slf4j:slf4j-api:1.7.36
|
||||
org.springframework:spring-core:5.3.18
|
||||
org.springframework:spring-expression:5.3.18
|
||||
org.springframework:spring-jcl:5.3.18
|
||||
org.testcontainers:database-commons:1.17.2
|
||||
org.testcontainers:jdbc:1.17.2
|
||||
org.testcontainers:postgresql:1.17.2
|
||||
org.testcontainers:testcontainers:1.17.2
|
||||
org.threeten:threetenbp:1.6.0
|
||||
org.tukaani:xz:1.5
|
||||
org.w3c.css:sac:1.3
|
||||
|
||||
@@ -7,11 +7,13 @@ args4j:args4j:2.0.23
|
||||
cglib:cglib-nodep:2.2
|
||||
com.101tec:zkclient:0.10
|
||||
com.beust:jcommander:1.60
|
||||
com.fasterxml.jackson.core:jackson-annotations:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-databind:2.13.2
|
||||
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.2
|
||||
com.fasterxml.jackson:jackson-bom:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-annotations:2.13.3
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.3
|
||||
com.fasterxml.jackson.core:jackson-databind:2.13.3
|
||||
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.3
|
||||
com.fasterxml.jackson.datatype:jackson-datatype-joda:2.13.3
|
||||
com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.3
|
||||
com.fasterxml.jackson:jackson-bom:2.13.3
|
||||
com.fasterxml:classmate:1.5.1
|
||||
com.github.ben-manes.caffeine:caffeine:2.9.3
|
||||
com.github.docker-java:docker-java-api:3.2.13
|
||||
@@ -26,22 +28,22 @@ com.github.jnr:jnr-posix:3.1.15
|
||||
com.github.jnr:jnr-unixsocket:0.38.17
|
||||
com.github.jnr:jnr-x86asm:1.0.2
|
||||
com.google.android:annotations:4.1.1.4
|
||||
com.google.api-client:google-api-client-appengine:1.34.0
|
||||
com.google.api-client:google-api-client-appengine:1.35.0
|
||||
com.google.api-client:google-api-client-jackson2:1.32.2
|
||||
com.google.api-client:google-api-client-java6:1.34.0
|
||||
com.google.api-client:google-api-client-servlet:1.34.0
|
||||
com.google.api-client:google-api-client:1.34.0
|
||||
com.google.api-client:google-api-client-java6:1.35.0
|
||||
com.google.api-client:google-api-client-servlet:1.35.0
|
||||
com.google.api-client:google-api-client:1.35.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.10.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.134.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.134.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.27.1
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.27.1
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-v2:2.5.3
|
||||
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.97.5
|
||||
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.5.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-storage-v2:2.0.1-alpha
|
||||
com.google.api.grpc:grpc-google-cloud-storage-v2:2.2.2-alpha
|
||||
com.google.api.grpc:grpc-google-common-protos:2.7.2
|
||||
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.10.0
|
||||
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.134.0
|
||||
@@ -50,28 +52,29 @@ com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.5.3
|
||||
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.5.3
|
||||
com.google.api.grpc:proto-google-cloud-datastore-v1:0.93.4
|
||||
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.14
|
||||
com.google.api.grpc:proto-google-cloud-monitoring-v3:1.64.0
|
||||
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.98.0
|
||||
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.5.0
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1:2.1.7
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:2.1.7
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-storage-v2:2.0.1-alpha
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2:2.1.11
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.91.11
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.91.11
|
||||
com.google.api.grpc:proto-google-cloud-storage-v2:2.2.2-alpha
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.92.0
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.92.0
|
||||
com.google.api.grpc:proto-google-common-protos:2.8.3
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.1
|
||||
com.google.api:api-common:2.1.5
|
||||
com.google.api:gax-grpc:2.16.0
|
||||
com.google.api:gax-httpjson:0.101.0
|
||||
com.google.api:gax:2.16.0
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.4
|
||||
com.google.api:api-common:2.2.0
|
||||
com.google.api:gax-grpc:2.18.1
|
||||
com.google.api:gax-httpjson:0.103.1
|
||||
com.google.api:gax:2.18.1
|
||||
com.google.apis:google-api-services-admin-directory:directory_v1-rev118-1.25.0
|
||||
com.google.apis:google-api-services-appengine:v1-rev20220326-1.32.1
|
||||
com.google.apis:google-api-services-appengine:v1-rev20220509-1.32.1
|
||||
com.google.apis:google-api-services-bigquery:v2-rev20211129-1.32.1
|
||||
com.google.apis:google-api-services-clouddebugger:v2-rev20210813-1.32.1
|
||||
com.google.apis:google-api-services-cloudkms:v1-rev20220415-1.32.1
|
||||
com.google.apis:google-api-services-cloudkms:v1-rev20220513-1.32.1
|
||||
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20211017-1.32.1
|
||||
com.google.apis:google-api-services-dataflow:v1b3-rev20210818-1.32.1
|
||||
com.google.apis:google-api-services-dns:v2beta1-rev99-1.25.0
|
||||
@@ -79,47 +82,48 @@ com.google.apis:google-api-services-drive:v2-rev393-1.25.0
|
||||
com.google.apis:google-api-services-groupssettings:v1-rev20210624-1.32.1
|
||||
com.google.apis:google-api-services-healthcare:v1-rev20211016-1.32.1
|
||||
com.google.apis:google-api-services-iamcredentials:v1-rev20210326-1.32.1
|
||||
com.google.apis:google-api-services-monitoring:v3-rev20220322-1.32.1
|
||||
com.google.apis:google-api-services-monitoring:v3-rev20220525-1.32.1
|
||||
com.google.apis:google-api-services-pubsub:v1-rev20211130-1.32.1
|
||||
com.google.apis:google-api-services-sheets:v4-rev20220411-1.32.1
|
||||
com.google.apis:google-api-services-sqladmin:v1beta4-rev20220310-1.32.1
|
||||
com.google.apis:google-api-services-storage:v1-rev20220401-1.32.1
|
||||
com.google.apis:google-api-services-sqladmin:v1beta4-rev20220323-1.32.1
|
||||
com.google.apis:google-api-services-storage:v1-rev20220509-1.32.1
|
||||
com.google.appengine.tools:appengine-gcs-client:0.8.1
|
||||
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.86
|
||||
com.google.appengine:appengine-remote-api:2.0.4
|
||||
com.google.appengine:appengine-api-1.0-sdk:2.0.5
|
||||
com.google.appengine:appengine-remote-api:2.0.5
|
||||
com.google.appengine:appengine-testing:1.9.86
|
||||
com.google.auth:google-auth-library-credentials:1.6.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.6.0
|
||||
com.google.auth:google-auth-library-credentials:1.7.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.7.0
|
||||
com.google.auto.service:auto-service-annotations:1.0.1
|
||||
com.google.auto.value:auto-value-annotations:1.9
|
||||
com.google.auto.value:auto-value:1.9
|
||||
com.google.cloud.bigdataoss:gcsio:2.2.4
|
||||
com.google.cloud.bigdataoss:util:2.2.4
|
||||
com.google.cloud.bigtable:bigtable-client-core:1.25.1
|
||||
com.google.cloud.bigtable:bigtable-metrics-api:1.25.1
|
||||
com.google.cloud.bigdataoss:gcsio:2.2.6
|
||||
com.google.cloud.bigdataoss:util:2.2.6
|
||||
com.google.cloud.bigtable:bigtable-client-core:1.26.3
|
||||
com.google.cloud.bigtable:bigtable-metrics-api:1.26.3
|
||||
com.google.cloud.datastore:datastore-v1-proto-client:2.1.3
|
||||
com.google.cloud.sql:jdbc-socket-factory-core:1.5.0
|
||||
com.google.cloud.sql:jdbc-socket-factory-core:1.6.0
|
||||
com.google.cloud:google-cloud-bigquerystorage:2.10.0
|
||||
com.google.cloud:google-cloud-bigtable:1.27.1
|
||||
com.google.cloud:google-cloud-bigtable:2.5.3
|
||||
com.google.cloud:google-cloud-core-grpc:2.4.0
|
||||
com.google.cloud:google-cloud-core-http:2.6.0
|
||||
com.google.cloud:google-cloud-core:2.6.0
|
||||
com.google.cloud:google-cloud-core-http:2.7.1
|
||||
com.google.cloud:google-cloud-core:2.7.1
|
||||
com.google.cloud:google-cloud-firestore:3.0.14
|
||||
com.google.cloud:google-cloud-monitoring:1.82.0
|
||||
com.google.cloud:google-cloud-pubsub:1.116.0
|
||||
com.google.cloud:google-cloud-pubsublite:1.5.0
|
||||
com.google.cloud:google-cloud-secretmanager:2.1.7
|
||||
com.google.cloud:google-cloud-secretmanager:2.2.0
|
||||
com.google.cloud:google-cloud-spanner:6.20.0
|
||||
com.google.cloud:google-cloud-storage:2.6.1
|
||||
com.google.cloud:google-cloud-tasks:2.1.11
|
||||
com.google.cloud:google-cloud-storage:2.7.2
|
||||
com.google.cloud:google-cloud-tasks:2.2.0
|
||||
com.google.cloud:grpc-gcp:1.1.0
|
||||
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.14
|
||||
com.google.code.findbugs:jsr305:3.0.2
|
||||
com.google.code.gson:gson:2.9.0
|
||||
com.google.common.html.types:types:1.0.6
|
||||
com.google.dagger:dagger:2.41
|
||||
com.google.errorprone:error_prone_annotations:2.13.0
|
||||
com.google.dagger:dagger:2.42
|
||||
com.google.errorprone:error_prone_annotations:2.13.1
|
||||
com.google.escapevelocity:escapevelocity:0.9.1
|
||||
com.google.flatbuffers:flatbuffers-java:1.12.0
|
||||
com.google.flogger:flogger-system-backend:0.7.4
|
||||
@@ -129,38 +133,39 @@ com.google.guava:failureaccess:1.0.1
|
||||
com.google.guava:guava:31.1-jre
|
||||
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
|
||||
com.google.gwt:gwt-user:2.9.0
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.7
|
||||
com.google.http-client:google-http-client-appengine:1.41.7
|
||||
com.google.http-client:google-http-client-gson:1.41.7
|
||||
com.google.http-client:google-http-client-jackson2:1.41.7
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.8
|
||||
com.google.http-client:google-http-client-appengine:1.41.8
|
||||
com.google.http-client:google-http-client-gson:1.41.8
|
||||
com.google.http-client:google-http-client-jackson2:1.41.8
|
||||
com.google.http-client:google-http-client-protobuf:1.40.1
|
||||
com.google.http-client:google-http-client:1.41.7
|
||||
com.google.http-client:google-http-client:1.41.8
|
||||
com.google.inject.extensions:guice-multibindings:4.1.0
|
||||
com.google.inject:guice:4.1.0
|
||||
com.google.j2objc:j2objc-annotations:1.3
|
||||
com.google.jsinterop:jsinterop-annotations:2.0.0
|
||||
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.33.3
|
||||
com.google.oauth-client:google-oauth-client-java6:1.33.3
|
||||
com.google.oauth-client:google-oauth-client-jetty:1.33.3
|
||||
com.google.oauth-client:google-oauth-client-servlet:1.33.3
|
||||
com.google.oauth-client:google-oauth-client:1.33.3
|
||||
com.google.protobuf:protobuf-java-util:3.19.4
|
||||
com.google.protobuf:protobuf-java:3.19.4
|
||||
com.google.oauth-client:google-oauth-client-appengine:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-java6:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-jetty:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-servlet:1.34.0
|
||||
com.google.oauth-client:google-oauth-client:1.34.0
|
||||
com.google.protobuf:protobuf-java-util:3.20.1
|
||||
com.google.protobuf:protobuf-java:3.20.1
|
||||
com.google.re2j:re2j:1.6
|
||||
com.google.template:soy:2021-02-01
|
||||
com.googlecode.charts4j:charts4j:1.3
|
||||
com.googlecode.json-simple:json-simple:1.1.1
|
||||
com.ibm.icu:icu4j:71.1
|
||||
com.jcraft:jsch:0.1.55
|
||||
com.lmax:disruptor:3.4.2
|
||||
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.15
|
||||
commons-logging:commons-logging:1.2
|
||||
dnsjava:dnsjava:3.5.0
|
||||
dnsjava:dnsjava:3.5.1
|
||||
guru.nidi.com.eclipsesource.j2v8:j2v8_linux_x86_64:4.6.0
|
||||
guru.nidi.com.eclipsesource.j2v8:j2v8_macosx_x86_64:4.6.0
|
||||
guru.nidi.com.eclipsesource.j2v8:j2v8_win32_x86:4.6.0
|
||||
@@ -174,20 +179,21 @@ io.confluent:kafka-avro-serializer:5.3.2
|
||||
io.confluent:kafka-schema-registry-client:5.3.2
|
||||
io.dropwizard.metrics:metrics-core:3.1.2
|
||||
io.github.classgraph:classgraph:4.8.104
|
||||
io.grpc:grpc-alts:1.45.1
|
||||
io.grpc:grpc-api:1.45.1
|
||||
io.grpc:grpc-auth:1.45.1
|
||||
io.grpc:grpc-context:1.45.1
|
||||
io.grpc:grpc-core:1.45.1
|
||||
io.grpc:grpc-googleapis:1.45.1
|
||||
io.grpc:grpc-grpclb:1.45.1
|
||||
io.grpc:grpc-netty-shaded:1.45.1
|
||||
io.grpc:grpc-alts:1.46.0
|
||||
io.grpc:grpc-api:1.46.0
|
||||
io.grpc:grpc-auth:1.46.0
|
||||
io.grpc:grpc-census:1.44.0
|
||||
io.grpc:grpc-context:1.46.0
|
||||
io.grpc:grpc-core:1.46.0
|
||||
io.grpc:grpc-googleapis:1.46.0
|
||||
io.grpc:grpc-grpclb:1.46.0
|
||||
io.grpc:grpc-netty-shaded:1.46.0
|
||||
io.grpc:grpc-netty:1.44.0
|
||||
io.grpc:grpc-protobuf-lite:1.45.1
|
||||
io.grpc:grpc-protobuf:1.45.1
|
||||
io.grpc:grpc-services:1.45.1
|
||||
io.grpc:grpc-stub:1.45.1
|
||||
io.grpc:grpc-xds:1.45.1
|
||||
io.grpc:grpc-protobuf-lite:1.46.0
|
||||
io.grpc:grpc-protobuf:1.46.0
|
||||
io.grpc:grpc-services:1.46.0
|
||||
io.grpc:grpc-stub:1.46.0
|
||||
io.grpc:grpc-xds:1.46.0
|
||||
io.netty:netty-buffer:4.1.72.Final
|
||||
io.netty:netty-codec-http2:4.1.72.Final
|
||||
io.netty:netty-codec-http:4.1.72.Final
|
||||
@@ -200,11 +206,18 @@ io.netty:netty-resolver:4.1.72.Final
|
||||
io.netty:netty-tcnative-boringssl-static:2.0.46.Final
|
||||
io.netty:netty-tcnative-classes:2.0.46.Final
|
||||
io.netty:netty-transport:4.1.72.Final
|
||||
io.opencensus:opencensus-api:0.31.0
|
||||
io.opencensus:opencensus-api:0.31.1
|
||||
io.opencensus:opencensus-contrib-exemplar-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-grpc-metrics:0.31.0
|
||||
io.opencensus:opencensus-contrib-grpc-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.1
|
||||
io.opencensus:opencensus-contrib-resource-util:0.31.0
|
||||
io.opencensus:opencensus-exporter-metrics-util:0.31.0
|
||||
io.opencensus:opencensus-exporter-stats-stackdriver:0.31.0
|
||||
io.opencensus:opencensus-impl-core:0.31.0
|
||||
io.opencensus:opencensus-impl:0.31.0
|
||||
io.opencensus:opencensus-proto:0.2.0
|
||||
io.perfmark:perfmark-api:0.23.0
|
||||
io.perfmark:perfmark-api:0.25.0
|
||||
it.unimi.dsi:fastutil:6.5.16
|
||||
javax.activation:activation:1.1
|
||||
javax.activation:javax.activation-api:1.2.0
|
||||
@@ -227,21 +240,21 @@ org.apache.arrow:arrow-format:5.0.0
|
||||
org.apache.arrow:arrow-memory-core:5.0.0
|
||||
org.apache.arrow:arrow-vector:5.0.0
|
||||
org.apache.avro:avro:1.8.2
|
||||
org.apache.beam:beam-model-fn-execution:2.38.0
|
||||
org.apache.beam:beam-model-job-management:2.38.0
|
||||
org.apache.beam:beam-model-pipeline:2.38.0
|
||||
org.apache.beam:beam-runners-core-construction-java:2.38.0
|
||||
org.apache.beam:beam-runners-core-java:2.38.0
|
||||
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.38.0
|
||||
org.apache.beam:beam-runners-java-fn-execution:2.38.0
|
||||
org.apache.beam:beam-sdks-java-core:2.38.0
|
||||
org.apache.beam:beam-sdks-java-expansion-service:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-arrow:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-protobuf:2.38.0
|
||||
org.apache.beam:beam-sdks-java-fn-execution:2.38.0
|
||||
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.38.0
|
||||
org.apache.beam:beam-sdks-java-io-kafka:2.38.0
|
||||
org.apache.beam:beam-model-fn-execution:2.39.0
|
||||
org.apache.beam:beam-model-job-management:2.39.0
|
||||
org.apache.beam:beam-model-pipeline:2.39.0
|
||||
org.apache.beam:beam-runners-core-construction-java:2.39.0
|
||||
org.apache.beam:beam-runners-core-java:2.39.0
|
||||
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.39.0
|
||||
org.apache.beam:beam-runners-java-fn-execution:2.39.0
|
||||
org.apache.beam:beam-sdks-java-core:2.39.0
|
||||
org.apache.beam:beam-sdks-java-expansion-service:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-arrow:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-protobuf:2.39.0
|
||||
org.apache.beam:beam-sdks-java-fn-execution:2.39.0
|
||||
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.39.0
|
||||
org.apache.beam:beam-sdks-java-io-kafka:2.39.0
|
||||
org.apache.beam:beam-vendor-bytebuddy-1_11_0:0.1
|
||||
org.apache.beam:beam-vendor-grpc-1_43_2:0.1
|
||||
org.apache.beam:beam-vendor-guava-26_0-jre:0.1
|
||||
@@ -254,45 +267,46 @@ org.bouncycastle:bcpg-jdk15on:1.67
|
||||
org.bouncycastle:bcpkix-jdk15on:1.67
|
||||
org.bouncycastle:bcprov-jdk15on:1.67
|
||||
org.checkerframework:checker-compat-qual:2.5.5
|
||||
org.checkerframework:checker-qual:3.21.4
|
||||
org.checkerframework:checker-qual:3.22.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.21
|
||||
org.conscrypt:conscrypt-openjdk-uber:2.5.1
|
||||
org.easymock:easymock:3.0
|
||||
org.flywaydb:flyway-core:8.5.10
|
||||
org.flywaydb:flyway-core:8.5.12
|
||||
org.glassfish.jaxb:jaxb-runtime:2.3.1
|
||||
org.glassfish.jaxb:txw2:2.3.1
|
||||
org.hamcrest:hamcrest-core:1.3
|
||||
org.hamcrest:hamcrest:2.1
|
||||
org.hibernate.common:hibernate-commons-annotations:5.1.2.Final
|
||||
org.hibernate:hibernate-core:5.6.8.Final
|
||||
org.hibernate:hibernate-hikaricp:5.6.8.Final
|
||||
org.hibernate:hibernate-core:5.6.9.Final
|
||||
org.hibernate:hibernate-hikaricp:5.6.9.Final
|
||||
org.jboss.logging:jboss-logging:3.4.3.Final
|
||||
org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.1.1.Final
|
||||
org.jboss:jandex:2.4.2.Final
|
||||
org.jetbrains:annotations:17.0.0
|
||||
org.joda:joda-money:1.0.1
|
||||
org.json:json:20200518
|
||||
org.jsoup:jsoup:1.14.3
|
||||
org.jsoup:jsoup:1.15.1
|
||||
org.jvnet.staxex:stax-ex:1.8
|
||||
org.objenesis:objenesis:1.2
|
||||
org.ow2.asm:asm-analysis:9.2
|
||||
org.ow2.asm:asm-analysis:9.3
|
||||
org.ow2.asm:asm-commons:9.2
|
||||
org.ow2.asm:asm-tree:9.2
|
||||
org.ow2.asm:asm-util:9.2
|
||||
org.ow2.asm:asm:9.2
|
||||
org.postgresql:postgresql:42.3.4
|
||||
org.ow2.asm:asm-tree:9.3
|
||||
org.ow2.asm:asm-util:9.3
|
||||
org.ow2.asm:asm:9.3
|
||||
org.postgresql:postgresql:42.3.6
|
||||
org.rnorth.duct-tape:duct-tape:1.0.8
|
||||
org.slf4j:jcl-over-slf4j:1.7.30
|
||||
org.slf4j:jul-to-slf4j:1.7.30
|
||||
org.slf4j:slf4j-api:1.7.35
|
||||
org.springframework:spring-core:4.3.18.RELEASE
|
||||
org.springframework:spring-expression:4.3.18.RELEASE
|
||||
org.testcontainers:database-commons:1.17.1
|
||||
org.testcontainers:jdbc:1.17.1
|
||||
org.testcontainers:postgresql:1.17.1
|
||||
org.testcontainers:testcontainers:1.17.1
|
||||
org.slf4j:slf4j-api:1.7.36
|
||||
org.springframework:spring-core:5.3.18
|
||||
org.springframework:spring-expression:5.3.18
|
||||
org.springframework:spring-jcl:5.3.18
|
||||
org.testcontainers:database-commons:1.17.2
|
||||
org.testcontainers:jdbc:1.17.2
|
||||
org.testcontainers:postgresql:1.17.2
|
||||
org.testcontainers:testcontainers:1.17.2
|
||||
org.threeten:threetenbp:1.6.0
|
||||
org.tukaani:xz:1.5
|
||||
org.w3c.css:sac:1.3
|
||||
|
||||
@@ -7,11 +7,13 @@ args4j:args4j:2.0.23
|
||||
cglib:cglib-nodep:2.2
|
||||
com.101tec:zkclient:0.10
|
||||
com.beust:jcommander:1.60
|
||||
com.fasterxml.jackson.core:jackson-annotations:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-databind:2.13.2
|
||||
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.2
|
||||
com.fasterxml.jackson:jackson-bom:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-annotations:2.13.3
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.3
|
||||
com.fasterxml.jackson.core:jackson-databind:2.13.3
|
||||
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.3
|
||||
com.fasterxml.jackson.datatype:jackson-datatype-joda:2.13.3
|
||||
com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.3
|
||||
com.fasterxml.jackson:jackson-bom:2.13.3
|
||||
com.fasterxml:classmate:1.5.1
|
||||
com.github.ben-manes.caffeine:caffeine:2.9.3
|
||||
com.github.docker-java:docker-java-api:3.2.13
|
||||
@@ -26,22 +28,22 @@ com.github.jnr:jnr-posix:3.1.15
|
||||
com.github.jnr:jnr-unixsocket:0.38.17
|
||||
com.github.jnr:jnr-x86asm:1.0.2
|
||||
com.google.android:annotations:4.1.1.4
|
||||
com.google.api-client:google-api-client-appengine:1.34.0
|
||||
com.google.api-client:google-api-client-appengine:1.35.0
|
||||
com.google.api-client:google-api-client-jackson2:1.32.2
|
||||
com.google.api-client:google-api-client-java6:1.34.0
|
||||
com.google.api-client:google-api-client-servlet:1.34.0
|
||||
com.google.api-client:google-api-client:1.34.0
|
||||
com.google.api-client:google-api-client-java6:1.35.0
|
||||
com.google.api-client:google-api-client-servlet:1.35.0
|
||||
com.google.api-client:google-api-client:1.35.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.10.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.134.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.134.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.27.1
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.27.1
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-v2:2.5.3
|
||||
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.97.5
|
||||
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.5.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-storage-v2:2.0.1-alpha
|
||||
com.google.api.grpc:grpc-google-cloud-storage-v2:2.2.2-alpha
|
||||
com.google.api.grpc:grpc-google-common-protos:2.7.2
|
||||
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.10.0
|
||||
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.134.0
|
||||
@@ -50,28 +52,29 @@ com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.5.3
|
||||
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.5.3
|
||||
com.google.api.grpc:proto-google-cloud-datastore-v1:0.93.4
|
||||
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.14
|
||||
com.google.api.grpc:proto-google-cloud-monitoring-v3:1.64.0
|
||||
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.98.0
|
||||
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.5.0
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1:2.1.7
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:2.1.7
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-storage-v2:2.0.1-alpha
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2:2.1.11
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.91.11
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.91.11
|
||||
com.google.api.grpc:proto-google-cloud-storage-v2:2.2.2-alpha
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.92.0
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.92.0
|
||||
com.google.api.grpc:proto-google-common-protos:2.8.3
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.1
|
||||
com.google.api:api-common:2.1.5
|
||||
com.google.api:gax-grpc:2.16.0
|
||||
com.google.api:gax-httpjson:0.101.0
|
||||
com.google.api:gax:2.16.0
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.4
|
||||
com.google.api:api-common:2.2.0
|
||||
com.google.api:gax-grpc:2.18.1
|
||||
com.google.api:gax-httpjson:0.103.1
|
||||
com.google.api:gax:2.18.1
|
||||
com.google.apis:google-api-services-admin-directory:directory_v1-rev118-1.25.0
|
||||
com.google.apis:google-api-services-appengine:v1-rev20220326-1.32.1
|
||||
com.google.apis:google-api-services-appengine:v1-rev20220509-1.32.1
|
||||
com.google.apis:google-api-services-bigquery:v2-rev20211129-1.32.1
|
||||
com.google.apis:google-api-services-clouddebugger:v2-rev20210813-1.32.1
|
||||
com.google.apis:google-api-services-cloudkms:v1-rev20220415-1.32.1
|
||||
com.google.apis:google-api-services-cloudkms:v1-rev20220513-1.32.1
|
||||
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20211017-1.32.1
|
||||
com.google.apis:google-api-services-dataflow:v1b3-rev20210818-1.32.1
|
||||
com.google.apis:google-api-services-dns:v2beta1-rev99-1.25.0
|
||||
@@ -79,48 +82,49 @@ com.google.apis:google-api-services-drive:v2-rev393-1.25.0
|
||||
com.google.apis:google-api-services-groupssettings:v1-rev20210624-1.32.1
|
||||
com.google.apis:google-api-services-healthcare:v1-rev20211016-1.32.1
|
||||
com.google.apis:google-api-services-iamcredentials:v1-rev20210326-1.32.1
|
||||
com.google.apis:google-api-services-monitoring:v3-rev20220322-1.32.1
|
||||
com.google.apis:google-api-services-monitoring:v3-rev20220525-1.32.1
|
||||
com.google.apis:google-api-services-pubsub:v1-rev20211130-1.32.1
|
||||
com.google.apis:google-api-services-sheets:v4-rev20220411-1.32.1
|
||||
com.google.apis:google-api-services-sqladmin:v1beta4-rev20220310-1.32.1
|
||||
com.google.apis:google-api-services-storage:v1-rev20220401-1.32.1
|
||||
com.google.apis:google-api-services-sqladmin:v1beta4-rev20220323-1.32.1
|
||||
com.google.apis:google-api-services-storage:v1-rev20220509-1.32.1
|
||||
com.google.appengine.tools:appengine-gcs-client:0.8.1
|
||||
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.86
|
||||
com.google.appengine:appengine-remote-api:2.0.4
|
||||
com.google.appengine:appengine-api-1.0-sdk:2.0.5
|
||||
com.google.appengine:appengine-remote-api:2.0.5
|
||||
com.google.appengine:appengine-testing:1.9.86
|
||||
com.google.auth:google-auth-library-credentials:1.6.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.6.0
|
||||
com.google.auth:google-auth-library-credentials:1.7.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.7.0
|
||||
com.google.auto.service:auto-service-annotations:1.0.1
|
||||
com.google.auto.value:auto-value-annotations:1.9
|
||||
com.google.auto.value:auto-value:1.9
|
||||
com.google.cloud.bigdataoss:gcsio:2.2.4
|
||||
com.google.cloud.bigdataoss:util:2.2.4
|
||||
com.google.cloud.bigtable:bigtable-client-core:1.25.1
|
||||
com.google.cloud.bigtable:bigtable-metrics-api:1.25.1
|
||||
com.google.cloud.bigdataoss:gcsio:2.2.6
|
||||
com.google.cloud.bigdataoss:util:2.2.6
|
||||
com.google.cloud.bigtable:bigtable-client-core:1.26.3
|
||||
com.google.cloud.bigtable:bigtable-metrics-api:1.26.3
|
||||
com.google.cloud.datastore:datastore-v1-proto-client:2.1.3
|
||||
com.google.cloud.sql:jdbc-socket-factory-core:1.5.0
|
||||
com.google.cloud.sql:postgres-socket-factory:1.5.0
|
||||
com.google.cloud.sql:jdbc-socket-factory-core:1.6.0
|
||||
com.google.cloud.sql:postgres-socket-factory:1.6.0
|
||||
com.google.cloud:google-cloud-bigquerystorage:2.10.0
|
||||
com.google.cloud:google-cloud-bigtable:1.27.1
|
||||
com.google.cloud:google-cloud-bigtable:2.5.3
|
||||
com.google.cloud:google-cloud-core-grpc:2.4.0
|
||||
com.google.cloud:google-cloud-core-http:2.6.0
|
||||
com.google.cloud:google-cloud-core:2.6.0
|
||||
com.google.cloud:google-cloud-core-http:2.7.1
|
||||
com.google.cloud:google-cloud-core:2.7.1
|
||||
com.google.cloud:google-cloud-firestore:3.0.14
|
||||
com.google.cloud:google-cloud-monitoring:1.82.0
|
||||
com.google.cloud:google-cloud-pubsub:1.116.0
|
||||
com.google.cloud:google-cloud-pubsublite:1.5.0
|
||||
com.google.cloud:google-cloud-secretmanager:2.1.7
|
||||
com.google.cloud:google-cloud-secretmanager:2.2.0
|
||||
com.google.cloud:google-cloud-spanner:6.20.0
|
||||
com.google.cloud:google-cloud-storage:2.6.1
|
||||
com.google.cloud:google-cloud-tasks:2.1.11
|
||||
com.google.cloud:google-cloud-storage:2.7.2
|
||||
com.google.cloud:google-cloud-tasks:2.2.0
|
||||
com.google.cloud:grpc-gcp:1.1.0
|
||||
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.14
|
||||
com.google.code.findbugs:jsr305:3.0.2
|
||||
com.google.code.gson:gson:2.9.0
|
||||
com.google.common.html.types:types:1.0.6
|
||||
com.google.dagger:dagger:2.41
|
||||
com.google.errorprone:error_prone_annotations:2.13.0
|
||||
com.google.dagger:dagger:2.42
|
||||
com.google.errorprone:error_prone_annotations:2.13.1
|
||||
com.google.escapevelocity:escapevelocity:0.9.1
|
||||
com.google.flatbuffers:flatbuffers-java:1.12.0
|
||||
com.google.flogger:flogger-system-backend:0.7.4
|
||||
@@ -130,38 +134,39 @@ com.google.guava:failureaccess:1.0.1
|
||||
com.google.guava:guava:31.1-jre
|
||||
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
|
||||
com.google.gwt:gwt-user:2.9.0
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.7
|
||||
com.google.http-client:google-http-client-appengine:1.41.7
|
||||
com.google.http-client:google-http-client-gson:1.41.7
|
||||
com.google.http-client:google-http-client-jackson2:1.41.7
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.8
|
||||
com.google.http-client:google-http-client-appengine:1.41.8
|
||||
com.google.http-client:google-http-client-gson:1.41.8
|
||||
com.google.http-client:google-http-client-jackson2:1.41.8
|
||||
com.google.http-client:google-http-client-protobuf:1.40.1
|
||||
com.google.http-client:google-http-client:1.41.7
|
||||
com.google.http-client:google-http-client:1.41.8
|
||||
com.google.inject.extensions:guice-multibindings:4.1.0
|
||||
com.google.inject:guice:4.1.0
|
||||
com.google.j2objc:j2objc-annotations:1.3
|
||||
com.google.jsinterop:jsinterop-annotations:2.0.0
|
||||
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.33.3
|
||||
com.google.oauth-client:google-oauth-client-java6:1.33.3
|
||||
com.google.oauth-client:google-oauth-client-jetty:1.33.3
|
||||
com.google.oauth-client:google-oauth-client-servlet:1.33.3
|
||||
com.google.oauth-client:google-oauth-client:1.33.3
|
||||
com.google.protobuf:protobuf-java-util:3.19.4
|
||||
com.google.protobuf:protobuf-java:3.19.4
|
||||
com.google.oauth-client:google-oauth-client-appengine:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-java6:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-jetty:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-servlet:1.34.0
|
||||
com.google.oauth-client:google-oauth-client:1.34.0
|
||||
com.google.protobuf:protobuf-java-util:3.20.1
|
||||
com.google.protobuf:protobuf-java:3.20.1
|
||||
com.google.re2j:re2j:1.6
|
||||
com.google.template:soy:2021-02-01
|
||||
com.googlecode.charts4j:charts4j:1.3
|
||||
com.googlecode.json-simple:json-simple:1.1.1
|
||||
com.ibm.icu:icu4j:71.1
|
||||
com.jcraft:jsch:0.1.55
|
||||
com.lmax:disruptor:3.4.2
|
||||
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.15
|
||||
commons-logging:commons-logging:1.2
|
||||
dnsjava:dnsjava:3.5.0
|
||||
dnsjava:dnsjava:3.5.1
|
||||
guru.nidi.com.eclipsesource.j2v8:j2v8_linux_x86_64:4.6.0
|
||||
guru.nidi.com.eclipsesource.j2v8:j2v8_macosx_x86_64:4.6.0
|
||||
guru.nidi.com.eclipsesource.j2v8:j2v8_win32_x86:4.6.0
|
||||
@@ -175,20 +180,21 @@ io.confluent:kafka-avro-serializer:5.3.2
|
||||
io.confluent:kafka-schema-registry-client:5.3.2
|
||||
io.dropwizard.metrics:metrics-core:3.1.2
|
||||
io.github.classgraph:classgraph:4.8.104
|
||||
io.grpc:grpc-alts:1.45.1
|
||||
io.grpc:grpc-api:1.45.1
|
||||
io.grpc:grpc-auth:1.45.1
|
||||
io.grpc:grpc-context:1.45.1
|
||||
io.grpc:grpc-core:1.45.1
|
||||
io.grpc:grpc-googleapis:1.45.1
|
||||
io.grpc:grpc-grpclb:1.45.1
|
||||
io.grpc:grpc-netty-shaded:1.45.1
|
||||
io.grpc:grpc-alts:1.46.0
|
||||
io.grpc:grpc-api:1.46.0
|
||||
io.grpc:grpc-auth:1.46.0
|
||||
io.grpc:grpc-census:1.44.0
|
||||
io.grpc:grpc-context:1.46.0
|
||||
io.grpc:grpc-core:1.46.0
|
||||
io.grpc:grpc-googleapis:1.46.0
|
||||
io.grpc:grpc-grpclb:1.46.0
|
||||
io.grpc:grpc-netty-shaded:1.46.0
|
||||
io.grpc:grpc-netty:1.44.0
|
||||
io.grpc:grpc-protobuf-lite:1.45.1
|
||||
io.grpc:grpc-protobuf:1.45.1
|
||||
io.grpc:grpc-services:1.45.1
|
||||
io.grpc:grpc-stub:1.45.1
|
||||
io.grpc:grpc-xds:1.45.1
|
||||
io.grpc:grpc-protobuf-lite:1.46.0
|
||||
io.grpc:grpc-protobuf:1.46.0
|
||||
io.grpc:grpc-services:1.46.0
|
||||
io.grpc:grpc-stub:1.46.0
|
||||
io.grpc:grpc-xds:1.46.0
|
||||
io.netty:netty-buffer:4.1.72.Final
|
||||
io.netty:netty-codec-http2:4.1.72.Final
|
||||
io.netty:netty-codec-http:4.1.72.Final
|
||||
@@ -201,11 +207,18 @@ io.netty:netty-resolver:4.1.72.Final
|
||||
io.netty:netty-tcnative-boringssl-static:2.0.46.Final
|
||||
io.netty:netty-tcnative-classes:2.0.46.Final
|
||||
io.netty:netty-transport:4.1.72.Final
|
||||
io.opencensus:opencensus-api:0.31.0
|
||||
io.opencensus:opencensus-api:0.31.1
|
||||
io.opencensus:opencensus-contrib-exemplar-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-grpc-metrics:0.31.0
|
||||
io.opencensus:opencensus-contrib-grpc-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.1
|
||||
io.opencensus:opencensus-contrib-resource-util:0.31.0
|
||||
io.opencensus:opencensus-exporter-metrics-util:0.31.0
|
||||
io.opencensus:opencensus-exporter-stats-stackdriver:0.31.0
|
||||
io.opencensus:opencensus-impl-core:0.31.0
|
||||
io.opencensus:opencensus-impl:0.31.0
|
||||
io.opencensus:opencensus-proto:0.2.0
|
||||
io.perfmark:perfmark-api:0.23.0
|
||||
io.perfmark:perfmark-api:0.25.0
|
||||
it.unimi.dsi:fastutil:6.5.16
|
||||
javax.activation:activation:1.1
|
||||
javax.activation:javax.activation-api:1.2.0
|
||||
@@ -227,21 +240,21 @@ org.apache.arrow:arrow-format:5.0.0
|
||||
org.apache.arrow:arrow-memory-core:5.0.0
|
||||
org.apache.arrow:arrow-vector:5.0.0
|
||||
org.apache.avro:avro:1.8.2
|
||||
org.apache.beam:beam-model-fn-execution:2.38.0
|
||||
org.apache.beam:beam-model-job-management:2.38.0
|
||||
org.apache.beam:beam-model-pipeline:2.38.0
|
||||
org.apache.beam:beam-runners-core-construction-java:2.38.0
|
||||
org.apache.beam:beam-runners-core-java:2.38.0
|
||||
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.38.0
|
||||
org.apache.beam:beam-runners-java-fn-execution:2.38.0
|
||||
org.apache.beam:beam-sdks-java-core:2.38.0
|
||||
org.apache.beam:beam-sdks-java-expansion-service:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-arrow:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-protobuf:2.38.0
|
||||
org.apache.beam:beam-sdks-java-fn-execution:2.38.0
|
||||
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.38.0
|
||||
org.apache.beam:beam-sdks-java-io-kafka:2.38.0
|
||||
org.apache.beam:beam-model-fn-execution:2.39.0
|
||||
org.apache.beam:beam-model-job-management:2.39.0
|
||||
org.apache.beam:beam-model-pipeline:2.39.0
|
||||
org.apache.beam:beam-runners-core-construction-java:2.39.0
|
||||
org.apache.beam:beam-runners-core-java:2.39.0
|
||||
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.39.0
|
||||
org.apache.beam:beam-runners-java-fn-execution:2.39.0
|
||||
org.apache.beam:beam-sdks-java-core:2.39.0
|
||||
org.apache.beam:beam-sdks-java-expansion-service:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-arrow:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-protobuf:2.39.0
|
||||
org.apache.beam:beam-sdks-java-fn-execution:2.39.0
|
||||
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.39.0
|
||||
org.apache.beam:beam-sdks-java-io-kafka:2.39.0
|
||||
org.apache.beam:beam-vendor-bytebuddy-1_11_0:0.1
|
||||
org.apache.beam:beam-vendor-grpc-1_43_2:0.1
|
||||
org.apache.beam:beam-vendor-guava-26_0-jre:0.1
|
||||
@@ -254,45 +267,46 @@ org.bouncycastle:bcpg-jdk15on:1.67
|
||||
org.bouncycastle:bcpkix-jdk15on:1.67
|
||||
org.bouncycastle:bcprov-jdk15on:1.67
|
||||
org.checkerframework:checker-compat-qual:2.5.5
|
||||
org.checkerframework:checker-qual:3.21.4
|
||||
org.checkerframework:checker-qual:3.22.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.21
|
||||
org.conscrypt:conscrypt-openjdk-uber:2.5.1
|
||||
org.easymock:easymock:3.0
|
||||
org.flywaydb:flyway-core:8.5.10
|
||||
org.flywaydb:flyway-core:8.5.12
|
||||
org.glassfish.jaxb:jaxb-runtime:2.3.1
|
||||
org.glassfish.jaxb:txw2:2.3.1
|
||||
org.hamcrest:hamcrest:2.1
|
||||
org.hibernate.common:hibernate-commons-annotations:5.1.2.Final
|
||||
org.hibernate:hibernate-core:5.6.8.Final
|
||||
org.hibernate:hibernate-hikaricp:5.6.8.Final
|
||||
org.hibernate:hibernate-core:5.6.9.Final
|
||||
org.hibernate:hibernate-hikaricp:5.6.9.Final
|
||||
org.jboss.logging:jboss-logging:3.4.3.Final
|
||||
org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.1.1.Final
|
||||
org.jboss:jandex:2.4.2.Final
|
||||
org.jetbrains:annotations:17.0.0
|
||||
org.joda:joda-money:1.0.1
|
||||
org.json:json:20200518
|
||||
org.jsoup:jsoup:1.14.3
|
||||
org.jsoup:jsoup:1.15.1
|
||||
org.jvnet.staxex:stax-ex:1.8
|
||||
org.objenesis:objenesis:1.2
|
||||
org.ow2.asm:asm-analysis:9.2
|
||||
org.ow2.asm:asm-analysis:9.3
|
||||
org.ow2.asm:asm-commons:9.2
|
||||
org.ow2.asm:asm-tree:9.2
|
||||
org.ow2.asm:asm-util:9.2
|
||||
org.ow2.asm:asm:9.2
|
||||
org.postgresql:postgresql:42.3.4
|
||||
org.ow2.asm:asm-tree:9.3
|
||||
org.ow2.asm:asm-util:9.3
|
||||
org.ow2.asm:asm:9.3
|
||||
org.postgresql:postgresql:42.3.6
|
||||
org.rnorth.duct-tape:duct-tape:1.0.8
|
||||
org.slf4j:jcl-over-slf4j:1.7.30
|
||||
org.slf4j:jul-to-slf4j:1.7.30
|
||||
org.slf4j:slf4j-api:2.0.0-alpha7
|
||||
org.slf4j:slf4j-jdk14:2.0.0-alpha7
|
||||
org.springframework:spring-core:4.3.18.RELEASE
|
||||
org.springframework:spring-expression:4.3.18.RELEASE
|
||||
org.testcontainers:database-commons:1.17.1
|
||||
org.testcontainers:jdbc:1.17.1
|
||||
org.testcontainers:postgresql:1.17.1
|
||||
org.testcontainers:testcontainers:1.17.1
|
||||
org.springframework:spring-core:5.3.18
|
||||
org.springframework:spring-expression:5.3.18
|
||||
org.springframework:spring-jcl:5.3.18
|
||||
org.testcontainers:database-commons:1.17.2
|
||||
org.testcontainers:jdbc:1.17.2
|
||||
org.testcontainers:postgresql:1.17.2
|
||||
org.testcontainers:testcontainers:1.17.2
|
||||
org.threeten:threetenbp:1.6.0
|
||||
org.tukaani:xz:1.5
|
||||
org.w3c.css:sac:1.3
|
||||
|
||||
@@ -7,10 +7,10 @@ com.google.auto.value:auto-value:1.9
|
||||
com.google.auto:auto-common:0.10
|
||||
com.google.code.findbugs:jFormatString:3.0.0
|
||||
com.google.code.findbugs:jsr305:3.0.2
|
||||
com.google.dagger:dagger-compiler:2.41
|
||||
com.google.dagger:dagger-producers:2.41
|
||||
com.google.dagger:dagger-spi:2.41
|
||||
com.google.dagger:dagger:2.41
|
||||
com.google.dagger:dagger-compiler:2.42
|
||||
com.google.dagger:dagger-producers:2.42
|
||||
com.google.dagger:dagger-spi:2.42
|
||||
com.google.dagger:dagger:2.42
|
||||
com.google.devtools.ksp:symbol-processing-api:1.5.30-1.0.0
|
||||
com.google.errorprone:error_prone_annotation:2.3.4
|
||||
com.google.errorprone:error_prone_annotations:2.7.1
|
||||
@@ -33,11 +33,11 @@ org.checkerframework:checker-compat-qual:2.5.5
|
||||
org.checkerframework:checker-qual:3.12.0
|
||||
org.checkerframework:dataflow:3.0.0
|
||||
org.checkerframework:javacutil:3.0.0
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.5.32
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.6.10
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.5.32
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.32
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.5.32
|
||||
org.jetbrains.kotlinx:kotlinx-metadata-jvm:0.3.0
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.6.10
|
||||
org.jetbrains.kotlinx:kotlinx-metadata-jvm:0.4.2
|
||||
org.jetbrains:annotations:13.0
|
||||
org.pcollections:pcollections:2.1.2
|
||||
org.plumelib:plume-util:1.0.6
|
||||
|
||||
@@ -7,11 +7,13 @@ args4j:args4j:2.0.23
|
||||
cglib:cglib-nodep:2.2
|
||||
com.101tec:zkclient:0.10
|
||||
com.beust:jcommander:1.60
|
||||
com.fasterxml.jackson.core:jackson-annotations:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-databind:2.13.2
|
||||
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.2
|
||||
com.fasterxml.jackson:jackson-bom:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-annotations:2.13.3
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.3
|
||||
com.fasterxml.jackson.core:jackson-databind:2.13.3
|
||||
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.3
|
||||
com.fasterxml.jackson.datatype:jackson-datatype-joda:2.13.3
|
||||
com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.3
|
||||
com.fasterxml.jackson:jackson-bom:2.13.3
|
||||
com.fasterxml:classmate:1.5.1
|
||||
com.github.ben-manes.caffeine:caffeine:2.9.3
|
||||
com.github.docker-java:docker-java-api:3.2.13
|
||||
@@ -26,22 +28,22 @@ com.github.jnr:jnr-posix:3.1.15
|
||||
com.github.jnr:jnr-unixsocket:0.38.17
|
||||
com.github.jnr:jnr-x86asm:1.0.2
|
||||
com.google.android:annotations:4.1.1.4
|
||||
com.google.api-client:google-api-client-appengine:1.34.0
|
||||
com.google.api-client:google-api-client-appengine:1.35.0
|
||||
com.google.api-client:google-api-client-jackson2:1.32.2
|
||||
com.google.api-client:google-api-client-java6:1.34.0
|
||||
com.google.api-client:google-api-client-servlet:1.34.0
|
||||
com.google.api-client:google-api-client:1.34.0
|
||||
com.google.api-client:google-api-client-java6:1.35.0
|
||||
com.google.api-client:google-api-client-servlet:1.35.0
|
||||
com.google.api-client:google-api-client:1.35.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.10.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.134.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.134.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.27.1
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.27.1
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-v2:2.5.3
|
||||
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.97.5
|
||||
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.5.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-storage-v2:2.0.1-alpha
|
||||
com.google.api.grpc:grpc-google-cloud-storage-v2:2.2.2-alpha
|
||||
com.google.api.grpc:grpc-google-common-protos:2.7.2
|
||||
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.10.0
|
||||
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.134.0
|
||||
@@ -50,28 +52,29 @@ com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.5.3
|
||||
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.5.3
|
||||
com.google.api.grpc:proto-google-cloud-datastore-v1:0.93.4
|
||||
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.14
|
||||
com.google.api.grpc:proto-google-cloud-monitoring-v3:1.64.0
|
||||
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.98.0
|
||||
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.5.0
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1:2.1.7
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:2.1.7
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-storage-v2:2.0.1-alpha
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2:2.1.11
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.91.11
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.91.11
|
||||
com.google.api.grpc:proto-google-cloud-storage-v2:2.2.2-alpha
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.92.0
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.92.0
|
||||
com.google.api.grpc:proto-google-common-protos:2.8.3
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.1
|
||||
com.google.api:api-common:2.1.5
|
||||
com.google.api:gax-grpc:2.16.0
|
||||
com.google.api:gax-httpjson:0.101.0
|
||||
com.google.api:gax:2.16.0
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.4
|
||||
com.google.api:api-common:2.2.0
|
||||
com.google.api:gax-grpc:2.18.1
|
||||
com.google.api:gax-httpjson:0.103.1
|
||||
com.google.api:gax:2.18.1
|
||||
com.google.apis:google-api-services-admin-directory:directory_v1-rev118-1.25.0
|
||||
com.google.apis:google-api-services-appengine:v1-rev20220326-1.32.1
|
||||
com.google.apis:google-api-services-appengine:v1-rev20220509-1.32.1
|
||||
com.google.apis:google-api-services-bigquery:v2-rev20211129-1.32.1
|
||||
com.google.apis:google-api-services-clouddebugger:v2-rev20210813-1.32.1
|
||||
com.google.apis:google-api-services-cloudkms:v1-rev20220415-1.32.1
|
||||
com.google.apis:google-api-services-cloudkms:v1-rev20220513-1.32.1
|
||||
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20211017-1.32.1
|
||||
com.google.apis:google-api-services-dataflow:v1b3-rev20210818-1.32.1
|
||||
com.google.apis:google-api-services-dns:v2beta1-rev99-1.25.0
|
||||
@@ -79,49 +82,50 @@ com.google.apis:google-api-services-drive:v2-rev393-1.25.0
|
||||
com.google.apis:google-api-services-groupssettings:v1-rev20210624-1.32.1
|
||||
com.google.apis:google-api-services-healthcare:v1-rev20211016-1.32.1
|
||||
com.google.apis:google-api-services-iamcredentials:v1-rev20210326-1.32.1
|
||||
com.google.apis:google-api-services-monitoring:v3-rev20220322-1.32.1
|
||||
com.google.apis:google-api-services-monitoring:v3-rev20220525-1.32.1
|
||||
com.google.apis:google-api-services-pubsub:v1-rev20211130-1.32.1
|
||||
com.google.apis:google-api-services-sheets:v4-rev20220411-1.32.1
|
||||
com.google.apis:google-api-services-sqladmin:v1beta4-rev20220310-1.32.1
|
||||
com.google.apis:google-api-services-storage:v1-rev20220401-1.32.1
|
||||
com.google.apis:google-api-services-sqladmin:v1beta4-rev20220323-1.32.1
|
||||
com.google.apis:google-api-services-storage:v1-rev20220509-1.32.1
|
||||
com.google.appengine.tools:appengine-gcs-client:0.8.1
|
||||
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.86
|
||||
com.google.appengine:appengine-api-stubs:2.0.4
|
||||
com.google.appengine:appengine-remote-api:2.0.4
|
||||
com.google.appengine:appengine-api-1.0-sdk:2.0.5
|
||||
com.google.appengine:appengine-api-stubs:2.0.5
|
||||
com.google.appengine:appengine-remote-api:2.0.5
|
||||
com.google.appengine:appengine-testing:1.9.86
|
||||
com.google.auth:google-auth-library-credentials:1.6.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.6.0
|
||||
com.google.auth:google-auth-library-credentials:1.7.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.7.0
|
||||
com.google.auto.service:auto-service-annotations:1.0.1
|
||||
com.google.auto.value:auto-value-annotations:1.9
|
||||
com.google.auto.value:auto-value:1.9
|
||||
com.google.cloud.bigdataoss:gcsio:2.2.4
|
||||
com.google.cloud.bigdataoss:util:2.2.4
|
||||
com.google.cloud.bigtable:bigtable-client-core:1.25.1
|
||||
com.google.cloud.bigtable:bigtable-metrics-api:1.25.1
|
||||
com.google.cloud.bigdataoss:gcsio:2.2.6
|
||||
com.google.cloud.bigdataoss:util:2.2.6
|
||||
com.google.cloud.bigtable:bigtable-client-core:1.26.3
|
||||
com.google.cloud.bigtable:bigtable-metrics-api:1.26.3
|
||||
com.google.cloud.datastore:datastore-v1-proto-client:2.1.3
|
||||
com.google.cloud.sql:jdbc-socket-factory-core:1.5.0
|
||||
com.google.cloud.sql:jdbc-socket-factory-core:1.6.0
|
||||
com.google.cloud:google-cloud-bigquerystorage:2.10.0
|
||||
com.google.cloud:google-cloud-bigtable:1.27.1
|
||||
com.google.cloud:google-cloud-bigtable:2.5.3
|
||||
com.google.cloud:google-cloud-core-grpc:2.4.0
|
||||
com.google.cloud:google-cloud-core-http:2.6.0
|
||||
com.google.cloud:google-cloud-core:2.6.0
|
||||
com.google.cloud:google-cloud-core-http:2.7.1
|
||||
com.google.cloud:google-cloud-core:2.7.1
|
||||
com.google.cloud:google-cloud-firestore:3.0.14
|
||||
com.google.cloud:google-cloud-nio:0.123.28
|
||||
com.google.cloud:google-cloud-monitoring:1.82.0
|
||||
com.google.cloud:google-cloud-nio:0.124.2
|
||||
com.google.cloud:google-cloud-pubsub:1.116.0
|
||||
com.google.cloud:google-cloud-pubsublite:1.5.0
|
||||
com.google.cloud:google-cloud-secretmanager:2.1.7
|
||||
com.google.cloud:google-cloud-secretmanager:2.2.0
|
||||
com.google.cloud:google-cloud-spanner:6.20.0
|
||||
com.google.cloud:google-cloud-storage:2.6.1
|
||||
com.google.cloud:google-cloud-tasks:2.1.11
|
||||
com.google.cloud:google-cloud-storage:2.7.2
|
||||
com.google.cloud:google-cloud-tasks:2.2.0
|
||||
com.google.cloud:grpc-gcp:1.1.0
|
||||
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.14
|
||||
com.google.code.findbugs:jsr305:3.0.2
|
||||
com.google.code.gson:gson:2.9.0
|
||||
com.google.common.html.types:types:1.0.6
|
||||
com.google.dagger:dagger:2.41
|
||||
com.google.errorprone:error_prone_annotations:2.13.0
|
||||
com.google.dagger:dagger:2.42
|
||||
com.google.errorprone:error_prone_annotations:2.13.1
|
||||
com.google.escapevelocity:escapevelocity:0.9.1
|
||||
com.google.flatbuffers:flatbuffers-java:1.12.0
|
||||
com.google.flogger:flogger-system-backend:0.7.4
|
||||
@@ -132,12 +136,12 @@ com.google.guava:guava-testlib:31.1-jre
|
||||
com.google.guava:guava:31.1-jre
|
||||
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
|
||||
com.google.gwt:gwt-user:2.9.0
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.7
|
||||
com.google.http-client:google-http-client-appengine:1.41.7
|
||||
com.google.http-client:google-http-client-gson:1.41.7
|
||||
com.google.http-client:google-http-client-jackson2:1.41.7
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.8
|
||||
com.google.http-client:google-http-client-appengine:1.41.8
|
||||
com.google.http-client:google-http-client-gson:1.41.8
|
||||
com.google.http-client:google-http-client-jackson2:1.41.8
|
||||
com.google.http-client:google-http-client-protobuf:1.40.1
|
||||
com.google.http-client:google-http-client:1.41.7
|
||||
com.google.http-client:google-http-client:1.41.8
|
||||
com.google.inject.extensions:guice-multibindings:4.1.0
|
||||
com.google.inject:guice:4.1.0
|
||||
com.google.j2objc:j2objc-annotations:1.3
|
||||
@@ -145,13 +149,13 @@ com.google.jsinterop:jsinterop-annotations:2.0.0
|
||||
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.33.3
|
||||
com.google.oauth-client:google-oauth-client-java6:1.33.3
|
||||
com.google.oauth-client:google-oauth-client-jetty:1.33.3
|
||||
com.google.oauth-client:google-oauth-client-servlet:1.33.3
|
||||
com.google.oauth-client:google-oauth-client:1.33.3
|
||||
com.google.protobuf:protobuf-java-util:3.19.4
|
||||
com.google.protobuf:protobuf-java:3.19.4
|
||||
com.google.oauth-client:google-oauth-client-appengine:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-java6:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-jetty:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-servlet:1.34.0
|
||||
com.google.oauth-client:google-oauth-client:1.34.0
|
||||
com.google.protobuf:protobuf-java-util:3.20.1
|
||||
com.google.protobuf:protobuf-java:3.20.1
|
||||
com.google.re2j:re2j:1.6
|
||||
com.google.template:soy:2021-02-01
|
||||
com.google.truth.extensions:truth-java8-extension:1.1.3
|
||||
@@ -160,6 +164,7 @@ com.googlecode.charts4j:charts4j:1.3
|
||||
com.googlecode.json-simple:json-simple:1.1.1
|
||||
com.ibm.icu:icu4j:71.1
|
||||
com.jcraft:jsch:0.1.55
|
||||
com.lmax:disruptor:3.4.2
|
||||
com.squareup.okhttp3:okhttp:3.11.0
|
||||
com.squareup.okio:okio:1.14.0
|
||||
com.sun.istack:istack-commons-runtime:3.0.7
|
||||
@@ -169,27 +174,28 @@ com.thoughtworks.qdox:qdox:1.12.1
|
||||
com.zaxxer:HikariCP:3.4.5
|
||||
commons-codec:commons-codec:1.15
|
||||
commons-logging:commons-logging:1.2
|
||||
dnsjava:dnsjava:3.5.0
|
||||
dnsjava:dnsjava:3.5.1
|
||||
io.confluent:common-config:5.3.2
|
||||
io.confluent:common-utils:5.3.2
|
||||
io.confluent:kafka-avro-serializer:5.3.2
|
||||
io.confluent:kafka-schema-registry-client:5.3.2
|
||||
io.dropwizard.metrics:metrics-core:3.1.2
|
||||
io.github.classgraph:classgraph:4.8.104
|
||||
io.grpc:grpc-alts:1.45.1
|
||||
io.grpc:grpc-api:1.45.1
|
||||
io.grpc:grpc-auth:1.45.1
|
||||
io.grpc:grpc-context:1.45.1
|
||||
io.grpc:grpc-core:1.45.1
|
||||
io.grpc:grpc-googleapis:1.45.1
|
||||
io.grpc:grpc-grpclb:1.45.1
|
||||
io.grpc:grpc-netty-shaded:1.45.1
|
||||
io.grpc:grpc-alts:1.46.0
|
||||
io.grpc:grpc-api:1.46.0
|
||||
io.grpc:grpc-auth:1.46.0
|
||||
io.grpc:grpc-census:1.44.0
|
||||
io.grpc:grpc-context:1.46.0
|
||||
io.grpc:grpc-core:1.46.0
|
||||
io.grpc:grpc-googleapis:1.46.0
|
||||
io.grpc:grpc-grpclb:1.46.0
|
||||
io.grpc:grpc-netty-shaded:1.46.0
|
||||
io.grpc:grpc-netty:1.44.0
|
||||
io.grpc:grpc-protobuf-lite:1.45.1
|
||||
io.grpc:grpc-protobuf:1.45.1
|
||||
io.grpc:grpc-services:1.45.1
|
||||
io.grpc:grpc-stub:1.45.1
|
||||
io.grpc:grpc-xds:1.45.1
|
||||
io.grpc:grpc-protobuf-lite:1.46.0
|
||||
io.grpc:grpc-protobuf:1.46.0
|
||||
io.grpc:grpc-services:1.46.0
|
||||
io.grpc:grpc-stub:1.46.0
|
||||
io.grpc:grpc-xds:1.46.0
|
||||
io.netty:netty-buffer:4.1.72.Final
|
||||
io.netty:netty-codec-http2:4.1.72.Final
|
||||
io.netty:netty-codec-http:4.1.72.Final
|
||||
@@ -202,11 +208,18 @@ io.netty:netty-resolver:4.1.72.Final
|
||||
io.netty:netty-tcnative-boringssl-static:2.0.46.Final
|
||||
io.netty:netty-tcnative-classes:2.0.46.Final
|
||||
io.netty:netty-transport:4.1.72.Final
|
||||
io.opencensus:opencensus-api:0.31.0
|
||||
io.opencensus:opencensus-api:0.31.1
|
||||
io.opencensus:opencensus-contrib-exemplar-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-grpc-metrics:0.31.0
|
||||
io.opencensus:opencensus-contrib-grpc-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.1
|
||||
io.opencensus:opencensus-contrib-resource-util:0.31.0
|
||||
io.opencensus:opencensus-exporter-metrics-util:0.31.0
|
||||
io.opencensus:opencensus-exporter-stats-stackdriver:0.31.0
|
||||
io.opencensus:opencensus-impl-core:0.31.0
|
||||
io.opencensus:opencensus-impl:0.31.0
|
||||
io.opencensus:opencensus-proto:0.2.0
|
||||
io.perfmark:perfmark-api:0.23.0
|
||||
io.perfmark:perfmark-api:0.25.0
|
||||
it.unimi.dsi:fastutil:6.5.16
|
||||
javax.activation:activation:1.1
|
||||
javax.activation:javax.activation-api:1.2.0
|
||||
@@ -222,29 +235,29 @@ javax.xml.bind:jaxb-api:2.3.1
|
||||
jline:jline:1.0
|
||||
joda-time:joda-time:2.10.10
|
||||
junit:junit:4.13.2
|
||||
net.bytebuddy:byte-buddy-agent:1.12.9
|
||||
net.bytebuddy:byte-buddy:1.12.9
|
||||
net.bytebuddy:byte-buddy-agent:1.12.10
|
||||
net.bytebuddy:byte-buddy:1.12.10
|
||||
net.java.dev.jna:jna:5.8.0
|
||||
org.apache.arrow:arrow-format:5.0.0
|
||||
org.apache.arrow:arrow-memory-core:5.0.0
|
||||
org.apache.arrow:arrow-vector:5.0.0
|
||||
org.apache.avro:avro:1.8.2
|
||||
org.apache.beam:beam-model-fn-execution:2.38.0
|
||||
org.apache.beam:beam-model-job-management:2.38.0
|
||||
org.apache.beam:beam-model-pipeline:2.38.0
|
||||
org.apache.beam:beam-runners-core-construction-java:2.38.0
|
||||
org.apache.beam:beam-runners-core-java:2.38.0
|
||||
org.apache.beam:beam-runners-direct-java:2.38.0
|
||||
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.38.0
|
||||
org.apache.beam:beam-runners-java-fn-execution:2.38.0
|
||||
org.apache.beam:beam-sdks-java-core:2.38.0
|
||||
org.apache.beam:beam-sdks-java-expansion-service:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-arrow:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-protobuf:2.38.0
|
||||
org.apache.beam:beam-sdks-java-fn-execution:2.38.0
|
||||
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.38.0
|
||||
org.apache.beam:beam-sdks-java-io-kafka:2.38.0
|
||||
org.apache.beam:beam-model-fn-execution:2.39.0
|
||||
org.apache.beam:beam-model-job-management:2.39.0
|
||||
org.apache.beam:beam-model-pipeline:2.39.0
|
||||
org.apache.beam:beam-runners-core-construction-java:2.39.0
|
||||
org.apache.beam:beam-runners-core-java:2.39.0
|
||||
org.apache.beam:beam-runners-direct-java:2.39.0
|
||||
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.39.0
|
||||
org.apache.beam:beam-runners-java-fn-execution:2.39.0
|
||||
org.apache.beam:beam-sdks-java-core:2.39.0
|
||||
org.apache.beam:beam-sdks-java-expansion-service:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-arrow:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-protobuf:2.39.0
|
||||
org.apache.beam:beam-sdks-java-fn-execution:2.39.0
|
||||
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.39.0
|
||||
org.apache.beam:beam-sdks-java-io-kafka:2.39.0
|
||||
org.apache.beam:beam-vendor-bytebuddy-1_11_0:0.1
|
||||
org.apache.beam:beam-vendor-grpc-1_43_2:0.1
|
||||
org.apache.beam:beam-vendor-guava-26_0-jre:0.1
|
||||
@@ -260,58 +273,58 @@ org.apache.mina:mina-core:2.1.6
|
||||
org.apache.sshd:sshd-core:2.0.0
|
||||
org.apache.sshd:sshd-scp:2.0.0
|
||||
org.apache.sshd:sshd-sftp:2.0.0
|
||||
org.apache.tomcat:tomcat-annotations-api:10.1.0-M14
|
||||
org.apache.tomcat:tomcat-annotations-api:10.1.0-M15
|
||||
org.bouncycastle:bcpg-jdk15on:1.67
|
||||
org.bouncycastle:bcpkix-jdk15on:1.67
|
||||
org.bouncycastle:bcprov-jdk15on:1.67
|
||||
org.checkerframework:checker-compat-qual:2.5.5
|
||||
org.checkerframework:checker-qual:3.21.4
|
||||
org.checkerframework:checker-qual:3.22.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.21
|
||||
org.conscrypt:conscrypt-openjdk-uber:2.5.1
|
||||
org.easymock:easymock:3.0
|
||||
org.flywaydb:flyway-core:8.5.10
|
||||
org.flywaydb:flyway-core:8.5.12
|
||||
org.glassfish.jaxb:jaxb-runtime:2.3.1
|
||||
org.glassfish.jaxb:txw2:2.3.1
|
||||
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.6.8.Final
|
||||
org.hibernate:hibernate-hikaricp:5.6.8.Final
|
||||
org.hibernate:hibernate-core:5.6.9.Final
|
||||
org.hibernate:hibernate-hikaricp:5.6.9.Final
|
||||
org.jboss.logging:jboss-logging:3.4.3.Final
|
||||
org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.1.1.Final
|
||||
org.jboss:jandex:2.4.2.Final
|
||||
org.jetbrains:annotations:17.0.0
|
||||
org.joda:joda-money:1.0.1
|
||||
org.json:json:20200518
|
||||
org.jsoup:jsoup:1.14.3
|
||||
org.junit-pioneer:junit-pioneer:1.7.0
|
||||
org.junit.jupiter:junit-jupiter-api:5.8.2
|
||||
org.junit.jupiter:junit-jupiter-engine:5.8.2
|
||||
org.junit.jupiter:junit-jupiter-migrationsupport:5.8.2
|
||||
org.junit.jupiter:junit-jupiter-params:5.8.2
|
||||
org.junit.platform:junit-platform-commons:1.8.2
|
||||
org.junit.platform:junit-platform-engine:1.8.2
|
||||
org.junit.platform:junit-platform-launcher:1.8.2
|
||||
org.junit.platform:junit-platform-runner:1.8.2
|
||||
org.junit.platform:junit-platform-suite-api:1.8.2
|
||||
org.junit.platform:junit-platform-suite-commons:1.8.2
|
||||
org.junit:junit-bom:5.8.2
|
||||
org.jsoup:jsoup:1.15.1
|
||||
org.junit-pioneer:junit-pioneer:1.7.1
|
||||
org.junit.jupiter:junit-jupiter-api:5.9.0-M1
|
||||
org.junit.jupiter:junit-jupiter-engine:5.9.0-M1
|
||||
org.junit.jupiter:junit-jupiter-migrationsupport:5.9.0-M1
|
||||
org.junit.jupiter:junit-jupiter-params:5.9.0-M1
|
||||
org.junit.platform:junit-platform-commons:1.9.0-M1
|
||||
org.junit.platform:junit-platform-engine:1.9.0-M1
|
||||
org.junit.platform:junit-platform-launcher:1.9.0-M1
|
||||
org.junit.platform:junit-platform-runner:1.9.0-M1
|
||||
org.junit.platform:junit-platform-suite-api:1.9.0-M1
|
||||
org.junit.platform:junit-platform-suite-commons:1.9.0-M1
|
||||
org.junit:junit-bom:5.9.0-M1
|
||||
org.jvnet.staxex:stax-ex:1.8
|
||||
org.mockito:mockito-core:4.5.1
|
||||
org.mockito:mockito-junit-jupiter:4.5.1
|
||||
org.mockito:mockito-core:4.6.1
|
||||
org.mockito:mockito-junit-jupiter:4.6.1
|
||||
org.mortbay.jetty:jetty-util:6.1.26
|
||||
org.mortbay.jetty:jetty:6.1.26
|
||||
org.objenesis:objenesis:3.2
|
||||
org.opentest4j:opentest4j:1.2.0
|
||||
org.ow2.asm:asm-analysis:9.2
|
||||
org.ow2.asm:asm-analysis:9.3
|
||||
org.ow2.asm:asm-commons:9.2
|
||||
org.ow2.asm:asm-tree:9.2
|
||||
org.ow2.asm:asm-util:9.2
|
||||
org.ow2.asm:asm:9.2
|
||||
org.postgresql:postgresql:42.3.4
|
||||
org.ow2.asm:asm-tree:9.3
|
||||
org.ow2.asm:asm-util:9.3
|
||||
org.ow2.asm:asm:9.3
|
||||
org.postgresql:postgresql:42.3.6
|
||||
org.rnorth.duct-tape:duct-tape:1.0.8
|
||||
org.seleniumhq.selenium:selenium-api:3.141.59
|
||||
org.seleniumhq.selenium:selenium-chrome-driver:3.141.59
|
||||
@@ -324,14 +337,15 @@ org.seleniumhq.selenium:selenium-remote-driver:3.141.59
|
||||
org.seleniumhq.selenium:selenium-safari-driver:3.141.59
|
||||
org.seleniumhq.selenium:selenium-support:3.141.59
|
||||
org.slf4j:slf4j-api:1.7.36
|
||||
org.springframework:spring-core:4.3.18.RELEASE
|
||||
org.springframework:spring-expression:4.3.18.RELEASE
|
||||
org.testcontainers:database-commons:1.17.1
|
||||
org.testcontainers:jdbc:1.17.1
|
||||
org.testcontainers:junit-jupiter:1.17.1
|
||||
org.testcontainers:postgresql:1.17.1
|
||||
org.testcontainers:selenium:1.17.1
|
||||
org.testcontainers:testcontainers:1.17.1
|
||||
org.springframework:spring-core:5.3.18
|
||||
org.springframework:spring-expression:5.3.18
|
||||
org.springframework:spring-jcl:5.3.18
|
||||
org.testcontainers:database-commons:1.17.2
|
||||
org.testcontainers:jdbc:1.17.2
|
||||
org.testcontainers:junit-jupiter:1.17.2
|
||||
org.testcontainers:postgresql:1.17.2
|
||||
org.testcontainers:selenium:1.17.2
|
||||
org.testcontainers:testcontainers:1.17.2
|
||||
org.threeten:threetenbp:1.6.0
|
||||
org.tukaani:xz:1.5
|
||||
org.w3c.css:sac:1.3
|
||||
|
||||
@@ -7,11 +7,13 @@ args4j:args4j:2.0.23
|
||||
cglib:cglib-nodep:2.2
|
||||
com.101tec:zkclient:0.10
|
||||
com.beust:jcommander:1.60
|
||||
com.fasterxml.jackson.core:jackson-annotations:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-databind:2.13.2
|
||||
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.2
|
||||
com.fasterxml.jackson:jackson-bom:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-annotations:2.13.3
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.3
|
||||
com.fasterxml.jackson.core:jackson-databind:2.13.3
|
||||
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.3
|
||||
com.fasterxml.jackson.datatype:jackson-datatype-joda:2.13.3
|
||||
com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.3
|
||||
com.fasterxml.jackson:jackson-bom:2.13.3
|
||||
com.fasterxml:classmate:1.5.1
|
||||
com.github.ben-manes.caffeine:caffeine:2.9.3
|
||||
com.github.docker-java:docker-java-api:3.2.13
|
||||
@@ -25,22 +27,22 @@ com.github.jnr:jnr-ffi:2.2.11
|
||||
com.github.jnr:jnr-posix:3.1.15
|
||||
com.github.jnr:jnr-unixsocket:0.38.17
|
||||
com.github.jnr:jnr-x86asm:1.0.2
|
||||
com.google.api-client:google-api-client-appengine:1.34.0
|
||||
com.google.api-client:google-api-client-appengine:1.35.0
|
||||
com.google.api-client:google-api-client-jackson2:1.32.2
|
||||
com.google.api-client:google-api-client-java6:1.34.0
|
||||
com.google.api-client:google-api-client-servlet:1.34.0
|
||||
com.google.api-client:google-api-client:1.34.0
|
||||
com.google.api-client:google-api-client-java6:1.35.0
|
||||
com.google.api-client:google-api-client-servlet:1.35.0
|
||||
com.google.api-client:google-api-client:1.35.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.10.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.134.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.134.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.27.1
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.27.1
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-v2:2.5.3
|
||||
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.97.5
|
||||
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.5.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-storage-v2:2.0.1-alpha
|
||||
com.google.api.grpc:grpc-google-cloud-storage-v2:2.2.2-alpha
|
||||
com.google.api.grpc:grpc-google-common-protos:2.7.2
|
||||
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.10.0
|
||||
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.134.0
|
||||
@@ -49,28 +51,29 @@ com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.5.3
|
||||
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.5.3
|
||||
com.google.api.grpc:proto-google-cloud-datastore-v1:0.93.4
|
||||
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.14
|
||||
com.google.api.grpc:proto-google-cloud-monitoring-v3:1.64.0
|
||||
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.98.0
|
||||
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.5.0
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1:2.1.7
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:2.1.7
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-storage-v2:2.0.1-alpha
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2:2.1.11
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.91.11
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.91.11
|
||||
com.google.api.grpc:proto-google-cloud-storage-v2:2.2.2-alpha
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.92.0
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.92.0
|
||||
com.google.api.grpc:proto-google-common-protos:2.8.3
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.1
|
||||
com.google.api:api-common:2.1.5
|
||||
com.google.api:gax-grpc:2.16.0
|
||||
com.google.api:gax-httpjson:0.101.0
|
||||
com.google.api:gax:2.16.0
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.4
|
||||
com.google.api:api-common:2.2.0
|
||||
com.google.api:gax-grpc:2.18.1
|
||||
com.google.api:gax-httpjson:0.103.1
|
||||
com.google.api:gax:2.18.1
|
||||
com.google.apis:google-api-services-admin-directory:directory_v1-rev118-1.25.0
|
||||
com.google.apis:google-api-services-appengine:v1-rev20220326-1.32.1
|
||||
com.google.apis:google-api-services-appengine:v1-rev20220509-1.32.1
|
||||
com.google.apis:google-api-services-bigquery:v2-rev20211129-1.32.1
|
||||
com.google.apis:google-api-services-clouddebugger:v2-rev20210813-1.32.1
|
||||
com.google.apis:google-api-services-cloudkms:v1-rev20220415-1.32.1
|
||||
com.google.apis:google-api-services-cloudkms:v1-rev20220513-1.32.1
|
||||
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20211017-1.32.1
|
||||
com.google.apis:google-api-services-dataflow:v1b3-rev20210818-1.32.1
|
||||
com.google.apis:google-api-services-dns:v2beta1-rev99-1.25.0
|
||||
@@ -78,49 +81,50 @@ com.google.apis:google-api-services-drive:v2-rev393-1.25.0
|
||||
com.google.apis:google-api-services-groupssettings:v1-rev20210624-1.32.1
|
||||
com.google.apis:google-api-services-healthcare:v1-rev20211016-1.32.1
|
||||
com.google.apis:google-api-services-iamcredentials:v1-rev20210326-1.32.1
|
||||
com.google.apis:google-api-services-monitoring:v3-rev20220322-1.32.1
|
||||
com.google.apis:google-api-services-monitoring:v3-rev20220525-1.32.1
|
||||
com.google.apis:google-api-services-pubsub:v1-rev20211130-1.32.1
|
||||
com.google.apis:google-api-services-sheets:v4-rev20220411-1.32.1
|
||||
com.google.apis:google-api-services-sqladmin:v1beta4-rev20220310-1.32.1
|
||||
com.google.apis:google-api-services-storage:v1-rev20220401-1.32.1
|
||||
com.google.apis:google-api-services-sqladmin:v1beta4-rev20220323-1.32.1
|
||||
com.google.apis:google-api-services-storage:v1-rev20220509-1.32.1
|
||||
com.google.appengine.tools:appengine-gcs-client:0.8.1
|
||||
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.86
|
||||
com.google.appengine:appengine-api-stubs:2.0.4
|
||||
com.google.appengine:appengine-remote-api:2.0.4
|
||||
com.google.appengine:appengine-api-1.0-sdk:2.0.5
|
||||
com.google.appengine:appengine-api-stubs:2.0.5
|
||||
com.google.appengine:appengine-remote-api:2.0.5
|
||||
com.google.appengine:appengine-testing:1.9.86
|
||||
com.google.auth:google-auth-library-credentials:1.6.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.6.0
|
||||
com.google.auth:google-auth-library-credentials:1.7.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.7.0
|
||||
com.google.auto.service:auto-service-annotations:1.0.1
|
||||
com.google.auto.value:auto-value-annotations:1.9
|
||||
com.google.auto.value:auto-value:1.9
|
||||
com.google.cloud.bigdataoss:gcsio:2.2.4
|
||||
com.google.cloud.bigdataoss:util:2.2.4
|
||||
com.google.cloud.bigtable:bigtable-client-core:1.25.1
|
||||
com.google.cloud.bigtable:bigtable-metrics-api:1.25.1
|
||||
com.google.cloud.bigdataoss:gcsio:2.2.6
|
||||
com.google.cloud.bigdataoss:util:2.2.6
|
||||
com.google.cloud.bigtable:bigtable-client-core:1.26.3
|
||||
com.google.cloud.bigtable:bigtable-metrics-api:1.26.3
|
||||
com.google.cloud.datastore:datastore-v1-proto-client:2.1.3
|
||||
com.google.cloud.sql:jdbc-socket-factory-core:1.5.0
|
||||
com.google.cloud.sql:jdbc-socket-factory-core:1.6.0
|
||||
com.google.cloud:google-cloud-bigquerystorage:2.10.0
|
||||
com.google.cloud:google-cloud-bigtable:1.27.1
|
||||
com.google.cloud:google-cloud-bigtable:2.5.3
|
||||
com.google.cloud:google-cloud-core-grpc:2.4.0
|
||||
com.google.cloud:google-cloud-core-http:2.6.0
|
||||
com.google.cloud:google-cloud-core:2.6.0
|
||||
com.google.cloud:google-cloud-core-http:2.7.1
|
||||
com.google.cloud:google-cloud-core:2.7.1
|
||||
com.google.cloud:google-cloud-firestore:3.0.14
|
||||
com.google.cloud:google-cloud-nio:0.123.28
|
||||
com.google.cloud:google-cloud-monitoring:1.82.0
|
||||
com.google.cloud:google-cloud-nio:0.124.2
|
||||
com.google.cloud:google-cloud-pubsub:1.116.0
|
||||
com.google.cloud:google-cloud-pubsublite:1.5.0
|
||||
com.google.cloud:google-cloud-secretmanager:2.1.7
|
||||
com.google.cloud:google-cloud-secretmanager:2.2.0
|
||||
com.google.cloud:google-cloud-spanner:6.20.0
|
||||
com.google.cloud:google-cloud-storage:2.6.1
|
||||
com.google.cloud:google-cloud-tasks:2.1.11
|
||||
com.google.cloud:google-cloud-storage:2.7.2
|
||||
com.google.cloud:google-cloud-tasks:2.2.0
|
||||
com.google.cloud:grpc-gcp:1.1.0
|
||||
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.14
|
||||
com.google.code.findbugs:jsr305:3.0.2
|
||||
com.google.code.gson:gson:2.9.0
|
||||
com.google.common.html.types:types:1.0.6
|
||||
com.google.dagger:dagger:2.41
|
||||
com.google.errorprone:error_prone_annotations:2.13.0
|
||||
com.google.dagger:dagger:2.42
|
||||
com.google.errorprone:error_prone_annotations:2.13.1
|
||||
com.google.escapevelocity:escapevelocity:0.9.1
|
||||
com.google.flatbuffers:flatbuffers-java:1.12.0
|
||||
com.google.flogger:flogger-system-backend:0.7.4
|
||||
@@ -131,12 +135,12 @@ com.google.guava:guava-testlib:31.1-jre
|
||||
com.google.guava:guava:31.1-jre
|
||||
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
|
||||
com.google.gwt:gwt-user:2.9.0
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.7
|
||||
com.google.http-client:google-http-client-appengine:1.41.7
|
||||
com.google.http-client:google-http-client-gson:1.41.7
|
||||
com.google.http-client:google-http-client-jackson2:1.41.7
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.8
|
||||
com.google.http-client:google-http-client-appengine:1.41.8
|
||||
com.google.http-client:google-http-client-gson:1.41.8
|
||||
com.google.http-client:google-http-client-jackson2:1.41.8
|
||||
com.google.http-client:google-http-client-protobuf:1.40.1
|
||||
com.google.http-client:google-http-client:1.41.7
|
||||
com.google.http-client:google-http-client:1.41.8
|
||||
com.google.inject.extensions:guice-multibindings:4.1.0
|
||||
com.google.inject:guice:4.1.0
|
||||
com.google.j2objc:j2objc-annotations:1.3
|
||||
@@ -144,13 +148,13 @@ com.google.jsinterop:jsinterop-annotations:2.0.0
|
||||
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.33.3
|
||||
com.google.oauth-client:google-oauth-client-java6:1.33.3
|
||||
com.google.oauth-client:google-oauth-client-jetty:1.33.3
|
||||
com.google.oauth-client:google-oauth-client-servlet:1.33.3
|
||||
com.google.oauth-client:google-oauth-client:1.33.3
|
||||
com.google.protobuf:protobuf-java-util:3.19.4
|
||||
com.google.protobuf:protobuf-java:3.19.4
|
||||
com.google.oauth-client:google-oauth-client-appengine:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-java6:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-jetty:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-servlet:1.34.0
|
||||
com.google.oauth-client:google-oauth-client:1.34.0
|
||||
com.google.protobuf:protobuf-java-util:3.20.1
|
||||
com.google.protobuf:protobuf-java:3.20.1
|
||||
com.google.re2j:re2j:1.6
|
||||
com.google.template:soy:2021-02-01
|
||||
com.google.truth.extensions:truth-java8-extension:1.1.3
|
||||
@@ -159,6 +163,7 @@ com.googlecode.charts4j:charts4j:1.3
|
||||
com.googlecode.json-simple:json-simple:1.1.1
|
||||
com.ibm.icu:icu4j:71.1
|
||||
com.jcraft:jsch:0.1.55
|
||||
com.lmax:disruptor:3.4.2
|
||||
com.squareup.okhttp3:okhttp:3.11.0
|
||||
com.squareup.okio:okio:1.14.0
|
||||
com.sun.istack:istack-commons-runtime:3.0.7
|
||||
@@ -168,7 +173,7 @@ com.thoughtworks.qdox:qdox:1.12.1
|
||||
com.zaxxer:HikariCP:3.4.5
|
||||
commons-codec:commons-codec:1.15
|
||||
commons-logging:commons-logging:1.2
|
||||
dnsjava:dnsjava:3.5.0
|
||||
dnsjava:dnsjava:3.5.1
|
||||
io.confluent:common-config:5.3.2
|
||||
io.confluent:common-utils:5.3.2
|
||||
io.confluent:kafka-avro-serializer:5.3.2
|
||||
@@ -176,16 +181,19 @@ io.confluent:kafka-schema-registry-client:5.3.2
|
||||
io.dropwizard.metrics:metrics-core:3.1.2
|
||||
io.github.classgraph:classgraph:4.8.104
|
||||
io.grpc:grpc-alts:1.44.0
|
||||
io.grpc:grpc-api:1.45.1
|
||||
io.grpc:grpc-api:1.46.0
|
||||
io.grpc:grpc-auth:1.44.0
|
||||
io.grpc:grpc-context:1.45.1
|
||||
io.grpc:grpc-census:1.44.0
|
||||
io.grpc:grpc-context:1.46.0
|
||||
io.grpc:grpc-core:1.44.1
|
||||
io.grpc:grpc-grpclb:1.44.0
|
||||
io.grpc:grpc-netty-shaded:1.44.0
|
||||
io.grpc:grpc-netty:1.44.0
|
||||
io.grpc:grpc-protobuf-lite:1.45.1
|
||||
io.grpc:grpc-protobuf:1.45.1
|
||||
io.grpc:grpc-stub:1.45.1
|
||||
io.grpc:grpc-protobuf-lite:1.46.0
|
||||
io.grpc:grpc-protobuf:1.46.0
|
||||
io.grpc:grpc-services:1.44.0
|
||||
io.grpc:grpc-stub:1.46.0
|
||||
io.grpc:grpc-xds:1.44.0
|
||||
io.netty:netty-buffer:4.1.72.Final
|
||||
io.netty:netty-codec-http2:4.1.72.Final
|
||||
io.netty:netty-codec-http:4.1.72.Final
|
||||
@@ -196,9 +204,17 @@ io.netty:netty-resolver:4.1.72.Final
|
||||
io.netty:netty-tcnative-boringssl-static:2.0.46.Final
|
||||
io.netty:netty-tcnative-classes:2.0.46.Final
|
||||
io.netty:netty-transport:4.1.72.Final
|
||||
io.opencensus:opencensus-api:0.31.0
|
||||
io.opencensus:opencensus-api:0.31.1
|
||||
io.opencensus:opencensus-contrib-exemplar-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-grpc-metrics:0.31.0
|
||||
io.opencensus:opencensus-contrib-grpc-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.1
|
||||
io.opencensus:opencensus-contrib-resource-util:0.31.0
|
||||
io.opencensus:opencensus-exporter-metrics-util:0.31.0
|
||||
io.opencensus:opencensus-exporter-stats-stackdriver:0.31.0
|
||||
io.opencensus:opencensus-impl-core:0.31.0
|
||||
io.opencensus:opencensus-impl:0.31.0
|
||||
io.opencensus:opencensus-proto:0.2.0
|
||||
it.unimi.dsi:fastutil:6.5.16
|
||||
javax.activation:activation:1.1
|
||||
javax.activation:javax.activation-api:1.2.0
|
||||
@@ -214,29 +230,29 @@ javax.xml.bind:jaxb-api:2.3.1
|
||||
jline:jline:1.0
|
||||
joda-time:joda-time:2.10.10
|
||||
junit:junit:4.13.2
|
||||
net.bytebuddy:byte-buddy-agent:1.12.9
|
||||
net.bytebuddy:byte-buddy:1.12.9
|
||||
net.bytebuddy:byte-buddy-agent:1.12.10
|
||||
net.bytebuddy:byte-buddy:1.12.10
|
||||
net.java.dev.jna:jna:5.8.0
|
||||
org.apache.arrow:arrow-format:5.0.0
|
||||
org.apache.arrow:arrow-memory-core:5.0.0
|
||||
org.apache.arrow:arrow-vector:5.0.0
|
||||
org.apache.avro:avro:1.8.2
|
||||
org.apache.beam:beam-model-fn-execution:2.38.0
|
||||
org.apache.beam:beam-model-job-management:2.38.0
|
||||
org.apache.beam:beam-model-pipeline:2.38.0
|
||||
org.apache.beam:beam-runners-core-construction-java:2.38.0
|
||||
org.apache.beam:beam-runners-core-java:2.38.0
|
||||
org.apache.beam:beam-runners-direct-java:2.38.0
|
||||
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.38.0
|
||||
org.apache.beam:beam-runners-java-fn-execution:2.38.0
|
||||
org.apache.beam:beam-sdks-java-core:2.38.0
|
||||
org.apache.beam:beam-sdks-java-expansion-service:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-arrow:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-protobuf:2.38.0
|
||||
org.apache.beam:beam-sdks-java-fn-execution:2.38.0
|
||||
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.38.0
|
||||
org.apache.beam:beam-sdks-java-io-kafka:2.38.0
|
||||
org.apache.beam:beam-model-fn-execution:2.39.0
|
||||
org.apache.beam:beam-model-job-management:2.39.0
|
||||
org.apache.beam:beam-model-pipeline:2.39.0
|
||||
org.apache.beam:beam-runners-core-construction-java:2.39.0
|
||||
org.apache.beam:beam-runners-core-java:2.39.0
|
||||
org.apache.beam:beam-runners-direct-java:2.39.0
|
||||
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.39.0
|
||||
org.apache.beam:beam-runners-java-fn-execution:2.39.0
|
||||
org.apache.beam:beam-sdks-java-core:2.39.0
|
||||
org.apache.beam:beam-sdks-java-expansion-service:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-arrow:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-protobuf:2.39.0
|
||||
org.apache.beam:beam-sdks-java-fn-execution:2.39.0
|
||||
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.39.0
|
||||
org.apache.beam:beam-sdks-java-io-kafka:2.39.0
|
||||
org.apache.beam:beam-vendor-bytebuddy-1_11_0:0.1
|
||||
org.apache.beam:beam-vendor-grpc-1_43_2:0.1
|
||||
org.apache.beam:beam-vendor-guava-26_0-jre:0.1
|
||||
@@ -252,57 +268,57 @@ org.apache.mina:mina-core:2.1.6
|
||||
org.apache.sshd:sshd-core:2.0.0
|
||||
org.apache.sshd:sshd-scp:2.0.0
|
||||
org.apache.sshd:sshd-sftp:2.0.0
|
||||
org.apache.tomcat:tomcat-annotations-api:10.1.0-M14
|
||||
org.apache.tomcat:tomcat-annotations-api:10.1.0-M15
|
||||
org.apiguardian:apiguardian-api:1.1.2
|
||||
org.bouncycastle:bcpg-jdk15on:1.67
|
||||
org.bouncycastle:bcpkix-jdk15on:1.67
|
||||
org.bouncycastle:bcprov-jdk15on:1.67
|
||||
org.checkerframework:checker-compat-qual:2.5.5
|
||||
org.checkerframework:checker-qual:3.21.4
|
||||
org.checkerframework:checker-qual:3.22.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.5.1
|
||||
org.easymock:easymock:3.0
|
||||
org.flywaydb:flyway-core:8.5.10
|
||||
org.flywaydb:flyway-core:8.5.12
|
||||
org.glassfish.jaxb:jaxb-runtime:2.3.1
|
||||
org.glassfish.jaxb:txw2:2.3.1
|
||||
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.6.8.Final
|
||||
org.hibernate:hibernate-hikaricp:5.6.8.Final
|
||||
org.hibernate:hibernate-core:5.6.9.Final
|
||||
org.hibernate:hibernate-hikaricp:5.6.9.Final
|
||||
org.jboss.logging:jboss-logging:3.4.3.Final
|
||||
org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.1.1.Final
|
||||
org.jboss:jandex:2.4.2.Final
|
||||
org.jetbrains:annotations:17.0.0
|
||||
org.joda:joda-money:1.0.1
|
||||
org.json:json:20200518
|
||||
org.jsoup:jsoup:1.14.3
|
||||
org.junit-pioneer:junit-pioneer:1.7.0
|
||||
org.junit.jupiter:junit-jupiter-api:5.8.2
|
||||
org.junit.jupiter:junit-jupiter-engine:5.8.2
|
||||
org.junit.jupiter:junit-jupiter-migrationsupport:5.8.2
|
||||
org.junit.jupiter:junit-jupiter-params:5.8.2
|
||||
org.junit.platform:junit-platform-commons:1.8.2
|
||||
org.junit.platform:junit-platform-engine:1.8.2
|
||||
org.junit.platform:junit-platform-launcher:1.8.2
|
||||
org.junit.platform:junit-platform-runner:1.8.2
|
||||
org.junit.platform:junit-platform-suite-api:1.8.2
|
||||
org.junit:junit-bom:5.8.2
|
||||
org.jsoup:jsoup:1.15.1
|
||||
org.junit-pioneer:junit-pioneer:1.7.1
|
||||
org.junit.jupiter:junit-jupiter-api:5.9.0-M1
|
||||
org.junit.jupiter:junit-jupiter-engine:5.9.0-M1
|
||||
org.junit.jupiter:junit-jupiter-migrationsupport:5.9.0-M1
|
||||
org.junit.jupiter:junit-jupiter-params:5.9.0-M1
|
||||
org.junit.platform:junit-platform-commons:1.9.0-M1
|
||||
org.junit.platform:junit-platform-engine:1.9.0-M1
|
||||
org.junit.platform:junit-platform-launcher:1.9.0-M1
|
||||
org.junit.platform:junit-platform-runner:1.9.0-M1
|
||||
org.junit.platform:junit-platform-suite-api:1.9.0-M1
|
||||
org.junit:junit-bom:5.9.0-M1
|
||||
org.jvnet.staxex:stax-ex:1.8
|
||||
org.mockito:mockito-core:4.5.1
|
||||
org.mockito:mockito-junit-jupiter:4.5.1
|
||||
org.mockito:mockito-core:4.6.1
|
||||
org.mockito:mockito-junit-jupiter:4.6.1
|
||||
org.mortbay.jetty:jetty-util:6.1.26
|
||||
org.mortbay.jetty:jetty:6.1.26
|
||||
org.objenesis:objenesis:1.2
|
||||
org.opentest4j:opentest4j:1.2.0
|
||||
org.ow2.asm:asm-analysis:9.2
|
||||
org.ow2.asm:asm-analysis:9.3
|
||||
org.ow2.asm:asm-commons:9.2
|
||||
org.ow2.asm:asm-tree:9.2
|
||||
org.ow2.asm:asm-util:9.2
|
||||
org.ow2.asm:asm:9.2
|
||||
org.postgresql:postgresql:42.3.4
|
||||
org.ow2.asm:asm-tree:9.3
|
||||
org.ow2.asm:asm-util:9.3
|
||||
org.ow2.asm:asm:9.3
|
||||
org.postgresql:postgresql:42.3.6
|
||||
org.rnorth.duct-tape:duct-tape:1.0.8
|
||||
org.seleniumhq.selenium:selenium-api:3.141.59
|
||||
org.seleniumhq.selenium:selenium-chrome-driver:3.141.59
|
||||
@@ -315,14 +331,15 @@ org.seleniumhq.selenium:selenium-remote-driver:3.141.59
|
||||
org.seleniumhq.selenium:selenium-safari-driver:3.141.59
|
||||
org.seleniumhq.selenium:selenium-support:3.141.59
|
||||
org.slf4j:slf4j-api:1.7.36
|
||||
org.springframework:spring-core:4.3.18.RELEASE
|
||||
org.springframework:spring-expression:4.3.18.RELEASE
|
||||
org.testcontainers:database-commons:1.17.1
|
||||
org.testcontainers:jdbc:1.17.1
|
||||
org.testcontainers:junit-jupiter:1.17.1
|
||||
org.testcontainers:postgresql:1.17.1
|
||||
org.testcontainers:selenium:1.17.1
|
||||
org.testcontainers:testcontainers:1.17.1
|
||||
org.springframework:spring-core:5.3.18
|
||||
org.springframework:spring-expression:5.3.18
|
||||
org.springframework:spring-jcl:5.3.18
|
||||
org.testcontainers:database-commons:1.17.2
|
||||
org.testcontainers:jdbc:1.17.2
|
||||
org.testcontainers:junit-jupiter:1.17.2
|
||||
org.testcontainers:postgresql:1.17.2
|
||||
org.testcontainers:selenium:1.17.2
|
||||
org.testcontainers:testcontainers:1.17.2
|
||||
org.threeten:threetenbp:1.6.0
|
||||
org.tukaani:xz:1.5
|
||||
org.w3c.css:sac:1.3
|
||||
|
||||
@@ -7,11 +7,13 @@ args4j:args4j:2.0.23
|
||||
cglib:cglib-nodep:2.2
|
||||
com.101tec:zkclient:0.10
|
||||
com.beust:jcommander:1.60
|
||||
com.fasterxml.jackson.core:jackson-annotations:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-databind:2.13.2
|
||||
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.2
|
||||
com.fasterxml.jackson:jackson-bom:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-annotations:2.13.3
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.3
|
||||
com.fasterxml.jackson.core:jackson-databind:2.13.3
|
||||
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.3
|
||||
com.fasterxml.jackson.datatype:jackson-datatype-joda:2.13.3
|
||||
com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.3
|
||||
com.fasterxml.jackson:jackson-bom:2.13.3
|
||||
com.fasterxml:classmate:1.5.1
|
||||
com.github.ben-manes.caffeine:caffeine:2.9.3
|
||||
com.github.docker-java:docker-java-api:3.2.13
|
||||
@@ -26,22 +28,22 @@ com.github.jnr:jnr-posix:3.1.15
|
||||
com.github.jnr:jnr-unixsocket:0.38.17
|
||||
com.github.jnr:jnr-x86asm:1.0.2
|
||||
com.google.android:annotations:4.1.1.4
|
||||
com.google.api-client:google-api-client-appengine:1.34.0
|
||||
com.google.api-client:google-api-client-appengine:1.35.0
|
||||
com.google.api-client:google-api-client-jackson2:1.32.2
|
||||
com.google.api-client:google-api-client-java6:1.34.0
|
||||
com.google.api-client:google-api-client-servlet:1.34.0
|
||||
com.google.api-client:google-api-client:1.34.0
|
||||
com.google.api-client:google-api-client-java6:1.35.0
|
||||
com.google.api-client:google-api-client-servlet:1.35.0
|
||||
com.google.api-client:google-api-client:1.35.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.10.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.134.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.134.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.27.1
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.27.1
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-v2:2.5.3
|
||||
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.97.5
|
||||
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.5.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-storage-v2:2.0.1-alpha
|
||||
com.google.api.grpc:grpc-google-cloud-storage-v2:2.2.2-alpha
|
||||
com.google.api.grpc:grpc-google-common-protos:2.7.2
|
||||
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.10.0
|
||||
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.134.0
|
||||
@@ -50,28 +52,29 @@ com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.5.3
|
||||
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.5.3
|
||||
com.google.api.grpc:proto-google-cloud-datastore-v1:0.93.4
|
||||
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.14
|
||||
com.google.api.grpc:proto-google-cloud-monitoring-v3:1.64.0
|
||||
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.98.0
|
||||
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.5.0
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1:2.1.7
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:2.1.7
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-storage-v2:2.0.1-alpha
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2:2.1.11
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.91.11
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.91.11
|
||||
com.google.api.grpc:proto-google-cloud-storage-v2:2.2.2-alpha
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.92.0
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.92.0
|
||||
com.google.api.grpc:proto-google-common-protos:2.8.3
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.1
|
||||
com.google.api:api-common:2.1.5
|
||||
com.google.api:gax-grpc:2.16.0
|
||||
com.google.api:gax-httpjson:0.101.0
|
||||
com.google.api:gax:2.16.0
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.4
|
||||
com.google.api:api-common:2.2.0
|
||||
com.google.api:gax-grpc:2.18.1
|
||||
com.google.api:gax-httpjson:0.103.1
|
||||
com.google.api:gax:2.18.1
|
||||
com.google.apis:google-api-services-admin-directory:directory_v1-rev118-1.25.0
|
||||
com.google.apis:google-api-services-appengine:v1-rev20220326-1.32.1
|
||||
com.google.apis:google-api-services-appengine:v1-rev20220509-1.32.1
|
||||
com.google.apis:google-api-services-bigquery:v2-rev20211129-1.32.1
|
||||
com.google.apis:google-api-services-clouddebugger:v2-rev20210813-1.32.1
|
||||
com.google.apis:google-api-services-cloudkms:v1-rev20220415-1.32.1
|
||||
com.google.apis:google-api-services-cloudkms:v1-rev20220513-1.32.1
|
||||
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20211017-1.32.1
|
||||
com.google.apis:google-api-services-dataflow:v1b3-rev20210818-1.32.1
|
||||
com.google.apis:google-api-services-dns:v2beta1-rev99-1.25.0
|
||||
@@ -79,50 +82,51 @@ com.google.apis:google-api-services-drive:v2-rev393-1.25.0
|
||||
com.google.apis:google-api-services-groupssettings:v1-rev20210624-1.32.1
|
||||
com.google.apis:google-api-services-healthcare:v1-rev20211016-1.32.1
|
||||
com.google.apis:google-api-services-iamcredentials:v1-rev20210326-1.32.1
|
||||
com.google.apis:google-api-services-monitoring:v3-rev20220322-1.32.1
|
||||
com.google.apis:google-api-services-monitoring:v3-rev20220525-1.32.1
|
||||
com.google.apis:google-api-services-pubsub:v1-rev20211130-1.32.1
|
||||
com.google.apis:google-api-services-sheets:v4-rev20220411-1.32.1
|
||||
com.google.apis:google-api-services-sqladmin:v1beta4-rev20220310-1.32.1
|
||||
com.google.apis:google-api-services-storage:v1-rev20220401-1.32.1
|
||||
com.google.apis:google-api-services-sqladmin:v1beta4-rev20220323-1.32.1
|
||||
com.google.apis:google-api-services-storage:v1-rev20220509-1.32.1
|
||||
com.google.appengine.tools:appengine-gcs-client:0.8.1
|
||||
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.86
|
||||
com.google.appengine:appengine-api-stubs:2.0.4
|
||||
com.google.appengine:appengine-remote-api:2.0.4
|
||||
com.google.appengine:appengine-api-1.0-sdk:2.0.5
|
||||
com.google.appengine:appengine-api-stubs:2.0.5
|
||||
com.google.appengine:appengine-remote-api:2.0.5
|
||||
com.google.appengine:appengine-testing:1.9.86
|
||||
com.google.auth:google-auth-library-credentials:1.6.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.6.0
|
||||
com.google.auth:google-auth-library-credentials:1.7.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.7.0
|
||||
com.google.auto.service:auto-service-annotations:1.0.1
|
||||
com.google.auto.value:auto-value-annotations:1.9
|
||||
com.google.auto.value:auto-value:1.9
|
||||
com.google.cloud.bigdataoss:gcsio:2.2.4
|
||||
com.google.cloud.bigdataoss:util:2.2.4
|
||||
com.google.cloud.bigtable:bigtable-client-core:1.25.1
|
||||
com.google.cloud.bigtable:bigtable-metrics-api:1.25.1
|
||||
com.google.cloud.bigdataoss:gcsio:2.2.6
|
||||
com.google.cloud.bigdataoss:util:2.2.6
|
||||
com.google.cloud.bigtable:bigtable-client-core:1.26.3
|
||||
com.google.cloud.bigtable:bigtable-metrics-api:1.26.3
|
||||
com.google.cloud.datastore:datastore-v1-proto-client:2.1.3
|
||||
com.google.cloud.sql:jdbc-socket-factory-core:1.5.0
|
||||
com.google.cloud.sql:postgres-socket-factory:1.5.0
|
||||
com.google.cloud.sql:jdbc-socket-factory-core:1.6.0
|
||||
com.google.cloud.sql:postgres-socket-factory:1.6.0
|
||||
com.google.cloud:google-cloud-bigquerystorage:2.10.0
|
||||
com.google.cloud:google-cloud-bigtable:1.27.1
|
||||
com.google.cloud:google-cloud-bigtable:2.5.3
|
||||
com.google.cloud:google-cloud-core-grpc:2.4.0
|
||||
com.google.cloud:google-cloud-core-http:2.6.0
|
||||
com.google.cloud:google-cloud-core:2.6.0
|
||||
com.google.cloud:google-cloud-core-http:2.7.1
|
||||
com.google.cloud:google-cloud-core:2.7.1
|
||||
com.google.cloud:google-cloud-firestore:3.0.14
|
||||
com.google.cloud:google-cloud-nio:0.123.28
|
||||
com.google.cloud:google-cloud-monitoring:1.82.0
|
||||
com.google.cloud:google-cloud-nio:0.124.2
|
||||
com.google.cloud:google-cloud-pubsub:1.116.0
|
||||
com.google.cloud:google-cloud-pubsublite:1.5.0
|
||||
com.google.cloud:google-cloud-secretmanager:2.1.7
|
||||
com.google.cloud:google-cloud-secretmanager:2.2.0
|
||||
com.google.cloud:google-cloud-spanner:6.20.0
|
||||
com.google.cloud:google-cloud-storage:2.6.1
|
||||
com.google.cloud:google-cloud-tasks:2.1.11
|
||||
com.google.cloud:google-cloud-storage:2.7.2
|
||||
com.google.cloud:google-cloud-tasks:2.2.0
|
||||
com.google.cloud:grpc-gcp:1.1.0
|
||||
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.14
|
||||
com.google.code.findbugs:jsr305:3.0.2
|
||||
com.google.code.gson:gson:2.9.0
|
||||
com.google.common.html.types:types:1.0.6
|
||||
com.google.dagger:dagger:2.41
|
||||
com.google.errorprone:error_prone_annotations:2.13.0
|
||||
com.google.dagger:dagger:2.42
|
||||
com.google.errorprone:error_prone_annotations:2.13.1
|
||||
com.google.escapevelocity:escapevelocity:0.9.1
|
||||
com.google.flatbuffers:flatbuffers-java:1.12.0
|
||||
com.google.flogger:flogger-system-backend:0.7.4
|
||||
@@ -133,12 +137,12 @@ com.google.guava:guava-testlib:31.1-jre
|
||||
com.google.guava:guava:31.1-jre
|
||||
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
|
||||
com.google.gwt:gwt-user:2.9.0
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.7
|
||||
com.google.http-client:google-http-client-appengine:1.41.7
|
||||
com.google.http-client:google-http-client-gson:1.41.7
|
||||
com.google.http-client:google-http-client-jackson2:1.41.7
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.8
|
||||
com.google.http-client:google-http-client-appengine:1.41.8
|
||||
com.google.http-client:google-http-client-gson:1.41.8
|
||||
com.google.http-client:google-http-client-jackson2:1.41.8
|
||||
com.google.http-client:google-http-client-protobuf:1.40.1
|
||||
com.google.http-client:google-http-client:1.41.7
|
||||
com.google.http-client:google-http-client:1.41.8
|
||||
com.google.inject.extensions:guice-multibindings:4.1.0
|
||||
com.google.inject:guice:4.1.0
|
||||
com.google.j2objc:j2objc-annotations:1.3
|
||||
@@ -146,13 +150,13 @@ com.google.jsinterop:jsinterop-annotations:2.0.0
|
||||
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.33.3
|
||||
com.google.oauth-client:google-oauth-client-java6:1.33.3
|
||||
com.google.oauth-client:google-oauth-client-jetty:1.33.3
|
||||
com.google.oauth-client:google-oauth-client-servlet:1.33.3
|
||||
com.google.oauth-client:google-oauth-client:1.33.3
|
||||
com.google.protobuf:protobuf-java-util:3.19.4
|
||||
com.google.protobuf:protobuf-java:3.19.4
|
||||
com.google.oauth-client:google-oauth-client-appengine:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-java6:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-jetty:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-servlet:1.34.0
|
||||
com.google.oauth-client:google-oauth-client:1.34.0
|
||||
com.google.protobuf:protobuf-java-util:3.20.1
|
||||
com.google.protobuf:protobuf-java:3.20.1
|
||||
com.google.re2j:re2j:1.6
|
||||
com.google.template:soy:2021-02-01
|
||||
com.google.truth.extensions:truth-java8-extension:1.1.3
|
||||
@@ -161,6 +165,7 @@ com.googlecode.charts4j:charts4j:1.3
|
||||
com.googlecode.json-simple:json-simple:1.1.1
|
||||
com.ibm.icu:icu4j:71.1
|
||||
com.jcraft:jsch:0.1.55
|
||||
com.lmax:disruptor:3.4.2
|
||||
com.squareup.okhttp3:okhttp:3.11.0
|
||||
com.squareup.okio:okio:1.14.0
|
||||
com.sun.istack:istack-commons-runtime:3.0.7
|
||||
@@ -170,7 +175,7 @@ com.thoughtworks.qdox:qdox:1.12.1
|
||||
com.zaxxer:HikariCP:3.4.5
|
||||
commons-codec:commons-codec:1.15
|
||||
commons-logging:commons-logging:1.2
|
||||
dnsjava:dnsjava:3.5.0
|
||||
dnsjava:dnsjava:3.5.1
|
||||
guru.nidi.com.eclipsesource.j2v8:j2v8_linux_x86_64:4.6.0
|
||||
guru.nidi.com.eclipsesource.j2v8:j2v8_macosx_x86_64:4.6.0
|
||||
guru.nidi.com.eclipsesource.j2v8:j2v8_win32_x86:4.6.0
|
||||
@@ -185,20 +190,21 @@ io.confluent:kafka-schema-registry-client:5.3.2
|
||||
io.dropwizard.metrics:metrics-core:3.1.2
|
||||
io.github.classgraph:classgraph:4.8.104
|
||||
io.github.java-diff-utils:java-diff-utils:4.9
|
||||
io.grpc:grpc-alts:1.45.1
|
||||
io.grpc:grpc-api:1.45.1
|
||||
io.grpc:grpc-auth:1.45.1
|
||||
io.grpc:grpc-context:1.45.1
|
||||
io.grpc:grpc-core:1.45.1
|
||||
io.grpc:grpc-googleapis:1.45.1
|
||||
io.grpc:grpc-grpclb:1.45.1
|
||||
io.grpc:grpc-netty-shaded:1.45.1
|
||||
io.grpc:grpc-alts:1.46.0
|
||||
io.grpc:grpc-api:1.46.0
|
||||
io.grpc:grpc-auth:1.46.0
|
||||
io.grpc:grpc-census:1.44.0
|
||||
io.grpc:grpc-context:1.46.0
|
||||
io.grpc:grpc-core:1.46.0
|
||||
io.grpc:grpc-googleapis:1.46.0
|
||||
io.grpc:grpc-grpclb:1.46.0
|
||||
io.grpc:grpc-netty-shaded:1.46.0
|
||||
io.grpc:grpc-netty:1.44.0
|
||||
io.grpc:grpc-protobuf-lite:1.45.1
|
||||
io.grpc:grpc-protobuf:1.45.1
|
||||
io.grpc:grpc-services:1.45.1
|
||||
io.grpc:grpc-stub:1.45.1
|
||||
io.grpc:grpc-xds:1.45.1
|
||||
io.grpc:grpc-protobuf-lite:1.46.0
|
||||
io.grpc:grpc-protobuf:1.46.0
|
||||
io.grpc:grpc-services:1.46.0
|
||||
io.grpc:grpc-stub:1.46.0
|
||||
io.grpc:grpc-xds:1.46.0
|
||||
io.netty:netty-buffer:4.1.72.Final
|
||||
io.netty:netty-codec-http2:4.1.72.Final
|
||||
io.netty:netty-codec-http:4.1.72.Final
|
||||
@@ -211,11 +217,18 @@ io.netty:netty-resolver:4.1.72.Final
|
||||
io.netty:netty-tcnative-boringssl-static:2.0.46.Final
|
||||
io.netty:netty-tcnative-classes:2.0.46.Final
|
||||
io.netty:netty-transport:4.1.72.Final
|
||||
io.opencensus:opencensus-api:0.31.0
|
||||
io.opencensus:opencensus-api:0.31.1
|
||||
io.opencensus:opencensus-contrib-exemplar-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-grpc-metrics:0.31.0
|
||||
io.opencensus:opencensus-contrib-grpc-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.1
|
||||
io.opencensus:opencensus-contrib-resource-util:0.31.0
|
||||
io.opencensus:opencensus-exporter-metrics-util:0.31.0
|
||||
io.opencensus:opencensus-exporter-stats-stackdriver:0.31.0
|
||||
io.opencensus:opencensus-impl-core:0.31.0
|
||||
io.opencensus:opencensus-impl:0.31.0
|
||||
io.opencensus:opencensus-proto:0.2.0
|
||||
io.perfmark:perfmark-api:0.23.0
|
||||
io.perfmark:perfmark-api:0.25.0
|
||||
it.unimi.dsi:fastutil:6.5.16
|
||||
javax.activation:activation:1.1
|
||||
javax.activation:javax.activation-api:1.2.0
|
||||
@@ -232,29 +245,29 @@ jline:jline:1.0
|
||||
joda-time:joda-time:2.10.10
|
||||
junit:junit:4.13.2
|
||||
net.arnx:nashorn-promise:0.1.1
|
||||
net.bytebuddy:byte-buddy-agent:1.12.9
|
||||
net.bytebuddy:byte-buddy:1.12.9
|
||||
net.bytebuddy:byte-buddy-agent:1.12.10
|
||||
net.bytebuddy:byte-buddy:1.12.10
|
||||
net.java.dev.jna:jna:5.8.0
|
||||
org.apache.arrow:arrow-format:5.0.0
|
||||
org.apache.arrow:arrow-memory-core:5.0.0
|
||||
org.apache.arrow:arrow-vector:5.0.0
|
||||
org.apache.avro:avro:1.8.2
|
||||
org.apache.beam:beam-model-fn-execution:2.38.0
|
||||
org.apache.beam:beam-model-job-management:2.38.0
|
||||
org.apache.beam:beam-model-pipeline:2.38.0
|
||||
org.apache.beam:beam-runners-core-construction-java:2.38.0
|
||||
org.apache.beam:beam-runners-core-java:2.38.0
|
||||
org.apache.beam:beam-runners-direct-java:2.38.0
|
||||
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.38.0
|
||||
org.apache.beam:beam-runners-java-fn-execution:2.38.0
|
||||
org.apache.beam:beam-sdks-java-core:2.38.0
|
||||
org.apache.beam:beam-sdks-java-expansion-service:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-arrow:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-protobuf:2.38.0
|
||||
org.apache.beam:beam-sdks-java-fn-execution:2.38.0
|
||||
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.38.0
|
||||
org.apache.beam:beam-sdks-java-io-kafka:2.38.0
|
||||
org.apache.beam:beam-model-fn-execution:2.39.0
|
||||
org.apache.beam:beam-model-job-management:2.39.0
|
||||
org.apache.beam:beam-model-pipeline:2.39.0
|
||||
org.apache.beam:beam-runners-core-construction-java:2.39.0
|
||||
org.apache.beam:beam-runners-core-java:2.39.0
|
||||
org.apache.beam:beam-runners-direct-java:2.39.0
|
||||
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.39.0
|
||||
org.apache.beam:beam-runners-java-fn-execution:2.39.0
|
||||
org.apache.beam:beam-sdks-java-core:2.39.0
|
||||
org.apache.beam:beam-sdks-java-expansion-service:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-arrow:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-protobuf:2.39.0
|
||||
org.apache.beam:beam-sdks-java-fn-execution:2.39.0
|
||||
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.39.0
|
||||
org.apache.beam:beam-sdks-java-io-kafka:2.39.0
|
||||
org.apache.beam:beam-vendor-bytebuddy-1_11_0:0.1
|
||||
org.apache.beam:beam-vendor-grpc-1_43_2:0.1
|
||||
org.apache.beam:beam-vendor-guava-26_0-jre:0.1
|
||||
@@ -270,58 +283,58 @@ org.apache.mina:mina-core:2.1.6
|
||||
org.apache.sshd:sshd-core:2.0.0
|
||||
org.apache.sshd:sshd-scp:2.0.0
|
||||
org.apache.sshd:sshd-sftp:2.0.0
|
||||
org.apache.tomcat:tomcat-annotations-api:10.1.0-M14
|
||||
org.apache.tomcat:tomcat-annotations-api:10.1.0-M15
|
||||
org.bouncycastle:bcpg-jdk15on:1.67
|
||||
org.bouncycastle:bcpkix-jdk15on:1.67
|
||||
org.bouncycastle:bcprov-jdk15on:1.67
|
||||
org.checkerframework:checker-compat-qual:2.5.5
|
||||
org.checkerframework:checker-qual:3.21.4
|
||||
org.checkerframework:checker-qual:3.22.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.21
|
||||
org.conscrypt:conscrypt-openjdk-uber:2.5.1
|
||||
org.easymock:easymock:3.0
|
||||
org.flywaydb:flyway-core:8.5.10
|
||||
org.flywaydb:flyway-core:8.5.12
|
||||
org.glassfish.jaxb:jaxb-runtime:2.3.1
|
||||
org.glassfish.jaxb:txw2:2.3.1
|
||||
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.6.8.Final
|
||||
org.hibernate:hibernate-hikaricp:5.6.8.Final
|
||||
org.hibernate:hibernate-core:5.6.9.Final
|
||||
org.hibernate:hibernate-hikaricp:5.6.9.Final
|
||||
org.jboss.logging:jboss-logging:3.4.3.Final
|
||||
org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.1.1.Final
|
||||
org.jboss:jandex:2.4.2.Final
|
||||
org.jetbrains:annotations:17.0.0
|
||||
org.joda:joda-money:1.0.1
|
||||
org.json:json:20200518
|
||||
org.jsoup:jsoup:1.14.3
|
||||
org.junit-pioneer:junit-pioneer:1.7.0
|
||||
org.junit.jupiter:junit-jupiter-api:5.8.2
|
||||
org.junit.jupiter:junit-jupiter-engine:5.8.2
|
||||
org.junit.jupiter:junit-jupiter-migrationsupport:5.8.2
|
||||
org.junit.jupiter:junit-jupiter-params:5.8.2
|
||||
org.junit.platform:junit-platform-commons:1.8.2
|
||||
org.junit.platform:junit-platform-engine:1.8.2
|
||||
org.junit.platform:junit-platform-launcher:1.8.2
|
||||
org.junit.platform:junit-platform-runner:1.8.2
|
||||
org.junit.platform:junit-platform-suite-api:1.8.2
|
||||
org.junit.platform:junit-platform-suite-commons:1.8.2
|
||||
org.junit:junit-bom:5.8.2
|
||||
org.jsoup:jsoup:1.15.1
|
||||
org.junit-pioneer:junit-pioneer:1.7.1
|
||||
org.junit.jupiter:junit-jupiter-api:5.9.0-M1
|
||||
org.junit.jupiter:junit-jupiter-engine:5.9.0-M1
|
||||
org.junit.jupiter:junit-jupiter-migrationsupport:5.9.0-M1
|
||||
org.junit.jupiter:junit-jupiter-params:5.9.0-M1
|
||||
org.junit.platform:junit-platform-commons:1.9.0-M1
|
||||
org.junit.platform:junit-platform-engine:1.9.0-M1
|
||||
org.junit.platform:junit-platform-launcher:1.9.0-M1
|
||||
org.junit.platform:junit-platform-runner:1.9.0-M1
|
||||
org.junit.platform:junit-platform-suite-api:1.9.0-M1
|
||||
org.junit.platform:junit-platform-suite-commons:1.9.0-M1
|
||||
org.junit:junit-bom:5.9.0-M1
|
||||
org.jvnet.staxex:stax-ex:1.8
|
||||
org.mockito:mockito-core:4.5.1
|
||||
org.mockito:mockito-junit-jupiter:4.5.1
|
||||
org.mockito:mockito-core:4.6.1
|
||||
org.mockito:mockito-junit-jupiter:4.6.1
|
||||
org.mortbay.jetty:jetty-util:6.1.26
|
||||
org.mortbay.jetty:jetty:6.1.26
|
||||
org.objenesis:objenesis:3.2
|
||||
org.opentest4j:opentest4j:1.2.0
|
||||
org.ow2.asm:asm-analysis:9.2
|
||||
org.ow2.asm:asm-analysis:9.3
|
||||
org.ow2.asm:asm-commons:9.2
|
||||
org.ow2.asm:asm-tree:9.2
|
||||
org.ow2.asm:asm-util:9.2
|
||||
org.ow2.asm:asm:9.2
|
||||
org.postgresql:postgresql:42.3.4
|
||||
org.ow2.asm:asm-tree:9.3
|
||||
org.ow2.asm:asm-util:9.3
|
||||
org.ow2.asm:asm:9.3
|
||||
org.postgresql:postgresql:42.3.6
|
||||
org.rnorth.duct-tape:duct-tape:1.0.8
|
||||
org.seleniumhq.selenium:selenium-api:3.141.59
|
||||
org.seleniumhq.selenium:selenium-chrome-driver:3.141.59
|
||||
@@ -336,14 +349,15 @@ org.seleniumhq.selenium:selenium-support:3.141.59
|
||||
org.slf4j:jcl-over-slf4j:1.7.30
|
||||
org.slf4j:jul-to-slf4j:1.7.30
|
||||
org.slf4j:slf4j-api:1.7.36
|
||||
org.springframework:spring-core:4.3.18.RELEASE
|
||||
org.springframework:spring-expression:4.3.18.RELEASE
|
||||
org.testcontainers:database-commons:1.17.1
|
||||
org.testcontainers:jdbc:1.17.1
|
||||
org.testcontainers:junit-jupiter:1.17.1
|
||||
org.testcontainers:postgresql:1.17.1
|
||||
org.testcontainers:selenium:1.17.1
|
||||
org.testcontainers:testcontainers:1.17.1
|
||||
org.springframework:spring-core:5.3.18
|
||||
org.springframework:spring-expression:5.3.18
|
||||
org.springframework:spring-jcl:5.3.18
|
||||
org.testcontainers:database-commons:1.17.2
|
||||
org.testcontainers:jdbc:1.17.2
|
||||
org.testcontainers:junit-jupiter:1.17.2
|
||||
org.testcontainers:postgresql:1.17.2
|
||||
org.testcontainers:selenium:1.17.2
|
||||
org.testcontainers:testcontainers:1.17.2
|
||||
org.threeten:threetenbp:1.6.0
|
||||
org.tukaani:xz:1.5
|
||||
org.w3c.css:sac:1.3
|
||||
|
||||
@@ -7,11 +7,13 @@ args4j:args4j:2.0.23
|
||||
cglib:cglib-nodep:2.2
|
||||
com.101tec:zkclient:0.10
|
||||
com.beust:jcommander:1.60
|
||||
com.fasterxml.jackson.core:jackson-annotations:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-databind:2.13.2
|
||||
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.2
|
||||
com.fasterxml.jackson:jackson-bom:2.13.2
|
||||
com.fasterxml.jackson.core:jackson-annotations:2.13.3
|
||||
com.fasterxml.jackson.core:jackson-core:2.13.3
|
||||
com.fasterxml.jackson.core:jackson-databind:2.13.3
|
||||
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.3
|
||||
com.fasterxml.jackson.datatype:jackson-datatype-joda:2.13.3
|
||||
com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.3
|
||||
com.fasterxml.jackson:jackson-bom:2.13.3
|
||||
com.fasterxml:classmate:1.5.1
|
||||
com.github.ben-manes.caffeine:caffeine:2.9.3
|
||||
com.github.docker-java:docker-java-api:3.2.13
|
||||
@@ -26,22 +28,22 @@ com.github.jnr:jnr-posix:3.1.15
|
||||
com.github.jnr:jnr-unixsocket:0.38.17
|
||||
com.github.jnr:jnr-x86asm:1.0.2
|
||||
com.google.android:annotations:4.1.1.4
|
||||
com.google.api-client:google-api-client-appengine:1.34.0
|
||||
com.google.api-client:google-api-client-appengine:1.35.0
|
||||
com.google.api-client:google-api-client-jackson2:1.32.2
|
||||
com.google.api-client:google-api-client-java6:1.34.0
|
||||
com.google.api-client:google-api-client-servlet:1.34.0
|
||||
com.google.api-client:google-api-client:1.34.0
|
||||
com.google.api-client:google-api-client-java6:1.35.0
|
||||
com.google.api-client:google-api-client-servlet:1.35.0
|
||||
com.google.api-client:google-api-client:1.35.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.10.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.134.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.134.0
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.27.1
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.27.1
|
||||
com.google.api.grpc:grpc-google-cloud-bigtable-v2:2.5.3
|
||||
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.97.5
|
||||
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.5.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.20.0
|
||||
com.google.api.grpc:grpc-google-cloud-storage-v2:2.0.1-alpha
|
||||
com.google.api.grpc:grpc-google-cloud-storage-v2:2.2.2-alpha
|
||||
com.google.api.grpc:grpc-google-common-protos:2.7.2
|
||||
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.10.0
|
||||
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.134.0
|
||||
@@ -50,28 +52,29 @@ com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.5.3
|
||||
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.5.3
|
||||
com.google.api.grpc:proto-google-cloud-datastore-v1:0.93.4
|
||||
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.14
|
||||
com.google.api.grpc:proto-google-cloud-monitoring-v3:1.64.0
|
||||
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.98.0
|
||||
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.5.0
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1:2.1.7
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:2.1.7
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-spanner-v1:6.20.0
|
||||
com.google.api.grpc:proto-google-cloud-storage-v2:2.0.1-alpha
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2:2.1.11
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.91.11
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.91.11
|
||||
com.google.api.grpc:proto-google-cloud-storage-v2:2.2.2-alpha
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2:2.2.0
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.92.0
|
||||
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.92.0
|
||||
com.google.api.grpc:proto-google-common-protos:2.8.3
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.1
|
||||
com.google.api:api-common:2.1.5
|
||||
com.google.api:gax-grpc:2.16.0
|
||||
com.google.api:gax-httpjson:0.101.0
|
||||
com.google.api:gax:2.16.0
|
||||
com.google.api.grpc:proto-google-iam-v1:1.3.4
|
||||
com.google.api:api-common:2.2.0
|
||||
com.google.api:gax-grpc:2.18.1
|
||||
com.google.api:gax-httpjson:0.103.1
|
||||
com.google.api:gax:2.18.1
|
||||
com.google.apis:google-api-services-admin-directory:directory_v1-rev118-1.25.0
|
||||
com.google.apis:google-api-services-appengine:v1-rev20220326-1.32.1
|
||||
com.google.apis:google-api-services-appengine:v1-rev20220509-1.32.1
|
||||
com.google.apis:google-api-services-bigquery:v2-rev20211129-1.32.1
|
||||
com.google.apis:google-api-services-clouddebugger:v2-rev20210813-1.32.1
|
||||
com.google.apis:google-api-services-cloudkms:v1-rev20220415-1.32.1
|
||||
com.google.apis:google-api-services-cloudkms:v1-rev20220513-1.32.1
|
||||
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20211017-1.32.1
|
||||
com.google.apis:google-api-services-dataflow:v1b3-rev20210818-1.32.1
|
||||
com.google.apis:google-api-services-dns:v2beta1-rev99-1.25.0
|
||||
@@ -79,50 +82,51 @@ com.google.apis:google-api-services-drive:v2-rev393-1.25.0
|
||||
com.google.apis:google-api-services-groupssettings:v1-rev20210624-1.32.1
|
||||
com.google.apis:google-api-services-healthcare:v1-rev20211016-1.32.1
|
||||
com.google.apis:google-api-services-iamcredentials:v1-rev20210326-1.32.1
|
||||
com.google.apis:google-api-services-monitoring:v3-rev20220322-1.32.1
|
||||
com.google.apis:google-api-services-monitoring:v3-rev20220525-1.32.1
|
||||
com.google.apis:google-api-services-pubsub:v1-rev20211130-1.32.1
|
||||
com.google.apis:google-api-services-sheets:v4-rev20220411-1.32.1
|
||||
com.google.apis:google-api-services-sqladmin:v1beta4-rev20220310-1.32.1
|
||||
com.google.apis:google-api-services-storage:v1-rev20220401-1.32.1
|
||||
com.google.apis:google-api-services-sqladmin:v1beta4-rev20220323-1.32.1
|
||||
com.google.apis:google-api-services-storage:v1-rev20220509-1.32.1
|
||||
com.google.appengine.tools:appengine-gcs-client:0.8.1
|
||||
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.86
|
||||
com.google.appengine:appengine-api-stubs:2.0.4
|
||||
com.google.appengine:appengine-remote-api:2.0.4
|
||||
com.google.appengine:appengine-api-1.0-sdk:2.0.5
|
||||
com.google.appengine:appengine-api-stubs:2.0.5
|
||||
com.google.appengine:appengine-remote-api:2.0.5
|
||||
com.google.appengine:appengine-testing:1.9.86
|
||||
com.google.auth:google-auth-library-credentials:1.6.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.6.0
|
||||
com.google.auth:google-auth-library-credentials:1.7.0
|
||||
com.google.auth:google-auth-library-oauth2-http:1.7.0
|
||||
com.google.auto.service:auto-service-annotations:1.0.1
|
||||
com.google.auto.value:auto-value-annotations:1.9
|
||||
com.google.auto.value:auto-value:1.9
|
||||
com.google.cloud.bigdataoss:gcsio:2.2.4
|
||||
com.google.cloud.bigdataoss:util:2.2.4
|
||||
com.google.cloud.bigtable:bigtable-client-core:1.25.1
|
||||
com.google.cloud.bigtable:bigtable-metrics-api:1.25.1
|
||||
com.google.cloud.bigdataoss:gcsio:2.2.6
|
||||
com.google.cloud.bigdataoss:util:2.2.6
|
||||
com.google.cloud.bigtable:bigtable-client-core:1.26.3
|
||||
com.google.cloud.bigtable:bigtable-metrics-api:1.26.3
|
||||
com.google.cloud.datastore:datastore-v1-proto-client:2.1.3
|
||||
com.google.cloud.sql:jdbc-socket-factory-core:1.5.0
|
||||
com.google.cloud.sql:postgres-socket-factory:1.5.0
|
||||
com.google.cloud.sql:jdbc-socket-factory-core:1.6.0
|
||||
com.google.cloud.sql:postgres-socket-factory:1.6.0
|
||||
com.google.cloud:google-cloud-bigquerystorage:2.10.0
|
||||
com.google.cloud:google-cloud-bigtable:1.27.1
|
||||
com.google.cloud:google-cloud-bigtable:2.5.3
|
||||
com.google.cloud:google-cloud-core-grpc:2.4.0
|
||||
com.google.cloud:google-cloud-core-http:2.6.0
|
||||
com.google.cloud:google-cloud-core:2.6.0
|
||||
com.google.cloud:google-cloud-core-http:2.7.1
|
||||
com.google.cloud:google-cloud-core:2.7.1
|
||||
com.google.cloud:google-cloud-firestore:3.0.14
|
||||
com.google.cloud:google-cloud-nio:0.123.28
|
||||
com.google.cloud:google-cloud-monitoring:1.82.0
|
||||
com.google.cloud:google-cloud-nio:0.124.2
|
||||
com.google.cloud:google-cloud-pubsub:1.116.0
|
||||
com.google.cloud:google-cloud-pubsublite:1.5.0
|
||||
com.google.cloud:google-cloud-secretmanager:2.1.7
|
||||
com.google.cloud:google-cloud-secretmanager:2.2.0
|
||||
com.google.cloud:google-cloud-spanner:6.20.0
|
||||
com.google.cloud:google-cloud-storage:2.6.1
|
||||
com.google.cloud:google-cloud-tasks:2.1.11
|
||||
com.google.cloud:google-cloud-storage:2.7.2
|
||||
com.google.cloud:google-cloud-tasks:2.2.0
|
||||
com.google.cloud:grpc-gcp:1.1.0
|
||||
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.14
|
||||
com.google.code.findbugs:jsr305:3.0.2
|
||||
com.google.code.gson:gson:2.9.0
|
||||
com.google.common.html.types:types:1.0.6
|
||||
com.google.dagger:dagger:2.41
|
||||
com.google.errorprone:error_prone_annotations:2.13.0
|
||||
com.google.dagger:dagger:2.42
|
||||
com.google.errorprone:error_prone_annotations:2.13.1
|
||||
com.google.escapevelocity:escapevelocity:0.9.1
|
||||
com.google.flatbuffers:flatbuffers-java:1.12.0
|
||||
com.google.flogger:flogger-system-backend:0.7.4
|
||||
@@ -133,12 +137,12 @@ com.google.guava:guava-testlib:31.1-jre
|
||||
com.google.guava:guava:31.1-jre
|
||||
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
|
||||
com.google.gwt:gwt-user:2.9.0
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.7
|
||||
com.google.http-client:google-http-client-appengine:1.41.7
|
||||
com.google.http-client:google-http-client-gson:1.41.7
|
||||
com.google.http-client:google-http-client-jackson2:1.41.7
|
||||
com.google.http-client:google-http-client-apache-v2:1.41.8
|
||||
com.google.http-client:google-http-client-appengine:1.41.8
|
||||
com.google.http-client:google-http-client-gson:1.41.8
|
||||
com.google.http-client:google-http-client-jackson2:1.41.8
|
||||
com.google.http-client:google-http-client-protobuf:1.40.1
|
||||
com.google.http-client:google-http-client:1.41.7
|
||||
com.google.http-client:google-http-client:1.41.8
|
||||
com.google.inject.extensions:guice-multibindings:4.1.0
|
||||
com.google.inject:guice:4.1.0
|
||||
com.google.j2objc:j2objc-annotations:1.3
|
||||
@@ -146,13 +150,13 @@ com.google.jsinterop:jsinterop-annotations:2.0.0
|
||||
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.33.3
|
||||
com.google.oauth-client:google-oauth-client-java6:1.33.3
|
||||
com.google.oauth-client:google-oauth-client-jetty:1.33.3
|
||||
com.google.oauth-client:google-oauth-client-servlet:1.33.3
|
||||
com.google.oauth-client:google-oauth-client:1.33.3
|
||||
com.google.protobuf:protobuf-java-util:3.19.4
|
||||
com.google.protobuf:protobuf-java:3.19.4
|
||||
com.google.oauth-client:google-oauth-client-appengine:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-java6:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-jetty:1.34.0
|
||||
com.google.oauth-client:google-oauth-client-servlet:1.34.0
|
||||
com.google.oauth-client:google-oauth-client:1.34.0
|
||||
com.google.protobuf:protobuf-java-util:3.20.1
|
||||
com.google.protobuf:protobuf-java:3.20.1
|
||||
com.google.re2j:re2j:1.6
|
||||
com.google.template:soy:2021-02-01
|
||||
com.google.truth.extensions:truth-java8-extension:1.1.3
|
||||
@@ -161,6 +165,7 @@ com.googlecode.charts4j:charts4j:1.3
|
||||
com.googlecode.json-simple:json-simple:1.1.1
|
||||
com.ibm.icu:icu4j:71.1
|
||||
com.jcraft:jsch:0.1.55
|
||||
com.lmax:disruptor:3.4.2
|
||||
com.squareup.okhttp3:okhttp:3.11.0
|
||||
com.squareup.okio:okio:1.14.0
|
||||
com.sun.istack:istack-commons-runtime:3.0.7
|
||||
@@ -170,7 +175,7 @@ com.thoughtworks.qdox:qdox:1.12.1
|
||||
com.zaxxer:HikariCP:3.4.5
|
||||
commons-codec:commons-codec:1.15
|
||||
commons-logging:commons-logging:1.2
|
||||
dnsjava:dnsjava:3.5.0
|
||||
dnsjava:dnsjava:3.5.1
|
||||
guru.nidi.com.eclipsesource.j2v8:j2v8_linux_x86_64:4.6.0
|
||||
guru.nidi.com.eclipsesource.j2v8:j2v8_macosx_x86_64:4.6.0
|
||||
guru.nidi.com.eclipsesource.j2v8:j2v8_win32_x86:4.6.0
|
||||
@@ -185,20 +190,21 @@ io.confluent:kafka-schema-registry-client:5.3.2
|
||||
io.dropwizard.metrics:metrics-core:3.1.2
|
||||
io.github.classgraph:classgraph:4.8.104
|
||||
io.github.java-diff-utils:java-diff-utils:4.9
|
||||
io.grpc:grpc-alts:1.45.1
|
||||
io.grpc:grpc-api:1.45.1
|
||||
io.grpc:grpc-auth:1.45.1
|
||||
io.grpc:grpc-context:1.45.1
|
||||
io.grpc:grpc-core:1.45.1
|
||||
io.grpc:grpc-googleapis:1.45.1
|
||||
io.grpc:grpc-grpclb:1.45.1
|
||||
io.grpc:grpc-netty-shaded:1.45.1
|
||||
io.grpc:grpc-alts:1.46.0
|
||||
io.grpc:grpc-api:1.46.0
|
||||
io.grpc:grpc-auth:1.46.0
|
||||
io.grpc:grpc-census:1.44.0
|
||||
io.grpc:grpc-context:1.46.0
|
||||
io.grpc:grpc-core:1.46.0
|
||||
io.grpc:grpc-googleapis:1.46.0
|
||||
io.grpc:grpc-grpclb:1.46.0
|
||||
io.grpc:grpc-netty-shaded:1.46.0
|
||||
io.grpc:grpc-netty:1.44.0
|
||||
io.grpc:grpc-protobuf-lite:1.45.1
|
||||
io.grpc:grpc-protobuf:1.45.1
|
||||
io.grpc:grpc-services:1.45.1
|
||||
io.grpc:grpc-stub:1.45.1
|
||||
io.grpc:grpc-xds:1.45.1
|
||||
io.grpc:grpc-protobuf-lite:1.46.0
|
||||
io.grpc:grpc-protobuf:1.46.0
|
||||
io.grpc:grpc-services:1.46.0
|
||||
io.grpc:grpc-stub:1.46.0
|
||||
io.grpc:grpc-xds:1.46.0
|
||||
io.netty:netty-buffer:4.1.72.Final
|
||||
io.netty:netty-codec-http2:4.1.72.Final
|
||||
io.netty:netty-codec-http:4.1.72.Final
|
||||
@@ -211,11 +217,18 @@ io.netty:netty-resolver:4.1.72.Final
|
||||
io.netty:netty-tcnative-boringssl-static:2.0.46.Final
|
||||
io.netty:netty-tcnative-classes:2.0.46.Final
|
||||
io.netty:netty-transport:4.1.72.Final
|
||||
io.opencensus:opencensus-api:0.31.0
|
||||
io.opencensus:opencensus-api:0.31.1
|
||||
io.opencensus:opencensus-contrib-exemplar-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-grpc-metrics:0.31.0
|
||||
io.opencensus:opencensus-contrib-grpc-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.0
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.1
|
||||
io.opencensus:opencensus-contrib-resource-util:0.31.0
|
||||
io.opencensus:opencensus-exporter-metrics-util:0.31.0
|
||||
io.opencensus:opencensus-exporter-stats-stackdriver:0.31.0
|
||||
io.opencensus:opencensus-impl-core:0.31.0
|
||||
io.opencensus:opencensus-impl:0.31.0
|
||||
io.opencensus:opencensus-proto:0.2.0
|
||||
io.perfmark:perfmark-api:0.23.0
|
||||
io.perfmark:perfmark-api:0.25.0
|
||||
it.unimi.dsi:fastutil:6.5.16
|
||||
javax.activation:activation:1.1
|
||||
javax.activation:javax.activation-api:1.2.0
|
||||
@@ -232,29 +245,29 @@ jline:jline:1.0
|
||||
joda-time:joda-time:2.10.10
|
||||
junit:junit:4.13.2
|
||||
net.arnx:nashorn-promise:0.1.1
|
||||
net.bytebuddy:byte-buddy-agent:1.12.9
|
||||
net.bytebuddy:byte-buddy:1.12.9
|
||||
net.bytebuddy:byte-buddy-agent:1.12.10
|
||||
net.bytebuddy:byte-buddy:1.12.10
|
||||
net.java.dev.jna:jna:5.8.0
|
||||
org.apache.arrow:arrow-format:5.0.0
|
||||
org.apache.arrow:arrow-memory-core:5.0.0
|
||||
org.apache.arrow:arrow-vector:5.0.0
|
||||
org.apache.avro:avro:1.8.2
|
||||
org.apache.beam:beam-model-fn-execution:2.38.0
|
||||
org.apache.beam:beam-model-job-management:2.38.0
|
||||
org.apache.beam:beam-model-pipeline:2.38.0
|
||||
org.apache.beam:beam-runners-core-construction-java:2.38.0
|
||||
org.apache.beam:beam-runners-core-java:2.38.0
|
||||
org.apache.beam:beam-runners-direct-java:2.38.0
|
||||
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.38.0
|
||||
org.apache.beam:beam-runners-java-fn-execution:2.38.0
|
||||
org.apache.beam:beam-sdks-java-core:2.38.0
|
||||
org.apache.beam:beam-sdks-java-expansion-service:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-arrow:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.38.0
|
||||
org.apache.beam:beam-sdks-java-extensions-protobuf:2.38.0
|
||||
org.apache.beam:beam-sdks-java-fn-execution:2.38.0
|
||||
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.38.0
|
||||
org.apache.beam:beam-sdks-java-io-kafka:2.38.0
|
||||
org.apache.beam:beam-model-fn-execution:2.39.0
|
||||
org.apache.beam:beam-model-job-management:2.39.0
|
||||
org.apache.beam:beam-model-pipeline:2.39.0
|
||||
org.apache.beam:beam-runners-core-construction-java:2.39.0
|
||||
org.apache.beam:beam-runners-core-java:2.39.0
|
||||
org.apache.beam:beam-runners-direct-java:2.39.0
|
||||
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.39.0
|
||||
org.apache.beam:beam-runners-java-fn-execution:2.39.0
|
||||
org.apache.beam:beam-sdks-java-core:2.39.0
|
||||
org.apache.beam:beam-sdks-java-expansion-service:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-arrow:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.39.0
|
||||
org.apache.beam:beam-sdks-java-extensions-protobuf:2.39.0
|
||||
org.apache.beam:beam-sdks-java-fn-execution:2.39.0
|
||||
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.39.0
|
||||
org.apache.beam:beam-sdks-java-io-kafka:2.39.0
|
||||
org.apache.beam:beam-vendor-bytebuddy-1_11_0:0.1
|
||||
org.apache.beam:beam-vendor-grpc-1_43_2:0.1
|
||||
org.apache.beam:beam-vendor-guava-26_0-jre:0.1
|
||||
@@ -270,58 +283,58 @@ org.apache.mina:mina-core:2.1.6
|
||||
org.apache.sshd:sshd-core:2.0.0
|
||||
org.apache.sshd:sshd-scp:2.0.0
|
||||
org.apache.sshd:sshd-sftp:2.0.0
|
||||
org.apache.tomcat:tomcat-annotations-api:10.1.0-M14
|
||||
org.apache.tomcat:tomcat-annotations-api:10.1.0-M15
|
||||
org.bouncycastle:bcpg-jdk15on:1.67
|
||||
org.bouncycastle:bcpkix-jdk15on:1.67
|
||||
org.bouncycastle:bcprov-jdk15on:1.67
|
||||
org.checkerframework:checker-compat-qual:2.5.5
|
||||
org.checkerframework:checker-qual:3.21.4
|
||||
org.checkerframework:checker-qual:3.22.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.21
|
||||
org.conscrypt:conscrypt-openjdk-uber:2.5.1
|
||||
org.easymock:easymock:3.0
|
||||
org.flywaydb:flyway-core:8.5.10
|
||||
org.flywaydb:flyway-core:8.5.12
|
||||
org.glassfish.jaxb:jaxb-runtime:2.3.1
|
||||
org.glassfish.jaxb:txw2:2.3.1
|
||||
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.6.8.Final
|
||||
org.hibernate:hibernate-hikaricp:5.6.8.Final
|
||||
org.hibernate:hibernate-core:5.6.9.Final
|
||||
org.hibernate:hibernate-hikaricp:5.6.9.Final
|
||||
org.jboss.logging:jboss-logging:3.4.3.Final
|
||||
org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.1.1.Final
|
||||
org.jboss:jandex:2.4.2.Final
|
||||
org.jetbrains:annotations:17.0.0
|
||||
org.joda:joda-money:1.0.1
|
||||
org.json:json:20200518
|
||||
org.jsoup:jsoup:1.14.3
|
||||
org.junit-pioneer:junit-pioneer:1.7.0
|
||||
org.junit.jupiter:junit-jupiter-api:5.8.2
|
||||
org.junit.jupiter:junit-jupiter-engine:5.8.2
|
||||
org.junit.jupiter:junit-jupiter-migrationsupport:5.8.2
|
||||
org.junit.jupiter:junit-jupiter-params:5.8.2
|
||||
org.junit.platform:junit-platform-commons:1.8.2
|
||||
org.junit.platform:junit-platform-engine:1.8.2
|
||||
org.junit.platform:junit-platform-launcher:1.8.2
|
||||
org.junit.platform:junit-platform-runner:1.8.2
|
||||
org.junit.platform:junit-platform-suite-api:1.8.2
|
||||
org.junit.platform:junit-platform-suite-commons:1.8.2
|
||||
org.junit:junit-bom:5.8.2
|
||||
org.jsoup:jsoup:1.15.1
|
||||
org.junit-pioneer:junit-pioneer:1.7.1
|
||||
org.junit.jupiter:junit-jupiter-api:5.9.0-M1
|
||||
org.junit.jupiter:junit-jupiter-engine:5.9.0-M1
|
||||
org.junit.jupiter:junit-jupiter-migrationsupport:5.9.0-M1
|
||||
org.junit.jupiter:junit-jupiter-params:5.9.0-M1
|
||||
org.junit.platform:junit-platform-commons:1.9.0-M1
|
||||
org.junit.platform:junit-platform-engine:1.9.0-M1
|
||||
org.junit.platform:junit-platform-launcher:1.9.0-M1
|
||||
org.junit.platform:junit-platform-runner:1.9.0-M1
|
||||
org.junit.platform:junit-platform-suite-api:1.9.0-M1
|
||||
org.junit.platform:junit-platform-suite-commons:1.9.0-M1
|
||||
org.junit:junit-bom:5.9.0-M1
|
||||
org.jvnet.staxex:stax-ex:1.8
|
||||
org.mockito:mockito-core:4.5.1
|
||||
org.mockito:mockito-junit-jupiter:4.5.1
|
||||
org.mockito:mockito-core:4.6.1
|
||||
org.mockito:mockito-junit-jupiter:4.6.1
|
||||
org.mortbay.jetty:jetty-util:6.1.26
|
||||
org.mortbay.jetty:jetty:6.1.26
|
||||
org.objenesis:objenesis:3.2
|
||||
org.opentest4j:opentest4j:1.2.0
|
||||
org.ow2.asm:asm-analysis:9.2
|
||||
org.ow2.asm:asm-analysis:9.3
|
||||
org.ow2.asm:asm-commons:9.2
|
||||
org.ow2.asm:asm-tree:9.2
|
||||
org.ow2.asm:asm-util:9.2
|
||||
org.ow2.asm:asm:9.2
|
||||
org.postgresql:postgresql:42.3.4
|
||||
org.ow2.asm:asm-tree:9.3
|
||||
org.ow2.asm:asm-util:9.3
|
||||
org.ow2.asm:asm:9.3
|
||||
org.postgresql:postgresql:42.3.6
|
||||
org.rnorth.duct-tape:duct-tape:1.0.8
|
||||
org.seleniumhq.selenium:selenium-api:3.141.59
|
||||
org.seleniumhq.selenium:selenium-chrome-driver:3.141.59
|
||||
@@ -337,14 +350,15 @@ org.slf4j:jcl-over-slf4j:1.7.30
|
||||
org.slf4j:jul-to-slf4j:1.7.30
|
||||
org.slf4j:slf4j-api:2.0.0-alpha7
|
||||
org.slf4j:slf4j-jdk14:2.0.0-alpha7
|
||||
org.springframework:spring-core:4.3.18.RELEASE
|
||||
org.springframework:spring-expression:4.3.18.RELEASE
|
||||
org.testcontainers:database-commons:1.17.1
|
||||
org.testcontainers:jdbc:1.17.1
|
||||
org.testcontainers:junit-jupiter:1.17.1
|
||||
org.testcontainers:postgresql:1.17.1
|
||||
org.testcontainers:selenium:1.17.1
|
||||
org.testcontainers:testcontainers:1.17.1
|
||||
org.springframework:spring-core:5.3.18
|
||||
org.springframework:spring-expression:5.3.18
|
||||
org.springframework:spring-jcl:5.3.18
|
||||
org.testcontainers:database-commons:1.17.2
|
||||
org.testcontainers:jdbc:1.17.2
|
||||
org.testcontainers:junit-jupiter:1.17.2
|
||||
org.testcontainers:postgresql:1.17.2
|
||||
org.testcontainers:selenium:1.17.2
|
||||
org.testcontainers:testcontainers:1.17.2
|
||||
org.threeten:threetenbp:1.6.0
|
||||
org.tukaani:xz:1.5
|
||||
org.w3c.css:sac:1.3
|
||||
|
||||
@@ -21,7 +21,6 @@ import static google.registry.backup.ExportCommitLogDiffAction.UPPER_CHECKPOINT_
|
||||
import static google.registry.backup.RestoreCommitLogsAction.BUCKET_OVERRIDE_PARAM;
|
||||
import static google.registry.backup.RestoreCommitLogsAction.FROM_TIME_PARAM;
|
||||
import static google.registry.backup.RestoreCommitLogsAction.TO_TIME_PARAM;
|
||||
import static google.registry.backup.SyncDatastoreToSqlSnapshotAction.SQL_SNAPSHOT_ID_PARAM;
|
||||
import static google.registry.request.RequestParameters.extractOptionalParameter;
|
||||
import static google.registry.request.RequestParameters.extractRequiredDatetimeParameter;
|
||||
import static google.registry.request.RequestParameters.extractRequiredParameter;
|
||||
@@ -99,12 +98,6 @@ public final class BackupModule {
|
||||
return extractRequiredDatetimeParameter(req, TO_TIME_PARAM);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Parameter(SQL_SNAPSHOT_ID_PARAM)
|
||||
static String provideSqlSnapshotId(HttpServletRequest req) {
|
||||
return extractRequiredParameter(req, SQL_SNAPSHOT_ID_PARAM);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Backups
|
||||
static ListeningExecutorService provideListeningExecutorService() {
|
||||
|
||||
@@ -21,7 +21,6 @@ import com.google.storage.onestore.v3.OnestoreEntity.Path;
|
||||
import com.google.storage.onestore.v3.OnestoreEntity.Property.Meaning;
|
||||
import com.google.storage.onestore.v3.OnestoreEntity.PropertyValue.ReferenceValue;
|
||||
import google.registry.model.annotations.DeleteAfterMigration;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Objects;
|
||||
|
||||
/** Utilities for handling imported Datastore entities. */
|
||||
@@ -68,9 +67,7 @@ public class EntityImports {
|
||||
if (path.elementSize() == 0) {
|
||||
return false;
|
||||
}
|
||||
return Objects.equals(
|
||||
path.getElement(path.elementSize() - 1).getType(StandardCharsets.UTF_8),
|
||||
"CommitLogMutation");
|
||||
return Objects.equals(path.getElement(path.elementSize() - 1).getType(), "CommitLogMutation");
|
||||
}
|
||||
|
||||
private static void fixMutationEntityProtoBytes(EntityProto entityProto, String appId) {
|
||||
|
||||
@@ -1,321 +0,0 @@
|
||||
// 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.backup;
|
||||
|
||||
import static com.google.common.collect.ImmutableList.toImmutableList;
|
||||
import static google.registry.backup.ExportCommitLogDiffAction.DIFF_FILE_PREFIX;
|
||||
import static google.registry.backup.RestoreCommitLogsAction.DRY_RUN_PARAM;
|
||||
import static google.registry.model.ofy.EntityWritePriorities.getEntityPriority;
|
||||
import static google.registry.model.ofy.ObjectifyService.auditedOfy;
|
||||
import static google.registry.persistence.transaction.TransactionManagerFactory.jpaTm;
|
||||
import static google.registry.util.DateTimeUtils.isAtOrAfter;
|
||||
import static google.registry.util.DateTimeUtils.isBeforeOrAt;
|
||||
import static javax.servlet.http.HttpServletResponse.SC_NO_CONTENT;
|
||||
import static javax.servlet.http.HttpServletResponse.SC_OK;
|
||||
import static org.joda.time.Duration.standardHours;
|
||||
|
||||
import com.google.appengine.api.datastore.Entity;
|
||||
import com.google.appengine.api.datastore.Key;
|
||||
import com.google.cloud.storage.BlobInfo;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.flogger.FluentLogger;
|
||||
import google.registry.config.RegistryConfig.Config;
|
||||
import google.registry.gcs.GcsUtils;
|
||||
import google.registry.model.UpdateAutoTimestamp;
|
||||
import google.registry.model.annotations.DeleteAfterMigration;
|
||||
import google.registry.model.common.DatabaseMigrationStateSchedule;
|
||||
import google.registry.model.common.DatabaseMigrationStateSchedule.MigrationState;
|
||||
import google.registry.model.common.DatabaseMigrationStateSchedule.ReplayDirection;
|
||||
import google.registry.model.replay.DatastoreEntity;
|
||||
import google.registry.model.replay.DatastoreOnlyEntity;
|
||||
import google.registry.model.replay.NonReplicatedEntity;
|
||||
import google.registry.model.replay.ReplaySpecializer;
|
||||
import google.registry.model.replay.SqlReplayCheckpoint;
|
||||
import google.registry.model.server.Lock;
|
||||
import google.registry.model.translators.VKeyTranslatorFactory;
|
||||
import google.registry.persistence.VKey;
|
||||
import google.registry.request.Action;
|
||||
import google.registry.request.Action.Method;
|
||||
import google.registry.request.Parameter;
|
||||
import google.registry.request.Response;
|
||||
import google.registry.request.auth.Auth;
|
||||
import google.registry.util.Clock;
|
||||
import google.registry.util.RequestStatusChecker;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.Optional;
|
||||
import javax.inject.Inject;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import org.joda.time.DateTime;
|
||||
import org.joda.time.Duration;
|
||||
import org.joda.time.Seconds;
|
||||
|
||||
/** Action that replays commit logs to Cloud SQL to keep it up to date. */
|
||||
@Action(
|
||||
service = Action.Service.BACKEND,
|
||||
path = ReplayCommitLogsToSqlAction.PATH,
|
||||
method = Method.POST,
|
||||
automaticallyPrintOk = true,
|
||||
auth = Auth.AUTH_INTERNAL_OR_ADMIN)
|
||||
@DeleteAfterMigration
|
||||
public class ReplayCommitLogsToSqlAction implements Runnable {
|
||||
|
||||
static final String PATH = "/_dr/task/replayCommitLogsToSql";
|
||||
|
||||
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
|
||||
|
||||
public static final String REPLAY_TO_SQL_LOCK_NAME =
|
||||
ReplayCommitLogsToSqlAction.class.getSimpleName();
|
||||
|
||||
public static final Duration REPLAY_TO_SQL_LOCK_LEASE_LENGTH = standardHours(1);
|
||||
// Stop / pause where we are if we've been replaying for more than five minutes to avoid GAE
|
||||
// request timeouts
|
||||
private static final Duration REPLAY_TIMEOUT_DURATION = Duration.standardMinutes(5);
|
||||
|
||||
@Inject GcsUtils gcsUtils;
|
||||
@Inject Response response;
|
||||
@Inject RequestStatusChecker requestStatusChecker;
|
||||
@Inject GcsDiffFileLister diffLister;
|
||||
@Inject Clock clock;
|
||||
|
||||
@Inject
|
||||
@Config("commitLogGcsBucket")
|
||||
String gcsBucket;
|
||||
|
||||
/** If true, will exit after logging the commit log files that would otherwise be replayed. */
|
||||
@Inject
|
||||
@Parameter(DRY_RUN_PARAM)
|
||||
boolean dryRun;
|
||||
|
||||
@Inject
|
||||
ReplayCommitLogsToSqlAction() {}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
DateTime startTime = clock.nowUtc();
|
||||
MigrationState state = DatabaseMigrationStateSchedule.getValueAtTime(startTime);
|
||||
if (!state.getReplayDirection().equals(ReplayDirection.DATASTORE_TO_SQL)) {
|
||||
String message =
|
||||
String.format(
|
||||
"Skipping ReplayCommitLogsToSqlAction because we are in migration phase %s.", state);
|
||||
logger.atInfo().log(message);
|
||||
// App Engine will retry on any non-2xx status code, which we don't want in this case.
|
||||
response.setStatus(SC_NO_CONTENT);
|
||||
response.setPayload(message);
|
||||
return;
|
||||
}
|
||||
Optional<Lock> lock =
|
||||
Lock.acquireSql(
|
||||
REPLAY_TO_SQL_LOCK_NAME,
|
||||
null,
|
||||
REPLAY_TO_SQL_LOCK_LEASE_LENGTH,
|
||||
requestStatusChecker,
|
||||
false);
|
||||
if (!lock.isPresent()) {
|
||||
String message = "Can't acquire SQL commit log replay lock, aborting.";
|
||||
logger.atSevere().log(message);
|
||||
// App Engine will retry on any non-2xx status code, which we don't want in this case.
|
||||
// Let the next run after the next export happen naturally.
|
||||
response.setStatus(SC_NO_CONTENT);
|
||||
response.setPayload(message);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
logger.atInfo().log("Beginning replay of commit logs.");
|
||||
String resultMessage;
|
||||
if (dryRun) {
|
||||
resultMessage = executeDryRun();
|
||||
} else {
|
||||
resultMessage = replayFiles(startTime);
|
||||
}
|
||||
response.setStatus(SC_OK);
|
||||
response.setPayload(resultMessage);
|
||||
logger.atInfo().log(resultMessage);
|
||||
} catch (Throwable t) {
|
||||
String message = "Errored out replaying files.";
|
||||
logger.atSevere().withCause(t).log(message);
|
||||
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
|
||||
response.setPayload(message);
|
||||
} finally {
|
||||
lock.ifPresent(Lock::releaseSql);
|
||||
}
|
||||
}
|
||||
|
||||
private String executeDryRun() {
|
||||
// Start at the first millisecond we haven't seen yet
|
||||
DateTime searchStartTime = jpaTm().transact(() -> SqlReplayCheckpoint.get().plusMillis(1));
|
||||
// Search through the end of the hour
|
||||
DateTime searchEndTime =
|
||||
searchStartTime.withMinuteOfHour(59).withSecondOfMinute(59).withMillisOfSecond(999);
|
||||
ImmutableList<String> fileBatch =
|
||||
diffLister.listDiffFiles(gcsBucket, searchStartTime, searchEndTime).stream()
|
||||
.map(BlobInfo::getName)
|
||||
.collect(toImmutableList());
|
||||
return String.format(
|
||||
"Running in dry-run mode, the first set of commit log files processed would be from "
|
||||
+ "searching from %s to %s and would contain %d file(s). They are (limit 10): \n%s",
|
||||
searchStartTime,
|
||||
searchEndTime,
|
||||
fileBatch.size(),
|
||||
fileBatch.stream().limit(10).collect(toImmutableList()));
|
||||
}
|
||||
|
||||
private String replayFiles(DateTime startTime) {
|
||||
DateTime replayTimeoutTime = startTime.plus(REPLAY_TIMEOUT_DURATION);
|
||||
DateTime searchStartTime = jpaTm().transact(() -> SqlReplayCheckpoint.get().plusMillis(1));
|
||||
int filesProcessed = 0;
|
||||
int transactionsProcessed = 0;
|
||||
// Starting from one millisecond after the last file we processed, search for and import files
|
||||
// one hour at a time until we catch up to the current time or we hit the replay timeout (in
|
||||
// which case the next run will pick up from where we leave off).
|
||||
//
|
||||
// We use hour-long batches because GCS supports filename prefix-based searches.
|
||||
while (true) {
|
||||
if (isAtOrAfter(clock.nowUtc(), replayTimeoutTime)) {
|
||||
return createResponseString(
|
||||
"Reached max execution time", startTime, filesProcessed, transactionsProcessed);
|
||||
}
|
||||
if (isBeforeOrAt(clock.nowUtc(), searchStartTime)) {
|
||||
return createResponseString(
|
||||
"Caught up to current time", startTime, filesProcessed, transactionsProcessed);
|
||||
}
|
||||
// Search through the end of the hour
|
||||
DateTime searchEndTime =
|
||||
searchStartTime.withMinuteOfHour(59).withSecondOfMinute(59).withMillisOfSecond(999);
|
||||
ImmutableList<BlobInfo> fileBatch =
|
||||
diffLister.listDiffFiles(gcsBucket, searchStartTime, searchEndTime);
|
||||
if (fileBatch.isEmpty()) {
|
||||
logger.atInfo().log(
|
||||
"No remaining files found in hour %s, continuing search in the next hour.",
|
||||
searchStartTime.toString("yyyy-MM-dd HH"));
|
||||
}
|
||||
for (BlobInfo file : fileBatch) {
|
||||
transactionsProcessed += processFile(file);
|
||||
filesProcessed++;
|
||||
if (clock.nowUtc().isAfter(replayTimeoutTime)) {
|
||||
return createResponseString(
|
||||
"Reached max execution time", startTime, filesProcessed, transactionsProcessed);
|
||||
}
|
||||
}
|
||||
searchStartTime = searchEndTime.plusMillis(1);
|
||||
}
|
||||
}
|
||||
|
||||
private String createResponseString(
|
||||
String msg, DateTime startTime, int filesProcessed, int transactionsProcessed) {
|
||||
double tps =
|
||||
(double) transactionsProcessed
|
||||
/ (double) Seconds.secondsBetween(startTime, clock.nowUtc()).getSeconds();
|
||||
return String.format(
|
||||
"%s after replaying %d file(s) containing %d total transaction(s) (%.2f tx/s).",
|
||||
msg, filesProcessed, transactionsProcessed, tps);
|
||||
}
|
||||
|
||||
/**
|
||||
* Replays the commit logs in the given commit log file and returns the number of transactions
|
||||
* committed.
|
||||
*/
|
||||
private int processFile(BlobInfo metadata) {
|
||||
try (InputStream input = gcsUtils.openInputStream(metadata.getBlobId())) {
|
||||
// Load and process the Datastore transactions one at a time
|
||||
ImmutableList<ImmutableList<VersionedEntity>> allTransactions =
|
||||
CommitLogImports.loadEntitiesByTransaction(input);
|
||||
try (UpdateAutoTimestamp.DisableAutoUpdateResource disabler =
|
||||
UpdateAutoTimestamp.disableAutoUpdate()) {
|
||||
allTransactions.forEach(
|
||||
transaction -> jpaTm().transact(() -> replayTransaction(transaction)));
|
||||
}
|
||||
// if we succeeded, set the last-seen time
|
||||
DateTime checkpoint = DateTime.parse(metadata.getName().substring(DIFF_FILE_PREFIX.length()));
|
||||
jpaTm().transact(() -> SqlReplayCheckpoint.set(checkpoint));
|
||||
logger.atInfo().log(
|
||||
"Replayed %d transactions from commit log file %s with size %d B.",
|
||||
allTransactions.size(), metadata.getName(), metadata.getSize());
|
||||
return allTransactions.size();
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(
|
||||
"Errored out while replaying commit log file " + metadata.getName(), e);
|
||||
}
|
||||
}
|
||||
|
||||
private void replayTransaction(ImmutableList<VersionedEntity> transaction) {
|
||||
transaction.stream()
|
||||
.sorted(ReplayCommitLogsToSqlAction::compareByWeight)
|
||||
.forEach(
|
||||
versionedEntity -> {
|
||||
if (versionedEntity.getEntity().isPresent()) {
|
||||
handleEntityPut(versionedEntity.getEntity().get());
|
||||
} else {
|
||||
handleEntityDelete(versionedEntity);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void handleEntityPut(Entity entity) {
|
||||
Object ofyPojo = auditedOfy().toPojo(entity);
|
||||
try {
|
||||
if (ofyPojo instanceof DatastoreEntity) {
|
||||
DatastoreEntity datastoreEntity = (DatastoreEntity) ofyPojo;
|
||||
datastoreEntity
|
||||
.toSqlEntity()
|
||||
.ifPresent(
|
||||
sqlEntity -> {
|
||||
sqlEntity.beforeSqlSaveOnReplay();
|
||||
jpaTm().putIgnoringReadOnlyWithoutBackup(sqlEntity);
|
||||
});
|
||||
} else {
|
||||
// this should never happen, but we shouldn't fail on it
|
||||
logger.atSevere().log(
|
||||
"%s does not implement DatastoreEntity, which is necessary for SQL replay.",
|
||||
ofyPojo.getClass());
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
logger.atSevere().log("Error when replaying object %s.", ofyPojo);
|
||||
throw t;
|
||||
}
|
||||
}
|
||||
|
||||
private void handleEntityDelete(VersionedEntity entityToDelete) {
|
||||
Key key = entityToDelete.key();
|
||||
VKey<?> entityVKey;
|
||||
try {
|
||||
entityVKey = VKeyTranslatorFactory.createVKey(key);
|
||||
} catch (RuntimeException e) {
|
||||
// This means that the key wasn't convertible to VKey through the standard methods or via
|
||||
// a createVKey method. This means that the object isn't persisted in SQL so we ignore it.
|
||||
logger.atInfo().log(
|
||||
"Skipping SQL delete for kind %s since it is not convertible.", key.getKind());
|
||||
return;
|
||||
}
|
||||
try {
|
||||
Class<?> entityClass = entityVKey.getKind();
|
||||
// Delete the key iff the class represents a JPA entity that is replicated
|
||||
if (!NonReplicatedEntity.class.isAssignableFrom(entityClass)
|
||||
&& !DatastoreOnlyEntity.class.isAssignableFrom(entityClass)
|
||||
&& entityClass.getAnnotation(javax.persistence.Entity.class) != null) {
|
||||
ReplaySpecializer.beforeSqlDelete(entityVKey);
|
||||
jpaTm().deleteIgnoringReadOnlyWithoutBackup(entityVKey);
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
logger.atSevere().log("Error when deleting key %s.", entityVKey);
|
||||
throw t;
|
||||
}
|
||||
}
|
||||
|
||||
private static int compareByWeight(VersionedEntity a, VersionedEntity b) {
|
||||
return getEntityPriority(a.key().getKind(), !a.getEntity().isPresent())
|
||||
- getEntityPriority(b.key().getKind(), !b.getEntity().isPresent());
|
||||
}
|
||||
}
|
||||
@@ -1,187 +0,0 @@
|
||||
// Copyright 2022 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.backup;
|
||||
|
||||
import static javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
|
||||
import static javax.servlet.http.HttpServletResponse.SC_OK;
|
||||
|
||||
import com.google.common.flogger.FluentLogger;
|
||||
import google.registry.beam.comparedb.LatestDatastoreSnapshotFinder;
|
||||
import google.registry.config.RegistryConfig.Config;
|
||||
import google.registry.model.annotations.DeleteAfterMigration;
|
||||
import google.registry.model.ofy.CommitLogCheckpoint;
|
||||
import google.registry.model.replay.ReplicateToDatastoreAction;
|
||||
import google.registry.request.Action;
|
||||
import google.registry.request.Action.Service;
|
||||
import google.registry.request.Parameter;
|
||||
import google.registry.request.Response;
|
||||
import google.registry.request.auth.Auth;
|
||||
import google.registry.util.Sleeper;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.PrintStream;
|
||||
import java.util.Optional;
|
||||
import javax.inject.Inject;
|
||||
import org.joda.time.DateTime;
|
||||
import org.joda.time.Duration;
|
||||
|
||||
/**
|
||||
* Synchronizes Datastore to a given SQL snapshot when SQL is the primary database.
|
||||
*
|
||||
* <p>The caller takes the responsibility for:
|
||||
*
|
||||
* <ul>
|
||||
* <li>verifying the current migration stage
|
||||
* <li>acquiring the {@link ReplicateToDatastoreAction#REPLICATE_TO_DATASTORE_LOCK_NAME
|
||||
* replication lock}, and
|
||||
* <li>while holding the lock, creating an SQL snapshot and invoking this action with the snapshot
|
||||
* id
|
||||
* </ul>
|
||||
*
|
||||
* The caller may release the replication lock upon receiving the response from this action. Please
|
||||
* refer to {@link google.registry.tools.ValidateDatastoreCommand} for more information on usage.
|
||||
*
|
||||
* <p>This action plays SQL transactions up to the user-specified snapshot, creates a new CommitLog
|
||||
* checkpoint, and exports all CommitLogs to GCS up to this checkpoint. The timestamp of this
|
||||
* checkpoint can be used to recreate a Datastore snapshot that is equivalent to the given SQL
|
||||
* snapshot. If this action succeeds, the checkpoint timestamp is included in the response (the
|
||||
* format of which is defined by {@link #SUCCESS_RESPONSE_TEMPLATE}).
|
||||
*/
|
||||
@Action(
|
||||
service = Service.BACKEND,
|
||||
path = SyncDatastoreToSqlSnapshotAction.PATH,
|
||||
method = Action.Method.POST,
|
||||
auth = Auth.AUTH_INTERNAL_OR_ADMIN)
|
||||
@DeleteAfterMigration
|
||||
public class SyncDatastoreToSqlSnapshotAction implements Runnable {
|
||||
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
|
||||
|
||||
public static final String PATH = "/_dr/task/syncDatastoreToSqlSnapshot";
|
||||
|
||||
public static final String SUCCESS_RESPONSE_TEMPLATE =
|
||||
"Datastore is up-to-date with provided SQL snapshot (%s). CommitLog timestamp is (%s).";
|
||||
|
||||
static final String SQL_SNAPSHOT_ID_PARAM = "sqlSnapshotId";
|
||||
|
||||
private static final int COMMITLOGS_PRESENCE_CHECK_ATTEMPTS = 10;
|
||||
private static final Duration COMMITLOGS_PRESENCE_CHECK_DELAY = Duration.standardSeconds(6);
|
||||
|
||||
private final Response response;
|
||||
private final Sleeper sleeper;
|
||||
|
||||
@Config("commitLogGcsBucket")
|
||||
private final String gcsBucket;
|
||||
|
||||
private final GcsDiffFileLister gcsDiffFileLister;
|
||||
private final LatestDatastoreSnapshotFinder datastoreSnapshotFinder;
|
||||
private final CommitLogCheckpointAction commitLogCheckpointAction;
|
||||
private final String sqlSnapshotId;
|
||||
|
||||
@Inject
|
||||
SyncDatastoreToSqlSnapshotAction(
|
||||
Response response,
|
||||
Sleeper sleeper,
|
||||
@Config("commitLogGcsBucket") String gcsBucket,
|
||||
GcsDiffFileLister gcsDiffFileLister,
|
||||
LatestDatastoreSnapshotFinder datastoreSnapshotFinder,
|
||||
CommitLogCheckpointAction commitLogCheckpointAction,
|
||||
@Parameter(SQL_SNAPSHOT_ID_PARAM) String sqlSnapshotId) {
|
||||
this.response = response;
|
||||
this.sleeper = sleeper;
|
||||
this.gcsBucket = gcsBucket;
|
||||
this.gcsDiffFileLister = gcsDiffFileLister;
|
||||
this.datastoreSnapshotFinder = datastoreSnapshotFinder;
|
||||
this.commitLogCheckpointAction = commitLogCheckpointAction;
|
||||
this.sqlSnapshotId = sqlSnapshotId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
logger.atInfo().log("Datastore validation invoked. SqlSnapshotId is %s.", sqlSnapshotId);
|
||||
|
||||
try {
|
||||
CommitLogCheckpoint checkpoint = ensureDatabasesComparable(sqlSnapshotId);
|
||||
response.setStatus(SC_OK);
|
||||
response.setPayload(
|
||||
String.format(SUCCESS_RESPONSE_TEMPLATE, sqlSnapshotId, checkpoint.getCheckpointTime()));
|
||||
return;
|
||||
} catch (Throwable e) {
|
||||
logger.atSevere().withCause(e).log("Failed to sync Datastore to SQL.");
|
||||
response.setStatus(SC_INTERNAL_SERVER_ERROR);
|
||||
response.setPayload(getStackTrace(e));
|
||||
}
|
||||
}
|
||||
|
||||
private static String getStackTrace(Throwable e) {
|
||||
try {
|
||||
ByteArrayOutputStream bis = new ByteArrayOutputStream();
|
||||
PrintStream printStream = new PrintStream(bis);
|
||||
e.printStackTrace(printStream);
|
||||
printStream.close();
|
||||
return bis.toString();
|
||||
} catch (RuntimeException re) {
|
||||
return re.getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
private CommitLogCheckpoint ensureDatabasesComparable(String sqlSnapshotId) {
|
||||
// Replicate SQL transaction to Datastore, up to when this snapshot is taken.
|
||||
int playbacks = ReplicateToDatastoreAction.replayAllTransactions(Optional.of(sqlSnapshotId));
|
||||
logger.atInfo().log("Played %s SQL transactions.", playbacks);
|
||||
|
||||
Optional<CommitLogCheckpoint> checkpoint = exportCommitLogs();
|
||||
if (!checkpoint.isPresent()) {
|
||||
throw new RuntimeException("Cannot create CommitLog checkpoint");
|
||||
}
|
||||
logger.atInfo().log(
|
||||
"CommitLog checkpoint created at %s.", checkpoint.get().getCheckpointTime());
|
||||
verifyCommitLogsPersisted(checkpoint.get());
|
||||
return checkpoint.get();
|
||||
}
|
||||
|
||||
private Optional<CommitLogCheckpoint> exportCommitLogs() {
|
||||
// Trigger an async CommitLog export to GCS. Will check file availability later.
|
||||
// Although we can add support to synchronous execution, it can disrupt the export cadence
|
||||
// when the system is busy
|
||||
Optional<CommitLogCheckpoint> checkpoint =
|
||||
commitLogCheckpointAction.createCheckPointAndStartAsyncExport();
|
||||
|
||||
// Failure to create checkpoint most likely caused by race with cron-triggered checkpointing.
|
||||
// Retry once.
|
||||
if (!checkpoint.isPresent()) {
|
||||
commitLogCheckpointAction.createCheckPointAndStartAsyncExport();
|
||||
}
|
||||
return checkpoint;
|
||||
}
|
||||
|
||||
private void verifyCommitLogsPersisted(CommitLogCheckpoint checkpoint) {
|
||||
DateTime exportStartTime =
|
||||
datastoreSnapshotFinder
|
||||
.getSnapshotInfo(checkpoint.getCheckpointTime().toInstant())
|
||||
.exportInterval()
|
||||
.getStart();
|
||||
logger.atInfo().log("Found Datastore export at %s", exportStartTime);
|
||||
for (int attempts = 0; attempts < COMMITLOGS_PRESENCE_CHECK_ATTEMPTS; attempts++) {
|
||||
try {
|
||||
gcsDiffFileLister.listDiffFiles(gcsBucket, exportStartTime, checkpoint.getCheckpointTime());
|
||||
return;
|
||||
} catch (IllegalStateException e) {
|
||||
// Gap in commitlog files. Fall through to sleep and retry.
|
||||
logger.atInfo().log("Commitlog files not yet found on GCS.");
|
||||
}
|
||||
sleeper.sleepInterruptibly(COMMITLOGS_PRESENCE_CHECK_DELAY);
|
||||
}
|
||||
throw new RuntimeException("Cannot find all commitlog files.");
|
||||
}
|
||||
}
|
||||
@@ -1,621 +0,0 @@
|
||||
// Copyright 2017 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.batch;
|
||||
|
||||
import static com.google.appengine.api.taskqueue.QueueConstants.maxLeaseCount;
|
||||
import static com.google.appengine.api.taskqueue.QueueFactory.getQueue;
|
||||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
import static com.google.common.base.Preconditions.checkState;
|
||||
import static com.google.common.collect.ImmutableList.toImmutableList;
|
||||
import static com.google.common.math.IntMath.divide;
|
||||
import static com.googlecode.objectify.Key.getKind;
|
||||
import static google.registry.batch.AsyncTaskEnqueuer.PARAM_CLIENT_TRANSACTION_ID;
|
||||
import static google.registry.batch.AsyncTaskEnqueuer.PARAM_IS_SUPERUSER;
|
||||
import static google.registry.batch.AsyncTaskEnqueuer.PARAM_REQUESTED_TIME;
|
||||
import static google.registry.batch.AsyncTaskEnqueuer.PARAM_REQUESTING_CLIENT_ID;
|
||||
import static google.registry.batch.AsyncTaskEnqueuer.PARAM_RESOURCE_KEY;
|
||||
import static google.registry.batch.AsyncTaskEnqueuer.PARAM_SERVER_TRANSACTION_ID;
|
||||
import static google.registry.batch.AsyncTaskEnqueuer.QUEUE_ASYNC_DELETE;
|
||||
import static google.registry.model.EppResourceUtils.isActive;
|
||||
import static google.registry.model.EppResourceUtils.isDeleted;
|
||||
import static google.registry.model.ResourceTransferUtils.denyPendingTransfer;
|
||||
import static google.registry.model.ResourceTransferUtils.handlePendingTransferOnDelete;
|
||||
import static google.registry.model.ResourceTransferUtils.updateForeignKeyIndexDeletionTime;
|
||||
import static google.registry.model.eppcommon.StatusValue.PENDING_DELETE;
|
||||
import static google.registry.model.ofy.ObjectifyService.auditedOfy;
|
||||
import static google.registry.model.reporting.HistoryEntry.Type.CONTACT_DELETE;
|
||||
import static google.registry.model.reporting.HistoryEntry.Type.CONTACT_DELETE_FAILURE;
|
||||
import static google.registry.model.reporting.HistoryEntry.Type.HOST_DELETE;
|
||||
import static google.registry.model.reporting.HistoryEntry.Type.HOST_DELETE_FAILURE;
|
||||
import static google.registry.model.transfer.TransferStatus.SERVER_CANCELLED;
|
||||
import static google.registry.persistence.transaction.TransactionManagerFactory.tm;
|
||||
import static java.math.RoundingMode.CEILING;
|
||||
import static java.util.concurrent.TimeUnit.DAYS;
|
||||
import static java.util.concurrent.TimeUnit.SECONDS;
|
||||
import static java.util.logging.Level.INFO;
|
||||
import static java.util.logging.Level.SEVERE;
|
||||
import static org.joda.time.Duration.standardHours;
|
||||
|
||||
import com.google.appengine.api.taskqueue.LeaseOptions;
|
||||
import com.google.appengine.api.taskqueue.Queue;
|
||||
import com.google.appengine.api.taskqueue.TaskHandle;
|
||||
import com.google.appengine.api.taskqueue.TransientFailureException;
|
||||
import com.google.appengine.tools.mapreduce.Mapper;
|
||||
import com.google.appengine.tools.mapreduce.Reducer;
|
||||
import com.google.appengine.tools.mapreduce.ReducerInput;
|
||||
import com.google.auto.value.AutoValue;
|
||||
import com.google.common.collect.HashMultiset;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.Iterators;
|
||||
import com.google.common.collect.Multiset;
|
||||
import com.google.common.flogger.FluentLogger;
|
||||
import com.googlecode.objectify.Key;
|
||||
import google.registry.batch.AsyncTaskMetrics.OperationResult;
|
||||
import google.registry.batch.AsyncTaskMetrics.OperationType;
|
||||
import google.registry.batch.DeleteContactsAndHostsAction.DeletionResult.Type;
|
||||
import google.registry.dns.DnsQueue;
|
||||
import google.registry.mapreduce.MapreduceRunner;
|
||||
import google.registry.mapreduce.UnlockerOutput;
|
||||
import google.registry.mapreduce.inputs.EppResourceInputs;
|
||||
import google.registry.mapreduce.inputs.NullInput;
|
||||
import google.registry.model.EppResource;
|
||||
import google.registry.model.ImmutableObject;
|
||||
import google.registry.model.annotations.DeleteAfterMigration;
|
||||
import google.registry.model.annotations.ExternalMessagingName;
|
||||
import google.registry.model.contact.ContactResource;
|
||||
import google.registry.model.domain.DomainBase;
|
||||
import google.registry.model.eppcommon.StatusValue;
|
||||
import google.registry.model.eppcommon.Trid;
|
||||
import google.registry.model.eppoutput.EppResponse.ResponseData;
|
||||
import google.registry.model.host.HostResource;
|
||||
import google.registry.model.poll.PendingActionNotificationResponse.ContactPendingActionNotificationResponse;
|
||||
import google.registry.model.poll.PendingActionNotificationResponse.HostPendingActionNotificationResponse;
|
||||
import google.registry.model.poll.PollMessage;
|
||||
import google.registry.model.reporting.HistoryEntry;
|
||||
import google.registry.model.server.Lock;
|
||||
import google.registry.persistence.VKey;
|
||||
import google.registry.request.Action;
|
||||
import google.registry.request.Response;
|
||||
import google.registry.request.auth.Auth;
|
||||
import google.registry.util.Clock;
|
||||
import google.registry.util.NonFinalForTesting;
|
||||
import google.registry.util.RequestStatusChecker;
|
||||
import google.registry.util.Retrier;
|
||||
import google.registry.util.SystemClock;
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.logging.Level;
|
||||
import javax.annotation.Nullable;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
import org.joda.time.DateTime;
|
||||
import org.joda.time.Duration;
|
||||
|
||||
/**
|
||||
* A mapreduce that processes batch asynchronous deletions of contact and host resources by mapping
|
||||
* over all domains and checking for any references to the contacts/hosts in pending deletion.
|
||||
*/
|
||||
@Deprecated
|
||||
@Action(
|
||||
service = Action.Service.BACKEND,
|
||||
path = "/_dr/task/deleteContactsAndHosts",
|
||||
auth = Auth.AUTH_INTERNAL_OR_ADMIN)
|
||||
@DeleteAfterMigration
|
||||
public class DeleteContactsAndHostsAction implements Runnable {
|
||||
|
||||
static final String KIND_CONTACT = getKind(ContactResource.class);
|
||||
static final String KIND_HOST = getKind(HostResource.class);
|
||||
|
||||
private static final Duration LEASE_LENGTH = standardHours(4);
|
||||
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
|
||||
private static final int MAX_REDUCE_SHARDS = 50;
|
||||
private static final int DELETES_PER_SHARD = 5;
|
||||
|
||||
@Inject AsyncTaskMetrics asyncTaskMetrics;
|
||||
@Inject Clock clock;
|
||||
@Inject MapreduceRunner mrRunner;
|
||||
@Inject @Named(QUEUE_ASYNC_DELETE) Queue queue;
|
||||
@Inject RequestStatusChecker requestStatusChecker;
|
||||
@Inject Response response;
|
||||
@Inject Retrier retrier;
|
||||
@Inject DeleteContactsAndHostsAction() {}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
// Check if the lock can be acquired, and if not, a previous run of this mapreduce is still
|
||||
// executing, so return early.
|
||||
Optional<Lock> lock =
|
||||
Lock.acquire(
|
||||
DeleteContactsAndHostsAction.class.getSimpleName(),
|
||||
null,
|
||||
LEASE_LENGTH,
|
||||
requestStatusChecker,
|
||||
false);
|
||||
if (!lock.isPresent()) {
|
||||
logRespondAndUnlock(INFO, "Can't acquire lock; aborting.", lock);
|
||||
return;
|
||||
}
|
||||
|
||||
// Lease the async tasks to process.
|
||||
LeaseOptions options =
|
||||
LeaseOptions.Builder.withCountLimit(maxLeaseCount())
|
||||
.leasePeriod(LEASE_LENGTH.getStandardSeconds(), SECONDS);
|
||||
List<TaskHandle> tasks = queue.leaseTasks(options);
|
||||
asyncTaskMetrics.recordContactHostDeletionBatchSize(tasks.size());
|
||||
|
||||
// Check if there are no tasks to process, and if so, return early.
|
||||
if (tasks.isEmpty()) {
|
||||
logRespondAndUnlock(INFO, "No contact/host deletion tasks in pull queue; finishing.", lock);
|
||||
return;
|
||||
}
|
||||
|
||||
Multiset<String> kindCounts = HashMultiset.create(2);
|
||||
ImmutableList.Builder<DeletionRequest> builder = new ImmutableList.Builder<>();
|
||||
ImmutableList.Builder<Key<? extends EppResource>> resourceKeys = new ImmutableList.Builder<>();
|
||||
final List<DeletionRequest> requestsToDelete = new ArrayList<>();
|
||||
for (TaskHandle task : tasks) {
|
||||
try {
|
||||
DeletionRequest deletionRequest = DeletionRequest.createFromTask(task, clock.nowUtc());
|
||||
if (deletionRequest.isDeletionAllowed()) {
|
||||
builder.add(deletionRequest);
|
||||
resourceKeys.add(deletionRequest.key());
|
||||
kindCounts.add(deletionRequest.key().getKind());
|
||||
} else {
|
||||
requestsToDelete.add(deletionRequest);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.atSevere().withCause(e).log(
|
||||
"Could not parse async deletion request, delaying task for a day: %s", task);
|
||||
// Grab the lease for a whole day, so that it won't continue throwing errors every five
|
||||
// minutes.
|
||||
queue.modifyTaskLease(task, 1L, DAYS);
|
||||
}
|
||||
}
|
||||
deleteStaleTasksWithRetry(requestsToDelete);
|
||||
ImmutableList<DeletionRequest> deletionRequests = builder.build();
|
||||
if (deletionRequests.isEmpty()) {
|
||||
logRespondAndUnlock(
|
||||
INFO, "No async deletions to process because all were already handled.", lock);
|
||||
} else {
|
||||
logger.atInfo().log(
|
||||
"Processing asynchronous deletion of %d contacts and %d hosts: %s",
|
||||
kindCounts.count(KIND_CONTACT), kindCounts.count(KIND_HOST), resourceKeys.build());
|
||||
runMapreduce(deletionRequests, lock);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes a list of tasks associated with deletion requests from the async delete queue using a
|
||||
* retrier.
|
||||
*/
|
||||
private void deleteStaleTasksWithRetry(final List<DeletionRequest> deletionRequests) {
|
||||
if (deletionRequests.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
final List<TaskHandle> tasks =
|
||||
deletionRequests.stream().map(DeletionRequest::task).collect(toImmutableList());
|
||||
retrier.callWithRetry(() -> queue.deleteTask(tasks), TransientFailureException.class);
|
||||
deletionRequests.forEach(
|
||||
deletionRequest ->
|
||||
asyncTaskMetrics.recordAsyncFlowResult(
|
||||
deletionRequest.getMetricOperationType(),
|
||||
OperationResult.STALE,
|
||||
deletionRequest.requestedTime()));
|
||||
}
|
||||
|
||||
private void runMapreduce(ImmutableList<DeletionRequest> deletionRequests, Optional<Lock> lock) {
|
||||
try {
|
||||
int numReducers =
|
||||
Math.min(MAX_REDUCE_SHARDS, divide(deletionRequests.size(), DELETES_PER_SHARD, CEILING));
|
||||
mrRunner
|
||||
.setJobName("Check for EPP resource references and then delete")
|
||||
.setModuleName("backend")
|
||||
.setDefaultReduceShards(numReducers)
|
||||
.runMapreduce(
|
||||
new DeleteContactsAndHostsMapper(deletionRequests),
|
||||
new DeleteEppResourceReducer(),
|
||||
ImmutableList.of(
|
||||
// Add an extra shard that maps over a null domain. See the mapper code for why.
|
||||
new NullInput<>(), EppResourceInputs.createEntityInput(DomainBase.class)),
|
||||
new UnlockerOutput<Void>(lock.get()))
|
||||
.sendLinkToMapreduceConsole(response);
|
||||
} catch (Throwable t) {
|
||||
logRespondAndUnlock(SEVERE, "Error starting mapreduce to delete contacts/hosts.", lock);
|
||||
}
|
||||
}
|
||||
|
||||
private void logRespondAndUnlock(Level level, String message, Optional<Lock> lock) {
|
||||
logger.at(level).log(message);
|
||||
response.setPayload(message);
|
||||
lock.ifPresent(Lock::release);
|
||||
}
|
||||
|
||||
/**
|
||||
* A mapper that iterates over all {@link DomainBase} entities.
|
||||
*
|
||||
* <p>It emits the target key and {@code true} for domains referencing the target resource. For
|
||||
* the special input of {@code null} it emits the target key and {@code false}.
|
||||
*/
|
||||
public static class DeleteContactsAndHostsMapper
|
||||
extends Mapper<DomainBase, DeletionRequest, Boolean> {
|
||||
|
||||
private static final long serialVersionUID = -253652818502690537L;
|
||||
|
||||
private final ImmutableList<DeletionRequest> deletionRequests;
|
||||
|
||||
DeleteContactsAndHostsMapper(ImmutableList<DeletionRequest> resourcesToDelete) {
|
||||
this.deletionRequests = resourcesToDelete;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void map(DomainBase domain) {
|
||||
for (DeletionRequest deletionRequest : deletionRequests) {
|
||||
if (domain == null) {
|
||||
// The reducer only runs if at least one value is emitted. We add a null input to the
|
||||
// mapreduce and emit one 'false' for each deletion request so that the reducer always
|
||||
// runs for each requested deletion (so that it can finish up tasks if nothing else).
|
||||
emit(deletionRequest, false);
|
||||
} else if (isActive(domain, deletionRequest.lastUpdateTime())
|
||||
&& isLinked(domain, deletionRequest.key())) {
|
||||
emit(deletionRequest, true);
|
||||
getContext()
|
||||
.incrementCounter(
|
||||
String.format("active Domain-%s links found", deletionRequest.key().getKind()));
|
||||
}
|
||||
}
|
||||
if (domain != null) {
|
||||
getContext().incrementCounter("domains processed");
|
||||
}
|
||||
}
|
||||
|
||||
/** Determine whether the target resource is a linked resource on the domain. */
|
||||
private boolean isLinked(DomainBase domain, Key<? extends EppResource> resourceKey) {
|
||||
if (resourceKey.getKind().equals(KIND_CONTACT)) {
|
||||
return domain
|
||||
.getReferencedContacts()
|
||||
.contains(VKey.from((Key<ContactResource>) resourceKey));
|
||||
} else if (resourceKey.getKind().equals(KIND_HOST)) {
|
||||
return domain.getNameservers().contains(VKey.from((Key<HostResource>) resourceKey));
|
||||
} else {
|
||||
throw new IllegalStateException("EPP resource key of unknown type: " + resourceKey);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A reducer that checks if the EPP resource to be deleted is referenced anywhere, and then
|
||||
* deletes it if not and unmarks it for deletion if so.
|
||||
*/
|
||||
public static class DeleteEppResourceReducer
|
||||
extends Reducer<DeletionRequest, Boolean, Void> {
|
||||
|
||||
private static final long serialVersionUID = 6569363449285506326L;
|
||||
private static final DnsQueue dnsQueue = DnsQueue.create();
|
||||
|
||||
@NonFinalForTesting
|
||||
private static AsyncTaskMetrics asyncTaskMetrics = new AsyncTaskMetrics(new SystemClock());
|
||||
|
||||
@Override
|
||||
public void reduce(final DeletionRequest deletionRequest, ReducerInput<Boolean> values) {
|
||||
final boolean hasNoActiveReferences = !Iterators.contains(values, true);
|
||||
logger.atInfo().log("Processing async deletion request for %s.", deletionRequest.key());
|
||||
DeletionResult result =
|
||||
tm()
|
||||
.transactNew(
|
||||
() -> {
|
||||
DeletionResult deletionResult =
|
||||
attemptToDeleteResource(deletionRequest, hasNoActiveReferences);
|
||||
getQueue(QUEUE_ASYNC_DELETE).deleteTask(deletionRequest.task());
|
||||
return deletionResult;
|
||||
});
|
||||
asyncTaskMetrics.recordAsyncFlowResult(
|
||||
deletionRequest.getMetricOperationType(),
|
||||
result.getMetricOperationResult(),
|
||||
deletionRequest.requestedTime());
|
||||
String resourceNamePlural = deletionRequest.key().getKind() + "s";
|
||||
getContext().incrementCounter(result.type().renderCounterText(resourceNamePlural));
|
||||
logger.atInfo().log(
|
||||
"Result of async deletion for resource %s: %s",
|
||||
deletionRequest.key(), result.pollMessageText());
|
||||
}
|
||||
|
||||
private DeletionResult attemptToDeleteResource(
|
||||
DeletionRequest deletionRequest, boolean hasNoActiveReferences) {
|
||||
DateTime now = tm().getTransactionTime();
|
||||
EppResource resource =
|
||||
auditedOfy().load().key(deletionRequest.key()).now().cloneProjectedAtTime(now);
|
||||
// Double-check transactionally that the resource is still active and in PENDING_DELETE.
|
||||
if (!doesResourceStateAllowDeletion(resource, now)) {
|
||||
return DeletionResult.create(Type.ERRORED, "");
|
||||
}
|
||||
// Contacts and external hosts have a direct client id. For subordinate hosts it needs to be
|
||||
// read off of the superordinate domain.
|
||||
String resourceRegistrarId = resource.getPersistedCurrentSponsorRegistrarId();
|
||||
if (resource instanceof HostResource && ((HostResource) resource).isSubordinate()) {
|
||||
resourceRegistrarId =
|
||||
tm().loadByKey(((HostResource) resource).getSuperordinateDomain())
|
||||
.cloneProjectedAtTime(now)
|
||||
.getCurrentSponsorRegistrarId();
|
||||
}
|
||||
boolean requestedByCurrentOwner =
|
||||
resourceRegistrarId.equals(deletionRequest.requestingClientId());
|
||||
|
||||
boolean deleteAllowed =
|
||||
hasNoActiveReferences && (requestedByCurrentOwner || deletionRequest.isSuperuser());
|
||||
|
||||
String resourceTypeName =
|
||||
resource.getClass().getAnnotation(ExternalMessagingName.class).value();
|
||||
String pollMessageText =
|
||||
deleteAllowed
|
||||
? String.format("Deleted %s %s.", resourceTypeName, resource.getForeignKey())
|
||||
: String.format(
|
||||
"Can't delete %s %s because %s.",
|
||||
resourceTypeName,
|
||||
resource.getForeignKey(),
|
||||
requestedByCurrentOwner
|
||||
? "it is referenced by a domain"
|
||||
: "it was transferred prior to deletion");
|
||||
|
||||
HistoryEntry historyEntry =
|
||||
HistoryEntry.createBuilderForResource(resource)
|
||||
.setRegistrarId(deletionRequest.requestingClientId())
|
||||
.setModificationTime(now)
|
||||
.setType(getHistoryEntryType(resource, deleteAllowed))
|
||||
.build();
|
||||
|
||||
PollMessage.OneTime pollMessage =
|
||||
new PollMessage.OneTime.Builder()
|
||||
.setRegistrarId(deletionRequest.requestingClientId())
|
||||
.setMsg(pollMessageText)
|
||||
.setParent(historyEntry)
|
||||
.setEventTime(now)
|
||||
.setResponseData(
|
||||
getPollMessageResponseData(deletionRequest, resource, deleteAllowed, now))
|
||||
.build();
|
||||
|
||||
EppResource resourceToSave;
|
||||
if (deleteAllowed) {
|
||||
EppResource.Builder<?, ?> resourceToSaveBuilder;
|
||||
if (resource instanceof ContactResource) {
|
||||
ContactResource contact = (ContactResource) resource;
|
||||
// Handle pending transfers on contact deletion.
|
||||
if (contact.getStatusValues().contains(StatusValue.PENDING_TRANSFER)) {
|
||||
contact =
|
||||
denyPendingTransfer(
|
||||
contact, SERVER_CANCELLED, now, deletionRequest.requestingClientId());
|
||||
}
|
||||
// Wipe out PII on contact deletion.
|
||||
resourceToSaveBuilder = contact.asBuilder().wipeOut();
|
||||
} else {
|
||||
resourceToSaveBuilder = resource.asBuilder();
|
||||
}
|
||||
resourceToSave = resourceToSaveBuilder.setDeletionTime(now).setStatusValues(null).build();
|
||||
performDeleteTasks(resource, resourceToSave, now, historyEntry);
|
||||
updateForeignKeyIndexDeletionTime(resourceToSave);
|
||||
} else {
|
||||
resourceToSave = resource.asBuilder().removeStatusValue(PENDING_DELETE).build();
|
||||
}
|
||||
auditedOfy()
|
||||
.save()
|
||||
.<ImmutableObject>entities(resourceToSave, historyEntry.asHistoryEntry(), pollMessage);
|
||||
return DeletionResult.create(
|
||||
deleteAllowed ? Type.DELETED : Type.NOT_DELETED, pollMessageText);
|
||||
}
|
||||
|
||||
private static ImmutableList<? extends ResponseData> getPollMessageResponseData(
|
||||
DeletionRequest deletionRequest,
|
||||
EppResource resource,
|
||||
boolean deleteAllowed,
|
||||
DateTime now) {
|
||||
@Nullable String clientTransactionId = deletionRequest.clientTransactionId();
|
||||
String serverTransactionId = deletionRequest.serverTransactionId();
|
||||
Trid trid = Trid.create(clientTransactionId, serverTransactionId);
|
||||
if (resource instanceof HostResource) {
|
||||
return ImmutableList.of(
|
||||
HostPendingActionNotificationResponse.create(
|
||||
((HostResource) resource).getHostName(), deleteAllowed, trid, now));
|
||||
} else if (resource instanceof ContactResource) {
|
||||
return ImmutableList.of(
|
||||
ContactPendingActionNotificationResponse.create(
|
||||
((ContactResource) resource).getContactId(), deleteAllowed, trid, now));
|
||||
} else {
|
||||
throw new IllegalStateException("EPP resource of unknown type " + Key.create(resource));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine the proper history entry type for the delete operation, as a function of
|
||||
* whether or not the delete was successful.
|
||||
*/
|
||||
private HistoryEntry.Type getHistoryEntryType(EppResource resource, boolean successfulDelete) {
|
||||
if (resource instanceof ContactResource) {
|
||||
return successfulDelete ? CONTACT_DELETE : CONTACT_DELETE_FAILURE;
|
||||
} else if (resource instanceof HostResource) {
|
||||
return successfulDelete ? HOST_DELETE : HOST_DELETE_FAILURE;
|
||||
} else {
|
||||
throw new IllegalStateException("EPP resource of unknown type: " + Key.create(resource));
|
||||
}
|
||||
}
|
||||
|
||||
/** Perform any type-specific tasks on the resource to be deleted (and/or its dependencies). */
|
||||
private void performDeleteTasks(
|
||||
EppResource existingResource,
|
||||
EppResource deletedResource,
|
||||
DateTime deletionTime,
|
||||
HistoryEntry historyEntryForDelete) {
|
||||
if (existingResource instanceof ContactResource) {
|
||||
handlePendingTransferOnDelete(
|
||||
(ContactResource) existingResource,
|
||||
(ContactResource) deletedResource,
|
||||
deletionTime,
|
||||
historyEntryForDelete);
|
||||
} else if (existingResource instanceof HostResource) {
|
||||
HostResource host = (HostResource) existingResource;
|
||||
if (host.isSubordinate()) {
|
||||
dnsQueue.addHostRefreshTask(host.getHostName());
|
||||
tm().put(
|
||||
tm().loadByKey(host.getSuperordinateDomain())
|
||||
.asBuilder()
|
||||
.removeSubordinateHost(host.getHostName())
|
||||
.build());
|
||||
}
|
||||
} else {
|
||||
throw new IllegalStateException(
|
||||
"EPP resource of unknown type: " + Key.create(existingResource));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** A class that encapsulates the values of a request to delete a contact or host. */
|
||||
@AutoValue
|
||||
abstract static class DeletionRequest implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = -4612618525760839240L;
|
||||
|
||||
abstract Key<? extends EppResource> key();
|
||||
abstract DateTime lastUpdateTime();
|
||||
|
||||
/**
|
||||
* The client id of the registrar that requested this deletion (which might NOT be the same as
|
||||
* the actual current owner of the resource).
|
||||
*/
|
||||
abstract String requestingClientId();
|
||||
|
||||
/** First half of TRID for the original request, split for serializability. */
|
||||
@Nullable
|
||||
abstract String clientTransactionId();
|
||||
|
||||
/** Second half of TRID for the original request, split for serializability. */
|
||||
abstract String serverTransactionId();
|
||||
|
||||
abstract boolean isSuperuser();
|
||||
abstract DateTime requestedTime();
|
||||
abstract boolean isDeletionAllowed();
|
||||
abstract TaskHandle task();
|
||||
|
||||
@AutoValue.Builder
|
||||
abstract static class Builder {
|
||||
abstract Builder setKey(Key<? extends EppResource> key);
|
||||
abstract Builder setLastUpdateTime(DateTime lastUpdateTime);
|
||||
abstract Builder setRequestingClientId(String requestingClientId);
|
||||
abstract Builder setClientTransactionId(@Nullable String clientTransactionId);
|
||||
abstract Builder setServerTransactionId(String serverTransactionId);
|
||||
abstract Builder setIsSuperuser(boolean isSuperuser);
|
||||
abstract Builder setRequestedTime(DateTime requestedTime);
|
||||
abstract Builder setIsDeletionAllowed(boolean isDeletionAllowed);
|
||||
abstract Builder setTask(TaskHandle task);
|
||||
abstract DeletionRequest build();
|
||||
}
|
||||
|
||||
static DeletionRequest createFromTask(TaskHandle task, DateTime now)
|
||||
throws Exception {
|
||||
ImmutableMap<String, String> params = ImmutableMap.copyOf(task.extractParams());
|
||||
VKey<EppResource> resourceKey =
|
||||
VKey.create(
|
||||
checkNotNull(params.get(PARAM_RESOURCE_KEY), "Resource to delete not specified"));
|
||||
EppResource resource =
|
||||
checkNotNull(
|
||||
auditedOfy().load().key(resourceKey.getOfyKey()).now(),
|
||||
"Resource to delete doesn't exist");
|
||||
checkState(
|
||||
resource instanceof ContactResource || resource instanceof HostResource,
|
||||
"Cannot delete a %s via this action",
|
||||
resource.getClass().getSimpleName());
|
||||
return new AutoValue_DeleteContactsAndHostsAction_DeletionRequest.Builder()
|
||||
.setKey(resourceKey.getOfyKey())
|
||||
.setLastUpdateTime(resource.getUpdateTimestamp().getTimestamp())
|
||||
.setRequestingClientId(
|
||||
checkNotNull(
|
||||
params.get(PARAM_REQUESTING_CLIENT_ID), "Requesting client id not specified"))
|
||||
// Note that client transaction ID is optional, in which case this sets it to null.
|
||||
.setClientTransactionId(params.get(PARAM_CLIENT_TRANSACTION_ID))
|
||||
.setServerTransactionId(
|
||||
checkNotNull(
|
||||
params.get(PARAM_SERVER_TRANSACTION_ID), "Server transaction id not specified"))
|
||||
.setIsSuperuser(
|
||||
Boolean.parseBoolean(
|
||||
checkNotNull(params.get(PARAM_IS_SUPERUSER), "Is superuser not specified")))
|
||||
.setRequestedTime(
|
||||
DateTime.parse(
|
||||
checkNotNull(params.get(PARAM_REQUESTED_TIME), "Requested time not specified")))
|
||||
.setIsDeletionAllowed(doesResourceStateAllowDeletion(resource, now))
|
||||
.setTask(task)
|
||||
.build();
|
||||
}
|
||||
|
||||
OperationType getMetricOperationType() {
|
||||
if (key().getKind().equals(KIND_CONTACT)) {
|
||||
return OperationType.CONTACT_DELETE;
|
||||
} else if (key().getKind().equals(KIND_HOST)) {
|
||||
return OperationType.HOST_DELETE;
|
||||
} else {
|
||||
throw new IllegalStateException(
|
||||
String.format(
|
||||
"Cannot determine async operation type for metric for resource %s", key()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** A class that encapsulates the values resulting from attempted contact/host deletion. */
|
||||
@AutoValue
|
||||
abstract static class DeletionResult {
|
||||
|
||||
enum Type {
|
||||
DELETED("%s deleted", OperationResult.SUCCESS),
|
||||
NOT_DELETED("%s not deleted", OperationResult.FAILURE),
|
||||
ERRORED("%s errored out during deletion", OperationResult.ERROR);
|
||||
|
||||
private final String counterFormat;
|
||||
private final OperationResult operationResult;
|
||||
|
||||
Type(String counterFormat, OperationResult operationResult) {
|
||||
this.counterFormat = counterFormat;
|
||||
this.operationResult = operationResult;
|
||||
}
|
||||
|
||||
String renderCounterText(String resourceName) {
|
||||
return String.format(counterFormat, resourceName);
|
||||
}
|
||||
}
|
||||
|
||||
abstract Type type();
|
||||
abstract String pollMessageText();
|
||||
|
||||
static DeletionResult create(Type type, String pollMessageText) {
|
||||
return new AutoValue_DeleteContactsAndHostsAction_DeletionResult(type, pollMessageText);
|
||||
}
|
||||
|
||||
OperationResult getMetricOperationResult() {
|
||||
return type().operationResult;
|
||||
}
|
||||
}
|
||||
|
||||
static boolean doesResourceStateAllowDeletion(EppResource resource, DateTime now) {
|
||||
Key<EppResource> key = Key.create(resource);
|
||||
if (isDeleted(resource, now)) {
|
||||
logger.atWarning().log("Cannot asynchronously delete %s because it is already deleted.", key);
|
||||
return false;
|
||||
}
|
||||
if (!resource.getStatusValues().contains(PENDING_DELETE)) {
|
||||
logger.atWarning().log(
|
||||
"Cannot asynchronously delete %s because it is not in PENDING_DELETE.", key);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -17,6 +17,7 @@ package google.registry.batch;
|
||||
import static com.google.common.base.Preconditions.checkArgument;
|
||||
import static com.google.common.collect.ImmutableSet.toImmutableSet;
|
||||
import static com.google.common.collect.Sets.difference;
|
||||
import static com.google.common.collect.Sets.newHashSet;
|
||||
import static google.registry.mapreduce.MapreduceRunner.PARAM_DRY_RUN;
|
||||
import static google.registry.mapreduce.inputs.EppResourceInputs.createChildEntityInput;
|
||||
import static google.registry.model.common.Cursor.CursorType.RECURRING_BILLING;
|
||||
@@ -36,11 +37,14 @@ import static google.registry.util.DomainNameUtils.getTldFromDomainName;
|
||||
import com.google.appengine.tools.mapreduce.Mapper;
|
||||
import com.google.appengine.tools.mapreduce.Reducer;
|
||||
import com.google.appengine.tools.mapreduce.ReducerInput;
|
||||
import com.google.auto.value.AutoValue;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.Range;
|
||||
import com.google.common.collect.Streams;
|
||||
import com.google.common.flogger.FluentLogger;
|
||||
import google.registry.config.RegistryConfig.Config;
|
||||
import google.registry.flows.domain.DomainPricingLogic;
|
||||
import google.registry.mapreduce.MapreduceRunner;
|
||||
import google.registry.mapreduce.inputs.NullInput;
|
||||
import google.registry.model.ImmutableObject;
|
||||
@@ -61,8 +65,10 @@ import google.registry.request.Parameter;
|
||||
import google.registry.request.Response;
|
||||
import google.registry.request.auth.Auth;
|
||||
import google.registry.util.Clock;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import javax.inject.Inject;
|
||||
import org.joda.money.Money;
|
||||
import org.joda.time.DateTime;
|
||||
@@ -86,8 +92,15 @@ public class ExpandRecurringBillingEventsAction implements Runnable {
|
||||
|
||||
@Inject Clock clock;
|
||||
@Inject MapreduceRunner mrRunner;
|
||||
|
||||
@Inject
|
||||
@Config("jdbcBatchSize")
|
||||
int batchSize;
|
||||
|
||||
@Inject @Parameter(PARAM_DRY_RUN) boolean isDryRun;
|
||||
@Inject @Parameter(PARAM_CURSOR_TIME) Optional<DateTime> cursorTimeParam;
|
||||
|
||||
@Inject DomainPricingLogic domainPricingLogic;
|
||||
@Inject Response response;
|
||||
@Inject ExpandRecurringBillingEventsAction() {}
|
||||
|
||||
@@ -120,61 +133,130 @@ public class ExpandRecurringBillingEventsAction implements Runnable {
|
||||
ImmutableSet.of(DomainBase.class), ImmutableSet.of(Recurring.class))))
|
||||
.sendLinkToMapreduceConsole(response);
|
||||
} else {
|
||||
int numBillingEventsSaved =
|
||||
jpaTm()
|
||||
.transact(
|
||||
() ->
|
||||
jpaTm()
|
||||
.query(
|
||||
"FROM BillingRecurrence "
|
||||
+ "WHERE eventTime <= :executeTime "
|
||||
+ "AND eventTime < recurrenceEndTime "
|
||||
+ "ORDER BY id ASC",
|
||||
Recurring.class)
|
||||
.setParameter("executeTime", executeTime)
|
||||
// Need to get a list from the transaction and then convert it to a stream
|
||||
// for further processing. If we get a stream directly, each elements gets
|
||||
// processed downstream eagerly but Hibernate returns a
|
||||
// ScrollableResultsIterator that cannot be advanced outside the
|
||||
// transaction, resulting in an exception.
|
||||
.getResultList())
|
||||
.stream()
|
||||
.map(
|
||||
recurring ->
|
||||
jpaTm()
|
||||
.transact(
|
||||
() ->
|
||||
expandBillingEvent(recurring, executeTime, cursorTime, isDryRun)))
|
||||
.reduce(0, Integer::sum);
|
||||
|
||||
if (!isDryRun) {
|
||||
logger.atInfo().log("Saved OneTime billing events.", numBillingEventsSaved);
|
||||
} else {
|
||||
logger.atInfo().log("Generated OneTime billing events (dry run).", numBillingEventsSaved);
|
||||
}
|
||||
logger.atInfo().log(
|
||||
"Recurring event expansion %s complete for billing event range [%s, %s).",
|
||||
isDryRun ? "(dry run) " : "", cursorTime, executeTime);
|
||||
tm().transact(
|
||||
() -> {
|
||||
// Check for the unlikely scenario where the cursor has been altered during the
|
||||
// expansion.
|
||||
DateTime currentCursorTime =
|
||||
tm().loadByKeyIfPresent(Cursor.createGlobalVKey(RECURRING_BILLING))
|
||||
.orElse(Cursor.createGlobal(RECURRING_BILLING, START_OF_TIME))
|
||||
.getCursorTime();
|
||||
if (!currentCursorTime.equals(persistedCursorTime)) {
|
||||
throw new IllegalStateException(
|
||||
String.format(
|
||||
"Current cursor position %s does not match persisted cursor position %s.",
|
||||
currentCursorTime, persistedCursorTime));
|
||||
}
|
||||
if (!isDryRun) {
|
||||
tm().put(Cursor.createGlobal(RECURRING_BILLING, executeTime));
|
||||
}
|
||||
});
|
||||
expandSqlBillingEventsInBatches(executeTime, cursorTime, persistedCursorTime);
|
||||
}
|
||||
}
|
||||
|
||||
private void expandSqlBillingEventsInBatches(
|
||||
DateTime executeTime, DateTime cursorTime, DateTime persistedCursorTime) {
|
||||
int totalBillingEventsSaved = 0;
|
||||
long maxProcessedRecurrenceId = 0;
|
||||
SqlBatchResults sqlBatchResults;
|
||||
|
||||
do {
|
||||
final long prevMaxProcessedRecurrenceId = maxProcessedRecurrenceId;
|
||||
sqlBatchResults =
|
||||
jpaTm()
|
||||
.transact(
|
||||
() -> {
|
||||
Set<String> expandedDomains = newHashSet();
|
||||
int batchBillingEventsSaved = 0;
|
||||
long maxRecurrenceId = prevMaxProcessedRecurrenceId;
|
||||
List<Recurring> recurrings =
|
||||
jpaTm()
|
||||
.query(
|
||||
"FROM BillingRecurrence "
|
||||
+ "WHERE eventTime <= :executeTime "
|
||||
+ "AND eventTime < recurrenceEndTime "
|
||||
+ "AND id > :maxProcessedRecurrenceId "
|
||||
+ "AND recurrenceEndTime > :cursorTime "
|
||||
+ "ORDER BY id ASC",
|
||||
Recurring.class)
|
||||
.setParameter("executeTime", executeTime)
|
||||
.setParameter("maxProcessedRecurrenceId", prevMaxProcessedRecurrenceId)
|
||||
.setParameter("cursorTime", cursorTime)
|
||||
.setMaxResults(batchSize)
|
||||
.getResultList();
|
||||
for (Recurring recurring : recurrings) {
|
||||
if (expandedDomains.contains(recurring.getTargetId())) {
|
||||
// On the off chance this batch contains multiple recurrences for the same
|
||||
// domain (which is actually possible if a given domain is quickly renewed
|
||||
// multiple times in a row), then short-circuit after the first one is
|
||||
// processed that involves actually expanding a billing event. This is
|
||||
// necessary because otherwise we get an "Inserted/updated object reloaded"
|
||||
// error from Hibernate when those billing events would be loaded
|
||||
// inside a transaction where they were already written. Note, there is no
|
||||
// actual further work to be done in this case anyway, not unless it has
|
||||
// somehow been over a year since this action last ran successfully (and if
|
||||
// that were somehow true, the remaining billing events would still be
|
||||
// expanded on subsequent runs).
|
||||
continue;
|
||||
}
|
||||
int billingEventsSaved =
|
||||
expandBillingEvent(recurring, executeTime, cursorTime, isDryRun);
|
||||
batchBillingEventsSaved += billingEventsSaved;
|
||||
if (billingEventsSaved > 0) {
|
||||
expandedDomains.add(recurring.getTargetId());
|
||||
}
|
||||
maxRecurrenceId = Math.max(maxRecurrenceId, recurring.getId());
|
||||
}
|
||||
return SqlBatchResults.create(
|
||||
batchBillingEventsSaved,
|
||||
maxRecurrenceId,
|
||||
maxRecurrenceId > prevMaxProcessedRecurrenceId);
|
||||
});
|
||||
totalBillingEventsSaved += sqlBatchResults.batchBillingEventsSaved();
|
||||
maxProcessedRecurrenceId = sqlBatchResults.maxProcessedRecurrenceId();
|
||||
if (sqlBatchResults.batchBillingEventsSaved() > 0) {
|
||||
logger.atInfo().log(
|
||||
"Saved %d billing events in batch (%d total) with max recurrence id %d.",
|
||||
sqlBatchResults.batchBillingEventsSaved(),
|
||||
totalBillingEventsSaved,
|
||||
maxProcessedRecurrenceId);
|
||||
} else {
|
||||
// If we're churning through a lot of no-op recurrences that don't need expanding (yet?),
|
||||
// then only log one no-op every so often as a good balance between letting the user track
|
||||
// that the action is still running while also not spamming the logs incessantly.
|
||||
logger.atInfo().atMostEvery(3, TimeUnit.MINUTES).log(
|
||||
"Processed up to max recurrence id %d (no billing events saved recently).",
|
||||
maxProcessedRecurrenceId);
|
||||
}
|
||||
} while (sqlBatchResults.shouldContinue());
|
||||
|
||||
if (!isDryRun) {
|
||||
logger.atInfo().log("Saved %d total OneTime billing events.", totalBillingEventsSaved);
|
||||
} else {
|
||||
logger.atInfo().log(
|
||||
"Generated %d total OneTime billing events (dry run).", totalBillingEventsSaved);
|
||||
}
|
||||
logger.atInfo().log(
|
||||
"Recurring event expansion %s complete for billing event range [%s, %s).",
|
||||
isDryRun ? "(dry run) " : "", cursorTime, executeTime);
|
||||
tm().transact(
|
||||
() -> {
|
||||
// Check for the unlikely scenario where the cursor has been altered during the
|
||||
// expansion.
|
||||
DateTime currentCursorTime =
|
||||
tm().loadByKeyIfPresent(Cursor.createGlobalVKey(RECURRING_BILLING))
|
||||
.orElse(Cursor.createGlobal(RECURRING_BILLING, START_OF_TIME))
|
||||
.getCursorTime();
|
||||
if (!currentCursorTime.equals(persistedCursorTime)) {
|
||||
throw new IllegalStateException(
|
||||
String.format(
|
||||
"Current cursor position %s does not match persisted cursor position %s.",
|
||||
currentCursorTime, persistedCursorTime));
|
||||
}
|
||||
if (!isDryRun) {
|
||||
tm().put(Cursor.createGlobal(RECURRING_BILLING, executeTime));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@AutoValue
|
||||
abstract static class SqlBatchResults {
|
||||
abstract int batchBillingEventsSaved();
|
||||
|
||||
abstract long maxProcessedRecurrenceId();
|
||||
|
||||
abstract boolean shouldContinue();
|
||||
|
||||
static SqlBatchResults create(
|
||||
int batchBillingEventsSaved, long maxProcessedRecurrenceId, boolean shouldContinue) {
|
||||
return new AutoValue_ExpandRecurringBillingEventsAction_SqlBatchResults(
|
||||
batchBillingEventsSaved, maxProcessedRecurrenceId, shouldContinue);
|
||||
}
|
||||
}
|
||||
|
||||
/** Mapper to expand {@link Recurring} billing events into synthetic {@link OneTime} events. */
|
||||
public static class ExpandRecurringBillingEventsMapper
|
||||
extends Mapper<Recurring, DateTime, DateTime> {
|
||||
|
||||
@@ -1,193 +0,0 @@
|
||||
// Copyright 2021 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.comparedb;
|
||||
|
||||
import static google.registry.beam.comparedb.ValidateSqlUtils.createSqlEntityTupleTag;
|
||||
import static google.registry.beam.initsql.Transforms.createTagForKind;
|
||||
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import com.google.common.base.Verify;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.googlecode.objectify.Key;
|
||||
import google.registry.backup.VersionedEntity;
|
||||
import google.registry.beam.initsql.Transforms;
|
||||
import google.registry.model.EppResource;
|
||||
import google.registry.model.annotations.DeleteAfterMigration;
|
||||
import google.registry.model.billing.BillingEvent;
|
||||
import google.registry.model.common.Cursor;
|
||||
import google.registry.model.contact.ContactHistory;
|
||||
import google.registry.model.contact.ContactResource;
|
||||
import google.registry.model.domain.DomainBase;
|
||||
import google.registry.model.domain.DomainHistory;
|
||||
import google.registry.model.domain.token.AllocationToken;
|
||||
import google.registry.model.host.HostHistory;
|
||||
import google.registry.model.host.HostResource;
|
||||
import google.registry.model.poll.PollMessage;
|
||||
import google.registry.model.registrar.Registrar;
|
||||
import google.registry.model.registrar.RegistrarContact;
|
||||
import google.registry.model.replay.SqlEntity;
|
||||
import google.registry.model.reporting.HistoryEntry;
|
||||
import google.registry.model.tld.Registry;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import javax.annotation.Nullable;
|
||||
import org.apache.beam.sdk.Pipeline;
|
||||
import org.apache.beam.sdk.transforms.DoFn;
|
||||
import org.apache.beam.sdk.transforms.ParDo;
|
||||
import org.apache.beam.sdk.values.PCollection;
|
||||
import org.apache.beam.sdk.values.PCollectionTuple;
|
||||
import org.apache.beam.sdk.values.TupleTag;
|
||||
import org.apache.beam.sdk.values.TupleTagList;
|
||||
import org.joda.time.DateTime;
|
||||
|
||||
/** Utilities for loading Datastore snapshots. */
|
||||
@DeleteAfterMigration
|
||||
public final class DatastoreSnapshots {
|
||||
|
||||
private DatastoreSnapshots() {}
|
||||
|
||||
/**
|
||||
* Datastore kinds eligible for validation. This set must be consistent with {@link
|
||||
* SqlSnapshots#ALL_SQL_ENTITIES}.
|
||||
*/
|
||||
@VisibleForTesting
|
||||
static final ImmutableSet<Class<?>> ALL_DATASTORE_KINDS =
|
||||
ImmutableSet.of(
|
||||
Registry.class,
|
||||
Cursor.class,
|
||||
Registrar.class,
|
||||
ContactResource.class,
|
||||
RegistrarContact.class,
|
||||
HostResource.class,
|
||||
HistoryEntry.class,
|
||||
AllocationToken.class,
|
||||
BillingEvent.Recurring.class,
|
||||
BillingEvent.OneTime.class,
|
||||
BillingEvent.Cancellation.class,
|
||||
PollMessage.class,
|
||||
DomainBase.class);
|
||||
|
||||
/**
|
||||
* Returns the Datastore snapshot right before {@code commitLogToTime} for the user specified
|
||||
* {@code kinds}. The resulting snapshot has all changes that happened before {@code
|
||||
* commitLogToTime}, and none at or after {@code commitLogToTime}.
|
||||
*
|
||||
* <p>If {@code HistoryEntry} is included in {@code kinds}, the result will contain {@code
|
||||
* PCollections} for the child entities, {@code DomainHistory}, {@code ContactHistory}, and {@code
|
||||
* HostHistory}.
|
||||
*/
|
||||
static PCollectionTuple loadDatastoreSnapshotByKind(
|
||||
Pipeline pipeline,
|
||||
String exportDir,
|
||||
String commitLogDir,
|
||||
DateTime commitLogFromTime,
|
||||
DateTime commitLogToTime,
|
||||
Set<Class<?>> kinds,
|
||||
Optional<DateTime> compareStartTime) {
|
||||
PCollectionTuple snapshot =
|
||||
pipeline.apply(
|
||||
"Load Datastore snapshot.",
|
||||
Transforms.loadDatastoreSnapshot(
|
||||
exportDir,
|
||||
commitLogDir,
|
||||
commitLogFromTime,
|
||||
commitLogToTime,
|
||||
kinds.stream().map(Key::getKind).collect(ImmutableSet.toImmutableSet())));
|
||||
|
||||
PCollectionTuple perTypeSnapshots = PCollectionTuple.empty(pipeline);
|
||||
for (Class<?> kind : kinds) {
|
||||
PCollection<VersionedEntity> perKindSnapshot =
|
||||
snapshot.get(createTagForKind(Key.getKind(kind)));
|
||||
if (SqlEntity.class.isAssignableFrom(kind)) {
|
||||
perTypeSnapshots =
|
||||
perTypeSnapshots.and(
|
||||
createSqlEntityTupleTag((Class<? extends SqlEntity>) kind),
|
||||
datastoreEntityToPojo(perKindSnapshot, kind.getSimpleName(), compareStartTime));
|
||||
continue;
|
||||
}
|
||||
Verify.verify(kind == HistoryEntry.class, "Unexpected Non-SqlEntity class: %s", kind);
|
||||
PCollectionTuple historyEntriesByType = splitHistoryEntry(perKindSnapshot, compareStartTime);
|
||||
for (Map.Entry<TupleTag<?>, PCollection<?>> entry :
|
||||
historyEntriesByType.getAll().entrySet()) {
|
||||
perTypeSnapshots = perTypeSnapshots.and(entry.getKey().getId(), entry.getValue());
|
||||
}
|
||||
}
|
||||
return perTypeSnapshots;
|
||||
}
|
||||
|
||||
/**
|
||||
* Splits a {@link PCollection} of {@link HistoryEntry HistoryEntries} into three collections of
|
||||
* its child entities by type.
|
||||
*/
|
||||
static PCollectionTuple splitHistoryEntry(
|
||||
PCollection<VersionedEntity> historyEntries, Optional<DateTime> compareStartTime) {
|
||||
DateTime nullableStartTime = compareStartTime.orElse(null);
|
||||
return historyEntries.apply(
|
||||
"Split HistoryEntry by Resource Type",
|
||||
ParDo.of(
|
||||
new DoFn<VersionedEntity, SqlEntity>() {
|
||||
@ProcessElement
|
||||
public void processElement(
|
||||
@Element VersionedEntity historyEntry, MultiOutputReceiver out) {
|
||||
Optional.ofNullable(Transforms.convertVersionedEntityToSqlEntity(historyEntry))
|
||||
.filter(e -> isEntityIncludedForComparison(e, nullableStartTime))
|
||||
.ifPresent(
|
||||
sqlEntity ->
|
||||
out.get(createSqlEntityTupleTag(sqlEntity.getClass()))
|
||||
.output(sqlEntity));
|
||||
}
|
||||
})
|
||||
.withOutputTags(
|
||||
createSqlEntityTupleTag(DomainHistory.class),
|
||||
TupleTagList.of(createSqlEntityTupleTag(ContactHistory.class))
|
||||
.and(createSqlEntityTupleTag(HostHistory.class))));
|
||||
}
|
||||
|
||||
/**
|
||||
* Transforms a {@link PCollection} of {@link VersionedEntity VersionedEntities} to Ofy Java
|
||||
* objects.
|
||||
*/
|
||||
static PCollection<SqlEntity> datastoreEntityToPojo(
|
||||
PCollection<VersionedEntity> entities, String desc, Optional<DateTime> compareStartTime) {
|
||||
DateTime nullableStartTime = compareStartTime.orElse(null);
|
||||
return entities.apply(
|
||||
"Datastore Entity to Pojo " + desc,
|
||||
ParDo.of(
|
||||
new DoFn<VersionedEntity, SqlEntity>() {
|
||||
@ProcessElement
|
||||
public void processElement(
|
||||
@Element VersionedEntity entity, OutputReceiver<SqlEntity> out) {
|
||||
Optional.ofNullable(Transforms.convertVersionedEntityToSqlEntity(entity))
|
||||
.filter(e -> isEntityIncludedForComparison(e, nullableStartTime))
|
||||
.ifPresent(out::output);
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
static boolean isEntityIncludedForComparison(
|
||||
SqlEntity entity, @Nullable DateTime compareStartTime) {
|
||||
if (compareStartTime == null) {
|
||||
return true;
|
||||
}
|
||||
if (entity instanceof HistoryEntry) {
|
||||
return compareStartTime.isBefore(((HistoryEntry) entity).getModificationTime());
|
||||
}
|
||||
if (entity instanceof EppResource) {
|
||||
return compareStartTime.isBefore(((EppResource) entity).getUpdateTimestamp().getTimestamp());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -1,154 +0,0 @@
|
||||
// Copyright 2021 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.comparedb;
|
||||
|
||||
import com.google.auto.value.AutoValue;
|
||||
import com.google.cloud.storage.BlobId;
|
||||
import com.google.cloud.storage.BlobInfo;
|
||||
import dagger.Component;
|
||||
import google.registry.config.CloudTasksUtilsModule;
|
||||
import google.registry.config.CredentialModule;
|
||||
import google.registry.config.RegistryConfig;
|
||||
import google.registry.config.RegistryConfig.Config;
|
||||
import google.registry.config.RegistryConfig.ConfigModule;
|
||||
import google.registry.gcs.GcsUtils;
|
||||
import google.registry.model.annotations.DeleteAfterMigration;
|
||||
import google.registry.util.Clock;
|
||||
import google.registry.util.UtilsModule;
|
||||
import java.io.IOException;
|
||||
import java.util.Comparator;
|
||||
import java.util.NoSuchElementException;
|
||||
import java.util.Optional;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import org.joda.time.DateTime;
|
||||
import org.joda.time.Instant;
|
||||
import org.joda.time.Interval;
|
||||
|
||||
/** Finds the necessary information for loading the most recent Datastore snapshot. */
|
||||
@DeleteAfterMigration
|
||||
public class LatestDatastoreSnapshotFinder {
|
||||
private final String projectId;
|
||||
private final GcsUtils gcsUtils;
|
||||
private final Clock clock;
|
||||
|
||||
@Inject
|
||||
LatestDatastoreSnapshotFinder(
|
||||
@Config("projectId") String projectId, GcsUtils gcsUtils, Clock clock) {
|
||||
this.projectId = projectId;
|
||||
this.gcsUtils = gcsUtils;
|
||||
this.clock = clock;
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds information of the most recent Datastore snapshot that ends strictly before {@code
|
||||
* exportEndTimeUpperBound}, including the GCS folder of the exported data files and the start and
|
||||
* stop times of the export. The folder of the CommitLogs is also included in the return.
|
||||
*/
|
||||
public DatastoreSnapshotInfo getSnapshotInfo(Instant exportEndTimeUpperBound) {
|
||||
String bucketName = RegistryConfig.getDatastoreBackupsBucket().substring("gs://".length());
|
||||
/**
|
||||
* Find the bucket-relative path to the overall metadata file of the last Datastore export.
|
||||
* Since Datastore export is saved daily, we may need to look back to yesterday. If found, the
|
||||
* return value is like
|
||||
* "2021-11-19T06:00:00_76493/2021-11-19T06:00:00_76493.overall_export_metadata".
|
||||
*/
|
||||
Optional<String> metaFilePathOptional =
|
||||
findNewestExportMetadataFileBeforeTime(bucketName, exportEndTimeUpperBound, 5);
|
||||
if (!metaFilePathOptional.isPresent()) {
|
||||
throw new NoSuchElementException("No exports found over the past 2 days.");
|
||||
}
|
||||
String metaFilePath = metaFilePathOptional.get();
|
||||
String metaFileFolder = metaFilePath.substring(0, metaFilePath.indexOf('/'));
|
||||
Instant exportStartTime = Instant.parse(metaFileFolder.replace('_', '.') + 'Z');
|
||||
BlobInfo blobInfo = gcsUtils.getBlobInfo(BlobId.of(bucketName, metaFilePath));
|
||||
Instant exportEndTime = new Instant(blobInfo.getCreateTime());
|
||||
return DatastoreSnapshotInfo.create(
|
||||
String.format("gs://%s/%s", bucketName, metaFileFolder),
|
||||
getCommitLogDir(),
|
||||
new Interval(exportStartTime, exportEndTime));
|
||||
}
|
||||
|
||||
public String getCommitLogDir() {
|
||||
return "gs://" + projectId + "-commits";
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds the latest Datastore export that ends strictly before {@code endTimeUpperBound} and
|
||||
* returns the bucket-relative path of the overall export metadata file, in the given bucket. The
|
||||
* search goes back for up to {@code lookBackDays} days in time, including today.
|
||||
*
|
||||
* <p>The overall export metadata file is the last file created during a Datastore export. All
|
||||
* data has been exported by the creation time of this file. The name of this file, like that of
|
||||
* all files in the same export, begins with the timestamp when the export starts.
|
||||
*
|
||||
* <p>An example return value: {@code
|
||||
* 2021-11-19T06:00:00_76493/2021-11-19T06:00:00_76493.overall_export_metadata}.
|
||||
*/
|
||||
private Optional<String> findNewestExportMetadataFileBeforeTime(
|
||||
String bucketName, Instant endTimeUpperBound, int lookBackDays) {
|
||||
DateTime today = clock.nowUtc();
|
||||
for (int day = 0; day < lookBackDays; day++) {
|
||||
String dateString = today.minusDays(day).toString("yyyy-MM-dd");
|
||||
try {
|
||||
Optional<String> metaFilePath =
|
||||
gcsUtils.listFolderObjects(bucketName, dateString).stream()
|
||||
.filter(s -> s.endsWith("overall_export_metadata"))
|
||||
.map(s -> dateString + s)
|
||||
.sorted(Comparator.<String>naturalOrder().reversed())
|
||||
.findFirst();
|
||||
if (metaFilePath.isPresent()) {
|
||||
BlobInfo blobInfo = gcsUtils.getBlobInfo(BlobId.of(bucketName, metaFilePath.get()));
|
||||
Instant exportEndTime = new Instant(blobInfo.getCreateTime());
|
||||
if (exportEndTime.isBefore(endTimeUpperBound)) {
|
||||
return metaFilePath;
|
||||
}
|
||||
}
|
||||
} catch (IOException ioe) {
|
||||
throw new RuntimeException(ioe);
|
||||
}
|
||||
}
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
/** Holds information about a Datastore snapshot. */
|
||||
@AutoValue
|
||||
public abstract static class DatastoreSnapshotInfo {
|
||||
public abstract String exportDir();
|
||||
|
||||
public abstract String commitLogDir();
|
||||
|
||||
public abstract Interval exportInterval();
|
||||
|
||||
static DatastoreSnapshotInfo create(
|
||||
String exportDir, String commitLogDir, Interval exportOperationInterval) {
|
||||
return new AutoValue_LatestDatastoreSnapshotFinder_DatastoreSnapshotInfo(
|
||||
exportDir, commitLogDir, exportOperationInterval);
|
||||
}
|
||||
}
|
||||
|
||||
@Singleton
|
||||
@Component(
|
||||
modules = {
|
||||
CredentialModule.class,
|
||||
ConfigModule.class,
|
||||
CloudTasksUtilsModule.class,
|
||||
UtilsModule.class
|
||||
})
|
||||
interface LatestDatastoreSnapshotFinderFinderComponent {
|
||||
|
||||
LatestDatastoreSnapshotFinder datastoreSnapshotInfoFinder();
|
||||
}
|
||||
}
|
||||
@@ -1,539 +0,0 @@
|
||||
// Copyright 2021 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.comparedb;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkState;
|
||||
import static google.registry.beam.comparedb.ValidateSqlUtils.createSqlEntityTupleTag;
|
||||
import static google.registry.beam.comparedb.ValidateSqlUtils.getMedianIdForHistoryTable;
|
||||
|
||||
import com.google.auto.value.AutoValue;
|
||||
import com.google.common.base.Strings;
|
||||
import com.google.common.base.Verify;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.ImmutableSetMultimap;
|
||||
import com.google.common.collect.Streams;
|
||||
import google.registry.beam.common.RegistryJpaIO;
|
||||
import google.registry.beam.common.RegistryJpaIO.Read;
|
||||
import google.registry.model.EppResource;
|
||||
import google.registry.model.UpdateAutoTimestamp;
|
||||
import google.registry.model.annotations.DeleteAfterMigration;
|
||||
import google.registry.model.billing.BillingEvent;
|
||||
import google.registry.model.bulkquery.BulkQueryEntities;
|
||||
import google.registry.model.bulkquery.DomainBaseLite;
|
||||
import google.registry.model.bulkquery.DomainHistoryHost;
|
||||
import google.registry.model.bulkquery.DomainHistoryLite;
|
||||
import google.registry.model.bulkquery.DomainHost;
|
||||
import google.registry.model.common.Cursor;
|
||||
import google.registry.model.contact.ContactHistory;
|
||||
import google.registry.model.contact.ContactResource;
|
||||
import google.registry.model.domain.DomainBase;
|
||||
import google.registry.model.domain.DomainHistory;
|
||||
import google.registry.model.domain.DomainHistory.DomainHistoryId;
|
||||
import google.registry.model.domain.GracePeriod;
|
||||
import google.registry.model.domain.GracePeriod.GracePeriodHistory;
|
||||
import google.registry.model.domain.secdns.DelegationSignerData;
|
||||
import google.registry.model.domain.secdns.DomainDsDataHistory;
|
||||
import google.registry.model.domain.token.AllocationToken;
|
||||
import google.registry.model.host.HostHistory;
|
||||
import google.registry.model.host.HostResource;
|
||||
import google.registry.model.poll.PollMessage;
|
||||
import google.registry.model.registrar.Registrar;
|
||||
import google.registry.model.registrar.RegistrarContact;
|
||||
import google.registry.model.replay.SqlEntity;
|
||||
import google.registry.model.reporting.DomainTransactionRecord;
|
||||
import google.registry.model.tld.Registry;
|
||||
import google.registry.persistence.transaction.CriteriaQueryBuilder;
|
||||
import google.registry.util.DateTimeUtils;
|
||||
import java.io.Serializable;
|
||||
import java.util.Optional;
|
||||
import javax.persistence.Entity;
|
||||
import org.apache.beam.sdk.Pipeline;
|
||||
import org.apache.beam.sdk.transforms.DoFn;
|
||||
import org.apache.beam.sdk.transforms.Flatten;
|
||||
import org.apache.beam.sdk.transforms.GroupByKey;
|
||||
import org.apache.beam.sdk.transforms.MapElements;
|
||||
import org.apache.beam.sdk.transforms.ParDo;
|
||||
import org.apache.beam.sdk.transforms.SerializableFunction;
|
||||
import org.apache.beam.sdk.values.KV;
|
||||
import org.apache.beam.sdk.values.PCollection;
|
||||
import org.apache.beam.sdk.values.PCollectionList;
|
||||
import org.apache.beam.sdk.values.PCollectionTuple;
|
||||
import org.apache.beam.sdk.values.TypeDescriptor;
|
||||
import org.apache.beam.sdk.values.TypeDescriptors;
|
||||
import org.joda.time.DateTime;
|
||||
|
||||
/**
|
||||
* Utilities for loading SQL snapshots.
|
||||
*
|
||||
* <p>For {@link DomainBase} and {@link DomainHistory}, this class assumes the presence of the
|
||||
* {@link google.registry.persistence.PersistenceModule.JpaTransactionManagerType#BULK_QUERY
|
||||
* bulk-query-capable JpaTransactionManager}, and takes advantage of it for higher throughput.
|
||||
*
|
||||
* <p>For now this class is meant for use during the database migration period only. Therefore, it
|
||||
* contains optimizations specifically for the production database at the current size, e.g.,
|
||||
* parallel queries for select tables.
|
||||
*/
|
||||
@DeleteAfterMigration
|
||||
public final class SqlSnapshots {
|
||||
|
||||
private SqlSnapshots() {}
|
||||
|
||||
/**
|
||||
* SQL entity types that are eligible for validation. This set must be consistent with {@link
|
||||
* DatastoreSnapshots#ALL_DATASTORE_KINDS}.
|
||||
*/
|
||||
static final ImmutableSet<Class<? extends SqlEntity>> ALL_SQL_ENTITIES =
|
||||
ImmutableSet.of(
|
||||
Registry.class,
|
||||
Cursor.class,
|
||||
Registrar.class,
|
||||
ContactResource.class,
|
||||
RegistrarContact.class,
|
||||
HostResource.class,
|
||||
AllocationToken.class,
|
||||
BillingEvent.Recurring.class,
|
||||
BillingEvent.OneTime.class,
|
||||
BillingEvent.Cancellation.class,
|
||||
PollMessage.class,
|
||||
DomainBase.class,
|
||||
ContactHistory.class,
|
||||
HostHistory.class,
|
||||
DomainHistory.class);
|
||||
|
||||
/**
|
||||
* Loads a SQL snapshot for the given {@code sqlEntityTypes}.
|
||||
*
|
||||
* <p>If {@code snapshotId} is present, all queries use the specified database snapshot,
|
||||
* guaranteeing a consistent result.
|
||||
*/
|
||||
public static PCollectionTuple loadCloudSqlSnapshotByType(
|
||||
Pipeline pipeline,
|
||||
ImmutableSet<Class<? extends SqlEntity>> sqlEntityTypes,
|
||||
Optional<String> snapshotId,
|
||||
Optional<DateTime> compareStartTime) {
|
||||
PCollectionTuple perTypeSnapshots = PCollectionTuple.empty(pipeline);
|
||||
for (Class<? extends SqlEntity> clazz : sqlEntityTypes) {
|
||||
if (clazz == DomainBase.class) {
|
||||
perTypeSnapshots =
|
||||
perTypeSnapshots.and(
|
||||
createSqlEntityTupleTag(DomainBase.class),
|
||||
loadAndAssembleDomainBase(pipeline, snapshotId, compareStartTime));
|
||||
continue;
|
||||
}
|
||||
if (clazz == DomainHistory.class) {
|
||||
perTypeSnapshots =
|
||||
perTypeSnapshots.and(
|
||||
createSqlEntityTupleTag(DomainHistory.class),
|
||||
loadAndAssembleDomainHistory(pipeline, snapshotId, compareStartTime));
|
||||
continue;
|
||||
}
|
||||
if (clazz == ContactHistory.class) {
|
||||
perTypeSnapshots =
|
||||
perTypeSnapshots.and(
|
||||
createSqlEntityTupleTag(ContactHistory.class),
|
||||
loadContactHistory(pipeline, snapshotId, compareStartTime));
|
||||
continue;
|
||||
}
|
||||
if (clazz == HostHistory.class) {
|
||||
perTypeSnapshots =
|
||||
perTypeSnapshots.and(
|
||||
createSqlEntityTupleTag(HostHistory.class),
|
||||
loadHostHistory(
|
||||
pipeline, snapshotId, compareStartTime.orElse(DateTimeUtils.START_OF_TIME)));
|
||||
continue;
|
||||
}
|
||||
if (EppResource.class.isAssignableFrom(clazz) && compareStartTime.isPresent()) {
|
||||
perTypeSnapshots =
|
||||
perTypeSnapshots.and(
|
||||
createSqlEntityTupleTag(clazz),
|
||||
pipeline.apply(
|
||||
"SQL Load " + clazz.getSimpleName(),
|
||||
buildEppResourceQueryWithTimeFilter(
|
||||
clazz, SqlEntity.class, snapshotId, compareStartTime.get())
|
||||
.withSnapshot(snapshotId.orElse(null))));
|
||||
continue;
|
||||
}
|
||||
perTypeSnapshots =
|
||||
perTypeSnapshots.and(
|
||||
createSqlEntityTupleTag(clazz),
|
||||
pipeline.apply(
|
||||
"SQL Load " + clazz.getSimpleName(),
|
||||
RegistryJpaIO.read(
|
||||
() -> CriteriaQueryBuilder.create(clazz).build(), SqlEntity.class::cast)
|
||||
.withSnapshot(snapshotId.orElse(null))));
|
||||
}
|
||||
return perTypeSnapshots;
|
||||
}
|
||||
|
||||
/**
|
||||
* Bulk-loads parts of {@link DomainBase} and assembles them in the pipeline.
|
||||
*
|
||||
* @see BulkQueryEntities
|
||||
*/
|
||||
public static PCollection<SqlEntity> loadAndAssembleDomainBase(
|
||||
Pipeline pipeline, Optional<String> snapshotId, Optional<DateTime> compareStartTime) {
|
||||
PCollection<KV<String, Serializable>> baseObjects =
|
||||
readAllAndAssignKey(
|
||||
pipeline,
|
||||
DomainBaseLite.class,
|
||||
DomainBaseLite::getRepoId,
|
||||
snapshotId,
|
||||
compareStartTime);
|
||||
PCollection<KV<String, Serializable>> gracePeriods =
|
||||
readAllAndAssignKey(
|
||||
pipeline,
|
||||
GracePeriod.class,
|
||||
GracePeriod::getDomainRepoId,
|
||||
snapshotId,
|
||||
compareStartTime);
|
||||
PCollection<KV<String, Serializable>> delegationSigners =
|
||||
readAllAndAssignKey(
|
||||
pipeline,
|
||||
DelegationSignerData.class,
|
||||
DelegationSignerData::getDomainRepoId,
|
||||
snapshotId,
|
||||
compareStartTime);
|
||||
PCollection<KV<String, Serializable>> domainHosts =
|
||||
readAllAndAssignKey(
|
||||
pipeline, DomainHost.class, DomainHost::getDomainRepoId, snapshotId, compareStartTime);
|
||||
|
||||
DateTime nullableCompareStartTime = compareStartTime.orElse(null);
|
||||
return PCollectionList.of(
|
||||
ImmutableList.of(baseObjects, gracePeriods, delegationSigners, domainHosts))
|
||||
.apply("SQL Merge DomainBase parts", Flatten.pCollections())
|
||||
.apply("Group by Domain Parts by RepoId", GroupByKey.create())
|
||||
.apply(
|
||||
"Assemble DomainBase",
|
||||
ParDo.of(
|
||||
new DoFn<KV<String, Iterable<Serializable>>, SqlEntity>() {
|
||||
@ProcessElement
|
||||
public void processElement(
|
||||
@Element KV<String, Iterable<Serializable>> kv,
|
||||
OutputReceiver<SqlEntity> outputReceiver) {
|
||||
TypedClassifier partsByType = new TypedClassifier(kv.getValue());
|
||||
ImmutableSet<DomainBaseLite> baseObjects =
|
||||
partsByType.getAllOf(DomainBaseLite.class);
|
||||
if (nullableCompareStartTime != null) {
|
||||
Verify.verify(
|
||||
baseObjects.size() <= 1,
|
||||
"Found duplicate DomainBaseLite object per repoId: " + kv.getKey());
|
||||
if (baseObjects.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
Verify.verify(
|
||||
baseObjects.size() == 1,
|
||||
"Expecting one DomainBaseLite object per repoId: " + kv.getKey());
|
||||
outputReceiver.output(
|
||||
BulkQueryEntities.assembleDomainBase(
|
||||
baseObjects.iterator().next(),
|
||||
partsByType.getAllOf(GracePeriod.class),
|
||||
partsByType.getAllOf(DelegationSignerData.class),
|
||||
partsByType.getAllOf(DomainHost.class).stream()
|
||||
.map(DomainHost::getHostVKey)
|
||||
.collect(ImmutableSet.toImmutableSet())));
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads all {@link ContactHistory} entities from the database.
|
||||
*
|
||||
* <p>This method uses two queries to load data in parallel. This is a performance optimization
|
||||
* specifically for the production database.
|
||||
*/
|
||||
static PCollection<SqlEntity> loadContactHistory(
|
||||
Pipeline pipeline, Optional<String> snapshotId, Optional<DateTime> compareStartTime) {
|
||||
PartitionedQuery partitionedQuery =
|
||||
buildPartitonedHistoryQuery(ContactHistory.class, compareStartTime);
|
||||
PCollection<SqlEntity> part1 =
|
||||
pipeline.apply(
|
||||
"SQL Load ContactHistory first half",
|
||||
RegistryJpaIO.read(
|
||||
partitionedQuery.firstHalfQuery(),
|
||||
partitionedQuery.parameters(),
|
||||
false,
|
||||
SqlEntity.class::cast)
|
||||
.withSnapshot(snapshotId.orElse(null)));
|
||||
PCollection<SqlEntity> part2 =
|
||||
pipeline.apply(
|
||||
"SQL Load ContactHistory second half",
|
||||
RegistryJpaIO.read(
|
||||
partitionedQuery.secondHalfQuery(),
|
||||
partitionedQuery.parameters(),
|
||||
false,
|
||||
SqlEntity.class::cast)
|
||||
.withSnapshot(snapshotId.orElse(null)));
|
||||
return PCollectionList.of(part1)
|
||||
.and(part2)
|
||||
.apply("Combine ContactHistory parts", Flatten.pCollections());
|
||||
}
|
||||
|
||||
/** Loads all {@link HostHistory} entities from the database. */
|
||||
static PCollection<SqlEntity> loadHostHistory(
|
||||
Pipeline pipeline, Optional<String> snapshotId, DateTime compareStartTime) {
|
||||
return pipeline.apply(
|
||||
"SQL Load HostHistory",
|
||||
RegistryJpaIO.read(
|
||||
"select c from HostHistory c where :compareStartTime < modificationTime",
|
||||
ImmutableMap.of("compareStartTime", compareStartTime),
|
||||
false,
|
||||
SqlEntity.class::cast)
|
||||
.withSnapshot(snapshotId.orElse(null)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Bulk-loads all parts of {@link DomainHistory} and assembles them in the pipeline.
|
||||
*
|
||||
* <p>This method uses two queries to load {@link DomainBaseLite} in parallel. This is a
|
||||
* performance optimization specifically for the production database.
|
||||
*
|
||||
* @see BulkQueryEntities
|
||||
*/
|
||||
static PCollection<SqlEntity> loadAndAssembleDomainHistory(
|
||||
Pipeline pipeline, Optional<String> snapshotId, Optional<DateTime> compareStartTime) {
|
||||
PartitionedQuery partitionedQuery =
|
||||
buildPartitonedHistoryQuery(DomainHistoryLite.class, compareStartTime);
|
||||
PCollection<KV<String, Serializable>> baseObjectsPart1 =
|
||||
queryAndAssignKey(
|
||||
pipeline,
|
||||
"first half",
|
||||
partitionedQuery.firstHalfQuery(),
|
||||
partitionedQuery.parameters(),
|
||||
DomainHistoryLite.class,
|
||||
compose(DomainHistoryLite::getDomainHistoryId, DomainHistoryId::toString),
|
||||
snapshotId);
|
||||
PCollection<KV<String, Serializable>> baseObjectsPart2 =
|
||||
queryAndAssignKey(
|
||||
pipeline,
|
||||
"second half",
|
||||
partitionedQuery.secondHalfQuery(),
|
||||
partitionedQuery.parameters(),
|
||||
DomainHistoryLite.class,
|
||||
compose(DomainHistoryLite::getDomainHistoryId, DomainHistoryId::toString),
|
||||
snapshotId);
|
||||
PCollection<KV<String, Serializable>> gracePeriods =
|
||||
readAllAndAssignKey(
|
||||
pipeline,
|
||||
GracePeriodHistory.class,
|
||||
compose(GracePeriodHistory::getDomainHistoryId, DomainHistoryId::toString),
|
||||
snapshotId,
|
||||
compareStartTime);
|
||||
PCollection<KV<String, Serializable>> delegationSigners =
|
||||
readAllAndAssignKey(
|
||||
pipeline,
|
||||
DomainDsDataHistory.class,
|
||||
compose(DomainDsDataHistory::getDomainHistoryId, DomainHistoryId::toString),
|
||||
snapshotId,
|
||||
compareStartTime);
|
||||
PCollection<KV<String, Serializable>> domainHosts =
|
||||
readAllAndAssignKey(
|
||||
pipeline,
|
||||
DomainHistoryHost.class,
|
||||
compose(DomainHistoryHost::getDomainHistoryId, DomainHistoryId::toString),
|
||||
snapshotId,
|
||||
compareStartTime);
|
||||
PCollection<KV<String, Serializable>> transactionRecords =
|
||||
readAllAndAssignKey(
|
||||
pipeline,
|
||||
DomainTransactionRecord.class,
|
||||
compose(DomainTransactionRecord::getDomainHistoryId, DomainHistoryId::toString),
|
||||
snapshotId,
|
||||
compareStartTime);
|
||||
|
||||
DateTime nullableCompareStartTime = compareStartTime.orElse(null);
|
||||
return PCollectionList.of(
|
||||
ImmutableList.of(
|
||||
baseObjectsPart1,
|
||||
baseObjectsPart2,
|
||||
gracePeriods,
|
||||
delegationSigners,
|
||||
domainHosts,
|
||||
transactionRecords))
|
||||
.apply("Merge DomainHistory parts", Flatten.pCollections())
|
||||
.apply("Group by DomainHistory Parts by DomainHistoryId string", GroupByKey.create())
|
||||
.apply(
|
||||
"Assemble DomainHistory",
|
||||
ParDo.of(
|
||||
new DoFn<KV<String, Iterable<Serializable>>, SqlEntity>() {
|
||||
@ProcessElement
|
||||
public void processElement(
|
||||
@Element KV<String, Iterable<Serializable>> kv,
|
||||
OutputReceiver<SqlEntity> outputReceiver) {
|
||||
TypedClassifier partsByType = new TypedClassifier(kv.getValue());
|
||||
ImmutableSet<DomainHistoryLite> baseObjects =
|
||||
partsByType.getAllOf(DomainHistoryLite.class);
|
||||
if (nullableCompareStartTime != null) {
|
||||
Verify.verify(
|
||||
baseObjects.size() <= 1,
|
||||
"Found duplicate DomainHistoryLite object per domainHistoryId: "
|
||||
+ kv.getKey());
|
||||
if (baseObjects.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
Verify.verify(
|
||||
baseObjects.size() == 1,
|
||||
"Expecting one DomainHistoryLite object per domainHistoryId: "
|
||||
+ kv.getKey());
|
||||
outputReceiver.output(
|
||||
BulkQueryEntities.assembleDomainHistory(
|
||||
baseObjects.iterator().next(),
|
||||
partsByType.getAllOf(DomainDsDataHistory.class),
|
||||
partsByType.getAllOf(DomainHistoryHost.class).stream()
|
||||
.map(DomainHistoryHost::getHostVKey)
|
||||
.collect(ImmutableSet.toImmutableSet()),
|
||||
partsByType.getAllOf(GracePeriodHistory.class),
|
||||
partsByType.getAllOf(DomainTransactionRecord.class)));
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
static <R, T> PCollection<KV<String, Serializable>> readAllAndAssignKey(
|
||||
Pipeline pipeline,
|
||||
Class<R> type,
|
||||
SerializableFunction<R, String> keyFunction,
|
||||
Optional<String> snapshotId,
|
||||
Optional<DateTime> compareStartTime) {
|
||||
Read<R, R> queryObject;
|
||||
if (compareStartTime.isPresent() && EppResource.class.isAssignableFrom(type)) {
|
||||
queryObject =
|
||||
buildEppResourceQueryWithTimeFilter(type, type, snapshotId, compareStartTime.get());
|
||||
} else {
|
||||
queryObject =
|
||||
RegistryJpaIO.read(() -> CriteriaQueryBuilder.create(type).build())
|
||||
.withSnapshot(snapshotId.orElse(null));
|
||||
}
|
||||
return pipeline
|
||||
.apply("SQL Load " + type.getSimpleName(), queryObject)
|
||||
.apply(
|
||||
"Assign Key to " + type.getSimpleName(),
|
||||
MapElements.into(
|
||||
TypeDescriptors.kvs(
|
||||
TypeDescriptors.strings(), TypeDescriptor.of(Serializable.class)))
|
||||
.via(obj -> KV.of(keyFunction.apply(obj), (Serializable) obj)));
|
||||
}
|
||||
|
||||
static <R, T> PCollection<KV<String, Serializable>> queryAndAssignKey(
|
||||
Pipeline pipeline,
|
||||
String diffrentiator,
|
||||
String jplQuery,
|
||||
ImmutableMap<String, Object> queryParameters,
|
||||
Class<R> type,
|
||||
SerializableFunction<R, String> keyFunction,
|
||||
Optional<String> snapshotId) {
|
||||
return pipeline
|
||||
.apply(
|
||||
"SQL Load " + type.getSimpleName() + " " + diffrentiator,
|
||||
RegistryJpaIO.read(jplQuery, queryParameters, false, type::cast)
|
||||
.withSnapshot(snapshotId.orElse(null)))
|
||||
.apply(
|
||||
"Assign Key to " + type.getSimpleName() + " " + diffrentiator,
|
||||
MapElements.into(
|
||||
TypeDescriptors.kvs(
|
||||
TypeDescriptors.strings(), TypeDescriptor.of(Serializable.class)))
|
||||
.via(obj -> KV.of(keyFunction.apply(obj), (Serializable) obj)));
|
||||
}
|
||||
|
||||
// TODO(b/205988530): don't use beam serializablefunction, make one that extends Java's Function.
|
||||
private static <R, I, T> SerializableFunction<R, T> compose(
|
||||
SerializableFunction<R, I> f1, SerializableFunction<I, T> f2) {
|
||||
return r -> f2.apply(f1.apply(r));
|
||||
}
|
||||
|
||||
static <R, T> Read<R, T> buildEppResourceQueryWithTimeFilter(
|
||||
Class<R> entityType,
|
||||
Class<T> castOutputAsType,
|
||||
Optional<String> snapshotId,
|
||||
DateTime compareStartTime) {
|
||||
String tableName = getJpaEntityName(entityType);
|
||||
String jpql =
|
||||
String.format("select c from %s c where :compareStartTime < updateTimestamp", tableName);
|
||||
return RegistryJpaIO.read(
|
||||
jpql,
|
||||
ImmutableMap.of("compareStartTime", UpdateAutoTimestamp.create(compareStartTime)),
|
||||
false,
|
||||
(R x) -> castOutputAsType.cast(x))
|
||||
.withSnapshot(snapshotId.orElse(null));
|
||||
}
|
||||
|
||||
static PartitionedQuery buildPartitonedHistoryQuery(
|
||||
Class<?> entityType, Optional<DateTime> compareStartTime) {
|
||||
String tableName = getJpaEntityName(entityType);
|
||||
Verify.verify(
|
||||
!Strings.isNullOrEmpty(tableName), "Invalid entity type %s", entityType.getSimpleName());
|
||||
long medianId =
|
||||
getMedianIdForHistoryTable(tableName)
|
||||
.orElseThrow(() -> new IllegalStateException("Not a valid database: no " + tableName));
|
||||
String firstHalfQuery = String.format("select c from %s c where id <= :historyId", tableName);
|
||||
String secondHalfQuery = String.format("select c from %s c where id > :historyId", tableName);
|
||||
if (compareStartTime.isPresent()) {
|
||||
String timeFilter = " and :compareStartTime < modificationTime";
|
||||
firstHalfQuery += timeFilter;
|
||||
secondHalfQuery += timeFilter;
|
||||
return PartitionedQuery.createPartitionedQuery(
|
||||
firstHalfQuery,
|
||||
secondHalfQuery,
|
||||
ImmutableMap.of("historyId", medianId, "compareStartTime", compareStartTime.get()));
|
||||
} else {
|
||||
return PartitionedQuery.createPartitionedQuery(
|
||||
firstHalfQuery, secondHalfQuery, ImmutableMap.of("historyId", medianId));
|
||||
}
|
||||
}
|
||||
|
||||
private static String getJpaEntityName(Class entityType) {
|
||||
Entity entityAnnotation = (Entity) entityType.getAnnotation(Entity.class);
|
||||
checkState(
|
||||
entityAnnotation != null, "Unexpected non-entity type %s", entityType.getSimpleName());
|
||||
return Strings.isNullOrEmpty(entityAnnotation.name())
|
||||
? entityType.getSimpleName()
|
||||
: entityAnnotation.name();
|
||||
}
|
||||
|
||||
/** Contains two queries that partition the target table in two. */
|
||||
@AutoValue
|
||||
abstract static class PartitionedQuery {
|
||||
abstract String firstHalfQuery();
|
||||
|
||||
abstract String secondHalfQuery();
|
||||
|
||||
abstract ImmutableMap<String, Object> parameters();
|
||||
|
||||
public static PartitionedQuery createPartitionedQuery(
|
||||
String firstHalfQuery, String secondHalfQuery, ImmutableMap<String, Object> parameters) {
|
||||
return new AutoValue_SqlSnapshots_PartitionedQuery(
|
||||
firstHalfQuery, secondHalfQuery, parameters);
|
||||
}
|
||||
}
|
||||
|
||||
/** Container that receives mixed-typed data and groups them by {@link Class}. */
|
||||
static class TypedClassifier {
|
||||
private final ImmutableSetMultimap<Class<?>, Object> classifiedEntities;
|
||||
|
||||
TypedClassifier(Iterable<Serializable> inputs) {
|
||||
this.classifiedEntities =
|
||||
Streams.stream(inputs)
|
||||
.collect(ImmutableSetMultimap.toImmutableSetMultimap(Object::getClass, x -> x));
|
||||
}
|
||||
|
||||
<T> ImmutableSet<T> getAllOf(Class<T> clazz) {
|
||||
return classifiedEntities.get(clazz).stream()
|
||||
.map(clazz::cast)
|
||||
.collect(ImmutableSet.toImmutableSet());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,206 +0,0 @@
|
||||
// Copyright 2021 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.comparedb;
|
||||
|
||||
import static com.google.common.base.Verify.verify;
|
||||
import static org.apache.beam.sdk.values.TypeDescriptors.strings;
|
||||
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import com.google.common.base.Strings;
|
||||
import com.google.common.flogger.FluentLogger;
|
||||
import google.registry.beam.common.RegistryPipelineOptions;
|
||||
import google.registry.beam.common.RegistryPipelineWorkerInitializer;
|
||||
import google.registry.beam.comparedb.LatestDatastoreSnapshotFinder.DatastoreSnapshotInfo;
|
||||
import google.registry.beam.comparedb.ValidateSqlUtils.CompareSqlEntity;
|
||||
import google.registry.model.annotations.DeleteAfterMigration;
|
||||
import google.registry.model.domain.DomainBase;
|
||||
import google.registry.model.domain.DomainHistory;
|
||||
import google.registry.model.replay.SqlEntity;
|
||||
import google.registry.persistence.PersistenceModule.JpaTransactionManagerType;
|
||||
import google.registry.persistence.PersistenceModule.TransactionIsolationLevel;
|
||||
import google.registry.util.SystemClock;
|
||||
import java.io.Serializable;
|
||||
import java.util.Optional;
|
||||
import org.apache.beam.sdk.Pipeline;
|
||||
import org.apache.beam.sdk.coders.SerializableCoder;
|
||||
import org.apache.beam.sdk.io.TextIO;
|
||||
import org.apache.beam.sdk.options.PipelineOptionsFactory;
|
||||
import org.apache.beam.sdk.transforms.Flatten;
|
||||
import org.apache.beam.sdk.transforms.GroupByKey;
|
||||
import org.apache.beam.sdk.transforms.ParDo;
|
||||
import org.apache.beam.sdk.transforms.WithKeys;
|
||||
import org.apache.beam.sdk.values.PCollectionList;
|
||||
import org.apache.beam.sdk.values.PCollectionTuple;
|
||||
import org.apache.beam.sdk.values.TupleTag;
|
||||
import org.joda.time.DateTime;
|
||||
import org.joda.time.Duration;
|
||||
|
||||
/**
|
||||
* Validates the asynchronous data replication process between Datastore and Cloud SQL.
|
||||
*
|
||||
* <p>This pipeline is to be launched by {@link google.registry.tools.ValidateDatastoreCommand} or
|
||||
* {@link google.registry.tools.ValidateSqlCommand}.
|
||||
*/
|
||||
@DeleteAfterMigration
|
||||
public class ValidateDatabasePipeline {
|
||||
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
|
||||
|
||||
/** Specifies the extra CommitLogs to load before the start of a Database export. */
|
||||
private static final Duration COMMITLOG_START_TIME_MARGIN = Duration.standardMinutes(10);
|
||||
|
||||
private final ValidateDatabasePipelineOptions options;
|
||||
private final LatestDatastoreSnapshotFinder datastoreSnapshotFinder;
|
||||
|
||||
public ValidateDatabasePipeline(
|
||||
ValidateDatabasePipelineOptions options,
|
||||
LatestDatastoreSnapshotFinder datastoreSnapshotFinder) {
|
||||
this.options = options;
|
||||
this.datastoreSnapshotFinder = datastoreSnapshotFinder;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
void run(Pipeline pipeline) {
|
||||
DateTime latestCommitLogTime = DateTime.parse(options.getLatestCommitLogTimestamp());
|
||||
DatastoreSnapshotInfo mostRecentExport =
|
||||
datastoreSnapshotFinder.getSnapshotInfo(latestCommitLogTime.toInstant());
|
||||
|
||||
logger.atInfo().log(
|
||||
"Comparing datastore export at %s and commitlog timestamp %s.",
|
||||
mostRecentExport.exportDir(), latestCommitLogTime);
|
||||
|
||||
Optional<String> outputPath =
|
||||
Optional.ofNullable(options.getDiffOutputGcsBucket())
|
||||
.map(
|
||||
bucket ->
|
||||
String.format(
|
||||
"gs://%s/validate_database/%s/diffs.txt",
|
||||
bucket, new SystemClock().nowUtc()));
|
||||
outputPath.ifPresent(path -> logger.atInfo().log("Discrepancies will be logged to %s", path));
|
||||
|
||||
setupPipeline(
|
||||
pipeline,
|
||||
Optional.ofNullable(options.getSqlSnapshotId()),
|
||||
mostRecentExport,
|
||||
latestCommitLogTime,
|
||||
Optional.ofNullable(options.getComparisonStartTimestamp()).map(DateTime::parse),
|
||||
outputPath);
|
||||
|
||||
pipeline.run();
|
||||
}
|
||||
|
||||
static void setupPipeline(
|
||||
Pipeline pipeline,
|
||||
Optional<String> sqlSnapshotId,
|
||||
DatastoreSnapshotInfo mostRecentExport,
|
||||
DateTime latestCommitLogTime,
|
||||
Optional<DateTime> compareStartTime,
|
||||
Optional<String> diffOutputPath) {
|
||||
pipeline
|
||||
.getCoderRegistry()
|
||||
.registerCoderForClass(SqlEntity.class, SerializableCoder.of(Serializable.class));
|
||||
|
||||
PCollectionTuple datastoreSnapshot =
|
||||
DatastoreSnapshots.loadDatastoreSnapshotByKind(
|
||||
pipeline,
|
||||
mostRecentExport.exportDir(),
|
||||
mostRecentExport.commitLogDir(),
|
||||
mostRecentExport.exportInterval().getStart().minus(COMMITLOG_START_TIME_MARGIN),
|
||||
// Increase by 1ms since we want to include commitLogs latestCommitLogTime but
|
||||
// this parameter is exclusive.
|
||||
latestCommitLogTime.plusMillis(1),
|
||||
DatastoreSnapshots.ALL_DATASTORE_KINDS,
|
||||
compareStartTime);
|
||||
|
||||
PCollectionTuple cloudSqlSnapshot =
|
||||
SqlSnapshots.loadCloudSqlSnapshotByType(
|
||||
pipeline, SqlSnapshots.ALL_SQL_ENTITIES, sqlSnapshotId, compareStartTime);
|
||||
|
||||
verify(
|
||||
datastoreSnapshot.getAll().keySet().equals(cloudSqlSnapshot.getAll().keySet()),
|
||||
"Expecting the same set of types in both snapshots.");
|
||||
|
||||
PCollectionList<String> diffLogs = PCollectionList.empty(pipeline);
|
||||
|
||||
for (Class<? extends SqlEntity> clazz : SqlSnapshots.ALL_SQL_ENTITIES) {
|
||||
TupleTag<SqlEntity> tag = ValidateSqlUtils.createSqlEntityTupleTag(clazz);
|
||||
verify(
|
||||
datastoreSnapshot.has(tag), "Missing %s in Datastore snapshot.", clazz.getSimpleName());
|
||||
verify(cloudSqlSnapshot.has(tag), "Missing %s in Cloud SQL snapshot.", clazz.getSimpleName());
|
||||
diffLogs =
|
||||
diffLogs.and(
|
||||
PCollectionList.of(datastoreSnapshot.get(tag))
|
||||
.and(cloudSqlSnapshot.get(tag))
|
||||
.apply(
|
||||
"Combine from both snapshots: " + clazz.getSimpleName(),
|
||||
Flatten.pCollections())
|
||||
.apply(
|
||||
"Assign primary key to merged " + clazz.getSimpleName(),
|
||||
WithKeys.of(ValidateDatabasePipeline::getPrimaryKeyString)
|
||||
.withKeyType(strings()))
|
||||
.apply("Group by primary key " + clazz.getSimpleName(), GroupByKey.create())
|
||||
.apply("Compare " + clazz.getSimpleName(), ParDo.of(new CompareSqlEntity())));
|
||||
}
|
||||
if (diffOutputPath.isPresent()) {
|
||||
diffLogs
|
||||
.apply("Gather diff logs", Flatten.pCollections())
|
||||
.apply(
|
||||
"Output diffs",
|
||||
TextIO.write()
|
||||
.to(diffOutputPath.get())
|
||||
/**
|
||||
* Output to a single file for ease of use since diffs should be few. If this
|
||||
* assumption turns out not to be false, user should abort the pipeline and
|
||||
* investigate why.
|
||||
*/
|
||||
.withoutSharding()
|
||||
.withDelimiter((Strings.repeat("-", 80) + "\n").toCharArray()));
|
||||
}
|
||||
}
|
||||
|
||||
private static String getPrimaryKeyString(SqlEntity sqlEntity) {
|
||||
// SqlEntity.getPrimaryKeyString only works with entities registered with Hibernate.
|
||||
// We are using the BulkQueryJpaTransactionManager, which does not recognize DomainBase and
|
||||
// DomainHistory. See BulkQueryEntities.java for more information.
|
||||
if (sqlEntity instanceof DomainBase) {
|
||||
return "DomainBase_" + ((DomainBase) sqlEntity).getRepoId();
|
||||
}
|
||||
if (sqlEntity instanceof DomainHistory) {
|
||||
return "DomainHistory_" + ((DomainHistory) sqlEntity).getDomainHistoryId().toString();
|
||||
}
|
||||
return sqlEntity.getPrimaryKeyString();
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
ValidateDatabasePipelineOptions options =
|
||||
PipelineOptionsFactory.fromArgs(args)
|
||||
.withValidation()
|
||||
.as(ValidateDatabasePipelineOptions.class);
|
||||
RegistryPipelineOptions.validateRegistryPipelineOptions(options);
|
||||
|
||||
// Defensively set important options.
|
||||
options.setIsolationOverride(TransactionIsolationLevel.TRANSACTION_REPEATABLE_READ);
|
||||
options.setJpaTransactionManagerType(JpaTransactionManagerType.BULK_QUERY);
|
||||
|
||||
// Set up JPA in the pipeline harness (the locally executed part of the main() method). Reuse
|
||||
// code in RegistryPipelineWorkerInitializer, which only applies to pipeline worker VMs.
|
||||
new RegistryPipelineWorkerInitializer().beforeProcessing(options);
|
||||
|
||||
LatestDatastoreSnapshotFinder datastoreSnapshotFinder =
|
||||
DaggerLatestDatastoreSnapshotFinder_LatestDatastoreSnapshotFinderFinderComponent.create()
|
||||
.datastoreSnapshotInfoFinder();
|
||||
|
||||
new ValidateDatabasePipeline(options, datastoreSnapshotFinder).run(Pipeline.create(options));
|
||||
}
|
||||
}
|
||||
@@ -1,55 +0,0 @@
|
||||
// Copyright 2022 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.comparedb;
|
||||
|
||||
import google.registry.beam.common.RegistryPipelineOptions;
|
||||
import google.registry.model.annotations.DeleteAfterMigration;
|
||||
import javax.annotation.Nullable;
|
||||
import org.apache.beam.sdk.options.Description;
|
||||
import org.apache.beam.sdk.options.Validation;
|
||||
|
||||
/** BEAM pipeline options for {@link ValidateDatabasePipeline}. */
|
||||
@DeleteAfterMigration
|
||||
public interface ValidateDatabasePipelineOptions extends RegistryPipelineOptions {
|
||||
|
||||
@Description(
|
||||
"The id of the SQL snapshot to be compared with Datastore. "
|
||||
+ "If null, the current state of the SQL database is used.")
|
||||
@Nullable
|
||||
String getSqlSnapshotId();
|
||||
|
||||
void setSqlSnapshotId(String snapshotId);
|
||||
|
||||
@Description("The latest CommitLogs to load, in ISO8601 format.")
|
||||
@Validation.Required
|
||||
String getLatestCommitLogTimestamp();
|
||||
|
||||
void setLatestCommitLogTimestamp(String commitLogEndTimestamp);
|
||||
|
||||
@Description(
|
||||
"For history entries and EPP resources, only those modified strictly after this time are "
|
||||
+ "included in comparison. Value is in ISO8601 format. "
|
||||
+ "Other entity types are not affected.")
|
||||
@Nullable
|
||||
String getComparisonStartTimestamp();
|
||||
|
||||
void setComparisonStartTimestamp(String comparisonStartTimestamp);
|
||||
|
||||
@Description("The GCS bucket where discrepancies found during comparison should be logged.")
|
||||
@Nullable
|
||||
String getDiffOutputGcsBucket();
|
||||
|
||||
void setDiffOutputGcsBucket(String gcsBucket);
|
||||
}
|
||||
@@ -1,427 +0,0 @@
|
||||
// Copyright 2021 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.comparedb;
|
||||
|
||||
import static com.google.common.base.Verify.verify;
|
||||
import static google.registry.persistence.transaction.TransactionManagerFactory.jpaTm;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.common.collect.Maps.EntryTransformer;
|
||||
import google.registry.beam.initsql.Transforms;
|
||||
import google.registry.config.RegistryEnvironment;
|
||||
import google.registry.model.EppResource;
|
||||
import google.registry.model.ImmutableObject;
|
||||
import google.registry.model.annotations.DeleteAfterMigration;
|
||||
import google.registry.model.billing.BillingEvent;
|
||||
import google.registry.model.contact.ContactBase;
|
||||
import google.registry.model.contact.ContactHistory;
|
||||
import google.registry.model.domain.DomainContent;
|
||||
import google.registry.model.domain.DomainHistory;
|
||||
import google.registry.model.eppcommon.AuthInfo;
|
||||
import google.registry.model.host.HostHistory;
|
||||
import google.registry.model.poll.PollMessage;
|
||||
import google.registry.model.registrar.Registrar;
|
||||
import google.registry.model.replay.SqlEntity;
|
||||
import google.registry.model.reporting.HistoryEntry;
|
||||
import google.registry.util.DiffUtils;
|
||||
import java.io.Serializable;
|
||||
import java.lang.reflect.Field;
|
||||
import java.math.BigInteger;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
import org.apache.beam.sdk.metrics.Counter;
|
||||
import org.apache.beam.sdk.metrics.Metrics;
|
||||
import org.apache.beam.sdk.transforms.DoFn;
|
||||
import org.apache.beam.sdk.values.KV;
|
||||
import org.apache.beam.sdk.values.TupleTag;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
/** Helpers for use by {@link ValidateDatabasePipeline}. */
|
||||
@DeleteAfterMigration
|
||||
final class ValidateSqlUtils {
|
||||
|
||||
private ValidateSqlUtils() {}
|
||||
|
||||
private static final ImmutableSet<String> PROBER_CELLS = ImmutableSet.of("IQ", "LG", "TL");
|
||||
private static final ImmutableSet<String> PROBER_TYPES =
|
||||
ImmutableSet.of("ANYT", "ANYTES", "CANARY");
|
||||
|
||||
/**
|
||||
* Query template for finding the median value of the {@code history_revision_id} column in one of
|
||||
* the History tables.
|
||||
*
|
||||
* <p>The {@link ValidateDatabasePipeline} uses this query to parallelize the query to some of the
|
||||
* history tables. Although the {@code repo_id} column is the leading column in the primary keys
|
||||
* of these tables, in practice and with production data, division by {@code history_revision_id}
|
||||
* works slightly faster for unknown reasons.
|
||||
*/
|
||||
private static final String MEDIAN_ID_QUERY_TEMPLATE =
|
||||
"SELECT history_revision_id FROM ( "
|
||||
+ " SELECT"
|
||||
+ " ROW_NUMBER() OVER (ORDER BY history_revision_id ASC) AS rownumber,"
|
||||
+ " history_revision_id"
|
||||
+ " FROM \"%TABLE%\""
|
||||
+ ") AS foo\n"
|
||||
+ "WHERE rownumber in (select count(*) / 2 + 1 from \"%TABLE%\")";
|
||||
|
||||
static Optional<Long> getMedianIdForHistoryTable(String tableName) {
|
||||
Preconditions.checkArgument(
|
||||
tableName.endsWith("History"), "Table must be one of the History tables.");
|
||||
String sqlText = MEDIAN_ID_QUERY_TEMPLATE.replace("%TABLE%", tableName);
|
||||
List results =
|
||||
jpaTm()
|
||||
.transact(() -> jpaTm().getEntityManager().createNativeQuery(sqlText).getResultList());
|
||||
verify(results.size() < 2, "MidPoint query should have at most one result.");
|
||||
if (results.isEmpty()) {
|
||||
return Optional.empty();
|
||||
}
|
||||
return Optional.of(((BigInteger) results.get(0)).longValue());
|
||||
}
|
||||
|
||||
static TupleTag<SqlEntity> createSqlEntityTupleTag(Class<? extends SqlEntity> actualType) {
|
||||
return new TupleTag<SqlEntity>(actualType.getSimpleName()) {};
|
||||
}
|
||||
|
||||
static class CompareSqlEntity extends DoFn<KV<String, Iterable<SqlEntity>>, String> {
|
||||
private final HashMap<String, Counter> totalCounters = new HashMap<>();
|
||||
private final HashMap<String, Counter> missingCounters = new HashMap<>();
|
||||
private final HashMap<String, Counter> unequalCounters = new HashMap<>();
|
||||
private final HashMap<String, Counter> badEntityCounters = new HashMap<>();
|
||||
private final HashMap<String, Counter> duplicateEntityCounters = new HashMap<>();
|
||||
|
||||
private String getCounterKey(Class<?> clazz) {
|
||||
return PollMessage.class.isAssignableFrom(clazz) ? "PollMessage" : clazz.getSimpleName();
|
||||
}
|
||||
|
||||
private synchronized void ensureCounterExists(String counterKey) {
|
||||
if (totalCounters.containsKey(counterKey)) {
|
||||
return;
|
||||
}
|
||||
totalCounters.put(counterKey, Metrics.counter("CompareDB", "Total Compared: " + counterKey));
|
||||
missingCounters.put(
|
||||
counterKey, Metrics.counter("CompareDB", "Missing In One DB: " + counterKey));
|
||||
unequalCounters.put(counterKey, Metrics.counter("CompareDB", "Not Equal:" + counterKey));
|
||||
badEntityCounters.put(counterKey, Metrics.counter("CompareDB", "Bad Entities:" + counterKey));
|
||||
duplicateEntityCounters.put(
|
||||
counterKey, Metrics.counter("CompareDB", "Duplicate Entities:" + counterKey));
|
||||
}
|
||||
|
||||
String duplicateEntityLog(String key, ImmutableList<SqlEntity> entities) {
|
||||
return String.format("%s: %d entities.", key, entities.size());
|
||||
}
|
||||
|
||||
String unmatchedEntityLog(String key, SqlEntity entry) {
|
||||
// For a PollMessage only found in Datastore, key is not enough to query for it.
|
||||
return String.format("Missing in one DB:\n%s", entry instanceof PollMessage ? entry : key);
|
||||
}
|
||||
|
||||
/**
|
||||
* A rudimentary debugging helper that prints the first pair of unequal entities in each worker.
|
||||
* This will be removed when we start exporting such entities to GCS.
|
||||
*/
|
||||
String unEqualEntityLog(String key, SqlEntity entry0, SqlEntity entry1) {
|
||||
Map<String, Object> fields0 = ((ImmutableObject) entry0).toDiffableFieldMap();
|
||||
Map<String, Object> fields1 = ((ImmutableObject) entry1).toDiffableFieldMap();
|
||||
return key + " " + DiffUtils.prettyPrintEntityDeepDiff(fields0, fields1);
|
||||
}
|
||||
|
||||
String badEntitiesLog(String key, SqlEntity entry0, SqlEntity entry1) {
|
||||
Map<String, Object> fields0 = ((ImmutableObject) entry0).toDiffableFieldMap();
|
||||
Map<String, Object> fields1 = ((ImmutableObject) entry1).toDiffableFieldMap();
|
||||
return String.format(
|
||||
"Failed to parse one or both entities for key %s:\n%s\n",
|
||||
key, DiffUtils.prettyPrintEntityDeepDiff(fields0, fields1));
|
||||
}
|
||||
|
||||
@ProcessElement
|
||||
public void processElement(
|
||||
@Element KV<String, Iterable<SqlEntity>> kv, OutputReceiver<String> out) {
|
||||
ImmutableList<SqlEntity> entities = ImmutableList.copyOf(kv.getValue());
|
||||
|
||||
verify(!entities.isEmpty(), "Can't happen: no value for key %s.", kv.getKey());
|
||||
|
||||
String counterKey = getCounterKey(entities.get(0).getClass());
|
||||
ensureCounterExists(counterKey);
|
||||
totalCounters.get(counterKey).inc();
|
||||
|
||||
if (entities.size() > 2) {
|
||||
// Duplicates may happen with Cursors if imported across projects. Its key in Datastore, the
|
||||
// id field, encodes the project name and is not fixed by the importing job.
|
||||
duplicateEntityCounters.get(counterKey).inc();
|
||||
out.output(duplicateEntityLog(kv.getKey(), entities) + "\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (entities.size() == 1) {
|
||||
if (isSpecialCaseProberEntity(entities.get(0))) {
|
||||
return;
|
||||
}
|
||||
missingCounters.get(counterKey).inc();
|
||||
out.output(unmatchedEntityLog(kv.getKey(), entities.get(0)) + "\n");
|
||||
return;
|
||||
}
|
||||
SqlEntity entity0 = entities.get(0);
|
||||
SqlEntity entity1 = entities.get(1);
|
||||
|
||||
if (isSpecialCaseProberEntity(entity0) && isSpecialCaseProberEntity(entity1)) {
|
||||
// Ignore prober-related data: their deletions are not propagated from Datastore to SQL.
|
||||
// When code reaches here, in most cases it involves one soft deleted entity in Datastore
|
||||
// and an SQL entity with its pre-deletion status.
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
entity0 = normalizeEntity(entity0);
|
||||
entity1 = normalizeEntity(entity1);
|
||||
} catch (Exception e) {
|
||||
badEntityCounters.get(counterKey).inc();
|
||||
out.output(badEntitiesLog(kv.getKey(), entity0, entity1));
|
||||
return;
|
||||
}
|
||||
|
||||
Map<String, Object> fields0 =
|
||||
Maps.transformEntries(
|
||||
((ImmutableObject) entity0).toDiffableFieldMap(), new DiffableFieldNormalizer());
|
||||
Map<String, Object> fields1 =
|
||||
Maps.transformEntries(
|
||||
((ImmutableObject) entity1).toDiffableFieldMap(), new DiffableFieldNormalizer());
|
||||
if (!Objects.equals(fields0, fields1)) {
|
||||
unequalCounters.get(counterKey).inc();
|
||||
out.output(kv.getKey() + " " + DiffUtils.prettyPrintEntityDeepDiff(fields0, fields1));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Normalizes trivial differences between objects persisted in Datastore and SQL.
|
||||
*
|
||||
* <p>This class works on a map generated by {@link ImmutableObject#toDiffableFieldMap}, and
|
||||
* performs the following changes:
|
||||
*
|
||||
* <ul>
|
||||
* <li>If a value is an empty {@link Collection}, it is converted to null
|
||||
* <li>For each {@link google.registry.model.eppcommon.Address} object, empty strings are
|
||||
* removed from its {@code string} field, which is a {@link List}.
|
||||
* </ul>
|
||||
*/
|
||||
static class DiffableFieldNormalizer
|
||||
implements EntryTransformer<String, Object, Object>, Serializable {
|
||||
|
||||
@Override
|
||||
public Object transformEntry(String key, @Nullable Object value) {
|
||||
if (value instanceof Collection && ((Collection<?>) value).isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
if (key.equals("street") && value instanceof List) {
|
||||
return ((List<?>) value)
|
||||
.stream().filter(v -> v != null && !Objects.equals("", v)).collect(Collectors.toList());
|
||||
}
|
||||
// Short-term hack: LinkedHashMap<String, ?> represents a child ImmutableObject instance.
|
||||
if (value instanceof LinkedHashMap
|
||||
&& ((LinkedHashMap<?, ?>) value).keySet().stream().anyMatch(e -> e instanceof String)) {
|
||||
return Maps.transformEntries((Map<String, Object>) value, this);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
static SqlEntity normalizeEntity(SqlEntity sqlEntity) {
|
||||
if (sqlEntity instanceof EppResource) {
|
||||
return normalizeEppResource(sqlEntity);
|
||||
}
|
||||
if (sqlEntity instanceof HistoryEntry) {
|
||||
return (SqlEntity) normalizeHistoryEntry((HistoryEntry) sqlEntity);
|
||||
}
|
||||
return sqlEntity;
|
||||
}
|
||||
|
||||
/**
|
||||
* Normalizes an {@link EppResource} instance for comparison.
|
||||
*
|
||||
* <p>This method may modify the input object using reflection instead of making a copy with
|
||||
* {@code eppResource.asBuilder().build()}, because when {@code eppResource} is a {@link
|
||||
* google.registry.model.domain.DomainBase}, the {@code build} method accesses the Database, which
|
||||
* we want to avoid.
|
||||
*/
|
||||
static SqlEntity normalizeEppResource(SqlEntity eppResource) {
|
||||
try {
|
||||
Field authField =
|
||||
eppResource instanceof DomainContent
|
||||
? DomainContent.class.getDeclaredField("authInfo")
|
||||
: eppResource instanceof ContactBase
|
||||
? ContactBase.class.getDeclaredField("authInfo")
|
||||
: null;
|
||||
if (authField != null) {
|
||||
authField.setAccessible(true);
|
||||
AuthInfo authInfo = (AuthInfo) authField.get(eppResource);
|
||||
// When AuthInfo is missing, the authInfo field is null if the object is loaded from
|
||||
// Datastore, or a PasswordAuth with null properties if loaded from SQL. In the second case
|
||||
// we set the authInfo field to null.
|
||||
if (authInfo != null
|
||||
&& authInfo.getPw() != null
|
||||
&& authInfo.getPw().getRepoId() == null
|
||||
&& authInfo.getPw().getValue() == null) {
|
||||
authField.set(eppResource, null);
|
||||
}
|
||||
}
|
||||
|
||||
Field field = EppResource.class.getDeclaredField("revisions");
|
||||
field.setAccessible(true);
|
||||
field.set(eppResource, null);
|
||||
return eppResource;
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Normalizes a {@link HistoryEntry} for comparison.
|
||||
*
|
||||
* <p>This method modifies the input using reflection because relevant builder methods performs
|
||||
* unwanted checks and changes.
|
||||
*/
|
||||
static HistoryEntry normalizeHistoryEntry(HistoryEntry historyEntry) {
|
||||
// History objects from Datastore do not have details of their EppResource objects
|
||||
// (domainContent, contactBase, hostBase).
|
||||
try {
|
||||
if (historyEntry instanceof DomainHistory) {
|
||||
Field domainContent = DomainHistory.class.getDeclaredField("domainContent");
|
||||
domainContent.setAccessible(true);
|
||||
domainContent.set(historyEntry, null);
|
||||
// Convert empty domainTransactionRecords to null for comparison.
|
||||
Field domainTransactionRecords =
|
||||
HistoryEntry.class.getDeclaredField("domainTransactionRecords");
|
||||
domainTransactionRecords.setAccessible(true);
|
||||
Set<?> domainTransactionRecordsValue = (Set<?>) domainTransactionRecords.get(historyEntry);
|
||||
if (domainTransactionRecordsValue != null && domainTransactionRecordsValue.isEmpty()) {
|
||||
domainTransactionRecords.set(historyEntry, null);
|
||||
}
|
||||
// DomainHistory in Datastore does not have the following properties either:
|
||||
Field nsHosts = DomainHistory.class.getDeclaredField("nsHosts");
|
||||
nsHosts.setAccessible(true);
|
||||
nsHosts.set(historyEntry, null);
|
||||
Field dsDataHistories = DomainHistory.class.getDeclaredField("dsDataHistories");
|
||||
dsDataHistories.setAccessible(true);
|
||||
dsDataHistories.set(historyEntry, null);
|
||||
Field gracePeriodHistories = DomainHistory.class.getDeclaredField("gracePeriodHistories");
|
||||
gracePeriodHistories.setAccessible(true);
|
||||
gracePeriodHistories.set(historyEntry, null);
|
||||
} else if (historyEntry instanceof ContactHistory) {
|
||||
Field contactBase = ContactHistory.class.getDeclaredField("contactBase");
|
||||
contactBase.setAccessible(true);
|
||||
contactBase.set(historyEntry, null);
|
||||
} else if (historyEntry instanceof HostHistory) {
|
||||
Field hostBase = HostHistory.class.getDeclaredField("hostBase");
|
||||
hostBase.setAccessible(true);
|
||||
hostBase.set(historyEntry, null);
|
||||
}
|
||||
return historyEntry;
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns {@code true} if {@code entity} is created by the prober and needs special treatment.
|
||||
*
|
||||
* <p>{@link EppResource} entities created by the prober are deleted by a cron job that bypasses
|
||||
* the CommitLog mechanism. As a result, their deletions are not propagated to SQL, creating two
|
||||
* types of mismatches: an entity exists in both databases but differs in lastUpdateTime and
|
||||
* deletionTime; an entity only exists in the SQL database.
|
||||
*
|
||||
* <p>In production, there are few placeholder {@link Registrar registrars} that do not exist in
|
||||
* Datastore. They were manually created to in SQL to solve a one-time problem (see b/187946868
|
||||
* for details). They can be ignored in the database comparison.
|
||||
*/
|
||||
static boolean isSpecialCaseProberEntity(Object entity) {
|
||||
if (entity instanceof EppResource) {
|
||||
EppResource host = (EppResource) entity;
|
||||
if (host.getPersistedCurrentSponsorRegistrarId().startsWith("prober-")) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (entity instanceof HistoryEntry) {
|
||||
HistoryEntry historyEntry = (HistoryEntry) entity;
|
||||
if (historyEntry.getRegistrarId().startsWith("prober-")) {
|
||||
// Not all prober entities have "prober-" as registrar prefix.
|
||||
return true;
|
||||
}
|
||||
if (Objects.equals(historyEntry.getReason(), "Deletion of prober data")) {
|
||||
// Soft-delete event in Datastore that is not propagated to SQL.
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (entity instanceof DomainHistory) {
|
||||
DomainHistory domainHistory = (DomainHistory) entity;
|
||||
if (domainHistory.getDomainContent().isPresent()
|
||||
&& domainHistory.getDomainContent().get().getDomainName().startsWith("prober-")) {
|
||||
// Asynchronously replicated event in SQL.
|
||||
return true;
|
||||
}
|
||||
if (domainHistory.getDomainRepoId() != null) {
|
||||
// Some synthetic events only have domainRepoId.
|
||||
String repoId = domainHistory.getDomainRepoId();
|
||||
if (Transforms.IGNORED_DOMAINS.contains(repoId)) {
|
||||
return true;
|
||||
}
|
||||
String suffix = repoId.substring(repoId.indexOf('-') + 1);
|
||||
String cell = suffix.substring(0, 2);
|
||||
suffix = suffix.substring(2);
|
||||
if (PROBER_CELLS.contains(cell) && PROBER_TYPES.contains(suffix)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (entity instanceof ContactHistory) {
|
||||
if (Transforms.IGNORED_CONTACTS.contains(((ContactHistory) entity).getContactRepoId())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (entity instanceof HostHistory) {
|
||||
if (Transforms.IGNORED_HOSTS.contains(((HostHistory) entity).getHostRepoId())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (entity instanceof BillingEvent) {
|
||||
BillingEvent event = (BillingEvent) entity;
|
||||
if (event.getRegistrarId().startsWith("prober-")) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (entity instanceof PollMessage) {
|
||||
if (((PollMessage) entity).getRegistrarId().startsWith("prober-")) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (RegistryEnvironment.get().equals(RegistryEnvironment.PRODUCTION)
|
||||
&& entity instanceof Registrar) {
|
||||
Registrar registrar = (Registrar) entity;
|
||||
if (registrar.getRegistrarId().startsWith("prober-wj-")) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -688,7 +688,7 @@ public final class RegistryConfig {
|
||||
@Provides
|
||||
@Config("defaultShouldPublishInvoices")
|
||||
public static boolean provideDefaultShouldPublishInvoices() {
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1351,6 +1351,12 @@ public final class RegistryConfig {
|
||||
public static int provideWipeOutQueryBatchSize(RegistryConfigSettings config) {
|
||||
return config.contactHistory.wipeOutQueryBatchSize;
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Config("jdbcBatchSize")
|
||||
public static int provideHibernateJdbcBatchSize(RegistryConfigSettings config) {
|
||||
return config.hibernate.jdbcBatchSize;
|
||||
}
|
||||
}
|
||||
|
||||
/** Returns the App Engine project ID, which is based off the environment name. */
|
||||
@@ -1555,7 +1561,7 @@ public final class RegistryConfig {
|
||||
* https://docs.jboss.org/hibernate/orm/5.6/userguide/html_single/Hibernate_User_Guide.html,
|
||||
* recommend between 10 and 50.
|
||||
*/
|
||||
public static String getHibernateJdbcBatchSize() {
|
||||
public static int getHibernateJdbcBatchSize() {
|
||||
return CONFIG_SETTINGS.get().hibernate.jdbcBatchSize;
|
||||
}
|
||||
|
||||
|
||||
@@ -120,7 +120,7 @@ public class RegistryConfigSettings {
|
||||
public String hikariMinimumIdle;
|
||||
public String hikariMaximumPoolSize;
|
||||
public String hikariIdleTimeout;
|
||||
public String jdbcBatchSize;
|
||||
public int jdbcBatchSize;
|
||||
public String jdbcFetchSize;
|
||||
}
|
||||
|
||||
|
||||
@@ -157,12 +157,6 @@
|
||||
<url-pattern>/_dr/cron/readDnsQueue</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<!-- Replicates SQL transactions to Datastore during the Registry 3.0 migration. -->
|
||||
<servlet-mapping>
|
||||
<servlet-name>backend-servlet</servlet-name>
|
||||
<url-pattern>/_dr/cron/replicateToDatastore</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<!-- Publishes DNS updates. -->
|
||||
<servlet-mapping>
|
||||
<servlet-name>backend-servlet</servlet-name>
|
||||
@@ -243,12 +237,6 @@
|
||||
<url-pattern>/_dr/task/killCommitLogs</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<!-- Replays Datastore commit logs to SQL. -->
|
||||
<servlet-mapping>
|
||||
<servlet-name>backend-servlet</servlet-name>
|
||||
<url-pattern>/_dr/task/replayCommitLogsToSql</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<!-- MapReduce servlet. -->
|
||||
<servlet>
|
||||
<servlet-name>mapreduce</servlet-name>
|
||||
@@ -334,15 +322,6 @@
|
||||
<url-pattern>/_dr/task/resaveEntity</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<!--
|
||||
Deletes contacts and hosts enqueued for asynchronous deletion if they are
|
||||
not referenced by any domain.
|
||||
-->
|
||||
<servlet-mapping>
|
||||
<servlet-name>backend-servlet</servlet-name>
|
||||
<url-pattern>/_dr/task/deleteContactsAndHosts</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<!-- Enqueues DNS update tasks following a host rename. -->
|
||||
<servlet-mapping>
|
||||
<servlet-name>backend-servlet</servlet-name>
|
||||
@@ -422,18 +401,6 @@ have been in the database for a certain period of time. -->
|
||||
<url-pattern>/_dr/task/wipeOutDatastore</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<!-- Action to create synthetic history entries during async replication to SQL -->
|
||||
<servlet-mapping>
|
||||
<servlet-name>backend-servlet</servlet-name>
|
||||
<url-pattern>/_dr/task/createSyntheticHistoryEntries</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<!-- Action to sync Datastore to a snapshot of the primary SQL database. -->
|
||||
<servlet-mapping>
|
||||
<servlet-name>backend-servlet</servlet-name>
|
||||
<url-pattern>/_dr/task/syncDatastoreToSqlSnapshot</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<!-- Security config -->
|
||||
<security-constraint>
|
||||
<web-resource-collection>
|
||||
|
||||
@@ -255,7 +255,7 @@
|
||||
</cron>
|
||||
|
||||
<cron>
|
||||
<url><![CDATA[/_dr/cron/fanout?queue=retryable-cron-tasks&endpoint=/_dr/task/generateInvoices&runInEmpty]]></url>
|
||||
<url><![CDATA[/_dr/cron/fanout?queue=retryable-cron-tasks&endpoint=/_dr/task/generateInvoices?shouldPublish=true&runInEmpty]]></url>
|
||||
<description>
|
||||
Starts the beam/invoicing/InvoicingPipeline Dataflow template, which creates the overall invoice and
|
||||
detail report CSVs for last month, storing them in gs://[PROJECT-ID]-billing/invoices/yyyy-MM.
|
||||
|
||||
@@ -120,7 +120,6 @@ class SyncRegistrarsSheet {
|
||||
builder.put("registrarName", convert(registrar.getRegistrarName()));
|
||||
builder.put("state", convert(registrar.getState()));
|
||||
builder.put("ianaIdentifier", convert(registrar.getIanaIdentifier()));
|
||||
builder.put("billingIdentifier", convert(registrar.getBillingIdentifier()));
|
||||
builder.put("billingAccountMap", convert(registrar.getBillingAccountMap()));
|
||||
builder.put("primaryContacts", convertContacts(contacts, byType(ADMIN)));
|
||||
builder.put("techContacts", convertContacts(contacts, byType(TECH)));
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
package google.registry.flows;
|
||||
|
||||
import static com.google.common.collect.Sets.intersection;
|
||||
import static google.registry.model.EppResourceUtils.getLinkedDomainKeys;
|
||||
import static google.registry.model.EppResourceUtils.isLinked;
|
||||
import static google.registry.model.EppResourceUtils.loadByForeignKey;
|
||||
import static google.registry.model.index.ForeignKeyIndex.loadAndGetKey;
|
||||
@@ -54,8 +53,6 @@ import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Predicate;
|
||||
import org.joda.time.DateTime;
|
||||
|
||||
/** Static utility functions for resource flows. */
|
||||
@@ -63,12 +60,6 @@ public final class ResourceFlowUtils {
|
||||
|
||||
private ResourceFlowUtils() {}
|
||||
|
||||
/**
|
||||
* In {@link #checkLinkedDomains(String, DateTime, Class, Function)}, check this (arbitrary)
|
||||
* number of query results.
|
||||
*/
|
||||
private static final int FAILFAST_CHECK_COUNT = 5;
|
||||
|
||||
/** Check that the given registrarId corresponds to the owner of given resource. */
|
||||
public static void verifyResourceOwnership(String myRegistrarId, EppResource resource)
|
||||
throws EppException {
|
||||
@@ -85,46 +76,18 @@ public final class ResourceFlowUtils {
|
||||
* consistent, so we only check a few domains to fail fast.
|
||||
*/
|
||||
public static <R extends EppResource> void checkLinkedDomains(
|
||||
final String targetId,
|
||||
final DateTime now,
|
||||
final Class<R> resourceClass,
|
||||
final Function<DomainBase, ImmutableSet<?>> getPotentialReferences)
|
||||
throws EppException {
|
||||
final String targetId, final DateTime now, final Class<R> resourceClass) throws EppException {
|
||||
EppException failfastException =
|
||||
tm().isOfy()
|
||||
? tm().doTransactionless(
|
||||
() -> {
|
||||
final ForeignKeyIndex<R> fki =
|
||||
ForeignKeyIndex.load(resourceClass, targetId, now);
|
||||
if (fki == null) {
|
||||
return new ResourceDoesNotExistException(resourceClass, targetId);
|
||||
}
|
||||
// Query for the first few linked domains, and if found, actually load them.
|
||||
// The query is eventually consistent and so might be very stale, but the
|
||||
// direct load will not be stale, just non-transactional. If we find at least
|
||||
// one actual reference then we can reliably fail. If we don't find any,
|
||||
// we can't trust the query and need to do the full mapreduce.
|
||||
Iterable<VKey<DomainBase>> keys =
|
||||
getLinkedDomainKeys(fki.getResourceKey(), now, FAILFAST_CHECK_COUNT);
|
||||
|
||||
VKey<R> resourceVKey = fki.getResourceKey();
|
||||
Predicate<DomainBase> predicate =
|
||||
domain -> getPotentialReferences.apply(domain).contains(resourceVKey);
|
||||
return tm().loadByKeys(keys).values().stream().anyMatch(predicate)
|
||||
? new ResourceToDeleteIsReferencedException()
|
||||
: null;
|
||||
})
|
||||
: tm().transact(
|
||||
() -> {
|
||||
final ForeignKeyIndex<R> fki =
|
||||
ForeignKeyIndex.load(resourceClass, targetId, now);
|
||||
if (fki == null) {
|
||||
return new ResourceDoesNotExistException(resourceClass, targetId);
|
||||
}
|
||||
return isLinked(fki.getResourceKey(), now)
|
||||
? new ResourceToDeleteIsReferencedException()
|
||||
: null;
|
||||
});
|
||||
tm().transact(
|
||||
() -> {
|
||||
final ForeignKeyIndex<R> fki = ForeignKeyIndex.load(resourceClass, targetId, now);
|
||||
if (fki == null) {
|
||||
return new ResourceDoesNotExistException(resourceClass, targetId);
|
||||
}
|
||||
return isLinked(fki.getResourceKey(), now)
|
||||
? new ResourceToDeleteIsReferencedException()
|
||||
: null;
|
||||
});
|
||||
if (failfastException != null) {
|
||||
throw failfastException;
|
||||
}
|
||||
|
||||
@@ -23,7 +23,6 @@ import static google.registry.flows.ResourceFlowUtils.verifyResourceOwnership;
|
||||
import static google.registry.model.ResourceTransferUtils.denyPendingTransfer;
|
||||
import static google.registry.model.ResourceTransferUtils.handlePendingTransferOnDelete;
|
||||
import static google.registry.model.eppoutput.Result.Code.SUCCESS;
|
||||
import static google.registry.model.eppoutput.Result.Code.SUCCESS_WITH_ACTION_PENDING;
|
||||
import static google.registry.model.transfer.TransferStatus.SERVER_CANCELLED;
|
||||
import static google.registry.persistence.transaction.TransactionManagerFactory.assertAsyncActionsAreAllowed;
|
||||
import static google.registry.persistence.transaction.TransactionManagerFactory.tm;
|
||||
@@ -39,13 +38,11 @@ import google.registry.flows.TransactionalFlow;
|
||||
import google.registry.flows.annotations.ReportingSpec;
|
||||
import google.registry.model.contact.ContactHistory;
|
||||
import google.registry.model.contact.ContactResource;
|
||||
import google.registry.model.domain.DomainBase;
|
||||
import google.registry.model.domain.metadata.MetadataExtension;
|
||||
import google.registry.model.eppcommon.AuthInfo;
|
||||
import google.registry.model.eppcommon.StatusValue;
|
||||
import google.registry.model.eppcommon.Trid;
|
||||
import google.registry.model.eppoutput.EppResponse;
|
||||
import google.registry.model.eppoutput.Result.Code;
|
||||
import google.registry.model.reporting.HistoryEntry.Type;
|
||||
import google.registry.model.reporting.IcannReportingTypes.ActivityReportField;
|
||||
import java.util.Optional;
|
||||
@@ -97,41 +94,26 @@ public final class ContactDeleteFlow implements TransactionalFlow {
|
||||
extensionManager.validate();
|
||||
assertAsyncActionsAreAllowed();
|
||||
DateTime now = tm().getTransactionTime();
|
||||
checkLinkedDomains(targetId, now, ContactResource.class, DomainBase::getReferencedContacts);
|
||||
checkLinkedDomains(targetId, now, ContactResource.class);
|
||||
ContactResource existingContact = loadAndVerifyExistence(ContactResource.class, targetId, now);
|
||||
verifyNoDisallowedStatuses(existingContact, DISALLOWED_STATUSES);
|
||||
verifyOptionalAuthInfo(authInfo, existingContact);
|
||||
if (!isSuperuser) {
|
||||
verifyResourceOwnership(registrarId, existingContact);
|
||||
}
|
||||
Type historyEntryType;
|
||||
Code resultCode;
|
||||
ContactResource newContact;
|
||||
if (tm().isOfy()) {
|
||||
asyncTaskEnqueuer.enqueueAsyncDelete(
|
||||
existingContact, tm().getTransactionTime(), registrarId, trid, isSuperuser);
|
||||
newContact = existingContact.asBuilder().addStatusValue(StatusValue.PENDING_DELETE).build();
|
||||
historyEntryType = Type.CONTACT_PENDING_DELETE;
|
||||
resultCode = SUCCESS_WITH_ACTION_PENDING;
|
||||
} else {
|
||||
// Handle pending transfers on contact deletion.
|
||||
newContact =
|
||||
existingContact.getStatusValues().contains(StatusValue.PENDING_TRANSFER)
|
||||
? denyPendingTransfer(existingContact, SERVER_CANCELLED, now, registrarId)
|
||||
: existingContact;
|
||||
// Wipe out PII on contact deletion.
|
||||
newContact =
|
||||
newContact.asBuilder().wipeOut().setStatusValues(null).setDeletionTime(now).build();
|
||||
historyEntryType = Type.CONTACT_DELETE;
|
||||
resultCode = SUCCESS;
|
||||
}
|
||||
// Handle pending transfers on contact deletion.
|
||||
ContactResource newContact =
|
||||
existingContact.getStatusValues().contains(StatusValue.PENDING_TRANSFER)
|
||||
? denyPendingTransfer(existingContact, SERVER_CANCELLED, now, registrarId)
|
||||
: existingContact;
|
||||
// Wipe out PII on contact deletion.
|
||||
newContact =
|
||||
newContact.asBuilder().wipeOut().setStatusValues(null).setDeletionTime(now).build();
|
||||
ContactHistory contactHistory =
|
||||
historyBuilder.setType(historyEntryType).setContact(newContact).build();
|
||||
if (!tm().isOfy()) {
|
||||
handlePendingTransferOnDelete(existingContact, newContact, now, contactHistory);
|
||||
}
|
||||
historyBuilder.setType(Type.CONTACT_DELETE).setContact(newContact).build();
|
||||
handlePendingTransferOnDelete(existingContact, newContact, now, contactHistory);
|
||||
tm().insert(contactHistory);
|
||||
tm().update(newContact);
|
||||
return responseBuilder.setResultFromCode(resultCode).build();
|
||||
return responseBuilder.setResultFromCode(SUCCESS).build();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,8 @@ package google.registry.flows.custom;
|
||||
import google.registry.flows.FlowMetadata;
|
||||
import google.registry.flows.SessionMetadata;
|
||||
import google.registry.model.eppinput.EppInput;
|
||||
import java.util.Optional;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
/**
|
||||
* An abstract base class for all flow custom logic that stores the flow's {@link EppInput} and
|
||||
@@ -24,26 +26,38 @@ import google.registry.model.eppinput.EppInput;
|
||||
*/
|
||||
public abstract class BaseFlowCustomLogic {
|
||||
|
||||
private final EppInput eppInput;
|
||||
private final SessionMetadata sessionMetadata;
|
||||
private final FlowMetadata flowMetadata;
|
||||
@Nullable private final EppInput eppInput;
|
||||
@Nullable private final SessionMetadata sessionMetadata;
|
||||
@Nullable private final FlowMetadata flowMetadata;
|
||||
|
||||
/**
|
||||
* Constructs a BaseFlowCustomLogic for the specified EPP flow state.
|
||||
*
|
||||
* <p>Note that it is possible for the EPP flow state to be absent, which happens when the custom
|
||||
* logic is running outside the context of an EPP flow (e.g. {@link DomainPricingCustomLogic} in
|
||||
* backend actions).
|
||||
*/
|
||||
protected BaseFlowCustomLogic(
|
||||
EppInput eppInput, SessionMetadata sessionMetadata, FlowMetadata flowMetadata) {
|
||||
@Nullable EppInput eppInput,
|
||||
@Nullable SessionMetadata sessionMetadata,
|
||||
@Nullable FlowMetadata flowMetadata) {
|
||||
this.eppInput = eppInput;
|
||||
this.sessionMetadata = sessionMetadata;
|
||||
this.flowMetadata = flowMetadata;
|
||||
}
|
||||
|
||||
protected EppInput getEppInput() {
|
||||
return eppInput;
|
||||
/** Returns the {@link EppInput}, which may be empty outside a flow context. */
|
||||
protected Optional<EppInput> getEppInput() {
|
||||
return Optional.ofNullable(eppInput);
|
||||
}
|
||||
|
||||
protected SessionMetadata getSessionMetadata() {
|
||||
return sessionMetadata;
|
||||
/** Returns the {@link SessionMetadata}, which may be empty outside a flow context. */
|
||||
protected Optional<SessionMetadata> getSessionMetadata() {
|
||||
return Optional.ofNullable(sessionMetadata);
|
||||
}
|
||||
|
||||
protected FlowMetadata getFlowMetadata() {
|
||||
return flowMetadata;
|
||||
/** Returns the {@link FlowMetadata}, which may be empty outside a flow context. */
|
||||
protected Optional<FlowMetadata> getFlowMetadata() {
|
||||
return Optional.ofNullable(flowMetadata);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ import google.registry.config.RegistryConfig.ConfigModule;
|
||||
import google.registry.flows.FlowMetadata;
|
||||
import google.registry.flows.SessionMetadata;
|
||||
import google.registry.model.eppinput.EppInput;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* A no-op base custom logic factory.
|
||||
@@ -63,7 +64,10 @@ public class CustomLogicFactory {
|
||||
}
|
||||
|
||||
public DomainPricingCustomLogic forDomainPricing(
|
||||
EppInput eppInput, SessionMetadata sessionMetadata, FlowMetadata flowMetadata) {
|
||||
return new DomainPricingCustomLogic(eppInput, sessionMetadata, flowMetadata);
|
||||
Optional<EppInput> eppInput,
|
||||
Optional<SessionMetadata> sessionMetadata,
|
||||
Optional<FlowMetadata> flowMetadata) {
|
||||
return new DomainPricingCustomLogic(
|
||||
eppInput.orElse(null), sessionMetadata.orElse(null), flowMetadata.orElse(null));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,15 +14,17 @@
|
||||
|
||||
package google.registry.flows.custom;
|
||||
|
||||
import dagger.BindsOptionalOf;
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
import google.registry.flows.FlowMetadata;
|
||||
import google.registry.flows.SessionMetadata;
|
||||
import google.registry.model.eppinput.EppInput;
|
||||
import java.util.Optional;
|
||||
|
||||
/** Dagger module to provide instances of custom logic classes for EPP flows. */
|
||||
@Module
|
||||
public class CustomLogicModule {
|
||||
public abstract class CustomLogicModule {
|
||||
|
||||
@Provides
|
||||
static DomainCreateFlowCustomLogic provideDomainCreateFlowCustomLogic(
|
||||
@@ -81,9 +83,20 @@ public class CustomLogicModule {
|
||||
@Provides
|
||||
static DomainPricingCustomLogic provideDomainPricingCustomLogic(
|
||||
CustomLogicFactory factory,
|
||||
EppInput eppInput,
|
||||
SessionMetadata sessionMetadata,
|
||||
FlowMetadata flowMetadata) {
|
||||
Optional<EppInput> eppInput,
|
||||
Optional<SessionMetadata> sessionMetadata,
|
||||
Optional<FlowMetadata> flowMetadata) {
|
||||
// Note that, for DomainPricingCustomLogic, the EPP flow state won't be present outside the
|
||||
// context of an EPP flow.
|
||||
return factory.forDomainPricing(eppInput, sessionMetadata, flowMetadata);
|
||||
}
|
||||
|
||||
@BindsOptionalOf
|
||||
abstract EppInput optionalEppInput();
|
||||
|
||||
@BindsOptionalOf
|
||||
abstract SessionMetadata optionalSessionMetadata();
|
||||
|
||||
@BindsOptionalOf
|
||||
abstract FlowMetadata optionalFlowMetadata();
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ import google.registry.flows.domain.FeesAndCredits;
|
||||
import google.registry.model.ImmutableObject;
|
||||
import google.registry.model.eppinput.EppInput;
|
||||
import google.registry.model.tld.Registry;
|
||||
import javax.annotation.Nullable;
|
||||
import org.joda.time.DateTime;
|
||||
|
||||
/**
|
||||
@@ -33,8 +34,10 @@ import org.joda.time.DateTime;
|
||||
*/
|
||||
public class DomainPricingCustomLogic extends BaseFlowCustomLogic {
|
||||
|
||||
protected DomainPricingCustomLogic(
|
||||
EppInput eppInput, SessionMetadata sessionMetadata, FlowMetadata flowMetadata) {
|
||||
public DomainPricingCustomLogic(
|
||||
@Nullable EppInput eppInput,
|
||||
@Nullable SessionMetadata sessionMetadata,
|
||||
@Nullable FlowMetadata flowMetadata) {
|
||||
super(eppInput, sessionMetadata, flowMetadata);
|
||||
}
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
|
||||
package google.registry.flows.domain;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkArgument;
|
||||
import static com.google.common.collect.ImmutableSet.toImmutableSet;
|
||||
import static google.registry.flows.FlowUtils.persistEntityChanges;
|
||||
import static google.registry.flows.FlowUtils.validateRegistrarIsLoggedIn;
|
||||
@@ -54,6 +55,7 @@ import static google.registry.persistence.transaction.TransactionManagerFactory.
|
||||
import static google.registry.util.DateTimeUtils.END_OF_TIME;
|
||||
import static google.registry.util.DateTimeUtils.leapSafeAddYears;
|
||||
|
||||
import com.google.auto.value.AutoValue;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.net.InternetDomainName;
|
||||
@@ -80,6 +82,7 @@ import google.registry.model.billing.BillingEvent;
|
||||
import google.registry.model.billing.BillingEvent.Flag;
|
||||
import google.registry.model.billing.BillingEvent.Reason;
|
||||
import google.registry.model.billing.BillingEvent.Recurring;
|
||||
import google.registry.model.billing.BillingEvent.RenewalPriceBehavior;
|
||||
import google.registry.model.domain.DomainBase;
|
||||
import google.registry.model.domain.DomainCommand;
|
||||
import google.registry.model.domain.DomainCommand.Create;
|
||||
@@ -115,7 +118,9 @@ import google.registry.model.tld.Registry.TldType;
|
||||
import google.registry.model.tld.label.ReservationType;
|
||||
import google.registry.tmch.LordnTaskUtils;
|
||||
import java.util.Optional;
|
||||
import javax.annotation.Nullable;
|
||||
import javax.inject.Inject;
|
||||
import org.joda.money.Money;
|
||||
import org.joda.time.DateTime;
|
||||
import org.joda.time.Duration;
|
||||
|
||||
@@ -327,7 +332,10 @@ public final class DomainCreateFlow implements TransactionalFlow {
|
||||
now);
|
||||
// Create a new autorenew billing event and poll message starting at the expiration time.
|
||||
BillingEvent.Recurring autorenewBillingEvent =
|
||||
createAutorenewBillingEvent(domainHistoryKey, registrationExpirationTime);
|
||||
createAutorenewBillingEvent(
|
||||
domainHistoryKey,
|
||||
registrationExpirationTime,
|
||||
getRenewalPriceInfo(isAnchorTenant, allocationToken, feesAndCredits));
|
||||
PollMessage.Autorenew autorenewPollMessage =
|
||||
createAutorenewPollMessage(domainHistoryKey, registrationExpirationTime);
|
||||
ImmutableSet.Builder<ImmutableObject> entitiesToSave = new ImmutableSet.Builder<>();
|
||||
@@ -546,7 +554,9 @@ public final class DomainCreateFlow implements TransactionalFlow {
|
||||
}
|
||||
|
||||
private Recurring createAutorenewBillingEvent(
|
||||
Key<DomainHistory> domainHistoryKey, DateTime registrationExpirationTime) {
|
||||
Key<DomainHistory> domainHistoryKey,
|
||||
DateTime registrationExpirationTime,
|
||||
RenewalPriceInfo renewalpriceInfo) {
|
||||
return new BillingEvent.Recurring.Builder()
|
||||
.setReason(Reason.RENEW)
|
||||
.setFlags(ImmutableSet.of(Flag.AUTO_RENEW))
|
||||
@@ -555,6 +565,8 @@ public final class DomainCreateFlow implements TransactionalFlow {
|
||||
.setEventTime(registrationExpirationTime)
|
||||
.setRecurrenceEndTime(END_OF_TIME)
|
||||
.setParent(domainHistoryKey)
|
||||
.setRenewalPriceBehavior(renewalpriceInfo.renewalPriceBehavior())
|
||||
.setRenewalPrice(renewalpriceInfo.renewalPrice())
|
||||
.build();
|
||||
}
|
||||
|
||||
@@ -611,6 +623,48 @@ public final class DomainCreateFlow implements TransactionalFlow {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines the {@link RenewalPriceBehavior} and the renewal price that needs be stored in the
|
||||
* {@link Recurring} billing events.
|
||||
*
|
||||
* <p>By default, the renewal price is calculated during the process of renewal. Renewal price
|
||||
* should be the createCost if and only if the renewal price behavior in the {@link
|
||||
* AllocationToken} is 'SPECIFIED'.
|
||||
*/
|
||||
static RenewalPriceInfo getRenewalPriceInfo(
|
||||
boolean isAnchorTenant,
|
||||
Optional<AllocationToken> allocationToken,
|
||||
FeesAndCredits feesAndCredits) {
|
||||
if (isAnchorTenant) {
|
||||
if (allocationToken.isPresent()) {
|
||||
checkArgument(
|
||||
allocationToken.get().getRenewalPriceBehavior() != RenewalPriceBehavior.SPECIFIED,
|
||||
"Renewal price behavior cannot be SPECIFIED for anchor tenant");
|
||||
}
|
||||
return RenewalPriceInfo.create(RenewalPriceBehavior.NONPREMIUM, null);
|
||||
} else if (allocationToken.isPresent()
|
||||
&& allocationToken.get().getRenewalPriceBehavior() == RenewalPriceBehavior.SPECIFIED) {
|
||||
return RenewalPriceInfo.create(
|
||||
RenewalPriceBehavior.SPECIFIED, feesAndCredits.getCreateCost());
|
||||
} else {
|
||||
return RenewalPriceInfo.create(RenewalPriceBehavior.DEFAULT, null);
|
||||
}
|
||||
}
|
||||
|
||||
/** A class to store renewal info used in {@link Recurring} billing events. */
|
||||
@AutoValue
|
||||
public abstract static class RenewalPriceInfo {
|
||||
static DomainCreateFlow.RenewalPriceInfo create(
|
||||
RenewalPriceBehavior renewalPriceBehavior, @Nullable Money renewalPrice) {
|
||||
return new AutoValue_DomainCreateFlow_RenewalPriceInfo(renewalPriceBehavior, renewalPrice);
|
||||
}
|
||||
|
||||
public abstract RenewalPriceBehavior renewalPriceBehavior();
|
||||
|
||||
@Nullable
|
||||
public abstract Money renewalPrice();
|
||||
}
|
||||
|
||||
private static ImmutableList<FeeTransformResponseExtension> createResponseExtensions(
|
||||
Optional<FeeCreateCommandExtension> feeCreate, FeesAndCredits feesAndCredits) {
|
||||
return feeCreate.isPresent()
|
||||
|
||||
@@ -26,7 +26,6 @@ import static com.google.common.collect.Sets.difference;
|
||||
import static com.google.common.collect.Sets.intersection;
|
||||
import static com.google.common.collect.Sets.union;
|
||||
import static google.registry.model.domain.DomainBase.MAX_REGISTRATION_YEARS;
|
||||
import static google.registry.model.ofy.ObjectifyService.auditedOfy;
|
||||
import static google.registry.model.tld.Registries.findTldForName;
|
||||
import static google.registry.model.tld.Registries.getTlds;
|
||||
import static google.registry.model.tld.Registry.TldState.GENERAL_AVAILABILITY;
|
||||
@@ -680,7 +679,7 @@ public class DomainFlowUtils {
|
||||
break;
|
||||
case RENEW:
|
||||
builder.setAvailIfSupported(true);
|
||||
fees = pricingLogic.getRenewPrice(registry, domainNameString, now, years).getFees();
|
||||
fees = pricingLogic.getRenewPrice(registry, domainNameString, now, years, null).getFees();
|
||||
break;
|
||||
case RESTORE:
|
||||
// The minimum allowable period per the EPP spec is 1, so, strangely, 1 year still has to be
|
||||
@@ -1159,24 +1158,14 @@ public class DomainFlowUtils {
|
||||
|
||||
private static List<? extends HistoryEntry> findRecentHistoryEntries(
|
||||
DomainBase domainBase, DateTime now, Duration maxSearchPeriod) {
|
||||
if (tm().isOfy()) {
|
||||
return auditedOfy()
|
||||
.load()
|
||||
.type(HistoryEntry.class)
|
||||
.ancestor(domainBase)
|
||||
.filter("modificationTime >=", now.minus(maxSearchPeriod))
|
||||
.order("modificationTime")
|
||||
.list();
|
||||
} else {
|
||||
return jpaTm()
|
||||
.query(
|
||||
"FROM DomainHistory WHERE modificationTime >= :beginning AND domainRepoId = "
|
||||
+ ":repoId ORDER BY modificationTime ASC",
|
||||
DomainHistory.class)
|
||||
.setParameter("beginning", now.minus(maxSearchPeriod))
|
||||
.setParameter("repoId", domainBase.getRepoId())
|
||||
.getResultList();
|
||||
}
|
||||
return jpaTm()
|
||||
.query(
|
||||
"FROM DomainHistory WHERE modificationTime >= :beginning AND domainRepoId = "
|
||||
+ ":repoId ORDER BY modificationTime ASC",
|
||||
DomainHistory.class)
|
||||
.setParameter("beginning", now.minus(maxSearchPeriod))
|
||||
.setParameter("repoId", domainBase.getRepoId())
|
||||
.getResultList();
|
||||
}
|
||||
|
||||
/** Resource linked to this domain does not exist. */
|
||||
|
||||
@@ -102,11 +102,6 @@ public final class DomainInfoFlow implements Flow {
|
||||
verifyOptionalAuthInfo(authInfo, domain);
|
||||
flowCustomLogic.afterValidation(
|
||||
AfterValidationParameters.newBuilder().setDomain(domain).build());
|
||||
// In ofy, refetch all referenced resources.
|
||||
if (tm().isOfy()) {
|
||||
tm().loadByKeys(domain.getNameservers());
|
||||
tm().loadByKeys(domain.getReferencedContacts());
|
||||
}
|
||||
// Registrars can only see a few fields on unauthorized domains.
|
||||
// This is a policy decision that is left up to us by the rfcs.
|
||||
DomainInfoData.Builder infoBuilder =
|
||||
|
||||
@@ -14,28 +14,31 @@
|
||||
|
||||
package google.registry.flows.domain;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkArgument;
|
||||
import static google.registry.flows.domain.DomainFlowUtils.zeroInCurrency;
|
||||
import static google.registry.pricing.PricingEngineProxy.getPricesForDomainName;
|
||||
import static google.registry.util.DomainNameUtils.getTldFromDomainName;
|
||||
import static google.registry.util.PreconditionsUtils.checkArgumentPresent;
|
||||
|
||||
import com.google.common.net.InternetDomainName;
|
||||
import google.registry.flows.EppException;
|
||||
import google.registry.flows.EppException.CommandUseErrorException;
|
||||
import google.registry.flows.FlowScope;
|
||||
import google.registry.flows.custom.DomainPricingCustomLogic;
|
||||
import google.registry.flows.custom.DomainPricingCustomLogic.CreatePriceParameters;
|
||||
import google.registry.flows.custom.DomainPricingCustomLogic.RenewPriceParameters;
|
||||
import google.registry.flows.custom.DomainPricingCustomLogic.RestorePriceParameters;
|
||||
import google.registry.flows.custom.DomainPricingCustomLogic.TransferPriceParameters;
|
||||
import google.registry.flows.custom.DomainPricingCustomLogic.UpdatePriceParameters;
|
||||
import google.registry.model.billing.BillingEvent.Recurring;
|
||||
import google.registry.model.domain.fee.BaseFee;
|
||||
import google.registry.model.domain.fee.BaseFee.FeeType;
|
||||
import google.registry.model.domain.fee.Fee;
|
||||
import google.registry.model.domain.token.AllocationToken;
|
||||
import google.registry.model.pricing.PremiumPricingEngine.DomainPrices;
|
||||
import google.registry.model.tld.Registry;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.Optional;
|
||||
import javax.annotation.Nullable;
|
||||
import javax.inject.Inject;
|
||||
import org.joda.money.CurrencyUnit;
|
||||
import org.joda.money.Money;
|
||||
@@ -46,7 +49,6 @@ import org.joda.time.DateTime;
|
||||
* providing a {@link DomainPricingCustomLogic} implementation that operates on cross-TLD or per-TLD
|
||||
* logic.
|
||||
*/
|
||||
@FlowScope
|
||||
public final class DomainPricingLogic {
|
||||
|
||||
@Inject DomainPricingCustomLogic customLogic;
|
||||
@@ -102,18 +104,63 @@ public final class DomainPricingLogic {
|
||||
.build());
|
||||
}
|
||||
|
||||
/** Returns a new renew price for the pricer. */
|
||||
@SuppressWarnings("unused")
|
||||
FeesAndCredits getRenewPrice(Registry registry, String domainName, DateTime dateTime, int years)
|
||||
/** Returns a new renewal cost for the pricer. */
|
||||
FeesAndCredits getRenewPrice(
|
||||
Registry registry,
|
||||
String domainName,
|
||||
DateTime dateTime,
|
||||
int years,
|
||||
@Nullable Recurring recurringBillingEvent)
|
||||
throws EppException {
|
||||
DomainPrices domainPrices = getPricesForDomainName(domainName, dateTime);
|
||||
BigDecimal renewCost = domainPrices.getRenewCost().multipliedBy(years).getAmount();
|
||||
checkArgument(years > 0, "Number of years must be positive");
|
||||
Money renewCost;
|
||||
boolean isRenewCostPremiumPrice;
|
||||
// recurring billing event is null if the domain is still available. Billing events are created
|
||||
// in the process of domain creation.
|
||||
if (recurringBillingEvent == null) {
|
||||
DomainPrices domainPrices = getPricesForDomainName(domainName, dateTime);
|
||||
renewCost = domainPrices.getRenewCost().multipliedBy(years);
|
||||
isRenewCostPremiumPrice = domainPrices.isPremium();
|
||||
} else {
|
||||
switch (recurringBillingEvent.getRenewalPriceBehavior()) {
|
||||
case DEFAULT:
|
||||
DomainPrices domainPrices = getPricesForDomainName(domainName, dateTime);
|
||||
renewCost = domainPrices.getRenewCost().multipliedBy(years);
|
||||
isRenewCostPremiumPrice = domainPrices.isPremium();
|
||||
break;
|
||||
// if the renewal price behavior is specified, then the renewal price should be the same
|
||||
// as the creation price, which is stored in the billing event as the renewal price
|
||||
case SPECIFIED:
|
||||
checkArgumentPresent(
|
||||
recurringBillingEvent.getRenewalPrice(),
|
||||
"Unexpected behavior: renewal price cannot be null when renewal behavior is"
|
||||
+ " SPECIFIED");
|
||||
renewCost = recurringBillingEvent.getRenewalPrice().get().multipliedBy(years);
|
||||
isRenewCostPremiumPrice = false;
|
||||
break;
|
||||
// if the renewal price behavior is nonpremium, it means that the domain should be renewed
|
||||
// at standard price of domains at the time, even if the domain is premium
|
||||
case NONPREMIUM:
|
||||
renewCost =
|
||||
Registry.get(getTldFromDomainName(domainName))
|
||||
.getStandardRenewCost(dateTime)
|
||||
.multipliedBy(years);
|
||||
isRenewCostPremiumPrice = false;
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException(
|
||||
String.format(
|
||||
"Unknown RenewalPriceBehavior enum value: %s",
|
||||
recurringBillingEvent.getRenewalPriceBehavior()));
|
||||
}
|
||||
}
|
||||
return customLogic.customizeRenewPrice(
|
||||
RenewPriceParameters.newBuilder()
|
||||
.setFeesAndCredits(
|
||||
new FeesAndCredits.Builder()
|
||||
.setCurrency(registry.getCurrency())
|
||||
.addFeeOrCredit(Fee.create(renewCost, FeeType.RENEW, domainPrices.isPremium()))
|
||||
.setCurrency(renewCost.getCurrencyUnit())
|
||||
.addFeeOrCredit(
|
||||
Fee.create(renewCost.getAmount(), FeeType.RENEW, isRenewCostPremiumPrice))
|
||||
.build())
|
||||
.setRegistry(registry)
|
||||
.setDomainName(InternetDomainName.from(domainName))
|
||||
|
||||
@@ -155,7 +155,8 @@ public final class DomainRenewFlow implements TransactionalFlow {
|
||||
Optional<FeeRenewCommandExtension> feeRenew =
|
||||
eppInput.getSingleExtension(FeeRenewCommandExtension.class);
|
||||
FeesAndCredits feesAndCredits =
|
||||
pricingLogic.getRenewPrice(Registry.get(existingDomain.getTld()), targetId, now, years);
|
||||
pricingLogic.getRenewPrice(
|
||||
Registry.get(existingDomain.getTld()), targetId, now, years, null);
|
||||
validateFeeChallenge(targetId, now, feeRenew, feesAndCredits);
|
||||
flowCustomLogic.afterValidation(
|
||||
AfterValidationParameters.newBuilder()
|
||||
|
||||
@@ -48,6 +48,7 @@ import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.ImmutableSortedSet;
|
||||
import com.google.common.collect.Ordering;
|
||||
import com.google.common.collect.Sets;
|
||||
import com.google.common.flogger.FluentLogger;
|
||||
import com.google.common.net.InternetDomainName;
|
||||
import google.registry.dns.DnsQueue;
|
||||
import google.registry.flows.EppException;
|
||||
@@ -146,6 +147,8 @@ public final class DomainUpdateFlow implements TransactionalFlow {
|
||||
private static final ImmutableSet<StatusValue> UPDATE_DISALLOWED_STATUSES =
|
||||
ImmutableSet.of(StatusValue.PENDING_DELETE, StatusValue.SERVER_UPDATE_PROHIBITED);
|
||||
|
||||
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
|
||||
|
||||
@Inject ResourceCommand resourceCommand;
|
||||
@Inject ExtensionManager extensionManager;
|
||||
@Inject EppInput eppInput;
|
||||
|
||||
@@ -21,7 +21,6 @@ import static google.registry.flows.ResourceFlowUtils.verifyNoDisallowedStatuses
|
||||
import static google.registry.flows.ResourceFlowUtils.verifyResourceOwnership;
|
||||
import static google.registry.flows.host.HostFlowUtils.validateHostName;
|
||||
import static google.registry.model.eppoutput.Result.Code.SUCCESS;
|
||||
import static google.registry.model.eppoutput.Result.Code.SUCCESS_WITH_ACTION_PENDING;
|
||||
import static google.registry.persistence.transaction.TransactionManagerFactory.assertAsyncActionsAreAllowed;
|
||||
import static google.registry.persistence.transaction.TransactionManagerFactory.tm;
|
||||
|
||||
@@ -36,15 +35,12 @@ import google.registry.flows.FlowModule.TargetId;
|
||||
import google.registry.flows.TransactionalFlow;
|
||||
import google.registry.flows.annotations.ReportingSpec;
|
||||
import google.registry.model.EppResource;
|
||||
import google.registry.model.domain.DomainBase;
|
||||
import google.registry.model.domain.metadata.MetadataExtension;
|
||||
import google.registry.model.eppcommon.StatusValue;
|
||||
import google.registry.model.eppcommon.Trid;
|
||||
import google.registry.model.eppoutput.EppResponse;
|
||||
import google.registry.model.eppoutput.Result;
|
||||
import google.registry.model.host.HostHistory;
|
||||
import google.registry.model.host.HostResource;
|
||||
import google.registry.model.reporting.HistoryEntry;
|
||||
import google.registry.model.reporting.HistoryEntry.Type;
|
||||
import google.registry.model.reporting.IcannReportingTypes.ActivityReportField;
|
||||
import javax.inject.Inject;
|
||||
@@ -100,7 +96,7 @@ public final class HostDeleteFlow implements TransactionalFlow {
|
||||
assertAsyncActionsAreAllowed();
|
||||
DateTime now = tm().getTransactionTime();
|
||||
validateHostName(targetId);
|
||||
checkLinkedDomains(targetId, now, HostResource.class, DomainBase::getNameservers);
|
||||
checkLinkedDomains(targetId, now, HostResource.class);
|
||||
HostResource existingHost = loadAndVerifyExistence(HostResource.class, targetId, now);
|
||||
verifyNoDisallowedStatuses(existingHost, DISALLOWED_STATUSES);
|
||||
if (!isSuperuser) {
|
||||
@@ -112,31 +108,19 @@ public final class HostDeleteFlow implements TransactionalFlow {
|
||||
: existingHost;
|
||||
verifyResourceOwnership(registrarId, owningResource);
|
||||
}
|
||||
HistoryEntry.Type historyEntryType;
|
||||
Result.Code resultCode;
|
||||
HostResource newHost;
|
||||
if (tm().isOfy()) {
|
||||
asyncTaskEnqueuer.enqueueAsyncDelete(
|
||||
existingHost, tm().getTransactionTime(), registrarId, trid, isSuperuser);
|
||||
newHost = existingHost.asBuilder().addStatusValue(StatusValue.PENDING_DELETE).build();
|
||||
historyEntryType = Type.HOST_PENDING_DELETE;
|
||||
resultCode = SUCCESS_WITH_ACTION_PENDING;
|
||||
} else {
|
||||
newHost = existingHost.asBuilder().setStatusValues(null).setDeletionTime(now).build();
|
||||
if (existingHost.isSubordinate()) {
|
||||
dnsQueue.addHostRefreshTask(existingHost.getHostName());
|
||||
tm().update(
|
||||
tm().loadByKey(existingHost.getSuperordinateDomain())
|
||||
.asBuilder()
|
||||
.removeSubordinateHost(existingHost.getHostName())
|
||||
.build());
|
||||
}
|
||||
historyEntryType = Type.HOST_DELETE;
|
||||
resultCode = SUCCESS;
|
||||
HostResource newHost =
|
||||
existingHost.asBuilder().setStatusValues(null).setDeletionTime(now).build();
|
||||
if (existingHost.isSubordinate()) {
|
||||
dnsQueue.addHostRefreshTask(existingHost.getHostName());
|
||||
tm().update(
|
||||
tm().loadByKey(existingHost.getSuperordinateDomain())
|
||||
.asBuilder()
|
||||
.removeSubordinateHost(existingHost.getHostName())
|
||||
.build());
|
||||
}
|
||||
historyBuilder.setType(historyEntryType).setHost(newHost);
|
||||
historyBuilder.setType(Type.HOST_DELETE).setHost(newHost);
|
||||
tm().insert(historyBuilder.build());
|
||||
tm().update(newHost);
|
||||
return responseBuilder.setResultFromCode(resultCode).build();
|
||||
return responseBuilder.setResultFromCode(SUCCESS).build();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -102,19 +102,13 @@ public final class PollAckFlow implements TransactionalFlow {
|
||||
// This keeps track of whether we should include the current acked message in the updated
|
||||
// message count that's returned to the user. The only case where we do so is if an autorenew
|
||||
// poll message is acked, but its next event is already ready to be delivered.
|
||||
boolean includeAckedMessageInCount = ackPollMessage(pollMessage);
|
||||
ackPollMessage(pollMessage);
|
||||
|
||||
// We need to return the new queue length. If this was the last message in the queue being
|
||||
// acked, then we return a special status code indicating that. Note that the query will
|
||||
// include the message being acked.
|
||||
|
||||
int messageCount = tm().doTransactionless(() -> getPollMessageCount(registrarId, now));
|
||||
// Within the same transaction, Datastore will not reflect the updated count (potentially
|
||||
// reduced by one thanks to the acked poll message). SQL will, however, so we shouldn't reduce
|
||||
// the count in the SQL case.
|
||||
if (!includeAckedMessageInCount && tm().isOfy()) {
|
||||
messageCount--;
|
||||
}
|
||||
if (messageCount <= 0) {
|
||||
return responseBuilder.setResultFromCode(SUCCESS_WITH_NO_MESSAGES).build();
|
||||
}
|
||||
|
||||
@@ -47,13 +47,12 @@ public final class PollFlowUtils {
|
||||
* <p>The only case where we do so is if an autorenew poll message is acked, but its next event is
|
||||
* already ready to be delivered.
|
||||
*/
|
||||
public static boolean ackPollMessage(PollMessage pollMessage) {
|
||||
public static void ackPollMessage(PollMessage pollMessage) {
|
||||
checkArgument(
|
||||
isBeforeOrAt(pollMessage.getEventTime(), tm().getTransactionTime()),
|
||||
"Cannot ACK poll message with ID %s because its event time is in the future: %s",
|
||||
pollMessage.getId(),
|
||||
pollMessage.getEventTime());
|
||||
boolean includeAckedMessageInCount = false;
|
||||
if (pollMessage instanceof PollMessage.OneTime) {
|
||||
// One-time poll messages are deleted once acked.
|
||||
tm().delete(pollMessage.createVKey());
|
||||
@@ -68,14 +67,12 @@ public final class PollFlowUtils {
|
||||
// autorenew poll message has no more events to deliver and should be deleted.
|
||||
if (nextEventTime.isBefore(autorenewPollMessage.getAutorenewEndTime())) {
|
||||
tm().put(autorenewPollMessage.asBuilder().setEventTime(nextEventTime).build());
|
||||
includeAckedMessageInCount = isBeforeOrAt(nextEventTime, tm().getTransactionTime());
|
||||
} else {
|
||||
tm().delete(autorenewPollMessage.createVKey());
|
||||
}
|
||||
} else {
|
||||
throw new IllegalArgumentException("Unknown poll message type: " + pollMessage.getClass());
|
||||
}
|
||||
return includeAckedMessageInCount;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -116,4 +116,9 @@ public class AppEngineEnvironment {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/** Returns true if the current thread is in an App Engine Environment. */
|
||||
public static boolean isInAppEngineEnvironment() {
|
||||
return ApiProxy.getCurrentEnvironment() != null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,9 +18,13 @@ import static com.google.common.base.Suppliers.memoizeWithExpiration;
|
||||
import static google.registry.config.RegistryConfig.getSingletonCacheRefreshDuration;
|
||||
import static java.util.concurrent.TimeUnit.MILLISECONDS;
|
||||
|
||||
import com.github.benmanes.caffeine.cache.CacheLoader;
|
||||
import com.github.benmanes.caffeine.cache.Caffeine;
|
||||
import com.google.common.base.Supplier;
|
||||
import google.registry.model.annotations.DeleteAfterMigration;
|
||||
import java.time.Duration;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
/** Utility methods related to caching Datastore entities. */
|
||||
public class CacheUtils {
|
||||
@@ -28,8 +32,8 @@ public class CacheUtils {
|
||||
/**
|
||||
* Memoize a supplier, with a short expiration specified in the environment config.
|
||||
*
|
||||
* <p>Use this for things that might change while code is running. (For example, the various
|
||||
* lists downloaded from the TMCH get updated in Datastore and the caches need to be refreshed.)
|
||||
* <p>Use this for things that might change while code is running. (For example, the various lists
|
||||
* downloaded from the TMCH get updated in Datastore and the caches need to be refreshed.)
|
||||
*/
|
||||
public static <T> Supplier<T> memoizeWithShortExpiration(Supplier<T> original) {
|
||||
return tryMemoizeWithExpiration(getSingletonCacheRefreshDuration(), original);
|
||||
@@ -73,4 +77,29 @@ public class CacheUtils {
|
||||
}
|
||||
return caffeine;
|
||||
}
|
||||
|
||||
/**
|
||||
* A {@link CacheLoader} that automatically masquerade the background thread where the refresh
|
||||
* action runs in to be an GAE thread.
|
||||
*/
|
||||
@DeleteAfterMigration
|
||||
public abstract static class AppEngineEnvironmentCacheLoader<K, V> implements CacheLoader<K, V> {
|
||||
|
||||
private static final AppEngineEnvironment environment = new AppEngineEnvironment();
|
||||
|
||||
@Override
|
||||
public @Nullable V reload(@NonNull K key, @NonNull V oldValue) throws Exception {
|
||||
V value;
|
||||
boolean isMasqueraded = false;
|
||||
if (!AppEngineEnvironment.isInAppEngineEnvironment()) {
|
||||
environment.setEnvironmentForCurrentThread();
|
||||
isMasqueraded = true;
|
||||
}
|
||||
value = load(key);
|
||||
if (isMasqueraded) {
|
||||
environment.unsetEnvironmentForCurrentThread();
|
||||
}
|
||||
return value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,7 +20,6 @@ import static com.google.common.collect.Sets.difference;
|
||||
import static com.google.common.collect.Sets.union;
|
||||
import static google.registry.config.RegistryConfig.getEppResourceCachingDuration;
|
||||
import static google.registry.config.RegistryConfig.getEppResourceMaxCachedEntries;
|
||||
import static google.registry.persistence.transaction.TransactionManagerFactory.ofyTm;
|
||||
import static google.registry.persistence.transaction.TransactionManagerFactory.replicaTm;
|
||||
import static google.registry.persistence.transaction.TransactionManagerFactory.tm;
|
||||
import static google.registry.util.CollectionUtils.nullToEmpty;
|
||||
@@ -37,9 +36,8 @@ import com.googlecode.objectify.Key;
|
||||
import com.googlecode.objectify.annotation.Id;
|
||||
import com.googlecode.objectify.annotation.Index;
|
||||
import google.registry.config.RegistryConfig;
|
||||
import google.registry.model.CacheUtils.AppEngineEnvironmentCacheLoader;
|
||||
import google.registry.model.eppcommon.StatusValue;
|
||||
import google.registry.model.index.EppResourceIndex;
|
||||
import google.registry.model.index.ForeignKeyIndex;
|
||||
import google.registry.model.ofy.CommitLogManifest;
|
||||
import google.registry.model.transfer.TransferData;
|
||||
import google.registry.persistence.VKey;
|
||||
@@ -225,12 +223,6 @@ public abstract class EppResource extends BackupGroupRoot implements Buildable {
|
||||
@Override
|
||||
public abstract Builder<?, ?> asBuilder();
|
||||
|
||||
/** Used when replaying from SQL to DS to populate the Datastore indexes. */
|
||||
protected void saveIndexesToDatastore() {
|
||||
ofyTm().putIgnoringReadOnlyWithBackup(ForeignKeyIndex.create(this, getDeletionTime()));
|
||||
ofyTm().putIgnoringReadOnlyWithBackup(EppResourceIndex.create(Key.create(this)));
|
||||
}
|
||||
|
||||
/** EppResources that are loaded via foreign keys should implement this marker interface. */
|
||||
public interface ForeignKeyedEppResource {}
|
||||
|
||||
@@ -385,7 +377,7 @@ public abstract class EppResource extends BackupGroupRoot implements Buildable {
|
||||
}
|
||||
|
||||
static final CacheLoader<VKey<? extends EppResource>, EppResource> CACHE_LOADER =
|
||||
new CacheLoader<VKey<? extends EppResource>, EppResource>() {
|
||||
new AppEngineEnvironmentCacheLoader<VKey<? extends EppResource>, EppResource>() {
|
||||
|
||||
@Override
|
||||
public EppResource load(VKey<? extends EppResource> key) {
|
||||
|
||||
@@ -14,8 +14,6 @@
|
||||
|
||||
package google.registry.model.contact;
|
||||
|
||||
import static google.registry.persistence.transaction.TransactionManagerFactory.jpaTm;
|
||||
|
||||
import com.googlecode.objectify.Key;
|
||||
import com.googlecode.objectify.annotation.EntitySubclass;
|
||||
import google.registry.model.EppResource;
|
||||
@@ -136,14 +134,6 @@ public class ContactHistory extends HistoryEntry implements SqlEntity, UnsafeSer
|
||||
return Optional.of(asHistoryEntry());
|
||||
}
|
||||
|
||||
// Used to fill out the contactBase field during asynchronous replay
|
||||
@Override
|
||||
public void beforeSqlSaveOnReplay() {
|
||||
if (contactBase == null) {
|
||||
contactBase = jpaTm().getEntityManager().find(ContactResource.class, getContactRepoId());
|
||||
}
|
||||
}
|
||||
|
||||
/** Class to represent the composite primary key of {@link ContactHistory} entity. */
|
||||
public static class ContactHistoryId extends ImmutableObject implements Serializable {
|
||||
|
||||
|
||||
@@ -66,11 +66,6 @@ public class ContactResource extends ContactBase
|
||||
return ContactBase.cloneContactProjectedAtTime(this, now);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void beforeDatastoreSaveOnReplay() {
|
||||
saveIndexesToDatastore();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder asBuilder() {
|
||||
return new Builder(clone(this));
|
||||
|
||||
@@ -14,8 +14,6 @@
|
||||
|
||||
package google.registry.model.domain;
|
||||
|
||||
import static com.google.common.collect.ImmutableSet.toImmutableSet;
|
||||
|
||||
import com.googlecode.objectify.Key;
|
||||
import google.registry.model.EppResource;
|
||||
import google.registry.model.EppResource.ForeignKeyedEppResource;
|
||||
@@ -26,7 +24,6 @@ import google.registry.model.host.HostResource;
|
||||
import google.registry.model.replay.DatastoreAndSqlEntity;
|
||||
import google.registry.persistence.VKey;
|
||||
import google.registry.persistence.WithStringVKey;
|
||||
import google.registry.util.DomainNameUtils;
|
||||
import java.util.Set;
|
||||
import javax.persistence.Access;
|
||||
import javax.persistence.AccessType;
|
||||
@@ -173,20 +170,6 @@ public class DomainBase extends DomainContent
|
||||
return cloneDomainProjectedAtTime(this, now);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void beforeSqlSaveOnReplay() {
|
||||
fullyQualifiedDomainName = DomainNameUtils.canonicalizeHostname(fullyQualifiedDomainName);
|
||||
dsData =
|
||||
dsData.stream()
|
||||
.filter(datum -> datum.getDigest() != null && datum.getDigest().length > 0)
|
||||
.collect(toImmutableSet());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void beforeDatastoreSaveOnReplay() {
|
||||
saveIndexesToDatastore();
|
||||
}
|
||||
|
||||
public static VKey<DomainBase> createVKey(Key<DomainBase> key) {
|
||||
return VKey.create(DomainBase.class, key.getName(), key);
|
||||
}
|
||||
|
||||
@@ -23,7 +23,6 @@ import static com.google.common.collect.Sets.difference;
|
||||
import static com.google.common.collect.Sets.intersection;
|
||||
import static google.registry.model.EppResourceUtils.projectResourceOntoBuilderAtTime;
|
||||
import static google.registry.model.EppResourceUtils.setAutomaticTransferSuccessProperties;
|
||||
import static google.registry.persistence.transaction.TransactionManagerFactory.jpaTm;
|
||||
import static google.registry.persistence.transaction.TransactionManagerFactory.tm;
|
||||
import static google.registry.persistence.transaction.TransactionManagerUtil.transactIfJpaTm;
|
||||
import static google.registry.util.CollectionUtils.forceEmptyToNull;
|
||||
@@ -63,7 +62,6 @@ import google.registry.model.domain.secdns.DelegationSignerData;
|
||||
import google.registry.model.eppcommon.StatusValue;
|
||||
import google.registry.model.host.HostResource;
|
||||
import google.registry.model.poll.PollMessage;
|
||||
import google.registry.model.replay.ReplaySpecializer;
|
||||
import google.registry.model.reporting.HistoryEntry;
|
||||
import google.registry.model.tld.Registry;
|
||||
import google.registry.model.transfer.DomainTransferData;
|
||||
@@ -403,23 +401,6 @@ public class DomainContent extends EppResource
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Callback to delete grace periods and DelegationSignerData records prior to domain delete.
|
||||
*
|
||||
* <p>See {@link ReplaySpecializer}.
|
||||
*/
|
||||
public static void beforeSqlDelete(VKey<DomainBase> key) {
|
||||
// Delete all grace periods associated with the domain.
|
||||
jpaTm()
|
||||
.query("DELETE FROM GracePeriod WHERE domain_repo_id = :repo_id")
|
||||
.setParameter("repo_id", key.getSqlKey())
|
||||
.executeUpdate();
|
||||
jpaTm()
|
||||
.query("DELETE FROM DelegationSignerData WHERE domain_repo_id = :repo_id")
|
||||
.setParameter("repo_id", key.getSqlKey())
|
||||
.executeUpdate();
|
||||
}
|
||||
|
||||
public static <T> VKey<T> restoreOfyFrom(Key<DomainBase> domainKey, VKey<T> key, Long historyId) {
|
||||
if (historyId == null) {
|
||||
// This is a legacy key (or a null key, in which case this works too)
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
package google.registry.model.domain;
|
||||
|
||||
import static com.google.common.collect.ImmutableSet.toImmutableSet;
|
||||
import static google.registry.persistence.transaction.TransactionManagerFactory.jpaTm;
|
||||
import static google.registry.util.CollectionUtils.nullToEmptyImmutableCopy;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
@@ -33,7 +32,6 @@ import google.registry.model.replay.SqlEntity;
|
||||
import google.registry.model.reporting.DomainTransactionRecord;
|
||||
import google.registry.model.reporting.HistoryEntry;
|
||||
import google.registry.persistence.VKey;
|
||||
import google.registry.util.DomainNameUtils;
|
||||
import java.io.Serializable;
|
||||
import java.util.HashSet;
|
||||
import java.util.Optional;
|
||||
@@ -303,17 +301,6 @@ public class DomainHistory extends HistoryEntry implements SqlEntity {
|
||||
return Optional.of(asHistoryEntry());
|
||||
}
|
||||
|
||||
// Used to fill out the domainContent field during asynchronous replay
|
||||
@Override
|
||||
public void beforeSqlSaveOnReplay() {
|
||||
if (domainContent == null) {
|
||||
domainContent = jpaTm().getEntityManager().find(DomainBase.class, getDomainRepoId());
|
||||
domainContent.fullyQualifiedDomainName =
|
||||
DomainNameUtils.canonicalizeHostname(domainContent.fullyQualifiedDomainName);
|
||||
fillAuxiliaryFieldsFromDomain(this);
|
||||
}
|
||||
}
|
||||
|
||||
private static void fillAuxiliaryFieldsFromDomain(DomainHistory domainHistory) {
|
||||
if (domainHistory.domainContent != null) {
|
||||
domainHistory.nsHosts = nullToEmptyImmutableCopy(domainHistory.domainContent.nsHosts);
|
||||
|
||||
@@ -24,6 +24,7 @@ import google.registry.model.EppResource;
|
||||
import google.registry.model.ImmutableObject;
|
||||
import google.registry.model.eppcommon.AuthInfo;
|
||||
import google.registry.model.eppcommon.StatusValue;
|
||||
import google.registry.model.eppinput.ResourceCommand.ResourceUpdate.AddRemove;
|
||||
import google.registry.util.TypeUtils.TypeInstantiator;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
@@ -91,10 +92,11 @@ public interface ResourceCommand {
|
||||
* @param <C> the change type
|
||||
*/
|
||||
@XmlTransient
|
||||
abstract class ResourceUpdate
|
||||
<A extends ResourceUpdate.AddRemove,
|
||||
B extends EppResource.Builder<?, ?>,
|
||||
C extends ResourceCreateOrChange<B>> extends AbstractSingleResourceCommand {
|
||||
abstract class ResourceUpdate<
|
||||
A extends AddRemove,
|
||||
B extends EppResource.Builder<?, ?>,
|
||||
C extends ResourceCreateOrChange<B>>
|
||||
extends AbstractSingleResourceCommand {
|
||||
|
||||
/** Part of an update command that specifies set values to add or remove. */
|
||||
@XmlTransient
|
||||
@@ -113,7 +115,7 @@ public interface ResourceCommand {
|
||||
|
||||
protected abstract A getNullableInnerRemove();
|
||||
|
||||
// Don't use MoreObjects.firstNonNull in these method because it will result in an unneeded
|
||||
// Don't use MoreObjects.firstNonNull in these methods because it will result in an unneeded
|
||||
// reflective instantiation when the object isn't null.
|
||||
|
||||
public C getInnerChange() {
|
||||
|
||||
@@ -14,8 +14,6 @@
|
||||
|
||||
package google.registry.model.host;
|
||||
|
||||
import static google.registry.persistence.transaction.TransactionManagerFactory.jpaTm;
|
||||
|
||||
import com.googlecode.objectify.Key;
|
||||
import com.googlecode.objectify.annotation.EntitySubclass;
|
||||
import google.registry.model.EppResource;
|
||||
@@ -26,7 +24,6 @@ import google.registry.model.replay.DatastoreEntity;
|
||||
import google.registry.model.replay.SqlEntity;
|
||||
import google.registry.model.reporting.HistoryEntry;
|
||||
import google.registry.persistence.VKey;
|
||||
import google.registry.util.DomainNameUtils;
|
||||
import java.io.Serializable;
|
||||
import java.util.Optional;
|
||||
import javax.annotation.Nullable;
|
||||
@@ -137,16 +134,6 @@ public class HostHistory extends HistoryEntry implements SqlEntity, UnsafeSerial
|
||||
return Optional.of(asHistoryEntry());
|
||||
}
|
||||
|
||||
// Used to fill out the hostBase field during asynchronous replay
|
||||
@Override
|
||||
public void beforeSqlSaveOnReplay() {
|
||||
if (hostBase == null) {
|
||||
hostBase = jpaTm().getEntityManager().find(HostResource.class, getHostRepoId());
|
||||
hostBase.fullyQualifiedHostName =
|
||||
DomainNameUtils.canonicalizeHostname(hostBase.fullyQualifiedHostName);
|
||||
}
|
||||
}
|
||||
|
||||
/** Class to represent the composite primary key of {@link HostHistory} entity. */
|
||||
public static class HostHistoryId extends ImmutableObject implements Serializable {
|
||||
|
||||
|
||||
@@ -22,7 +22,6 @@ import google.registry.model.annotations.ReportedOn;
|
||||
import google.registry.model.replay.DatastoreAndSqlEntity;
|
||||
import google.registry.persistence.VKey;
|
||||
import google.registry.persistence.WithStringVKey;
|
||||
import google.registry.util.DomainNameUtils;
|
||||
import javax.persistence.Access;
|
||||
import javax.persistence.AccessType;
|
||||
|
||||
@@ -71,16 +70,6 @@ public class HostResource extends HostBase
|
||||
return VKey.create(HostResource.class, getRepoId(), Key.create(this));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void beforeSqlSaveOnReplay() {
|
||||
fullyQualifiedHostName = DomainNameUtils.canonicalizeHostname(fullyQualifiedHostName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void beforeDatastoreSaveOnReplay() {
|
||||
saveIndexesToDatastore();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder asBuilder() {
|
||||
return new Builder(clone(this));
|
||||
|
||||
@@ -43,6 +43,7 @@ import com.googlecode.objectify.annotation.Index;
|
||||
import google.registry.config.RegistryConfig;
|
||||
import google.registry.model.BackupGroupRoot;
|
||||
import google.registry.model.CacheUtils;
|
||||
import google.registry.model.CacheUtils.AppEngineEnvironmentCacheLoader;
|
||||
import google.registry.model.EppResource;
|
||||
import google.registry.model.annotations.DeleteAfterMigration;
|
||||
import google.registry.model.annotations.ReportedOn;
|
||||
@@ -256,7 +257,8 @@ public abstract class ForeignKeyIndex<E extends EppResource> extends BackupGroup
|
||||
}
|
||||
|
||||
static final CacheLoader<VKey<ForeignKeyIndex<?>>, Optional<ForeignKeyIndex<?>>> CACHE_LOADER =
|
||||
new CacheLoader<VKey<ForeignKeyIndex<?>>, Optional<ForeignKeyIndex<?>>>() {
|
||||
new AppEngineEnvironmentCacheLoader<
|
||||
VKey<ForeignKeyIndex<?>>, Optional<ForeignKeyIndex<?>>>() {
|
||||
|
||||
@Override
|
||||
public Optional<ForeignKeyIndex<?>> load(VKey<ForeignKeyIndex<?>> key) {
|
||||
|
||||
@@ -165,7 +165,6 @@ public class CommitLoggedWork<R> implements Runnable {
|
||||
.addAll(untouchedRootsWithTouchedChildren)
|
||||
.build())
|
||||
.now();
|
||||
ReplayQueue.addInTests(info);
|
||||
}
|
||||
|
||||
/** Check that the timestamp of each BackupGroupRoot is in the past. */
|
||||
|
||||
@@ -1,117 +0,0 @@
|
||||
// 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.model.ofy;
|
||||
|
||||
import static google.registry.model.ofy.EntityWritePriorities.getEntityPriority;
|
||||
import static google.registry.model.ofy.ObjectifyService.auditedOfy;
|
||||
import static google.registry.persistence.transaction.TransactionManagerFactory.jpaTm;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.googlecode.objectify.Key;
|
||||
import google.registry.config.RegistryEnvironment;
|
||||
import google.registry.model.UpdateAutoTimestamp;
|
||||
import google.registry.model.annotations.DeleteAfterMigration;
|
||||
import google.registry.model.replay.DatastoreEntity;
|
||||
import google.registry.model.replay.ReplaySpecializer;
|
||||
import google.registry.persistence.VKey;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||
|
||||
/**
|
||||
* Implements simplified datastore to SQL transaction replay.
|
||||
*
|
||||
* <p>This code is to be removed when the actual replay cron job is implemented.
|
||||
*/
|
||||
@DeleteAfterMigration
|
||||
public class ReplayQueue {
|
||||
|
||||
static ConcurrentLinkedQueue<ImmutableMap<Key<?>, Object>> queue =
|
||||
new ConcurrentLinkedQueue<ImmutableMap<Key<?>, Object>>();
|
||||
|
||||
static void addInTests(TransactionInfo info) {
|
||||
if (RegistryEnvironment.get() == RegistryEnvironment.UNITTEST) {
|
||||
// Transform the entities to be persisted to the set of values as they were actually
|
||||
// persisted.
|
||||
ImmutableMap.Builder<Key<?>, Object> builder = new ImmutableMap.Builder<Key<?>, Object>();
|
||||
for (ImmutableMap.Entry<Key<?>, Object> entry : info.getChanges().entrySet()) {
|
||||
if (entry.getValue().equals(TransactionInfo.Delete.SENTINEL)) {
|
||||
builder.put(entry.getKey(), entry.getValue());
|
||||
} else {
|
||||
// The value is an entity object that has not yet been persisted, and thus some of the
|
||||
// special transformations that we do (notably the auto-timestamp transformations) have
|
||||
// not been applied. Converting the object to an entity and then back again performs
|
||||
// those transformations so that we persist the same values to SQL that we have in
|
||||
// Datastore.
|
||||
builder.put(entry.getKey(), auditedOfy().toPojo(auditedOfy().toEntity(entry.getValue())));
|
||||
}
|
||||
}
|
||||
queue.add(builder.build());
|
||||
}
|
||||
}
|
||||
|
||||
/** Replay all transactions, return the set of keys that were replayed. */
|
||||
public static ImmutableMap<Key<?>, Object> replay() {
|
||||
// We can't use an ImmutableMap.Builder here, we need to be able to overwrite existing values
|
||||
// and the builder doesn't support that.
|
||||
Map<Key<?>, Object> result = new HashMap<Key<?>, Object>();
|
||||
ImmutableMap<Key<?>, Object> changes;
|
||||
while ((changes = queue.poll()) != null) {
|
||||
saveToJpa(changes);
|
||||
result.putAll(changes);
|
||||
}
|
||||
|
||||
return ImmutableMap.copyOf(result);
|
||||
}
|
||||
|
||||
public static void clear() {
|
||||
queue.clear();
|
||||
}
|
||||
|
||||
/** Returns the priority of the entity type in the map entry. */
|
||||
private static int getPriority(ImmutableMap.Entry<Key<?>, Object> entry) {
|
||||
return getEntityPriority(
|
||||
entry.getKey().getKind(), entry.getValue().equals(TransactionInfo.Delete.SENTINEL));
|
||||
}
|
||||
|
||||
private static int compareByPriority(
|
||||
ImmutableMap.Entry<Key<?>, Object> a, ImmutableMap.Entry<Key<?>, Object> b) {
|
||||
return getPriority(a) - getPriority(b);
|
||||
}
|
||||
|
||||
private static void saveToJpa(ImmutableMap<Key<?>, Object> changes) {
|
||||
try (UpdateAutoTimestamp.DisableAutoUpdateResource disabler =
|
||||
UpdateAutoTimestamp.disableAutoUpdate()) {
|
||||
// Sort the changes into an order that will work for insertion into the database.
|
||||
jpaTm()
|
||||
.transact(
|
||||
() ->
|
||||
changes.entrySet().stream()
|
||||
.sorted(ReplayQueue::compareByPriority)
|
||||
.forEach(
|
||||
entry -> {
|
||||
if (entry.getValue().equals(TransactionInfo.Delete.SENTINEL)) {
|
||||
VKey<?> vkey = VKey.from(entry.getKey());
|
||||
ReplaySpecializer.beforeSqlDelete(vkey);
|
||||
jpaTm().delete(vkey);
|
||||
} else {
|
||||
((DatastoreEntity) entry.getValue())
|
||||
.toSqlEntity()
|
||||
.ifPresent(jpaTm()::put);
|
||||
}
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -123,24 +123,24 @@ public class Registrar extends ImmutableObject
|
||||
|
||||
/** Represents the type of a registrar entity. */
|
||||
public enum Type {
|
||||
/** A real-world, third-party registrar. Should have non-null IANA and billing IDs. */
|
||||
/** A real-world, third-party registrar. Should have non-null IANA and billing account IDs. */
|
||||
REAL(Objects::nonNull),
|
||||
|
||||
/**
|
||||
* A registrar account used by a real third-party registrar undergoing operational testing and
|
||||
* evaluation. Should only be created in sandbox, and should have null IANA/billing IDs.
|
||||
* evaluation. Should only be created in sandbox, and should have null IANA/billing account IDs.
|
||||
*/
|
||||
OTE(Objects::isNull),
|
||||
|
||||
/**
|
||||
* A registrar used for predelegation testing. Should have a null billing ID. The IANA ID should
|
||||
* be either 9995 or 9996, which are reserved for predelegation testing.
|
||||
* A registrar used for predelegation testing. Should have a null billing account ID. The IANA
|
||||
* ID should be either 9995 or 9996, which are reserved for predelegation testing.
|
||||
*/
|
||||
PDT(n -> ImmutableSet.of(9995L, 9996L).contains(n)),
|
||||
|
||||
/**
|
||||
* A registrar used for external monitoring by ICANN. Should have IANA ID 9997 and a null
|
||||
* billing ID.
|
||||
* billing account ID.
|
||||
*/
|
||||
EXTERNAL_MONITORING(isEqual(9997L)),
|
||||
|
||||
@@ -148,13 +148,13 @@ public class Registrar extends ImmutableObject
|
||||
* A registrar used for when the registry acts as a registrar. Must have either IANA ID 9998
|
||||
* (for billable transactions) or 9999 (for non-billable transactions).
|
||||
*/
|
||||
// TODO(b/13786188): determine what billing ID for this should be, if any.
|
||||
// TODO(b/13786188): determine what billing account ID for this should be, if any.
|
||||
INTERNAL(n -> ImmutableSet.of(9998L, 9999L).contains(n)),
|
||||
|
||||
/** A registrar used for internal monitoring. Should have null IANA/billing IDs. */
|
||||
/** A registrar used for internal monitoring. Should have null IANA/billing account IDs. */
|
||||
MONITORING(Objects::isNull),
|
||||
|
||||
/** A registrar used for internal testing. Should have null IANA/billing IDs. */
|
||||
/** A registrar used for internal testing. Should have null IANA/billing account IDs. */
|
||||
TEST(Objects::isNull);
|
||||
|
||||
/**
|
||||
@@ -387,9 +387,6 @@ public class Registrar extends ImmutableObject
|
||||
*/
|
||||
@Index @Nullable Long ianaIdentifier;
|
||||
|
||||
/** Identifier of registrar used in external billing system (e.g. Oracle). */
|
||||
@Nullable Long billingIdentifier;
|
||||
|
||||
/** Purchase Order number used for invoices in external billing system, if applicable. */
|
||||
@Nullable String poNumber;
|
||||
|
||||
@@ -496,11 +493,6 @@ public class Registrar extends ImmutableObject
|
||||
return ianaIdentifier;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Long getBillingIdentifier() {
|
||||
return billingIdentifier;
|
||||
}
|
||||
|
||||
public Optional<String> getPoNumber() {
|
||||
return Optional.ofNullable(poNumber);
|
||||
}
|
||||
@@ -688,7 +680,6 @@ public class Registrar extends ImmutableObject
|
||||
return new JsonMapBuilder()
|
||||
.put("clientIdentifier", clientIdentifier)
|
||||
.put("ianaIdentifier", ianaIdentifier)
|
||||
.put("billingIdentifier", billingIdentifier)
|
||||
.putString("creationTime", creationTime.getTimestamp())
|
||||
.putString("lastUpdateTime", lastUpdateTime.getTimestamp())
|
||||
.putString("lastCertificateUpdateTime", lastCertificateUpdateTime)
|
||||
@@ -785,14 +776,6 @@ public class Registrar extends ImmutableObject
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setBillingIdentifier(@Nullable Long billingIdentifier) {
|
||||
checkArgument(
|
||||
billingIdentifier == null || billingIdentifier > 0,
|
||||
"Billing ID must be a positive number");
|
||||
getInstance().billingIdentifier = billingIdentifier;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setPoNumber(Optional<String> poNumber) {
|
||||
getInstance().poNumber = poNumber.orElse(null);
|
||||
return this;
|
||||
|
||||
@@ -29,7 +29,4 @@ import java.util.Optional;
|
||||
public interface DatastoreEntity {
|
||||
|
||||
Optional<SqlEntity> toSqlEntity();
|
||||
|
||||
/** A method called before the object is saved to Datastore in asynchronous replay. */
|
||||
default void beforeDatastoreSaveOnReplay() {}
|
||||
}
|
||||
|
||||
@@ -1,52 +0,0 @@
|
||||
// Copyright 2021 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.model.replay;
|
||||
|
||||
import google.registry.model.annotations.DeleteAfterMigration;
|
||||
import google.registry.persistence.VKey;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
/**
|
||||
* Applies class-specific functions for model objects during transaction replays.
|
||||
*
|
||||
* <p>There are certain cases where changes to an entity require changes to other entities that are
|
||||
* not directly present in the other database. This class allows us to do that by using reflection
|
||||
* to invoke special class methods if they are present.
|
||||
*/
|
||||
@DeleteAfterMigration
|
||||
public class ReplaySpecializer {
|
||||
|
||||
public static void beforeSqlDelete(VKey<?> key) {
|
||||
String methodName = "beforeSqlDelete";
|
||||
Class<?> clazz = key.getKind();
|
||||
try {
|
||||
Method method = clazz.getMethod(methodName, VKey.class);
|
||||
method.invoke(null, key);
|
||||
} catch (NoSuchMethodException e) {
|
||||
// Ignore, this just means that the class doesn't need this hook.
|
||||
} catch (IllegalAccessException e) {
|
||||
throw new RuntimeException(
|
||||
String.format(
|
||||
"%s() method is defined for class %s but is not public.",
|
||||
methodName, clazz.getName()),
|
||||
e);
|
||||
} catch (InvocationTargetException e) {
|
||||
throw new RuntimeException(
|
||||
String.format("%s() method for class %s threw an exception", methodName, clazz.getName()),
|
||||
e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,377 +0,0 @@
|
||||
// Copyright 2021 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.model.replay;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkState;
|
||||
import static com.google.common.collect.ImmutableList.toImmutableList;
|
||||
import static google.registry.model.ofy.ObjectifyService.auditedOfy;
|
||||
import static google.registry.persistence.transaction.TransactionManagerFactory.jpaTm;
|
||||
import static google.registry.persistence.transaction.TransactionManagerFactory.ofyTm;
|
||||
import static google.registry.request.Action.Method.GET;
|
||||
import static javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
|
||||
import static javax.servlet.http.HttpServletResponse.SC_NO_CONTENT;
|
||||
import static javax.servlet.http.HttpServletResponse.SC_OK;
|
||||
import static org.joda.time.Duration.standardHours;
|
||||
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.flogger.FluentLogger;
|
||||
import google.registry.model.UpdateAutoTimestamp;
|
||||
import google.registry.model.annotations.DeleteAfterMigration;
|
||||
import google.registry.model.common.DatabaseMigrationStateSchedule;
|
||||
import google.registry.model.common.DatabaseMigrationStateSchedule.MigrationState;
|
||||
import google.registry.model.common.DatabaseMigrationStateSchedule.ReplayDirection;
|
||||
import google.registry.model.server.Lock;
|
||||
import google.registry.persistence.transaction.Transaction;
|
||||
import google.registry.persistence.transaction.TransactionEntity;
|
||||
import google.registry.request.Action;
|
||||
import google.registry.request.Response;
|
||||
import google.registry.request.auth.Auth;
|
||||
import google.registry.util.Clock;
|
||||
import google.registry.util.RequestStatusChecker;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import javax.inject.Inject;
|
||||
import javax.persistence.NoResultException;
|
||||
import org.joda.time.Duration;
|
||||
|
||||
/** Cron task to replicate from Cloud SQL to datastore. */
|
||||
@Action(
|
||||
service = Action.Service.BACKEND,
|
||||
path = ReplicateToDatastoreAction.PATH,
|
||||
method = GET,
|
||||
automaticallyPrintOk = true,
|
||||
auth = Auth.AUTH_INTERNAL_OR_ADMIN)
|
||||
@VisibleForTesting
|
||||
@DeleteAfterMigration
|
||||
public class ReplicateToDatastoreAction implements Runnable {
|
||||
public static final String PATH = "/_dr/cron/replicateToDatastore";
|
||||
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
|
||||
|
||||
/** Name of the lock that ensures sequential execution of replays. */
|
||||
public static final String REPLICATE_TO_DATASTORE_LOCK_NAME =
|
||||
ReplicateToDatastoreAction.class.getSimpleName();
|
||||
|
||||
/**
|
||||
* Number of transactions to fetch from SQL. The rationale for 200 is that we're processing these
|
||||
* every minute and our production instance currently does about 2 mutations per second, so this
|
||||
* should generally be enough to scoop up all of the transactions for the past minute.
|
||||
*/
|
||||
public static final int BATCH_SIZE = 200;
|
||||
|
||||
/**
|
||||
* The longest time that we'll keep trying to resolve a gap in the Transaction table in
|
||||
* milliseconds, after which, the gap record will be deleted.
|
||||
*/
|
||||
public static final long MAX_GAP_RETENTION_MILLIS = 300000;
|
||||
|
||||
/**
|
||||
* The maximum number of entitities to be mutated per transaction. For our purposes, the entities
|
||||
* that we're keeping track of are each in their own entity group. Per datastore documentation, we
|
||||
* should be allowed to update up to 25 of them. In practice, we get an error if we go beyond 24
|
||||
* (possibly due to something in our own infrastructure).
|
||||
*/
|
||||
private static final int MAX_ENTITIES_PER_TXN = 24;
|
||||
|
||||
public static final Duration REPLICATE_TO_DATASTORE_LOCK_LEASE_LENGTH = standardHours(1);
|
||||
|
||||
private final Clock clock;
|
||||
private final RequestStatusChecker requestStatusChecker;
|
||||
private final Response response;
|
||||
|
||||
@Inject
|
||||
public ReplicateToDatastoreAction(
|
||||
Clock clock, RequestStatusChecker requestStatusChecker, Response response) {
|
||||
this.clock = clock;
|
||||
this.requestStatusChecker = requestStatusChecker;
|
||||
this.response = response;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
public List<TransactionEntity> getTransactionBatchAtSnapshot() {
|
||||
return getTransactionBatchAtSnapshot(Optional.empty());
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the next batch of transactions, optionally from a specific SQL database snapshot.
|
||||
*
|
||||
* <p>Note that this method may also apply transactions from previous batches that had not yet
|
||||
* been committed at the time the previous batch was retrieved.
|
||||
*/
|
||||
static List<TransactionEntity> getTransactionBatchAtSnapshot(Optional<String> snapshotId) {
|
||||
// Get the next batch of transactions that we haven't replicated.
|
||||
LastSqlTransaction lastSqlTxnBeforeBatch = ofyTm().transact(LastSqlTransaction::load);
|
||||
try {
|
||||
return jpaTm()
|
||||
.transactWithoutBackup(
|
||||
() -> {
|
||||
snapshotId.ifPresent(jpaTm()::setDatabaseSnapshot);
|
||||
|
||||
// Fill in any gaps in the transaction log that have since become available before
|
||||
// processing the next batch.
|
||||
applyMissingTransactions();
|
||||
|
||||
return jpaTm()
|
||||
.query(
|
||||
"SELECT txn FROM TransactionEntity txn WHERE id >" + " :lastId ORDER BY id",
|
||||
TransactionEntity.class)
|
||||
.setParameter("lastId", lastSqlTxnBeforeBatch.getTransactionId())
|
||||
.setMaxResults(BATCH_SIZE)
|
||||
.getResultList();
|
||||
});
|
||||
} catch (NoResultException e) {
|
||||
return ImmutableList.of();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Iterate over the recent gaps in the Transaction table and apply any that have been filled in.
|
||||
*
|
||||
* <p>Must be called from within a JPA transaction.
|
||||
*
|
||||
* <p>Gap rewriting is a complicated matter, and the algorithm is the product of some very deep
|
||||
* consideration by mmuller and weiminyu. Basically, the constraints are:
|
||||
*
|
||||
* <ol>
|
||||
* <li>Replay has to work against a database snapshot (gap replay would break this, so we don't
|
||||
* call this method when replaying against a snapshot)
|
||||
* </ol>
|
||||
*/
|
||||
private static void applyMissingTransactions() {
|
||||
long now = jpaTm().getTransactionTime().getMillis();
|
||||
ImmutableList<ReplayGap> gaps = ofyTm().loadAllOf(ReplayGap.class);
|
||||
jpaTm()
|
||||
.query("SELECT txn from TransactionEntity txn WHERE id IN :gapIds", TransactionEntity.class)
|
||||
.setParameter(
|
||||
"gapIds", gaps.stream().map(gap -> gap.getTransactionId()).collect(toImmutableList()))
|
||||
.getResultStream()
|
||||
.forEach(
|
||||
txn -> {
|
||||
// Transcribe the transaction and delete the gap record in the same ofy transaction.
|
||||
ofyTm()
|
||||
.transact(
|
||||
() -> {
|
||||
// Write the transaction to datastore.
|
||||
try {
|
||||
Transaction.deserialize(txn.getContents()).writeToDatastore();
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException("Error during transaction deserialization", e);
|
||||
}
|
||||
|
||||
// Find and delete the gap record.
|
||||
ImmutableList<ReplayGap> filledGaps =
|
||||
gaps.stream()
|
||||
.filter(gap -> gap.getTransactionId() == txn.getId())
|
||||
.collect(toImmutableList());
|
||||
checkState(
|
||||
filledGaps.size() == 1,
|
||||
"Bad list of gaps for discovered id: %s",
|
||||
filledGaps);
|
||||
auditedOfy().deleteIgnoringReadOnlyWithoutBackup().entity(gaps.get(0));
|
||||
});
|
||||
logger.atInfo().log("Applied missing transaction %s", txn.getId());
|
||||
});
|
||||
|
||||
// Clean up any gaps that have expired (in batches because they're each in their own entity
|
||||
// group).
|
||||
ArrayList<ReplayGap> gapBatch = new ArrayList<>();
|
||||
gaps.stream()
|
||||
.forEach(
|
||||
gap -> {
|
||||
if (now - gap.getTimestamp().getMillis() > MAX_GAP_RETENTION_MILLIS) {
|
||||
gapBatch.add(gap);
|
||||
}
|
||||
if (gapBatch.size() == MAX_ENTITIES_PER_TXN) {
|
||||
deleteReplayGaps(gapBatch);
|
||||
gapBatch.clear();
|
||||
}
|
||||
});
|
||||
if (!gapBatch.isEmpty()) {
|
||||
deleteReplayGaps(gapBatch);
|
||||
}
|
||||
}
|
||||
|
||||
private static void deleteReplayGaps(ArrayList<ReplayGap> gapsToDelete) {
|
||||
logger.atInfo().log(
|
||||
"deleting gap records for %s",
|
||||
gapsToDelete.stream().map(g -> g.getTransactionId()).collect(toImmutableList()));
|
||||
ofyTm()
|
||||
.transact(() -> auditedOfy().deleteIgnoringReadOnlyWithoutBackup().entities(gapsToDelete));
|
||||
}
|
||||
|
||||
/**
|
||||
* Apply a transaction to Datastore.
|
||||
*
|
||||
* <p>Throws an exception if a fatal error occurred and the batch should be aborted.
|
||||
*/
|
||||
@VisibleForTesting
|
||||
public static void applyTransaction(TransactionEntity txnEntity) {
|
||||
logger.atInfo().log("Applying a single transaction Cloud SQL -> Cloud Datastore.");
|
||||
boolean done = false;
|
||||
try (UpdateAutoTimestamp.DisableAutoUpdateResource disabler =
|
||||
UpdateAutoTimestamp.disableAutoUpdate()) {
|
||||
|
||||
// We put this in a do/while loop because we can potentially clean out some range of gaps
|
||||
// first and we want to do those in their own transaction so as not to run up the entity group
|
||||
// count. (This is a highly pathological case: consecutive gaps are rare, but the fact that
|
||||
// they can occur potentially increases the entity group count to beyond what we can
|
||||
// accommodate in a single transaction.)
|
||||
do {
|
||||
done =
|
||||
ofyTm()
|
||||
.transact(
|
||||
() -> {
|
||||
// Reload the last transaction id, which could possibly have changed.
|
||||
LastSqlTransaction lastSqlTxn = LastSqlTransaction.load();
|
||||
long nextTxnId = lastSqlTxn.getTransactionId() + 1;
|
||||
|
||||
// Skip missing transactions. Missed transactions can happen normally. If a
|
||||
// transaction gets rolled back, the sequence counter doesn't.
|
||||
int gapCount = 0;
|
||||
while (nextTxnId < txnEntity.getId()) {
|
||||
logger.atWarning().log(
|
||||
"Ignoring transaction %s, which does not exist.", nextTxnId);
|
||||
auditedOfy()
|
||||
.saveIgnoringReadOnlyWithoutBackup()
|
||||
.entity(new ReplayGap(ofyTm().getTransactionTime(), nextTxnId));
|
||||
++nextTxnId;
|
||||
|
||||
// Don't exceed the entity group count trying to clean these up (we stop at
|
||||
// max
|
||||
// - 1 because we also want to save the lastSqlTransaction).
|
||||
if (++gapCount == MAX_ENTITIES_PER_TXN - 1) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Don't write gap records in the same transaction as the SQL transaction that
|
||||
// we're replaying. Return false to force us to go through and repeat in a
|
||||
// new
|
||||
// transaction.
|
||||
if (gapCount > 0) {
|
||||
// We haven't replayed the transaction, but we've determined that we can
|
||||
// ignore everything before it so update lastSqlTransaction accordingly.
|
||||
auditedOfy()
|
||||
.saveIgnoringReadOnlyWithoutBackup()
|
||||
.entity(lastSqlTxn.cloneWithNewTransactionId(nextTxnId - 1));
|
||||
return false;
|
||||
}
|
||||
|
||||
if (nextTxnId > txnEntity.getId()) {
|
||||
// We've already replayed this transaction. This shouldn't happen, as GAE
|
||||
// cron
|
||||
// is supposed to avoid overruns and this action shouldn't be executed from
|
||||
// any
|
||||
// other context, but it's not harmful as we can just ignore the
|
||||
// transaction.
|
||||
// Log it so that we know about it and move on.
|
||||
logger.atWarning().log(
|
||||
"Ignoring transaction %s, which appears to have already been applied.",
|
||||
txnEntity.getId());
|
||||
return true;
|
||||
}
|
||||
|
||||
logger.atInfo().log(
|
||||
"Applying transaction %s to Cloud Datastore.", txnEntity.getId());
|
||||
|
||||
// At this point, we know txnEntity is the correct next transaction, so write
|
||||
// it
|
||||
// to Datastore.
|
||||
try {
|
||||
Transaction.deserialize(txnEntity.getContents()).writeToDatastore();
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException("Error during transaction deserialization", e);
|
||||
}
|
||||
|
||||
// Write the updated last transaction id to Datastore as part of this
|
||||
// Datastore
|
||||
// transaction.
|
||||
auditedOfy()
|
||||
.saveIgnoringReadOnlyWithoutBackup()
|
||||
.entity(lastSqlTxn.cloneWithNewTransactionId(nextTxnId));
|
||||
logger.atInfo().log(
|
||||
"Finished applying single transaction Cloud SQL -> Cloud Datastore.");
|
||||
return true;
|
||||
});
|
||||
} while (!done);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
MigrationState state = DatabaseMigrationStateSchedule.getValueAtTime(clock.nowUtc());
|
||||
if (!state.getReplayDirection().equals(ReplayDirection.SQL_TO_DATASTORE)) {
|
||||
String message =
|
||||
String.format(
|
||||
"Skipping ReplicateToDatastoreAction because we are in migration phase %s.", state);
|
||||
logger.atInfo().log(message);
|
||||
// App Engine will retry on any non-2xx status code, which we don't want in this case.
|
||||
response.setStatus(SC_NO_CONTENT);
|
||||
response.setPayload(message);
|
||||
return;
|
||||
}
|
||||
Optional<Lock> lock =
|
||||
Lock.acquireSql(
|
||||
REPLICATE_TO_DATASTORE_LOCK_NAME,
|
||||
null,
|
||||
REPLICATE_TO_DATASTORE_LOCK_LEASE_LENGTH,
|
||||
requestStatusChecker,
|
||||
false);
|
||||
if (!lock.isPresent()) {
|
||||
String message = "Can't acquire ReplicateToDatastoreAction lock, aborting.";
|
||||
logger.atSevere().log(message);
|
||||
// App Engine will retry on any non-2xx status code, which we don't want in this case.
|
||||
response.setStatus(SC_NO_CONTENT);
|
||||
response.setPayload(message);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
logger.atInfo().log("Processing transaction replay batch Cloud SQL -> Cloud Datastore.");
|
||||
int numTransactionsReplayed = replayAllTransactions();
|
||||
String resultMessage =
|
||||
String.format(
|
||||
"Replayed %d transaction(s) from Cloud SQL -> Datastore.", numTransactionsReplayed);
|
||||
logger.atInfo().log(resultMessage);
|
||||
response.setPayload(resultMessage);
|
||||
response.setStatus(SC_OK);
|
||||
} catch (Throwable t) {
|
||||
String message = "Errored out replaying files.";
|
||||
logger.atSevere().withCause(t).log(message);
|
||||
response.setStatus(SC_INTERNAL_SERVER_ERROR);
|
||||
response.setPayload(message);
|
||||
} finally {
|
||||
lock.ifPresent(Lock::releaseSql);
|
||||
}
|
||||
}
|
||||
|
||||
private int replayAllTransactions() {
|
||||
return replayAllTransactions(Optional.empty());
|
||||
}
|
||||
|
||||
public static int replayAllTransactions(Optional<String> snapshotId) {
|
||||
int numTransactionsReplayed = 0;
|
||||
List<TransactionEntity> transactionBatch;
|
||||
do {
|
||||
transactionBatch = getTransactionBatchAtSnapshot(snapshotId);
|
||||
for (TransactionEntity transaction : transactionBatch) {
|
||||
applyTransaction(transaction);
|
||||
numTransactionsReplayed++;
|
||||
}
|
||||
} while (!transactionBatch.isEmpty());
|
||||
return numTransactionsReplayed;
|
||||
}
|
||||
}
|
||||
@@ -31,9 +31,6 @@ public interface SqlEntity {
|
||||
|
||||
Optional<DatastoreEntity> toDatastoreEntity();
|
||||
|
||||
/** A method that will be called before the object is saved to SQL in asynchronous replay. */
|
||||
default void beforeSqlSaveOnReplay() {}
|
||||
|
||||
/** Returns this entity's primary key field(s) in a string. */
|
||||
default String getPrimaryKeyString() {
|
||||
return jpaTm()
|
||||
|
||||
@@ -16,9 +16,7 @@ package google.registry.model.reporting;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkArgument;
|
||||
import static com.google.common.collect.ImmutableList.toImmutableList;
|
||||
import static google.registry.model.ofy.ObjectifyService.auditedOfy;
|
||||
import static google.registry.persistence.transaction.TransactionManagerFactory.jpaTm;
|
||||
import static google.registry.persistence.transaction.TransactionManagerFactory.tm;
|
||||
import static google.registry.util.DateTimeUtils.END_OF_TIME;
|
||||
import static google.registry.util.DateTimeUtils.START_OF_TIME;
|
||||
|
||||
@@ -72,29 +70,16 @@ public class HistoryEntryDao {
|
||||
/** Loads all history objects in the times specified, including all types. */
|
||||
public static ImmutableList<HistoryEntry> loadAllHistoryObjects(
|
||||
DateTime afterTime, DateTime beforeTime) {
|
||||
if (tm().isOfy()) {
|
||||
return Streams.stream(
|
||||
auditedOfy()
|
||||
.load()
|
||||
.type(HistoryEntry.class)
|
||||
.order("modificationTime")
|
||||
.filter("modificationTime >=", afterTime)
|
||||
.filter("modificationTime <=", beforeTime))
|
||||
.map(HistoryEntry::toChildHistoryEntity)
|
||||
.collect(toImmutableList());
|
||||
} else {
|
||||
return jpaTm()
|
||||
.transact(
|
||||
() ->
|
||||
new ImmutableList.Builder<HistoryEntry>()
|
||||
.addAll(
|
||||
loadAllHistoryObjectsFromSql(ContactHistory.class, afterTime, beforeTime))
|
||||
.addAll(
|
||||
loadAllHistoryObjectsFromSql(DomainHistory.class, afterTime, beforeTime))
|
||||
.addAll(
|
||||
loadAllHistoryObjectsFromSql(HostHistory.class, afterTime, beforeTime))
|
||||
.build());
|
||||
}
|
||||
return jpaTm()
|
||||
.transact(
|
||||
() ->
|
||||
new ImmutableList.Builder<HistoryEntry>()
|
||||
.addAll(
|
||||
loadAllHistoryObjectsFromSql(ContactHistory.class, afterTime, beforeTime))
|
||||
.addAll(
|
||||
loadAllHistoryObjectsFromSql(DomainHistory.class, afterTime, beforeTime))
|
||||
.addAll(loadAllHistoryObjectsFromSql(HostHistory.class, afterTime, beforeTime))
|
||||
.build());
|
||||
}
|
||||
|
||||
/** Loads all history objects corresponding to the given {@link EppResource}. */
|
||||
@@ -115,21 +100,8 @@ public class HistoryEntryDao {
|
||||
/** Loads all history objects in the time period specified for the given {@link EppResource}. */
|
||||
public static ImmutableList<HistoryEntry> loadHistoryObjectsForResource(
|
||||
VKey<? extends EppResource> parentKey, DateTime afterTime, DateTime beforeTime) {
|
||||
if (tm().isOfy()) {
|
||||
return Streams.stream(
|
||||
auditedOfy()
|
||||
.load()
|
||||
.type(HistoryEntry.class)
|
||||
.ancestor(parentKey.getOfyKey())
|
||||
.order("modificationTime")
|
||||
.filter("modificationTime >=", afterTime)
|
||||
.filter("modificationTime <=", beforeTime))
|
||||
.map(HistoryEntry::toChildHistoryEntity)
|
||||
.collect(toImmutableList());
|
||||
} else {
|
||||
return jpaTm()
|
||||
.transact(() -> loadHistoryObjectsForResourceFromSql(parentKey, afterTime, beforeTime));
|
||||
}
|
||||
return jpaTm()
|
||||
.transact(() -> loadHistoryObjectsForResourceFromSql(parentKey, afterTime, beforeTime));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -162,23 +134,15 @@ public class HistoryEntryDao {
|
||||
/** Loads all history objects from all time from the given registrars. */
|
||||
public static Iterable<HistoryEntry> loadHistoryObjectsByRegistrars(
|
||||
ImmutableCollection<String> registrarIds) {
|
||||
if (tm().isOfy()) {
|
||||
return auditedOfy()
|
||||
.load()
|
||||
.type(HistoryEntry.class)
|
||||
.filter("clientId in", registrarIds)
|
||||
.order("modificationTime");
|
||||
} else {
|
||||
return jpaTm()
|
||||
.transact(
|
||||
() ->
|
||||
Streams.concat(
|
||||
loadHistoryObjectFromSqlByRegistrars(ContactHistory.class, registrarIds),
|
||||
loadHistoryObjectFromSqlByRegistrars(DomainHistory.class, registrarIds),
|
||||
loadHistoryObjectFromSqlByRegistrars(HostHistory.class, registrarIds))
|
||||
.sorted(Comparator.comparing(HistoryEntry::getModificationTime))
|
||||
.collect(toImmutableList()));
|
||||
}
|
||||
return jpaTm()
|
||||
.transact(
|
||||
() ->
|
||||
Streams.concat(
|
||||
loadHistoryObjectFromSqlByRegistrars(ContactHistory.class, registrarIds),
|
||||
loadHistoryObjectFromSqlByRegistrars(DomainHistory.class, registrarIds),
|
||||
loadHistoryObjectFromSqlByRegistrars(HostHistory.class, registrarIds))
|
||||
.sorted(Comparator.comparing(HistoryEntry::getModificationTime))
|
||||
.collect(toImmutableList()));
|
||||
}
|
||||
|
||||
private static <T extends HistoryEntry> Stream<T> loadHistoryObjectFromSqlByRegistrars(
|
||||
@@ -211,7 +175,7 @@ public class HistoryEntryDao {
|
||||
jpaTm().criteriaQuery(criteriaQuery).getResultList());
|
||||
}
|
||||
|
||||
private static Class<? extends HistoryEntry> getHistoryClassFromParent(
|
||||
public static Class<? extends HistoryEntry> getHistoryClassFromParent(
|
||||
Class<? extends EppResource> parent) {
|
||||
if (!RESOURCE_TYPES_TO_HISTORY_TYPES.containsKey(parent)) {
|
||||
throw new IllegalArgumentException(
|
||||
@@ -220,7 +184,7 @@ public class HistoryEntryDao {
|
||||
return RESOURCE_TYPES_TO_HISTORY_TYPES.get(parent);
|
||||
}
|
||||
|
||||
private static String getRepoIdFieldNameFromHistoryClass(
|
||||
public static String getRepoIdFieldNameFromHistoryClass(
|
||||
Class<? extends HistoryEntry> historyClass) {
|
||||
if (!REPO_ID_FIELD_NAMES.containsKey(historyClass)) {
|
||||
throw new IllegalArgumentException(
|
||||
|
||||
@@ -29,7 +29,6 @@ import static google.registry.util.DateTimeUtils.START_OF_TIME;
|
||||
import static google.registry.util.PreconditionsUtils.checkArgumentNotNull;
|
||||
import static org.joda.money.CurrencyUnit.USD;
|
||||
|
||||
import com.github.benmanes.caffeine.cache.CacheLoader;
|
||||
import com.github.benmanes.caffeine.cache.LoadingCache;
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import com.google.common.base.Joiner;
|
||||
@@ -50,6 +49,7 @@ import com.googlecode.objectify.annotation.OnSave;
|
||||
import com.googlecode.objectify.annotation.Parent;
|
||||
import google.registry.model.Buildable;
|
||||
import google.registry.model.CacheUtils;
|
||||
import google.registry.model.CacheUtils.AppEngineEnvironmentCacheLoader;
|
||||
import google.registry.model.CreateAutoTimestamp;
|
||||
import google.registry.model.ImmutableObject;
|
||||
import google.registry.model.UnsafeSerializable;
|
||||
@@ -268,7 +268,7 @@ public class Registry extends ImmutableObject
|
||||
private static final LoadingCache<String, Optional<Registry>> CACHE =
|
||||
CacheUtils.newCacheBuilder(getSingletonCacheRefreshDuration())
|
||||
.build(
|
||||
new CacheLoader<String, Optional<Registry>>() {
|
||||
new AppEngineEnvironmentCacheLoader<String, Optional<Registry>>() {
|
||||
@Override
|
||||
public Optional<Registry> load(final String tld) {
|
||||
// Enter a transaction-less context briefly; we don't want to enroll every TLD in
|
||||
|
||||
@@ -20,10 +20,7 @@ import google.registry.backup.BackupModule;
|
||||
import google.registry.backup.CommitLogCheckpointAction;
|
||||
import google.registry.backup.DeleteOldCommitLogsAction;
|
||||
import google.registry.backup.ExportCommitLogDiffAction;
|
||||
import google.registry.backup.ReplayCommitLogsToSqlAction;
|
||||
import google.registry.backup.SyncDatastoreToSqlSnapshotAction;
|
||||
import google.registry.batch.BatchModule;
|
||||
import google.registry.batch.DeleteContactsAndHostsAction;
|
||||
import google.registry.batch.DeleteExpiredDomainsAction;
|
||||
import google.registry.batch.DeleteLoadTestDataAction;
|
||||
import google.registry.batch.DeleteProberDataAction;
|
||||
@@ -61,8 +58,8 @@ import google.registry.export.UploadDatastoreBackupAction;
|
||||
import google.registry.export.sheet.SheetModule;
|
||||
import google.registry.export.sheet.SyncRegistrarsSheetAction;
|
||||
import google.registry.flows.FlowComponent;
|
||||
import google.registry.flows.custom.CustomLogicModule;
|
||||
import google.registry.mapreduce.MapreduceModule;
|
||||
import google.registry.model.replay.ReplicateToDatastoreAction;
|
||||
import google.registry.monitoring.whitebox.WhiteboxModule;
|
||||
import google.registry.rdap.UpdateRegistrarRdapBaseUrlsAction;
|
||||
import google.registry.rde.BrdaCopyAction;
|
||||
@@ -92,7 +89,6 @@ import google.registry.tmch.TmchCrlAction;
|
||||
import google.registry.tmch.TmchDnlAction;
|
||||
import google.registry.tmch.TmchModule;
|
||||
import google.registry.tmch.TmchSmdrlAction;
|
||||
import google.registry.tools.javascrap.CreateSyntheticHistoryEntriesAction;
|
||||
|
||||
/** Dagger component with per-request lifetime for "backend" App Engine module. */
|
||||
@RequestScope
|
||||
@@ -103,6 +99,7 @@ import google.registry.tools.javascrap.CreateSyntheticHistoryEntriesAction;
|
||||
BillingModule.class,
|
||||
CloudDnsWriterModule.class,
|
||||
CronModule.class,
|
||||
CustomLogicModule.class,
|
||||
DnsCountQueryCoordinatorModule.class,
|
||||
DnsModule.class,
|
||||
DnsUpdateConfigModule.class,
|
||||
@@ -135,10 +132,6 @@ interface BackendRequestComponent {
|
||||
|
||||
CopyDetailReportsAction copyDetailReportAction();
|
||||
|
||||
CreateSyntheticHistoryEntriesAction createSyntheticHistoryEntriesAction();
|
||||
|
||||
DeleteContactsAndHostsAction deleteContactsAndHostsAction();
|
||||
|
||||
DeleteExpiredDomainsAction deleteExpiredDomainsAction();
|
||||
|
||||
DeleteLoadTestDataAction deleteLoadTestDataAction();
|
||||
@@ -191,10 +184,6 @@ interface BackendRequestComponent {
|
||||
|
||||
RelockDomainAction relockDomainAction();
|
||||
|
||||
ReplayCommitLogsToSqlAction replayCommitLogsToSqlAction();
|
||||
|
||||
ReplicateToDatastoreAction replicateToDatastoreAction();
|
||||
|
||||
ResaveAllEppResourcesAction resaveAllEppResourcesAction();
|
||||
|
||||
ResaveAllEppResourcesPipelineAction resaveAllEppResourcesPipelineAction();
|
||||
@@ -203,8 +192,6 @@ interface BackendRequestComponent {
|
||||
|
||||
SendExpiringCertificateNotificationEmailAction sendExpiringCertificateNotificationEmailAction();
|
||||
|
||||
SyncDatastoreToSqlSnapshotAction syncDatastoreToSqlSnapshotAction();
|
||||
|
||||
SyncGroupMembersAction syncGroupMembersAction();
|
||||
|
||||
SyncRegistrarsSheetAction syncRegistrarsSheetAction();
|
||||
|
||||
@@ -48,14 +48,14 @@ import google.registry.tools.server.VerifyOteAction;
|
||||
@RequestScope
|
||||
@Subcomponent(
|
||||
modules = {
|
||||
BackupModule.class,
|
||||
DnsModule.class,
|
||||
EppToolModule.class,
|
||||
LoadTestModule.class,
|
||||
MapreduceModule.class,
|
||||
RequestModule.class,
|
||||
ToolsServerModule.class,
|
||||
WhiteboxModule.class,
|
||||
BackupModule.class,
|
||||
DnsModule.class,
|
||||
EppToolModule.class,
|
||||
LoadTestModule.class,
|
||||
MapreduceModule.class,
|
||||
RequestModule.class,
|
||||
ToolsServerModule.class,
|
||||
WhiteboxModule.class,
|
||||
})
|
||||
interface ToolsRequestComponent {
|
||||
CreateGroupsAction createGroupsAction();
|
||||
|
||||
@@ -107,7 +107,7 @@ public abstract class PersistenceModule {
|
||||
properties.put(HIKARI_MAXIMUM_POOL_SIZE, getHibernateHikariMaximumPoolSize());
|
||||
properties.put(HIKARI_IDLE_TIMEOUT, getHibernateHikariIdleTimeout());
|
||||
properties.put(Environment.DIALECT, NomulusPostgreSQLDialect.class.getName());
|
||||
properties.put(JDBC_BATCH_SIZE, getHibernateJdbcBatchSize());
|
||||
properties.put(JDBC_BATCH_SIZE, Integer.toString(getHibernateJdbcBatchSize()));
|
||||
properties.put(JDBC_FETCH_SIZE, getHibernateJdbcFetchSize());
|
||||
return properties.build();
|
||||
}
|
||||
|
||||
@@ -53,7 +53,7 @@ public class VKey<T> extends ImmutableObject implements Serializable {
|
||||
Serializable sqlKey;
|
||||
|
||||
// The objectify key for the referenced entity.
|
||||
Key<T> ofyKey;
|
||||
@Insignificant Key<T> ofyKey;
|
||||
|
||||
Class<? extends T> kind;
|
||||
|
||||
|
||||
@@ -106,11 +106,6 @@ public class JpaTransactionManagerImpl implements JpaTransactionManager {
|
||||
private static final ThreadLocal<TransactionInfo> transactionInfo =
|
||||
ThreadLocal.withInitial(TransactionInfo::new);
|
||||
|
||||
// If this value is present, use it to determine whether or not to replay SQL transactions to
|
||||
// Datastore, rather than using the schedule stored in Datastore.
|
||||
private static final ThreadLocal<Optional<Boolean>> replaySqlToDatastoreOverrideForTest =
|
||||
ThreadLocal.withInitial(Optional::empty);
|
||||
|
||||
public JpaTransactionManagerImpl(EntityManagerFactory emf, Clock clock) {
|
||||
this.emf = emf;
|
||||
this.clock = clock;
|
||||
@@ -825,16 +820,6 @@ public class JpaTransactionManagerImpl implements JpaTransactionManager {
|
||||
return entity;
|
||||
}
|
||||
|
||||
/** Sets the override to always/never replay SQL transactions to Datastore. */
|
||||
public static void setReplaySqlToDatastoreOverrideForTest(boolean replaySqlToDs) {
|
||||
replaySqlToDatastoreOverrideForTest.set(Optional.of(replaySqlToDs));
|
||||
}
|
||||
|
||||
/** Removes the replay-SQL-to-Datastore override; the migration schedule will then be used. */
|
||||
public static void removeReplaySqlToDsOverrideForTest() {
|
||||
replaySqlToDatastoreOverrideForTest.set(Optional.empty());
|
||||
}
|
||||
|
||||
/** Returns true if the entity class should be replicated from SQL to datastore. */
|
||||
private static boolean shouldReplicate(Class<?> entityClass) {
|
||||
return !NonReplicatedEntity.class.isAssignableFrom(entityClass)
|
||||
@@ -860,14 +845,12 @@ public class JpaTransactionManagerImpl implements JpaTransactionManager {
|
||||
checkArgumentNotNull(clock);
|
||||
inTransaction = true;
|
||||
transactionTime = clock.nowUtc();
|
||||
if (withBackup
|
||||
&& replaySqlToDatastoreOverrideForTest
|
||||
.get()
|
||||
.orElseGet(
|
||||
() ->
|
||||
DatabaseMigrationStateSchedule.getValueAtTime(transactionTime)
|
||||
.getReplayDirection()
|
||||
.equals(ReplayDirection.SQL_TO_DATASTORE))) {
|
||||
Supplier<Boolean> sqlToDsReplaySupplier =
|
||||
() ->
|
||||
DatabaseMigrationStateSchedule.getValueAtTime(transactionTime)
|
||||
.getReplayDirection()
|
||||
.equals(ReplayDirection.SQL_TO_DATASTORE);
|
||||
if (withBackup && sqlToDsReplaySupplier.get()) {
|
||||
contentsBuilder = new Transaction.Builder();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,7 +26,6 @@ import com.google.common.collect.ImmutableList;
|
||||
import com.google.storage.onestore.v3.OnestoreEntity.EntityProto;
|
||||
import google.registry.model.Buildable;
|
||||
import google.registry.model.ImmutableObject;
|
||||
import google.registry.model.replay.DatastoreEntity;
|
||||
import google.registry.model.replay.SqlEntity;
|
||||
import google.registry.persistence.VKey;
|
||||
import java.io.ByteArrayInputStream;
|
||||
@@ -241,10 +240,6 @@ public class Transaction extends ImmutableObject implements Buildable {
|
||||
|
||||
@Override
|
||||
public void writeToDatastore() {
|
||||
// this should always be the case, but check just in case
|
||||
if (entity instanceof DatastoreEntity) {
|
||||
((DatastoreEntity) entity).beforeDatastoreSaveOnReplay();
|
||||
}
|
||||
ofyTm().putIgnoringReadOnlyWithBackup(entity);
|
||||
}
|
||||
|
||||
|
||||
@@ -20,11 +20,14 @@ import static com.google.common.collect.ImmutableList.toImmutableList;
|
||||
import static com.google.common.collect.ImmutableSet.toImmutableSet;
|
||||
import static com.google.common.collect.ImmutableSetMultimap.toImmutableSetMultimap;
|
||||
import static google.registry.model.EppResourceUtils.isLinked;
|
||||
import static google.registry.persistence.transaction.TransactionManagerFactory.jpaTm;
|
||||
import static google.registry.persistence.transaction.TransactionManagerFactory.tm;
|
||||
import static google.registry.persistence.transaction.TransactionManagerUtil.transactIfJpaTm;
|
||||
import static google.registry.rdap.RdapIcannStandardInformation.CONTACT_REDACTED_VALUE;
|
||||
import static google.registry.util.CollectionUtils.union;
|
||||
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import com.google.common.base.Strings;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
@@ -81,6 +84,7 @@ import java.util.Set;
|
||||
import java.util.stream.Stream;
|
||||
import javax.annotation.Nullable;
|
||||
import javax.inject.Inject;
|
||||
import javax.persistence.Entity;
|
||||
import org.joda.time.DateTime;
|
||||
|
||||
/**
|
||||
@@ -150,6 +154,19 @@ public class RdapJsonFormatter {
|
||||
INTERNAL
|
||||
}
|
||||
|
||||
/**
|
||||
* JPQL query template for finding the latest history entry per event type for an EPP entity.
|
||||
*
|
||||
* <p>User should replace '%entityName%', '%repoIdField%', and '%repoIdValue%' with valid values.
|
||||
* A DomainHistory query may look like below: {@code select e from DomainHistory e where
|
||||
* domainRepoId = '17-Q9JYB4C' and modificationTime in (select max(modificationTime) from
|
||||
* DomainHistory where domainRepoId = '17-Q9JYB4C' and type is not null group by type)}
|
||||
*/
|
||||
private static final String GET_LAST_HISTORY_BY_TYPE_JPQL_TEMPLATE =
|
||||
"select e from %entityName% e where %repoIdField% = '%repoIdValue%' and modificationTime in "
|
||||
+ " (select max(modificationTime) from %entityName% where "
|
||||
+ " %repoIdField% = '%repoIdValue%' and type is not null group by type)";
|
||||
|
||||
/** Map of EPP status values to the RDAP equivalents. */
|
||||
private static final ImmutableMap<StatusValue, RdapStatus> STATUS_TO_RDAP_STATUS_MAP =
|
||||
new ImmutableMap.Builder<StatusValue, RdapStatus>()
|
||||
@@ -855,17 +872,8 @@ public class RdapJsonFormatter {
|
||||
return rolesBuilder.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates the list of optional events to list in domain, nameserver, or contact replies.
|
||||
*
|
||||
* <p>Only has entries for optional events that won't be shown in "SUMMARY" versions of these
|
||||
* objects. These are either stated as optional in the RDAP Response Profile 15feb19, or not
|
||||
* mentioned at all but thought to be useful anyway.
|
||||
*
|
||||
* <p>Any required event should be added elsewhere, preferably without using HistoryEntries (so
|
||||
* that we don't need to load HistoryEntries for "summary" responses).
|
||||
*/
|
||||
private ImmutableList<Event> makeOptionalEvents(EppResource resource) {
|
||||
@VisibleForTesting
|
||||
ImmutableMap<EventAction, HistoryEntry> getLastHistoryEntryByType(EppResource resource) {
|
||||
HashMap<EventAction, HistoryEntry> lastEntryOfType = Maps.newHashMap();
|
||||
// Events (such as transfer, but also create) can appear multiple times. We only want the last
|
||||
// time they appeared.
|
||||
@@ -878,8 +886,26 @@ public class RdapJsonFormatter {
|
||||
// 2.3.2.3 An event of *eventAction* type *transfer*, with the last date and time that the
|
||||
// domain was transferred. The event of *eventAction* type *transfer* MUST be omitted if the
|
||||
// domain name has not been transferred since it was created.
|
||||
Iterable<? extends HistoryEntry> historyEntries =
|
||||
HistoryEntryDao.loadHistoryObjectsForResource(resource.createVKey());
|
||||
Iterable<? extends HistoryEntry> historyEntries;
|
||||
if (tm().isOfy()) {
|
||||
historyEntries = HistoryEntryDao.loadHistoryObjectsForResource(resource.createVKey());
|
||||
} else {
|
||||
VKey<? extends EppResource> resourceVkey = resource.createVKey();
|
||||
Class<? extends HistoryEntry> historyClass =
|
||||
HistoryEntryDao.getHistoryClassFromParent(resourceVkey.getKind());
|
||||
String entityName = historyClass.getAnnotation(Entity.class).name();
|
||||
if (Strings.isNullOrEmpty(entityName)) {
|
||||
entityName = historyClass.getSimpleName();
|
||||
}
|
||||
String repoIdFieldName = HistoryEntryDao.getRepoIdFieldNameFromHistoryClass(historyClass);
|
||||
String jpql =
|
||||
GET_LAST_HISTORY_BY_TYPE_JPQL_TEMPLATE
|
||||
.replace("%entityName%", entityName)
|
||||
.replace("%repoIdField%", repoIdFieldName)
|
||||
.replace("%repoIdValue%", resourceVkey.getSqlKey().toString());
|
||||
historyEntries =
|
||||
jpaTm().transact(() -> jpaTm().getEntityManager().createQuery(jpql).getResultList());
|
||||
}
|
||||
for (HistoryEntry historyEntry : historyEntries) {
|
||||
EventAction rdapEventAction =
|
||||
HISTORY_ENTRY_TYPE_TO_RDAP_EVENT_ACTION_MAP.get(historyEntry.getType());
|
||||
@@ -889,6 +915,21 @@ public class RdapJsonFormatter {
|
||||
}
|
||||
lastEntryOfType.put(rdapEventAction, historyEntry);
|
||||
}
|
||||
return ImmutableMap.copyOf(lastEntryOfType);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates the list of optional events to list in domain, nameserver, or contact replies.
|
||||
*
|
||||
* <p>Only has entries for optional events that won't be shown in "SUMMARY" versions of these
|
||||
* objects. These are either stated as optional in the RDAP Response Profile 15feb19, or not
|
||||
* mentioned at all but thought to be useful anyway.
|
||||
*
|
||||
* <p>Any required event should be added elsewhere, preferably without using HistoryEntries (so
|
||||
* that we don't need to load HistoryEntries for "summary" responses).
|
||||
*/
|
||||
private ImmutableList<Event> makeOptionalEvents(EppResource resource) {
|
||||
ImmutableMap<EventAction, HistoryEntry> lastEntryOfType = getLastHistoryEntryByType(resource);
|
||||
ImmutableList.Builder<Event> eventsBuilder = new ImmutableList.Builder<>();
|
||||
DateTime creationTime = resource.getCreationTime();
|
||||
DateTime lastChangeTime =
|
||||
|
||||
@@ -19,12 +19,12 @@ import static google.registry.config.RegistryConfig.ConfigModule.TmchCaMode.PROD
|
||||
import static google.registry.config.RegistryConfig.getSingletonCacheRefreshDuration;
|
||||
import static google.registry.util.ResourceUtils.readResourceUtf8;
|
||||
|
||||
import com.github.benmanes.caffeine.cache.CacheLoader;
|
||||
import com.github.benmanes.caffeine.cache.LoadingCache;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import google.registry.config.RegistryConfig.Config;
|
||||
import google.registry.config.RegistryConfig.ConfigModule.TmchCaMode;
|
||||
import google.registry.model.CacheUtils;
|
||||
import google.registry.model.CacheUtils.AppEngineEnvironmentCacheLoader;
|
||||
import google.registry.model.tmch.TmchCrl;
|
||||
import google.registry.util.Clock;
|
||||
import google.registry.util.X509Utils;
|
||||
@@ -78,7 +78,7 @@ public final class TmchCertificateAuthority {
|
||||
private static final LoadingCache<TmchCaMode, X509CRL> CRL_CACHE =
|
||||
CacheUtils.newCacheBuilder(getSingletonCacheRefreshDuration())
|
||||
.build(
|
||||
new CacheLoader<TmchCaMode, X509CRL>() {
|
||||
new AppEngineEnvironmentCacheLoader<TmchCaMode, X509CRL>() {
|
||||
@Override
|
||||
public X509CRL load(final TmchCaMode tmchCaMode) throws GeneralSecurityException {
|
||||
Optional<TmchCrl> storedCrl = TmchCrl.get();
|
||||
|
||||
@@ -150,14 +150,6 @@ abstract class CreateOrUpdateRegistrarCommand extends MutatingCommand {
|
||||
validateWith = OptionalLongParameter.class)
|
||||
Optional<Long> ianaId;
|
||||
|
||||
@Nullable
|
||||
@Parameter(
|
||||
names = "--billing_id",
|
||||
description = "Registrar Billing ID (i.e. Oracle #)",
|
||||
converter = OptionalLongParameter.class,
|
||||
validateWith = OptionalLongParameter.class)
|
||||
private Optional<Long> billingId;
|
||||
|
||||
@Nullable
|
||||
@Parameter(
|
||||
names = "--po_number",
|
||||
@@ -173,7 +165,8 @@ abstract class CreateOrUpdateRegistrarCommand extends MutatingCommand {
|
||||
"Registrar Billing Account key-value pairs (formatted as key=value[,key=value...]), "
|
||||
+ "where key is a currency unit (USD, JPY, etc) and value is the registrar's billing "
|
||||
+ "account id for that currency. During update, only the pairs that need updating "
|
||||
+ "need to be provided.",
|
||||
+ "need to be provided, except when an empty string is provided, in which case the"
|
||||
+ "entire map is nullified.",
|
||||
converter = CurrencyUnitToStringMap.class,
|
||||
validateWith = CurrencyUnitToStringMap.class)
|
||||
private Map<CurrencyUnit, String> billingAccountMap;
|
||||
@@ -362,13 +355,12 @@ abstract class CreateOrUpdateRegistrarCommand extends MutatingCommand {
|
||||
if (ianaId != null) {
|
||||
builder.setIanaIdentifier(ianaId.orElse(null));
|
||||
}
|
||||
if (billingId != null) {
|
||||
builder.setBillingIdentifier(billingId.orElse(null));
|
||||
}
|
||||
Optional.ofNullable(poNumber).ifPresent(builder::setPoNumber);
|
||||
if (billingAccountMap != null) {
|
||||
LinkedHashMap<CurrencyUnit, String> newBillingAccountMap = new LinkedHashMap<>();
|
||||
if (oldRegistrar != null && oldRegistrar.getBillingAccountMap() != null) {
|
||||
if (oldRegistrar != null
|
||||
&& oldRegistrar.getBillingAccountMap() != null
|
||||
&& !billingAccountMap.isEmpty()) {
|
||||
newBillingAccountMap.putAll(oldRegistrar.getBillingAccountMap());
|
||||
}
|
||||
newBillingAccountMap.putAll(billingAccountMap);
|
||||
|
||||
@@ -42,17 +42,17 @@ import java.io.IOException;
|
||||
*/
|
||||
final class ForwardingServerReceiver implements VerificationCodeReceiver {
|
||||
|
||||
private final int forwarding_port;
|
||||
private final int forwardingPort;
|
||||
private final LocalServerReceiver localServerReceiver = new LocalServerReceiver();
|
||||
|
||||
ForwardingServerReceiver(int forwarding_port) {
|
||||
this.forwarding_port = forwarding_port;
|
||||
ForwardingServerReceiver(int forwardingPort) {
|
||||
this.forwardingPort = forwardingPort;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRedirectUri() throws IOException {
|
||||
String redirect_uri = localServerReceiver.getRedirectUri();
|
||||
return redirect_uri.replace("localhost:" + getRemotePort(), "localhost:" + forwarding_port);
|
||||
String redirectUri = localServerReceiver.getRedirectUri();
|
||||
return redirectUri.replace("localhost:" + getRemotePort(), "localhost:" + forwardingPort);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -49,11 +49,14 @@ final class GetAllocationTokenCommand implements CommandWithRemoteApi {
|
||||
tokens.stream()
|
||||
.map(t -> VKey.create(AllocationToken.class, t))
|
||||
.collect(toImmutableList());
|
||||
tm().loadByKeysIfPresent(tokenKeys)
|
||||
.forEach((k, v) -> builder.put(k.getSqlKey().toString(), v));
|
||||
tm().transact(
|
||||
() ->
|
||||
tm().loadByKeysIfPresent(tokenKeys)
|
||||
.forEach((k, v) -> builder.put(k.getSqlKey().toString(), v)));
|
||||
}
|
||||
ImmutableMap<String, AllocationToken> loadedTokens = builder.build();
|
||||
ImmutableMap<VKey<DomainBase>, DomainBase> domains = loadRedeemedDomains(loadedTokens.values());
|
||||
ImmutableMap<VKey<DomainBase>, DomainBase> domains =
|
||||
tm().transact(() -> loadRedeemedDomains(loadedTokens.values()));
|
||||
|
||||
for (String token : mainParameters) {
|
||||
if (loadedTokens.containsKey(token)) {
|
||||
|
||||
@@ -43,18 +43,18 @@ final class LoginCommand implements Command {
|
||||
public void run() throws Exception {
|
||||
AuthorizationCodeInstalledApp app;
|
||||
if (port != 0) {
|
||||
String remote_host = InetAddress.getLocalHost().getHostName();
|
||||
String remoteHost = InetAddress.getLocalHost().getHostName();
|
||||
ForwardingServerReceiver forwardingServerReceiver = new ForwardingServerReceiver(port);
|
||||
app =
|
||||
new AuthorizationCodeInstalledApp(
|
||||
flow,
|
||||
forwardingServerReceiver,
|
||||
url -> {
|
||||
int remote_port = forwardingServerReceiver.getRemotePort();
|
||||
int remotePort = forwardingServerReceiver.getRemotePort();
|
||||
System.out.printf(
|
||||
"Please first run the following command in a separate terminal on your local "
|
||||
+ "host:\n\n ssh -L %s:localhost:%s %s\n\n",
|
||||
port, remote_port, remote_host);
|
||||
port, remotePort, remoteHost);
|
||||
System.out.printf(
|
||||
"Please then open the following URL in your local browser and follow the"
|
||||
+ " instructions:\n\n %s\n\n",
|
||||
|
||||
@@ -127,10 +127,8 @@ public final class RegistryTool {
|
||||
.put("update_server_locks", UpdateServerLocksCommand.class)
|
||||
.put("update_tld", UpdateTldCommand.class)
|
||||
.put("upload_claims_list", UploadClaimsListCommand.class)
|
||||
.put("validate_datastore", ValidateDatastoreCommand.class)
|
||||
.put("validate_escrow_deposit", ValidateEscrowDepositCommand.class)
|
||||
.put("validate_login_credentials", ValidateLoginCredentialsCommand.class)
|
||||
.put("validate_sql", ValidateSqlCommand.class)
|
||||
.put("verify_ote", VerifyOteCommand.class)
|
||||
.put("whois_query", WhoisQueryCommand.class)
|
||||
.build();
|
||||
|
||||
@@ -175,14 +175,10 @@ interface RegistryToolComponent {
|
||||
|
||||
void inject(UpdateTldCommand command);
|
||||
|
||||
void inject(ValidateDatastoreCommand command);
|
||||
|
||||
void inject(ValidateEscrowDepositCommand command);
|
||||
|
||||
void inject(ValidateLoginCredentialsCommand command);
|
||||
|
||||
void inject(ValidateSqlCommand command);
|
||||
|
||||
void inject(WhoisQueryCommand command);
|
||||
|
||||
AppEngineConnection appEngineConnection();
|
||||
|
||||
@@ -204,7 +204,8 @@ final class UniformRapidSuspensionCommand extends MutatingEppToolCommand {
|
||||
|
||||
private ImmutableSortedSet<String> getExistingNameservers(DomainBase domain) {
|
||||
ImmutableSortedSet.Builder<String> nameservers = ImmutableSortedSet.naturalOrder();
|
||||
for (HostResource host : tm().loadByKeys(domain.getNameservers()).values()) {
|
||||
for (HostResource host :
|
||||
tm().transact(() -> tm().loadByKeys(domain.getNameservers()).values())) {
|
||||
nameservers.add(host.getForeignKey());
|
||||
}
|
||||
return nameservers.build();
|
||||
|
||||
@@ -1,232 +0,0 @@
|
||||
// Copyright 2022 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.tools;
|
||||
|
||||
import static google.registry.beam.BeamUtils.createJobName;
|
||||
|
||||
import com.beust.jcommander.Parameter;
|
||||
import com.google.api.services.dataflow.Dataflow;
|
||||
import com.google.api.services.dataflow.model.Job;
|
||||
import com.google.api.services.dataflow.model.LaunchFlexTemplateParameter;
|
||||
import com.google.api.services.dataflow.model.LaunchFlexTemplateRequest;
|
||||
import com.google.api.services.dataflow.model.LaunchFlexTemplateResponse;
|
||||
import com.google.common.base.Ascii;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import google.registry.beam.common.DatabaseSnapshot;
|
||||
import google.registry.config.RegistryConfig.Config;
|
||||
import google.registry.tools.params.DateTimeParameter;
|
||||
import google.registry.util.Clock;
|
||||
import google.registry.util.RequestStatusChecker;
|
||||
import google.registry.util.Sleeper;
|
||||
import java.io.IOException;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
import javax.inject.Inject;
|
||||
import org.joda.time.DateTime;
|
||||
import org.joda.time.Duration;
|
||||
|
||||
/** Shared setup for commands that validate the data replication between Datastore and Cloud SQL. */
|
||||
abstract class ValidateDatabaseMigrationCommand
|
||||
implements CommandWithConnection, CommandWithRemoteApi {
|
||||
|
||||
private static final String PIPELINE_NAME = "validate_database_pipeline";
|
||||
|
||||
private static final String MANUAL_PIPELINE_LAUNCH_COMMAND_TEMPLATE =
|
||||
"gcloud dataflow flex-template run "
|
||||
+ "\"%s-${USER}-$(date +%%Y%%m%%dt%%H%%M%%S)\" "
|
||||
+ "--template-file-gcs-location %s "
|
||||
+ "--project %s "
|
||||
+ "--region=%s "
|
||||
+ "--worker-machine-type=n2-standard-8 --num-workers=8 "
|
||||
+ "--parameters registryEnvironment=%s "
|
||||
+ "--parameters sqlSnapshotId=%s "
|
||||
+ "--parameters latestCommitLogTimestamp=%s "
|
||||
+ "--parameters diffOutputGcsBucket=%s ";
|
||||
|
||||
// States indicating a job is not finished yet.
|
||||
static final ImmutableSet<String> DATAFLOW_JOB_RUNNING_STATES =
|
||||
ImmutableSet.of(
|
||||
"JOB_STATE_UNKNOWN",
|
||||
"JOB_STATE_RUNNING",
|
||||
"JOB_STATE_STOPPED",
|
||||
"JOB_STATE_PENDING",
|
||||
"JOB_STATE_QUEUED");
|
||||
|
||||
static final Duration JOB_POLLING_INTERVAL = Duration.standardSeconds(60);
|
||||
|
||||
@Parameter(
|
||||
names = {"-m", "--manual"},
|
||||
description =
|
||||
"If true, let user launch the comparison pipeline manually out of band. "
|
||||
+ "Command will wait for user key-press to exit after syncing Datastore.")
|
||||
boolean manualLaunchPipeline;
|
||||
|
||||
@Parameter(
|
||||
names = {"-r", "--release"},
|
||||
description = "The release tag of the BEAM pipeline to run. It defaults to 'live'.")
|
||||
String release = "live";
|
||||
|
||||
@Parameter(
|
||||
names = {"-c", "--comparisonStartTimestamp"},
|
||||
description =
|
||||
"When comparing History and Epp Resource entities, ignore those that have not"
|
||||
+ " changed since this time.",
|
||||
converter = DateTimeParameter.class)
|
||||
DateTime comparisonStartTimestamp;
|
||||
|
||||
@Parameter(
|
||||
names = {"-o", "--outputBucket"},
|
||||
description =
|
||||
"The GCS bucket where data discrepancies are logged. "
|
||||
+ "It defaults to ${projectId}-beam")
|
||||
String outputBucket;
|
||||
|
||||
@Inject Clock clock;
|
||||
@Inject Dataflow dataflow;
|
||||
|
||||
@Inject
|
||||
@Config("defaultJobRegion")
|
||||
String jobRegion;
|
||||
|
||||
@Inject
|
||||
@Config("beamStagingBucketUrl")
|
||||
String stagingBucketUrl;
|
||||
|
||||
@Inject
|
||||
@Config("projectId")
|
||||
String projectId;
|
||||
|
||||
@Inject Sleeper sleeper;
|
||||
|
||||
AppEngineConnection connection;
|
||||
|
||||
@Override
|
||||
public void setConnection(AppEngineConnection connection) {
|
||||
this.connection = connection;
|
||||
}
|
||||
|
||||
String getDataflowJobStatus(String jobId) {
|
||||
try {
|
||||
return dataflow
|
||||
.projects()
|
||||
.locations()
|
||||
.jobs()
|
||||
.get(projectId, jobRegion, jobId)
|
||||
.execute()
|
||||
.getCurrentState();
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
void launchPipelineAndWaitUntilFinish(
|
||||
String pipelineName, DatabaseSnapshot snapshot, String latestCommitTimestamp) {
|
||||
Job pipelineJob =
|
||||
launchComparisonPipeline(pipelineName, snapshot.getSnapshotId(), latestCommitTimestamp)
|
||||
.getJob();
|
||||
String jobId = pipelineJob.getId();
|
||||
|
||||
System.out.printf("Launched comparison pipeline %s (%s).\n", pipelineJob.getName(), jobId);
|
||||
|
||||
while (DATAFLOW_JOB_RUNNING_STATES.contains(getDataflowJobStatus(jobId))) {
|
||||
sleeper.sleepInterruptibly(JOB_POLLING_INTERVAL);
|
||||
}
|
||||
System.out.printf(
|
||||
"Pipeline ended with %s state. Please check counters for results.\n",
|
||||
getDataflowJobStatus(jobId));
|
||||
}
|
||||
|
||||
String getOutputBucket() {
|
||||
return Optional.ofNullable(outputBucket).orElse(projectId + "-beam");
|
||||
}
|
||||
|
||||
String getContainerSpecGcsPath() {
|
||||
return String.format(
|
||||
"%s/%s_metadata.json", stagingBucketUrl.replace("live", release), PIPELINE_NAME);
|
||||
}
|
||||
|
||||
String getManualLaunchCommand(
|
||||
String jobName, String snapshotId, String latestCommitLogTimestamp) {
|
||||
String baseCommand =
|
||||
String.format(
|
||||
MANUAL_PIPELINE_LAUNCH_COMMAND_TEMPLATE,
|
||||
jobName,
|
||||
getContainerSpecGcsPath(),
|
||||
projectId,
|
||||
jobRegion,
|
||||
RegistryToolEnvironment.get().name(),
|
||||
snapshotId,
|
||||
latestCommitLogTimestamp,
|
||||
getOutputBucket());
|
||||
if (comparisonStartTimestamp == null) {
|
||||
return baseCommand;
|
||||
}
|
||||
return baseCommand + "--parameters comparisonStartTimestamp=" + comparisonStartTimestamp;
|
||||
}
|
||||
|
||||
LaunchFlexTemplateResponse launchComparisonPipeline(
|
||||
String jobName, String sqlSnapshotId, String latestCommitLogTimestamp) {
|
||||
try {
|
||||
// Hardcode machine type and initial workers to force a quick start.
|
||||
ImmutableMap.Builder<String, String> paramsBuilder =
|
||||
new ImmutableMap.Builder()
|
||||
.put("workerMachineType", "n2-standard-8")
|
||||
.put("numWorkers", "8")
|
||||
.put("sqlSnapshotId", sqlSnapshotId)
|
||||
.put("latestCommitLogTimestamp", latestCommitLogTimestamp)
|
||||
.put("registryEnvironment", RegistryToolEnvironment.get().name())
|
||||
.put("diffOutputGcsBucket", getOutputBucket());
|
||||
if (comparisonStartTimestamp != null) {
|
||||
paramsBuilder.put("comparisonStartTimestamp", comparisonStartTimestamp.toString());
|
||||
}
|
||||
LaunchFlexTemplateParameter parameter =
|
||||
new LaunchFlexTemplateParameter()
|
||||
.setJobName(createJobName(Ascii.toLowerCase(jobName).replace('_', '-'), clock))
|
||||
.setContainerSpecGcsPath(getContainerSpecGcsPath())
|
||||
.setParameters(paramsBuilder.build());
|
||||
return dataflow
|
||||
.projects()
|
||||
.locations()
|
||||
.flexTemplates()
|
||||
.launch(
|
||||
projectId, jobRegion, new LaunchFlexTemplateRequest().setLaunchParameter(parameter))
|
||||
.execute();
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A fake implementation of {@link RequestStatusChecker} for managing SQL-backed locks from
|
||||
* non-AppEngine platforms. This is only required until the Nomulus server is migrated off
|
||||
* AppEngine.
|
||||
*/
|
||||
static class FakeRequestStatusChecker implements RequestStatusChecker {
|
||||
|
||||
private final String logId =
|
||||
ValidateDatastoreCommand.class.getSimpleName() + "-" + UUID.randomUUID();
|
||||
|
||||
@Override
|
||||
public String getLogId() {
|
||||
return logId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isRunning(String requestLogId) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,105 +0,0 @@
|
||||
// Copyright 2022 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.tools;
|
||||
|
||||
import static google.registry.model.replay.ReplicateToDatastoreAction.REPLICATE_TO_DATASTORE_LOCK_LEASE_LENGTH;
|
||||
import static google.registry.model.replay.ReplicateToDatastoreAction.REPLICATE_TO_DATASTORE_LOCK_NAME;
|
||||
import static java.nio.charset.StandardCharsets.UTF_8;
|
||||
|
||||
import com.beust.jcommander.Parameters;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.net.MediaType;
|
||||
import google.registry.backup.SyncDatastoreToSqlSnapshotAction;
|
||||
import google.registry.beam.common.DatabaseSnapshot;
|
||||
import google.registry.model.common.DatabaseMigrationStateSchedule;
|
||||
import google.registry.model.common.DatabaseMigrationStateSchedule.MigrationState;
|
||||
import google.registry.model.common.DatabaseMigrationStateSchedule.ReplayDirection;
|
||||
import google.registry.model.server.Lock;
|
||||
import google.registry.request.Action.Service;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Validates asynchronously replicated data from the primary Cloud SQL database to Datastore.
|
||||
*
|
||||
* <p>This command suspends the replication process (by acquiring the replication lock), take a
|
||||
* snapshot of the Cloud SQL database, invokes a Nomulus server action to sync Datastore to this
|
||||
* snapshot (See {@link SyncDatastoreToSqlSnapshotAction} for details), and finally launches a BEAM
|
||||
* pipeline to compare Datastore with the given SQL snapshot.
|
||||
*
|
||||
* <p>This command does not lock up the SQL database. Normal processing can proceed.
|
||||
*/
|
||||
@Parameters(commandDescription = "Validates Datastore with the primary Cloud SQL database.")
|
||||
public class ValidateDatastoreCommand extends ValidateDatabaseMigrationCommand {
|
||||
|
||||
private static final Service NOMULUS_SERVICE = Service.BACKEND;
|
||||
|
||||
@Override
|
||||
public void run() throws Exception {
|
||||
MigrationState state = DatabaseMigrationStateSchedule.getValueAtTime(clock.nowUtc());
|
||||
if (!state.getReplayDirection().equals(ReplayDirection.SQL_TO_DATASTORE)) {
|
||||
throw new IllegalStateException("Cannot validate Datastore in migration step " + state);
|
||||
}
|
||||
Optional<Lock> lock =
|
||||
Lock.acquireSql(
|
||||
REPLICATE_TO_DATASTORE_LOCK_NAME,
|
||||
null,
|
||||
REPLICATE_TO_DATASTORE_LOCK_LEASE_LENGTH,
|
||||
new FakeRequestStatusChecker(),
|
||||
false);
|
||||
if (!lock.isPresent()) {
|
||||
throw new IllegalStateException("Cannot acquire the async propagation lock.");
|
||||
}
|
||||
|
||||
try {
|
||||
try (DatabaseSnapshot snapshot = DatabaseSnapshot.createSnapshot()) {
|
||||
System.out.printf("Obtained snapshot %s\n", snapshot.getSnapshotId());
|
||||
AppEngineConnection connectionToService = connection.withService(NOMULUS_SERVICE);
|
||||
String response =
|
||||
connectionToService.sendPostRequest(
|
||||
getNomulusEndpoint(snapshot.getSnapshotId()),
|
||||
ImmutableMap.<String, String>of(),
|
||||
MediaType.PLAIN_TEXT_UTF_8,
|
||||
"".getBytes(UTF_8));
|
||||
System.out.println(response);
|
||||
|
||||
lock.ifPresent(Lock::releaseSql);
|
||||
lock = Optional.empty();
|
||||
|
||||
// See SyncDatastoreToSqlSnapshotAction for response format.
|
||||
String latestCommitTimestamp =
|
||||
response.substring(response.lastIndexOf('(') + 1, response.lastIndexOf(')'));
|
||||
|
||||
if (manualLaunchPipeline) {
|
||||
System.out.printf(
|
||||
"To launch the pipeline manually, use the following command:\n%s\n",
|
||||
getManualLaunchCommand(
|
||||
"validate-datastore", snapshot.getSnapshotId(), latestCommitTimestamp));
|
||||
|
||||
System.out.print("\nEnter any key to continue when the pipeline ends:");
|
||||
System.in.read();
|
||||
} else {
|
||||
launchPipelineAndWaitUntilFinish("validate-datastore", snapshot, latestCommitTimestamp);
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
lock.ifPresent(Lock::releaseSql);
|
||||
}
|
||||
}
|
||||
|
||||
private static String getNomulusEndpoint(String sqlSnapshotId) {
|
||||
return String.format(
|
||||
"%s?sqlSnapshotId=%s", SyncDatastoreToSqlSnapshotAction.PATH, sqlSnapshotId);
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user