From 26fd8853ee7ea8ac4c026b1489dd3337594ededb Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Fri, 15 Oct 2021 18:54:30 +0000 Subject: [PATCH 01/15] chore: release 2.6.1-SNAPSHOT (#1524) :robot: I have created a release \*beep\* \*boop\* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). --- benchmark/build.gradle | 2 +- build.gradle | 2 +- dependencies.properties | 8 ++++---- gax-bom/build.gradle | 2 +- gax-bom/pom.xml | 14 +++++++------- gax-grpc/build.gradle | 2 +- gax-httpjson/build.gradle | 2 +- gax/build.gradle | 2 +- samples/pom.xml | 4 ++-- versions.txt | 10 +++++----- 10 files changed, 24 insertions(+), 24 deletions(-) diff --git a/benchmark/build.gradle b/benchmark/build.gradle index d1faa36fe..4f779a840 100644 --- a/benchmark/build.gradle +++ b/benchmark/build.gradle @@ -2,7 +2,7 @@ plugins { id 'me.champeau.gradle.jmh' version '0.5.3' } -project.version = "0.76.0" // {x-version-update:benchmark:current} +project.version = "0.76.1-SNAPSHOT" // {x-version-update:benchmark:current} dependencies { implementation project(':gax') diff --git a/build.gradle b/build.gradle index 9162df0df..567dcb4d9 100644 --- a/build.gradle +++ b/build.gradle @@ -11,7 +11,7 @@ plugins { } // TODO: Populate this from dependencies.properties version property (for proper Gradle-Bazel sync) -project.version = "2.6.0" // {x-version-update:gax:current} +project.version = "2.6.1-SNAPSHOT" // {x-version-update:gax:current} ext { // Project names not used for release diff --git a/dependencies.properties b/dependencies.properties index b6a0e73f8..5ccf3ff47 100644 --- a/dependencies.properties +++ b/dependencies.properties @@ -8,16 +8,16 @@ # Versions of oneself # {x-version-update-start:gax:current} -version.gax=2.6.0 +version.gax=2.6.1-SNAPSHOT # {x-version-update-end} # {x-version-update-start:gax:current} -version.gax_grpc=2.6.0 +version.gax_grpc=2.6.1-SNAPSHOT # {x-version-update-end} # {x-version-update-start:gax:current} -version.gax_bom=2.6.0 +version.gax_bom=2.6.1-SNAPSHOT # {x-version-update-end} # {x-version-update-start:gax-httpjson:current} -version.gax_httpjson=0.91.0 +version.gax_httpjson=0.91.1-SNAPSHOT # {x-version-update-end} # Versions for dependencies which actual artifacts differ between Bazel and Gradle. diff --git a/gax-bom/build.gradle b/gax-bom/build.gradle index e9718186c..37371cbf1 100644 --- a/gax-bom/build.gradle +++ b/gax-bom/build.gradle @@ -1,6 +1,6 @@ archivesBaseName = 'gax-bom' -project.version = "2.6.0" // {x-version-update:gax-bom:current} +project.version = "2.6.1-SNAPSHOT" // {x-version-update:gax-bom:current} ext { mavenJavaDir = "$buildDir/publications/mavenJava" diff --git a/gax-bom/pom.xml b/gax-bom/pom.xml index 07553f536..e0bbee3d2 100644 --- a/gax-bom/pom.xml +++ b/gax-bom/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.google.api gax-bom - 2.6.0 + 2.6.1-SNAPSHOT pom GAX (Google Api eXtensions) for Java Google Api eXtensions for Java @@ -33,34 +33,34 @@ com.google.api gax - 2.6.0 + 2.6.1-SNAPSHOT com.google.api gax - 2.6.0 + 2.6.1-SNAPSHOT testlib com.google.api gax-grpc - 2.6.0 + 2.6.1-SNAPSHOT com.google.api gax-grpc - 2.6.0 + 2.6.1-SNAPSHOT testlib com.google.api gax-httpjson - 0.91.0 + 0.91.1-SNAPSHOT com.google.api gax-httpjson - 0.91.0 + 0.91.1-SNAPSHOT testlib diff --git a/gax-grpc/build.gradle b/gax-grpc/build.gradle index cda65e20f..7dead6cb9 100644 --- a/gax-grpc/build.gradle +++ b/gax-grpc/build.gradle @@ -1,7 +1,7 @@ archivesBaseName = "gax-grpc" // TODO: Populate this from dependencies.properties version property (for proper Gradle-Bazel sync) -project.version = "2.6.0" // {x-version-update:gax-grpc:current} +project.version = "2.6.1-SNAPSHOT" // {x-version-update:gax-grpc:current} dependencies { implementation( project(':gax'), diff --git a/gax-httpjson/build.gradle b/gax-httpjson/build.gradle index fae4a95b1..c6996af07 100644 --- a/gax-httpjson/build.gradle +++ b/gax-httpjson/build.gradle @@ -1,7 +1,7 @@ archivesBaseName = "gax-httpjson" // TODO: Populate this from dependencies.properties version property (for proper Gradle-Bazel sync) -project.version = "0.91.0" // {x-version-update:gax-httpjson:current} +project.version = "0.91.1-SNAPSHOT" // {x-version-update:gax-httpjson:current} dependencies { implementation( project(':gax'), diff --git a/gax/build.gradle b/gax/build.gradle index 14b708573..999b55442 100644 --- a/gax/build.gradle +++ b/gax/build.gradle @@ -1,7 +1,7 @@ archivesBaseName = "gax" // TODO: Populate this from dependencies.properties version property (for proper Gradle-Bazel sync) -project.version = "2.6.0" // {x-version-update:gax:current} +project.version = "2.6.1-SNAPSHOT" // {x-version-update:gax:current} dependencies { implementation (libraries['maven.com_google_guava_guava'], diff --git a/samples/pom.xml b/samples/pom.xml index 5a20b4fb6..4f7519a11 100644 --- a/samples/pom.xml +++ b/samples/pom.xml @@ -14,13 +14,13 @@ com.google.api gax - 2.6.0 + 2.6.1-SNAPSHOT com.google.api gax-grpc - 2.6.0 + 2.6.1-SNAPSHOT com.google.auto.value diff --git a/versions.txt b/versions.txt index bec7d7db0..bea7bc4b7 100644 --- a/versions.txt +++ b/versions.txt @@ -1,8 +1,8 @@ # Format: # module:released-version:current-version -gax:2.6.0:2.6.0 -gax-bom:2.6.0:2.6.0 -gax-grpc:2.6.0:2.6.0 -gax-httpjson:0.91.0:0.91.0 -benchmark:0.76.0:0.76.0 +gax:2.6.0:2.6.1-SNAPSHOT +gax-bom:2.6.0:2.6.1-SNAPSHOT +gax-grpc:2.6.0:2.6.1-SNAPSHOT +gax-httpjson:0.91.0:0.91.1-SNAPSHOT +benchmark:0.76.0:0.76.1-SNAPSHOT From ee9e6f4b528d77c91861af4b9fdb6dab1c686202 Mon Sep 17 00:00:00 2001 From: Chanseok Oh Date: Fri, 15 Oct 2021 16:11:20 -0400 Subject: [PATCH 02/15] Remove Java 7 builds (#1528) --- .kokoro/continuous/java7.cfg | 7 ------- .kokoro/presubmit/java7.cfg | 7 ------- 2 files changed, 14 deletions(-) delete mode 100644 .kokoro/continuous/java7.cfg delete mode 100644 .kokoro/presubmit/java7.cfg diff --git a/.kokoro/continuous/java7.cfg b/.kokoro/continuous/java7.cfg deleted file mode 100644 index cb24f44ee..000000000 --- a/.kokoro/continuous/java7.cfg +++ /dev/null @@ -1,7 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -# Configure the docker image for kokoro-trampoline. -env_vars: { - key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/java7" -} diff --git a/.kokoro/presubmit/java7.cfg b/.kokoro/presubmit/java7.cfg deleted file mode 100644 index cb24f44ee..000000000 --- a/.kokoro/presubmit/java7.cfg +++ /dev/null @@ -1,7 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -# Configure the docker image for kokoro-trampoline. -env_vars: { - key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/java7" -} From d76744d3cdf2111f8c8eeb11a71221c800022f96 Mon Sep 17 00:00:00 2001 From: Chanseok Oh Date: Fri, 15 Oct 2021 16:19:57 -0400 Subject: [PATCH 03/15] Fix Java 11 Javadoc generation (#1529) Co-authored-by: Neenu Shaji --- build.gradle | 3 +++ 1 file changed, 3 insertions(+) diff --git a/build.gradle b/build.gradle index 567dcb4d9..a39eadc89 100644 --- a/build.gradle +++ b/build.gradle @@ -392,6 +392,9 @@ task javadocCombinedV3(type: Javadoc) { options.addStringOption("doclet", "com.microsoft.doclet.DocFxDoclet") options.addStringOption("projectname", "gax") options.docletpath = [file(System.getenv('KOKORO_GFILE_DIR') + "/java-docfx-doclet-1.3.0.jar")] + // Newer Gradle 6 passes -notimestamp by default, which the doclet above doesn't understand: + // https://github.com/gradle/gradle/issues/11898 + options.noTimestamp false } clean { From a96953e2c889ad9195b420ce5ae49b20258fb6ea Mon Sep 17 00:00:00 2001 From: Chanseok Oh Date: Fri, 15 Oct 2021 16:38:12 -0400 Subject: [PATCH 04/15] feat: next release from main branch is 2.7.0 (#1530) enable releases --- .github/release-please.yml | 6 +++++- .github/sync-repo-settings.yaml | 10 ++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/.github/release-please.yml b/.github/release-please.yml index 801cc7dbe..c01275665 100644 --- a/.github/release-please.yml +++ b/.github/release-please.yml @@ -11,4 +11,8 @@ branches: - bumpMinorPreMajor: true handleGHRelease: true releaseType: java-yoshi - branch: java7 \ No newline at end of file + branch: java7 + - releaseType: java-backport + bumpMinorPreMajor: true + handleGHRelease: true + branch: 2.6.x diff --git a/.github/sync-repo-settings.yaml b/.github/sync-repo-settings.yaml index 75b33019e..f77ddd5c2 100644 --- a/.github/sync-repo-settings.yaml +++ b/.github/sync-repo-settings.yaml @@ -51,6 +51,16 @@ branchProtectionRules: - units (8) - units (11) - cla/google + - pattern: 2.6.x + isAdminEnforced: true + requiredApprovingReviewCount: 1 + requiresCodeOwnerReviews: true + requiresStrictStatusChecks: true + requiredStatusCheckContexts: + - bazel + - units (8) + - units (11) + - cla/google permissionRules: - team: yoshi-admins permission: admin From 725414f4ccb1e5ac4625790ea990c6c8dfa4fdff Mon Sep 17 00:00:00 2001 From: Tomo Suzuki Date: Mon, 18 Oct 2021 11:57:39 -0400 Subject: [PATCH 05/15] fix: declare depenencies of API surfaces as api (#1535) * deps: declaring the latest auth library version * fix: declare API surface as api configuration Fix #1534 * fix: declare API surface's dependencies as 'api' Adding more artifacts to be declared as 'api' because they appear in public API surface. See the comment of the following issue for the analysis: https://github.com/googleapis/gax-java/issues/1534 * refactor: move java-library declaration to top-level build.gradle --- build.gradle | 3 ++- dependencies.properties | 4 ++-- gax-grpc/build.gradle | 22 ++++++++++++---------- gax-httpjson/build.gradle | 21 +++++++++++---------- gax/build.gradle | 14 ++++++++------ 5 files changed, 35 insertions(+), 29 deletions(-) diff --git a/build.gradle b/build.gradle index a39eadc89..73ba670af 100644 --- a/build.gradle +++ b/build.gradle @@ -37,7 +37,7 @@ if (project.hasProperty('ossrhUsername') && project.hasProperty('ossrhPassword') } subprojects { - apply plugin: 'java' + apply plugin: 'java-library' apply plugin: 'eclipse' apply plugin: 'idea' apply plugin: 'jacoco' @@ -109,6 +109,7 @@ subprojects { 'maven.io_grpc_grpc_core': "io.grpc:grpc-core:${libraries['version.io_grpc']}", 'maven.io_grpc_grpc_context': "io.grpc:grpc-context:${libraries['version.io_grpc']}", 'maven.io_grpc_grpc_stub': "io.grpc:grpc-stub:${libraries['version.io_grpc']}", + 'maven.io_grpc_grpc_api': "io.grpc:grpc-api:${libraries['version.io_grpc']}", 'maven.io_grpc_grpc_auth': "io.grpc:grpc-auth:${libraries['version.io_grpc']}", 'maven.io_grpc_grpc_protobuf': "io.grpc:grpc-protobuf:${libraries['version.io_grpc']}", 'maven.io_grpc_grpc_netty_shaded': "io.grpc:grpc-netty-shaded:${libraries['version.io_grpc']}", diff --git a/dependencies.properties b/dependencies.properties index 5ccf3ff47..d649e211e 100644 --- a/dependencies.properties +++ b/dependencies.properties @@ -34,8 +34,8 @@ version.io_grpc=1.41.0 # 2) Replace all characters which are neither alphabetic nor digits with the underscore ('_') character maven.com_google_api_grpc_proto_google_common_protos=com.google.api.grpc:proto-google-common-protos:2.4.1 maven.com_google_api_grpc_grpc_google_common_protos=com.google.api.grpc:grpc-google-common-protos:2.4.1 -maven.com_google_auth_google_auth_library_oauth2_http=com.google.auth:google-auth-library-oauth2-http:0.27.0 -maven.com_google_auth_google_auth_library_credentials=com.google.auth:google-auth-library-credentials:1.0.0 +maven.com_google_auth_google_auth_library_oauth2_http=com.google.auth:google-auth-library-oauth2-http:1.2.1 +maven.com_google_auth_google_auth_library_credentials=com.google.auth:google-auth-library-credentials:1.2.1 maven.io_opencensus_opencensus_api=io.opencensus:opencensus-api:0.28.0 maven.io_opencensus_opencensus_contrib_grpc_metrics=io.opencensus:opencensus-contrib-grpc-metrics:0.28.0 maven.io_opencensus_opencensus_contrib_http_util=io.opencensus:opencensus-contrib-http-util:0.28.0 diff --git a/gax-grpc/build.gradle b/gax-grpc/build.gradle index 7dead6cb9..d73e6568a 100644 --- a/gax-grpc/build.gradle +++ b/gax-grpc/build.gradle @@ -4,19 +4,21 @@ archivesBaseName = "gax-grpc" project.version = "2.6.1-SNAPSHOT" // {x-version-update:gax-grpc:current} dependencies { - implementation( project(':gax'), - libraries['maven.io_grpc_grpc_stub'], - libraries['maven.io_grpc_grpc_auth'], - libraries['maven.io_grpc_grpc_protobuf'], + api(project(':gax'), + libraries['maven.com_google_api_api_common'], + libraries['maven.com_google_api_grpc_proto_google_common_protos'], + libraries['maven.com_google_auth_google_auth_library_credentials'], libraries['maven.com_google_guava_guava'], + libraries['maven.io_grpc_grpc_api'], + libraries['maven.org_threeten_threetenbp']) + + implementation(libraries['maven.com_google_auth_google_auth_library_oauth2_http'], libraries['maven.com_google_code_findbugs_jsr305'], - libraries['maven.org_threeten_threetenbp'], - libraries['maven.com_google_auth_google_auth_library_oauth2_http'], - libraries['maven.com_google_auth_google_auth_library_credentials'], - libraries['maven.com_google_api_grpc_proto_google_common_protos'], - libraries['maven.com_google_api_api_common'], + libraries['maven.io_grpc_grpc_alts'], + libraries['maven.io_grpc_grpc_auth'], libraries['maven.io_grpc_grpc_netty_shaded'], - libraries['maven.io_grpc_grpc_alts']) + libraries['maven.io_grpc_grpc_protobuf'], + libraries['maven.io_grpc_grpc_stub']) compileOnly libraries['maven.com_google_auto_value_auto_value'] diff --git a/gax-httpjson/build.gradle b/gax-httpjson/build.gradle index c6996af07..77553d3cf 100644 --- a/gax-httpjson/build.gradle +++ b/gax-httpjson/build.gradle @@ -4,23 +4,24 @@ archivesBaseName = "gax-httpjson" project.version = "0.91.1-SNAPSHOT" // {x-version-update:gax-httpjson:current} dependencies { - implementation( project(':gax'), - libraries['maven.com_google_protobuf'], - libraries['maven.com_google_protobuf_java_util'], + api(project(':gax'), + libraries['maven.com_google_api_api_common'], + libraries['maven.com_google_api_grpc_proto_google_common_protos'], + libraries['maven.com_google_auth_google_auth_library_credentials'], libraries['maven.com_google_code_gson_gson'], libraries['maven.com_google_guava_guava'], - libraries['maven.com_google_code_findbugs_jsr305'], - libraries['maven.org_threeten_threetenbp'], libraries['maven.com_google_http_client_google_http_client'], + libraries['maven.com_google_protobuf'], + libraries['maven.org_threeten_threetenbp']) + + implementation(libraries['maven.com_google_auth_google_auth_library_oauth2_http'], + libraries['maven.com_google_code_findbugs_jsr305'], libraries['maven.com_google_http_client_google_http_client_gson'], - libraries['maven.com_google_auth_google_auth_library_oauth2_http'], - libraries['maven.com_google_auth_google_auth_library_credentials'], - libraries['maven.com_google_api_grpc_proto_google_common_protos'], - libraries['maven.com_google_api_api_common']) + libraries['maven.com_google_protobuf_java_util']) compileOnly libraries['maven.com_google_auto_value_auto_value'] - testImplementation( project(':gax').sourceSets.test.output, + testImplementation(project(':gax').sourceSets.test.output, libraries['maven.junit_junit'], libraries['maven.org_mockito_mockito_core'], libraries['maven.com_google_truth_truth']) diff --git a/gax/build.gradle b/gax/build.gradle index 999b55442..2c0b779ca 100644 --- a/gax/build.gradle +++ b/gax/build.gradle @@ -4,19 +4,21 @@ archivesBaseName = "gax" project.version = "2.6.1-SNAPSHOT" // {x-version-update:gax:current} dependencies { - implementation (libraries['maven.com_google_guava_guava'], + api(libraries['maven.com_google_api_api_common'], + libraries['maven.com_google_auth_google_auth_library_credentials'], + libraries['maven.org_threeten_threetenbp']) + + implementation(libraries['maven.com_google_auth_google_auth_library_oauth2_http'], libraries['maven.com_google_code_findbugs_jsr305'], - libraries['maven.org_threeten_threetenbp'], - libraries['maven.com_google_auth_google_auth_library_oauth2_http'], - libraries['maven.com_google_api_api_common'], + libraries['maven.com_google_guava_guava'], libraries['maven.io_opencensus_opencensus_api']) compileOnly libraries['maven.com_google_auto_value_auto_value'] - testImplementation( libraries['maven.junit_junit'], + testImplementation(libraries['maven.junit_junit'], libraries['maven.org_mockito_mockito_core'], libraries['maven.com_google_truth_truth'], - libraries['maven.com_google_auto_value_auto_value'] ) + libraries['maven.com_google_auto_value_auto_value']) annotationProcessor libraries['maven.com_google_auto_value_auto_value'] testAnnotationProcessor libraries['maven.com_google_auto_value_auto_value'] From 9f96d141aae8393d9aa31d96c0981d0ff6e5424b Mon Sep 17 00:00:00 2001 From: Chanseok Oh Date: Wed, 20 Oct 2021 11:20:18 -0400 Subject: [PATCH 06/15] build: refactor Gradle build (#1539) * build: refactor Gradle build * build: simplify * Fix local install --- .kokoro/build.sh | 2 +- CONTRIBUTING.md | 2 +- build.gradle | 176 +++++++++++++++++++++---------------------- gax-bom/build.gradle | 98 ++++++++++-------------- 4 files changed, 129 insertions(+), 149 deletions(-) diff --git a/.kokoro/build.sh b/.kokoro/build.sh index f9c9b3f63..b386de565 100755 --- a/.kokoro/build.sh +++ b/.kokoro/build.sh @@ -23,4 +23,4 @@ cd ${scriptDir}/.. java -version echo $JOB_TYPE -./gradlew -Pskip.signing build publishToMavenLocal +./gradlew build publishToMavenLocal diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2cbb4303c..2ab6d62b1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -30,7 +30,7 @@ To build GAX: To install GAX into the local maven repository: ```sh -./gradlew publishToMavenLocal -Pskip.signing +./gradlew publishToMavenLocal ``` ### The small print diff --git a/build.gradle b/build.gradle index 73ba670af..3d4146170 100644 --- a/build.gradle +++ b/build.gradle @@ -13,44 +13,42 @@ plugins { // TODO: Populate this from dependencies.properties version property (for proper Gradle-Bazel sync) project.version = "2.6.1-SNAPSHOT" // {x-version-update:gax:current} -ext { - // Project names not used for release - nonReleaseProjects = ['benchmark'] - // Project names not using the default publication configuration - noDefaultPublications = ['benchmark', 'gax-bom'] - libraryVendor = 'Google' +// Project names not used for release +def nonReleaseProjects = ['benchmark'] +// Project names not using the default publication configuration +def noDefaultPublications = ['benchmark', 'gax-bom'] +def nonJavaProjects = ['gax-bom'] + +ext.libraryVendor = 'Google' + +allprojects { + group = 'com.google.api' } -if (project.hasProperty('ossrhUsername') && project.hasProperty('ossrhPassword') && - !nonReleaseProjects.contains(project.name)) { - nexusPublishing { - packageGroup = 'com.google.api' - repositories { - sonatype { //or custom repository name - nexusUrl.set(uri('https://google.oss.sonatype.org/service/local/')) - snapshotRepositoryUrl.set(uri('https://google.oss.sonatype.org/content/repositories/snapshots/')) - username = ossrhUsername - password = ossrhPassword - } +nexusPublishing { + packageGroup = 'com.google.api' + repositories { + sonatype { + nexusUrl = uri('https://google.oss.sonatype.org/service/local/') + snapshotRepositoryUrl = uri('https://google.oss.sonatype.org/content/repositories/snapshots/') + username = findProperty('ossrhUsername') + password = findProperty('ossrhPassword') } } } -subprojects { +def javaProjects = subprojects.findAll { !nonJavaProjects.contains(it.name) } +configure(javaProjects) { apply plugin: 'java-library' apply plugin: 'eclipse' apply plugin: 'idea' apply plugin: 'jacoco' - apply plugin: 'maven-publish' - apply plugin: 'signing' apply plugin: 'com.dorongold.task-tree' apply plugin: 'com.github.johnrengelman.shadow' apply plugin: 'com.github.sherter.google-java-format' apply plugin: 'net.ltgt.apt' - group = 'com.google.api' - sourceCompatibility = 1.8 targetCompatibility = 1.8 @@ -281,91 +279,93 @@ subprojects { file('.factorypath') } } +} - // Publishing - // ---------- +def normalReleasableProjects = subprojects.findAll { + !nonReleaseProjects.contains(it.name) && !noDefaultPublications.contains(it.name) +} +configure(normalReleasableProjects) { + apply plugin: 'maven-publish' + apply plugin: 'signing' afterEvaluate { - if (!noDefaultPublications.contains(project.name)) { - publishing { - publications { - mavenJava(MavenPublication) { - version = project.version - - from components.java - - artifact javadocJar - artifact sourcesJar - artifact testlibJar - - pom { - name = 'GAX (Google Api eXtensions) for Java' - packaging = 'jar' - artifactId = project.name - description = 'Google Api eXtensions for Java' - url = 'https://github.com/googleapis/gax-java' + publishing { + publications { + mavenJava(MavenPublication) { + version = project.version - scm { - url = 'https://github.com/googleapis/gax-java' - connection = 'scm:git:https://github.com/googleapis/gax-java.git' - } + from components.java + + artifact javadocJar + artifact sourcesJar + artifact testlibJar + + pom { + name = 'GAX (Google Api eXtensions) for Java' + packaging = 'jar' + artifactId = project.name + description = 'Google Api eXtensions for Java' + url = 'https://github.com/googleapis/gax-java' + + scm { + url = 'https://github.com/googleapis/gax-java' + connection = 'scm:git:https://github.com/googleapis/gax-java.git' + } - licenses { - license { - name = 'BSD' - url = 'https://github.com/googleapis/gax-java/blob/master/LICENSE' - } + licenses { + license { + name = 'BSD' + url = 'https://github.com/googleapis/gax-java/blob/master/LICENSE' } + } - developers { - developer { - id = 'GoogleAPIs' - name = 'GoogleAPIs' - email = 'googleapis@googlegroups.com' - url = 'https://github.com/googleapis/gax-java' - organization = 'Google LLC' - organizationUrl = 'https://www.google.com' - } + developers { + developer { + id = 'GoogleAPIs' + name = 'GoogleAPIs' + email = 'googleapis@googlegroups.com' + url = 'https://github.com/googleapis/gax-java' + organization = 'Google LLC' + organizationUrl = 'https://www.google.com' } } } } - repositories { - maven { - url 'https://google.oss.sonatype.org/service/local/staging/deploy/maven2/' - credentials { - username = project.findProperty('ossrhUsername') - password = project.findProperty('ossrhPassword') - } + } + repositories { + maven { + url 'https://google.oss.sonatype.org/service/local/staging/deploy/maven2/' + credentials { + username = findProperty('ossrhUsername') + password = findProperty('ossrhPassword') } } } + } - task checkJavaLinkage(type: JavaExec) { - // Example invocation: - // ./gradlew gax-httpjson:checkJavaLinkage - dependsOn project.getTasksByName('publishMavenJavaPublicationToMavenLocal', true) - classpath = configurations.linkageChecker - main = 'com.google.cloud.tools.opensource.classpath.LinkageCheckerMain' - - def arguments = ['-a', "com.google.api:${project.name}:${project.version}"] - if (project.name == 'gax-grpc') { - // The exclusion file can be regenerated by '-o' option. See its Wiki for details: - // https://github.com/GoogleCloudPlatform/cloud-opensource-java/wiki/LinkageCheckerMain#exclusion-files - arguments += ['--exclusion-file', 'linkage-checker-exclusion.xml'] - } - args arguments + task checkJavaLinkage(type: JavaExec) { + // Example invocation: + // ./gradlew gax-httpjson:checkJavaLinkage + dependsOn project.getTasksByName('publishMavenJavaPublicationToMavenLocal', true) + classpath = configurations.linkageChecker + main = 'com.google.cloud.tools.opensource.classpath.LinkageCheckerMain' + + def arguments = ['-a', "com.google.api:${project.name}:${project.version}"] + if (project.name == 'gax-grpc') { + // The exclusion file can be regenerated by '-o' option. See its Wiki for details: + // https://github.com/GoogleCloudPlatform/cloud-opensource-java/wiki/LinkageCheckerMain#exclusion-files + arguments += ['--exclusion-file', 'linkage-checker-exclusion.xml'] } + args arguments } + } - signing { - if (!project.hasProperty('skip.signing') && !noDefaultPublications.contains(project.name)) { - if (project.hasProperty('signing.gnupg.executable')) { - useGpgCmd() - } - sign publishing.publications.mavenJava - } + signing { + required { gradle.taskGraph.hasTask ":${name}:publishToSonatype" } + if (project.hasProperty('signing.gnupg.executable')) { + useGpgCmd() } + sign publishing.publications } } diff --git a/gax-bom/build.gradle b/gax-bom/build.gradle index 37371cbf1..1f50443ed 100644 --- a/gax-bom/build.gradle +++ b/gax-bom/build.gradle @@ -1,12 +1,15 @@ +plugins { + id 'maven-publish' + id 'signing' +} + archivesBaseName = 'gax-bom' project.version = "2.6.1-SNAPSHOT" // {x-version-update:gax-bom:current} -ext { - mavenJavaDir = "$buildDir/publications/mavenJava" - mavenJavaBomOutputFile = file(mavenJavaDir + "/pom-default.xml") - mavenJavaBomAscOutputFile = file(mavenJavaDir + "/pom-default.xml.asc") -} +def mavenJavaDir = "$buildDir/publications/mavenJava" +def mavenJavaBomOutputFile = file(mavenJavaDir + '/pom-default.xml') +def mavenJavaBomAscOutputFile = file(mavenJavaDir + '/pom-default.xml.asc') // Copy our pom.xml to the location where a generated POM would go task copyPom() { @@ -20,8 +23,6 @@ task copyPom() { } } -assemble.dependsOn copyPom - // We want to use our own pom.xml instead of the generated one, so we disable // the pom.xml generation and have the publish tasks depend on `copyPom` instead. tasks.whenTaskAdded { task -> @@ -36,66 +37,45 @@ tasks.whenTaskAdded { task -> } } -jar.enabled = false - -// Remove the default jar archive which is added by the 'java' plugin. -// We could avoid this by not applying the 'java' plugin to all submodules of -// gax, but that would create a little bit of a mess, so we hack around it here. -configurations.archives.artifacts.with { archives -> - def artifacts = [] - archives.each { - if (it.file =~ 'jar') { - // We can't just call `archives.remove(it)` here because it triggers - // a `ConcurrentModificationException`, so we add matching artifacts - // to another list, then remove those elements outside of this iteration. - artifacts.add(it) +// We can't use the `publishing` section from the main build.gradle because +// we don't want all the Java artifacts, and we want to use our own pom.xml +// instead of the generated one. +publishing { + publications { + mavenJava(MavenPublication) { + version = project.version + artifact mavenJavaBomOutputFile } } - artifacts.each { - archives.remove(it) + repositories { + maven { + url 'https://google.oss.sonatype.org/service/local/staging/deploy/maven2/' + credentials { + username = findProperty('ossrhUsername') + password = findProperty('ossrhPassword') + } + } } } -artifacts { - archives(mavenJavaBomOutputFile) { - builtBy copyPom +signing { + required { gradle.taskGraph.hasTask ":${name}:publishToSonatype" } + if (project.hasProperty('signing.gnupg.executable')) { + useGpgCmd() } + sign publishing.publications } -afterEvaluate { - // We can't use the `publishing` section from the main build.gradle because - // we don't want all the Java artifacts, and we want to use our own pom.xml - // instead of the generated one. - publishing { - publications { - mavenJava(MavenPublication) { - version = project.version - artifact mavenJavaBomOutputFile - } - } - repositories { - maven { - url 'https://google.oss.sonatype.org/service/local/staging/deploy/maven2/' - credentials { - username = project.findProperty('ossrhUsername') - password = project.findProperty('ossrhPassword') - } - } - } - } - - signing { - if (!project.hasProperty('skip.signing')) { - if (project.hasProperty('signing.gnupg.executable')) { - useGpgCmd() - } - sign publishing.publications.mavenJava - - publishing.publications.mavenJava(MavenPublication) { - artifact(mavenJavaBomAscOutputFile) { - extension 'pom.asc' - } - } +// Unlike other regular subprojects, pom.asc (signature file) generated by +// signing is not automatically picked up. It may be because gax-bom uses a +// pre-written pom.xml instead of using an auto-generated one. +// https://discuss.gradle.org/t/how-to-publish-artifacts-signatures-asc-files-using-maven-publish-plugin/7422 +task addPomAscFileToPublication { + onlyIf { mavenJavaBomAscOutputFile.exists() } + doLast { + publishing.publications.mavenJava(MavenPublication) { + artifact(mavenJavaBomAscOutputFile) { extension 'pom.asc' } } } } +signMavenJavaPublication.finalizedBy addPomAscFileToPublication From 9ab6bbf68730f496afc8051c15e188e9077b81ea Mon Sep 17 00:00:00 2001 From: Chanseok Oh Date: Wed, 20 Oct 2021 12:02:37 -0400 Subject: [PATCH 07/15] build: remove obsolete plugin and migrate Eclipse setup (#1545) * build: remove obsolete plugin and migrate * clean up --- .gitignore | 2 +- build.gradle | 169 ++++++------------ gax-grpc/build.gradle | 2 +- .../InstantiatingGrpcChannelProviderTest.java | 4 + gax-httpjson/build.gradle | 2 +- 5 files changed, 59 insertions(+), 120 deletions(-) diff --git a/.gitignore b/.gitignore index b632969b5..e41705477 100644 --- a/.gitignore +++ b/.gitignore @@ -7,7 +7,7 @@ tmp_docs bazel-* # Eclipse -.apt_generated +.apt_generated* .classpath .factorypath .project diff --git a/build.gradle b/build.gradle index 3d4146170..ad1f88534 100644 --- a/build.gradle +++ b/build.gradle @@ -4,25 +4,44 @@ plugins { id 'java' id 'io.github.gradle-nexus.publish-plugin' version '1.1.0' + id 'com.diffplug.eclipse.apt' version '3.33.1' apply false id 'com.dorongold.task-tree' version '2.1.0' apply false id 'com.github.johnrengelman.shadow' version '6.1.0' apply false id 'com.github.sherter.google-java-format' version '0.8' apply false - id 'net.ltgt.apt' version '0.21' apply false } // TODO: Populate this from dependencies.properties version property (for proper Gradle-Bazel sync) project.version = "2.6.1-SNAPSHOT" // {x-version-update:gax:current} +allprojects { + group = 'com.google.api' +} + // Project names not used for release def nonReleaseProjects = ['benchmark'] // Project names not using the default publication configuration def noDefaultPublications = ['benchmark', 'gax-bom'] def nonJavaProjects = ['gax-bom'] -ext.libraryVendor = 'Google' - -allprojects { - group = 'com.google.api' +ext { + libraryVendor = 'Google' + + // Load Dependencies shared between Bazel and Gradle build scripts + libraries = new Properties() + file('dependencies.properties').withReader { libraries.load(it) } + // Gradle-specific build script dependencies + libraries.putAll( + 'maven.io_grpc_grpc_bom': "io.grpc:grpc-bom:${libraries['version.io_grpc']}", + 'maven.io_grpc_grpc_core': "io.grpc:grpc-core:${libraries['version.io_grpc']}", + 'maven.io_grpc_grpc_context': "io.grpc:grpc-context:${libraries['version.io_grpc']}", + 'maven.io_grpc_grpc_stub': "io.grpc:grpc-stub:${libraries['version.io_grpc']}", + 'maven.io_grpc_grpc_api': "io.grpc:grpc-api:${libraries['version.io_grpc']}", + 'maven.io_grpc_grpc_auth': "io.grpc:grpc-auth:${libraries['version.io_grpc']}", + 'maven.io_grpc_grpc_protobuf': "io.grpc:grpc-protobuf:${libraries['version.io_grpc']}", + 'maven.io_grpc_grpc_netty_shaded': "io.grpc:grpc-netty-shaded:${libraries['version.io_grpc']}", + 'maven.io_grpc_grpc_alts': "io.grpc:grpc-alts:${libraries['version.io_grpc']}", + 'maven.com_google_protobuf': "com.google.protobuf:protobuf-java:${libraries['version.com_google_protobuf']}", + 'maven.com_google_protobuf_java_util': "com.google.protobuf:protobuf-java-util:${libraries['version.com_google_protobuf']}") } nexusPublishing { @@ -44,10 +63,10 @@ configure(javaProjects) { apply plugin: 'idea' apply plugin: 'jacoco' + apply plugin: 'com.diffplug.eclipse.apt' apply plugin: 'com.dorongold.task-tree' apply plugin: 'com.github.johnrengelman.shadow' apply plugin: 'com.github.sherter.google-java-format' - apply plugin: 'net.ltgt.apt' sourceCompatibility = 1.8 targetCompatibility = 1.8 @@ -55,68 +74,40 @@ configure(javaProjects) { // Formatting tasks // ================ googleJavaFormat { - exclude '.apt_generated/**' + exclude '.apt_generated*/**' exclude 'bin/**' exclude 'build/**' exclude 'bazel*/**' } - test.dependsOn verifyGoogleJavaFormat task verifyLicense { doLast { - def licenseText = new File(rootProject.rootDir, 'license-header-javadoc.txt').text + def licenseText = new File('license-header-javadoc.txt').text def srcFiles = [] sourceSets .collectMany{it.allJava.getSrcDirs()} .grep{it.exists()} .each{it.eachFileRecurse(FileType.FILES, {srcFiles << new Tuple(it, it.text)})} srcFiles = srcFiles - .findAll{it.get(0).path.endsWith(".java")} - .collect{new Tuple(it.get(0), it.get(1).replaceAll("Copyright 20[0-9]{2}", "Copyright 20xx"))} + .findAll{it.get(0).path.endsWith('.java')} + .collect{new Tuple(it.get(0), it.get(1).replaceAll('Copyright 20[0-9]{2}', 'Copyright 20xx'))} .findAll{!it.get(1).startsWith(licenseText)} if (srcFiles.asList().size() > 0) { srcFiles.each({println 'missing license: ' + it.get(0)}) - throw new IllegalStateException("Above files do not have licenses") + throw new IllegalStateException('Above files do not have licenses') } } } test.dependsOn verifyLicense - gradle.projectsEvaluated { - tasks.withType(JavaCompile) { - options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" - } + tasks.withType(JavaCompile) { + options.compilerArgs << '-Xlint:unchecked' << '-Xlint:deprecation' } // Dependencies // ------------ - jacoco { - toolVersion = "0.8.5" - } - - ext { - // Load Dependencies shared between Bazel and Gradle build scripts - libraries = new Properties() - file(new File(rootDir, "dependencies.properties")).withReader{ libraries.load((Reader) it) } - - // Gradle-specific build script dependencies - libraries.putAll([ - 'maven.io_grpc_grpc_bom': "io.grpc:grpc-bom:${libraries['version.io_grpc']}", - 'maven.io_grpc_grpc_core': "io.grpc:grpc-core:${libraries['version.io_grpc']}", - 'maven.io_grpc_grpc_context': "io.grpc:grpc-context:${libraries['version.io_grpc']}", - 'maven.io_grpc_grpc_stub': "io.grpc:grpc-stub:${libraries['version.io_grpc']}", - 'maven.io_grpc_grpc_api': "io.grpc:grpc-api:${libraries['version.io_grpc']}", - 'maven.io_grpc_grpc_auth': "io.grpc:grpc-auth:${libraries['version.io_grpc']}", - 'maven.io_grpc_grpc_protobuf': "io.grpc:grpc-protobuf:${libraries['version.io_grpc']}", - 'maven.io_grpc_grpc_netty_shaded': "io.grpc:grpc-netty-shaded:${libraries['version.io_grpc']}", - 'maven.io_grpc_grpc_alts': "io.grpc:grpc-alts:${libraries['version.io_grpc']}", - 'maven.com_google_protobuf': "com.google.protobuf:protobuf-java:${libraries['version.com_google_protobuf']}", - 'maven.com_google_protobuf_java_util': "com.google.protobuf:protobuf-java-util:${libraries['version.com_google_protobuf']}" - ]) - } - repositories { mavenLocal() mavenCentral() @@ -125,8 +116,15 @@ configure(javaProjects) { configurations { shadowNoGuava linkageChecker + implementation.exclude group: 'com.google.guava', module: 'guava-jdk5' } + dependencies { + // Separate configuration (class path) for Linkage Checker + linkageChecker 'com.google.cloud.tools:dependencies:1.5.12' + } + + jacoco.toolVersion = '0.8.5' jacocoTestReport { reports { xml.enabled true @@ -134,12 +132,10 @@ configure(javaProjects) { } afterEvaluate { getClassDirectories().setFrom files(classDirectories.files.collect { - fileTree(dir: it, - exclude: ['**/AutoValue_*']) - }) + fileTree(dir: it, exclude: ['**/AutoValue_*']) + }) } } - check.dependsOn jacocoTestReport @@ -211,74 +207,13 @@ configure(javaProjects) { test { testLogging { - events "passed", "skipped", "failed", "standardOut", "standardError" + events 'passed', 'skipped', 'failed', 'standardOut', 'standardError' exceptionFormat = 'full' } } - - // Eclipse Annotation Processing - // ----------------------------- - - ext { - eclipseAptFolder = '.apt_generated' - eclipseSettingsDir = file('.settings') - } - - configurations { - codeGeneration - implementation.exclude group: 'com.google.guava', module: 'guava-jdk5' - } - - dependencies { - codeGeneration (libraries['maven.com_google_auto_value_auto_value'], - libraries['maven.com_google_code_findbugs_jsr305']) - - // Separate configuration (class path) for Linkage Checker - linkageChecker "com.google.cloud.tools:dependencies:1.5.12" - } - - compileJava.classpath += configurations.codeGeneration - - eclipse { - jdt.file.withProperties { - it['org.eclipse.jdt.core.compiler.processAnnotations'] = 'enabled' - } - } - - tasks.eclipseJdt { - doFirst { - def aptPrefs = - file("${eclipseSettingsDir}/org.eclipse.jdt.apt.core.prefs") - aptPrefs.parentFile.mkdirs() - - aptPrefs.text = """\ - eclipse.preferences.version=1 - org.eclipse.jdt.apt.aptEnabled=true - org.eclipse.jdt.apt.genSrcDir=${eclipseAptFolder} - org.eclipse.jdt.apt.reconcileEnabled=true - """.stripIndent() - - file('.factorypath').withWriter { - new groovy.xml.MarkupBuilder(it).'factorypath' { - project.configurations.codeGeneration.each { dep-> - factorypathentry( - kind:'EXTJAR', - id:dep.absolutePath, - enabled:true, - runInBatchMode:false) - } - } - } - } - } - - tasks.cleanEclipseJdt { - doFirst { - delete file("${eclipseSettingsDir}/org.eclipse.jdt.apt.core.prefs"), - file('.factorypath') - } - } + // Eclipse annotation processing auto-setup + eclipse.synchronizationTasks eclipseJdtApt, eclipseJdt, eclipseFactorypath } def normalReleasableProjects = subprojects.findAll { @@ -379,7 +314,7 @@ javadoc.options { task javadocCombined(type: Javadoc) { source subprojects.collect {project -> project.sourceSets.main.allJava } classpath = files(subprojects.collect {project -> project.sourceSets.main.compileClasspath}) - destinationDir = new File(projectDir, 'tmp_docs') + destinationDir = file('tmp_docs') } // JavaDocV3 docFX @@ -387,12 +322,12 @@ task javadocCombined(type: Javadoc) { task javadocCombinedV3(type: Javadoc) { source subprojects.collect {project -> project.sourceSets.main.allJava } classpath = files(subprojects.collect {project -> project.sourceSets.main.compileClasspath}) - destinationDir = new File(projectDir, 'tmp_docs/docfx-yml') + destinationDir = file('tmp_docs/docfx-yml') options.addStringOption('encoding', 'UTF-8') - options.addStringOption("doclet", "com.microsoft.doclet.DocFxDoclet") - options.addStringOption("projectname", "gax") - options.docletpath = [file(System.getenv('KOKORO_GFILE_DIR') + "/java-docfx-doclet-1.3.0.jar")] + options.addStringOption('doclet', 'com.microsoft.doclet.DocFxDoclet') + options.addStringOption('projectname', 'gax') + options.docletpath = [file(System.getenv('KOKORO_GFILE_DIR') + '/java-docfx-doclet-1.3.0.jar')] // Newer Gradle 6 passes -notimestamp by default, which the doclet above doesn't understand: // https://github.com/gradle/gradle/issues/11898 options.noTimestamp false @@ -487,7 +422,7 @@ task stageRelease { // 3. Remove tmp_gh-pages // Note: This task assumes that the 'stage_release' task has been completed. task finalizeRelease { - dependsOn 'publishDocs' + dependsOn publishDocs doLast { exec { commandLine 'rm', '-r', 'tmp_gh-pages' @@ -500,9 +435,9 @@ task finalizeRelease { // https://github.com/GoogleCloudPlatform/cloud-opensource-java/wiki/Linkage-Monitor#linkage-monitor-artifactstxt task createLinkageMonitorArtifactList { doLast { - def httpJsonVersion = project(":gax-httpjson").version + def httpJsonVersion = project(':gax-httpjson').version - new File(projectDir, "linkage-monitor-artifacts.txt").text = """ + new File('linkage-monitor-artifacts.txt').text = """ com.google.api:gax:$version com.google.api:gax-grpc:$version com.google.api:gax-httpjson:$httpJsonVersion diff --git a/gax-grpc/build.gradle b/gax-grpc/build.gradle index d73e6568a..c10014262 100644 --- a/gax-grpc/build.gradle +++ b/gax-grpc/build.gradle @@ -1,4 +1,4 @@ -archivesBaseName = "gax-grpc" +archivesBaseName = 'gax-grpc' // TODO: Populate this from dependencies.properties version property (for proper Gradle-Bazel sync) project.version = "2.6.1-SNAPSHOT" // {x-version-update:gax-grpc:current} diff --git a/gax-grpc/src/test/java/com/google/api/gax/grpc/InstantiatingGrpcChannelProviderTest.java b/gax-grpc/src/test/java/com/google/api/gax/grpc/InstantiatingGrpcChannelProviderTest.java index 72f3cc464..510884dd3 100644 --- a/gax-grpc/src/test/java/com/google/api/gax/grpc/InstantiatingGrpcChannelProviderTest.java +++ b/gax-grpc/src/test/java/com/google/api/gax/grpc/InstantiatingGrpcChannelProviderTest.java @@ -267,6 +267,7 @@ public void testWithGCECredentials() throws IOException { ApiFunction channelConfigurator = new ApiFunction() { + @Override public ManagedChannelBuilder apply(ManagedChannelBuilder channelBuilder) { if (InstantiatingGrpcChannelProvider.isOnComputeEngine()) { assertThat(channelBuilder instanceof ComputeEngineChannelBuilder).isTrue(); @@ -304,6 +305,7 @@ public void testWithNonGCECredentials() throws IOException { ApiFunction channelConfigurator = new ApiFunction() { + @Override public ManagedChannelBuilder apply(ManagedChannelBuilder channelBuilder) { // Clients with non-GCE credentials will not attempt DirectPath. assertThat(channelBuilder instanceof ComputeEngineChannelBuilder).isFalse(); @@ -334,6 +336,7 @@ public void testWithDirectPathDisabled() throws IOException { ApiFunction channelConfigurator = new ApiFunction() { + @Override public ManagedChannelBuilder apply(ManagedChannelBuilder channelBuilder) { // Clients without setting attemptDirectPath flag will not attempt DirectPath assertThat(channelBuilder instanceof ComputeEngineChannelBuilder).isFalse(); @@ -364,6 +367,7 @@ public void testWithNoDirectPathFlagSet() throws IOException { ApiFunction channelConfigurator = new ApiFunction() { + @Override public ManagedChannelBuilder apply(ManagedChannelBuilder channelBuilder) { // Clients without setting attemptDirectPath flag will not attempt DirectPath assertThat(channelBuilder instanceof ComputeEngineChannelBuilder).isFalse(); diff --git a/gax-httpjson/build.gradle b/gax-httpjson/build.gradle index 77553d3cf..b31c4d826 100644 --- a/gax-httpjson/build.gradle +++ b/gax-httpjson/build.gradle @@ -1,4 +1,4 @@ -archivesBaseName = "gax-httpjson" +archivesBaseName = 'gax-httpjson' // TODO: Populate this from dependencies.properties version property (for proper Gradle-Bazel sync) project.version = "0.91.1-SNAPSHOT" // {x-version-update:gax-httpjson:current} From 6a10f7bd06b0f4d3819f0fae7bb2e764d5f37650 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Wed, 20 Oct 2021 18:20:19 +0200 Subject: [PATCH 08/15] chore(deps): update dependency com.google.api.grpc:grpc-google-cloud-pubsub-v1 to v1.96.7 (#1541) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.api.grpc:grpc-google-cloud-pubsub-v1](https://togithub.com/googleapis/java-pubsub) | `1.96.6` -> `1.96.7` | [![age](https://badges.renovateapi.com/packages/maven/com.google.api.grpc:grpc-google-cloud-pubsub-v1/1.96.7/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.api.grpc:grpc-google-cloud-pubsub-v1/1.96.7/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.api.grpc:grpc-google-cloud-pubsub-v1/1.96.7/compatibility-slim/1.96.6)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.api.grpc:grpc-google-cloud-pubsub-v1/1.96.7/confidence-slim/1.96.6)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/gax-java). --- benchmark/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmark/build.gradle b/benchmark/build.gradle index 4f779a840..23c0e6440 100644 --- a/benchmark/build.gradle +++ b/benchmark/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation project(':gax-grpc') implementation "io.grpc:grpc-netty:${libraries['version.io_grpc']}" implementation 'com.google.api.grpc:grpc-google-cloud-bigtable-v2:2.1.4' - implementation 'com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.96.6' + implementation 'com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.96.7' } // Allow command line to target specific test From 4330eb33a39a6c487bb5ceece84a9b6ab8cd2600 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Wed, 20 Oct 2021 20:44:55 +0200 Subject: [PATCH 09/15] chore(deps): update dependency com.google.api.grpc:grpc-google-cloud-bigtable-v2 to v2.2.0 (#1546) --- benchmark/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmark/build.gradle b/benchmark/build.gradle index 23c0e6440..113563e83 100644 --- a/benchmark/build.gradle +++ b/benchmark/build.gradle @@ -8,7 +8,7 @@ dependencies { implementation project(':gax') implementation project(':gax-grpc') implementation "io.grpc:grpc-netty:${libraries['version.io_grpc']}" - implementation 'com.google.api.grpc:grpc-google-cloud-bigtable-v2:2.1.4' + implementation 'com.google.api.grpc:grpc-google-cloud-bigtable-v2:2.2.0' implementation 'com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.96.7' } From d4222e757d35e874a57d030f2f964e8d61c71d6d Mon Sep 17 00:00:00 2001 From: Mohan Li <67390330+mohanli-ml@users.noreply.github.com> Date: Sun, 24 Oct 2021 14:41:08 -0700 Subject: [PATCH 10/15] feat: add google-c2p dependence to DirectPath (#1521) * feat: add google-c2p dependence to DirectPath Co-authored-by: Chanseok Oh --- build.gradle | 1 + gax-grpc/build.gradle | 2 + .../InstantiatingGrpcChannelProvider.java | 21 ++++++--- .../InstantiatingGrpcChannelProviderTest.java | 45 +++++++------------ .../com/google/api/gax/rpc/StubSettings.java | 2 + 5 files changed, 38 insertions(+), 33 deletions(-) diff --git a/build.gradle b/build.gradle index ad1f88534..385bb0d29 100644 --- a/build.gradle +++ b/build.gradle @@ -40,6 +40,7 @@ ext { 'maven.io_grpc_grpc_protobuf': "io.grpc:grpc-protobuf:${libraries['version.io_grpc']}", 'maven.io_grpc_grpc_netty_shaded': "io.grpc:grpc-netty-shaded:${libraries['version.io_grpc']}", 'maven.io_grpc_grpc_alts': "io.grpc:grpc-alts:${libraries['version.io_grpc']}", + 'maven.io_grpc_grpc_xds': "io.grpc:grpc-xds:${libraries['version.io_grpc']}", 'maven.com_google_protobuf': "com.google.protobuf:protobuf-java:${libraries['version.com_google_protobuf']}", 'maven.com_google_protobuf_java_util': "com.google.protobuf:protobuf-java-util:${libraries['version.com_google_protobuf']}") } diff --git a/gax-grpc/build.gradle b/gax-grpc/build.gradle index c10014262..f08a01f99 100644 --- a/gax-grpc/build.gradle +++ b/gax-grpc/build.gradle @@ -20,6 +20,8 @@ dependencies { libraries['maven.io_grpc_grpc_protobuf'], libraries['maven.io_grpc_grpc_stub']) + runtimeOnly libraries['maven.io_grpc_grpc_xds'] + compileOnly libraries['maven.com_google_auto_value_auto_value'] testImplementation( project(':gax').sourceSets.test.output, diff --git a/gax-grpc/src/main/java/com/google/api/gax/grpc/InstantiatingGrpcChannelProvider.java b/gax-grpc/src/main/java/com/google/api/gax/grpc/InstantiatingGrpcChannelProvider.java index 225d76d6d..d441a0c9a 100644 --- a/gax-grpc/src/main/java/com/google/api/gax/grpc/InstantiatingGrpcChannelProvider.java +++ b/gax-grpc/src/main/java/com/google/api/gax/grpc/InstantiatingGrpcChannelProvider.java @@ -83,6 +83,7 @@ public final class InstantiatingGrpcChannelProvider implements TransportChannelP static final String DIRECT_PATH_ENV_VAR = "GOOGLE_CLOUD_ENABLE_DIRECT_PATH"; private static final String DIRECT_PATH_ENV_DISABLE_DIRECT_PATH = "GOOGLE_CLOUD_DISABLE_DIRECT_PATH"; + private static final String DIRECT_PATH_ENV_ENABLE_XDS = "GOOGLE_CLOUD_ENABLE_DIRECT_PATH_XDS"; static final long DIRECT_PATH_KEEP_ALIVE_TIME_SECONDS = 3600; static final long DIRECT_PATH_KEEP_ALIVE_TIMEOUT_SECONDS = 20; // reduce the thundering herd problem of too many channels trying to (re)connect at the same time @@ -330,16 +331,23 @@ private ManagedChannel createSingleChannel() throws IOException, GeneralSecurity ManagedChannelBuilder builder; - // TODO(weiranf): Add API in ComputeEngineCredentials to check default service account. + // Check DirectPath traffic. + boolean isDirectPathXdsEnabled = false; if (isDirectPathEnabled(serviceAddress) && isNonDefaultServiceAccountAllowed() && isOnComputeEngine()) { - builder = ComputeEngineChannelBuilder.forAddress(serviceAddress, port); + isDirectPathXdsEnabled = Boolean.parseBoolean(envProvider.getenv(DIRECT_PATH_ENV_ENABLE_XDS)); + if (isDirectPathXdsEnabled) { + // google-c2p resolver target must not have a port number + builder = ComputeEngineChannelBuilder.forTarget("google-c2p:///" + serviceAddress); + } else { + builder = ComputeEngineChannelBuilder.forAddress(serviceAddress, port); + builder.defaultServiceConfig(directPathServiceConfig); + } // Set default keepAliveTime and keepAliveTimeout when directpath environment is enabled. // Will be overridden by user defined values if any. builder.keepAliveTime(DIRECT_PATH_KEEP_ALIVE_TIME_SECONDS, TimeUnit.SECONDS); builder.keepAliveTimeout(DIRECT_PATH_KEEP_ALIVE_TIMEOUT_SECONDS, TimeUnit.SECONDS); - builder.defaultServiceConfig(directPathServiceConfig); } else { ChannelCredentials channelCredentials = createMtlsChannelCredentials(); if (channelCredentials != null) { @@ -348,10 +356,13 @@ && isOnComputeEngine()) { builder = ManagedChannelBuilder.forAddress(serviceAddress, port); } } + // google-c2p resolver requires service config lookup + if (!isDirectPathXdsEnabled) { + // See https://github.com/googleapis/gapic-generator/issues/2816 + builder.disableServiceConfigLookUp(); + } builder = builder - // See https://github.com/googleapis/gapic-generator/issues/2816 - .disableServiceConfigLookUp() .intercept(new GrpcChannelUUIDInterceptor()) .intercept(headerInterceptor) .intercept(metadataHandlerInterceptor) diff --git a/gax-grpc/src/test/java/com/google/api/gax/grpc/InstantiatingGrpcChannelProviderTest.java b/gax-grpc/src/test/java/com/google/api/gax/grpc/InstantiatingGrpcChannelProviderTest.java index 510884dd3..ed01d241e 100644 --- a/gax-grpc/src/test/java/com/google/api/gax/grpc/InstantiatingGrpcChannelProviderTest.java +++ b/gax-grpc/src/test/java/com/google/api/gax/grpc/InstantiatingGrpcChannelProviderTest.java @@ -67,6 +67,7 @@ @RunWith(JUnit4.class) public class InstantiatingGrpcChannelProviderTest extends AbstractMtlsTransportChannelTest { + @Test public void testEndpoint() { String endpoint = "localhost:8080"; @@ -164,11 +165,8 @@ public void testToBuilder() { Duration keepaliveTime = Duration.ofSeconds(1); Duration keepaliveTimeout = Duration.ofSeconds(2); ApiFunction channelConfigurator = - new ApiFunction() { - @Override - public ManagedChannelBuilder apply(ManagedChannelBuilder input) { - throw new UnsupportedOperationException(); - } + builder -> { + throw new UnsupportedOperationException(); }; Map directPathServiceConfig = ImmutableMap.of("loadbalancingConfig", "grpclb"); @@ -266,16 +264,13 @@ public void testWithGCECredentials() throws IOException { executor.shutdown(); ApiFunction channelConfigurator = - new ApiFunction() { - @Override - public ManagedChannelBuilder apply(ManagedChannelBuilder channelBuilder) { - if (InstantiatingGrpcChannelProvider.isOnComputeEngine()) { - assertThat(channelBuilder instanceof ComputeEngineChannelBuilder).isTrue(); - } else { - assertThat(channelBuilder instanceof ComputeEngineChannelBuilder).isFalse(); - } - return channelBuilder; + channelBuilder -> { + if (InstantiatingGrpcChannelProvider.isOnComputeEngine()) { + assertThat(channelBuilder).isInstanceOf(ComputeEngineChannelBuilder.class); + } else { + assertThat(channelBuilder).isNotInstanceOf(ComputeEngineChannelBuilder.class); } + return channelBuilder; }; TransportChannelProvider provider = @@ -304,13 +299,10 @@ public void testWithNonGCECredentials() throws IOException { executor.shutdown(); ApiFunction channelConfigurator = - new ApiFunction() { - @Override - public ManagedChannelBuilder apply(ManagedChannelBuilder channelBuilder) { - // Clients with non-GCE credentials will not attempt DirectPath. - assertThat(channelBuilder instanceof ComputeEngineChannelBuilder).isFalse(); - return channelBuilder; - } + channelBuilder -> { + // Clients with non-GCE credentials will not attempt DirectPath. + assertThat(channelBuilder instanceof ComputeEngineChannelBuilder).isFalse(); + return channelBuilder; }; TransportChannelProvider provider = @@ -366,13 +358,10 @@ public void testWithNoDirectPathFlagSet() throws IOException { executor.shutdown(); ApiFunction channelConfigurator = - new ApiFunction() { - @Override - public ManagedChannelBuilder apply(ManagedChannelBuilder channelBuilder) { - // Clients without setting attemptDirectPath flag will not attempt DirectPath - assertThat(channelBuilder instanceof ComputeEngineChannelBuilder).isFalse(); - return channelBuilder; - } + channelBuilder -> { + // Clients without setting attemptDirectPath flag will not attempt DirectPath + assertThat(channelBuilder instanceof ComputeEngineChannelBuilder).isFalse(); + return channelBuilder; }; TransportChannelProvider provider = diff --git a/gax/src/main/java/com/google/api/gax/rpc/StubSettings.java b/gax/src/main/java/com/google/api/gax/rpc/StubSettings.java index 825aa9d7a..04f1d59c9 100644 --- a/gax/src/main/java/com/google/api/gax/rpc/StubSettings.java +++ b/gax/src/main/java/com/google/api/gax/rpc/StubSettings.java @@ -176,6 +176,7 @@ public ApiTracerFactory getTracerFactory() { return tracerFactory; } + @Override public String toString() { return MoreObjects.toStringHelper(this) .add("backgroundExecutorProvider", backgroundExecutorProvider) @@ -535,6 +536,7 @@ protected static void applyToAllUnaryMethods( public abstract > StubSettings build() throws IOException; + @Override public String toString() { return MoreObjects.toStringHelper(this) .add("backgroundExecutorProvider", backgroundExecutorProvider) From 27bf2655120972d929e6118b73d8d556b0440fcf Mon Sep 17 00:00:00 2001 From: Mattie Fu Date: Wed, 27 Oct 2021 11:47:09 -0400 Subject: [PATCH 11/15] feat: pass request in ApiTracer (#1491) * feat: pass request or response in ApiTracer * add comments * make change backward compatible * revert attemptSucceeded changes Co-authored-by: Igor Bernstein --- .../google/api/gax/rpc/AttemptCallable.java | 2 +- .../rpc/ServerStreamingAttemptCallable.java | 2 +- .../com/google/api/gax/tracing/ApiTracer.java | 12 +++++++ .../google/api/gax/tracing/BaseApiTracer.java | 5 +++ .../api/gax/tracing/OpencensusTracer.java | 6 ++++ .../AbstractRetryingExecutorTest.java | 33 ++++++++++--------- .../api/gax/retrying/FailingCallable.java | 6 ++-- .../ScheduledRetryingExecutorTest.java | 12 +++---- .../api/gax/tracing/TracedCallableTest.java | 2 +- 9 files changed, 53 insertions(+), 27 deletions(-) diff --git a/gax/src/main/java/com/google/api/gax/rpc/AttemptCallable.java b/gax/src/main/java/com/google/api/gax/rpc/AttemptCallable.java index e053d5583..6b419f1d4 100644 --- a/gax/src/main/java/com/google/api/gax/rpc/AttemptCallable.java +++ b/gax/src/main/java/com/google/api/gax/rpc/AttemptCallable.java @@ -82,7 +82,7 @@ public ResponseT call() { callContext .getTracer() - .attemptStarted(externalFuture.getAttemptSettings().getOverallAttemptCount()); + .attemptStarted(request, externalFuture.getAttemptSettings().getOverallAttemptCount()); ApiFuture internalFuture = callable.futureCall(request, callContext); externalFuture.setAttemptFuture(internalFuture); diff --git a/gax/src/main/java/com/google/api/gax/rpc/ServerStreamingAttemptCallable.java b/gax/src/main/java/com/google/api/gax/rpc/ServerStreamingAttemptCallable.java index cdae46ffc..0c71d1242 100644 --- a/gax/src/main/java/com/google/api/gax/rpc/ServerStreamingAttemptCallable.java +++ b/gax/src/main/java/com/google/api/gax/rpc/ServerStreamingAttemptCallable.java @@ -229,7 +229,7 @@ public Void call() { attemptContext .getTracer() - .attemptStarted(outerRetryingFuture.getAttemptSettings().getOverallAttemptCount()); + .attemptStarted(request, outerRetryingFuture.getAttemptSettings().getOverallAttemptCount()); innerCallable.call( request, diff --git a/gax/src/main/java/com/google/api/gax/tracing/ApiTracer.java b/gax/src/main/java/com/google/api/gax/tracing/ApiTracer.java index bc329630e..3176be4b9 100644 --- a/gax/src/main/java/com/google/api/gax/tracing/ApiTracer.java +++ b/gax/src/main/java/com/google/api/gax/tracing/ApiTracer.java @@ -83,9 +83,21 @@ public interface ApiTracer { * start of the operation. The attemptNumber is zero based. So the initial attempt will be 0. * * @param attemptNumber the zero based sequential attempt number. + * @deprecated Please use {@link #attemptStarted(Object, int)} instead. */ + @Deprecated void attemptStarted(int attemptNumber); + /** + * Adds an annotation that an attempt is about to start with additional information from the + * request. In general this should occur at the very start of the operation. The attemptNumber is + * zero based. So the initial attempt will be 0. + * + * @param attemptNumber the zero based sequential attempt number. + * @param request request of this attempt. + */ + void attemptStarted(Object request, int attemptNumber); + /** Adds an annotation that the attempt succeeded. */ void attemptSucceeded(); diff --git a/gax/src/main/java/com/google/api/gax/tracing/BaseApiTracer.java b/gax/src/main/java/com/google/api/gax/tracing/BaseApiTracer.java index 4ff8e901f..538708b87 100644 --- a/gax/src/main/java/com/google/api/gax/tracing/BaseApiTracer.java +++ b/gax/src/main/java/com/google/api/gax/tracing/BaseApiTracer.java @@ -85,6 +85,11 @@ public void attemptStarted(int attemptNumber) { // noop } + @Override + public void attemptStarted(Object request, int attemptNumber) { + attemptStarted(attemptNumber); + } + @Override public void attemptSucceeded() { // noop diff --git a/gax/src/main/java/com/google/api/gax/tracing/OpencensusTracer.java b/gax/src/main/java/com/google/api/gax/tracing/OpencensusTracer.java index 8025917dc..ea4c5f903 100644 --- a/gax/src/main/java/com/google/api/gax/tracing/OpencensusTracer.java +++ b/gax/src/main/java/com/google/api/gax/tracing/OpencensusTracer.java @@ -307,6 +307,12 @@ public void attemptStarted(int attemptNumber) { // This simply is used for state management. } + /** {@inheritDoc} */ + @Override + public void attemptStarted(Object request, int attemptNumber) { + attemptStarted(attemptNumber); + } + /** {@inheritDoc} */ @Override public void attemptSucceeded() { diff --git a/gax/src/test/java/com/google/api/gax/retrying/AbstractRetryingExecutorTest.java b/gax/src/test/java/com/google/api/gax/retrying/AbstractRetryingExecutorTest.java index 3be825747..e376a7c7a 100644 --- a/gax/src/test/java/com/google/api/gax/retrying/AbstractRetryingExecutorTest.java +++ b/gax/src/test/java/com/google/api/gax/retrying/AbstractRetryingExecutorTest.java @@ -37,6 +37,7 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.any; import static org.mockito.Mockito.anyInt; import static org.mockito.Mockito.times; @@ -115,7 +116,7 @@ private RetrySettings getDefaultRetrySettings() { @Test public void testSuccess() throws Exception { - FailingCallable callable = new FailingCallable(0, "SUCCESS", tracer); + FailingCallable callable = new FailingCallable(0, "request", "SUCCESS", tracer); RetryingExecutorWithContext executor = getExecutor(getAlgorithm(getDefaultRetrySettings(), 0, null)); RetryingFuture future = executor.createFuture(callable, retryingContext); @@ -124,14 +125,14 @@ public void testSuccess() throws Exception { assertFutureSuccess(future); assertEquals(0, future.getAttemptSettings().getAttemptCount()); - verify(tracer, times(1)).attemptStarted(0); + verify(tracer, times(1)).attemptStarted(eq("request"), eq(0)); verify(tracer, times(1)).attemptSucceeded(); verifyNoMoreInteractions(tracer); } @Test public void testSuccessWithFailures() throws Exception { - FailingCallable callable = new FailingCallable(5, "SUCCESS", tracer); + FailingCallable callable = new FailingCallable(5, "request", "SUCCESS", tracer); RetryingExecutorWithContext executor = getExecutor(getAlgorithm(getDefaultRetrySettings(), 0, null)); RetryingFuture future = executor.createFuture(callable, retryingContext); @@ -140,7 +141,7 @@ public void testSuccessWithFailures() throws Exception { assertFutureSuccess(future); assertEquals(5, future.getAttemptSettings().getAttemptCount()); - verify(tracer, times(6)).attemptStarted(anyInt()); + verify(tracer, times(6)).attemptStarted(eq("request"), anyInt()); verify(tracer, times(5)).attemptFailed(any(Throwable.class), any(Duration.class)); verify(tracer, times(1)).attemptSucceeded(); verifyNoMoreInteractions(tracer); @@ -148,7 +149,7 @@ public void testSuccessWithFailures() throws Exception { @Test public void testSuccessWithFailuresPeekGetAttempt() throws Exception { - FailingCallable callable = new FailingCallable(5, "SUCCESS", tracer); + FailingCallable callable = new FailingCallable(5, "request", "SUCCESS", tracer); RetryingExecutorWithContext executor = getExecutor(getAlgorithm(getDefaultRetrySettings(), 0, null)); RetryingFuture future = executor.createFuture(callable, retryingContext); @@ -174,7 +175,7 @@ public void testSuccessWithFailuresPeekGetAttempt() throws Exception { @Test public void testMaxRetriesExceeded() throws Exception { - FailingCallable callable = new FailingCallable(6, "FAILURE", tracer); + FailingCallable callable = new FailingCallable(6, "request", "FAILURE", tracer); RetryingExecutorWithContext executor = getExecutor(getAlgorithm(getDefaultRetrySettings(), 0, null)); RetryingFuture future = executor.createFuture(callable, retryingContext); @@ -183,7 +184,7 @@ public void testMaxRetriesExceeded() throws Exception { assertFutureFail(future, CustomException.class); assertEquals(5, future.getAttemptSettings().getAttemptCount()); - verify(tracer, times(6)).attemptStarted(anyInt()); + verify(tracer, times(6)).attemptStarted(eq("request"), anyInt()); verify(tracer, times(5)).attemptFailed(any(Throwable.class), any(Duration.class)); verify(tracer, times(1)).attemptFailedRetriesExhausted(any(Throwable.class)); verifyNoMoreInteractions(tracer); @@ -202,7 +203,7 @@ public void testTotalTimeoutExceeded() throws Exception { getExecutor( getAlgorithm( useContextRetrySettings ? getDefaultRetrySettings() : retrySettings, 0, null)); - FailingCallable callable = new FailingCallable(6, "FAILURE", tracer); + FailingCallable callable = new FailingCallable(6, "request", "FAILURE", tracer); RetryingContext context; if (useContextRetrySettings) { context = FakeCallContext.createDefault().withTracer(tracer).withRetrySettings(retrySettings); @@ -215,14 +216,14 @@ public void testTotalTimeoutExceeded() throws Exception { assertFutureFail(future, CustomException.class); assertTrue(future.getAttemptSettings().getAttemptCount() < 4); - verify(tracer, times(1)).attemptStarted(anyInt()); + verify(tracer, times(1)).attemptStarted(eq("request"), anyInt()); verify(tracer, times(1)).attemptFailedRetriesExhausted(any(Throwable.class)); verifyNoMoreInteractions(tracer); } @Test public void testCancelOuterFutureBeforeStart() throws Exception { - FailingCallable callable = new FailingCallable(4, "SUCCESS", tracer); + FailingCallable callable = new FailingCallable(4, "request", "SUCCESS", tracer); RetrySettings retrySettings = FAST_RETRY_SETTINGS @@ -248,7 +249,7 @@ public void testCancelOuterFutureBeforeStart() throws Exception { @Test public void testCancelByRetryingAlgorithm() throws Exception { - FailingCallable callable = new FailingCallable(6, "FAILURE", tracer); + FailingCallable callable = new FailingCallable(6, "request", "FAILURE", tracer); RetryingExecutorWithContext executor = getExecutor(getAlgorithm(getDefaultRetrySettings(), 5, new CancellationException())); RetryingFuture future = executor.createFuture(callable, retryingContext); @@ -257,7 +258,7 @@ public void testCancelByRetryingAlgorithm() throws Exception { assertFutureCancel(future); assertEquals(4, future.getAttemptSettings().getAttemptCount()); - verify(tracer, times(5)).attemptStarted(anyInt()); + verify(tracer, times(5)).attemptStarted(eq("request"), anyInt()); // Pre-apocalypse failures verify(tracer, times(4)).attemptFailed(any(Throwable.class), any(Duration.class)); // Apocalypse failure @@ -267,7 +268,7 @@ public void testCancelByRetryingAlgorithm() throws Exception { @Test public void testUnexpectedExceptionFromRetryAlgorithm() throws Exception { - FailingCallable callable = new FailingCallable(6, "FAILURE", tracer); + FailingCallable callable = new FailingCallable(6, "request", "FAILURE", tracer); RetryingExecutorWithContext executor = getExecutor(getAlgorithm(getDefaultRetrySettings(), 5, new RuntimeException())); RetryingFuture future = executor.createFuture(callable, retryingContext); @@ -276,7 +277,7 @@ public void testUnexpectedExceptionFromRetryAlgorithm() throws Exception { assertFutureFail(future, RuntimeException.class); assertEquals(4, future.getAttemptSettings().getAttemptCount()); - verify(tracer, times(5)).attemptStarted(anyInt()); + verify(tracer, times(5)).attemptStarted(eq("request"), anyInt()); // Pre-apocalypse failures verify(tracer, times(4)).attemptFailed(any(Throwable.class), any(Duration.class)); // Apocalypse failure @@ -302,7 +303,7 @@ public void testPollExceptionByPollAlgorithm() throws Exception { NanoClock.getDefaultClock())); RetryingExecutorWithContext executor = getExecutor(retryAlgorithm); - FailingCallable callable = new FailingCallable(6, "FAILURE", tracer); + FailingCallable callable = new FailingCallable(6, "request", "FAILURE", tracer); RetryingContext context; if (useContextRetrySettings) { context = FakeCallContext.createDefault().withTracer(tracer).withRetrySettings(retrySettings); @@ -315,7 +316,7 @@ public void testPollExceptionByPollAlgorithm() throws Exception { assertFutureFail(future, PollException.class); assertTrue(future.getAttemptSettings().getAttemptCount() < 4); - verify(tracer, times(1)).attemptStarted(anyInt()); + verify(tracer, times(1)).attemptStarted(eq("request"), anyInt()); verify(tracer, times(1)).attemptPermanentFailure(any(PollException.class)); verifyNoMoreInteractions(tracer); } diff --git a/gax/src/test/java/com/google/api/gax/retrying/FailingCallable.java b/gax/src/test/java/com/google/api/gax/retrying/FailingCallable.java index 07fa1c59d..9b7524ec6 100644 --- a/gax/src/test/java/com/google/api/gax/retrying/FailingCallable.java +++ b/gax/src/test/java/com/google/api/gax/retrying/FailingCallable.java @@ -62,10 +62,12 @@ class FailingCallable implements Callable { private AtomicInteger attemptsCount = new AtomicInteger(0); private final ApiTracer tracer; private final int expectedFailuresCount; + private final String request; private final String result; private final CountDownLatch firstAttemptFinished = new CountDownLatch(1); - FailingCallable(int expectedFailuresCount, String result, ApiTracer tracer) { + FailingCallable(int expectedFailuresCount, String request, String result, ApiTracer tracer) { + this.request = request; this.tracer = tracer; this.expectedFailuresCount = expectedFailuresCount; this.result = result; @@ -80,7 +82,7 @@ public String call() throws Exception { try { int attemptNumber = attemptsCount.getAndIncrement(); - tracer.attemptStarted(attemptNumber); + tracer.attemptStarted(request, attemptNumber); if (attemptNumber < expectedFailuresCount) { throw new CustomException(); diff --git a/gax/src/test/java/com/google/api/gax/retrying/ScheduledRetryingExecutorTest.java b/gax/src/test/java/com/google/api/gax/retrying/ScheduledRetryingExecutorTest.java index 23dff4a30..76793ec98 100644 --- a/gax/src/test/java/com/google/api/gax/retrying/ScheduledRetryingExecutorTest.java +++ b/gax/src/test/java/com/google/api/gax/retrying/ScheduledRetryingExecutorTest.java @@ -88,7 +88,7 @@ public void testSuccessWithFailuresPeekAttempt() throws Exception { final int maxRetries = 100; ScheduledExecutorService localExecutor = Executors.newSingleThreadScheduledExecutor(); - FailingCallable callable = new FailingCallable(15, "SUCCESS", tracer); + FailingCallable callable = new FailingCallable(15, "request", "SUCCESS", tracer); RetrySettings retrySettings = FAST_RETRY_SETTINGS @@ -139,7 +139,7 @@ public void testSuccessWithFailuresGetAttempt() throws Exception { final int maxRetries = 100; ScheduledExecutorService localExecutor = Executors.newSingleThreadScheduledExecutor(); - FailingCallable callable = new FailingCallable(15, "SUCCESS", tracer); + FailingCallable callable = new FailingCallable(15, "request", "SUCCESS", tracer); RetrySettings retrySettings = FAST_RETRY_SETTINGS .toBuilder() @@ -192,7 +192,7 @@ public void testCancelGetAttempt() throws Exception { ScheduledExecutorService localExecutor = Executors.newSingleThreadScheduledExecutor(); final int maxRetries = 100; - FailingCallable callable = new FailingCallable(maxRetries - 1, "SUCCESS", tracer); + FailingCallable callable = new FailingCallable(maxRetries - 1, "request", "SUCCESS", tracer); RetrySettings retrySettings = FAST_RETRY_SETTINGS .toBuilder() @@ -249,7 +249,7 @@ public void testCancelGetAttempt() throws Exception { public void testCancelOuterFutureAfterStart() throws Exception { for (int executionsCount = 0; executionsCount < EXECUTIONS_COUNT; executionsCount++) { ScheduledExecutorService localExecutor = Executors.newSingleThreadScheduledExecutor(); - FailingCallable callable = new FailingCallable(4, "SUCCESS", tracer); + FailingCallable callable = new FailingCallable(4, "requset", "SUCCESS", tracer); RetrySettings retrySettings = FAST_RETRY_SETTINGS .toBuilder() @@ -276,7 +276,7 @@ public void testCancelOuterFutureAfterStart() throws Exception { @Test public void testCancelIsTraced() throws Exception { ScheduledExecutorService localExecutor = Executors.newSingleThreadScheduledExecutor(); - FailingCallable callable = new FailingCallable(4, "SUCCESS", tracer); + FailingCallable callable = new FailingCallable(4, "request", "SUCCESS", tracer); RetrySettings retrySettings = FAST_RETRY_SETTINGS .toBuilder() @@ -305,7 +305,7 @@ public void testCancelProxiedFutureAfterStart() throws Exception { // this is a heavy test, which takes a lot of time, so only few executions. for (int executionsCount = 0; executionsCount < 2; executionsCount++) { ScheduledExecutorService localExecutor = Executors.newSingleThreadScheduledExecutor(); - FailingCallable callable = new FailingCallable(5, "SUCCESS", tracer); + FailingCallable callable = new FailingCallable(5, "request", "SUCCESS", tracer); RetrySettings retrySettings = FAST_RETRY_SETTINGS .toBuilder() diff --git a/gax/src/test/java/com/google/api/gax/tracing/TracedCallableTest.java b/gax/src/test/java/com/google/api/gax/tracing/TracedCallableTest.java index 1a2454d5b..834b357e4 100644 --- a/gax/src/test/java/com/google/api/gax/tracing/TracedCallableTest.java +++ b/gax/src/test/java/com/google/api/gax/tracing/TracedCallableTest.java @@ -111,7 +111,7 @@ public void testNonRetriedCallable() throws Exception { ApiFuture future = callable.futureCall("Is your refrigerator running?", callContext); verify(tracerFactory, times(1)).newTracer(parentTracer, SPAN_NAME, OperationType.Unary); - verify(tracer, times(1)).attemptStarted(anyInt()); + verify(tracer, times(1)).attemptStarted(anyString(), anyInt()); verify(tracer, times(1)).attemptSucceeded(); verify(tracer, times(1)).operationSucceeded(); verifyNoMoreInteractions(tracer); From 14c25cdfae2c0602d99fcd07c9067138fc172a7f Mon Sep 17 00:00:00 2001 From: Mattie Fu Date: Wed, 27 Oct 2021 12:00:37 -0400 Subject: [PATCH 12/15] feat: add batch throttled time to tracer (#1463) Add `ApiTracer#batchRequestThrottled` to track total throttled time of a batch. In `BatcherImpl`, add throttled time to `ApiCallContext` so it can be accessed from callable chains and recorded in `ApiTracer`. --- .../com/google/api/gax/batching/Batcher.java | 4 ++ .../google/api/gax/batching/BatcherImpl.java | 56 +++++++++++++++++-- .../api/gax/batching/BatcherImplTest.java | 29 +++++++++- 3 files changed, 82 insertions(+), 7 deletions(-) diff --git a/gax/src/main/java/com/google/api/gax/batching/Batcher.java b/gax/src/main/java/com/google/api/gax/batching/Batcher.java index d01f79f4a..8ac78ef2f 100644 --- a/gax/src/main/java/com/google/api/gax/batching/Batcher.java +++ b/gax/src/main/java/com/google/api/gax/batching/Batcher.java @@ -32,6 +32,7 @@ import com.google.api.core.ApiFuture; import com.google.api.core.BetaApi; import com.google.api.core.InternalExtensionOnly; +import com.google.api.gax.rpc.ApiCallContext; /** * Represents a batching context where individual elements will be accumulated and flushed in a @@ -49,6 +50,9 @@ @InternalExtensionOnly public interface Batcher extends AutoCloseable { + /** {@link ApiCallContext.Key} for tracking batch total throttled time */ + ApiCallContext.Key THROTTLED_TIME_KEY = ApiCallContext.Key.create("total_throttled_time"); + /** * Queues the passed in element to be sent at some point in the future. * diff --git a/gax/src/main/java/com/google/api/gax/batching/BatcherImpl.java b/gax/src/main/java/com/google/api/gax/batching/BatcherImpl.java index aeeab82b2..743d25c57 100644 --- a/gax/src/main/java/com/google/api/gax/batching/BatcherImpl.java +++ b/gax/src/main/java/com/google/api/gax/batching/BatcherImpl.java @@ -40,9 +40,11 @@ import com.google.api.gax.batching.FlowController.FlowControlException; import com.google.api.gax.batching.FlowController.FlowControlRuntimeException; import com.google.api.gax.batching.FlowController.LimitExceededBehavior; +import com.google.api.gax.rpc.ApiCallContext; import com.google.api.gax.rpc.UnaryCallable; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; +import com.google.common.base.Stopwatch; import com.google.common.util.concurrent.Futures; import java.lang.ref.Reference; import java.lang.ref.ReferenceQueue; @@ -93,6 +95,7 @@ public class BatcherImpl private SettableApiFuture closeFuture; private final BatcherStats batcherStats = new BatcherStats(); private final FlowController flowController; + private final ApiCallContext callContext; /** * @param batchingDescriptor a {@link BatchingDescriptor} for transforming individual elements @@ -100,7 +103,10 @@ public class BatcherImpl * @param unaryCallable a {@link UnaryCallable} object * @param prototype a {@link RequestT} object * @param batchingSettings a {@link BatchingSettings} with configuration of thresholds + * @deprecated Please instantiate the Batcher with {@link FlowController} and {@link + * ApiCallContext} */ + @Deprecated public BatcherImpl( BatchingDescriptor batchingDescriptor, UnaryCallable unaryCallable, @@ -108,7 +114,7 @@ public BatcherImpl( BatchingSettings batchingSettings, ScheduledExecutorService executor) { - this(batchingDescriptor, unaryCallable, prototype, batchingSettings, executor, null); + this(batchingDescriptor, unaryCallable, prototype, batchingSettings, executor, null, null); } /** @@ -119,7 +125,9 @@ public BatcherImpl( * @param batchingSettings a {@link BatchingSettings} with configuration of thresholds * @param flowController a {@link FlowController} for throttling requests. If it's null, create a * {@link FlowController} object from {@link BatchingSettings#getFlowControlSettings()}. + * @deprecated Please instantiate the Batcher with {@link ApiCallContext} */ + @Deprecated public BatcherImpl( BatchingDescriptor batchingDescriptor, UnaryCallable unaryCallable, @@ -128,6 +136,35 @@ public BatcherImpl( ScheduledExecutorService executor, @Nullable FlowController flowController) { + this( + batchingDescriptor, + unaryCallable, + prototype, + batchingSettings, + executor, + flowController, + null); + } + + /** + * @param batchingDescriptor a {@link BatchingDescriptor} for transforming individual elements + * into wrappers request and response + * @param unaryCallable a {@link UnaryCallable} object + * @param prototype a {@link RequestT} object + * @param batchingSettings a {@link BatchingSettings} with configuration of thresholds + * @param flowController a {@link FlowController} for throttling requests. If it's null, create a + * {@link FlowController} object from {@link BatchingSettings#getFlowControlSettings()}. + * @param callContext a {@link ApiCallContext} object that'll be merged in unaryCallable + */ + public BatcherImpl( + BatchingDescriptor batchingDescriptor, + UnaryCallable unaryCallable, + RequestT prototype, + BatchingSettings batchingSettings, + ScheduledExecutorService executor, + @Nullable FlowController flowController, + @Nullable ApiCallContext callContext) { + this.batchingDescriptor = Preconditions.checkNotNull(batchingDescriptor, "batching descriptor cannot be null"); this.unaryCallable = Preconditions.checkNotNull(unaryCallable, "callable cannot be null"); @@ -168,6 +205,7 @@ public BatcherImpl( scheduledFuture = Futures.immediateCancelledFuture(); } currentBatcherReference = new BatcherReference(this); + this.callContext = callContext; } /** {@inheritDoc} */ @@ -192,16 +230,18 @@ public ApiFuture add(ElementT element) { // class, which made it seem unnecessary to have blocking and non-blocking semaphore // implementations. Some refactoring may be needed for the optimized implementation. So we'll // defer it till we decide on if refactoring FlowController is necessary. + Stopwatch stopwatch = Stopwatch.createStarted(); try { flowController.reserve(1, batchingDescriptor.countBytes(element)); } catch (FlowControlException e) { // This exception will only be thrown if the FlowController is set to ThrowException behavior throw FlowControlRuntimeException.fromFlowControlException(e); } + long throttledTimeMs = stopwatch.elapsed(TimeUnit.MILLISECONDS); SettableApiFuture result = SettableApiFuture.create(); synchronized (elementLock) { - currentOpenBatch.add(element, result); + currentOpenBatch.add(element, result, throttledTimeMs); } if (currentOpenBatch.hasAnyThresholdReached()) { @@ -230,8 +270,14 @@ public void sendOutstanding() { currentOpenBatch = new Batch<>(prototype, batchingDescriptor, batchingSettings, batcherStats); } + // This check is for old clients that instantiated the batcher without ApiCallContext + ApiCallContext callContextWithOption = null; + if (callContext != null) { + callContextWithOption = + callContext.withOption(THROTTLED_TIME_KEY, accumulatedBatch.totalThrottledTimeMs); + } final ApiFuture batchResponse = - unaryCallable.futureCall(accumulatedBatch.builder.build()); + unaryCallable.futureCall(accumulatedBatch.builder.build(), callContextWithOption); numOfOutstandingBatches.incrementAndGet(); ApiFutures.addCallback( @@ -367,6 +413,7 @@ private static class Batch { private long elementCounter = 0; private long byteCounter = 0; + private long totalThrottledTimeMs = 0; private Batch( RequestT prototype, @@ -383,11 +430,12 @@ private Batch( this.batcherStats = batcherStats; } - void add(ElementT element, SettableApiFuture result) { + void add(ElementT element, SettableApiFuture result, long throttledTimeMs) { builder.add(element); entries.add(BatchEntry.create(element, result)); elementCounter++; byteCounter += descriptor.countBytes(element); + totalThrottledTimeMs += throttledTimeMs; } void onBatchSuccess(ResponseT response) { diff --git a/gax/src/test/java/com/google/api/gax/batching/BatcherImplTest.java b/gax/src/test/java/com/google/api/gax/batching/BatcherImplTest.java index 10ccb1453..c3a1ce0bb 100644 --- a/gax/src/test/java/com/google/api/gax/batching/BatcherImplTest.java +++ b/gax/src/test/java/com/google/api/gax/batching/BatcherImplTest.java @@ -33,6 +33,7 @@ import static com.google.api.gax.rpc.testing.FakeBatchableApi.callLabeledIntSquarer; import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertWithMessage; +import static org.mockito.Mockito.when; import com.google.api.core.ApiFuture; import com.google.api.core.ApiFutures; @@ -75,6 +76,8 @@ import org.junit.function.ThrowingRunnable; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; +import org.mockito.ArgumentCaptor; +import org.mockito.Mockito; import org.threeten.bp.Duration; @RunWith(JUnit4.class) @@ -132,9 +135,10 @@ public void testSendOutstanding() { SQUARER_BATCHING_DESC_V2, new LabeledIntSquarerCallable() { @Override - public ApiFuture> futureCall(LabeledIntList request) { + public ApiFuture> futureCall( + LabeledIntList request, ApiCallContext context) { callableCounter.incrementAndGet(); - return super.futureCall(request); + return super.futureCall(request, context); } }, labeledIntList, @@ -838,8 +842,23 @@ public void testThrottlingBlocking() throws Exception { .setMaxOutstandingElementCount(1L) .build()); ExecutorService executor = Executors.newSingleThreadExecutor(); + + ApiCallContext callContext = Mockito.mock(ApiCallContext.class); + ArgumentCaptor> key = + ArgumentCaptor.forClass(ApiCallContext.Key.class); + ArgumentCaptor value = ArgumentCaptor.forClass(Long.class); + when(callContext.withOption(key.capture(), value.capture())).thenReturn(callContext); + long throttledTime = 10; + try (final Batcher batcher = - createDefaultBatcherImpl(settings, flowController)) { + new BatcherImpl<>( + SQUARER_BATCHING_DESC_V2, + callLabeledIntSquarer, + labeledIntList, + settings, + EXECUTOR, + flowController, + callContext)) { flowController.reserve(1, 1); Future future = executor.submit( @@ -851,6 +870,7 @@ public void run() { }); try { future.get(10, TimeUnit.MILLISECONDS); + Thread.sleep(throttledTime); assertWithMessage("adding elements to batcher should be blocked by FlowControlled").fail(); } catch (TimeoutException e) { // expected @@ -861,6 +881,9 @@ public void run() { } catch (TimeoutException e) { assertWithMessage("adding elements to batcher should not be blocked").fail(); } + // Verify that throttled time is recorded in ApiCallContext + assertThat(key.getValue()).isSameInstanceAs(Batcher.THROTTLED_TIME_KEY); + assertThat(value.getValue()).isAtLeast(throttledTime); } finally { executor.shutdownNow(); } From d5c10c66581e00f6449787502057a2fcc576bf70 Mon Sep 17 00:00:00 2001 From: Chanseok Oh Date: Fri, 29 Oct 2021 11:35:04 -0400 Subject: [PATCH 13/15] chore: add Cloud Java team to CODEOWNERS (#1547) --- .github/CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index f45d2c83e..a1d58a77c 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -4,4 +4,4 @@ # For syntax help see: # https://help.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners#codeowners-syntax -* @googleapis/actools-java @googleapis/yoshi-java +* @googleapis/actools-java @googleapis/yoshi-java @googleapis/cloud-java-team-teamsync From 19a77a4f6c62e84bba4879690992bbc494730d23 Mon Sep 17 00:00:00 2001 From: Mattie Fu Date: Wed, 3 Nov 2021 11:05:37 -0400 Subject: [PATCH 14/15] fix: call ResponseMetadataHanlder#onTrailers before calling onClose (#1549) --- .../com/google/api/gax/grpc/GrpcMetadataHandlerInterceptor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcMetadataHandlerInterceptor.java b/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcMetadataHandlerInterceptor.java index 1edf2eb5b..e405336c2 100644 --- a/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcMetadataHandlerInterceptor.java +++ b/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcMetadataHandlerInterceptor.java @@ -73,8 +73,8 @@ public void onHeaders(Metadata headers) { @Override public void onClose(Status status, Metadata trailers) { - super.onClose(status, trailers); metadataHandler.onTrailers(trailers); + super.onClose(status, trailers); } }; super.start(forwardingResponseListener, headers); From b00a13040bc1476abbbed895de22ab8349911f58 Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Wed, 10 Nov 2021 07:10:56 -0500 Subject: [PATCH 15/15] chore: release 2.7.0 (#1532) Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> --- CHANGELOG.md | 16 ++++++++++++++++ README.md | 12 ++++++------ benchmark/build.gradle | 2 +- build.gradle | 2 +- dependencies.properties | 8 ++++---- gax-bom/build.gradle | 2 +- gax-bom/pom.xml | 14 +++++++------- gax-grpc/build.gradle | 2 +- gax-httpjson/build.gradle | 2 +- gax/build.gradle | 2 +- samples/pom.xml | 4 ++-- versions.txt | 10 +++++----- 12 files changed, 46 insertions(+), 30 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 45cdbcfa4..0515a8ff6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,21 @@ # Changelog +## [2.7.0](https://www.github.com/googleapis/gax-java/compare/v2.6.0...v2.7.0) (2021-11-03) + + +### Features + +* add batch throttled time to tracer ([#1463](https://www.github.com/googleapis/gax-java/issues/1463)) ([14c25cd](https://www.github.com/googleapis/gax-java/commit/14c25cdfae2c0602d99fcd07c9067138fc172a7f)) +* add google-c2p dependence to DirectPath ([#1521](https://www.github.com/googleapis/gax-java/issues/1521)) ([d4222e7](https://www.github.com/googleapis/gax-java/commit/d4222e757d35e874a57d030f2f964e8d61c71d6d)) +* next release from main branch is 2.7.0 ([#1530](https://www.github.com/googleapis/gax-java/issues/1530)) ([a96953e](https://www.github.com/googleapis/gax-java/commit/a96953e2c889ad9195b420ce5ae49b20258fb6ea)) +* pass request in ApiTracer ([#1491](https://www.github.com/googleapis/gax-java/issues/1491)) ([27bf265](https://www.github.com/googleapis/gax-java/commit/27bf2655120972d929e6118b73d8d556b0440fcf)) + + +### Bug Fixes + +* call ResponseMetadataHanlder#onTrailers before calling onClose ([#1549](https://www.github.com/googleapis/gax-java/issues/1549)) ([19a77a4](https://www.github.com/googleapis/gax-java/commit/19a77a4f6c62e84bba4879690992bbc494730d23)) +* declare depenencies of API surfaces as api ([#1535](https://www.github.com/googleapis/gax-java/issues/1535)) ([725414f](https://www.github.com/googleapis/gax-java/commit/725414f4ccb1e5ac4625790ea990c6c8dfa4fdff)) + ## [2.6.0](https://www.github.com/googleapis/gax-java/compare/v2.5.3...v2.6.0) (2021-10-15) diff --git a/README.md b/README.md index 84ea27472..0813b4d4d 100644 --- a/README.md +++ b/README.md @@ -29,27 +29,27 @@ If you are using Maven, add this to your pom.xml file com.google.api gax - 2.6.0 + 2.7.0 com.google.api gax-grpc - 2.6.0 + 2.7.0 ``` If you are using Gradle, add this to your dependencies ```Groovy -compile 'com.google.api:gax:2.6.0', - 'com.google.api:gax-grpc:2.6.0' +compile 'com.google.api:gax:2.7.0', + 'com.google.api:gax-grpc:2.7.0' ``` If you are using SBT, add this to your dependencies ```Scala -libraryDependencies += "com.google.api" % "gax" % "2.6.0" -libraryDependencies += "com.google.api" % "gax-grpc" % "2.6.0" +libraryDependencies += "com.google.api" % "gax" % "2.7.0" +libraryDependencies += "com.google.api" % "gax-grpc" % "2.7.0" ``` [//]: # ({x-version-update-end}) diff --git a/benchmark/build.gradle b/benchmark/build.gradle index 113563e83..6384e15fb 100644 --- a/benchmark/build.gradle +++ b/benchmark/build.gradle @@ -2,7 +2,7 @@ plugins { id 'me.champeau.gradle.jmh' version '0.5.3' } -project.version = "0.76.1-SNAPSHOT" // {x-version-update:benchmark:current} +project.version = "0.77.0" // {x-version-update:benchmark:current} dependencies { implementation project(':gax') diff --git a/build.gradle b/build.gradle index 385bb0d29..849b52e46 100644 --- a/build.gradle +++ b/build.gradle @@ -11,7 +11,7 @@ plugins { } // TODO: Populate this from dependencies.properties version property (for proper Gradle-Bazel sync) -project.version = "2.6.1-SNAPSHOT" // {x-version-update:gax:current} +project.version = "2.7.0" // {x-version-update:gax:current} allprojects { group = 'com.google.api' diff --git a/dependencies.properties b/dependencies.properties index d649e211e..10e4b6086 100644 --- a/dependencies.properties +++ b/dependencies.properties @@ -8,16 +8,16 @@ # Versions of oneself # {x-version-update-start:gax:current} -version.gax=2.6.1-SNAPSHOT +version.gax=2.7.0 # {x-version-update-end} # {x-version-update-start:gax:current} -version.gax_grpc=2.6.1-SNAPSHOT +version.gax_grpc=2.7.0 # {x-version-update-end} # {x-version-update-start:gax:current} -version.gax_bom=2.6.1-SNAPSHOT +version.gax_bom=2.7.0 # {x-version-update-end} # {x-version-update-start:gax-httpjson:current} -version.gax_httpjson=0.91.1-SNAPSHOT +version.gax_httpjson=0.92.0 # {x-version-update-end} # Versions for dependencies which actual artifacts differ between Bazel and Gradle. diff --git a/gax-bom/build.gradle b/gax-bom/build.gradle index 1f50443ed..272a09121 100644 --- a/gax-bom/build.gradle +++ b/gax-bom/build.gradle @@ -5,7 +5,7 @@ plugins { archivesBaseName = 'gax-bom' -project.version = "2.6.1-SNAPSHOT" // {x-version-update:gax-bom:current} +project.version = "2.7.0" // {x-version-update:gax-bom:current} def mavenJavaDir = "$buildDir/publications/mavenJava" def mavenJavaBomOutputFile = file(mavenJavaDir + '/pom-default.xml') diff --git a/gax-bom/pom.xml b/gax-bom/pom.xml index e0bbee3d2..d83a4fcfc 100644 --- a/gax-bom/pom.xml +++ b/gax-bom/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.google.api gax-bom - 2.6.1-SNAPSHOT + 2.7.0 pom GAX (Google Api eXtensions) for Java Google Api eXtensions for Java @@ -33,34 +33,34 @@ com.google.api gax - 2.6.1-SNAPSHOT + 2.7.0 com.google.api gax - 2.6.1-SNAPSHOT + 2.7.0 testlib com.google.api gax-grpc - 2.6.1-SNAPSHOT + 2.7.0 com.google.api gax-grpc - 2.6.1-SNAPSHOT + 2.7.0 testlib com.google.api gax-httpjson - 0.91.1-SNAPSHOT + 0.92.0 com.google.api gax-httpjson - 0.91.1-SNAPSHOT + 0.92.0 testlib diff --git a/gax-grpc/build.gradle b/gax-grpc/build.gradle index f08a01f99..faa7912b6 100644 --- a/gax-grpc/build.gradle +++ b/gax-grpc/build.gradle @@ -1,7 +1,7 @@ archivesBaseName = 'gax-grpc' // TODO: Populate this from dependencies.properties version property (for proper Gradle-Bazel sync) -project.version = "2.6.1-SNAPSHOT" // {x-version-update:gax-grpc:current} +project.version = "2.7.0" // {x-version-update:gax-grpc:current} dependencies { api(project(':gax'), diff --git a/gax-httpjson/build.gradle b/gax-httpjson/build.gradle index b31c4d826..863f3bd65 100644 --- a/gax-httpjson/build.gradle +++ b/gax-httpjson/build.gradle @@ -1,7 +1,7 @@ archivesBaseName = 'gax-httpjson' // TODO: Populate this from dependencies.properties version property (for proper Gradle-Bazel sync) -project.version = "0.91.1-SNAPSHOT" // {x-version-update:gax-httpjson:current} +project.version = "0.92.0" // {x-version-update:gax-httpjson:current} dependencies { api(project(':gax'), diff --git a/gax/build.gradle b/gax/build.gradle index 2c0b779ca..ae94e1a05 100644 --- a/gax/build.gradle +++ b/gax/build.gradle @@ -1,7 +1,7 @@ archivesBaseName = "gax" // TODO: Populate this from dependencies.properties version property (for proper Gradle-Bazel sync) -project.version = "2.6.1-SNAPSHOT" // {x-version-update:gax:current} +project.version = "2.7.0" // {x-version-update:gax:current} dependencies { api(libraries['maven.com_google_api_api_common'], diff --git a/samples/pom.xml b/samples/pom.xml index 4f7519a11..51c4a67c3 100644 --- a/samples/pom.xml +++ b/samples/pom.xml @@ -14,13 +14,13 @@ com.google.api gax - 2.6.1-SNAPSHOT + 2.7.0 com.google.api gax-grpc - 2.6.1-SNAPSHOT + 2.7.0 com.google.auto.value diff --git a/versions.txt b/versions.txt index bea7bc4b7..56ddc2969 100644 --- a/versions.txt +++ b/versions.txt @@ -1,8 +1,8 @@ # Format: # module:released-version:current-version -gax:2.6.0:2.6.1-SNAPSHOT -gax-bom:2.6.0:2.6.1-SNAPSHOT -gax-grpc:2.6.0:2.6.1-SNAPSHOT -gax-httpjson:0.91.0:0.91.1-SNAPSHOT -benchmark:0.76.0:0.76.1-SNAPSHOT +gax:2.7.0:2.7.0 +gax-bom:2.7.0:2.7.0 +gax-grpc:2.7.0:2.7.0 +gax-httpjson:0.92.0:0.92.0 +benchmark:0.77.0:0.77.0