From 180a79bc51a971c6ab5329ae83422e13cf0eb60d Mon Sep 17 00:00:00 2001 From: Jeff Ching Date: Mon, 25 Oct 2021 16:15:27 -0700 Subject: [PATCH 1/7] ci: configure the protected branch 2.1.x (#1126) * ci: configure the protected branch 2.1.x * fix(java): java 17 dependency arguments manual application of https://github.com/googleapis/synthtool/pull/1266 Co-authored-by: BenWhitehead --- .github/workflows/ci.yaml | 132 ++++++++++++++++++++------------------ .kokoro/dependencies.sh | 10 ++- 2 files changed, 73 insertions(+), 69 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 2425d7234f..db87c6dcbf 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -1,86 +1,92 @@ -on: +'on': push: branches: - - main - pull_request: + - 2.1.x + pull_request: null name: ci jobs: units: runs-on: ubuntu-latest strategy: matrix: - java: [8, 11, 17] + java: + - 8 + - 11 + - 17 steps: - - uses: actions/checkout@v2 - - uses: stCarolas/setup-maven@v4 - with: - maven-version: 3.8.1 - - uses: actions/setup-java@v2 - with: - distribution: zulu - java-version: ${{matrix.java}} - - run: java -version - - run: .kokoro/build.sh - env: - JOB_TYPE: test + - uses: actions/checkout@v2 + - uses: stCarolas/setup-maven@v4 + with: + maven-version: 3.8.1 + - uses: actions/setup-java@v2 + with: + distribution: zulu + java-version: ${{matrix.java}} + - run: java -version + - run: .kokoro/build.sh + env: + JOB_TYPE: test windows: runs-on: windows-latest steps: - - uses: actions/checkout@v2 - - uses: stCarolas/setup-maven@v4 - with: - maven-version: 3.8.1 - - uses: actions/setup-java@v2 - with: - distribution: zulu - java-version: 8 - - run: java -version - - run: .kokoro/build.bat - env: - JOB_TYPE: test + - uses: actions/checkout@v2 + - uses: stCarolas/setup-maven@v4 + with: + maven-version: 3.8.1 + - uses: actions/setup-java@v2 + with: + distribution: zulu + java-version: 8 + - run: java -version + - run: .kokoro/build.bat + env: + JOB_TYPE: test dependencies: runs-on: ubuntu-latest strategy: matrix: - java: [8, 11, 17] + java: + - 8 + - 11 + - 17 steps: - - uses: actions/checkout@v2 - - uses: stCarolas/setup-maven@v4 - with: - maven-version: 3.8.1 - - uses: actions/setup-java@v2 - with: - distribution: zulu - java-version: ${{matrix.java}} - - run: java -version - - run: .kokoro/dependencies.sh + - uses: actions/checkout@v2 + - uses: stCarolas/setup-maven@v4 + with: + maven-version: 3.8.1 + - uses: actions/setup-java@v2 + with: + distribution: zulu + java-version: ${{matrix.java}} + - run: java -version + - run: .kokoro/dependencies.sh lint: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - uses: stCarolas/setup-maven@v4 - with: - maven-version: 3.8.1 - - uses: actions/setup-java@v2 - with: - distribution: zulu - java-version: 8 - - run: java -version - - run: .kokoro/build.sh - env: - JOB_TYPE: lint + - uses: actions/checkout@v2 + - uses: stCarolas/setup-maven@v4 + with: + maven-version: 3.8.1 + - uses: actions/setup-java@v2 + with: + distribution: zulu + java-version: 8 + - run: java -version + - run: .kokoro/build.sh + env: + JOB_TYPE: lint clirr: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - uses: stCarolas/setup-maven@v4 - with: - maven-version: 3.8.1 - - uses: actions/setup-java@v2 - with: - distribution: zulu - java-version: 8 - - run: java -version - - run: .kokoro/build.sh - env: - JOB_TYPE: clirr + - uses: actions/checkout@v2 + - uses: stCarolas/setup-maven@v4 + with: + maven-version: 3.8.1 + - uses: actions/setup-java@v2 + with: + distribution: zulu + java-version: 8 + - run: java -version + - run: .kokoro/build.sh + env: + JOB_TYPE: clirr diff --git a/.kokoro/dependencies.sh b/.kokoro/dependencies.sh index 9a5105d7eb..d7476cfe97 100755 --- a/.kokoro/dependencies.sh +++ b/.kokoro/dependencies.sh @@ -38,15 +38,13 @@ function determineMavenOpts() { | sed -E 's/^(1\.[0-9]\.0).*$/\1/g' ) - case $javaVersion in - "17") + if [[ $javaVersion == 17* ]] + then # MaxPermSize is no longer supported as of jdk 17 echo -n "-Xmx1024m" - ;; - *) + else echo -n "-Xmx1024m -XX:MaxPermSize=128m" - ;; - esac + fi } export MAVEN_OPTS=$(determineMavenOpts) From dfcc7bac247d9673a0ca92bf9c7e11fd42ef907a Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Mon, 25 Oct 2021 23:36:15 +0000 Subject: [PATCH 2/7] chore(2.1.x): release 2.1.10-SNAPSHOT (#1129) :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). --- gapic-google-cloud-storage-v2/pom.xml | 4 ++-- google-cloud-storage/pom.xml | 4 ++-- grpc-google-cloud-storage-v2/pom.xml | 4 ++-- pom.xml | 8 ++++---- proto-google-cloud-storage-v2/pom.xml | 4 ++-- versions.txt | 8 ++++---- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/gapic-google-cloud-storage-v2/pom.xml b/gapic-google-cloud-storage-v2/pom.xml index 92ed97b876..5dca3476ad 100644 --- a/gapic-google-cloud-storage-v2/pom.xml +++ b/gapic-google-cloud-storage-v2/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc gapic-google-cloud-storage-v2 - 2.1.9-alpha + 2.1.10-alpha-SNAPSHOT gapic-google-cloud-storage-v2 GRPC library for gapic-google-cloud-storage-v2 com.google.cloud google-cloud-storage-parent - 2.1.9 + 2.1.10-SNAPSHOT diff --git a/google-cloud-storage/pom.xml b/google-cloud-storage/pom.xml index 00434a0549..4429eca26d 100644 --- a/google-cloud-storage/pom.xml +++ b/google-cloud-storage/pom.xml @@ -2,7 +2,7 @@ 4.0.0 google-cloud-storage - 2.1.9 + 2.1.10-SNAPSHOT jar Google Cloud Storage https://github.com/googleapis/java-storage @@ -12,7 +12,7 @@ com.google.cloud google-cloud-storage-parent - 2.1.9 + 2.1.10-SNAPSHOT google-cloud-storage diff --git a/grpc-google-cloud-storage-v2/pom.xml b/grpc-google-cloud-storage-v2/pom.xml index 6a51bd0aa2..55f2254a99 100644 --- a/grpc-google-cloud-storage-v2/pom.xml +++ b/grpc-google-cloud-storage-v2/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc grpc-google-cloud-storage-v2 - 2.1.9-alpha + 2.1.10-alpha-SNAPSHOT grpc-google-cloud-storage-v2 GRPC library for grpc-google-cloud-storage-v2 com.google.cloud google-cloud-storage-parent - 2.1.9 + 2.1.10-SNAPSHOT diff --git a/pom.xml b/pom.xml index 32ec002c86..2d53736fea 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.google.cloud google-cloud-storage-parent pom - 2.1.9 + 2.1.10-SNAPSHOT Storage Parent https://github.com/googleapis/java-storage @@ -100,17 +100,17 @@ com.google.api.grpc proto-google-cloud-storage-v2 - 2.1.9-alpha + 2.1.10-alpha-SNAPSHOT com.google.api.grpc grpc-google-cloud-storage-v2 - 2.1.9-alpha + 2.1.10-alpha-SNAPSHOT com.google.api.grpc gapic-google-cloud-storage-v2 - 2.1.9-alpha + 2.1.10-alpha-SNAPSHOT com.google.cloud diff --git a/proto-google-cloud-storage-v2/pom.xml b/proto-google-cloud-storage-v2/pom.xml index 1779d69e47..b82e952b52 100644 --- a/proto-google-cloud-storage-v2/pom.xml +++ b/proto-google-cloud-storage-v2/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc proto-google-cloud-storage-v2 - 2.1.9-alpha + 2.1.10-alpha-SNAPSHOT proto-google-cloud-storage-v2 PROTO library for proto-google-cloud-storage-v2 com.google.cloud google-cloud-storage-parent - 2.1.9 + 2.1.10-SNAPSHOT diff --git a/versions.txt b/versions.txt index 6ae823d105..6b2c4f5684 100644 --- a/versions.txt +++ b/versions.txt @@ -1,7 +1,7 @@ # Format: # module:released-version:current-version -google-cloud-storage:2.1.9:2.1.9 -gapic-google-cloud-storage-v2:2.1.9-alpha:2.1.9-alpha -grpc-google-cloud-storage-v2:2.1.9-alpha:2.1.9-alpha -proto-google-cloud-storage-v2:2.1.9-alpha:2.1.9-alpha +google-cloud-storage:2.1.9:2.1.10-SNAPSHOT +gapic-google-cloud-storage-v2:2.1.9-alpha:2.1.10-alpha-SNAPSHOT +grpc-google-cloud-storage-v2:2.1.9-alpha:2.1.10-alpha-SNAPSHOT +proto-google-cloud-storage-v2:2.1.9-alpha:2.1.10-alpha-SNAPSHOT From 69dd889a5d5f175fd72f8cf1fd065448676a005c Mon Sep 17 00:00:00 2001 From: Frank Natividad Date: Tue, 15 Feb 2022 08:21:36 -0800 Subject: [PATCH 3/7] test: skip testHmacKey test (#1239) (#1250) --- .../test/java/com/google/cloud/storage/it/ITStorageTest.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITStorageTest.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITStorageTest.java index 73ef7e9b8f..befdf6a346 100644 --- a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITStorageTest.java +++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITStorageTest.java @@ -147,6 +147,7 @@ import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.junit.AfterClass; import org.junit.BeforeClass; +import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TestName; @@ -2423,6 +2424,7 @@ public void testBlobAcl() { } } + @Ignore // TODO(#1240): Remove once HMAC Key IT are fixed @Test public void testHmacKey() { ServiceAccount serviceAccount = ServiceAccount.of(System.getenv("IT_SERVICE_ACCOUNT_EMAIL")); From 96985504c2842966824594db1e5929def99a44b7 Mon Sep 17 00:00:00 2001 From: Frank Natividad Date: Tue, 15 Feb 2022 10:49:29 -0800 Subject: [PATCH 4/7] fix: do not cause a failure when encountering no bindings (#1177) (#1248) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Thank you for opening a Pull Request! Before submitting your PR, there are a few things you can do to make sure it goes smoothly: - [x] Make sure to open an issue as a [bug/issue](https://github.com/googleapis/java-storage/issues/new/choose) before writing your code! That way we can discuss the change, evaluate designs, and agree on the general idea - [x] Ensure the tests and linter pass - [x] Appropriate docs were updated (if necessary) Fixes #1175 ☕️ --- .../java/com/google/cloud/storage/PolicyHelper.java | 6 ++---- .../main/java/com/google/cloud/storage/Storage.java | 8 ++++++++ .../com/google/cloud/storage/PolicyHelperTest.java | 10 +++++++--- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/PolicyHelper.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/PolicyHelper.java index e198d853bf..ca3e8bc31a 100644 --- a/google-cloud-storage/src/main/java/com/google/cloud/storage/PolicyHelper.java +++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/PolicyHelper.java @@ -34,8 +34,8 @@ class PolicyHelper { static Policy convertFromApiPolicy(com.google.api.services.storage.model.Policy apiPolicy) { Policy.Builder policyBuilder = Policy.newBuilder(); List bindings = apiPolicy.getBindings(); + ImmutableList.Builder coreBindings = ImmutableList.builder(); if (null != bindings && !bindings.isEmpty()) { - ImmutableList.Builder coreBindings = ImmutableList.builder(); for (Bindings binding : bindings) { Binding.Builder bindingBuilder = Binding.newBuilder(); bindingBuilder.setRole(binding.getRole()); @@ -49,10 +49,8 @@ static Policy convertFromApiPolicy(com.google.api.services.storage.model.Policy } coreBindings.add(bindingBuilder.build()); } - policyBuilder.setBindings(coreBindings.build()); - } else { - throw new IllegalStateException("Missing required bindings."); } + policyBuilder.setBindings(coreBindings.build()); return policyBuilder.setEtag(apiPolicy.getEtag()).setVersion(apiPolicy.getVersion()).build(); } diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/Storage.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/Storage.java index 02bdb8ddab..2118599457 100644 --- a/google-cloud-storage/src/main/java/com/google/cloud/storage/Storage.java +++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/Storage.java @@ -3540,6 +3540,11 @@ HmacKeyMetadata updateHmacKeyState( /** * Gets the IAM policy for the provided bucket. * + *

It's possible for bindings to be empty and instead have permissions inherited through + * Project or Organization IAM Policies. To prevent corrupting policies when you update an IAM + * policy with {@code Storage.setIamPolicy}, the ETAG value is used to perform optimistic + * concurrency. + * *

Example of getting the IAM policy for a bucket. * *

{@code
@@ -3556,6 +3561,9 @@ HmacKeyMetadata updateHmacKeyState(
   /**
    * Updates the IAM policy on the specified bucket.
    *
+   * 

To prevent corrupting policies when you update an IAM policy with {@code + * Storage.setIamPolicy}, the ETAG value is used to perform optimistic concurrency. + * *

Example of updating the IAM policy on a bucket. * *

{@code
diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/PolicyHelperTest.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/PolicyHelperTest.java
index dd5c0f78a6..a34538c11b 100644
--- a/google-cloud-storage/src/test/java/com/google/cloud/storage/PolicyHelperTest.java
+++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/PolicyHelperTest.java
@@ -65,11 +65,15 @@ public void testEquivalence() {
     assertTrue(new ApiPolicyMatcher(apiPolicy).matches(actualApiPolicy));
   }
 
-  @Test(expected = IllegalStateException.class)
+  @Test
   public void testApiPolicyWithoutBinding() {
     List bindings = null;
     com.google.api.services.storage.model.Policy apiPolicy =
-        new com.google.api.services.storage.model.Policy().setBindings(bindings).setEtag(ETAG);
-    PolicyHelper.convertFromApiPolicy(apiPolicy);
+        new com.google.api.services.storage.model.Policy()
+            .setBindings(bindings)
+            .setEtag(ETAG)
+            .setVersion(1);
+    Policy policy = PolicyHelper.convertFromApiPolicy(apiPolicy);
+    assertEquals(policy.getBindings().size(), 0);
   }
 }

From e48c4e525abe5aa0f731b6f8012834ef1720e01d Mon Sep 17 00:00:00 2001
From: Frank Natividad 
Date: Tue, 15 Feb 2022 10:54:31 -0800
Subject: [PATCH 5/7] fix: cherry pick PR#1160 (#1247)

Co-authored-by: JesseLovelace <43148100+JesseLovelace@users.noreply.github.com>
---
 .../clirr-ignored-differences.xml             |  5 ++
 .../com/google/cloud/storage/BucketInfo.java  | 52 +++++++++++++------
 .../google/cloud/storage/BucketInfoTest.java  | 15 ++++++
 3 files changed, 56 insertions(+), 16 deletions(-)

diff --git a/google-cloud-storage/clirr-ignored-differences.xml b/google-cloud-storage/clirr-ignored-differences.xml
index 85c4887d6f..1fe6a791f2 100644
--- a/google-cloud-storage/clirr-ignored-differences.xml
+++ b/google-cloud-storage/clirr-ignored-differences.xml
@@ -36,4 +36,9 @@
         com.google.api.services.storage.model.StorageObject queryCompletedResumableUpload(java.lang.String, long)
         7012
     
+    
+        com/google/cloud/storage/BucketInfo$LifecycleRule$LifecycleAction
+        BucketInfo$LifecycleRule$LifecycleAction()
+        7004
+    
 
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/BucketInfo.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/BucketInfo.java
index 83a836f785..2404a7c1e9 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/BucketInfo.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/BucketInfo.java
@@ -548,8 +548,13 @@ static LifecycleRule fromPb(Rule rule) {
                   StorageClass.valueOf(action.getStorageClass()));
           break;
         default:
-          throw new UnsupportedOperationException(
-              "The specified lifecycle action " + action.getType() + " is not currently supported");
+          log.warning(
+              "The lifecycle action "
+                  + action.getType()
+                  + " is not supported by this version of the library. "
+                  + "Attempting to update with this rule may cause errors. Please "
+                  + "update to the latest version of google-cloud-storage.");
+          lifecycleAction = LifecycleAction.newLifecycleAction("Unknown action");
       }
 
       Rule.Condition condition = rule.getCondition();
@@ -799,13 +804,21 @@ public LifecycleCondition build() {
     }
 
     /**
-     * Base class for the Action to take when a Lifecycle Condition is met. Specific Actions are
+     * Base class for the Action to take when a Lifecycle Condition is met. Supported Actions are
      * expressed as subclasses of this class, accessed by static factory methods.
      */
-    public abstract static class LifecycleAction implements Serializable {
+    public static class LifecycleAction implements Serializable {
       private static final long serialVersionUID = 5801228724709173284L;
 
-      public abstract String getActionType();
+      private final String actionType;
+
+      public LifecycleAction(String actionType) {
+        this.actionType = actionType;
+      }
+
+      public String getActionType() {
+        return actionType;
+      }
 
       @Override
       public String toString() {
@@ -830,17 +843,24 @@ public static SetStorageClassLifecycleAction newSetStorageClassAction(
           StorageClass storageClass) {
         return new SetStorageClassLifecycleAction(storageClass);
       }
+
+      /**
+       * Creates a new {@code LifecycleAction , with no specific supported action associated with it. This
+       * is only intended as a "backup" for when the library doesn't recognize the type, and should
+       * generally not be used, instead use the supported actions, and upgrade the library if necessary
+       * to get new supported actions.
+       */
+      public static LifecycleAction newLifecycleAction(String actionType) {
+        return new LifecycleAction(actionType);
+      }
     }
 
     public static class DeleteLifecycleAction extends LifecycleAction {
       public static final String TYPE = "Delete";
       private static final long serialVersionUID = -2050986302222644873L;
 
-      private DeleteLifecycleAction() {}
-
-      @Override
-      public String getActionType() {
-        return TYPE;
+      private DeleteLifecycleAction() {
+        super(TYPE);
       }
     }
 
@@ -851,14 +871,10 @@ public static class SetStorageClassLifecycleAction extends LifecycleAction {
       private final StorageClass storageClass;
 
       private SetStorageClassLifecycleAction(StorageClass storageClass) {
+        super(TYPE);
         this.storageClass = storageClass;
       }
 
-      @Override
-      public String getActionType() {
-        return TYPE;
-      }
-
       @Override
       public String toString() {
         return MoreObjects.toStringHelper(this)
@@ -1007,7 +1023,11 @@ static class RawDeleteRule extends DeleteRule {
 
     @Override
     void populateCondition(Rule.Condition condition) {
-      throw new UnsupportedOperationException();
+      log.warning(
+          "The lifecycle condition "
+              + condition
+              + " is not currently supported. Please update to the latest version of google-cloud-java."
+              + " Also, use LifecycleRule rather than the deprecated DeleteRule.");
     }
 
     private void writeObject(ObjectOutputStream out) throws IOException {
diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/BucketInfoTest.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/BucketInfoTest.java
index c74625a154..2041de556a 100644
--- a/google-cloud-storage/src/test/java/com/google/cloud/storage/BucketInfoTest.java
+++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/BucketInfoTest.java
@@ -314,6 +314,10 @@ public void testDeleteRules() {
     for (DeleteRule delRule : rules) {
       assertEquals(delRule, DeleteRule.fromPb(delRule.toPb()));
     }
+    Rule unsupportedRule =
+        new Rule().setAction(new Rule.Action().setType("This action doesn't exist"));
+    DeleteRule.fromPb(
+        unsupportedRule); // if this doesn't throw an exception, unsupported rules work
   }
 
   @Test
@@ -363,6 +367,17 @@ public void testLifecycleRules() {
     assertEquals(StorageClass.COLDLINE.toString(), lifecycleRule.getAction().getStorageClass());
     assertEquals(30, lifecycleRule.getCondition().getDaysSinceCustomTime().intValue());
     assertNotNull(lifecycleRule.getCondition().getCustomTimeBefore());
+
+    Rule unsupportedRule =
+        new LifecycleRule(
+                LifecycleAction.newLifecycleAction("This action type doesn't exist"),
+                LifecycleCondition.newBuilder().setAge(10).build())
+            .toPb();
+    unsupportedRule.setAction(
+        unsupportedRule.getAction().setType("This action type also doesn't exist"));
+
+    LifecycleRule.fromPb(
+        unsupportedRule); // If this doesn't throw an exception, unsupported rules are working
   }
 
   @Test

From 1608096aec3b5c41f0749f05b5e59ffb4f590222 Mon Sep 17 00:00:00 2001
From: Frank Natividad 
Date: Tue, 15 Feb 2022 13:12:06 -0800
Subject: [PATCH 6/7] Revert "test: skip testHmacKey test (#1239) (#1250)"
 (#1253)

This reverts commit 69dd889a5d5f175fd72f8cf1fd065448676a005c.
---
 .../test/java/com/google/cloud/storage/it/ITStorageTest.java    | 2 --
 1 file changed, 2 deletions(-)

diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITStorageTest.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITStorageTest.java
index befdf6a346..73ef7e9b8f 100644
--- a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITStorageTest.java
+++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITStorageTest.java
@@ -147,7 +147,6 @@
 import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
-import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TestName;
@@ -2424,7 +2423,6 @@ public void testBlobAcl() {
     }
   }
 
-  @Ignore // TODO(#1240): Remove once HMAC Key IT are fixed
   @Test
   public void testHmacKey() {
     ServiceAccount serviceAccount = ServiceAccount.of(System.getenv("IT_SERVICE_ACCOUNT_EMAIL"));

From 06be418ec8d3ba6db3408924fc5b419a7609fe5f Mon Sep 17 00:00:00 2001
From: "release-please[bot]"
 <55107282+release-please[bot]@users.noreply.github.com>
Date: Thu, 17 Feb 2022 15:27:43 -0500
Subject: [PATCH 7/7] chore(2.1.x): release 2.1.10 (#1251)

Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>
---
 CHANGELOG.md                          | 8 ++++++++
 gapic-google-cloud-storage-v2/pom.xml | 4 ++--
 google-cloud-storage/pom.xml          | 4 ++--
 grpc-google-cloud-storage-v2/pom.xml  | 4 ++--
 pom.xml                               | 8 ++++----
 proto-google-cloud-storage-v2/pom.xml | 4 ++--
 versions.txt                          | 8 ++++----
 7 files changed, 24 insertions(+), 16 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 89111d0cdf..e7d8c7087a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,13 @@
 # Changelog
 
+### [2.1.10](https://github.com/googleapis/java-storage/compare/v2.1.9...v2.1.10) (2022-02-15)
+
+
+### Bug Fixes
+
+* cherry pick PR[#1160](https://github.com/googleapis/java-storage/issues/1160) ([#1247](https://github.com/googleapis/java-storage/issues/1247)) ([e48c4e5](https://github.com/googleapis/java-storage/commit/e48c4e525abe5aa0f731b6f8012834ef1720e01d))
+* do not cause a failure when encountering no bindings ([#1177](https://github.com/googleapis/java-storage/issues/1177)) ([#1248](https://github.com/googleapis/java-storage/issues/1248)) ([9698550](https://github.com/googleapis/java-storage/commit/96985504c2842966824594db1e5929def99a44b7))
+
 ### [2.1.9](https://www.github.com/googleapis/java-storage/compare/v2.1.8...v2.1.9) (2021-10-19)
 
 
diff --git a/gapic-google-cloud-storage-v2/pom.xml b/gapic-google-cloud-storage-v2/pom.xml
index 5dca3476ad..4203bc447e 100644
--- a/gapic-google-cloud-storage-v2/pom.xml
+++ b/gapic-google-cloud-storage-v2/pom.xml
@@ -4,13 +4,13 @@
   4.0.0
   com.google.api.grpc
   gapic-google-cloud-storage-v2
-  2.1.10-alpha-SNAPSHOT
+  2.1.10-alpha
   gapic-google-cloud-storage-v2
   GRPC library for gapic-google-cloud-storage-v2
   
     com.google.cloud
     google-cloud-storage-parent
-    2.1.10-SNAPSHOT
+    2.1.10
   
   
     
diff --git a/google-cloud-storage/pom.xml b/google-cloud-storage/pom.xml
index 4429eca26d..024dac52b5 100644
--- a/google-cloud-storage/pom.xml
+++ b/google-cloud-storage/pom.xml
@@ -2,7 +2,7 @@
 
   4.0.0
   google-cloud-storage
-  2.1.10-SNAPSHOT
+  2.1.10
   jar
   Google Cloud Storage
   https://github.com/googleapis/java-storage
@@ -12,7 +12,7 @@
   
     com.google.cloud
     google-cloud-storage-parent
-    2.1.10-SNAPSHOT
+    2.1.10
   
   
     google-cloud-storage
diff --git a/grpc-google-cloud-storage-v2/pom.xml b/grpc-google-cloud-storage-v2/pom.xml
index 55f2254a99..b7b10b2121 100644
--- a/grpc-google-cloud-storage-v2/pom.xml
+++ b/grpc-google-cloud-storage-v2/pom.xml
@@ -4,13 +4,13 @@
   4.0.0
   com.google.api.grpc
   grpc-google-cloud-storage-v2
-  2.1.10-alpha-SNAPSHOT
+  2.1.10-alpha
   grpc-google-cloud-storage-v2
   GRPC library for grpc-google-cloud-storage-v2
   
     com.google.cloud
     google-cloud-storage-parent
-    2.1.10-SNAPSHOT
+    2.1.10
   
   
     
diff --git a/pom.xml b/pom.xml
index 2d53736fea..de4febd510 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
   com.google.cloud
   google-cloud-storage-parent
   pom
-  2.1.10-SNAPSHOT
+  2.1.10
   Storage Parent
   https://github.com/googleapis/java-storage
   
@@ -100,17 +100,17 @@
       
         com.google.api.grpc
         proto-google-cloud-storage-v2
-        2.1.10-alpha-SNAPSHOT
+        2.1.10-alpha
       
       
         com.google.api.grpc
         grpc-google-cloud-storage-v2
-        2.1.10-alpha-SNAPSHOT
+        2.1.10-alpha
       
       
         com.google.api.grpc
         gapic-google-cloud-storage-v2
-        2.1.10-alpha-SNAPSHOT
+        2.1.10-alpha
       
       
         com.google.cloud
diff --git a/proto-google-cloud-storage-v2/pom.xml b/proto-google-cloud-storage-v2/pom.xml
index b82e952b52..90ceb522ea 100644
--- a/proto-google-cloud-storage-v2/pom.xml
+++ b/proto-google-cloud-storage-v2/pom.xml
@@ -4,13 +4,13 @@
   4.0.0
   com.google.api.grpc
   proto-google-cloud-storage-v2
-  2.1.10-alpha-SNAPSHOT
+  2.1.10-alpha
   proto-google-cloud-storage-v2
   PROTO library for proto-google-cloud-storage-v2
   
     com.google.cloud
     google-cloud-storage-parent
-    2.1.10-SNAPSHOT
+    2.1.10
   
   
     
diff --git a/versions.txt b/versions.txt
index 6b2c4f5684..b3af432bdd 100644
--- a/versions.txt
+++ b/versions.txt
@@ -1,7 +1,7 @@
 # Format:
 # module:released-version:current-version
 
-google-cloud-storage:2.1.9:2.1.10-SNAPSHOT
-gapic-google-cloud-storage-v2:2.1.9-alpha:2.1.10-alpha-SNAPSHOT
-grpc-google-cloud-storage-v2:2.1.9-alpha:2.1.10-alpha-SNAPSHOT
-proto-google-cloud-storage-v2:2.1.9-alpha:2.1.10-alpha-SNAPSHOT
+google-cloud-storage:2.1.10:2.1.10
+gapic-google-cloud-storage-v2:2.1.10-alpha:2.1.10-alpha
+grpc-google-cloud-storage-v2:2.1.10-alpha:2.1.10-alpha
+proto-google-cloud-storage-v2:2.1.10-alpha:2.1.10-alpha